about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml27
-rw-r--r--.env.production.sample7
-rw-r--r--CHANGELOG.md143
-rw-r--r--Gemfile32
-rw-r--r--Gemfile.lock273
-rw-r--r--app/controllers/accounts_controller.rb6
-rw-r--r--app/controllers/activitypub/outboxes_controller.rb2
-rw-r--r--app/controllers/admin/dashboard_controller.rb1
-rw-r--r--app/controllers/admin/follow_recommendations_controller.rb53
-rw-r--r--app/controllers/admin/instances_controller.rb44
-rw-r--r--app/controllers/admin/statuses_controller.rb3
-rw-r--r--app/controllers/api/v1/accounts_controller.rb4
-rw-r--r--app/controllers/api/v1/follow_requests_controller.rb2
-rw-r--r--app/controllers/api/v1/push/subscriptions_controller.rb28
-rw-r--r--app/controllers/api/v1/suggestions_controller.rb10
-rw-r--r--app/controllers/api/v2/suggestions_controller.rb19
-rw-r--r--app/controllers/api/web/push_subscriptions_controller.rb25
-rw-r--r--app/controllers/application_controller.rb15
-rw-r--r--app/controllers/auth/confirmations_controller.rb4
-rw-r--r--app/controllers/directories_controller.rb10
-rw-r--r--app/controllers/statuses_controller.rb5
-rw-r--r--app/helpers/admin/action_logs_helper.rb4
-rw-r--r--app/helpers/email_helper.rb18
-rw-r--r--app/helpers/jsonld_helper.rb2
-rw-r--r--app/helpers/settings_helper.rb3
-rw-r--r--app/helpers/statuses_helper.rb80
-rw-r--r--app/javascript/flavours/glitch/actions/importer/normalizer.js1
-rw-r--r--app/javascript/flavours/glitch/actions/search.js1
-rw-r--r--app/javascript/flavours/glitch/actions/suggestions.js24
-rw-r--r--app/javascript/flavours/glitch/actions/timelines.js14
-rw-r--r--app/javascript/flavours/glitch/blurhash.js112
-rw-r--r--app/javascript/flavours/glitch/components/account.js6
-rw-r--r--app/javascript/flavours/glitch/components/logo.js9
-rw-r--r--app/javascript/flavours/glitch/components/media_gallery.js2
-rw-r--r--app/javascript/flavours/glitch/components/modal_root.js18
-rw-r--r--app/javascript/flavours/glitch/components/regeneration_indicator.js4
-rw-r--r--app/javascript/flavours/glitch/components/status.js22
-rw-r--r--app/javascript/flavours/glitch/containers/mastodon.js2
-rw-r--r--app/javascript/flavours/glitch/containers/media_container.js32
-rw-r--r--app/javascript/flavours/glitch/containers/status_container.js8
-rw-r--r--app/javascript/flavours/glitch/features/account/components/header.js2
-rw-r--r--app/javascript/flavours/glitch/features/account_gallery/index.js9
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/search_results.js18
-rw-r--r--app/javascript/flavours/glitch/features/follow_recommendations/components/account.js85
-rw-r--r--app/javascript/flavours/glitch/features/follow_recommendations/index.js109
-rw-r--r--app/javascript/flavours/glitch/features/home_timeline/index.js4
-rw-r--r--app/javascript/flavours/glitch/features/notifications/index.js2
-rw-r--r--app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js28
-rw-r--r--app/javascript/flavours/glitch/features/status/components/detailed_status.js4
-rw-r--r--app/javascript/flavours/glitch/features/status/index.js8
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/audio_modal.js32
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/columns_area.js2
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/media_modal.js83
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/modal_root.js13
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/video_modal.js29
-rw-r--r--app/javascript/flavours/glitch/features/ui/index.js11
-rw-r--r--app/javascript/flavours/glitch/features/video/index.js27
-rw-r--r--app/javascript/flavours/glitch/reducers/suggestions.js8
-rw-r--r--app/javascript/flavours/glitch/reducers/timelines.js7
-rw-r--r--app/javascript/flavours/glitch/styles/components/accounts.scss34
-rw-r--r--app/javascript/flavours/glitch/styles/components/boost.scss36
-rw-r--r--app/javascript/flavours/glitch/styles/components/columns.scss59
-rw-r--r--app/javascript/flavours/glitch/styles/components/index.scss4
-rw-r--r--app/javascript/flavours/glitch/styles/components/media.scss129
-rw-r--r--app/javascript/flavours/glitch/styles/components/modal.scss1
-rw-r--r--app/javascript/flavours/glitch/styles/components/status.scss15
-rw-r--r--app/javascript/flavours/glitch/util/async-components.js4
-rw-r--r--app/javascript/flavours/glitch/util/emoji/index.js2
-rw-r--r--app/javascript/mastodon/actions/importer/normalizer.js8
-rw-r--r--app/javascript/mastodon/actions/onboarding.js13
-rw-r--r--app/javascript/mastodon/actions/search.js1
-rw-r--r--app/javascript/mastodon/actions/suggestions.js24
-rw-r--r--app/javascript/mastodon/actions/timelines.js16
-rw-r--r--app/javascript/mastodon/components/account.js6
-rw-r--r--app/javascript/mastodon/components/logo.js9
-rw-r--r--app/javascript/mastodon/components/media_gallery.js2
-rw-r--r--app/javascript/mastodon/components/regeneration_indicator.js4
-rw-r--r--app/javascript/mastodon/components/status_content.js4
-rw-r--r--app/javascript/mastodon/containers/mastodon.js47
-rw-r--r--app/javascript/mastodon/features/account/components/header.js2
-rw-r--r--app/javascript/mastodon/features/compose/components/search_results.js18
-rw-r--r--app/javascript/mastodon/features/emoji/emoji.js2
-rw-r--r--app/javascript/mastodon/features/follow_recommendations/components/account.js85
-rw-r--r--app/javascript/mastodon/features/follow_recommendations/index.js109
-rw-r--r--app/javascript/mastodon/features/home_timeline/index.js4
-rw-r--r--app/javascript/mastodon/features/notifications/index.js2
-rw-r--r--app/javascript/mastodon/features/ui/components/columns_area.js2
-rw-r--r--app/javascript/mastodon/features/ui/index.js14
-rw-r--r--app/javascript/mastodon/features/ui/util/async-components.js4
-rw-r--r--app/javascript/mastodon/locales/af.json475
-rw-r--r--app/javascript/mastodon/locales/ar.json257
-rw-r--r--app/javascript/mastodon/locales/ast.json25
-rw-r--r--app/javascript/mastodon/locales/bg.json761
-rw-r--r--app/javascript/mastodon/locales/bn.json25
-rw-r--r--app/javascript/mastodon/locales/br.json25
-rw-r--r--app/javascript/mastodon/locales/ca.json25
-rw-r--r--app/javascript/mastodon/locales/co.json29
-rw-r--r--app/javascript/mastodon/locales/cs.json87
-rw-r--r--app/javascript/mastodon/locales/cy.json25
-rw-r--r--app/javascript/mastodon/locales/da.json467
-rw-r--r--app/javascript/mastodon/locales/de.json27
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json125
-rw-r--r--app/javascript/mastodon/locales/el.json39
-rw-r--r--app/javascript/mastodon/locales/en.json157
-rw-r--r--app/javascript/mastodon/locales/eo.json67
-rw-r--r--app/javascript/mastodon/locales/es-AR.json229
-rw-r--r--app/javascript/mastodon/locales/es-MX.json475
-rw-r--r--app/javascript/mastodon/locales/es.json81
-rw-r--r--app/javascript/mastodon/locales/et.json25
-rw-r--r--app/javascript/mastodon/locales/eu.json175
-rw-r--r--app/javascript/mastodon/locales/fa.json35
-rw-r--r--app/javascript/mastodon/locales/fi.json85
-rw-r--r--app/javascript/mastodon/locales/fr.json149
-rw-r--r--app/javascript/mastodon/locales/ga.json25
-rw-r--r--app/javascript/mastodon/locales/gd.json475
-rw-r--r--app/javascript/mastodon/locales/gl.json153
-rw-r--r--app/javascript/mastodon/locales/he.json25
-rw-r--r--app/javascript/mastodon/locales/hi.json27
-rw-r--r--app/javascript/mastodon/locales/hr.json41
-rw-r--r--app/javascript/mastodon/locales/hu.json47
-rw-r--r--app/javascript/mastodon/locales/hy.json25
-rw-r--r--app/javascript/mastodon/locales/id.json27
-rw-r--r--app/javascript/mastodon/locales/io.json25
-rw-r--r--app/javascript/mastodon/locales/is.json29
-rw-r--r--app/javascript/mastodon/locales/it.json69
-rw-r--r--app/javascript/mastodon/locales/ja.json25
-rw-r--r--app/javascript/mastodon/locales/ka.json25
-rw-r--r--app/javascript/mastodon/locales/kab.json33
-rw-r--r--app/javascript/mastodon/locales/kk.json25
-rw-r--r--app/javascript/mastodon/locales/kn.json31
-rw-r--r--app/javascript/mastodon/locales/ko.json27
-rw-r--r--app/javascript/mastodon/locales/ku.json25
-rw-r--r--app/javascript/mastodon/locales/kw.json475
-rw-r--r--app/javascript/mastodon/locales/lt.json31
-rw-r--r--app/javascript/mastodon/locales/lv.json45
-rw-r--r--app/javascript/mastodon/locales/mk.json31
-rw-r--r--app/javascript/mastodon/locales/ml.json89
-rw-r--r--app/javascript/mastodon/locales/mr.json31
-rw-r--r--app/javascript/mastodon/locales/ms.json615
-rw-r--r--app/javascript/mastodon/locales/nl.json133
-rw-r--r--app/javascript/mastodon/locales/nn.json33
-rw-r--r--app/javascript/mastodon/locales/no.json25
-rw-r--r--app/javascript/mastodon/locales/oc.json27
-rw-r--r--app/javascript/mastodon/locales/pa.json475
-rw-r--r--app/javascript/mastodon/locales/pl.json27
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json29
-rw-r--r--app/javascript/mastodon/locales/pt-PT.json67
-rw-r--r--app/javascript/mastodon/locales/ro.json45
-rw-r--r--app/javascript/mastodon/locales/ru.json33
-rw-r--r--app/javascript/mastodon/locales/sa.json29
-rw-r--r--app/javascript/mastodon/locales/sc.json155
-rw-r--r--app/javascript/mastodon/locales/si.json475
-rw-r--r--app/javascript/mastodon/locales/sk.json25
-rw-r--r--app/javascript/mastodon/locales/sl.json25
-rw-r--r--app/javascript/mastodon/locales/sq.json65
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json25
-rw-r--r--app/javascript/mastodon/locales/sr.json197
-rw-r--r--app/javascript/mastodon/locales/sv.json67
-rw-r--r--app/javascript/mastodon/locales/szl.json31
-rw-r--r--app/javascript/mastodon/locales/ta.json25
-rw-r--r--app/javascript/mastodon/locales/tai.json33
-rw-r--r--app/javascript/mastodon/locales/te.json25
-rw-r--r--app/javascript/mastodon/locales/th.json35
-rw-r--r--app/javascript/mastodon/locales/tr.json33
-rw-r--r--app/javascript/mastodon/locales/tt.json167
-rw-r--r--app/javascript/mastodon/locales/ug.json31
-rw-r--r--app/javascript/mastodon/locales/uk.json81
-rw-r--r--app/javascript/mastodon/locales/ur.json27
-rw-r--r--app/javascript/mastodon/locales/vi.json81
-rw-r--r--app/javascript/mastodon/locales/whitelist_af.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_es-MX.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_gd.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_kw.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_pa.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_si.json2
-rw-r--r--app/javascript/mastodon/locales/zgh.json73
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json39
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json25
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json25
-rw-r--r--app/javascript/mastodon/reducers/suggestions.js8
-rw-r--r--app/javascript/mastodon/reducers/timelines.js7
-rw-r--r--app/javascript/styles/mastodon/components.scss93
-rw-r--r--app/lib/account_reach_finder.rb25
-rw-r--r--app/lib/activitypub/activity.rb14
-rw-r--r--app/lib/activitypub/activity/announce.rb38
-rw-r--r--app/lib/activitypub/activity/create.rb43
-rw-r--r--app/lib/activitypub/activity/delete.rb62
-rw-r--r--app/lib/activitypub/activity/flag.rb2
-rw-r--r--app/lib/admin/system_check/sidekiq_process_check.rb1
-rw-r--r--app/lib/application_extension.rb4
-rw-r--r--app/lib/delivery_failure_tracker.rb26
-rw-r--r--app/lib/feed_manager.rb30
-rw-r--r--app/lib/formatter.rb35
-rw-r--r--app/lib/potential_friendship_tracker.rb6
-rw-r--r--app/lib/spam_check.rb198
-rw-r--r--app/lib/status_reach_finder.rb29
-rw-r--r--app/lib/tag_manager.rb8
-rw-r--r--app/lib/video_metadata_extractor.rb54
-rw-r--r--app/models/account.rb42
-rw-r--r--app/models/account_suggestions.rb28
-rw-r--r--app/models/account_suggestions/global_source.rb37
-rw-r--r--app/models/account_suggestions/past_interactions_source.rb36
-rw-r--r--app/models/account_suggestions/setting_source.rb68
-rw-r--r--app/models/account_suggestions/source.rb34
-rw-r--r--app/models/account_suggestions/suggestion.rb7
-rw-r--r--app/models/account_summary.rb25
-rw-r--r--app/models/account_tag_stat.rb24
-rw-r--r--app/models/admin/action_log_filter.rb2
-rw-r--r--app/models/canonical_email_block.rb27
-rw-r--r--app/models/concerns/account_associations.rb3
-rw-r--r--app/models/concerns/account_interactions.rb8
-rw-r--r--app/models/custom_emoji.rb7
-rw-r--r--app/models/follow_recommendation.rb26
-rw-r--r--app/models/follow_recommendation_filter.rb26
-rw-r--r--app/models/follow_recommendation_suppression.rb28
-rw-r--r--app/models/follow_request.rb2
-rw-r--r--app/models/form/account_batch.rb18
-rw-r--r--app/models/form/admin_settings.rb4
-rw-r--r--app/models/instance.rb3
-rw-r--r--app/models/instance_filter.rb8
-rw-r--r--app/models/media_attachment.rb4
-rw-r--r--app/models/session_activation.rb2
-rw-r--r--app/models/status.rb4
-rw-r--r--app/models/tag.rb42
-rw-r--r--app/models/tag_filter.rb2
-rw-r--r--app/models/trending_tags.rb12
-rw-r--r--app/models/user.rb23
-rw-r--r--app/models/web/push_subscription.rb112
-rw-r--r--app/policies/delivery_policy.rb15
-rw-r--r--app/policies/follow_recommendation_policy.rb15
-rw-r--r--app/serializers/activitypub/actor_serializer.rb6
-rw-r--r--app/serializers/rest/account_serializer.rb4
-rw-r--r--app/serializers/rest/suggestion_serializer.rb7
-rw-r--r--app/services/activitypub/fetch_remote_key_service.rb2
-rw-r--r--app/services/activitypub/process_account_service.rb3
-rw-r--r--app/services/after_block_service.rb5
-rw-r--r--app/services/bootstrap_timeline_service.rb37
-rw-r--r--app/services/follow_service.rb9
-rw-r--r--app/services/process_hashtags_service.rb3
-rw-r--r--app/services/process_mentions_service.rb5
-rw-r--r--app/services/reblog_service.rb11
-rw-r--r--app/services/remove_status_service.rb41
-rw-r--r--app/services/report_service.rb2
-rw-r--r--app/services/resolve_account_service.rb2
-rw-r--r--app/services/suspend_account_service.rb12
-rw-r--r--app/services/unsuspend_account_service.rb15
-rw-r--r--app/validators/blacklisted_email_validator.rb30
-rw-r--r--app/validators/existing_username_validator.rb20
-rw-r--r--app/views/accounts/_header.html.haml4
-rw-r--r--app/views/admin/dashboard/index.html.haml4
-rw-r--r--app/views/admin/follow_recommendations/_account.html.haml20
-rw-r--r--app/views/admin/follow_recommendations/show.html.haml38
-rw-r--r--app/views/admin/instances/_exhausted_deliveries_days.haml2
-rw-r--r--app/views/admin/instances/_instance.html.haml8
-rw-r--r--app/views/admin/instances/index.html.haml18
-rw-r--r--app/views/admin/instances/show.html.haml25
-rw-r--r--app/views/admin/rules/index.html.haml5
-rw-r--r--app/views/admin/settings/edit.html.haml12
-rw-r--r--app/views/admin/tags/_tag.html.haml2
-rw-r--r--app/views/admin/tags/index.html.haml9
-rw-r--r--app/views/admin/tags/show.html.haml13
-rw-r--r--app/views/media/player.html.haml7
-rw-r--r--app/views/statuses/_detailed_status.html.haml24
-rw-r--r--app/views/statuses/_poll.html.haml4
-rw-r--r--app/views/statuses/_simple_status.html.haml24
-rw-r--r--app/views/statuses/_status.html.haml7
-rw-r--r--app/views/statuses/embed.html.haml2
-rw-r--r--app/views/user_mailer/webauthn_enabled.text.erb4
-rw-r--r--app/workers/activitypub/distribution_worker.rb2
-rw-r--r--app/workers/import/relationship_worker.rb6
-rw-r--r--app/workers/merge_worker.rb4
-rw-r--r--app/workers/redownload_media_worker.rb11
-rw-r--r--app/workers/scheduler/follow_recommendations_scheduler.rb62
-rw-r--r--app/workers/thread_resolve_worker.rb2
-rw-r--r--app/workers/web/push_notification_worker.rb65
-rw-r--r--babel.config.js1
-rw-r--r--config/application.rb10
-rw-r--r--config/environments/production.rb19
-rw-r--r--config/initializers/1_hosts.rb10
-rw-r--r--config/initializers/content_security_policy.rb14
-rw-r--r--config/initializers/doorkeeper.rb5
-rw-r--r--config/initializers/paperclip.rb4
-rw-r--r--config/initializers/session_store.rb5
-rw-r--r--config/initializers/sidekiq.rb11
-rw-r--r--config/initializers/suppress_csrf_warnings.rb4
-rw-r--r--config/locales/activerecord.af.yml1
-rw-r--r--config/locales/activerecord.ar.yml17
-rw-r--r--config/locales/activerecord.bg.yml21
-rw-r--r--config/locales/activerecord.ca.yml15
-rw-r--r--config/locales/activerecord.co.yml15
-rw-r--r--config/locales/activerecord.cs.yml15
-rw-r--r--config/locales/activerecord.da.yml19
-rw-r--r--config/locales/activerecord.de.yml15
-rw-r--r--config/locales/activerecord.el.yml15
-rw-r--r--config/locales/activerecord.eo.yml15
-rw-r--r--config/locales/activerecord.es-AR.yml15
-rw-r--r--config/locales/activerecord.es-MX.yml24
-rw-r--r--config/locales/activerecord.es.yml25
-rw-r--r--config/locales/activerecord.eu.yml15
-rw-r--r--config/locales/activerecord.fa.yml15
-rw-r--r--config/locales/activerecord.fi.yml21
-rw-r--r--config/locales/activerecord.fr.yml15
-rw-r--r--config/locales/activerecord.gd.yml32
-rw-r--r--config/locales/activerecord.gl.yml17
-rw-r--r--config/locales/activerecord.hu.yml17
-rw-r--r--config/locales/activerecord.hy.yml3
-rw-r--r--config/locales/activerecord.id.yml15
-rw-r--r--config/locales/activerecord.is.yml17
-rw-r--r--config/locales/activerecord.it.yml15
-rw-r--r--config/locales/activerecord.ja.yml15
-rw-r--r--config/locales/activerecord.ko.yml15
-rw-r--r--config/locales/activerecord.kw.yml1
-rw-r--r--config/locales/activerecord.ml.yml15
-rw-r--r--config/locales/activerecord.nl.yml15
-rw-r--r--config/locales/activerecord.nn.yml8
-rw-r--r--config/locales/activerecord.no.yml8
-rw-r--r--config/locales/activerecord.oc.yml15
-rw-r--r--config/locales/activerecord.pa.yml1
-rw-r--r--config/locales/activerecord.pl.yml15
-rw-r--r--config/locales/activerecord.pt-BR.yml17
-rw-r--r--config/locales/activerecord.pt-PT.yml15
-rw-r--r--config/locales/activerecord.ru.yml15
-rw-r--r--config/locales/activerecord.sc.yml17
-rw-r--r--config/locales/activerecord.si.yml13
-rw-r--r--config/locales/activerecord.sq.yml17
-rw-r--r--config/locales/activerecord.sr.yml4
-rw-r--r--config/locales/activerecord.sv.yml15
-rw-r--r--config/locales/activerecord.th.yml14
-rw-r--r--config/locales/activerecord.tr.yml15
-rw-r--r--config/locales/activerecord.tt.yml9
-rw-r--r--config/locales/activerecord.uk.yml15
-rw-r--r--config/locales/activerecord.vi.yml15
-rw-r--r--config/locales/activerecord.zgh.yml17
-rw-r--r--config/locales/activerecord.zh-CN.yml15
-rw-r--r--config/locales/activerecord.zh-HK.yml15
-rw-r--r--config/locales/activerecord.zh-TW.yml15
-rw-r--r--config/locales/af.yml12
-rw-r--r--config/locales/ar.yml278
-rw-r--r--config/locales/ast.yml60
-rw-r--r--config/locales/bg.yml167
-rw-r--r--config/locales/bn.yml17
-rw-r--r--config/locales/br.yml57
-rw-r--r--config/locales/ca.yml147
-rw-r--r--config/locales/co.yml154
-rw-r--r--config/locales/cs.yml244
-rw-r--r--config/locales/cy.yml96
-rw-r--r--config/locales/da.yml1304
-rw-r--r--config/locales/de.yml152
-rw-r--r--config/locales/devise.af.yml1
-rw-r--r--config/locales/devise.ar.yml18
-rw-r--r--config/locales/devise.bg.yml54
-rw-r--r--config/locales/devise.cs.yml4
-rw-r--r--config/locales/devise.da.yml122
-rw-r--r--config/locales/devise.en.yml2
-rw-r--r--config/locales/devise.eo.yml17
-rw-r--r--config/locales/devise.es-MX.yml115
-rw-r--r--config/locales/devise.es.yml74
-rw-r--r--config/locales/devise.eu.yml17
-rw-r--r--config/locales/devise.fi.yml2
-rw-r--r--config/locales/devise.gd.yml117
-rw-r--r--config/locales/devise.hi.yml1
-rw-r--r--config/locales/devise.id.yml30
-rw-r--r--config/locales/devise.kw.yml1
-rw-r--r--config/locales/devise.nl.yml4
-rw-r--r--config/locales/devise.pa.yml1
-rw-r--r--config/locales/devise.pt-PT.yml14
-rw-r--r--config/locales/devise.sc.yml48
-rw-r--r--config/locales/devise.si.yml27
-rw-r--r--config/locales/devise.sq.yml2
-rw-r--r--config/locales/devise.sr.yml32
-rw-r--r--config/locales/devise.sv.yml49
-rw-r--r--config/locales/devise.th.yml1
-rw-r--r--config/locales/devise.tt.yml14
-rw-r--r--config/locales/doorkeeper.af.yml1
-rw-r--r--config/locales/doorkeeper.ar.yml8
-rw-r--r--config/locales/doorkeeper.bg.yml46
-rw-r--r--config/locales/doorkeeper.ca.yml5
-rw-r--r--config/locales/doorkeeper.co.yml11
-rw-r--r--config/locales/doorkeeper.cs.yml5
-rw-r--r--config/locales/doorkeeper.cy.yml1
-rw-r--r--config/locales/doorkeeper.da.yml123
-rw-r--r--config/locales/doorkeeper.de.yml5
-rw-r--r--config/locales/doorkeeper.el.yml5
-rw-r--r--config/locales/doorkeeper.eo.yml5
-rw-r--r--config/locales/doorkeeper.es-AR.yml9
-rw-r--r--config/locales/doorkeeper.es-MX.yml154
-rw-r--r--config/locales/doorkeeper.es.yml3
-rw-r--r--config/locales/doorkeeper.et.yml2
-rw-r--r--config/locales/doorkeeper.eu.yml5
-rw-r--r--config/locales/doorkeeper.fa.yml5
-rw-r--r--config/locales/doorkeeper.fi.yml1
-rw-r--r--config/locales/doorkeeper.fr.yml11
-rw-r--r--config/locales/doorkeeper.gd.yml154
-rw-r--r--config/locales/doorkeeper.gl.yml7
-rw-r--r--config/locales/doorkeeper.he.yml1
-rw-r--r--config/locales/doorkeeper.hr.yml1
-rw-r--r--config/locales/doorkeeper.hu.yml7
-rw-r--r--config/locales/doorkeeper.hy.yml21
-rw-r--r--config/locales/doorkeeper.id.yml5
-rw-r--r--config/locales/doorkeeper.is.yml5
-rw-r--r--config/locales/doorkeeper.it.yml5
-rw-r--r--config/locales/doorkeeper.ja.yml5
-rw-r--r--config/locales/doorkeeper.ka.yml1
-rw-r--r--config/locales/doorkeeper.kk.yml2
-rw-r--r--config/locales/doorkeeper.ko.yml5
-rw-r--r--config/locales/doorkeeper.ku.yml3
-rw-r--r--config/locales/doorkeeper.kw.yml1
-rw-r--r--config/locales/doorkeeper.ml.yml35
-rw-r--r--config/locales/doorkeeper.nl.yml5
-rw-r--r--config/locales/doorkeeper.nn.yml2
-rw-r--r--config/locales/doorkeeper.no.yml2
-rw-r--r--config/locales/doorkeeper.oc.yml5
-rw-r--r--config/locales/doorkeeper.pa.yml1
-rw-r--r--config/locales/doorkeeper.pl.yml5
-rw-r--r--config/locales/doorkeeper.pt-BR.yml1
-rw-r--r--config/locales/doorkeeper.pt-PT.yml5
-rw-r--r--config/locales/doorkeeper.ro.yml2
-rw-r--r--config/locales/doorkeeper.ru.yml7
-rw-r--r--config/locales/doorkeeper.sc.yml31
-rw-r--r--config/locales/doorkeeper.si.yml39
-rw-r--r--config/locales/doorkeeper.sk.yml1
-rw-r--r--config/locales/doorkeeper.sl.yml2
-rw-r--r--config/locales/doorkeeper.sq.yml9
-rw-r--r--config/locales/doorkeeper.sr-Latn.yml1
-rw-r--r--config/locales/doorkeeper.sr.yml1
-rw-r--r--config/locales/doorkeeper.sv.yml5
-rw-r--r--config/locales/doorkeeper.th.yml6
-rw-r--r--config/locales/doorkeeper.tr.yml13
-rw-r--r--config/locales/doorkeeper.tt.yml14
-rw-r--r--config/locales/doorkeeper.uk.yml5
-rw-r--r--config/locales/doorkeeper.vi.yml7
-rw-r--r--config/locales/doorkeeper.zh-CN.yml13
-rw-r--r--config/locales/doorkeeper.zh-HK.yml5
-rw-r--r--config/locales/doorkeeper.zh-TW.yml5
-rw-r--r--config/locales/el.yml114
-rw-r--r--config/locales/en.yml137
-rw-r--r--config/locales/eo.yml139
-rw-r--r--config/locales/es-AR.yml356
-rw-r--r--config/locales/es-MX.yml1392
-rw-r--r--config/locales/es.yml254
-rw-r--r--config/locales/et.yml98
-rw-r--r--config/locales/eu.yml391
-rw-r--r--config/locales/fa.yml147
-rw-r--r--config/locales/fi.yml68
-rw-r--r--config/locales/fr.yml265
-rw-r--r--config/locales/gd.yml1410
-rw-r--r--config/locales/gl.yml234
-rw-r--r--config/locales/he.yml13
-rw-r--r--config/locales/hr.yml26
-rw-r--r--config/locales/hu.yml141
-rw-r--r--config/locales/hy.yml92
-rw-r--r--config/locales/id.yml161
-rw-r--r--config/locales/io.yml1
-rw-r--r--config/locales/is.yml150
-rw-r--r--config/locales/it.yml156
-rw-r--r--config/locales/ja.yml167
-rw-r--r--config/locales/ka.yml31
-rw-r--r--config/locales/kab.yml82
-rw-r--r--config/locales/kk.yml74
-rw-r--r--config/locales/ko.yml195
-rw-r--r--config/locales/ku.yml91
-rw-r--r--config/locales/kw.yml12
-rw-r--r--config/locales/lt.yml33
-rw-r--r--config/locales/ml.yml10
-rw-r--r--config/locales/ms.yml225
-rw-r--r--config/locales/nl.yml181
-rw-r--r--config/locales/nn.yml117
-rw-r--r--config/locales/no.yml106
-rw-r--r--config/locales/oc.yml71
-rw-r--r--config/locales/pa.yml12
-rw-r--r--config/locales/pl.yml151
-rw-r--r--config/locales/pt-BR.yml91
-rw-r--r--config/locales/pt-PT.yml214
-rw-r--r--config/locales/ro.yml37
-rw-r--r--config/locales/ru.yml213
-rw-r--r--config/locales/sc.yml368
-rw-r--r--config/locales/si.yml235
-rw-r--r--config/locales/simple_form.af.yml1
-rw-r--r--config/locales/simple_form.ar.yml36
-rw-r--r--config/locales/simple_form.ast.yml2
-rw-r--r--config/locales/simple_form.bg.yml12
-rw-r--r--config/locales/simple_form.br.yml2
-rw-r--r--config/locales/simple_form.ca.yml15
-rw-r--r--config/locales/simple_form.co.yml4
-rw-r--r--config/locales/simple_form.cs.yml32
-rw-r--r--config/locales/simple_form.cy.yml3
-rw-r--r--config/locales/simple_form.da.yml228
-rw-r--r--config/locales/simple_form.de.yml10
-rw-r--r--config/locales/simple_form.el.yml14
-rw-r--r--config/locales/simple_form.en.yml46
-rw-r--r--config/locales/simple_form.eo.yml8
-rw-r--r--config/locales/simple_form.es-AR.yml66
-rw-r--r--config/locales/simple_form.es-MX.yml219
-rw-r--r--config/locales/simple_form.es.yml47
-rw-r--r--config/locales/simple_form.et.yml1
-rw-r--r--config/locales/simple_form.eu.yml33
-rw-r--r--config/locales/simple_form.fa.yml10
-rw-r--r--config/locales/simple_form.fi.yml1
-rw-r--r--config/locales/simple_form.fr.yml48
-rw-r--r--config/locales/simple_form.gd.yml223
-rw-r--r--config/locales/simple_form.gl.yml52
-rw-r--r--config/locales/simple_form.hr.yml3
-rw-r--r--config/locales/simple_form.hu.yml10
-rw-r--r--config/locales/simple_form.hy.yml2
-rw-r--r--config/locales/simple_form.id.yml28
-rw-r--r--config/locales/simple_form.is.yml10
-rw-r--r--config/locales/simple_form.it.yml12
-rw-r--r--config/locales/simple_form.ja.yml10
-rw-r--r--config/locales/simple_form.kab.yml2
-rw-r--r--config/locales/simple_form.kk.yml72
-rw-r--r--config/locales/simple_form.ko.yml26
-rw-r--r--config/locales/simple_form.ku.yml2
-rw-r--r--config/locales/simple_form.kw.yml1
-rw-r--r--config/locales/simple_form.nl.yml39
-rw-r--r--config/locales/simple_form.nn.yml3
-rw-r--r--config/locales/simple_form.no.yml3
-rw-r--r--config/locales/simple_form.oc.yml4
-rw-r--r--config/locales/simple_form.pa.yml1
-rw-r--r--config/locales/simple_form.pl.yml10
-rw-r--r--config/locales/simple_form.pt-BR.yml12
-rw-r--r--config/locales/simple_form.pt-PT.yml22
-rw-r--r--config/locales/simple_form.ro.yml4
-rw-r--r--config/locales/simple_form.ru.yml26
-rw-r--r--config/locales/simple_form.sc.yml116
-rw-r--r--config/locales/simple_form.si.yml37
-rw-r--r--config/locales/simple_form.sk.yml1
-rw-r--r--config/locales/simple_form.sl.yml2
-rw-r--r--config/locales/simple_form.sq.yml42
-rw-r--r--config/locales/simple_form.sv.yml54
-rw-r--r--config/locales/simple_form.th.yml38
-rw-r--r--config/locales/simple_form.tr.yml12
-rw-r--r--config/locales/simple_form.tt.yml27
-rw-r--r--config/locales/simple_form.uk.yml36
-rw-r--r--config/locales/simple_form.vi.yml20
-rw-r--r--config/locales/simple_form.zgh.yml2
-rw-r--r--config/locales/simple_form.zh-CN.yml42
-rw-r--r--config/locales/simple_form.zh-HK.yml10
-rw-r--r--config/locales/simple_form.zh-TW.yml11
-rw-r--r--config/locales/sk.yml58
-rw-r--r--config/locales/sl.yml97
-rw-r--r--config/locales/sq.yml210
-rw-r--r--config/locales/sr-Latn.yml26
-rw-r--r--config/locales/sr.yml33
-rw-r--r--config/locales/sv.yml143
-rw-r--r--config/locales/ta.yml8
-rw-r--r--config/locales/tai.yml5
-rw-r--r--config/locales/te.yml1
-rw-r--r--config/locales/th.yml183
-rw-r--r--config/locales/tr.yml160
-rw-r--r--config/locales/tt.yml245
-rw-r--r--config/locales/uk.yml209
-rw-r--r--config/locales/vi.yml233
-rw-r--r--config/locales/zgh.yml1
-rw-r--r--config/locales/zh-CN.yml211
-rw-r--r--config/locales/zh-HK.yml67
-rw-r--r--config/locales/zh-TW.yml236
-rw-r--r--config/navigation.rb1
-rw-r--r--config/routes.rb15
-rw-r--r--config/settings.yml2
-rw-r--r--config/sidekiq.yml4
-rw-r--r--db/migrate/20210306164523_account_ids_to_timestamp_ids.rb17
-rw-r--r--db/migrate/20210322164601_create_account_summaries.rb9
-rw-r--r--db/migrate/20210323114347_create_follow_recommendations.rb5
-rw-r--r--db/migrate/20210324171613_create_follow_recommendation_suppressions.rb9
-rw-r--r--db/migrate/20210416200740_create_canonical_email_blocks.rb10
-rw-r--r--db/migrate/20210421121431_add_case_insensitive_btree_index_to_tags.rb13
-rw-r--r--db/migrate/20210425135952_add_index_on_media_attachments_account_id_status_id.rb13
-rw-r--r--db/migrate/20210505174616_update_follow_recommendations_to_version_2.rb18
-rw-r--r--db/post_migrate/20210502233513_drop_account_tag_stats.rb13
-rw-r--r--db/post_migrate/20210507001928_remove_hub_url_from_accounts.rb12
-rw-r--r--db/schema.rb97
-rw-r--r--db/views/account_summaries_v01.sql22
-rw-r--r--db/views/follow_recommendations_v01.sql38
-rw-r--r--db/views/follow_recommendations_v02.sql34
-rw-r--r--dist/mastodon-sidekiq.service2
-rw-r--r--dist/mastodon-streaming.service2
-rw-r--r--dist/mastodon-web.service2
-rw-r--r--lib/active_record/batches.rb44
-rw-r--r--lib/exceptions.rb4
-rw-r--r--lib/mastodon/migration_helpers.rb16
-rw-r--r--lib/mastodon/redis_config.rb14
-rw-r--r--lib/mastodon/search_cli.rb4
-rw-r--r--lib/mastodon/version.rb4
-rw-r--r--lib/paperclip/attachment_extensions.rb4
-rw-r--r--lib/paperclip/gif_transcoder.rb3
-rw-r--r--lib/paperclip/image_extractor.rb14
-rw-r--r--lib/paperclip/schema_extensions.rb37
-rw-r--r--lib/paperclip/transcoder.rb102
-rw-r--r--lib/paperclip/transcoder_extensions.rb14
-rw-r--r--lib/paperclip/validation_extensions.rb58
-rw-r--r--lib/paperclip/video_transcoder.rb26
-rw-r--r--lib/tasks/db.rake2
-rw-r--r--lib/tasks/emojis.rake2
-rw-r--r--lib/terrapin/multi_pipe_extensions.rb66
-rw-r--r--package.json55
-rw-r--r--public/emoji/1f6b2_border.svg19
-rw-r--r--spec/controllers/admin/dashboard_controller_spec.rb12
-rw-r--r--spec/controllers/api/v1/apps_controller_spec.rb78
-rw-r--r--spec/controllers/api/v1/push/subscriptions_controller_spec.rb28
-rw-r--r--spec/controllers/api/web/push_subscriptions_controller_spec.rb23
-rw-r--r--spec/controllers/auth/confirmations_controller_spec.rb46
-rw-r--r--spec/controllers/relationships_controller_spec.rb6
-rw-r--r--spec/fabricators/canonical_email_block_fabricator.rb4
-rw-r--r--spec/fabricators/follow_recommendation_suppression_fabricator.rb3
-rw-r--r--spec/lib/activitypub/activity/delete_spec.rb20
-rw-r--r--spec/lib/activitypub/activity/update_spec.rb2
-rw-r--r--spec/lib/spam_check_spec.rb192
-rw-r--r--spec/lib/tag_manager_spec.rb36
-rw-r--r--spec/mailers/notification_mailer_spec.rb12
-rw-r--r--spec/mailers/user_mailer_spec.rb4
-rw-r--r--spec/models/account_tag_stat_spec.rb38
-rw-r--r--spec/models/canonical_email_block_spec.rb47
-rw-r--r--spec/models/follow_recommendation_suppression_spec.rb4
-rw-r--r--spec/models/follow_request_spec.rb2
-rw-r--r--spec/models/session_activation_spec.rb6
-rw-r--r--spec/models/tag_spec.rb14
-rw-r--r--spec/models/trending_tags_spec.rb6
-rw-r--r--spec/models/web/push_subscription_spec.rb94
-rw-r--r--spec/presenters/account_relationships_presenter_spec.rb2
-rw-r--r--spec/services/after_block_service_spec.rb32
-rw-r--r--spec/services/authorize_follow_service_spec.rb18
-rw-r--r--spec/services/batched_remove_status_service_spec.rb2
-rw-r--r--spec/services/block_service_spec.rb13
-rw-r--r--spec/services/bootstrap_timeline_service_spec.rb38
-rw-r--r--spec/services/favourite_service_spec.rb14
-rw-r--r--spec/services/fetch_remote_status_service_spec.rb52
-rw-r--r--spec/services/process_mentions_service_spec.rb31
-rw-r--r--spec/services/reblog_service_spec.rb16
-rw-r--r--spec/services/reject_follow_service_spec.rb18
-rw-r--r--spec/services/remove_status_service_spec.rb2
-rw-r--r--spec/services/unblock_service_spec.rb14
-rw-r--r--spec/services/unfollow_service_spec.rb14
-rw-r--r--spec/validators/blacklisted_email_validator_spec.rb29
-rw-r--r--spec/workers/web/push_notification_worker_spec.rb48
-rw-r--r--streaming/index.js10
-rw-r--r--yarn.lock716
636 files changed, 22022 insertions, 11377 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 862fa126b..2f3860d7c 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -129,6 +129,13 @@ jobs:
         environment: *ruby_environment
     <<: *install_ruby_dependencies
 
+  install-ruby3.0:
+    <<: *defaults
+    docker:
+      - image: circleci/ruby:3.0-buster-node
+        environment: *ruby_environment
+    <<: *install_ruby_dependencies
+
   build:
     <<: *defaults
     steps:
@@ -187,6 +194,18 @@ jobs:
       - image: circleci/redis:5-alpine
     <<: *test_steps
 
+  test-ruby3.0:
+    <<: *defaults
+    docker:
+      - image: circleci/ruby:3.0-buster-node
+        environment: *ruby_environment
+      - image: circleci/postgres:12.2
+        environment:
+          POSTGRES_USER: root
+          POSTGRES_HOST_AUTH_METHOD: trust
+      - image: circleci/redis:5-alpine
+    <<: *test_steps
+
   test-webui:
     <<: *defaults
     docker:
@@ -227,6 +246,10 @@ workflows:
           requires:
             - install
             - install-ruby2.7
+      - install-ruby3.0:
+          requires:
+            - install
+            - install-ruby2.7
       - build:
           requires:
             - install-ruby2.7
@@ -241,6 +264,10 @@ workflows:
           requires:
             - install-ruby2.6
             - build
+      - test-ruby3.0:
+          requires:
+            - install-ruby3.0
+            - build
       - test-webui:
           requires:
             - install
diff --git a/.env.production.sample b/.env.production.sample
index 12ca64a06..65f3f9d1f 100644
--- a/.env.production.sample
+++ b/.env.production.sample
@@ -269,3 +269,10 @@ MAX_POLL_OPTION_CHARS=100
 # Maximum search results to display
 # Only relevant when elasticsearch is installed
 # MAX_SEARCH_RESULTS=20
+
+# Maximum custom emoji file sizes
+# If undefined or smaller than MAX_EMOJI_SIZE, the value
+# of MAX_EMOJI_SIZE will be used for MAX_REMOTE_EMOJI_SIZE
+# Units are in bytes
+MAX_EMOJI_SIZE=51200
+MAX_REMOTE_EMOJI_SIZE=204800
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d749c255..c393b8d6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,149 @@ Changelog
 
 All notable changes to this project will be documented in this file.
 
+## Unreleased
+### Added
+
+- **Add follow recommendations for onboarding** ([Gargron](https://github.com/tootsuite/mastodon/pull/15945), [Gargron](https://github.com/tootsuite/mastodon/pull/16161), [Gargron](https://github.com/tootsuite/mastodon/pull/16060), [Gargron](https://github.com/tootsuite/mastodon/pull/16077), [Gargron](https://github.com/tootsuite/mastodon/pull/16078), [Gargron](https://github.com/tootsuite/mastodon/pull/16160), [Gargron](https://github.com/tootsuite/mastodon/pull/16079), [noellabo](https://github.com/tootsuite/mastodon/pull/16044), [noellabo](https://github.com/tootsuite/mastodon/pull/16045), [Gargron](https://github.com/tootsuite/mastodon/pull/16152), [Gargron](https://github.com/tootsuite/mastodon/pull/16153), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16082), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16173), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16159))
+  - Tutorial on first web UI launch has been replaced with follow suggestions
+  - Follow suggestions take user locale into account and are a mix of accounts most followed by currently active local users, and accounts that wrote the most shared/favourited posts in the last 30 days
+  - Only accounts that have opted-in to being discoverable from their profile settings, and that do not require follow requests, will be suggested
+  - Moderators can review suggestions for every supported locale and suppress specific suggestions from appearing and admins can ensure certain accounts always show up in suggestions from the settings area
+  - New users no longer automatically follow admins
+- **Add server rules** ([Gargron](https://github.com/tootsuite/mastodon/pull/15769), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15778))
+  - Admins can create and edit itemized server rules
+  - They are available through the REST API and on the about page
+- **Add canonical e-mail blocks for suspended accounts** ([Gargron](https://github.com/tootsuite/mastodon/pull/16049))
+  - Normally, people can make multiple accounts using the same e-mail address using the `+` trick or by inserting or removing `.` characters from the first part of their address
+  - Once an account is suspended, it will no longer be possible for the e-mail address used by that account to be used for new sign-ups in any of its forms
+- Add management of delivery availability in admin UI ([noellabo](https://github.com/tootsuite/mastodon/pull/15771))
+- **Add system checks to dashboard in admin UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15989), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15954), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16002))
+  - The dashboard will now warn you if you some Sidekiq queues are not being processed, if you have not defined any server rules, or if you forgot to run database migrations from the latest Mastodon upgrade
+- Add inline description of moderation actions in admin UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15792))
+- Add "recommended" label to activity/peers API toggles in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16081))
+- Add joined date to profiles in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16169))
+- Add transition to media modal background in web UI ([mkljczk](https://github.com/tootsuite/mastodon/pull/15843))
+- Add option to opt-out of unread notification markers in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15842))
+- Add borders to 📱, 🚲, and 📲 emojis in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15794), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16035))
+- Add dropdown for boost privacy in boost confirmation modal in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15704))
+- Add support for Ruby 3.0 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16046), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16174))
+- Add `Message-ID` header to outgoing emails ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16076))
+  - Some e-mail spam filters penalize e-mails that have a `Message-ID` header that uses a different domain name than the sending e-mail address. Now, the same domain will be used
+- Add `af`, `gd` and `si` locales ([Gargron](https://github.com/tootsuite/mastodon/pull/16090))
+- Add guard against DNS rebinding attacks ([noellabo](https://github.com/tootsuite/mastodon/pull/16087), [noellabo](https://github.com/tootsuite/mastodon/pull/16095))
+- Add HTTP header to explicitly opt-out of FLoC by default ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16036))
+- Add missing push notification title for polls and statuses ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15929), [mkljczk](https://github.com/tootsuite/mastodon/pull/15564), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15931))
+- Add `POST /api/v1/emails/confirmations` to REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15816), [Gargron](https://github.com/tootsuite/mastodon/pull/15949))
+  - This method allows an app through which a user signed-up to request a new confirmation e-mail to be sent, or to change the e-mail of the account before it is confirmed
+- Add `GET /api/v1/accounts/lookup` to REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15740), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15750))
+  - This method allows to quickly convert a username of a known account to an ID that can be used with the REST API, or to check if a username is available
+  for sign-up
+- Add `policy` param to `POST /api/v1/push/subscriptions` in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/16040))
+  - This param allows an app to control from whom notifications should be delivered as push notifications to the app
+- Add `details` to error response for `POST /api/v1/accounts` in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15803))
+  - This attribute allows an app to display more helpful information to the user about why the sign-up did not succeed
+
+### Changed
+
+- Change trending hashtags to be affected be reblogs ([Gargron](https://github.com/tootsuite/mastodon/pull/16164))
+  - Previously, only original posts contributed to a hashtag's trending score
+  - Now, reblogs of posts will also contribute to that hashtag's trending score
+- Change e-mail confirmation link to always redirect to web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16151))
+- Change log level of worker lifecycle to WARN in streaming API ([Gargron](https://github.com/tootsuite/mastodon/pull/16110))
+  - Since running with INFO log level in production is not always desirable, it is easy to miss when a worker is shutdown and a new one is started
+- Change the nouns "toot" and "status" to "post" in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16080), [Gargron](https://github.com/tootsuite/mastodon/pull/16089))
+  - To be clear, the button still says "Toot!"
+- Change order of dropdown menu on posts to be more intuitive in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15647))
+- Change description of keyboard shortcuts in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/16129))
+- Change option labels on edit profile page ([Gargron](https://github.com/tootsuite/mastodon/pull/16041))
+  - "Lock account" is now "Require follow requests"
+  - "List this account on the directory" is now "Suggest account to others"
+  - "Hide your network" is now "Hide your social graph"
+- Change newly generated account IDs to not be enumerable ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15844))
+- Change Web Push API deliveries to use request pooling ([Gargron](https://github.com/tootsuite/mastodon/pull/16014))
+- Change multiple mentions with same username to render with domain ([Gargron](https://github.com/tootsuite/mastodon/pull/15718), [noellabo](https://github.com/tootsuite/mastodon/pull/16038))
+  - When a post contains mentions of two or more users who have the same username, but on different domains, render their names with domain to help disambiguate them
+  - Always render the domain of usernames used in profile metadata
+- Change health check endpoint to reveal less information ([Gargron](https://github.com/tootsuite/mastodon/pull/15988))
+- Change account counters to use upsert (requires Postgres >= 9.5) ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15913))
+- Change `mastodon:setup` to not call `assets:precompile` in Docker ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/13942))
+- **Change max. image dimensions to 1920x1080px (1080p)** ([Gargron](https://github.com/tootsuite/mastodon/pull/15690))
+  - Previously, this was 1280x1280px
+  - This is the amount of pixels that original images get downsized to
+- Change custom emoji to be animated when hovering container in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15637))
+- Change streaming API from deprecated ClusterWS/cws to ws ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15932))
+- Change systemd configuration to add sandboxing features ([Izorkin](https://github.com/tootsuite/mastodon/pull/15937), [Izorkin](https://github.com/tootsuite/mastodon/pull/16103), [Izorkin](https://github.com/tootsuite/mastodon/pull/16127))
+- Change nginx configuration to make running Onion service easier ([cohosh](https://github.com/tootsuite/mastodon/pull/15498))
+- Change Helm configuration ([dunn](https://github.com/tootsuite/mastodon/pull/15722), [dunn](https://github.com/tootsuite/mastodon/pull/15728), [dunn](https://github.com/tootsuite/mastodon/pull/15748), [dunn](https://github.com/tootsuite/mastodon/pull/15749), [dunn](https://github.com/tootsuite/mastodon/pull/15767))
+- Change Docker configuration ([SuperSandro2000](https://github.com/tootsuite/mastodon/pull/10823), [mashirozx](https://github.com/tootsuite/mastodon/pull/15978))
+
+### Removed
+
+- Remove PubSubHubbub-related columns from accounts table ([Gargron](https://github.com/tootsuite/mastodon/pull/16170), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15857))
+- Remove dependency on @babel/plugin-proposal-class-properties ([ykzts](https://github.com/tootsuite/mastodon/pull/16155))
+- Remove dependency on pluck_each gem ([Gargron](https://github.com/tootsuite/mastodon/pull/16012))
+- Remove spam check and dependency on nilsimsa gem ([Gargron](https://github.com/tootsuite/mastodon/pull/16011))
+- Remove MySQL-specific code from Mastodon::MigrationHelpers ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15924))
+- Remove IE11 from supported browsers target ([gol-cha](https://github.com/tootsuite/mastodon/pull/15779))
+
+### Fixed
+
+- Fix "You might be interested in" flashing while searching in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16162))
+- Fix display of posts without text content in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15665))
+- Fix Google Translate breaking web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15610), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15611))
+- Fix web UI crashing when SVG support is disabled ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15809))
+- Fix web UI crash when a status opened in the media modal is deleted ([kaias1jp](https://github.com/tootsuite/mastodon/pull/15701))
+- Fix OCR language data failing to load in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15519))
+- Fix footer links not being clickable in Safari in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/15496))
+- Fix autofocus/autoselection not working on mobile in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15555), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15985))
+- Fix media redownload worker retrying on unexpected response codes ([Gargron](https://github.com/tootsuite/mastodon/pull/16111))
+- Fix thread resolve worker retrying when status no longer exists ([Gargron](https://github.com/tootsuite/mastodon/pull/16109))
+- Fix n+1 queries when rendering statuses in REST API ([abcang](https://github.com/tootsuite/mastodon/pull/15641))
+- Fix n+1 queries when rendering notifications in REST API ([abcang](https://github.com/tootsuite/mastodon/pull/15640))
+- Fix delete of local reply to local parent not being forwarded ([Gargron](https://github.com/tootsuite/mastodon/pull/16096))
+- Fix remote reporters not receiving suspend/unsuspend activities ([Gargron](https://github.com/tootsuite/mastodon/pull/16050))
+- Fix understanding (not fully qualified) `as:Public` and `Public` ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15948))
+- Fix actor update not being distributed on profile picture deletion ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15461))
+- Fix processing of incoming Delete activities ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16084))
+- Fix processing of incoming Block activities ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15546))
+- Fix processing of incoming Update activities of unknown accounts ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15514))
+- Fix URIs of repeat follow requests not being recorded ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15662))
+- Fix error on requests with no `Digest` header ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15782))
+- Fix activity object not requiring signature in secure mode ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15592))
+- Fix database serialization failure returning HTTP 500 ([Gargron](https://github.com/tootsuite/mastodon/pull/16101))
+- Fix media processing getting stuck on too much stdin/stderr ([Gargron](https://github.com/tootsuite/mastodon/pull/16136))
+- Fix some inefficient array manipulations ([007lva](https://github.com/tootsuite/mastodon/pull/15513), [007lva](https://github.com/tootsuite/mastodon/pull/15527))
+- Fix some inefficient regex matching ([007lva](https://github.com/tootsuite/mastodon/pull/15528))
+- Fix some inefficient SQL queries ([abcang](https://github.com/tootsuite/mastodon/pull/16104), [abcang](https://github.com/tootsuite/mastodon/pull/16106), [abcang](https://github.com/tootsuite/mastodon/pull/16105))
+- Fix trying to fetch key from empty URI when verifying HTTP signature ([Gargron](https://github.com/tootsuite/mastodon/pull/16100))
+- Fix `tootctl maintenance fix-duplicates` failures ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15923), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15515))
+- Fix error when removing status caused by race condition ([Gargron](https://github.com/tootsuite/mastodon/pull/16099))
+- Fix misspelled URLs character counting ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15382))
+- Fix Sidekiq hanging forever due to a Resolv bug in Ruby 2.7.3 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16157))
+- Fix edge case where follow limit interferes with accepting a follow ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16098))
+- Fix inconsistent lead text style in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16052), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16086))
+- Fix reports of already suspended accounts being recorded ([Gargron](https://github.com/tootsuite/mastodon/pull/16047))
+- Fix sign-up restrictions based on IP addresses not being enforced ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15607))
+- Fix YouTube embeds failing due to YouTube serving wrong OEmbed URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/15716))
+- Fix error when rendering public pages with media without meta ([Gargron](https://github.com/tootsuite/mastodon/pull/16112))
+- Fix misaligned logo on follow button on public pages ([noellabo](https://github.com/tootsuite/mastodon/pull/15458))
+- Fix video modal not working on public pages ([noellabo](https://github.com/tootsuite/mastodon/pull/15469))
+- Fix race conditions on account migration creation ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15597))
+- Fix not being able to change world filter expiration back to “Never” ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15858))
+- Fix `.env.vagrant` not setting `RAILS_ENV` variable ([chandrn7](https://github.com/tootsuite/mastodon/pull/15709))
+- Fix error when muting users with `duration` in REST API ([Tak](https://github.com/tootsuite/mastodon/pull/15516))
+- Fix border padding on front page in light theme ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15926))
+- Fix wrong URL to custom CSS when `CDN_HOST` is used ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15927))
+- Fix `tootctl accounts unfollow` ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15639))
+- Fix `tootctl emoji import` wasting time on MacOS shadow files ([cortices](https://github.com/tootsuite/mastodon/pull/15430))
+- Fix `tootctl emoji import` not treating shortcodes as case-insensitive ([angristan](https://github.com/tootsuite/mastodon/pull/15738))
+- Fix some issues with SAML account creation ([Gargron](https://github.com/tootsuite/mastodon/pull/15222), [kaiyou](https://github.com/tootsuite/mastodon/pull/15511))
+- Fix MX validation applying for explicitly allowed e-mail domains ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15930))
+- Fix share page not using configured custom mascot ([tribela](https://github.com/tootsuite/mastodon/pull/15687))
+- Fix instance actor not being automatically created if it wasn't seeded properly ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15693))
+- Fix HTTPS enforcement preventing Mastodon from being run as an Onion service ([cohosh](https://github.com/tootsuite/mastodon/pull/15560), [jtracey](https://github.com/tootsuite/mastodon/pull/15741), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15712), [cohosh](https://github.com/tootsuite/mastodon/pull/15725))
+- Fix app name, website and redirect URIs not having a maximum length ([Gargron](https://github.com/tootsuite/mastodon/pull/16042))
+
 ## [3.3.0] - 2020-12-27
 ### Added
 
diff --git a/Gemfile b/Gemfile
index c866625c0..93b87c159 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,11 +1,11 @@
 # frozen_string_literal: true
 
 source 'https://rubygems.org'
-ruby '>= 2.5.0', '< 3.0.0'
+ruby '>= 2.5.0', '< 3.1.0'
 
 gem 'pkg-config', '~> 1.4'
 
-gem 'puma', '~> 5.2'
+gem 'puma', '~> 5.3'
 gem 'rails', '~> 6.1.3'
 gem 'sprockets', '~> 3.7.2'
 gem 'thor', '~> 1.1'
@@ -17,12 +17,10 @@ gem 'makara', '~> 0.5'
 gem 'pghero', '~> 2.8'
 gem 'dotenv-rails', '~> 2.7'
 
-gem 'aws-sdk-s3', '~> 1.93', require: false
+gem 'aws-sdk-s3', '~> 1.94', require: false
 gem 'fog-core', '<= 2.1.0'
 gem 'fog-openstack', '~> 0.3', require: false
 gem 'paperclip', '~> 6.0'
-gem 'paperclip-av-transcoder', '~> 0.6'
-gem 'streamio-ffmpeg', '~> 3.0'
 gem 'blurhash', '~> 0.1'
 
 gem 'active_model_serializers', '~> 0.10'
@@ -32,9 +30,9 @@ gem 'browser'
 gem 'charlock_holmes', '~> 0.7.7'
 gem 'iso-639'
 gem 'chewy', '~> 5.2'
-gem 'cld3', '~> 3.4.1'
-gem 'devise', '~> 4.7'
-gem 'devise-two-factor', git: 'https://github.com/ClearlyClaire/devise-two-factor', ref: '594bb8a32e6f94df7e5ba7c9399eaf9ff25bac0d'
+gem 'cld3', '~> 3.4.2'
+gem 'devise', '~> 4.8'
+gem 'devise-two-factor', '~> 4.0'
 
 group :pam_authentication, optional: true do
   gem 'devise_pam_authenticatable2', '~> 9.2'
@@ -62,9 +60,8 @@ gem 'idn-ruby', require: 'idn'
 gem 'kaminari', '~> 1.2'
 gem 'link_header', '~> 0.0'
 gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar'
-gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
 gem 'nokogiri', '~> 1.11'
-gem 'nsa', git: 'https://github.com/Gargron/nsa', ref: 'd1079e0cdafdfed7f9f35478d13b9bdaa65965c0'
+gem 'nsa', '~> 0.2'
 gem 'oj', '~> 3.11'
 gem 'ox', '~> 2.14'
 gem 'parslet'
@@ -78,7 +75,7 @@ gem 'rails-i18n', '~> 6.0'
 gem 'rails-settings-cached', '~> 0.6'
 gem 'redis', '~> 4.2', require: ['redis', 'redis/connection/hiredis']
 gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
-gem 'rqrcode', '~> 1.2'
+gem 'rqrcode', '~> 2.0'
 gem 'ruby-progressbar', '~> 1.11'
 gem 'sanitize', '~> 5.2'
 gem 'scenic', '~> 1.5'
@@ -94,8 +91,8 @@ gem 'strong_migrations', '~> 0.7'
 gem 'tty-prompt', '~> 0.23', require: false
 gem 'twitter-text', '~> 3.1.0'
 gem 'tzinfo-data', '~> 1.2021'
-gem 'webpacker', '~> 5.2'
-gem 'webpush'
+gem 'webpacker', '~> 5.3'
+gem 'webpush', '~> 0.3'
 gem 'webauthn', '~> 3.0.0.alpha1'
 
 gem 'json-ld'
@@ -126,7 +123,7 @@ group :test do
   gem 'rspec-sidekiq', '~> 3.1'
   gem 'simplecov', '~> 0.21', require: false
   gem 'webmock', '~> 3.12'
-  gem 'parallel_tests', '~> 3.6'
+  gem 'parallel_tests', '~> 3.7'
   gem 'rspec_junit_formatter', '~> 0.4'
 end
 
@@ -139,8 +136,8 @@ group :development do
   gem 'letter_opener', '~> 1.7'
   gem 'letter_opener_web', '~> 1.4'
   gem 'memory_profiler'
-  gem 'rubocop', '~> 1.12', require: false
-  gem 'rubocop-rails', '~> 2.9', require: false
+  gem 'rubocop', '~> 1.14', require: false
+  gem 'rubocop-rails', '~> 2.10', require: false
   gem 'brakeman', '~> 5.0', require: false
   gem 'bundler-audit', '~> 0.8', require: false
 
@@ -160,4 +157,5 @@ gem 'concurrent-ruby', require: false
 gem 'connection_pool', require: false
 
 gem 'xorcist', '~> 1.1'
-gem 'pluck_each', git: 'https://github.com/nsommer/pluck_each', ref: '73be0947c52fc54bf6d7085378db008358aac5eb'
+
+gem 'resolv', '~> 0.1.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index 1d6480a7b..0ff28ff43 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,79 +1,40 @@
-GIT
-  remote: https://github.com/ClearlyClaire/devise-two-factor
-  revision: 594bb8a32e6f94df7e5ba7c9399eaf9ff25bac0d
-  ref: 594bb8a32e6f94df7e5ba7c9399eaf9ff25bac0d
-  specs:
-    devise-two-factor (3.1.0)
-      activesupport (< 7.0)
-      attr_encrypted (>= 1.3, < 4, != 2)
-      devise
-      railties (< 7.0)
-      rotp (~> 6)
-
-GIT
-  remote: https://github.com/Gargron/nsa
-  revision: d1079e0cdafdfed7f9f35478d13b9bdaa65965c0
-  ref: d1079e0cdafdfed7f9f35478d13b9bdaa65965c0
-  specs:
-    nsa (0.2.8)
-      activesupport (>= 4.2, < 7)
-      concurrent-ruby (~> 1.0, >= 1.0.2)
-      sidekiq (>= 3.5)
-      statsd-ruby (~> 1.4, >= 1.4.0)
-
-GIT
-  remote: https://github.com/nsommer/pluck_each
-  revision: 73be0947c52fc54bf6d7085378db008358aac5eb
-  ref: 73be0947c52fc54bf6d7085378db008358aac5eb
-  specs:
-    pluck_each (0.1.3)
-      activerecord (>= 6.1.0)
-      activesupport (>= 6.1.0)
-
-GIT
-  remote: https://github.com/witgo/nilsimsa
-  revision: fd184883048b922b176939f851338d0a4971a532
-  ref: fd184883048b922b176939f851338d0a4971a532
-  specs:
-    nilsimsa (1.1.2)
-
 GEM
   remote: https://rubygems.org/
   specs:
-    actioncable (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actioncable (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       nio4r (~> 2.0)
       websocket-driver (>= 0.6.1)
-    actionmailbox (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      activejob (= 6.1.3.1)
-      activerecord (= 6.1.3.1)
-      activestorage (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actionmailbox (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      activejob (= 6.1.3.2)
+      activerecord (= 6.1.3.2)
+      activestorage (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       mail (>= 2.7.1)
-    actionmailer (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      actionview (= 6.1.3.1)
-      activejob (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actionmailer (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      actionview (= 6.1.3.2)
+      activejob (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       mail (~> 2.5, >= 2.5.4)
       rails-dom-testing (~> 2.0)
-    actionpack (6.1.3.1)
-      actionview (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actionpack (6.1.3.2)
+      actionview (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       rack (~> 2.0, >= 2.0.9)
       rack-test (>= 0.6.3)
       rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.2.0)
-    actiontext (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      activerecord (= 6.1.3.1)
-      activestorage (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actiontext (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      activerecord (= 6.1.3.2)
+      activestorage (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       nokogiri (>= 1.8.5)
-    actionview (6.1.3.1)
-      activesupport (= 6.1.3.1)
+    actionview (6.1.3.2)
+      activesupport (= 6.1.3.2)
       builder (~> 3.1)
       erubi (~> 1.4)
       rails-dom-testing (~> 2.0)
@@ -84,22 +45,22 @@ GEM
       case_transform (>= 0.2)
       jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
     active_record_query_trace (1.8)
-    activejob (6.1.3.1)
-      activesupport (= 6.1.3.1)
+    activejob (6.1.3.2)
+      activesupport (= 6.1.3.2)
       globalid (>= 0.3.6)
-    activemodel (6.1.3.1)
-      activesupport (= 6.1.3.1)
-    activerecord (6.1.3.1)
-      activemodel (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
-    activestorage (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      activejob (= 6.1.3.1)
-      activerecord (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    activemodel (6.1.3.2)
+      activesupport (= 6.1.3.2)
+    activerecord (6.1.3.2)
+      activemodel (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
+    activestorage (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      activejob (= 6.1.3.2)
+      activerecord (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       marcel (~> 1.0.0)
       mini_mime (~> 1.0.2)
-    activesupport (6.1.3.1)
+    activesupport (6.1.3.2)
       concurrent-ruby (~> 1.0, >= 1.0.2)
       i18n (>= 1.6, < 2)
       minitest (>= 5.1)
@@ -116,12 +77,10 @@ GEM
     ast (2.4.2)
     attr_encrypted (3.1.0)
       encryptor (~> 3.0.0)
-    av (0.9.0)
-      cocaine (~> 0.5.3)
     awrence (1.1.1)
     aws-eventstream (1.1.1)
-    aws-partitions (1.436.0)
-    aws-sdk-core (3.113.0)
+    aws-partitions (1.452.0)
+    aws-sdk-core (3.114.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
@@ -129,7 +88,7 @@ GEM
     aws-sdk-kms (1.43.0)
       aws-sdk-core (~> 3, >= 3.112.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.93.0)
+    aws-sdk-s3 (1.94.1)
       aws-sdk-core (~> 3, >= 3.112.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.1)
@@ -147,7 +106,7 @@ GEM
       ffi (~> 1.14)
     bootsnap (1.6.0)
       msgpack (~> 1.0)
-    brakeman (5.0.0)
+    brakeman (5.0.1)
     browser (4.2.0)
     brpoplpush-redis_script (0.1.2)
       concurrent-ruby (~> 1.0, >= 1.0.5)
@@ -191,16 +150,14 @@ GEM
       activesupport (>= 5.2)
       elasticsearch (>= 2.0.0)
       elasticsearch-dsl
-    chunky_png (1.3.15)
-    cld3 (3.4.1)
-      ffi (>= 1.1.0, < 1.15.0)
+    chunky_png (1.4.0)
+    cld3 (3.4.2)
+      ffi (>= 1.1.0, < 1.16.0)
     climate_control (0.2.0)
-    cocaine (0.5.8)
-      climate_control (>= 0.0.3, < 1.0)
     coderay (1.1.3)
     color_diff (0.1)
     concurrent-ruby (1.1.8)
-    connection_pool (2.2.3)
+    connection_pool (2.2.5)
     cose (1.0.0)
       cbor (~> 0.5.9)
       openssl-signature_algorithm (~> 0.4.0)
@@ -210,12 +167,18 @@ GEM
     css_parser (1.7.1)
       addressable
     debug_inspector (1.0.0)
-    devise (4.7.3)
+    devise (4.8.0)
       bcrypt (~> 3.0)
       orm_adapter (~> 0.1)
       railties (>= 4.1.0)
       responders
       warden (~> 1.2.3)
+    devise-two-factor (4.0.0)
+      activesupport (< 6.2)
+      attr_encrypted (>= 1.3, < 4, != 2)
+      devise (~> 4.0)
+      railties (< 6.2)
+      rotp (~> 6.0)
     devise_pam_authenticatable2 (9.2.0)
       devise (>= 4.0.0)
       rpam2 (~> 4.0)
@@ -225,7 +188,7 @@ GEM
     docile (1.3.4)
     domain_name (0.5.20190701)
       unf (>= 0.0.5, < 1.0.0)
-    doorkeeper (5.5.0)
+    doorkeeper (5.5.1)
       railties (>= 5)
     dotenv (2.7.6)
     dotenv-rails (2.7.6)
@@ -257,7 +220,7 @@ GEM
     faraday-net_http (1.0.1)
     fast_blank (1.0.0)
     fastimage (2.2.3)
-    ffi (1.14.2)
+    ffi (1.15.0)
     ffi-compiler (1.0.1)
       ffi (>= 1.0.0)
       rake
@@ -313,7 +276,7 @@ GEM
     httplog (1.4.3)
       rack (>= 1.0)
       rainbow (>= 2.0.0)
-    i18n (1.8.9)
+    i18n (1.8.10)
       concurrent-ruby (~> 1.0)
     i18n-tasks (0.9.34)
       activesupport (>= 4.0.2)
@@ -329,7 +292,7 @@ GEM
     ipaddress (0.8.3)
     iso-639 (0.3.5)
     jmespath (1.4.0)
-    json (2.3.1)
+    json (2.5.1)
     json-canonicalization (0.2.1)
     json-ld (3.1.9)
       htmlentities (~> 4.3)
@@ -369,19 +332,19 @@ GEM
       activesupport (>= 4)
       railties (>= 4)
       request_store (~> 1.0)
-    loofah (2.9.0)
+    loofah (2.9.1)
       crass (~> 1.0.2)
       nokogiri (>= 1.5.9)
     mail (2.7.1)
       mini_mime (>= 0.1.1)
     makara (0.5.0)
       activerecord (>= 3.0.0)
-    marcel (1.0.0)
+    marcel (1.0.1)
     mario-redis-lock (1.2.1)
       redis (>= 3.0.5)
     memory_profiler (1.0.0)
     method_source (1.0.0)
-    microformats (4.2.1)
+    microformats (4.3.1)
       json (~> 2.2)
       nokogiri (~> 1.10)
     mime-types (3.3.1)
@@ -391,7 +354,7 @@ GEM
       nokogiri (~> 1)
       rake
     mini_mime (1.0.3)
-    mini_portile2 (2.5.0)
+    mini_portile2 (2.5.1)
     minitest (5.14.4)
     msgpack (1.4.2)
     multi_json (1.15.0)
@@ -401,12 +364,17 @@ GEM
       net-ssh (>= 2.6.5, < 7.0.0)
     net-ssh (6.1.0)
     nio4r (2.5.7)
-    nokogiri (1.11.2)
+    nokogiri (1.11.3)
       mini_portile2 (~> 2.5.0)
       racc (~> 1.4)
     nokogumbo (2.0.4)
       nokogiri (~> 1.8, >= 1.8.4)
-    oj (3.11.3)
+    nsa (0.2.8)
+      activesupport (>= 4.2, < 7)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      sidekiq (>= 3.5)
+      statsd-ruby (~> 1.4, >= 1.4.0)
+    oj (3.11.5)
     omniauth (1.9.1)
       hashie (>= 3.4.6)
       rack (>= 1.6.2, < 3)
@@ -430,13 +398,10 @@ GEM
       mime-types
       mimemagic (~> 0.3.0)
       terrapin (~> 0.6.0)
-    paperclip-av-transcoder (0.6.4)
-      av (~> 0.9.0)
-      paperclip (>= 2.5.2)
     parallel (1.20.1)
-    parallel_tests (3.6.0)
+    parallel_tests (3.7.0)
       parallel
-    parser (3.0.0.0)
+    parser (3.0.1.1)
       ast (~> 2.4.1)
     parslet (2.0.0)
     pastel (0.8.0)
@@ -444,7 +409,7 @@ GEM
     pg (1.2.3)
     pghero (2.8.1)
       activerecord (>= 5)
-    pkg-config (1.4.5)
+    pkg-config (1.4.6)
     posix-spawn (0.3.15)
     premailer (1.14.2)
       addressable
@@ -463,7 +428,7 @@ GEM
     pry-rails (0.3.9)
       pry (>= 0.10.4)
     public_suffix (4.0.6)
-    puma (5.2.2)
+    puma (5.3.0)
       nio4r (~> 2.0)
     pundit (2.1.0)
       activesupport (>= 3.0.0)
@@ -478,20 +443,20 @@ GEM
       rack
     rack-test (1.1.0)
       rack (>= 1.0, < 3)
-    rails (6.1.3.1)
-      actioncable (= 6.1.3.1)
-      actionmailbox (= 6.1.3.1)
-      actionmailer (= 6.1.3.1)
-      actionpack (= 6.1.3.1)
-      actiontext (= 6.1.3.1)
-      actionview (= 6.1.3.1)
-      activejob (= 6.1.3.1)
-      activemodel (= 6.1.3.1)
-      activerecord (= 6.1.3.1)
-      activestorage (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    rails (6.1.3.2)
+      actioncable (= 6.1.3.2)
+      actionmailbox (= 6.1.3.2)
+      actionmailer (= 6.1.3.2)
+      actionpack (= 6.1.3.2)
+      actiontext (= 6.1.3.2)
+      actionview (= 6.1.3.2)
+      activejob (= 6.1.3.2)
+      activemodel (= 6.1.3.2)
+      activerecord (= 6.1.3.2)
+      activestorage (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       bundler (>= 1.15.0)
-      railties (= 6.1.3.1)
+      railties (= 6.1.3.2)
       sprockets-rails (>= 2.0.0)
     rails-controller-testing (1.0.5)
       actionpack (>= 5.0.1.rc1)
@@ -507,9 +472,9 @@ GEM
       railties (>= 6.0.0, < 7)
     rails-settings-cached (0.6.6)
       rails (>= 4.2.0)
-    railties (6.1.3.1)
-      actionpack (= 6.1.3.1)
-      activesupport (= 6.1.3.1)
+    railties (6.1.3.2)
+      actionpack (= 6.1.3.2)
+      activesupport (= 6.1.3.2)
       method_source
       rake (>= 0.8.7)
       thor (~> 1.0)
@@ -527,16 +492,17 @@ GEM
     regexp_parser (2.1.1)
     request_store (1.5.0)
       rack (>= 1.4)
+    resolv (0.1.0)
     responders (3.0.1)
       actionpack (>= 5.0)
       railties (>= 5.0)
-    rexml (3.2.4)
+    rexml (3.2.5)
     rotp (6.2.0)
     rpam2 (4.0.2)
-    rqrcode (1.2.0)
+    rqrcode (2.0.0)
       chunky_png (~> 1.0)
-      rqrcode_core (~> 0.2)
-    rqrcode_core (0.2.0)
+      rqrcode_core (~> 1.0)
+    rqrcode_core (1.0.0)
     rspec-core (3.10.1)
       rspec-support (~> 3.10.0)
     rspec-expectations (3.10.1)
@@ -559,21 +525,21 @@ GEM
     rspec-support (3.10.2)
     rspec_junit_formatter (0.4.1)
       rspec-core (>= 2, < 4, != 2.12.0)
-    rubocop (1.12.1)
+    rubocop (1.14.0)
       parallel (~> 1.10)
       parser (>= 3.0.0.0)
       rainbow (>= 2.2.2, < 4.0)
       regexp_parser (>= 1.8, < 3.0)
       rexml
-      rubocop-ast (>= 1.2.0, < 2.0)
+      rubocop-ast (>= 1.5.0, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 1.4.0, < 3.0)
-    rubocop-ast (1.4.1)
-      parser (>= 2.7.1.5)
-    rubocop-rails (2.9.1)
+    rubocop-ast (1.5.0)
+      parser (>= 3.0.1.1)
+    rubocop-rails (2.10.1)
       activesupport (>= 4.2.0)
       rack (>= 1.1)
-      rubocop (>= 0.90.0, < 2.0)
+      rubocop (>= 1.7.0, < 2.0)
     ruby-progressbar (1.11.0)
     ruby-saml (1.11.0)
       nokogiri (>= 1.5.10)
@@ -590,8 +556,8 @@ GEM
       activerecord (>= 4.0.0)
       railties (>= 4.0.0)
     securecompare (1.0.0)
-    semantic_range (2.3.0)
-    sidekiq (6.2.0)
+    semantic_range (3.0.0)
+    sidekiq (6.2.1)
       connection_pool (>= 2.2.2)
       rack (~> 2.0)
       redis (>= 4.2.0)
@@ -604,7 +570,7 @@ GEM
       sidekiq (>= 3)
       thwait
       tilt (>= 1.4.0)
-    sidekiq-unique-jobs (7.0.7)
+    sidekiq-unique-jobs (7.0.9)
       brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
       concurrent-ruby (~> 1.0, >= 1.0.5)
       sidekiq (>= 5.0, < 7.0)
@@ -630,11 +596,9 @@ GEM
     sshkit (1.21.2)
       net-scp (>= 1.1.2)
       net-ssh (>= 2.8.0)
-    stackprof (0.2.16)
+    stackprof (0.2.17)
     statsd-ruby (1.5.0)
     stoplight (2.2.1)
-    streamio-ffmpeg (3.0.2)
-      multi_json (~> 1.8)
     strong_migrations (0.7.6)
       activerecord (>= 5)
     temple (0.8.2)
@@ -651,7 +615,7 @@ GEM
       openssl-signature_algorithm (~> 0.4.0)
     tty-color (0.6.0)
     tty-cursor (0.7.1)
-    tty-prompt (0.23.0)
+    tty-prompt (0.23.1)
       pastel (~> 0.8)
       tty-reader (~> 0.8)
     tty-reader (0.9.0)
@@ -687,7 +651,7 @@ GEM
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
-    webpacker (5.2.1)
+    webpacker (5.3.0)
       activesupport (>= 5.2)
       rack-proxy (>= 0.6.1)
       railties (>= 5.2)
@@ -712,7 +676,7 @@ DEPENDENCIES
   active_record_query_trace (~> 1.8)
   addressable (~> 2.7)
   annotate (~> 3.1)
-  aws-sdk-s3 (~> 1.93)
+  aws-sdk-s3 (~> 1.94)
   better_errors (~> 2.9)
   binding_of_caller (~> 1.0)
   blurhash (~> 0.1)
@@ -728,13 +692,13 @@ DEPENDENCIES
   capybara (~> 3.35)
   charlock_holmes (~> 0.7.7)
   chewy (~> 5.2)
-  cld3 (~> 3.4.1)
+  cld3 (~> 3.4.2)
   climate_control (~> 0.2)
   color_diff (~> 0.1)
   concurrent-ruby
   connection_pool
-  devise (~> 4.7)
-  devise-two-factor!
+  devise (~> 4.8)
+  devise-two-factor (~> 4.0)
   devise_pam_authenticatable2 (~> 9.2)
   discard (~> 1.2)
   doorkeeper (~> 5.5)
@@ -769,9 +733,8 @@ DEPENDENCIES
   microformats (~> 4.2)
   mime-types (~> 3.3.1)
   net-ldap (~> 0.17)
-  nilsimsa!
   nokogiri (~> 1.11)
-  nsa!
+  nsa (~> 0.2)
   oj (~> 3.11)
   omniauth (~> 1.9)
   omniauth-cas (~> 2.0)
@@ -779,20 +742,18 @@ DEPENDENCIES
   omniauth-saml (~> 1.10)
   ox (~> 2.14)
   paperclip (~> 6.0)
-  paperclip-av-transcoder (~> 0.6)
   parallel (~> 1.20)
-  parallel_tests (~> 3.6)
+  parallel_tests (~> 3.7)
   parslet
   pg (~> 1.2)
   pghero (~> 2.8)
   pkg-config (~> 1.4)
-  pluck_each!
   posix-spawn
   premailer-rails
   private_address_check (~> 0.5)
   pry-byebug (~> 3.9)
   pry-rails (~> 0.3)
-  puma (~> 5.2)
+  puma (~> 5.3)
   pundit (~> 2.1)
   rack (~> 2.2.3)
   rack-attack (~> 6.5)
@@ -805,12 +766,13 @@ DEPENDENCIES
   redcarpet (~> 3.5)
   redis (~> 4.2)
   redis-namespace (~> 1.8)
-  rqrcode (~> 1.2)
+  resolv (~> 0.1.0)
+  rqrcode (~> 2.0)
   rspec-rails (~> 5.0)
   rspec-sidekiq (~> 3.1)
   rspec_junit_formatter (~> 0.4)
-  rubocop (~> 1.12)
-  rubocop-rails (~> 2.9)
+  rubocop (~> 1.14)
+  rubocop-rails (~> 2.10)
   ruby-progressbar (~> 1.11)
   sanitize (~> 5.2)
   scenic (~> 1.5)
@@ -825,7 +787,6 @@ DEPENDENCIES
   sprockets-rails (~> 3.2)
   stackprof
   stoplight (~> 2.2.1)
-  streamio-ffmpeg (~> 3.0)
   strong_migrations (~> 0.7)
   thor (~> 1.1)
   tty-prompt (~> 0.23)
@@ -833,6 +794,6 @@ DEPENDENCIES
   tzinfo-data (~> 1.2021)
   webauthn (~> 3.0.0.alpha1)
   webmock (~> 3.12)
-  webpacker (~> 5.2)
-  webpush
+  webpacker (~> 5.3)
+  webpush (~> 0.3)
   xorcist (~> 1.1)
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index ab7e1f077..f9bd616e4 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -78,11 +78,7 @@ class AccountsController < ApplicationController
   end
 
   def only_media_scope
-    Status.where(id: account_media_status_ids)
-  end
-
-  def account_media_status_ids
-    @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id)
+    Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id)
   end
 
   def no_replies_scope
diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb
index 5fd735ad6..111285036 100644
--- a/app/controllers/activitypub/outboxes_controller.rb
+++ b/app/controllers/activitypub/outboxes_controller.rb
@@ -20,7 +20,7 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController
   def outbox_presenter
     if page_requested?
       ActivityPub::CollectionPresenter.new(
-        id: outbox_url(page_params),
+        id: outbox_url(**page_params),
         type: :ordered,
         part_of: outbox_url,
         prev: prev_page,
diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb
index 9e921fb95..a00d7ed96 100644
--- a/app/controllers/admin/dashboard_controller.rb
+++ b/app/controllers/admin/dashboard_controller.rb
@@ -36,7 +36,6 @@ module Admin
       @profile_directory     = Setting.profile_directory
       @timeline_preview      = Setting.timeline_preview
       @keybase_integration   = Setting.enable_keybase
-      @spam_check_enabled    = Setting.spam_check_enabled
       @trends_enabled        = Setting.trends
     end
 
diff --git a/app/controllers/admin/follow_recommendations_controller.rb b/app/controllers/admin/follow_recommendations_controller.rb
new file mode 100644
index 000000000..e3eac62b3
--- /dev/null
+++ b/app/controllers/admin/follow_recommendations_controller.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module Admin
+  class FollowRecommendationsController < BaseController
+    before_action :set_language
+
+    def show
+      authorize :follow_recommendation, :show?
+
+      @form     = Form::AccountBatch.new
+      @accounts = filtered_follow_recommendations
+    end
+
+    def update
+      @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button))
+      @form.save
+    rescue ActionController::ParameterMissing
+      # Do nothing
+    ensure
+      redirect_to admin_follow_recommendations_path(filter_params)
+    end
+
+    private
+
+    def set_language
+      @language = follow_recommendation_filter.language
+    end
+
+    def filtered_follow_recommendations
+      follow_recommendation_filter.results
+    end
+
+    def follow_recommendation_filter
+      @follow_recommendation_filter ||= FollowRecommendationFilter.new(filter_params)
+    end
+
+    def form_account_batch_params
+      params.require(:form_account_batch).permit(:action, account_ids: [])
+    end
+
+    def filter_params
+      params.slice(*FollowRecommendationFilter::KEYS).permit(*FollowRecommendationFilter::KEYS)
+    end
+
+    def action_from_button
+      if params[:suppress]
+        'suppress_follow_recommendation'
+      elsif params[:unsuppress]
+        'unsuppress_follow_recommendation'
+      end
+    end
+  end
+end
diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb
index b5918d231..748c5de5a 100644
--- a/app/controllers/admin/instances_controller.rb
+++ b/app/controllers/admin/instances_controller.rb
@@ -3,7 +3,8 @@
 module Admin
   class InstancesController < BaseController
     before_action :set_instances, only: :index
-    before_action :set_instance, only: :show
+    before_action :set_instance, except: :index
+    before_action :set_exhausted_deliveries_days, only: :show
 
     def index
       authorize :instance, :index?
@@ -13,14 +14,55 @@ module Admin
       authorize :instance, :show?
     end
 
+    def clear_delivery_errors
+      authorize :delivery, :clear_delivery_errors?
+
+      @instance.delivery_failure_tracker.clear_failures!
+      redirect_to admin_instance_path(@instance.domain)
+    end
+
+    def restart_delivery
+      authorize :delivery, :restart_delivery?
+
+      last_unavailable_domain = unavailable_domain
+
+      if last_unavailable_domain.present?
+        @instance.delivery_failure_tracker.track_success!
+        log_action :destroy, last_unavailable_domain
+      end
+
+      redirect_to admin_instance_path(@instance.domain)
+    end
+
+    def stop_delivery
+      authorize :delivery, :stop_delivery?
+
+      UnavailableDomain.create(domain: @instance.domain)
+      log_action :create, unavailable_domain
+      redirect_to admin_instance_path(@instance.domain)
+    end
+
     private
 
     def set_instance
       @instance = Instance.find(params[:id])
     end
 
+    def set_exhausted_deliveries_days
+      @exhausted_deliveries_days = @instance.delivery_failure_tracker.exhausted_deliveries_days
+    end
+
     def set_instances
       @instances = filtered_instances.page(params[:page])
+      warning_domains_map = DeliveryFailureTracker.warning_domains_map
+
+      @instances.each do |instance|
+        instance.failure_days = warning_domains_map[instance.domain]
+      end
+    end
+
+    def unavailable_domain
+      UnavailableDomain.find_by(domain: @instance.domain)
     end
 
     def filtered_instances
diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb
index d7c192f0d..ef279509d 100644
--- a/app/controllers/admin/statuses_controller.rb
+++ b/app/controllers/admin/statuses_controller.rb
@@ -14,8 +14,7 @@ module Admin
       @statuses = @account.statuses.where(visibility: [:public, :unlisted])
 
       if params[:media]
-        account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id)
-        @statuses.merge!(Status.where(id: account_media_status_ids))
+        @statuses.merge!(Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id))
       end
 
       @statuses = @statuses.preload(:media_attachments, :mentions).page(params[:page]).per(PER_PAGE)
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index 996f1b79b..95869f554 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -35,7 +35,7 @@ class Api::V1::AccountsController < Api::BaseController
     follow  = FollowService.new.call(current_user.account, @account, reblogs: params.key?(:reblogs) ? truthy_param?(:reblogs) : nil, notify: params.key?(:notify) ? truthy_param?(:notify) : nil, with_rate_limit: true)
     options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: follow.show_reblogs?, notify: follow.notify? } }, requested_map: { @account.id => false } }
 
-    render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options)
+    render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(**options)
   end
 
   def block
@@ -70,7 +70,7 @@ class Api::V1::AccountsController < Api::BaseController
   end
 
   def relationships(**options)
-    AccountRelationshipsPresenter.new([@account.id], current_user.account_id, options)
+    AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options)
   end
 
   def account_params
diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb
index b34c76f29..f4b2a74d0 100644
--- a/app/controllers/api/v1/follow_requests_controller.rb
+++ b/app/controllers/api/v1/follow_requests_controller.rb
@@ -29,7 +29,7 @@ class Api::V1::FollowRequestsController < Api::BaseController
   end
 
   def relationships(**options)
-    AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, options)
+    AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options)
   end
 
   def load_accounts
diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb
index 0918c61e9..47f2e6440 100644
--- a/app/controllers/api/v1/push/subscriptions_controller.rb
+++ b/app/controllers/api/v1/push/subscriptions_controller.rb
@@ -3,13 +3,13 @@
 class Api::V1::Push::SubscriptionsController < Api::BaseController
   before_action -> { doorkeeper_authorize! :push }
   before_action :require_user!
-  before_action :set_web_push_subscription
-  before_action :check_web_push_subscription, only: [:show, :update]
+  before_action :set_push_subscription
+  before_action :check_push_subscription, only: [:show, :update]
 
   def create
-    @web_subscription&.destroy!
+    @push_subscription&.destroy!
 
-    @web_subscription = ::Web::PushSubscription.create!(
+    @push_subscription = Web::PushSubscription.create!(
       endpoint: subscription_params[:endpoint],
       key_p256dh: subscription_params[:keys][:p256dh],
       key_auth: subscription_params[:keys][:auth],
@@ -18,31 +18,31 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
       access_token_id: doorkeeper_token.id
     )
 
-    render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer
+    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
   def show
-    render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer
+    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
   def update
-    @web_subscription.update!(data: data_params)
-    render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer
+    @push_subscription.update!(data: data_params)
+    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
   def destroy
-    @web_subscription&.destroy!
+    @push_subscription&.destroy!
     render_empty
   end
 
   private
 
-  def set_web_push_subscription
-    @web_subscription = ::Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id)
+  def set_push_subscription
+    @push_subscription = Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id)
   end
 
-  def check_web_push_subscription
-    not_found if @web_subscription.nil?
+  def check_push_subscription
+    not_found if @push_subscription.nil?
   end
 
   def subscription_params
@@ -52,6 +52,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
   def data_params
     return {} if params[:data].blank?
 
-    params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status])
+    params.require(:data).permit(:policy, alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status])
   end
 end
diff --git a/app/controllers/api/v1/suggestions_controller.rb b/app/controllers/api/v1/suggestions_controller.rb
index 52054160d..9737ae5cb 100644
--- a/app/controllers/api/v1/suggestions_controller.rb
+++ b/app/controllers/api/v1/suggestions_controller.rb
@@ -5,20 +5,20 @@ class Api::V1::SuggestionsController < Api::BaseController
 
   before_action -> { doorkeeper_authorize! :read }
   before_action :require_user!
-  before_action :set_accounts
 
   def index
-    render json: @accounts, each_serializer: REST::AccountSerializer
+    suggestions = suggestions_source.get(current_account, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT))
+    render json: suggestions.map(&:account), each_serializer: REST::AccountSerializer
   end
 
   def destroy
-    PotentialFriendshipTracker.remove(current_account.id, params[:id])
+    suggestions_source.remove(current_account, params[:id])
     render_empty
   end
 
   private
 
-  def set_accounts
-    @accounts = PotentialFriendshipTracker.get(current_account.id, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT))
+  def suggestions_source
+    AccountSuggestions::PastInteractionsSource.new
   end
 end
diff --git a/app/controllers/api/v2/suggestions_controller.rb b/app/controllers/api/v2/suggestions_controller.rb
new file mode 100644
index 000000000..35eb276c0
--- /dev/null
+++ b/app/controllers/api/v2/suggestions_controller.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class Api::V2::SuggestionsController < Api::BaseController
+  include Authorization
+
+  before_action -> { doorkeeper_authorize! :read }
+  before_action :require_user!
+  before_action :set_suggestions
+
+  def index
+    render json: @suggestions, each_serializer: REST::SuggestionSerializer
+  end
+
+  private
+
+  def set_suggestions
+    @suggestions = AccountSuggestions.get(current_account, limit_param(DEFAULT_ACCOUNTS_LIMIT))
+  end
+end
diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb
index 1dce3e70f..bed57fc54 100644
--- a/app/controllers/api/web/push_subscriptions_controller.rb
+++ b/app/controllers/api/web/push_subscriptions_controller.rb
@@ -2,6 +2,7 @@
 
 class Api::Web::PushSubscriptionsController < Api::Web::BaseController
   before_action :require_user!
+  before_action :set_push_subscription, only: :update
 
   def create
     active_session = current_session
@@ -15,9 +16,11 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
     alerts_enabled = active_session.detection.device.mobile? || active_session.detection.device.tablet?
 
     data = {
+      policy: 'all',
+
       alerts: {
         follow: alerts_enabled,
-        follow_request: false,
+        follow_request: alerts_enabled,
         favourite: alerts_enabled,
         reblog: alerts_enabled,
         mention: alerts_enabled,
@@ -28,7 +31,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
 
     data.deep_merge!(data_params) if params[:data]
 
-    web_subscription = ::Web::PushSubscription.create!(
+    push_subscription = ::Web::PushSubscription.create!(
       endpoint: subscription_params[:endpoint],
       key_p256dh: subscription_params[:keys][:p256dh],
       key_auth: subscription_params[:keys][:auth],
@@ -37,27 +40,27 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
       access_token_id: active_session.access_token_id
     )
 
-    active_session.update!(web_push_subscription: web_subscription)
+    active_session.update!(web_push_subscription: push_subscription)
 
-    render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer
+    render json: push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
   def update
-    params.require([:id])
-
-    web_subscription = ::Web::PushSubscription.find(params[:id])
-    web_subscription.update!(data: data_params)
-
-    render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer
+    @push_subscription.update!(data: data_params)
+    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
   private
 
+  def set_push_subscription
+    @push_subscription = ::Web::PushSubscription.find(params[:id])
+  end
+
   def subscription_params
     @subscription_params ||= params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh])
   end
 
   def data_params
-    @data_params ||= params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status])
+    @data_params ||= params.require(:data).permit(:policy, alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status])
   end
 end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7435d78bf..9eb73d576 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -19,17 +19,16 @@ class ApplicationController < ActionController::Base
   helper_method :use_seamless_external_login?
   helper_method :whitelist_mode?
 
-  rescue_from ActionController::RoutingError, with: :not_found
-  rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
-  rescue_from ActionController::UnknownFormat, with: :not_acceptable
-  rescue_from ActionController::ParameterMissing, with: :bad_request
-  rescue_from Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
-  rescue_from ActiveRecord::RecordNotFound, with: :not_found
+  rescue_from ActionController::ParameterMissing, Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
   rescue_from Mastodon::NotPermittedError, with: :forbidden
-  rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
-  rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, with: :service_unavailable
+  rescue_from ActionController::RoutingError, ActiveRecord::RecordNotFound, with: :not_found
+  rescue_from ActionController::UnknownFormat, with: :not_acceptable
+  rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
   rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
 
+  rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
+  rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable
+
   before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
   before_action :require_functional!, if: :user_signed_in?
 
diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb
index 4e89446c7..0b5a2f3c9 100644
--- a/app/controllers/auth/confirmations_controller.rb
+++ b/app/controllers/auth/confirmations_controller.rb
@@ -22,7 +22,9 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController
   end
 
   def require_unconfirmed!
-    redirect_to edit_user_registration_path if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
+    if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
+      redirect_to(current_user.approved? ? root_path : edit_user_registration_path)
+    end
   end
 
   def set_body_classes
diff --git a/app/controllers/directories_controller.rb b/app/controllers/directories_controller.rb
index 549c6a39e..2263f286b 100644
--- a/app/controllers/directories_controller.rb
+++ b/app/controllers/directories_controller.rb
@@ -6,7 +6,6 @@ class DirectoriesController < ApplicationController
   before_action :authenticate_user!, if: :whitelist_mode?
   before_action :require_enabled!
   before_action :set_instance_presenter
-  before_action :set_tag, only: :show
   before_action :set_accounts
   before_action :set_pack
 
@@ -16,10 +15,6 @@ class DirectoriesController < ApplicationController
     render :index
   end
 
-  def show
-    render :index
-  end
-
   private
 
   def set_pack
@@ -30,13 +25,8 @@ class DirectoriesController < ApplicationController
     return not_found unless Setting.profile_directory
   end
 
-  def set_tag
-    @tag = Tag.discoverable.find_normalized!(params[:id])
-  end
-
   def set_accounts
     @accounts = Account.local.discoverable.by_recent_status.page(params[:page]).per(20).tap do |query|
-      query.merge!(Account.tagged_with(@tag.id)) if @tag
       query.merge!(Account.not_excluded_by_account(current_account)) if current_account
     end
   end
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 3290224b4..3812f541e 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -16,7 +16,6 @@ class StatusesController < ApplicationController
   before_action :set_referrer_policy_header, only: :show
   before_action :set_cache_headers
   before_action :set_body_classes
-  before_action :set_autoplay, only: :embed
 
   skip_around_action :set_locale, if: -> { request.format == :json }
   skip_before_action :require_functional!, only: [:show, :embed], unless: :whitelist_mode?
@@ -85,8 +84,4 @@ class StatusesController < ApplicationController
   def set_referrer_policy_header
     response.headers['Referrer-Policy'] = 'origin' unless @status.distributable?
   end
-
-  def set_autoplay
-    @autoplay = truthy_param?(:autoplay)
-  end
 end
diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb
index 0f3ca36e2..e9a298a24 100644
--- a/app/helpers/admin/action_logs_helper.rb
+++ b/app/helpers/admin/action_logs_helper.rb
@@ -21,7 +21,7 @@ module Admin::ActionLogsHelper
       record.shortcode
     when 'Report'
       link_to "##{record.id}", admin_report_path(record)
-    when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock'
+    when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain'
       link_to record.domain, "https://#{record.domain}"
     when 'Status'
       link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record)
@@ -38,7 +38,7 @@ module Admin::ActionLogsHelper
     case type
     when 'CustomEmoji'
       attributes['shortcode']
-    when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock'
+    when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain'
       link_to attributes['domain'], "https://#{attributes['domain']}"
     when 'Status'
       tmp_status = Status.new(attributes.except('reblogs_count', 'favourites_count'))
diff --git a/app/helpers/email_helper.rb b/app/helpers/email_helper.rb
new file mode 100644
index 000000000..360783c62
--- /dev/null
+++ b/app/helpers/email_helper.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module EmailHelper
+  def self.included(base)
+    base.extend(self)
+  end
+
+  def email_to_canonical_email(str)
+    username, domain = str.downcase.split('@', 2)
+    username, = username.gsub('.', '').split('+', 2)
+
+    "#{username}@#{domain}"
+  end
+
+  def email_to_canonical_email_hash(str)
+    Digest::SHA2.new(256).hexdigest(email_to_canonical_email(str))
+  end
+end
diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb
index 1c473efa3..62eb50f78 100644
--- a/app/helpers/jsonld_helper.rb
+++ b/app/helpers/jsonld_helper.rb
@@ -67,7 +67,7 @@ module JsonLdHelper
     unless id
       json = fetch_resource_without_id_validation(uri, on_behalf_of)
 
-      return unless json
+      return if !json.is_a?(Hash) || unsupported_uri_scheme?(json['id'])
 
       uri = json['id']
     end
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index ae9a69826..677e3fc6c 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -2,6 +2,7 @@
 
 module SettingsHelper
   HUMAN_LOCALES = {
+    af: 'Afrikaans',
     ar: 'العربية',
     ast: 'Asturianu',
     bg: 'Български',
@@ -25,6 +26,7 @@ module SettingsHelper
     fi: 'Suomi',
     fr: 'Français',
     ga: 'Gaeilge',
+    gd: 'Gàidhlig',
     gl: 'Galego',
     he: 'עברית',
     hi: 'हिन्दी',
@@ -60,6 +62,7 @@ module SettingsHelper
     ru: 'Русский',
     sa: 'संस्कृतम्',
     sc: 'Sardu',
+    si: 'සිංහල',
     sk: 'Slovenčina',
     sl: 'Slovenščina',
     sq: 'Shqip',
diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb
index 1f654f34f..25f079e9d 100644
--- a/app/helpers/statuses_helper.rb
+++ b/app/helpers/statuses_helper.rb
@@ -130,4 +130,84 @@ module StatusesHelper
   def embedded_view?
     params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION
   end
+
+  def render_video_component(status, **options)
+    video = status.media_attachments.first
+
+    meta = video.file.meta || {}
+
+    component_params = {
+      sensitive: sensitized?(status, current_account),
+      src: full_asset_url(video.file.url(:original)),
+      preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)),
+      alt: video.description,
+      blurhash: video.blurhash,
+      frameRate: meta.dig('original', 'frame_rate'),
+      inline: true,
+      media: [
+        ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer),
+      ].as_json,
+    }.merge(**options)
+
+    react_component :video, component_params do
+      render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+    end
+  end
+
+  def render_audio_component(status, **options)
+    audio = status.media_attachments.first
+
+    meta = audio.file.meta || {}
+
+    component_params = {
+      src: full_asset_url(audio.file.url(:original)),
+      poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url),
+      alt: audio.description,
+      backgroundColor: meta.dig('colors', 'background'),
+      foregroundColor: meta.dig('colors', 'foreground'),
+      accentColor: meta.dig('colors', 'accent'),
+      duration: meta.dig('original', 'duration'),
+    }.merge(**options)
+
+    react_component :audio, component_params do
+      render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+    end
+  end
+
+  def render_media_gallery_component(status, **options)
+    component_params = {
+      sensitive: sensitized?(status, current_account),
+      autoplay: prefers_autoplay?,
+      media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json },
+    }.merge(**options)
+
+    react_component :media_gallery, component_params do
+      render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+    end
+  end
+
+  def render_card_component(status, **options)
+    component_params = {
+      sensitive: sensitized?(status, current_account),
+      maxDescription: 160,
+      card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json,
+    }.merge(**options)
+
+    react_component :card, component_params
+  end
+
+  def render_poll_component(status, **options)
+    component_params = {
+      disabled: true,
+      poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json,
+    }.merge(**options)
+
+    react_component :poll, component_params do
+      render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: prefers_autoplay? }
+    end
+  end
+
+  def prefers_autoplay?
+    ActiveModel::Type::Boolean.new.cast(params[:autoplay]) || current_user&.setting_auto_play_gif
+  end
 end
diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js
index 05955963c..9b3bd0d56 100644
--- a/app/javascript/flavours/glitch/actions/importer/normalizer.js
+++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js
@@ -24,6 +24,7 @@ export function normalizeAccount(account) {
 
   account.display_name_html = emojify(escapeTextContentForBrowser(displayName), emojiMap);
   account.note_emojified = emojify(account.note, emojiMap);
+  account.note_plain = unescapeHTML(account.note);
 
   if (account.fields) {
     account.fields = account.fields.map(pair => ({
diff --git a/app/javascript/flavours/glitch/actions/search.js b/app/javascript/flavours/glitch/actions/search.js
index a025f352a..b4aee4525 100644
--- a/app/javascript/flavours/glitch/actions/search.js
+++ b/app/javascript/flavours/glitch/actions/search.js
@@ -32,6 +32,7 @@ export function submitSearch() {
     const value = getState().getIn(['search', 'value']);
 
     if (value.length === 0) {
+      dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, ''));
       return;
     }
 
diff --git a/app/javascript/flavours/glitch/actions/suggestions.js b/app/javascript/flavours/glitch/actions/suggestions.js
index 3687136ff..7070250e3 100644
--- a/app/javascript/flavours/glitch/actions/suggestions.js
+++ b/app/javascript/flavours/glitch/actions/suggestions.js
@@ -1,5 +1,6 @@
 import api from 'flavours/glitch/util/api';
 import { importFetchedAccounts } from './importer';
+import { fetchRelationships } from './accounts';
 
 export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST';
 export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS';
@@ -7,13 +8,17 @@ export const SUGGESTIONS_FETCH_FAIL    = 'SUGGESTIONS_FETCH_FAIL';
 
 export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS';
 
-export function fetchSuggestions() {
+export function fetchSuggestions(withRelationships = false) {
   return (dispatch, getState) => {
     dispatch(fetchSuggestionsRequest());
 
-    api(getState).get('/api/v1/suggestions').then(response => {
-      dispatch(importFetchedAccounts(response.data));
+    api(getState).get('/api/v2/suggestions', { params: { limit: 20 } }).then(response => {
+      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
       dispatch(fetchSuggestionsSuccess(response.data));
+
+      if (withRelationships) {
+        dispatch(fetchRelationships(response.data.map(item => item.account.id)));
+      }
     }).catch(error => dispatch(fetchSuggestionsFail(error)));
   };
 };
@@ -25,10 +30,10 @@ export function fetchSuggestionsRequest() {
   };
 };
 
-export function fetchSuggestionsSuccess(accounts) {
+export function fetchSuggestionsSuccess(suggestions) {
   return {
     type: SUGGESTIONS_FETCH_SUCCESS,
-    accounts,
+    suggestions,
     skipLoading: true,
   };
 };
@@ -48,5 +53,12 @@ export const dismissSuggestion = accountId => (dispatch, getState) => {
     id: accountId,
   });
 
-  api(getState).delete(`/api/v1/suggestions/${accountId}`);
+  api(getState).delete(`/api/v1/suggestions/${accountId}`).then(() => {
+    dispatch(fetchSuggestionsRequest());
+
+    api(getState).get('/api/v2/suggestions').then(response => {
+      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
+      dispatch(fetchSuggestionsSuccess(response.data));
+    }).catch(error => dispatch(fetchSuggestionsFail(error)));
+  }).catch(() => {});
 };
diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js
index b19666e62..24cc0d63f 100644
--- a/app/javascript/flavours/glitch/actions/timelines.js
+++ b/app/javascript/flavours/glitch/actions/timelines.js
@@ -20,6 +20,8 @@ export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING';
 export const TIMELINE_DISCONNECT   = 'TIMELINE_DISCONNECT';
 export const TIMELINE_CONNECT      = 'TIMELINE_CONNECT';
 
+export const TIMELINE_MARK_AS_PARTIAL = 'TIMELINE_MARK_AS_PARTIAL';
+
 export const loadPending = timeline => ({
   type: TIMELINE_LOAD_PENDING,
   timeline,
@@ -31,6 +33,13 @@ export function updateTimeline(timeline, status, accept) {
       return;
     }
 
+    if (getState().getIn(['timelines', timeline, 'isPartial'])) {
+      // Prevent new items from being added to a partial timeline,
+      // since it will be reloaded anyway
+
+      return;
+    }
+
     const filters   = getFiltersRegex(getState(), { contextType: timeline });
     const dropRegex = filters[0];
     const regex     = filters[1];
@@ -198,3 +207,8 @@ export const disconnectTimeline = timeline => ({
   timeline,
   usePendingItems: preferPendingItems,
 });
+
+export const markAsPartial = timeline => ({
+  type: TIMELINE_MARK_AS_PARTIAL,
+  timeline,
+});
diff --git a/app/javascript/flavours/glitch/blurhash.js b/app/javascript/flavours/glitch/blurhash.js
new file mode 100644
index 000000000..5adcc3e77
--- /dev/null
+++ b/app/javascript/flavours/glitch/blurhash.js
@@ -0,0 +1,112 @@
+const DIGIT_CHARACTERS = [
+  '0',
+  '1',
+  '2',
+  '3',
+  '4',
+  '5',
+  '6',
+  '7',
+  '8',
+  '9',
+  'A',
+  'B',
+  'C',
+  'D',
+  'E',
+  'F',
+  'G',
+  'H',
+  'I',
+  'J',
+  'K',
+  'L',
+  'M',
+  'N',
+  'O',
+  'P',
+  'Q',
+  'R',
+  'S',
+  'T',
+  'U',
+  'V',
+  'W',
+  'X',
+  'Y',
+  'Z',
+  'a',
+  'b',
+  'c',
+  'd',
+  'e',
+  'f',
+  'g',
+  'h',
+  'i',
+  'j',
+  'k',
+  'l',
+  'm',
+  'n',
+  'o',
+  'p',
+  'q',
+  'r',
+  's',
+  't',
+  'u',
+  'v',
+  'w',
+  'x',
+  'y',
+  'z',
+  '#',
+  '$',
+  '%',
+  '*',
+  '+',
+  ',',
+  '-',
+  '.',
+  ':',
+  ';',
+  '=',
+  '?',
+  '@',
+  '[',
+  ']',
+  '^',
+  '_',
+  '{',
+  '|',
+  '}',
+  '~',
+];
+
+export const decode83 = (str) => {
+  let value = 0;
+  let c, digit;
+
+  for (let i = 0; i < str.length; i++) {
+    c = str[i];
+    digit = DIGIT_CHARACTERS.indexOf(c);
+    value = value * 83 + digit;
+  }
+
+  return value;
+};
+
+export const intToRGB = int => ({
+  r: Math.max(0, (int >> 16)),
+  g: Math.max(0, (int >> 8) & 255),
+  b: Math.max(0, (int & 255)),
+});
+
+export const getAverageFromBlurhash = blurhash => {
+  if (!blurhash) {
+    return null;
+  }
+
+  return intToRGB(decode83(blurhash.slice(2, 6)));
+};
diff --git a/app/javascript/flavours/glitch/components/account.js b/app/javascript/flavours/glitch/components/account.js
index 23399c630..20313535b 100644
--- a/app/javascript/flavours/glitch/components/account.js
+++ b/app/javascript/flavours/glitch/components/account.js
@@ -87,8 +87,10 @@ class Account extends ImmutablePureComponent {
 
     let buttons;
 
-    if (onActionClick && actionIcon) {
-      buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />;
+    if (onActionClick) {
+      if (actionIcon) {
+        buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />;
+      }
     } else if (account.get('id') !== me && !small && account.get('relationship', null) !== null) {
       const following = account.getIn(['relationship', 'following']);
       const requested = account.getIn(['relationship', 'requested']);
diff --git a/app/javascript/flavours/glitch/components/logo.js b/app/javascript/flavours/glitch/components/logo.js
new file mode 100644
index 000000000..d1c7f08a9
--- /dev/null
+++ b/app/javascript/flavours/glitch/components/logo.js
@@ -0,0 +1,9 @@
+import React from 'react';
+
+const Logo = () => (
+  <svg viewBox='0 0 216.4144 232.00976' className='logo'>
+    <use xlinkHref='#mastodon-svg-logo' />
+  </svg>
+);
+
+export default Logo;
diff --git a/app/javascript/flavours/glitch/components/media_gallery.js b/app/javascript/flavours/glitch/components/media_gallery.js
index 890a422d3..68195ea80 100644
--- a/app/javascript/flavours/glitch/components/media_gallery.js
+++ b/app/javascript/flavours/glitch/components/media_gallery.js
@@ -24,7 +24,7 @@ const messages = defineMessages({
     id: 'status.sensitive_toggle',
   },
   toggle_visible: {
-    defaultMessage: 'Hide {number, plural, one {image} other {images}}',
+    defaultMessage: '{number, plural, one {Hide image} other {Hide images}}',
     id: 'media_gallery.toggle_visible',
   },
   warning: {
diff --git a/app/javascript/flavours/glitch/components/modal_root.js b/app/javascript/flavours/glitch/components/modal_root.js
index 13a8e8702..913234d32 100644
--- a/app/javascript/flavours/glitch/components/modal_root.js
+++ b/app/javascript/flavours/glitch/components/modal_root.js
@@ -2,6 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import 'wicg-inert';
 import { createBrowserHistory } from 'history';
+import { multiply } from 'color-blend';
 
 export default class ModalRoot extends React.PureComponent {
   static contextTypes = {
@@ -11,6 +12,11 @@ export default class ModalRoot extends React.PureComponent {
   static propTypes = {
     children: PropTypes.node,
     onClose: PropTypes.func.isRequired,
+    backgroundColor: PropTypes.shape({
+      r: PropTypes.number,
+      g: PropTypes.number,
+      b: PropTypes.number,
+    }),
     noEsc: PropTypes.bool,
   };
 
@@ -68,9 +74,7 @@ export default class ModalRoot extends React.PureComponent {
       Promise.resolve().then(() => {
         this.activeElement.focus({ preventScroll: true });
         this.activeElement = null;
-      }).catch((error) => {
-        console.error(error);
-      });
+      }).catch(console.error);
 
       this.handleModalClose();
     }
@@ -120,10 +124,16 @@ export default class ModalRoot extends React.PureComponent {
       );
     }
 
+    let backgroundColor = null;
+
+    if (this.props.backgroundColor) {
+      backgroundColor = multiply({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.7 });
+    }
+
     return (
       <div className='modal-root' ref={this.setRef}>
         <div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
-          <div role='presentation' className='modal-root__overlay' onClick={onClose} />
+          <div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} />
           <div role='dialog' className='modal-root__container'>{children}</div>
         </div>
       </div>
diff --git a/app/javascript/flavours/glitch/components/regeneration_indicator.js b/app/javascript/flavours/glitch/components/regeneration_indicator.js
index f4e0a79ef..68ce09df9 100644
--- a/app/javascript/flavours/glitch/components/regeneration_indicator.js
+++ b/app/javascript/flavours/glitch/components/regeneration_indicator.js
@@ -2,7 +2,7 @@ import React from 'react';
 import { FormattedMessage } from 'react-intl';
 import illustration from 'flavours/glitch/images/elephant_ui_working.svg';
 
-const MissingIndicator = () => (
+const RegenerationIndicator = () => (
   <div className='regeneration-indicator'>
     <div className='regeneration-indicator__figure'>
       <img src={illustration} alt='' />
@@ -15,4 +15,4 @@ const MissingIndicator = () => (
   </div>
 );
 
-export default MissingIndicator;
+export default RegenerationIndicator;
diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js
index fcbf4be8c..782fd918e 100644
--- a/app/javascript/flavours/glitch/components/status.js
+++ b/app/javascript/flavours/glitch/components/status.js
@@ -378,22 +378,26 @@ class Status extends ImmutablePureComponent {
     }
   };
 
-  handleOpenVideo = (media, options) => {
-    this.props.onOpenVideo(media, options);
+  handleOpenVideo = (options) => {
+    const { status } = this.props;
+    this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options);
+  }
+
+  handleOpenMedia = (media, index) => {
+    this.props.onOpenMedia(this.props.status.get('id'), media, index);
   }
 
   handleHotkeyOpenMedia = e => {
     const { status, onOpenMedia, onOpenVideo } = this.props;
+    const statusId = status.get('id');
 
     e.preventDefault();
 
     if (status.get('media_attachments').size > 0) {
-      if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
-        // TODO: toggle play/paused?
-      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
-        onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
+      if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
+        onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 });
       } else {
-        onOpenMedia(status.get('media_attachments'), 0);
+        onOpenMedia(statusId, status.get('media_attachments'), 0);
       }
     }
   }
@@ -657,7 +661,7 @@ class Status extends ImmutablePureComponent {
                 letterbox={settings.getIn(['media', 'letterbox'])}
                 fullwidth={settings.getIn(['media', 'fullwidth'])}
                 hidden={isCollapsed || !isExpanded}
-                onOpenMedia={this.props.onOpenMedia}
+                onOpenMedia={this.handleOpenMedia}
                 cacheWidth={this.props.cacheMediaWidth}
                 defaultWidth={this.props.cachedMediaWidth}
                 visible={this.state.showMedia}
@@ -675,7 +679,7 @@ class Status extends ImmutablePureComponent {
     } else if (status.get('card') && settings.get('inline_preview_cards')) {
       media = (
         <Card
-          onOpenMedia={this.props.onOpenMedia}
+          onOpenMedia={this.handleOpenMedia}
           card={status.get('card')}
           compact
           cacheWidth={this.props.cacheMediaWidth}
diff --git a/app/javascript/flavours/glitch/containers/mastodon.js b/app/javascript/flavours/glitch/containers/mastodon.js
index 762280bec..bcdd9b54e 100644
--- a/app/javascript/flavours/glitch/containers/mastodon.js
+++ b/app/javascript/flavours/glitch/containers/mastodon.js
@@ -2,7 +2,6 @@ import React from 'react';
 import { Provider } from 'react-redux';
 import PropTypes from 'prop-types';
 import configureStore from 'flavours/glitch/store/configureStore';
-import { showOnboardingOnce } from 'flavours/glitch/actions/onboarding';
 import { BrowserRouter, Route } from 'react-router-dom';
 import { ScrollContext } from 'react-router-scroll-4';
 import UI from 'flavours/glitch/features/ui';
@@ -32,7 +31,6 @@ export default class Mastodon extends React.PureComponent {
 
   componentDidMount() {
     this.disconnect = store.dispatch(connectUserStream());
-    store.dispatch(showOnboardingOnce());
   }
 
   componentWillUnmount () {
diff --git a/app/javascript/flavours/glitch/containers/media_container.js b/app/javascript/flavours/glitch/containers/media_container.js
index a483510b0..8657b8064 100644
--- a/app/javascript/flavours/glitch/containers/media_container.js
+++ b/app/javascript/flavours/glitch/containers/media_container.js
@@ -2,7 +2,7 @@ import React, { PureComponent, Fragment } from 'react';
 import ReactDOM from 'react-dom';
 import PropTypes from 'prop-types';
 import { IntlProvider, addLocaleData } from 'react-intl';
-import { List as ImmutableList, fromJS } from 'immutable';
+import { fromJS } from 'immutable';
 import { getLocale } from 'mastodon/locales';
 import { getScrollbarWidth } from 'flavours/glitch/util/scrollbar';
 import MediaGallery from 'flavours/glitch/components/media_gallery';
@@ -30,6 +30,8 @@ export default class MediaContainer extends PureComponent {
     media: null,
     index: null,
     time: null,
+    backgroundColor: null,
+    options: null,
   };
 
   handleOpenMedia = (media, index) => {
@@ -39,20 +41,32 @@ export default class MediaContainer extends PureComponent {
     this.setState({ media, index });
   }
 
-  handleOpenVideo = (video, time) => {
-    const media = ImmutableList([video]);
+  handleOpenVideo = (options) => {
+    const { components } = this.props;
+    const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props'));
+    const mediaList = fromJS(media);
 
     document.body.classList.add('with-modals--active');
     document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;
 
-    this.setState({ media, time });
+    this.setState({ media: mediaList, options });
   }
 
   handleCloseMedia = () => {
     document.body.classList.remove('with-modals--active');
     document.documentElement.style.marginRight = 0;
 
-    this.setState({ media: null, index: null, time: null });
+    this.setState({
+      media: null,
+      index: null,
+      time: null,
+      backgroundColor: null,
+      options: null,
+    });
+  }
+
+  setBackgroundColor = color => {
+    this.setState({ backgroundColor: color });
   }
 
   render () {
@@ -73,6 +87,7 @@ export default class MediaContainer extends PureComponent {
               ...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
 
               ...(componentName === 'Video' ? {
+                componetIndex: i,
                 onOpenVideo: this.handleOpenVideo,
               } : {
                 onOpenMedia: this.handleOpenMedia,
@@ -85,13 +100,16 @@ export default class MediaContainer extends PureComponent {
             );
           })}
 
-          <ModalRoot onClose={this.handleCloseMedia}>
+          <ModalRoot backgroundColor={this.state.backgroundColor} onClose={this.handleCloseMedia}>
             {this.state.media && (
               <MediaModal
                 media={this.state.media}
                 index={this.state.index || 0}
-                time={this.state.time}
+                currentTime={this.state.options?.startTime}
+                autoPlay={this.state.options?.autoPlay}
+                volume={this.state.options?.defaultVolume}
                 onClose={this.handleCloseMedia}
+                onChangeBackgroundColor={this.setBackgroundColor}
               />
             )}
           </ModalRoot>
diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js
index 6461bf805..bc3c43d85 100644
--- a/app/javascript/flavours/glitch/containers/status_container.js
+++ b/app/javascript/flavours/glitch/containers/status_container.js
@@ -177,12 +177,12 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({
     dispatch(mentionCompose(account, router));
   },
 
-  onOpenMedia (media, index) {
-    dispatch(openModal('MEDIA', { media, index }));
+  onOpenMedia (statusId, media, index) {
+    dispatch(openModal('MEDIA', { statusId, media, index }));
   },
 
-  onOpenVideo (media, options) {
-    dispatch(openModal('VIDEO', { media, options }));
+  onOpenVideo (statusId, media, options) {
+    dispatch(openModal('VIDEO', { statusId, media, options }));
   },
 
   onBlock (status) {
diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js
index c18520c00..4b0494fff 100644
--- a/app/javascript/flavours/glitch/features/account/components/header.js
+++ b/app/javascript/flavours/glitch/features/account/components/header.js
@@ -328,6 +328,8 @@ class Header extends ImmutablePureComponent {
                 )}
 
                 {account.get('note').length > 0 && account.get('note') !== '<p></p>' && <div className='account__header__content translate' dangerouslySetInnerHTML={content} />}
+
+                <div className='account__header__joined'><FormattedMessage id='account.joined' defaultMessage='Joined {date}' values={{ date: intl.formatDate(account.get('created_at'), { year: 'numeric', month: 'short', day: '2-digit' }) }} /></div>
               </div>
             </div>
           )}
diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js
index 81203e3f8..2a43d1ed2 100644
--- a/app/javascript/flavours/glitch/features/account_gallery/index.js
+++ b/app/javascript/flavours/glitch/features/account_gallery/index.js
@@ -114,15 +114,18 @@ class AccountGallery extends ImmutablePureComponent {
   }
 
   handleOpenMedia = attachment => {
+    const { dispatch } = this.props;
+    const statusId = attachment.getIn(['status', 'id']);
+
     if (attachment.get('type') === 'video') {
-      this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
+      dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } }));
     } else if (attachment.get('type') === 'audio') {
-      this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
+      dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } }));
     } else {
       const media = attachment.getIn(['status', 'media_attachments']);
       const index = media.findIndex(x => x.get('id') === attachment.get('id'));
 
-      this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') }));
+      dispatch(openModal('MEDIA', { media, index, statusId }));
     }
   }
 
diff --git a/app/javascript/flavours/glitch/features/compose/components/search_results.js b/app/javascript/flavours/glitch/features/compose/components/search_results.js
index bbf997c1f..a0f86a06a 100644
--- a/app/javascript/flavours/glitch/features/compose/components/search_results.js
+++ b/app/javascript/flavours/glitch/features/compose/components/search_results.js
@@ -33,6 +33,12 @@ class SearchResults extends ImmutablePureComponent {
     }
   }
 
+  componentDidUpdate () {
+    if (this.props.searchTerm === '') {
+      this.props.fetchSuggestions();
+    }
+  }
+
   handleLoadMoreAccounts = () => this.props.expandSearch('accounts');
 
   handleLoadMoreStatuses = () => this.props.expandSearch('statuses');
@@ -42,7 +48,7 @@ class SearchResults extends ImmutablePureComponent {
   render () {
     const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props;
 
-    if (results.isEmpty() && !suggestions.isEmpty()) {
+    if (searchTerm === '' && !suggestions.isEmpty()) {
       return (
         <div className='drawer--results'>
           <div className='trends'>
@@ -51,12 +57,12 @@ class SearchResults extends ImmutablePureComponent {
               <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' />
             </div>
 
-            {suggestions && suggestions.map(accountId => (
+            {suggestions && suggestions.map(suggestion => (
               <AccountContainer
-                key={accountId}
-                id={accountId}
-                actionIcon='times'
-                actionTitle={intl.formatMessage(messages.dismissSuggestion)}
+                key={suggestion.get('account')}
+                id={suggestion.get('account')}
+                actionIcon={suggestion.get('source') === 'past_interaction' ? 'times' : null}
+                actionTitle={suggestion.get('source') === 'past_interaction' ? intl.formatMessage(messages.dismissSuggestion) : null}
                 onActionClick={dismissSuggestion}
               />
             ))}
diff --git a/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js b/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js
new file mode 100644
index 000000000..046d03a9b
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js
@@ -0,0 +1,85 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { connect } from 'react-redux';
+import { makeGetAccount } from 'flavours/glitch/selectors';
+import Avatar from 'flavours/glitch/components/avatar';
+import DisplayName from 'flavours/glitch/components/display_name';
+import Permalink from 'flavours/glitch/components/permalink';
+import IconButton from 'flavours/glitch/components/icon_button';
+import { injectIntl, defineMessages } from 'react-intl';
+import { followAccount, unfollowAccount } from 'flavours/glitch/actions/accounts';
+
+const messages = defineMessages({
+  follow: { id: 'account.follow', defaultMessage: 'Follow' },
+  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
+});
+
+const makeMapStateToProps = () => {
+  const getAccount = makeGetAccount();
+
+  const mapStateToProps = (state, props) => ({
+    account: getAccount(state, props.id),
+  });
+
+  return mapStateToProps;
+};
+
+const getFirstSentence = str => {
+  const arr = str.split(/(([\.\?!]+\s)|[.。?!\n•])/);
+
+  return arr[0];
+};
+
+export default @connect(makeMapStateToProps)
+@injectIntl
+class Account extends ImmutablePureComponent {
+
+  static propTypes = {
+    account: ImmutablePropTypes.map.isRequired,
+    intl: PropTypes.object.isRequired,
+    dispatch: PropTypes.func.isRequired,
+  };
+
+  handleFollow = () => {
+    const { account, dispatch } = this.props;
+
+    if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
+      dispatch(unfollowAccount(account.get('id')));
+    } else {
+      dispatch(followAccount(account.get('id')));
+    }
+  }
+
+  render () {
+    const { account, intl } = this.props;
+
+    let button;
+
+    if (account.getIn(['relationship', 'following'])) {
+      button = <IconButton icon='check' title={intl.formatMessage(messages.unfollow)} active onClick={this.handleFollow} />;
+    } else {
+      button = <IconButton icon='plus' title={intl.formatMessage(messages.follow)} onClick={this.handleFollow} />;
+    }
+
+    return (
+      <div className='account follow-recommendations-account'>
+        <div className='account__wrapper'>
+          <Permalink className='account__display-name account__display-name--with-note' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}>
+            <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>
+
+            <DisplayName account={account} />
+
+            <div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div>
+          </Permalink>
+
+          <div className='account__relationship'>
+            {button}
+          </div>
+        </div>
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/flavours/glitch/features/follow_recommendations/index.js b/app/javascript/flavours/glitch/features/follow_recommendations/index.js
new file mode 100644
index 000000000..8165c39a9
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/follow_recommendations/index.js
@@ -0,0 +1,109 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import { connect } from 'react-redux';
+import { FormattedMessage } from 'react-intl';
+import { fetchSuggestions } from 'flavours/glitch/actions/suggestions';
+import { changeSetting, saveSettings } from 'flavours/glitch/actions/settings';
+import { requestBrowserPermission } from 'flavours/glitch/actions/notifications';
+import { markAsPartial } from 'flavours/glitch/actions/timelines';
+import Column from 'flavours/glitch/features/ui/components/column';
+import Account from './components/account';
+import Logo from 'flavours/glitch/components/logo';
+import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg';
+import Button from 'flavours/glitch/components/button';
+
+const mapStateToProps = state => ({
+  suggestions: state.getIn(['suggestions', 'items']),
+  isLoading: state.getIn(['suggestions', 'isLoading']),
+});
+
+export default @connect(mapStateToProps)
+class FollowRecommendations extends ImmutablePureComponent {
+
+  static contextTypes = {
+    router: PropTypes.object.isRequired,
+  };
+
+  static propTypes = {
+    dispatch: PropTypes.func.isRequired,
+    suggestions: ImmutablePropTypes.list,
+    isLoading: PropTypes.bool,
+  };
+
+  componentDidMount () {
+    const { dispatch, suggestions } = this.props;
+
+    // Don't re-fetch if we're e.g. navigating backwards to this page,
+    // since we don't want followed accounts to disappear from the list
+
+    if (suggestions.size === 0) {
+      dispatch(fetchSuggestions(true));
+    }
+  }
+
+  componentWillUnmount () {
+    const { dispatch } = this.props;
+
+    // Force the home timeline to be reloaded when the user navigates
+    // to it; if the user is new, it would've been empty before
+
+    dispatch(markAsPartial('home'));
+  }
+
+  handleDone = () => {
+    const { dispatch } = this.props;
+    const { router } = this.context;
+
+    dispatch(requestBrowserPermission((permission) => {
+      if (permission === 'granted') {
+        dispatch(changeSetting(['notifications', 'alerts', 'follow'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'mention'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'poll'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'status'], true));
+        dispatch(saveSettings());
+      }
+    }));
+
+    router.history.push('/timelines/home');
+  }
+
+  render () {
+    const { suggestions, isLoading } = this.props;
+
+    return (
+      <Column>
+        <div className='scrollable'>
+          <div className='column-title'>
+            <Logo />
+            <h3><FormattedMessage id='follow_recommendations.heading' defaultMessage="Follow people you'd like to see posts from! Here are some suggestions." /></h3>
+            <p><FormattedMessage id='follow_recommendations.lead' defaultMessage="Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!" /></p>
+          </div>
+
+          {!isLoading && (
+            <React.Fragment>
+              <div className='column-list'>
+                {suggestions.size > 0 ? suggestions.map(suggestion => (
+                  <Account key={suggestion.get('account')} id={suggestion.get('account')} />
+                )) : (
+                  <div className='column-list__empty-message'>
+                    <FormattedMessage id='empty_column.follow_recommendations' defaultMessage='Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.' />
+                  </div>
+                )}
+              </div>
+
+              <div className='column-actions'>
+                <img src={imageGreeting} alt='' className='column-actions__background' />
+                <Button onClick={this.handleDone}><FormattedMessage id='follow_recommendations.done' defaultMessage='Done' /></Button>
+              </div>
+            </React.Fragment>
+          )}
+        </div>
+      </Column>
+    );
+  }
+
+}
diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.js b/app/javascript/flavours/glitch/features/home_timeline/index.js
index cc8e4664c..19551d6b8 100644
--- a/app/javascript/flavours/glitch/features/home_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/home_timeline/index.js
@@ -72,7 +72,7 @@ class HomeTimeline extends React.PureComponent {
   }
 
   componentDidMount () {
-    this.props.dispatch(fetchAnnouncements());
+    setTimeout(() => this.props.dispatch(fetchAnnouncements()), 700);
     this._checkIfReloadNeeded(false, this.props.isPartial);
   }
 
@@ -152,7 +152,7 @@ class HomeTimeline extends React.PureComponent {
           scrollKey={`home_timeline-${columnId}`}
           onLoadMore={this.handleLoadMore}
           timelineId='home'
-          emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />}
+          emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />}
           bindToDocument={!multiColumn}
         />
       </Column>
diff --git a/app/javascript/flavours/glitch/features/notifications/index.js b/app/javascript/flavours/glitch/features/notifications/index.js
index 842e02371..6fc951e37 100644
--- a/app/javascript/flavours/glitch/features/notifications/index.js
+++ b/app/javascript/flavours/glitch/features/notifications/index.js
@@ -224,7 +224,7 @@ class Notifications extends React.PureComponent {
     const { notifCleaning, notifCleaningActive } = this.props;
     const { animatingNCD } = this.state;
     const pinned = !!columnId;
-    const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />;
+    const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />;
 
     let scrollableContent = null;
 
diff --git a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js
index d8989ec61..fcb2df527 100644
--- a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js
+++ b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js
@@ -23,6 +23,7 @@ const messages = defineMessages({
   favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },
   replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
   replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
+  open: { id: 'status.open', defaultMessage: 'Expand this status' },
 });
 
 const makeMapStateToProps = () => {
@@ -52,11 +53,19 @@ class Footer extends ImmutablePureComponent {
     dispatch: PropTypes.func.isRequired,
     askReplyConfirmation: PropTypes.bool,
     showReplyCount: PropTypes.bool,
+    withOpenButton: PropTypes.bool,
+    onClose: PropTypes.func,
   };
 
   _performReply = () => {
-    const { dispatch, status } = this.props;
-    dispatch(replyCompose(status, this.context.router.history));
+    const { dispatch, status, onClose } = this.props;
+    const { router } = this.context;
+
+    if (onClose) {
+      onClose();
+    }
+
+    dispatch(replyCompose(status, router.history));
   };
 
   handleReplyClick = () => {
@@ -100,8 +109,20 @@ class Footer extends ImmutablePureComponent {
     }
   };
 
+  handleOpenClick = e => {
+    const { router } = this.context;
+
+    if (e.button !== 0 || !router) {
+      return;
+    }
+
+    const { status } = this.props;
+
+    router.history.push(`/statuses/${status.get('id')}`);
+  }
+
   render () {
-    const { status, intl, showReplyCount } = this.props;
+    const { status, intl, showReplyCount, withOpenButton } = this.props;
 
     const publicStatus  = ['public', 'unlisted'].includes(status.get('visibility'));
     const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';
@@ -156,6 +177,7 @@ class Footer extends ImmutablePureComponent {
         {replyButton}
         <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate}  active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} />
         <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} />
+        {withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} />}
       </div>
     );
   }
diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js
index 40bf370f3..4cc1d1af5 100644
--- a/app/javascript/flavours/glitch/features/status/components/detailed_status.js
+++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js
@@ -68,8 +68,8 @@ export default class DetailedStatus extends ImmutablePureComponent {
     e.stopPropagation();
   }
 
-  handleOpenVideo = (media, options) => {
-    this.props.onOpenVideo(media, options);
+  handleOpenVideo = (options) => {
+    this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);
   }
 
   _measureHeight (heightJustChanged) {
diff --git a/app/javascript/flavours/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js
index 21e441407..513a6227f 100644
--- a/app/javascript/flavours/glitch/features/status/index.js
+++ b/app/javascript/flavours/glitch/features/status/index.js
@@ -316,11 +316,11 @@ class Status extends ImmutablePureComponent {
   }
 
   handleOpenMedia = (media, index) => {
-    this.props.dispatch(openModal('MEDIA', { media, index }));
+    this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index }));
   }
 
   handleOpenVideo = (media, options) => {
-    this.props.dispatch(openModal('VIDEO', { media, options }));
+    this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options }));
   }
 
   handleHotkeyOpenMedia = e => {
@@ -329,9 +329,7 @@ class Status extends ImmutablePureComponent {
     e.preventDefault();
 
     if (status.get('media_attachments').size > 0) {
-      if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
-        // TODO: toggle play/paused?
-      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
+      if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
         this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
       } else {
         this.handleOpenMedia(status.get('media_attachments'), 0);
diff --git a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js
index f9d4bb2f3..fc98cc6af 100644
--- a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js
@@ -4,12 +4,10 @@ import PropTypes from 'prop-types';
 import Audio from 'flavours/glitch/features/audio';
 import { connect } from 'react-redux';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { FormattedMessage } from 'react-intl';
-import classNames from 'classnames';
-import Icon from 'flavours/glitch/components/icon';
+import Footer from 'flavours/glitch/features/picture_in_picture/components/footer';
 
-const mapStateToProps = (state, { status }) => ({
-  account: state.getIn(['accounts', status.get('account')]),
+const mapStateToProps = (state, { statusId }) => ({
+  accountStaticAvatar: state.getIn(['accounts', state.getIn(['statuses', statusId, 'account']), 'avatar_static']),
 });
 
 export default @connect(mapStateToProps)
@@ -17,27 +15,21 @@ class AudioModal extends ImmutablePureComponent {
 
   static propTypes = {
     media: ImmutablePropTypes.map.isRequired,
-    status: ImmutablePropTypes.map,
+    statusId: PropTypes.string.isRequired,
+    accountStaticAvatar: PropTypes.string.isRequired,
     options: PropTypes.shape({
       autoPlay: PropTypes.bool,
     }),
-    account: ImmutablePropTypes.map,
     onClose: PropTypes.func.isRequired,
+    onChangeBackgroundColor: PropTypes.func.isRequired,
   };
 
   static contextTypes = {
     router: PropTypes.object,
   };
 
-  handleStatusClick = e => {
-    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
-      e.preventDefault();
-      this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
-    }
-  }
-
   render () {
-    const { media, status, account } = this.props;
+    const { media, accountStaticAvatar, statusId, onClose } = this.props;
     const options = this.props.options || {};
 
     return (
@@ -48,7 +40,7 @@ class AudioModal extends ImmutablePureComponent {
             alt={media.get('description')}
             duration={media.getIn(['meta', 'original', 'duration'], 0)}
             height={150}
-            poster={media.get('preview_url') || account.get('avatar_static')}
+            poster={media.get('preview_url') || accountStaticAvatar}
             backgroundColor={media.getIn(['meta', 'colors', 'background'])}
             foregroundColor={media.getIn(['meta', 'colors', 'foreground'])}
             accentColor={media.getIn(['meta', 'colors', 'accent'])}
@@ -56,11 +48,9 @@ class AudioModal extends ImmutablePureComponent {
           />
         </div>
 
-        {status && (
-          <div className={classNames('media-modal__meta')}>
-            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
-          </div>
-        )}
+        <div className='media-modal__overlay'>
+          {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
+        </div>
       </div>
     );
   }
diff --git a/app/javascript/flavours/glitch/features/ui/components/columns_area.js b/app/javascript/flavours/glitch/features/ui/components/columns_area.js
index 4ea7b48fe..d4e0bedac 100644
--- a/app/javascript/flavours/glitch/features/ui/components/columns_area.js
+++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.js
@@ -47,7 +47,7 @@ const componentMap = {
   'DIRECTORY': Directory,
 };
 
-const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started/);
+const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started|^\/start/);
 
 const messages = defineMessages({
   publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },
diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
index e37df7208..a8cbb837e 100644
--- a/app/javascript/flavours/glitch/features/ui/components/media_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
@@ -4,12 +4,14 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
 import PropTypes from 'prop-types';
 import Video from 'flavours/glitch/features/video';
 import classNames from 'classnames';
-import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
+import { defineMessages, injectIntl } from 'react-intl';
 import IconButton from 'flavours/glitch/components/icon_button';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import ImageLoader from './image_loader';
 import Icon from 'flavours/glitch/components/icon';
 import GIFV from 'flavours/glitch/components/gifv';
+import Footer from 'flavours/glitch/features/picture_in_picture/components/footer';
+import { getAverageFromBlurhash } from 'flavours/glitch/blurhash';
 
 const messages = defineMessages({
   close: { id: 'lightbox.close', defaultMessage: 'Close' },
@@ -26,10 +28,14 @@ class MediaModal extends ImmutablePureComponent {
 
   static propTypes = {
     media: ImmutablePropTypes.list.isRequired,
-    status: ImmutablePropTypes.map,
+    statusId: PropTypes.string,
     index: PropTypes.number.isRequired,
     onClose: PropTypes.func.isRequired,
     intl: PropTypes.object.isRequired,
+    onChangeBackgroundColor: PropTypes.func.isRequired,
+    currentTime: PropTypes.number,
+    autoPlay: PropTypes.bool,
+    volume: PropTypes.number,
   };
 
   state = {
@@ -64,6 +70,7 @@ class MediaModal extends ImmutablePureComponent {
 
   handleChangeIndex = (e) => {
     const index = Number(e.currentTarget.getAttribute('data-index'));
+
     this.setState({
       index: index % this.props.media.size,
       zoomButtonHidden: true,
@@ -87,10 +94,12 @@ class MediaModal extends ImmutablePureComponent {
 
   componentDidMount () {
     window.addEventListener('keydown', this.handleKeyDown, false);
+    this._sendBackgroundColor();
   }
 
   componentWillUnmount () {
     window.removeEventListener('keydown', this.handleKeyDown);
+    this.props.onChangeBackgroundColor(null);
   }
 
   getIndex () {
@@ -106,30 +115,38 @@ class MediaModal extends ImmutablePureComponent {
   handleStatusClick = e => {
     if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
       e.preventDefault();
-      this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
+      this.context.router.history.push(`/statuses/${this.props.statusId}`);
+    }
+
+    this._sendBackgroundColor();
+  }
+
+  componentDidUpdate (prevProps, prevState) {
+    if (prevState.index !== this.state.index) {
+      this._sendBackgroundColor();
+    }
+  }
+
+  _sendBackgroundColor () {
+    const { media, onChangeBackgroundColor } = this.props;
+    const index = this.getIndex();
+    const blurhash = media.getIn([index, 'blurhash']);
+
+    if (blurhash) {
+      const backgroundColor = getAverageFromBlurhash(blurhash);
+      onChangeBackgroundColor(backgroundColor);
     }
   }
 
   render () {
-    const { media, status, intl, onClose } = this.props;
+    const { media, statusId, intl, onClose } = this.props;
     const { navigationHidden } = this.state;
 
     const index = this.getIndex();
-    let pagination = [];
 
     const leftNav  = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>;
     const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav  media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>;
 
-    if (media.size > 1) {
-      pagination = media.map((item, i) => {
-        const classes = ['media-modal__button'];
-        if (i === index) {
-          classes.push('media-modal__button--active');
-        }
-        return (<li className='media-modal__page-dot' key={i}><button tabIndex='0' className={classes.join(' ')} onClick={this.handleChangeIndex} data-index={i}>{i + 1}</button></li>);
-      });
-    }
-
     const content = media.map((image) => {
       const width  = image.getIn(['meta', 'original', 'width']) || null;
       const height = image.getIn(['meta', 'original', 'height']) || null;
@@ -148,7 +165,7 @@ class MediaModal extends ImmutablePureComponent {
           />
         );
       } else if (image.get('type') === 'video') {
-        const { time } = this.props;
+        const { currentTime, autoPlay, volume } = this.props;
 
         return (
           <Video
@@ -157,7 +174,10 @@ class MediaModal extends ImmutablePureComponent {
             src={image.get('url')}
             width={image.get('width')}
             height={image.get('height')}
-            currentTime={time || 0}
+            frameRate={image.getIn(['meta', 'original', 'frame_rate'])}
+            currentTime={currentTime || 0}
+            autoPlay={autoPlay || false}
+            volume={volume || 1}
             onCloseVideo={onClose}
             detailed
             alt={image.get('description')}
@@ -197,13 +217,19 @@ class MediaModal extends ImmutablePureComponent {
       'media-modal__navigation--hidden': navigationHidden,
     });
 
+    let pagination;
+
+    if (media.size > 1) {
+      pagination = media.map((item, i) => (
+        <button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}>
+          {i + 1}
+        </button>
+      ));
+    }
+
     return (
       <div className='modal-root__modal media-modal'>
-        <div
-          className='media-modal__closer'
-          role='presentation'
-          onClick={onClose}
-        >
+        <div className='media-modal__closer' role='presentation' onClick={onClose} >
           <ReactSwipeableViews
             style={swipeableViewsStyle}
             containerStyle={containerStyle}
@@ -221,15 +247,10 @@ class MediaModal extends ImmutablePureComponent {
           {leftNav}
           {rightNav}
 
-          {status && (
-            <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}>
-              <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
-            </div>
-          )}
-
-          <ul className='media-modal__pagination'>
-            {pagination}
-          </ul>
+          <div className='media-modal__overlay'>
+            {pagination && <ul className='media-modal__pagination'>{pagination}</ul>}
+            {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
+          </div>
         </div>
       </div>
     );
diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
index 488daf0cc..0fd70de34 100644
--- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js
+++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
@@ -55,6 +55,10 @@ export default class ModalRoot extends React.PureComponent {
     onClose: PropTypes.func.isRequired,
   };
 
+  state = {
+    backgroundColor: null,
+  };
+
   getSnapshotBeforeUpdate () {
     return { visible: !!this.props.type };
   }
@@ -69,6 +73,10 @@ export default class ModalRoot extends React.PureComponent {
     }
   }
 
+  setBackgroundColor = color => {
+    this.setState({ backgroundColor: color });
+  }
+
   renderLoading = modalId => () => {
     return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
   }
@@ -81,13 +89,14 @@ export default class ModalRoot extends React.PureComponent {
 
   render () {
     const { type, props, onClose } = this.props;
+    const { backgroundColor } = this.state;
     const visible = !!type;
 
     return (
-      <Base onClose={onClose} noEsc={props ? props.noEsc : false}>
+      <Base backgroundColor={backgroundColor} onClose={onClose} noEsc={props ? props.noEsc : false}>
         {visible && (
           <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
-            {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
+            {(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={onClose} />}
           </BundleContainer>
         )}
       </Base>
diff --git a/app/javascript/flavours/glitch/features/ui/components/video_modal.js b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
index b0a4f3f03..6b6e615a6 100644
--- a/app/javascript/flavours/glitch/features/ui/components/video_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
@@ -3,9 +3,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
 import PropTypes from 'prop-types';
 import Video from 'flavours/glitch/features/video';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { FormattedMessage } from 'react-intl';
-import classNames from 'classnames';
-import Icon from 'flavours/glitch/components/icon';
+import Footer from 'flavours/glitch/features/picture_in_picture/components/footer';
+import { getAverageFromBlurhash } from 'flavours/glitch/blurhash';
 
 export default class VideoModal extends ImmutablePureComponent {
 
@@ -15,24 +14,28 @@ export default class VideoModal extends ImmutablePureComponent {
 
   static propTypes = {
     media: ImmutablePropTypes.map.isRequired,
-    status: ImmutablePropTypes.map,
+    statusId: PropTypes.string,
     options: PropTypes.shape({
       startTime: PropTypes.number,
       autoPlay: PropTypes.bool,
       defaultVolume: PropTypes.number,
     }),
     onClose: PropTypes.func.isRequired,
+    onChangeBackgroundColor: PropTypes.func.isRequired,
   };
 
-  handleStatusClick = e => {
-    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
-      e.preventDefault();
-      this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
+  componentDidMount () {
+    const { media, onChangeBackgroundColor, onClose } = this.props;
+
+    const backgroundColor = getAverageFromBlurhash(media.get('blurhash'));
+
+    if (backgroundColor) {
+      onChangeBackgroundColor(backgroundColor);
     }
   }
 
   render () {
-    const { media, status, onClose } = this.props;
+    const { media, statusId, onClose } = this.props;
     const options = this.props.options || {};
 
     return (
@@ -52,11 +55,9 @@ export default class VideoModal extends ImmutablePureComponent {
           />
         </div>
 
-        {status && (
-          <div className={classNames('media-modal__meta')}>
-            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
-          </div>
-        )}
+        <div className='media-modal__overlay'>
+          {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
+        </div>
       </div>
     );
   }
diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js
index 61a34fd2b..1149eb14e 100644
--- a/app/javascript/flavours/glitch/features/ui/index.js
+++ b/app/javascript/flavours/glitch/features/ui/index.js
@@ -50,9 +50,11 @@ import {
   Search,
   GettingStartedMisc,
   Directory,
+  FollowRecommendations,
 } from 'flavours/glitch/util/async-components';
 import { HotKeys } from 'react-hotkeys';
 import { me } from 'flavours/glitch/util/initial_state';
+import { closeOnboarding, INTRODUCTION_VERSION } from 'flavours/glitch/actions/onboarding';
 import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
 
 // Dummy import, to make sure that <Status /> ends up in the application bundle.
@@ -75,6 +77,7 @@ const mapStateToProps = state => ({
   showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']),
   hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']),
   moved: state.getIn(['accounts', me, 'moved']) && state.getIn(['accounts', state.getIn(['accounts', me, 'moved'])]),
+  firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,
 });
 
 const keyMap = {
@@ -207,6 +210,7 @@ class SwitchingColumnsArea extends React.PureComponent {
           <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />
           <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />
 
+          <WrappedRoute path='/start' component={FollowRecommendations} content={children} />
           <WrappedRoute path='/search' component={Search} content={children} />
           <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} />
 
@@ -260,6 +264,7 @@ class UI extends React.Component {
     unreadNotifications: PropTypes.number,
     showFaviconBadge: PropTypes.bool,
     moved: PropTypes.map,
+    firstLaunch: PropTypes.bool,
   };
 
   state = {
@@ -378,6 +383,12 @@ class UI extends React.Component {
 
     this.favicon = new Favico({ animation:"none" });
 
+    // On first launch, redirect to the follow recommendations page
+    if (this.props.firstLaunch) {
+      this.context.router.history.replace('/start');
+      this.props.dispatch(closeOnboarding());
+    }
+
     this.props.dispatch(fetchMarkers());
     this.props.dispatch(expandHomeTimeline());
     this.props.dispatch(expandNotifications());
diff --git a/app/javascript/flavours/glitch/features/video/index.js b/app/javascript/flavours/glitch/features/video/index.js
index a81311c67..fcbf07ce2 100644
--- a/app/javascript/flavours/glitch/features/video/index.js
+++ b/app/javascript/flavours/glitch/features/video/index.js
@@ -1,7 +1,7 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import { fromJS, is } from 'immutable';
+import { is } from 'immutable';
 import { throttle, debounce } from 'lodash';
 import classNames from 'classnames';
 import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen';
@@ -120,10 +120,10 @@ class Video extends React.PureComponent {
     deployPictureInPicture: PropTypes.func,
     preventPlayback: PropTypes.bool,
     blurhash: PropTypes.string,
-    link: PropTypes.node,
     autoPlay: PropTypes.bool,
     volume: PropTypes.number,
     muted: PropTypes.bool,
+    componetIndex: PropTypes.number,
   };
 
   static defaultProps = {
@@ -510,25 +510,14 @@ class Video extends React.PureComponent {
   }
 
   handleOpenVideo = () => {
-    const { src, preview, width, height, alt } = this.props;
-
-    const media = fromJS({
-      type: 'video',
-      url: src,
-      preview_url: preview,
-      description: alt,
-      width,
-      height,
-    });
+    this.video.pause();
 
-    const options = {
+    this.props.onOpenVideo({
       startTime: this.video.currentTime,
       autoPlay: !this.state.paused,
       defaultVolume: this.state.volume,
-    };
-
-    this.video.pause();
-    this.props.onOpenVideo(media, options);
+      componetIndex: this.props.componetIndex,
+    });
   }
 
   handleCloseVideo = () => {
@@ -548,7 +537,7 @@ class Video extends React.PureComponent {
   }
 
   render () {
-    const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link, editable, blurhash } = this.props;
+    const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, editable, blurhash } = this.props;
     const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
     const progress = Math.min((currentTime / duration) * 100, 100);
     const playerStyle = {};
@@ -666,8 +655,6 @@ class Video extends React.PureComponent {
                   <span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span>
                 </span>
               )}
-
-              {link && <span className='video-player__link'>{link}</span>}
             </div>
 
             <div className='video-player__buttons right'>
diff --git a/app/javascript/flavours/glitch/reducers/suggestions.js b/app/javascript/flavours/glitch/reducers/suggestions.js
index a08fedc25..2bc30d2c6 100644
--- a/app/javascript/flavours/glitch/reducers/suggestions.js
+++ b/app/javascript/flavours/glitch/reducers/suggestions.js
@@ -19,18 +19,18 @@ export default function suggestionsReducer(state = initialState, action) {
     return state.set('isLoading', true);
   case SUGGESTIONS_FETCH_SUCCESS:
     return state.withMutations(map => {
-      map.set('items', fromJS(action.accounts.map(x => x.id)));
+      map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id }))));
       map.set('isLoading', false);
     });
   case SUGGESTIONS_FETCH_FAIL:
     return state.set('isLoading', false);
   case SUGGESTIONS_DISMISS:
-    return state.update('items', list => list.filterNot(id => id === action.id));
+    return state.update('items', list => list.filterNot(x => x.account === action.id));
   case ACCOUNT_BLOCK_SUCCESS:
   case ACCOUNT_MUTE_SUCCESS:
-    return state.update('items', list => list.filterNot(id => id === action.relationship.id));
+    return state.update('items', list => list.filterNot(x => x.account === action.relationship.id));
   case DOMAIN_BLOCK_SUCCESS:
-    return state.update('items', list => list.filterNot(id => action.accounts.includes(id)));
+    return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account)));
   default:
     return state;
   }
diff --git a/app/javascript/flavours/glitch/reducers/timelines.js b/app/javascript/flavours/glitch/reducers/timelines.js
index 882b48790..7d815d850 100644
--- a/app/javascript/flavours/glitch/reducers/timelines.js
+++ b/app/javascript/flavours/glitch/reducers/timelines.js
@@ -9,6 +9,7 @@ import {
   TIMELINE_CONNECT,
   TIMELINE_DISCONNECT,
   TIMELINE_LOAD_PENDING,
+  TIMELINE_MARK_AS_PARTIAL,
 } from 'flavours/glitch/actions/timelines';
 import {
   ACCOUNT_BLOCK_SUCCESS,
@@ -173,6 +174,12 @@ export default function timelines(state = initialState, action) {
       initialTimeline,
       map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items),
     );
+  case TIMELINE_MARK_AS_PARTIAL:
+    return state.update(
+      action.timeline,
+      initialTimeline,
+      map => map.set('isPartial', true).set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('unread', 0),
+    );
   default:
     return state;
   }
diff --git a/app/javascript/flavours/glitch/styles/components/accounts.scss b/app/javascript/flavours/glitch/styles/components/accounts.scss
index 6dcfbcb02..377cdd91f 100644
--- a/app/javascript/flavours/glitch/styles/components/accounts.scss
+++ b/app/javascript/flavours/glitch/styles/components/accounts.scss
@@ -11,6 +11,19 @@
     overflow: hidden;
     text-decoration: none;
     font-size: 14px;
+
+    &--with-note {
+      strong {
+        display: inline;
+      }
+    }
+  }
+
+  &__note {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    color: $ui-secondary-color;
   }
 
   &.small {
@@ -26,6 +39,16 @@
   }
 }
 
+.follow-recommendations-account {
+  .icon-button {
+    color: $ui-primary-color;
+
+    &.active {
+      color: $valid-value-color;
+    }
+  }
+}
+
 .account__wrapper {
   display: flex;
 }
@@ -555,6 +578,17 @@
       color: $primary-text-color;
     }
 
+    .account__header__joined {
+      font-size: 14px;
+      padding: 5px 15px;
+      color: $darker-text-color;
+
+      .columns-area--mobile & {
+        padding-left: 20px;
+        padding-right: 20px;
+      }
+    }
+
     .account__header__fields {
       margin: 0;
       border-top: 1px solid lighten($ui-base-color, 12%);
diff --git a/app/javascript/flavours/glitch/styles/components/boost.scss b/app/javascript/flavours/glitch/styles/components/boost.scss
index c8b97fabe..fb1451cb2 100644
--- a/app/javascript/flavours/glitch/styles/components/boost.scss
+++ b/app/javascript/flavours/glitch/styles/components/boost.scss
@@ -1,22 +1,32 @@
-button.icon-button i.fa-retweet {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>");
+button.icon-button {
+  i.fa-retweet {
+    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>");
+  }
 
-  &:hover {
+  &:hover i.fa-retweet {
     background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>");
   }
-}
 
-button.icon-button.reblogPrivate i.fa-retweet {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>");
+  &.reblogPrivate {
+    i.fa-retweet {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>");
+    }
 
-  &:hover {
-    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>");
+    &:hover i.fa-retweet {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>");
+    }
+  }
+
+  &.disabled {
+    i.fa-retweet,
+    &:hover i.fa-retweet {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>");
+    }
   }
-}
 
-// Disabled variant
-button.icon-button.disabled i.fa-retweet {
-  &, &:hover {
-    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>");
+  .media-modal__overlay .picture-in-picture__footer & {
+    i.fa-retweet {
+      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($white)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>");
+    }
   }
 }
diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss
index 42d64c135..7f3d27dba 100644
--- a/app/javascript/flavours/glitch/styles/components/columns.scss
+++ b/app/javascript/flavours/glitch/styles/components/columns.scss
@@ -796,3 +796,62 @@
     text-align: center;
   }
 }
+
+.column-title {
+  text-align: center;
+  padding: 40px;
+
+  .logo {
+    fill: $primary-text-color;
+    width: 50px;
+    margin: 0 auto;
+    margin-bottom: 40px;
+  }
+
+  h3 {
+    font-size: 24px;
+    line-height: 1.5;
+    font-weight: 700;
+    margin-bottom: 10px;
+  }
+
+  p {
+    font-size: 16px;
+   line-height: 24px;
+    font-weight: 400;
+    color: $darker-text-color;
+  }
+}
+
+.column-actions {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 40px;
+  padding-top: 40px;
+  padding-bottom: 200px;
+
+  &__background {
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    height: 220px;
+    width: auto;
+  }
+}
+
+.column-list {
+  margin: 0 20px;
+  border: 1px solid lighten($ui-base-color, 8%);
+  background: darken($ui-base-color, 2%);
+  border-radius: 4px;
+
+  &__empty-message {
+    padding: 40px;
+    text-align: center;
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 400;
+    color: $darker-text-color;
+  }
+}
diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss
index aada9a928..16045d5ee 100644
--- a/app/javascript/flavours/glitch/styles/components/index.scss
+++ b/app/javascript/flavours/glitch/styles/components/index.scss
@@ -334,11 +334,11 @@
   }
 }
 
-.star-icon.active {
+.icon-button.star-icon.active {
   color: $gold-star;
 }
 
-.bookmark-icon.active {
+.icon-button.bookmark-icon.active {
   color: $red-bookmark;
 }
 
diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss
index 6cbcb05bd..88212457f 100644
--- a/app/javascript/flavours/glitch/styles/components/media.scss
+++ b/app/javascript/flavours/glitch/styles/components/media.scss
@@ -187,16 +187,19 @@
   height: 100%;
   position: relative;
 
-  .extended-video-player {
-    width: 100%;
-    height: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+  &__close,
+  &__zoom-button {
+    color: rgba($white, 0.7);
 
-    video {
-      max-width: $media-modal-media-max-width;
-      max-height: $media-modal-media-max-height;
+    &:hover,
+    &:focus,
+    &:active {
+      color: $white;
+      background-color: rgba($white, 0.15);
+    }
+
+    &:focus {
+      background-color: rgba($white, 0.3);
     }
   }
 }
@@ -233,10 +236,10 @@
 }
 
 .media-modal__nav {
-  background: rgba($base-overlay-background, 0.5);
+  background: transparent;
   box-sizing: border-box;
   border: 0;
-  color: $primary-text-color;
+  color: rgba($primary-text-color, 0.7);
   cursor: pointer;
   display: flex;
   align-items: center;
@@ -247,6 +250,12 @@
   position: absolute;
   top: 0;
   bottom: 0;
+
+  &:hover,
+  &:focus,
+  &:active {
+    color: $primary-text-color;
+  }
 }
 
 .media-modal__nav--left {
@@ -257,58 +266,86 @@
   right: 0;
 }
 
-.media-modal__pagination {
-  width: 100%;
-  text-align: center;
+.media-modal__overlay {
+  max-width: 600px;
   position: absolute;
   left: 0;
-  bottom: 20px;
-  pointer-events: none;
-}
+  right: 0;
+  bottom: 0;
+  margin: 0 auto;
 
-.media-modal__meta {
-  text-align: center;
-  position: absolute;
-  left: 0;
-  bottom: 20px;
-  width: 100%;
-  pointer-events: none;
+  .picture-in-picture__footer {
+    border-radius: 0;
+    background: transparent;
+    padding: 20px 0;
 
-  &--shifted {
-    bottom: 62px;
-  }
+    .icon-button {
+      color: $white;
 
-  a {
-    pointer-events: auto;
-    text-decoration: none;
-    font-weight: 500;
-    color: $ui-secondary-color;
+      &:hover,
+      &:focus,
+      &:active {
+        color: $white;
+        background-color: rgba($white, 0.15);
+      }
 
-    &:hover,
-    &:focus,
-    &:active {
-      text-decoration: underline;
+      &:focus {
+        background-color: rgba($white, 0.3);
+      }
+
+      &.active {
+        color: $highlight-text-color;
+
+        &:hover,
+        &:focus,
+        &:active {
+          background: rgba($highlight-text-color, 0.15);
+        }
+
+        &:focus {
+          background: rgba($highlight-text-color, 0.3);
+        }
+      }
+
+      &.star-icon.active {
+        color: $gold-star;
+
+        &:hover,
+        &:focus,
+        &:active {
+          background: rgba($gold-star, 0.15);
+        }
+
+        &:focus {
+          background: rgba($gold-star, 0.3);
+        }
+      }
     }
   }
 }
 
-.media-modal__page-dot {
-  display: inline-block;
+.media-modal__pagination {
+  display: flex;
+  justify-content: center;
+  margin-bottom: 20px;
 }
 
-.media-modal__button {
+.media-modal__page-dot {
+  flex: 0 0 auto;
   background-color: $white;
-  height: 12px;
-  width: 12px;
-  border-radius: 6px;
-  margin: 10px;
+  opacity: 0.4;
+  height: 6px;
+  width: 6px;
+  border-radius: 50%;
+  margin: 0 4px;
   padding: 0;
   border: 0;
   font-size: 0;
-}
+  transition: opacity .2s ease-in-out;
 
-.media-modal__button--active {
-  background-color: $ui-highlight-color;
+  &.active {
+    opacity: 1;
+  }
 }
 
 .media-modal__close {
diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss
index f5acd814e..671323bc5 100644
--- a/app/javascript/flavours/glitch/styles/components/modal.scss
+++ b/app/javascript/flavours/glitch/styles/components/modal.scss
@@ -14,6 +14,7 @@
   right: 0;
   bottom: 0;
   background: rgba($base-overlay-background, 0.7);
+  transition: background 0.5s;
 }
 
 .modal-root__container {
diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss
index c1249d0c4..69c9a6fe3 100644
--- a/app/javascript/flavours/glitch/styles/components/status.scss
+++ b/app/javascript/flavours/glitch/styles/components/status.scss
@@ -1130,21 +1130,6 @@ a.status-card.compact:hover {
   .audio-player {
     border-radius: 0;
   }
-
-  @media screen and (max-width: 415px) {
-    width: 210px;
-    bottom: 10px;
-    right: 10px;
-
-    &__footer {
-      display: none;
-    }
-
-    .video-player,
-    .audio-player {
-      border-radius: 0 0 4px 4px;
-    }
-  }
 }
 
 .picture-in-picture-placeholder {
diff --git a/app/javascript/flavours/glitch/util/async-components.js b/app/javascript/flavours/glitch/util/async-components.js
index 26255bbb7..a6c6ab0ab 100644
--- a/app/javascript/flavours/glitch/util/async-components.js
+++ b/app/javascript/flavours/glitch/util/async-components.js
@@ -169,3 +169,7 @@ export function Tesseract () {
 export function Directory () {
   return import(/* webpackChunkName: "features/glitch/async/directory" */'flavours/glitch/features/directory');
 }
+
+export function FollowRecommendations () {
+  return import(/* webpackChunkName: "features/glitch/async/follow_recommendations" */'flavours/glitch/features/follow_recommendations');
+}
diff --git a/app/javascript/flavours/glitch/util/emoji/index.js b/app/javascript/flavours/glitch/util/emoji/index.js
index 57c1d719a..162946bbb 100644
--- a/app/javascript/flavours/glitch/util/emoji/index.js
+++ b/app/javascript/flavours/glitch/util/emoji/index.js
@@ -11,7 +11,7 @@ const emojiFilenames = (emojis) => {
 };
 
 // Emoji requiring extra borders depending on theme
-const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂‍♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂‍♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲']);
+const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂‍♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂‍♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲']);
 const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️']);
 
 const emojiFilename = (filename) => {
diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js
index dca44917a..abd5681d4 100644
--- a/app/javascript/mastodon/actions/importer/normalizer.js
+++ b/app/javascript/mastodon/actions/importer/normalizer.js
@@ -24,6 +24,7 @@ export function normalizeAccount(account) {
 
   account.display_name_html = emojify(escapeTextContentForBrowser(displayName), emojiMap);
   account.note_emojified = emojify(account.note, emojiMap);
+  account.note_plain = unescapeHTML(account.note);
 
   if (account.fields) {
     account.fields = account.fields.map(pair => ({
@@ -61,6 +62,13 @@ export function normalizeStatus(status, normalOldStatus) {
     normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml');
     normalStatus.hidden = normalOldStatus.get('hidden');
   } 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.
+    if (normalStatus.spoiler_text && !normalStatus.content) {
+      normalStatus.content = normalStatus.spoiler_text;
+      normalStatus.spoiler_text = '';
+    }
+
     const spoilerText   = normalStatus.spoiler_text || '';
     const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');
     const emojiMap      = makeEmojiMap(normalStatus);
diff --git a/app/javascript/mastodon/actions/onboarding.js b/app/javascript/mastodon/actions/onboarding.js
index 42d8ea33f..a1dd3a731 100644
--- a/app/javascript/mastodon/actions/onboarding.js
+++ b/app/javascript/mastodon/actions/onboarding.js
@@ -1,21 +1,8 @@
 import { changeSetting, saveSettings } from './settings';
-import { requestBrowserPermission } from './notifications';
 
 export const INTRODUCTION_VERSION = 20181216044202;
 
 export const closeOnboarding = () => dispatch => {
   dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION));
   dispatch(saveSettings());
-
-  dispatch(requestBrowserPermission((permission) => {
-    if (permission === 'granted') {
-      dispatch(changeSetting(['notifications', 'alerts', 'follow'], true));
-      dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true));
-      dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true));
-      dispatch(changeSetting(['notifications', 'alerts', 'mention'], true));
-      dispatch(changeSetting(['notifications', 'alerts', 'poll'], true));
-      dispatch(changeSetting(['notifications', 'alerts', 'status'], true));
-      dispatch(saveSettings());
-    }
-  }));
 };
diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js
index a178faead..37560a74c 100644
--- a/app/javascript/mastodon/actions/search.js
+++ b/app/javascript/mastodon/actions/search.js
@@ -32,6 +32,7 @@ export function submitSearch() {
     const value = getState().getIn(['search', 'value']);
 
     if (value.length === 0) {
+      dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, ''));
       return;
     }
 
diff --git a/app/javascript/mastodon/actions/suggestions.js b/app/javascript/mastodon/actions/suggestions.js
index b15bd916b..1f1116e75 100644
--- a/app/javascript/mastodon/actions/suggestions.js
+++ b/app/javascript/mastodon/actions/suggestions.js
@@ -1,5 +1,6 @@
 import api from '../api';
 import { importFetchedAccounts } from './importer';
+import { fetchRelationships } from './accounts';
 
 export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST';
 export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS';
@@ -7,13 +8,17 @@ export const SUGGESTIONS_FETCH_FAIL    = 'SUGGESTIONS_FETCH_FAIL';
 
 export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS';
 
-export function fetchSuggestions() {
+export function fetchSuggestions(withRelationships = false) {
   return (dispatch, getState) => {
     dispatch(fetchSuggestionsRequest());
 
-    api(getState).get('/api/v1/suggestions').then(response => {
-      dispatch(importFetchedAccounts(response.data));
+    api(getState).get('/api/v2/suggestions', { params: { limit: 20 } }).then(response => {
+      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
       dispatch(fetchSuggestionsSuccess(response.data));
+
+      if (withRelationships) {
+        dispatch(fetchRelationships(response.data.map(item => item.account.id)));
+      }
     }).catch(error => dispatch(fetchSuggestionsFail(error)));
   };
 };
@@ -25,10 +30,10 @@ export function fetchSuggestionsRequest() {
   };
 };
 
-export function fetchSuggestionsSuccess(accounts) {
+export function fetchSuggestionsSuccess(suggestions) {
   return {
     type: SUGGESTIONS_FETCH_SUCCESS,
-    accounts,
+    suggestions,
     skipLoading: true,
   };
 };
@@ -48,5 +53,12 @@ export const dismissSuggestion = accountId => (dispatch, getState) => {
     id: accountId,
   });
 
-  api(getState).delete(`/api/v1/suggestions/${accountId}`);
+  api(getState).delete(`/api/v1/suggestions/${accountId}`).then(() => {
+    dispatch(fetchSuggestionsRequest());
+
+    api(getState).get('/api/v2/suggestions').then(response => {
+      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
+      dispatch(fetchSuggestionsSuccess(response.data));
+    }).catch(error => dispatch(fetchSuggestionsFail(error)));
+  }).catch(() => {});
 };
diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js
index de1725acf..31ae09e4a 100644
--- a/app/javascript/mastodon/actions/timelines.js
+++ b/app/javascript/mastodon/actions/timelines.js
@@ -18,17 +18,26 @@ export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING';
 export const TIMELINE_DISCONNECT   = 'TIMELINE_DISCONNECT';
 export const TIMELINE_CONNECT      = 'TIMELINE_CONNECT';
 
+export const TIMELINE_MARK_AS_PARTIAL = 'TIMELINE_MARK_AS_PARTIAL';
+
 export const loadPending = timeline => ({
   type: TIMELINE_LOAD_PENDING,
   timeline,
 });
 
 export function updateTimeline(timeline, status, accept) {
-  return dispatch => {
+  return (dispatch, getState) => {
     if (typeof accept === 'function' && !accept(status)) {
       return;
     }
 
+    if (getState().getIn(['timelines', timeline, 'isPartial'])) {
+      // Prevent new items from being added to a partial timeline,
+      // since it will be reloaded anyway
+
+      return;
+    }
+
     dispatch(importFetchedStatus(status));
 
     dispatch({
@@ -183,3 +192,8 @@ export const disconnectTimeline = timeline => ({
   timeline,
   usePendingItems: preferPendingItems,
 });
+
+export const markAsPartial = timeline => ({
+  type: TIMELINE_MARK_AS_PARTIAL,
+  timeline,
+});
diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js
index 0e40ee1d6..a85d683a7 100644
--- a/app/javascript/mastodon/components/account.js
+++ b/app/javascript/mastodon/components/account.js
@@ -78,8 +78,10 @@ class Account extends ImmutablePureComponent {
 
     let buttons;
 
-    if (onActionClick && actionIcon) {
-      buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />;
+    if (actionIcon) {
+      if (onActionClick) {
+        buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />;
+      }
     } else if (account.get('id') !== me && account.get('relationship', null) !== null) {
       const following = account.getIn(['relationship', 'following']);
       const requested = account.getIn(['relationship', 'requested']);
diff --git a/app/javascript/mastodon/components/logo.js b/app/javascript/mastodon/components/logo.js
new file mode 100644
index 000000000..d1c7f08a9
--- /dev/null
+++ b/app/javascript/mastodon/components/logo.js
@@ -0,0 +1,9 @@
+import React from 'react';
+
+const Logo = () => (
+  <svg viewBox='0 0 216.4144 232.00976' className='logo'>
+    <use xlinkHref='#mastodon-svg-logo' />
+  </svg>
+);
+
+export default Logo;
diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js
index 0a8f42585..2e7ce2e60 100644
--- a/app/javascript/mastodon/components/media_gallery.js
+++ b/app/javascript/mastodon/components/media_gallery.js
@@ -11,7 +11,7 @@ import { debounce } from 'lodash';
 import Blurhash from 'mastodon/components/blurhash';
 
 const messages = defineMessages({
-  toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Hide {number, plural, one {image} other {images}}' },
+  toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: '{number, plural, one {Hide image} other {Hide images}}' },
 });
 
 class Item extends React.PureComponent {
diff --git a/app/javascript/mastodon/components/regeneration_indicator.js b/app/javascript/mastodon/components/regeneration_indicator.js
index faf88c6b5..52696a4a7 100644
--- a/app/javascript/mastodon/components/regeneration_indicator.js
+++ b/app/javascript/mastodon/components/regeneration_indicator.js
@@ -2,7 +2,7 @@ import React from 'react';
 import { FormattedMessage } from 'react-intl';
 import illustration from 'mastodon/../images/elephant_ui_working.svg';
 
-const MissingIndicator = () => (
+const RegenerationIndicator = () => (
   <div className='regeneration-indicator'>
     <div className='regeneration-indicator__figure'>
       <img src={illustration} alt='' />
@@ -15,4 +15,4 @@ const MissingIndicator = () => (
   </div>
 );
 
-export default MissingIndicator;
+export default RegenerationIndicator;
diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js
index 35bd50514..bf21a9fd6 100644
--- a/app/javascript/mastodon/components/status_content.js
+++ b/app/javascript/mastodon/components/status_content.js
@@ -170,10 +170,6 @@ export default class StatusContent extends React.PureComponent {
   render () {
     const { status } = this.props;
 
-    if (status.get('content').length === 0) {
-      return null;
-    }
-
     const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
     const renderReadMore = this.props.onClick && status.get('collapsed');
     const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js
index 3ac58cf7c..513b59908 100644
--- a/app/javascript/mastodon/containers/mastodon.js
+++ b/app/javascript/mastodon/containers/mastodon.js
@@ -1,12 +1,10 @@
 import React from 'react';
-import { Provider, connect } from 'react-redux';
+import { Provider } from 'react-redux';
 import PropTypes from 'prop-types';
 import configureStore from '../store/configureStore';
-import { INTRODUCTION_VERSION } from '../actions/onboarding';
 import { BrowserRouter, Route } from 'react-router-dom';
 import { ScrollContext } from 'react-router-scroll-4';
 import UI from '../features/ui';
-import Introduction from '../features/introduction';
 import { fetchCustomEmojis } from '../actions/custom_emojis';
 import { hydrateStore } from '../actions/store';
 import { connectUserStream } from '../actions/streaming';
@@ -26,39 +24,6 @@ const hydrateAction = hydrateStore(initialState);
 store.dispatch(hydrateAction);
 store.dispatch(fetchCustomEmojis());
 
-const mapStateToProps = state => ({
-  showIntroduction: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,
-});
-
-@connect(mapStateToProps)
-class MastodonMount extends React.PureComponent {
-
-  static propTypes = {
-    showIntroduction: PropTypes.bool,
-  };
-
-  shouldUpdateScroll (_, { location }) {
-    return location.state !== previewMediaState && location.state !== previewVideoState;
-  }
-
-  render () {
-    const { showIntroduction } = this.props;
-
-    if (showIntroduction) {
-      return <Introduction />;
-    }
-
-    return (
-      <BrowserRouter basename='/web'>
-        <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>
-          <Route path='/' component={UI} />
-        </ScrollContext>
-      </BrowserRouter>
-    );
-  }
-
-}
-
 export default class Mastodon extends React.PureComponent {
 
   static propTypes = {
@@ -76,6 +41,10 @@ export default class Mastodon extends React.PureComponent {
     }
   }
 
+  shouldUpdateScroll (_, { location }) {
+    return location.state !== previewMediaState && location.state !== previewVideoState;
+  }
+
   render () {
     const { locale } = this.props;
 
@@ -83,7 +52,11 @@ export default class Mastodon extends React.PureComponent {
       <IntlProvider locale={locale} messages={messages}>
         <Provider store={store}>
           <ErrorBoundary>
-            <MastodonMount />
+            <BrowserRouter basename='/web'>
+              <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>
+                <Route path='/' component={UI} />
+              </ScrollContext>
+            </BrowserRouter>
           </ErrorBoundary>
         </Provider>
       </IntlProvider>
diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js
index 8e49486bd..20641121f 100644
--- a/app/javascript/mastodon/features/account/components/header.js
+++ b/app/javascript/mastodon/features/account/components/header.js
@@ -326,6 +326,8 @@ class Header extends ImmutablePureComponent {
               {account.get('id') !== me && !suspended && <AccountNoteContainer account={account} />}
 
               {account.get('note').length > 0 && account.get('note') !== '<p></p>' && <div className='account__header__content translate' dangerouslySetInnerHTML={content} />}
+
+              <div className='account__header__joined'><FormattedMessage id='account.joined' defaultMessage='Joined {date}' values={{ date: intl.formatDate(account.get('created_at'), { year: 'numeric', month: 'short', day: '2-digit' }) }} /></div>
             </div>
 
             {!suspended && (
diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js
index 4b4cdff74..958a65286 100644
--- a/app/javascript/mastodon/features/compose/components/search_results.js
+++ b/app/javascript/mastodon/features/compose/components/search_results.js
@@ -33,6 +33,12 @@ class SearchResults extends ImmutablePureComponent {
     }
   }
 
+  componentDidUpdate () {
+    if (this.props.searchTerm === '') {
+      this.props.fetchSuggestions();
+    }
+  }
+
   handleLoadMoreAccounts = () => this.props.expandSearch('accounts');
 
   handleLoadMoreStatuses = () => this.props.expandSearch('statuses');
@@ -42,7 +48,7 @@ class SearchResults extends ImmutablePureComponent {
   render () {
     const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props;
 
-    if (results.isEmpty() && !suggestions.isEmpty()) {
+    if (searchTerm === '' && !suggestions.isEmpty()) {
       return (
         <div className='search-results'>
           <div className='trends'>
@@ -51,12 +57,12 @@ class SearchResults extends ImmutablePureComponent {
               <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' />
             </div>
 
-            {suggestions && suggestions.map(accountId => (
+            {suggestions && suggestions.map(suggestion => (
               <AccountContainer
-                key={accountId}
-                id={accountId}
-                actionIcon='times'
-                actionTitle={intl.formatMessage(messages.dismissSuggestion)}
+                key={suggestion.get('account')}
+                id={suggestion.get('account')}
+                actionIcon={suggestion.get('source') === 'past_interaction' ? 'times' : null}
+                actionTitle={suggestion.get('source') === 'past_interaction' ? intl.formatMessage(messages.dismissSuggestion) : null}
                 onActionClick={dismissSuggestion}
               />
             ))}
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index 3de79ac9b..fb1a3804c 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -11,7 +11,7 @@ const emojiFilenames = (emojis) => {
 };
 
 // Emoji requiring extra borders depending on theme
-const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂‍♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂‍♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲']);
+const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂‍♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂‍♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲']);
 const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️']);
 
 const emojiFilename = (filename) => {
diff --git a/app/javascript/mastodon/features/follow_recommendations/components/account.js b/app/javascript/mastodon/features/follow_recommendations/components/account.js
new file mode 100644
index 000000000..bd855aab0
--- /dev/null
+++ b/app/javascript/mastodon/features/follow_recommendations/components/account.js
@@ -0,0 +1,85 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { connect } from 'react-redux';
+import { makeGetAccount } from 'mastodon/selectors';
+import Avatar from 'mastodon/components/avatar';
+import DisplayName from 'mastodon/components/display_name';
+import Permalink from 'mastodon/components/permalink';
+import IconButton from 'mastodon/components/icon_button';
+import { injectIntl, defineMessages } from 'react-intl';
+import { followAccount, unfollowAccount } from 'mastodon/actions/accounts';
+
+const messages = defineMessages({
+  follow: { id: 'account.follow', defaultMessage: 'Follow' },
+  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
+});
+
+const makeMapStateToProps = () => {
+  const getAccount = makeGetAccount();
+
+  const mapStateToProps = (state, props) => ({
+    account: getAccount(state, props.id),
+  });
+
+  return mapStateToProps;
+};
+
+const getFirstSentence = str => {
+  const arr = str.split(/(([\.\?!]+\s)|[.。?!\n•])/);
+
+  return arr[0];
+};
+
+export default @connect(makeMapStateToProps)
+@injectIntl
+class Account extends ImmutablePureComponent {
+
+  static propTypes = {
+    account: ImmutablePropTypes.map.isRequired,
+    intl: PropTypes.object.isRequired,
+    dispatch: PropTypes.func.isRequired,
+  };
+
+  handleFollow = () => {
+    const { account, dispatch } = this.props;
+
+    if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
+      dispatch(unfollowAccount(account.get('id')));
+    } else {
+      dispatch(followAccount(account.get('id')));
+    }
+  }
+
+  render () {
+    const { account, intl } = this.props;
+
+    let button;
+
+    if (account.getIn(['relationship', 'following'])) {
+      button = <IconButton icon='check' title={intl.formatMessage(messages.unfollow)} active onClick={this.handleFollow} />;
+    } else {
+      button = <IconButton icon='plus' title={intl.formatMessage(messages.follow)} onClick={this.handleFollow} />;
+    }
+
+    return (
+      <div className='account follow-recommendations-account'>
+        <div className='account__wrapper'>
+          <Permalink className='account__display-name account__display-name--with-note' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}>
+            <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>
+
+            <DisplayName account={account} />
+
+            <div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div>
+          </Permalink>
+
+          <div className='account__relationship'>
+            {button}
+          </div>
+        </div>
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/mastodon/features/follow_recommendations/index.js b/app/javascript/mastodon/features/follow_recommendations/index.js
new file mode 100644
index 000000000..a35ff3e82
--- /dev/null
+++ b/app/javascript/mastodon/features/follow_recommendations/index.js
@@ -0,0 +1,109 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import { connect } from 'react-redux';
+import { FormattedMessage } from 'react-intl';
+import { fetchSuggestions } from 'mastodon/actions/suggestions';
+import { changeSetting, saveSettings } from 'mastodon/actions/settings';
+import { requestBrowserPermission } from 'mastodon/actions/notifications';
+import { markAsPartial } from 'mastodon/actions/timelines';
+import Column from 'mastodon/features/ui/components/column';
+import Account from './components/account';
+import Logo from 'mastodon/components/logo';
+import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg';
+import Button from 'mastodon/components/button';
+
+const mapStateToProps = state => ({
+  suggestions: state.getIn(['suggestions', 'items']),
+  isLoading: state.getIn(['suggestions', 'isLoading']),
+});
+
+export default @connect(mapStateToProps)
+class FollowRecommendations extends ImmutablePureComponent {
+
+  static contextTypes = {
+    router: PropTypes.object.isRequired,
+  };
+
+  static propTypes = {
+    dispatch: PropTypes.func.isRequired,
+    suggestions: ImmutablePropTypes.list,
+    isLoading: PropTypes.bool,
+  };
+
+  componentDidMount () {
+    const { dispatch, suggestions } = this.props;
+
+    // Don't re-fetch if we're e.g. navigating backwards to this page,
+    // since we don't want followed accounts to disappear from the list
+
+    if (suggestions.size === 0) {
+      dispatch(fetchSuggestions(true));
+    }
+  }
+
+  componentWillUnmount () {
+    const { dispatch } = this.props;
+
+    // Force the home timeline to be reloaded when the user navigates
+    // to it; if the user is new, it would've been empty before
+
+    dispatch(markAsPartial('home'));
+  }
+
+  handleDone = () => {
+    const { dispatch } = this.props;
+    const { router } = this.context;
+
+    dispatch(requestBrowserPermission((permission) => {
+      if (permission === 'granted') {
+        dispatch(changeSetting(['notifications', 'alerts', 'follow'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'mention'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'poll'], true));
+        dispatch(changeSetting(['notifications', 'alerts', 'status'], true));
+        dispatch(saveSettings());
+      }
+    }));
+
+    router.history.push('/timelines/home');
+  }
+
+  render () {
+    const { suggestions, isLoading } = this.props;
+
+    return (
+      <Column>
+        <div className='scrollable'>
+          <div className='column-title'>
+            <Logo />
+            <h3><FormattedMessage id='follow_recommendations.heading' defaultMessage="Follow people you'd like to see posts from! Here are some suggestions." /></h3>
+            <p><FormattedMessage id='follow_recommendations.lead' defaultMessage="Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!" /></p>
+          </div>
+
+          {!isLoading && (
+            <React.Fragment>
+              <div className='column-list'>
+                {suggestions.size > 0 ? suggestions.map(suggestion => (
+                  <Account key={suggestion.get('account')} id={suggestion.get('account')} />
+                )) : (
+                  <div className='column-list__empty-message'>
+                    <FormattedMessage id='empty_column.follow_recommendations' defaultMessage='Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.' />
+                  </div>
+                )}
+              </div>
+
+              <div className='column-actions'>
+                <img src={imageGreeting} alt='' className='column-actions__background' />
+                <Button onClick={this.handleDone}><FormattedMessage id='follow_recommendations.done' defaultMessage='Done' /></Button>
+              </div>
+            </React.Fragment>
+          )}
+        </div>
+      </Column>
+    );
+  }
+
+}
diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js
index 577ff33bb..b85c69af7 100644
--- a/app/javascript/mastodon/features/home_timeline/index.js
+++ b/app/javascript/mastodon/features/home_timeline/index.js
@@ -73,7 +73,7 @@ class HomeTimeline extends React.PureComponent {
   }
 
   componentDidMount () {
-    this.props.dispatch(fetchAnnouncements());
+    setTimeout(() => this.props.dispatch(fetchAnnouncements()), 700);
     this._checkIfReloadNeeded(false, this.props.isPartial);
   }
 
@@ -153,7 +153,7 @@ class HomeTimeline extends React.PureComponent {
           scrollKey={`home_timeline-${columnId}`}
           onLoadMore={this.handleLoadMore}
           timelineId='home'
-          emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />}
+          emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />}
           shouldUpdateScroll={shouldUpdateScroll}
           bindToDocument={!multiColumn}
         />
diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js
index cf8fd7127..1a621eca9 100644
--- a/app/javascript/mastodon/features/notifications/index.js
+++ b/app/javascript/mastodon/features/notifications/index.js
@@ -178,7 +178,7 @@ class Notifications extends React.PureComponent {
   render () {
     const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props;
     const pinned = !!columnId;
-    const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />;
+    const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />;
 
     let scrollableContent = null;
 
diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js
index 270be2851..039abe432 100644
--- a/app/javascript/mastodon/features/ui/components/columns_area.js
+++ b/app/javascript/mastodon/features/ui/components/columns_area.js
@@ -53,7 +53,7 @@ const messages = defineMessages({
   publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },
 });
 
-const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started/);
+const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started|^\/start/);
 
 export default @(component => injectIntl(component, { withRef: true }))
 class ColumnsArea extends ImmutablePureComponent {
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index 507ac1df1..2b9fe1603 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -51,10 +51,12 @@ import {
   Lists,
   Search,
   Directory,
+  FollowRecommendations,
 } from './util/async-components';
 import { me } from '../../initial_state';
 import { previewState as previewMediaState } from './components/media_modal';
 import { previewState as previewVideoState } from './components/video_modal';
+import { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';
 
 // Dummy import, to make sure that <Status /> ends up in the application bundle.
 // Without this it ends up in ~8 very commonly used bundles.
@@ -71,6 +73,7 @@ const mapStateToProps = state => ({
   hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
   canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,
   dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
+  firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,
 });
 
 const keyMap = {
@@ -167,6 +170,7 @@ class SwitchingColumnsArea extends React.PureComponent {
           <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />
           <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} />
 
+          <WrappedRoute path='/start' component={FollowRecommendations} content={children} />
           <WrappedRoute path='/search' component={Search} content={children} />
           <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} />
 
@@ -215,6 +219,7 @@ class UI extends React.PureComponent {
     intl: PropTypes.object.isRequired,
     dropdownMenuIsOpen: PropTypes.bool,
     layout: PropTypes.string.isRequired,
+    firstLaunch: PropTypes.bool,
   };
 
   state = {
@@ -350,10 +355,15 @@ class UI extends React.PureComponent {
       navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);
     }
 
-    this.props.dispatch(fetchMarkers());
+    // On first launch, redirect to the follow recommendations page
+    if (this.props.firstLaunch) {
+      this.context.router.history.replace('/start');
+      this.props.dispatch(closeOnboarding());
+    }
+
     this.props.dispatch(expandHomeTimeline());
     this.props.dispatch(expandNotifications());
-
+    setTimeout(() => this.props.dispatch(fetchMarkers()), 500);
     setTimeout(() => this.props.dispatch(fetchFilters()), 500);
 
     this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js
index 986efda1e..aa90b226a 100644
--- a/app/javascript/mastodon/features/ui/util/async-components.js
+++ b/app/javascript/mastodon/features/ui/util/async-components.js
@@ -153,3 +153,7 @@ export function Audio () {
 export function Directory () {
   return import(/* webpackChunkName: "features/directory" */'../../directory');
 }
+
+export function FollowRecommendations () {
+  return import(/* webpackChunkName: "features/follow_recommendations" */'../../follow_recommendations');
+}
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
new file mode 100644
index 000000000..1b311b04d
--- /dev/null
+++ b/app/javascript/mastodon/locales/af.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "Note",
+  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.badges.bot": "Bot",
+  "account.badges.group": "Group",
+  "account.block": "Block @{name}",
+  "account.block_domain": "Block domain {domain}",
+  "account.blocked": "Blocked",
+  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Direct message @{name}",
+  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.domain_blocked": "Domain blocked",
+  "account.edit_profile": "Edit profile",
+  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.endorse": "Feature on profile",
+  "account.follow": "Follow",
+  "account.followers": "Followers",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
+  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Last active",
+  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.media": "Media",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "Mute @{name}",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.never_active": "Never",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "Report @{name}",
+  "account.requested": "Awaiting approval",
+  "account.share": "Share @{name}'s profile",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.unblock": "Unblock @{name}",
+  "account.unblock_domain": "Unblock domain {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account_note.placeholder": "Click to add a note",
+  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Rate limited",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "Oops!",
+  "announcement.announcement": "Announcement",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "Try again",
+  "bundle_column_error.title": "Network error",
+  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "Try again",
+  "column.blocks": "Blocked users",
+  "column.bookmarks": "Bookmarks",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.directory": "Browse profiles",
+  "column.domain_blocks": "Blocked domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Home",
+  "column.lists": "Lists",
+  "column.mutes": "Muted users",
+  "column.notifications": "Notifications",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Back",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.local_only": "Local only",
+  "community.column_settings.media_only": "Media only",
+  "community.column_settings.remote_only": "Remote only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.poll.add_option": "Add a choice",
+  "compose_form.poll.duration": "Poll duration",
+  "compose_form.poll.option_placeholder": "Choice {number}",
+  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
+  "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.confirm": "Block",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.logout.confirm": "Log out",
+  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "Reply",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "conversation.delete": "Delete conversation",
+  "conversation.mark_as_read": "Mark as read",
+  "conversation.open": "View conversation",
+  "conversation.with": "With {names}",
+  "directory.federated": "From known fediverse",
+  "directory.local": "From {domain} only",
+  "directory.new_arrivals": "New arrivals",
+  "directory.recently_active": "Recently active",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no blocked domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it 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.suggestions": "See some suggestions",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "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.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
+  "generic.saved": "Saved",
+  "getting_started.developers": "Developers",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "hashtag.column_header.tag_mode.all": "and {additional}",
+  "hashtag.column_header.tag_mode.any": "or {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.select.no_options_message": "No suggestions found",
+  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
+  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.any": "Any of these",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "home.hide_announcements": "Hide announcements",
+  "home.show_announcements": "Show announcements",
+  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
+  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.open_media": "to open media",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.compress": "Compress image view box",
+  "lightbox.expand": "Expand image view box",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.edit.submit": "Change title",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.replies_policy.followed": "Any followed user",
+  "lists.replies_policy.list": "Members of the list",
+  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.title": "Show replies to:",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.duration": "Duration",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "mute_modal.indefinite": "Indefinite",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.follow_request": "{name} has requested to follow you",
+  "notification.mention": "{name} mentioned you",
+  "notification.own_poll": "Your poll has ended",
+  "notification.poll": "A poll you have voted in has ended",
+  "notification.reblog": "{name} boosted your status",
+  "notification.status": "{name} just posted",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "All",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.polls": "Poll results",
+  "notifications.filter.statuses": "Updates from people you follow",
+  "notifications.grant_permission": "Grant permission.",
+  "notifications.group": "{count} notifications",
+  "notifications.mark_as_read": "Mark every notification as read",
+  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
+  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
+  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.title": "Never miss a thing",
+  "picture_in_picture.restore": "Put it back",
+  "poll.closed": "Closed",
+  "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.vote": "Vote",
+  "poll.voted": "You voted for this answer",
+  "poll_button.add_poll": "Add a poll",
+  "poll_button.remove_poll": "Remove poll",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Visible for mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Visible for followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Visible for all, shown in public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Visible for all, but not in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "relative_time.today": "today",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.bookmark": "Bookmark",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost with original visibility",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.remove_bookmark": "Remove bookmark",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.uncached_media_warning": "Not available",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
+  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.moments": "Moments remaining",
+  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.resources.followers": "Followers",
+  "timeline_hint.resources.follows": "Follows",
+  "timeline_hint.resources.statuses": "Older toots",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.trending_now": "Trending now",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add images, a video or an audio file",
+  "upload_error.limit": "File upload limit exceeded.",
+  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_form.audio_description": "Describe for people with hearing loss",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.edit": "Edit",
+  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.undo": "Delete",
+  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "upload_modal.choose_image": "Choose image",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.edit_media": "Edit media",
+  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_progress.label": "Uploading…",
+  "video.close": "Close video",
+  "video.download": "Download file",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 4d43a2720..63cb17dd3 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -1,118 +1,119 @@
 {
-  "account.account_note_header": "ملاحظة",
-  "account.add_or_remove_from_list": "أضفه أو أزله من القائمة",
+  "account.account_note_header": "مُلاحظة",
+  "account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة",
   "account.badges.bot": "روبوت",
-  "account.badges.group": "فريق",
+  "account.badges.group": "مجموعة",
   "account.block": "حظر @{name}",
-  "account.block_domain": "إخفاء كل شيء قادم من اسم النطاق {domain}",
+  "account.block_domain": "حظر اسم النِّطاق {domain}",
   "account.blocked": "محظور",
-  "account.browse_more_on_origin_server": "تصفح المزيد على الملف التعريفي الأصلي",
+  "account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
   "account.cancel_follow_request": "إلغاء طلب المتابَعة",
-  "account.direct": "رسالة خاصة إلى @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
-  "account.domain_blocked": "النطاق مخفي",
-  "account.edit_profile": "تعديل الملف الشخصي",
-  "account.enable_notifications": "Notify me when @{name} posts",
-  "account.endorse": "أوصِ به على صفحتك",
-  "account.follow": "تابِع",
-  "account.followers": "مُتابِعون",
-  "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
-  "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.",
-  "account.follows_you": "يتابعك",
-  "account.hide_reblogs": "إخفاء ترقيات @{name}",
+  "account.direct": "مراسلة @{name} بشكلة مباشر",
+  "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
+  "account.domain_blocked": "اسم النِّطاق محظور",
+  "account.edit_profile": "تحرير الملف الشخصي",
+  "account.enable_notifications": "أشعرني عندما ينشر @{name}",
+  "account.endorse": "أوصِ به على صفحتك الشخصية",
+  "account.follow": "المُتابعة",
+  "account.followers": "المُتابِعون",
+  "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم حتى الآن.",
+  "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two{مُتابعانِ اِثنان} few{{counter} مُتابِعين} many{{counter}  مُتابِعًا} other {{counter}  مُتابع}}",
+  "account.following_counter": "{count, plural, zero{لا يُتابِع} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}",
+  "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
+  "account.follows_you": "يُتابِعُك",
+  "account.hide_reblogs": "إخفاء تعزيزات @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "آخر نشاط",
-  "account.link_verified_on": "تم التحقق مِن مِلْكية هذا الرابط بتاريخ {date}",
-  "account.locked_info": "تم تأمين خصوصية هذا الحساب عبر قفل. صاحب الحساب يُراجِع يدويا طلبات المتابَعة و الاشتراك بحسابه.",
+  "account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}",
+  "account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.",
   "account.media": "وسائط",
-  "account.mention": "أذكُر @{name}",
-  "account.moved_to": "{name} انتقل إلى:",
-  "account.mute": "أكتم @{name}",
-  "account.mute_notifications": "كتم الإخطارات من @{name}",
-  "account.muted": "مكتوم",
-  "account.never_active": "أبدا",
+  "account.mention": "ذِكر @{name}",
+  "account.moved_to": "لقد انتقل {name} إلى:",
+  "account.mute": "كَتم @{name}",
+  "account.mute_notifications": "كَتم الإشعارات من @{name}",
+  "account.muted": "مَكتوم",
+  "account.never_active": "أبدًا",
   "account.posts": "تبويقات",
-  "account.posts_with_replies": "التبويقات والردود",
-  "account.report": "ابلِغ عن @{name}",
-  "account.requested": "في انتظار الموافقة. اضْغَطْ/ي لإلغاء طلب المتابعة",
-  "account.share": "شارك ملف تعريف @{name}",
-  "account.show_reblogs": "اعرض ترقيات @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
-  "account.unblock": "إلغاء الحظر عن @{name}",
-  "account.unblock_domain": "فك الخْفى عن {domain}",
-  "account.unendorse": "أزل ترويجه مِن الملف التعريفي",
-  "account.unfollow": "إلغاء المتابعة",
-  "account.unmute": "إلغاء الكتم عن @{name}",
-  "account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
-  "account_note.placeholder": "انقر لإضافة ملاحظة",
-  "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.",
-  "alert.rate_limited.title": "المعدل محدود",
-  "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
+  "account.posts_with_replies": "التَّبويقات والرُدود",
+  "account.report": "الإبلاغ عن @{name}",
+  "account.requested": "في اِنتظر القُبول. اِنقُر لإلغاء طلب المُتابعة",
+  "account.share": "مُشاركة الملف الشخصي لـ @{name}",
+  "account.show_reblogs": "عرض تعزيزات @{name}",
+  "account.statuses_counter": "{count, plural, zero {لَا تَبويقات} one {تَبويقةٌ واحدة} two {تَبويقَتانِ اِثنتان} few {{counter} تَبويقات} many {{counter} تَبويقتًا} other {{counter} تَبويقة}}",
+  "account.unblock": "إلغاء الحَظر عن @{name}",
+  "account.unblock_domain": "إلغاء الحَظر عن النِّطاق {domain}",
+  "account.unendorse": "لا تُرَوِّج لهُ في الملف الشخصي",
+  "account.unfollow": "إلغاء المُتابعة",
+  "account.unmute": "إلغاء الكَتم عن @{name}",
+  "account.unmute_notifications": "إلغاء كَتم الإشعارات عن @{name}",
+  "account_note.placeholder": "اِنقُر لإضافة مُلاحظة",
+  "alert.rate_limited.message": "يُرجى إعادة المحاولة بعد {retry_time, time, medium}.",
+  "alert.rate_limited.title": "المُعَدَّل مَحدود",
+  "alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
   "alert.unexpected.title": "المعذرة!",
   "announcement.announcement": "إعلان",
   "autosuggest_hashtag.per_week": "{count} في الأسبوع",
-  "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة",
-  "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
-  "bundle_column_error.retry": "إعادة المحاولة",
+  "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبِلَة",
+  "bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.",
+  "bundle_column_error.retry": "إعادة المُحاولة",
   "bundle_column_error.title": "خطأ في الشبكة",
-  "bundle_modal_error.close": "أغلق",
-  "bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
-  "bundle_modal_error.retry": "إعادة المحاولة",
-  "column.blocks": "الحسابات المحجوبة",
-  "column.bookmarks": "الفواصل المرجعية",
-  "column.community": "الخيط العام المحلي",
-  "column.direct": "الرسائل المباشرة",
-  "column.directory": "استعراض الملفات التعريفية",
-  "column.domain_blocks": "النطاقات المخفية",
-  "column.favourites": "المفضلة",
-  "column.follow_requests": "طلبات المتابعة",
-  "column.home": "الرئيسية",
-  "column.lists": "القوائم",
-  "column.mutes": "الحسابات المكتومة",
-  "column.notifications": "الإخطارات",
-  "column.pins": "التبويقات المثبتة",
-  "column.public": "الخيط العام الموحد",
+  "bundle_modal_error.close": "إغلاق",
+  "bundle_modal_error.message": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.",
+  "bundle_modal_error.retry": "إعادة المُحاولة",
+  "column.blocks": "المُستَخدِمون المَحظورون",
+  "column.bookmarks": "العَلاماتُ المَرجعيَّة",
+  "column.community": "الخَطُّ الزَّمَنِيُّ المَحَلِّيّ",
+  "column.direct": "الرَّسَائِلُ المُبَاشِرَة",
+  "column.directory": "تَصَفُّحُ المَلَفَّاتِ الشَّخصِيَّة",
+  "column.domain_blocks": "النِّطاقَاتُ المَحظُورَة",
+  "column.favourites": "المُفَضَّلَة",
+  "column.follow_requests": "طَلَبَاتُ المُتَابَعَة",
+  "column.home": "الرَّئِيسَة",
+  "column.lists": "القَوائِم",
+  "column.mutes": "المُستَخدِمون المَكتومون",
+  "column.notifications": "الإشعارَات",
+  "column.pins": "التَّبويقاتُ المُثَبَّتَة",
+  "column.public": "الخَطُّ الزَّمَنِيُّ المُوَحَّد",
   "column_back_button.label": "العودة",
   "column_header.hide_settings": "إخفاء الإعدادات",
-  "column_header.moveLeft_settings": "نقل القائمة إلى اليسار",
-  "column_header.moveRight_settings": "نقل القائمة إلى اليمين",
-  "column_header.pin": "تدبيس",
-  "column_header.show_settings": "عرض الإعدادات",
-  "column_header.unpin": "فك التدبيس",
-  "column_subheading.settings": "الإعدادات",
+  "column_header.moveLeft_settings": "نقل العامود إلى اليسار",
+  "column_header.moveRight_settings": "نقل العامود إلى اليمين",
+  "column_header.pin": "تثبيت",
+  "column_header.show_settings": "إظهار الإعدادات",
+  "column_header.unpin": "إلغاء التَّثبيت",
+  "column_subheading.settings": "الإعدَادَات",
   "community.column_settings.local_only": "المحلي فقط",
   "community.column_settings.media_only": "الوسائط فقط",
   "community.column_settings.remote_only": "عن بُعد فقط",
-  "compose_form.direct_message_warning": "لن يَظهر هذا التبويق إلا للمستخدمين المذكورين.",
-  "compose_form.direct_message_warning_learn_more": "اقرأ المزيد",
-  "compose_form.hashtag_warning": "هذا التبويق لن يُدرَج تحت أي وسم كان بما أنه غير مُدرَج. لا يُسمح بالبحث إلّا عن التبويقات العمومية عن طريق الوسوم.",
-  "compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.",
-  "compose_form.lock_disclaimer.lock": "مقفل",
-  "compose_form.placeholder": "فيمَ تفكّر؟",
+  "compose_form.direct_message_warning": "سوف تُرسَل هذه التَّبويقة فقط للمُستَخدِمين المَذكورين.",
+  "compose_form.direct_message_warning_learn_more": "تَعَلَّم المَزيد",
+  "compose_form.hashtag_warning": "لن تُدرَج هذه التبويقة تحت أي وسم بما أنَّها غير مُدرَجة. فقط التبويقات العامة يُمكن البحث عنها بواسطة الوسم.",
+  "compose_form.lock_disclaimer": "حسابُك غير {locked}. يُمكن لأي شخص مُتابعتك لرؤية (منشورات المتابعين فقط).",
+  "compose_form.lock_disclaimer.lock": "مُقفَل",
+  "compose_form.placeholder": "فِيمَ تُفكِّر؟",
   "compose_form.poll.add_option": "إضافة خيار",
-  "compose_form.poll.duration": "مدة استطلاع الرأي",
+  "compose_form.poll.duration": "مُدَّة اِستطلاع الرأي",
   "compose_form.poll.option_placeholder": "الخيار {number}",
   "compose_form.poll.remove_option": "إزالة هذا الخيار",
-  "compose_form.poll.switch_to_multiple": "عدّل استطلاع الرأي وغيّره لإتاحة الخيارات المتعددة",
-  "compose_form.poll.switch_to_single": "عدّل استطلاع الرأي وغيّره لإتاحة خيار واحد فقط",
-  "compose_form.publish": "بوّق",
+  "compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة",
+  "compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط",
+  "compose_form.publish": "تبويق",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "تحديد الوسائط كحساسة",
-  "compose_form.sensitive.marked": "لقد تم تحديد هذه الصورة كحساسة",
-  "compose_form.sensitive.unmarked": "لم يتم تحديد الصورة كحساسة",
+  "compose_form.sensitive.hide": "{count, plural, one {الإشارة إلى الوَسط كمُحتوى حسّاس} two{الإشارة إلى الوسطان كمُحتويان حسّاسان} other {الإشارة إلى الوسائط كمُحتويات حسّاسة}}",
+  "compose_form.sensitive.marked": "{count, plural, one {تمَّ الإشارة إلى الوسط كمُحتوى حسّاس} two{تمَّ الإشارة إلى الوسطان كمُحتويان حسّاسان} other {تمَّ الإشارة إلى الوسائط كمُحتويات حسّاسة}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {لم تَتِمّ الإشارة إلى الوسط كمُحتوى حسّاس} two{لم تَتِمّ الإشارة إلى الوسطان كمُحتويان حسّاسان} other {لم تَتِمّ الإشارة إلى الوسائط كمُحتويات حسّاسة}}",
   "compose_form.spoiler.marked": "إنّ النص مخفي وراء تحذير",
-  "compose_form.spoiler.unmarked": "النص غير مخفي",
-  "compose_form.spoiler_placeholder": "تنبيه عن المحتوى",
+  "compose_form.spoiler.unmarked": "إنَّ النص غير مخفي",
+  "compose_form.spoiler_placeholder": "اُكتُب تحذيركَ هُنا",
   "confirmation_modal.cancel": "إلغاء",
-  "confirmations.block.block_and_report": "احجبه وابلغ عنه",
-  "confirmations.block.confirm": "حجب",
-  "confirmations.block.message": "هل أنت متأكد أنك تريد حجب {name} ؟",
+  "confirmations.block.block_and_report": "حظره والإبلاغ عنه",
+  "confirmations.block.confirm": "حظر",
+  "confirmations.block.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَظرَ {name}؟",
   "confirmations.delete.confirm": "حذف",
-  "confirmations.delete.message": "هل أنت متأكد أنك تريد حذف هذا المنشور ؟",
-  "confirmations.delete_list.confirm": "احذف",
-  "confirmations.delete_list.message": "هل تود حقا حذف هذه القائمة ؟",
-  "confirmations.domain_block.confirm": "إخفاء اسم النطاق كاملا",
+  "confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟",
+  "confirmations.delete_list.confirm": "حذف",
+  "confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمةَ بشكلٍ دائم؟",
+  "confirmations.domain_block.confirm": "حظر اِسم النِّطاق بشكلٍ كامل",
   "confirmations.domain_block.message": "متأكد من أنك تود حظر اسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.\nلن تتمكن مِن رؤية محتوى هذا النطاق لا على خيوطك العمومية و لا في إشعاراتك. سوف يتم كذلك إزالة كافة متابعيك المنتمين إلى هذا النطاق.",
   "confirmations.logout.confirm": "خروج",
   "confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "نتائج البحث",
   "emoji_button.symbols": "رموز",
   "emoji_button.travel": "الأماكن والسفر",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "حساب معلق",
   "empty_column.account_timeline": "ليس هناك تبويقات!",
   "empty_column.account_unavailable": "الملف التعريفي غير متوفر",
   "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.",
@@ -159,24 +160,28 @@
   "empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.",
   "empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.",
   "empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا التبويق بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.",
   "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
   "empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.",
-  "empty_column.home.public_timeline": "الخيط العام",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.",
   "empty_column.lists": "ليس عندك أية قائمة بعد. سوف تظهر قائمتك هنا إن قمت بإنشاء واحدة.",
   "empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.",
   "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
   "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات",
   "error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "لا يمكن عرض هذه الصفحة بشكل صحيح. من المحتمل أن يكون هذا الخطأ بسبب إضافة متصفح أو أدوات ترجمة تلقائية.",
   "error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.",
   "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
   "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "ترخيص",
   "follow_request.reject": "رفض",
-  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
+  "follow_requests.unlocked_explanation": "على الرغم من أن حسابك غير مقفل، فإن موظفين الـ{domain} ظنوا أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.",
   "generic.saved": "تم الحفظ",
   "getting_started.developers": "المُطوِّرون",
   "getting_started.directory": "دليل الصفحات التعريفية",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
   "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
   "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
-  "introduction.federation.action": "التالي",
-  "introduction.federation.federated.headline": "الفديرالي",
-  "introduction.federation.federated.text": "كافة المنشورات التي نُشِرت إلى العامة على الخوادم الأخرى للفديفرس سوف يتم عرضها على الخيط المُوحَّد.",
-  "introduction.federation.home.headline": "الرئيسي",
-  "introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!",
-  "introduction.federation.local.headline": "الخيط العام المحلي",
-  "introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط العام المحلي.",
-  "introduction.interactions.action": "إنهاء العرض التوضيحي!",
-  "introduction.interactions.favourite.headline": "الإضافة إلى المفضلة",
-  "introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.",
-  "introduction.interactions.reblog.headline": "الترقية",
-  "introduction.interactions.reblog.text": "يمكنكم مشاركة تبويقات الأشخاص الآخرين مع متابِعيكم عن طريق ترقيتها.",
-  "introduction.interactions.reply.headline": "الرد",
-  "introduction.interactions.reply.text": "يمكنكم الرد على تبويقاتكم و تبويقات الآخرين على شكل سلسلة محادثة.",
-  "introduction.welcome.action": "هيا بنا!",
-  "introduction.welcome.headline": "الخطوات الأولى",
-  "introduction.welcome.text": "مرحبا بكم على الفديفرس! بعد لحظات قليلة ، سيكون بمقدوركم بث رسائل والتحدث إلى أصدقائكم عبر تشكيلة واسعة من الخوادم المختلفة. هذا الخادم ، {domain} ، يستضيف صفحتكم التعريفية ، لذا يجب تذكر اسمه جيدا.",
   "keyboard_shortcuts.back": "للعودة",
   "keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين",
   "keyboard_shortcuts.boost": "للترقية",
@@ -255,8 +243,8 @@
   "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث",
   "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة",
   "lightbox.close": "إغلاق",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "ضغط مربع عرض الصورة",
+  "lightbox.expand": "توسيع مربع عرض الصور",
   "lightbox.next": "التالي",
   "lightbox.previous": "العودة",
   "lists.account.add": "أضف إلى القائمة",
@@ -266,10 +254,10 @@
   "lists.edit.submit": "تعديل العنوان",
   "lists.new.create": "إنشاء قائمة",
   "lists.new.title_placeholder": "عنوان القائمة الجديدة",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.followed": "أي مستخدم متابِع",
+  "lists.replies_policy.list": "أعضاء القائمة",
+  "lists.replies_policy.none": "لا أحد",
+  "lists.replies_policy.title": "عرض الردود لـ:",
   "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
   "lists.subheading": "قوائمك",
   "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
@@ -277,9 +265,9 @@
   "media_gallery.toggle_visible": "عرض / إخفاء",
   "missing_indicator.label": "غير موجود",
   "missing_indicator.sublabel": "تعذر العثور على هذا المورد",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "المدة",
   "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "إلى أجل غير مسمى",
   "navigation_bar.apps": "تطبيقات الأجهزة المحمولة",
   "navigation_bar.blocks": "الحسابات المحجوبة",
   "navigation_bar.bookmarks": "الفواصل المرجعية",
@@ -310,7 +298,7 @@
   "notification.own_poll": "انتهى استطلاعك للرأي",
   "notification.poll": "لقد إنتها تصويت شاركت فيه",
   "notification.reblog": "{name} قام بترقية تبويقك",
-  "notification.status": "{name} just posted",
+  "notification.status": "{name} نشر للتو",
   "notifications.clear": "امسح الإخطارات",
   "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟",
   "notifications.column_settings.alert": "إشعارات سطح المكتب",
@@ -327,23 +315,24 @@
   "notifications.column_settings.show": "اعرِضها في عمود",
   "notifications.column_settings.sound": "أصدر صوتا",
   "notifications.column_settings.status": "تبويقات جديدة:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "الكل",
   "notifications.filter.boosts": "الترقيات",
   "notifications.filter.favourites": "المفضلة",
   "notifications.filter.follows": "يتابِع",
   "notifications.filter.mentions": "الإشارات",
   "notifications.filter.polls": "نتائج استطلاع الرأي",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.filter.statuses": "تحديثات من الاشخاص الذين تتابعهم",
+  "notifications.grant_permission": "منح الإذن.",
   "notifications.group": "{count} إشعارات",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications.mark_as_read": "وضع علامة مقروءة على جميع الإشعارات",
+  "notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً",
+  "notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً",
+  "notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.",
+  "notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
+  "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
+  "notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
+  "picture_in_picture.restore": "ضعها مرة أخرى",
   "poll.closed": "انتهى",
   "poll.refresh": "تحديث",
   "poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}",
@@ -447,7 +436,7 @@
   "timeline_hint.resources.followers": "المتابِعون",
   "timeline_hint.resources.follows": "المتابَعون",
   "timeline_hint.resources.statuses": "التبويقات القديمة",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.counter_by_accounts": "{count,plural,zero{} one{{counter} شخص} two{{counter} شخصين} few{{counter} أشخاص } many{{counter} شخص} other{{counter} شخص}}",
   "trends.trending_now": "المتداولة الآن",
   "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
   "units.short.billion": "{count} مليار",
@@ -470,7 +459,7 @@
   "upload_modal.detect_text": "اكتشف النص مِن الصورة",
   "upload_modal.edit_media": "تعديل الوسائط",
   "upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "جار إعداد OCR (تعرف ضوئي على الرموز)…",
   "upload_modal.preview_label": "معاينة ({ratio})",
   "upload_progress.label": "يرفع...",
   "video.close": "إغلاق الفيديو",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 4f5fec8b1..9d3c16d78 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Esti usuariu entá nun sigue a naide.",
   "account.follows_you": "Síguete",
   "account.hide_reblogs": "Anubrir les comparticiones de @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Cabera actividá",
   "account.link_verified_on": "La propiedá d'esti enllaz foi comprobada'l {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Entá nun hai dominios anubríos.",
   "empty_column.favourited_statuses": "Entá nun tienes nengún barritu en Favoritos. Cuando amiestes unu, va amosase equí.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Entá nun tienes nenguna solicitú de siguimientu. Cuando recibas una, va amosase equí.",
   "empty_column.hashtag": "Entá nun hai nada nesta etiqueta.",
   "empty_column.home": "¡Tienes la llinia temporal balera! Visita {public} o usa la gueta pa entamar y conocer a otros usuarios.",
-  "empty_column.home.public_timeline": "la llinia temporal pública",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Entá nun hai nada nesta llista. Cuando los miembros d'esta llista espublicen estaos nuevos, van apaecer equí.",
   "empty_column.lists": "Entá nun tienes nenguna llista. Cuando crees una, va amosase equí.",
   "empty_column.mutes": "Entá nun silenciesti a nunengún usuariu.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Refugar",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# día} other {# díes}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
   "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}",
-  "introduction.federation.action": "Siguiente",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Los espublizamientos públicos de los demás sirvidores del fediversu van apaecer na llinia temporal federada.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "¡Finar el tutorial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "Pues guardar un barritu pa dempués y facer que l'autor sepa que te prestó marcándolu como favoritu.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "¡Vamos!",
-  "introduction.welcome.headline": "Primeros pasos",
-  "introduction.welcome.text": "¡Afáyate nel fediversu! Nun momentu vas ser a tresmitir mensaxes y falar colos collacios d'una montonera de sirvidores. Pero esti sirvidor, {domain}, ye especial: agospia'l to perfil, asina qu'alcuérdate de cómo se llama.",
   "keyboard_shortcuts.back": "pa dir p'atrás",
   "keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos",
   "keyboard_shortcuts.boost": "pa compartir un toot",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Amosar en columna",
   "notifications.column_settings.sound": "Reproducir un soníu",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Too",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 4778d6618..d5f66eeb4 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -1,486 +1,475 @@
 {
-  "account.account_note_header": "Note",
+  "account.account_note_header": "Бележка",
   "account.add_or_remove_from_list": "Добави или премахни от списъците",
-  "account.badges.bot": "бот",
-  "account.badges.group": "Group",
+  "account.badges.bot": "Бот",
+  "account.badges.group": "Група",
   "account.block": "Блокирай",
   "account.block_domain": "скрий всичко от (домейн)",
   "account.blocked": "Блокирани",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.browse_more_on_origin_server": "Разгледайте повече в оригиналния профил",
   "account.cancel_follow_request": "Откажи искането за следване",
   "account.direct": "Direct Message @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Спрете да ме уведомявате, когато @{name} публикува",
   "account.domain_blocked": "Скрит домейн",
-  "account.edit_profile": "Редактирай профила си",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.edit_profile": "Редактирай профила",
+  "account.enable_notifications": "Уведомявайте ме, когато @{name} публикува",
   "account.endorse": "Характеристика на профила",
   "account.follow": "Последвай",
   "account.followers": "Последователи",
   "account.followers.empty": "Все още никой не следва този потребител.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, one {{counter} Последовател} other {{counter} Последователи}}",
+  "account.following_counter": "{count, plural, one {{counter} Последван} other {{counter} Последвани}}",
   "account.follows.empty": "Този потребител все още не следва никого.",
   "account.follows_you": "Твой последовател",
-  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.hide_reblogs": "Скриване на споделяния от @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Последно активен/а",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
-  "account.media": "Media",
+  "account.link_verified_on": "Собствеността върху тази връзка е проверена на {date}",
+  "account.locked_info": "Този акаунт е поверително заключен. Собственикът преглежда ръчно кой може да го следва.",
+  "account.media": "Мултимедия",
   "account.mention": "Споменаване",
-  "account.moved_to": "{name} has moved to:",
-  "account.mute": "Mute @{name}",
-  "account.mute_notifications": "Mute notifications from @{name}",
-  "account.muted": "Muted",
-  "account.never_active": "Never",
+  "account.moved_to": "{name} се премести в:",
+  "account.mute": "Заглушаване на @{name}",
+  "account.mute_notifications": "Заглушаване на известия от @{name}",
+  "account.muted": "Заглушено",
+  "account.never_active": "Никога",
   "account.posts": "Публикации",
   "account.posts_with_replies": "Toots with replies",
-  "account.report": "Report @{name}",
+  "account.report": "Докладване на @{name}",
   "account.requested": "В очакване на одобрение",
-  "account.share": "Share @{name}'s profile",
-  "account.show_reblogs": "Show boosts from @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.share": "Споделяне на @{name} профила",
+  "account.show_reblogs": "Показване на споделяния от @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Публикация} other {{counter} Публикации}}",
   "account.unblock": "Не блокирай",
   "account.unblock_domain": "Unhide {domain}",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "Не включвайте в профила",
   "account.unfollow": "Не следвай",
-  "account.unmute": "Unmute @{name}",
-  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account.unmute": "Раззаглушаване на @{name}",
+  "account.unmute_notifications": "Раззаглушаване на известия от @{name}",
   "account_note.placeholder": "Click to add a note",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
-  "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
-  "announcement.announcement": "Announcement",
-  "autosuggest_hashtag.per_week": "{count} per week",
-  "boost_modal.combo": "You can press {combo} to skip this next time",
-  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Скоростта е ограничена",
+  "alert.unexpected.message": "Възникна неочаквана грешка.",
+  "alert.unexpected.title": "Опаа!",
+  "announcement.announcement": "Оповестяване",
+  "autosuggest_hashtag.per_week": "{count} на седмица",
+  "boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път",
+  "bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.",
   "bundle_column_error.retry": "Опитай отново",
-  "bundle_column_error.title": "Network error",
-  "bundle_modal_error.close": "Close",
-  "bundle_modal_error.message": "Something went wrong while loading this component.",
-  "bundle_modal_error.retry": "Try again",
-  "column.blocks": "Blocked users",
-  "column.bookmarks": "Bookmarks",
-  "column.community": "Local timeline",
-  "column.direct": "Direct messages",
-  "column.directory": "Browse profiles",
+  "bundle_column_error.title": "Мрежова грешка",
+  "bundle_modal_error.close": "Затваряне",
+  "bundle_modal_error.message": "Нещо се обърка при зареждането на този компонент.",
+  "bundle_modal_error.retry": "Опитайте отново",
+  "column.blocks": "Блокирани потребители",
+  "column.bookmarks": "Отметки",
+  "column.community": "Локална емисия",
+  "column.direct": "Директни съобщения",
+  "column.directory": "Преглед на профили",
   "column.domain_blocks": "Hidden domains",
-  "column.favourites": "Favourites",
-  "column.follow_requests": "Follow requests",
+  "column.favourites": "Любими",
+  "column.follow_requests": "Заявки за последване",
   "column.home": "Начало",
   "column.lists": "Списъци",
-  "column.mutes": "Muted users",
+  "column.mutes": "Заглушени потребители",
   "column.notifications": "Известия",
   "column.pins": "Pinned toot",
   "column.public": "Публичен канал",
   "column_back_button.label": "Назад",
-  "column_header.hide_settings": "Hide settings",
-  "column_header.moveLeft_settings": "Move column to the left",
-  "column_header.moveRight_settings": "Move column to the right",
-  "column_header.pin": "Pin",
-  "column_header.show_settings": "Show settings",
-  "column_header.unpin": "Unpin",
-  "column_subheading.settings": "Settings",
-  "community.column_settings.local_only": "Local only",
+  "column_header.hide_settings": "Скриване на настройки",
+  "column_header.moveLeft_settings": "Преместване на колона вляво",
+  "column_header.moveRight_settings": "Преместване на колона вдясно",
+  "column_header.pin": "Закачане",
+  "column_header.show_settings": "Показване на настройки",
+  "column_header.unpin": "Разкачане",
+  "column_subheading.settings": "Настройки",
+  "community.column_settings.local_only": "Само локално",
   "community.column_settings.media_only": "Media only",
-  "community.column_settings.remote_only": "Remote only",
+  "community.column_settings.remote_only": "Само дистанционно",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
-  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
-  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
-  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.direct_message_warning_learn_more": "Още информация",
+  "compose_form.hashtag_warning": "Тази публикация няма да бъде изброена под нито един хаштаг, тъй като е скрита. Само публични публикации могат да се търсят по хаштаг.",
+  "compose_form.lock_disclaimer": "Вашият акаунт не е {locked}. Всеки може да ви последва, за да прегледа вашите публикации само за последователи.",
+  "compose_form.lock_disclaimer.lock": "заключено",
   "compose_form.placeholder": "Какво си мислиш?",
-  "compose_form.poll.add_option": "Add a choice",
-  "compose_form.poll.duration": "Poll duration",
-  "compose_form.poll.option_placeholder": "Choice {number}",
-  "compose_form.poll.remove_option": "Remove this choice",
-  "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
-  "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+  "compose_form.poll.add_option": "Добавяне на избор",
+  "compose_form.poll.duration": "Продължителност на анкета",
+  "compose_form.poll.option_placeholder": "Избор {number}",
+  "compose_form.poll.remove_option": "Премахване на този избор",
+  "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора",
+  "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор",
   "compose_form.publish": "Раздумай",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
-  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
-  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
-  "compose_form.spoiler.marked": "Text is hidden behind warning",
-  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.sensitive.hide": "{count, plural, one {Маркиране на мултимедията като деликатна} other {Маркиране на мултимедиите като деликатни}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Мултимедията е маркирана като деликатна} other {Мултимедиите са маркирани като деликатни}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Мултимедията не е маркирана като деликатна} other {Мултимедиите не са маркирани като деликатни}}",
+  "compose_form.spoiler.marked": "Текстът е скрит зад предупреждение",
+  "compose_form.spoiler.unmarked": "Текстът не е скрит",
   "compose_form.spoiler_placeholder": "Content warning",
-  "confirmation_modal.cancel": "Cancel",
-  "confirmations.block.block_and_report": "Block & Report",
-  "confirmations.block.confirm": "Block",
-  "confirmations.block.message": "Are you sure you want to block {name}?",
-  "confirmations.delete.confirm": "Delete",
+  "confirmation_modal.cancel": "Отказ",
+  "confirmations.block.block_and_report": "Блокиране и докладване",
+  "confirmations.block.confirm": "Блокиране",
+  "confirmations.block.message": "Сигурни ли сте, че искате да блокирате {name}?",
+  "confirmations.delete.confirm": "Изтриване",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "confirmations.delete_list.confirm": "Delete",
-  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.delete_list.confirm": "Изтриване",
+  "confirmations.delete_list.message": "Сигурни ли сте, че искате да изтриете окончателно този списък?",
   "confirmations.domain_block.confirm": "Hide entire domain",
   "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
-  "confirmations.mute.confirm": "Mute",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
-  "confirmations.mute.message": "Are you sure you want to mute {name}?",
-  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.logout.confirm": "Излизане",
+  "confirmations.logout.message": "Сигурни ли сте, че искате да излезете?",
+  "confirmations.mute.confirm": "Заглушаване",
+  "confirmations.mute.explanation": "Това ще скрие публикации от тях и публикации, които ги споменават, но все пак ще им позволи да виждат вашите публикации и да ви следват.",
+  "confirmations.mute.message": "Сигурни ли сте, че искате да заглушите {name}?",
+  "confirmations.redraft.confirm": "Изтриване и преработване",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
-  "confirmations.reply.confirm": "Reply",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
-  "confirmations.unfollow.confirm": "Unfollow",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
+  "confirmations.reply.confirm": "Отговор",
+  "confirmations.reply.message": "Отговарянето сега ще замени съобщението, което в момента съставяте. Сигурни ли сте, че искате да продължите?",
+  "confirmations.unfollow.confirm": "Отследване",
+  "confirmations.unfollow.message": "Сигурни ли сте, че искате да отследвате {name}?",
+  "conversation.delete": "Изтриване на разговор",
+  "conversation.mark_as_read": "Маркиране като прочетено",
+  "conversation.open": "Преглед на разговор",
+  "conversation.with": "С {names}",
   "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "directory.local": "Само от {domain}",
+  "directory.new_arrivals": "Новодошли",
+  "directory.recently_active": "Наскоро активни",
   "embed.instructions": "Embed this status on your website by copying the code below.",
-  "embed.preview": "Here is what it will look like:",
-  "emoji_button.activity": "Activity",
-  "emoji_button.custom": "Custom",
-  "emoji_button.flags": "Flags",
-  "emoji_button.food": "Food & Drink",
-  "emoji_button.label": "Insert emoji",
-  "emoji_button.nature": "Nature",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
-  "emoji_button.objects": "Objects",
-  "emoji_button.people": "People",
-  "emoji_button.recent": "Frequently used",
-  "emoji_button.search": "Search...",
-  "emoji_button.search_results": "Search results",
-  "emoji_button.symbols": "Symbols",
-  "emoji_button.travel": "Travel & Places",
-  "empty_column.account_suspended": "Account suspended",
-  "empty_column.account_timeline": "No toots here!",
-  "empty_column.account_unavailable": "Profile unavailable",
-  "empty_column.blocks": "You haven't blocked any users yet.",
-  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
-  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "embed.preview": "Ето как ще изглежда:",
+  "emoji_button.activity": "Дейност",
+  "emoji_button.custom": "Персонализирано",
+  "emoji_button.flags": "Знамена",
+  "emoji_button.food": "Храна и напитки",
+  "emoji_button.label": "Вмъкване на емоджи",
+  "emoji_button.nature": "Природа",
+  "emoji_button.not_found": "Без емоджита!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Предмети",
+  "emoji_button.people": "Хора",
+  "emoji_button.recent": "Често използвани",
+  "emoji_button.search": "Търсене...",
+  "emoji_button.search_results": "Резултати от търсене",
+  "emoji_button.symbols": "Символи",
+  "emoji_button.travel": "Пътуване и забележителности",
+  "empty_column.account_suspended": "Профилът е спрян",
+  "empty_column.account_timeline": "Тук няма публикации!",
+  "empty_column.account_unavailable": "Няма достъп до профила",
+  "empty_column.blocks": "Не сте блокирали потребители все още.",
+  "empty_column.bookmarked_statuses": "Все още нямате отметнати публикации. Когато отметнете някоя, тя ще се покаже тук.",
+  "empty_column.community": "Локалната емисия е празна. Напишете нещо публично, за да започнете!",
+  "empty_column.direct": "Все още нямате директни съобщения. Когато изпратите или получите някое, то ще се покаже тук.",
   "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
-  "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.favourited_statuses": "Все още нямате любими публикации. Когато поставите някоя в любими, тя ще се покаже тук.",
+  "empty_column.favourites": "Все още никой не е поставил тази публикация в любими. Когато някой го направи, ще се покаже тук.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "Все още нямате заявки за последване. Когато получите такава, тя ще се покаже тук.",
+  "empty_column.hashtag": "В този хаштаг няма нищо все още.",
+  "empty_column.home": "Вашата начална емисия е празна! Посетете {public} или използвайте търсене, за да започнете и да се запознаете с други потребители.",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet.",
-  "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.lists": "Все още нямате списъци. Когато създадете такъв, той ще се покаже тук.",
+  "empty_column.mutes": "Не сте заглушавали потребители все още.",
+  "empty_column.notifications": "Все още нямате известия. Взаимодействайте с другите, за да започнете разговора.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.explanation": "Поради грешка в нашия код или проблем със съвместимостта на браузъра, тази страница не може да се покаже правилно.",
+  "error.unexpected_crash.explanation_addons": "Тази страница не може да се покаже правилно. Тази грешка вероятно е причинена от добавка на браузъра или инструменти за автоматичен превод.",
+  "error.unexpected_crash.next_steps": "Опитайте да опресните страницата. Ако това не помогне, все още можете да използвате Mastodon чрез различен браузър или приложение.",
+  "error.unexpected_crash.next_steps_addons": "Опитайте да ги деактивирате и да опресните страницата. Ако това не помогне, може все още да използвате Mastodon чрез различен браузър или приложение.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
-  "follow_request.authorize": "Authorize",
-  "follow_request.reject": "Reject",
-  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
-  "generic.saved": "Saved",
-  "getting_started.developers": "Developers",
-  "getting_started.directory": "Profile directory",
-  "getting_started.documentation": "Documentation",
+  "errors.unexpected_crash.report_issue": "Сигнал за проблем",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Следвайте хора, които харесвате, за да виждате техните съобщения! Ето някои предложения.",
+  "follow_recommendations.lead": "Съобщения от хора, които следвате, ще се показват в хронологичен ред на вашата главна страница. Не се страхувайте, че ще сгрешите, по всяко време много лесно можете да спрете да ги следвате!",
+  "follow_request.authorize": "Упълномощаване",
+  "follow_request.reject": "Отхвърляне",
+  "follow_requests.unlocked_explanation": "Въпреки че акаунтът ви не е заключен, служителите на {domain} помислиха, че може да искате да преглеждате ръчно заявките за последване на тези профили.",
+  "generic.saved": "Запазено",
+  "getting_started.developers": "Разработчици",
+  "getting_started.directory": "Профилна директория",
+  "getting_started.documentation": "Документация",
   "getting_started.heading": "Първи стъпки",
-  "getting_started.invite": "Invite people",
+  "getting_started.invite": "Поканване на хора",
   "getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {github}.",
   "getting_started.security": "Security",
-  "getting_started.terms": "Terms of service",
-  "hashtag.column_header.tag_mode.all": "and {additional}",
-  "hashtag.column_header.tag_mode.any": "or {additional}",
-  "hashtag.column_header.tag_mode.none": "without {additional}",
-  "hashtag.column_settings.select.no_options_message": "No suggestions found",
-  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
-  "hashtag.column_settings.tag_mode.all": "All of these",
-  "hashtag.column_settings.tag_mode.any": "Any of these",
-  "hashtag.column_settings.tag_mode.none": "None of these",
+  "getting_started.terms": "Условия за ползване",
+  "hashtag.column_header.tag_mode.all": "и {additional}",
+  "hashtag.column_header.tag_mode.any": "или {additional}",
+  "hashtag.column_header.tag_mode.none": "без {additional}",
+  "hashtag.column_settings.select.no_options_message": "Няма намерени предложения",
+  "hashtag.column_settings.select.placeholder": "Въвеждане на хаштагове…",
+  "hashtag.column_settings.tag_mode.all": "Всичко това",
+  "hashtag.column_settings.tag_mode.any": "Някое от тези",
+  "hashtag.column_settings.tag_mode.none": "Никое от тези",
   "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
-  "home.column_settings.basic": "Basic",
-  "home.column_settings.show_reblogs": "Show boosts",
-  "home.column_settings.show_replies": "Show replies",
-  "home.hide_announcements": "Hide announcements",
-  "home.show_announcements": "Show announcements",
-  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
-  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
-  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
-  "keyboard_shortcuts.back": "to navigate back",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
-  "keyboard_shortcuts.boost": "to boost",
+  "home.column_settings.basic": "Основно",
+  "home.column_settings.show_reblogs": "Показване на споделяния",
+  "home.column_settings.show_replies": "Показване на отговори",
+  "home.hide_announcements": "Скриване на оповестявания",
+  "home.show_announcements": "Показване на оповестявания",
+  "intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
+  "intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
+  "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}",
+  "keyboard_shortcuts.back": "за придвижване назад",
+  "keyboard_shortcuts.blocked": "за отваряне на списъка с блокирани потребители",
+  "keyboard_shortcuts.boost": "за споделяне",
   "keyboard_shortcuts.column": "to focus a status in one of the columns",
-  "keyboard_shortcuts.compose": "to focus the compose textarea",
-  "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.direct": "to open direct messages column",
-  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.compose": "за фокусиране на текстовото пространство за композиране",
+  "keyboard_shortcuts.description": "Описание",
+  "keyboard_shortcuts.direct": "за отваряне на колона за директни съобщения",
+  "keyboard_shortcuts.down": "за придвижване надолу в списъка",
   "keyboard_shortcuts.enter": "to open status",
-  "keyboard_shortcuts.favourite": "to favourite",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourite": "за поставяне в любими",
+  "keyboard_shortcuts.favourites": "за отваряне на списъка с любими",
+  "keyboard_shortcuts.federated": "да отвори обединена хронология",
   "keyboard_shortcuts.heading": "Keyboard Shortcuts",
-  "keyboard_shortcuts.home": "to open home timeline",
-  "keyboard_shortcuts.hotkey": "Hotkey",
-  "keyboard_shortcuts.legend": "to display this legend",
-  "keyboard_shortcuts.local": "to open local timeline",
-  "keyboard_shortcuts.mention": "to mention author",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.open_media": "to open media",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
-  "keyboard_shortcuts.reply": "to reply",
-  "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
-  "keyboard_shortcuts.toot": "to start a brand new toot",
-  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
-  "keyboard_shortcuts.up": "to move up in the list",
+  "keyboard_shortcuts.home": "за отваряне на началната емисия",
+  "keyboard_shortcuts.hotkey": "Бърз клавиш",
+  "keyboard_shortcuts.legend": "за показване на тази легенда",
+  "keyboard_shortcuts.local": "за отваряне на локалната емисия",
+  "keyboard_shortcuts.mention": "за споменаване на автор",
+  "keyboard_shortcuts.muted": "за отваряне на списъка със заглушени потребители",
+  "keyboard_shortcuts.my_profile": "за отваряне на вашия профил",
+  "keyboard_shortcuts.notifications": "за отваряне на колоната с известия",
+  "keyboard_shortcuts.open_media": "за отваряне на мултимедия",
+  "keyboard_shortcuts.pinned": "за отваряне на списъка със закачени публикации",
+  "keyboard_shortcuts.profile": "за отваряне на авторския профил",
+  "keyboard_shortcuts.reply": "за отговаряне",
+  "keyboard_shortcuts.requests": "за отваряне на списъка със заявки за последване",
+  "keyboard_shortcuts.search": "за фокусиране на търсенето",
+  "keyboard_shortcuts.spoilers": "за показване/скриване на ПС полето",
+  "keyboard_shortcuts.start": "за отваряне на колоната \"първи стъпки\"",
+  "keyboard_shortcuts.toggle_hidden": "за показване/скриване на текст зад ПС",
+  "keyboard_shortcuts.toggle_sensitivity": "за показване/скриване на мултимедия",
+  "keyboard_shortcuts.toot": "за започване на чисто нова публикация",
+  "keyboard_shortcuts.unfocus": "за дефокусиране на текстовото поле за композиране/търсене",
+  "keyboard_shortcuts.up": "за придвижване нагоре в списъка",
   "lightbox.close": "Затвори",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
-  "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
-  "lists.delete": "Delete list",
-  "lists.edit": "Edit list",
-  "lists.edit.submit": "Change title",
-  "lists.new.create": "Add list",
-  "lists.new.title_placeholder": "New list title",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
-  "lists.search": "Search among people you follow",
-  "lists.subheading": "Your lists",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "lightbox.compress": "Компресиране на полето за преглед на изображение",
+  "lightbox.expand": "Разгъване на полето за преглед на изображение",
+  "lightbox.next": "Напред",
+  "lightbox.previous": "Назад",
+  "lists.account.add": "Добавяне към списък",
+  "lists.account.remove": "Премахване от списък",
+  "lists.delete": "Изтриване на списък",
+  "lists.edit": "Редакция на списък",
+  "lists.edit.submit": "Промяна на заглавие",
+  "lists.new.create": "Добавяне на списък",
+  "lists.new.title_placeholder": "Име на нов списък",
+  "lists.replies_policy.followed": "Някой последван потребител",
+  "lists.replies_policy.list": "Членове на списъка",
+  "lists.replies_policy.none": "Никой",
+  "lists.replies_policy.title": "Показване на отговори на:",
+  "lists.search": "Търсене сред хора, които следвате",
+  "lists.subheading": "Вашите списъци",
+  "load_pending": "{count, plural, one {# нов обект} other {# нови обекти}}",
   "loading_indicator.label": "Зареждане...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
-  "missing_indicator.label": "Not found",
-  "missing_indicator.sublabel": "This resource could not be found",
-  "mute_modal.duration": "Duration",
-  "mute_modal.hide_notifications": "Hide notifications from this user?",
-  "mute_modal.indefinite": "Indefinite",
-  "navigation_bar.apps": "Mobile apps",
-  "navigation_bar.blocks": "Blocked users",
-  "navigation_bar.bookmarks": "Bookmarks",
-  "navigation_bar.community_timeline": "Local timeline",
-  "navigation_bar.compose": "Compose new toot",
-  "navigation_bar.direct": "Direct messages",
-  "navigation_bar.discover": "Discover",
+  "media_gallery.toggle_visible": "Скриване на {number, plural, one {изображение} other {изображения}}",
+  "missing_indicator.label": "Не е намерено",
+  "missing_indicator.sublabel": "Този ресурс не може да бъде намерен",
+  "mute_modal.duration": "Продължителност",
+  "mute_modal.hide_notifications": "Скриване на известия от този потребител?",
+  "mute_modal.indefinite": "Неопределено",
+  "navigation_bar.apps": "Мобилни приложения",
+  "navigation_bar.blocks": "Блокирани потребители",
+  "navigation_bar.bookmarks": "Отметки",
+  "navigation_bar.community_timeline": "Локална емисия",
+  "navigation_bar.compose": "Композиране на нова публикация",
+  "navigation_bar.direct": "Директни съобщения",
+  "navigation_bar.discover": "Откриване",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Редактирай профил",
-  "navigation_bar.favourites": "Favourites",
-  "navigation_bar.filters": "Muted words",
-  "navigation_bar.follow_requests": "Follow requests",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.favourites": "Любими",
+  "navigation_bar.filters": "Заглушени думи",
+  "navigation_bar.follow_requests": "Заявки за последване",
+  "navigation_bar.follows_and_followers": "Последвания и последователи",
   "navigation_bar.info": "Extended information",
   "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
-  "navigation_bar.lists": "Lists",
+  "navigation_bar.lists": "Списъци",
   "navigation_bar.logout": "Излизане",
-  "navigation_bar.mutes": "Muted users",
-  "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.mutes": "Заглушени потребители",
+  "navigation_bar.personal": "Лично",
+  "navigation_bar.pins": "Закачени публикации",
   "navigation_bar.preferences": "Предпочитания",
   "navigation_bar.public_timeline": "Публичен канал",
-  "navigation_bar.security": "Security",
+  "navigation_bar.security": "Сигурност",
   "notification.favourite": "{name} хареса твоята публикация",
   "notification.follow": "{name} те последва",
-  "notification.follow_request": "{name} has requested to follow you",
+  "notification.follow_request": "{name} поиска да ви последва",
   "notification.mention": "{name} те спомена",
-  "notification.own_poll": "Your poll has ended",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.own_poll": "Анкетата ви приключи",
+  "notification.poll": "Анкета, в която сте гласували, приключи",
   "notification.reblog": "{name} сподели твоята публикация",
-  "notification.status": "{name} just posted",
-  "notifications.clear": "Clear notifications",
-  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notification.status": "{name} току-що публикува",
+  "notifications.clear": "Изчистване на известия",
+  "notifications.clear_confirmation": "Сигурни ли сте, че искате да изчистите окончателно всичките си известия?",
   "notifications.column_settings.alert": "Десктоп известия",
   "notifications.column_settings.favourite": "Предпочитани:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "Показване на всички категории",
+  "notifications.column_settings.filter_bar.category": "Лента за бърз филтър",
+  "notifications.column_settings.filter_bar.show": "Показване",
   "notifications.column_settings.follow": "Нови последователи:",
-  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.follow_request": "Нови заявки за последване:",
   "notifications.column_settings.mention": "Споменавания:",
-  "notifications.column_settings.poll": "Poll results:",
-  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.poll": "Резултати от анкета:",
+  "notifications.column_settings.push": "Изскачащи известия",
   "notifications.column_settings.reblog": "Споделяния:",
   "notifications.column_settings.show": "Покажи в колона",
-  "notifications.column_settings.sound": "Play sound",
-  "notifications.column_settings.status": "New toots:",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
-  "notifications.group": "{count} notifications",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "notifications.column_settings.sound": "Пускане на звук",
+  "notifications.column_settings.status": "Нови публикации:",
+  "notifications.column_settings.unread_markers.category": "отметки за непрочетени известия",
+  "notifications.filter.all": "Всичко",
+  "notifications.filter.boosts": "Споделяния",
+  "notifications.filter.favourites": "Любими",
+  "notifications.filter.follows": "Последвания",
+  "notifications.filter.mentions": "Споменавания",
+  "notifications.filter.polls": "Резултати от анкета",
+  "notifications.filter.statuses": "Актуализации от хора, които следите",
+  "notifications.grant_permission": "Даване на разрешение.",
+  "notifications.group": "{count} известия",
+  "notifications.mark_as_read": "Маркиране на всички известия като прочетени",
+  "notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра",
+  "notifications.permission_denied_alert": "Известията на работния плот не могат да бъдат активирани, тъй като разрешението на браузъра е отказвано преди",
+  "notifications.permission_required": "Известията на работния плот не са налични, тъй като необходимото разрешение не е предоставено.",
+  "notifications_permission_banner.enable": "Активиране на известията на работния плот",
+  "notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, активирайте известията на работния плот. Можете да контролирате точно кои типове взаимодействия генерират известия на работния плот чрез бутона {icon} по-горе, след като бъдат активирани.",
+  "notifications_permission_banner.title": "Никога не пропускайте нищо",
+  "picture_in_picture.restore": "Връщане обратно",
+  "poll.closed": "Затворено",
+  "poll.refresh": "Опресняване",
+  "poll.total_people": "{count, plural, one {# човек} other {# човека}}",
+  "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}",
+  "poll.vote": "Гласуване",
+  "poll.voted": "Вие гласувахте за този отговор",
+  "poll_button.add_poll": "Добавяне на анкета",
+  "poll_button.remove_poll": "Премахване на анкета",
   "privacy.change": "Adjust status privacy",
   "privacy.direct.long": "Post to mentioned users only",
-  "privacy.direct.short": "Direct",
+  "privacy.direct.short": "Директно",
   "privacy.private.long": "Post to followers only",
-  "privacy.private.short": "Followers-only",
+  "privacy.private.short": "Само за последователи",
   "privacy.public.long": "Post to public timelines",
-  "privacy.public.short": "Public",
+  "privacy.public.short": "Публично",
   "privacy.unlisted.long": "Do not show in public timelines",
-  "privacy.unlisted.short": "Unlisted",
-  "refresh": "Refresh",
-  "regeneration_indicator.label": "Loading…",
-  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
-  "relative_time.just_now": "now",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
-  "relative_time.today": "today",
+  "privacy.unlisted.short": "Скрито",
+  "refresh": "Опресняване",
+  "regeneration_indicator.label": "Зареждане…",
+  "regeneration_indicator.sublabel": "Вашата начална емисия се подготвя!",
+  "relative_time.days": "{number}д",
+  "relative_time.hours": "{number}ч",
+  "relative_time.just_now": "сега",
+  "relative_time.minutes": "{number}м",
+  "relative_time.seconds": "{number}с",
+  "relative_time.today": "днес",
   "reply_indicator.cancel": "Отказ",
-  "report.forward": "Forward to {target}",
-  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.forward": "Препращане към {target}",
+  "report.forward_hint": "Акаунтът е от друг сървър. Изпращане на анонимно копие на доклада и там?",
   "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
-  "report.placeholder": "Additional comments",
-  "report.submit": "Submit",
+  "report.placeholder": "Допълнителни коментари",
+  "report.submit": "Подаване",
   "report.target": "Reporting",
   "search.placeholder": "Търсене",
-  "search_popout.search_format": "Advanced search format",
+  "search_popout.search_format": "Формат за разширено търсене",
   "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
-  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.hashtag": "хаштаг",
   "search_popout.tips.status": "status",
-  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
-  "search_popout.tips.user": "user",
-  "search_results.accounts": "People",
-  "search_results.hashtags": "Hashtags",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
-  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
-  "status.admin_account": "Open moderation interface for @{name}",
+  "search_popout.tips.text": "Обикновеният текст връща съответстващи показвани имена, потребителски имена и хаштагове",
+  "search_popout.tips.user": "потребител",
+  "search_results.accounts": "Хора",
+  "search_results.hashtags": "Хаштагове",
+  "search_results.statuses": "Публикации",
+  "search_results.statuses_fts_disabled": "Търсенето на публикации по тяхното съдържание не е активирано за този Mastodon сървър.",
+  "search_results.total": "{count, number} {count, plural, one {резултат} other {резултата}}",
+  "status.admin_account": "Отваряне на интерфейс за модериране за @{name}",
   "status.admin_status": "Open this status in the moderation interface",
-  "status.block": "Block @{name}",
-  "status.bookmark": "Bookmark",
-  "status.cancel_reblog_private": "Unboost",
-  "status.cannot_reblog": "This post cannot be boosted",
+  "status.block": "Блокиране на @{name}",
+  "status.bookmark": "Отмятане",
+  "status.cancel_reblog_private": "Отсподеляне",
+  "status.cannot_reblog": "Тази публикация не може да бъде споделена",
   "status.copy": "Copy link to status",
   "status.delete": "Изтриване",
-  "status.detailed_status": "Detailed conversation view",
-  "status.direct": "Direct message @{name}",
-  "status.embed": "Embed",
+  "status.detailed_status": "Подробен изглед на разговор",
+  "status.direct": "Директно съобщение към @{name}",
+  "status.embed": "Вграждане",
   "status.favourite": "Предпочитани",
-  "status.filtered": "Filtered",
-  "status.load_more": "Load more",
-  "status.media_hidden": "Media hidden",
+  "status.filtered": "Филтрирано",
+  "status.load_more": "Зареждане на още",
+  "status.media_hidden": "Мултимедията е скрита",
   "status.mention": "Споменаване",
-  "status.more": "More",
-  "status.mute": "Mute @{name}",
-  "status.mute_conversation": "Mute conversation",
+  "status.more": "Още",
+  "status.mute": "Заглушаване на @{name}",
+  "status.mute_conversation": "Заглушаване на разговор",
   "status.open": "Expand this status",
-  "status.pin": "Pin on profile",
-  "status.pinned": "Pinned toot",
-  "status.read_more": "Read more",
+  "status.pin": "Закачане на профил",
+  "status.pinned": "Закачена публикация",
+  "status.read_more": "Още информация",
   "status.reblog": "Споделяне",
-  "status.reblog_private": "Boost with original visibility",
+  "status.reblog_private": "Споделяне с оригинална видимост",
   "status.reblogged_by": "{name} сподели",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
-  "status.redraft": "Delete & re-draft",
-  "status.remove_bookmark": "Remove bookmark",
+  "status.reblogs.empty": "Все още никой не е споделил тази публикация. Когато някой го направи, ще се покаже тук.",
+  "status.redraft": "Изтриване и преработване",
+  "status.remove_bookmark": "Премахване на отметка",
   "status.reply": "Отговор",
-  "status.replyAll": "Reply to thread",
-  "status.report": "Report @{name}",
+  "status.replyAll": "Отговор на тема",
+  "status.report": "Докладване на @{name}",
   "status.sensitive_warning": "Деликатно съдържание",
-  "status.share": "Share",
-  "status.show_less": "Show less",
-  "status.show_less_all": "Show less for all",
-  "status.show_more": "Show more",
-  "status.show_more_all": "Show more for all",
-  "status.show_thread": "Show thread",
-  "status.uncached_media_warning": "Not available",
-  "status.unmute_conversation": "Unmute conversation",
-  "status.unpin": "Unpin from profile",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
-  "tabs_bar.federated_timeline": "Federated",
+  "status.share": "Споделяне",
+  "status.show_less": "Покажи по-малко",
+  "status.show_less_all": "Покажи по-малко за всички",
+  "status.show_more": "Покажи повече",
+  "status.show_more_all": "Покажи повече за всички",
+  "status.show_thread": "Показване на тема",
+  "status.uncached_media_warning": "Не е налично",
+  "status.unmute_conversation": "Раззаглушаване на разговор",
+  "status.unpin": "Разкачане от профил",
+  "suggestions.dismiss": "Отхвърляне на предложение",
+  "suggestions.header": "Може да се интересувате от…",
+  "tabs_bar.federated_timeline": "Обединен",
   "tabs_bar.home": "Начало",
-  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.local_timeline": "Локално",
   "tabs_bar.notifications": "Известия",
-  "tabs_bar.search": "Search",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
-  "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
-  "timeline_hint.resources.followers": "Followers",
-  "timeline_hint.resources.follows": "Follows",
-  "timeline_hint.resources.statuses": "Older toots",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
-  "trends.trending_now": "Trending now",
-  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
-  "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
-  "units.short.thousand": "{count}K",
-  "upload_area.title": "Drag & drop to upload",
+  "tabs_bar.search": "Търсене",
+  "time_remaining.days": "{number, plural, one {# ден} other {# дни}} остава",
+  "time_remaining.hours": "{number, plural, one {# час} other {# часа}} остава",
+  "time_remaining.minutes": "{number, plural, one {# минута} other {# минути}} остава",
+  "time_remaining.moments": "Оставащи моменти",
+  "time_remaining.seconds": "{number, plural, one {# секунда} other {# секунди}} остава",
+  "timeline_hint.remote_resource_not_displayed": "{resource} от други сървъри не се показват.",
+  "timeline_hint.resources.followers": "Последователи",
+  "timeline_hint.resources.follows": "Последвани",
+  "timeline_hint.resources.statuses": "По-стари публикации",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} човек} other {{counter} човека}} говорят",
+  "trends.trending_now": "Налагащи се сега",
+  "ui.beforeunload": "Черновата ви ще бъде загубена, ако излезете от Mastodon.",
+  "units.short.billion": "{count}млрд",
+  "units.short.million": "{count}млн",
+  "units.short.thousand": "{count}хил",
+  "upload_area.title": "Влачене и пускане за качване",
   "upload_button.label": "Добави медия",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
-  "upload_form.audio_description": "Describe for people with hearing loss",
-  "upload_form.description": "Describe for the visually impaired",
-  "upload_form.edit": "Edit",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_error.limit": "Превишен лимит за качване на файлове.",
+  "upload_error.poll": "Качването на файлове не е позволено с анкети.",
+  "upload_form.audio_description": "Опишете за хора със загуба на слуха",
+  "upload_form.description": "Опишете за хора със зрителни увреждания",
+  "upload_form.edit": "Редакция",
+  "upload_form.thumbnail": "Промяна на миниизображението",
   "upload_form.undo": "Отмяна",
-  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.choose_image": "Choose image",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_form.video_description": "Опишете за хора със загуба на слуха или зрително увреждане",
+  "upload_modal.analyzing_picture": "Анализ на снимка…",
+  "upload_modal.apply": "Прилагане",
+  "upload_modal.choose_image": "Избор на изображение",
+  "upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита",
+  "upload_modal.detect_text": "Откриване на текст от картина",
+  "upload_modal.edit_media": "Редакция на мултимедия",
+  "upload_modal.hint": "Щракнете или плъзнете кръга на визуализацията, за да изберете фокусна точка, която винаги ще бъде видима на всички миниатюри.",
+  "upload_modal.preparing_ocr": "Подготване на ОРС…",
+  "upload_modal.preview_label": "Визуализация ({ratio})",
   "upload_progress.label": "Uploading…",
-  "video.close": "Close video",
-  "video.download": "Download file",
-  "video.exit_fullscreen": "Exit full screen",
-  "video.expand": "Expand video",
-  "video.fullscreen": "Full screen",
-  "video.hide": "Hide video",
-  "video.mute": "Mute sound",
-  "video.pause": "Pause",
-  "video.play": "Play",
-  "video.unmute": "Unmute sound"
+  "video.close": "Затваряне на видео",
+  "video.download": "Изтегляне на файл",
+  "video.exit_fullscreen": "Изход от цял екран",
+  "video.expand": "Разгъване на видео",
+  "video.fullscreen": "Цял екран",
+  "video.hide": "Скриване на видео",
+  "video.mute": "Обеззвучаване",
+  "video.pause": "Пауза",
+  "video.play": "Пускане",
+  "video.unmute": "Включване на звука"
 }
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 9b73c3597..dc8984be3 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.",
   "account.follows_you": "আপনাকে অনুসরণ করে",
   "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন",
+  "account.joined": "Joined {date}",
   "account.last_status": "শেষ সক্রিয় ছিল",
   "account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিখে",
   "account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।",
   "empty_column.favourited_statuses": "আপনার পছন্দের কোনো টুট এখনো নেই। আপনি কোনো লেখা পছন্দের হিসেবে চিহ্নিত করলে এখানে পাওয়া যাবে।",
   "empty_column.favourites": "কেও এখনো এটাকে পছন্দের টুট হিসেবে চিহ্নিত করেনি। যদি করে, তখন তাদের এখানে পাওয়া যাবে।",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "আপনার এখনো কোনো অনুসরণের আবেদন পাঠানো নেই। যদি পাঠায়, এখানে পাওয়া যাবে।",
   "empty_column.hashtag": "এই হেসটাগে এখনো কিছু নেই।",
   "empty_column.home": "আপনার বাড়ির সময়রেখা এখনো খালি!  {public} এ ঘুরে আসুন অথবা অনুসন্ধান বেবহার করে শুরু করতে পারেন এবং অন্য ব্যবহারকারীদের সাথে সাক্ষাৎ করতে পারেন।",
-  "empty_column.home.public_timeline": "প্রকাশ্য সময়রেখা",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "এই তালিকাতে এখনো কিছু নেই. যখন এই তালিকায় থাকা ব্যবহারকারী নতুন কিছু লিখবে, সেগুলো এখানে পাওয়া যাবে।",
   "empty_column.lists": "আপনার এখনো কোনো তালিকা তৈরী নেই। যদি বা যখন তৈরী করেন, সেগুলো এখানে পাওয়া যাবে।",
   "empty_column.mutes": "আপনি এখনো কোনো ব্যবহারকারীকে নিঃশব্দ করেননি।",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন",
   "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "অনুমতি দিন",
   "follow_request.reject": "প্রত্যাখ্যান করুন",
   "follow_requests.unlocked_explanation": "আপনার অ্যাকাউন্টটি লক না থাকলেও, {domain} কর্মীরা ভেবেছিলেন যে আপনি এই অ্যাকাউন্টগুলি থেকে ম্যানুয়ালি অনুসরণের অনুরোধগুলি পর্যালোচনা করতে চাইতে পারেন।",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}",
   "intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}",
-  "introduction.federation.action": "পরবর্তী",
-  "introduction.federation.federated.headline": "যুক্তবিশ্ব",
-  "introduction.federation.federated.text": "অন্যান্য যুক্তবিশ্বের সার্ভারের লেখাগুলি যুক্তবিশ্বের সময়রেখাতে আসবে ।",
-  "introduction.federation.home.headline": "বাড়ি",
-  "introduction.federation.home.text": "যাদেরকে অনুসরণ করেন তাদের লেখাগুলো  আপনার বাড়ি-সময়রেখাতে আসবে। আপনি এখান থেকে যুক্তবিশ্বে যেকোনো সার্ভারের যে কাওকে  অনুসরণ করতে পারেন!",
-  "introduction.federation.local.headline": "স্থানীয়",
-  "introduction.federation.local.text": "আপনি যে সার্ভারে আছেন সেখানকার মানুষের প্রকাশ্য লেখাগুলো স্থানীয় সময়রেখাতে আসবে।",
-  "introduction.interactions.action": "ব্যবহার জানার অংশটি শেষ করুন!",
-  "introduction.interactions.favourite.headline": "পছন্দের",
-  "introduction.interactions.favourite.text": "পরে পড়ার জন্য বা লেখা পছন্ধ হয়েছে সেটা লেখককে জানাতে, কোনো লেখা পছন্দের হিসেবে চিহ্নিত করতে পারেন।",
-  "introduction.interactions.reblog.headline": "সমর্থন",
-  "introduction.interactions.reblog.text": "কারোর লেখা সমর্থন দিয়ে চিহ্নিত করে সেটা আপনার অনুসরণকারীদের দেখতে পারেন।",
-  "introduction.interactions.reply.headline": "মতামত",
-  "introduction.interactions.reply.text": "আপনি অন্যদের এবং নিজের লেখায় মতামত টুট করতে পারেন, যেগুলো লেখার সাথে কথোপকথন হিসেবে যুক্ত থাকবে।",
-  "introduction.welcome.action": "শুরু করা যাক!",
-  "introduction.welcome.headline": "প্রথম ধাপ",
-  "introduction.welcome.text": "যুক্তবিশ্বে স্বাগতম! কিছুক্ষনের মধ্যেই আপনি আপনার লেখা বিভিন্ন সার্ভারে সম্প্রচার করতে পারবেন। কিন্তু মনে রাখবে যে এটা একটা বিশেষ সার্ভার, {domain} কারণ এখানে আপনার নিজেস্ব পাতা রাখা হচ্ছে।",
   "keyboard_shortcuts.back": "পেছনে যেতে",
   "keyboard_shortcuts.blocked": "ব্লক করা ব্যবহারকারীদের তালিকা খুলতে",
   "keyboard_shortcuts.boost": "সমর্থন করতে",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "কলামে দেখানো",
   "notifications.column_settings.sound": "শব্দ বাজানো",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "সব",
   "notifications.filter.boosts": "সমর্থনগুলো",
   "notifications.filter.favourites": "পছন্দের গুলো",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index 84c5f4523..b6a2a9292 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "An implijer·ez-mañ na heul den ebet.",
   "account.follows_you": "Ho heul",
   "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Oberiantiz zivezhañ",
   "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-mañ : {date}",
   "account.locked_info": "Prennet eo ar gon-mañ. Dibab a ra ar perc'henn ar re a c'hall heuliañ anezhi pe anezhañ.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "N'eus domani kuzh ebet c'hoazh.",
   "empty_column.favourited_statuses": "N'ho peus toud muiañ-karet ebet c'hoazh. Pa vo lakaet unan ganeoc'h e vo diskouezet amañ.",
   "empty_column.favourites": "Den ebet n'eus lakaet an toud-mañ en e reoù muiañ-karet. Pa vo graet gant unan bennak e vo diskouezet amañ.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "N'ho peus goulenn heuliañ ebet c'hoazh. Pa resevot reoù e vo diskouezet amañ.",
   "empty_column.hashtag": "N'eus netra er ger-klik-mañ c'hoazh.",
   "empty_column.home": "Goullo eo ho red-amzer degemer! Kit da weladenniñ {public} pe implijit ar c'hlask evit kregiñ ganti ha kejañ gant implijer·ien·ezed all.",
-  "empty_column.home.public_timeline": "ar red-amzer publik",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Goullo eo ar roll-mañ evit ar poent. Pa vo toudet gant e izili e vo diskouezet amañ.",
   "empty_column.lists": "N'ho peus roll ebet c'hoazh. Pa vo krouet unan ganeoc'h e vo diskouezet amañ.",
   "empty_column.mutes": "N'ho peus kuzhet implijer ebet c'hoazh.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver",
   "errors.unexpected_crash.report_issue": "Danevellañ ur fazi",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Aotren",
   "follow_request.reject": "Nac'hañ",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# devezh} other{# a zevezhioù}}",
   "intervals.full.hours": "{number, plural, one {# eurvezh} other{# eurvezh}}",
   "intervals.full.minutes": "{number, plural, one {# munut} other{# a vunutoù}}",
-  "introduction.federation.action": "Da-heul",
-  "introduction.federation.federated.headline": "Kevreet",
-  "introduction.federation.federated.text": "Embannadennoù publik eus dafariaded all ar c'hevrebed a yo war-wel er red-amzer kevredet.",
-  "introduction.federation.home.headline": "Degemer",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Lec'hel",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Muiañ-karet",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Skignañ",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Respont",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Bec'h dezhi!",
-  "introduction.welcome.headline": "Pazennoù kentañ",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "da skignañ",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Diskouez er bann",
   "notifications.column_settings.sound": "Seniñ",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Pep tra",
   "notifications.filter.boosts": "Skignadennoù",
   "notifications.filter.favourites": "Muiañ-karet",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 13e9e885b..e80c3c846 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Aquest usuari encara no segueix a ningú.",
   "account.follows_you": "Et segueix",
   "account.hide_reblogs": "Amaga els impulsos de @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Darrer actiu",
   "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}",
   "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Encara no hi ha dominis ocults.",
   "empty_column.favourited_statuses": "Encara no has marcat com a favorit cap tut. Quan en facis, apareixerà aquí.",
   "empty_column.favourites": "Ningú no ha marcat aquest tut com a preferit encara. Quan algú ho faci, apareixerà aquí.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Encara no tens cap petició de seguiment. Quan rebis una, apareixerà aquí.",
   "empty_column.hashtag": "Encara no hi ha res en aquesta etiqueta.",
   "empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.",
-  "empty_column.home.public_timeline": "la línia de temps pública",
+  "empty_column.home.suggestions": "Mira algunes sugerencies",
   "empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous tuts, apareixeran aquí.",
   "empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.",
   "empty_column.mutes": "Encara no has silenciat cap usuari.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls",
   "errors.unexpected_crash.report_issue": "Informa d'un problema",
+  "follow_recommendations.done": "Fet",
+  "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure els seus tuts! Aquí hi ha algunes recomanacions.",
+  "follow_recommendations.lead": "Els tuts del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!",
   "follow_request.authorize": "Autoritzar",
   "follow_request.reject": "Rebutjar",
   "follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment d’aquests comptes de forma manual.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
-  "introduction.federation.action": "Següent",
-  "introduction.federation.federated.headline": "Federada",
-  "introduction.federation.federated.text": "Les publicacions públiques d'altres servidors del fedivers apareixeran a la línia de temps federada.",
-  "introduction.federation.home.headline": "Inici",
-  "introduction.federation.home.text": "Les publicacions de les persones que segueixes apareixeran a la línia de temps Inici. Pots seguir qualsevol persona de qualsevol servidor!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Les publicacions públiques de les persones del teu mateix servidor apareixeran a la línia de temps local.",
-  "introduction.interactions.action": "Finalitza el tutorial!",
-  "introduction.interactions.favourite.headline": "Favorit",
-  "introduction.interactions.favourite.text": "Pots desar un tut per a més tard i deixar que l'autor sàpiga que t'ha agradat, marcant-lo com a favorit.",
-  "introduction.interactions.reblog.headline": "Impuls",
-  "introduction.interactions.reblog.text": "Pots compartir amb els teus seguidors els tuts d'altres usuaris, impulsant-los.",
-  "introduction.interactions.reply.headline": "Respondre",
-  "introduction.interactions.reply.text": "Pots respondre als tuts d'altres persones i als teus propis, que els unirà en una conversa.",
-  "introduction.welcome.action": "Som-hi!",
-  "introduction.welcome.headline": "Primers passos",
-  "introduction.welcome.text": "Benvingut al fedivers! En uns moments podràs emetre missatges i conversar amb els teus amics en una gran varietat de servidors. Però aquest servidor, {domain}, és especial: allotja el teu perfil així que recorda el seu nom.",
   "keyboard_shortcuts.back": "navegar enrere",
   "keyboard_shortcuts.blocked": "per obrir la llista d'usuaris bloquejats",
   "keyboard_shortcuts.boost": "impulsar",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Mostra en la columna",
   "notifications.column_settings.sound": "Reproduir so",
   "notifications.column_settings.status": "Nous tuts:",
+  "notifications.column_settings.unread_markers.category": "Marcadors de notificacions no llegides",
   "notifications.filter.all": "Tots",
   "notifications.filter.boosts": "Impulsos",
   "notifications.filter.favourites": "Favorits",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 43e1f6c10..0cf3c4e95 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "St'utilizatore ùn seguita nisunu.",
   "account.follows_you": "Vi seguita",
   "account.hide_reblogs": "Piattà spartere da @{name}",
+  "account.joined": "Quì dapoi {date}",
   "account.last_status": "Ultima attività",
   "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}",
   "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.",
@@ -129,7 +130,7 @@
   "conversation.mark_as_read": "Marcà cum'è lettu",
   "conversation.open": "Vede a cunversazione",
   "conversation.with": "Cù {names}",
-  "directory.federated": "Da u fediverse cunisciutu",
+  "directory.federated": "Da u fediversu cunisciutu",
   "directory.local": "Solu da {domain}",
   "directory.new_arrivals": "Ultimi arrivi",
   "directory.recently_active": "Attività ricente",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.",
   "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjunghjerate unu à i vostri favuriti, sarà mustratu quì.",
   "empty_column.favourites": "Nisunu hà aghjuntu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Ùn avete manc'una dumanda d'abbunamentu. Quandu averete una, sarà mustrata quì.",
   "empty_column.hashtag": "Ùn c'hè ancu nunda quì.",
   "empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.",
-  "empty_column.home.public_timeline": "a linea pubblica",
+  "empty_column.home.suggestions": "Vede qualchì ricumandazione",
   "empty_column.list": "Ùn c'hè ancu nunda quì. Quandu membri di sta lista manderanu novi statuti, i vidarete quì.",
   "empty_column.lists": "Ùn avete manc'una lista. Quandu farete una, sarà mustrata quì.",
   "empty_column.mutes": "Per avà ùn avete manc'un utilizatore piattatu.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Pruvate di disattivà quelli è poi attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.",
   "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta",
   "errors.unexpected_crash.report_issue": "Palisà prublemu",
+  "follow_recommendations.done": "Fatta",
+  "follow_recommendations.heading": "Siguitate a ghjente da quelli vulete vede i missaghji! Eccu qualchì ricumandazione.",
+  "follow_recommendations.lead": "I missaghji da a ghjente che voi siguitate figureranu in ordine crunulogicu nant'a vostra pagina d'accolta. Ùn timite micca di fà un sbagliu, pudete sempre disabbunavvi d'un contu à ogni mumentu!",
   "follow_request.authorize": "Auturizà",
   "follow_request.reject": "Righjittà",
   "follow_requests.unlocked_explanation": "U vostru contu ùn hè micca privatu, ma a squadra d'amministrazione di {domain} pensa chì e dumande d'abbunamentu di questi conti anu bisognu d'esse verificate manualmente.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
-  "introduction.federation.action": "Cuntinuà",
-  "introduction.federation.federated.headline": "Federata",
-  "introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica glubale.",
-  "introduction.federation.home.headline": "Accolta",
-  "introduction.federation.home.text": "I statuti da a ghjente che vo siguitate saranu affissati nant'à a linea d'accolta. Pudete seguità qualvogliasia nant'à tutti i servori!",
-  "introduction.federation.local.headline": "Lucale",
-  "introduction.federation.local.text": "I statuti pubblichi da quelli chì sò nant'a listessu servore chì voi ponu esse visti indè a linea pubblica lucale.",
-  "introduction.interactions.action": "Finisce u tutoriale!",
-  "introduction.interactions.favourite.headline": "Favuritu",
-  "introduction.interactions.favourite.text": "Pudete salvà un statutu per ritruvallu più tardi, è fà sapè à l'autore chì v'hè piaciutu, l'aghustendu à i vostri favuriti.",
-  "introduction.interactions.reblog.headline": "Sparte",
-  "introduction.interactions.reblog.text": "Pudete sparte i statuti d'altre persone à i vostri abbunati cù u buttone di spartera.",
-  "introduction.interactions.reply.headline": "Risponde",
-  "introduction.interactions.reply.text": "Pudete risponde à d'altre persone o a i vostri propii statuti, cio chì i ligarà indè una cunversazione.",
-  "introduction.welcome.action": "Andemu!",
-  "introduction.welcome.headline": "Primi passi",
-  "introduction.welcome.text": "Benvenutu·a indè u fediverse! In qualchi minuta, puderete diffonde missaghji è parlà à i vostri amichi nant'à una varietà maiò di servori. Ma quess'istanza, {domain}, hè speciale—ghjè induve hè uspitatu u vostru prufile, allora ricurdatevi di u so nome.",
   "keyboard_shortcuts.back": "rivultà",
   "keyboard_shortcuts.blocked": "per apre una lista d'utilizatori bluccati",
   "keyboard_shortcuts.boost": "sparte",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Mustrà indè a colonna",
   "notifications.column_settings.sound": "Sunà",
   "notifications.column_settings.status": "Statuti novi:",
+  "notifications.column_settings.unread_markers.category": "Marcatori di nutificazione micca lette",
   "notifications.filter.all": "Tuttu",
   "notifications.filter.boosts": "Spartere",
   "notifications.filter.favourites": "Favuriti",
@@ -458,7 +447,7 @@
   "upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
   "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
   "upload_form.audio_description": "Discrizzione per i ciochi",
-  "upload_form.description": "Discrive per i malvistosi",
+  "upload_form.description": "Discrizzione per i malvistosi",
   "upload_form.edit": "Mudificà",
   "upload_form.thumbnail": "Cambià vignetta",
   "upload_form.undo": "Sguassà",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 76df857d8..ac7db0258 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -9,7 +9,7 @@
   "account.browse_more_on_origin_server": "Více na původním profilu",
   "account.cancel_follow_request": "Zrušit žádost o sledování",
   "account.direct": "Poslat uživateli @{name} přímou zprávu",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Zrušit upozorňování na příspěvky @{name}",
   "account.domain_blocked": "Doména skryta",
   "account.edit_profile": "Upravit profil",
   "account.enable_notifications": "Oznámit mě na příspěvky @{name}",
@@ -18,10 +18,11 @@
   "account.followers": "Sledující",
   "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
   "account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.following_counter": "{count, plural, one {{counter} Sledovaný} few {{counter} Sledovaní} many {{counter} Sledovaných} other {{counter} Sledovaných}}",
   "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
   "account.follows_you": "Sleduje vás",
   "account.hide_reblogs": "Skrýt boosty od uživatele @{name}",
+  "account.joined": "Založen {date}",
   "account.last_status": "Naposledy aktivní",
   "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}",
   "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.",
@@ -38,7 +39,7 @@
   "account.requested": "Čeká na schválení. Kliknutím žádost o sledování zrušíte",
   "account.share": "Sdílet profil uživatele @{name}",
   "account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} few {{counter} Tooty} many {{counter} Tootů} other {{counter} Tootů}}",
   "account.unblock": "Odblokovat uživatele @{name}",
   "account.unblock_domain": "Odkrýt doménu {domain}",
   "account.unendorse": "Nezvýrazňovat na profilu",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Výsledky hledání",
   "emoji_button.symbols": "Symboly",
   "emoji_button.travel": "Cestování a místa",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Účet pozastaven",
   "empty_column.account_timeline": "Nejsou tu žádné tooty!",
   "empty_column.account_unavailable": "Profil nedostupný",
   "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.",
@@ -159,21 +160,25 @@
   "empty_column.domain_blocks": "Ještě nemáte žádné skryté domény.",
   "empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené tooty. Pokud si nějaký oblíbíte, zobrazí se zde.",
   "empty_column.favourites": "Tento toot si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.",
+  "empty_column.follow_recommendations": "Zdá se, že pro vás nelze vygenerovat žádné návrhy. Můžete zkusit přes vyhledávání naleznout lidi, které znáte, nebo prozkoumat populární hashtagy.",
   "empty_column.follow_requests": "Ještě nemáte žádné žádosti o sledování. Pokud nějakou obdržíte, zobrazí se zde.",
   "empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
-  "empty_column.home": "Vaše domovská časová osa je prázdná! Začněte návštěvou {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
-  "empty_column.home.public_timeline": "veřejné časové osy",
+  "empty_column.home": "Vaše domovská časová osa je prázdná! Naplňte ji sledováním dalších lidí. {suggestions}",
+  "empty_column.home.suggestions": "Prohlédnout návrhy",
   "empty_column.list": "V tomto seznamu ještě nic není. Pokud nějaký člen z tohoto seznamu napíše nový toot, objeví se zde.",
   "empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.",
   "empty_column.mutes": "Ještě jste neskryli žádného uživatele.",
   "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.",
   "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
   "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Tuto stránku nelze správně zobrazit. Takovou chybu obvykle způsobuje doplněk prohlížeče nebo nástroje pro automatický překlad.",
   "error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Zkuste je vypnout a stránku obnovit. Pokud to nepomůže, zkuste otevřít Mastodon v jiném prohlížeči nebo nativní aplikaci.",
   "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
   "errors.unexpected_crash.report_issue": "Nahlásit problém",
+  "follow_recommendations.done": "Hotovo",
+  "follow_recommendations.heading": "Sledujte lidi, jejichž příspěvky chcete vidět! Tady jsou nějaké návrhy.",
+  "follow_recommendations.lead": "Příspěvky od lidí, které sledujete, se budou objevovat v chronologickém pořadí ve vaší domovské ose. Nebojte se, že uděláte chybu, můžete lidi stejně snadno kdykoliv přestat sledovat!",
   "follow_request.authorize": "Autorizovat",
   "follow_request.reject": "Odmítnout",
   "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}",
   "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}",
-  "introduction.federation.action": "Další",
-  "introduction.federation.federated.headline": "Federovaná",
-  "introduction.federation.federated.text": "Veřejné příspěvky z jiných serverů ve fedivesmíru se zobrazí na federované časové ose.",
-  "introduction.federation.home.headline": "Domů",
-  "introduction.federation.home.text": "Příspěvky od lidí, které sledujete, se objeví ve vašem domovském kanálu. Můžete sledovat kohokoliv na jakémkoliv serveru!",
-  "introduction.federation.local.headline": "Místní",
-  "introduction.federation.local.text": "Veřejné příspěvky od lidí ze stejného serveru jako vy se zobrazí na místní časové ose.",
-  "introduction.interactions.action": "Dokončit tutoriál!",
-  "introduction.interactions.favourite.headline": "Oblíbení",
-  "introduction.interactions.favourite.text": "Oblíbením si můžete uložit toot na později a dát jeho autorovi vědět, že se vám líbí.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Boostnutím můžete sdílet tooty jiných lidí s vašimi sledujícími.",
-  "introduction.interactions.reply.headline": "Odpověď",
-  "introduction.interactions.reply.text": "Můžete odpovídat na tooty jiných lidí i vaše vlastní, což je propojí do konverzace.",
-  "introduction.welcome.action": "Jdeme na to!",
-  "introduction.welcome.headline": "První kroky",
-  "introduction.welcome.text": "Vítejte ve fedivesmíru! Za malou chvíli budete moci posílat zprávy a povídat si se svými přáteli z mnoha serverů. Tento server {domain}, je však speciální — je na něm váš profil a proto si zapamatujte jeho jméno.",
   "keyboard_shortcuts.back": "návrat zpět",
   "keyboard_shortcuts.blocked": "otevřít seznam blokovaných uživatelů",
   "keyboard_shortcuts.boost": "boost",
@@ -255,8 +243,8 @@
   "keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání",
   "keyboard_shortcuts.up": "posunutí nahoru v seznamu",
   "lightbox.close": "Zavřít",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Zobrazit celý obrázek najednou",
+  "lightbox.expand": "Ukázat obrázek v plné velikosti",
   "lightbox.next": "Další",
   "lightbox.previous": "Předchozí",
   "lists.account.add": "Přidat do seznamu",
@@ -266,10 +254,10 @@
   "lists.edit.submit": "Změnit název",
   "lists.new.create": "Přidat seznam",
   "lists.new.title_placeholder": "Název nového seznamu",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.followed": "Sledované uživatele",
+  "lists.replies_policy.list": "Členy seznamu",
+  "lists.replies_policy.none": "Nikoho",
+  "lists.replies_policy.title": "Zobrazovat odpovědi na:",
   "lists.search": "Hledejte mezi lidmi, které sledujete",
   "lists.subheading": "Vaše seznamy",
   "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
@@ -277,9 +265,9 @@
   "media_gallery.toggle_visible": "Přepnout viditelnost",
   "missing_indicator.label": "Nenalezeno",
   "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Trvání",
   "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Neomezeně",
   "navigation_bar.apps": "Mobilní aplikace",
   "navigation_bar.blocks": "Blokovaní uživatelé",
   "navigation_bar.bookmarks": "Záložky",
@@ -310,7 +298,7 @@
   "notification.own_poll": "Vaše anketa skončila",
   "notification.poll": "Anketa, ve které jste hlasovali, skončila",
   "notification.reblog": "Uživatel {name} boostnul váš toot",
-  "notification.status": "{name} just posted",
+  "notification.status": "Nový toot od {name}",
   "notifications.clear": "Smazat oznámení",
   "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
   "notifications.column_settings.alert": "Oznámení na počítači",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Zobrazit ve sloupci",
   "notifications.column_settings.sound": "Přehrát zvuk",
   "notifications.column_settings.status": "Nové tooty:",
+  "notifications.column_settings.unread_markers.category": "Značky nepřečtených oznámení",
   "notifications.filter.all": "Vše",
   "notifications.filter.boosts": "Boosty",
   "notifications.filter.favourites": "Oblíbení",
@@ -334,16 +323,16 @@
   "notifications.filter.mentions": "Zmínky",
   "notifications.filter.polls": "Výsledky anket",
   "notifications.filter.statuses": "Aktuality od lidí, které sledujete",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.grant_permission": "Udělit oprávnění.",
   "notifications.group": "{count} oznámení",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications.mark_as_read": "Označit všechna oznámení jako přečtená",
+  "notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat",
+  "notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto",
+  "notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.",
+  "notifications_permission_banner.enable": "Povolit oznámení na ploše",
+  "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.",
+  "notifications_permission_banner.title": "Nenechte si nic uniknout",
+  "picture_in_picture.restore": "Vložit zpět",
   "poll.closed": "Uzavřeno",
   "poll.refresh": "Obnovit",
   "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}",
@@ -447,12 +436,12 @@
   "timeline_hint.resources.followers": "Sledující",
   "timeline_hint.resources.follows": "Sleduje",
   "timeline_hint.resources.statuses": "Starší tooty",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.counter_by_accounts": "zmiňuje {count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}}",
   "trends.trending_now": "Aktuální trendy",
   "ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.",
-  "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
-  "units.short.thousand": "{count}K",
+  "units.short.billion": "{count} mld.",
+  "units.short.million": "{count} mil.",
+  "units.short.thousand": "{count} tis.",
   "upload_area.title": "Nahrajte přetažením",
   "upload_button.label": "Přidat média",
   "upload_error.limit": "Byl překročen limit nahraných souborů.",
@@ -465,12 +454,12 @@
   "upload_form.video_description": "Popis pro sluchově či zrakově postižené",
   "upload_modal.analyzing_picture": "Analyzuji obrázek…",
   "upload_modal.apply": "Použít",
-  "upload_modal.choose_image": "Choose image",
+  "upload_modal.choose_image": "Vybrat obrázek",
   "upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy",
   "upload_modal.detect_text": "Detekovat text z obrázku",
   "upload_modal.edit_media": "Upravit média",
   "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "Příprava OCR…",
   "upload_modal.preview_label": "Náhled ({ratio})",
   "upload_progress.label": "Nahrávání…",
   "video.close": "Zavřít video",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index b3c1947b4..45820b132 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
   "account.follows_you": "Yn eich dilyn chi",
   "account.hide_reblogs": "Cuddio bwstiau o @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Gweithredol olaf",
   "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}",
   "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i gloi. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.",
   "empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff dwtiau eto. Pan y byddwch yn hoffi un, mi fydd yn ymddangos yma.",
   "empty_column.favourites": "Nid oes neb wedi hoffi'r tŵt yma eto. Pan bydd rhywun yn ei hoffi, byddent yn ymddangos yma.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan dderbyniwch chi un, byddent yn ymddangos yma.",
   "empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
   "empty_column.home": "Mae eich ffrwd gartref yn wag! Ymwelwch a {public} neu defnyddiwch y chwilotwr i ddechrau arni ac i gwrdd a defnyddwyr eraill.",
-  "empty_column.home.public_timeline": "y ffrwd gyhoeddus",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Nid oes dim yn y rhestr yma eto. Pan y bydd aelodau'r rhestr yn cyhoeddi statws newydd, mi fydd yn ymddangos yma.",
   "empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan grëwch chi un, mi fydd yn ymddangos yma.",
   "empty_column.mutes": "Nid ydych wedi tawelu unrhyw ddefnyddwyr eto.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd",
   "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Caniatau",
   "follow_request.reject": "Gwrthod",
   "follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, oedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}",
   "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}",
   "intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}",
-  "introduction.federation.action": "Nesaf",
-  "introduction.federation.federated.headline": "Ffederasiwn",
-  "introduction.federation.federated.text": "Bydd pyst cyhoeddus o gweinyddion arall yn y Ffedysawd yn cael ai arddangos yn ffrwd y ffederasiwn.",
-  "introduction.federation.home.headline": "Hafan",
-  "introduction.federation.home.text": "Bydd pyst o bobl rydych yn ei ddilyn yn dangos yn eich ffrwd gatref. Gallwch dilyn unrhyw un ar unrhyw gweinydd!",
-  "introduction.federation.local.headline": "Lleol",
-  "introduction.federation.local.text": "Bydd pyst gyhoeddus o bobl ar yr un gweinydd a chi yn cael ei arddangos yn y ffrwd lleol.",
-  "introduction.interactions.action": "Gorffen tiwtorial!",
-  "introduction.interactions.favourite.headline": "Ffefryn",
-  "introduction.interactions.favourite.text": "Gallwch cadw tŵt am hwyrach, a gadael i'r awdur gwybod roeddech yn ei hoffi, trwy ei hoffi.",
-  "introduction.interactions.reblog.headline": "Hwb",
-  "introduction.interactions.reblog.text": "Gallwch rhannu tŵtiau pobl eraill gyda'ch dilynwyr trwy eu bŵstio.",
-  "introduction.interactions.reply.headline": "Ateb",
-  "introduction.interactions.reply.text": "Gallwch ateb i dŵtiau pobl eraill a thŵtiau eich hun, a fydd yn eu cadwyno at ei gilydd mewn sgwrs.",
-  "introduction.welcome.action": "Awn ni!",
-  "introduction.welcome.headline": "Camau cyntaf",
-  "introduction.welcome.text": "Croeso i'r ffedysawd! Mewn ychydig o funudau, byddwch yn gallu darlledu negeseuon a siarad i'ch ffrindiau ar draws amrywiaeth eang o weinyddion. Ond mae'r gweinydd hyn, {domain}, yn arbennig - mae o'n gweinyddu eich proffil, fellu cofiwch ei enw.",
   "keyboard_shortcuts.back": "i lywio nôl",
   "keyboard_shortcuts.blocked": "i agor rhestr defnyddwyr a flociwyd",
   "keyboard_shortcuts.boost": "i fŵstio",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Dangos yn y golofn",
   "notifications.column_settings.sound": "Chwarae sain",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Pob",
   "notifications.filter.boosts": "Hybiadau",
   "notifications.filter.favourites": "Ffefrynnau",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 7c4b3e4ef..6042840e2 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -1,142 +1,143 @@
 {
-  "account.account_note_header": "Note",
+  "account.account_note_header": "Notat",
   "account.add_or_remove_from_list": "Tilføj eller fjern fra lister",
-  "account.badges.bot": "Robot",
+  "account.badges.bot": "Bot",
   "account.badges.group": "Gruppe",
-  "account.block": "Bloker @{name}",
-  "account.block_domain": "Skjul alt fra {domain}",
+  "account.block": "Blokér @{name}",
+  "account.block_domain": "Blokér domænet {domain}",
   "account.blocked": "Blokeret",
   "account.browse_more_on_origin_server": "Gennemse mere på den oprindelige profil",
   "account.cancel_follow_request": "Annullér følgeranmodning",
-  "account.direct": "Send en direkte besked til @{name}",
-  "account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op",
-  "account.domain_blocked": "Domænet er blevet skjult",
-  "account.edit_profile": "Rediger profil",
-  "account.enable_notifications": "Giv mig besked når @{name} lægger noget op",
+  "account.direct": "Direkte besked til @{name}",
+  "account.disable_notifications": "Advisér mig ikke længere, når @{name} poster",
+  "account.domain_blocked": "Domæne blokeret",
+  "account.edit_profile": "Redigere profil",
+  "account.enable_notifications": "Advisér mig, når @{name} poster",
   "account.endorse": "Fremhæv på profil",
   "account.follow": "Følg",
   "account.followers": "Følgere",
-  "account.followers.empty": "Der er endnu ingen der følger denne bruger.",
+  "account.followers.empty": "Ingen følger denne bruger endnu.",
   "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.following_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}",
   "account.follows.empty": "Denne bruger følger endnu ikke nogen.",
   "account.follows_you": "Følger dig",
   "account.hide_reblogs": "Skjul fremhævelserne fra @{name}",
-  "account.last_status": "Sidst aktiv",
-  "account.link_verified_on": "Ejerskabet af dette link blev tjekket den %{date}",
-  "account.locked_info": "Denne kontos privatlivsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge dem.",
+  "account.joined": "Tilmeldt {date}",
+  "account.last_status": "Senest aktiv",
+  "account.link_verified_on": "Ejerskab af dette link blev tjekket {date}",
+  "account.locked_info": "Denne kontos fortrolighedsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge vedkommende.",
   "account.media": "Medie",
   "account.mention": "Nævn @{name}",
   "account.moved_to": "{name} er flyttet til:",
-  "account.mute": "Dæmp @{name}",
-  "account.mute_notifications": "Dæmp notifikationer fra @{name}",
-  "account.muted": "Dæmpet",
+  "account.mute": "Tavsgør @{name}",
+  "account.mute_notifications": "Tavsgør notifikationer fra @{name}",
+  "account.muted": "Tavsgjort",
   "account.never_active": "Aldrig",
   "account.posts": "Trut",
   "account.posts_with_replies": "Trut og svar",
-  "account.report": "Rapporter @{name}",
+  "account.report": "Anmeld @{name}",
   "account.requested": "Afventer godkendelse. Tryk for at annullere følgeanmodning",
   "account.share": "Del @{name}s profil",
   "account.show_reblogs": "Vis fremhævelserne fra @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Trut} other {{counter} Trut}}",
   "account.unblock": "Fjern blokeringen af @{name}",
-  "account.unblock_domain": "Skjul ikke længere {domain}",
+  "account.unblock_domain": "Afblokér domænet {domain}",
   "account.unendorse": "Fremhæv ikke på profil",
   "account.unfollow": "Følg ikke længere",
-  "account.unmute": "Fjern dæmpningen af @{name}",
-  "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
-  "account_note.placeholder": "Click to add a note",
-  "alert.rate_limited.message": "Prøv venligst igen efter {retry_time, time, medium}.",
+  "account.unmute": "Fjern tavsgjort for @{name}",
+  "account.unmute_notifications": "Fjern tavsgjort for notifikationer fra @{name}",
+  "account_note.placeholder": "Klik for at tilføje notat",
+  "alert.rate_limited.message": "Forsøg igen efter {retry_time, time, medium}.",
   "alert.rate_limited.title": "Gradsbegrænset",
-  "alert.unexpected.message": "Der opstod en uventet fejl.",
+  "alert.unexpected.message": "En uventet fejl opstod.",
   "alert.unexpected.title": "Ups!",
   "announcement.announcement": "Bekendtgørelse",
-  "autosuggest_hashtag.per_week": "{count} per uge",
-  "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
-  "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.",
-  "bundle_column_error.retry": "Prøv igen",
+  "autosuggest_hashtag.per_week": "{count} pr. uge",
+  "boost_modal.combo": "Du kan trykke på {combo} for at overspringe dette næste gang",
+  "bundle_column_error.body": "Noget gik galt under indlæsningen af denne komponent.",
+  "bundle_column_error.retry": "Forsøg igen",
   "bundle_column_error.title": "Netværksfejl",
   "bundle_modal_error.close": "Luk",
-  "bundle_modal_error.message": "Noget gik galt under indlæsningen af dette komponent.",
-  "bundle_modal_error.retry": "Prøv igen",
+  "bundle_modal_error.message": "Noget gik galt under indlæsningen af denne komponent.",
+  "bundle_modal_error.retry": "Forsøg igen",
   "column.blocks": "Blokerede brugere",
   "column.bookmarks": "Bogmærker",
   "column.community": "Lokal tidslinje",
   "column.direct": "Direkte beskeder",
   "column.directory": "Gennemse profiler",
-  "column.domain_blocks": "Skjulte domæner",
+  "column.domain_blocks": "Blokerede domæner",
   "column.favourites": "Favoritter",
-  "column.follow_requests": "Anmodning om at følge",
+  "column.follow_requests": "Følg-anmodninger",
   "column.home": "Hjem",
   "column.lists": "Lister",
-  "column.mutes": "Dæmpede brugere",
+  "column.mutes": "Tavsgjorte brugere",
   "column.notifications": "Notifikationer",
   "column.pins": "Fastgjorte trut",
-  "column.public": "Fælles tidslinje",
+  "column.public": "Forenede tidslinje",
   "column_back_button.label": "Tilbage",
   "column_header.hide_settings": "Skjul indstillinger",
   "column_header.moveLeft_settings": "Flyt kolonne til venstre",
   "column_header.moveRight_settings": "Flyt kolonne til højre",
   "column_header.pin": "Fastgør",
   "column_header.show_settings": "Vis indstillinger",
-  "column_header.unpin": "Fastgør ikke længere",
+  "column_header.unpin": "Løsgør",
   "column_subheading.settings": "Indstillinger",
   "community.column_settings.local_only": "Kun lokalt",
   "community.column_settings.media_only": "Kun medie",
   "community.column_settings.remote_only": "Kun fjernt",
-  "compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.",
-  "compose_form.direct_message_warning_learn_more": "Lær mere",
-  "compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.",
-  "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Alle kan følge dig for at se dine følger-kun indlæg.",
+  "compose_form.direct_message_warning": "Dette trut sendes kun til de nævnte brugere.",
+  "compose_form.direct_message_warning_learn_more": "Få mere at vide",
+  "compose_form.hashtag_warning": "Dette trut vises ikke under noget hashtag, da det ikke er listet. Kun offentlige trut kan søges via hashtags.",
+  "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Alle kan følge dig for at se dine kun-følger poster.",
   "compose_form.lock_disclaimer.lock": "låst",
-  "compose_form.placeholder": "Hvad har du på hjertet?",
+  "compose_form.placeholder": "Hvad tænker du på?",
   "compose_form.poll.add_option": "Tilføj valgmulighed",
-  "compose_form.poll.duration": "Afstemningens varighed",
+  "compose_form.poll.duration": "Afstemningsvarighed",
   "compose_form.poll.option_placeholder": "Valgmulighed {number}",
   "compose_form.poll.remove_option": "Fjern denne valgmulighed",
-  "compose_form.poll.switch_to_multiple": "Ændre afstemning for at tillade flere valg",
-  "compose_form.poll.switch_to_single": "Ændre afstemning for at tillade et enkelt valg",
-  "compose_form.publish": "Trut",
+  "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype",
+  "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype",
+  "compose_form.publish": "Toot",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Markér medie som følsomt",
-  "compose_form.sensitive.marked": "Medie er markeret som værende følsomt",
-  "compose_form.sensitive.unmarked": "Mediet er ikke markeret som værende følsomt",
-  "compose_form.spoiler.marked": "Teksten er skjult bag en advarsel",
+  "compose_form.sensitive.hide": "{count, plural, one {Markér medie som følsomt} other {Markér medier som følsomme}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Medie er markeret som sensitivt} other {Medier er markerede som sensitive}}",
+  "compose_form.sensitive.unmarked": "Intet medie market som sensitivt",
+  "compose_form.spoiler.marked": "Tekst skjult bag advarsel",
   "compose_form.spoiler.unmarked": "Teksten er ikke skjult",
-  "compose_form.spoiler_placeholder": "Skriv din advarsel her",
-  "confirmation_modal.cancel": "Annuller",
-  "confirmations.block.block_and_report": "Blokér og anmeld",
-  "confirmations.block.confirm": "Bloker",
-  "confirmations.block.message": "Er du sikker på, du vil blokere {name}?",
+  "compose_form.spoiler_placeholder": "Skriv din advarsel hér",
+  "confirmation_modal.cancel": "Afbryd",
+  "confirmations.block.block_and_report": "Blokér og Anmeld",
+  "confirmations.block.confirm": "Blokér",
+  "confirmations.block.message": "Sikker på, at du vil blokere {name}?",
   "confirmations.delete.confirm": "Slet",
-  "confirmations.delete.message": "Er du sikker på, du vil slette denne status?",
+  "confirmations.delete.message": "Sikker på, at du vil slette dette trut?",
   "confirmations.delete_list.confirm": "Slet",
-  "confirmations.delete_list.message": "Er du sikker på, du vil slette denne liste?",
-  "confirmations.domain_block.confirm": "Skjul helt domæne",
-  "confirmations.domain_block.message": "Er du helt sikker på du vil blokere hele {domain} domænet? I de fleste tilfælde vil få specifikke blokeringer eller dæmpninger være nok og at fortrække. Du vil ikke se indhold fra det domæne hverken på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra det domæne vil blive fjernet.",
+  "confirmations.delete_list.message": "Sikker på, at du vil slette denne liste permanent?",
+  "confirmations.domain_block.confirm": "Skjul hele domænet",
+  "confirmations.domain_block.message": "Helt sikker på, at du vil blokere hele {domain}-domænet? Oftest vil få, specifikke blokeringer eller tavsgørelser være nok og at fortrække. Du vil ikke se indhold fra domænet på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra domænet fjernes.",
   "confirmations.logout.confirm": "Log ud",
-  "confirmations.logout.message": "Er du sikker på du vil logge ud?",
-  "confirmations.mute.confirm": "Dæmp",
-  "confirmations.mute.explanation": "Dette vil skjule indlæg fra dem, samt andre indlæg der omtaler dem, men de vil stadig være i stand til at se dine indlæg og følge dig.",
-  "confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?",
-  "confirmations.redraft.confirm": "Slet & omskriv",
-  "confirmations.redraft.message": "Er du sikker på, du vil slette denne status og omskrive den? Favoritter og fremhævelser vil gå tabt og svar til det oprindelige opslag vil blive forældreløse.",
-  "confirmations.reply.confirm": "Svar",
-  "confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?",
+  "confirmations.logout.message": "Log ud, sikker?",
+  "confirmations.mute.confirm": "Tavsgøre",
+  "confirmations.mute.explanation": "Dette skjuler indlæg fra dem (og om) dem, men det vil lade dem at se dine indlæg og følge dig.",
+  "confirmations.mute.message": "Sikker på, du vil tavsgøre {name}?",
+  "confirmations.redraft.confirm": "Slet og omskriv",
+  "confirmations.redraft.message": "Sikker på, at du vil slette dette trut og omskrive det? Favoritter og fremhævelser går tabt og svar til det oprindelige indlæg afassocieres.",
+  "confirmations.reply.confirm": "Besvar",
+  "confirmations.reply.message": "Besvarelse nu vil overskrive den besked, du er ved at skrive. Fortsæt alligevel?",
   "confirmations.unfollow.confirm": "Følg ikke længere",
-  "confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?",
-  "conversation.delete": "Slet samtale",
-  "conversation.mark_as_read": "Marker som læst",
-  "conversation.open": "Vis samtale",
+  "confirmations.unfollow.message": "Sikker på, at du ikke længere vil følge {name}?",
+  "conversation.delete": "Slet konversation",
+  "conversation.mark_as_read": "Markér som læst",
+  "conversation.open": "Vis konversation",
   "conversation.with": "Med {names}",
   "directory.federated": "Fra kendt fedivers",
   "directory.local": "Kun fra {domain}",
   "directory.new_arrivals": "Nye ankomster",
   "directory.recently_active": "Senest aktiv",
-  "embed.instructions": "Indlejre denne status på din side ved at kopiere nedenstående kode.",
-  "embed.preview": "Det kommer til at se således ud:",
+  "embed.instructions": "Indlejr dette trut på din side ved at kopiere koden nedenfor.",
+  "embed.preview": "Sådan kommer det til at se ud:",
   "emoji_button.activity": "Aktivitet",
-  "emoji_button.custom": "Bruger defineret",
+  "emoji_button.custom": "Tilpasset",
   "emoji_button.flags": "Flag",
   "emoji_button.food": "Mad og drikke",
   "emoji_button.label": "Indsæt humørikon",
@@ -148,53 +149,57 @@
   "emoji_button.search": "Søg...",
   "emoji_button.search_results": "Søgeresultater",
   "emoji_button.symbols": "Symboler",
-  "emoji_button.travel": "Rejser & steder",
-  "empty_column.account_suspended": "Account suspended",
-  "empty_column.account_timeline": "Ingen bidrag her!",
+  "emoji_button.travel": "Rejser og steder",
+  "empty_column.account_suspended": "Konto suspenderet",
+  "empty_column.account_timeline": "Ingen trut her!",
   "empty_column.account_unavailable": "Profil utilgængelig",
-  "empty_column.blocks": "Du har ikke blokeret nogen endnu.",
-  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
-  "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!",
-  "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.",
-  "empty_column.domain_blocks": "Der er endnu ikke nogle skjulte domæner.",
-  "empty_column.favourited_statuses": "Du har endnu ikke favoriseret nogen trut. Når du favoriserer et, vil det blive vist her.",
-  "empty_column.favourites": "Endnu ingen har favoriseret dette trut. Når en anden gør vil det blive vist her.",
-  "empty_column.follow_requests": "Du har endnu ingen følgeranmodninger. Når du modtager en, vil den komme frem her.",
-  "empty_column.hashtag": "Dette hashtag indeholder endnu ikke noget.",
-  "empty_column.home": "Din hjemme tidslinje er tom! Besøg {public} eller brug søgningen for at komme igang og møde andre brugere.",
-  "empty_column.home.public_timeline": "den offentlige tidslinje",
-  "empty_column.list": "Der er endnu intet i denne liste. Når medlemmer af denne liste poster nye statusser, vil de vises her.",
-  "empty_column.lists": "Du har endnu ingen lister. Når du opretter en, vil den blive vist her.",
-  "empty_column.mutes": "Du har endnu ikke dæmpet nogen som helst bruger.",
-  "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.",
-  "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet",
-  "error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
-  "error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen",
-  "errors.unexpected_crash.report_issue": "Rapportér problem",
+  "empty_column.blocks": "Du har ikke blokeret nogle brugere endnu.",
+  "empty_column.bookmarked_statuses": "Du har ingen bogmærkede trut endnu. Når du bogmærker ét, vil det dukke op hér.",
+  "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
+  "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises hér.",
+  "empty_column.domain_blocks": "Der er endnu ingen skjulte domæner.",
+  "empty_column.favourited_statuses": "Du har endnu ingen favorit-trut. Når du favoriserer ét, vil det blive vist hér.",
+  "empty_column.favourites": "Ingen har endnu favoriseret dette trut. Når nogen anden gør vil det blive vist hér.",
+  "empty_column.follow_recommendations": "Ser ud til, at der ikke kunne genereres forslag til dig. Du kan prøve med Søg for at lede efter personer, du måske kender, eller udforske hashtags.",
+  "empty_column.follow_requests": "Du har endnu ingen følgeranmodninger. Når du modtager én, vil den fremgå hér.",
+  "empty_column.hashtag": "Intet indhold i dette hashtag endnu.",
+  "empty_column.home": "Din hjemmetidslinje er tom! Besøg {public} eller brug søgningen for at komme igang og møde andre brugere.",
+  "empty_column.home.suggestions": "Se nogle foreslag",
+  "empty_column.list": "Der er endnu intet i denne liste. Når medlemmer af denne liste poster nye trut, vil de fremgå hér.",
+  "empty_column.lists": "Du har endnu ingen lister. Når du opretter én, vil den fremgå hér.",
+  "empty_column.mutes": "Du har endnu ikke tavsgjort nogle brugere.",
+  "empty_column.notifications": "Du har endnu ingen notifikationer. Interagér med andre for at starte konversationen.",
+  "empty_column.public": "Der er intet hér! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold",
+  "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en browser-kompatibilitetsfejl, kunne siden ikke vises korrekt.",
+  "error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.",
+  "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.",
+  "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.",
+  "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen",
+  "errors.unexpected_crash.report_issue": "Anmeld problem",
+  "follow_recommendations.done": "Udført",
+  "follow_recommendations.heading": "Følg personer du gerne vil se indlæg fra! Her er nogle forslag.",
+  "follow_recommendations.lead": "Indlæg, fra personer du følger, vises i kronologisk rækkefølge i dit hjemmefeed. Vær ikke bange for at begå fejl, du kan vælge \"følg ikke\" personer lige så nemt til enhver tid!",
   "follow_request.authorize": "Godkend",
   "follow_request.reject": "Afvis",
-  "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, troede {domain} -personalet, at du måske vil gennemgå dine anmodninger manuelt.",
+  "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, antog {domain}-personalet, at du måske vil gennemgå dine anmodninger manuelt.",
   "generic.saved": "Gemt",
   "getting_started.developers": "Udviklere",
   "getting_started.directory": "Profilliste",
   "getting_started.documentation": "Dokumentation",
-  "getting_started.heading": "Kom igang",
-  "getting_started.invite": "Inviter folk",
-  "getting_started.open_source_notice": "Mastodon er et open source software. Du kan bidrage eller rapporterer fejl på GitHub {github}.",
-  "getting_started.security": "Sikkerhed",
-  "getting_started.terms": "Vilkår",
+  "getting_started.heading": "Komme i gang",
+  "getting_started.invite": "Invitér folk",
+  "getting_started.open_source_notice": "Mastodon er en open-source software. Du kan bidrage eller anmelde fejl via GitHub {github}.",
+  "getting_started.security": "Kontoindstillinger",
+  "getting_started.terms": "Tjenestevilkår",
   "hashtag.column_header.tag_mode.all": "og {additional}",
   "hashtag.column_header.tag_mode.any": "eller {additional}",
   "hashtag.column_header.tag_mode.none": "uden {additional}",
   "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet",
-  "hashtag.column_settings.select.placeholder": "Indtast hashtags…",
+  "hashtag.column_settings.select.placeholder": "Angiv hashtags…",
   "hashtag.column_settings.tag_mode.all": "Alle disse",
   "hashtag.column_settings.tag_mode.any": "Nogle af disse",
   "hashtag.column_settings.tag_mode.none": "Ingen af disse",
-  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne",
   "home.column_settings.basic": "Grundlæggende",
   "home.column_settings.show_reblogs": "Vis fremhævelser",
   "home.column_settings.show_replies": "Vis svar",
@@ -203,237 +208,221 @@
   "intervals.full.days": "{number, plural, one {# dag} other {# dage}}",
   "intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}",
-  "introduction.federation.action": "Næste",
-  "introduction.federation.federated.headline": "Fælles",
-  "introduction.federation.federated.text": "Offentlige bidrag fra andre servere af fediversen vil komme til syne i den federated timeline.",
-  "introduction.federation.home.headline": "Hjem",
-  "introduction.federation.home.text": "Statusser fra personer du følger vil blive vist i dit hjemmefeed. Du kan følge alle på enhver server!",
-  "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Offentlige statusser fra personer på samme server som dig vil blive vist i det lokale feed.",
-  "introduction.interactions.action": "Slut tutorial!",
-  "introduction.interactions.favourite.headline": "Favorisere",
-  "introduction.interactions.favourite.text": "Du kan gemme en status til senere (og vise forfatteren at du kunne lide den) ved at favorisere den.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Du kan delete andres statusser med dine følgere ved at booste dem.",
-  "introduction.interactions.reply.headline": "Svar",
-  "introduction.interactions.reply.text": "Du kan svare andres og din egen bidrag, hvilke vil kæde dem sammen i en konversation.",
-  "introduction.welcome.action": "Læd os gå!",
-  "introduction.welcome.headline": "Første skridt",
-  "introduction.welcome.text": "Velkommen til fediverset! Om få øjeblikke vil du kunne dele statusser og tale med dine venner på en bred vifte af servere. Men denne server, {domain}, er speciel. Det er på denne server at din profil har hjemme så husk dens navn.",
-  "keyboard_shortcuts.back": "for at navigere dig tilbage",
+  "keyboard_shortcuts.back": "for at navigere tilbage",
   "keyboard_shortcuts.blocked": "for at åbne listen over blokerede brugere",
   "keyboard_shortcuts.boost": "for at fremhæve",
-  "keyboard_shortcuts.column": "for at fokusere på en status i en af kolonnerne",
+  "keyboard_shortcuts.column": "for at fokusere et trut i en af kolonnerne",
   "keyboard_shortcuts.compose": "for at fokusere på skriveområdet",
   "keyboard_shortcuts.description": "Beskrivelse",
-  "keyboard_shortcuts.direct": "for at åbne privat besked kolonnen",
-  "keyboard_shortcuts.down": "for at rykke ned ad listen",
-  "keyboard_shortcuts.enter": "for at åbne status",
+  "keyboard_shortcuts.direct": "for at åbne direkte besked-kolonnen",
+  "keyboard_shortcuts.down": "for at rykke nedad på listen",
+  "keyboard_shortcuts.enter": "for at åbne trut",
   "keyboard_shortcuts.favourite": "for at favorisere",
-  "keyboard_shortcuts.favourites": "for at åbne listen over favoritter",
+  "keyboard_shortcuts.favourites": "for at åbne favoritlisten",
   "keyboard_shortcuts.federated": "for at åbne den forenede tidslinje",
   "keyboard_shortcuts.heading": "Tastaturgenveje",
-  "keyboard_shortcuts.home": "for at åbne hjem tidslinjen",
+  "keyboard_shortcuts.home": "for at åbne hjemmetidslinjen",
   "keyboard_shortcuts.hotkey": "Hurtigtast",
-  "keyboard_shortcuts.legend": "for at vise denne legende",
+  "keyboard_shortcuts.legend": "for at vise dette symbol",
   "keyboard_shortcuts.local": "for at åbne den lokale tidslinje",
   "keyboard_shortcuts.mention": "for at nævne forfatteren",
-  "keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere",
+  "keyboard_shortcuts.muted": "for at åbne listen over tavsgjorte brugere",
   "keyboard_shortcuts.my_profile": "for at åbne din profil",
-  "keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen",
+  "keyboard_shortcuts.notifications": "for at åbne notifikationskolonnen",
   "keyboard_shortcuts.open_media": "for at åbne medier",
   "keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut",
-  "keyboard_shortcuts.profile": "til profil af åben forfatter",
-  "keyboard_shortcuts.reply": "for at svare",
-  "keyboard_shortcuts.requests": "for at åbne listen over følgeranmodninger",
+  "keyboard_shortcuts.profile": "for at åbne forfatterens profil",
+  "keyboard_shortcuts.reply": "for at besvare",
+  "keyboard_shortcuts.requests": "for at åbne følganmodningslisten",
   "keyboard_shortcuts.search": "for at fokusere søgningen",
   "keyboard_shortcuts.spoilers": "for at vise/skjule CW-felt",
-  "keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen",
+  "keyboard_shortcuts.start": "for at åbne \"komme i gang\"-kolonnen",
   "keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW",
   "keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier",
-  "keyboard_shortcuts.toot": "for at påbegynde et helt nyt trut",
+  "keyboard_shortcuts.toot": "for at påbegynde et helt nyt indlæg",
   "keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning",
-  "keyboard_shortcuts.up": "for at bevæge dig op ad listen",
+  "keyboard_shortcuts.up": "for at bevæge sig opad på listen",
   "lightbox.close": "Luk",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Komprimér billedvisningsfelt",
+  "lightbox.expand": "Udvid billedevisningsfelt",
   "lightbox.next": "Næste",
-  "lightbox.previous": "Forrige",
-  "lists.account.add": "Tilføj til liste",
+  "lightbox.previous": "Foregående",
+  "lists.account.add": "Føj til liste",
   "lists.account.remove": "Fjern fra liste",
   "lists.delete": "Slet liste",
-  "lists.edit": "Rediger liste",
+  "lists.edit": "Redigér liste",
   "lists.edit.submit": "Skift titel",
   "lists.new.create": "Tilføj liste",
-  "lists.new.title_placeholder": "Ny liste titel",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
+  "lists.new.title_placeholder": "Ny listetitel",
+  "lists.replies_policy.followed": "Enhver fulgt bruger",
+  "lists.replies_policy.list": "Medlemmer af listen",
+  "lists.replies_policy.none": "Ingen",
   "lists.replies_policy.title": "Vis svar til:",
-  "lists.search": "Søg iblandt folk du følger",
+  "lists.search": "Søg blandt personer, du følger",
   "lists.subheading": "Dine lister",
   "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}",
   "loading_indicator.label": "Indlæser...",
-  "media_gallery.toggle_visible": "Ændre synlighed",
+  "media_gallery.toggle_visible": "Skjul {number, plural, one {billede} other {billeder}}",
   "missing_indicator.label": "Ikke fundet",
-  "missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet",
+  "missing_indicator.sublabel": "Denne ressource kunne ikke findes",
   "mute_modal.duration": "Varighed",
   "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",
   "mute_modal.indefinite": "Uendeligt",
-  "navigation_bar.apps": "Mobil apps",
+  "navigation_bar.apps": "Mobil-apps",
   "navigation_bar.blocks": "Blokerede brugere",
   "navigation_bar.bookmarks": "Bogmærker",
   "navigation_bar.community_timeline": "Lokal tidslinje",
   "navigation_bar.compose": "Skriv nyt trut",
   "navigation_bar.direct": "Direkte beskeder",
   "navigation_bar.discover": "Opdag",
-  "navigation_bar.domain_blocks": "Skjulte domæner",
-  "navigation_bar.edit_profile": "Rediger profil",
+  "navigation_bar.domain_blocks": "Blokerede domæner",
+  "navigation_bar.edit_profile": "Redigér profil",
   "navigation_bar.favourites": "Favoritter",
-  "navigation_bar.filters": "Dæmpede ord",
-  "navigation_bar.follow_requests": "Følgeanmodninger",
+  "navigation_bar.filters": "Tavsgjorte ord",
+  "navigation_bar.follow_requests": "Følganmodninger",
   "navigation_bar.follows_and_followers": "Følger og følgere",
-  "navigation_bar.info": "Om denne instans",
-  "navigation_bar.keyboard_shortcuts": "Hurtigtast",
+  "navigation_bar.info": "Om denne server",
+  "navigation_bar.keyboard_shortcuts": "Hurtigtaster",
   "navigation_bar.lists": "Lister",
-  "navigation_bar.logout": "Logud",
-  "navigation_bar.mutes": "Dæmpede brugere",
-  "navigation_bar.personal": "Personligt",
+  "navigation_bar.logout": "Log ud",
+  "navigation_bar.mutes": "Tavsgjorte brugere",
+  "navigation_bar.personal": "Personlig",
   "navigation_bar.pins": "Fastgjorte trut",
   "navigation_bar.preferences": "Præferencer",
-  "navigation_bar.public_timeline": "Fælles tidslinje",
+  "navigation_bar.public_timeline": "Forenet tidslinje",
   "navigation_bar.security": "Sikkerhed",
-  "notification.favourite": "{name} favoriserede din status",
+  "notification.favourite": "{name} favoriserede dit trut",
   "notification.follow": "{name} fulgte dig",
   "notification.follow_request": "{name} har anmodet om at følge dig",
   "notification.mention": "{name} nævnte dig",
   "notification.own_poll": "Din afstemning er afsluttet",
-  "notification.poll": "En afstemning, du stemte i, er slut",
-  "notification.reblog": "{name} boostede din status",
-  "notification.status": "{name} har lige lagt noget op",
+  "notification.poll": "En afstemning, hvori du stemte, er slut",
+  "notification.reblog": "{name} fremhævede din trut",
+  "notification.status": "{name} har netop postet",
   "notifications.clear": "Ryd notifikationer",
-  "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?",
+  "notifications.clear_confirmation": "Sikker på, at du vil rydde alle dine notifikationer permanent?",
   "notifications.column_settings.alert": "Skrivebordsnotifikationer",
   "notifications.column_settings.favourite": "Favoritter:",
   "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier",
-  "notifications.column_settings.filter_bar.category": "Hurtigfilter",
+  "notifications.column_settings.filter_bar.category": "Hurtigfilterbjælke",
   "notifications.column_settings.filter_bar.show": "Vis",
   "notifications.column_settings.follow": "Nye følgere:",
-  "notifications.column_settings.follow_request": "Nye følgeranmodninger:",
-  "notifications.column_settings.mention": "Statusser der nævner dig:",
-  "notifications.column_settings.poll": "Afstemningsresultat:",
+  "notifications.column_settings.follow_request": "Nye følganmodninger:",
+  "notifications.column_settings.mention": "Omtaler:",
+  "notifications.column_settings.poll": "Afstemningsresultater:",
   "notifications.column_settings.push": "Pushnotifikationer",
-  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.reblog": "Fremhævelser:",
   "notifications.column_settings.show": "Vis i kolonne",
   "notifications.column_settings.sound": "Afspil lyd",
-  "notifications.column_settings.status": "Nye toots:",
+  "notifications.column_settings.status": "Nye indlæg:",
+  "notifications.column_settings.unread_markers.category": "Ulæste notifkationer-markører",
   "notifications.filter.all": "Alle",
-  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.boosts": "Fremhævelser",
   "notifications.filter.favourites": "Favoritter",
   "notifications.filter.follows": "Følger",
-  "notifications.filter.mentions": "Statusser der nævner dig",
-  "notifications.filter.polls": "Afstemningsresultat",
+  "notifications.filter.mentions": "Omtaler",
+  "notifications.filter.polls": "Afstemningsresultater",
   "notifications.filter.statuses": "Opdateringer fra personer, du følger",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.grant_permission": "Tildel tilladelse.",
   "notifications.group": "{count} notifikationer",
   "notifications.mark_as_read": "Markér alle notifikationer som læst",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications.permission_denied": "Skrivebordsnotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning",
+  "notifications.permission_denied_alert": "Skrivebordsnotifikationer kan ikke aktiveres, da browsertilladelse er blevet nægtet før",
+  "notifications.permission_required": "Skrivebordsnotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.",
+  "notifications_permission_banner.enable": "Aktivér skrivebordsnotifikationer",
+  "notifications_permission_banner.how_to_control": "Aktivér skrivebordsnotifikationer for at modtage notifikationer, når Mastodon ikke er åben. Du kan styre, præcist hvilke typer af interaktioner, som genererer skrivebordsnotifikationer via knappen {icon} ovenfor, når de er aktiveret.",
   "notifications_permission_banner.title": "Gå aldrig glip af noget",
-  "picture_in_picture.restore": "Sæt den tilbage",
+  "picture_in_picture.restore": "Sæt det tilbage",
   "poll.closed": "Lukket",
-  "poll.refresh": "Opdatér",
+  "poll.refresh": "Opfrisk",
   "poll.total_people": "{count, plural, one {# person} other {# personer}}",
   "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}",
   "poll.vote": "Stem",
-  "poll.voted": "Du stemte for denne valgmulighed",
+  "poll.voted": "Du stemte for dette svar",
   "poll_button.add_poll": "Tilføj en afstemning",
   "poll_button.remove_poll": "Fjern afstemning",
-  "privacy.change": "Skift status visningsindstillinger",
-  "privacy.direct.long": "Udgiv kun til nævnte brugere",
+  "privacy.change": "Justér trutfortrolighed",
+  "privacy.direct.long": "Kun synlig for nævnte brugere",
   "privacy.direct.short": "Direkte",
-  "privacy.private.long": "Udgiv kun til følgere",
+  "privacy.private.long": "Kun synlig for følgere",
   "privacy.private.short": "Kun for følgere",
-  "privacy.public.long": "Udgiv på offentlige tidslinjer",
-  "privacy.public.short": "Offentligt",
-  "privacy.unlisted.long": "Udgiv ikke på offentlige tidslinjer",
-  "privacy.unlisted.short": "Ikke listet",
-  "refresh": "Opdatér",
+  "privacy.public.long": "Synlig for alle på offentlige tidslinjer",
+  "privacy.public.short": "Offentlig",
+  "privacy.unlisted.long": "Synlig for alle, men på offentlige tidslinjer",
+  "privacy.unlisted.short": "Ulistet",
+  "refresh": "Opfrisk",
   "regeneration_indicator.label": "Indlæser…",
-  "regeneration_indicator.sublabel": "Din startside er ved at blive forberedt!",
+  "regeneration_indicator.sublabel": "Din hjemmefeed klargøres!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}t",
   "relative_time.just_now": "nu",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
   "relative_time.today": "i dag",
-  "reply_indicator.cancel": "Annuller",
+  "reply_indicator.cancel": "Afbryd",
   "report.forward": "Videresend til {target}",
-  "report.forward_hint": "Kontoen er fra en anden server. Vil du også sende en anonym kopi af anmeldelsen dertil?",
-  "report.hint": "Anmeldelsen vil blive sendt til moderatorene af din instans. Du kan give en forklaring på hvorfor du anmelder denne konto nedenfor:",
+  "report.forward_hint": "Kontoen er fra en anden server. Sende en anonymiseret anmeldelseskopi dertil også?",
+  "report.hint": "Anmeldelsen sendes til din serverordstyrerer. Du kan oplyse nærmere om kontoanmeldelsen nedennfor:",
   "report.placeholder": "Yderligere kommentarer",
   "report.submit": "Indsend",
   "report.target": "Anmelder {target}",
   "search.placeholder": "Søg",
   "search_popout.search_format": "Avanceret søgeformat",
-  "search_popout.tips.full_text": "Simpel tekst returnerer statusser du har skrevet, favoriseret, boostet, eller er blevet nævnt i såvel som matchende brugernavne, profilnavne, og hashtags.",
+  "search_popout.tips.full_text": "Simpel tekst returnerer trut, du har skrevet, favoriseret, fremhævede eller som er nævnt i/matcher bruger- og profilnavne samt hashtags.",
   "search_popout.tips.hashtag": "hashtag",
-  "search_popout.tips.status": "status",
-  "search_popout.tips.text": "Simpel tekst returnerer matchende profilnavne, brugernavne og hashtags",
+  "search_popout.tips.status": "trut",
+  "search_popout.tips.text": "Simpel tekst returnerer matchende visnings- og brugernavne samt hashtags",
   "search_popout.tips.user": "bruger",
   "search_results.accounts": "Personer",
   "search_results.hashtags": "Hashtags",
   "search_results.statuses": "Trut",
-  "search_results.statuses_fts_disabled": "Denne Mastodonserver har ikke aktiveret for søgning af statusser via deres indhold.",
+  "search_results.statuses_fts_disabled": "På denne Mastodon-server er trutsøgning efter deres indhold ikke aktiveret.",
   "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}",
-  "status.admin_account": "Åben modereringsvisning for @{name}",
-  "status.admin_status": "Åben denne status i modereringsvisningen",
-  "status.block": "Bloker @{name}",
+  "status.admin_account": "Åbn modereringsbrugerflade for @{name}",
+  "status.admin_status": "Åbn dette trut i modereringsbrugerflade",
+  "status.block": "Blokér @{name}",
   "status.bookmark": "Bogmærke",
-  "status.cancel_reblog_private": "Fjern boost",
-  "status.cannot_reblog": "Denne post kan ikke boostes",
-  "status.copy": "Kopiér link til status",
+  "status.cancel_reblog_private": "Fjern fremhævning",
+  "status.cannot_reblog": "Dette indlæg kan ikke fremhæves",
+  "status.copy": "Kopiér link til trut",
   "status.delete": "Slet",
-  "status.detailed_status": "Detaljeret visning af samtale",
-  "status.direct": "Send direkte besked til @{name}",
-  "status.embed": "Integrér",
+  "status.detailed_status": "Detaljeret konversationsvisning",
+  "status.direct": "Direkte besked til @{name}",
+  "status.embed": "Indlejr",
   "status.favourite": "Favorit",
   "status.filtered": "Filtreret",
   "status.load_more": "Indlæs mere",
   "status.media_hidden": "Medie skjult",
   "status.mention": "Nævn @{name}",
   "status.more": "Mere",
-  "status.mute": "Dæmp @{name}",
-  "status.mute_conversation": "Dæmp samtale",
-  "status.open": "Udvid denne status",
+  "status.mute": "Tavsgør @{name}",
+  "status.mute_conversation": "Tavsgør konversation",
+  "status.open": "Udvid dette trut",
   "status.pin": "Fastgør til profil",
   "status.pinned": "Fastgjort trut",
   "status.read_more": "Læs mere",
-  "status.reblog": "Boost",
-  "status.reblog_private": "Boost til det oprindelige publikum",
-  "status.reblogged_by": "{name} boostede",
-  "status.reblogs.empty": "Der er endnu ingen der har boostet dette trut. Når der er nogen der gør, vil det blive vist her.",
+  "status.reblog": "Fremhæv",
+  "status.reblog_private": "Fremhæv med oprindelig synlighed",
+  "status.reblogged_by": "{name} fremhævet",
+  "status.reblogs.empty": "Ingen har endnu fremhævet dette trut. Når nogen gør, vil det fremgå hér.",
   "status.redraft": "Slet og omskriv",
   "status.remove_bookmark": "Fjern bogmærke",
   "status.reply": "Besvar",
-  "status.replyAll": "Besvar samtale",
+  "status.replyAll": "Besvar til tråd",
   "status.report": "Anmeld @{name}",
-  "status.sensitive_warning": "Følsomt indhold",
+  "status.sensitive_warning": "Sensitivt indhold",
   "status.share": "Del",
   "status.show_less": "Vis mindre",
   "status.show_less_all": "Vis mindre for alle",
   "status.show_more": "Vis mere",
   "status.show_more_all": "Vis mere for alle",
   "status.show_thread": "Vis tråd",
-  "status.uncached_media_warning": "Ikke tilgængelig",
-  "status.unmute_conversation": "Genaktivér samtale",
+  "status.uncached_media_warning": "Utilgængelig",
+  "status.unmute_conversation": "Genaktivér konversation",
   "status.unpin": "Frigør fra profil",
   "suggestions.dismiss": "Afvis foreslag",
   "suggestions.header": "Du er måske interesseret i…",
-  "tabs_bar.federated_timeline": "Fælles",
+  "tabs_bar.federated_timeline": "Forenede",
   "tabs_bar.home": "Hjem",
   "tabs_bar.local_timeline": "Lokal",
   "tabs_bar.notifications": "Notifikationer",
@@ -446,41 +435,41 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.",
   "timeline_hint.resources.followers": "Følgere",
   "timeline_hint.resources.follows": "Følger",
-  "timeline_hint.resources.statuses": "Ældre toots",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "timeline_hint.resources.statuses": "Ældre indlæg",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} taler",
   "trends.trending_now": "Hot lige nu",
-  "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
-  "units.short.billion": "{count}B",
+  "ui.beforeunload": "Dit udkast går tabt, hvis du forlader Mastodon.",
+  "units.short.billion": "{count}MI",
   "units.short.million": "{count}M",
   "units.short.thousand": "{count}K",
   "upload_area.title": "Træk og slip for at uploade",
-  "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
-  "upload_error.limit": "Uploadgrænse overskredet.",
-  "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.",
-  "upload_form.audio_description": "Beskriv for personer med høretab",
-  "upload_form.description": "Beskriv for svagtseende",
+  "upload_button.label": "Tilføj billeder, en video- eller lydfil",
+  "upload_error.limit": "Filuploadgrænse nået.",
+  "upload_error.poll": "Filupload ikke tilladt for afstemninger.",
+  "upload_form.audio_description": "Beskrivelse til hørehæmmede",
+  "upload_form.description": "Beskrivelse til svagtseende",
   "upload_form.edit": "Redigér",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.thumbnail": "Skift miniaturer",
   "upload_form.undo": "Slet",
-  "upload_form.video_description": "Beskriv for personer med høretab eller nedsat syn",
+  "upload_form.video_description": "Beskrivelse for hørehæmmede eller synshandicappede personer",
   "upload_modal.analyzing_picture": "Analyserer billede…",
   "upload_modal.apply": "Anvend",
   "upload_modal.choose_image": "Vælg billede",
   "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund",
-  "upload_modal.detect_text": "Find tekst i billede på automatisk vis",
+  "upload_modal.detect_text": "Detektér tekst i billede",
   "upload_modal.edit_media": "Redigér medie",
-  "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.",
-  "upload_modal.preparing_ocr": "Forbereder OCR…",
+  "upload_modal.hint": "Klik eller træk cirklen i forhåndsvisningen for at vælge det fokuspunkt, der altid vil være synligt på alle miniaturer.",
+  "upload_modal.preparing_ocr": "Klargør OCR…",
   "upload_modal.preview_label": "Forhåndsvisning ({ratio})",
   "upload_progress.label": "Uploader...",
   "video.close": "Luk video",
-  "video.download": "Hent fil",
+  "video.download": "Download fil",
   "video.exit_fullscreen": "Forlad fuldskærm",
   "video.expand": "Udvid video",
   "video.fullscreen": "Fuldskærm",
   "video.hide": "Skjul video",
-  "video.mute": "Dæmp lyd",
+  "video.mute": "Tavsgør lyd",
   "video.pause": "Sæt på pause",
   "video.play": "Afspil",
-  "video.unmute": "Fjern dæmpningen af lyd"
+  "video.unmute": "Fjern lydtavsgørelse"
 }
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 1cc962880..c98e3230d 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Dieses Profil folgt noch niemandem.",
   "account.follows_you": "Folgt dir",
   "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen",
+  "account.joined": "Beigetreten am {date}",
   "account.last_status": "Zuletzt aktiv",
   "account.link_verified_on": "Besitz dieses Links wurde geprüft am {date}",
   "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf gesperrt gesetzt. Die Person bestimmt manuell wer ihm/ihr folgen darf.",
@@ -156,13 +157,14 @@
   "empty_column.bookmarked_statuses": "Du hast bis jetzt keine Beiträge als Lesezeichen gespeichert. Wenn du einen Beitrag als Lesezeichen speicherst wird er hier erscheinen.",
   "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!",
   "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
-  "empty_column.domain_blocks": "Es ist noch keine versteckten Domains.",
+  "empty_column.domain_blocks": "Es sind noch keine Domains versteckt.",
   "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.",
   "empty_column.favourites": "Noch niemand hat diesen Beitrag favorisiert. Sobald es jemand tut, wird das hier angezeigt.",
+  "empty_column.follow_recommendations": "Es sieht so aus, als könnten keine Vorschläge für dich generiert werden. Du kannst versuchen nach Leuten zu suchen, die du vielleicht kennst oder du kannst angesagte Hashtags erkunden.",
   "empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.",
   "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
   "empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
-  "empty_column.home.public_timeline": "die öffentliche Zeitleiste",
+  "empty_column.home.suggestions": "Ein paar Vorschläge ansehen",
   "empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
   "empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.",
   "empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.",
   "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren",
   "errors.unexpected_crash.report_issue": "Problem melden",
+  "follow_recommendations.done": "Fertig",
+  "follow_recommendations.heading": "Folge Leuten, von denen du Beiträge sehen möchtest! Hier sind einige Vorschläge.",
+  "follow_recommendations.lead": "Beiträge von Personen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Hab keine Angst, Fehler zu machen, du kannst den Leuten jederzeit wieder entfolgen!",
   "follow_request.authorize": "Erlauben",
   "follow_request.reject": "Ablehnen",
   "follow_requests.unlocked_explanation": "Auch wenn dein Konto nicht gesperrt ist, haben die Mitarbeiter von {domain} gedacht, dass es besser wäre den Follow manuell zu bestätigen.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}",
   "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}",
   "intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
-  "introduction.federation.action": "Weiter",
-  "introduction.federation.federated.headline": "Föderiert",
-  "introduction.federation.federated.text": "Öffentliche Beiträge von anderen Servern im Fediversum erscheinen in der föderierten Zeitleiste.",
-  "introduction.federation.home.headline": "Startseite",
-  "introduction.federation.home.text": "Beiträge von Leuten, denen du folgst, erscheinen auf deiner Startseite. Du kannst Menschen auf beliebigen Servern folgen!",
-  "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.",
-  "introduction.interactions.action": "Tutorial beenden!",
-  "introduction.interactions.favourite.headline": "Favorisieren",
-  "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autoren wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
-  "introduction.interactions.reblog.headline": "Teilen",
-  "introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie teilst.",
-  "introduction.interactions.reply.headline": "Antworten",
-  "introduction.interactions.reply.text": "Du kannst auf die Beiträge anderer antworten. Diese Beiträge werden dann in einer Konversation zusammengefasst.",
-  "introduction.welcome.action": "Lass uns loslegen!",
-  "introduction.welcome.headline": "Erste Schritte",
-  "introduction.welcome.text": "Willkommen im Fediversum! In wenigen Momenten wirst du in der Lage sein Nachrichten zu versenden und mit deinen Freunden von anderen Servern in Kontakt zu treten. Aber dieser Server, {domain}, ist für dich sehr speziell — er hostet dein Profil, also merke dir die Domain.",
   "keyboard_shortcuts.back": "zurück navigieren",
   "keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen",
   "keyboard_shortcuts.boost": "teilen",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "In der Spalte anzeigen",
   "notifications.column_settings.sound": "Ton abspielen",
   "notifications.column_settings.status": "Neue Beiträge:",
+  "notifications.column_settings.unread_markers.category": "Ungelesene Benachrichtigungsmarkierungen",
   "notifications.filter.all": "Alle",
   "notifications.filter.boosts": "Geteilte Beiträge",
   "notifications.filter.favourites": "Favorisierungen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 4ffedfbfb..a8091cd87 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -242,7 +242,7 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Hide {number, plural, one {image} other {images}}",
+        "defaultMessage": "{number, plural, one {Hide image} other {Hide images}}",
         "id": "media_gallery.toggle_visible"
       },
       {
@@ -909,6 +909,10 @@
       {
         "defaultMessage": "Group",
         "id": "account.badges.group"
+      },
+      {
+        "defaultMessage": "Joined {date}",
+        "id": "account.joined"
       }
     ],
     "path": "app/javascript/mastodon/features/account/components/header.json"
@@ -1627,6 +1631,40 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Follow",
+        "id": "account.follow"
+      },
+      {
+        "defaultMessage": "Unfollow",
+        "id": "account.unfollow"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/follow_recommendations/components/account.json"
+  },
+  {
+    "descriptors": [
+      {
+        "defaultMessage": "Follow people you'd like to see posts from! Here are some suggestions.",
+        "id": "follow_recommendations.heading"
+      },
+      {
+        "defaultMessage": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+        "id": "follow_recommendations.lead"
+      },
+      {
+        "defaultMessage": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+        "id": "empty_column.follow_recommendations"
+      },
+      {
+        "defaultMessage": "Done",
+        "id": "follow_recommendations.done"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/follow_recommendations/index.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Authorize",
         "id": "follow_request.authorize"
       },
@@ -1889,12 +1927,12 @@
         "id": "home.hide_announcements"
       },
       {
-        "defaultMessage": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+        "defaultMessage": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
         "id": "empty_column.home"
       },
       {
-        "defaultMessage": "the public timeline",
-        "id": "empty_column.home.public_timeline"
+        "defaultMessage": "See some suggestions",
+        "id": "empty_column.home.suggestions"
       }
     ],
     "path": "app/javascript/mastodon/features/home_timeline/index.json"
@@ -1902,79 +1940,6 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "First steps",
-        "id": "introduction.welcome.headline"
-      },
-      {
-        "defaultMessage": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
-        "id": "introduction.welcome.text"
-      },
-      {
-        "defaultMessage": "Let's go!",
-        "id": "introduction.welcome.action"
-      },
-      {
-        "defaultMessage": "Home",
-        "id": "introduction.federation.home.headline"
-      },
-      {
-        "defaultMessage": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-        "id": "introduction.federation.home.text"
-      },
-      {
-        "defaultMessage": "Local",
-        "id": "introduction.federation.local.headline"
-      },
-      {
-        "defaultMessage": "Public posts from people on the same server as you will appear in the local timeline.",
-        "id": "introduction.federation.local.text"
-      },
-      {
-        "defaultMessage": "Federated",
-        "id": "introduction.federation.federated.headline"
-      },
-      {
-        "defaultMessage": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-        "id": "introduction.federation.federated.text"
-      },
-      {
-        "defaultMessage": "Next",
-        "id": "introduction.federation.action"
-      },
-      {
-        "defaultMessage": "Reply",
-        "id": "introduction.interactions.reply.headline"
-      },
-      {
-        "defaultMessage": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-        "id": "introduction.interactions.reply.text"
-      },
-      {
-        "defaultMessage": "Boost",
-        "id": "introduction.interactions.reblog.headline"
-      },
-      {
-        "defaultMessage": "You can share other people's toots with your followers by boosting them.",
-        "id": "introduction.interactions.reblog.text"
-      },
-      {
-        "defaultMessage": "Favourite",
-        "id": "introduction.interactions.favourite.headline"
-      },
-      {
-        "defaultMessage": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-        "id": "introduction.interactions.favourite.text"
-      },
-      {
-        "defaultMessage": "Finish toot-orial!",
-        "id": "introduction.interactions.action"
-      }
-    ],
-    "path": "app/javascript/mastodon/features/introduction/index.json"
-  },
-  {
-    "descriptors": [
-      {
         "defaultMessage": "Keyboard Shortcuts",
         "id": "keyboard_shortcuts.heading"
       },
@@ -2285,6 +2250,10 @@
         "id": "notifications.permission_required"
       },
       {
+        "defaultMessage": "Unread notification markers",
+        "id": "notifications.column_settings.unread_markers.category"
+      },
+      {
         "defaultMessage": "Quick filter bar",
         "id": "notifications.column_settings.filter_bar.category"
       },
@@ -2456,7 +2425,7 @@
         "id": "notifications.mark_as_read"
       },
       {
-        "defaultMessage": "You don't have any notifications yet. Interact with others to start the conversation.",
+        "defaultMessage": "You don't have any notifications yet. When other people interact with you, you will see it here.",
         "id": "empty_column.notifications"
       }
     ],
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 7b7373165..7e6fc095a 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -4,13 +4,13 @@
   "account.badges.bot": "Μποτ",
   "account.badges.group": "Ομάδα",
   "account.block": "Αποκλεισμός @{name}",
-  "account.block_domain": "Απόκρυψη όλων από {domain}",
+  "account.block_domain": "Αποκλεισμός {domain}",
   "account.blocked": "Αποκλεισμένος/η",
   "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ",
-  "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης",
-  "account.direct": "Προσωπικό μήνυμα προς @{name}",
+  "account.cancel_follow_request": "Ακύρωση αιτήματος ακολούθησης",
+  "account.direct": "Άμεσο μήνυμα προς @{name}",
   "account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}",
-  "account.domain_blocked": "Κρυμμένος τομέας",
+  "account.domain_blocked": "Ο τομέας αποκλείστηκε",
   "account.edit_profile": "Επεξεργασία προφίλ",
   "account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}",
   "account.endorse": "Προβολή στο προφίλ",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.",
   "account.follows_you": "Σε ακολουθεί",
   "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}",
+  "account.joined": "Μέλος από τις {date}",
   "account.last_status": "Τελευταία δραστηριότητα",
   "account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου ελέχθηκε την {date}",
   "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού είναι κλειδωμένη. Ο ιδιοκτήτης επιβεβαιώνει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.",
   "empty_column.favourited_statuses": "Δεν έχεις κανένα αγαπημένο τουτ ακόμα. Μόλις αγαπήσεις κάποιο, θα εμφανιστεί εδώ.",
   "empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
   "empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.",
   "empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
-  "empty_column.home.public_timeline": "η δημόσια ροή",
+  "empty_column.home.suggestions": "Ορίστε μερικές προτάσεις",
   "empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
   "empty_column.lists": "Δεν έχεις καμία λίστα ακόμα. Μόλις φτιάξεις μια, θα εμφανιστεί εδώ.",
   "empty_column.mutes": "Δεν έχεις αποσιωπήσει κανένα χρήστη ακόμα.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.",
   "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο",
   "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος",
+  "follow_recommendations.done": "Ολοκληρώθηκε",
+  "follow_recommendations.heading": "Ακολουθήστε άτομα από τα οποία θα θέλατε να βλέπετε δημοσιεύσεις! Ορίστε μερικές προτάσεις.",
+  "follow_recommendations.lead": "Οι αναρτήσεις των ατόμων που ακολουθείτε θα εμφανίζονται με χρονολογική σειρά στη ροή σας. Μη φοβάστε να κάνετε λάθη, καθώς μπορείτε πολύ εύκολα να σταματήσετε να ακολουθείτε άλλα άτομα οποιαδήποτε στιγμή!",
   "follow_request.authorize": "Ενέκρινε",
   "follow_request.reject": "Απέρριψε",
   "follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, οι διαχειριστές του {domain} θεώρησαν πως ίσως να θέλεις να ελέγξεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
   "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
   "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
-  "introduction.federation.action": "Επόμενο",
-  "introduction.federation.federated.headline": "Ομοσπονδιακή",
-  "introduction.federation.federated.text": "Οι δημόσιες αναρτήσεις από άλλους κόμβους του fediverse θα εμφανίζονται στην ομοσπονδιακή ροή.",
-  "introduction.federation.home.headline": "Αρχική",
-  "introduction.federation.home.text": "Οι αναρτήσεις όσων ακολουθείς θα εμφανίζονται στην αρχική ροή. Μπορείς να ακολουθήσεις όποιον θέλεις σε οποιονδήποτε κόμβο!",
-  "introduction.federation.local.headline": "Τοπική",
-  "introduction.federation.local.text": "Οι δημόσιες αναρτήσεις από άτομα στον ίδιο κόμβο με εσένα θα εμφανίζονται στην τοπική ροή.",
-  "introduction.interactions.action": "Τέλος μαθήματος!",
-  "introduction.interactions.favourite.headline": "Αγαπημένο",
-  "introduction.interactions.favourite.text": "Φύλαξε ένα τουτ για αργότερα και να ειδοποιήσεις τον δημιουργό του ότι σου άρεσε σημειώνοντας το ως αγαπημένο.",
-  "introduction.interactions.reblog.headline": "Προώθηση",
-  "introduction.interactions.reblog.text": "Μοιράσου τουτ άλλων χρηστών με όσους σε ακολουθούν προωθώντας τα.",
-  "introduction.interactions.reply.headline": "Απάντηση",
-  "introduction.interactions.reply.text": "Μπορείς να απαντήσεις στα τουτ άλλων αλλά ακόμα και στα δικά σου, δένοντας τα όλα μαζί σε μια συζήτηση.",
-  "introduction.welcome.action": "Ας ξεκινήσουμε!",
-  "introduction.welcome.headline": "Πρώτα βήματα",
-  "introduction.welcome.text": "Καλώς ήρθες στο fediverse! Σε πολύ λίγο θα μπορείς να στέλνεις δημοσιεύσεις και να μιλάς με τους φίλους σου σε πολλούς, διαφορετικούς κόμβους. Ο κόμβος {domain} όμως είναι ξεχωριστός — φιλοξενεί τον λογαριασμό σου, για αυτό να θυμάσαι το όνομά του.",
   "keyboard_shortcuts.back": "επιστροφή",
   "keyboard_shortcuts.blocked": "άνοιγμα λίστας αποκλεισμένων χρηστών",
   "keyboard_shortcuts.boost": "προώθηση",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Εμφάνισε σε στήλη",
   "notifications.column_settings.sound": "Ηχητική ειδοποίηση",
   "notifications.column_settings.status": "Νέα τουτ:",
+  "notifications.column_settings.unread_markers.category": "Δείκτες μη αναγνωσμένων ειδοποιήσεων",
   "notifications.filter.all": "Όλες",
   "notifications.filter.boosts": "Προωθήσεις",
   "notifications.filter.favourites": "Αγαπημένα",
@@ -337,11 +326,11 @@
   "notifications.grant_permission": "Χορήγηση άδειας.",
   "notifications.group": "{count} ειδοποιήσεις",
   "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
+  "notifications.permission_denied": "Οι ειδοποιήσεις στην επιφάνεια εργασίας δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας",
+  "notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων της επιφάνειας εργασίας, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί νωρίτερα",
   "notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.",
   "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.how_to_control": "Για να λαμβάνετε ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποιήστε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείτε να ελέγξετε με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.",
   "notifications_permission_banner.title": "Μη χάσετε τίποτα",
   "picture_in_picture.restore": "Επαναφορά",
   "poll.closed": "Κλειστή",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 5bea4e816..b43690c3a 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Mute notifications from @{name}",
   "account.muted": "Muted",
   "account.never_active": "Never",
-  "account.posts": "Toots",
-  "account.posts_with_replies": "Toots and replies",
+  "account.posts": "Posts",
+  "account.posts_with_replies": "Posts and replies",
   "account.report": "Report @{name}",
   "account.requested": "Awaiting approval. Click to cancel follow request",
   "account.share": "Share @{name}'s profile",
   "account.show_reblogs": "Show boosts from @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Post} other {{counter} Posts}}",
   "account.unblock": "Unblock @{name}",
   "account.unblock_domain": "Unblock domain {domain}",
   "account.unendorse": "Don't feature on profile",
@@ -71,7 +72,7 @@
   "column.lists": "Lists",
   "column.mutes": "Muted users",
   "column.notifications": "Notifications",
-  "column.pins": "Pinned toots",
+  "column.pins": "Pinned posts",
   "column.public": "Federated timeline",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
@@ -88,9 +89,9 @@
   "community.column_settings.local_only": "Local only",
   "community.column_settings.media_only": "Media Only",
   "community.column_settings.remote_only": "Remote only",
-  "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users.",
+  "compose_form.direct_message_warning": "This post will only be sent to the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
-  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
   "compose_form.lock_disclaimer.lock": "locked",
   "compose_form.placeholder": "What's on your mind?",
@@ -105,15 +106,15 @@
   "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
   "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
   "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
-  "compose_form.spoiler.marked": "Text is hidden behind warning",
-  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler.marked": "Remove content warning",
+  "compose_form.spoiler.unmarked": "Add content warning",
   "compose_form.spoiler_placeholder": "Write your warning here",
   "confirmation_modal.cancel": "Cancel",
   "confirmations.block.block_and_report": "Block & Report",
   "confirmations.block.confirm": "Block",
   "confirmations.block.message": "Are you sure you want to block {name}?",
   "confirmations.delete.confirm": "Delete",
-  "confirmations.delete.message": "Are you sure you want to delete this toot?",
+  "confirmations.delete.message": "Are you sure you want to delete this post?",
   "confirmations.delete_list.confirm": "Delete",
   "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
   "confirmations.domain_block.confirm": "Block entire domain",
@@ -124,7 +125,7 @@
   "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
-  "confirmations.redraft.message": "Are you sure you want to delete this toot and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
   "confirmations.reply.confirm": "Reply",
   "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
   "confirmations.unfollow.confirm": "Unfollow",
@@ -137,7 +138,7 @@
   "directory.local": "From {domain} only",
   "directory.new_arrivals": "New arrivals",
   "directory.recently_active": "Recently active",
-  "embed.instructions": "Embed this toot on your website by copying the code below.",
+  "embed.instructions": "Embed this post on your website by copying the code below.",
   "embed.preview": "Here is what it will look like:",
   "emoji_button.activity": "Activity",
   "emoji_button.custom": "Custom",
@@ -154,23 +155,24 @@
   "emoji_button.symbols": "Symbols",
   "emoji_button.travel": "Travel & Places",
   "empty_column.account_suspended": "Account suspended",
-  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_timeline": "No posts here!",
   "empty_column.account_unavailable": "Profile unavailable",
   "empty_column.blocks": "You haven't blocked any users yet.",
-  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.",
   "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
   "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
   "empty_column.domain_blocks": "There are no blocked domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.favourited_statuses": "You don't have any favourite posts yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this post yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
-  "empty_column.list": "There is nothing in this list yet. When members of this list post new toots, they will appear here.",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
+  "empty_column.list": "There is nothing in this list yet. When members of this list publish new posts, 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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -178,6 +180,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -207,57 +212,40 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish tutorial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
-  "keyboard_shortcuts.back": "to navigate back",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
-  "keyboard_shortcuts.boost": "to boost",
-  "keyboard_shortcuts.column": "to focus a toot in one of the columns",
-  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.back": "Navigate back",
+  "keyboard_shortcuts.blocked": "Open blocked users list",
+  "keyboard_shortcuts.boost": "Boost post",
+  "keyboard_shortcuts.column": "Focus column",
+  "keyboard_shortcuts.compose": "Focus compose textarea",
   "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.direct": "to open direct messages column",
-  "keyboard_shortcuts.down": "to move down in the list",
-  "keyboard_shortcuts.enter": "to open toot",
-  "keyboard_shortcuts.favourite": "to favourite",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.direct": "Open direct messages column",
+  "keyboard_shortcuts.down": "Move down in the list",
+  "keyboard_shortcuts.enter": "Open post",
+  "keyboard_shortcuts.favourite": "Favourite post",
+  "keyboard_shortcuts.favourites": "Open favourites list",
+  "keyboard_shortcuts.federated": "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.open_media": "to open media",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
-  "keyboard_shortcuts.reply": "to reply",
-  "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
-  "keyboard_shortcuts.toot": "to start a brand new toot",
-  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
-  "keyboard_shortcuts.up": "to move up in the list",
+  "keyboard_shortcuts.legend": "Display this legend",
+  "keyboard_shortcuts.local": "Open local timeline",
+  "keyboard_shortcuts.mention": "Mention author",
+  "keyboard_shortcuts.muted": "Open muted users list",
+  "keyboard_shortcuts.my_profile": "Open your profile",
+  "keyboard_shortcuts.notifications": "Open notifications column",
+  "keyboard_shortcuts.open_media": "Open media",
+  "keyboard_shortcuts.pinned": "Open pinned posts list",
+  "keyboard_shortcuts.profile": "Open author's profile",
+  "keyboard_shortcuts.reply": "Reply to post",
+  "keyboard_shortcuts.requests": "Open follow requests list",
+  "keyboard_shortcuts.search": "Focus search bar",
+  "keyboard_shortcuts.spoilers": "Show/hide CW field",
+  "keyboard_shortcuts.start": "Open “get started” column",
+  "keyboard_shortcuts.toggle_hidden": "Show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "Show/hide media",
+  "keyboard_shortcuts.toot": "Start a new post",
+  "keyboard_shortcuts.unfocus": "Unfocus compose textarea/search",
+  "keyboard_shortcuts.up": "Move up in the list",
   "lightbox.close": "Close",
   "lightbox.compress": "Compress image view box",
   "lightbox.expand": "Expand image view box",
@@ -278,7 +266,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -288,7 +276,7 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.bookmarks": "Bookmarks",
   "navigation_bar.community_timeline": "Local timeline",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Compose new post",
   "navigation_bar.direct": "Direct messages",
   "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Blocked domains",
@@ -304,17 +292,17 @@
   "navigation_bar.logout": "Logout",
   "navigation_bar.mutes": "Muted users",
   "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.pins": "Pinned posts",
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.favourite": "{name} favourited your toot",
+  "notification.favourite": "{name} favourited your post",
   "notification.follow": "{name} followed you",
   "notification.follow_request": "{name} has requested to follow you",
   "notification.mention": "{name} mentioned you",
   "notification.own_poll": "Your poll has ended",
   "notification.poll": "A poll you have voted in has ended",
-  "notification.reblog": "{name} boosted your toot",
+  "notification.reblog": "{name} boosted your post",
   "notification.status": "{name} just posted",
   "notifications.clear": "Clear notifications",
   "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
@@ -331,7 +319,8 @@
   "notifications.column_settings.reblog": "Boosts:",
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
-  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.status": "New posts:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
@@ -357,7 +346,7 @@
   "poll.voted": "You voted for this answer",
   "poll_button.add_poll": "Add a poll",
   "poll_button.remove_poll": "Remove poll",
-  "privacy.change": "Adjust toot privacy",
+  "privacy.change": "Change post privacy",
   "privacy.direct.long": "Visible for mentioned users only",
   "privacy.direct.short": "Direct",
   "privacy.private.long": "Visible for followers only",
@@ -384,23 +373,23 @@
   "report.target": "Reporting {target}",
   "search.placeholder": "Search",
   "search_popout.search_format": "Advanced search format",
-  "search_popout.tips.full_text": "Simple text returns toots you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.full_text": "Simple text returns posts you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
   "search_popout.tips.hashtag": "hashtag",
-  "search_popout.tips.status": "toot",
+  "search_popout.tips.status": "post",
   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
   "search_popout.tips.user": "user",
   "search_results.accounts": "People",
   "search_results.hashtags": "Hashtags",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses": "Posts",
+  "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.",
   "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
   "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this toot 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",
   "status.cannot_reblog": "This post cannot be boosted",
-  "status.copy": "Copy link to toot",
+  "status.copy": "Copy link to post",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -413,14 +402,14 @@
   "status.more": "More",
   "status.mute": "Mute @{name}",
   "status.mute_conversation": "Mute conversation",
-  "status.open": "Expand this toot",
+  "status.open": "Expand this post",
   "status.pin": "Pin on profile",
-  "status.pinned": "Pinned toot",
+  "status.pinned": "Pinned post",
   "status.read_more": "Read more",
   "status.reblog": "Boost",
   "status.reblog_private": "Boost with original visibility",
   "status.reblogged_by": "{name} boosted",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.",
   "status.redraft": "Delete & re-draft",
   "status.remove_bookmark": "Remove bookmark",
   "status.reply": "Reply",
@@ -451,7 +440,7 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
   "timeline_hint.resources.followers": "Followers",
   "timeline_hint.resources.follows": "Follows",
-  "timeline_hint.resources.statuses": "Older toots",
+  "timeline_hint.resources.statuses": "Older posts",
   "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
   "trends.trending_now": "Trending now",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 5cff6c5af..11ebc9d97 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -4,15 +4,15 @@
   "account.badges.bot": "Roboto",
   "account.badges.group": "Grupo",
   "account.block": "Bloki @{name}",
-  "account.block_domain": "Bloki {domain}",
+  "account.block_domain": "Bloki domajnon {domain}",
   "account.blocked": "Blokita",
   "account.browse_more_on_origin_server": "Rigardi pli al la originala profilo",
   "account.cancel_follow_request": "Nuligi peton de sekvado",
   "account.direct": "Rekte mesaĝi @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Ĉesu sciigi min kiam @{name} mesaĝi",
   "account.domain_blocked": "Domajno blokita",
   "account.edit_profile": "Redakti profilon",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Sciigi min kiam @{name} mesaĝi",
   "account.endorse": "Montri en profilo",
   "account.follow": "Sekvi",
   "account.followers": "Sekvantoj",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.",
   "account.follows_you": "Sekvas vin",
   "account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Laste aktiva",
   "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}",
   "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Serĉaj rezultoj",
   "emoji_button.symbols": "Simboloj",
   "emoji_button.travel": "Vojaĝoj kaj lokoj",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Konto haltigita",
   "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!",
   "empty_column.account_unavailable": "Profilo ne disponebla",
   "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.",
@@ -159,21 +160,25 @@
   "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
   "empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.",
   "empty_column.favourites": "Ankoraŭ neniu stelumis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.",
   "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.",
   "empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.",
-  "empty_column.home.public_timeline": "la publikan tempolinion",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn mesaĝojn, ili aperos ĉi tie.",
   "empty_column.lists": "Vi ankoraŭ ne havas liston. Kiam vi kreos iun, ĝi aperos ĉi tie.",
   "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.",
   "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.",
   "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion",
   "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Ĉi tiu paĝo ne povis esti montrita ĝuste. Ĉi tiu eraro probable estas kaŭzita de retumila aldonaĵo aŭ aŭtomataj tradukiloj.",
   "error.unexpected_crash.next_steps": "Provu refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Provu malaktivigi ilin kaj tiam refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.",
   "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo",
   "errors.unexpected_crash.report_issue": "Raporti problemon",
+  "follow_recommendations.done": "Farita",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Rajtigi",
   "follow_request.reject": "Rifuzi",
   "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}",
   "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}",
-  "introduction.federation.action": "Sekva",
-  "introduction.federation.federated.headline": "Fratara",
-  "introduction.federation.federated.text": "Publikaj mesaĝoj el aliaj serviloj de la Fediverse aperos en la fratara tempolinio.",
-  "introduction.federation.home.headline": "Hejmo",
-  "introduction.federation.home.text": "Mesaĝoj de homoj, kiujn vi sekvas, aperos en via hejma fluo. Vi povas sekvi iun ajn de ajna servilo!",
-  "introduction.federation.local.headline": "Loka",
-  "introduction.federation.local.text": "Publikaj mesaĝoj de homoj de via servilo aperos en la loka tempolinio.",
-  "introduction.interactions.action": "Fini la lernilon!",
-  "introduction.interactions.favourite.headline": "Stelumi",
-  "introduction.interactions.favourite.text": "Vi povas konservi mesaĝon por posta uzo, kaj sciigi al ĝia aŭtoro ke vi ŝatis ĝin, per stelumo.",
-  "introduction.interactions.reblog.headline": "Diskonigi",
-  "introduction.interactions.reblog.text": "Vi povas diskonigi mesaĝojn al viaj sekvantoj per diskonigo.",
-  "introduction.interactions.reply.headline": "Respondi",
-  "introduction.interactions.reply.text": "Vi povas respondi al mesaĝoj aliulaj kaj viaj, kio kreos ĉenon de mesaĝoj nomata konversacio.",
-  "introduction.welcome.action": "Ek!",
-  "introduction.welcome.headline": "Unuaj paŝoj",
-  "introduction.welcome.text": "Bonvenon en Fediverse! Tre baldaŭ, vi povos disdoni mesaĝojn kaj paroli al viaj amikoj tra granda servila diverseco. Sed ĉi tiu servilo, {domain}, estas speciala: ĝi enhavas vian profilon, do memoru ĝian nomon.",
   "keyboard_shortcuts.back": "reveni",
   "keyboard_shortcuts.blocked": "malfermi la liston de blokitaj uzantoj",
   "keyboard_shortcuts.boost": "diskonigi",
@@ -255,8 +243,8 @@
   "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon",
   "keyboard_shortcuts.up": "iri supren en la listo",
   "lightbox.close": "Fermi",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Kunpremi bildan vidkeston",
+  "lightbox.expand": "Pligrandigi bildan vidkeston",
   "lightbox.next": "Sekva",
   "lightbox.previous": "Antaŭa",
   "lists.account.add": "Aldoni al la listo",
@@ -266,9 +254,9 @@
   "lists.edit.submit": "Ŝanĝi titolon",
   "lists.new.create": "Aldoni liston",
   "lists.new.title_placeholder": "Titolo de la nova listo",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.followed": "Iu sekvanta uzanto",
+  "lists.replies_policy.list": "Membroj de la listo",
+  "lists.replies_policy.none": "Neniu",
   "lists.replies_policy.title": "Montri respondon al:",
   "lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
   "lists.subheading": "Viaj listoj",
@@ -327,23 +315,24 @@
   "notifications.column_settings.show": "Montri en kolumno",
   "notifications.column_settings.sound": "Eligi sonon",
   "notifications.column_settings.status": "Novaj mesaĝoj:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Ĉiuj",
   "notifications.filter.boosts": "Diskonigoj",
   "notifications.filter.favourites": "Stelumoj",
   "notifications.filter.follows": "Sekvoj",
   "notifications.filter.mentions": "Mencioj",
   "notifications.filter.polls": "Balotenketaj rezultoj",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas",
+  "notifications.grant_permission": "Doni permeson.",
   "notifications.group": "{count} sciigoj",
   "notifications.mark_as_read": "Marki ĉiujn sciigojn legita",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications.permission_denied": "Labortablaj sciigoj ne disponeblas pro peto antaŭe rifuzita de retumiloj",
+  "notifications.permission_denied_alert": "Labortablaj sciigoj ne povas esti ebligitaj, ĉar retumilpermeso antaŭe estis rifuzita",
+  "notifications.permission_required": "Labortablaj sciigoj ne disponeblas ĉar la bezonata permeso ne estis donita.",
   "notifications_permission_banner.enable": "Ebligi retumilajn sciigojn",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.",
   "notifications_permission_banner.title": "Neniam preterlasas iun ajn",
-  "picture_in_picture.restore": "Put it back",
+  "picture_in_picture.restore": "Remetu ĝin",
   "poll.closed": "Finita",
   "poll.refresh": "Aktualigi",
   "poll.total_people": "{count, plural, one {# homo} other {# homoj}}",
@@ -443,7 +432,7 @@
   "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas",
   "time_remaining.moments": "Momenteto restas",
   "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.remote_resource_not_displayed": "{resource} de aliaj serviloj ne estas montrata.",
   "timeline_hint.resources.followers": "Sekvantoj",
   "timeline_hint.resources.follows": "Sekvatoj",
   "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj",
@@ -460,7 +449,7 @@
   "upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi",
   "upload_form.description": "Priskribi por misvidantaj homoj",
   "upload_form.edit": "Redakti",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.thumbnail": "Ŝanĝi etigita bildo",
   "upload_form.undo": "Forigi",
   "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi",
   "upload_modal.analyzing_picture": "Bilda analizado…",
@@ -470,7 +459,7 @@
   "upload_modal.detect_text": "Detekti tekston de la bildo",
   "upload_modal.edit_media": "Redakti aŭdovidaĵon",
   "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "Preparante OSR…",
   "upload_modal.preview_label": "Antaŭvido ({ratio})",
   "upload_progress.label": "Alŝutado…",
   "video.close": "Fermi la videon",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 434382e20..f8453e856 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -9,10 +9,10 @@
   "account.browse_more_on_origin_server": "Explorar más en el perfil original",
   "account.cancel_follow_request": "Cancelar la solicitud de seguimiento",
   "account.direct": "Mensaje directo a @{name}",
-  "account.disable_notifications": "Dejar de notificarme cuando @{name} tootee",
+  "account.disable_notifications": "Dejar de notificarme cuando @{name} envíe mensajes",
   "account.domain_blocked": "Dominio bloqueado",
   "account.edit_profile": "Editar perfil",
-  "account.enable_notifications": "Notificarme cuando @{name} tootee",
+  "account.enable_notifications": "Notificarme cuando @{name} envíe mensajes",
   "account.endorse": "Destacar en el perfil",
   "account.follow": "Seguir",
   "account.followers": "Seguidores",
@@ -21,10 +21,11 @@
   "account.following_counter": "{count, plural, other {{counter} Siguiendo}}",
   "account.follows.empty": "Todavía este usuario no sigue a nadie.",
   "account.follows_you": "Te sigue",
-  "account.hide_reblogs": "Ocultar retoots de @{name}",
+  "account.hide_reblogs": "Ocultar adhesiones de @{name}",
+  "account.joined": "En este servidor desde {date}",
   "account.last_status": "Última actividad",
   "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}",
-  "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.",
+  "account.locked_info": "Esta cuenta es privada. El propietario manualmente revisa quién puede seguirle.",
   "account.media": "Medios",
   "account.mention": "Mencionar a @{name}",
   "account.moved_to": "{name} se ha mudó a:",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Silenciar notificaciones de @{name}",
   "account.muted": "Silenciado",
   "account.never_active": "Nunca",
-  "account.posts": "Toots",
-  "account.posts_with_replies": "Toots y respuestas",
+  "account.posts": "Mensajes",
+  "account.posts_with_replies": "Mensajes y respuestas",
   "account.report": "Denunciar a @{name}",
   "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento",
   "account.share": "Compartir el perfil de @{name}",
-  "account.show_reblogs": "Mostrar retoots de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.show_reblogs": "Mostrar adhesiones de @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Mensaje} other {{counter} Mensajes}}",
   "account.unblock": "Desbloquear a @{name}",
   "account.unblock_domain": "Desbloquear dominio {domain}",
   "account.unendorse": "No destacar en el perfil",
@@ -71,7 +72,7 @@
   "column.lists": "Listas",
   "column.mutes": "Usuarios silenciados",
   "column.notifications": "Notificaciones",
-  "column.pins": "Toots fijados",
+  "column.pins": "Mensajes fijados",
   "column.public": "Línea temporal federada",
   "column_back_button.label": "Volver",
   "column_header.hide_settings": "Ocultar configuración",
@@ -84,11 +85,11 @@
   "community.column_settings.local_only": "Sólo local",
   "community.column_settings.media_only": "Sólo medios",
   "community.column_settings.remote_only": "Sólo remoto",
-  "compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.",
+  "compose_form.direct_message_warning": "Este mensaje sólo será enviado a los usuarios mencionados.",
   "compose_form.direct_message_warning_learn_more": "Aprendé más",
-  "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
-  "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"Sólo para seguidores\".",
-  "compose_form.lock_disclaimer.lock": "bloqueada",
+  "compose_form.hashtag_warning": "Este mensaje no se mostrará bajo ninguna etiqueta porque no es público. Sólo los mensajes públicos se pueden buscar por etiquetas.",
+  "compose_form.lock_disclaimer": "Tu cuenta no es {locked}. Todos pueden seguirte para ver tus mensajes marcados como \"Sólo para seguidores\".",
+  "compose_form.lock_disclaimer.lock": "privada",
   "compose_form.placeholder": "¿Qué onda?",
   "compose_form.poll.add_option": "Agregá una opción",
   "compose_form.poll.duration": "Duración de la encuesta",
@@ -96,20 +97,20 @@
   "compose_form.poll.remove_option": "Quitar esta opción",
   "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples",
   "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción",
-  "compose_form.publish": "Tootear",
+  "compose_form.publish": "Enviar",
   "compose_form.publish_loud": "¡{publish}!",
   "compose_form.sensitive.hide": "Marcar medio como sensible",
   "compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}",
   "compose_form.sensitive.unmarked": "El medio no está marcado como sensible",
-  "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia",
-  "compose_form.spoiler.unmarked": "El texto no está oculto",
+  "compose_form.spoiler.marked": "Quitar advertencia de contenido",
+  "compose_form.spoiler.unmarked": "Agregar advertencia de contenido",
   "compose_form.spoiler_placeholder": "Escribí tu advertencia acá",
   "confirmation_modal.cancel": "Cancelar",
   "confirmations.block.block_and_report": "Bloquear y denunciar",
   "confirmations.block.confirm": "Bloquear",
   "confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?",
   "confirmations.delete.confirm": "Eliminar",
-  "confirmations.delete.message": "¿Estás seguro que querés eliminar este toot?",
+  "confirmations.delete.message": "¿Estás seguro que querés eliminar este mensaje?",
   "confirmations.delete_list.confirm": "Eliminar",
   "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?",
   "confirmations.domain_block.confirm": "Bloquear dominio entero",
@@ -119,8 +120,8 @@
   "confirmations.mute.confirm": "Silenciar",
   "confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.",
   "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?",
-  "confirmations.redraft.confirm": "Eliminar toot original y editarlo",
-  "confirmations.redraft.message": "¿Estás seguro que querés eliminar este toot y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
+  "confirmations.redraft.confirm": "Eliminar mensaje original y editarlo",
+  "confirmations.redraft.message": "¿Estás seguro que querés eliminar este mensaje y volver a editarlo? Se perderán las veces marcadas como favorito y sus adhesiones, y las respuestas al mensaje original quedarán huérfanas.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?",
   "confirmations.unfollow.confirm": "Dejar de seguir",
@@ -133,7 +134,7 @@
   "directory.local": "Sólo de {domain}",
   "directory.new_arrivals": "Recién llegados",
   "directory.recently_active": "Recientemente activos",
-  "embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.",
+  "embed.instructions": "Insertá este mensaje a tu sitio web copiando el código de abajo.",
   "embed.preview": "Así es cómo se verá:",
   "emoji_button.activity": "Actividad",
   "emoji_button.custom": "Personalizado",
@@ -150,23 +151,24 @@
   "emoji_button.symbols": "Símbolos",
   "emoji_button.travel": "Viajes y lugares",
   "empty_column.account_suspended": "Cuenta suspendida",
-  "empty_column.account_timeline": "¡No hay toots acá!",
+  "empty_column.account_timeline": "¡No hay mensajes acá!",
   "empty_column.account_unavailable": "Perfil no disponible",
   "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.",
-  "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
+  "empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
   "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
   "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.",
   "empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
-  "empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.",
-  "empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.",
+  "empty_column.favourited_statuses": "Todavía no tenés mensajes favoritos. Cuando marqués uno como favorito, se mostrará acá.",
+  "empty_column.favourites": "Todavía nadie marcó este mensaje como favorito. Cuando alguien lo haga, se mostrará acá.",
+  "empty_column.follow_recommendations": "Parece que no se pudieron generar sugerencias para vos. Podés intentar buscar gente que conozcas o explorar las tendencias de las etiquetas.",
   "empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.",
   "empty_column.hashtag": "Todavía no hay nada con esta etiqueta.",
-  "empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.",
-  "empty_column.home.public_timeline": "la línea temporal pública",
-  "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.",
+  "empty_column.home": "¡Tu línea temporal principal está vacía! Seguí a más cuentas para llenarla. {suggestions}",
+  "empty_column.home.suggestions": "Mirá algunas sugerencias",
+  "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos mensaje, se mostrarán acá.",
   "empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.",
   "empty_column.mutes": "Todavía no silenciaste a ningún usuario.",
-  "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.",
+  "empty_column.notifications": "Todavía no tenés ninguna notificación. Cuando otras cuentas interactúen con vos, vas a ver la notificación acá.",
   "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal",
   "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.",
   "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente es causado por un complemento del navegador web o por herramientas de traducción automática.",
@@ -174,9 +176,12 @@
   "error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles",
   "errors.unexpected_crash.report_issue": "Informar problema",
+  "follow_recommendations.done": "Listo",
+  "follow_recommendations.heading": "¡Seguí cuentas cuyos mensajes te gustaría ver! Acá tenés algunas sugerencias.",
+  "follow_recommendations.lead": "Los mensajes de las cuentas que seguís aparecerán en orden cronológico en la columna \"Inicio\". No tengás miedo de meter la pata, ¡podés dejar de seguir cuentas fácilmente en cualquier momento!",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
-  "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no está bloqueada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.",
+  "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.",
   "generic.saved": "Guardado",
   "getting_started.developers": "Desarrolladores",
   "getting_started.directory": "Directorio de perfiles",
@@ -196,64 +201,47 @@
   "hashtag.column_settings.tag_mode.none": "Ninguna de estas",
   "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna",
   "home.column_settings.basic": "Básico",
-  "home.column_settings.show_reblogs": "Mostrar retoots",
+  "home.column_settings.show_reblogs": "Mostrar adhesiones",
   "home.column_settings.show_replies": "Mostrar respuestas",
   "home.hide_announcements": "Ocultar anuncios",
   "home.show_announcements": "Mostrar anuncios",
   "intervals.full.days": "{number, plural, one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
-  "introduction.federation.action": "Siguiente",
-  "introduction.federation.federated.headline": "Federada",
-  "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.",
-  "introduction.federation.home.headline": "Principal",
-  "introduction.federation.home.text": "Los toots de las cuentas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Los toots públicos de las cuentas en el mismo servidor aparecerán en la línea temporal local.",
-  "introduction.interactions.action": "¡Terminar tutorial!",
-  "introduction.interactions.favourite.headline": "Favoritos",
-  "introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.",
-  "introduction.interactions.reblog.headline": "Retootear",
-  "introduction.interactions.reblog.text": "Podés compartir los toots de otras cuentas con tus seguidores retooteando los mismos.",
-  "introduction.interactions.reply.headline": "Responder",
-  "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras cuentas, que se encadenarán juntos en una conversación.",
-  "introduction.welcome.action": "¡Dale!",
-  "introduction.welcome.headline": "Primeros pasos",
-  "introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.",
-  "keyboard_shortcuts.back": "para volver",
-  "keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados",
-  "keyboard_shortcuts.boost": "para retootear",
-  "keyboard_shortcuts.column": "para enfocar un toot en una de las columnas",
-  "keyboard_shortcuts.compose": "para enfocar el área de texto de redacción",
+  "keyboard_shortcuts.back": "Volver",
+  "keyboard_shortcuts.blocked": "Abrir lista de usuarios bloqueados",
+  "keyboard_shortcuts.boost": "Adherir al mensaje",
+  "keyboard_shortcuts.column": "Enfocar columna",
+  "keyboard_shortcuts.compose": "Enfocar el área de texto de redacción",
   "keyboard_shortcuts.description": "Descripción",
-  "keyboard_shortcuts.direct": "para abrir columna de mensajes directos",
-  "keyboard_shortcuts.down": "para bajar en la lista",
-  "keyboard_shortcuts.enter": "para abrir el toot",
-  "keyboard_shortcuts.favourite": "para marcar como favorito",
-  "keyboard_shortcuts.favourites": "para abrir la lista de favoritos",
-  "keyboard_shortcuts.federated": "para abrir la línea temporal federada",
+  "keyboard_shortcuts.direct": "Abrir columna de mensajes directos",
+  "keyboard_shortcuts.down": "Bajar en la lista",
+  "keyboard_shortcuts.enter": "Abrir mensaje",
+  "keyboard_shortcuts.favourite": "Marcar mensaje como favorito",
+  "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
+  "keyboard_shortcuts.federated": "Abrir línea temporal federada",
   "keyboard_shortcuts.heading": "Atajos de teclado",
-  "keyboard_shortcuts.home": "para abrir la línea temporal principal",
-  "keyboard_shortcuts.hotkey": "Combinación",
-  "keyboard_shortcuts.legend": "para mostrar este texto",
-  "keyboard_shortcuts.local": "para abrir la línea temporal local",
-  "keyboard_shortcuts.mention": "para mencionar al autor",
-  "keyboard_shortcuts.muted": "para abrir la lista de usuarios silenciados",
-  "keyboard_shortcuts.my_profile": "para abrir tu perfil",
-  "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones",
-  "keyboard_shortcuts.open_media": "para abrir los archivos de medios",
-  "keyboard_shortcuts.pinned": "para abrir la lista de toots fijados",
-  "keyboard_shortcuts.profile": "para abrir el perfil del autor",
-  "keyboard_shortcuts.reply": "para responder",
-  "keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento",
-  "keyboard_shortcuts.search": "para enfocar la búsqueda",
-  "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo \"CW\"",
-  "keyboard_shortcuts.start": "para abrir la columna \"Introducción\"",
-  "keyboard_shortcuts.toggle_hidden": "para mostrar/ocultar el texto detrás de la advertencia de contenido",
-  "keyboard_shortcuts.toggle_sensitivity": "para mostrar/ocultar los medios",
-  "keyboard_shortcuts.toot": "para comenzar un toot nuevo",
-  "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda",
-  "keyboard_shortcuts.up": "para subir en la lista",
+  "keyboard_shortcuts.home": "Abrir línea temporal principal",
+  "keyboard_shortcuts.hotkey": "Atajo",
+  "keyboard_shortcuts.legend": "Mostrar este texto",
+  "keyboard_shortcuts.local": "Abrirlínea temporal local",
+  "keyboard_shortcuts.mention": "Mencionar al autor",
+  "keyboard_shortcuts.muted": "Abrir lista de usuarios silenciados",
+  "keyboard_shortcuts.my_profile": "Abrir tu perfil",
+  "keyboard_shortcuts.notifications": "Abrir columna de notificaciones",
+  "keyboard_shortcuts.open_media": "Abrir archivos de medios",
+  "keyboard_shortcuts.pinned": "Abrir lista de mensajes fijados",
+  "keyboard_shortcuts.profile": "Abrir perfil del autor",
+  "keyboard_shortcuts.reply": "Responder al mensaje",
+  "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
+  "keyboard_shortcuts.search": "Enfocar barra de búsqueda",
+  "keyboard_shortcuts.spoilers": "Mostrar/ocultar campo de advertencia de contenido (\"CW\")",
+  "keyboard_shortcuts.start": "Abrir columna \"Introducción\"",
+  "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de la advertencia de contenido (\"CW\")",
+  "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar medios",
+  "keyboard_shortcuts.toot": "Comenzar un mensaje nuevo",
+  "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda",
+  "keyboard_shortcuts.up": "Subir en la lista",
   "lightbox.close": "Cerrar",
   "lightbox.compress": "Comprimir cuadro de vista de imagen",
   "lightbox.expand": "Expandir cuadro de vista de imagen",
@@ -265,7 +253,7 @@
   "lists.edit": "Editar lista",
   "lists.edit.submit": "Cambiar título",
   "lists.new.create": "Agregar lista",
-  "lists.new.title_placeholder": "Nuevo título de lista",
+  "lists.new.title_placeholder": "Título de nueva lista",
   "lists.replies_policy.followed": "Cualquier cuenta seguida",
   "lists.replies_policy.list": "Miembros de la lista",
   "lists.replies_policy.none": "Nadie",
@@ -284,7 +272,7 @@
   "navigation_bar.blocks": "Usuarios bloqueados",
   "navigation_bar.bookmarks": "Marcadores",
   "navigation_bar.community_timeline": "Línea temporal local",
-  "navigation_bar.compose": "Redactar un nuevo toot",
+  "navigation_bar.compose": "Redactar un nuevo mensaje",
   "navigation_bar.direct": "Mensajes directos",
   "navigation_bar.discover": "Descubrir",
   "navigation_bar.domain_blocks": "Dominios bloqueados",
@@ -293,24 +281,24 @@
   "navigation_bar.filters": "Palabras silenciadas",
   "navigation_bar.follow_requests": "Solicitudes de seguimiento",
   "navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores",
-  "navigation_bar.info": "Acerca de este servidor",
+  "navigation_bar.info": "Este servidor",
   "navigation_bar.keyboard_shortcuts": "Atajos",
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Cerrar sesión",
   "navigation_bar.mutes": "Usuarios silenciados",
   "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Toots fijados",
+  "navigation_bar.pins": "Mensajes fijados",
   "navigation_bar.preferences": "Configuración",
   "navigation_bar.public_timeline": "Línea temporal federada",
   "navigation_bar.security": "Seguridad",
-  "notification.favourite": "{name} marcó tu toot como favorito",
+  "notification.favourite": "{name} marcó tu mensaje como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.follow_request": "{name} solicitó seguirte",
   "notification.mention": "{name} te mencionó",
   "notification.own_poll": "Tu encuesta finalizó",
   "notification.poll": "Finalizó una encuesta en la que votaste",
-  "notification.reblog": "{name} retooteó tu estado",
-  "notification.status": "{name} acaba de tootear",
+  "notification.reblog": "{name} adhirió a tu mensaje",
+  "notification.status": "{name} acaba de enviar un mensaje",
   "notifications.clear": "Limpiar notificaciones",
   "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?",
   "notifications.column_settings.alert": "Notificaciones de escritorio",
@@ -323,12 +311,13 @@
   "notifications.column_settings.mention": "Menciones:",
   "notifications.column_settings.poll": "Resultados de la encuesta:",
   "notifications.column_settings.push": "Notificaciones push",
-  "notifications.column_settings.reblog": "Retoots:",
+  "notifications.column_settings.reblog": "Adhesiones:",
   "notifications.column_settings.show": "Mostrar en columna",
   "notifications.column_settings.sound": "Reproducir sonido",
-  "notifications.column_settings.status": "Nuevos toots:",
+  "notifications.column_settings.status": "Nuevos mensajes:",
+  "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas",
   "notifications.filter.all": "Todas",
-  "notifications.filter.boosts": "Retoots",
+  "notifications.filter.boosts": "Adhesiones",
   "notifications.filter.favourites": "Favoritos",
   "notifications.filter.follows": "Seguidores",
   "notifications.filter.mentions": "Menciones",
@@ -350,13 +339,13 @@
   "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
   "poll.vote": "Votar",
   "poll.voted": "Votaste esta opción",
-  "poll_button.add_poll": "Agregar una encuesta",
+  "poll_button.add_poll": "Agregar encuesta",
   "poll_button.remove_poll": "Quitar encuesta",
-  "privacy.change": "Configurar privacidad de toot",
-  "privacy.direct.long": "Visible sólo a los usuarios mencionados",
+  "privacy.change": "Configurar privacidad del mensaje",
+  "privacy.direct.long": "Visible sólo para los usuarios mencionados",
   "privacy.direct.short": "Directo",
-  "privacy.private.long": "Visible sólo a los seguidores",
-  "privacy.private.short": "Sólo a seguidores",
+  "privacy.private.long": "Visible sólo para los seguidores",
+  "privacy.private.short": "Sólo para seguidores",
   "privacy.public.long": "Visible para todos, mostrado en las líneas temporales públicas",
   "privacy.public.short": "Público",
   "privacy.unlisted.long": "Visible para todos, pero no en las líneas temporales públicas",
@@ -366,39 +355,39 @@
   "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
-  "relative_time.just_now": "recién",
+  "relative_time.just_now": "ahora",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
   "relative_time.today": "hoy",
   "reply_indicator.cancel": "Cancelar",
   "report.forward": "Reenviar a {target}",
   "report.forward_hint": "La cuenta es de otro servidor. ¿Querés enviar una copia anonimizada del informe también ahí?",
-  "report.hint": "La denuncia se enviará a los moderadores de tu servidor. Podés proporcionar una explicación de por qué estás denunciando esta cuenta, a continuación:",
+  "report.hint": "La denuncia se enviará a los moderadores de tu servidor. A continuación, podés proporcionar una explicación de por qué estás denunciando esta cuenta:",
   "report.placeholder": "Comentarios adicionales",
   "report.submit": "Enviar",
   "report.target": "Denunciando a {target}",
   "search.placeholder": "Buscar",
   "search_popout.search_format": "Formato de búsqueda avanzada",
-  "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los toots que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.",
+  "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los mensajes que escribiste, los marcados como favoritos, los adheridos o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.",
   "search_popout.tips.hashtag": "etiqueta",
-  "search_popout.tips.status": "toot",
+  "search_popout.tips.status": "mensaje",
   "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan",
   "search_popout.tips.user": "usuario",
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Etiquetas",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.",
+  "search_results.statuses": "Mensajes",
+  "search_results.statuses_fts_disabled": "No se pueden buscar mensajes por contenido en este servidor de Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
   "status.admin_account": "Abrir interface de moderación para @{name}",
-  "status.admin_status": "Abrir este toot en la interface de moderación",
+  "status.admin_status": "Abrir este mensaje en la interface de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Marcar",
-  "status.cancel_reblog_private": "Quitar retoot",
-  "status.cannot_reblog": "No se puede retootear este toot",
-  "status.copy": "Copiar enlace al toot",
+  "status.cancel_reblog_private": "Quitar adhesión",
+  "status.cannot_reblog": "No se puede adherir a este mensaje",
+  "status.copy": "Copiar enlace al mensaje",
   "status.delete": "Eliminar",
   "status.detailed_status": "Vista de conversación detallada",
-  "status.direct": "Mensaje directo a @{name}",
+  "status.direct": "Mensaje directo para @{name}",
   "status.embed": "Insertar",
   "status.favourite": "Marcar como favorito",
   "status.filtered": "Filtrado",
@@ -408,15 +397,15 @@
   "status.more": "Más",
   "status.mute": "Silenciar a @{name}",
   "status.mute_conversation": "Silenciar conversación",
-  "status.open": "Expandir este toot",
+  "status.open": "Expandir este mensaje",
   "status.pin": "Fijar en el perfil",
-  "status.pinned": "Toot fijado",
+  "status.pinned": "Mensaje fijado",
   "status.read_more": "Leé más",
-  "status.reblog": "Retootear",
-  "status.reblog_private": "Retootear a la audiencia original",
-  "status.reblogged_by": "{name} retooteó",
-  "status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.",
-  "status.redraft": "Eliminar toot original y editarlo",
+  "status.reblog": "Adherir",
+  "status.reblog_private": "Adherir a la audiencia original",
+  "status.reblogged_by": "{name} adhirió",
+  "status.reblogs.empty": "Todavía nadie adhirió a este mensaje. Cuando alguien lo haga, se mostrará acá.",
+  "status.redraft": "Eliminar mensaje original y editarlo",
   "status.remove_bookmark": "Quitar marcador",
   "status.reply": "Responder",
   "status.replyAll": "Responder al hilo",
@@ -443,10 +432,10 @@
   "time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}",
   "time_remaining.moments": "Momentos restantes",
   "time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}",
-  "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.",
-  "timeline_hint.resources.followers": "Seguidores",
-  "timeline_hint.resources.follows": "Siguiendo",
-  "timeline_hint.resources.statuses": "Toots antiguos",
+  "timeline_hint.remote_resource_not_displayed": "{resource} desde otros servidores no se muestran.",
+  "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}} hablando",
   "trends.trending_now": "Tendencia ahora",
   "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
@@ -454,7 +443,7 @@
   "units.short.million": "{count}M",
   "units.short.thousand": "{count}mil",
   "upload_area.title": "Para subir, arrastrá y soltá",
-  "upload_button.label": "Agregá imágenes o un archivo de audio o video",
+  "upload_button.label": "Agregá imágenes, o un archivo de audio o video",
   "upload_error.limit": "Se excedió el límite de subida de archivos.",
   "upload_error.poll": "No se permite la subida de archivos en encuestas.",
   "upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas",
@@ -475,12 +464,12 @@
   "upload_progress.label": "Subiendo...",
   "video.close": "Cerrar video",
   "video.download": "Descargar archivo",
-  "video.exit_fullscreen": "Salir de pantalla completa",
+  "video.exit_fullscreen": "Salir de la pantalla completa",
   "video.expand": "Expandir video",
   "video.fullscreen": "Pantalla completa",
   "video.hide": "Ocultar video",
-  "video.mute": "Silenciar sonido",
+  "video.mute": "Silenciar",
   "video.pause": "Pausar",
   "video.play": "Reproducir",
-  "video.unmute": "Dejar de silenciar sonido"
+  "video.unmute": "Dejar de silenciar"
 }
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
new file mode 100644
index 000000000..2551cdaee
--- /dev/null
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "Nota",
+  "account.add_or_remove_from_list": "Agregar o eliminar de listas",
+  "account.badges.bot": "Bot",
+  "account.badges.group": "Grupo",
+  "account.block": "Bloquear a @{name}",
+  "account.block_domain": "Ocultar todo de {domain}",
+  "account.blocked": "Bloqueado",
+  "account.browse_more_on_origin_server": "Ver más en el perfil original",
+  "account.cancel_follow_request": "Cancelar la solicitud de seguimiento",
+  "account.direct": "Mensaje directo a @{name}",
+  "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo",
+  "account.domain_blocked": "Dominio oculto",
+  "account.edit_profile": "Editar perfil",
+  "account.enable_notifications": "Notificarme cuando @{name} publique algo",
+  "account.endorse": "Mostrar en perfil",
+  "account.follow": "Seguir",
+  "account.followers": "Seguidores",
+  "account.followers.empty": "Todavía nadie sigue a este usuario.",
+  "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}",
+  "account.following_counter": "{count, plural, other {{counter} Siguiendo}}",
+  "account.follows.empty": "Este usuario todavía no sigue a nadie.",
+  "account.follows_you": "Te sigue",
+  "account.hide_reblogs": "Ocultar retoots de @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Última actividad",
+  "account.link_verified_on": "El proprietario de este link fue comprobado el {date}",
+  "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
+  "account.media": "Multimedia",
+  "account.mention": "Mencionar a @{name}",
+  "account.moved_to": "{name} se ha mudado a:",
+  "account.mute": "Silenciar a @{name}",
+  "account.mute_notifications": "Silenciar notificaciones de @{name}",
+  "account.muted": "Silenciado",
+  "account.never_active": "Nunca",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots con respuestas",
+  "account.report": "Reportar a @{name}",
+  "account.requested": "Esperando aprobación",
+  "account.share": "Compartir el perfil de @{name}",
+  "account.show_reblogs": "Mostrar retoots de @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.unblock": "Desbloquear a @{name}",
+  "account.unblock_domain": "Mostrar a {domain}",
+  "account.unendorse": "No mostrar en el perfil",
+  "account.unfollow": "Dejar de seguir",
+  "account.unmute": "Dejar de silenciar a @{name}",
+  "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
+  "account_note.placeholder": "Clic para añadir nota",
+  "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Tarifa limitada",
+  "alert.unexpected.message": "Hubo un error inesperado.",
+  "alert.unexpected.title": "¡Ups!",
+  "announcement.announcement": "Anuncio",
+  "autosuggest_hashtag.per_week": "{count} por semana",
+  "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez",
+  "bundle_column_error.body": "Algo salió mal al cargar este componente.",
+  "bundle_column_error.retry": "Inténtalo de nuevo",
+  "bundle_column_error.title": "Error de red",
+  "bundle_modal_error.close": "Cerrar",
+  "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
+  "bundle_modal_error.retry": "Inténtalo de nuevo",
+  "column.blocks": "Usuarios bloqueados",
+  "column.bookmarks": "Marcadores",
+  "column.community": "Línea de tiempo local",
+  "column.direct": "Mensajes directos",
+  "column.directory": "Buscar perfiles",
+  "column.domain_blocks": "Dominios ocultados",
+  "column.favourites": "Favoritos",
+  "column.follow_requests": "Solicitudes de seguimiento",
+  "column.home": "Inicio",
+  "column.lists": "Listas",
+  "column.mutes": "Usuarios silenciados",
+  "column.notifications": "Notificaciones",
+  "column.pins": "Toots fijados",
+  "column.public": "Línea de tiempo federada",
+  "column_back_button.label": "Atrás",
+  "column_header.hide_settings": "Ocultar configuración",
+  "column_header.moveLeft_settings": "Mover columna a la izquierda",
+  "column_header.moveRight_settings": "Mover columna a la derecha",
+  "column_header.pin": "Fijar",
+  "column_header.show_settings": "Mostrar ajustes",
+  "column_header.unpin": "Dejar de fijar",
+  "column_subheading.settings": "Ajustes",
+  "community.column_settings.local_only": "Solo local",
+  "community.column_settings.media_only": "Solo media",
+  "community.column_settings.remote_only": "Solo remoto",
+  "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.",
+  "compose_form.direct_message_warning_learn_more": "Aprender mas",
+  "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
+  "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
+  "compose_form.lock_disclaimer.lock": "bloqueado",
+  "compose_form.placeholder": "¿En qué estás pensando?",
+  "compose_form.poll.add_option": "Añadir una opción",
+  "compose_form.poll.duration": "Duración de la encuesta",
+  "compose_form.poll.option_placeholder": "Elección {number}",
+  "compose_form.poll.remove_option": "Eliminar esta opción",
+  "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones",
+  "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción",
+  "compose_form.publish": "Tootear",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "Marcar multimedia como sensible",
+  "compose_form.sensitive.marked": "Material marcado como sensible",
+  "compose_form.sensitive.unmarked": "Material no marcado como sensible",
+  "compose_form.spoiler.marked": "Texto oculto tras la advertencia",
+  "compose_form.spoiler.unmarked": "Texto no oculto",
+  "compose_form.spoiler_placeholder": "Advertencia de contenido",
+  "confirmation_modal.cancel": "Cancelar",
+  "confirmations.block.block_and_report": "Bloquear y Reportar",
+  "confirmations.block.confirm": "Bloquear",
+  "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?",
+  "confirmations.delete.confirm": "Eliminar",
+  "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?",
+  "confirmations.delete_list.confirm": "Eliminar",
+  "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
+  "confirmations.domain_block.confirm": "Ocultar dominio entero",
+  "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
+  "confirmations.logout.confirm": "Cerrar sesión",
+  "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?",
+  "confirmations.mute.confirm": "Silenciar",
+  "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.",
+  "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
+  "confirmations.redraft.confirm": "Borrar y volver a borrador",
+  "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.",
+  "confirmations.reply.confirm": "Responder",
+  "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?",
+  "confirmations.unfollow.confirm": "Dejar de seguir",
+  "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
+  "conversation.delete": "Borrar conversación",
+  "conversation.mark_as_read": "Marcar como leído",
+  "conversation.open": "Ver conversación",
+  "conversation.with": "Con {names}",
+  "directory.federated": "Desde el fediverso conocido",
+  "directory.local": "Sólo de {domain}",
+  "directory.new_arrivals": "Recién llegados",
+  "directory.recently_active": "Recientemente activo",
+  "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
+  "embed.preview": "Así es como se verá:",
+  "emoji_button.activity": "Actividad",
+  "emoji_button.custom": "Personalizado",
+  "emoji_button.flags": "Marcas",
+  "emoji_button.food": "Comida y bebida",
+  "emoji_button.label": "Insertar emoji",
+  "emoji_button.nature": "Naturaleza",
+  "emoji_button.not_found": "No hay emojis!! ¯\\_(ツ)_/¯",
+  "emoji_button.objects": "Objetos",
+  "emoji_button.people": "Gente",
+  "emoji_button.recent": "Usados frecuentemente",
+  "emoji_button.search": "Buscar…",
+  "emoji_button.search_results": "Resultados de búsqueda",
+  "emoji_button.symbols": "Símbolos",
+  "emoji_button.travel": "Viajes y lugares",
+  "empty_column.account_suspended": "Cuenta suspendida",
+  "empty_column.account_timeline": "¡No hay toots aquí!",
+  "empty_column.account_unavailable": "Perfil no disponible",
+  "empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
+  "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.",
+  "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
+  "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
+  "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
+  "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.",
+  "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
+  "empty_column.hashtag": "No hay nada en este hashtag aún.",
+  "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.",
+  "empty_column.home.suggestions": "See some suggestions",
+  "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.",
+  "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.",
+  "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
+  "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
+  "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
+  "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.",
+  "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.",
+  "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.",
+  "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
+  "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
+  "errors.unexpected_crash.report_issue": "Informar de un problema/error",
+  "follow_recommendations.done": "Hecho",
+  "follow_recommendations.heading": "¡Sigue a la gente cuyas publicaciones te gustaría ver! Aquí tienes algunas sugerencias.",
+  "follow_recommendations.lead": "Los mensajes de las personas que sigues aparecerán en orden cronológico en el Inicio. No tengas miedo de cometer errores, ¡puedes dejar de seguir a la gente fácilmente en cualquier momento!",
+  "follow_request.authorize": "Autorizar",
+  "follow_request.reject": "Rechazar",
+  "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
+  "generic.saved": "Guardado",
+  "getting_started.developers": "Desarrolladores",
+  "getting_started.directory": "Directorio de perfil",
+  "getting_started.documentation": "Documentación",
+  "getting_started.heading": "Primeros pasos",
+  "getting_started.invite": "Invitar usuarios",
+  "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.",
+  "getting_started.security": "Seguridad",
+  "getting_started.terms": "Términos de servicio",
+  "hashtag.column_header.tag_mode.all": "y {additional}",
+  "hashtag.column_header.tag_mode.any": "o {additional}",
+  "hashtag.column_header.tag_mode.none": "sin {additional}",
+  "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias",
+  "hashtag.column_settings.select.placeholder": "Introduzca hashtags…",
+  "hashtag.column_settings.tag_mode.all": "Cualquiera de estos",
+  "hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
+  "hashtag.column_settings.tag_mode.none": "Ninguno de estos",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Básico",
+  "home.column_settings.show_reblogs": "Mostrar retoots",
+  "home.column_settings.show_replies": "Mostrar respuestas",
+  "home.hide_announcements": "Ocultar anuncios",
+  "home.show_announcements": "Mostrar anuncios",
+  "intervals.full.days": "{number, plural, one {# día} other {# días}}",
+  "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
+  "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
+  "keyboard_shortcuts.back": "volver atrás",
+  "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados",
+  "keyboard_shortcuts.boost": "retootear",
+  "keyboard_shortcuts.column": "enfocar un estado en una de las columnas",
+  "keyboard_shortcuts.compose": "enfocar el área de texto de redacción",
+  "keyboard_shortcuts.description": "Descripción",
+  "keyboard_shortcuts.direct": "abrir la columna de mensajes directos",
+  "keyboard_shortcuts.down": "mover hacia abajo en la lista",
+  "keyboard_shortcuts.enter": "abrir estado",
+  "keyboard_shortcuts.favourite": "añadir a favoritos",
+  "keyboard_shortcuts.favourites": "abrir la lista de favoritos",
+  "keyboard_shortcuts.federated": "abrir el timeline federado",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "abrir el timeline propio",
+  "keyboard_shortcuts.hotkey": "Tecla caliente",
+  "keyboard_shortcuts.legend": "para mostrar esta leyenda",
+  "keyboard_shortcuts.local": "abrir el timeline local",
+  "keyboard_shortcuts.mention": "para mencionar al autor",
+  "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados",
+  "keyboard_shortcuts.my_profile": "abrir tu perfil",
+  "keyboard_shortcuts.notifications": "abrir la columna de notificaciones",
+  "keyboard_shortcuts.open_media": "para abrir archivos multimedia",
+  "keyboard_shortcuts.pinned": "abrir la lista de toots destacados",
+  "keyboard_shortcuts.profile": "abrir el perfil del autor",
+  "keyboard_shortcuts.reply": "para responder",
+  "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores",
+  "keyboard_shortcuts.search": "para poner el foco en la búsqueda",
+  "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW",
+  "keyboard_shortcuts.start": "abrir la columna \"comenzar\"",
+  "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)",
+  "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios",
+  "keyboard_shortcuts.toot": "para comenzar un nuevo toot",
+  "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda",
+  "keyboard_shortcuts.up": "para ir hacia arriba en la lista",
+  "lightbox.close": "Cerrar",
+  "lightbox.compress": "Comprimir cuadro de visualización de imagen",
+  "lightbox.expand": "Expandir cuadro de visualización de imagen",
+  "lightbox.next": "Siguiente",
+  "lightbox.previous": "Anterior",
+  "lists.account.add": "Añadir a lista",
+  "lists.account.remove": "Quitar de lista",
+  "lists.delete": "Borrar lista",
+  "lists.edit": "Editar lista",
+  "lists.edit.submit": "Cambiar título",
+  "lists.new.create": "Añadir lista",
+  "lists.new.title_placeholder": "Título de la nueva lista",
+  "lists.replies_policy.followed": "Cualquier usuario seguido",
+  "lists.replies_policy.list": "Miembros de la lista",
+  "lists.replies_policy.none": "Nadie",
+  "lists.replies_policy.title": "Mostrar respuestas a:",
+  "lists.search": "Buscar entre la gente a la que sigues",
+  "lists.subheading": "Tus listas",
+  "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
+  "loading_indicator.label": "Cargando…",
+  "media_gallery.toggle_visible": "Cambiar visibilidad",
+  "missing_indicator.label": "No encontrado",
+  "missing_indicator.sublabel": "No se encontró este recurso",
+  "mute_modal.duration": "Duración",
+  "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
+  "mute_modal.indefinite": "Indefinida",
+  "navigation_bar.apps": "Aplicaciones móviles",
+  "navigation_bar.blocks": "Usuarios bloqueados",
+  "navigation_bar.bookmarks": "Marcadores",
+  "navigation_bar.community_timeline": "Historia local",
+  "navigation_bar.compose": "Escribir un nuevo toot",
+  "navigation_bar.direct": "Mensajes directos",
+  "navigation_bar.discover": "Descubrir",
+  "navigation_bar.domain_blocks": "Dominios ocultos",
+  "navigation_bar.edit_profile": "Editar perfil",
+  "navigation_bar.favourites": "Favoritos",
+  "navigation_bar.filters": "Palabras silenciadas",
+  "navigation_bar.follow_requests": "Solicitudes para seguirte",
+  "navigation_bar.follows_and_followers": "Siguiendo y seguidores",
+  "navigation_bar.info": "Información adicional",
+  "navigation_bar.keyboard_shortcuts": "Atajos",
+  "navigation_bar.lists": "Listas",
+  "navigation_bar.logout": "Cerrar sesión",
+  "navigation_bar.mutes": "Usuarios silenciados",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Toots fijados",
+  "navigation_bar.preferences": "Preferencias",
+  "navigation_bar.public_timeline": "Historia federada",
+  "navigation_bar.security": "Seguridad",
+  "notification.favourite": "{name} marcó tu estado como favorito",
+  "notification.follow": "{name} te empezó a seguir",
+  "notification.follow_request": "{name} ha solicitado seguirte",
+  "notification.mention": "{name} te ha mencionado",
+  "notification.own_poll": "Tu encuesta ha terminado",
+  "notification.poll": "Una encuesta en la que has votado ha terminado",
+  "notification.reblog": "{name} ha retooteado tu estado",
+  "notification.status": "{name} acaba de publicar",
+  "notifications.clear": "Limpiar notificaciones",
+  "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?",
+  "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": "Mostrar",
+  "notifications.column_settings.follow": "Nuevos seguidores:",
+  "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:",
+  "notifications.column_settings.mention": "Menciones:",
+  "notifications.column_settings.poll": "Resultados de la votación:",
+  "notifications.column_settings.push": "Notificaciones push",
+  "notifications.column_settings.reblog": "Retoots:",
+  "notifications.column_settings.show": "Mostrar en columna",
+  "notifications.column_settings.sound": "Reproducir sonido",
+  "notifications.column_settings.status": "Nuevos toots:",
+  "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas",
+  "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",
+  "notifications.filter.statuses": "Actualizaciones de gente a la que sigues",
+  "notifications.grant_permission": "Conceder permiso.",
+  "notifications.group": "{count} notificaciones",
+  "notifications.mark_as_read": "Marcar todas las notificaciones como leídas",
+  "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.",
+  "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente",
+  "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
+  "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
+  "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
+  "notifications_permission_banner.title": "Nunca te pierdas nada",
+  "picture_in_picture.restore": "Restaurar",
+  "poll.closed": "Cerrada",
+  "poll.refresh": "Actualizar",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
+  "poll.vote": "Votar",
+  "poll.voted": "Has votado a favor de esta respuesta",
+  "poll_button.add_poll": "Añadir una encuesta",
+  "poll_button.remove_poll": "Eliminar encuesta",
+  "privacy.change": "Ajustar privacidad",
+  "privacy.direct.long": "Sólo mostrar a los usuarios mencionados",
+  "privacy.direct.short": "Directo",
+  "privacy.private.long": "Sólo mostrar a seguidores",
+  "privacy.private.short": "Privado",
+  "privacy.public.long": "Mostrar en la historia federada",
+  "privacy.public.short": "Público",
+  "privacy.unlisted.long": "No mostrar en la historia federada",
+  "privacy.unlisted.short": "No listado",
+  "refresh": "Actualizar",
+  "regeneration_indicator.label": "Cargando…",
+  "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "ahora",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "relative_time.today": "hoy",
+  "reply_indicator.cancel": "Cancelar",
+  "report.forward": "Reenviar a {target}",
+  "report.forward_hint": "Esta cuenta es de otro servidor. ¿Enviar una copia anonimizada del informe allí también?",
+  "report.hint": "El informe se enviará a los moderadores de tu instancia. Puedes proporcionar una explicación de por qué informas sobre esta cuenta a continuación:",
+  "report.placeholder": "Comentarios adicionales",
+  "report.submit": "Publicar",
+  "report.target": "Reportando",
+  "search.placeholder": "Buscar",
+  "search_popout.search_format": "Formato de búsqueda avanzada",
+  "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.",
+  "search_popout.tips.hashtag": "etiqueta",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag",
+  "search_popout.tips.user": "usuario",
+  "search_results.accounts": "Gente",
+  "search_results.hashtags": "Etiquetas",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.",
+  "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
+  "status.admin_account": "Abrir interfaz de moderación para @{name}",
+  "status.admin_status": "Abrir este estado en la interfaz de moderación",
+  "status.block": "Bloquear a @{name}",
+  "status.bookmark": "Añadir marcador",
+  "status.cancel_reblog_private": "Eliminar retoot",
+  "status.cannot_reblog": "Este toot no puede retootearse",
+  "status.copy": "Copiar enlace al estado",
+  "status.delete": "Borrar",
+  "status.detailed_status": "Vista de conversación detallada",
+  "status.direct": "Mensaje directo a @{name}",
+  "status.embed": "Incrustado",
+  "status.favourite": "Favorito",
+  "status.filtered": "Filtrado",
+  "status.load_more": "Cargar más",
+  "status.media_hidden": "Contenido multimedia oculto",
+  "status.mention": "Mencionar",
+  "status.more": "Más",
+  "status.mute": "Silenciar @{name}",
+  "status.mute_conversation": "Silenciar conversación",
+  "status.open": "Expandir estado",
+  "status.pin": "Fijar",
+  "status.pinned": "Toot fijado",
+  "status.read_more": "Leer más",
+  "status.reblog": "Retootear",
+  "status.reblog_private": "Implusar a la audiencia original",
+  "status.reblogged_by": "Retooteado por {name}",
+  "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.",
+  "status.redraft": "Borrar y volver a borrador",
+  "status.remove_bookmark": "Eliminar marcador",
+  "status.reply": "Responder",
+  "status.replyAll": "Responder al hilo",
+  "status.report": "Reportar",
+  "status.sensitive_warning": "Contenido sensible",
+  "status.share": "Compartir",
+  "status.show_less": "Mostrar menos",
+  "status.show_less_all": "Mostrar menos para todo",
+  "status.show_more": "Mostrar más",
+  "status.show_more_all": "Mostrar más para todo",
+  "status.show_thread": "Mostrar hilo",
+  "status.uncached_media_warning": "No disponible",
+  "status.unmute_conversation": "Dejar de silenciar conversación",
+  "status.unpin": "Dejar de fijar",
+  "suggestions.dismiss": "Descartar sugerencia",
+  "suggestions.header": "Es posible que te interese…",
+  "tabs_bar.federated_timeline": "Federado",
+  "tabs_bar.home": "Inicio",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notificaciones",
+  "tabs_bar.search": "Buscar",
+  "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}",
+  "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}",
+  "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
+  "time_remaining.moments": "Momentos restantes",
+  "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
+  "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.",
+  "timeline_hint.resources.followers": "Seguidores",
+  "timeline_hint.resources.follows": "Seguidos",
+  "timeline_hint.resources.statuses": "Toots más antiguos",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando",
+  "trends.trending_now": "Tendencia ahora",
+  "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "Arrastra y suelta para subir",
+  "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "Límite de subida de archivos excedido.",
+  "upload_error.poll": "Subida de archivos no permitida con encuestas.",
+  "upload_form.audio_description": "Describir para personas con problemas auditivos",
+  "upload_form.description": "Describir para los usuarios con dificultad visual",
+  "upload_form.edit": "Editar",
+  "upload_form.thumbnail": "Cambiar miniatura",
+  "upload_form.undo": "Borrar",
+  "upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
+  "upload_modal.analyzing_picture": "Analizando imagen…",
+  "upload_modal.apply": "Aplicar",
+  "upload_modal.choose_image": "Elegir imagen",
+  "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso",
+  "upload_modal.detect_text": "Detectar texto de la imagen",
+  "upload_modal.edit_media": "Editar multimedia",
+  "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
+  "upload_modal.preparing_ocr": "Preparando OCR…",
+  "upload_modal.preview_label": "Vista previa ({ratio})",
+  "upload_progress.label": "Subiendo…",
+  "video.close": "Cerrar video",
+  "video.download": "Descargar archivo",
+  "video.exit_fullscreen": "Salir de pantalla completa",
+  "video.expand": "Expandir vídeo",
+  "video.fullscreen": "Pantalla completa",
+  "video.hide": "Ocultar vídeo",
+  "video.mute": "Silenciar sonido",
+  "video.pause": "Pausar",
+  "video.play": "Reproducir",
+  "video.unmute": "Dejar de silenciar sonido"
+}
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index e769d7a48..7d7af8b44 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Este usuario todavía no sigue a nadie.",
   "account.follows_you": "Te sigue",
   "account.hide_reblogs": "Ocultar retoots de @{name}",
+  "account.joined": "Se unió el {date}",
   "account.last_status": "Última actividad",
   "account.link_verified_on": "El proprietario de este link fue comprobado el {date}",
   "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Silenciar notificaciones de @{name}",
   "account.muted": "Silenciado",
   "account.never_active": "Nunca",
-  "account.posts": "Toots",
-  "account.posts_with_replies": "Toots con respuestas",
+  "account.posts": "Publicaciones",
+  "account.posts_with_replies": "Publicaciones y respuestas",
   "account.report": "Reportar a @{name}",
   "account.requested": "Esperando aprobación",
   "account.share": "Compartir el perfil de @{name}",
   "account.show_reblogs": "Mostrar retoots de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}",
   "account.unblock": "Desbloquear a @{name}",
   "account.unblock_domain": "Mostrar a {domain}",
   "account.unendorse": "No mostrar en el perfil",
@@ -71,7 +72,7 @@
   "column.lists": "Listas",
   "column.mutes": "Usuarios silenciados",
   "column.notifications": "Notificaciones",
-  "column.pins": "Toots fijados",
+  "column.pins": "Publicaciones fijadas",
   "column.public": "Línea de tiempo federada",
   "column_back_button.label": "Atrás",
   "column_header.hide_settings": "Ocultar configuración",
@@ -84,10 +85,10 @@
   "community.column_settings.local_only": "Solo local",
   "community.column_settings.media_only": "Solo media",
   "community.column_settings.remote_only": "Solo remoto",
-  "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.",
+  "compose_form.direct_message_warning": "Esta nueva publicación solo será enviada a los usuarios mencionados.",
   "compose_form.direct_message_warning_learn_more": "Aprender mas",
-  "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
-  "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
+  "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.",
+  "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.",
   "compose_form.lock_disclaimer.lock": "bloqueado",
   "compose_form.placeholder": "¿En qué estás pensando?",
   "compose_form.poll.add_option": "Añadir una opción",
@@ -109,7 +110,7 @@
   "confirmations.block.confirm": "Bloquear",
   "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?",
   "confirmations.delete.confirm": "Eliminar",
-  "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?",
+  "confirmations.delete.message": "¿Estás seguro de que quieres borrar esta publicación?",
   "confirmations.delete_list.confirm": "Eliminar",
   "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
   "confirmations.domain_block.confirm": "Ocultar dominio entero",
@@ -120,7 +121,7 @@
   "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.",
   "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
   "confirmations.redraft.confirm": "Borrar y volver a borrador",
-  "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.",
+  "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar esta publicación y convertirla en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?",
   "confirmations.unfollow.confirm": "Dejar de seguir",
@@ -133,7 +134,7 @@
   "directory.local": "Sólo de {domain}",
   "directory.new_arrivals": "Recién llegados",
   "directory.recently_active": "Recientemente activo",
-  "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
+  "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.",
   "embed.preview": "Así es como se verá:",
   "emoji_button.activity": "Actividad",
   "emoji_button.custom": "Personalizado",
@@ -150,19 +151,20 @@
   "emoji_button.symbols": "Símbolos",
   "emoji_button.travel": "Viajes y lugares",
   "empty_column.account_suspended": "Cuenta suspendida",
-  "empty_column.account_timeline": "¡No hay toots aquí!",
+  "empty_column.account_timeline": "¡No hay publicaciones aquí!",
   "empty_column.account_unavailable": "Perfil no disponible",
   "empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
-  "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.",
+  "empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
   "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
   "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
   "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
-  "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.",
-  "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.",
+  "empty_column.favourited_statuses": "Aún no tienes publicaciones favoritas. Cuando marques una como favorita, aparecerá aquí.",
+  "empty_column.favourites": "Nadie ha marcado esta publicación como favorita. Cuando alguien lo haga, aparecerá aquí.",
+  "empty_column.follow_recommendations": "Parece que no se ha podido generar ninguna sugerencia para ti. Puedes probar a buscar a gente que quizá conozcas o explorar los hashtags que están en tendencia.",
   "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
   "empty_column.hashtag": "No hay nada en este hashtag aún.",
   "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.",
-  "empty_column.home.public_timeline": "la línea de tiempo pública",
+  "empty_column.home.suggestions": "Ver algunas sugerencias",
   "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.",
   "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.",
   "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
   "errors.unexpected_crash.report_issue": "Informar de un problema/error",
+  "follow_recommendations.done": "Hecho",
+  "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.",
+  "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
   "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
-  "introduction.federation.action": "Siguiente",
-  "introduction.federation.federated.headline": "Federado",
-  "introduction.federation.federated.text": "Los mensajes públicos de otros servidores del fediverso aparecerán en la cronología federada.",
-  "introduction.federation.home.headline": "Inicio",
-  "introduction.federation.home.text": "Los posts de personas que sigues aparecerán en tu cronología. ¡Puedes seguir a cualquiera en cualquier servidor!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Los posts públicos de personas en el mismo servidor que aparecerán en la cronología local.",
-  "introduction.interactions.action": "¡Terminar tutorial!",
-  "introduction.interactions.favourite.headline": "Favorito",
-  "introduction.interactions.favourite.text": "Puedes guardar un toot para más tarde, y hacer saber al autor que te gustó, dándole a favorito.",
-  "introduction.interactions.reblog.headline": "Retootear",
-  "introduction.interactions.reblog.text": "Puedes compartir los toots de otras personas con tus seguidores retooteando los mismos.",
-  "introduction.interactions.reply.headline": "Responder",
-  "introduction.interactions.reply.text": "Puedes responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.",
-  "introduction.welcome.action": "¡Vamos!",
-  "introduction.welcome.headline": "Primeros pasos",
-  "introduction.welcome.text": "¡Bienvenido al fediverso! En unos momentos, podrás transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial, alberga tu perfil, así que recuerda su nombre.",
   "keyboard_shortcuts.back": "volver atrás",
   "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados",
   "keyboard_shortcuts.boost": "retootear",
@@ -242,7 +230,7 @@
   "keyboard_shortcuts.my_profile": "abrir tu perfil",
   "keyboard_shortcuts.notifications": "abrir la columna de notificaciones",
   "keyboard_shortcuts.open_media": "para abrir archivos multimedia",
-  "keyboard_shortcuts.pinned": "abrir la lista de toots destacados",
+  "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas",
   "keyboard_shortcuts.profile": "abrir el perfil del autor",
   "keyboard_shortcuts.reply": "para responder",
   "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores",
@@ -251,7 +239,7 @@
   "keyboard_shortcuts.start": "abrir la columna \"comenzar\"",
   "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)",
   "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios",
-  "keyboard_shortcuts.toot": "para comenzar un nuevo toot",
+  "keyboard_shortcuts.toot": "Comienza una nueva publicación",
   "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda",
   "keyboard_shortcuts.up": "para ir hacia arriba en la lista",
   "lightbox.close": "Cerrar",
@@ -284,7 +272,7 @@
   "navigation_bar.blocks": "Usuarios bloqueados",
   "navigation_bar.bookmarks": "Marcadores",
   "navigation_bar.community_timeline": "Historia local",
-  "navigation_bar.compose": "Escribir un nuevo toot",
+  "navigation_bar.compose": "Escribir nueva publicación",
   "navigation_bar.direct": "Mensajes directos",
   "navigation_bar.discover": "Descubrir",
   "navigation_bar.domain_blocks": "Dominios ocultos",
@@ -299,7 +287,7 @@
   "navigation_bar.logout": "Cerrar sesión",
   "navigation_bar.mutes": "Usuarios silenciados",
   "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Toots fijados",
+  "navigation_bar.pins": "Publicaciones fijadas",
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Historia federada",
   "navigation_bar.security": "Seguridad",
@@ -309,7 +297,7 @@
   "notification.mention": "{name} te ha mencionado",
   "notification.own_poll": "Tu encuesta ha terminado",
   "notification.poll": "Una encuesta en la que has votado ha terminado",
-  "notification.reblog": "{name} ha retooteado tu estado",
+  "notification.reblog": "{name} ha retooteado tu publicación",
   "notification.status": "{name} acaba de publicar",
   "notifications.clear": "Limpiar notificaciones",
   "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?",
@@ -326,7 +314,8 @@
   "notifications.column_settings.reblog": "Retoots:",
   "notifications.column_settings.show": "Mostrar en columna",
   "notifications.column_settings.sound": "Reproducir sonido",
-  "notifications.column_settings.status": "Nuevos toots:",
+  "notifications.column_settings.status": "Nuevas publicaciones:",
+  "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas",
   "notifications.filter.all": "Todos",
   "notifications.filter.boosts": "Retoots",
   "notifications.filter.favourites": "Favoritos",
@@ -379,22 +368,22 @@
   "report.target": "Reportando",
   "search.placeholder": "Buscar",
   "search_popout.search_format": "Formato de búsqueda avanzada",
-  "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.",
+  "search_popout.tips.full_text": "Las búsquedas de texto recuperan publicaciones que has escrito, marcado como favoritas, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.",
   "search_popout.tips.hashtag": "etiqueta",
-  "search_popout.tips.status": "toot",
+  "search_popout.tips.status": "status",
   "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag",
   "search_popout.tips.user": "usuario",
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Etiquetas",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.",
+  "search_results.statuses": "Publicaciones",
+  "search_results.statuses_fts_disabled": "Buscar publicaciones por su contenido no está disponible en este servidor de Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
   "status.admin_account": "Abrir interfaz de moderación para @{name}",
   "status.admin_status": "Abrir este estado en la interfaz de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Añadir marcador",
-  "status.cancel_reblog_private": "Eliminar retoot",
-  "status.cannot_reblog": "Este toot no puede retootearse",
+  "status.cancel_reblog_private": "Deshacer retoot",
+  "status.cannot_reblog": "Esta publicación no puede retootearse",
   "status.copy": "Copiar enlace al estado",
   "status.delete": "Borrar",
   "status.detailed_status": "Vista de conversación detallada",
@@ -410,7 +399,7 @@
   "status.mute_conversation": "Silenciar conversación",
   "status.open": "Expandir estado",
   "status.pin": "Fijar",
-  "status.pinned": "Toot fijado",
+  "status.pinned": "Publicación fijada",
   "status.read_more": "Leer más",
   "status.reblog": "Retootear",
   "status.reblog_private": "Implusar a la audiencia original",
@@ -446,7 +435,7 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.",
   "timeline_hint.resources.followers": "Seguidores",
   "timeline_hint.resources.follows": "Seguidos",
-  "timeline_hint.resources.statuses": "Toots más antiguos",
+  "timeline_hint.resources.statuses": "Publicaciones más antiguas",
   "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando",
   "trends.trending_now": "Tendencia ahora",
   "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index 54f4159fe..dba0e3b20 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
   "account.follows_you": "Jälgib Teid",
   "account.hide_reblogs": "Peida upitused kasutajalt @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Viimati aktiivne",
   "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}",
   "account.locked_info": "Selle konto privaatsussätteks on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
   "empty_column.favourited_statuses": "Teil pole veel lemmikuid tuute. Kui märgite mõne, näete neid siin.",
   "empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Teil pole veel ühtegi jälgimise taotlust. Kui saate mõne, näete neid siin.",
   "empty_column.hashtag": "Selle sildiga pole veel midagi.",
   "empty_column.home": "Teie kodu ajajoon on tühi! Külastage {public} või kasutage otsingut alustamaks ja kohtamaks teisi kasutajaid.",
-  "empty_column.home.public_timeline": "avalik ajajoon",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.",
   "empty_column.lists": "Teil ei ole veel ühtegi nimekirja. Kui loote mõne, näete neid siin.",
   "empty_column.mutes": "Te pole veel ühtegi kasutajat vaigistanud.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
   "errors.unexpected_crash.report_issue": "Teavita veast",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autoriseeri",
   "follow_request.reject": "Hülga",
   "follow_requests.unlocked_explanation": "Kuigi Teie konto pole lukustatud, soovitab {domain} personal siiski manuaalselt üle vaadata jälgimistaotlused nendelt kontodelt.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# päev} other {# päevad}}",
   "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}",
-  "introduction.federation.action": "Järgmine",
-  "introduction.federation.federated.headline": "Föderatiivne",
-  "introduction.federation.federated.text": "Avalikud postitused teistest föderatsiooni serveritest kuvatakse föderatiivsel ajajoonel.",
-  "introduction.federation.home.headline": "Kodu",
-  "introduction.federation.home.text": "Inimeste, keda jälgite, postitused kuvatakse Teie koduajajoonel. Saate jälgida igaüht igas serveris!",
-  "introduction.federation.local.headline": "Kohalik",
-  "introduction.federation.local.text": "Samas serveris olevate inimeste postitused kuvatakse kohalikul ajajoonel.",
-  "introduction.interactions.action": "Välju õpetusest!",
-  "introduction.interactions.favourite.headline": "Lemmik",
-  "introduction.interactions.favourite.text": "Saate tuuti salvestada ja anda autorile teada, et see meeldis Teile, märkides selle lemmikuks.",
-  "introduction.interactions.reblog.headline": "Upita",
-  "introduction.interactions.reblog.text": "Saate jagada teiste inimeste tuute oma jälgijatega neid upitades.",
-  "introduction.interactions.reply.headline": "Vasta",
-  "introduction.interactions.reply.text": "Saate vastata teiste ja enda tuutidele, mis ühendab nad kokku aruteluks.",
-  "introduction.welcome.action": "Lähme!",
-  "introduction.welcome.headline": "Esimesed sammud",
-  "introduction.welcome.text": "Teretulemast fediversumisse! Mõne aja pärast saate avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—see majutab sinu profiili. Seega jäta selle nimi meelde.",
   "keyboard_shortcuts.back": "tagasiminekuks",
   "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut",
   "keyboard_shortcuts.boost": "upitamiseks",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Kuva tulbas",
   "notifications.column_settings.sound": "Mängi heli",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Kõik",
   "notifications.filter.boosts": "Upitused",
   "notifications.filter.favourites": "Lemmikud",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 80119dc00..8970c7940 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -1,27 +1,28 @@
 {
-  "account.account_note_header": "Note",
+  "account.account_note_header": "Oharra",
   "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik",
   "account.badges.bot": "Bot-a",
   "account.badges.group": "Taldea",
   "account.block": "Blokeatu @{name}",
   "account.block_domain": "Ezkutatu {domain} domeinuko guztia",
   "account.blocked": "Blokeatuta",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.browse_more_on_origin_server": "Arakatu gehiago jatorrizko profilean",
   "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria",
   "account.direct": "Mezu zuzena @{name}(r)i",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzailearen bidalketetan",
   "account.domain_blocked": "Ezkutatutako domeinua",
   "account.edit_profile": "Aldatu profila",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Jakinarazi @{name} erabiltzaileak bidalketak egitean",
   "account.endorse": "Nabarmendu profilean",
   "account.follow": "Jarraitu",
   "account.followers": "Jarraitzaileak",
   "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, one {Jarraitzaile {counter}} other {{counter} jarraitzaile}}",
+  "account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}",
   "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.",
   "account.follows_you": "Jarraitzen dizu",
   "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
+  "account.joined": "{date}(e)an elkartua",
   "account.last_status": "Azkenekoz aktiboa",
   "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}",
   "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
   "account.muted": "Mutututa",
   "account.never_active": "Inoiz ez",
-  "account.posts": "Toot",
-  "account.posts_with_replies": "Tootak eta erantzunak",
+  "account.posts": "Bidalketa",
+  "account.posts_with_replies": "Bidalketak eta erantzunak",
   "account.report": "Salatu @{name}",
   "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
   "account.share": "@{name}(e)ren profila elkarbanatu",
   "account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {Bidalketa {counter}} other {{counter} bidalketa}}",
   "account.unblock": "Desblokeatu @{name}",
   "account.unblock_domain": "Berriz erakutsi {domain}",
   "account.unendorse": "Ez nabarmendu profilean",
@@ -71,7 +72,7 @@
   "column.lists": "Zerrendak",
   "column.mutes": "Mutututako erabiltzaileak",
   "column.notifications": "Jakinarazpenak",
-  "column.pins": "Finkatutako tootak",
+  "column.pins": "Finkatutako bidalketak",
   "column.public": "Federatutako denbora-lerroa",
   "column_back_button.label": "Atzera",
   "column_header.hide_settings": "Ezkutatu ezarpenak",
@@ -84,10 +85,10 @@
   "community.column_settings.local_only": "Lokala soilik",
   "community.column_settings.media_only": "Multimedia besterik ez",
   "community.column_settings.remote_only": "Urrunekoa soilik",
-  "compose_form.direct_message_warning": "Toot hau aipatutako erabiltzaileei besterik ez zaie bidaliko.",
+  "compose_form.direct_message_warning": "Bidalketa hau aipatutako erabiltzaileei besterik ez zaie bidaliko.",
   "compose_form.direct_message_warning_learn_more": "Ikasi gehiago",
-  "compose_form.hashtag_warning": "Toot hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan toot publikoak besterik ez dira agertzen.",
-  "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren mezuak ikusteko.",
+  "compose_form.hashtag_warning": "Bidalketa hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan bidalketa publikoak besterik ez dira agertzen.",
+  "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren bidalketak ikusteko.",
   "compose_form.lock_disclaimer.lock": "giltzapetuta",
   "compose_form.placeholder": "Zer duzu buruan?",
   "compose_form.poll.add_option": "Gehitu aukera bat",
@@ -109,7 +110,7 @@
   "confirmations.block.confirm": "Blokeatu",
   "confirmations.block.message": "Ziur {name} blokeatu nahi duzula?",
   "confirmations.delete.confirm": "Ezabatu",
-  "confirmations.delete.message": "Ziur mezu hau ezabatu nahi duzula?",
+  "confirmations.delete.message": "Ziur bidalketa hau ezabatu nahi duzula?",
   "confirmations.delete_list.confirm": "Ezabatu",
   "confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?",
   "confirmations.domain_block.confirm": "Ezkutatu domeinu osoa",
@@ -117,10 +118,10 @@
   "confirmations.logout.confirm": "Amaitu saioa",
   "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
   "confirmations.mute.confirm": "Mututu",
-  "confirmations.mute.explanation": "Honek horko mezuak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure mezuak ikusi ahal izango dituzte eta zuri jarraitu.",
+  "confirmations.mute.explanation": "Honek horko bidalketak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure bidalketak ikusi ahal izango dituzte eta zuri jarraitu.",
   "confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
   "confirmations.redraft.confirm": "Ezabatu eta berridatzi",
-  "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.",
+  "confirmations.redraft.message": "Ziur bidalketa hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.",
   "confirmations.reply.confirm": "Erantzun",
   "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?",
   "confirmations.unfollow.confirm": "Utzi jarraitzeari",
@@ -133,7 +134,7 @@
   "directory.local": "{domain} domeinukoak soilik",
   "directory.new_arrivals": "Iritsi berriak",
   "directory.recently_active": "Duela gutxi aktibo",
-  "embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.",
+  "embed.instructions": "Txertatu bidalketa hau zure webgunean beheko kodea kopiatuz.",
   "embed.preview": "Hau da izango duen itxura:",
   "emoji_button.activity": "Jarduera",
   "emoji_button.custom": "Pertsonalizatua",
@@ -149,35 +150,39 @@
   "emoji_button.search_results": "Bilaketaren emaitzak",
   "emoji_button.symbols": "Sinboloak",
   "emoji_button.travel": "Bidaiak eta tokiak",
-  "empty_column.account_suspended": "Account suspended",
-  "empty_column.account_timeline": "Ez dago tootik hemen!",
+  "empty_column.account_suspended": "Kanporatutako kontua",
+  "empty_column.account_timeline": "Ez dago bidalketarik hemen!",
   "empty_column.account_unavailable": "Profila ez dago eskuragarri",
   "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.",
-  "empty_column.bookmarked_statuses": "Oraindik ez dituzu toot laster-markatutarik. Bat laster-markatzerakoan, hemen agertuko da.",
+  "empty_column.bookmarked_statuses": "Oraindik ez dituzu bidalketa laster-markatutarik. Bat laster-markatzerakoan, hemen agertuko da.",
   "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!",
   "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.",
   "empty_column.domain_blocks": "Ez dago ezkutatutako domeinurik oraindik.",
   "empty_column.favourited_statuses": "Ez duzu gogokorik oraindik. Gogokoren bat duzunean hemen agertuko da.",
-  "empty_column.favourites": "Ez du inork gogokoetara gehitu toot hau oraindik. Inork egiten duenean, hemen agertuko dira.",
+  "empty_column.favourites": "Ez du inork gogokoetara gehitu bidalketa hau oraindik. Inork egiten duenean, hemen agertuko dira.",
+  "empty_column.follow_recommendations": "Dirudienez ezin izan da zuretzako proposamenik sortu. Bilaketa erabili dezakezu ezagutzen duzun jendea aurkitzeko edo traolen joerak arakatu.",
   "empty_column.follow_requests": "Ez duzu jarraitzeko eskaririk oraindik. Baten bat jasotzen duzunean, hemen agertuko da.",
   "empty_column.hashtag": "Ez dago ezer traola honetan oraindik.",
   "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.",
-  "empty_column.home.public_timeline": "denbora-lerro publikoa",
-  "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek mezu berriak argitaratzean, hemen agertuko dira.",
+  "empty_column.home.suggestions": "Ikusi proposamen batzuk",
+  "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek bidalketa berriak argitaratzean, hemen agertuko dira.",
   "empty_column.lists": "Ez duzu zerrendarik oraindik. Baten bat sortzen duzunean hemen agertuko da.",
   "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.",
   "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
   "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko",
   "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Ezin izan da orria behar bezala bistaratu. Errore honen jatorria nabigatzailearen gehigarri batean edo itzulpen automatikoko tresnetan dago ziur aski.",
   "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Saiatu desgaitu eta orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
   "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
   "errors.unexpected_crash.report_issue": "Eman arazoaren berri",
+  "follow_recommendations.done": "Egina",
+  "follow_recommendations.heading": "Jarraitu jendea beren bidalketak ikusteko! Hemen dituzu iradokizun batzuk.",
+  "follow_recommendations.lead": "Jarraitzen duzun jendearen bidalketak ordena kronologikoan agertuko dira zure hasierako jarioan. Ez izan akatsak egiteko beldurrik, jendea jarraitzeari uztea erraza da!",
   "follow_request.authorize": "Baimendu",
   "follow_request.reject": "Ukatu",
   "follow_requests.unlocked_explanation": "Zure kontua blokeatuta ez badago ere, {domain} domeinuko arduradunek uste dute kontu hauetako jarraipen eskariak agian eskuz begiratu nahiko dituzula.",
-  "generic.saved": "Saved",
+  "generic.saved": "Gordea",
   "getting_started.developers": "Garatzaileak",
   "getting_started.directory": "Profil-direktorioa",
   "getting_started.documentation": "Dokumentazioa",
@@ -203,33 +208,16 @@
   "intervals.full.days": "{number, plural, one {egun #} other {# egun}}",
   "intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}",
   "intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}",
-  "introduction.federation.action": "Hurrengoa",
-  "introduction.federation.federated.headline": "Federatua",
-  "introduction.federation.federated.text": "Fedibertsoko beste zerbitzarietako bidalketa publikoak federatutako denbora-lerroan agertuko dira.",
-  "introduction.federation.home.headline": "Hasiera",
-  "introduction.federation.home.text": "Jarraitzen dituzun horien mezuak zure hasierako jarioan agertuko dira. Edozein zerbitzariko edonor jarraitu dezakezu!",
-  "introduction.federation.local.headline": "Lokala",
-  "introduction.federation.local.text": "Zure zerbitzari berean dauden horien mezu publikoak denbora-lerro lokalean agertuko dira.",
-  "introduction.interactions.action": "Amaitu tutoriala!",
-  "introduction.interactions.favourite.headline": "Gogokoa",
-  "introduction.interactions.favourite.text": "Toot bat geroko gorde dezakezu, eta egileari gustukoa duzula jakinarazi, hau gogoko bihurtuz.",
-  "introduction.interactions.reblog.headline": "Bultzada",
-  "introduction.interactions.reblog.text": "Beste batzuen mezuak partekatu ditzakezu zure jarraitzaileekin hauei bultzada emanez.",
-  "introduction.interactions.reply.headline": "Erantzun",
-  "introduction.interactions.reply.text": "Besteen mezuei eta zure mezuei ere erantzun diezaiekezu, eta elkarrizketa batean lotuta agertuko dira.",
-  "introduction.welcome.action": "Goazen!",
-  "introduction.welcome.headline": "Lehen urratsak",
-  "introduction.welcome.text": "Ongi etorri fedibertsora! Hemendik gutxira hainbat zerbitzarietan zehar mezuak zabaldu eta lagunekin hitz egin ahal izango duzu. Baina zerbitzari hau hainbat zerbitzarietan zehar. berezia da, hau da zure profila ostatatzen duena, ez ahaztu bere izena.",
   "keyboard_shortcuts.back": "atzera nabigatzeko",
   "keyboard_shortcuts.blocked": "blokeatutako erabiltzaileen zerrenda irekitzeko",
-  "keyboard_shortcuts.boost": "bultzada ematea",
+  "keyboard_shortcuts.boost": "Bultzatu bidalketa",
   "keyboard_shortcuts.column": "mezu bat zutabe batean fokatzea",
   "keyboard_shortcuts.compose": "testua konposatzeko arean fokatzea",
   "keyboard_shortcuts.description": "Deskripzioa",
   "keyboard_shortcuts.direct": "mezu zuzenen zutabea irekitzeko",
   "keyboard_shortcuts.down": "zerrendan behera mugitzea",
-  "keyboard_shortcuts.enter": "mezua irekitzeko",
-  "keyboard_shortcuts.favourite": "gogoko egitea",
+  "keyboard_shortcuts.enter": "Ireki bidalketa",
+  "keyboard_shortcuts.favourite": "Egin gogoko bidalketa",
   "keyboard_shortcuts.favourites": "gogokoen zerrenda irekitzeko",
   "keyboard_shortcuts.federated": "federatutako denbora-lerroa irekitzeko",
   "keyboard_shortcuts.heading": "Keyboard Shortcuts",
@@ -242,21 +230,21 @@
   "keyboard_shortcuts.my_profile": "zure profila irekitzeko",
   "keyboard_shortcuts.notifications": "jakinarazpenen zutabea irekitzeko",
   "keyboard_shortcuts.open_media": "media zabaltzeko",
-  "keyboard_shortcuts.pinned": "finkatutako tooten zerrenda irekitzeko",
+  "keyboard_shortcuts.pinned": "Ireki finkatutako bidalketen zerrenda",
   "keyboard_shortcuts.profile": "egilearen profila irekitzeko",
-  "keyboard_shortcuts.reply": "erantzutea",
+  "keyboard_shortcuts.reply": "Erantzun bidalketari",
   "keyboard_shortcuts.requests": "jarraitzeko eskarien zerrenda irekitzeko",
   "keyboard_shortcuts.search": "bilaketan fokua jartzea",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.spoilers": "CW eremua erakutsi/ezkutatzeko",
   "keyboard_shortcuts.start": "\"Menua\" zutabea irekitzeko",
   "keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
   "keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko",
-  "keyboard_shortcuts.toot": "toot berria hastea",
+  "keyboard_shortcuts.toot": "Hasi bidalketa berri bat",
   "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
   "keyboard_shortcuts.up": "zerrendan gora mugitzea",
   "lightbox.close": "Itxi",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Konprimatu irudia ikusteko kaxa",
+  "lightbox.expand": "Zabaldu irudia ikusteko kaxa",
   "lightbox.next": "Hurrengoa",
   "lightbox.previous": "Aurrekoa",
   "lists.account.add": "Gehitu zerrendara",
@@ -266,10 +254,10 @@
   "lists.edit.submit": "Aldatu izenburua",
   "lists.new.create": "Gehitu zerrenda",
   "lists.new.title_placeholder": "Zerrenda berriaren izena",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
+  "lists.replies_policy.list": "Zerrendako kideak",
+  "lists.replies_policy.none": "Bat ere ez",
+  "lists.replies_policy.title": "Erakutsi erantzunak:",
   "lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
   "lists.subheading": "Zure zerrendak",
   "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}",
@@ -277,14 +265,14 @@
   "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna",
   "missing_indicator.label": "Ez aurkitua",
   "missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Iraupena",
   "mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Zehaztu gabe",
   "navigation_bar.apps": "Mugikorrerako aplikazioak",
   "navigation_bar.blocks": "Blokeatutako erabiltzaileak",
   "navigation_bar.bookmarks": "Laster-markak",
   "navigation_bar.community_timeline": "Denbora-lerro lokala",
-  "navigation_bar.compose": "Idatzi toot berria",
+  "navigation_bar.compose": "Idatzi bidalketa berria",
   "navigation_bar.direct": "Mezu zuzenak",
   "navigation_bar.discover": "Aurkitu",
   "navigation_bar.domain_blocks": "Ezkutatutako domeinuak",
@@ -299,18 +287,18 @@
   "navigation_bar.logout": "Amaitu saioa",
   "navigation_bar.mutes": "Mutututako erabiltzaileak",
   "navigation_bar.personal": "Pertsonala",
-  "navigation_bar.pins": "Finkatutako tootak",
+  "navigation_bar.pins": "Finkatutako bidalketak",
   "navigation_bar.preferences": "Hobespenak",
   "navigation_bar.public_timeline": "Federatutako denbora-lerroa",
   "navigation_bar.security": "Segurtasuna",
-  "notification.favourite": "{name}(e)k zure mezua gogoko du",
+  "notification.favourite": "{name}(e)k zure bidalketa gogoko du",
   "notification.follow": "{name}(e)k jarraitzen zaitu",
   "notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
   "notification.mention": "{name}(e)k aipatu zaitu",
   "notification.own_poll": "Zure inkesta amaitu da",
   "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
-  "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari",
-  "notification.status": "{name} just posted",
+  "notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari",
+  "notification.status": "{name} erabiltzaileak bidalketa egin berri du",
   "notifications.clear": "Garbitu jakinarazpenak",
   "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?",
   "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak",
@@ -326,24 +314,25 @@
   "notifications.column_settings.reblog": "Bultzadak:",
   "notifications.column_settings.show": "Erakutsi zutabean",
   "notifications.column_settings.sound": "Jo soinua",
-  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.status": "Bidalketa berriak:",
+  "notifications.column_settings.unread_markers.category": "Irakurri gabeko jakinarazpenen markatzaileak",
   "notifications.filter.all": "Denak",
   "notifications.filter.boosts": "Bultzadak",
   "notifications.filter.favourites": "Gogokoak",
   "notifications.filter.follows": "Jarraipenak",
   "notifications.filter.mentions": "Aipamenak",
   "notifications.filter.polls": "Inkestaren emaitza",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.filter.statuses": "Jarraitzen duzun jendearen berriak",
+  "notifications.grant_permission": "Eman baimena.",
   "notifications.group": "{count} jakinarazpen",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications.mark_as_read": "Markatu jakinarazpen guztiak irakurrita",
+  "notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako",
+  "notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako",
+  "notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.",
+  "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak",
+  "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.",
+  "notifications_permission_banner.title": "Ez galdu ezer inoiz",
+  "picture_in_picture.restore": "Leheneratu",
   "poll.closed": "Itxita",
   "poll.refresh": "Berritu",
   "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}",
@@ -352,7 +341,7 @@
   "poll.voted": "Erantzun honi eman diozu botoa",
   "poll_button.add_poll": "Gehitu inkesta bat",
   "poll_button.remove_poll": "Kendu inkesta",
-  "privacy.change": "Doitu mezuaren pribatutasuna",
+  "privacy.change": "Aldatu bidalketaren pribatutasuna",
   "privacy.direct.long": "Bidali aipatutako erabiltzaileei besterik ez",
   "privacy.direct.short": "Zuzena",
   "privacy.private.long": "Bidali jarraitzaileei besterik ez",
@@ -379,23 +368,23 @@
   "report.target": "{target} salatzen",
   "search.placeholder": "Bilatu",
   "search_popout.search_format": "Bilaketa aurreratuaren formatua",
-  "search_popout.tips.full_text": "Testu hutsarekin zuk idatzitako mezuak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.",
+  "search_popout.tips.full_text": "Testu hutsarekin zuk idatzitako bidalketak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.",
   "search_popout.tips.hashtag": "traola",
-  "search_popout.tips.status": "mezua",
+  "search_popout.tips.status": "bidalketa",
   "search_popout.tips.text": "Testu hutsak pantaila-izenak, erabiltzaile-izenak eta traolak bilatzen ditu",
   "search_popout.tips.user": "erabiltzailea",
   "search_results.accounts": "Jendea",
   "search_results.hashtags": "Traolak",
-  "search_results.statuses": "Tootak",
-  "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du tooten edukiaren bilaketa gaitu.",
+  "search_results.statuses": "Bidalketak",
+  "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du bidalketen edukiaren bilaketa gaitu.",
   "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}",
   "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
-  "status.admin_status": "Ireki mezu hau moderazio interfazean",
+  "status.admin_status": "Ireki bidalketa hau moderazio interfazean",
   "status.block": "Blokeatu @{name}",
   "status.bookmark": "Laster-marka",
   "status.cancel_reblog_private": "Kendu bultzada",
-  "status.cannot_reblog": "Mezu honi ezin zaio bultzada eman",
-  "status.copy": "Kopiatu mezuaren esteka",
+  "status.cannot_reblog": "Bidalketa honi ezin zaio bultzada eman",
+  "status.copy": "Kopiatu bidalketaren esteka",
   "status.delete": "Ezabatu",
   "status.detailed_status": "Elkarrizketaren ikuspegi xehetsua",
   "status.direct": "Mezu zuzena @{name}(r)i",
@@ -408,14 +397,14 @@
   "status.more": "Gehiago",
   "status.mute": "Mututu @{name}",
   "status.mute_conversation": "Mututu elkarrizketa",
-  "status.open": "Hedatu mezu hau",
+  "status.open": "Hedatu bidalketa hau",
   "status.pin": "Finkatu profilean",
-  "status.pinned": "Finkatutako toota",
+  "status.pinned": "Finkatutako bidalketa",
   "status.read_more": "Irakurri gehiago",
   "status.reblog": "Bultzada",
   "status.reblog_private": "Bultzada jatorrizko hartzaileei",
   "status.reblogged_by": "{name}(r)en bultzada",
-  "status.reblogs.empty": "Ez dio inork bultzada eman toot honi oraindik. Inork egiten duenean, hemen agertuko dira.",
+  "status.reblogs.empty": "Inork ez dio bultzada eman bidalketa honi oraindik. Inork egiten badu, hemen agertuko da.",
   "status.redraft": "Ezabatu eta berridatzi",
   "status.remove_bookmark": "Kendu laster-marka",
   "status.reply": "Erantzun",
@@ -443,11 +432,11 @@
   "time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
   "time_remaining.moments": "Amaitzekotan",
   "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
-  "timeline_hint.resources.followers": "Followers",
-  "timeline_hint.resources.follows": "Follows",
-  "timeline_hint.resources.statuses": "Older toots",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "timeline_hint.remote_resource_not_displayed": "Beste zerbitzarietako {resource} ez da bistaratzen.",
+  "timeline_hint.resources.followers": "Jarraitzaileak",
+  "timeline_hint.resources.follows": "Jarraitzen",
+  "timeline_hint.resources.statuses": "Bidalketa zaharragoak",
+  "trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} hizketan",
   "trends.trending_now": "Joera orain",
   "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
   "units.short.billion": "{count}B",
@@ -460,17 +449,17 @@
   "upload_form.audio_description": "Deskribatu entzumen galera duten pertsonentzat",
   "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
   "upload_form.edit": "Editatu",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.thumbnail": "Aldatu koadro txikia",
   "upload_form.undo": "Ezabatu",
   "upload_form.video_description": "Deskribatu entzumen galera edo ikusmen urritasuna duten pertsonentzat",
   "upload_modal.analyzing_picture": "Irudia aztertzen…",
   "upload_modal.apply": "Aplikatu",
-  "upload_modal.choose_image": "Choose image",
+  "upload_modal.choose_image": "Aukeratu irudia",
   "upload_modal.description_placeholder": "Vaudeville itxurako filmean yogi ñaño bat jipoitzen dute Quebec-en whiski truk",
   "upload_modal.detect_text": "Antzeman testua iruditik",
   "upload_modal.edit_media": "Editatu media",
   "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "OCR prestatzen…",
   "upload_modal.preview_label": "Aurreikusi ({ratio})",
   "upload_progress.label": "Igotzen...",
   "video.close": "Itxi bideoa",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index b062ec18b..59b512591 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.",
   "account.follows_you": "پیگیر شماست",
   "account.hide_reblogs": "نهفتن بازبوق‌های @{name}",
+  "account.joined": "پیوسته از {date}",
   "account.last_status": "آخرین فعالیت",
   "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد",
   "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی بتواند پیگیرش باشد.",
@@ -70,7 +71,7 @@
   "column.home": "خانه",
   "column.lists": "فهرست‌ها",
   "column.mutes": "کاربران خموش",
-  "column.notifications": "اعلان‌ها",
+  "column.notifications": "آگهداد",
   "column.pins": "بوق‌های ثابت",
   "column.public": "نوشته‌های همه‌جا",
   "column_back_button.label": "بازگشت",
@@ -80,7 +81,7 @@
   "column_header.pin": "ثابت‌کردن",
   "column_header.show_settings": "نمایش تنظیمات",
   "column_header.unpin": "رهاکردن",
-  "column_subheading.settings": "ساماندهی",
+  "column_subheading.settings": "تنظیمات",
   "community.column_settings.local_only": "فقط محلّی",
   "community.column_settings.media_only": "فقط رسانه",
   "community.column_settings.remote_only": "تنها دوردست",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "هنوز هیچ دامنه‌ای پنهان نشده است.",
   "empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیده‌اید. وقتی بوقی را بپسندید، این‌جا نمایش خواهد یافت.",
   "empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش این‌جا نمایش خواهد یافت.",
+  "empty_column.follow_recommendations": "ظاهرا هیچ پیشنهادی برای شما نمی‌توانیم تولید کنیم. می‌توانید از امکان جستجو برای یافتن افرادی که ممکن است بشناسید و یا کاوش میان هشتگ‌های داغ استفاده کنید.",
   "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیری‌ای ندارید. وقتی چنین درخواستی بگیرید، این‌جا نمایش خواهد یافت.",
   "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.",
   "empty_column.home": "فهرست خانگی شما خالی است! {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.",
-  "empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا",
+  "empty_column.home.suggestions": "چند پیشنهاد را ببینید",
   "empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بفرستند، این‌جا ظاهر خواهد شد.",
   "empty_column.lists": "هنوز هیچ فهرستی ندارید. هنگامی که فهرستی بسازید، این‌جا دیده خواهد شد.",
   "empty_column.mutes": "هنوز هیچ کاربری را خموش نکرده‌اید.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کاره‌ای بومی از ماستودون استفاده کنید.",
   "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال",
   "errors.unexpected_crash.report_issue": "گزارش مشکل",
+  "follow_recommendations.done": "انجام شد",
+  "follow_recommendations.heading": "افرادی را که می‌خواهید فرسته‌هایشان را ببینید دنبال کنید! این‌ها تعدادی پیشنهاد هستند.",
+  "follow_recommendations.lead": "فرسته‌های افرادی که دنبال می‌کنید به ترتیب زمانی در خوراک خانه‌تان نشان داده خواهد شد. از اشتباه کردن نترسید. می‌توانید به همین سادگی در هر زمانی از دنبال کردن افراد دست بکشید!",
   "follow_request.authorize": "اجازه دهید",
   "follow_request.reject": "رد کنید",
   "follow_requests.unlocked_explanation": "با این که حسابتان قفل نیست، کارکنان {domain} فکر کردند که ممکن است بخواهید درخواست‌ها از این حساب‌ها را به صورت دستی بازبینی کنید.",
@@ -191,7 +196,7 @@
   "hashtag.column_header.tag_mode.none": "بدون {additional}",
   "hashtag.column_settings.select.no_options_message": "هیچ پیشنهادی پیدا نشد",
   "hashtag.column_settings.select.placeholder": "هشتگ‌ها را وارد کنید…",
-  "hashtag.column_settings.tag_mode.all": "همهٔ این‌ها",
+  "hashtag.column_settings.tag_mode.all": "همۀ اینـها",
   "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها",
   "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها",
   "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
   "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
   "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
-  "introduction.federation.action": "بعدی",
-  "introduction.federation.federated.headline": "همگانی",
-  "introduction.federation.federated.text": "نوشته‌های عمومی کارسازهای دیگر در این فهرست نمایش می‌یابند.",
-  "introduction.federation.home.headline": "خانه",
-  "introduction.federation.home.text": "فرسته‌های کسانی که شما آن‌ها را پی می‌گیرید این‌جا نمایش می‌یابند. شما می‌توانید هر کسی را روی هر کارسازی پی بگیرید!",
-  "introduction.federation.local.headline": "محلّی",
-  "introduction.federation.local.text": "فرسته‌های عمومی کسانی که روی کارساز شما هستند در فهرست نوشته‌های محلی نمایش می‌یابند.",
-  "introduction.interactions.action": "پایان خودآموز!",
-  "introduction.interactions.favourite.headline": "پسندیدن",
-  "introduction.interactions.favourite.text": "با پسندیدن یک بوق، شما آن را برای آینده ذخیره می‌کنید و به نویسنده می‌گویید که از بوقش خوشتان آمده.",
-  "introduction.interactions.reblog.headline": "بازبوقیدن",
-  "introduction.interactions.reblog.text": "اگر بخواهید نوشته‌ای را با پیگیران خودتان به اشتراک بگذارید، آن را بازمی‌بوقید.",
-  "introduction.interactions.reply.headline": "پاسخ",
-  "introduction.interactions.reply.text": "می‌توانید به بوق‌های خودتان و دیگران پاسخ دهید، تا در یک گفتگو به هم زنجیر شوند.",
-  "introduction.welcome.action": "بزن بریم!",
-  "introduction.welcome.headline": "نخستین گام‌ها",
-  "introduction.welcome.text": "به دنیای شبکه‌های اجتماعی غیرمتمرکز خوش آمدید! به زودی می‌توانید نوشته‌هایتان را منتشر کرده و با دوستانتان روی دامنهٔ وسیعی از کارسازها حرف بزنید. ولی این کارساز، {domain}، با بقیه فرق دارد، چرا که میزبان نمایهٔ شماست، پس نامش را به خاطر بسپارید.",
   "keyboard_shortcuts.back": "برای بازگشت",
   "keyboard_shortcuts.blocked": "برای گشودن فهرست کاربران خموش",
   "keyboard_shortcuts.boost": "برای بازبوقیدن",
@@ -315,7 +303,7 @@
   "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟",
   "notifications.column_settings.alert": "اعلان‌های میزکار",
   "notifications.column_settings.favourite": "پسندیده‌ها:",
-  "notifications.column_settings.filter_bar.advanced": "نمایش همهٔ دسته‌ها",
+  "notifications.column_settings.filter_bar.advanced": "نمایش همۀ دسته‌ها",
   "notifications.column_settings.filter_bar.category": "نوار پالایش سریع",
   "notifications.column_settings.filter_bar.show": "نمایش",
   "notifications.column_settings.follow": "پیگیران تازه:",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "نمایش در ستون",
   "notifications.column_settings.sound": "پخش صدا",
   "notifications.column_settings.status": "بوق‌های جدید:",
+  "notifications.column_settings.unread_markers.category": "نشانه‌گذارهای آگاهی‌های خوانده‌نشده",
   "notifications.filter.all": "همه",
   "notifications.filter.boosts": "بازبوق‌ها",
   "notifications.filter.favourites": "پسندها",
@@ -336,7 +325,7 @@
   "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید",
   "notifications.grant_permission": "اعطای مجوز.",
   "notifications.group": "{count} اعلان",
-  "notifications.mark_as_read": "نشانه‌گذاری همهٔ آگاهی‌ها به عنوان خوانده‌شده",
+  "notifications.mark_as_read": "نشانه‌گذاری همۀ آگهدادها با فرنام خوانده شده",
   "notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند",
   "notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند",
   "notifications.permission_required": "اعلان‌های میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 28ff603e9..ae2a2eef6 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -1,5 +1,5 @@
 {
-  "account.account_note_header": "Muistiinpanot",
+  "account.account_note_header": "Muistiinpano",
   "account.add_or_remove_from_list": "Lisää tai poista listoilta",
   "account.badges.bot": "Botti",
   "account.badges.group": "Ryhmä",
@@ -9,19 +9,20 @@
   "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella",
   "account.cancel_follow_request": "Peruuta seurauspyyntö",
   "account.direct": "Viesti käyttäjälle @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} viestii",
   "account.domain_blocked": "Verkko-osoite piilotettu",
   "account.edit_profile": "Muokkaa profiilia",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Ilmoita minulle, kun @{name} viestii",
   "account.endorse": "Suosittele profiilissasi",
   "account.follow": "Seuraa",
   "account.followers": "Seuraajaa",
   "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajat}}",
+  "account.following_counter": "{count, plural, one {{counter} seuraa} other {{counter} seuraa}}",
   "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.",
   "account.follows_you": "Seuraa sinua",
   "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Aktiivinen viimeksi",
   "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}",
   "account.locked_info": "Tämän tili on yksityinen. Käyttäjä vahvistaa itse kuka voi seurata häntä.",
@@ -83,7 +84,7 @@
   "column_subheading.settings": "Asetukset",
   "community.column_settings.local_only": "Vain paikalliset",
   "community.column_settings.media_only": "Vain media",
-  "community.column_settings.remote_only": "Remote only",
+  "community.column_settings.remote_only": "Vain etäkäyttö",
   "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.",
   "compose_form.direct_message_warning_learn_more": "Lisätietoja",
   "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Hakutulokset",
   "emoji_button.symbols": "Symbolit",
   "emoji_button.travel": "Matkailu",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Tilin käyttäminen keskeytetty",
   "empty_column.account_timeline": "Ei ole 'toots' täällä!",
   "empty_column.account_unavailable": "Profiilia ei löydy",
   "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.",
@@ -159,21 +160,25 @@
   "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.",
   "empty_column.favourited_statuses": "Et ole vielä lisännyt tuuttauksia suosikkeihisi. Kun teet niin, tuuttaus näkyy tässä.",
   "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä tuuttausta suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Sinulla ei ole vielä seurauspyyntöjä. Kun saat sellaisen, näkyy se tässä.",
   "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.",
   "empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.",
-  "empty_column.home.public_timeline": "yleinen aikajana",
+  "empty_column.home.suggestions": "Katso joitakin ehdotuksia",
   "empty_column.list": "Lista on vielä tyhjä. Listan jäsenten julkaisemat tilapäivitykset tulevat tähän näkyviin.",
   "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.",
   "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
   "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.",
   "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä",
   "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.",
   "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.",
   "errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle",
   "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
+  "follow_recommendations.done": "Valmis",
+  "follow_recommendations.heading": "Seuraa ihmisiä, joilta haluaisit nähdä viestejä! Tässä on muutamia ehdotuksia.",
+  "follow_recommendations.lead": "Viestit seuraamiltasi henkilöiltä näkyvät aikajärjestyksessä kotinäytön syötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraaminen yhtä helposti milloin tahansa!",
   "follow_request.authorize": "Valtuuta",
   "follow_request.reject": "Hylkää",
   "follow_requests.unlocked_explanation": "Vaikka tilisi ei ole lukittu, {domain} ylläpitäjien mielestä haluat tarkistaa näiden tilien seurauspyynnöt manuaalisesti.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "Päivä päiviä",
   "intervals.full.hours": "Tunti tunteja",
   "intervals.full.minutes": "Minuuti minuuteja",
-  "introduction.federation.action": "Seuraava",
-  "introduction.federation.federated.headline": "Federaatioitettu",
-  "introduction.federation.federated.text": "Julkisia viestejä muiden serverien that is not a word aikoo tulla federoituun aikajanaan.",
-  "introduction.federation.home.headline": "Koti",
-  "introduction.federation.home.text": "Viestit muilta pelaajilta jota seuraat aikovat tulla koti sivuusi. Voit seurata ketä vain missä vain serverillä!",
-  "introduction.federation.local.headline": "Paikallinen",
-  "introduction.federation.local.text": "Julkiset viestit muilta pelaajilta samalla serverillä tulevat sinun paikalliseen aikajanaan.",
-  "introduction.interactions.action": "Suorita harjoitus!",
-  "introduction.interactions.favourite.headline": "Lempi",
-  "introduction.interactions.favourite.text": "Toot is not a word.",
-  "introduction.interactions.reblog.headline": "Nopeutus",
-  "introduction.interactions.reblog.text": "Toot is not a word",
-  "introduction.interactions.reply.headline": "Vastaa",
-  "introduction.interactions.reply.text": "TOOT IS NOT A WORD",
-  "introduction.welcome.action": "Mennään!",
-  "introduction.welcome.headline": "Ensimmäiset askeleet",
-  "introduction.welcome.text": "Tervetuloa fediverseen! Muutaman hetken kuluttua voit lähettää viestejä ja jutella ystävillesi useiden palvelinten halki. Mutta tämä palvelin {domain}, on erityinen — sinun profiilisi sijaitsee sillä, joten muista sen nimi.",
   "keyboard_shortcuts.back": "liiku taaksepäin",
   "keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä",
   "keyboard_shortcuts.boost": "buustaa",
@@ -255,8 +243,8 @@
   "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä",
   "keyboard_shortcuts.up": "siirry listassa ylöspäin",
   "lightbox.close": "Sulje",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Pakkaa kuvan näkymälaatikko",
+  "lightbox.expand": "Laajenna kuvan näkymälaatikko",
   "lightbox.next": "Seuraava",
   "lightbox.previous": "Edellinen",
   "lists.account.add": "Lisää listaan",
@@ -266,10 +254,10 @@
   "lists.edit.submit": "Vaihda otsikko",
   "lists.new.create": "Lisää lista",
   "lists.new.title_placeholder": "Uuden listan nimi",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.followed": "Jokainen seurattu käyttäjä",
+  "lists.replies_policy.list": "Luettelon jäsenet",
+  "lists.replies_policy.none": "Ei kukaan",
+  "lists.replies_policy.title": "Näytä vastaukset:",
   "lists.search": "Etsi seuraamistasi henkilöistä",
   "lists.subheading": "Omat listat",
   "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}",
@@ -277,9 +265,9 @@
   "media_gallery.toggle_visible": "Säädä näkyvyyttä",
   "missing_indicator.label": "Ei löytynyt",
   "missing_indicator.sublabel": "Tätä resurssia ei löytynyt",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Kesto",
   "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Ikuisesti",
   "navigation_bar.apps": "Mobiilisovellukset",
   "navigation_bar.blocks": "Estetyt käyttäjät",
   "navigation_bar.bookmarks": "Kirjanmerkit",
@@ -310,7 +298,7 @@
   "notification.own_poll": "Kyselysi on päättynyt",
   "notification.poll": "Kysely, johon osallistuit, on päättynyt",
   "notification.reblog": "{name} buustasi tilaasi",
-  "notification.status": "{name} just posted",
+  "notification.status": "{name} juuri lähetetty",
   "notifications.clear": "Tyhjennä ilmoitukset",
   "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
   "notifications.column_settings.alert": "Työpöytäilmoitukset",
@@ -327,23 +315,24 @@
   "notifications.column_settings.show": "Näytä sarakkeessa",
   "notifications.column_settings.sound": "Äänimerkki",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Lukemattomat ilmoitusmerkit",
   "notifications.filter.all": "Kaikki",
   "notifications.filter.boosts": "Buustit",
   "notifications.filter.favourites": "Suosikit",
   "notifications.filter.follows": "Seuraa",
   "notifications.filter.mentions": "Maininnat",
   "notifications.filter.polls": "Kyselyn tulokset",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.filter.statuses": "Päivitykset henkilöiltä, joita seuraat",
+  "notifications.grant_permission": "Myönnä lupa.",
   "notifications.group": "{count} ilmoitusta",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications.mark_as_read": "Merkitse jokainen ilmoitus luetuksi",
+  "notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty",
+  "notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin estetty",
+  "notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa lupaa ei ole myönnetty.",
+  "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön",
+  "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon} -painikkeen kautta.",
+  "notifications_permission_banner.title": "Älä anna minkään mennä ohi",
+  "picture_in_picture.restore": "Laita se takaisin",
   "poll.closed": "Suljettu",
   "poll.refresh": "Päivitä",
   "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}",
@@ -443,7 +432,7 @@
   "time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä",
   "time_remaining.moments": "Hetki jäljellä",
   "time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.",
   "timeline_hint.resources.followers": "Seuraajat",
   "timeline_hint.resources.follows": "Seuraa",
   "timeline_hint.resources.statuses": "Vanhemmat tuuttaukset",
@@ -470,7 +459,7 @@
   "upload_modal.detect_text": "Tunnista teksti kuvasta",
   "upload_modal.edit_media": "Muokkaa mediaa",
   "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "Valmistellaan OCR…",
   "upload_modal.preview_label": "Esikatselu ({ratio})",
   "upload_progress.label": "Ladataan...",
   "video.close": "Sulje video",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 8eedb8d85..811e318b4 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -22,9 +22,10 @@
   "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.",
   "account.follows_you": "Vous suit",
   "account.hide_reblogs": "Masquer les partages de @{name}",
+  "account.joined": "Ici depuis {date}",
   "account.last_status": "Dernière activité",
   "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}",
-  "account.locked_info": "Ce compte est verrouillé. Son ou sa propriétaire approuve manuellement qui peut le suivre.",
+  "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.",
   "account.media": "Médias",
   "account.mention": "Mentionner @{name}",
   "account.moved_to": "{name} a déménagé vers :",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Ignorer les notifications de @{name}",
   "account.muted": "Masqué·e",
   "account.never_active": "Jamais",
-  "account.posts": "Pouets",
-  "account.posts_with_replies": "Pouets et réponses",
+  "account.posts": "Messages",
+  "account.posts_with_replies": "Partages et réponses",
   "account.report": "Signaler @{name}",
   "account.requested": "En attente d’approbation. Cliquez pour annuler la requête",
   "account.share": "Partager le profil de @{name}",
   "account.show_reblogs": "Afficher les partages de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Pouet} other {{counter} Pouets}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Message} other {{counter} Messages}}",
   "account.unblock": "Débloquer @{name}",
   "account.unblock_domain": "Débloquer le domaine {domain}",
   "account.unendorse": "Ne plus recommander sur le profil",
@@ -71,7 +72,7 @@
   "column.lists": "Listes",
   "column.mutes": "Comptes masqués",
   "column.notifications": "Notifications",
-  "column.pins": "Pouets épinglés",
+  "column.pins": "Messages épinglés",
   "column.public": "Fil public global",
   "column_back_button.label": "Retour",
   "column_header.hide_settings": "Cacher les paramètres",
@@ -84,10 +85,10 @@
   "community.column_settings.local_only": "Local seulement",
   "community.column_settings.media_only": "Média uniquement",
   "community.column_settings.remote_only": "Distant seulement",
-  "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.",
+  "compose_form.direct_message_warning": "Ce message sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
   "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur « non listé ». Seuls les pouets avec une visibilité « publique » peuvent être recherchés par hashtag.",
-  "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.",
+  "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos messages privés.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "Qu’avez-vous en tête ?",
   "compose_form.poll.add_option": "Ajouter un choix",
@@ -101,15 +102,15 @@
   "compose_form.sensitive.hide": "Marquer le média comme sensible",
   "compose_form.sensitive.marked": "{count, plural, one {Le média est marqué comme sensible} other {Les médias sont marqués comme sensibles}}",
   "compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible",
-  "compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
-  "compose_form.spoiler.unmarked": "Le texte n’est pas caché",
+  "compose_form.spoiler.marked": "Enlever l’avertissement de contenu",
+  "compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu",
   "compose_form.spoiler_placeholder": "Écrivez votre avertissement ici",
   "confirmation_modal.cancel": "Annuler",
   "confirmations.block.block_and_report": "Bloquer et signaler",
   "confirmations.block.confirm": "Bloquer",
   "confirmations.block.message": "Voulez-vous vraiment bloquer {name} ?",
   "confirmations.delete.confirm": "Supprimer",
-  "confirmations.delete.message": "Confirmez-vous la suppression de ce pouet ?",
+  "confirmations.delete.message": "Voulez-vous vraiment supprimer ce message ?",
   "confirmations.delete_list.confirm": "Supprimer",
   "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?",
   "confirmations.domain_block.confirm": "Bloquer tout le domaine",
@@ -133,7 +134,7 @@
   "directory.local": "De {domain} seulement",
   "directory.new_arrivals": "Inscrit·e·s récemment",
   "directory.recently_active": "Actif·ve·s récemment",
-  "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
+  "embed.instructions": "Intégrez ce message à votre site en copiant le code ci-dessous.",
   "embed.preview": "Il apparaîtra comme cela :",
   "emoji_button.activity": "Activité",
   "emoji_button.custom": "Personnalisés",
@@ -150,20 +151,21 @@
   "emoji_button.symbols": "Symboles",
   "emoji_button.travel": "Lieux & Voyages",
   "empty_column.account_suspended": "Compte suspendu",
-  "empty_column.account_timeline": "Aucun pouet ici !",
+  "empty_column.account_timeline": "Aucun message ici !",
   "empty_column.account_unavailable": "Profil non disponible",
   "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.",
-  "empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.",
+  "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.",
   "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
   "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.",
   "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.",
-  "empty_column.favourited_statuses": "Vous n’avez aucun pouet favoris pour le moment. Lorsque vous en mettrez un en favori, il apparaîtra ici.",
-  "empty_column.favourites": "Personne n’a encore mis ce pouet en favori. Lorsque quelqu’un le fera, il apparaîtra ici.",
+  "empty_column.favourited_statuses": "Vous n’avez pas encore de message en favori. Lorsque vous en ajouterez un, il apparaîtra ici.",
+  "empty_column.favourites": "Personne n’a encore ajouté ce message à ses favoris. Lorsque quelqu’un le fera, il apparaîtra ici.",
+  "empty_column.follow_recommendations": "Il semble qu’aucune suggestion n’ait pu être générée pour vous. Vous pouvez essayer d’utiliser la recherche pour découvrir des personnes que vous pourriez connaître ou explorer les hashtags tendance.",
   "empty_column.follow_requests": "Vous n’avez pas encore de demande de suivi. Lorsque vous en recevrez une, elle apparaîtra ici.",
   "empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.",
   "empty_column.home": "Vous ne suivez personne. Visitez {public} ou utilisez la recherche pour trouver d’autres personnes à suivre.",
-  "empty_column.home.public_timeline": "le fil public",
-  "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.",
+  "empty_column.home.suggestions": "Voir quelques suggestions",
+  "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, iels apparaîtront ici.",
   "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.",
   "empty_column.mutes": "Vous n’avez masqué aucun·e utilisateur·rice pour le moment.",
   "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
@@ -174,9 +176,12 @@
   "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
   "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
   "errors.unexpected_crash.report_issue": "Signaler le problème",
+  "follow_recommendations.done": "Terminé",
+  "follow_recommendations.heading": "Suivez les personnes dont vous aimeriez voir les messages ! Voici quelques suggestions.",
+  "follow_recommendations.lead": "Les messages des personnes que vous suivez apparaîtront par ordre chronologique sur votre fil d'accueil. Ne craignez pas de faire des erreurs, vous pouvez arrêter de suivre les gens aussi facilement à tout moment !",
   "follow_request.authorize": "Accepter",
   "follow_request.reject": "Rejeter",
-  "follow_requests.unlocked_explanation": "Même si votre compte n’est pas verrouillé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.",
+  "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.",
   "generic.saved": "Sauvegardé",
   "getting_started.developers": "Développeur·euse·s",
   "getting_started.directory": "Annuaire des profils",
@@ -203,57 +208,40 @@
   "intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
   "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Suivant",
-  "introduction.federation.federated.headline": "Fil public global",
-  "introduction.federation.federated.text": "Les messages publics provenant d'autres serveurs du fediverse apparaîtront dans le fil public global.",
-  "introduction.federation.home.headline": "Accueil",
-  "introduction.federation.home.text": "Les messages des personnes que vous suivez apparaîtront dans votre fil d'accueil. Vous pouvez suivre n'importe qui sur n'importe quel serveur !",
-  "introduction.federation.local.headline": "Fil public local",
-  "introduction.federation.local.text": "Les messages publics de personnes se trouvant sur le même serveur que vous apparaîtront sur le fil public local.",
-  "introduction.interactions.action": "Finir le tutoriel !",
-  "introduction.interactions.favourite.headline": "Favoris",
-  "introduction.interactions.favourite.text": "Vous pouvez garder un pouet pour plus tard et faire savoir à son auteur·ice que vous l’avez aimé, en l'ajoutant aux favoris.",
-  "introduction.interactions.reblog.headline": "Partager",
-  "introduction.interactions.reblog.text": "Vous pouvez partager les pouets d'autres personnes avec vos abonné·e·s en les repartageant.",
-  "introduction.interactions.reply.headline": "Répondre",
-  "introduction.interactions.reply.text": "Vous pouvez répondre aux pouets d'autres personnes et à vos propres pouets, ce qui les enchaînera dans une conversation.",
-  "introduction.welcome.action": "Allons-y !",
-  "introduction.welcome.headline": "Premiers pas",
-  "introduction.welcome.text": "Bienvenue dans le fédiverse ! Dans quelques instants, vous pourrez diffuser des messages et parler à vos ami·e·s sur une grande variété de serveurs. Mais ce serveur, {domain}, est spécial - il héberge votre profil, alors souvenez-vous de son nom.",
-  "keyboard_shortcuts.back": "revenir en arrière",
-  "keyboard_shortcuts.blocked": "ouvrir la liste des comptes bloqués",
-  "keyboard_shortcuts.boost": "partager",
-  "keyboard_shortcuts.column": "pour focaliser un statut dans l’une des colonnes",
-  "keyboard_shortcuts.compose": "cibler la zone de rédaction",
+  "keyboard_shortcuts.back": "Revenir en arrière",
+  "keyboard_shortcuts.blocked": "Ouvrir la liste des comptes bloqués",
+  "keyboard_shortcuts.boost": "Partager le message",
+  "keyboard_shortcuts.column": "Se placer dans une colonne",
+  "keyboard_shortcuts.compose": "se placer dans la zone de rédaction",
   "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.direct": "ouvrir la colonne des messages directs",
-  "keyboard_shortcuts.down": "descendre dans la liste",
-  "keyboard_shortcuts.enter": "pour ouvrir le statut",
-  "keyboard_shortcuts.favourite": "ajouter aux favoris",
-  "keyboard_shortcuts.favourites": "ouvrir la liste des favoris",
-  "keyboard_shortcuts.federated": "ouvrir le fil public global",
+  "keyboard_shortcuts.direct": "Ouvrir la colonne des messages directs",
+  "keyboard_shortcuts.down": "Descendre dans la liste",
+  "keyboard_shortcuts.enter": "Ouvrir le message",
+  "keyboard_shortcuts.favourite": "Ajouter le message aux favoris",
+  "keyboard_shortcuts.favourites": "Ouvrir la liste des favoris",
+  "keyboard_shortcuts.federated": "Ouvrir le fil public global",
   "keyboard_shortcuts.heading": "Raccourcis clavier",
-  "keyboard_shortcuts.home": "ouvrir le fil d’accueil",
+  "keyboard_shortcuts.home": "Ouvrir le fil d’accueil",
   "keyboard_shortcuts.hotkey": "Raccourci clavier",
-  "keyboard_shortcuts.legend": "afficher cet aide-mémoire",
-  "keyboard_shortcuts.local": "ouvrir le fil public local",
+  "keyboard_shortcuts.legend": "Afficher cet aide-mémoire",
+  "keyboard_shortcuts.local": "Ouvrir le fil public local",
   "keyboard_shortcuts.mention": "mentionner l’auteur·rice",
-  "keyboard_shortcuts.muted": "ouvrir la liste des comptes masqués",
-  "keyboard_shortcuts.my_profile": "ouvrir votre profil",
-  "keyboard_shortcuts.notifications": "ouvrir la colonne de notifications",
+  "keyboard_shortcuts.muted": "Ouvrir la liste des comptes masqués",
+  "keyboard_shortcuts.my_profile": "Ouvrir votre profil",
+  "keyboard_shortcuts.notifications": "Ouvrir la colonne de notifications",
   "keyboard_shortcuts.open_media": "ouvrir le média",
-  "keyboard_shortcuts.pinned": "ouvrir la liste des pouets épinglés",
+  "keyboard_shortcuts.pinned": "Ouvrir la liste des messages épinglés",
   "keyboard_shortcuts.profile": "ouvrir le profil de l’auteur·rice",
-  "keyboard_shortcuts.reply": "répondre",
-  "keyboard_shortcuts.requests": "ouvrir la liste de demandes d’abonnement",
-  "keyboard_shortcuts.search": "cibler la zone de recherche",
-  "keyboard_shortcuts.spoilers": "pour afficher/masquer le champ CW",
-  "keyboard_shortcuts.start": "ouvrir la colonne « Pour commencer »",
-  "keyboard_shortcuts.toggle_hidden": "déplier/replier le texte derrière un CW",
-  "keyboard_shortcuts.toggle_sensitivity": "afficher/cacher les médias",
-  "keyboard_shortcuts.toot": "démarrer un tout nouveau pouet",
-  "keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche",
-  "keyboard_shortcuts.up": "remonter dans la liste",
+  "keyboard_shortcuts.reply": "Répondre au message",
+  "keyboard_shortcuts.requests": "Ouvrir la liste de demandes d’abonnement",
+  "keyboard_shortcuts.search": "Se placer dans le champ de recherche",
+  "keyboard_shortcuts.spoilers": "Afficher/cacher le champ de CW",
+  "keyboard_shortcuts.start": "Ouvrir la colonne « Pour commencer »",
+  "keyboard_shortcuts.toggle_hidden": "Déplier/replier le texte derrière un CW",
+  "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher les médias",
+  "keyboard_shortcuts.toot": "Commencer un nouveau message",
+  "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche",
+  "keyboard_shortcuts.up": "Monter dans la liste",
   "lightbox.close": "Fermer",
   "lightbox.compress": "Compresser la fenêtre de visualisation des images",
   "lightbox.expand": "Agrandir la fenêtre de visualisation des images",
@@ -266,7 +254,7 @@
   "lists.edit.submit": "Modifier le titre",
   "lists.new.create": "Ajouter une liste",
   "lists.new.title_placeholder": "Titre de la nouvelle liste",
-  "lists.replies_policy.followed": "N’importe quel·le utilisateur·rice suivi·e",
+  "lists.replies_policy.followed": "Comptes que vous suivez",
   "lists.replies_policy.list": "Membres de la liste",
   "lists.replies_policy.none": "Personne",
   "lists.replies_policy.title": "Afficher les réponses à :",
@@ -284,7 +272,7 @@
   "navigation_bar.blocks": "Comptes bloqués",
   "navigation_bar.bookmarks": "Marque-pages",
   "navigation_bar.community_timeline": "Fil public local",
-  "navigation_bar.compose": "Rédiger un nouveau pouet",
+  "navigation_bar.compose": "Rédiger un nouveau message",
   "navigation_bar.direct": "Messages directs",
   "navigation_bar.discover": "Découvrir",
   "navigation_bar.domain_blocks": "Domaines bloqués",
@@ -299,17 +287,17 @@
   "navigation_bar.logout": "Déconnexion",
   "navigation_bar.mutes": "Comptes masqués",
   "navigation_bar.personal": "Personnel",
-  "navigation_bar.pins": "Pouets épinglés",
+  "navigation_bar.pins": "Messages épinglés",
   "navigation_bar.preferences": "Préférences",
   "navigation_bar.public_timeline": "Fil public global",
   "navigation_bar.security": "Sécurité",
-  "notification.favourite": "{name} a ajouté à ses favoris :",
+  "notification.favourite": "{name} a ajouté le message à ses favoris",
   "notification.follow": "{name} vous suit",
   "notification.follow_request": "{name} a demandé à vous suivre",
   "notification.mention": "{name} vous a mentionné·e :",
   "notification.own_poll": "Votre sondage est terminé",
   "notification.poll": "Un sondage auquel vous avez participé vient de se terminer",
-  "notification.reblog": "{name} a partagé votre statut",
+  "notification.reblog": "{name} a partagé votre message",
   "notification.status": "{name} vient de publier",
   "notifications.clear": "Effacer les notifications",
   "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?",
@@ -325,8 +313,9 @@
   "notifications.column_settings.push": "Notifications push",
   "notifications.column_settings.reblog": "Partages :",
   "notifications.column_settings.show": "Afficher dans la colonne",
-  "notifications.column_settings.sound": "Émettre un son",
-  "notifications.column_settings.status": "Nouveaux pouets :",
+  "notifications.column_settings.sound": "Jouer un son",
+  "notifications.column_settings.status": "Nouveaux messages :",
+  "notifications.column_settings.unread_markers.category": "Marqueurs de notifications non lues",
   "notifications.filter.all": "Tout",
   "notifications.filter.boosts": "Partages",
   "notifications.filter.favourites": "Favoris",
@@ -379,23 +368,23 @@
   "report.target": "Signalement de {target}",
   "search.placeholder": "Rechercher",
   "search_popout.search_format": "Recherche avancée",
-  "search_popout.tips.full_text": "Un texte normal retourne les pouets que vous avez écris, mis en favori, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.",
+  "search_popout.tips.full_text": "Un texte normal retourne les messages que vous avez écrits, ajoutés à vos favoris, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondants.",
   "search_popout.tips.hashtag": "hashtag",
   "search_popout.tips.status": "statuts",
   "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants",
   "search_popout.tips.user": "utilisateur·ice",
   "search_results.accounts": "Comptes",
   "search_results.hashtags": "Hashtags",
-  "search_results.statuses": "Pouets",
-  "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.",
+  "search_results.statuses": "Messages",
+  "search_results.statuses_fts_disabled": "La recherche de messages par leur contenu n'est pas activée sur ce serveur Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
   "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
-  "status.admin_status": "Ouvrir ce statut dans l’interface de modération",
+  "status.admin_status": "Ouvrir ce message dans l’interface de modération",
   "status.block": "Bloquer @{name}",
   "status.bookmark": "Ajouter aux marque-pages",
   "status.cancel_reblog_private": "Annuler le partage",
-  "status.cannot_reblog": "Ce pouet ne peut pas être partagé",
-  "status.copy": "Copier le lien vers le pouet",
+  "status.cannot_reblog": "Ce message ne peut pas être partagé",
+  "status.copy": "Copier le lien vers le message",
   "status.delete": "Supprimer",
   "status.detailed_status": "Vue détaillée de la conversation",
   "status.direct": "Envoyer un message direct à @{name}",
@@ -408,14 +397,14 @@
   "status.more": "Plus",
   "status.mute": "Masquer @{name}",
   "status.mute_conversation": "Masquer la conversation",
-  "status.open": "Déplier ce statut",
+  "status.open": "Afficher le message entier",
   "status.pin": "Épingler sur le profil",
-  "status.pinned": "Pouet épinglé",
+  "status.pinned": "Message épinglé",
   "status.read_more": "En savoir plus",
   "status.reblog": "Partager",
   "status.reblog_private": "Partager à l’audience originale",
   "status.reblogged_by": "{name} a partagé",
-  "status.reblogs.empty": "Personne n’a encore partagé ce pouet. Lorsque quelqu’un le fera, il apparaîtra ici.",
+  "status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.",
   "status.redraft": "Supprimer et ré-écrire",
   "status.remove_bookmark": "Retirer des marque-pages",
   "status.reply": "Répondre",
@@ -446,7 +435,7 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} des autres serveurs ne sont pas affichés.",
   "timeline_hint.resources.followers": "Les abonnés",
   "timeline_hint.resources.follows": "Les abonnements",
-  "timeline_hint.resources.statuses": "Les anciens pouets",
+  "timeline_hint.resources.statuses": "Messages plus anciens",
   "trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}",
   "trends.trending_now": "Tendance en ce moment",
   "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 928742dd7..7c2dfc17b 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
   "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
new file mode 100644
index 000000000..6b0fe7a65
--- /dev/null
+++ b/app/javascript/mastodon/locales/gd.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "Nòta",
+  "account.add_or_remove_from_list": "Cuir ris no thoir air falbh o na liostaichean",
+  "account.badges.bot": "Bot",
+  "account.badges.group": "Buidheann",
+  "account.block": "Bac @{name}",
+  "account.block_domain": "Bac an àrainn {domain}",
+  "account.blocked": "’Ga bhacadh",
+  "account.browse_more_on_origin_server": "Rùraich barrachd dheth air a’ phròifil thùsail",
+  "account.cancel_follow_request": "Sguir dhen iarrtas leantainn",
+  "account.direct": "Cuir teachdaireachd dhìreach gu @{name}",
+  "account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris",
+  "account.domain_blocked": "Chaidh an àrainn a bhacadh",
+  "account.edit_profile": "Deasaich a’ phròifil",
+  "account.enable_notifications": "Cuir brath thugam nuair a chuireas @{name} post ris",
+  "account.endorse": "Brosnaich air a’ phròifil",
+  "account.follow": "Lean air",
+  "account.followers": "Luchd-leantainn",
+  "account.followers.empty": "Chan eil neach sam bith a’ leantainn air a’ chleachdaiche seo fhathast.",
+  "account.followers_counter": "{count, plural, one {{counter} neach-leantainn} two {{counter} neach-leantainn} few {{counter} luchd-leantainn} other {{counter} luchd-leantainn}}",
+  "account.following_counter": "{count, plural, one {A’ leantainn air {counter}} two {A’ leantainn air {counter}} few {A’ leantainn air {counter}} other {A’ leantainn air {counter}}}",
+  "account.follows.empty": "Chan eil an cleachdaiche seo a’ leantainn air neach sam bith fhathast.",
+  "account.follows_you": "’Gad leantainn",
+  "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Gnìomhach an turas mu dheireadh",
+  "account.link_verified_on": "Chaidh dearbhadh cò leis a tha an ceangal seo {date}",
+  "account.locked_info": "Tha prìobhaideachd ghlaiste aig a’ chunntais seo. Nì an sealbhadair lèirmheas a làimh air cò dh’fhaodas leantainn orra.",
+  "account.media": "Meadhanan",
+  "account.mention": "Thoir iomradh air @{name}",
+  "account.moved_to": "Chaidh {name} imrich gu:",
+  "account.mute": "Mùch @{name}",
+  "account.mute_notifications": "Mùch na brathan o @{name}",
+  "account.muted": "’Ga mhùchadh",
+  "account.never_active": "Chan ann idir",
+  "account.posts": "Postaichean",
+  "account.posts_with_replies": "Postaichean ’s freagairtean",
+  "account.report": "Dèan gearan mu @{name}",
+  "account.requested": "A’ feitheamh air aontachadh. Briog airson sgur dhen iarrtas leantainn",
+  "account.share": "Co-roinn a’ phròifil aig @{name}",
+  "account.show_reblogs": "Seall na brosnachaidhean o @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}}",
+  "account.unblock": "Dì-bhac @{name}",
+  "account.unblock_domain": "Dì-bhac an àrainn {domain}",
+  "account.unendorse": "Na brosnaich air a’ phròifil",
+  "account.unfollow": "Na lean tuilleadh",
+  "account.unmute": "Dì-mhùch @{name}",
+  "account.unmute_notifications": "Dì-mhùch na brathan o @{name}",
+  "account_note.placeholder": "Briog airson nòta a chur ris",
+  "alert.rate_limited.message": "Feuch ris a-rithist às dèidh {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Cuingeachadh ùine",
+  "alert.unexpected.message": "Thachair mearachd ris nach robh dùil.",
+  "alert.unexpected.title": "Oich!",
+  "announcement.announcement": "Brath-fios",
+  "autosuggest_hashtag.per_week": "{count} gach seachdain",
+  "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras",
+  "bundle_column_error.body": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.",
+  "bundle_column_error.retry": "Feuch ris a-rithist",
+  "bundle_column_error.title": "Mearachd lìonraidh",
+  "bundle_modal_error.close": "Dùin",
+  "bundle_modal_error.message": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.",
+  "bundle_modal_error.retry": "Feuch ris a-rithist",
+  "column.blocks": "Cleachdaichean bacte",
+  "column.bookmarks": "Comharran-lìn",
+  "column.community": "Loidhne-ama ionadail",
+  "column.direct": "Teachdaireachdan dìreach",
+  "column.directory": "Rùraich sna pròifilean",
+  "column.domain_blocks": "Àrainnean bacte",
+  "column.favourites": "Na h-annsachdan",
+  "column.follow_requests": "Iarrtasan leantainn",
+  "column.home": "Dachaigh",
+  "column.lists": "Liostaichean",
+  "column.mutes": "Cleachdaichean mùchte",
+  "column.notifications": "Brathan",
+  "column.pins": "Postaichean prìnichte",
+  "column.public": "Loidhne-ama cho-naisgte",
+  "column_back_button.label": "Air ais",
+  "column_header.hide_settings": "Falaich na roghainnean",
+  "column_header.moveLeft_settings": "Gluais an colbh dhan taobh chlì",
+  "column_header.moveRight_settings": "Gluais an colbh dhan taobh deas",
+  "column_header.pin": "Prìnich",
+  "column_header.show_settings": "Seall na roghainnean",
+  "column_header.unpin": "Dì-phrìnich",
+  "column_subheading.settings": "Roghainnean",
+  "community.column_settings.local_only": "Feadhainn ionadail a-mhàin",
+  "community.column_settings.media_only": "Meadhanan a-mhàin",
+  "community.column_settings.remote_only": "Feadhainn chèin a-mhàin",
+  "compose_form.direct_message_warning": "Cha dèid am post seo a chur ach dha na cleachdaichean air an dug thu iomradh.",
+  "compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh",
+  "compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais on a tha e falaichte o liostaichean. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.",
+  "compose_form.lock_disclaimer": "Chan eil an cunntas agad {locked}. ’S urrainn do dhuine sam bith leantainn ort is na postaichean agad a tha dhan luchd-leantainn agad a-mhàin a shealltainn.",
+  "compose_form.lock_disclaimer.lock": "glaiste",
+  "compose_form.placeholder": "Dè tha air d’ aire?",
+  "compose_form.poll.add_option": "Cuir roghainn ris",
+  "compose_form.poll.duration": "Faide a’ chunntais-bheachd",
+  "compose_form.poll.option_placeholder": "Roghainn {number}",
+  "compose_form.poll.remove_option": "Thoir an roghainn seo air falbh",
+  "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh",
+  "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh",
+  "compose_form.publish": "Postaich",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Tha comharra ris a’ mheadhan gu bheil e frionasach} two {Tha comharra ris na meadhanan gu bheil iad frionasach} few {Tha comharra ris na meadhanan gu bheil iad frionasach} other {Tha comharra ris na meadhanan gu bheil iad frionasach}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Chan eil comharra ris a’ mheadhan gun robh e frionasach} two {Chan eil comharra ris na meadhanan gun robh iad frionasach} few {Chan eil comharra ris na meadhanan gun robh iad frionasach} other {Chan eil comharra ris na meadhanan gun robh iad frionasach}}",
+  "compose_form.spoiler.marked": "Tha an teacsa falaichte air cùlaibh rabhaidh",
+  "compose_form.spoiler.unmarked": "Chan eil an teacsa flaichte",
+  "compose_form.spoiler_placeholder": "Sgrìobh an rabhadh agad an-seo",
+  "confirmation_modal.cancel": "Sguir dheth",
+  "confirmations.block.block_and_report": "Bac ⁊ dèan gearan",
+  "confirmations.block.confirm": "Bac",
+  "confirmations.block.message": "A bheil thu cinnteach gu bheil thu airson {name} a bhacadh?",
+  "confirmations.delete.confirm": "Sguab às",
+  "confirmations.delete.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?",
+  "confirmations.delete_list.confirm": "Sguab às",
+  "confirmations.delete_list.message": "A bheil thu cinnteach gu bheil thu airson an liosta seo a sguabadh às gu buan?",
+  "confirmations.domain_block.confirm": "Bac an àrainn uile gu lèir",
+  "confirmations.domain_block.message": "A bheil thu cinnteach dha-rìribh gu bheil thu airson an àrainn {domain} a bhacadh uile gu lèir? Mar as trice, foghnaidh gun dèan thu bacadh no mùchadh no dhà gu sònraichte agus bhiod sin na b’ fheàrr. Chan fhaic thu susbaint on àrainn ud air loidhne-ama phoblach sam bith no am measg nam brathan agad. Thèid an luchd-leantainn agad on àrainn ud a thoirt air falbh.",
+  "confirmations.logout.confirm": "Clàraich a-mach",
+  "confirmations.logout.message": "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?",
+  "confirmations.mute.confirm": "Mùch",
+  "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 leantainn ort.",
+  "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",
+  "confirmations.unfollow.message": "A bheil thu cinnteach nach eil thu airson leantainn air {name} tuilleadh?",
+  "conversation.delete": "Sguab às an còmhradh",
+  "conversation.mark_as_read": "Cuir comharra gun deach a leughadh",
+  "conversation.open": "Seall an còmhradh",
+  "conversation.with": "Le {names}",
+  "directory.federated": "On cho-shaoghal aithnichte",
+  "directory.local": "O {domain} a-mhàin",
+  "directory.new_arrivals": "Feadhainn ùra",
+  "directory.recently_active": "Gnìomhach o chionn ghoirid",
+  "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.",
+  "embed.preview": "Seo an coltas a bhios air:",
+  "emoji_button.activity": "Gnìomhachd",
+  "emoji_button.custom": "Gnàthaichte",
+  "emoji_button.flags": "Brataichean",
+  "emoji_button.food": "Biadh ⁊ deoch",
+  "emoji_button.label": "Cuir a-steach Emoji",
+  "emoji_button.nature": "An nàdar",
+  "emoji_button.not_found": "Chan eil Emoji gnàthaichte ann!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Nithean",
+  "emoji_button.people": "Daoine",
+  "emoji_button.recent": "Air a chleachdadh o chionn ghoirid",
+  "emoji_button.search": "Lorg…",
+  "emoji_button.search_results": "Toraidhean an luirg",
+  "emoji_button.symbols": "Samhlaidhean",
+  "emoji_button.travel": "Siubhal ⁊ àitichean",
+  "empty_column.account_suspended": "Chaidh an cunntas a chur à rèim",
+  "empty_column.account_timeline": "Chan eil post an-seo!",
+  "empty_column.account_unavailable": "Chan eil a’ phròifil ri làimh",
+  "empty_column.blocks": "Cha do bhac thu cleachdaiche sam bith fhathast.",
+  "empty_column.bookmarked_statuses": "Chan eil comharra-lìn ri post agad fhathast. Nuair a nì thu comharra-lìn de dh’fhear, nochdaidh e an-seo.",
+  "empty_column.community": "Tha an loidhne-ama ionadail falamh. Sgrìobh rudeigin gu poblach airson toiseach-tòiseachaidh a dhèanamh!",
+  "empty_column.direct": "Chan eil teachdaireachd dhìreach 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.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 eil am post seo ’na annsachd aig duine sam bith fhathast. Nuair a nì daoine annsachd dheth, nochdaidh iad an-seo.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "Chan eil iarrtas air leantainn agad fhathast. Nuair gheibh thu fear, nochdaidh e an-seo.",
+  "empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.",
+  "empty_column.home": "Tha an loidhne-ama dachaigh agad falamh! Tadhail air {public} no dèan lorg airson toiseach-tòiseachaidh a dhèanamh is tachairt ri càch.",
+  "empty_column.home.suggestions": "See some suggestions",
+  "empty_column.list": "Chan eil dad air an liosta seo fhathast. Nuair a phostaicheas buill a tha air an liosta seo postaichean ùra, nochdaidh iad an-seo.",
+  "empty_column.lists": "Chan eil liosta agad fhathast. Nuair chruthaicheas tu tè, nochdaidh i an-seo.",
+  "empty_column.mutes": "Cha do mhùch thu cleachdaiche sam bith fhathast.",
+  "empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Dèan eadar-ghnìomh le càch airson tòiseachadh air còmhradh.",
+  "empty_column.public": "Chan eil dad an-seo! Sgrìobh rudeigin gu poblach no lean air càch o fhrithealaichean eile a làimh airson seo a lìonadh",
+  "error.unexpected_crash.explanation": "Air sàilleibh buga sa chòd againn no duilgheadas co-chòrdalachd leis a’ bhrabhsair, chan urrainn dhuinn an duilleag seo a shealltainn mar bu chòir.",
+  "error.unexpected_crash.explanation_addons": "Cha b’ urrainn dhuinn an duilleag seo a shealltainn mar bu chòir. Tha sinn an dùil gu do dh’adhbharaich tuilleadan a’ bhrabhsair no inneal eadar-theangachaidh fèin-obrachail a’ mhearachd.",
+  "error.unexpected_crash.next_steps": "Feuch an ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.",
+  "error.unexpected_crash.next_steps_addons": "Feuch an cuir thu à comas iad ’s gun ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.",
+  "errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd",
+  "errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas",
+  "follow_recommendations.done": "Deiseil",
+  "follow_recommendations.heading": "Lean air daoine ma tha thu airson nam postaichean aca fhaicinn! Seo moladh no dà dhut.",
+  "follow_recommendations.lead": "Nochdaidh na postaichean aig na daoine air a leanas tu a-rèir an ama air inbhir na dachaighe agad. Bi dàna on as urrainn dhut sgur de leantainn air daoine cuideachd uair sam bith!",
+  "follow_request.authorize": "Ùghdarraich",
+  "follow_request.reject": "Diùlt",
+  "follow_requests.unlocked_explanation": "Ged nach eil an cunntas agad glaiste, tha sgioba {domain} dhen bheachd gum b’ fheàirrde thu lèirmheas a dhèanamh air na h-iarrtasan leantainn o na cunntasan seo a làimh.",
+  "generic.saved": "Chaidh a shàbhaladh",
+  "getting_started.developers": "Luchd-leasachaidh",
+  "getting_started.directory": "Eòlaire nam pròifil",
+  "getting_started.documentation": "Docamaideadh",
+  "getting_started.heading": "Dèan toiseach-tòiseachaidh",
+  "getting_started.invite": "Thoir cuireadh do dhaoine",
+  "getting_started.open_source_notice": "’S e bathar-bog le bun-tùs fosgailte a th’ ann am Mastodon. ’S urrainn dhut cuideachadh leis no aithris a dhèanamh air duilgheadasan air GitHub fo {github}.",
+  "getting_started.security": "Roghainnean a’ chunntais",
+  "getting_started.terms": "Teirmichean na seirbheise",
+  "hashtag.column_header.tag_mode.all": "agus {additional}",
+  "hashtag.column_header.tag_mode.any": "no {additional}",
+  "hashtag.column_header.tag_mode.none": "às aonais {additional}",
+  "hashtag.column_settings.select.no_options_message": "Cha deach moladh sam bith a lorg",
+  "hashtag.column_settings.select.placeholder": "Cuir a-steach tagaichean hais…",
+  "hashtag.column_settings.tag_mode.all": "An fheadhainn seo uile",
+  "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",
+  "home.column_settings.basic": "Bunasach",
+  "home.column_settings.show_reblogs": "Seall na brosnachaidhean",
+  "home.column_settings.show_replies": "Seall na freagairtean",
+  "home.hide_announcements": "Falaich na brathan-fios",
+  "home.show_announcements": "Seall na brathan-fios",
+  "intervals.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}",
+  "intervals.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}}",
+  "intervals.full.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}}",
+  "keyboard_shortcuts.back": "a sheòladh air ais",
+  "keyboard_shortcuts.blocked": "a dh’fhosgladh liosta nan cleachdaichean bacte",
+  "keyboard_shortcuts.boost": "’ga bhrosnachadh",
+  "keyboard_shortcuts.column": "a chur am fòcas air post air fear dhe na colbhan",
+  "keyboard_shortcuts.compose": "a chur am fòcas air raon teacsa an sgrìobhaidh",
+  "keyboard_shortcuts.description": "Tuairisgeul",
+  "keyboard_shortcuts.direct": "a dh’fhosgladh colbh nan teachdaireachdan dìreach",
+  "keyboard_shortcuts.down": "a ghluasad sìos air an liosta",
+  "keyboard_shortcuts.enter": "a dh’fhosgladh a’ phuist",
+  "keyboard_shortcuts.favourite": "’ga chur ris na h-annsachdan",
+  "keyboard_shortcuts.favourites": "a dh’fhosgladh liosta nan annsachdan",
+  "keyboard_shortcuts.federated": "a dh’fhosgladh na loidhne-ama co-naisgte",
+  "keyboard_shortcuts.heading": "Ath-ghoiridean a’ mheur-chlàir",
+  "keyboard_shortcuts.home": "a dh’fhosgladh loidhne-ama na dachaigh",
+  "keyboard_shortcuts.hotkey": "Grad-iuchair",
+  "keyboard_shortcuts.legend": "a shealltainn a’ chlàir-mhìneachaidh seo",
+  "keyboard_shortcuts.local": "a dh’fhosgladh na loidhne-ama ionadail",
+  "keyboard_shortcuts.mention": "a thoirt iomradh dhan ùghdar",
+  "keyboard_shortcuts.muted": "a dh’fhosgladh liosta nan cleachdaichean mùchte",
+  "keyboard_shortcuts.my_profile": "a dh’fhosgladh na pròifil agad",
+  "keyboard_shortcuts.notifications": "a dh’fhosgladh colbh nam brathan",
+  "keyboard_shortcuts.open_media": "a dh’fhosgladh nam meadhanan",
+  "keyboard_shortcuts.pinned": "a dh’fhosgladh liosta na postaichean prìnichte",
+  "keyboard_shortcuts.profile": "a dh’fhosgladh pròifil an ùghdair",
+  "keyboard_shortcuts.reply": "a fhreagairt",
+  "keyboard_shortcuts.requests": "a dh’fhosgladh liosta nan iarrtasan leantainn",
+  "keyboard_shortcuts.search": "a chur am fòcas air a lorg",
+  "keyboard_shortcuts.spoilers": "a shealltainn/fhalach raon an rabhaidh susbainte",
+  "keyboard_shortcuts.start": "a dh’fhosgladh colbh “dèan toiseach-tòiseachaidh”",
+  "keyboard_shortcuts.toggle_hidden": "a shealltainn/fhalach teacsa fo rabhadh susbainte",
+  "keyboard_shortcuts.toggle_sensitivity": "a shealltainn/fhalach meadhanan",
+  "keyboard_shortcuts.toot": "a thòiseachadh air post ùr",
+  "keyboard_shortcuts.unfocus": "a thoirt am fòcas far raon teacsa an sgrìobhaidh/an luirg",
+  "keyboard_shortcuts.up": "a ghluasad suas air an liosta",
+  "lightbox.close": "Dùin",
+  "lightbox.compress": "Co-theannaich bogsa sealladh an deilbh",
+  "lightbox.expand": "Leudaich bogsa sealladh an deilbh",
+  "lightbox.next": "Air adhart",
+  "lightbox.previous": "Air ais",
+  "lists.account.add": "Cuir ris an liosta",
+  "lists.account.remove": "Thoir air falbh on liosta",
+  "lists.delete": "Sguab às an liosta",
+  "lists.edit": "Deasaich an liosta",
+  "lists.edit.submit": "Atharraich an tiotal",
+  "lists.new.create": "Cuir liosta ris",
+  "lists.new.title_placeholder": "Tiotal na liosta ùir",
+  "lists.replies_policy.followed": "Cleachdaiche sam bith air a leanas mi",
+  "lists.replies_policy.list": "Buill na liosta",
+  "lists.replies_policy.none": "Na seall idir",
+  "lists.replies_policy.title": "Seall na freagairtean gu:",
+  "lists.search": "Lorg am measg nan daoine air a leanas tu",
+  "lists.subheading": "Na liostaichean agad",
+  "load_pending": "{count, plural, one {# nì ùr} two {# nì ùr} few {# nithean ùra} other {# nì ùr}}",
+  "loading_indicator.label": "’Ga luchdadh…",
+  "media_gallery.toggle_visible": "Falaich {number, plural, 1 {an dealbh} one {na dealbhan} two {na dealbhan} few {na dealbhan} other {na dealbhan}}",
+  "missing_indicator.label": "Cha deach càil a lorg",
+  "missing_indicator.sublabel": "Cha deach an goireas a lorg",
+  "mute_modal.duration": "Faide",
+  "mute_modal.hide_notifications": "A bheil thu airson na brathan fhalach on chleachdaiche seo?",
+  "mute_modal.indefinite": "Gun chrìoch",
+  "navigation_bar.apps": "Aplacaidean mobile",
+  "navigation_bar.blocks": "Cleachdaichean bacte",
+  "navigation_bar.bookmarks": "Comharran-lìn",
+  "navigation_bar.community_timeline": "Loidhne-ama ionadail",
+  "navigation_bar.compose": "Sgrìobh post ùr",
+  "navigation_bar.direct": "Teachdaireachdan dìreach",
+  "navigation_bar.discover": "Fidir",
+  "navigation_bar.domain_blocks": "Àrainnean bacte",
+  "navigation_bar.edit_profile": "Deasaich a’ phròifil",
+  "navigation_bar.favourites": "Na h-annsachdan",
+  "navigation_bar.filters": "Faclan mùchte",
+  "navigation_bar.follow_requests": "Iarrtasan leantainn",
+  "navigation_bar.follows_and_followers": "Dàimhean leantainn",
+  "navigation_bar.info": "Mun fhrithealaiche seo",
+  "navigation_bar.keyboard_shortcuts": "Grad-iuchraichean",
+  "navigation_bar.lists": "Liostaichean",
+  "navigation_bar.logout": "Clàraich a-mach",
+  "navigation_bar.mutes": "Cleachdaichean mùchte",
+  "navigation_bar.personal": "Pearsanta",
+  "navigation_bar.pins": "Postaichean prìnichte",
+  "navigation_bar.preferences": "Roghainnean",
+  "navigation_bar.public_timeline": "Loidhne-ama cho-naisgte",
+  "navigation_bar.security": "Tèarainteachd",
+  "notification.favourite": "Is annsa le {name} am post agad",
+  "notification.follow": "Tha {name} a’ leantainn ort a-nis",
+  "notification.follow_request": "Dh’iarr {name} leantainn ort",
+  "notification.mention": "Thug {name} iomradh ort",
+  "notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch",
+  "notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch",
+  "notification.reblog": "Bhrosnaich {name} am post agad",
+  "notification.status": "Tha {name} air rud a phostadh",
+  "notifications.clear": "Falamhaich na brathan",
+  "notifications.clear_confirmation": "A bheil thu cinnteach gu bheil thu airson na brathan uile agad fhalamhachadh gu buan?",
+  "notifications.column_settings.alert": "Brathan deasga",
+  "notifications.column_settings.favourite": "Na h-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": "Seall",
+  "notifications.column_settings.follow": "Luchd-leantainn ùr:",
+  "notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:",
+  "notifications.column_settings.mention": "Iomraidhean:",
+  "notifications.column_settings.poll": "Toraidhean cunntais-bheachd:",
+  "notifications.column_settings.push": "Brathan putaidh",
+  "notifications.column_settings.reblog": "Brosnachaidhean:",
+  "notifications.column_settings.show": "Seall sa cholbh",
+  "notifications.column_settings.sound": "Cluich fuaim",
+  "notifications.column_settings.status": "Postaichean ùra:",
+  "notifications.column_settings.unread_markers.category": "Comharran nach deach brath a leughadh",
+  "notifications.filter.all": "Na h-uile",
+  "notifications.filter.boosts": "Brosnachaidhean",
+  "notifications.filter.favourites": "Na h-annsachdan",
+  "notifications.filter.follows": "A’ leantainn air",
+  "notifications.filter.mentions": "Iomraidhean",
+  "notifications.filter.polls": "Toraidhean cunntais-bheachd",
+  "notifications.filter.statuses": "Naidheachdan nan daoine air a leanas tu",
+  "notifications.grant_permission": "Thoir cead.",
+  "notifications.group": "{count} brath(an)",
+  "notifications.mark_as_read": "Cuir comharra gun deach gach brath a leughadh",
+  "notifications.permission_denied": "Chan eil brathan deasga ri fhaighinn on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana",
+  "notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana",
+  "notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.",
+  "notifications_permission_banner.enable": "Cuir brathan deasga an comas",
+  "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de dh’eadar-ghnìomhan a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.",
+  "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh",
+  "picture_in_picture.restore": "Thoir air ais e",
+  "poll.closed": "Dùinte",
+  "poll.refresh": "Ath-nuadhaich",
+  "poll.total_people": "{count, plural, one {# neach} two {# neach} few {# daoine} other {# duine}}",
+  "poll.total_votes": "{count, plural, one {# bhòt} two {# bhòt} few {# bhòtaichean} other {# bhòt}}",
+  "poll.vote": "Bhòt",
+  "poll.voted": "Bhòt thu dhan fhreagairt seo",
+  "poll_button.add_poll": "Cuir cunntas-bheachd ris",
+  "poll_button.remove_poll": "Thoir air falbh an cunntas-bheachd",
+  "privacy.change": "Cuir gleus air prìobhaideachd a’ phuist",
+  "privacy.direct.long": "Chan fhaic ach na cleachdaichean le iomradh orra seo",
+  "privacy.direct.short": "Dìreach",
+  "privacy.private.long": "Chan fhaic ach na daoine a tha a’ leantainn ort seo",
+  "privacy.private.short": "Luchd-leantainn a-mhàin",
+  "privacy.public.long": "Seallaidh a h-uile duine seo ’s e ’ga shealltainn air loidhnichean-ama poblach",
+  "privacy.public.short": "Poblach",
+  "privacy.unlisted.long": "Seallaidh a h-uile duine seo ach cha dèid a shealltainn air loidhnichean-ama poblach",
+  "privacy.unlisted.short": "Falaichte o liostaichean",
+  "refresh": "Ath-nuadhaich",
+  "regeneration_indicator.label": "’Ga luchdadh…",
+  "regeneration_indicator.sublabel": "Tha inbhir na dachaigh agad ’ga ullachadh!",
+  "relative_time.days": "{number}l",
+  "relative_time.hours": "{number}u",
+  "relative_time.just_now": "an-dràsta",
+  "relative_time.minutes": "{number}u",
+  "relative_time.seconds": "{number}d",
+  "relative_time.today": "an-diugh",
+  "reply_indicator.cancel": "Sguir dheth",
+  "report.forward": "Sìn air adhart gu {target}",
+  "report.forward_hint": "Chaidh an cunntas a chlàradh air frithealaiche eile. A bheil thu airson lethbhreac dhen ghearan a chur dha-san gun ainm cuideachd?",
+  "report.hint": "Thèid do ghearan a chur gu maoir an fhrithealaiche agad. ’S urrainn dhut mìneachadh a sholar air carson a tha thu a’ gearan mun chunntas gu h-ìosal:",
+  "report.placeholder": "Beachdan a bharrachd",
+  "report.submit": "Cuir a-null",
+  "report.target": "A’ gearan mu {target}",
+  "search.placeholder": "Lorg",
+  "search_popout.search_format": "Fòrmat adhartach an luirg",
+  "search_popout.tips.full_text": "Bheir teacsa sìmplidh dhut na postaichean a sgrìobh thu, a tha nan annsachdan dhut, a bhrosnaich thu no san deach iomradh a thoirt ort cho math ri ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas.",
+  "search_popout.tips.hashtag": "taga hais",
+  "search_popout.tips.status": "post",
+  "search_popout.tips.text": "Bheir teacsa sìmplidh dhut na h-ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas",
+  "search_popout.tips.user": "cleachdaiche",
+  "search_results.accounts": "Daoine",
+  "search_results.hashtags": "Tagaichean hais",
+  "search_results.statuses": "Postaichean",
+  "search_results.statuses_fts_disabled": "Chan eil lorg phostaichean a-rèir an susbaint an comas air an fhrithealaiche Mastodon seo.",
+  "search_results.total": "{count, number} {count, plural, one {toradh} two {thoradh} few {toraidhean} other {toradh}}",
+  "status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}",
+  "status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd",
+  "status.block": "Bac @{name}",
+  "status.bookmark": "Cuir ris na comharran-lìn",
+  "status.cancel_reblog_private": "Na brosnaich tuilleadh",
+  "status.cannot_reblog": "Cha ghabh am post seo brosnachadh",
+  "status.copy": "Dèan lethbhreac dhen cheangal air a’ phost",
+  "status.delete": "Sguab às",
+  "status.detailed_status": "Mion-shealladh a’ chòmhraidh",
+  "status.direct": "Cuir teachdaireachd dhìreach gu @{name}",
+  "status.embed": "Leabaich",
+  "status.favourite": "Cuir ris na h-annsachdan",
+  "status.filtered": "Criathraichte",
+  "status.load_more": "Luchdaich barrachd dheth",
+  "status.media_hidden": "Meadhanan falaichte",
+  "status.mention": "Thoir iomradh air @{name}",
+  "status.more": "Barrachd",
+  "status.mute": "Mùch @{name}",
+  "status.mute_conversation": "Mùch an còmhradh",
+  "status.open": "Leudaich am post seo",
+  "status.pin": "Prìnich ris a’ phròifil",
+  "status.pinned": "Post prìnichte",
+  "status.read_more": "Leugh an còrr",
+  "status.reblog": "Brosnaich",
+  "status.reblog_private": "Brosnaich leis an t-so-fhaicsinneachd tùsail",
+  "status.reblogged_by": "Bhrosnaich {name} e",
+  "status.reblogs.empty": "Chan deach am post seo a bhrosnachadh le duine sam bith fhathast. Nuair a bhrosnaicheas cuideigin e, nochdaidh iad an-seo.",
+  "status.redraft": "Sguab às ⁊ dèan dreachd ùr",
+  "status.remove_bookmark": "Thoir an comharra-lìn air falbh",
+  "status.reply": "Freagair",
+  "status.replyAll": "Freagair dhan t-snàithlean",
+  "status.report": "Dèan gearan mu @{name}",
+  "status.sensitive_warning": "Susbaint fhrionasach",
+  "status.share": "Co-roinn",
+  "status.show_less": "Seall nas lugha dheth",
+  "status.show_less_all": "Seall nas lugha dhen a h-uile",
+  "status.show_more": "Seall barrachd dheth",
+  "status.show_more_all": "Seall barrachd dhen a h-uile",
+  "status.show_thread": "Seall an snàithlean",
+  "status.uncached_media_warning": "Chan eil seo ri fhaighinn",
+  "status.unmute_conversation": "Dì-mhùch an còmhradh",
+  "status.unpin": "Dì-phrìnich on phròifil",
+  "suggestions.dismiss": "Leig seachad am moladh",
+  "suggestions.header": "Dh’fhaoidte gu bheil ùidh agad ann an…",
+  "tabs_bar.federated_timeline": "Co-naisgte",
+  "tabs_bar.home": "Dachaigh",
+  "tabs_bar.local_timeline": "Ionadail",
+  "tabs_bar.notifications": "Brathan",
+  "tabs_bar.search": "Lorg",
+  "time_remaining.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air fhàgail",
+  "time_remaining.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air fhàgail",
+  "time_remaining.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}} air fhàgail",
+  "time_remaining.moments": "Cha doir e ach greiseag",
+  "time_remaining.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air fhàgail",
+  "timeline_hint.remote_resource_not_displayed": "Cha dèid {stòrasan} o fhrithealaichean eile a shealltainn.",
+  "timeline_hint.resources.followers": "Luchd-leantainn",
+  "timeline_hint.resources.follows": "A’ leantainn air",
+  "timeline_hint.resources.statuses": "Postaichean nas sine",
+  "trends.counter_by_accounts": "{count, plural, one {Tha {counter} neach} two {Tha {counter} neach} few {Tha {counter} daoine} other {Tha {counter} duine}} a’ bruidhinn",
+  "trends.trending_now": "A’ treandadh an-dràsta",
+  "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "Slaod ⁊ leig às airson luchdadh suas",
+  "upload_button.label": "Cuir ris dealbhan, video no faidhle fuaime",
+  "upload_error.limit": "Luchdaich thu suas na tha ceadaichte dhut a dh’fhaidhlichean mu thràth.",
+  "upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
+  "upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
+  "upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
+  "upload_form.edit": "Deasaich",
+  "upload_form.thumbnail": "Atharraich an dealbhag",
+  "upload_form.undo": "Sguab às",
+  "upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne",
+  "upload_modal.analyzing_picture": "A’ sgrùdadh an deilbh…",
+  "upload_modal.apply": "Cuir an sàs",
+  "upload_modal.choose_image": "Tagh dealbh",
+  "upload_modal.description_placeholder": "Lorg Sìm fiù bò, cè ⁊ neup ’ad àth",
+  "upload_modal.detect_text": "Mothaich dhan teacsa on dealbh",
+  "upload_modal.edit_media": "Deasaich am meadhan",
+  "upload_modal.hint": "Briog no slaod an cearcall air an ro-shealladh airson puing an fhòcais a thaghadh a chithear air gach dealbhag dheth.",
+  "upload_modal.preparing_ocr": "Ag ullachadh OCR…",
+  "upload_modal.preview_label": "Ro-shealladh ({ratio})",
+  "upload_progress.label": "’Ga luchdadh suas…",
+  "video.close": "Dùin a’ video",
+  "video.download": "Luchdaich am faidhle a-nuas",
+  "video.exit_fullscreen": "Fàg modh na làn-sgrìn",
+  "video.expand": "Leudaich a’ video",
+  "video.fullscreen": "Làn-sgrìn",
+  "video.hide": "Falaich a’ video",
+  "video.mute": "Mùch an fhuaim",
+  "video.pause": "Cuir ’na stad",
+  "video.play": "Cluich",
+  "video.unmute": "Dì-mhùch an fhuaim"
+}
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 854e31554..14638d625 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Esta usuaria aínda non segue a ninguén.",
   "account.follows_you": "Séguete",
   "account.hide_reblogs": "Agochar repeticións de @{name}",
+  "account.joined": "Uníuse {date}",
   "account.last_status": "Última actividade",
   "account.link_verified_on": "A propiedade desta ligazón foi verificada o {date}",
   "account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.",
@@ -32,13 +33,13 @@
   "account.mute_notifications": "Acalar as notificacións de @{name}",
   "account.muted": "Acalada",
   "account.never_active": "Nunca",
-  "account.posts": "Toots",
-  "account.posts_with_replies": "Toots e respostas",
+  "account.posts": "Publicacións",
+  "account.posts_with_replies": "Publicacións e respostas",
   "account.report": "Informar sobre @{name}",
   "account.requested": "Agardando aprovación. Preme para desbotar a solicitude de seguimento",
   "account.share": "Compartir o perfil de @{name}",
   "account.show_reblogs": "Amosar compartidos de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicacións}}",
   "account.unblock": "Desbloquear @{name}",
   "account.unblock_domain": "Amosar {domain}",
   "account.unendorse": "Non amosar no perfil",
@@ -71,7 +72,7 @@
   "column.lists": "Listaxes",
   "column.mutes": "Usuarias acaladas",
   "column.notifications": "Notificacións",
-  "column.pins": "Toots fixados",
+  "column.pins": "Publicacións fixadas",
   "column.public": "Cronoloxía federada",
   "column_back_button.label": "Volver",
   "column_header.hide_settings": "Agochar axustes",
@@ -84,12 +85,12 @@
   "community.column_settings.local_only": "Só local",
   "community.column_settings.media_only": "Só multimedia",
   "community.column_settings.remote_only": "Só remoto",
-  "compose_form.direct_message_warning": "Este toot só será enviado ás usuarias mencionadas.",
+  "compose_form.direct_message_warning": "Esta publicación só será enviada ás usuarias mencionadas.",
   "compose_form.direct_message_warning_learn_more": "Coñecer máis",
-  "compose_form.hashtag_warning": "Este toot non aparecerá baixo ningún cancelo (hashtag) porque non está listado. Só se poden procurar toots públicos por cancelos.",
+  "compose_form.hashtag_warning": "Esta publicación non aparecerá baixo ningún cancelo (hashtag) porque non está listada. Só se poden procurar publicacións públicas por cancelos.",
   "compose_form.lock_disclaimer": "A túa conta non está {locked}. Todas poden seguirte para ollar os teus toots só para seguidoras.",
   "compose_form.lock_disclaimer.lock": "bloqueada",
-  "compose_form.placeholder": "Qué contas?",
+  "compose_form.placeholder": "Que contas?",
   "compose_form.poll.add_option": "Engadir unha opción",
   "compose_form.poll.duration": "Duración da enquisa",
   "compose_form.poll.option_placeholder": "Opción {number}",
@@ -100,16 +101,16 @@
   "compose_form.publish_loud": "{publish}!",
   "compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}",
   "compose_form.sensitive.marked": "{count, plural, one {Multimedia marcado como sensible} other {Multimedia marcados como sensibles}}",
-  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
-  "compose_form.spoiler.marked": "O texto está agochado tras un aviso",
-  "compose_form.spoiler.unmarked": "O texto non está agochado",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Multimedia non marcado como sensible} other {Multimedia non marcado como sensible}}",
+  "compose_form.spoiler.marked": "Retirar o aviso sobre o contido",
+  "compose_form.spoiler.unmarked": "Engadir aviso sobre o contido",
   "compose_form.spoiler_placeholder": "Escribe o teu aviso aquí",
   "confirmation_modal.cancel": "Desbotar",
   "confirmations.block.block_and_report": "Bloquear e denunciar",
   "confirmations.block.confirm": "Bloquear",
   "confirmations.block.message": "Tes a certeza de querer bloquear a {name}?",
   "confirmations.delete.confirm": "Eliminar",
-  "confirmations.delete.message": "Tes a certeza de querer eliminar este toot?",
+  "confirmations.delete.message": "Tes a certeza de querer eliminar esta publicación?",
   "confirmations.delete_list.confirm": "Eliminar",
   "confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?",
   "confirmations.domain_block.confirm": "Agochar dominio enteiro",
@@ -120,7 +121,7 @@
   "confirmations.mute.explanation": "Isto agochará as publicacións delas ou nas que as mencionen, mais permitirá que vexan as túas publicacións e sexan seguidoras túas.",
   "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?",
   "confirmations.redraft.confirm": "Eliminar e reescribir",
-  "confirmations.redraft.message": "Tes a certeza de querer eliminar este toot e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.",
+  "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
   "confirmations.unfollow.confirm": "Deixar de seguir",
@@ -133,7 +134,7 @@
   "directory.local": "Só de {domain}",
   "directory.new_arrivals": "Recén chegadas",
   "directory.recently_active": "Activas recentemente",
-  "embed.instructions": "Engade este toot ó teu sitio web copiando o seguinte código.",
+  "embed.instructions": "Engade esta publicación ó teu sitio web copiando o seguinte código.",
   "embed.preview": "Así será mostrado:",
   "emoji_button.activity": "Actividade",
   "emoji_button.custom": "Personalizado",
@@ -150,23 +151,24 @@
   "emoji_button.symbols": "Símbolos",
   "emoji_button.travel": "Viaxes e Lugares",
   "empty_column.account_suspended": "Conta suspendida",
-  "empty_column.account_timeline": "Non hai toots aquí!",
+  "empty_column.account_timeline": "Non hai publicacións aquí!",
   "empty_column.account_unavailable": "Perfil non dispoñible",
   "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.",
-  "empty_column.bookmarked_statuses": "Aínda non marcaches ningún toot. Cando o fagas, aparecerán aquí.",
+  "empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.",
   "empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!",
   "empty_column.direct": "Aínda non tes mensaxes directas. Cando envíes ou recibas unha, amosarase aquí.",
   "empty_column.domain_blocks": "Aínda non hai dominios agochados.",
-  "empty_column.favourited_statuses": "Aínda non tes toots favoritos. Cando che goste algún, aparecerá aquí.",
-  "empty_column.favourites": "A ninguén lle gostou este toot polo momento. Cando a alguén lle goste, aparecerá aquí.",
+  "empty_column.favourited_statuses": "Aínda non tes publicacións favoritas. Cando che guste algunha, aparecerá aquí.",
+  "empty_column.favourites": "A ninguén lle gustou esta publicación polo momento. Cando a alguén lle guste, aparecerá aquí.",
+  "empty_column.follow_recommendations": "Semella que non temos suxestións para ti. Podes utilizar a busca para atopar persoas que coñezas ou explorar os cancelos en voga.",
   "empty_column.follow_requests": "Non tes peticións de seguimento. Cando recibas unha, amosarase aquí.",
   "empty_column.hashtag": "Aínda non hai nada con este cancelo.",
-  "empty_column.home": "A túa cronoloxía inicial está baleira! Visita {public} ou emprega a procura para atopar outras usuarias.",
-  "empty_column.home.public_timeline": "a cronoloxía pública",
+  "empty_column.home": "A túa cronoloxía inicial está baleira! Segue outras usuarias para enchela. {suggestions}",
+  "empty_column.home.suggestions": "Ver suxestións",
   "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.",
   "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.",
   "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.",
-  "empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.",
+  "empty_column.notifications": "Aínda non tes notificacións. Aparecerán cando outras persoas interactúen contigo.",
   "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo",
   "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.",
   "error.unexpected_crash.explanation_addons": "Non se puido mostrar correctamente a páxina. Habitualmente este erro está causado por algún engadido do navegador ou ferramentas de tradución automática.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis",
   "errors.unexpected_crash.report_issue": "Informar sobre un problema",
+  "follow_recommendations.done": "Feito",
+  "follow_recommendations.heading": "Segue a persoas das que queiras ler publicacións! Aqui tes unhas suxestións.",
+  "follow_recommendations.lead": "As publicacións das persoas que segues aparecerán na túa cronoloxía de inicio ordenadas temporalmente. Non teñas medo a equivocarte, podes deixar de seguirlas igual de fácil en calquera momento!",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rexeitar",
   "follow_requests.unlocked_explanation": "Malia que a túa conta non é privada, a administración de {domain} pensou que quizabes terías que revisar de xeito manual as solicitudes de seguiminto.",
@@ -203,57 +208,40 @@
   "intervals.full.days": "{number, plural,one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
-  "introduction.federation.action": "Seguinte",
-  "introduction.federation.federated.headline": "Federado",
-  "introduction.federation.federated.text": "Publicacións públicas doutros servidores do fediverso aparecerán na cronoloxía federada.",
-  "introduction.federation.home.headline": "Inicio",
-  "introduction.federation.home.text": "Publicacións de persoas que ti segues aparecerán na cronoloxía do inicio. Podes seguir calquera persoa en calquera servidor!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Publicacións públicas de persoas no teu mesmo servidor aparecerán na cronoloxía local.",
-  "introduction.interactions.action": "Rematar titorial!",
-  "introduction.interactions.favourite.headline": "Favorito",
-  "introduction.interactions.favourite.text": "Podes gardar un toot para depois e facer saber ó autor que che gostou marcandoo coma favorito.",
-  "introduction.interactions.reblog.headline": "Promover",
-  "introduction.interactions.reblog.text": "Podes compartir os toots doutras persoas coas túas seguidoras.",
-  "introduction.interactions.reply.headline": "Responder",
-  "introduction.interactions.reply.text": "Podes responder ós toots doutras persoas e ós teus propios, así ficarán encadeados nunha conversa.",
-  "introduction.welcome.action": "Imos!",
-  "introduction.welcome.headline": "Primeiros pasos",
-  "introduction.welcome.text": "Benvida ó fediverso! Nun intre poderás difundir mensaxes e falar coas túas amizades nun grande número de servidores. Mais este servidor, {domain}, é especial—hospeda o teu perfil, por iso lémbra o seu nome.",
-  "keyboard_shortcuts.back": "para volver atrás",
-  "keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas",
-  "keyboard_shortcuts.boost": "promover",
-  "keyboard_shortcuts.column": "para destacar un toot nunha das columnas",
-  "keyboard_shortcuts.compose": "para destacar a área de escritura",
+  "keyboard_shortcuts.back": "Volver atrás",
+  "keyboard_shortcuts.blocked": "Abrir lista de usuarias bloqueadas",
+  "keyboard_shortcuts.boost": "Promover publicación",
+  "keyboard_shortcuts.column": "Destacar unha columna",
+  "keyboard_shortcuts.compose": "Por o cursor na área de escritura",
   "keyboard_shortcuts.description": "Descrición",
-  "keyboard_shortcuts.direct": "para abrir a columna de mensaxes directas",
-  "keyboard_shortcuts.down": "para mover cara abaixo na listaxe",
-  "keyboard_shortcuts.enter": "para abrir toot",
-  "keyboard_shortcuts.favourite": "para engadir a favoritos",
-  "keyboard_shortcuts.favourites": "para abrir a listaxe dos favoritos",
-  "keyboard_shortcuts.federated": "para abrir a cronoloxía federada",
+  "keyboard_shortcuts.direct": "Para abrir a columna de mensaxes directas",
+  "keyboard_shortcuts.down": "Para mover cara abaixo na listaxe",
+  "keyboard_shortcuts.enter": "Para abrir publicación",
+  "keyboard_shortcuts.favourite": "Para engadir a favoritos",
+  "keyboard_shortcuts.favourites": "Para abrir a listaxe dos favoritos",
+  "keyboard_shortcuts.federated": "Para abrir a cronoloxía federada",
   "keyboard_shortcuts.heading": "Atallos do teclado",
-  "keyboard_shortcuts.home": "para abrir a cronoloxía inicial",
+  "keyboard_shortcuts.home": "Para abrir a cronoloxía inicial",
   "keyboard_shortcuts.hotkey": "Tecla de atallo",
-  "keyboard_shortcuts.legend": "para amosar esta lenda",
-  "keyboard_shortcuts.local": "para abrir a cronoloxía local",
-  "keyboard_shortcuts.mention": "para mencionar a autora",
-  "keyboard_shortcuts.muted": "abrir lista de usuarias acaladas",
-  "keyboard_shortcuts.my_profile": "para abrir o teu perfil",
-  "keyboard_shortcuts.notifications": "para abrir a columna das notificacións",
-  "keyboard_shortcuts.open_media": "para abrir o contido multimedia",
-  "keyboard_shortcuts.pinned": "para abrir a listaxe dos toots fixados",
-  "keyboard_shortcuts.profile": "para abrir o perfil da autora",
-  "keyboard_shortcuts.reply": "para responder",
-  "keyboard_shortcuts.requests": "para abrir a listaxe das peticións de seguimento",
-  "keyboard_shortcuts.search": "para destacar a procura",
-  "keyboard_shortcuts.spoilers": "mostrar/ocultar campo CW",
-  "keyboard_shortcuts.start": "para abrir a columna dos \"primeiros pasos\"",
-  "keyboard_shortcuts.toggle_hidden": "para amosar/agochar texto detrás do aviso de contido (AC)",
-  "keyboard_shortcuts.toggle_sensitivity": "para amosar/agochar contido multimedia",
-  "keyboard_shortcuts.toot": "para escribir un novo toot",
-  "keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura",
-  "keyboard_shortcuts.up": "para mover cara arriba na listaxe",
+  "keyboard_shortcuts.legend": "Para amosar esta lenda",
+  "keyboard_shortcuts.local": "Para abrir a cronoloxía local",
+  "keyboard_shortcuts.mention": "Para mencionar a autora",
+  "keyboard_shortcuts.muted": "Abrir lista de usuarias acaladas",
+  "keyboard_shortcuts.my_profile": "Para abrir o teu perfil",
+  "keyboard_shortcuts.notifications": "Para abrir a columna das notificacións",
+  "keyboard_shortcuts.open_media": "Para abrir o contido multimedia",
+  "keyboard_shortcuts.pinned": "Para abrir a listaxe das publicacións fixadas",
+  "keyboard_shortcuts.profile": "Para abrir o perfil da autora",
+  "keyboard_shortcuts.reply": "Para responder",
+  "keyboard_shortcuts.requests": "Para abrir a listaxe das peticións de seguimento",
+  "keyboard_shortcuts.search": "Por cursor na caixa de busca",
+  "keyboard_shortcuts.spoilers": "Mostrar/ocultar campo CW",
+  "keyboard_shortcuts.start": "Para abrir a columna dos \"primeiros pasos\"",
+  "keyboard_shortcuts.toggle_hidden": "Para mostrar o texto tras Aviso de Contido (CW)",
+  "keyboard_shortcuts.toggle_sensitivity": "Para amosar/agochar contido multimedia",
+  "keyboard_shortcuts.toot": "Para escribir unha nova publicación",
+  "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura",
+  "keyboard_shortcuts.up": "Para mover cara arriba na listaxe",
   "lightbox.close": "Fechar",
   "lightbox.compress": "Comprimir a caixa de vista da imaxe",
   "lightbox.expand": "Expandir a caixa de vista da imaxe",
@@ -284,7 +272,7 @@
   "navigation_bar.blocks": "Usuarias bloqueadas",
   "navigation_bar.bookmarks": "Marcadores",
   "navigation_bar.community_timeline": "Cronoloxía local",
-  "navigation_bar.compose": "Escribir un novo toot",
+  "navigation_bar.compose": "Escribir unha nova publicación",
   "navigation_bar.direct": "Mensaxes directas",
   "navigation_bar.discover": "Descubrir",
   "navigation_bar.domain_blocks": "Dominios agochados",
@@ -299,17 +287,17 @@
   "navigation_bar.logout": "Pechar sesión",
   "navigation_bar.mutes": "Usuarias silenciadas",
   "navigation_bar.personal": "Persoal",
-  "navigation_bar.pins": "Toots fixados",
+  "navigation_bar.pins": "Publicacións fixadas",
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Cronoloxía federada",
   "navigation_bar.security": "Seguranza",
-  "notification.favourite": "{name} marcou o teu toot coma favorito",
+  "notification.favourite": "{name} marcou a túa publicación como favorita",
   "notification.follow": "{name} comezou a seguirte",
   "notification.follow_request": "{name} solicitou seguirte",
   "notification.mention": "{name} mencionoute",
   "notification.own_poll": "A túa enquisa rematou",
   "notification.poll": "Unha enquisa na que votaches rematou",
-  "notification.reblog": "{name} compartiu o teu toot",
+  "notification.reblog": "{name} compartiu a túa publicación",
   "notification.status": "{name} publicou",
   "notifications.clear": "Limpar notificacións",
   "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?",
@@ -326,7 +314,8 @@
   "notifications.column_settings.reblog": "Promocións:",
   "notifications.column_settings.show": "Amosar en columna",
   "notifications.column_settings.sound": "Reproducir son",
-  "notifications.column_settings.status": "Novos toots:",
+  "notifications.column_settings.status": "Novas publicacións:",
+  "notifications.column_settings.unread_markers.category": "Indicadores de notificacións non lidas",
   "notifications.filter.all": "Todo",
   "notifications.filter.boosts": "Compartidos",
   "notifications.filter.favourites": "Favoritos",
@@ -381,21 +370,21 @@
   "search_popout.search_format": "Formato de procura avanzada",
   "search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.",
   "search_popout.tips.hashtag": "cancelo",
-  "search_popout.tips.status": "toot",
+  "search_popout.tips.status": "publicación",
   "search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e cancelos",
   "search_popout.tips.user": "usuaria",
   "search_results.accounts": "Persoas",
   "search_results.hashtags": "Cancelos",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.",
+  "search_results.statuses": "Publicacións",
+  "search_results.statuses_fts_disabled": "Procurar publicacións polo seu contido non está activado neste servidor do Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
   "status.admin_account": "Abrir interface de moderación para @{name}",
-  "status.admin_status": "Abrir este toot na interface de moderación",
+  "status.admin_status": "Abrir esta publicación na interface de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Marcar",
   "status.cancel_reblog_private": "Desfacer compartido",
   "status.cannot_reblog": "Esta publicación non pode ser promovida",
-  "status.copy": "Copiar ligazón ó toot",
+  "status.copy": "Copiar ligazón á publicación",
   "status.delete": "Eliminar",
   "status.detailed_status": "Vista detallada da conversa",
   "status.direct": "Mensaxe directa a @{name}",
@@ -408,14 +397,14 @@
   "status.more": "Máis",
   "status.mute": "Silenciar @{name}",
   "status.mute_conversation": "Silenciar conversa",
-  "status.open": "Expandir este toot",
+  "status.open": "Expandir esta publicación",
   "status.pin": "Fixar no perfil",
-  "status.pinned": "Toot fixado",
+  "status.pinned": "Publicación fixada",
   "status.read_more": "Ler máis",
   "status.reblog": "Promover",
   "status.reblog_private": "Compartir coa audiencia orixinal",
   "status.reblogged_by": "{name} promoveu",
-  "status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.",
+  "status.reblogs.empty": "Aínda ninguén promoveu esta publicación. Cando alguén o faga, amosarase aquí.",
   "status.redraft": "Eliminar e reescribir",
   "status.remove_bookmark": "Eliminar marcador",
   "status.reply": "Responder",
@@ -446,7 +435,7 @@
   "timeline_hint.remote_resource_not_displayed": "Non se mostran {resource} desde outros servidores.",
   "timeline_hint.resources.followers": "Seguidoras",
   "timeline_hint.resources.follows": "Seguindo",
-  "timeline_hint.resources.statuses": "Toots antigos",
+  "timeline_hint.resources.statuses": "Publicacións antigas",
   "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} comentando",
   "trends.trending_now": "Tendencias actuais",
   "ui.beforeunload": "O borrador perderase se saes de Mastodon.",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 123b2e855..ecc1b9eb1 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.",
   "account.follows_you": "במעקב אחריך",
   "account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "פעילות אחרונה",
   "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}",
   "account.locked_info": "מצב הפרטיות של החשבון הנוכחי הוגדר כנעול. בעל החשבון קובע באופן פרטני מי יכול לעקוב אחריו.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.",
   "empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים.",
-  "empty_column.home.public_timeline": "ציר זמן בין-קהילתי",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "אין עדיין מאום ברשימה.",
   "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "קבלה",
   "follow_request.reject": "דחיה",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "ניווט חזרה",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "להדהד",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "הצגה בטור",
   "notifications.column_settings.sound": "שמע מופעל",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index 7e0fe4e7a..0b987d38d 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।",
   "account.follows_you": "आपको फॉलो करता है",
   "account.hide_reblogs": "@{name} के बूस्ट छुपाएं",
+  "account.joined": "Joined {date}",
   "account.last_status": "अंतिम सक्रिय",
   "account.link_verified_on": "इस लिंक का स्वामित्व {date} को चेक किया गया था",
   "account.locked_info": "यह खाता गोपनीयता स्थिति लॉक करने के लिए सेट है। मालिक मैन्युअल रूप से समीक्षा करता है कि कौन उनको फॉलो कर सकता है।",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।",
   "empty_column.favourited_statuses": "आपके पास अभी कोई भी चहिता टूट नहीं है. जब आप किसी टूट को पसंद (स्टार) करेंगे, तब वो यहाँ दिखेगा।",
   "empty_column.favourites": "अभी तक किसी ने भी इस टूट को पसंद (स्टार) नहीं किया है. जब भी कोई इसे पसंद करेगा, उनका नाम यहाँ दिखेगा।",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "अभी तक किसी ने भी आपका अनुसरण करने की विनती नहीं की है. जब भी कोई आपको विनती भेजेगा, वो यहाँ दिखेगी.",
   "empty_column.hashtag": "यह हैशटैग अभी तक खाली है।",
   "empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।",
-  "empty_column.home.public_timeline": "सार्वजनिक कालक्रम",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.",
   "empty_column.lists": "आपके पास अभी तक कोई सूची नहीं है। जब आप एक बनाते हैं, तो यह यहां दिखाई देगा।",
   "empty_column.mutes": "आपने अभी तक किसी भी उपयोगकर्ता को म्यूट नहीं किया है।",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें",
   "errors.unexpected_crash.report_issue": "समस्या सूचित करें",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "अधिकार दें",
   "follow_request.reject": "अस्वीकार करें",
   "follow_requests.unlocked_explanation": "हालाँकि आपका खाता लॉक नहीं है, फिर भी {domain} डोमेन स्टाफ ने सोचा कि आप इन खातों के मैन्युअल अनुरोधों की समीक्षा करना चाहते हैं।",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "अगला",
-  "introduction.federation.federated.headline": "फ़ेडरेटेड",
-  "introduction.federation.federated.text": "महासंघ के अन्य सर्वरों से सार्वजनिक पद संघटित समय-सीमा में दिखाई देंगे।",
-  "introduction.federation.home.headline": "होम",
-  "introduction.federation.home.text": "आपके द्वारा अनुसरण किए जाने वाले लोगों के पोस्ट आपके होम फीड में दिखाई देंगे। आप किसी भी सर्वर पर किसी को भी फॉलो कर सकते हैं!",
-  "introduction.federation.local.headline": "लोकल",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "पसंदीदा",
-  "introduction.interactions.favourite.text": "आप बाद में इसके लिए एक टोट को बचा सकते हैं, और लेखक को यह बता दें कि आपको यह पसंद आया, इसे फेवर करके।",
-  "introduction.interactions.reblog.headline": "बूस्ट",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "जवाब",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "आइए शुरू करते हैं!",
-  "introduction.welcome.headline": "पहले कदम",
-  "introduction.welcome.text": "फेडवर्स में आपका स्वागत है! कुछ ही क्षणों में, आप संदेशों को प्रसारित करने और अपने दोस्तों से विस्तृत सर्वर पर बात करने में सक्षम होंगे। लेकिन यह सर्वर, {domain}, विशेष है - यह आपकी प्रोफ़ाइल को होस्ट करता है, इसलिए इसका नाम याद रखें।",
   "keyboard_shortcuts.back": "वापस जाने के लिए",
   "keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए",
   "keyboard_shortcuts.boost": "बढ़ावा देने के लिए",
@@ -274,7 +262,7 @@
   "lists.subheading": "आपकी सूचियाँ",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "लोड हो रहा है...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "नहीं मिला",
   "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "कॉलम में दिखाएँ",
   "notifications.column_settings.sound": "ध्वनि चलाएँ",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "सभी",
   "notifications.filter.boosts": "बूस्ट",
   "notifications.filter.favourites": "पसंदीदा",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index f1b78eda4..77da48c90 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -9,10 +9,10 @@
   "account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu",
   "account.cancel_follow_request": "Otkaži zahtjev za praćenje",
   "account.direct": "Pošalji poruku @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Nemoj me obavjestiti kada @{name} napravi objavu",
   "account.domain_blocked": "Domena je blokirana",
   "account.edit_profile": "Uredi profil",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Obavjesti me kada @{name} napravi objavu",
   "account.endorse": "Istakni na profilu",
   "account.follow": "Prati",
   "account.followers": "Pratitelji",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Korisnik/ca još ne prati nikoga.",
   "account.follows_you": "Prati te",
   "account.hide_reblogs": "Sakrij boostove od @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Posljednja aktivnost",
   "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}",
   "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.",
@@ -122,16 +123,16 @@
   "confirmations.redraft.confirm": "Izbriši i ponovno uredi",
   "confirmations.redraft.message": "Jeste li sigurni da želite izbrisati ovaj toot i ponovno ga urediti? Favoriti i boostovi bit će izgubljeni, a odgovori na izvornu objavu bit će odvojeni.",
   "confirmations.reply.confirm": "Odgovori",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.reply.message": "Odgovaranje sada će prepisati poruku koju upravo pišete. Jeste li sigurni da želite nastaviti?",
   "confirmations.unfollow.confirm": "Prestani pratiti",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "confirmations.unfollow.message": "Jeste li sigurni da želite prestati pratiti {name}?",
   "conversation.delete": "Izbriši razgovor",
   "conversation.mark_as_read": "Označi kao pročitano",
   "conversation.open": "Prikaži razgovor",
   "conversation.with": "S {names}",
-  "directory.federated": "From known fediverse",
+  "directory.federated": "Iz znanog fediversa",
   "directory.local": "Samo iz {domain}",
-  "directory.new_arrivals": "New arrivals",
+  "directory.new_arrivals": "Novi korisnici",
   "directory.recently_active": "Nedavno aktivni",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "Evo kako će izgledati:",
@@ -153,16 +154,17 @@
   "empty_column.account_timeline": "Ovdje nema tootova!",
   "empty_column.account_unavailable": "Profil nije dostupan",
   "empty_column.blocks": "Još niste blokirali nikoga.",
-  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.bookmarked_statuses": "Još nemaš niti jedan označeni toot. Kada označiš jedan, prikazad će se ovdje.",
   "empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!",
   "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
   "empty_column.domain_blocks": "Još nema blokiranih domena.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.",
   "empty_column.home": "Vaša početna vremenska crta je prazna! Posjetite {public} ili koristite tražilicu kako biste započeli i upoznali druge korisnike.",
-  "empty_column.home.public_timeline": "javnu vremensku crtu",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.",
   "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
   "empty_column.mutes": "Niste utišali nijednog korisnika.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Prijavi problem",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autoriziraj",
   "follow_request.reject": "Odbij",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dan} other {# dana}}",
   "intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}",
-  "introduction.federation.action": "Sljedeće",
-  "introduction.federation.federated.headline": "Federalno",
-  "introduction.federation.federated.text": "Javne objave s drugih poslužitelja fediverzuma prikazat će se u federalnoj vremenskoj crti.",
-  "introduction.federation.home.headline": "Početna",
-  "introduction.federation.home.text": "Objave ljudi koje pratite prikazat će se na Vašoj početnoj stranici. Možete pratiti bilo koga na bilo kojem poslužitelju!",
-  "introduction.federation.local.headline": "Lokalno",
-  "introduction.federation.local.text": "Javne objave ljudi na istom poslužitelju prikazat će se u lokalnoj vremenskoj crti.",
-  "introduction.interactions.action": "Dovrši tutorijal!",
-  "introduction.interactions.favourite.headline": "Favoriti",
-  "introduction.interactions.favourite.text": "Toot možete spremiti za kasnije i javiti njegovom autoru da Vam se sviđa tako što ga označite kao favorit.",
-  "introduction.interactions.reblog.headline": "Boostanje",
-  "introduction.interactions.reblog.text": "Tuđe tootove možete dijeliti sa svojim pratiteljima tako što ih boostate.",
-  "introduction.interactions.reply.headline": "Odgovaranje",
-  "introduction.interactions.reply.text": "Možete odgovoriti na tuđe i svoje tootove, čime će se oni povezati u razgovor.",
-  "introduction.welcome.action": "Krenimo!",
-  "introduction.welcome.headline": "Prvi koraci",
-  "introduction.welcome.text": "Dobro došli na fediverzum! Za nekoliko trenutaka moći ćete dijeliti poruke i razgovara sa svojim prijateljima kroz široki raspon poslužitelja. Ali ovaj poslužitelj, {domain}, je poseban — on sadrži Vaš profil, pa zapamtite njegovo ime.",
   "keyboard_shortcuts.back": "za vraćanje natrag",
   "keyboard_shortcuts.blocked": "za otvaranje liste blokiranih korisnika",
   "keyboard_shortcuts.boost": "za boostanje",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Prikaži u stupcu",
   "notifications.column_settings.sound": "Sviraj zvuk",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Sve",
   "notifications.filter.boosts": "Boostovi",
   "notifications.filter.favourites": "Favoriti",
@@ -381,7 +370,7 @@
   "search_popout.search_format": "Format naprednog pretraživanja",
   "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
   "search_popout.tips.hashtag": "hashtag",
-  "search_popout.tips.status": "toot",
+  "search_popout.tips.status": "status",
   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
   "search_popout.tips.user": "korisnik",
   "search_results.accounts": "Ljudi",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index a0ae7305c..d20c893c8 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -9,7 +9,7 @@
   "account.browse_more_on_origin_server": "További böngészés az eredeti profilon",
   "account.cancel_follow_request": "Követési kérelem törlése",
   "account.direct": "Közvetlen üzenet @{name} számára",
-  "account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl",
+  "account.disable_notifications": "Ne figyelmeztessen, ha @{name} bejegyzést tesz közzé",
   "account.domain_blocked": "Rejtett domain",
   "account.edit_profile": "Profil szerkesztése",
   "account.enable_notifications": "Figyelmeztess, ha @{name} tülköl",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Ez a felhasználó még senkit sem követ.",
   "account.follows_you": "Követ téged",
   "account.hide_reblogs": "@{name} megtolásainak némítása",
+  "account.joined": "Joined {date}",
   "account.last_status": "Utoljára aktív",
   "account.link_verified_on": "A linket ellenőriztük: {date}",
   "account.locked_info": "Ez a fiók zárt. A tulajdonos engedélyezi, hogy ki követheti őt.",
@@ -32,8 +33,8 @@
   "account.mute_notifications": "@{name} értesítéseinek némítása",
   "account.muted": "Némítva",
   "account.never_active": "Soha",
-  "account.posts": "Tülkölés",
-  "account.posts_with_replies": "Tülkölés és válaszok",
+  "account.posts": "Bejegyzések",
+  "account.posts_with_replies": "Bejegyzések és válaszok",
   "account.report": "@{name} jelentése",
   "account.requested": "Engedélyre vár. Kattints a követési kérés visszavonásához",
   "account.share": "@{name} profiljának megosztása",
@@ -71,7 +72,7 @@
   "column.lists": "Listák",
   "column.mutes": "Némított felhasználók",
   "column.notifications": "Értesítések",
-  "column.pins": "Kitűzött tülkök",
+  "column.pins": "Kitűzött bejegyzések",
   "column.public": "Nyilvános idővonal",
   "column_back_button.label": "Vissza",
   "column_header.hide_settings": "Beállítások elrejtése",
@@ -84,10 +85,10 @@
   "community.column_settings.local_only": "Csak helyi",
   "community.column_settings.media_only": "Csak média",
   "community.column_settings.remote_only": "Csak távoli",
-  "compose_form.direct_message_warning": "Ezt a tülköt csak a benne megemlített felhasználók láthatják majd.",
+  "compose_form.direct_message_warning": "Ezt a bejegyzést csak a benne megemlített felhasználók láthatják majd.",
   "compose_form.direct_message_warning_learn_more": "Tudj meg többet",
-  "compose_form.hashtag_warning": "Ez a tülköd nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak nyilvános tülkök kereshetőek hashtaggel.",
-  "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt üzeneteidet.",
+  "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel listázatlan. Csak a nyilvános bejegyzések kereshetők hashtaggel.",
+  "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.",
   "compose_form.lock_disclaimer.lock": "lezárva",
   "compose_form.placeholder": "Mi jár a fejedben?",
   "compose_form.poll.add_option": "Lehetőség hozzáadása",
@@ -109,7 +110,7 @@
   "confirmations.block.confirm": "Letiltás",
   "confirmations.block.message": "Biztos, hogy letiltod: {name}?",
   "confirmations.delete.confirm": "Törlés",
-  "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a tülkölést?",
+  "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a bejegyzést?",
   "confirmations.delete_list.confirm": "Törlés",
   "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?",
   "confirmations.domain_block.confirm": "Teljes domain elrejtése",
@@ -150,19 +151,20 @@
   "emoji_button.symbols": "Szimbólumok",
   "emoji_button.travel": "Utazás és Helyek",
   "empty_column.account_suspended": "Fiók felfüggesztve",
-  "empty_column.account_timeline": "Itt nincs tülkölés!",
+  "empty_column.account_timeline": "Itt nincs bejegyzés!",
   "empty_column.account_unavailable": "A profil nem érhető el",
   "empty_column.blocks": "Még senkit sem tiltottál le.",
-  "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött tülköd sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
+  "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
   "empty_column.community": "A helyi idővonal üres. Tülkölj egyet nyilvánosan, hogy elindítsd az eseményeket!",
   "empty_column.direct": "Még nincs egy közvetlen üzeneted sem. Ha küldesz vagy kapsz egyet, itt fog megjelenni.",
   "empty_column.domain_blocks": "Még nem rejtettél el egyetlen domaint sem.",
   "empty_column.favourited_statuses": "Még nincs egy kedvenc tülköd sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.",
   "empty_column.favourites": "Még senki sem jelölte ezt a tülköt kedvencként. Ha valaki mégis megteszi, itt fogjuk mutatni.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Még nincs egy követési kérésed sem. Ha kapsz egyet, itt fogjuk feltüntetni.",
   "empty_column.hashtag": "Jelenleg nem található semmi ezzel a hashtaggel.",
   "empty_column.home": "A saját idővonalad üres! Látogasd meg a {public} oldalt vagy használd a keresőt, hogy megismerj másokat.",
-  "empty_column.home.public_timeline": "a nyilvános idővonal",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "A lista jelenleg üres. Ha a listatagok tülkölnek, itt fognak megjelenni.",
   "empty_column.lists": "Még nem hoztál létre listát. Ha csinálsz egyet, itt látszik majd.",
   "empty_column.mutes": "Még egy felhasználót sem némítottál le.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
   "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása",
   "errors.unexpected_crash.report_issue": "Probléma jelentése",
+  "follow_recommendations.done": "Kész",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Engedélyezés",
   "follow_request.reject": "Elutasítás",
   "follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni a fiók követési kéréseit.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
   "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
   "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
-  "introduction.federation.action": "Következő",
-  "introduction.federation.federated.headline": "Föderációs",
-  "introduction.federation.federated.text": "A fediverzum más szervereiről származó nyilvános tülkök a föderációs idővonalon jelennek meg.",
-  "introduction.federation.home.headline": "Kezdőlap",
-  "introduction.federation.home.text": "A saját idővonaladon az általad követett emberek tülkjei jelennek meg. Bárkit követhetsz, bármelyik kiszolgálón.",
-  "introduction.federation.local.headline": "Helyi",
-  "introduction.federation.local.text": "A helyi idővonalon a veled közös kiszolgálón lévő emberek nyilvános tülkjei jelennek meg.",
-  "introduction.interactions.action": "Oktatóanyag befejezése!",
-  "introduction.interactions.favourite.headline": "Kedvenc",
-  "introduction.interactions.favourite.text": "A kedvenc funkcióval elrakhatsz későbbre egy tülköt, illetve közölheted a szerzővel, hogy tetszett a megosztása.",
-  "introduction.interactions.reblog.headline": "Megtolás",
-  "introduction.interactions.reblog.text": "A saját követőiddel mások tülkjeit is megoszthatod úgy, hogy megtolod őket.",
-  "introduction.interactions.reply.headline": "Válasz",
-  "introduction.interactions.reply.text": "Saját vagy mások tülkjeire válaszolva egy beszélgetési láncot alakíthatsz ki.",
-  "introduction.welcome.action": "Csapjunk bele!",
-  "introduction.welcome.headline": "Első lépések",
-  "introduction.welcome.text": "Üdv a fediverzumban! Pár pillanat múlva már küldheted is üzeneteidet barátaidnak bármely szerveren. Ez a szerver {domain} viszont különleges. Ez tartja nyilván a profilod, szóval jegyezd meg a nevét.",
   "keyboard_shortcuts.back": "visszafelé navigálás",
   "keyboard_shortcuts.blocked": "letiltott felhasználók listájának megnyitása",
   "keyboard_shortcuts.boost": "megtolás",
@@ -251,7 +239,7 @@
   "keyboard_shortcuts.start": "\"Első lépések\" megnyitása",
   "keyboard_shortcuts.toggle_hidden": "tartalmi figyelmeztetéssel ellátott szöveg mutatása/elrejtése",
   "keyboard_shortcuts.toggle_sensitivity": "média mutatása/elrejtése",
-  "keyboard_shortcuts.toot": "új tülk írása",
+  "keyboard_shortcuts.toot": "új bejegyzés írása",
   "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele",
   "keyboard_shortcuts.up": "felfelé mozdítás a listában",
   "lightbox.close": "Bezárás",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Oszlopban mutatás",
   "notifications.column_settings.sound": "Hang lejátszása",
   "notifications.column_settings.status": "Új tülkök:",
+  "notifications.column_settings.unread_markers.category": "Olvasatlan értesítés jelzők",
   "notifications.filter.all": "Mind",
   "notifications.filter.boosts": "Megtolások",
   "notifications.filter.favourites": "Kedvencnek jelölések",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 5cdba58e8..a3fd51347 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։",
   "account.follows_you": "Հետեւում է քեզ",
   "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները",
+  "account.joined": "Joined {date}",
   "account.last_status": "Վերջին թութը",
   "account.link_verified_on": "Սոյն յղման տիրապետումը ստուգուած է՝ {date}֊ին",
   "account.locked_info": "Սոյն հաշուի գաղտնիութեան մակարդակը նշուած է որպէս՝ փակ։ Հաշուի տէրն ընտրում է, թէ ով կարող է հետեւել իրեն։",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։",
   "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։",
   "empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։",
   "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։",
   "empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։",
-  "empty_column.home.public_timeline": "հրապարակային հոսք",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։",
   "empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։",
   "empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
   "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
   "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Վաւերացնել",
   "follow_request.reject": "Մերժել",
   "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# օր} other {# օր}}",
   "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}",
   "intervals.full.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}}",
-  "introduction.federation.action": "Յաջորդ",
-  "introduction.federation.federated.headline": "Դաշնային",
-  "introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։",
-  "introduction.federation.home.headline": "Հիմնական",
-  "introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։",
-  "introduction.federation.local.headline": "Տեղային",
-  "introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։",
-  "introduction.interactions.action": "Աւարտել թթի դասընթացը",
-  "introduction.interactions.favourite.headline": "Նախընտրելի",
-  "introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հաւանելով այն։",
-  "introduction.interactions.reblog.headline": "Տարածել",
-  "introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։",
-  "introduction.interactions.reply.headline": "Պատասխանել",
-  "introduction.interactions.reply.text": "Արձագանքիր ուրիշների եւ քո թթերին, դրանք կը դարսուեն մէկ ընդհանուր քննարկման շղթայով։",
-  "introduction.welcome.action": "Գնացի՜նք։",
-  "introduction.welcome.headline": "Առաջին քայլեր",
-  "introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։",
   "keyboard_shortcuts.back": "ետ նաւարկելու համար",
   "keyboard_shortcuts.blocked": "արգելափակուած օգտատէրերի ցանկը բացելու համար",
   "keyboard_shortcuts.boost": "տարածելու համար",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Ցուցադրել սիւնում",
   "notifications.column_settings.sound": "Ձայն հանել",
   "notifications.column_settings.status": "Նոր թթեր։",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Բոլորը",
   "notifications.filter.boosts": "Տարածածները",
   "notifications.filter.favourites": "Հաւանածները",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 24f100b6a..ef76f295b 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Pengguna ini belum mengikuti siapapun.",
   "account.follows_you": "Mengikuti anda",
   "account.hide_reblogs": "Sembunyikan boosts dari @{name}",
+  "account.joined": "Bergabung {date}",
   "account.last_status": "Terakhir aktif",
   "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}",
   "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikuti mereka.",
@@ -49,7 +50,7 @@
   "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.",
   "alert.rate_limited.title": "Batasan tingkat",
   "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
-  "alert.unexpected.title": "Oops!",
+  "alert.unexpected.title": "Ups!",
   "announcement.announcement": "Pengumuman",
   "autosuggest_hashtag.per_week": "{count} per minggu",
   "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Tidak ada topik tersembunyi.",
   "empty_column.favourited_statuses": "Anda belum memiliki toot favorit. Ketika Anda mengirim atau menerimanya, maka akan muncul di sini.",
   "empty_column.favourites": "Tidak ada seorangpun yang memfavoritkan toot ini. Ketika seseorang melakukannya, maka akan muncul disini.",
+  "empty_column.follow_recommendations": "Sepertinya tak ada saran yang dibuat untuk Anda. Anda dapat coba menggunakan pencarian untuk menemukan orang yang Anda ketahui atau menjelajahi tagar yang sedang tren.",
   "empty_column.follow_requests": "Anda belum memiliki permintaan mengikuti. Ketika Anda menerimanya, maka akan muncul disini.",
   "empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.",
   "empty_column.home": "Linimasa anda kosong! Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.",
-  "empty_column.home.public_timeline": "linimasa publik",
+  "empty_column.home.suggestions": "Lihat beberapa saran",
   "empty_column.list": "Tidak ada postingan di list ini. Ketika anggota dari list ini memposting status baru, status tersebut akan tampil disini.",
   "empty_column.lists": "Anda belum memiliki daftar. Ketika Anda membuatnya, maka akan muncul disini.",
   "empty_column.mutes": "Anda belum membisukan siapapun.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi murni.",
   "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip",
   "errors.unexpected_crash.report_issue": "Laporkan masalah",
+  "follow_recommendations.done": "Selesai",
+  "follow_recommendations.heading": "Ikuti orang yang ingin Anda lihat kirimannya! Ini ada beberapa saran.",
+  "follow_recommendations.lead": "Kiriman dari orang yang Anda ikuti akan tampil berdasar waktu di beranda Anda. Jangan takut membuat kesalahan, Anda dapat berhenti mengikuti mereka dengan mudah kapan saja!",
   "follow_request.authorize": "Izinkan",
   "follow_request.reject": "Tolak",
   "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, other {# hari}}",
   "intervals.full.hours": "{number, plural, other {# jam}}",
   "intervals.full.minutes": "{number, plural, other {# menit}}",
-  "introduction.federation.action": "Selanjutnya",
-  "introduction.federation.federated.headline": "Gabungan",
-  "introduction.federation.federated.text": "Pos publik dari server fediverse lain akan muncul di linimasa gabungan.",
-  "introduction.federation.home.headline": "Beranda",
-  "introduction.federation.home.text": "Pos dari orang yang Anda ikuti akan muncul di beranda. Anda dapat mengikuti siapa pun dari server mana pun!",
-  "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Pos publik dari orang yang ada di server sama denganmu akan muncul di linimasa lokal.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favorit",
-  "introduction.interactions.favourite.text": "Anda dapat menyimpan toot untuk dibaca nanti, biarkan penulis tahu Anda menyukainya, dengan memfavoritkannya.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Anda dapat membagikan toot orang lain kepada pengikut Anda dengan mem-boost-nya.",
-  "introduction.interactions.reply.headline": "Balas",
-  "introduction.interactions.reply.text": "Anda dapat membalas toot Anda dan orang lain, yang akan menjalin dalam satu percakapan.",
-  "introduction.welcome.action": "Ayo!",
-  "introduction.welcome.headline": "Langkah pertama",
-  "introduction.welcome.text": "Selamat datang di fediverse! Beberapa saat lagi, Anda dapat menyiarkan pesan dan berbincang dengan teman lintas server. Namun server ini, {domain}, spesial--ia menyimpan profil Anda, jadi ingatlah namanya.",
   "keyboard_shortcuts.back": "untuk kembali",
   "keyboard_shortcuts.blocked": "buka daftar pengguna terblokir",
   "keyboard_shortcuts.boost": "untuk menyebarkan",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Tampilkan dalam kolom",
   "notifications.column_settings.sound": "Mainkan suara",
   "notifications.column_settings.status": "Toot baru:",
+  "notifications.column_settings.unread_markers.category": "Penanda notifikasi belum dibaca",
   "notifications.filter.all": "Semua",
   "notifications.filter.boosts": "Boost",
   "notifications.filter.favourites": "Favorit",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 998799b9f..390b9f1f8 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Sequas tu",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "Esas ankore nulo en ta gretovorto.",
   "empty_column.home": "Tu sequas ankore nulu. Vizitez {public} od uzez la serchilo por komencar e renkontrar altra uzeri.",
-  "empty_column.home.public_timeline": "la publika tempolineo",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet.",
   "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Yurizar",
   "follow_request.reject": "Refuzar",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Montrar en kolumno",
   "notifications.column_settings.sound": "Plear sono",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index d90156835..427c75d18 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -1,5 +1,5 @@
 {
-  "account.account_note_header": "Minnispunkturinn þinn fyrir @{name}",
+  "account.account_note_header": "Minnispunktur",
   "account.add_or_remove_from_list": "Bæta á eða fjarlægja af listum",
   "account.badges.bot": "Róbót",
   "account.badges.group": "Hópur",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.",
   "account.follows_you": "Fylgir þér",
   "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}",
+  "account.joined": "Gerðist þátttakandi {date}",
   "account.last_status": "Síðasta virkni",
   "account.link_verified_on": "Eignarhald á þessum tengli var athugað þann {date}",
   "account.locked_info": "Staða gagnaleyndar á þessum aðgangi er stillt á læsingu. Eigandinn yfirfer handvirkt hverjir geti fylgst með honum.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Það eru engin falin lén ennþá.",
   "empty_column.favourited_statuses": "Þú átt ennþá engin eftirlætistíst. Þegar þú setur tíst í eftirlæti, munu þau birtast hér.",
   "empty_column.favourites": "Enginn hefur ennþá set þetta tíst í eftirlæti. Þegar einhverjir gera það, munu þeir birtast hér.",
+  "empty_column.follow_recommendations": "Það lítur út fyrir að ekki hafi verið hægt að útbúa neinar tillögur fyrir þig. Þú getur reynt að leita að fólki sem þú gætir þekkt eða skoðað myllumerki sem eru í umræðunni.",
   "empty_column.follow_requests": "Þú átt ennþá engar beiðnir um að fylgja þér. Þegar þú færð slíkar beiðnir, munu þær birtast hér.",
   "empty_column.hashtag": "Það er ekkert ennþá undir þessu myllumerki.",
-  "empty_column.home": "Heimatímalínan þín er tóm! Skoðaðu {public} eða notaðu leitina til að komast í ganf og finna annað fólk.",
-  "empty_column.home.public_timeline": "opinbera tímalínan",
+  "empty_column.home": "Heimatímalínan þín er tóm! Skoðaðu {public} eða notaðu leitina til að komast í gang og finna annað fólk.",
+  "empty_column.home.suggestions": "Skoðaðu nokkrar tillögur",
   "empty_column.list": "Það er ennþá ekki neitt á þessum lista. Þegar meðlimir á listanum senda inn nýjar stöðufærslur, munu þær birtast hér.",
   "empty_column.lists": "Þú ert ennþá ekki með neina lista. Þegar þú byrð til einhvern lista, munu hann birtast hér.",
   "empty_column.mutes": "Þú hefur ekki þaggað niður í neinum notendum ennþá.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.",
   "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald",
   "errors.unexpected_crash.report_issue": "Tilkynna vandamál",
+  "follow_recommendations.done": "Lokið",
+  "follow_recommendations.heading": "Fylgstu með fólki sem þú vilt sjá færslur frá! Hér eru nokkrar tillögur.",
+  "follow_recommendations.lead": "Færslur frá fólki sem þú fylgist með eru birtar í tímaröð á heimastreyminu þínu. Þú þarft ekki að hræðast mistök, það er jafn auðvelt að hætta að fylgjast með fólki hvenær sem er!",
   "follow_request.authorize": "Heimila",
   "follow_request.reject": "Hafna",
   "follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}",
   "intervals.full.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}}",
   "intervals.full.minutes": "{number, plural, one {# mínúta} other {# mínútur}}",
-  "introduction.federation.action": "Næsta",
-  "introduction.federation.federated.headline": "Sameiginlegt",
-  "introduction.federation.federated.text": "Opinberar færslur frá öðrum vefþjónum í skýjasambandinu birtast á sameiginlegu tímalínunni.",
-  "introduction.federation.home.headline": "Heim",
-  "introduction.federation.home.text": "Færslur frá fólki sem þú fylgist með birtast í heimastreyminu þínu. Þú getur fylgst með hverjum sem er á hvaða vefþjóni sem er!",
-  "introduction.federation.local.headline": "Staðvært",
-  "introduction.federation.local.text": "Opinberar færslur frá fólki á sama vefþjóni og þú birtast á staðværu tímalínunni.",
-  "introduction.interactions.action": "Ljúka leiðarvísinum!",
-  "introduction.interactions.favourite.headline": "Eftirlæti",
-  "introduction.interactions.favourite.text": "Þú getur vistað tíst til að eiga í handraðanum og látið höfundinn vita að þér hafi líkað það með því að setja það í eftirlætin þín.",
-  "introduction.interactions.reblog.headline": "Endurbirting",
-  "introduction.interactions.reblog.text": "Þú getur deilt tístum frá öðru fólki til þeirra sem fylgjast með þér með því að endurbirta færslurnar.",
-  "introduction.interactions.reply.headline": "Svara",
-  "introduction.interactions.reply.text": "Þú getur svarað tístum frá öðru fólki og eins sjálfum þér, sem mun binda tístin saman í samtal.",
-  "introduction.welcome.action": "Drífum okkur!",
-  "introduction.welcome.headline": "Fyrstu skrefin",
-  "introduction.welcome.text": "Velkomin í skýjasambandið (fediverse)! Eftir augnablik geturðu farið að útvarpa skilaboðum og spjalla við vini þína úti um víða veröld, allt í gegnum ýmsar gerðir vefþjóna sem samt geta talað saman. En þessi vefþjónn, {domain}, er sérstakur — hann hýsir notandasniðið þitt, þannig að þú skalt muna hvað hann heitir.",
   "keyboard_shortcuts.back": "að fara til baka",
   "keyboard_shortcuts.blocked": "að opna lista yfir útilokaða notendur",
   "keyboard_shortcuts.boost": "að endurbirta",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Sýna í dálki",
   "notifications.column_settings.sound": "Spila hljóð",
   "notifications.column_settings.status": "Ný tíst:",
+  "notifications.column_settings.unread_markers.category": "Merki fyrir ólesnar tilkynningar",
   "notifications.filter.all": "Allt",
   "notifications.filter.boosts": "Endurbirtingar",
   "notifications.filter.favourites": "Eftirlæti",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index b63b231ae..a87963784 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -7,7 +7,7 @@
   "account.block_domain": "Blocca dominio {domain}",
   "account.blocked": "Bloccat*",
   "account.browse_more_on_origin_server": "Sfoglia ulteriormente sul profilo originale",
-  "account.cancel_follow_request": "Annulla richiesta di seguirti",
+  "account.cancel_follow_request": "Annulla richiesta di seguire",
   "account.direct": "Messaggio diretto a @{name}",
   "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post",
   "account.domain_blocked": "Dominio bloccato",
@@ -15,16 +15,17 @@
   "account.enable_notifications": "Avvisami quando @{name} pubblica un post",
   "account.endorse": "Mostra sul profilo",
   "account.follow": "Segui",
-  "account.followers": "Seguaci",
+  "account.followers": "Follower",
   "account.followers.empty": "Ancora nessuno segue questo utente.",
-  "account.followers_counter": "{count, plural, one {{counter} Seguace} other {{counter} Seguaci}}",
+  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}",
   "account.following_counter": "{count, plural, other {{counter} Seguiti}}",
   "account.follows.empty": "Questo utente non segue ancora nessuno.",
   "account.follows_you": "Ti segue",
   "account.hide_reblogs": "Nascondi condivisioni da @{name}",
+  "account.joined": "Registrato dal {date}",
   "account.last_status": "Ultima attività",
   "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}",
-  "account.locked_info": "Lo stato di privacy del profilo è impostato a bloccato. Il proprietario revisiona manualmente chi lo può seguire.",
+  "account.locked_info": "Questo è un account privato. Il proprietario approva manualmente chi può seguirlo.",
   "account.media": "Media",
   "account.mention": "Menziona @{name}",
   "account.moved_to": "{name} si è trasferito su:",
@@ -43,12 +44,12 @@
   "account.unblock_domain": "Sblocca il dominio {domain}",
   "account.unendorse": "Non mostrare sul profilo",
   "account.unfollow": "Smetti di seguire",
-  "account.unmute": "Non silenziare @{name}",
-  "account.unmute_notifications": "Non silenziare le notifiche da @{name}",
+  "account.unmute": "Riattiva @{name}",
+  "account.unmute_notifications": "Riattiva le notifiche da @{name}",
   "account_note.placeholder": "Clicca per aggiungere una nota",
   "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.",
   "alert.rate_limited.title": "Limitazione per eccesso di richieste",
-  "alert.unexpected.message": "Si è verificato un errore inatteso.",
+  "alert.unexpected.message": "Si è verificato un errore imprevisto.",
   "alert.unexpected.title": "Oops!",
   "announcement.announcement": "Annuncio",
   "autosuggest_hashtag.per_week": "{count} per settimana",
@@ -87,7 +88,7 @@
   "compose_form.direct_message_warning": "Questo toot sarà inviato solo agli utenti menzionati.",
   "compose_form.direct_message_warning_learn_more": "Scopri di più",
   "compose_form.hashtag_warning": "Questo toot non sarà elencato sotto alcun hashtag poiché senza elenco. Solo i toot pubblici possono essere ricercati per hashtag.",
-  "compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti per vedere i tuoi post solo per seguaci.",
+  "compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti e vedere le tue pubblicazioni visibili solo dai follower.",
   "compose_form.lock_disclaimer.lock": "bloccato",
   "compose_form.placeholder": "A cosa stai pensando?",
   "compose_form.poll.add_option": "Aggiungi una scelta",
@@ -113,7 +114,7 @@
   "confirmations.delete_list.confirm": "Cancella",
   "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?",
   "confirmations.domain_block.confirm": "Blocca l'intero dominio",
-  "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna timeline pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.",
+  "confirmations.domain_block.message": "Sei davvero, davvero sicur@ di voler bloccare {domain} completamente? Nella maggioranza dei casi, è preferibile e sufficiente bloccare o silenziare pochi account in modo mirato. Non vedrai più il contenuto da quel dominio né nelle timeline pubbliche né nelle tue notifiche. Anzi, verranno rimossi dai follower gli account di questo dominio.",
   "confirmations.logout.confirm": "Disconnettiti",
   "confirmations.logout.message": "Sei sicuro di volerti disconnettere?",
   "confirmations.mute.confirm": "Silenzia",
@@ -124,7 +125,7 @@
   "confirmations.reply.confirm": "Rispondi",
   "confirmations.reply.message": "Rispondere ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?",
   "confirmations.unfollow.confirm": "Smetti di seguire",
-  "confirmations.unfollow.message": "Sei sicuro di non voler più seguire {name}?",
+  "confirmations.unfollow.message": "Sei sicur@ di non voler più seguire {name}?",
   "conversation.delete": "Elimina conversazione",
   "conversation.mark_as_read": "Segna come letto",
   "conversation.open": "Visualizza conversazione",
@@ -159,24 +160,28 @@
   "empty_column.domain_blocks": "Non vi sono domini nascosti.",
   "empty_column.favourited_statuses": "Non hai ancora segnato nessun toot come apprezzato. Quando lo farai, comparirà qui.",
   "empty_column.favourites": "Nessuno ha ancora segnato questo toot come apprezzato. Quando qualcuno lo farà, apparirà qui.",
-  "empty_column.follow_requests": "Non hai ancora ricevuto nessuna richiesta di seguirti. Quando ne arriveranno, saranno mostrate qui.",
+  "empty_column.follow_recommendations": "Sembra che nessun suggerimento possa essere generato per te. Puoi provare a usare la ricerca per cercare persone che potresti conoscere o esplorare hashtag di tendenza.",
+  "empty_column.follow_requests": "Non hai ancora ricevuto nessuna richiesta di follow. Quando ne riceverai una, verrà mostrata qui.",
   "empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.",
   "empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.",
-  "empty_column.home.public_timeline": "la timeline pubblica",
+  "empty_column.home.suggestions": "Vedi alcuni suggerimenti",
   "empty_column.list": "Non c'è ancora niente in questa lista. Quando i membri di questa lista pubblicheranno nuovi stati, appariranno qui.",
   "empty_column.lists": "Non hai ancora nessuna lista. Quando ne creerai qualcuna, comparirà qui.",
   "empty_column.mutes": "Non hai ancora silenziato nessun utente.",
   "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
-  "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio",
+  "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o segui utenti da altri server per riempire questo spazio",
   "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.",
   "error.unexpected_crash.explanation_addons": "Questa pagina non può essere visualizzata correttamente. Questo errore è probabilmente causato da un componente aggiuntivo del browser o da strumenti di traduzione automatica.",
   "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.",
   "error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e ad aggiornare la pagina. Se questo non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser o un'app diversi.",
   "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti",
   "errors.unexpected_crash.report_issue": "Segnala il problema",
+  "follow_recommendations.done": "Fatto",
+  "follow_recommendations.heading": "Segui le persone da cui vuoi vedere i messaggi! Ecco alcuni suggerimenti.",
+  "follow_recommendations.lead": "I messaggi da persone che segui verranno visualizzati in ordine cronologico nel tuo home feed. Non abbiate paura di commettere errori, potete smettere di seguire le persone altrettanto facilmente in qualsiasi momento!",
   "follow_request.authorize": "Autorizza",
   "follow_request.reject": "Rifiuta",
-  "follow_requests.unlocked_explanation": "Anche se il tuo account non è bloccato, lo staff di {domain} ha pensato che potresti voler esaminare manualmente le richieste di seguirti di questi account.",
+  "follow_requests.unlocked_explanation": "Benché il tuo account non sia privato, lo staff di {domain} ha pensato che potresti voler approvare manualmente le richieste di follow da questi account.",
   "generic.saved": "Salvato",
   "getting_started.developers": "Sviluppatori",
   "getting_started.directory": "Directory dei profili",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
-  "introduction.federation.action": "Avanti",
-  "introduction.federation.federated.headline": "Federato",
-  "introduction.federation.federated.text": "I post pubblici provenienti da altri server del fediverse saranno mostrati nella timeline federata.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "I post scritti da persone che segui saranno mostrati nella timeline home. Puoi seguire chiunque su qualunque server!",
-  "introduction.federation.local.headline": "Locale",
-  "introduction.federation.local.text": "I post pubblici scritti da persone sul tuo stesso server saranno mostrati nella timeline locale.",
-  "introduction.interactions.action": "Finisci il tutorial!",
-  "introduction.interactions.favourite.headline": "Apprezza",
-  "introduction.interactions.favourite.text": "Puoi salvare un toot e tenerlo per dopo, e far sapere all'autore che ti è piaciuto, segnandolo come apprezzato.",
-  "introduction.interactions.reblog.headline": "Condividi",
-  "introduction.interactions.reblog.text": "Con la condivisione puoi segnalare i toot di altre persone ai tuoi seguaci .",
-  "introduction.interactions.reply.headline": "Rispondi",
-  "introduction.interactions.reply.text": "Puoi rispondere ai toot, sia a quelli di altri sia ai tuoi, e i toot saranno collegati a formare una conversazione.",
-  "introduction.welcome.action": "Andiamo!",
-  "introduction.welcome.headline": "Primi passi",
-  "introduction.welcome.text": "Benvenuto/a nel fediverse! Tra poco potrai inviare messaggi e parlare con i tuoi amici su una grande varietà di server. Ma questo server, {domain}, è speciale: ospita il tuo profilo, quindi ricordati il suo nome.",
   "keyboard_shortcuts.back": "per tornare indietro",
   "keyboard_shortcuts.blocked": "per aprire l'elenco degli utenti bloccati",
   "keyboard_shortcuts.boost": "per condividere",
@@ -245,7 +233,7 @@
   "keyboard_shortcuts.pinned": "per aprire l'elenco dei toot fissati in cima",
   "keyboard_shortcuts.profile": "per aprire il profilo dell'autore",
   "keyboard_shortcuts.reply": "per rispondere",
-  "keyboard_shortcuts.requests": "per aprire l'elenco delle richieste di seguirti",
+  "keyboard_shortcuts.requests": "per aprire l'elenco di richieste di follow",
   "keyboard_shortcuts.search": "per spostare il focus sulla ricerca",
   "keyboard_shortcuts.spoilers": "per mostrare/nascondere il campo CW",
   "keyboard_shortcuts.start": "per aprire la colonna \"Come iniziare\"",
@@ -305,7 +293,7 @@
   "navigation_bar.security": "Sicurezza",
   "notification.favourite": "{name} ha apprezzato il tuo post",
   "notification.follow": "{name} ha iniziato a seguirti",
-  "notification.follow_request": "{name} ha chiesto di seguirti",
+  "notification.follow_request": "{name} ti ha mandato una richiesta di follow",
   "notification.mention": "{name} ti ha menzionato",
   "notification.own_poll": "Il tuo sondaggio è terminato",
   "notification.poll": "Un sondaggio in cui hai votato è terminato",
@@ -318,8 +306,8 @@
   "notifications.column_settings.filter_bar.advanced": "Mostra tutte le categorie",
   "notifications.column_settings.filter_bar.category": "Filtro rapido",
   "notifications.column_settings.filter_bar.show": "Mostra",
-  "notifications.column_settings.follow": "Nuovi seguaci:",
-  "notifications.column_settings.follow_request": "Nuove richieste di seguirti:",
+  "notifications.column_settings.follow": "Nuovi follower:",
+  "notifications.column_settings.follow_request": "Nuove richieste di follow:",
   "notifications.column_settings.mention": "Menzioni:",
   "notifications.column_settings.poll": "Risultati del sondaggio:",
   "notifications.column_settings.push": "Notifiche push",
@@ -327,10 +315,11 @@
   "notifications.column_settings.show": "Mostra in colonna",
   "notifications.column_settings.sound": "Riproduci suono",
   "notifications.column_settings.status": "Nuovi toot:",
+  "notifications.column_settings.unread_markers.category": "Marcatori di notifica non letti",
   "notifications.filter.all": "Tutti",
   "notifications.filter.boosts": "Condivisioni",
   "notifications.filter.favourites": "Apprezzati",
-  "notifications.filter.follows": "Seguaci",
+  "notifications.filter.follows": "Follower",
   "notifications.filter.mentions": "Menzioni",
   "notifications.filter.polls": "Risultati del sondaggio",
   "notifications.filter.statuses": "Aggiornamenti dalle persone che segui",
@@ -355,7 +344,7 @@
   "privacy.change": "Modifica privacy del post",
   "privacy.direct.long": "Invia solo a utenti menzionati",
   "privacy.direct.short": "Diretto in privato",
-  "privacy.private.long": "Invia solo ai seguaci",
+  "privacy.private.long": "Invia solo ai follower",
   "privacy.private.short": "Privato",
   "privacy.public.long": "Invia alla timeline pubblica",
   "privacy.public.short": "Pubblico",
@@ -367,8 +356,8 @@
   "relative_time.days": "{number}g",
   "relative_time.hours": "{number}o",
   "relative_time.just_now": "ora",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
+  "relative_time.minutes": "{number} minuti",
+  "relative_time.seconds": "{number} secondi",
   "relative_time.today": "oggi",
   "reply_indicator.cancel": "Annulla",
   "report.forward": "Inoltra a {target}",
@@ -444,7 +433,7 @@
   "time_remaining.moments": "Restano pochi istanti",
   "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left",
   "timeline_hint.remote_resource_not_displayed": "{resource] da altri server non sono mostrati.",
-  "timeline_hint.resources.followers": "Seguaci",
+  "timeline_hint.resources.followers": "Follower",
   "timeline_hint.resources.follows": "Segue",
   "timeline_hint.resources.statuses": "Toot meno recenti",
   "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index e4334ccc4..bd3580e9d 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "まだ誰もフォローしていません。",
   "account.follows_you": "フォローされています",
   "account.hide_reblogs": "@{name}さんからのブーストを非表示",
+  "account.joined": "{date} に登録",
   "account.last_status": "最後の活動",
   "account.link_verified_on": "このリンクの所有権は{date}に確認されました",
   "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。",
@@ -163,10 +164,11 @@
   "empty_column.domain_blocks": "ブロックしているドメインはありません。",
   "empty_column.favourited_statuses": "まだ何もお気に入り登録していません。お気に入り登録するとここに表示されます。",
   "empty_column.favourites": "まだ誰もお気に入り登録していません。お気に入り登録されるとここに表示されます。",
+  "empty_column.follow_recommendations": "おすすめを生成できませんでした。検索を使って知り合いを探したり、トレンドハッシュタグを見てみましょう。",
   "empty_column.follow_requests": "まだフォローリクエストを受けていません。フォローリクエストを受けるとここに表示されます。",
   "empty_column.hashtag": "このハッシュタグはまだ使われていません。",
   "empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。",
-  "empty_column.home.public_timeline": "連合タイムライン",
+  "empty_column.home.suggestions": "おすすめを見る",
   "empty_column.list": "このリストにはまだなにもありません。このリストのメンバーが新しいトゥートをするとここに表示されます。",
   "empty_column.lists": "まだリストがありません。リストを作るとここに表示されます。",
   "empty_column.mutes": "まだ誰もミュートしていません。",
@@ -178,6 +180,9 @@
   "error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。",
   "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー",
   "errors.unexpected_crash.report_issue": "問題を報告",
+  "follow_recommendations.done": "完了",
+  "follow_recommendations.heading": "投稿を見たい人をフォローしてください!ここにおすすめがあります。",
+  "follow_recommendations.lead": "あなたがフォローしている人の投稿は、ホームフィードに時系列で表示されます。いつでも簡単に解除できるので、気軽にフォローしてみてください!",
   "follow_request.authorize": "許可",
   "follow_request.reject": "拒否",
   "follow_requests.unlocked_explanation": "あなたのアカウントは承認制ではありませんが、{domain} のスタッフはこれらのアカウントからのフォローリクエストの確認が必要であると判断しました。",
@@ -207,23 +212,6 @@
   "intervals.full.days": "{number}日",
   "intervals.full.hours": "{number}時間",
   "intervals.full.minutes": "{number}分",
-  "introduction.federation.action": "次へ",
-  "introduction.federation.federated.headline": "連合タイムライン",
-  "introduction.federation.federated.text": "Fediverseの他のサーバーからの公開投稿は連合タイムラインに表示されます。",
-  "introduction.federation.home.headline": "ホームタイムライン",
-  "introduction.federation.home.text": "フォローしている人々の投稿はホームタイムラインに表示されます。どこのサーバーの誰でもフォローできます!",
-  "introduction.federation.local.headline": "ローカルタイムライン",
-  "introduction.federation.local.text": "同じサーバーにいる人々の公開投稿はローカルタイムラインに表示されます。",
-  "introduction.interactions.action": "はじめよう!",
-  "introduction.interactions.favourite.headline": "お気に入り",
-  "introduction.interactions.favourite.text": "お気に入り登録することで後から見られるよう保存したり、「好き」を相手に伝えたりできます。",
-  "introduction.interactions.reblog.headline": "ブースト",
-  "introduction.interactions.reblog.text": "ブーストすることでフォロワーにそのトゥートを共有できます。",
-  "introduction.interactions.reply.headline": "返信",
-  "introduction.interactions.reply.text": "自身や人々のトゥートに返信することで、一連の会話に繋げることができます。",
-  "introduction.welcome.action": "はじめる!",
-  "introduction.welcome.headline": "はじめに",
-  "introduction.welcome.text": "Fediverseの世界へようこそ!あと少しでメッセージを配信したり、さまざまなサーバーを越えた友達と話せるようになります。ところで、ここ{domain}は特別なサーバーです…あなたのプロフィールを持つ主体のサーバーですので、名前を覚えておきましょう。",
   "keyboard_shortcuts.back": "戻る",
   "keyboard_shortcuts.blocked": "ブロックしたユーザーのリストを開く",
   "keyboard_shortcuts.boost": "ブースト",
@@ -332,6 +320,7 @@
   "notifications.column_settings.show": "カラムに表示",
   "notifications.column_settings.sound": "通知音を再生",
   "notifications.column_settings.status": "新しいトゥート:",
+  "notifications.column_settings.unread_markers.category": "未読マーカー",
   "notifications.filter.all": "すべて",
   "notifications.filter.boosts": "ブースト",
   "notifications.filter.favourites": "お気に入り",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index ad3b1b033..714ec2e49 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "მოგყვებათ",
   "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "ამ ჰეშტეგში ჯერ არაფერია.",
   "empty_column.home": "თქვენი სახლის თაიმლაინი ცარიელია! ესტუმრეთ {public}-ს ან დასაწყისისთვის გამოიყენეთ ძებნა, რომ შეხვდეთ სხვა მომხმარებლებს.",
-  "empty_column.home.public_timeline": "ღია თაიმლაინი",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "ამ სიაში ჯერ არაფერია. როდესაც სიის წევრები დაპოსტავენ ახალ სტატუსებს, ისინი გამოჩნდებიან აქ.",
   "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "ავტორიზაცია",
   "follow_request.reject": "უარყოფა",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "უკან გადასასვლელად",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "დასაბუსტად",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "გამოჩნდეს სვეტში",
   "notifications.column_settings.sound": "ხმის დაკვრა",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json
index cf9860f1e..175a509ff 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -9,10 +9,10 @@
   "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli",
   "account.cancel_follow_request": "Sefsex asuter n uḍfar",
   "account.direct": "Izen usrid i @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Ḥbes ur iyi-d-ttazen ara ilɣa mi ara d-isuffeɣ @{name}",
   "account.domain_blocked": "Taɣult yeffren",
   "account.edit_profile": "Ẓreg amaɣnu",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}",
   "account.endorse": "Welleh fell-as deg umaɣnu-inek",
   "account.follow": "Ḍfer",
   "account.followers": "Imeḍfaren",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
   "account.follows_you": "Yeṭṭafaṛ-ik",
   "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Armud aneggaru",
   "account.link_verified_on": "Taɣara n useɣwen-a tettwasenqed ass n {date}",
   "account.locked_info": "Amiḍan-agi uslig isekweṛ. D bab-is kan i izemren ad yeǧǧ, s ufus-is, win ara t-iḍefṛen.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.",
   "empty_column.favourited_statuses": "Ulac ula yiwet n tjewwaqt deg yismenyifen-ik ar tura. Ticki Tella-d yiwet, ad d-ban da.",
   "empty_column.favourites": "Ula yiwen ur yerri tajewwaqt-agi deg yismenyifen-is. Melmi i d-yella waya, ad d-yettwasken da.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Ulac ɣur-k ula yiwen n usuter n teḍfeṛt. Ticki teṭṭfeḍ-d yiwen ad d-yettwasken da.",
   "empty_column.hashtag": "Ar tura ulac kra n ugbur yesɛan assaɣ ɣer uhacṭag-agi.",
   "empty_column.home": "Tasuddemt tagejdant n yisallen d tilemt! Ẓer {public} neɣ nadi ad tafeḍ imseqdacen-nniḍen ad ten-ḍefṛeḍ.",
-  "empty_column.home.public_timeline": "tasuddemt tazayezt n yisallen",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Ar tura ur yelli kra deg umuɣ-a. Ad d-yettwasken da ticki iɛeggalen n wumuɣ-a suffɣen-d kra.",
   "empty_column.lists": "Ulac ɣur-k kra n wumuɣ yakan. Ad d-tettwasken da ticki tesluleḍ-d yiwet.",
   "empty_column.mutes": "Ulac ɣur-k imseqdacen i yettwasgugmen.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus",
   "errors.unexpected_crash.report_issue": "Mmel ugur",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Ssireg",
   "follow_request.reject": "Agi",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}",
   "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}",
   "intervals.full.minutes": "{number, plural, one {# n tesdat} other {# n tesdatin}}",
-  "introduction.federation.action": "Uḍfiṛ",
-  "introduction.federation.federated.headline": "Amatu",
-  "introduction.federation.federated.text": "Iznan izuyaz i d-yekkan seg yiqeddacen-nniḍen n fediverse ad banen deg tsuddemt tazayezt tamatut n yisallen.",
-  "introduction.federation.home.headline": "Agejdan",
-  "introduction.federation.home.text": "Iznan n yemdanen i teṭṭafaṛeḍ ad banen deg tsuddemt n umagger. Tzemreḍ ad tḍefṛeḍ win tebɣiḍ deg uqeddac i tebɣiḍ!",
-  "introduction.federation.local.headline": "Adigan",
-  "introduction.federation.local.text": "Iznan izuyaz n yemdanen i yellan deg yiwen uqeddac akked kečč ad d-banen deg tsuddemt tazayezt tadigant.",
-  "introduction.interactions.action": "Fakk tameskant!",
-  "introduction.interactions.favourite.headline": "Ismenyifen",
-  "introduction.interactions.favourite.text": "Tzemreḍ ad teǧǧeḍ kra n tjewwaqt i ticki, daγen ad tiniḍ i bab-is d akken taɛǧeb-ik, s tmerna-ines ɣer yismenyifen-ik.",
-  "introduction.interactions.reblog.headline": "Bḍu tikelt-nniḍen",
-  "introduction.interactions.reblog.text": "Tzemreḍ ad tebḍuḍ tijewwaqin n medden akk d yimeḍfaṛen-ik s beṭṭu-nsent tikelt-nniḍen.",
-  "introduction.interactions.reply.headline": "Err",
-  "introduction.interactions.reply.text": "Tzemreḍ ad terreḍ ɣef tjewwaqin-ik·im akked tid n medden-nniḍen, aya atent-id-icudd ta deffir ta deg yiwen udiwenni.",
-  "introduction.welcome.action": "Bdu!",
-  "introduction.welcome.headline": "Isurifen imenza",
-  "introduction.welcome.text": "Anṣuf ɣer fediverse! Deg kra n yimiren, ad tizmireḍ ad tzzuzreḍ iznan neγ ad tmeslayeḍ i yemddukkal deg waṭas n yiqeddacen. Maca aqeddac-agi, {domain}, mačči am wiyaḍ - deg-s i yella umaɣnu-ik, ihi cfu ɣef yisem-is.",
   "keyboard_shortcuts.back": "i tuɣalin ɣer deffir",
   "keyboard_shortcuts.blocked": "akken ad teldiḍ umuɣ n yimseqdacen yettwasḥebsen",
   "keyboard_shortcuts.boost": "i beṭṭu tikelt-nniḍen",
@@ -268,7 +256,7 @@
   "lists.new.title_placeholder": "Azwel amaynut n tebdart",
   "lists.replies_policy.followed": "Any followed user",
   "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.none": "Ula yiwen·t",
   "lists.replies_policy.title": "Ssken-d tiririyin i:",
   "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ",
   "lists.subheading": "Tibdarin-ik·im",
@@ -277,7 +265,7 @@
   "media_gallery.toggle_visible": "Ffer {number, plural, one {tugna} other {tugniwin}}",
   "missing_indicator.label": "Ulac-it",
   "missing_indicator.sublabel": "Ur nufi ara aɣbalu-a",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Tanzagt",
   "mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?",
   "mute_modal.indefinite": "Indefinite",
   "navigation_bar.apps": "Isnasen izirazen",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu",
   "notifications.column_settings.sound": "Rmed imesli",
   "notifications.column_settings.status": "Tiẓenẓunin timaynutin:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Akk",
   "notifications.filter.boosts": "Seǧhed",
   "notifications.filter.favourites": "Ismenyifen",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 04a0f9140..95abf9381 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Ешкімге жазылмапты.",
   "account.follows_you": "Сізге жазылыпты",
   "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру",
+  "account.joined": "Joined {date}",
   "account.last_status": "Соңғы белсенділік",
   "account.link_verified_on": "Сілтеме меншігі расталған күн {date}",
   "account.locked_info": "Бұл қолданушы өзі туралы мәліметтерді жасырған. Тек жазылғандар ғана көре алады.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Бұғатталған домен жоқ.",
   "empty_column.favourited_statuses": "Ешқандай жазба 'Таңдаулылар' тізіміне қосылмапты. Қосылғаннан кейін осында жинала бастайды.",
   "empty_column.favourites": "Бұл постты әлі ешкім 'Таңдаулылар' тізіміне қоспапты. Біреу бастағаннан кейін осында көрінетін болады.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Әлі ешқандай жазылуға сұранымдар келмеді. Жаңа сұранымдар осында көрінетін болады.",
   "empty_column.hashtag": "Бұндай хэштегпен әлі ешкім жазбапты.",
   "empty_column.home": "Әлі ешкімге жазылмапсыз. Бәлкім {public} жазбаларын қарап немесе іздеуді қолданып көрерсіз.",
-  "empty_column.home.public_timeline": "ашық желі",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Бұл тізімде ештеңе жоқ.",
   "empty_column.lists": "Әзірше ешқандай тізіміңіз жоқ. Біреуін құрғаннан кейін осы жерде көрінетін болады.",
   "empty_column.mutes": "Әзірше ешқандай үнсізге қойылған қолданушы жоқ.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа",
   "errors.unexpected_crash.report_issue": "Мәселені хабарла",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Авторизация",
   "follow_request.reject": "Қабылдамау",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# күн} other {# күн}}",
   "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}",
   "intervals.full.minutes": "{number, plural, one {# минут} other {# минут}}",
-  "introduction.federation.action": "Келесі",
-  "introduction.federation.federated.headline": "Жаһандық",
-  "introduction.federation.federated.text": "Жаһандық желідегі жазбалар осында көрінетін болады.",
-  "introduction.federation.home.headline": "Басты бет",
-  "introduction.federation.home.text": "Жазылған адамдарыңыздың жазбалары осында шығады. Кез келген серверден жазылуыңызға болады!",
-  "introduction.federation.local.headline": "Жергілікті",
-  "introduction.federation.local.text": "Жергілікті желіде жазылған жазбалар осында шығатын болады.",
-  "introduction.interactions.action": "Оқулық аяқталды!",
-  "introduction.interactions.favourite.headline": "Таңдаулы",
-  "introduction.interactions.favourite.text": "Жазбаларды таңдаулыға сақтауға болады, осылайша авторына ұнағанын білдіре аласыз.",
-  "introduction.interactions.reblog.headline": "Бөлісу",
-  "introduction.interactions.reblog.text": "Ұнаған жазбаларды өз оқырмандарыңызбен бөлісе аласыз.",
-  "introduction.interactions.reply.headline": "Жауап",
-  "introduction.interactions.reply.text": "Жазбаларға жауап жаза аласыз, осылайша пікірталас өрбітуіңізге болады.",
-  "introduction.welcome.action": "Кеттік!",
-  "introduction.welcome.headline": "Алғашқы қадамдар",
-  "introduction.welcome.text": "Желіге қош келдіңіз! Бірнеше минуттан кейін желіде жазба қалдырып, медиа бөлісіп, басқалармен пікірталасқа қатысып ортаға қосыла аласыз. . Бірақ бұл сервер {domain} - бұл ерекше, ол сіздің профиліңізді қояды, сондықтан оның есімін есіңізде сақтаңыз.",
   "keyboard_shortcuts.back": "артқа қайту",
   "keyboard_shortcuts.blocked": "бұғатталғандар тізімін ашу",
   "keyboard_shortcuts.boost": "жазба бөлісу",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Бағанда көрсет",
   "notifications.column_settings.sound": "Дыбысын қос",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Барлығы",
   "notifications.filter.boosts": "Бөлісулер",
   "notifications.filter.favourites": "Таңдаулылар",
diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json
index a5025bb72..46f4d3b34 100644
--- a/app/javascript/mastodon/locales/kn.json
+++ b/app/javascript/mastodon/locales/kn.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 10f7eabcf..29c1f550f 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -22,9 +22,10 @@
   "account.follows.empty": "이 유저는 아직 아무도 팔로우하고 있지 않습니다.",
   "account.follows_you": "날 팔로우합니다",
   "account.hide_reblogs": "@{name}의 부스트를 숨기기",
+  "account.joined": "{date}에 가입함",
   "account.last_status": "마지막 활동",
   "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨",
-  "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로어를 승인합니다.",
+  "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로워를 승인합니다.",
   "account.media": "미디어",
   "account.mention": "@{name}에게 글쓰기",
   "account.moved_to": "{name}는 계정을 이동했습니다:",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "아직 숨겨진 도메인이 없습니다.",
   "empty_column.favourited_statuses": "아직 즐겨찾기 한 툿이 없습니다. 툿을 즐겨찾기 하면 여기에 나타납니다.",
   "empty_column.favourites": "아직 아무도 이 툿을 즐겨찾기 하지 않았습니다. 누군가 즐겨찾기를 하면 여기에 그들이 나타납니다.",
+  "empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.",
   "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.",
   "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
   "empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.",
-  "empty_column.home.public_timeline": "연합 타임라인",
+  "empty_column.home.suggestions": "몇몇의 제안 보기",
   "empty_column.list": "리스트에 아직 아무 것도 없습니다.",
   "empty_column.lists": "아직 리스트가 없습니다. 리스트를 만들면 여기에 나타납니다.",
   "empty_column.mutes": "아직 아무도 뮤트하지 않았습니다.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "그것들을 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.",
   "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사",
   "errors.unexpected_crash.report_issue": "문제 신고",
+  "follow_recommendations.done": "완료",
+  "follow_recommendations.heading": "게시물을 받아 볼 사람들을 팔로우 하세요! 여기 몇몇의 추천이 있습니다.",
+  "follow_recommendations.lead": "당신이 팔로우 하는 사람들의 게시물이 시간순으로 정렬되어 당신의 홈 피드에 표시될 것입니다. 실수를 두려워 하지 마세요, 언제든지 쉽게 팔로우 취소를 할 수 있습니다!",
   "follow_request.authorize": "허가",
   "follow_request.reject": "거부",
   "follow_requests.unlocked_explanation": "당신의 계정이 잠기지 않았다고 할 지라도, {domain}의 스탭은 당신이 이 계정들로부터의 팔로우 요청을 수동으로 확인하길 원한다고 생각했습니다.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number} 일",
   "intervals.full.hours": "{number} 시간",
   "intervals.full.minutes": "{number} 분",
-  "introduction.federation.action": "다음",
-  "introduction.federation.federated.headline": "연합",
-  "introduction.federation.federated.text": "페디버스의 다른 서버의 공개 게시물이 연합 타임라인에 나타납니다.",
-  "introduction.federation.home.headline": "홈",
-  "introduction.federation.home.text": "당신이 팔로우 하고 있는 사람의 게시물이 홈 타임라인에 나타납니다. 어느 서버에 있는 사람이라도 팔로우가 가능합니다!",
-  "introduction.federation.local.headline": "로컬",
-  "introduction.federation.local.text": "같은 서버에 있는 공개 게시물은 로컬 타임라인에 나타납니다.",
-  "introduction.interactions.action": "튜토리얼 마치기!",
-  "introduction.interactions.favourite.headline": "즐겨찾기",
-  "introduction.interactions.favourite.text": "나중을 위해 툿을 저장할 수 있습니다, 그리고 작성자에게 당신이 이 글을 마음에 들어한다는 걸 알립니다.",
-  "introduction.interactions.reblog.headline": "부스트",
-  "introduction.interactions.reblog.text": "부스트를 통해 다른 사람의 툿을 당신의 팔로워들에게 공유할 수 있습니다.",
-  "introduction.interactions.reply.headline": "답글",
-  "introduction.interactions.reply.text": "다른 사람이나 나의 툿에 답글을 달 수 있습니다, 이 답글은 하나의 타래글로 이어집니다.",
-  "introduction.welcome.action": "출발!",
-  "introduction.welcome.headline": "첫걸음",
-  "introduction.welcome.text": "페디버스에 오신 것을 환영합니다! 잠시 후, 당신은 수 많은 다양한 서버들에 존재하는 친구들에게 메시지를 보내고 대화 할 수 있게 됩니다. 하지만 이 서버, {domain}은 특별합니다. 이 서버는 당신의 프로필을 제공하니 이름을 기억하세요.",
   "keyboard_shortcuts.back": "뒤로가기",
   "keyboard_shortcuts.blocked": "차단한 유저 리스트 열기",
   "keyboard_shortcuts.boost": "부스트",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "컬럼에 표시",
   "notifications.column_settings.sound": "효과음 재생",
   "notifications.column_settings.status": "새 툿:",
+  "notifications.column_settings.unread_markers.category": "읽지 않음 알림 마커",
   "notifications.filter.all": "모두",
   "notifications.filter.boosts": "부스트",
   "notifications.filter.favourites": "즐겨찾기",
diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json
index 3c359d222..fadc6b3a6 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.",
   "account.follows_you": "شوێنکەوتووەکانت",
   "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "دوایین چالاکی",
   "account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە",
   "account.locked_info": "تایبەتمەندی ئەم هەژمارەیە ڕیکخراوە بۆ قوفڵدراوە. خاوەنەکە بە دەستی پێداچوونەوە دەکات کە کێ دەتوانێت شوێنیان بکەوێت.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.",
   "empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.",
   "empty_column.favourites": "کەس ئەم توتەی دڵخواز نەکردووە،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "تۆ هێشتا هیچ داواکارییەکی بەدواداچووت نیە. کاتێک یەکێکت بۆ هات، لێرە دەرئەکەویت.",
   "empty_column.hashtag": "هێشتا هیچ شتێک لەم هاشتاگەدا نییە.",
   "empty_column.home": "تایم لاینی ماڵەوەت بەتاڵە! سەردانی {public} بکە یان گەڕان بەکاربێنە بۆ دەستپێکردن و بینینی بەکارهێنەرانی تر.",
-  "empty_column.home.public_timeline": "هێڵی کاتی گشتی",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "هێشتا هیچ شتێک لەم لیستەدا نییە. کاتێک ئەندامانی ئەم لیستە دەنگی نوێ بڵاودەکەن، لێرە دەردەکەون.",
   "empty_column.lists": "تۆ هێشتا هیچ لیستت دروست نەکردووە، کاتێک دانەیەک دروست دەکەیت، لێرە پیشان دەدرێت.",
   "empty_column.mutes": "تۆ هێشتا هیچ بەکارهێنەرێکت بێدەنگ نەکردووە.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.",
   "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد",
   "errors.unexpected_crash.report_issue": "کێشەی گوزارشت",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "ده‌سه‌ڵاتپێدراو",
   "follow_request.reject": "ڕەتکردنەوە",
   "follow_requests.unlocked_explanation": "هەرچەندە هەژمارەکەت داخراو نییە، ستافی {domain} وا بیریان کردەوە کە لەوانەیە بتانەوێت پێداچوونەوە بە داواکاریەکانی ئەم هەژمارەدا بکەن بە دەستی.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}",
   "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}",
   "intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}",
-  "introduction.federation.action": "داهاتوو",
-  "introduction.federation.federated.headline": "گشتی",
-  "introduction.federation.federated.text": "نووسراوە گشتیەکان لە خزمەتگوزاریەکانی تری جیهانی دەرئەکەون لە هێڵی گشتی.",
-  "introduction.federation.home.headline": "سەرەتا",
-  "introduction.federation.home.text": "ئەو بابەتانەی کە بەشوێنیان دەکەویت لە پەڕەی ژوورەکەت دەردەکەوێت. دەتوانیت شوێن هەموو کەسێک بکەویت لەسەر هەر ڕاژەیەک!",
-  "introduction.federation.local.headline": "ناوخۆیی",
-  "introduction.federation.local.text": "نووسراوە گشتیەکان لە خەڵک لەسەر هەمان ڕاژە وەک تۆ دەردەکەون لە هێڵی کاتی ناوخۆیی.",
-  "introduction.interactions.action": "خوێندنی تەواوبکە!",
-  "introduction.interactions.favourite.headline": "دڵخواز",
-  "introduction.interactions.favourite.text": "دەتوانیت پاشترتوتێک پاشەکەوت بکەیت، با نووسەر بزانێت کە تۆ حەزت لێ بوو، بە ئارەزووی خۆت.",
-  "introduction.interactions.reblog.headline": "بەهێزکردن",
-  "introduction.interactions.reblog.text": "دەتوانیت دەنگی کەسانی تر هاوبەش بکەیت لەگەڵ شوێنکەوتوانی خۆت بە بەهێزکردنیان.",
-  "introduction.interactions.reply.headline": "وەڵام",
-  "introduction.interactions.reply.text": "دەتوانیت وەڵامی کەسانی تر و توتەکانی خۆت بدەوە، کە لە گفتوگۆیەکدا بە یەکەوە زنجیریان دەکات.",
-  "introduction.welcome.action": "با بڕۆین!",
-  "introduction.welcome.headline": "هەنگاوی یەکەم",
-  "introduction.welcome.text": "بەخێربێیت بۆتۆڕەکۆمەڵەییەکانی چربووە! لە چەند ساتێکی کەمدا دەتوانیت پەیامەکان پەخش بکەیت و لەگەڵ هاوڕێکانت لە ناو چەندین جۆر لە ڕاژەکان قسە بکەیت.. بەڵام ئەم ڕاژانە، {domain}، جیاوزە لەگەڵ ئەوانی دیکە بۆ ئەوە کە میوانداری پرۆفایلەکەت دەکان، بۆیە ناوەکەیت لەبیربێت.",
   "keyboard_shortcuts.back": "بۆ گەڕانەوە",
   "keyboard_shortcuts.blocked": "بۆ کردنەوەی لیستی بەکارهێنەرە بلۆککراوەکان",
   "keyboard_shortcuts.boost": "بۆ بەهێزکردن",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "لە ستووندا پیشان بدە",
   "notifications.column_settings.sound": "لێدانی دەنگ",
   "notifications.column_settings.status": "توتەکانی نوێ:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "هەموو",
   "notifications.filter.boosts": "دووبارەتوتەکان",
   "notifications.filter.favourites": "دڵخوازەکان",
diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json
new file mode 100644
index 000000000..df2e21494
--- /dev/null
+++ b/app/javascript/mastodon/locales/kw.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "Note",
+  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.badges.bot": "Bot",
+  "account.badges.group": "Group",
+  "account.block": "Block @{name}",
+  "account.block_domain": "Block domain {domain}",
+  "account.blocked": "Blocked",
+  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Direct message @{name}",
+  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.domain_blocked": "Domain blocked",
+  "account.edit_profile": "Edit profile",
+  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.endorse": "Feature on profile",
+  "account.follow": "Follow",
+  "account.followers": "Holyoryon",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
+  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Last active",
+  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.media": "Media",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "Mute @{name}",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.never_active": "Never",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "Report @{name}",
+  "account.requested": "Awaiting approval",
+  "account.share": "Share @{name}'s profile",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.unblock": "Unblock @{name}",
+  "account.unblock_domain": "Unblock domain {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account_note.placeholder": "Click to add a note",
+  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Rate limited",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "Oops!",
+  "announcement.announcement": "Gwarnyans",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "Try again",
+  "bundle_column_error.title": "Network error",
+  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "Try again",
+  "column.blocks": "Blocked users",
+  "column.bookmarks": "Bookmarks",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.directory": "Browse profiles",
+  "column.domain_blocks": "Blocked domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Home",
+  "column.lists": "Lists",
+  "column.mutes": "Muted users",
+  "column.notifications": "Notifications",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Back",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.local_only": "Local only",
+  "community.column_settings.media_only": "Media only",
+  "community.column_settings.remote_only": "Remote only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.poll.add_option": "Add a choice",
+  "compose_form.poll.duration": "Poll duration",
+  "compose_form.poll.option_placeholder": "Choice {number}",
+  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
+  "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.confirm": "Block",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.logout.confirm": "Log out",
+  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "Reply",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "conversation.delete": "Delete conversation",
+  "conversation.mark_as_read": "Mark as read",
+  "conversation.open": "View conversation",
+  "conversation.with": "With {names}",
+  "directory.federated": "From known fediverse",
+  "directory.local": "From {domain} only",
+  "directory.new_arrivals": "New arrivals",
+  "directory.recently_active": "Recently active",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no blocked domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it 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.suggestions": "See some suggestions",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "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.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
+  "generic.saved": "Saved",
+  "getting_started.developers": "Developers",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "hashtag.column_header.tag_mode.all": "and {additional}",
+  "hashtag.column_header.tag_mode.any": "or {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.select.no_options_message": "No suggestions found",
+  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
+  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.any": "Any of these",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "home.hide_announcements": "Hide announcements",
+  "home.show_announcements": "Show announcements",
+  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
+  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.open_media": "to open media",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.compress": "Compress image view box",
+  "lightbox.expand": "Expand image view box",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.edit.submit": "Change title",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.replies_policy.followed": "Any followed user",
+  "lists.replies_policy.list": "Members of the list",
+  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.title": "Show replies to:",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.duration": "Duration",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "mute_modal.indefinite": "Indefinite",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.follow_request": "{name} has requested to follow you",
+  "notification.mention": "{name} mentioned you",
+  "notification.own_poll": "Your poll has ended",
+  "notification.poll": "A poll you have voted in has ended",
+  "notification.reblog": "{name} boosted your status",
+  "notification.status": "{name} just posted",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "All",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.polls": "Poll results",
+  "notifications.filter.statuses": "Updates from people you follow",
+  "notifications.grant_permission": "Grant permission.",
+  "notifications.group": "{count} notifications",
+  "notifications.mark_as_read": "Mark every notification as read",
+  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
+  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
+  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.title": "Never miss a thing",
+  "picture_in_picture.restore": "Put it back",
+  "poll.closed": "Closed",
+  "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.vote": "Vote",
+  "poll.voted": "You voted for this answer",
+  "poll_button.add_poll": "Add a poll",
+  "poll_button.remove_poll": "Remove poll",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Visible for mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Visible for followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Visible for all, shown in public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Visible for all, but not in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "relative_time.today": "today",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.bookmark": "Bookmark",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost with original visibility",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.remove_bookmark": "Remove bookmark",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.uncached_media_warning": "Not available",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
+  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.moments": "Moments remaining",
+  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.resources.followers": "Followers",
+  "timeline_hint.resources.follows": "Follows",
+  "timeline_hint.resources.statuses": "Older toots",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.trending_now": "Trending now",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add images, a video or an audio file",
+  "upload_error.limit": "File upload limit exceeded.",
+  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_form.audio_description": "Describe for people with hearing loss",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.edit": "Edit",
+  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.undo": "Delete",
+  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "upload_modal.choose_image": "Choose image",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.edit_media": "Edit media",
+  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_progress.label": "Uploading…",
+  "video.close": "Close video",
+  "video.download": "Download file",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 46dc0975d..783808dda 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index f075731fe..0b56c6f13 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -12,16 +12,17 @@
   "account.disable_notifications": "Stop notifying me when @{name} posts",
   "account.domain_blocked": "Domēns ir paslēpts",
   "account.edit_profile": "Labot profilu",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Man paziņot, kad @{name} publicē ierakstu",
   "account.endorse": "Izcelts profilā",
   "account.follow": "Sekot",
   "account.followers": "Sekotāji",
   "account.followers.empty": "Šim lietotājam nav sekotāju.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, zero {{counter} sekotāju} one {{counter} sekotājs} other {{counter} sekotāji}}",
+  "account.following_counter": "{count, plural, zero {Seko {counter} kontiem} one {Seko {counter} kontam} other {Seko {counter} kontiem}}",
   "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.",
   "account.follows_you": "Seko tev",
   "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Pēdējā aktivitāte",
   "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}",
   "account.locked_info": "Šī konta privātuma status ir iestatīts slēgts. Īpašnieks izskatīs un izvēlēsies kas viņam drīkst sekot.",
@@ -50,8 +51,8 @@
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "Negaidīta kļūda.",
   "alert.unexpected.title": "Ups!",
-  "announcement.announcement": "Announcement",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "announcement.announcement": "Paziņojums",
+  "autosuggest_hashtag.per_week": "{count} nedēļā",
   "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz",
   "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.",
   "bundle_column_error.retry": "Mēģini vēlreiz",
@@ -63,7 +64,7 @@
   "column.bookmarks": "Grāmatzīmes",
   "column.community": "Lokālā laika līnija",
   "column.direct": "Privātās ziņas",
-  "column.directory": "Browse profiles",
+  "column.directory": "Pārlūkot profilus",
   "column.domain_blocks": "Paslēptie domēni",
   "column.favourites": "Favorīti",
   "column.follow_requests": "Sekotāju pieprasījumi",
@@ -91,9 +92,9 @@
   "compose_form.lock_disclaimer.lock": "slēgts",
   "compose_form.placeholder": "Ko vēlies publicēt?",
   "compose_form.poll.add_option": "Pievienot izvēli",
-  "compose_form.poll.duration": "Poll duration",
-  "compose_form.poll.option_placeholder": "Choice {number}",
-  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.poll.duration": "Aptaujas ilgums",
+  "compose_form.poll.option_placeholder": "Izvēle Nr. {number}",
+  "compose_form.poll.remove_option": "Noņemt šo izvēli",
   "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
   "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
   "compose_form.publish": "Publicēt",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Slēpto domēnu vēl nav.",
   "empty_column.favourited_statuses": "Tev vēl nav iemīļoto ziņojumu. Kad Tev tādu būs tie šeit parādīsies.",
   "empty_column.favourites": "Neviens šo ziņojumu nav pievienojis favorītiem. Kad tādu būs tie šeit parādīsies.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Šobrīd neviens nav pieteicies tev sekot. Kad kāds pieteiksies tas parādīsies šeit.",
   "empty_column.hashtag": "Ar šo haštagu nekas nav atrodams.",
   "empty_column.home": "Tava laika līnija ir tukša! Apmeklē federatīvo laika līniju vai uzmeklē kādu meklētājā lai satiktu citus.",
-  "empty_column.home.public_timeline": "publiskā laika līnija",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Šis saraksts ir tukšs. Kad šī saraksta dalībnieki atjaunos statusu tas parādīsies šeit.",
   "empty_column.lists": "Tev nav neviena saraksta. Kad tādu būs tie parādīsies šeit.",
   "empty_column.mutes": "Tu neesi nevienu apklusinājis.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autorizēt",
   "follow_request.reject": "Noraidīt",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index 6dac40e8b..964571a58 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Корисникот не следи никој сеуште.",
   "account.follows_you": "Те следи тебе",
   "account.hide_reblogs": "Сокриј буст од @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Последно активен",
   "account.link_verified_on": "Сопстевноста на овај линк беше проверен на {date}",
   "account.locked_info": "Статусот на приватност на овај корисник е сетиран како заклучен. Корисникот одлучува кој можи да го следи него.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "Немате сокриени домеини уште.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "јавен времеплов",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Пријавете проблем",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Одобри",
   "follow_request.reject": "Одбиј",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ден} other {# дена}}",
   "intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
   "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}",
-  "introduction.federation.action": "Следно",
-  "introduction.federation.federated.headline": "Федеративно",
-  "introduction.federation.federated.text": "Јавни објави од други сервери од fediverse ќе се појават во федеративниот времеплов.",
-  "introduction.federation.home.headline": "Дома",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Локално",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Заврши туторијал!",
-  "introduction.interactions.favourite.headline": "Омилени",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Бустирај",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Одговори",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Да започнеме!",
-  "introduction.welcome.headline": "Почетни чекори",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "за да одите назад",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Прикажи во колона",
   "notifications.column_settings.sound": "Свири звуци",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Сите",
   "notifications.filter.boosts": "Бустови",
   "notifications.filter.favourites": "Омилени",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index 4f44f3800..0303176b4 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -1,34 +1,35 @@
 {
   "account.account_note_header": "കുറിപ്പ്",
-  "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക",
+  "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ/മാറ്റുകയോ ചെയ്യുക",
   "account.badges.bot": "റോബോട്ട്",
   "account.badges.group": "ഗ്രൂപ്പ്",
   "account.block": "@{name} -നെ തടയുക",
-  "account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക",
+  "account.block_domain": "{domain} എന്ന മേഖല തടയുക",
   "account.blocked": "തടഞ്ഞു",
   "account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക",
   "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക",
-  "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
+  "account.direct": "@{name}-ന്(ക്ക്) നേരിട്ട് സന്ദേശം അയക്കുക",
   "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക",
-  "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു",
+  "account.domain_blocked": "മേഖല തടഞ്ഞു",
   "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക",
   "account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക",
   "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക",
   "account.follow": "പിന്തുടരുക",
   "account.followers": "പിന്തുടരുന്നവർ",
   "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, one {{counter} പിന്തുടരുന്നവർ} other {{counter} പിന്തുടരുന്നവർ}}",
+  "account.following_counter": "{count, plural, one {{counter} പിന്തുടരുന്നു} other {{counter} പിന്തുടരുന്നു}}",
   "account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.",
   "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു",
   "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക",
+  "account.joined": "Joined {date}",
   "account.last_status": "അവസാനം കണ്ടത്",
   "account.link_verified_on": "ഈ ലിങ്കിന്റെ ഉടമസ്തത {date} ഇൽ ഉറപ്പാക്കിയതാണ്",
   "account.locked_info": "ഈ അംഗത്വത്തിന്റെ സ്വകാര്യതാ നിലപാട് അനുസരിച്ച് പിന്തുടരുന്നവരെ തിരഞ്ഞെടുക്കാനുള്ള വിവേചനാധികാരം ഉടമസ്ഥനിൽ നിഷിപ്തമായിരിക്കുന്നു.",
   "account.media": "മീഡിയ",
   "account.mention": "@{name} സൂചിപ്പിക്കുക",
   "account.moved_to": "{name} ഇതിലേക്ക് മാറിയിരിക്കുന്നു:",
-  "account.mute": "നിശ്ശബ്ദമാക്കുക @{name}",
+  "account.mute": "@{name}-നെ(യെ) നിശ്ശബ്ദമാക്കൂ",
   "account.mute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ നിശബ്ദമാക്കുക",
   "account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു",
   "account.never_active": "ഒരിക്കലും ഇല്ല",
@@ -36,12 +37,12 @@
   "account.posts_with_replies": "ടൂട്ടുകളും മറുപടികളും",
   "account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}",
   "account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക",
-  "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക",
+  "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കിടുക",
   "account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക",
   "account.statuses_counter": "{count, plural, one {{counter} ടൂട്ട്} other {{counter} ടൂട്ടുകൾ}}",
-  "account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}",
-  "account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക",
-  "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക",
+  "account.unblock": "@{name} തടഞ്ഞത് മാറ്റുക",
+  "account.unblock_domain": "{domain} എന്ന മേഖല വെളിപ്പെടുത്തുക",
+  "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കരുത്",
   "account.unfollow": "പിന്തുടരുന്നത് നിര്‍ത്തുക",
   "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}",
   "account.unmute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രസിദ്ധപ്പെടുത്തുക",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "മറയ്ക്കപ്പെട്ടിരിക്കുന്ന മേഖലകൾ ഇതുവരെ ഇല്ല.",
   "empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
   "empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "ഈ ഹാഷ്‌ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "പൊതു സമയരേഖ",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "ചുമതലപ്പെടുത്തുക",
   "follow_request.reject": "നിരസിക്കുക",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "അടുത്തത്",
-  "introduction.federation.federated.headline": "സംയുക്തമാക്കിയ",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "ഹോം",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "പ്രാദേശികം",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "പഠനസഹായി പൂർത്തീകരിക്കുക!",
-  "introduction.interactions.favourite.headline": "പ്രിയപ്പെട്ടത്",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "ബൂസ്റ്റ് ചെയ്യുക",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "മറുപടി",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "നമുക്ക് തുടങ്ങാം!",
-  "introduction.welcome.headline": "ആദ്യ ചുവടുവെപ്പുകൾ",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "തിരികെ പോകുക",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക",
@@ -237,7 +225,7 @@
   "keyboard_shortcuts.hotkey": "Hotkey",
   "keyboard_shortcuts.legend": "to display this legend",
   "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ",
-  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.mention": "രചയിതാവിനെ സൂചിപ്പിക്കാൻ",
   "keyboard_shortcuts.muted": "to open muted users list",
   "keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ",
   "keyboard_shortcuts.notifications": "to open notifications column",
@@ -246,8 +234,8 @@
   "keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്",
   "keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ",
   "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.search": "തിരയൽ ഫോക്കസ് ചെയ്യുന്നതിന്",
+  "keyboard_shortcuts.spoilers": "CW ഫീൽഡ് കാണിക്കാൻ/മറയ്ക്കാൻ",
   "keyboard_shortcuts.start": "to open \"get started\" column",
   "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
   "keyboard_shortcuts.toggle_sensitivity": "മീഡിയ കാണിക്കുന്നതിനും/മറയ്ക്കുന്നതിനും",
@@ -274,7 +262,7 @@
   "lists.subheading": "എന്റെ പട്ടികകൾ",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "ലോഡിംഗ്...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "കാണാനില്ല",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "കാലാവധി",
@@ -306,7 +294,7 @@
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു",
   "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു",
-  "notification.mention": "{name} mentioned you",
+  "notification.mention": "{name} നിങ്ങളെ സൂചിപ്പിച്ചു",
   "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു",
   "notification.poll": "A poll you have voted in has ended",
   "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു",
@@ -318,20 +306,21 @@
   "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക",
   "notifications.column_settings.filter_bar.category": "Quick filter bar",
   "notifications.column_settings.filter_bar.show": "കാണിക്കുക",
-  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow": "പുതിയ പിന്തുടരുന്നവർ:",
   "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:",
-  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.mention": "സൂചനകൾ:",
   "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:",
-  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.push": "പുഷ് അറിയിപ്പുകൾ",
   "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:",
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക",
   "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "എല്ലാം",
   "notifications.filter.boosts": "ബൂസ്റ്റുകൾ",
   "notifications.filter.favourites": "പ്രിയപ്പെട്ടവ",
   "notifications.filter.follows": "പിന്തുടരുന്നു",
-  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.mentions": "സൂചനകൾ",
   "notifications.filter.polls": "പോൾ ഫലങ്ങൾ",
   "notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്‌ഡേറ്റുകൾ",
   "notifications.grant_permission": "അനുമതി നൽകുക.",
@@ -358,14 +347,14 @@
   "privacy.private.long": "Post to followers only",
   "privacy.private.short": "പിന്തുടരുന്നവർക്ക് മാത്രം",
   "privacy.public.long": "Post to public timelines",
-  "privacy.public.short": "Public",
+  "privacy.public.short": "എല്ലാവര്‍ക്കും",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
   "refresh": "പുതുക്കുക",
   "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…",
   "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
+  "relative_time.days": "{number}ദിവസം",
+  "relative_time.hours": "{number}മണി",
   "relative_time.just_now": "ഇപ്പോൾ",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
@@ -431,15 +420,15 @@
   "status.uncached_media_warning": "ലഭ്യമല്ല",
   "status.unmute_conversation": "Unmute conversation",
   "status.unpin": "Unpin from profile",
-  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.dismiss": "നിർദ്ദേശം ഒഴിവാക്കൂ",
   "suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…",
   "tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ",
   "tabs_bar.home": "ഹോം",
   "tabs_bar.local_timeline": "പ്രാദേശികം",
   "tabs_bar.notifications": "അറിയിപ്പുകൾ",
   "tabs_bar.search": "തിരയുക",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.days": "{number, plural, one {# ദിവസം} other {# ദിവസങ്ങൾ}} ബാക്കി",
+  "time_remaining.hours": "{number, plural, one {# മണിക്കൂർ} other {# മണിക്കൂർ}} ശേഷിക്കുന്നു",
   "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
@@ -467,20 +456,20 @@
   "upload_modal.apply": "പ്രയോഗിക്കുക",
   "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.detect_text": "ചിത്രത്തിൽ നിന്ന് വാചകം കണ്ടെത്തുക",
   "upload_modal.edit_media": "മീഡിയ തിരുത്തുക",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preparing_ocr": "OCR തയ്യാറാക്കുന്നു…",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.preview_label": "പൂര്‍വ്വദൃശ്യം({ratio})",
   "upload_progress.label": "Uploading…",
   "video.close": "വീഡിയോ അടയ്ക്കുക",
   "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക",
   "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക",
-  "video.expand": "Expand video",
+  "video.expand": "വീഡിയോ വികസപ്പിക്കൂ",
   "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ",
   "video.hide": "വീഡിയോ മറയ്ക്കുക",
-  "video.mute": "Mute sound",
-  "video.pause": "Pause",
+  "video.mute": "ശബ്ദം നിശബ്‌ദമാക്കൂ",
+  "video.pause": "താൽക്കാലികമായി നിർത്തുക",
   "video.play": "പ്ലേ",
   "video.unmute": "Unmute sound"
 }
diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json
index 8559665b9..371e42765 100644
--- a/app/javascript/mastodon/locales/mr.json
+++ b/app/javascript/mastodon/locales/mr.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "हा वापरकर्ता अजूनपर्यंत कोणाचा अनुयायी नाही.",
   "account.follows_you": "तुमचा अनुयायी आहे",
   "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा",
+  "account.joined": "Joined {date}",
   "account.last_status": "शेवटचे सक्रिय",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index ec992c679..56cf7ab10 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -1,179 +1,184 @@
 {
-  "account.account_note_header": "Note",
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.account_note_header": "Catatan",
+  "account.add_or_remove_from_list": "Tambah atau Buang dari senarai",
   "account.badges.bot": "Bot",
-  "account.badges.group": "Group",
-  "account.block": "Block @{name}",
+  "account.badges.group": "Kumpulan",
+  "account.block": "Sekat @{name}",
   "account.block_domain": "Hide everything from {domain}",
-  "account.blocked": "Blocked",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
-  "account.cancel_follow_request": "Cancel follow request",
-  "account.direct": "Direct message @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.blocked": "Disekat",
+  "account.browse_more_on_origin_server": "Layari selebihnya di profil original",
+  "account.cancel_follow_request": "Batalkan permintaan mengikuti",
+  "account.direct": "Mesej langsung @{name}",
+  "account.disable_notifications": "Berhenti memaklumi saya apabila @{name} mengirim",
   "account.domain_blocked": "Domain hidden",
-  "account.edit_profile": "Edit profile",
-  "account.enable_notifications": "Notify me when @{name} posts",
-  "account.endorse": "Feature on profile",
-  "account.follow": "Follow",
-  "account.followers": "Followers",
-  "account.followers.empty": "No one follows this user yet.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
-  "account.follows_you": "Follows you",
-  "account.hide_reblogs": "Hide boosts from @{name}",
-  "account.last_status": "Last active",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.edit_profile": "Sunting profil",
+  "account.enable_notifications": "Maklumi saya apabila @{name} mengirim",
+  "account.endorse": "Tampilkan di profil",
+  "account.follow": "Ikuti",
+  "account.followers": "Pengikut",
+  "account.followers.empty": "Belum ada yang mengikuti pengguna ini.",
+  "account.followers_counter": "{count, plural, one {{counter} Pengikut} other {{counter} Pengikut}}",
+  "account.following_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}",
+  "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.",
+  "account.follows_you": "Mengikuti anda",
+  "account.hide_reblogs": "Sembunyikan galakan daripada @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Terakhir aktif",
+  "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}",
+  "account.locked_info": "Status privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.",
   "account.media": "Media",
-  "account.mention": "Mention @{name}",
-  "account.moved_to": "{name} has moved to:",
-  "account.mute": "Mute @{name}",
-  "account.mute_notifications": "Mute notifications from @{name}",
-  "account.muted": "Muted",
-  "account.never_active": "Never",
+  "account.mention": "Sebut @{name}",
+  "account.moved_to": "{name} telah berpindah ke:",
+  "account.mute": "Bisukan @{name}",
+  "account.mute_notifications": "Bisukan pemberitahuan daripada @{name}",
+  "account.muted": "Dibisukan",
+  "account.never_active": "Jangan sesekali",
   "account.posts": "Toots",
   "account.posts_with_replies": "Toots and replies",
-  "account.report": "Report @{name}",
+  "account.report": "Laporkan @{name}",
   "account.requested": "Awaiting approval",
-  "account.share": "Share @{name}'s profile",
-  "account.show_reblogs": "Show boosts from @{name}",
+  "account.share": "Kongsi profil @{name}",
+  "account.show_reblogs": "Tunjukkan galakan daripada @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
-  "account.unblock": "Unblock @{name}",
+  "account.unblock": "Nyahsekat @{name}",
   "account.unblock_domain": "Unhide {domain}",
-  "account.unendorse": "Don't feature on profile",
-  "account.unfollow": "Unfollow",
-  "account.unmute": "Unmute @{name}",
-  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account.unendorse": "Jangan tampilkan di profil",
+  "account.unfollow": "Nyahikut",
+  "account.unmute": "Nyahbisukan @{name}",
+  "account.unmute_notifications": "Nyahbisukan pemberitahuan daripada @{name}",
   "account_note.placeholder": "Click to add a note",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
-  "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
-  "announcement.announcement": "Announcement",
-  "autosuggest_hashtag.per_week": "{count} per week",
-  "boost_modal.combo": "You can press {combo} to skip this next time",
-  "bundle_column_error.body": "Something went wrong while loading this component.",
-  "bundle_column_error.retry": "Try again",
-  "bundle_column_error.title": "Network error",
-  "bundle_modal_error.close": "Close",
-  "bundle_modal_error.message": "Something went wrong while loading this component.",
-  "bundle_modal_error.retry": "Try again",
-  "column.blocks": "Blocked users",
-  "column.bookmarks": "Bookmarks",
-  "column.community": "Local timeline",
-  "column.direct": "Direct messages",
-  "column.directory": "Browse profiles",
+  "alert.rate_limited.message": "Sila cuba semula selepas {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Kadar terhad",
+  "alert.unexpected.message": "Berlaku ralat di luar jangkaan.",
+  "alert.unexpected.title": "Alamak!",
+  "announcement.announcement": "Pengumuman",
+  "autosuggest_hashtag.per_week": "{count} seminggu",
+  "boost_modal.combo": "Anda boleh mengetik {combo} untuk melangkauinya lain kali",
+  "bundle_column_error.body": "Terdapat kesilapan ketika memuatkan komponen ini.",
+  "bundle_column_error.retry": "Cuba lagi",
+  "bundle_column_error.title": "Masalah rangkaian",
+  "bundle_modal_error.close": "Tutup",
+  "bundle_modal_error.message": "Ada yang tidak kena semasa memuatkan komponen ini.",
+  "bundle_modal_error.retry": "Cuba lagi",
+  "column.blocks": "Pengguna yang disekat",
+  "column.bookmarks": "Penanda buku",
+  "column.community": "Garis masa tempatan",
+  "column.direct": "Mesej langsung",
+  "column.directory": "Buka profil",
   "column.domain_blocks": "Hidden domains",
-  "column.favourites": "Favourites",
-  "column.follow_requests": "Follow requests",
-  "column.home": "Home",
-  "column.lists": "Lists",
-  "column.mutes": "Muted users",
-  "column.notifications": "Notifications",
+  "column.favourites": "Kegemaran",
+  "column.follow_requests": "Permintaan ikutan",
+  "column.home": "Laman Utama",
+  "column.lists": "Senarai",
+  "column.mutes": "Pengguna yang dibisukan",
+  "column.notifications": "Pemberitahuan",
   "column.pins": "Pinned toot",
-  "column.public": "Federated timeline",
-  "column_back_button.label": "Back",
-  "column_header.hide_settings": "Hide settings",
-  "column_header.moveLeft_settings": "Move column to the left",
-  "column_header.moveRight_settings": "Move column to the right",
-  "column_header.pin": "Pin",
-  "column_header.show_settings": "Show settings",
-  "column_header.unpin": "Unpin",
-  "column_subheading.settings": "Settings",
-  "community.column_settings.local_only": "Local only",
+  "column.public": "Garis masa bersekutu",
+  "column_back_button.label": "Kembali",
+  "column_header.hide_settings": "Sembunyikan tetapan",
+  "column_header.moveLeft_settings": "Alih lajur ke kiri",
+  "column_header.moveRight_settings": "Alih lajur ke kanan",
+  "column_header.pin": "Sematkan",
+  "column_header.show_settings": "Tunjukkan tetapan",
+  "column_header.unpin": "Nyahsemat",
+  "column_subheading.settings": "Tetapan",
+  "community.column_settings.local_only": "Tempatan sahaja",
   "community.column_settings.media_only": "Media only",
-  "community.column_settings.remote_only": "Remote only",
+  "community.column_settings.remote_only": "Jauh sahaja",
   "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut",
   "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
-  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
-  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.lock_disclaimer": "Akaun anda tidak {locked}. Sesiapapun boleh mengikuti anda untuk melihat kiriman pengikut-sahaja anda.",
+  "compose_form.lock_disclaimer.lock": "dikunci",
   "compose_form.placeholder": "What is on your mind?",
-  "compose_form.poll.add_option": "Add a choice",
-  "compose_form.poll.duration": "Poll duration",
-  "compose_form.poll.option_placeholder": "Choice {number}",
-  "compose_form.poll.remove_option": "Remove this choice",
-  "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
-  "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+  "compose_form.poll.add_option": "Tambah pilihan",
+  "compose_form.poll.duration": "Tempoh undian",
+  "compose_form.poll.option_placeholder": "Pilihan {number}",
+  "compose_form.poll.remove_option": "Buang pilihan ini",
+  "compose_form.poll.switch_to_multiple": "Ubah kepada membenarkan aneka undian",
+  "compose_form.poll.switch_to_single": "Ubah kepada undian pilihan tunggal",
   "compose_form.publish": "Toot",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
-  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
-  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
+  "compose_form.sensitive.hide": "{count, plural, one {Tandakan media sbg sensitif} other {Tandakan media sbg sensitif}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Media telah ditanda sbg sensitif} other {Media telah ditanda sbg sensitif}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media tidak ditanda sbg sensitif} other {Media tidak ditanda sbg sensitif}}",
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
-  "compose_form.spoiler_placeholder": "Write your warning here",
-  "confirmation_modal.cancel": "Cancel",
-  "confirmations.block.block_and_report": "Block & Report",
-  "confirmations.block.confirm": "Block",
-  "confirmations.block.message": "Are you sure you want to block {name}?",
-  "confirmations.delete.confirm": "Delete",
+  "compose_form.spoiler_placeholder": "Tulis amaran anda di sini",
+  "confirmation_modal.cancel": "Batal",
+  "confirmations.block.block_and_report": "Sekat & Lapor",
+  "confirmations.block.confirm": "Sekat",
+  "confirmations.block.message": "Anda pasti mahu menyekat {name}?",
+  "confirmations.delete.confirm": "Padam",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "confirmations.delete_list.confirm": "Delete",
-  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.delete_list.confirm": "Padam",
+  "confirmations.delete_list.message": "Anda pasti mahu memadam senarai ini selama-lamanya?",
   "confirmations.domain_block.confirm": "Hide entire domain",
-  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
-  "confirmations.mute.confirm": "Mute",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
-  "confirmations.mute.message": "Are you sure you want to mute {name}?",
-  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.domain_block.message": "Anda betul-betul, sungguh-sungguh pasti mahu menyekat keseluruhan {domain}? Biasanya sekatan dan bisuan tersasar sudah memadai dan baik. Anda tidak akan dapat melihat kandungan dari 'domain' di sebarang garis masa awam mahupun pemberitahuan anda. Pengikut anda dari 'domain' itu juga akan dikeluarkan.",
+  "confirmations.logout.confirm": "Log keluar",
+  "confirmations.logout.message": "Anda pasti mahu log keluar?",
+  "confirmations.mute.confirm": "Bisukan",
+  "confirmations.mute.explanation": "Ini akan menyembunyikan kiriman-kiriman daripada mereka, juga kiriman yang menyebut mereka, tapi masih membenarkan mereka melihat kiriman-kiriman anda dan mengikuti anda.",
+  "confirmations.mute.message": "Anda pasti mahu membisukan {name}?",
+  "confirmations.redraft.confirm": "Padam & rangka semula",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
-  "confirmations.reply.confirm": "Reply",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
-  "confirmations.unfollow.confirm": "Unfollow",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "confirmations.reply.confirm": "Balas",
+  "confirmations.reply.message": "Membalas sekarang akan menghapuskan mesej yang anda sedang karang. Anda pasti mahu teruskan?",
+  "confirmations.unfollow.confirm": "Nyahikut",
+  "confirmations.unfollow.message": "Anda pasti mahu nyahikuti {name}?",
+  "conversation.delete": "Padam perbualan",
+  "conversation.mark_as_read": "Tanda sudah dibaca",
+  "conversation.open": "Lihat perbualan",
+  "conversation.with": "Dengan {names}",
+  "directory.federated": "Dari fediverse yang diketahui",
+  "directory.local": "Dari {domain} sahaja",
+  "directory.new_arrivals": "Ketibaan baharu",
+  "directory.recently_active": "Aktif baru-baru ini",
   "embed.instructions": "Embed this status on your website by copying the code below.",
-  "embed.preview": "Here is what it will look like:",
-  "emoji_button.activity": "Activity",
-  "emoji_button.custom": "Custom",
-  "emoji_button.flags": "Flags",
-  "emoji_button.food": "Food & Drink",
-  "emoji_button.label": "Insert emoji",
-  "emoji_button.nature": "Nature",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
-  "emoji_button.objects": "Objects",
-  "emoji_button.people": "People",
-  "emoji_button.recent": "Frequently used",
-  "emoji_button.search": "Search...",
-  "emoji_button.search_results": "Search results",
-  "emoji_button.symbols": "Symbols",
-  "emoji_button.travel": "Travel & Places",
-  "empty_column.account_suspended": "Account suspended",
+  "embed.preview": "Begini rupanya nanti:",
+  "emoji_button.activity": "Aktiviti",
+  "emoji_button.custom": "Tersendiri",
+  "emoji_button.flags": "Bendera",
+  "emoji_button.food": "Makanan & Minuman",
+  "emoji_button.label": "Masukkan emoji",
+  "emoji_button.nature": "Alam Semulajadi",
+  "emoji_button.not_found": "Tiada emojo!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objek",
+  "emoji_button.people": "Orang",
+  "emoji_button.recent": "Kerap digunakan",
+  "emoji_button.search": "Cari...",
+  "emoji_button.search_results": "Hasil carian",
+  "emoji_button.symbols": "Simbol",
+  "emoji_button.travel": "Kembara & Tempat",
+  "empty_column.account_suspended": "Akaun digantung",
   "empty_column.account_timeline": "No toots here!",
-  "empty_column.account_unavailable": "Profile unavailable",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.account_unavailable": "Profil tidak tersedia",
+  "empty_column.blocks": "Anda belum menyekat sesiapa.",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
-  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.community": "Garis masa tempatan kosong. Tulislah secara awam untuk memulakan sesuatu!",
+  "empty_column.direct": "Anda belum mempunyai mesej langsung. Ia akan terpapar di sini apabila anda menghantar atau menerimanya.",
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
-  "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "Anda belum mempunyai permintaan ikutan. Ia akan terpapar di sini apabila ada nanti.",
+  "empty_column.hashtag": "Belum ada apa-apa dengan hashtag ini.",
+  "empty_column.home": "Garis masa halaman utama anda kosong! Lawati {public} atau lakukan carian untuk bermula dan berjumpa para pengguna lain.",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
-  "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.lists": "Anda belum mempunyai sebarang senarai. Ia akan terpapar di sini apabila anda merekanya.",
+  "empty_column.mutes": "Anda belum membisukan sesiapa.",
+  "empty_column.notifications": "Anda belum ada sebarang pemberitahuan. Berhubunglah dengan yang lain untuk memulakan perbualan.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "Disebabkan 'bug' pada kod kami ataupun isu kesesuaian penyemak imbas, halaman ini tidak dapat dipaparkan dengan tepat.",
+  "error.unexpected_crash.explanation_addons": "Laman ini tidak dapat dipaparkan dengan tepat. Kesilapan ini mungkin berpunca daripada add-on ataupun peralatan terjemahan automatik penyemak imbas.",
+  "error.unexpected_crash.next_steps": "Cuba segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.",
+  "error.unexpected_crash.next_steps_addons": "Cuba menyahdayakannya dan segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.",
+  "errors.unexpected_crash.copy_stacktrace": "Salin 'stacktrace' ke papan klip",
+  "errors.unexpected_crash.report_issue": "Laporkan masalah",
+  "follow_recommendations.done": "Selesai",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -245,124 +233,125 @@
   "keyboard_shortcuts.pinned": "to open pinned toots list",
   "keyboard_shortcuts.profile": "to open author's profile",
   "keyboard_shortcuts.reply": "to reply",
-  "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.requests": "untuk membuka senarai permintaan ikutan",
+  "keyboard_shortcuts.search": "untuk carian bertumpu",
+  "keyboard_shortcuts.spoilers": "untuk memapar/menyembunyikan bidang CW",
+  "keyboard_shortcuts.start": "untuk membuka lajur \"bermula\"",
+  "keyboard_shortcuts.toggle_hidden": "untuk memapar/menyembunyikan teks di belakang CW",
+  "keyboard_shortcuts.toggle_sensitivity": "untuk memapar/menyembunyikan media",
   "keyboard_shortcuts.toot": "to start a brand new toot",
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
-  "keyboard_shortcuts.up": "to move up in the list",
-  "lightbox.close": "Close",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
-  "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
-  "lists.delete": "Delete list",
-  "lists.edit": "Edit list",
-  "lists.edit.submit": "Change title",
-  "lists.new.create": "Add list",
-  "lists.new.title_placeholder": "New list title",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
-  "lists.search": "Search among people you follow",
-  "lists.subheading": "Your lists",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
-  "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
-  "missing_indicator.label": "Not found",
-  "missing_indicator.sublabel": "This resource could not be found",
-  "mute_modal.duration": "Duration",
-  "mute_modal.hide_notifications": "Hide notifications from this user?",
-  "mute_modal.indefinite": "Indefinite",
-  "navigation_bar.apps": "Mobile apps",
-  "navigation_bar.blocks": "Blocked users",
-  "navigation_bar.bookmarks": "Bookmarks",
-  "navigation_bar.community_timeline": "Local timeline",
+  "keyboard_shortcuts.up": "untuk ke atas dalam senarai",
+  "lightbox.close": "Tutup",
+  "lightbox.compress": "Kecilkan kotak tengok gambar",
+  "lightbox.expand": "Besarkan kotak tengok gambar",
+  "lightbox.next": "Seterusnya",
+  "lightbox.previous": "Sebelumnya",
+  "lists.account.add": "Tambah ke senarai",
+  "lists.account.remove": "Keluarkan dari senarai",
+  "lists.delete": "Padam senarai",
+  "lists.edit": "Sunting senarai",
+  "lists.edit.submit": "Ubah tajuk",
+  "lists.new.create": "Tambah senarai",
+  "lists.new.title_placeholder": "Tajuk senarai baharu",
+  "lists.replies_policy.followed": "Sesiapa yang diikuti",
+  "lists.replies_policy.list": "Ahli-ahli dalam senarai",
+  "lists.replies_policy.none": "Tiada sesiapa",
+  "lists.replies_policy.title": "Tunjukkan balasan kepada:",
+  "lists.search": "Cari dalam kalangan orang yang anda ikuti",
+  "lists.subheading": "Senarai anda",
+  "load_pending": "{count, plural, one {# item baharu} other {# item baharu}}",
+  "loading_indicator.label": "Memuatkan...",
+  "media_gallery.toggle_visible": "Sembunyikan {number, plural, one {gambar} other {gambar}}",
+  "missing_indicator.label": "Tidak dijumpai",
+  "missing_indicator.sublabel": "Sumber ini gagal ditemukan",
+  "mute_modal.duration": "Tempoh",
+  "mute_modal.hide_notifications": "Sembunyikan pemberitahuan daripada pengguna ini?",
+  "mute_modal.indefinite": "Tak tentu",
+  "navigation_bar.apps": "Aplikasi mudah alih",
+  "navigation_bar.blocks": "Pengguna yang disekat",
+  "navigation_bar.bookmarks": "Penanda buku",
+  "navigation_bar.community_timeline": "Garis masa tempatan",
   "navigation_bar.compose": "Compose new toot",
-  "navigation_bar.direct": "Direct messages",
-  "navigation_bar.discover": "Discover",
+  "navigation_bar.direct": "Mesej langsung",
+  "navigation_bar.discover": "Teroka",
   "navigation_bar.domain_blocks": "Hidden domains",
-  "navigation_bar.edit_profile": "Edit profile",
-  "navigation_bar.favourites": "Favourites",
-  "navigation_bar.filters": "Muted words",
-  "navigation_bar.follow_requests": "Follow requests",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.edit_profile": "Sunting profil",
+  "navigation_bar.favourites": "Kegemaran",
+  "navigation_bar.filters": "Perkataan yang dibisukan",
+  "navigation_bar.follow_requests": "Permintaan ikutan",
+  "navigation_bar.follows_and_followers": "Ikutan dan pengikut",
   "navigation_bar.info": "About this instance",
-  "navigation_bar.keyboard_shortcuts": "Hotkeys",
-  "navigation_bar.lists": "Lists",
-  "navigation_bar.logout": "Logout",
-  "navigation_bar.mutes": "Muted users",
-  "navigation_bar.personal": "Personal",
+  "navigation_bar.keyboard_shortcuts": "Kekunci Pantas",
+  "navigation_bar.lists": "Senarai",
+  "navigation_bar.logout": "Log Keluar",
+  "navigation_bar.mutes": "Pengguna yang dibisukan",
+  "navigation_bar.personal": "Peribadi",
   "navigation_bar.pins": "Pinned toots",
-  "navigation_bar.preferences": "Preferences",
-  "navigation_bar.public_timeline": "Federated timeline",
-  "navigation_bar.security": "Security",
+  "navigation_bar.preferences": "Aturan",
+  "navigation_bar.public_timeline": "Garis masa bersekutu",
+  "navigation_bar.security": "Keselamatan",
   "notification.favourite": "{name} favourited your status",
-  "notification.follow": "{name} followed you",
-  "notification.follow_request": "{name} has requested to follow you",
-  "notification.mention": "{name} mentioned you",
-  "notification.own_poll": "Your poll has ended",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.follow": "{name} mengikuti anda",
+  "notification.follow_request": "{name} meminta untuk mengikuti anda",
+  "notification.mention": "{name} menyebut anda",
+  "notification.own_poll": "Undian anda telah tamat",
+  "notification.poll": "Sebuah undian yang anda undi telah tamat",
   "notification.reblog": "{name} boosted your status",
-  "notification.status": "{name} just posted",
-  "notifications.clear": "Clear notifications",
-  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
-  "notifications.column_settings.alert": "Desktop notifications",
-  "notifications.column_settings.favourite": "Favourites:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
-  "notifications.column_settings.follow": "New followers:",
-  "notifications.column_settings.follow_request": "New follow requests:",
-  "notifications.column_settings.mention": "Mentions:",
-  "notifications.column_settings.poll": "Poll results:",
-  "notifications.column_settings.push": "Push notifications",
-  "notifications.column_settings.reblog": "Boosts:",
-  "notifications.column_settings.show": "Show in column",
-  "notifications.column_settings.sound": "Play sound",
+  "notification.status": "{name} baru sahaja membuat kiriman",
+  "notifications.clear": "Bersihkan pemberitahuan",
+  "notifications.clear_confirmation": "Anda pasti mahu membuang semua pemberitahuan anda selama-lamanya?",
+  "notifications.column_settings.alert": "Pemberitahuan desktop",
+  "notifications.column_settings.favourite": "Kegemaran:",
+  "notifications.column_settings.filter_bar.advanced": "Papar semua kategori",
+  "notifications.column_settings.filter_bar.category": "Bar penapis pantas",
+  "notifications.column_settings.filter_bar.show": "Papar",
+  "notifications.column_settings.follow": "Pengikut baharu:",
+  "notifications.column_settings.follow_request": "Permintaan ikutan baharu:",
+  "notifications.column_settings.mention": "Sebutan:",
+  "notifications.column_settings.poll": "Keputusan undian:",
+  "notifications.column_settings.push": "Pemberitahuan tolak",
+  "notifications.column_settings.reblog": "Galakan:",
+  "notifications.column_settings.show": "Papar dalam lajur",
+  "notifications.column_settings.sound": "Mainkan bunyi",
   "notifications.column_settings.status": "New toots:",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
-  "notifications.group": "{count} notifications",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "notifications.column_settings.unread_markers.category": "Penanda pemberitahuan belum dibaca",
+  "notifications.filter.all": "Semua",
+  "notifications.filter.boosts": "Galakan",
+  "notifications.filter.favourites": "Kegemaran",
+  "notifications.filter.follows": "Ikutan",
+  "notifications.filter.mentions": "Sebutan",
+  "notifications.filter.polls": "Keputusan undian",
+  "notifications.filter.statuses": "Kemaskini dari orang yang anda ikuti",
+  "notifications.grant_permission": "Beri kebenaran.",
+  "notifications.group": "{count} pemberitahuan",
+  "notifications.mark_as_read": "Tandakan semua pemberitahuan sebagai sudah dibaca",
+  "notifications.permission_denied": "Pemberitahuan desktop tidak tersedia kerana permintaan kebenaran penyemak imbas sebelum ini ditolak",
+  "notifications.permission_denied_alert": "Pemberitahuan desktop tidak boleh didayakan kerana kebenaran penyemak imbas ditolak sebelum ini",
+  "notifications.permission_required": "Pemberitahuan desktop tidak tersedia kerana keizinan yang diperlukan tidak diberi.",
+  "notifications_permission_banner.enable": "Dayakan pemberitahuan desktop",
+  "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan desktop. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan desktop melalui butang {icon} di atas sesudah didayakan.",
+  "notifications_permission_banner.title": "Takkan terlepas apa-apa",
+  "picture_in_picture.restore": "Letak semula",
+  "poll.closed": "Ditutup",
+  "poll.refresh": "Muat Semula",
+  "poll.total_people": "{count, plural, one {# orang} other {# orang}}",
+  "poll.total_votes": "{count, plural, one {# undian} other {# undian}}",
+  "poll.vote": "Undi",
+  "poll.voted": "Anda mengundi jawapan ini",
+  "poll_button.add_poll": "Tambah undian",
+  "poll_button.remove_poll": "Buang undian",
   "privacy.change": "Adjust status privacy",
   "privacy.direct.long": "Post to mentioned users only",
-  "privacy.direct.short": "Direct",
+  "privacy.direct.short": "Langsung",
   "privacy.private.long": "Post to followers only",
-  "privacy.private.short": "Followers-only",
+  "privacy.private.short": "Pengikut sahaja",
   "privacy.public.long": "Post to public timelines",
-  "privacy.public.short": "Public",
+  "privacy.public.short": "Awam",
   "privacy.unlisted.long": "Do not show in public timelines",
-  "privacy.unlisted.short": "Unlisted",
-  "refresh": "Refresh",
-  "regeneration_indicator.label": "Loading…",
+  "privacy.unlisted.short": "Tidak tersenarai",
+  "refresh": "Muat Semula",
+  "regeneration_indicator.label": "Memuatkan…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
@@ -423,58 +412,58 @@
   "status.report": "Report @{name}",
   "status.sensitive_warning": "Sensitive content",
   "status.share": "Share",
-  "status.show_less": "Show less",
-  "status.show_less_all": "Show less for all",
-  "status.show_more": "Show more",
-  "status.show_more_all": "Show more for all",
-  "status.show_thread": "Show thread",
-  "status.uncached_media_warning": "Not available",
-  "status.unmute_conversation": "Unmute conversation",
-  "status.unpin": "Unpin from profile",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
-  "tabs_bar.federated_timeline": "Federated",
-  "tabs_bar.home": "Home",
-  "tabs_bar.local_timeline": "Local",
-  "tabs_bar.notifications": "Notifications",
-  "tabs_bar.search": "Search",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
-  "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
-  "timeline_hint.resources.followers": "Followers",
-  "timeline_hint.resources.follows": "Follows",
+  "status.show_less": "Papar sedikit",
+  "status.show_less_all": "Papar sedikit untuk semua",
+  "status.show_more": "Papar lagi",
+  "status.show_more_all": "Papar lebih untuk semua",
+  "status.show_thread": "Tunjukkan perbincangan",
+  "status.uncached_media_warning": "Tidak tersedia",
+  "status.unmute_conversation": "Nyahbisukan perbualan",
+  "status.unpin": "Nyahsemat daripada profil",
+  "suggestions.dismiss": "Batalkan cadangan",
+  "suggestions.header": "Anda mungkin berminat dengan…",
+  "tabs_bar.federated_timeline": "Bersekutu",
+  "tabs_bar.home": "Laman utama",
+  "tabs_bar.local_timeline": "Tempatan",
+  "tabs_bar.notifications": "Pemberitahuan",
+  "tabs_bar.search": "Cari",
+  "time_remaining.days": "tinggal {number, plural, one {# hari} other {# hari}}",
+  "time_remaining.hours": "tinggal {number, plural, one {# jam} other {# jam}}",
+  "time_remaining.minutes": "tinggal {number, plural, one {# minit} other {# minit}}",
+  "time_remaining.moments": "Masa yang tinggal",
+  "time_remaining.seconds": "tinggal {number, plural, one {# saat} other {# saat}}",
+  "timeline_hint.remote_resource_not_displayed": "{resource} dari pelayan lain tidak dipaparkan.",
+  "timeline_hint.resources.followers": "Pengikut",
+  "timeline_hint.resources.follows": "Ikutan",
   "timeline_hint.resources.statuses": "Older toots",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
-  "trends.trending_now": "Trending now",
-  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} orang}other {{counter} orang}} bercakap",
+  "trends.trending_now": "Trending kini",
+  "ui.beforeunload": "Draf anda akan terhapus jika anda meninggalkan Mastodon.",
   "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
-  "units.short.thousand": "{count}K",
-  "upload_area.title": "Drag & drop to upload",
-  "upload_button.label": "Add images, a video or an audio file",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
-  "upload_form.audio_description": "Describe for people with hearing loss",
-  "upload_form.description": "Describe for the visually impaired",
-  "upload_form.edit": "Edit",
-  "upload_form.thumbnail": "Change thumbnail",
-  "upload_form.undo": "Delete",
-  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.choose_image": "Choose image",
+  "units.short.million": "{count}J",
+  "units.short.thousand": "{count}R",
+  "upload_area.title": "Seret & letak untuk muat naik",
+  "upload_button.label": "Tambah fail gambar, video atau audio",
+  "upload_error.limit": "Sudah melebihi had muat naik.",
+  "upload_error.poll": "Tidak boleh memuat naik fail bersama undian.",
+  "upload_form.audio_description": "Menjelaskan untuk orang yang ada masalah pendengaran",
+  "upload_form.description": "Menjelaskan untuk orang yang ada masalah penglihatan",
+  "upload_form.edit": "Sunting",
+  "upload_form.thumbnail": "Ubah gambar kecil",
+  "upload_form.undo": "Padam",
+  "upload_form.video_description": "Menjelaskan untuk orang yang ada masalah pendengaran atau penglihatan",
+  "upload_modal.analyzing_picture": "Meneliti gambar…",
+  "upload_modal.apply": "Guna",
+  "upload_modal.choose_image": "Pilih gambar",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.detect_text": "Cam perkataan daripada gambar",
+  "upload_modal.edit_media": "Sunting media",
+  "upload_modal.hint": "Ketik atau seret ke bulatan pada pratonton untuk memilih titik tumpu yang akan kelihatan pada semua gambar kecil.",
+  "upload_modal.preparing_ocr": "Mempersiapkan OCR…",
+  "upload_modal.preview_label": "Pratonton ({ratio})",
   "upload_progress.label": "Uploading…",
-  "video.close": "Close video",
-  "video.download": "Download file",
+  "video.close": "Tutup video",
+  "video.download": "Muat turun fail",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
   "video.fullscreen": "Full screen",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 095114255..6c305aae6 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -10,7 +10,7 @@
   "account.cancel_follow_request": "Volgverzoek annuleren",
   "account.direct": "@{name} een direct bericht sturen",
   "account.disable_notifications": "Geef geen melding meer wanneer @{name} toot",
-  "account.domain_blocked": "Server verborgen",
+  "account.domain_blocked": "Domein geblokkeerd",
   "account.edit_profile": "Profiel bewerken",
   "account.enable_notifications": "Geef een melding wanneer @{name} toot",
   "account.endorse": "Op profiel weergeven",
@@ -21,7 +21,8 @@
   "account.following_counter": "{count, plural, one {{counter} volgend} other {{counter} volgend}}",
   "account.follows.empty": "Deze gebruiker volgt nog niemand.",
   "account.follows_you": "Volgt jou",
-  "account.hide_reblogs": "Verberg boosts van @{name}",
+  "account.hide_reblogs": "Boosts van @{name} verbergen",
+  "account.joined": "Joined {date}",
   "account.last_status": "Laatst actief",
   "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}",
   "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie hen kan volgen.",
@@ -37,14 +38,14 @@
   "account.report": "@{name} rapporteren",
   "account.requested": "Wacht op goedkeuring. Klik om het volgverzoek te annuleren",
   "account.share": "Profiel van @{name} delen",
-  "account.show_reblogs": "Toon boosts van @{name}",
+  "account.show_reblogs": "Boosts van @{name} tonen",
   "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toots}}",
   "account.unblock": "@{name} deblokkeren",
   "account.unblock_domain": "{domain} niet langer verbergen",
   "account.unendorse": "Niet op profiel weergeven",
   "account.unfollow": "Ontvolgen",
   "account.unmute": "@{name} niet langer negeren",
-  "account.unmute_notifications": "@{name} meldingen niet langer negeren",
+  "account.unmute_notifications": "Meldingen van @{name} niet langer negeren",
   "account_note.placeholder": "Klik om een opmerking toe te voegen",
   "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.",
   "alert.rate_limited.title": "Beperkt te gebruiken",
@@ -64,7 +65,7 @@
   "column.community": "Lokale tijdlijn",
   "column.direct": "Directe berichten",
   "column.directory": "Gebruikersgids",
-  "column.domain_blocks": "Genegeerde servers",
+  "column.domain_blocks": "Geblokkeerde domeinen",
   "column.favourites": "Favorieten",
   "column.follow_requests": "Volgverzoeken",
   "column.home": "Start",
@@ -84,7 +85,7 @@
   "community.column_settings.local_only": "Alleen lokaal",
   "community.column_settings.media_only": "Alleen media",
   "community.column_settings.remote_only": "Alleen andere servers",
-  "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd. Echter, de beheerders en moderatoren van jouw en de ontvangende server(s) kunnen dit bericht mogelijk wel bekijken.",
+  "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd.",
   "compose_form.direct_message_warning_learn_more": "Meer leren",
   "compose_form.hashtag_warning": "Deze toot valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare toots kunnen via hashtags gevonden worden.",
   "compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de toots zien die je alleen aan jouw volgers hebt gericht.",
@@ -101,8 +102,8 @@
   "compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}",
   "compose_form.sensitive.marked": "{count, plural, one {Media is als gevoelig gemarkeerd} other {Media is als gevoelig gemarkeerd}}",
   "compose_form.sensitive.unmarked": "{count, plural, one {Media is niet als gevoelig gemarkeerd} other {Media is niet als gevoelig gemarkeerd}}",
-  "compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen",
-  "compose_form.spoiler.unmarked": "Tekst is niet verborgen",
+  "compose_form.spoiler.marked": "Inhoudswaarschuwing verwijderen",
+  "compose_form.spoiler.unmarked": "Inhoudswaarschuwing toevoegen",
   "compose_form.spoiler_placeholder": "Waarschuwingstekst",
   "confirmation_modal.cancel": "Annuleren",
   "confirmations.block.block_and_report": "Blokkeren en rapporteren",
@@ -148,23 +149,24 @@
   "emoji_button.search": "Zoeken...",
   "emoji_button.search_results": "Zoekresultaten",
   "emoji_button.symbols": "Symbolen",
-  "emoji_button.travel": "Reizen en plekken",
+  "emoji_button.travel": "Reizen en locaties",
   "empty_column.account_suspended": "Account opgeschort",
   "empty_column.account_timeline": "Hier zijn geen toots!",
   "empty_column.account_unavailable": "Profiel is niet beschikbaar",
   "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.",
   "empty_column.bookmarked_statuses": "Jij hebt nog geen toots aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.",
-  "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!",
+  "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de spits af te bijten!",
   "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.",
-  "empty_column.domain_blocks": "Er zijn nog geen genegeerde servers.",
+  "empty_column.domain_blocks": "Er zijn nog geen geblokkeerde domeinen.",
   "empty_column.favourited_statuses": "Jij hebt nog geen favoriete toots. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.",
   "empty_column.favourites": "Niemand heeft deze toot nog aan hun favorieten toegevoegd. Wanneer iemand dit doet, valt dat hier te zien.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.",
   "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
-  "empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.",
-  "empty_column.home.public_timeline": "de globale tijdlijn",
+  "empty_column.home": "Deze tijdlijn is leeg! Volg meer mensen om het te vullen. {suggestions}",
+  "empty_column.home.suggestions": "Enkele aanbevelingen bekijken",
   "empty_column.list": "Er is nog niks te zien in deze lijst. Wanneer lijstleden nieuwe toots publiceren, zijn deze hier te zien.",
-  "empty_column.lists": "Jij hebt nog enkele lijst. Wanneer je er eentje hebt aangemaakt, valt deze hier te zien.",
+  "empty_column.lists": "Jij hebt nog geen enkele lijst. Wanneer je er eentje hebt aangemaakt, valt deze hier te zien.",
   "empty_column.mutes": "Jij hebt nog geen gebruikers genegeerd.",
   "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.",
   "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.",
   "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren",
   "errors.unexpected_crash.report_issue": "Technisch probleem melden",
+  "follow_recommendations.done": "Klaar",
+  "follow_recommendations.heading": "Volg mensen waarvan je graag toots wil zien! Hier zijn enkele aanbevelingen.",
+  "follow_recommendations.lead": "Toots van mensen die je volgt zullen in chronologische volgorde onder start verschijnen. Wees niet bang om hierin fouten te maken, want je kunt mensen op elk moment net zo eenvoudig ontvolgen!",
   "follow_request.authorize": "Goedkeuren",
   "follow_request.reject": "Afkeuren",
   "follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.",
@@ -189,7 +194,7 @@
   "hashtag.column_header.tag_mode.all": "en {additional}",
   "hashtag.column_header.tag_mode.any": "of {additional}",
   "hashtag.column_header.tag_mode.none": "zonder {additional}",
-  "hashtag.column_settings.select.no_options_message": "Geen voorstellen gevonden",
+  "hashtag.column_settings.select.no_options_message": "Geen aanbevelingen gevonden",
   "hashtag.column_settings.select.placeholder": "Vul hashtags in…",
   "hashtag.column_settings.tag_mode.all": "Allemaal",
   "hashtag.column_settings.tag_mode.any": "Een van deze",
@@ -203,57 +208,40 @@
   "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}",
   "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}",
   "intervals.full.minutes": "{number, plural, one {# minuut} other {# minuten}}",
-  "introduction.federation.action": "Volgende",
-  "introduction.federation.federated.headline": "Globaal",
-  "introduction.federation.federated.text": "Openbare toots van mensen op andere servers in de fediverse verschijnen op de globale tijdlijn.",
-  "introduction.federation.home.headline": "Start",
-  "introduction.federation.home.text": "Toots van mensen die jij volgt verschijnen onder start. Je kunt iedereen op elke server volgen!",
-  "introduction.federation.local.headline": "Lokaal",
-  "introduction.federation.local.text": "Openbare toots van mensen die ook op jouw server zitten verschijnen op de lokale tijdlijn.",
-  "introduction.interactions.action": "Introductie beëindigen!",
-  "introduction.interactions.favourite.headline": "Favorieten",
-  "introduction.interactions.favourite.text": "Je kunt door een toot aan jouw favorieten toe te voegen, deze voor later bewaren en de auteur laten weten dat je de toot leuk vind.",
-  "introduction.interactions.reblog.headline": "Boosten",
-  "introduction.interactions.reblog.text": "Je kunt toots van andere mensen met jouw volgers delen door deze te boosten.",
-  "introduction.interactions.reply.headline": "Reageren",
-  "introduction.interactions.reply.text": "Je kunt op toots van andere mensen en op die van jezelf reageren, waardoor er een gesprek ontstaat.",
-  "introduction.welcome.action": "Laten we beginnen!",
-  "introduction.welcome.headline": "Eerste stappen",
-  "introduction.welcome.text": "Welkom in de fediverse! Binnen enkele ogenblikken kun jij berichten (toots) versturen en met vrienden op veel verschillende servers praten. Maar deze server, {domain}, is speciaal—het herbergt jouw profiel, onthou dus de naam.",
-  "keyboard_shortcuts.back": "om terug te gaan",
-  "keyboard_shortcuts.blocked": "om de door jou geblokkeerde gebruikers te tonen",
-  "keyboard_shortcuts.boost": "om te boosten",
-  "keyboard_shortcuts.column": "om op een toot te focussen in één van de kolommen",
-  "keyboard_shortcuts.compose": "om het tekstvak voor toots te focussen",
+  "keyboard_shortcuts.back": "Ga terug",
+  "keyboard_shortcuts.blocked": "Geblokkeerde gebruikers tonen",
+  "keyboard_shortcuts.boost": "Toot boosten",
+  "keyboard_shortcuts.column": "Op één van de kolommen focussen",
+  "keyboard_shortcuts.compose": "Tekstveld voor toots focussen",
   "keyboard_shortcuts.description": "Omschrijving",
-  "keyboard_shortcuts.direct": "om jouw directe berichten te tonen",
-  "keyboard_shortcuts.down": "om naar beneden door de lijst te bewegen",
-  "keyboard_shortcuts.enter": "om de toot volledig te tonen",
-  "keyboard_shortcuts.favourite": "om aan jouw favorieten toe te voegen",
-  "keyboard_shortcuts.favourites": "om jouw lijst met favorieten te tonen",
-  "keyboard_shortcuts.federated": "om de globale tijdlijn te tonen",
+  "keyboard_shortcuts.direct": "Jouw directe berichten tonen",
+  "keyboard_shortcuts.down": "Naar beneden in de lijst bewegen",
+  "keyboard_shortcuts.enter": "Toot volledig tonen",
+  "keyboard_shortcuts.favourite": "Aan jouw favorieten toevoegen",
+  "keyboard_shortcuts.favourites": "Favorieten tonen",
+  "keyboard_shortcuts.federated": "Globale tijdlijn tonen",
   "keyboard_shortcuts.heading": "Sneltoetsen",
-  "keyboard_shortcuts.home": "om jouw starttijdlijn te tonen",
+  "keyboard_shortcuts.home": "Start tonen",
   "keyboard_shortcuts.hotkey": "Sneltoets",
-  "keyboard_shortcuts.legend": "om deze legenda te tonen",
-  "keyboard_shortcuts.local": "om de lokale tijdlijn te tonen",
-  "keyboard_shortcuts.mention": "om de auteur te vermelden",
-  "keyboard_shortcuts.muted": "om de door jou genegeerde gebruikers te tonen",
-  "keyboard_shortcuts.my_profile": "om jouw profiel te tonen",
-  "keyboard_shortcuts.notifications": "om jouw meldingen te tonen",
-  "keyboard_shortcuts.open_media": "om media te openen",
-  "keyboard_shortcuts.pinned": "om jouw vastgezette toots te tonen",
-  "keyboard_shortcuts.profile": "om het gebruikersprofiel te openen",
-  "keyboard_shortcuts.reply": "om te reageren",
-  "keyboard_shortcuts.requests": "om jouw volgverzoeken te tonen",
-  "keyboard_shortcuts.search": "om het zoekvak te focussen",
-  "keyboard_shortcuts.spoilers": "om het waarschuwingstekstveld (CW) te tonen/verbergen",
-  "keyboard_shortcuts.start": "om de \"Aan de slag\"-kolom te tonen",
-  "keyboard_shortcuts.toggle_hidden": "om een waarschuwingstekst (CW) te tonen/verbergen",
-  "keyboard_shortcuts.toggle_sensitivity": "om media te tonen/verbergen",
-  "keyboard_shortcuts.toot": "om een nieuwe toot te starten",
-  "keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen",
-  "keyboard_shortcuts.up": "om omhoog te bewegen in de lijst",
+  "keyboard_shortcuts.legend": "Deze legenda tonen",
+  "keyboard_shortcuts.local": "Lokale tijdlijn tonen",
+  "keyboard_shortcuts.mention": "Auteur vermelden",
+  "keyboard_shortcuts.muted": "Genegeerde gebruikers tonen",
+  "keyboard_shortcuts.my_profile": "Jouw profiel tonen",
+  "keyboard_shortcuts.notifications": "Meldingen tonen",
+  "keyboard_shortcuts.open_media": "Media openen",
+  "keyboard_shortcuts.pinned": "Jouw vastgezette toots tonen",
+  "keyboard_shortcuts.profile": "Gebruikersprofiel auteur openen",
+  "keyboard_shortcuts.reply": "Reageren",
+  "keyboard_shortcuts.requests": "Jouw volgverzoeken tonen",
+  "keyboard_shortcuts.search": "Zoekveld focussen",
+  "keyboard_shortcuts.spoilers": "Tekst van een inhoudswaarschuwing tonen/verbergen",
+  "keyboard_shortcuts.start": "\"Aan de slag\" tonen",
+  "keyboard_shortcuts.toggle_hidden": "Inhoudswaarschuwing tonen/verbergen",
+  "keyboard_shortcuts.toggle_sensitivity": "Media tonen/verbergen",
+  "keyboard_shortcuts.toot": "Nieuwe toot schrijven",
+  "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen",
+  "keyboard_shortcuts.up": "Naar boven in de lijst bewegen",
   "lightbox.close": "Sluiten",
   "lightbox.compress": "Afbeelding passend weergeven",
   "lightbox.expand": "Afbeelding groot weergeven",
@@ -287,7 +275,7 @@
   "navigation_bar.compose": "Nieuw toot schrijven",
   "navigation_bar.direct": "Directe berichten",
   "navigation_bar.discover": "Ontdekken",
-  "navigation_bar.domain_blocks": "Genegeerde servers",
+  "navigation_bar.domain_blocks": "Geblokkeerde domeinen",
   "navigation_bar.edit_profile": "Profiel bewerken",
   "navigation_bar.favourites": "Favorieten",
   "navigation_bar.filters": "Filters",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "In kolom tonen",
   "notifications.column_settings.sound": "Geluid afspelen",
   "notifications.column_settings.status": "Nieuwe toots:",
+  "notifications.column_settings.unread_markers.category": "Markeringen voor ongelezen meldingen",
   "notifications.filter.all": "Alles",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favorieten",
@@ -371,12 +360,12 @@
   "relative_time.seconds": "{number}s",
   "relative_time.today": "vandaag",
   "reply_indicator.cancel": "Annuleren",
-  "report.forward": "Doorsturen naar {target}",
-  "report.forward_hint": "Het account bevindt zich op een andere server. Stuur daar eveneens een geanonimiseerde kopie van de rapportage naartoe?",
+  "report.forward": "Naar {target} doorsturen",
+  "report.forward_hint": "Het account bevindt zich op een andere server. Wil je daar eveneens een geanonimiseerde kopie van deze rapportage naar toe sturen?",
   "report.hint": "De rapportage wordt naar de moderator(en) van jouw server gestuurd. Je kunt hieronder een uitleg geven waarom je dit account rapporteert:",
   "report.placeholder": "Extra opmerkingen",
   "report.submit": "Verzenden",
-  "report.target": "Rapporteer {target}",
+  "report.target": "{target} rapporteren",
   "search.placeholder": "Zoeken",
   "search_popout.search_format": "Geavanceerd zoeken",
   "search_popout.tips.full_text": "Gebruik gewone tekst om te zoeken in jouw toots, gebooste toots, favorieten en in toots waarin je bent vermeldt, en tevens naar gebruikersnamen, weergavenamen en hashtags.",
@@ -387,7 +376,7 @@
   "search_results.accounts": "Gebruikers",
   "search_results.hashtags": "Hashtags",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodonserver niet ingeschakeld.",
+  "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodon-server niet ingeschakeld.",
   "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}",
   "status.admin_account": "Moderatie-omgeving van @{name} openen",
   "status.admin_status": "Deze toot in de moderatie-omgeving openen",
@@ -431,7 +420,7 @@
   "status.uncached_media_warning": "Niet beschikbaar",
   "status.unmute_conversation": "Gesprek niet langer negeren",
   "status.unpin": "Van profielpagina losmaken",
-  "suggestions.dismiss": "Voorstel verwerpen",
+  "suggestions.dismiss": "Aanbeveling verwerpen",
   "suggestions.header": "Je bent waarschijnlijk ook geïnteresseerd in…",
   "tabs_bar.federated_timeline": "Globaal",
   "tabs_bar.home": "Start",
@@ -448,8 +437,8 @@
   "timeline_hint.resources.follows": "Volgend",
   "timeline_hint.resources.statuses": "Oudere toots",
   "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten",
-  "trends.trending_now": "Trends",
-  "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
+  "trends.trending_now": "Huidige trends",
+  "ui.beforeunload": "Je concept gaat verloren wanneer je Mastodon verlaat.",
   "units.short.billion": "{count} mrd.",
   "units.short.million": "{count} mln.",
   "units.short.thousand": "{count}k",
@@ -466,7 +455,7 @@
   "upload_modal.analyzing_picture": "Afbeelding analyseren…",
   "upload_modal.apply": "Toepassen",
   "upload_modal.choose_image": "Kies een afbeelding",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.description_placeholder": "Pa's wijze lynx bezag vroom het fikse aquaduct",
   "upload_modal.detect_text": "Tekst in een afbeelding detecteren",
   "upload_modal.edit_media": "Media bewerken",
   "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 38a95533c..234b2175c 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.",
   "account.follows_you": "Fylgjer deg",
   "account.hide_reblogs": "Gøym fremhevingar frå @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Sist aktiv",
   "account.link_verified_on": "Eigarskap for denne lenkja vart sist sjekka {date}",
   "account.locked_info": "Denne kontoen er privat. Eigaren kan sjølv velja kven som kan fylgja han.",
@@ -141,7 +142,7 @@
   "emoji_button.food": "Mat & drikke",
   "emoji_button.label": "Legg til emoji",
   "emoji_button.nature": "Natur",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "Ingen emojojoer!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objekt",
   "emoji_button.people": "Folk",
   "emoji_button.recent": "Ofte brukt",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Det er ingen gøymde domene ennå.",
   "empty_column.favourited_statuses": "Du har ingen favoritt-tut ennå. Når du merkjer ein som favoritt, så dukkar det opp her.",
   "empty_column.favourites": "Ingen har merkt dette tutet som favoritt enno. Når nokon gjer det, så dukkar det opp her.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.",
   "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.",
   "empty_column.home": "Heime-tidslinja di er tom! Besøk {public} eller søk for å starte og å møte andre brukarar.",
-  "empty_column.home.public_timeline": "den offentlege tidslina",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.",
   "empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.",
   "empty_column.mutes": "Du har ikkje målbunde nokon brukarar enno.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla",
   "errors.unexpected_crash.report_issue": "Rapporter problem",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autoriser",
   "follow_request.reject": "Avvis",
   "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte {domain} tilsette at du ville gå gjennom førespurnadar frå desse kontoane manuelt.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}",
   "intervals.full.hours": "{number, plural, one {# time} other {# timar}}",
   "intervals.full.minutes": "{number, plural, one {# minutt} other {# minutt}}",
-  "introduction.federation.action": "Neste",
-  "introduction.federation.federated.headline": "Føderert",
-  "introduction.federation.federated.text": "Offentlege innlegg frå andre tenarar i fødiverset dukkar opp i den fødererte tidslina.",
-  "introduction.federation.home.headline": "Heim",
-  "introduction.federation.home.text": "Innlegg frå folk du fylgjer dukkar opp i heimetidslina di. Du kan fylgja kven som helst frå kva tenar som helst!",
-  "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Offentlege innlegg frå folk på same tenar som deg, dukkar opp i den lokale tidslina.",
-  "introduction.interactions.action": "Fullfør omvisning!",
-  "introduction.interactions.favourite.headline": "Merk som favoritt",
-  "introduction.interactions.favourite.text": "Du kan lagra eit tut til seinare og lata forfattaren vita at du likte det med å merkja det som favoritt.",
-  "introduction.interactions.reblog.headline": "Framhev",
-  "introduction.interactions.reblog.text": "Du kan dela andre folk sine tut med å framheva dei.",
-  "introduction.interactions.reply.headline": "Svar",
-  "introduction.interactions.reply.text": "Du kan svare på andre folk sine tutar, som gjer at dei vert lenka saman i ein samtale.",
-  "introduction.welcome.action": "Lat oss koma i gang!",
-  "introduction.welcome.headline": "Fyrste steg",
-  "introduction.welcome.text": "Velkommen til fediverset! Om nokre minutt vil du kunne kringkaste meldingar og snakke med dine vener rundt omkring på eit bredt spekter av tenarar. Men denne tenaren, {domain}, er spesiell – den er vert for profilen din, så hugs namnet på den.",
   "keyboard_shortcuts.back": "for å gå tilbake",
   "keyboard_shortcuts.blocked": "for å opna lista med blokkerte brukarar",
   "keyboard_shortcuts.boost": "for å framheva",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Vis i kolonne",
   "notifications.column_settings.sound": "Spel av lyd",
   "notifications.column_settings.status": "Nye tuter:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Alle",
   "notifications.filter.boosts": "Framhevingar",
   "notifications.filter.favourites": "Favorittar",
@@ -450,9 +439,9 @@
   "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} folk}} pratar",
   "trends.trending_now": "Populært no",
   "ui.beforeunload": "Kladden din forsvinn om du forlèt Mastodon no.",
-  "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
-  "units.short.thousand": "{count}K",
+  "units.short.billion": "{count}m.ard",
+  "units.short.million": "{count}mill",
+  "units.short.thousand": "{count}T",
   "upload_area.title": "Drag & slepp for å lasta opp",
   "upload_button.label": "Legg til medium",
   "upload_error.limit": "Du har gått over opplastingsgrensa.",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index e64bf4a5a..08205aed2 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Denne brukeren følger ikke noen enda.",
   "account.follows_you": "Følger deg",
   "account.hide_reblogs": "Skjul fremhevinger fra @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Sist aktiv",
   "account.link_verified_on": "Eierskap av denne lenken ble sjekket {date}",
   "account.locked_info": "Denne kontoens personvernstatus er satt til låst. Eieren vurderer manuelt hvem som kan følge dem.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Det er ingen skjulte domener enda.",
   "empty_column.favourited_statuses": "Du har ikke likt noen tuter enda. Når du liker en, vil den dukke opp her.",
   "empty_column.favourites": "Ingen har likt denne tuten enda. Når noen gjør det, vil de dukke opp her.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.",
   "empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.",
   "empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.",
-  "empty_column.home.public_timeline": "en offentlig tidslinje",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Det er ingenting i denne listen ennå. Når medlemmene av denne listen legger ut nye statuser vil de dukke opp her.",
   "empty_column.lists": "Du har ingen lister enda. Når du lager en, vil den dukke opp her.",
   "empty_column.mutes": "Du har ikke dempet noen brukere enda.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen",
   "errors.unexpected_crash.report_issue": "Rapporter en feil",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autorisér",
   "follow_request.reject": "Avvis",
   "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural,one {# dag} other {# dager}}",
   "intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
   "intervals.full.minutes": "{number, plural, one {# minutt} other {# minutter}}",
-  "introduction.federation.action": "Neste",
-  "introduction.federation.federated.headline": "Felles",
-  "introduction.federation.federated.text": "Offentlige innlegg fra andre tjenere i strømiverset vil dukke opp i fellestidslinjen.",
-  "introduction.federation.home.headline": "Hjem",
-  "introduction.federation.home.text": "Innlegg fra folk du følger vil dukke opp på hjemmestrømmen din. Du kan følge hvem som helst på enhver tjener!",
-  "introduction.federation.local.headline": "Lokalt",
-  "introduction.federation.local.text": "Offentlige innlegg fra folk på samme tjener som deg, vil dukke opp i den lokale tidslinjen.",
-  "introduction.interactions.action": "Avslutt veiledningen!",
-  "introduction.interactions.favourite.headline": "Lik",
-  "introduction.interactions.favourite.text": "Du kan lagre en tut til senere, og la forfatteren vite at du satte pris på det, ved å like det.",
-  "introduction.interactions.reblog.headline": "Fremhev",
-  "introduction.interactions.reblog.text": "Du kan dele andre folks tutinger med dine følgere ved å fremheve dem.",
-  "introduction.interactions.reply.headline": "Svar",
-  "introduction.interactions.reply.text": "Du kan svare på tuten til andre folk og til deg selv, som vil binde dem sammen til en samtale.",
-  "introduction.welcome.action": "La oss sette i gang!",
-  "introduction.welcome.headline": "De første skritt",
-  "introduction.welcome.text": "Velkommen til strømiverset! Om noen øyeblikk, vil du kunne sende meldinger og snakke med dine venner over et bredt spekter av tjenere. Men denne tjeneren, {domain}, er spesiell, for den inneholder profilen din, så husk på navnet dens.",
   "keyboard_shortcuts.back": "for å navigere tilbake",
   "keyboard_shortcuts.blocked": "åpne listen over blokkerte brukere",
   "keyboard_shortcuts.boost": "å fremheve",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Vis i kolonne",
   "notifications.column_settings.sound": "Spill lyd",
   "notifications.column_settings.status": "Nye tuter:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Alle",
   "notifications.filter.boosts": "Fremhevinger",
   "notifications.filter.favourites": "Favoritter",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index f56d337d3..d93fff97d 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.",
   "account.follows_you": "Vos sèc",
   "account.hide_reblogs": "Rescondre los partatges de @{name}",
+  "account.joined": "Arribèt en {date}",
   "account.last_status": "Darrièra activitat",
   "account.link_verified_on": "La proprietat d’aqueste ligam foguèt verificada lo {date}",
   "account.locked_info": "L’estatut de privacitat del compte es configurat sus clavat. Lo proprietari causís qual pòt sègre son compte.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "I a pas encara cap de domeni amagat.",
   "empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quand n’auretz un, apareisserà aquí.",
   "empty_column.favourites": "Degun a pas encara mes en favorit aqueste tut. Quand qualqu’un o farà, apareisserà aquí.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Avètz pas encara de demanda d’abonament. Quand n’auretz una apareisserà aquí.",
   "empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.",
   "empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.",
-  "empty_column.home.public_timeline": "lo flux public",
+  "empty_column.home.suggestions": "Veire mai de suggestions",
   "empty_column.list": "I a pas res dins la lista pel moment. Quand de membres d’aquesta lista publiquen de novèls estatuts los veiretz aquí.",
   "empty_column.lists": "Encara avètz pas cap de lista. Quand ne creetz una, apareisserà aquí.",
   "empty_column.mutes": "Encara avètz pas mes en silenci degun.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs",
   "errors.unexpected_crash.report_issue": "Senhalar un problèma",
+  "follow_recommendations.done": "Acabat",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Acceptar",
   "follow_request.reject": "Regetar",
   "follow_requests.unlocked_explanation": "Encara que vòstre compte siasque pas verrolhat, la còla de {domain} pensèt que volriatz benlèu repassar las demandas d’abonament d’aquestes comptes.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
-  "introduction.federation.action": "Seguent",
-  "introduction.federation.federated.headline": "Federat",
-  "introduction.federation.federated.text": "Los tuts publics d’autres servidors del fediverse apareisseràn dins lo flux d’actualitats.",
-  "introduction.federation.home.headline": "Acuèlh",
-  "introduction.federation.home.text": "Los tuts del mond que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de mond ont que siasquen !",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Los tuts publics del mond del meteis servidor que vosautres apareisseràn dins lo flux local.",
-  "introduction.interactions.action": "Acabar la leiçon !",
-  "introduction.interactions.favourite.headline": "Favorit",
-  "introduction.interactions.favourite.text": "Podètz enregistrar un tut per mai tard, e avisar l’autor que l’avètz aimat, en l’ajustant als favorits.",
-  "introduction.interactions.reblog.headline": "Partejar",
-  "introduction.interactions.reblog.text": "Podètz partejar los tuts dels autres amb vòstres seguidors en los partejant.",
-  "introduction.interactions.reply.headline": "Respondre",
-  "introduction.interactions.reply.text": "Podètz respondre als tuts dels autres e a vòstres tuts, seràn amassats en una conversacion.",
-  "introduction.welcome.action": "Anem-i !",
-  "introduction.welcome.headline": "Primièrs passes",
-  "introduction.welcome.text": "La benvenguda al fediverse ! D’aquí un momenton, poiretz enviar de messatges e charrar amd d’amics via mantuns servidors. Mas aqueste servidor, {domain}, es especial perque alberga vòstre perfil, doncas oblidatz pas son nom.",
   "keyboard_shortcuts.back": "anar enrèire",
   "keyboard_shortcuts.blocked": "dobrir la lista d’utilizaires blocats",
   "keyboard_shortcuts.boost": "partejar",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Mostrar dins la colomna",
   "notifications.column_settings.sound": "Emetre un son",
   "notifications.column_settings.status": "Tuts novèls :",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Totas",
   "notifications.filter.boosts": "Partages",
   "notifications.filter.favourites": "Favorits",
@@ -450,7 +439,7 @@
   "trends.counter_by_accounts": "{count, plural, one {{counter} persona ne parla} other {{counter} personas ne parlan}}",
   "trends.trending_now": "Tendéncia del moment",
   "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
-  "units.short.billion": "{count}B",
+  "units.short.billion": "{count}Md",
   "units.short.million": "{count}M",
   "units.short.thousand": "{count}K",
   "upload_area.title": "Lisatz e depausatz per mandar",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
new file mode 100644
index 000000000..1b311b04d
--- /dev/null
+++ b/app/javascript/mastodon/locales/pa.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "Note",
+  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.badges.bot": "Bot",
+  "account.badges.group": "Group",
+  "account.block": "Block @{name}",
+  "account.block_domain": "Block domain {domain}",
+  "account.blocked": "Blocked",
+  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Direct message @{name}",
+  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.domain_blocked": "Domain blocked",
+  "account.edit_profile": "Edit profile",
+  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.endorse": "Feature on profile",
+  "account.follow": "Follow",
+  "account.followers": "Followers",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
+  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "Last active",
+  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.media": "Media",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "Mute @{name}",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.never_active": "Never",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "Report @{name}",
+  "account.requested": "Awaiting approval",
+  "account.share": "Share @{name}'s profile",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.unblock": "Unblock @{name}",
+  "account.unblock_domain": "Unblock domain {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account_note.placeholder": "Click to add a note",
+  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Rate limited",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "Oops!",
+  "announcement.announcement": "Announcement",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "Try again",
+  "bundle_column_error.title": "Network error",
+  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "Try again",
+  "column.blocks": "Blocked users",
+  "column.bookmarks": "Bookmarks",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.directory": "Browse profiles",
+  "column.domain_blocks": "Blocked domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Home",
+  "column.lists": "Lists",
+  "column.mutes": "Muted users",
+  "column.notifications": "Notifications",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Back",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.local_only": "Local only",
+  "community.column_settings.media_only": "Media only",
+  "community.column_settings.remote_only": "Remote only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.poll.add_option": "Add a choice",
+  "compose_form.poll.duration": "Poll duration",
+  "compose_form.poll.option_placeholder": "Choice {number}",
+  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
+  "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.confirm": "Block",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.logout.confirm": "Log out",
+  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "Reply",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "conversation.delete": "Delete conversation",
+  "conversation.mark_as_read": "Mark as read",
+  "conversation.open": "View conversation",
+  "conversation.with": "With {names}",
+  "directory.federated": "From known fediverse",
+  "directory.local": "From {domain} only",
+  "directory.new_arrivals": "New arrivals",
+  "directory.recently_active": "Recently active",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no blocked domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it 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.suggestions": "See some suggestions",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "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.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
+  "generic.saved": "Saved",
+  "getting_started.developers": "Developers",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "hashtag.column_header.tag_mode.all": "and {additional}",
+  "hashtag.column_header.tag_mode.any": "or {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.select.no_options_message": "No suggestions found",
+  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
+  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.any": "Any of these",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "home.hide_announcements": "Hide announcements",
+  "home.show_announcements": "Show announcements",
+  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
+  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.open_media": "to open media",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.compress": "Compress image view box",
+  "lightbox.expand": "Expand image view box",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.edit.submit": "Change title",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.replies_policy.followed": "Any followed user",
+  "lists.replies_policy.list": "Members of the list",
+  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.title": "Show replies to:",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.duration": "Duration",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "mute_modal.indefinite": "Indefinite",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.follow_request": "{name} has requested to follow you",
+  "notification.mention": "{name} mentioned you",
+  "notification.own_poll": "Your poll has ended",
+  "notification.poll": "A poll you have voted in has ended",
+  "notification.reblog": "{name} boosted your status",
+  "notification.status": "{name} just posted",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "All",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.polls": "Poll results",
+  "notifications.filter.statuses": "Updates from people you follow",
+  "notifications.grant_permission": "Grant permission.",
+  "notifications.group": "{count} notifications",
+  "notifications.mark_as_read": "Mark every notification as read",
+  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
+  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
+  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.title": "Never miss a thing",
+  "picture_in_picture.restore": "Put it back",
+  "poll.closed": "Closed",
+  "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.vote": "Vote",
+  "poll.voted": "You voted for this answer",
+  "poll_button.add_poll": "Add a poll",
+  "poll_button.remove_poll": "Remove poll",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Visible for mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Visible for followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Visible for all, shown in public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Visible for all, but not in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "relative_time.today": "today",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.bookmark": "Bookmark",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost with original visibility",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.remove_bookmark": "Remove bookmark",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.uncached_media_warning": "Not available",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
+  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.moments": "Moments remaining",
+  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.resources.followers": "Followers",
+  "timeline_hint.resources.follows": "Follows",
+  "timeline_hint.resources.statuses": "Older toots",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.trending_now": "Trending now",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add images, a video or an audio file",
+  "upload_error.limit": "File upload limit exceeded.",
+  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_form.audio_description": "Describe for people with hearing loss",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.edit": "Edit",
+  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.undo": "Delete",
+  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "upload_modal.choose_image": "Choose image",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.edit_media": "Edit media",
+  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_progress.label": "Uploading…",
+  "video.close": "Close video",
+  "video.download": "Download file",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index f03a0086e..acad358ac 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.",
   "account.follows_you": "Śledzi Cię",
   "account.hide_reblogs": "Ukryj podbicia od @{name}",
+  "account.joined": "Dołączył(a) {date}",
   "account.last_status": "Ostatnia aktywność",
   "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}",
   "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.",
@@ -116,7 +117,7 @@
   "confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?",
   "confirmations.delete_list.confirm": "Usuń",
   "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?",
-  "confirmations.domain_block.confirm": "Ukryj wszysyko z domeny",
+  "confirmations.domain_block.confirm": "Ukryj wszystko z domeny",
   "confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.",
   "confirmations.logout.confirm": "Wyloguj",
   "confirmations.logout.message": "Czy na pewno chcesz się wylogować?",
@@ -163,10 +164,11 @@
   "empty_column.domain_blocks": "Brak ukrytych domen.",
   "empty_column.favourited_statuses": "Nie dodałeś(-aś) żadnego wpisu do ulubionych. Kiedy to zrobisz, pojawi się on tutaj.",
   "empty_column.favourites": "Nikt nie dodał tego wpisu do ulubionych. Gdy ktoś to zrobi, pojawi się tutaj.",
+  "empty_column.follow_recommendations": "Wygląda na to, że nie można wygenerować dla Ciebie żadnych sugestii. Możesz spróbować wyszukać osoby, które znasz, lub przeglądać popularne hashtagi.",
   "empty_column.follow_requests": "Nie masz żadnych próśb o możliwość śledzenia. Kiedy ktoś utworzy ją, pojawi się tutaj.",
   "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy(-a)!",
   "empty_column.home": "Nie śledzisz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
-  "empty_column.home.public_timeline": "globalna oś czasu",
+  "empty_column.home.suggestions": "Zobacz kilka sugestii",
   "empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.",
   "empty_column.lists": "Nie masz żadnych list. Kiedy utworzysz jedną, pojawi się tutaj.",
   "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.",
@@ -178,6 +180,9 @@
   "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.",
   "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka",
   "errors.unexpected_crash.report_issue": "Zgłoś problem",
+  "follow_recommendations.done": "Gotowe",
+  "follow_recommendations.heading": "Śledź ludzi, których wpisy chcesz czytać. Oto kilka propozycji.",
+  "follow_recommendations.lead": "Wpisy osób, które śledzisz będą pojawiać się w porządku chronologicznym na stronie głównej. Nie bój się popełniać błędów, możesz bez problemu przestać śledzić każdego w każdej chwili!",
   "follow_request.authorize": "Autoryzuj",
   "follow_request.reject": "Odrzuć",
   "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość śledzenia.",
@@ -207,23 +212,6 @@
   "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}",
   "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}",
-  "introduction.federation.action": "Dalej",
-  "introduction.federation.federated.headline": "Oś czasu federacji",
-  "introduction.federation.federated.text": "Publiczne wpisy osób z tego całego Fediwersum pojawiają się na lokalnej osi czasu.",
-  "introduction.federation.home.headline": "Strona główna",
-  "introduction.federation.home.text": "Wpisy osób które śledzisz pojawią się na stronie głównej. Możesz zacząć śledzić użytkowników dowolnego serwera!",
-  "introduction.federation.local.headline": "Lokalna oś czasu",
-  "introduction.federation.local.text": "Publiczne wpisy osób z tego samego serwera pojawiają się na lokalnej osi czasu.",
-  "introduction.interactions.action": "Zakończ poradnik!",
-  "introduction.interactions.favourite.headline": "Ulubione",
-  "introduction.interactions.favourite.text": "Możesz zapisać wpis na później i pokazać autorowi, że Ci się spodobał, jeżeli dodasz go .",
-  "introduction.interactions.reblog.headline": "Podbicia",
-  "introduction.interactions.reblog.text": "Możesz podzielić się wpisem innego użytkownikami z osobami które Cię śledzą podbijając go.",
-  "introduction.interactions.reply.headline": "Odpowiedzi",
-  "introduction.interactions.reply.text": "Możesz odpowiadać na wpisy swoje i innych, tworząc konwersację.",
-  "introduction.welcome.action": "Rozpocznij!",
-  "introduction.welcome.headline": "Pierwsze kroki",
-  "introduction.welcome.text": "Witmay w Fediwersum! Za chwilę dowiesz się, jak przekazywać wiadomości i rozmawiać ze znajomymi pomiędzy różnymi serwerami. Ale ten serwer – {domain} jest wyjątkowy, ponieważ zawiera Twój profil – zapamiętaj więc jego nazwę.",
   "keyboard_shortcuts.back": "aby cofnąć się",
   "keyboard_shortcuts.blocked": "aby przejść do listy zablokowanych użytkowników",
   "keyboard_shortcuts.boost": "aby podbić wpis",
@@ -332,6 +320,7 @@
   "notifications.column_settings.show": "Pokaż w kolumnie",
   "notifications.column_settings.sound": "Odtwarzaj dźwięk",
   "notifications.column_settings.status": "Nowe wpisy:",
+  "notifications.column_settings.unread_markers.category": "Znaczniki nieprzeczytanych powiadomień",
   "notifications.filter.all": "Wszystkie",
   "notifications.filter.boosts": "Podbicia",
   "notifications.filter.favourites": "Ulubione",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 2e0adfa9c..fed22080c 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Nada aqui.",
   "account.follows_you": "Segue você",
   "account.hide_reblogs": "Ocultar boosts de @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Ativo pela última vez",
   "account.link_verified_on": "Posse deste link foi verificada em {date}",
   "account.locked_info": "Esta conta está trancada. Sua solicitação para seguir requer aprovação manual do usuário.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Não há domínios bloqueados ainda.",
   "empty_column.favourited_statuses": "Nada aqui. Quando você favoritar um toot, ele aparecerá aqui.",
   "empty_column.favourites": "Nada aqui. Quando alguém favoritar, o autor aparecerá aqui.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Nada aqui. Quando você tiver seguidores pendentes, eles aparecerão aqui.",
   "empty_column.hashtag": "Nada aqui.",
   "empty_column.home": "Sua linha do tempo está vazia! Visite {public} ou use a pesquisa para começar e conhecer outros usuários.",
-  "empty_column.home.public_timeline": "a linha do tempo pública",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Não há nada nesta lista ainda. Quando membros desta lista postarem novos statuses, eles vão aparecer aqui.",
   "empty_column.lists": "Nada aqui. Quando você criar listas, elas aparecerão aqui.",
   "empty_column.mutes": "Nada aqui.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência",
   "errors.unexpected_crash.report_issue": "Denunciar problema",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Aprovar",
   "follow_request.reject": "Vetar",
   "follow_requests.unlocked_explanation": "Embora sua conta não esteja trancada, o staff de {domain} achou que você podia querer revisar pedidos para te seguir destas contas manualmente.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
-  "introduction.federation.action": "Próximo",
-  "introduction.federation.federated.headline": "Federada",
-  "introduction.federation.federated.text": "Posts públicos de outros servidores do fediverso vão aparecer na linha do tempo federada.",
-  "introduction.federation.home.headline": "Início",
-  "introduction.federation.home.text": "Posts de pessoas que você segue vão aparecer no seu feed de início. Você pode seguir qualquer pessoa em qualquer servidor!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Posts públicos de pessoas no mesmo servidor que você vão aparecer na linha do tempo local.",
-  "introduction.interactions.action": "Terminar tutorial!",
-  "introduction.interactions.favourite.headline": "Favoritos",
-  "introduction.interactions.favourite.text": "Ao favoritar, você sinaliza ao autor que você gostou do toot.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Ao dar boost, você compartilha toots de outras pessoas para seus seguidores.",
-  "introduction.interactions.reply.headline": "Responder",
-  "introduction.interactions.reply.text": "Você pode responder aos toots de outras pessoas e formar uma conversa ou responder aos seus e formar uma sequência.",
-  "introduction.welcome.action": "Vamos lá!",
-  "introduction.welcome.headline": "Primeiros passos",
-  "introduction.welcome.text": "Boas vindas ao fediverso! Em alguns momentos, você vai poder transmitir mensagens e falar com pessoas amigas através de uma variedade de servidores. Mas este servidor, {domain}, é especial—é onde seu perfil está hospedado, então lembre do nome dele.",
   "keyboard_shortcuts.back": "voltar",
   "keyboard_shortcuts.blocked": "abrir lista de usuários bloqueados",
   "keyboard_shortcuts.boost": "dar boost",
@@ -323,12 +311,13 @@
   "notifications.column_settings.mention": "Menções:",
   "notifications.column_settings.poll": "Enquetes:",
   "notifications.column_settings.push": "Enviar notificações",
-  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.reblog": "Melhoramentos:",
   "notifications.column_settings.show": "Mostrar nas colunas",
   "notifications.column_settings.sound": "Tocar som",
   "notifications.column_settings.status": "Novos toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Tudo",
-  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.boosts": "Melhoramentos",
   "notifications.filter.favourites": "Favoritos",
   "notifications.filter.follows": "Seguindo",
   "notifications.filter.mentions": "Menções",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index dd3b4eba2..7b93449e0 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -1,14 +1,14 @@
 {
   "account.account_note_header": "A tua nota para @{name}",
   "account.add_or_remove_from_list": "Adicionar ou remover das listas",
-  "account.badges.bot": "Bot",
+  "account.badges.bot": "Robô",
   "account.badges.group": "Grupo",
   "account.block": "Bloquear @{name}",
   "account.block_domain": "Esconder tudo do domínio {domain}",
   "account.blocked": "Bloqueado(a)",
   "account.browse_more_on_origin_server": "Encontrar mais no perfil original",
   "account.cancel_follow_request": "Cancelar pedido para seguir",
-  "account.direct": "Enviar mensagem directa para @{name}",
+  "account.direct": "Enviar mensagem direta para @{name}",
   "account.disable_notifications": "Parar de me notificar das publicações de @{name}",
   "account.domain_blocked": "Domínio bloqueado",
   "account.edit_profile": "Editar perfil",
@@ -22,9 +22,10 @@
   "account.follows.empty": "Este utilizador ainda não segue ninguém.",
   "account.follows_you": "Segue-te",
   "account.hide_reblogs": "Esconder partilhas de @{name}",
+  "account.joined": "Ingressou em {date}",
   "account.last_status": "Última atividade",
   "account.link_verified_on": "A posse deste link foi verificada em {date}",
-  "account.locked_info": "O estatuto de privacidade desta conta é fechado. O dono revê manualmente quem a pode seguir.",
+  "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem a pode seguir.",
   "account.media": "Média",
   "account.mention": "Mencionar @{name}",
   "account.moved_to": "{name} mudou a sua conta para:",
@@ -87,9 +88,9 @@
   "compose_form.direct_message_warning": "Esta publicação será enviada apenas para os utilizadores mencionados.",
   "compose_form.direct_message_warning_learn_more": "Conhecer mais",
   "compose_form.hashtag_warning": "Este toot não será listado em nenhuma hashtag por ser não listado. Apenas toots públics podem ser pesquisados por hashtag.",
-  "compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te e ver as publicações direcionadas apenas a seguidores.",
+  "compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
   "compose_form.lock_disclaimer.lock": "bloqueado",
-  "compose_form.placeholder": "Em que estás a pensar?",
+  "compose_form.placeholder": "Em que está a pensar?",
   "compose_form.poll.add_option": "Adicionar uma opção",
   "compose_form.poll.duration": "Duração da votação",
   "compose_form.poll.option_placeholder": "Opção {number}",
@@ -109,9 +110,9 @@
   "confirmations.block.confirm": "Bloquear",
   "confirmations.block.message": "De certeza que queres bloquear {name}?",
   "confirmations.delete.confirm": "Eliminar",
-  "confirmations.delete.message": "De certeza que queres eliminar esta publicação?",
+  "confirmations.delete.message": "De certeza que quer eliminar esta publicação?",
   "confirmations.delete_list.confirm": "Eliminar",
-  "confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?",
+  "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?",
   "confirmations.domain_block.confirm": "Esconder tudo deste domínio",
   "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.",
   "confirmations.logout.confirm": "Terminar sessão",
@@ -119,8 +120,8 @@
   "confirmations.mute.confirm": "Silenciar",
   "confirmations.mute.explanation": "Isto irá esconder publicações deles ou publicações que os mencionem, mas irá permitir que vejam as suas publicações e sejam seus seguidores.",
   "confirmations.mute.message": "De certeza que queres silenciar {name}?",
-  "confirmations.redraft.confirm": "Apagar & redigir",
-  "confirmations.redraft.message": "Tens a certeza que queres apagar e redigir esta publicação?  Os favoritos e as partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
+  "confirmations.redraft.confirm": "Eliminar & reescrever",
+  "confirmations.redraft.message": "Tem a certeza que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder agora irá reescrever a mensagem que está a compor actualmente. Tem a certeza que quer continuar?",
   "confirmations.unfollow.confirm": "Deixar de seguir",
@@ -155,16 +156,17 @@
   "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
   "empty_column.bookmarked_statuses": "Ainda não adicionou nenhum toot aos Itens salvos. Quando adicionar, eles serão exibidos aqui.",
   "empty_column.community": "A timeline local está vazia. Escreve algo publicamente para começar!",
-  "empty_column.direct": "Ainda não tens qualquer mensagem directa. Quando enviares ou receberes alguma, ela irá aparecer aqui.",
+  "empty_column.direct": "Ainda não tem qualquer mensagem direta. Quando enviar ou receber alguma, ela irá aparecer aqui.",
   "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.",
   "empty_column.favourited_statuses": "Ainda não tens quaisquer toots favoritos. Quando tiveres algum, ele irá aparecer aqui.",
   "empty_column.favourites": "Ainda ninguém marcou este toot como favorito. Quando alguém o fizer, ele irá aparecer aqui.",
+  "empty_column.follow_recommendations": "Parece que não foi possível gerar nenhuma sugestão para si. Pode tentar utilizar a pesquisa para procurar pessoas que conheça ou explorar as hashtags em destaque.",
   "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.",
   "empty_column.hashtag": "Não foram encontradas publicações com essa hashtag.",
   "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
-  "empty_column.home.public_timeline": "Cronologia pública",
+  "empty_column.home.suggestions": "Ver algumas sugestões",
   "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
-  "empty_column.lists": "Ainda não tens qualquer lista. Quando criares uma, ela irá aparecer aqui.",
+  "empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.",
   "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.",
   "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
   "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
@@ -174,16 +176,19 @@
   "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
   "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard",
   "errors.unexpected_crash.report_issue": "Reportar problema",
+  "follow_recommendations.done": "Concluído",
+  "follow_recommendations.heading": "Siga pessoas das quais gostaria de ver publicações! Aqui estão algumas sugestões.",
+  "follow_recommendations.lead": "As publicações das pessoas que segue serão exibidos em ordem cronológica na sua página inicial. Não tenha medo de cometer erros, você pode deixar de seguir as pessoas tão facilmente a qualquer momento!",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rejeitar",
-  "follow_requests.unlocked_explanation": "Apesar de a sua não estar bloqueada, a administração de {domain} pensa que poderá querer rever os pedidos dessas contas manualmente.",
+  "follow_requests.unlocked_explanation": "Apesar de a sua não ser privada, a administração de {domain} pensa que poderá querer rever manualmente os pedidos de seguimento dessas contas.",
   "generic.saved": "Salvo",
   "getting_started.developers": "Responsáveis pelo desenvolvimento",
-  "getting_started.directory": "Directório de perfil",
+  "getting_started.directory": "Diretório de perfis",
   "getting_started.documentation": "Documentação",
   "getting_started.heading": "Primeiros passos",
   "getting_started.invite": "Convidar pessoas",
-  "getting_started.open_source_notice": "Mastodon é software de código aberto (open source). Podes contribuir ou reportar problemas no GitHub do projecto: {github}.",
+  "getting_started.open_source_notice": "Mastodon é um software de código aberto. Podes contribuir ou reportar problemas no GitHub do projeto: {github}.",
   "getting_started.security": "Segurança",
   "getting_started.terms": "Termos de serviço",
   "hashtag.column_header.tag_mode.all": "e {additional}",
@@ -203,30 +208,13 @@
   "intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
-  "introduction.federation.action": "Seguinte",
-  "introduction.federation.federated.headline": "Federada",
-  "introduction.federation.federated.text": "Publicações públicas de outras instâncias do fediverso aparecerão na cronologia federada.",
-  "introduction.federation.home.headline": "Início",
-  "introduction.federation.home.text": "As publicações das pessoas que segues aparecerão na tua coluna de início. Podes seguir qualquer pessoa em qualquer instância!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que tu aparecerão na coluna local.",
-  "introduction.interactions.action": "Terminar o tutorial!",
-  "introduction.interactions.favourite.headline": "Favorito",
-  "introduction.interactions.favourite.text": "Podes guardar um toot para depois e deixar o autor saber que gostaste dele, marcando-o como favorito.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Podes partilhar os toots de outras pessoas com os teus seguidores partilhando-os.",
-  "introduction.interactions.reply.headline": "Responder",
-  "introduction.interactions.reply.text": "Tu podes responder a toots de outras pessoas e aos teus, o que os irá juntar numa conversa.",
-  "introduction.welcome.action": "Vamos!",
-  "introduction.welcome.headline": "Primeiros passos",
-  "introduction.welcome.text": "Bem-vindo ao fediverso! Em pouco tempo poderás enviar mensagens e falar com os seus amigos numa grande variedade de instâncias. Mas esta instância, {domain}, é especial—ela alberga o seu perfil. Por isso, lembre-se do seu nome.",
   "keyboard_shortcuts.back": "para voltar",
   "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados",
   "keyboard_shortcuts.boost": "para partilhar",
   "keyboard_shortcuts.column": "para focar uma publicação numa das colunas",
   "keyboard_shortcuts.compose": "para focar na área de publicação",
   "keyboard_shortcuts.description": "Descrição",
-  "keyboard_shortcuts.direct": "para abrir a coluna das mensagens directas",
+  "keyboard_shortcuts.direct": "para abrir a coluna das mensagens diretas",
   "keyboard_shortcuts.down": "para mover para baixo na lista",
   "keyboard_shortcuts.enter": "para expandir uma publicação",
   "keyboard_shortcuts.favourite": "para adicionar aos favoritos",
@@ -261,7 +249,7 @@
   "lightbox.previous": "Anterior",
   "lists.account.add": "Adicionar à lista",
   "lists.account.remove": "Remover da lista",
-  "lists.delete": "Remover lista",
+  "lists.delete": "Eliminar lista",
   "lists.edit": "Editar lista",
   "lists.edit.submit": "Mudar o título",
   "lists.new.create": "Adicionar lista",
@@ -285,7 +273,7 @@
   "navigation_bar.bookmarks": "Itens salvos",
   "navigation_bar.community_timeline": "Cronologia local",
   "navigation_bar.compose": "Escrever novo toot",
-  "navigation_bar.direct": "Mensagens directas",
+  "navigation_bar.direct": "Mensagens diretas",
   "navigation_bar.discover": "Descobrir",
   "navigation_bar.domain_blocks": "Domínios escondidos",
   "navigation_bar.edit_profile": "Editar perfil",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Mostrar na coluna",
   "notifications.column_settings.sound": "Reproduzir som",
   "notifications.column_settings.status": "Novos toots:",
+  "notifications.column_settings.unread_markers.category": "Marcadores de notificação não lidas",
   "notifications.filter.all": "Todas",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favoritos",
@@ -363,7 +352,7 @@
   "privacy.unlisted.short": "Não listar",
   "refresh": "Actualizar",
   "regeneration_indicator.label": "A carregar…",
-  "regeneration_indicator.sublabel": "A tua home está a ser preparada!",
+  "regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
   "relative_time.just_now": "agora",
@@ -379,7 +368,7 @@
   "report.target": "Denunciar",
   "search.placeholder": "Pesquisar",
   "search_popout.search_format": "Formato avançado de pesquisa",
-  "search_popout.tips.full_text": "Texto simples devolve publicações que tu escreveste, marcaste como favorita, partilhaste ou em que foste mencionado, tal como nomes de utilizador correspondentes, alcunhas e hashtags.",
+  "search_popout.tips.full_text": "Texto simples devolve publicações que escreveu, marcou como favorita, partilhou ou em que foi mencionado, tal como nomes de utilizador, alcunhas e hashtags.",
   "search_popout.tips.hashtag": "hashtag",
   "search_popout.tips.status": "publicação",
   "search_popout.tips.text": "O texto simples retorna a correspondência de nomes, utilizadores e hashtags",
@@ -398,7 +387,7 @@
   "status.copy": "Copiar o link para a publicação",
   "status.delete": "Eliminar",
   "status.detailed_status": "Vista de conversação detalhada",
-  "status.direct": "Mensagem directa @{name}",
+  "status.direct": "Mensagem direta @{name}",
   "status.embed": "Incorporar",
   "status.favourite": "Adicionar aos favoritos",
   "status.filtered": "Filtrada",
@@ -461,7 +450,7 @@
   "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais",
   "upload_form.edit": "Editar",
   "upload_form.thumbnail": "Alterar miniatura",
-  "upload_form.undo": "Apagar",
+  "upload_form.undo": "Eliminar",
   "upload_form.video_description": "Descreva para pessoas com diminuição da acuidade auditiva ou visual",
   "upload_modal.analyzing_picture": "A analizar imagem…",
   "upload_modal.apply": "Aplicar",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index a80bfa822..c1a6b9883 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Acest utilizator nu urmărește pe nimeni încă.",
   "account.follows_you": "Te urmărește",
   "account.hide_reblogs": "Ascunde impulsurile de la @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Ultima activitate",
   "account.link_verified_on": "Deținerea acestui link a fost verificată la {date}",
   "account.locked_info": "Acest profil este privat. Această persoană gestionează manual cine o urmărește.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Nu sunt domenii blocate încă.",
   "empty_column.favourited_statuses": "Nu ai nici o postare favorită încă. Când vei favoriza una, va fi afișată aici.",
   "empty_column.favourites": "Nimeni nu are această postare adăugată la favorite. Când cineva o va face va fi afișat aici.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Nu ai încă nici o cerere de urmărire. Când vei primi una, va fi afișată aici.",
   "empty_column.hashtag": "Acest hashtag nu a fost folosit încă.",
   "empty_column.home": "Fluxul tău este gol. Vizitează {public} sau fă o căutare pentru a începe să cunoști oameni noi.",
-  "empty_column.home.public_timeline": "fluxul public",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Nu este nimic încă în această listă. Când membrii acestei liste vor începe să posteze, va apărea aici.",
   "empty_column.lists": "Nu ai încă nici o listă. Când vei crea una, va apărea aici.",
   "empty_column.mutes": "Nu ai ignorat nici un utilizator încă.",
@@ -174,10 +176,13 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copiați stiva în clipboard",
   "errors.unexpected_crash.report_issue": "Raportați o problemă",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Autorizează",
   "follow_request.reject": "Respinge",
   "follow_requests.unlocked_explanation": "Chiar dacă contul dvs nu este blocat, personalul {domain} a crezut că ați putea dori să revizuiți cererile de la aceste conturi în mod manual.",
-  "generic.saved": "Saved",
+  "generic.saved": "Salvat",
   "getting_started.developers": "Dezvoltatori",
   "getting_started.directory": "Explorează",
   "getting_started.documentation": "Documentație",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural,one {# zi} other {# zile}}",
   "intervals.full.hours": "{number, plural, one {# oră} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minute}}",
-  "introduction.federation.action": "Următorul",
-  "introduction.federation.federated.headline": "Federalizat",
-  "introduction.federation.federated.text": "Postările publice de pe alte servere din rețea vor apărea in fluxul global.",
-  "introduction.federation.home.headline": "Acasă",
-  "introduction.federation.home.text": "Postările de la persoanele pe care le urmărești vor apărea în fluxul tău \"Acasă\". Poți urmări pe orice de pe orice server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Postările publice de la persoanele de pe acest server vor apărea în fluxul local.",
-  "introduction.interactions.action": "Încheie ghidul!",
-  "introduction.interactions.favourite.headline": "Favorite",
-  "introduction.interactions.favourite.text": "Poți salva o postare pentru a fi citită mai târziu și poți anunța autorul să știe că iți place adăugând-o la favorite.",
-  "introduction.interactions.reblog.headline": "Impuls",
-  "introduction.interactions.reblog.text": "Poți împărtăși postările altora cu urmăritorii tăi impulsionându-le.",
-  "introduction.interactions.reply.headline": "Răspunde",
-  "introduction.interactions.reply.text": "Poți răspunde la postările tale și alte altora, care se vor lărgii în discuții.",
-  "introduction.welcome.action": "Să începem!",
-  "introduction.welcome.headline": "Primii pași",
-  "introduction.welcome.text": "Bun Venit în federație! În câteva momente, vei putea să transmiți mesaje și să participi la discuții cu oameni noi într-o varietate foarte largă de servere din întreaga lume. Dar în special acest server, {domain}, găzduiește profilul tău, deci reține numele acestuia.",
   "keyboard_shortcuts.back": "navighează înapoi",
   "keyboard_shortcuts.blocked": "să deschidă lista utilizatorilor blocați",
   "keyboard_shortcuts.boost": "să impulsioneze",
@@ -268,7 +256,7 @@
   "lists.new.title_placeholder": "Titlu pentru noua listă",
   "lists.replies_policy.followed": "Any followed user",
   "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.none": "Nimeni",
   "lists.replies_policy.title": "Show replies to:",
   "lists.search": "Caută printre persoanele pe care le urmărești",
   "lists.subheading": "Listele tale",
@@ -277,7 +265,7 @@
   "media_gallery.toggle_visible": "Ascunde media",
   "missing_indicator.label": "Nu a fost găsit",
   "missing_indicator.sublabel": "Această resursă nu a putut fi găsită",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Durata",
   "mute_modal.hide_notifications": "Ascunzi notificările de la acest utilizator?",
   "mute_modal.indefinite": "Indefinite",
   "navigation_bar.apps": "Aplicații mobile",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Arată în coloană",
   "notifications.column_settings.sound": "Redă sunet",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Toate",
   "notifications.filter.boosts": "Impulsuri",
   "notifications.filter.favourites": "Favorite",
@@ -342,8 +331,8 @@
   "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
   "notifications_permission_banner.enable": "Enable desktop notifications",
   "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications_permission_banner.title": "Nu rata niciodată nimic",
+  "picture_in_picture.restore": "Pune-l înapoi",
   "poll.closed": "Închis",
   "poll.refresh": "Reîmprospătează",
   "poll.total_people": "{count, plural, one {# persoană} other {# persoane}}",
@@ -368,7 +357,7 @@
   "relative_time.hours": "{number}o",
   "relative_time.just_now": "acum",
   "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
+  "relative_time.seconds": "{number}",
   "relative_time.today": "azi",
   "reply_indicator.cancel": "Anulează",
   "report.forward": "Redirecționează către {target}",
@@ -450,8 +439,8 @@
   "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
   "trends.trending_now": "În tendință acum",
   "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.",
-  "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
+  "units.short.billion": "{count}Mld",
+  "units.short.million": "{count}Mln",
   "units.short.thousand": "{count}K",
   "upload_area.title": "Trage și eliberează pentru a încărca",
   "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)",
@@ -460,12 +449,12 @@
   "upload_form.audio_description": "Descrie pentru persoanele cu deficiență a auzului",
   "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere",
   "upload_form.edit": "Editează",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.thumbnail": "Schimbă miniatura",
   "upload_form.undo": "Șterge",
   "upload_form.video_description": "Descrie pentru persoanele cu pierdere a auzului sau tulburări de vedere",
   "upload_modal.analyzing_picture": "Se analizează imaginea…",
   "upload_modal.apply": "Aplică",
-  "upload_modal.choose_image": "Choose image",
+  "upload_modal.choose_image": "Alege imaginea",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Detectare text din imagine",
   "upload_modal.edit_media": "Editați media",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 3ce050759..c2737f457 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Этот пользователь пока ни на кого не подписался.",
   "account.follows_you": "Подписан(а) на вас",
   "account.hide_reblogs": "Скрыть продвижения от @{name}",
+  "account.joined": "Присоединился {date}",
   "account.last_status": "Последняя активность",
   "account.link_verified_on": "Владение этой ссылкой было проверено {date}",
   "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.",
@@ -98,9 +99,9 @@
   "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа",
   "compose_form.publish": "Запостить",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}",
-  "compose_form.sensitive.marked": "Медиафайл отмечен как деликатный",
-  "compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный",
+  "compose_form.sensitive.hide": "Отметить медиа{count, plural, one {файл} other {файлы}} как «деликатного характера»",
+  "compose_form.sensitive.marked": "Медиа{count, plural, one {файл отмечен} other {файлы отмечены}} как «деликатного характера»",
+  "compose_form.sensitive.unmarked": "Медиа{count, plural, one {файл} other {файлы}} не отмечены как «деликатного характера»",
   "compose_form.spoiler.marked": "Текст скрыт за предупреждением",
   "compose_form.spoiler.unmarked": "Текст не скрыт",
   "compose_form.spoiler_placeholder": "Текст предупреждения",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Скрытых доменов пока нет.",
   "empty_column.favourited_statuses": "Вы не добавили ни один пост в «Избранное». Как только вы это сделаете, он появится здесь.",
   "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.",
+  "empty_column.follow_recommendations": "Похоже, у нас нет предложений для вас. Вы можете попробовать поискать людей, которых уже знаете, или изучить актуальные хэштеги.",
   "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
   "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.",
   "empty_column.home": "Пока вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.",
-  "empty_column.home.public_timeline": "публичные ленты",
+  "empty_column.home.suggestions": "Посмотреть некоторые предложения",
   "empty_column.list": "В этом списке пока ничего нет.",
   "empty_column.lists": "У вас ещё нет списков. Созданные вами списки будут показаны здесь.",
   "empty_column.mutes": "Вы ещё никого не добавляли в список игнорируемых.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.",
   "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию",
   "errors.unexpected_crash.report_issue": "Сообщить о проблеме",
+  "follow_recommendations.done": "Готово",
+  "follow_recommendations.heading": "Подпишитесь на людей, от которые вы хотели бы видеть посты! Вот несколько предложений.",
+  "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибаться, вы можете отписаться от людей так же легко в любое время!",
   "follow_request.authorize": "Авторизовать",
   "follow_request.reject": "Отказать",
   "follow_requests.unlocked_explanation": "Этот запрос отправлен с учётной записи, для которой администрация {domain} включила ручную проверку подписок.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
   "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
   "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
-  "introduction.federation.action": "Далее",
-  "introduction.federation.federated.headline": "Глобальная лента",
-  "introduction.federation.federated.text": "Публичные посты с других серверов федеративной сети расположатся в глобальной ленте.",
-  "introduction.federation.home.headline": "Домашняя лента",
-  "introduction.federation.home.text": "Посты людей, на которых вы подписаны, будут отображаться в домашней ленте. Подписываться можно на кого угодно, независимо от узла.",
-  "introduction.federation.local.headline": "Локальная лента",
-  "introduction.federation.local.text": "Публичные посты от людей с того же сервера, что и вы, будут отображены в локальной ленте.",
-  "introduction.interactions.action": "Завершить обучение",
-  "introduction.interactions.favourite.headline": "Помечайте избранное",
-  "introduction.interactions.favourite.text": "Дайте автору знать, что пост вам понравился и вернитесь к нему позже, добавив его в избранное.",
-  "introduction.interactions.reblog.headline": "Продвигайте",
-  "introduction.interactions.reblog.text": "Делитесь постами других людей со своими подписчиками, продвигая их в своём профиле.",
-  "introduction.interactions.reply.headline": "Отвечайте",
-  "introduction.interactions.reply.text": "Отвечайте на свои или чужие посты, образуя цепочки сообщений — обсуждения.",
-  "introduction.welcome.action": "Поехали!",
-  "introduction.welcome.headline": "Первые шаги",
-  "introduction.welcome.text": "Добро пожаловать в Федиверс! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями с любых узлов. Но этот узел — {domain} — особенный: на нём располагается ваш профиль, так что не забудьте его название.",
   "keyboard_shortcuts.back": "перейти назад",
   "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных",
   "keyboard_shortcuts.boost": "продвинуть пост",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Отображать в списке",
   "notifications.column_settings.sound": "Проигрывать звук",
   "notifications.column_settings.status": "Новые посты:",
+  "notifications.column_settings.unread_markers.category": "Маркеры непрочитанных уведомлений",
   "notifications.filter.all": "Все",
   "notifications.filter.boosts": "Продвижения",
   "notifications.filter.favourites": "Отметки «избранного»",
@@ -421,7 +410,7 @@
   "status.reply": "Ответить",
   "status.replyAll": "Ответить всем",
   "status.report": "Пожаловаться",
-  "status.sensitive_warning": "Деликатное содержимое",
+  "status.sensitive_warning": "Содержимое «деликатного характера»",
   "status.share": "Поделиться",
   "status.show_less": "Свернуть",
   "status.show_less_all": "Свернуть все спойлеры в ветке",
diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json
index 4656aa275..be9f06d1d 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "न कोऽप्यनुसृतो वर्तते",
   "account.follows_you": "त्वामनुसरति",
   "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्",
+  "account.joined": "Joined {date}",
   "account.last_status": "गतसक्रियता",
   "account.link_verified_on": "अन्तर्जालस्थानस्यास्य स्वामित्वं परीक्षितमासीत् {date} दिने",
   "account.locked_info": "एतस्या लेखायाः गुह्यता \"निषिद्ध\"इति वर्तते । स्वामी स्वयञ्चिनोति कोऽनुसर्ता भवितुमर्हतीति ।",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "न निषिद्धप्रदेशाः सन्ति ।",
   "empty_column.favourited_statuses": "न प्रियदौत्यानि सन्ति । यदा प्रीतिरित्यङ्क्यतेऽत्र दृश्यते ।",
   "empty_column.favourites": "नैतद्दौत्यं प्रियमस्ति कस्मै अपि । यदा कस्मै प्रियं भवति तदाऽत्र दृश्यते ।",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "नाऽनुसरणानुरोधस्ते वर्तते । यदैको प्राप्यतेऽत्र दृश्यते ।",
   "empty_column.hashtag": "नाऽस्मिन् प्रचलितवस्तुचिह्ने किमपि ।",
   "empty_column.home": "गृहसमयतालिका रिक्ताऽस्ति । गम्यतां {public} वाऽन्वेषणैः प्रारभ्यतां मेलनं क्रियताञ्च ।",
-  "empty_column.home.public_timeline": "सार्वजनिकसमयतालिका",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "न किमपि वर्तते सूच्यामस्याम् । यदा सूच्याः सदस्या नवदौत्यानि प्रकटीकुर्वन्ति तदाऽत्राऽऽयान्ति ।",
   "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index e1b4e3998..32eadde94 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -1,7 +1,7 @@
 {
   "account.account_note_header": "Nota",
   "account.add_or_remove_from_list": "Agiunghe o boga dae is listas",
-  "account.badges.bot": "Bot",
+  "account.badges.bot": "Robot",
   "account.badges.group": "Grupu",
   "account.block": "Bloca @{name}",
   "account.block_domain": "Bloca su domìniu {domain}",
@@ -22,33 +22,34 @@
   "account.follows.empty": "Custa persone non sighit ancora a nemos.",
   "account.follows_you": "Ti sighit",
   "account.hide_reblogs": "Cua is cumpartziduras de @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Ùrtima atividade",
   "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}",
   "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.",
   "account.media": "Cuntenutu multimediale",
-  "account.mention": "Mentova a @{name}",
+  "account.mention": "Mèntova a @{name}",
   "account.moved_to": "{name} at cambiadu a:",
   "account.mute": "Pone a @{name} a sa muda",
   "account.mute_notifications": "Disativa is notìficas de @{name}",
   "account.muted": "A sa muda",
   "account.never_active": "Mai",
-  "account.posts": "Tuts",
-  "account.posts_with_replies": "Tuts e rispostas",
+  "account.posts": "Publicatziones",
+  "account.posts_with_replies": "Publicatziones e rispostas",
   "account.report": "Signala @{name}",
   "account.requested": "Abetende s'aprovatzione. Incarca pro annullare sa rechesta de sighidura",
   "account.share": "Cumpartzi su profilu de @{name}",
   "account.show_reblogs": "Ammustra is cumpartziduras de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuts}}",
+  "account.statuses_counter": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}",
   "account.unblock": "Isbloca a @{name}",
   "account.unblock_domain": "Isbloca su domìniu {domain}",
   "account.unendorse": "Non cussiges in su profilu",
   "account.unfollow": "Non sigas prus",
-  "account.unmute": "Torra a ativare @{name}",
+  "account.unmute": "Torra a ativare a @{name}",
   "account.unmute_notifications": "Ativa notìficas pro @{name}",
   "account_note.placeholder": "Incarca pro agiùnghere una nota",
   "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.",
   "alert.rate_limited.title": "Màssimu de rechestas barigadu",
-  "alert.unexpected.message": "B'at àpidu una faddina.",
+  "alert.unexpected.message": "Ddoe est istada una faddina.",
   "alert.unexpected.title": "Oh!",
   "announcement.announcement": "Annùntziu",
   "autosuggest_hashtag.per_week": "{count} a sa chida",
@@ -71,7 +72,7 @@
   "column.lists": "Listas",
   "column.mutes": "Persones a sa muda",
   "column.notifications": "Notìficas",
-  "column.pins": "Tuts apicados",
+  "column.pins": "Publicatziones apicadas",
   "column.public": "Lìnia de tempus federada",
   "column_back_button.label": "A coa",
   "column_header.hide_settings": "Cua is cunfiguratziones",
@@ -84,9 +85,9 @@
   "community.column_settings.local_only": "Isceti locale",
   "community.column_settings.media_only": "Isceti multimediale",
   "community.column_settings.remote_only": "Isceti remotu",
-  "compose_form.direct_message_warning": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.",
+  "compose_form.direct_message_warning": "Custa publicatzione at a èssere imbiada isceti a is persones mentovadas.",
   "compose_form.direct_message_warning_learn_more": "Àteras informatziones",
-  "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu. Isceti is tuts pùblicos podent èssere chircados cun etichetas.",
+  "compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est listada. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.",
   "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.",
   "compose_form.lock_disclaimer.lock": "blocadu",
   "compose_form.placeholder": "A ite ses pensende?",
@@ -101,39 +102,39 @@
   "compose_form.sensitive.hide": "{count, plural, one {Marca elementu multimediale comente a sensìbile} other {Marca elementos multimediales comente sensìbiles}}",
   "compose_form.sensitive.marked": "{count, plural, one {Elementu multimediale marcadu comente a sensìbile} other {Elementos multimediales marcados comente a sensìbiles}}",
   "compose_form.sensitive.unmarked": "{count, plural, one {Elementu multimediale non marcadu comente a sensìbile} other {Elementos multimediales non marcados comente a sensìbiles}}",
-  "compose_form.spoiler.marked": "Su testu est cuadu in fatu de s'avisu",
-  "compose_form.spoiler.unmarked": "Su testu no est cuadu",
+  "compose_form.spoiler.marked": "Boga avisu de cuntenutu",
+  "compose_form.spoiler.unmarked": "Agiunghe avisu de cuntenutu",
   "compose_form.spoiler_placeholder": "Iscrie s'avisu tuo inoghe",
   "confirmation_modal.cancel": "Annulla",
   "confirmations.block.block_and_report": "Bloca e signala",
   "confirmations.block.confirm": "Bloca",
   "confirmations.block.message": "Seguru chi boles blocare {name}?",
   "confirmations.delete.confirm": "Cantzella",
-  "confirmations.delete.message": "Seguru chi boles cantzellare custu tut?",
+  "confirmations.delete.message": "Seguru chi boles cantzellare custa publicatzione?",
   "confirmations.delete_list.confirm": "Cantzella",
   "confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?",
   "confirmations.domain_block.confirm": "Bloca totu su domìniu",
-  "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.",
+  "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare {domain}? In sa parte manna de is casos, pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.",
   "confirmations.logout.confirm": "Essi·nche",
   "confirmations.logout.message": "Seguru chi boles essire?",
   "confirmations.mute.confirm": "A sa muda",
-  "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mentovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.",
+  "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mèntovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.",
   "confirmations.mute.message": "Seguru chi boles pònnere a {name} a sa muda?",
   "confirmations.redraft.confirm": "Cantzella e torra a fàghere",
-  "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custu tut? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.",
+  "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.",
   "confirmations.reply.confirm": "Risponde",
-  "confirmations.reply.message": "Rispondende immoe as a subraiscrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?",
+  "confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?",
   "confirmations.unfollow.confirm": "Non sigas prus",
   "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?",
   "conversation.delete": "Cantzella arresonada",
   "conversation.mark_as_read": "Signala comente lèghidu",
-  "conversation.open": "Ammsutra arresonada",
+  "conversation.open": "Ammustra arresonada",
   "conversation.with": "Cun {names}",
   "directory.federated": "Dae unu fediversu connotu",
   "directory.local": "Isceti dae {domain}",
   "directory.new_arrivals": "Arribos noos",
-  "directory.recently_active": "Ativos dae pagu",
-  "embed.instructions": "Inserta custu tut in su situ web tuo copiende su còdighe de suta.",
+  "directory.recently_active": "Cun atividade dae pagu",
+  "embed.instructions": "Inserta custa publicatzione in su situ web tuo copiende su còdighe de suta.",
   "embed.preview": "At a aparèssere aici:",
   "emoji_button.activity": "Atividade",
   "emoji_button.custom": "Personalizadu",
@@ -149,21 +150,22 @@
   "emoji_button.search_results": "Resurtados de sa chirca",
   "emoji_button.symbols": "Sìmbulos",
   "emoji_button.travel": "Biàgios e logos",
-  "empty_column.account_suspended": "Account suspended",
-  "empty_column.account_timeline": "Perunu tut inoghe!",
+  "empty_column.account_suspended": "Contu suspèndidu",
+  "empty_column.account_timeline": "Peruna publicatzione inoghe!",
   "empty_column.account_unavailable": "Su profilu no est a disponimentu",
   "empty_column.blocks": "No as blocadu ancora nemos.",
-  "empty_column.bookmarked_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.",
+  "empty_column.bookmarked_statuses": "Non tenes ancora peruna publicatzione in is marcadores. Cando nd'as a agiùnghere una, at a èssere ammustrada inoghe.",
   "empty_column.community": "Sa lìnia de tempus locale est bòida. Iscrie inoghe pro cumintzare sa festa!",
   "empty_column.direct": "Non tenes ancora perunu messàgiu deretu. Cando nd'as a imbiare o nd'as a retzire unu, at a èssere ammustradu inoghe.",
   "empty_column.domain_blocks": "Non tenes ancora perunu domìniu blocadu.",
-  "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is preferidos. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.",
-  "empty_column.favourites": "Nemos at marcadu ancora custu tut comente preferidu. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.",
+  "empty_column.favourited_statuses": "Non tenes ancora peruna publicatzione in is preferidos. Cando nd'as a agiùnghere una, at a èssere ammustrada inoghe.",
+  "empty_column.favourites": "Nemos at marcadu ancora custa publicatzione comente preferida. Cando calicunu dd'at a fàghere, at a èssere ammustrada inoghe.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Non tenes ancora peruna rechesta de sighidura. Cando nd'as a retzire una, at a èssere ammustrada inoghe.",
   "empty_column.hashtag": "Ancora nudda in custa eticheta.",
   "empty_column.home": "Sa lìnia de tempus printzipale tua est bòida. Visita {public} o imprea sa chirca pro cumintzare e agatare àteras persones.",
-  "empty_column.home.public_timeline": "sa lìnia de tempus pùblica",
-  "empty_column.list": "Nudda ancora in custa lista. Cando is persones de custa lista ant a publicare àteros istados, ant a aparèssere inoghe.",
+  "empty_column.home.suggestions": "See some suggestions",
+  "empty_column.list": "Nudda ancora in custa lista. Cando is persones de custa lista ant a publicare, is publicatziones ant a aparèssere inoghe.",
   "empty_column.lists": "Non tenes ancora peruna lista. Cando nd'as a creare una, at a èssere ammustrada inoghe.",
   "empty_column.mutes": "No as postu ancora nemos a sa muda.",
   "empty_column.notifications": "Non tenes ancora peruna notìfica. Chistiona cun una persone pro cumintzare un'arresonada.",
@@ -173,7 +175,10 @@
   "error.unexpected_crash.next_steps": "Proa de torrare a carrigare sa pàgina. Si custu no acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.",
   "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.",
   "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete",
-  "errors.unexpected_crash.report_issue": "Signala unu problema",
+  "errors.unexpected_crash.report_issue": "Sinnala unu problema",
+  "follow_recommendations.done": "Fatu",
+  "follow_recommendations.heading": "Sighi gente de chie boles bìdere is publicatziones! Càstia custos cussìgios.",
+  "follow_recommendations.lead": "Is messàgios de gente a sa chi ses sighende ant a èssere ammustrados in òrdine cronològicu in sa lìnia de tempus printzipale tua. Non timas de fàghere errores, acabbare de sighire gente est fàtzile in cale si siat momentu!",
   "follow_request.authorize": "Autoriza",
   "follow_request.reject": "Refuda",
   "follow_requests.unlocked_explanation": "Fintzas si su contu tuo no est blocadu, su personale de {domain} at pensadu chi forsis bolias revisionare a manu is rechestas de custos contos.",
@@ -183,7 +188,7 @@
   "getting_started.documentation": "Documentatzione",
   "getting_started.heading": "Comente cumintzare",
   "getting_started.invite": "Invita gente",
-  "getting_started.open_source_notice": "Mastodon est de còdighe abertu. Bi podes contribuire o signalare faddinas in {github}.",
+  "getting_started.open_source_notice": "Mastodon est de còdighe abertu. Bi podes contribuire o sinnalare faddinas in {github}.",
   "getting_started.security": "Cunfiguratziones de su contu",
   "getting_started.terms": "Cunditziones de su servìtziu",
   "hashtag.column_header.tag_mode.all": "e {additional}",
@@ -203,32 +208,15 @@
   "intervals.full.days": "{number, plural, one {# die} other {# dies}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
   "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}",
-  "introduction.federation.action": "Sighi",
-  "introduction.federation.federated.headline": "Federada",
-  "introduction.federation.federated.text": "Is publicatziones pùblicas de àteros serbidores de su fediversu ant a aparèssere in sa lìnia de tempus federada.",
-  "introduction.federation.home.headline": "Printzipale",
-  "introduction.federation.home.text": "Is messàgios de sa gente chi sighis ant a aparèssere in sa lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore!",
-  "introduction.federation.local.headline": "Locale",
-  "introduction.federation.local.text": "Is publicatziones pùblicas de sa gente de su pròpiu serbidore tuo ant a aparèssere in sa lìnia de tempus locale.",
-  "introduction.interactions.action": "Acabba su tutoriale!",
-  "introduction.interactions.favourite.headline": "Preferidos",
-  "introduction.interactions.favourite.text": "Podes sarvare unu tut pro ddu lèghere prus tardu, e fàghere ischire a chie dd'apat iscritu chi t'est pràghidu marchende·ddu comente a preferidu.",
-  "introduction.interactions.reblog.headline": "Cumpartzi",
-  "introduction.interactions.reblog.text": "Cun is cumpartziduras podes fàghere connòschere tuts de àtera gente a chie ti sighit.",
-  "introduction.interactions.reply.headline": "Risponde",
-  "introduction.interactions.reply.text": "Podes rispòndere a is tuts de àtera gente e a is tuos pròpios, e ant a èssere unidos in un'arresonada.",
-  "introduction.welcome.action": "Ajò, andamus!",
-  "introduction.welcome.headline": "Primos passos",
-  "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·ti·nde su nòmine.",
-  "keyboard_shortcuts.back": "pro navigare in segus",
+  "keyboard_shortcuts.back": "pro navigare a coa",
   "keyboard_shortcuts.blocked": "pro abèrrere sa lista de persones blocadas",
   "keyboard_shortcuts.boost": "pro cumpartzire",
-  "keyboard_shortcuts.column": "pro atzentrare unu tut in una de is colunnas",
+  "keyboard_shortcuts.column": "pro atzentrare una publicatzione in una de is colunnas",
   "keyboard_shortcuts.compose": "pro atzentrare in s'àrea de cumpositzione de testu",
   "keyboard_shortcuts.description": "Descritzione",
   "keyboard_shortcuts.direct": "pro abèrrere sa colunna de messàgios diretos",
   "keyboard_shortcuts.down": "pro mòere in bàsciu in sa lista",
-  "keyboard_shortcuts.enter": "pro abèrrere su tut",
+  "keyboard_shortcuts.enter": "pro abèrrere una publicatzione",
   "keyboard_shortcuts.favourite": "pro marcare comente a preferidu",
   "keyboard_shortcuts.favourites": "pro abèrrere sa lista de preferidos",
   "keyboard_shortcuts.federated": "pro abèrrere sa lìnia de tempus federada",
@@ -242,7 +230,7 @@
   "keyboard_shortcuts.my_profile": "pro abèrrere su profilu tuo",
   "keyboard_shortcuts.notifications": "pro abèrrere sa colunna de notificatziones",
   "keyboard_shortcuts.open_media": "pro abèrrere elementos multimediales",
-  "keyboard_shortcuts.pinned": "pro abèrrere lista de tuts apicados",
+  "keyboard_shortcuts.pinned": "pro abèrrere sa lista de publicatziones apicadas",
   "keyboard_shortcuts.profile": "pro abèrrere su profilu de s'autore",
   "keyboard_shortcuts.reply": "pro rispòndere",
   "keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura",
@@ -251,13 +239,13 @@
   "keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"",
   "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC",
   "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare elementos multimediales",
-  "keyboard_shortcuts.toot": "pro cumintzare a iscrìere unu tut nou",
+  "keyboard_shortcuts.toot": "pro cumintzare a iscrìere una publicatzione noa",
   "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca",
   "keyboard_shortcuts.up": "pro mòere in susu in sa lista",
   "lightbox.close": "Serra",
   "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines",
   "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines",
-  "lightbox.next": "Sighi",
+  "lightbox.next": "Imbeniente",
   "lightbox.previous": "Pretzedente",
   "lists.account.add": "Agiunghe a sa lista",
   "lists.account.remove": "Boga dae sa lista",
@@ -266,9 +254,9 @@
   "lists.edit.submit": "Muda su tìtulu",
   "lists.new.create": "Agiunghe lista",
   "lists.new.title_placeholder": "Tìtulu de sa lista noa",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.followed": "Cale si siat persone chi sighis",
+  "lists.replies_policy.list": "Persones de sa lista",
+  "lists.replies_policy.none": "Nemos",
   "lists.replies_policy.title": "Ammustra is rispostas a:",
   "lists.search": "Chirca intre sa gente chi ses sighende",
   "lists.subheading": "Is listas tuas",
@@ -284,7 +272,7 @@
   "navigation_bar.blocks": "Persones blocadas",
   "navigation_bar.bookmarks": "Sinnalibros",
   "navigation_bar.community_timeline": "Lìnia de tempus locale",
-  "navigation_bar.compose": "Cumpone unu tut nou",
+  "navigation_bar.compose": "Cumpone una publicatzione noa",
   "navigation_bar.direct": "Messàgios diretos",
   "navigation_bar.discover": "Iscoberi",
   "navigation_bar.domain_blocks": "Domìnios blocados",
@@ -292,24 +280,24 @@
   "navigation_bar.favourites": "Preferidos",
   "navigation_bar.filters": "Faeddos a sa muda",
   "navigation_bar.follow_requests": "Rechestas de sighidura",
-  "navigation_bar.follows_and_followers": "Persones chi sighis e chi ti sighint",
+  "navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras",
   "navigation_bar.info": "Informatziones de su serbidore",
   "navigation_bar.keyboard_shortcuts": "Teclas de atzessu diretu",
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Essi",
   "navigation_bar.mutes": "Persones a sa muda",
   "navigation_bar.personal": "Informatziones personales",
-  "navigation_bar.pins": "Tuts apicados",
+  "navigation_bar.pins": "Publicatziones apicadas",
   "navigation_bar.preferences": "Preferèntzias",
   "navigation_bar.public_timeline": "Lìnia de tempus federada",
   "navigation_bar.security": "Seguresa",
-  "notification.favourite": "{name} at marcadu s'istadu tuo comente a preferidu",
+  "notification.favourite": "{name} at marcadu sa publicatzione tua comente a preferida",
   "notification.follow": "{name} ti sighit",
   "notification.follow_request": "{name} at dimandadu de ti sighire",
   "notification.mention": "{name} t'at mentovadu",
   "notification.own_poll": "Sondàgiu acabbadu",
   "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu",
-  "notification.reblog": "{name} at cumpartzidu su tut tuo",
+  "notification.reblog": "{name} at cumpartzidu sa publicatzione tua",
   "notification.status": "{name} at publicadu cosa",
   "notifications.clear": "Lìmpia notìficas",
   "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?",
@@ -320,26 +308,27 @@
   "notifications.column_settings.filter_bar.show": "Ammustra",
   "notifications.column_settings.follow": "Sighiduras noas:",
   "notifications.column_settings.follow_request": "Rechestas noas de sighidura:",
-  "notifications.column_settings.mention": "Mentovos:",
+  "notifications.column_settings.mention": "Mèntovos:",
   "notifications.column_settings.poll": "Resurtados de su sondàgiu:",
   "notifications.column_settings.push": "Notìficas push",
   "notifications.column_settings.reblog": "Cumpartziduras:",
   "notifications.column_settings.show": "Ammustra in sa colunna",
   "notifications.column_settings.sound": "Reprodue unu sonu",
-  "notifications.column_settings.status": "Tuts noos:",
+  "notifications.column_settings.status": "Publicatziones noas:",
+  "notifications.column_settings.unread_markers.category": "Marcadores de notìficas de lèghere",
   "notifications.filter.all": "Totus",
   "notifications.filter.boosts": "Cumpartziduras",
   "notifications.filter.favourites": "Preferidos",
   "notifications.filter.follows": "Sighende",
-  "notifications.filter.mentions": "Mentovos",
+  "notifications.filter.mentions": "Mèntovos",
   "notifications.filter.polls": "Resurtados de su sondàgiu",
   "notifications.filter.statuses": "Atualizatziones dae gente chi sighis",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.grant_permission": "Dona su permissu.",
   "notifications.group": "{count} notìficas",
   "notifications.mark_as_read": "Sinnala ònnia notìfica comente lèghida",
   "notifications.permission_denied": "Is notìficas de iscrivania non sunt a disponimentu pro neghe de rechestas de permissu chi sunt istadas dennegadas in antis",
   "notifications.permission_denied_alert": "Is notìficas de iscrivania non podent èssere abilitadas, ca su permissu de su navigadore est istadu dennegadu in antis",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications.permission_required": "Is notìficas de iscrivania no sunt a disponimentu ca ammancat su permissu rechèdidu.",
   "notifications_permission_banner.enable": "Abilita is notìficas de iscrivania",
   "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.",
   "notifications_permission_banner.title": "Non ti perdas mai nudda",
@@ -352,7 +341,7 @@
   "poll.voted": "As votadu custa risposta",
   "poll_button.add_poll": "Agiunghe unu sondàgiu",
   "poll_button.remove_poll": "Cantzella su sondàgiu",
-  "privacy.change": "Acontza s'istadu de riservadesa",
+  "privacy.change": "Modìfica s'istadu de riservadesa",
   "privacy.direct.long": "Visìbile isceti pro is persones mentovadas",
   "privacy.direct.short": "Deretu",
   "privacy.private.long": "Visìbile isceti pro chie ti sighit",
@@ -364,11 +353,11 @@
   "refresh": "Atualiza",
   "regeneration_indicator.label": "Carrighende…",
   "regeneration_indicator.sublabel": "Preparende sa lìnia de tempus printzipale tua.",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}o",
+  "relative_time.days": "{number} dies a oe",
+  "relative_time.hours": "{number} oras a immoe",
   "relative_time.just_now": "immoe",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
+  "relative_time.minutes": "{number} minutos a immoe",
+  "relative_time.seconds": "{number} segundos a immoe",
   "relative_time.today": "oe",
   "reply_indicator.cancel": "Annulla",
   "report.forward": "Torra a imbiare a {target}",
@@ -379,23 +368,23 @@
   "report.target": "Informende de {target}",
   "search.placeholder": "Chirca",
   "search_popout.search_format": "Formadu de chirca avantzada",
-  "search_popout.tips.full_text": "Testu sèmplitze pro agatare istados chi as iscritu, marcadu comente a preferidos, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines de utente, nòmines visualizados e etichetas chi ddu includent.",
+  "search_popout.tips.full_text": "Testu sèmplitze pro agatare publicatziones chi as iscritu, marcadu comente a preferidas, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines, nòmines de utente e etichetas.",
   "search_popout.tips.hashtag": "eticheta",
-  "search_popout.tips.status": "tut",
+  "search_popout.tips.status": "publicatzione",
   "search_popout.tips.text": "Testu sèmplitze pro agatare nòmines visualizados, nòmines de utente e etichetas",
   "search_popout.tips.user": "utente",
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Etichetas",
-  "search_results.statuses": "Tuts",
-  "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.",
+  "search_results.statuses": "Publicatziones",
+  "search_results.statuses_fts_disabled": "Sa chirca de publicatziones pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resurtadu} other {resurtados}}",
   "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}",
-  "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione",
-  "status.block": "Bloca @{name}",
+  "status.admin_status": "Aberi custa publicatzione in s'interfache de moderatzione",
+  "status.block": "Bloca a @{name}",
   "status.bookmark": "Sinnalibru",
   "status.cancel_reblog_private": "Iscontza sa cumpartzidura",
   "status.cannot_reblog": "Custa publicatzione non podet èssere cumpartzida",
-  "status.copy": "Còpia su ligòngiu a su tut tuo",
+  "status.copy": "Còpia su ligòngiu a sa publicatzione tua",
   "status.delete": "Cantzella",
   "status.detailed_status": "Visualizatzione de detàlliu de arresonada",
   "status.direct": "Messàgiu deretu a @{name}",
@@ -404,18 +393,18 @@
   "status.filtered": "Filtradu",
   "status.load_more": "Càrriga·nde àteros",
   "status.media_hidden": "Elementos multimediales cuados",
-  "status.mention": "Mentova @{name}",
+  "status.mention": "Mèntova a @{name}",
   "status.more": "Àteru",
-  "status.mute": "Pone @{name} a sa muda",
+  "status.mute": "Pone a @{name} a sa muda",
   "status.mute_conversation": "Pone s'arresonada a sa muda",
-  "status.open": "Ismànnia custu tut",
+  "status.open": "Ismànnia custa publicatzione",
   "status.pin": "Apica in su profilu",
-  "status.pinned": "Tut apicadu",
+  "status.pinned": "Publicatzione apicada",
   "status.read_more": "Leghe·nde àteru",
   "status.reblog": "Cumpartzi",
   "status.reblog_private": "Cumpartzi cun is utentes originales",
   "status.reblogged_by": "{name} at cumpartzidu",
-  "status.reblogs.empty": "Nemos at ancora cumpartzidu custu tut. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.",
+  "status.reblogs.empty": "Nemos at ancora cumpartzidu custa publicatzione. Cando calicunu dd'at a fàghere, at a èssere ammustrada inoghe.",
   "status.redraft": "Cantzella e torra a iscrìere",
   "status.remove_bookmark": "Boga su sinnalibru",
   "status.reply": "Risponde",
@@ -446,7 +435,7 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} dae àteros serbidores non benint ammustrados.",
   "timeline_hint.resources.followers": "Sighiduras",
   "timeline_hint.resources.follows": "Sighende",
-  "timeline_hint.resources.statuses": "Tuts prus betzos",
+  "timeline_hint.resources.statuses": "Publicatziones prus betzas",
   "trends.counter_by_accounts": "{count, plural, one {{counter} persone} other {{counter} persones}} chistionende",
   "trends.trending_now": "Est tendèntzia immoe",
   "ui.beforeunload": "S'abbotzu tuo at a èssere pèrdidu si essis dae Mastodon.",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
new file mode 100644
index 000000000..bb5070529
--- /dev/null
+++ b/app/javascript/mastodon/locales/si.json
@@ -0,0 +1,475 @@
+{
+  "account.account_note_header": "සටහන",
+  "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න",
+  "account.badges.bot": "ස්වයං ක්‍රමලේඛය",
+  "account.badges.group": "සමූහය",
+  "account.block": "@{name} අවහිර කරන්න",
+  "account.block_domain": "{domain} වසම අවහිර කරන්න",
+  "account.blocked": "අවහිර කර ඇත",
+  "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "@{name} සෘජු පණිවිඩය",
+  "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් දීම නවත්වන්න",
+  "account.domain_blocked": "වසම අවහිර කර ඇත",
+  "account.edit_profile": "පැතිකඩ සංස්කරණය",
+  "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න",
+  "account.endorse": "පැතිකඩෙහි විශේෂාංගය",
+  "account.follow": "Follow",
+  "account.followers": "Followers",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
+  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
+  "account.last_status": "අවසන් වරට සක්‍රීය",
+  "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදි",
+  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.media": "මාධ්‍යය",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "@{name} නිහඬ කරන්න",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.never_active": "Never",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "@{name} වාර්තා කරන්න",
+  "account.requested": "Awaiting approval",
+  "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.unblock": "@{name} අනවහිර කරන්න",
+  "account.unblock_domain": "{domain} වසම අනවහිර කරන්න",
+  "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account_note.placeholder": "සටහන එකතු කිරීමට ක්ලික් කරන්න",
+  "alert.rate_limited.message": "කරුණාකර {retry_time, time, medium} ට පසු නැවත උත්සාහ කරන්න.",
+  "alert.rate_limited.title": "Rate limited",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "අපොයි!",
+  "announcement.announcement": "නිවේදනය",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "නැවත උත්සාහ කරන්න",
+  "bundle_column_error.title": "ජාලයේ දෝෂයකි",
+  "bundle_modal_error.close": "වසන්න",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න",
+  "column.blocks": "අවහිර කළ පරිශීලකයින්",
+  "column.bookmarks": "Bookmarks",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.directory": "පැතිකඩයන් පිරික්සන්න",
+  "column.domain_blocks": "අවහිර කළ වසම්",
+  "column.favourites": "ප්‍රියතමයන්",
+  "column.follow_requests": "Follow requests",
+  "column.home": "මුල් පිටුව",
+  "column.lists": "ලැයිස්තු",
+  "column.mutes": "නිහඬ කළ පරිශීලකයන්",
+  "column.notifications": "දැනුම්දීම්",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "ආපසු",
+  "column_header.hide_settings": "සැකසුම් සඟවන්න",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "සැකසුම් පෙන්වන්න",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "සැකසුම්",
+  "community.column_settings.local_only": "ස්ථානීයව පමණයි",
+  "community.column_settings.media_only": "මාධ්‍ය පමණයි",
+  "community.column_settings.remote_only": "දුරස්ථව පමණයි",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "තව දැනගන්න",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත",
+  "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?",
+  "compose_form.poll.add_option": "තේරීමක් එකතු කරන්න",
+  "compose_form.poll.duration": "මත විමසීමේ කාලය",
+  "compose_form.poll.option_placeholder": "Choice {number}",
+  "compose_form.poll.remove_option": "මෙම තේරීම ඉවත් කරන්න",
+  "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න",
+  "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න",
+  "compose_form.publish": "පිඹින්න",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "පාඨය සඟවා නැත",
+  "compose_form.spoiler_placeholder": "ඔබගේ අවවාදය මෙහි ලියන්න",
+  "confirmation_modal.cancel": "අවලංගු",
+  "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න",
+  "confirmations.block.confirm": "අවහිර",
+  "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට අවශ්‍ය බව විශ්වාසද?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.logout.confirm": "නික්මෙන්න",
+  "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?",
+  "confirmations.mute.confirm": "නිශ්ශබ්ද",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "පිළිතුර",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "conversation.delete": "Delete conversation",
+  "conversation.mark_as_read": "කියවූ ලෙස සලකුණු කරන්න",
+  "conversation.open": "සංවාදය බලන්න",
+  "conversation.with": "{names} සමඟ",
+  "directory.federated": "From known fediverse",
+  "directory.local": "{domain} වෙතින් පමණි",
+  "directory.new_arrivals": "New arrivals",
+  "directory.recently_active": "Recently active",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "ක්‍රියාකාරකම",
+  "emoji_button.custom": "අභිරුචි",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "ආහාර සහ පාන",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "මිනිසුන්",
+  "emoji_button.recent": "නිතර භාවිතා වූ",
+  "emoji_button.search": "සොයන්න...",
+  "emoji_button.search_results": "සෙවුම් ප්‍රතිඵල",
+  "emoji_button.symbols": "සංකේත",
+  "emoji_button.travel": "චාරිකා සහ ස්ථාන",
+  "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.blocks": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු අවහිර කර නැත.",
+  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "අවහිර කළ වසම් නොමැත.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it 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.suggestions": "See some suggestions",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "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.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "ප්‍රතික්ෂේප",
+  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
+  "generic.saved": "Saved",
+  "getting_started.developers": "සංවර්ධකයින්",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "මිනිසුන්ට ආරාධනා කරන්න",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "ගිණුමේ සැකසුම්",
+  "getting_started.terms": "සේවාවේ කොන්දේසි",
+  "hashtag.column_header.tag_mode.all": "සහ {additional}",
+  "hashtag.column_header.tag_mode.any": "හෝ {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.select.no_options_message": "යෝජනා කිසිවක් හමු නොවිණි",
+  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
+  "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම",
+  "hashtag.column_settings.tag_mode.any": "මෙයින් ඕනෑම එකක්",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "මූලික",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "ප්‍රතිචාර පෙන්වන්න",
+  "home.hide_announcements": "නිවේදන සඟවන්න",
+  "home.show_announcements": "නිවේදන පෙන්වන්න",
+  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
+  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.open_media": "to open media",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "වසන්න",
+  "lightbox.compress": "Compress image view box",
+  "lightbox.expand": "Expand image view box",
+  "lightbox.next": "ඊළඟ",
+  "lightbox.previous": "පෙර",
+  "lists.account.add": "ලැයිස්තුවට එකතු කරන්න",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "ලැයිස්තුව සංස්කරණය කරන්න",
+  "lists.edit.submit": "Change title",
+  "lists.new.create": "ලැයිස්තුව එකතු කරන්න",
+  "lists.new.title_placeholder": "New list title",
+  "lists.replies_policy.followed": "Any followed user",
+  "lists.replies_policy.list": "Members of the list",
+  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.title": "Show replies to:",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "loading_indicator.label": "පූරණය වෙමින්...",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.duration": "Duration",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "mute_modal.indefinite": "Indefinite",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "නික්මෙන්න",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "පුද්ගලික",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "ආරක්ෂාව",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.follow_request": "{name} has requested to follow you",
+  "notification.mention": "{name} mentioned you",
+  "notification.own_poll": "Your poll has ended",
+  "notification.poll": "A poll you have voted in has ended",
+  "notification.reblog": "{name} boosted your status",
+  "notification.status": "{name} just posted",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "පෙන්වන්න",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "සියල්ල",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.polls": "Poll results",
+  "notifications.filter.statuses": "Updates from people you follow",
+  "notifications.grant_permission": "Grant permission.",
+  "notifications.group": "{count} notifications",
+  "notifications.mark_as_read": "Mark every notification as read",
+  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
+  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
+  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
+  "notifications_permission_banner.title": "Never miss a thing",
+  "picture_in_picture.restore": "Put it back",
+  "poll.closed": "Closed",
+  "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.vote": "මනාපය",
+  "poll.voted": "You voted for this answer",
+  "poll_button.add_poll": "Add a poll",
+  "poll_button.remove_poll": "Remove poll",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Visible for mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Visible for followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Visible for all, shown in public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Visible for all, but not in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "refresh": "නැවුම් කරන්න",
+  "regeneration_indicator.label": "පූරණය වෙමින්…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "දැන්",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "relative_time.today": "අද",
+  "reply_indicator.cancel": "අවලංගු කරන්න",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "අමතර අදහස්",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "සොයන්න",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "පරිශීලක",
+  "search_results.accounts": "මිනිසුන්",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.bookmark": "Bookmark",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "පෙරන ලද",
+  "status.load_more": "තව පූරණය කරන්න",
+  "status.media_hidden": "මාධ්‍ය සඟවා ඇත",
+  "status.mention": "Mention @{name}",
+  "status.more": "තව",
+  "status.mute": "@{name} නිහඬ කරන්න",
+  "status.mute_conversation": "සංවාදය නිහඬ කරන්න",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost with original visibility",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.remove_bookmark": "Remove bookmark",
+  "status.reply": "පිළිතුරු",
+  "status.replyAll": "Reply to thread",
+  "status.report": "@{name} වාර්තා කරන්න",
+  "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි",
+  "status.share": "බෙදාගන්න",
+  "status.show_less": "අඩුවෙන් පෙන්වන්න",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.uncached_media_warning": "Not available",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "මුල් පිටුව",
+  "tabs_bar.local_timeline": "ස්ථානීය",
+  "tabs_bar.notifications": "දැනුම්දීම්",
+  "tabs_bar.search": "සොයන්න",
+  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
+  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.moments": "Moments remaining",
+  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
+  "timeline_hint.resources.followers": "Followers",
+  "timeline_hint.resources.follows": "Follows",
+  "timeline_hint.resources.statuses": "Older toots",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.trending_now": "Trending now",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "units.short.billion": "{count}B",
+  "units.short.million": "{count}M",
+  "units.short.thousand": "{count}K",
+  "upload_area.title": "උඩුගත කිරීමට ඇද දමන්න",
+  "upload_button.label": "Add images, a video or an audio file",
+  "upload_error.limit": "ගොනුව උඩුගත කළ හැකි සීමාව ඉක්මවා ඇත.",
+  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_form.audio_description": "Describe for people with hearing loss",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.edit": "සංස්කරණය",
+  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.undo": "Delete",
+  "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
+  "upload_modal.analyzing_picture": "පින්තූරය විශ්ලේෂණය කරමින්…",
+  "upload_modal.apply": "යොදන්න",
+  "upload_modal.choose_image": "පින්තුරයක් තෝරන්න",
+  "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී",
+  "upload_modal.detect_text": "පින්තූරයෙන් පාඨ හඳුනාගන්න",
+  "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය",
+  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preview_label": "පෙරදසුන ({ratio})",
+  "upload_progress.label": "උඩුගත වෙමින්...",
+  "video.close": "Close video",
+  "video.download": "ගොනුව බාගන්න",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "පූර්ණ තිරය",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "විරාමය",
+  "video.play": "ධාවනය",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 9bb0aa8ce..d10f29aaf 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.",
   "account.follows_you": "Nasleduje ťa",
   "account.hide_reblogs": "Skry vyzdvihnutia od @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Naposledy aktívny",
   "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}",
   "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.",
   "empty_column.favourited_statuses": "Nemáš obľúbené ešte žiadne príspevky. Keď si nejaký obľúbiš, bude zobrazený práve tu.",
   "empty_column.favourites": "Tento toot si ešte nikto neobľúbil. Ten kto si ho obľúbi, bude zobrazený tu.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.",
   "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.",
   "empty_column.home": "Tvoja lokálna osa je zatiaľ prázdna! Pre začiatok navštív {public}, alebo použi vyhľadávanie a nájdi tak aj iných užívateľov.",
-  "empty_column.home.public_timeline": "verejná časová os",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.",
   "empty_column.lists": "Nemáš ešte žiadne zoznamy. Keď nejaký vytvoríš, bude zobrazený práve tu.",
   "empty_column.mutes": "Ešte si nestĺmil žiadných užívateľov.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky",
   "errors.unexpected_crash.report_issue": "Nahlás problém",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Povoľ prístup",
   "follow_request.reject": "Odmietni",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
   "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}",
   "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}",
-  "introduction.federation.action": "Ďalej",
-  "introduction.federation.federated.headline": "Federovaná",
-  "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.",
-  "introduction.federation.home.headline": "Domovská",
-  "introduction.federation.home.text": "Príspevky od ľudí ktorých nasleduješ sa zobrazia na tvojej domovskej nástenke. Môžeš nasledovať hocikoho na ktoromkoľvek serveri!",
-  "introduction.federation.local.headline": "Miestna",
-  "introduction.federation.local.text": "Verejné príspevky od ľudí v rámci toho istého serveru na akom si aj ty, budú zobrazované na miestnej časovej osi.",
-  "introduction.interactions.action": "Ukonči návod!",
-  "introduction.interactions.favourite.headline": "Obľúbené",
-  "introduction.interactions.favourite.text": "Obľúbením si môžeš príspevok uložiť na neskôr, a zároveň dať jeho autorovi vedieť, že sa ti páčil.",
-  "introduction.interactions.reblog.headline": "Vyzdvihni",
-  "introduction.interactions.reblog.text": "Môžeš zdieľať príspevky iných ľudí s tvojími následovateľmi tak, že ich vyzdvihneš.",
-  "introduction.interactions.reply.headline": "Odpovedz",
-  "introduction.interactions.reply.text": "Odpovedať môžeš na príspevky iných ľudí, aj na svoje vlastné, čím sa spolu prepoja do konverzácie.",
-  "introduction.welcome.action": "Poďme do toho!",
-  "introduction.welcome.headline": "Prvé kroky",
-  "introduction.welcome.text": "Vitaj vo fediverse! Za malú chvíľu budeš môcť posielať správy a rozpovedať sa so svojími priateľmi cez širokú škálu rôznorodých serverov. Ale tento server, {domain}, je špeciálny v tom, že ukladá tvoj profil, takže si jeho názov zapametaj.",
   "keyboard_shortcuts.back": "dostať sa naspäť",
   "keyboard_shortcuts.blocked": "otvor zoznam blokovaných užívateľov",
   "keyboard_shortcuts.boost": "vyzdvihnúť",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Ukáž v stĺpci",
   "notifications.column_settings.sound": "Prehraj zvuk",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Všetky",
   "notifications.filter.boosts": "Vyzdvihnutia",
   "notifications.filter.favourites": "Obľúbené",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index ca29c4455..2790a4d19 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Ta uporabnik še ne sledi nikomur.",
   "account.follows_you": "Sledi tebi",
   "account.hide_reblogs": "Skrij spodbude od @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Zadnja dejavnost",
   "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}",
   "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Še vedno ni skritih domen.",
   "empty_column.favourited_statuses": "Nimate priljubljenih tutov. Ko boste vzljubili kakšnega, se bo prikazal tukaj.",
   "empty_column.favourites": "Nihče še ni vzljubil tega tuta. Ko ga bo nekdo, se bo pojavil tukaj.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Nimate prošenj za sledenje. Ko boste prejeli kakšno, se bo prikazala tukaj.",
   "empty_column.hashtag": "V tem ključniku še ni nič.",
   "empty_column.home": "Vaša domača časovnica je prazna! Obiščite {public} ali uporabite iskanje, da se boste srečali druge uporabnike.",
-  "empty_column.home.public_timeline": "javna časovnica",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.",
   "empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.",
   "empty_column.mutes": "Niste utišali še nobenega uporabnika.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Overi",
   "follow_request.reject": "Zavrni",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}",
   "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} two {# minuti} few {# minute} other {# minut}}",
-  "introduction.federation.action": "Naprej",
-  "introduction.federation.federated.headline": "Združeno",
-  "introduction.federation.federated.text": "Javne objave iz drugih strežnikov fediverse-a bodo prikazane v združeni časovnici.",
-  "introduction.federation.home.headline": "Domov",
-  "introduction.federation.home.text": "Objave oseb, ki jim sledite, bodo prikazane v vaši domači časovnici. Lahko sledite vsakomur na katerem koli strežniku!",
-  "introduction.federation.local.headline": "Lokalno",
-  "introduction.federation.local.text": "Javne objave ljudi na istem strežniku, se bodo prikazale na lokalni časovnici.",
-  "introduction.interactions.action": "Zaključi vadnico!",
-  "introduction.interactions.favourite.headline": "Vzljubi",
-  "introduction.interactions.favourite.text": "Tut lahko shranite za pozneje in ga vzljubite ter s tem pokažete avtorju, da vam je ta tut priljubljen.",
-  "introduction.interactions.reblog.headline": "Spodbudi",
-  "introduction.interactions.reblog.text": "Tute drugih ljudi lahko delite z vašimi sledilci, tako da spodbudite tute.",
-  "introduction.interactions.reply.headline": "Odgovori",
-  "introduction.interactions.reply.text": "Lahko odgovarjate na tuje in vaše tute, kar bo odgovore povezalo v pogovor.",
-  "introduction.welcome.action": "Gremo!",
-  "introduction.welcome.headline": "Prvi koraki",
-  "introduction.welcome.text": "Dobrodošli v fediverse-u! Čez nekaj trenutkov boste lahko oddajali sporočila in se pogovarjali s prijatelji prek različnih strežnikov. Vendar je ta strežnik {domain} poseben - gosti vaš profil, zato si zapomnite njegovo ime.",
   "keyboard_shortcuts.back": "pojdi nazaj",
   "keyboard_shortcuts.blocked": "odpri seznam blokiranih uporabnikov",
   "keyboard_shortcuts.boost": "spodbudi",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Prikaži v stolpcu",
   "notifications.column_settings.sound": "Predvajaj zvok",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Vse",
   "notifications.filter.boosts": "Spodbude",
   "notifications.filter.favourites": "Priljubljeni",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index b45f62cd5..de274500a 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -1,5 +1,5 @@
 {
-  "account.account_note_header": "Shënimi juaj për @{name}",
+  "account.account_note_header": "Shënim",
   "account.add_or_remove_from_list": "Shtoni ose Hiqni prej listash",
   "account.badges.bot": "Robot",
   "account.badges.group": "Grup",
@@ -7,7 +7,7 @@
   "account.block_domain": "Blloko përkatësinë {domain}",
   "account.blocked": "E bllokuar",
   "account.browse_more_on_origin_server": "Shfletoni më tepër rreth profilit origjinal",
-  "account.cancel_follow_request": "Anulo kërkesën e ndjekjes",
+  "account.cancel_follow_request": "Anulo kërkesë ndjekjeje",
   "account.direct": "Mesazh i drejtpërdrejtë për @{name}",
   "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}",
   "account.domain_blocked": "Përkatësia u bllokua",
@@ -16,12 +16,13 @@
   "account.endorse": "Pasqyrojeni në profil",
   "account.follow": "Ndiqeni",
   "account.followers": "Ndjekës",
-  "account.followers.empty": "Këtë përdorues ende s’e ndjek njeri.",
+  "account.followers.empty": "Këtë përdorues ende s’e ndjek kush.",
   "account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}",
-  "account.following_counter": "{count, plural, other {{counter} të Ndjekur}}",
-  "account.follows.empty": "Ky përdorues ende s’ndjek njeri.",
+  "account.following_counter": "{count, plural, one {{counter} i Ndjekur} other {{counter} të Ndjekur}}",
+  "account.follows.empty": "Ky përdorues ende s’ndjek kënd.",
   "account.follows_you": "Ju ndjek",
   "account.hide_reblogs": "Fshih përforcime nga @{name}",
+  "account.joined": "U bë pjesë më {date}",
   "account.last_status": "Aktiv së fundi më",
   "account.link_verified_on": "Pronësia e kësaj lidhjeje qe kontrolluar më {date}",
   "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.",
@@ -45,14 +46,14 @@
   "account.unfollow": "Resht së ndjekuri",
   "account.unmute": "Ktheji zërin @{name}",
   "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}",
-  "account_note.placeholder": "S’u dha koment",
+  "account_note.placeholder": "Klikoni për të shtuar shënim",
   "alert.rate_limited.message": "Ju lutemi, riprovoni pas {retry_time, time, medium}.",
   "alert.rate_limited.title": "Shpejtësi e kufizuar",
   "alert.unexpected.message": "Ndodhi një gabim të papritur.",
   "alert.unexpected.title": "Hëm!",
-  "announcement.announcement": "Njoftim",
+  "announcement.announcement": "Lajmërim",
   "autosuggest_hashtag.per_week": "{count} për javë",
-  "boost_modal.combo": "Mund të shtypni {combo}, që kjo të anashkalohet herës tjetër",
+  "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}",
   "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.",
   "bundle_column_error.retry": "Riprovoni",
   "bundle_column_error.title": "Gabim rrjeti",
@@ -90,7 +91,7 @@
   "compose_form.lock_disclaimer": "Llogaria juaj s’është {locked}. Mund ta ndjekë cilido, për të parë postimet tuaja vetëm për ndjekësit.",
   "compose_form.lock_disclaimer.lock": "e kyçur",
   "compose_form.placeholder": "Ç’bluani në mendje?",
-  "compose_form.poll.add_option": "Shto zgjedhje",
+  "compose_form.poll.add_option": "Shtoni një zgjedhje",
   "compose_form.poll.duration": "Kohëzgjatje pyetësori",
   "compose_form.poll.option_placeholder": "Zgjedhja {number}",
   "compose_form.poll.remove_option": "Hiqe këtë zgjedhje",
@@ -98,14 +99,14 @@
   "compose_form.poll.switch_to_single": "Ndrysho votimin për të lejuar vetëm një zgjedhje",
   "compose_form.publish": "Mesazh",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Vëri shenjë medias si rezervat",
-  "compose_form.sensitive.marked": "Media është shënuar si rezervat",
-  "compose_form.sensitive.unmarked": "Media s’është shënuar si rezervat",
-  "compose_form.spoiler.marked": "Teksti është fshehur pas sinjalizimit",
-  "compose_form.spoiler.unmarked": "Teksti s’është i fshehur",
+  "compose_form.sensitive.hide": "{count, plural, one {Vëri shenjë medias si rezervat} other {Vëru shenjë mediave si rezervat}}",
+  "compose_form.sensitive.marked": "{count, plural, one {Medias i është vënë shenjë rezervat} other {Mediave u është vënë shenjë si rezervat}}",
+  "compose_form.sensitive.unmarked": "{count, plural, one {Media s’ka shenjë si rezervat} other {Mediat s’kanë shenja si rezervat}}",
+  "compose_form.spoiler.marked": "Hiq sinjalizim lënde",
+  "compose_form.spoiler.unmarked": "Shtoni sinjalizim lënde",
   "compose_form.spoiler_placeholder": "Shkruani këtu sinjalizimin tuaj",
   "confirmation_modal.cancel": "Anuloje",
-  "confirmations.block.block_and_report": "Bllokoje & Raportojeni",
+  "confirmations.block.block_and_report": "Bllokojeni & Raportojeni",
   "confirmations.block.confirm": "Bllokoje",
   "confirmations.block.message": "Jeni i sigurt se doni të bllokohet {name}?",
   "confirmations.delete.confirm": "Fshije",
@@ -139,7 +140,7 @@
   "emoji_button.custom": "Vetjak",
   "emoji_button.flags": "Flamuj",
   "emoji_button.food": "Ushqim & Pije",
-  "emoji_button.label": "Futni emotikonë",
+  "emoji_button.label": "Futni emoxhi",
   "emoji_button.nature": "Natyrë",
   "emoji_button.not_found": "No emojos!!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objekte",
@@ -159,21 +160,25 @@
   "empty_column.domain_blocks": "Ende s’ka përkatësi të fshehura.",
   "empty_column.favourited_statuses": "S’keni ende ndonjë mesazh të parapëlqyer. Kur parapëlqeni një të tillë, ai do të shfaqet këtu.",
   "empty_column.favourites": "Askush s’e ka parapëlqyer ende këtë mesazh. Kur e bën dikush, ai do të shfaqet këtu.",
+  "empty_column.follow_recommendations": "Duket se s’u prodhuan dot sugjerime për ju. Mund të provoni të kërkoni për persona që mund të njihni, ose të eksploroni hashtag-ë që janë në modë.",
   "empty_column.follow_requests": "Ende s’keni ndonjë kërkesë ndjekjeje. Kur të merrni një të tillë, do të shfaqet këtu.",
   "empty_column.hashtag": "Ende s’ka gjë nën këtë hashtag.",
   "empty_column.home": "Rrjedha juaj kohore është e zbrazët! Vizitoni {public} ose përdorni kërkimin që t’ia filloni dhe të takoni përdorues të tjerë.",
-  "empty_column.home.public_timeline": "rrjedha kohore publike",
+  "empty_column.home.suggestions": "Shihni disa sugjerime",
   "empty_column.list": "Në këtë listë ende s’ka gjë. Kur anëtarë të kësaj liste postojnë gjendje të reja, ato do të shfaqen këtu.",
   "empty_column.lists": "Ende s’keni ndonjë listë. Kur të krijoni një të tillë, do të duket këtu.",
   "empty_column.mutes": "S’keni heshtuar ende ndonjë përdorues.",
   "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.",
-  "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë",
+  "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që kjo të mbushet",
   "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.",
   "error.unexpected_crash.explanation_addons": "Kjo faqe s’u shfaq dot saktë. Ky gabim ka gjasa të jetë shkaktuar nga një shtesë shfletuesi ose një mjet përkthimi të automatizuar.",
   "error.unexpected_crash.next_steps": "Provoni të freskoni faqen. Nëse kjo s’bën punë, mundeni ende të jeni në gjendje të përdorni Mastodon-in që nga një shfletues tjetër ose nga ndonjë aplikacion origjinal prej projektit.",
   "error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.",
   "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër",
   "errors.unexpected_crash.report_issue": "Raportoni problemin",
+  "follow_recommendations.done": "U bë",
+  "follow_recommendations.heading": "Ndiqni persona prej të cilëve doni të shihni postime! Ja ca sugjerime.",
+  "follow_recommendations.lead": "Postimet prej personash që ndiqni do të shfaqen në rend kohor te prurja juaj kryesore. Mos kini frikë të bëni gabime, mund të ndalni po aq kollaj ndjekjen e dikujt, në çfarëdo kohe!",
   "follow_request.authorize": "Autorizoje",
   "follow_request.reject": "Hidhe tej",
   "follow_requests.unlocked_explanation": "Edhe pse llogaria juaj s’është e kyçur, ekipi i {domain} mendoi se mund të donit të shqyrtonit dorazi kërkesa ndjekjeje prej këtyre llogarive.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}",
   "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}",
   "intervals.full.minutes": "{number, plural, one {# minutë} other {# minuta}}",
-  "introduction.federation.action": "Pasuesi",
-  "introduction.federation.federated.headline": "Të federuara",
-  "introduction.federation.federated.text": "Postimet publike nga shërbyes të tjerë të fediversit do të shfaqen te rrjedha kohore e të federuarve.",
-  "introduction.federation.home.headline": "Vatër",
-  "introduction.federation.home.text": "Postime prej personash që ndiqni do të shfaqen te prurja juaj vatër. Mund të ndiqni këdo, në çfarëdo shërbyesi!",
-  "introduction.federation.local.headline": "Vendore",
-  "introduction.federation.local.text": "Postimet publike prej personash në të njëjtin shërbyes me ju do të shfaqen te rrjedha kohore vendore.",
-  "introduction.interactions.action": "Përfundojeni përkujdesoren!",
-  "introduction.interactions.favourite.headline": "Parapëlqejeni",
-  "introduction.interactions.favourite.text": "Duke e parapëlqyer, një mesazh mund ta ruani për më vonë dhe t’i bëni të ditur autorit se e pëlqyet.",
-  "introduction.interactions.reblog.headline": "Përforcim",
-  "introduction.interactions.reblog.text": "Mesazhet e të tjerëve mund t’i ndani me ndjekësit tuaj duke i përforcuar.",
-  "introduction.interactions.reply.headline": "Përgjigjuni",
-  "introduction.interactions.reply.text": "Mund t'u përgjigjeni mesazheve tuaja dhe atyre të personave të tjerë, çka do t’i lidhë ato tok në një bisedë.",
-  "introduction.welcome.action": "Shkojmë!",
-  "introduction.welcome.headline": "Hapat e parë",
-  "introduction.welcome.text": "Mirë se vini në fedivers! Brenda pak çastesh do të jeni në gjendje të transmetoni mesazhe dhe të bisedoni me miqtë tuaj nëpër një larmi të madhe shërbyesish. Por ky shërbyes, {domain}, është i veçantë—strehon profilin tuaj, ndaj mbajeni mend emrin e tij.",
   "keyboard_shortcuts.back": "për shkuarje mbrapsht",
   "keyboard_shortcuts.blocked": "për hapje liste përdoruesish të bllokuar",
   "keyboard_shortcuts.boost": "për përforcim",
@@ -324,9 +312,10 @@
   "notifications.column_settings.poll": "Përfundime pyetësori:",
   "notifications.column_settings.push": "Njoftime Push",
   "notifications.column_settings.reblog": "Përforcime:",
-  "notifications.column_settings.show": "Shfaq në shtylla",
+  "notifications.column_settings.show": "Shfaqi në shtylla",
   "notifications.column_settings.sound": "Luaj një tingull",
   "notifications.column_settings.status": "Mesazhe të rinj:",
+  "notifications.column_settings.unread_markers.category": "Shenja njoftimesh të palexuara",
   "notifications.filter.all": "Krejt",
   "notifications.filter.boosts": "Përforcime",
   "notifications.filter.favourites": "Të parapëlqyer",
@@ -337,11 +326,11 @@
   "notifications.grant_permission": "Akordoji leje.",
   "notifications.group": "{count}s njoftime",
   "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar",
-  "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.",
+  "notifications.permission_denied": "S’merren dot njoftime në desktop, ngaqë më herët shfletuesit i janë mohuar lejet për këtë",
   "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët",
   "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.",
   "notifications_permission_banner.enable": "Aktivizo njoftime në desktop",
-  "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.",
+  "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në desktop, pasi të jenë aktivizuar.",
   "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë",
   "picture_in_picture.restore": "Ktheje ku qe",
   "poll.closed": "I mbyllur",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 88c9df59b..61e37ba53 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Prati Vas",
   "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "Trenutno nema ništa na ovom heštegu.",
   "empty_column.home": "Vaša lajna je prazna! Posetite {public} ili koristite pretragu da počnete i upoznajete nove ljude.",
-  "empty_column.home.public_timeline": "javna lajna",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "U ovoj listi još nema ničega. Kada članovi liste objave nove statuse, oni će se pojavljivati ovde.",
   "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.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Odobri",
   "follow_request.reject": "Odbij",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "da odete nazad",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "da podržite",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Prikaži u koloni",
   "notifications.column_settings.sound": "Puštaj zvuk",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 2509c9085..24a4c832c 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -1,27 +1,28 @@
 {
-  "account.account_note_header": "Note",
+  "account.account_note_header": "Напомена",
   "account.add_or_remove_from_list": "Додај или Одстрани са листа",
   "account.badges.bot": "Бот",
   "account.badges.group": "Група",
   "account.block": "Блокирај @{name}",
   "account.block_domain": "Сакриј све са домена {domain}",
   "account.blocked": "Блокиран",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.browse_more_on_origin_server": "Погледајте још на оригиналном профилу",
   "account.cancel_follow_request": "Поништи захтеве за праћење",
   "account.direct": "Директна порука @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Прекини обавештавање за објаве корисника @{name}",
   "account.domain_blocked": "Домен сакривен",
   "account.edit_profile": "Измени профил",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Обавести ме када @{name} објави",
   "account.endorse": "Приказати на профилу",
   "account.follow": "Запрати",
   "account.followers": "Пратиоци",
   "account.followers.empty": "Тренутно нико не прати овог корисника.",
-  "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
-  "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
+  "account.followers_counter": "{count, plural, one {{counter} пратилац} few {{counter} пратиоца} other {{counter} пратилаца}}",
+  "account.following_counter": "{count, plural, one {{counter} прати} few {{counter} прати} other {{counter} прати}}",
   "account.follows.empty": "Корисник тренутно не прати никога.",
   "account.follows_you": "Прати Вас",
   "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Последњи пут активан/на",
   "account.link_verified_on": "Власништво над овом везом је проверено {date}",
   "account.locked_info": "Статус приватности овог налога је подешен на закључано. Власник ручно прегледа ко га може пратити.",
@@ -38,7 +39,7 @@
   "account.requested": "Чекам одобрење. Кликните да поништите захтев за праћење",
   "account.share": "Подели профил корисника @{name}",
   "account.show_reblogs": "Прикажи подршке од корисника @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}}",
   "account.unblock": "Одблокирај корисника @{name}",
   "account.unblock_domain": "Одблокирај домен {domain}",
   "account.unendorse": "Не истичи на профилу",
@@ -81,9 +82,9 @@
   "column_header.show_settings": "Прикажи поставке",
   "column_header.unpin": "Откачи",
   "column_subheading.settings": "Поставке",
-  "community.column_settings.local_only": "Local only",
+  "community.column_settings.local_only": "Само локално",
   "community.column_settings.media_only": "Само Медији",
-  "community.column_settings.remote_only": "Remote only",
+  "community.column_settings.remote_only": "Само удаљено",
   "compose_form.direct_message_warning": "Ова труба ће бити послата споменутим корисницима.",
   "compose_form.direct_message_warning_learn_more": "Сазнајте више",
   "compose_form.hashtag_warning": "Ова труба неће бити излистана под било којом тарабом јер је сакривена. Само јавне трубе могу бити претражене тарабом.",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Резултати претраге",
   "emoji_button.symbols": "Симболи",
   "emoji_button.travel": "Путовања и места",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Налог суспендован",
   "empty_column.account_timeline": "Овде нема труба!",
   "empty_column.account_unavailable": "Профил недоступан",
   "empty_column.blocks": "Још увек немате блокираних корисника.",
@@ -159,25 +160,29 @@
   "empty_column.domain_blocks": "Још увек нема сакривених домена.",
   "empty_column.favourited_statuses": "Још увек немате труба које су вам се свиделе. Када вам се једна свиди, појавиће се овде.",
   "empty_column.favourites": "Још увек се никоме није свидела ова труба. Када се некоме свиди, појавиће се овде.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Још увек немате захтева за праћење. Када примите захтев, појавиће се овде.",
   "empty_column.hashtag": "Тренутно нема ништа на овој означеној тараби.",
   "empty_column.home": "Ваша временска линија је празна! Посетите {public} или користите претрагу да почнете и да упознате нове људе.",
-  "empty_column.home.public_timeline": "јавна временска линија",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "У овој листи још нема ничега. Када чланови листе објаве нове статусе, они ће се појавити овде.",
   "empty_column.lists": "Још увек немате ниједну листу. Када направите једну, појавиће се овде.",
   "empty_column.mutes": "Још увек немате ућутканих корисника.",
   "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.",
   "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину",
   "error.unexpected_crash.explanation": "Због грешке у нашем коду или проблема са компатибилношћу прегледача, ова страница се није могла правилно приказати.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Ова страница се није могла правилно приказати. Ову грешку вероватно узрокују додаци прегледача или алати за аутоматско превођење.",
   "error.unexpected_crash.next_steps": "Покушајте да освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Мастодон путем другог прегледача или матичне апликације.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Покушајте да их онемогућите и освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Mastodon преко другог прегледача или матичне апликације.",
   "errors.unexpected_crash.copy_stacktrace": "Копирај \"stacktrace\" у клипборд",
   "errors.unexpected_crash.report_issue": "Пријави проблем",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Одобри",
   "follow_request.reject": "Одбиј",
-  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
-  "generic.saved": "Saved",
+  "follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} је помислило да бисте можда желели ручно да прегледате захтеве за праћење са ових налога.",
+  "generic.saved": "Сачувано",
   "getting_started.developers": "Програмери",
   "getting_started.directory": "Профил фасцикле",
   "getting_started.documentation": "Документација",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# дан} other {# дана}}",
   "intervals.full.hours": "{number, plural, one {# сат} other {# сати}}",
   "intervals.full.minutes": "{number, plural, one {# минут} other {# минута}}",
-  "introduction.federation.action": "Даље",
-  "introduction.federation.federated.headline": "Федерисано",
-  "introduction.federation.federated.text": "Јавне објаве са осталих сервера из здружених инстанци ће се појавити у федерисаној временској линији.",
-  "introduction.federation.home.headline": "Почетна",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "да одете назад",
   "keyboard_shortcuts.blocked": "да отворите листу блокираних корисника",
   "keyboard_shortcuts.boost": "да подржите",
@@ -241,7 +229,7 @@
   "keyboard_shortcuts.muted": "да отворите листу ућутканих корисника",
   "keyboard_shortcuts.my_profile": "да отворите ваш профил",
   "keyboard_shortcuts.notifications": "да отворите колону обавештења",
-  "keyboard_shortcuts.open_media": "to open media",
+  "keyboard_shortcuts.open_media": "за отварање медија",
   "keyboard_shortcuts.pinned": "да отворите листу закачених труба",
   "keyboard_shortcuts.profile": "да отворите профил аутора",
   "keyboard_shortcuts.reply": "да одговорите",
@@ -250,39 +238,39 @@
   "keyboard_shortcuts.spoilers": "to show/hide CW field",
   "keyboard_shortcuts.start": "да отворите колону \"почнимо\"",
   "keyboard_shortcuts.toggle_hidden": "да прикажете/сакријте текст иза CW-а",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "за приказивање/сакривање медија",
   "keyboard_shortcuts.toot": "да започнете скроз нову трубу",
   "keyboard_shortcuts.unfocus": "да одфокусирате/не будете више на претрази/прављењу нове трубе",
   "keyboard_shortcuts.up": "да се померите на горе у листи",
   "lightbox.close": "Затвори",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Умањи преглед слике",
+  "lightbox.expand": "Увећај преглед слике",
   "lightbox.next": "Следећи",
   "lightbox.previous": "Претходни",
   "lists.account.add": "Додај на листу",
   "lists.account.remove": "Уклони са листе",
   "lists.delete": "Обриши листу",
   "lists.edit": "Измени листу",
-  "lists.edit.submit": "Change title",
+  "lists.edit.submit": "Промени наслов",
   "lists.new.create": "Додај листу",
   "lists.new.title_placeholder": "Наслов нове листе",
   "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.list": "Чланови листе",
+  "lists.replies_policy.none": "Нико",
+  "lists.replies_policy.title": "Прикажи одговоре на:",
   "lists.search": "Претражи међу људима које пратите",
   "lists.subheading": "Ваше листе",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# нова ставка} few {# нове ставке} other {# нових ставки}}",
   "loading_indicator.label": "Учитавам...",
   "media_gallery.toggle_visible": "Укључи/искључи видљивост",
   "missing_indicator.label": "Није пронађено",
   "missing_indicator.sublabel": "Овај ресурс није пронађен",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Трајање",
   "mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Неодређен",
   "navigation_bar.apps": "Мобилне апликације",
   "navigation_bar.blocks": "Блокирани корисници",
-  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.bookmarks": "Маркери",
   "navigation_bar.community_timeline": "Локална временска линија",
   "navigation_bar.compose": "Саставите нову трубу",
   "navigation_bar.direct": "Директне поруке",
@@ -298,60 +286,61 @@
   "navigation_bar.lists": "Листе",
   "navigation_bar.logout": "Одјава",
   "navigation_bar.mutes": "Ућуткани корисници",
-  "navigation_bar.personal": "Personal",
+  "navigation_bar.personal": "Лично",
   "navigation_bar.pins": "Прикачене трубе",
   "navigation_bar.preferences": "Подешавања",
   "navigation_bar.public_timeline": "Здружена временска линија",
   "navigation_bar.security": "Безбедност",
   "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени",
   "notification.follow": "{name} Вас је запратио/ла",
-  "notification.follow_request": "{name} has requested to follow you",
+  "notification.follow_request": "{name} је затражио да Вас запрати",
   "notification.mention": "{name} Вас је поменуо/ла",
-  "notification.own_poll": "Your poll has ended",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.own_poll": "Ваша анкета је завршена",
+  "notification.poll": "Завршена је анкета у којој сте гласали",
   "notification.reblog": "{name} је подржао/ла Ваш статус",
-  "notification.status": "{name} just posted",
+  "notification.status": "{name} управо објавио",
   "notifications.clear": "Очисти обавештења",
   "notifications.clear_confirmation": "Да ли сте сигурно да трајно желите да очистите Ваша обавештења?",
   "notifications.column_settings.alert": "Обавештења на радној површини",
   "notifications.column_settings.favourite": "Омиљени:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "Прикажи све категорије",
+  "notifications.column_settings.filter_bar.category": "Трака за брзи филтер",
+  "notifications.column_settings.filter_bar.show": "Прикажи",
   "notifications.column_settings.follow": "Нови пратиоци:",
-  "notifications.column_settings.follow_request": "New follow requests:",
+  "notifications.column_settings.follow_request": "Нови захтеви за праћење:",
   "notifications.column_settings.mention": "Помињања:",
-  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.poll": "Резултати анкете:",
   "notifications.column_settings.push": "Гурај обавештења",
   "notifications.column_settings.reblog": "Подршки:",
   "notifications.column_settings.show": "Прикажи у колони",
   "notifications.column_settings.sound": "Пуштај звук",
-  "notifications.column_settings.status": "New toots:",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.column_settings.status": "Нови тутови:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "Све",
+  "notifications.filter.boosts": "Подршки",
+  "notifications.filter.favourites": "Омиљене",
+  "notifications.filter.follows": "Праћени",
+  "notifications.filter.mentions": "Помињања",
+  "notifications.filter.polls": "Резултати анкете",
+  "notifications.filter.statuses": "Ажурирања од људи које пратите",
+  "notifications.grant_permission": "Одобри дозволу.",
   "notifications.group": "{count} обавештења",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications.mark_as_read": "Означи свако обавештење као прочитано",
+  "notifications.permission_denied": "Обавештења на радној површини нису доступна због претходно одбијеног захтева за дозволом прегледача",
+  "notifications.permission_denied_alert": "Обавештења на радној површини не могу бити омогућена, јер је дозвола прегледача раније била одбијена",
+  "notifications.permission_required": "Обавештења на радној површини нису доступна јер потребна дозвола није додељена.",
+  "notifications_permission_banner.enable": "Омогућити обавештења на радној површини",
   "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "notifications_permission_banner.title": "Ништа не пропустите",
+  "picture_in_picture.restore": "Врати то назад",
+  "poll.closed": "Затворено",
+  "poll.refresh": "Освежи",
+  "poll.total_people": "{count, plural, one {# особа} few {# особе} other {# особа}}",
+  "poll.total_votes": "{count, plural, one {# гласање} few {# гласања} other {# гласања}}",
+  "poll.vote": "Гласајте",
+  "poll.voted": "Гласали сте за овај одговор",
+  "poll_button.add_poll": "Додај анкету",
+  "poll_button.remove_poll": "Уклони анкету",
   "privacy.change": "Подеси статус приватности",
   "privacy.direct.long": "Објави само корисницима који су поменути",
   "privacy.direct.short": "Директно",
@@ -361,15 +350,15 @@
   "privacy.public.short": "Јавно",
   "privacy.unlisted.long": "Не објављуј на јавним временским линијама",
   "privacy.unlisted.short": "Неизлистано",
-  "refresh": "Refresh",
+  "refresh": "Освежи",
   "regeneration_indicator.label": "Учитавање…",
   "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
+  "relative_time.days": "{number}д",
+  "relative_time.hours": "{number}х",
   "relative_time.just_now": "сада",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
-  "relative_time.today": "today",
+  "relative_time.minutes": "{number}м",
+  "relative_time.seconds": "{number}с",
+  "relative_time.today": "данас",
   "reply_indicator.cancel": "Поништи",
   "report.forward": "Проследити {target}",
   "report.forward_hint": "Налог је са другог сервера. Послати анонимну копију пријаве и тамо?",
@@ -428,7 +417,7 @@
   "status.show_more": "Прикажи више",
   "status.show_more_all": "Прикажи више за све",
   "status.show_thread": "Show thread",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "Није доступно",
   "status.unmute_conversation": "Укључи преписку",
   "status.unpin": "Откачи са профила",
   "suggestions.dismiss": "Dismiss suggestion",
@@ -438,43 +427,43 @@
   "tabs_bar.local_timeline": "Локално",
   "tabs_bar.notifications": "Обавештења",
   "tabs_bar.search": "Претрага",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.days": "Остало {number, plural, one {# дан} few {# дана} other {# дана}}",
+  "time_remaining.hours": "Остало {number, plural, one {# сат} few {# сата} other {# сати}}",
+  "time_remaining.minutes": "Остало {number, plural, one {# минут} few {# минута} other {# минута}}",
   "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
-  "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
-  "timeline_hint.resources.followers": "Followers",
-  "timeline_hint.resources.follows": "Follows",
-  "timeline_hint.resources.statuses": "Older toots",
+  "time_remaining.seconds": "Остало {number, plural, one {# секунд} few {# секунде} other {# секунди}}",
+  "timeline_hint.remote_resource_not_displayed": "{resource} са других сервера се не приказују.",
+  "timeline_hint.resources.followers": "Пратиоци",
+  "timeline_hint.resources.follows": "Праћени",
+  "timeline_hint.resources.statuses": "Старији тут",
   "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
   "trends.trending_now": "Trending now",
   "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
-  "units.short.billion": "{count}B",
-  "units.short.million": "{count}M",
-  "units.short.thousand": "{count}K",
+  "units.short.billion": "{count}Б",
+  "units.short.million": "{count}М",
+  "units.short.thousand": "{count}К",
   "upload_area.title": "Превуците овде да отпремите",
   "upload_button.label": "Додај мултимедију (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "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": "Опишите за особе са оштећеним видом",
-  "upload_form.edit": "Edit",
-  "upload_form.thumbnail": "Change thumbnail",
+  "upload_form.edit": "Уреди",
+  "upload_form.thumbnail": "Промени приказ слика",
   "upload_form.undo": "Обриши",
   "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.choose_image": "Choose image",
+  "upload_modal.analyzing_picture": "Анализа слике…",
+  "upload_modal.apply": "Примени",
+  "upload_modal.choose_image": "Изабери слику",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
+  "upload_modal.edit_media": "Уреди милтимедијум",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preparing_ocr": "Preparing OCR…",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.preview_label": "Преглед ({ratio})",
   "upload_progress.label": "Отпремам...",
   "video.close": "Затвори видео",
-  "video.download": "Download file",
+  "video.download": "Преузимање датотеке",
   "video.exit_fullscreen": "Напусти цео екран",
   "video.expand": "Прошири видео",
   "video.fullscreen": "Цео екран",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index a0fc4a4f3..fa336579a 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Denna användare följer inte någon än.",
   "account.follows_you": "Följer dig",
   "account.hide_reblogs": "Dölj knuffar från @{name}",
+  "account.joined": "Gick med {date}",
   "account.last_status": "Senast aktiv",
   "account.link_verified_on": "Ägarskap för detta konto kontrollerades den {date}",
   "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.",
@@ -38,7 +39,7 @@
   "account.requested": "Inväntar godkännande. Klicka för att avbryta följarförfrågan",
   "account.share": "Dela @{name}s profil",
   "account.show_reblogs": "Visa knuffar från @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
+  "account.statuses_counter": "{count, plural,one {{counter} Tuta} other {{counter} Tutor}}",
   "account.unblock": "Avblockera @{name}",
   "account.unblock_domain": "Sluta dölja {domain}",
   "account.unendorse": "Visa inte på profil",
@@ -108,9 +109,9 @@
   "confirmations.block.block_and_report": "Blockera & rapportera",
   "confirmations.block.confirm": "Blockera",
   "confirmations.block.message": "Är du säker på att du vill blockera {name}?",
-  "confirmations.delete.confirm": "Ta bort",
-  "confirmations.delete.message": "Är du säker på att du vill ta bort denna status?",
-  "confirmations.delete_list.confirm": "Ta bort",
+  "confirmations.delete.confirm": "Radera",
+  "confirmations.delete.message": "Är du säker på att du vill radera denna status?",
+  "confirmations.delete_list.confirm": "Radera",
   "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
   "confirmations.domain_block.confirm": "Dölj hela domänen",
   "confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer inte se innehåll från den domänen i den allmänna tidslinjen eller i dina aviseringar. Dina följare från den domänen komer att tas bort.",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Sökresultat",
   "emoji_button.symbols": "Symboler",
   "emoji_button.travel": "Resor & platser",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Kontot är avstängt",
   "empty_column.account_timeline": "Inga inlägg här!",
   "empty_column.account_unavailable": "Profilen ej tillgänglig",
   "empty_column.blocks": "Du har ännu ej blockerat några användare.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.",
   "empty_column.favourited_statuses": "Du har inga favoritmarkerade toots än. När du favoritmarkerar en kommer den visas här.",
   "empty_column.favourites": "Ingen har favoritmarkerat den här tooten än. När någon gör det kommer den visas här.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.",
   "empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
   "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.",
-  "empty_column.home.public_timeline": "den publika tidslinjen",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.",
   "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.",
   "empty_column.mutes": "Du har ännu inte tystat några användare.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.",
   "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp",
   "errors.unexpected_crash.report_issue": "Rapportera problem",
+  "follow_recommendations.done": "Klar",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Godkänn",
   "follow_request.reject": "Avvisa",
   "follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain} personalen att du kanske vill granska dessa följares förfrågningar manuellt.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}",
   "intervals.full.hours": "{number, plural, one {# timme} other {# timmar}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minuter}}",
-  "introduction.federation.action": "Nästa",
-  "introduction.federation.federated.headline": "Federerad",
-  "introduction.federation.federated.text": "Publika inlägg från andra servrar i servernätverket visas i den förenade tidslinjen.",
-  "introduction.federation.home.headline": "Hem",
-  "introduction.federation.home.text": "Inlägg från personer du följer kommer att visas i din hemtidlinje. Du kan följa vem du vill på vald server!",
-  "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Publika inlägg från personer på samma server som du kommer att visas på den lokala tidslinjen.",
-  "introduction.interactions.action": "Slutför introduktionsguide!",
-  "introduction.interactions.favourite.headline": "Favorit",
-  "introduction.interactions.favourite.text": "Du kan spara en tut till senare, och visa författaren att du gillade den genom att göra den till favorit.",
-  "introduction.interactions.reblog.headline": "Knuffa",
-  "introduction.interactions.reblog.text": "Du kan dela andra personers tutar med dina följare genom att knuffa dem.",
-  "introduction.interactions.reply.headline": "Svara",
-  "introduction.interactions.reply.text": "Du kan besvara andra personers och dina egna tutar, vilket kommer att koppla ihop dem i en konversation.",
-  "introduction.welcome.action": "Sätt igång!",
-  "introduction.welcome.headline": "Första stegen",
-  "introduction.welcome.text": "Välkommen till fediverse! Om några ögonblick kommer du kunna sända ut meddelanden och prata med dina vänner över en mängd servrar. Men den här servern, {domain}, är speciell — den är hem åt din profil, så kom ihåg vad den heter.",
   "keyboard_shortcuts.back": "för att gå bakåt",
   "keyboard_shortcuts.blocked": "för att öppna listan över blockerade användare",
   "keyboard_shortcuts.boost": "för att knuffa",
@@ -268,8 +256,8 @@
   "lists.new.title_placeholder": "Ny listrubrik",
   "lists.replies_policy.followed": "Any followed user",
   "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.none": "Ingen",
+  "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}}",
@@ -277,9 +265,9 @@
   "media_gallery.toggle_visible": "Växla synlighet",
   "missing_indicator.label": "Hittades inte",
   "missing_indicator.sublabel": "Den här resursen kunde inte hittas",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Varaktighet",
   "mute_modal.hide_notifications": "Dölj aviseringar från denna användare?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Obestämt",
   "navigation_bar.apps": "Mobilappar",
   "navigation_bar.blocks": "Blockerade användare",
   "navigation_bar.bookmarks": "Bokmärken",
@@ -310,7 +298,7 @@
   "notification.own_poll": "Din röstning har avslutats",
   "notification.poll": "En omröstning du röstat i har avslutats",
   "notification.reblog": "{name} knuffade din status",
-  "notification.status": "{name} just posted",
+  "notification.status": "{name} skrev just",
   "notifications.clear": "Rensa aviseringar",
   "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?",
   "notifications.column_settings.alert": "Skrivbordsaviseringar",
@@ -326,24 +314,25 @@
   "notifications.column_settings.reblog": "Knuffar:",
   "notifications.column_settings.show": "Visa i kolumnen",
   "notifications.column_settings.sound": "Spela upp ljud",
-  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.status": "Nya tutor:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "Alla",
   "notifications.filter.boosts": "Knuffar",
   "notifications.filter.favourites": "Favoriter",
   "notifications.filter.follows": "Följer",
   "notifications.filter.mentions": "Omnämningar",
   "notifications.filter.polls": "Omröstningsresultat",
-  "notifications.filter.statuses": "Updates from people you follow",
+  "notifications.filter.statuses": "Uppdateringar från personer som du följer",
   "notifications.grant_permission": "Grant permission.",
   "notifications.group": "{count} aviseringar",
-  "notifications.mark_as_read": "Mark every notification as read",
+  "notifications.mark_as_read": "Markera varje avisering som läst",
   "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
   "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
   "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
+  "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar",
   "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications_permission_banner.title": "Missa aldrig något",
+  "picture_in_picture.restore": "Lägg tillbaka det",
   "poll.closed": "Stängd",
   "poll.refresh": "Ladda om",
   "poll.total_people": "{persons, plural, one {# person} other {# personer}}",
@@ -380,13 +369,13 @@
   "search.placeholder": "Sök",
   "search_popout.search_format": "Avancerat sökformat",
   "search_popout.tips.full_text": "Enkel text returnerar statusar där du har skrivit, favoriserat, knuffat eller nämnts samt med matchande användarnamn, visningsnamn och hashtags.",
-  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.hashtag": "hash-tagg",
   "search_popout.tips.status": "status",
   "search_popout.tips.text": "Enkel text returnerar matchande visningsnamn, användarnamn och hashtags",
   "search_popout.tips.user": "användare",
   "search_results.accounts": "Människor",
   "search_results.hashtags": "Hashtaggar",
-  "search_results.statuses": "Toots",
+  "search_results.statuses": "Tutor",
   "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.",
   "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
   "status.admin_account": "Öppet modereringsgränssnitt för @{name}",
@@ -396,7 +385,7 @@
   "status.cancel_reblog_private": "Ta bort knuff",
   "status.cannot_reblog": "Detta inlägg kan inte knuffas",
   "status.copy": "Kopiera länk till status",
-  "status.delete": "Ta bort",
+  "status.delete": "Radera",
   "status.detailed_status": "Detaljerad samtalsvy",
   "status.direct": "Direktmeddela @{name}",
   "status.embed": "Bädda in",
@@ -461,7 +450,7 @@
   "upload_form.description": "Beskriv för synskadade",
   "upload_form.edit": "Beskriv",
   "upload_form.thumbnail": "Ändra miniatyr",
-  "upload_form.undo": "Ta bort",
+  "upload_form.undo": "Radera",
   "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning",
   "upload_modal.analyzing_picture": "Analyserar bild…",
   "upload_modal.apply": "Verkställ",
@@ -470,7 +459,7 @@
   "upload_modal.detect_text": "Upptäck bildens text",
   "upload_modal.edit_media": "Redigera meida",
   "upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "Förbereder OCR…",
   "upload_modal.preview_label": "Förhandstitt ({ratio})",
   "upload_progress.label": "Laddar upp...",
   "video.close": "Stäng video",
diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json
index 70f6ab152..1b311b04d 100644
--- a/app/javascript/mastodon/locales/szl.json
+++ b/app/javascript/mastodon/locales/szl.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no blocked domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 8f5f06cc4..3d0d80e37 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.",
   "account.follows_you": "உங்களைப் பின்தொடர்கிறார்",
   "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "கடைசி செயல்பாடு",
   "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}",
   "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "தடுக்கப்பட்டக் களங்கள் இதுவரை இல்லை.",
   "empty_column.favourited_statuses": "உங்களுக்குப் பிடித்த டூட்டுகள் இதுவரை இல்லை. ஒரு டூட்டில் நீங்கள் விருப்பக்குறி இட்டால், அது இங்கே காண்பிக்கப்படும்.",
   "empty_column.favourites": "இந்த டூட்டில் இதுவரை யாரும் விருப்பக்குறி இடவில்லை. யாரேனும் விரும்பினால், அது இங்கே காண்பிக்கப்படும்.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "வாசகர் கோரிக்கைகள் இதுவரை ஏதும் இல்லை. யாரேனும் கோரிக்கையை அனுப்பினால், அது இங்கே காண்பிக்கப்படும்.",
   "empty_column.hashtag": "இந்த சிட்டையில் இதுவரை ஏதும் இல்லை.",
   "empty_column.home": "உங்கள் மாஸ்டடான் வீட்டில் யாரும் இல்லை. {public} -இல் சென்று பார்க்கவும், அல்லது தேடல் கருவியைப் பயன்படுத்திப் பிற பயனர்களைக் கண்டடையவும்.",
-  "empty_column.home.public_timeline": "பொது டைம்லைன்",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "இந்தப் பட்டியலில் இதுவரை ஏதும் இல்லை. இப்பட்டியலின் உறுப்பினர்கள் புதிய டூட்டுகளை இட்டால். அவை இங்கே காண்பிக்கப்படும்.",
   "empty_column.lists": "இதுவரை நீங்கள் எந்தப் பட்டியலையும் உருவாக்கவில்லை. உருவாக்கினால், அது இங்கே காண்பிக்கப்படும்.",
   "empty_column.mutes": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு",
   "errors.unexpected_crash.report_issue": "புகாரளி",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "அனுமதியளி",
   "follow_request.reject": "நிராகரி",
   "follow_requests.unlocked_explanation": "உங்கள் கணக்கு பூட்டப்படவில்லை என்றாலும், இந்தக் கணக்குகளிலிருந்து உங்களைப் பின்தொடர விரும்பும் கோரிக்கைகளை நீங்கள் பரீசீலிப்பது நலம் என்று {domain} ஊழியர் எண்ணுகிறார்.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# நாள்} other {# நாட்கள்}}",
   "intervals.full.hours": "{number, plural, one {# மணிநேரம்} other {# மணிநேரங்கள்}}",
   "intervals.full.minutes": "{number, plural, one {# நிமிடம்} other {# நிமிடங்கள்}}",
-  "introduction.federation.action": "அடுத்து",
-  "introduction.federation.federated.headline": "கூட்டமைந்த",
-  "introduction.federation.federated.text": "ஃபெடிவெர்சின் மற்ற சர்வர்களிலிருந்து இடப்படும் பொதுப் பதிவுகள் இந்த மாஸ்டடான் ஆலமரத்தில் தோன்றும்.",
-  "introduction.federation.home.headline": "முகப்பு",
-  "introduction.federation.home.text": "நீங்கள் பின்தொடரும் நபர்களின் இடுகைகள் உங்கள் மாஸ்டடான் வீட்டில் தோன்றும். உங்களால் எந்த சர்வரில் உள்ள எவரையும் பின்பற்ற முடியும்!",
-  "introduction.federation.local.headline": "அருகாமை",
-  "introduction.federation.local.text": "உங்கள் சர்வரில் இருக்கும் மற்ற நபர்களின் பொதுப் பதிவுகள் இந்த மாஸ்டடான் முச்சந்தியில் தோன்றும்.",
-  "introduction.interactions.action": "பயிற்சியை நிறைவு செய்!",
-  "introduction.interactions.favourite.headline": "விருப்பம்",
-  "introduction.interactions.favourite.text": "ஒரு டூட்டில் விருப்பக்குறி இடுவதன் மூலம் உங்கள் விருப்பத்தை அதை எழுதியவருக்குத் தெரியப்படுத்த முடியும், மேலும் அந்த டூட்டை மறுவாசிப்பிற்காக சேமிக்கமுடியும்.",
-  "introduction.interactions.reblog.headline": "பகிர்",
-  "introduction.interactions.reblog.text": "மற்றவர்களின் டூட்டுகளைப் பகிர்வதன் மூலம் அவற்றை உங்கள் வாசகர்களுக்குக் காண்பிக்க முடியும்.",
-  "introduction.interactions.reply.headline": "மறுமொழி",
-  "introduction.interactions.reply.text": "உங்களால் மற்றவர்களின் டூட்டுகளிலும் உங்கள் டூட்டுகளிலும் மறுமொழி இட முடியும். அவை ஒன்றோடு ஒன்றாக சங்கிலிபோல் பின்னப்பட்டு உரையாடலாக மாறும்.",
-  "introduction.welcome.action": "வாருங்கள் துவங்கலாம்!",
-  "introduction.welcome.headline": "முதற்படிகள்",
-  "introduction.welcome.text": "ஃபெடிவெர்ஸ் உங்களை அன்புடன் வரவேற்கிறது! இன்னும் சில நிமிடங்களில் உங்களால் செய்திகளை உலகிற்குச் சொல்லமுடியும். பல்வேறு சர்வர்களில் இருக்கும் உங்கள் நண்பர்களோடு பேச முடியும். ஆனால், இந்த சர்வர் {domain} மிகவும் தனித்துவமானது, ஏனெனில் உங்கள் பக்கத்தை இதுதான் வழங்குகிறது, எனவே இதன் பெயரை நினைவில் கொள்ளுங்கள்.",
   "keyboard_shortcuts.back": "பின் செல்ல",
   "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்கள் பட்டியலைத் திறக்க",
   "keyboard_shortcuts.boost": "பகிர",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "பத்தியில் காண்பி",
   "notifications.column_settings.sound": "ஒலி விளையாட",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "எல்லா",
   "notifications.filter.boosts": "மதிப்பை உயர்த்து",
   "notifications.filter.favourites": "விருப்பத்துக்குகந்த",
diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json
index 70f6ab152..c2ce475b8 100644
--- a/app/javascript/mastodon/locales/tai.json
+++ b/app/javascript/mastodon/locales/tai.json
@@ -22,10 +22,11 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
-  "account.media": "Media",
+  "account.media": "Mûi-thé",
   "account.mention": "Mention @{name}",
   "account.moved_to": "{name} has moved to:",
   "account.mute": "Mute @{name}",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no blocked domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 994682a67..306c1ec9f 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.",
   "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు",
   "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది",
   "account.locked_info": "ఈ ఖాతా యొక్క గోప్యత స్థితి లాక్ చేయబడి వుంది. ఈ ఖాతాను ఎవరు అనుసరించవచ్చో యజమానే నిర్ణయం తీసుకుంటారు.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "దాచబడిన డొమైన్లు ఇంకా ఏమీ లేవు.",
   "empty_column.favourited_statuses": "మీకు ఇష్టపడిన టూట్లు ఇంకా ఎమీ లేవు. మీరు ఒకదానిని ఇష్టపడినప్పుడు, అది ఇక్కడ కనిపిస్తుంది.",
   "empty_column.favourites": "ఈ టూట్ను ఇంకా ఎవరూ ఇష్టపడలేదు. ఎవరైనా అలా చేసినప్పుడు, అవి ఇక్కడ కనబడతాయి.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "మీకు ఇంకా ఫాలో రిక్వెస్టులు ఏమీ రాలేదు. మీకు ఒకటి రాగానే, అది ఇక్కడ కనబడుతుంది.",
   "empty_column.hashtag": "ఇంకా హాష్ ట్యాగ్లో ఏమీ లేదు.",
   "empty_column.home": "మీ హోమ్ కాలక్రమం ఖాళీగా ఉంది! {Public} ను సందర్శించండి లేదా ఇతర వినియోగదారులను కలుసుకోవడానికి మరియు అన్వేషణ కోసం శోధనను ఉపయోగించండి.",
-  "empty_column.home.public_timeline": "ప్రజా కాలక్రమం",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "ఇంకా ఈ జాబితాలో ఏదీ లేదు. ఈ జాబితాలోని సభ్యులు కొత్త స్టేటస్ లను పోస్ట్ చేసినప్పుడు, అవి ఇక్కడ కనిపిస్తాయి.",
   "empty_column.lists": "మీకు ఇంకా జాబితాలు ఏమీ లేవు. మీరు ఒకటి సృష్టించగానే, అది ఇక్కడ కనబడుతుంది.",
   "empty_column.mutes": "మీరు ఇంకా ఏ వినియోగదారులనూ మ్యూట్ చేయలేదు.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "అనుమతించు",
   "follow_request.reject": "తిరస్కరించు",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "తరువాత",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "ఫెడివర్స్ లోని ఇతర సర్వర్లకు చెందిన పబ్లిక్ టూట్లు ఫెడరేటెడ్ టైంలైన్ లో కనిపిస్తాయి.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "మీరు అనుసరిస్తున్న ఖాతాల టూట్లు హోం ఫీడ్ లో కనిపిస్తాయి. ఏ సర్వర్లో ఎవరినైనా మీరు అనుసరించవచ్చు!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "ఈ సర్వరుకు చెందిన ఖాతాల పబ్లిక్ టూట్లు లోకల్ టైంలైన్ లో కనిపిస్తాయి.",
-  "introduction.interactions.action": "బోధనను ముగించు!",
-  "introduction.interactions.favourite.headline": "ఇష్టం",
-  "introduction.interactions.favourite.text": "మీరు ఏదైనా టూట్‌ను భవిష్యత్తు కోసం దాచుకోవచ్చు మరియు మీకు ఆ టూట్ నచ్చినందని తెలియజేయడం కోసం \"ఇష్టం\" ను నొక్కి రచయితకు తెలియజేయవచ్చు.",
-  "introduction.interactions.reblog.headline": "బూస్ట్",
-  "introduction.interactions.reblog.text": "వేరే వ్యక్తుల టూట్లను బూస్ట్ చేయడం ద్వారా ఆ టూట్‌ను మీ అనుచరులతో పంచుకోవచ్చు.",
-  "introduction.interactions.reply.headline": "ప్రత్యుత్తరం",
-  "introduction.interactions.reply.text": "మీరు ఇతర వ్యక్తుల టూట్లకు, మీ స్వంత టూత్లకు ప్రత్యుత్తరం ఇవ్వడం వల్ల గొలుసు చర్చ ప్రారంభమవుతుంది.",
-  "introduction.welcome.action": "ఇక ప్రారంభించు!",
-  "introduction.welcome.headline": "మొదటి మెట్లు",
-  "introduction.welcome.text": "ఫెడివర్స్ కు స్వాగతం! మరి కొంతసేపట్లో మీరు సందేశాలను ప్రసారం చేయవచ్చు మరియు వేర్వేరు సర్వర్లలో వున్న మీ స్నేహితులతో మాట్లాడవచ్చు. కానీ ఈ సర్వరు, {domain}, ప్రత్యేకమైనది - ఇది మీ ప్రొఫైలును హోస్టు చేస్తుంది, కాబట్టి ఈ సర్వరు పేరును గుర్తుంచుకోండి.",
   "keyboard_shortcuts.back": "వెనక్కి తిరిగి వెళ్ళడానికి",
   "keyboard_shortcuts.blocked": "బ్లాక్ చేయబడిన వినియోగదారుల జాబితాను తెరవడానికి",
   "keyboard_shortcuts.boost": "బూస్ట్ చేయడానికి",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "నిలువు వరుసలో చూపు",
   "notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "అన్నీ",
   "notifications.filter.boosts": "బూస్ట్లు",
   "notifications.filter.favourites": "ఇష్టాలు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 30ec26809..fa2aef25a 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
   "account.follows_you": "ติดตามคุณ",
   "account.hide_reblogs": "ซ่อนการดันจาก @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "ใช้งานล่าสุด",
   "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}",
   "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง",
@@ -101,8 +102,8 @@
   "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}",
   "compose_form.sensitive.marked": "{count, plural, other {มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}",
   "compose_form.sensitive.unmarked": "{count, plural, other {ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}",
-  "compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน",
-  "compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ",
+  "compose_form.spoiler.marked": "เอาคำเตือนเนื้อหาออก",
+  "compose_form.spoiler.unmarked": "เพิ่มคำเตือนเนื้อหา",
   "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่",
   "confirmation_modal.cancel": "ยกเลิก",
   "confirmations.block.block_and_report": "ปิดกั้นแล้วรายงาน",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "ยังไม่มีโดเมนที่ปิดกั้นอยู่",
   "empty_column.favourited_statuses": "คุณยังไม่มีโพสต์ที่ชื่นชอบใด ๆ เมื่อคุณชื่นชอบโพสต์ โพสต์จะปรากฏที่นี่",
   "empty_column.favourites": "ยังไม่มีใครชื่นชอบโพสต์นี้ เมื่อใครสักคนชื่นชอบ เขาจะปรากฏที่นี่",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "คุณยังไม่มีคำขอติดตามใด ๆ เมื่อคุณได้รับคำขอ คำขอจะปรากฏที่นี่",
   "empty_column.hashtag": "ยังไม่มีสิ่งใดในแฮชแท็กนี้",
   "empty_column.home": "เส้นเวลาหน้าแรกของคุณว่างเปล่า! เยี่ยมชม {public} หรือใช้การค้นหาเพื่อเริ่มต้นใช้งานและพบปะผู้ใช้อื่น ๆ",
-  "empty_column.home.public_timeline": "เส้นเวลาสาธารณะ",
+  "empty_column.home.suggestions": "ดูข้อเสนอแนะบางอย่าง",
   "empty_column.list": "ยังไม่มีสิ่งใดในรายการนี้ เมื่อสมาชิกของรายการนี้โพสต์โพสต์ใหม่ โพสต์จะปรากฏที่นี่",
   "empty_column.lists": "คุณยังไม่มีรายการใด ๆ เมื่อคุณสร้างรายการ รายการจะปรากฏที่นี่",
   "empty_column.mutes": "คุณยังไม่ได้ซ่อนผู้ใช้ใด ๆ",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป",
   "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
   "errors.unexpected_crash.report_issue": "รายงานปัญหา",
+  "follow_recommendations.done": "เสร็จสิ้น",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "อนุญาต",
   "follow_request.reject": "ปฏิเสธ",
   "follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, other {# วัน}}",
   "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}",
   "intervals.full.minutes": "{number, plural, other {# นาที}}",
-  "introduction.federation.action": "ถัดไป",
-  "introduction.federation.federated.headline": "ที่ติดต่อกับภายนอก",
-  "introduction.federation.federated.text": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของเฟดิเวิร์สจะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก",
-  "introduction.federation.home.headline": "หน้าแรก",
-  "introduction.federation.home.text": "โพสต์จากผู้คนที่คุณติดตามจะปรากฏในฟีดหน้าแรกของคุณ คุณสามารถติดตามใครก็ตามในเซิร์ฟเวอร์ใดก็ตาม!",
-  "introduction.federation.local.headline": "ในเซิร์ฟเวอร์",
-  "introduction.federation.local.text": "โพสต์สาธารณะจากผู้คนในเซิร์ฟเวอร์เดียวกันกับคุณจะปรากฏในเส้นเวลาในเซิร์ฟเวอร์",
-  "introduction.interactions.action": "เสร็จสิ้นบทช่วยสอน!",
-  "introduction.interactions.favourite.headline": "ชื่นชอบ",
-  "introduction.interactions.favourite.text": "คุณสามารถบันทึกโพสต์ไว้ในภายหลังและแจ้งให้ผู้สร้างทราบว่าคุณชอบโพสต์โดยการชื่นชอบโพสต์",
-  "introduction.interactions.reblog.headline": "ดัน",
-  "introduction.interactions.reblog.text": "คุณสามารถแบ่งปันโพสต์ของผู้อื่นกับผู้ติดตามของคุณโดยการดันโพสต์",
-  "introduction.interactions.reply.headline": "ตอบกลับ",
-  "introduction.interactions.reply.text": "คุณสามารถตอบกลับโพสต์ของผู้อื่นและของคุณเอง ซึ่งจะเชื่อมโยงโพสต์เข้าด้วยกันในการสนทนา",
-  "introduction.welcome.action": "ไปกันเลย!",
-  "introduction.welcome.headline": "ขั้นตอนแรก",
-  "introduction.welcome.text": "ยินดีต้อนรับสู่เฟดิเวิร์ส! ในอีกสักครู่ คุณจะสามารถออกอากาศข้อความและพูดคุยกับเพื่อน ๆ ของคุณผ่านเซิร์ฟเวอร์ที่หลากหลาย แต่เซิร์ฟเวอร์นี้ {domain} มีความพิเศษคือเป็นเซิร์ฟเวอร์ที่โฮสต์โปรไฟล์ของคุณ ดังนั้นจดจำชื่อของเซิร์ฟเวอร์ไว้",
   "keyboard_shortcuts.back": "เพื่อนำทางย้อนกลับ",
   "keyboard_shortcuts.blocked": "เพื่อเปิดรายการผู้ใช้ที่ปิดกั้นอยู่",
   "keyboard_shortcuts.boost": "เพื่อดัน",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "แสดงในคอลัมน์",
   "notifications.column_settings.sound": "เล่นเสียง",
   "notifications.column_settings.status": "โพสต์ใหม่:",
+  "notifications.column_settings.unread_markers.category": "เครื่องหมายการแจ้งเตือนที่ยังไม่ได้อ่าน",
   "notifications.filter.all": "ทั้งหมด",
   "notifications.filter.boosts": "การดัน",
   "notifications.filter.favourites": "รายการโปรด",
@@ -334,7 +323,7 @@
   "notifications.filter.mentions": "การกล่าวถึง",
   "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น",
   "notifications.filter.statuses": "การอัปเดตจากผู้คนที่คุณติดตาม",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.grant_permission": "ให้สิทธิอนุญาต",
   "notifications.group": "{count} การแจ้งเตือน",
   "notifications.mark_as_read": "ทำเครื่องหมายทุกการแจ้งเตือนว่าอ่านแล้ว",
   "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
@@ -352,7 +341,7 @@
   "poll.voted": "คุณได้ลงคะแนนให้กับคำตอบนี้",
   "poll_button.add_poll": "เพิ่มการสำรวจความคิดเห็น",
   "poll_button.remove_poll": "เอาการสำรวจความคิดเห็นออก",
-  "privacy.change": "ปรับเปลี่ยนความเป็นส่วนตัวของโพสต์",
+  "privacy.change": "เปลี่ยนความเป็นส่วนตัวของโพสต์",
   "privacy.direct.long": "ปรากฏแก่ผู้ใช้ที่กล่าวถึงเท่านั้น",
   "privacy.direct.short": "โดยตรง",
   "privacy.private.long": "ปรากฏแก่ผู้ติดตามเท่านั้น",
@@ -431,7 +420,7 @@
   "status.uncached_media_warning": "ไม่พร้อมใช้งาน",
   "status.unmute_conversation": "เลิกซ่อนการสนทนา",
   "status.unpin": "ถอนหมุดจากโปรไฟล์",
-  "suggestions.dismiss": "ยกเลิกข้อเสนอแนะ",
+  "suggestions.dismiss": "ปิดข้อเสนอแนะ",
   "suggestions.header": "คุณอาจสนใจ…",
   "tabs_bar.federated_timeline": "ที่ติดต่อกับภายนอก",
   "tabs_bar.home": "หน้าแรก",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 1d56d169c..ec97545e7 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.",
   "account.follows_you": "Seni takip ediyor",
   "account.hide_reblogs": "@{name} kişisinin boostlarını gizle",
+  "account.joined": "{date} tarihinde katıldı",
   "account.last_status": "Son etkinlik",
   "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi",
   "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceliyor.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.",
   "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.",
   "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.",
+  "empty_column.follow_recommendations": "Öyle görünüyor ki sizin için hiçbir öneri oluşturulamıyor. Tanıdığınız kişileri aramak için aramayı kullanabilir veya öne çıkanlara bakabilirsiniz.",
   "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.",
   "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.",
   "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.",
-  "empty_column.home.public_timeline": "herkese açık zaman tüneli",
+  "empty_column.home.suggestions": "Bazı önerileri görün",
   "empty_column.list": "Bu listede henüz hiçbir şey yok.",
   "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.",
   "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.",
   "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala",
   "errors.unexpected_crash.report_issue": "Sorun bildir",
+  "follow_recommendations.done": "Tamam",
+  "follow_recommendations.heading": "Gönderilerini görmek isteyeceğiniz kişileri takip edin! Burada bazı öneriler bulabilirsiniz.",
+  "follow_recommendations.lead": "Takip ettiğiniz kişilerin gönderileri anasayfa akışınızda kronolojik sırada görünmeye devam edecek. Hata yapmaktan çekinmeyin, kişileri istediğiniz anda kolayca takipten çıkabilirsiniz!",
   "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ü.",
@@ -203,23 +208,6 @@
   "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}}",
-  "introduction.federation.action": "İleri",
-  "introduction.federation.federated.headline": "Birleşik",
-  "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.",
-  "introduction.federation.home.headline": "Ana Sayfa",
-  "introduction.federation.home.text": "Takip ettiğiniz kişilerin yayınları ana sayfada gösterilecek. Herhangi bir sunucudaki herkesi takip edebilirsiniz!",
-  "introduction.federation.local.headline": "Yerel",
-  "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.",
-  "introduction.interactions.action": "Öğreticiyi bitir!",
-  "introduction.interactions.favourite.headline": "Beğeni",
-  "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.",
-  "introduction.interactions.reblog.headline": "Boostla",
-  "introduction.interactions.reblog.text": "Başkalarının tootlarını boostlayarak onları kendi takipçilerinizle paylaşabillirsiniz.",
-  "introduction.interactions.reply.headline": "Yanıt",
-  "introduction.interactions.reply.text": "Başkalarının ve kendinizin tootlarına cevap verebilirsiniz. Bu, onları bir konuşmada zincirli bir şekilde gösterecektir.",
-  "introduction.welcome.action": "Hadi başlayalım!",
-  "introduction.welcome.headline": "İlk adımlar",
-  "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).",
   "keyboard_shortcuts.back": "geriye gitmek için",
   "keyboard_shortcuts.blocked": "engellenen kullanıcılar listesini açmak için",
   "keyboard_shortcuts.boost": "boostlamak için",
@@ -266,9 +254,9 @@
   "lists.edit.submit": "Başlığı değiştir",
   "lists.new.create": "Liste ekle",
   "lists.new.title_placeholder": "Yeni liste başlığı",
-  "lists.replies_policy.followed": "Any followed user",
+  "lists.replies_policy.followed": "Takip edilen herhangi bir kullanıcı",
   "lists.replies_policy.list": "Listenin üyeleri",
-  "lists.replies_policy.none": "No one",
+  "lists.replies_policy.none": "Hiç kimse",
   "lists.replies_policy.title": "Yanıtları göster:",
   "lists.search": "Takip ettiğiniz kişiler arasından arayın",
   "lists.subheading": "Listeleriniz",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Sütunda göster",
   "notifications.column_settings.sound": "Ses çal",
   "notifications.column_settings.status": "Yeni tootlar:",
+  "notifications.column_settings.unread_markers.category": "Okunmamış bildirim işaretleri",
   "notifications.filter.all": "Tümü",
   "notifications.filter.boosts": "Boostlar",
   "notifications.filter.favourites": "Beğeniler",
@@ -334,12 +323,12 @@
   "notifications.filter.mentions": "Bahsetmeler",
   "notifications.filter.polls": "Anket sonuçları",
   "notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.grant_permission": "İzin ver.",
   "notifications.group": "{count} bildirim",
   "notifications.mark_as_read": "Her bildirimi okundu olarak işaretle",
   "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor",
   "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
+  "notifications.permission_required": "Masaüstü bildirimleri, gereksinim duyulan izin verilmediği için mevcut değil.",
   "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir",
   "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.",
   "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın",
diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json
index 224c51301..fe6ca5f3e 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -3,35 +3,36 @@
   "account.add_or_remove_from_list": "Исемлеккә кертү я бетерү",
   "account.badges.bot": "Бот",
   "account.badges.group": "Төркем",
-  "account.block": "Block @{name}",
+  "account.block": "@{name} блоклау",
   "account.block_domain": "Block domain {domain}",
-  "account.blocked": "Blocked",
+  "account.blocked": "Блокланган",
   "account.browse_more_on_origin_server": "Тулырак оригинал профилендә карап була",
   "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct message @{name}",
   "account.disable_notifications": "Stop notifying me when @{name} posts",
   "account.domain_blocked": "Domain blocked",
-  "account.edit_profile": "Edit profile",
+  "account.edit_profile": "Профильны үзгәртү",
   "account.enable_notifications": "Notify me when @{name} posts",
   "account.endorse": "Feature on profile",
-  "account.follow": "Follow",
+  "account.follow": "Языл",
   "account.followers": "Followers",
   "account.followers.empty": "No one follows this user yet.",
   "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
   "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
   "account.follows.empty": "This user doesn't follow anyone yet.",
-  "account.follows_you": "Follows you",
+  "account.follows_you": "Сезгә язылган",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
-  "account.media": "Media",
+  "account.media": "Медиа",
   "account.mention": "Mention @{name}",
   "account.moved_to": "{name} has moved to:",
   "account.mute": "Mute @{name}",
   "account.mute_notifications": "Mute notifications from @{name}",
   "account.muted": "Muted",
-  "account.never_active": "Never",
+  "account.never_active": "Беркайчан да",
   "account.posts": "Toots",
   "account.posts_with_replies": "Toots and replies",
   "account.report": "Report @{name}",
@@ -42,45 +43,45 @@
   "account.unblock": "Unblock @{name}",
   "account.unblock_domain": "Unblock domain {domain}",
   "account.unendorse": "Don't feature on profile",
-  "account.unfollow": "Unfollow",
+  "account.unfollow": "Язылынмау",
   "account.unmute": "Unmute @{name}",
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "account_note.placeholder": "Click to add a note",
   "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
+  "alert.unexpected.title": "Ой!",
   "announcement.announcement": "Announcement",
   "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "You can press {combo} to skip this next time",
   "bundle_column_error.body": "Something went wrong while loading this component.",
   "bundle_column_error.retry": "Try again",
   "bundle_column_error.title": "Network error",
-  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.close": "Ябу",
   "bundle_modal_error.message": "Something went wrong while loading this component.",
   "bundle_modal_error.retry": "Try again",
   "column.blocks": "Blocked users",
-  "column.bookmarks": "Bookmarks",
+  "column.bookmarks": "Кыстыргычлар",
   "column.community": "Local timeline",
   "column.direct": "Direct messages",
   "column.directory": "Browse profiles",
   "column.domain_blocks": "Blocked domains",
   "column.favourites": "Favourites",
   "column.follow_requests": "Follow requests",
-  "column.home": "Home",
+  "column.home": "Баш бит",
   "column.lists": "Lists",
   "column.mutes": "Muted users",
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column_back_button.label": "Back",
+  "column_back_button.label": "Кире",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
   "column_header.moveRight_settings": "Move column to the right",
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.settings": "Settings",
+  "column_subheading.settings": "Көйләүләр",
   "community.column_settings.local_only": "Local only",
   "community.column_settings.media_only": "Media only",
   "community.column_settings.remote_only": "Remote only",
@@ -104,26 +105,26 @@
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
   "compose_form.spoiler_placeholder": "Write your warning here",
-  "confirmation_modal.cancel": "Cancel",
+  "confirmation_modal.cancel": "Баш тарту",
   "confirmations.block.block_and_report": "Block & Report",
-  "confirmations.block.confirm": "Block",
+  "confirmations.block.confirm": "Блоклау",
   "confirmations.block.message": "Are you sure you want to block {name}?",
-  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.confirm": "Бетерү",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.confirm": "Бетерү",
   "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
   "confirmations.domain_block.confirm": "Hide entire domain",
   "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
-  "confirmations.logout.confirm": "Log out",
+  "confirmations.logout.confirm": "Чыгу",
   "confirmations.logout.message": "Are you sure you want to log out?",
-  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.confirm": "Тавышсыз",
   "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
   "confirmations.reply.confirm": "Reply",
   "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
-  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.confirm": "Язылынмау",
   "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
   "conversation.delete": "Delete conversation",
   "conversation.mark_as_read": "Mark as read",
@@ -135,17 +136,17 @@
   "directory.recently_active": "Recently active",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "Here is what it will look like:",
-  "emoji_button.activity": "Activity",
-  "emoji_button.custom": "Custom",
-  "emoji_button.flags": "Flags",
+  "emoji_button.activity": "Активлык",
+  "emoji_button.custom": "Куелган",
+  "emoji_button.flags": "Байраклар",
   "emoji_button.food": "Food & Drink",
   "emoji_button.label": "Insert emoji",
   "emoji_button.nature": "Nature",
   "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objects",
-  "emoji_button.people": "People",
+  "emoji_button.people": "Кешеләр",
   "emoji_button.recent": "Frequently used",
-  "emoji_button.search": "Search...",
+  "emoji_button.search": "Эзләү...",
   "emoji_button.search_results": "Search results",
   "emoji_button.symbols": "Symbols",
   "emoji_button.travel": "Travel & Places",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no blocked domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,10 +176,13 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
-  "generic.saved": "Saved",
+  "generic.saved": "Сакланды",
   "getting_started.developers": "Developers",
   "getting_started.directory": "Profile directory",
   "getting_started.documentation": "Documentation",
@@ -203,29 +208,12 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
   "keyboard_shortcuts.column": "to focus a status in one of the columns",
   "keyboard_shortcuts.compose": "to focus the compose textarea",
-  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.description": "Тасвирлама",
   "keyboard_shortcuts.direct": "to open direct messages column",
   "keyboard_shortcuts.down": "to move down in the list",
   "keyboard_shortcuts.enter": "to open status",
@@ -254,13 +242,13 @@
   "keyboard_shortcuts.toot": "to start a brand new toot",
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
   "keyboard_shortcuts.up": "to move up in the list",
-  "lightbox.close": "Close",
+  "lightbox.close": "Ябу",
   "lightbox.compress": "Compress image view box",
   "lightbox.expand": "Expand image view box",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
+  "lightbox.next": "Киләсе",
+  "lightbox.previous": "Алдагы",
   "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
+  "lists.account.remove": "Исемлектән бетерергә",
   "lists.delete": "Delete list",
   "lists.edit": "Edit list",
   "lists.edit.submit": "Change title",
@@ -274,21 +262,21 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Дәвамлык",
   "mute_modal.hide_notifications": "Hide notifications from this user?",
   "mute_modal.indefinite": "Indefinite",
   "navigation_bar.apps": "Mobile apps",
   "navigation_bar.blocks": "Blocked users",
-  "navigation_bar.bookmarks": "Bookmarks",
+  "navigation_bar.bookmarks": "Кыстыргычлар",
   "navigation_bar.community_timeline": "Local timeline",
   "navigation_bar.compose": "Compose new toot",
   "navigation_bar.direct": "Direct messages",
   "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
-  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.edit_profile": "Профильны үзгәртү",
   "navigation_bar.favourites": "Favourites",
   "navigation_bar.filters": "Muted words",
   "navigation_bar.follow_requests": "Follow requests",
@@ -300,9 +288,9 @@
   "navigation_bar.mutes": "Muted users",
   "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
-  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.preferences": "Caylaw",
   "navigation_bar.public_timeline": "Federated timeline",
-  "navigation_bar.security": "Security",
+  "navigation_bar.security": "Хәвефсезлек",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.follow_request": "{name} has requested to follow you",
@@ -317,7 +305,7 @@
   "notifications.column_settings.favourite": "Favourites:",
   "notifications.column_settings.filter_bar.advanced": "Display all categories",
   "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.show": "Күрсәтү",
   "notifications.column_settings.follow": "New followers:",
   "notifications.column_settings.follow_request": "New follow requests:",
   "notifications.column_settings.mention": "Mentions:",
@@ -327,7 +315,8 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
-  "notifications.filter.all": "All",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
+  "notifications.filter.all": "Бөтенесе",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
   "notifications.filter.follows": "Follows",
@@ -344,8 +333,8 @@
   "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
   "notifications_permission_banner.title": "Never miss a thing",
   "picture_in_picture.restore": "Put it back",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
+  "poll.closed": "Ябык",
+  "poll.refresh": "Яңарту",
   "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
@@ -361,42 +350,42 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Visible for all, but not in public timelines",
   "privacy.unlisted.short": "Unlisted",
-  "refresh": "Refresh",
-  "regeneration_indicator.label": "Loading…",
+  "refresh": "Яңарту",
+  "regeneration_indicator.label": "Йөкләү...",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
-  "relative_time.just_now": "now",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
-  "relative_time.today": "today",
-  "reply_indicator.cancel": "Cancel",
+  "relative_time.days": "{number}к",
+  "relative_time.hours": "{number}с",
+  "relative_time.just_now": "хәзер",
+  "relative_time.minutes": "{number}м",
+  "relative_time.seconds": "{number}сек",
+  "relative_time.today": "бүген",
+  "reply_indicator.cancel": "Баш тарту",
   "report.forward": "Forward to {target}",
   "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
   "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
   "report.placeholder": "Additional comments",
-  "report.submit": "Submit",
+  "report.submit": "Җибәрү",
   "report.target": "Report {target}",
-  "search.placeholder": "Search",
+  "search.placeholder": "Эзләү",
   "search_popout.search_format": "Advanced search format",
   "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
   "search_popout.tips.hashtag": "hashtag",
   "search_popout.tips.status": "status",
   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
-  "search_popout.tips.user": "user",
-  "search_results.accounts": "People",
+  "search_popout.tips.user": "кулланучы",
+  "search_results.accounts": "Кешеләр",
   "search_results.hashtags": "Hashtags",
   "search_results.statuses": "Toots",
   "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
   "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
   "status.admin_account": "Open moderation interface for @{name}",
   "status.admin_status": "Open this status in the moderation interface",
-  "status.block": "Block @{name}",
+  "status.block": "@{name} блоклау",
   "status.bookmark": "Bookmark",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
   "status.copy": "Copy link to status",
-  "status.delete": "Delete",
+  "status.delete": "Бетерү",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
   "status.embed": "Embed",
@@ -405,7 +394,7 @@
   "status.load_more": "Load more",
   "status.media_hidden": "Media hidden",
   "status.mention": "Mention @{name}",
-  "status.more": "More",
+  "status.more": "Күбрәк",
   "status.mute": "Mute @{name}",
   "status.mute_conversation": "Mute conversation",
   "status.open": "Expand this status",
@@ -422,7 +411,7 @@
   "status.replyAll": "Reply to thread",
   "status.report": "Report @{name}",
   "status.sensitive_warning": "Sensitive content",
-  "status.share": "Share",
+  "status.share": "Уртаклашу",
   "status.show_less": "Show less",
   "status.show_less_all": "Show less for all",
   "status.show_more": "Show more",
@@ -434,10 +423,10 @@
   "suggestions.dismiss": "Dismiss suggestion",
   "suggestions.header": "You might be interested in…",
   "tabs_bar.federated_timeline": "Federated",
-  "tabs_bar.home": "Home",
-  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.home": "Баш бит",
+  "tabs_bar.local_timeline": "Җирле",
   "tabs_bar.notifications": "Notifications",
-  "tabs_bar.search": "Search",
+  "tabs_bar.search": "Эзләү",
   "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
   "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
   "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
@@ -459,12 +448,12 @@
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.audio_description": "Describe for people with hearing loss",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.edit": "Edit",
+  "upload_form.edit": "Үзгәртү",
   "upload_form.thumbnail": "Change thumbnail",
-  "upload_form.undo": "Delete",
+  "upload_form.undo": "Бетерү",
   "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
   "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
+  "upload_modal.apply": "Куллан",
   "upload_modal.choose_image": "Choose image",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Detect text from picture",
@@ -473,14 +462,14 @@
   "upload_modal.preparing_ocr": "Preparing OCR…",
   "upload_modal.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading…",
-  "video.close": "Close video",
+  "video.close": "Видеоны ябу",
   "video.download": "Download file",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
-  "video.fullscreen": "Full screen",
+  "video.fullscreen": "Тулы экран",
   "video.hide": "Hide video",
   "video.mute": "Mute sound",
-  "video.pause": "Pause",
-  "video.play": "Play",
+  "video.pause": "Туктату",
+  "video.play": "Уйнату",
   "video.unmute": "Unmute sound"
 }
diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json
index 70f6ab152..1b311b04d 100644
--- a/app/javascript/mastodon/locales/ug.json
+++ b/app/javascript/mastodon/locales/ug.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "Follows you",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no blocked domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 941e43c99..5e21d00fc 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -1,18 +1,18 @@
 {
-  "account.account_note_header": "Ваша примітка для @{name}",
+  "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_domain": "Заблокувати домен {domain}",
   "account.blocked": "Заблоковані",
   "account.browse_more_on_origin_server": "Переглянути більше в оригіналі",
   "account.cancel_follow_request": "Скасувати запит на підписку",
   "account.direct": "Пряме повідомлення @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
+  "account.disable_notifications": "Не повідомляти мене про дописи @{name}",
   "account.domain_blocked": "Домен приховано",
   "account.edit_profile": "Редагувати профіль",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "Повідомляти мене про дописи @{name}",
   "account.endorse": "Публікувати у профілі",
   "account.follow": "Підписатися",
   "account.followers": "Підписники",
@@ -22,6 +22,7 @@
   "account.follows.empty": "Цей користувач ще ні на кого не підписався.",
   "account.follows_you": "Підписаний(-а) на вас",
   "account.hide_reblogs": "Сховати передмухи від @{name}",
+  "account.joined": "Долучення {date}",
   "account.last_status": "Крайня активність",
   "account.link_verified_on": "Права власності на це посилання були перевірені {date}",
   "account.locked_info": "Статус конфіденційності цього облікового запису встановлено у заблокований. Власник вручну переглядає, хто може за ним стежити.",
@@ -149,7 +150,7 @@
   "emoji_button.search_results": "Результати пошуку",
   "emoji_button.symbols": "Символи",
   "emoji_button.travel": "Подорожі",
-  "empty_column.account_suspended": "Account suspended",
+  "empty_column.account_suspended": "Обліковий запис заблоковано",
   "empty_column.account_timeline": "Тут дмухалок немає!",
   "empty_column.account_unavailable": "Профіль недоступний",
   "empty_column.blocks": "Ви ще не заблокували жодного користувача.",
@@ -159,21 +160,25 @@
   "empty_column.domain_blocks": "Тут поки немає прихованих доменів.",
   "empty_column.favourited_statuses": "У вас ще немає вподобаних дмухів. Коли ви щось вподобаєте, воно з'явиться тут.",
   "empty_column.favourites": "Ніхто ще не вподобав цього дмуху. Коли хтось це зробить, вони з'являться тут.",
+  "empty_column.follow_recommendations": "Схоже, для вас не буде створено жодної пропозиції. Ви можете спробувати скористатися пошуком людей, яких ви можете знати або переглянути популярні хештеґи.",
   "empty_column.follow_requests": "У вас ще немає запитів на підписку. Коли ви їх отримаєте, вони з'являться тут.",
   "empty_column.hashtag": "Дописів з цим хештегом поки не існує.",
   "empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.",
-  "empty_column.home.public_timeline": "публічні стрічки",
+  "empty_column.home.suggestions": "Переглянути пропозиції",
   "empty_column.list": "Немає нічого в цьому списку. Коли його учасники дмухнуть нові статуси, вони з'являться тут.",
   "empty_column.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.",
   "empty_column.mutes": "Ви ще не заглушили жодного користувача.",
   "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
   "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку",
   "error.unexpected_crash.explanation": "Ця сторінка не може бути коректно відображена через баґ у нашому коді або через проблему сумісності браузера.",
-  "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
+  "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку викликано додатком браузера або автоматичним засобом перекладу.",
   "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний додаток.",
-  "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.",
   "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну",
   "errors.unexpected_crash.report_issue": "Повідомити про проблему",
+  "follow_recommendations.done": "Готово",
+  "follow_recommendations.heading": "Підпишіться на людей, чиї дописи ви хочете бачити! Ось деякі пропозиції.",
+  "follow_recommendations.lead": "Дописи від людей, за якими ви стежите, з'являться в хронологічному порядку у вашій домашній стрічці. Не бійся помилятися, ви можете відписатися від людей так само легко в будь-який час!",
   "follow_request.authorize": "Авторизувати",
   "follow_request.reject": "Відмовити",
   "follow_requests.unlocked_explanation": "Хоча ваш обліковий запис не заблоковано, працівники {domain} припускають, що, можливо, ви хотіли б переглянути ці запити на підписку.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}",
   "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}",
   "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}",
-  "introduction.federation.action": "Далі",
-  "introduction.federation.federated.headline": "Глобальна",
-  "introduction.federation.federated.text": "Публічні пости з інших серверів федіверсу будуть з'являтися у глобальній стрічці.",
-  "introduction.federation.home.headline": "Головна",
-  "introduction.federation.home.text": "Пости від людей, за якими ви слідкуєте, з'являться у Вашій домашній стрічці. Ви можете слідкувати за кожним на будь-якому сервері!",
-  "introduction.federation.local.headline": "Локальна",
-  "introduction.federation.local.text": "Публічні пости від людей на сервері, на якому Ви знаходитесь, будуть з'являтися у локальній стрічці.",
-  "introduction.interactions.action": "Завершити вступ!",
-  "introduction.interactions.favourite.headline": "Улюблене",
-  "introduction.interactions.favourite.text": "Ви можете зберегти дмух на потім і повідомити автора, що він вам сподобався, додавши його в улюблене.",
-  "introduction.interactions.reblog.headline": "Передмухнути",
-  "introduction.interactions.reblog.text": "Ви можете ділитися дмухами інших людей зі своїми підписниками, передмухуючи їх.",
-  "introduction.interactions.reply.headline": "Відповісти",
-  "introduction.interactions.reply.text": "Ви можете відповідати на дмухи інших людей та власні, створюючи ланцюжки розмов.",
-  "introduction.welcome.action": "Поїхали!",
-  "introduction.welcome.headline": "Перші кроки",
-  "introduction.welcome.text": "Вітаємо у федіверсі! Невдовзі ви зможете поширювати повідомлення та спілкуватися зі своїми друзями на розмаїтті серверів. Але цей сервер, {domain}, є особливим — на ньому розміщений ваш профіль, тож запам'ятайте його назву.",
   "keyboard_shortcuts.back": "переходити назад",
   "keyboard_shortcuts.blocked": "відкрити список заблокованих користувачів",
   "keyboard_shortcuts.boost": "передмухувати",
@@ -255,8 +243,8 @@
   "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку",
   "keyboard_shortcuts.up": "рухатися вверх списком",
   "lightbox.close": "Закрити",
-  "lightbox.compress": "Compress image view box",
-  "lightbox.expand": "Expand image view box",
+  "lightbox.compress": "Стиснути поле перегляду зображень",
+  "lightbox.expand": "Розгорнути поле перегляду зображень",
   "lightbox.next": "Далі",
   "lightbox.previous": "Назад",
   "lists.account.add": "Додати до списку",
@@ -266,10 +254,10 @@
   "lists.edit.submit": "Змінити назву",
   "lists.new.create": "Додати список",
   "lists.new.title_placeholder": "Нова назва списку",
-  "lists.replies_policy.followed": "Any followed user",
-  "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.followed": "Будь-який відстежуваний користувач",
+  "lists.replies_policy.list": "Учасники списку",
+  "lists.replies_policy.none": "Ніхто",
+  "lists.replies_policy.title": "Показати відповіді для:",
   "lists.search": "Шукати серед людей, на яких ви підписані",
   "lists.subheading": "Ваші списки",
   "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}",
@@ -277,9 +265,9 @@
   "media_gallery.toggle_visible": "Показати/приховати",
   "missing_indicator.label": "Не знайдено",
   "missing_indicator.sublabel": "Ресурс не знайдений",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "Тривалість",
   "mute_modal.hide_notifications": "Приховати сповіщення від користувача?",
-  "mute_modal.indefinite": "Indefinite",
+  "mute_modal.indefinite": "Не визначено",
   "navigation_bar.apps": "Мобільні додатки",
   "navigation_bar.blocks": "Заблоковані користувачі",
   "navigation_bar.bookmarks": "Закладки",
@@ -310,7 +298,7 @@
   "notification.own_poll": "Ваше опитування завершено",
   "notification.poll": "Опитування, у якому ви голосували, закінчилося",
   "notification.reblog": "{name} передмухнув(-ла) Ваш допис",
-  "notification.status": "{name} just posted",
+  "notification.status": "{name} щойно дописує",
   "notifications.clear": "Очистити сповіщення",
   "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?",
   "notifications.column_settings.alert": "Сповіщення на комп'ютері",
@@ -326,24 +314,25 @@
   "notifications.column_settings.reblog": "Передмухи:",
   "notifications.column_settings.show": "Показати в колонці",
   "notifications.column_settings.sound": "Відтворювати звуки",
-  "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.status": "Нові дмухи:",
+  "notifications.column_settings.unread_markers.category": "Мітки непрочитаних сповіщень",
   "notifications.filter.all": "Усі",
   "notifications.filter.boosts": "Передмухи",
   "notifications.filter.favourites": "Улюблені",
   "notifications.filter.follows": "Підписки",
   "notifications.filter.mentions": "Згадки",
   "notifications.filter.polls": "Результати опитування",
-  "notifications.filter.statuses": "Updates from people you follow",
-  "notifications.grant_permission": "Grant permission.",
+  "notifications.filter.statuses": "Оновлення від людей, на яких ви підписані",
+  "notifications.grant_permission": "Надати дозвіл.",
   "notifications.group": "{count} сповіщень",
-  "notifications.mark_as_read": "Mark every notification as read",
-  "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
-  "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
-  "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
-  "notifications_permission_banner.enable": "Enable desktop notifications",
-  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
-  "notifications_permission_banner.title": "Never miss a thing",
-  "picture_in_picture.restore": "Put it back",
+  "notifications.mark_as_read": "Позначити всі сповіщення прочитаними",
+  "notifications.permission_denied": "Сповіщення стільниці недоступні через раніше відхилений запит дозволів для браузера",
+  "notifications.permission_denied_alert": "Сповіщення не можна ввімкнути оскільки у дозволі вже було відмовлено раніше",
+  "notifications.permission_required": "Сповіщення на стільниці не доступні, оскільки необхідний дозвіл не надано.",
+  "notifications_permission_banner.enable": "Увімкнути сповіщення стільниці",
+  "notifications_permission_banner.how_to_control": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.",
+  "notifications_permission_banner.title": "Не проґавте нічого",
+  "picture_in_picture.restore": "Повернути назад",
   "poll.closed": "Закрито",
   "poll.refresh": "Оновити",
   "poll.total_people": "{count, plural, one {# особа} other {# осіб}}",
@@ -470,7 +459,7 @@
   "upload_modal.detect_text": "Виявити текст на малюнку",
   "upload_modal.edit_media": "Редагувати медіа",
   "upload_modal.hint": "Клацніть або перетягніть коло на превью, щоб обрати точку, яку буде завжди видно на мініатюрах.",
-  "upload_modal.preparing_ocr": "Preparing OCR…",
+  "upload_modal.preparing_ocr": "Підготовка OCR…",
   "upload_modal.preview_label": "Переглянути ({ratio})",
   "upload_progress.label": "Завантаження...",
   "video.close": "Закрити відео",
diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json
index aaccf1d83..4c5132149 100644
--- a/app/javascript/mastodon/locales/ur.json
+++ b/app/javascript/mastodon/locales/ur.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".",
   "account.follows_you": "آپ کا پیروکار ہے",
   "account.hide_reblogs": "@{name} سے فروغ چھپائیں",
+  "account.joined": "Joined {date}",
   "account.last_status": "آخری فعال",
   "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی",
   "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "ابھی تک کوئی چھپا ہوا ڈومین نہیں ہے.",
   "empty_column.favourited_statuses": "آپ کا کوئی پسندیدہ ٹوٹ نہیں ہے. جب آپ پسند کریں گے، یہاں نظر آئےگا.",
   "empty_column.favourites": "ابھی تک کسی نے بھی اس ٹوٹ کو پسند نہیں کیا ہے. جب بھی کوئی اسے پسند کرے گا، ان کا نام یہاں نظر آئے گا.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "ابھی تک آپ کی پیری کرنے کی درخواست نہیں کی ہے. جب کوئی درخواست کرے گا، ان کا نام یہاں نظر آئے گا.",
   "empty_column.hashtag": "ابھی یہ ہیش ٹیگ خالی ہے.",
   "empty_column.home": "آپ کا خانگی جدول خالی ہے! {public} دیکھیں یا شروعات کیلئے تلاش کریں اور دیگر صارفین سے ملیں.",
-  "empty_column.home.public_timeline": "جدولِ عام",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "یہ فہرست ابھی خالی ہے. جب اس فہرست کے ارکان کچھ تحریر کریں گے، یہاں نظر آئے گا.",
   "empty_column.lists": "ابھی آپ کی کوئی فہرست نہیں ہے. جب آپ بنائیں گے، وہ یہاں نظر آئے گی.",
   "empty_column.mutes": "آپ نے ابھی کسی صارف کو خاموش نہیں کیا ہے.",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "اجازت دیں",
   "follow_request.reject": "انکار کریں",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
   "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "اگلا",
-  "introduction.federation.federated.headline": "مجموعی",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -274,7 +262,7 @@
   "lists.subheading": "Your lists",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading...",
-  "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
+  "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
   "missing_indicator.label": "Not found",
   "missing_indicator.sublabel": "This resource could not be found",
   "mute_modal.duration": "Duration",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "All",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index d22b8d704..595c6997e 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -13,7 +13,7 @@
   "account.domain_blocked": "Người đã chặn",
   "account.edit_profile": "Chỉnh sửa trang cá nhân",
   "account.enable_notifications": "Thông báo khi @{name} đăng tút",
-  "account.endorse": "Vinh danh người này",
+  "account.endorse": "Tôn vinh người này",
   "account.follow": "Theo dõi",
   "account.followers": "Người theo dõi",
   "account.followers.empty": "Chưa có người theo dõi nào.",
@@ -22,10 +22,11 @@
   "account.follows.empty": "Người này chưa theo dõi ai.",
   "account.follows_you": "Đang theo dõi bạn",
   "account.hide_reblogs": "Ẩn chia sẻ từ @{name}",
+  "account.joined": "Đã tham gia {date}",
   "account.last_status": "Online",
   "account.link_verified_on": "Liên kết này đã được xác thực vào {date}",
   "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.",
-  "account.media": "Bộ sưu tập",
+  "account.media": "Media",
   "account.mention": "Nhắc đến @{name}",
   "account.moved_to": "{name} đã dời sang:",
   "account.mute": "Ẩn @{name}",
@@ -33,19 +34,19 @@
   "account.muted": "Đã ẩn",
   "account.never_active": "Chưa có bất cứ hoạt động nào",
   "account.posts": "Tút",
-  "account.posts_with_replies": "Tương tác",
+  "account.posts_with_replies": "Trả lời",
   "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.share": "Chia sẻ hồ sơ @{name}",
+  "account.share": "Chia sẻ trang @{name}",
   "account.show_reblogs": "Hiện chia sẻ từ @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}",
   "account.unblock": "Bỏ chặn @{name}",
   "account.unblock_domain": "Bỏ ẩn {domain}",
-  "account.unendorse": "Ngưng vinh danh người này",
+  "account.unendorse": "Ngưng tôn vinh người này",
   "account.unfollow": "Ngưng theo dõi",
   "account.unmute": "Bỏ ẩn @{name}",
   "account.unmute_notifications": "Hiển lại thông báo từ @{name}",
-  "account_note.placeholder": "Bạn có điều gì thú vị muốn nói về người này?",
+  "account_note.placeholder": "Nhấn để thêm",
   "alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.",
   "alert.rate_limited.title": "Vượt giới hạn",
   "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.",
@@ -65,7 +66,7 @@
   "column.direct": "Tin nhắn",
   "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.favourites": "Thích",
   "column.follow_requests": "Yêu cầu theo dõi",
   "column.home": "Bảng tin",
   "column.lists": "Danh sách",
@@ -82,7 +83,7 @@
   "column_header.unpin": "Không ghim",
   "column_subheading.settings": "Cài đặt",
   "community.column_settings.local_only": "Chỉ máy chủ của bạn",
-  "community.column_settings.media_only": "Chỉ ảnh/video",
+  "community.column_settings.media_only": "Chỉ Media",
   "community.column_settings.remote_only": "Chỉ người dùng ở máy chủ khác",
   "compose_form.direct_message_warning": "Tút này sẽ chỉ gửi cho người được nhắc đến.",
   "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm",
@@ -98,9 +99,9 @@
   "compose_form.poll.switch_to_single": "Chỉ cho phép chọn duy nhất một lựa chọn",
   "compose_form.publish": "Tút",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "{count, plural, one {Nội dung là nhạy cảm} other {Nội dung là nhạy cảm}}",
-  "compose_form.sensitive.marked": "{count, plural, one {Nội dung đã đánh dấu là nhạy cảm} other {Nội dung đã đánh dấu là nhạy cảm}}",
-  "compose_form.sensitive.unmarked": "{count, plural, one {Nội dung này bình thường} other {Nội dung này bình thường}}",
+  "compose_form.sensitive.hide": "{count, plural, other {Đánh dấu nội dung nhạy cảm}}",
+  "compose_form.sensitive.marked": "{count, plural, other {Nội dung này nhạy cảm}}",
+  "compose_form.sensitive.unmarked": "{count, plural, other {Nội dung này bình thường}}",
   "compose_form.spoiler.marked": "Hủy nội dung ẩn",
   "compose_form.spoiler.unmarked": "Tạo nội dung ẩn",
   "compose_form.spoiler_placeholder": "Viết nội dung ẩn của bạn ở đây",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "Chưa ẩn bất kỳ máy chủ nào.",
   "empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.",
   "empty_column.favourites": "Chưa có ai thích tút này.",
+  "empty_column.follow_recommendations": "Bạn chưa có gợi ý theo dõi nào. Hãy thử tìm kiếm những người thú vị hoặc khám phá những hashtag xu hướng.",
   "empty_column.follow_requests": "Bạn chưa có yêu cầu theo dõi nào.",
   "empty_column.hashtag": "Chưa có bài đăng nào dùng hashtag này.",
-  "empty_column.home": "Chưa có bất cứ gì! Hãy bắt đầu bằng cách tìm kiếm hoặc truy cập {public} để theo dõi những người bạn quan tâm.",
-  "empty_column.home.public_timeline": "tút công khai",
+  "empty_column.home": "Bảng tin của bạn đang trống! Hãy theo dõi nhiều người hơn. {suggestions}",
+  "empty_column.home.suggestions": "Gợi ý dành cho bạn",
   "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.",
   "empty_column.lists": "Bạn chưa tạo danh sách nào.",
   "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.",
@@ -174,12 +176,15 @@
   "error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.",
   "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard",
   "errors.unexpected_crash.report_issue": "Báo cáo lỗi",
+  "follow_recommendations.done": "Xong",
+  "follow_recommendations.heading": "Theo dõi những người bạn muốn đọc tút của họ! Dưới đây là vài gợi ý.",
+  "follow_recommendations.lead": "Tút từ những người bạn theo dõi sẽ hiện theo thứ tự thời gian trên bảng tin. Đừng ngại, bạn có thể dễ dàng ngưng theo dõi họ bất cứ lúc nào!",
   "follow_request.authorize": "Cho phép",
   "follow_request.reject": "Từ chối",
   "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.",
   "generic.saved": "Đã lưu",
   "getting_started.developers": "Nhà phát triển",
-  "getting_started.directory": "Mạng lưới",
+  "getting_started.directory": "Cộng đồng",
   "getting_started.documentation": "Tài liệu",
   "getting_started.heading": "Quản lý",
   "getting_started.invite": "Mời bạn bè",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, other {# ngày}}",
   "intervals.full.hours": "{number, plural, other {# giờ}}",
   "intervals.full.minutes": "{number, plural, other {# phút}}",
-  "introduction.federation.action": "Tiếp theo",
-  "introduction.federation.federated.headline": "Mạng liên hợp",
-  "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Thế giới.",
-  "introduction.federation.home.headline": "Bảng tin",
-  "introduction.federation.home.text": "Bảng tin là nơi hiển thị bài đăng từ những người bạn theo dõi. Bạn có thể theo dõi bất cứ ai trên bất cứ máy chủ nào!",
-  "introduction.federation.local.headline": "Cộng đồng",
-  "introduction.federation.local.text": "Cộng đồng là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.",
-  "introduction.interactions.action": "Tôi đã hiểu rồi!",
-  "introduction.interactions.favourite.headline": "Thích",
-  "introduction.interactions.favourite.text": "Thích một tút có nghĩa là bạn tâm đắc nội dung của tút và muốn lưu giữ để sau này xem lại.",
-  "introduction.interactions.reblog.headline": "Chia sẻ",
-  "introduction.interactions.reblog.text": "Với tính năng chia sẻ, bạn có thể chia sẻ tút của người khác cho những người theo dõi bạn.",
-  "introduction.interactions.reply.headline": "Trả lời",
-  "introduction.interactions.reply.text": "Bạn có thể trả lời tút của những người khác và tút của bạn, từ đó tạo nên những cuộc hội thoại.",
-  "introduction.welcome.action": "Bắt đầu nào!",
-  "introduction.welcome.headline": "Hướng dẫn người mới",
-  "introduction.welcome.text": "Chào mừng bạn đến mạng xã hội liên hợp! Tại đây bạn có thể đăng tải nội dung và trao đổi với bạn bè của mình trên các máy chủ khác nhau. Máy chủ {domain} là nơi lưu trữ trang cá nhân của bạn.",
   "keyboard_shortcuts.back": "trở lại",
   "keyboard_shortcuts.blocked": "mở danh sách người đã chặn",
   "keyboard_shortcuts.boost": "chia sẻ",
@@ -269,12 +257,12 @@
   "lists.replies_policy.followed": "Người theo dõi",
   "lists.replies_policy.list": "Người trong danh sách",
   "lists.replies_policy.none": "Không ai",
-  "lists.replies_policy.title": "Cho phép bình luận với:",
+  "lists.replies_policy.title": "Cho phép trả lời với:",
   "lists.search": "Tìm kiếm những người mà bạn quan tâm",
   "lists.subheading": "Danh sách của bạn",
   "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}",
   "loading_indicator.label": "Đang tải...",
-  "media_gallery.toggle_visible": "Ẩn {number, plural, one {hình ảnh} other {hình ảnh}}",
+  "media_gallery.toggle_visible": "{number, plural, other {Ẩn hình ảnh}}",
   "missing_indicator.label": "Không tìm thấy",
   "missing_indicator.sublabel": "Nội dung này không còn tồn tại",
   "mute_modal.duration": "Thời hạn",
@@ -289,10 +277,10 @@
   "navigation_bar.discover": "Khám phá",
   "navigation_bar.domain_blocks": "Máy chủ đã ẩn",
   "navigation_bar.edit_profile": "Trang cá nhân",
-  "navigation_bar.favourites": "Lượt thích",
+  "navigation_bar.favourites": "Thích",
   "navigation_bar.filters": "Bộ lọc từ ngữ",
   "navigation_bar.follow_requests": "Yêu cầu theo dõi",
-  "navigation_bar.follows_and_followers": "Lượt theo dõi",
+  "navigation_bar.follows_and_followers": "Quan hệ",
   "navigation_bar.info": "Về máy chủ này",
   "navigation_bar.keyboard_shortcuts": "Phím tắt",
   "navigation_bar.lists": "Danh sách",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Thông báo trên thanh menu",
   "notifications.column_settings.sound": "Kèm theo tiếng \"bíp\"",
   "notifications.column_settings.status": "Tút mới:",
+  "notifications.column_settings.unread_markers.category": "Đánh dấu những thông báo chưa đọc",
   "notifications.filter.all": "Toàn bộ",
   "notifications.filter.boosts": "Chia sẻ",
   "notifications.filter.favourites": "Thích",
@@ -346,8 +335,8 @@
   "picture_in_picture.restore": "Hiển thị bình thường",
   "poll.closed": "Kết thúc",
   "poll.refresh": "Làm mới",
-  "poll.total_people": "{count, plural, one {# người} other {# người}}",
-  "poll.total_votes": "{count, plural, one {# người} other {# người}}",
+  "poll.total_people": "{count, plural, other {# người bình chọn}}",
+  "poll.total_votes": "{count, plural, other {# người bình chọn}}",
   "poll.vote": "Bình chọn",
   "poll.voted": "Bạn đã bình chọn rồi",
   "poll_button.add_poll": "Tạo bình chọn",
@@ -364,9 +353,9 @@
   "refresh": "Làm mới",
   "regeneration_indicator.label": "Đang tải…",
   "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!",
-  "relative_time.days": "{number} ngày",
+  "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
-  "relative_time.just_now": "mới",
+  "relative_time.just_now": "vừa xong",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
   "relative_time.today": "hôm nay",
@@ -403,7 +392,7 @@
   "status.favourite": "Thích",
   "status.filtered": "Bộ lọc",
   "status.load_more": "Xem thêm",
-  "status.media_hidden": "Ảnh/video đã ẩn",
+  "status.media_hidden": "Đã ẩn",
   "status.mention": "Nhắc đến @{name}",
   "status.more": "Thêm",
   "status.mute": "Ẩn @{name}",
@@ -419,7 +408,7 @@
   "status.redraft": "Xóa và viết lại",
   "status.remove_bookmark": "Hủy lưu",
   "status.reply": "Trả lời",
-  "status.replyAll": "Trả lời tất cả",
+  "status.replyAll": "Trả lời người đăng tút",
   "status.report": "Báo cáo @{name}",
   "status.sensitive_warning": "Nhạy cảm",
   "status.share": "Chia sẻ",
@@ -427,7 +416,7 @@
   "status.show_less_all": "Thu gọn toàn bộ",
   "status.show_more": "Xem thêm",
   "status.show_more_all": "Hiển thị tất cả",
-  "status.show_thread": "Toàn bộ chủ đề",
+  "status.show_thread": "Toàn chủ đề",
   "status.uncached_media_warning": "Uncached",
   "status.unmute_conversation": "Quan tâm",
   "status.unpin": "Bỏ ghim trên trang cá nhân",
@@ -435,12 +424,12 @@
   "suggestions.header": "Có thể bạn quan tâm…",
   "tabs_bar.federated_timeline": "Thế giới",
   "tabs_bar.home": "Bảng tin",
-  "tabs_bar.local_timeline": "Cộng đồng",
+  "tabs_bar.local_timeline": "Máy chủ",
   "tabs_bar.notifications": "Thông báo",
   "tabs_bar.search": "Tìm kiếm",
-  "time_remaining.days": "Kết thúc sau {number, plural, other {# ngày}}",
-  "time_remaining.hours": "Kết thúc sau {number, plural, other {# giờ}}",
-  "time_remaining.minutes": "Kết thúc sau {number, plural, other {# phút}}",
+  "time_remaining.days": "Còn {number, plural, other {# ngày}}",
+  "time_remaining.hours": "Còn {number, plural, other {# giờ}}",
+  "time_remaining.minutes": "Còn {number, plural, other {# phút}}",
   "time_remaining.moments": "Còn lại",
   "time_remaining.seconds": "Chỉ còn {number, plural, other {# giây}}",
   "timeline_hint.remote_resource_not_displayed": "{resource} từ máy chủ khác sẽ không hiển thị.",
diff --git a/app/javascript/mastodon/locales/whitelist_af.json b/app/javascript/mastodon/locales/whitelist_af.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_af.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_es-MX.json b/app/javascript/mastodon/locales/whitelist_es-MX.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_es-MX.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_gd.json b/app/javascript/mastodon/locales/whitelist_gd.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_gd.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_kw.json b/app/javascript/mastodon/locales/whitelist_kw.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_kw.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_pa.json b/app/javascript/mastodon/locales/whitelist_pa.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_pa.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_si.json b/app/javascript/mastodon/locales/whitelist_si.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_si.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json
index e2c69c116..fdbc1c210 100644
--- a/app/javascript/mastodon/locales/zgh.json
+++ b/app/javascript/mastodon/locales/zgh.json
@@ -22,15 +22,16 @@
   "account.follows.empty": "This user doesn't follow anyone yet.",
   "account.follows_you": "ⴹⴼⵕⵏ ⴽⵯⵏ",
   "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.joined": "Joined {date}",
   "account.last_status": "Last active",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
   "account.media": "ⴰⵙⵏⵖⵎⵉⵙ",
   "account.mention": "Mention @{name}",
   "account.moved_to": "{name} has moved to:",
-  "account.mute": "Mute @{name}",
-  "account.mute_notifications": "Mute notifications from @{name}",
-  "account.muted": "Muted",
+  "account.mute": "ⵥⵥⵉⵥⵏ @{name}",
+  "account.mute_notifications": "ⵥⵥⵉⵥⵏ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵙⴳ @{name}",
+  "account.muted": "ⵉⵜⵜⵓⵥⵉⵥⵏ",
   "account.never_active": "ⵓⵙⴰⵔ",
   "account.posts": "Toots",
   "account.posts_with_replies": "Toots and replies",
@@ -88,7 +89,7 @@
   "compose_form.direct_message_warning_learn_more": "ⵙⵙⵏ ⵓⴳⴳⴰⵔ",
   "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
-  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.lock_disclaimer.lock": "ⵉⵜⵜⵓⵔⴳⵍ",
   "compose_form.placeholder": "ⵎⴰⵢⴷ ⵉⵍⵍⴰⵏ ⴳ ⵉⵅⴼ ⵏⵏⴽ?",
   "compose_form.poll.add_option": "Add a choice",
   "compose_form.poll.duration": "Poll duration",
@@ -138,7 +139,7 @@
   "emoji_button.activity": "Activity",
   "emoji_button.custom": "Custom",
   "emoji_button.flags": "ⵉⵛⵏⵢⴰⵍⵏ",
-  "emoji_button.food": "Food & Drink",
+  "emoji_button.food": "ⵓⵜⵛⵉ & ⵜⵉⵙⵙⵉ",
   "emoji_button.label": "Insert emoji",
   "emoji_button.nature": "Nature",
   "emoji_button.not_found": "ⵓⵍⴰ ⵉⵎⵓⵊⵉ!! (╯°□°)╯︵ ┻━┻",
@@ -159,14 +160,15 @@
   "empty_column.domain_blocks": "There are no blocked domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
   "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
   "empty_column.lists": "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.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
@@ -174,8 +176,11 @@
   "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
   "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "Authorize",
-  "follow_request.reject": "Reject",
+  "follow_request.reject": "ⴰⴳⵢ",
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
   "generic.saved": "Saved",
   "getting_started.developers": "Developers",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# ⵜⵓⵙⴷⵉⴷⵜ} other {# ⵜⵓⵙⴷⵉⴷⵉⵏ}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "ⴰⵙⵏⵓⴱⴳ",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "ⴰⴷⵖⴰⵔⴰⵏ",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "ⵔⴰⵔ",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
   "keyboard_shortcuts.boost": "to boost",
@@ -244,7 +232,7 @@
   "keyboard_shortcuts.open_media": "to open media",
   "keyboard_shortcuts.pinned": "to open pinned toots list",
   "keyboard_shortcuts.profile": "to open author's profile",
-  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.reply": "ⵉ ⵓⵔⴰⵔⵉ",
   "keyboard_shortcuts.requests": "to open follow requests list",
   "keyboard_shortcuts.search": "to focus search",
   "keyboard_shortcuts.spoilers": "to show/hide CW field",
@@ -268,8 +256,8 @@
   "lists.new.title_placeholder": "ⴰⵣⵡⵍ ⵏ ⵜⵍⴳⴰⵎⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ",
   "lists.replies_policy.followed": "Any followed user",
   "lists.replies_policy.list": "Members of the list",
-  "lists.replies_policy.none": "No one",
-  "lists.replies_policy.title": "Show replies to:",
+  "lists.replies_policy.none": "ⴰⵡⴷ ⵢⴰⵏ",
+  "lists.replies_policy.title": "ⵙⴽⵏ ⵜⵉⵔⴰⵔⵉⵏ ⵉ:",
   "lists.search": "Search among people you follow",
   "lists.subheading": "ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ",
   "load_pending": "{count, plural, one {# ⵓⴼⵔⴷⵉⵙ ⴰⵎⴰⵢⵏⵓ} other {# ⵉⴼⵔⴷⴰⵙ ⵉⵎⴰⵢⵏⵓⵜⵏ}}",
@@ -285,17 +273,17 @@
   "navigation_bar.bookmarks": "Bookmarks",
   "navigation_bar.community_timeline": "Local timeline",
   "navigation_bar.compose": "Compose new toot",
-  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.direct": "ⵜⵓⵣⵉⵏⵉⵏ ⵜⵓⵙⵔⵉⴷⵉⵏ",
   "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
-  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.edit_profile": "ⵙⵏⴼⵍ ⵉⴼⵔⵙ",
   "navigation_bar.favourites": "Favourites",
   "navigation_bar.filters": "Muted words",
-  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follow_requests": "ⵜⵓⵜⵔⴰⵡⵉⵏ ⵏ ⵓⴹⴼⴰⵕ",
   "navigation_bar.follows_and_followers": "Follows and followers",
-  "navigation_bar.info": "About this server",
+  "navigation_bar.info": "ⵅⴼ ⵓⵎⴰⴽⴽⴰⵢ ⴰ",
   "navigation_bar.keyboard_shortcuts": "Hotkeys",
-  "navigation_bar.lists": "Lists",
+  "navigation_bar.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ",
   "navigation_bar.logout": "ⴼⴼⵖ",
   "navigation_bar.mutes": "Muted users",
   "navigation_bar.personal": "Personal",
@@ -304,7 +292,7 @@
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
   "notification.favourite": "{name} favourited your status",
-  "notification.follow": "{name} followed you",
+  "notification.follow": "ⵉⴹⴼⴼⴰⵔ ⴽ {name}",
   "notification.follow_request": "{name} has requested to follow you",
   "notification.mention": "{name} mentioned you",
   "notification.own_poll": "Your poll has ended",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "ⵖⵔ ⵉⵎⵙⵍⵉ",
   "notifications.column_settings.status": "New toots:",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "ⴰⴽⴽⵯ",
   "notifications.filter.boosts": "Boosts",
   "notifications.filter.favourites": "Favourites",
@@ -347,11 +336,11 @@
   "poll.closed": "ⵉⵜⵜⵓⵔⴳⵍ",
   "poll.refresh": "Refresh",
   "poll.total_people": "{count, plural, one {# ⵓⴼⴳⴰⵏ} other {# ⵉⴼⴳⴰⵏⵏ}}",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.total_votes": "{count, plural, one {# ⵓⵙⵜⵜⴰⵢ} other {# ⵉⵙⵜⵜⴰⵢⵏ}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
   "poll_button.add_poll": "ⵔⵏⵓ ⵢⴰⵏ ⵢⵉⴷⵣ",
-  "poll_button.remove_poll": "Remove poll",
+  "poll_button.remove_poll": "ⵙⵙⵉⵜⵢ ⵉⴷⵣ",
   "privacy.change": "Adjust status privacy",
   "privacy.direct.long": "Visible for mentioned users only",
   "privacy.direct.short": "ⵜⵓⵔⴷⵉⵜ",
@@ -447,14 +436,14 @@
   "timeline_hint.resources.followers": "ⵉⵎⴹⴼⴰⵕⵏ",
   "timeline_hint.resources.follows": "Follows",
   "timeline_hint.resources.statuses": "Older toots",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} ⵓⴼⴳⴰⵏ} other {{counter} ⵉⴼⴳⴰⵏⵏ}} ⴰⴳ ⵙⵙⴰⵡⴰⵍⵏ",
   "trends.trending_now": "Trending now",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "units.short.billion": "{count}B",
   "units.short.million": "{count}M",
   "units.short.thousand": "{count}K",
   "upload_area.title": "Drag & drop to upload",
-  "upload_button.label": "Add images, a video or an audio file",
+  "upload_button.label": "ⵔⵏⵓ ⵜⴰⵡⵍⴰⴼⵜ, ⴰⴼⵉⴷⵢⵓ ⵏⵖ ⴰⴼⴰⵢⵍⵓ ⵙ ⵉⵎⵙⵍⵉ",
   "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",
@@ -465,7 +454,7 @@
   "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
   "upload_modal.analyzing_picture": "Analyzing picture…",
   "upload_modal.apply": "Apply",
-  "upload_modal.choose_image": "Choose image",
+  "upload_modal.choose_image": "ⴷⵖⵔ ⵜⴰⵡⵍⴰⴼⵜ",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Detect text from picture",
   "upload_modal.edit_media": "Edit media",
@@ -478,9 +467,9 @@
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
   "video.fullscreen": "Full screen",
-  "video.hide": "Hide video",
+  "video.hide": "ⴼⴼⵔ ⴰⴼⵉⴷⵢⵓ",
   "video.mute": "Mute sound",
-  "video.pause": "Pause",
+  "video.pause": "ⵙⴱⴷⴷ",
   "video.play": "ⵖⵔ",
   "video.unmute": "Unmute sound"
 }
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 6c746bf96..9849134a6 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "此用户目前尚未关注任何人。",
   "account.follows_you": "关注了你",
   "account.hide_reblogs": "隐藏来自 @{name} 的转嘟",
+  "account.joined": "加入于 {date}",
   "account.last_status": "最近活动",
   "account.link_verified_on": "此链接的所有权已在 {date} 检查",
   "account.locked_info": "此账户已锁嘟。账户的主人会手动审核关注者。",
@@ -34,7 +35,7 @@
   "account.never_active": "从未活跃",
   "account.posts": "嘟文",
   "account.posts_with_replies": "嘟文和回复",
-  "account.report": "举报 @{name}",
+  "account.report": "报告 @{name}",
   "account.requested": "正在等待对方同意。点击以取消发送关注请求",
   "account.share": "分享 @{name} 的个人资料",
   "account.show_reblogs": "显示来自 @{name} 的转嘟",
@@ -105,7 +106,7 @@
   "compose_form.spoiler.unmarked": "正文未被折叠",
   "compose_form.spoiler_placeholder": "折叠部分的警告消息",
   "confirmation_modal.cancel": "取消",
-  "confirmations.block.block_and_report": "屏蔽与举报",
+  "confirmations.block.block_and_report": "屏蔽与报告",
   "confirmations.block.confirm": "屏蔽",
   "confirmations.block.message": "你确定要屏蔽 {name} 吗?",
   "confirmations.delete.confirm": "删除",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "目前没有被隐藏的站点。",
   "empty_column.favourited_statuses": "你还没有喜欢过任何嘟文。喜欢过的嘟文会显示在这里。",
   "empty_column.favourites": "没有人喜欢过这条嘟文。如果有人喜欢了,就会显示在这里。",
+  "empty_column.follow_recommendations": "似乎无法为您生成任何建议。您可以尝试使用搜索寻找您可能知道的人或探索热门标签。",
   "empty_column.follow_requests": "你没有收到新的关注请求。收到了之后就会显示在这里。",
   "empty_column.hashtag": "这个话题标签下暂时没有内容。",
   "empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。",
-  "empty_column.home.public_timeline": "公共时间轴",
+  "empty_column.home.suggestions": "查看一些建议",
   "empty_column.list": "此列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
   "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。",
   "empty_column.mutes": "你没有隐藏任何用户。",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。",
   "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板",
   "errors.unexpected_crash.report_issue": "报告问题",
+  "follow_recommendations.done": "完成",
+  "follow_recommendations.heading": "关注你感兴趣的用户!这里有一些推荐。",
+  "follow_recommendations.lead": "你关注的人发布的消息,会在你的主页动态里按时间顺序呈现。别担心,你也可以随时取消关注!",
   "follow_request.authorize": "同意",
   "follow_request.reject": "拒绝",
   "follow_requests.unlocked_explanation": "虽说你没有锁嘟,但是 {domain} 的工作人员觉得你可能想手工审核关注请求。",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number} 天",
   "intervals.full.hours": "{number} 小时",
   "intervals.full.minutes": "{number} 分钟",
-  "introduction.federation.action": "下一步",
-  "introduction.federation.federated.headline": "跨站",
-  "introduction.federation.federated.text": "联邦宇宙中其他服务器的公开嘟文会显示在跨站时间轴中。",
-  "introduction.federation.home.headline": "主页",
-  "introduction.federation.home.text": "你所关注的用户的动态会显示在主页里。你可以关注任何服务器上的任何人!",
-  "introduction.federation.local.headline": "本站",
-  "introduction.federation.local.text": "你所关注的用户的动态会显示在主页里,你可以关注任何服务器上的任何人。",
-  "introduction.interactions.action": "教程结束!",
-  "introduction.interactions.favourite.headline": "喜欢",
-  "introduction.interactions.favourite.text": "通过喜欢一条嘟文,你可以保存它以便以后阅读,并且告诉作者你喜欢它。",
-  "introduction.interactions.reblog.headline": "转嘟",
-  "introduction.interactions.reblog.text": "通过转嘟,你可以向你的关注者分享其他人的嘟文。",
-  "introduction.interactions.reply.headline": "回复",
-  "introduction.interactions.reply.text": "你可以回复其他嘟文,这些回复会像对话一样关联在一起。",
-  "introduction.welcome.action": "让我们开始吧!",
-  "introduction.welcome.headline": "首先",
-  "introduction.welcome.text": "欢迎来到联邦宇宙!很快,您就可以发布信息并和您的朋友交流,这些消息将发送到联邦中的各个服务器中。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。",
   "keyboard_shortcuts.back": "返回上一页",
   "keyboard_shortcuts.blocked": "打开被屏蔽用户列表",
   "keyboard_shortcuts.boost": "转嘟",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "在通知栏显示",
   "notifications.column_settings.sound": "播放音效",
   "notifications.column_settings.status": "新嘟文:",
+  "notifications.column_settings.unread_markers.category": "未读通知标记",
   "notifications.filter.all": "全部",
   "notifications.filter.boosts": "转嘟",
   "notifications.filter.favourites": "喜欢",
@@ -371,12 +360,12 @@
   "relative_time.seconds": "{number}秒",
   "relative_time.today": "今天",
   "reply_indicator.cancel": "取消",
-  "report.forward": "转发举报至 {target}",
-  "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的举报?",
-  "report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报该用户的理由:",
+  "report.forward": "转发报告至 {target}",
+  "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的报告?",
+  "report.hint": "报告将会发送给你所在服务器的监察员。你可以在下面填写报告该用户的理由:",
   "report.placeholder": "备注",
   "report.submit": "提交",
-  "report.target": "举报 {target}",
+  "report.target": "报告 {target}",
   "search.placeholder": "搜索",
   "search_popout.search_format": "高级搜索格式",
   "search_popout.tips.full_text": "输入关键词检索所有你发送、喜欢、转嘟过或提及到你的嘟文,以及其他用户公开的用户名、昵称和话题标签。",
@@ -420,7 +409,7 @@
   "status.remove_bookmark": "移除书签",
   "status.reply": "回复",
   "status.replyAll": "回复所有人",
-  "status.report": "举报 @{name}",
+  "status.report": "报告 @{name}",
   "status.sensitive_warning": "敏感内容",
   "status.share": "分享",
   "status.show_less": "隐藏内容",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 1a62ccbb3..68e99886f 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "這位使用者尚未關注任何人。",
   "account.follows_you": "關注你",
   "account.hide_reblogs": "隱藏 @{name} 的轉推",
+  "account.joined": "Joined {date}",
   "account.last_status": "上次活躍時間",
   "account.link_verified_on": "此連結的所有權已在 {date} 檢查過",
   "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "尚未隱藏任何網域。",
   "empty_column.favourited_statuses": "你還沒收藏任何文章。這裡將會顯示你收藏的嘟文。",
   "empty_column.favourites": "還沒有人收藏這則文章。這裡將會顯示被收藏的嘟文。",
+  "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
   "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。",
   "empty_column.hashtag": "這個標籤暫時未有內容。",
   "empty_column.home": "你還沒有關注任何使用者。快看看{public},向其他使用者搭訕吧。",
-  "empty_column.home.public_timeline": "公共時間軸",
+  "empty_column.home.suggestions": "See some suggestions",
   "empty_column.list": "這個列表暫時未有內容。",
   "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。",
   "empty_column.mutes": "你尚未靜音任何使用者。",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
   "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
   "errors.unexpected_crash.report_issue": "舉報問題",
+  "follow_recommendations.done": "Done",
+  "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
+  "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
   "follow_request.authorize": "批准",
   "follow_request.reject": "拒絕",
   "follow_requests.unlocked_explanation": "即使您的帳戶未上鎖,{domain} 的工作人員認為您可能想手動審核來自這些帳戶的關注請求。",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# 天} other {# 天}}",
   "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}",
   "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}",
-  "introduction.federation.action": "下一步",
-  "introduction.federation.federated.headline": "已知服務站",
-  "introduction.federation.federated.text": "來自社交聯盟其他網站的公開文章,將會顯示在站點跨站時間軸上。",
-  "introduction.federation.home.headline": "首頁",
-  "introduction.federation.home.text": "你所關注使用者的文章,將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!",
-  "introduction.federation.local.headline": "本站",
-  "introduction.federation.local.text": "與你共用一個服務站使用者的公開文章,將會顯示在本站時間軸中。",
-  "introduction.interactions.action": "完成使用教學",
-  "introduction.interactions.favourite.headline": "最愛",
-  "introduction.interactions.favourite.text": "你能用將文章加入「最愛的文章」,一方便把儲存文章稍候觀看,也同時對作者表示支持。",
-  "introduction.interactions.reblog.headline": "轉推",
-  "introduction.interactions.reblog.text": "你可以透過「轉推文章」把文章分享給你的關注者。",
-  "introduction.interactions.reply.headline": "回覆",
-  "introduction.interactions.reply.text": "你可以回覆其他人或自己的文章,這麼做會把這些回覆串成一串對話。",
-  "introduction.welcome.action": "開始旅程吧!",
-  "introduction.welcome.headline": "第一步",
-  "introduction.welcome.text": "歡迎來到聯盟社交網絡 (fediverse)!稍後你就可以廣播訊息,同時與多個服務站的不同朋友聊天。但留意 {domain} 這個服務站非常特別——它託管了你的個人資料啊!所以請記住它。",
   "keyboard_shortcuts.back": "返回",
   "keyboard_shortcuts.blocked": "開啟封鎖名單",
   "keyboard_shortcuts.boost": "轉推",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "在通知欄顯示",
   "notifications.column_settings.sound": "播放音效",
   "notifications.column_settings.status": "新的文章",
+  "notifications.column_settings.unread_markers.category": "Unread notification markers",
   "notifications.filter.all": "全部",
   "notifications.filter.boosts": "轉推",
   "notifications.filter.favourites": "最愛",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index cc996e91b..9b98451ad 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -22,6 +22,7 @@
   "account.follows.empty": "這位使用者尚未關注任何人。",
   "account.follows_you": "關注了您",
   "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟",
+  "account.joined": "加入於 {date}",
   "account.last_status": "上次活躍時間",
   "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限",
   "account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。",
@@ -159,10 +160,11 @@
   "empty_column.domain_blocks": "尚未封鎖任何網域。",
   "empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。",
   "empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。",
+  "empty_column.follow_recommendations": "似乎未能為您生成任何建議。您可以嘗試使用搜尋來尋找您可能認識的人,或是探索熱門主題標籤。",
   "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。",
   "empty_column.hashtag": "這個主題標籤下什麼也沒有。",
   "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。",
-  "empty_column.home.public_timeline": "公開時間軸",
+  "empty_column.home.suggestions": "檢視部份建議",
   "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。",
   "empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。",
   "empty_column.mutes": "您尚未靜音任何使用者。",
@@ -174,6 +176,9 @@
   "error.unexpected_crash.next_steps_addons": "請嘗試關閉他們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
   "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
   "errors.unexpected_crash.report_issue": "回報問題",
+  "follow_recommendations.done": "完成",
+  "follow_recommendations.heading": "追蹤您想檢視其貼文的人!這裡有一些建議。",
+  "follow_recommendations.lead": "來自您追蹤的人的貼文將會按時間順序顯示在您的家 feed 上。不要害怕犯錯,您隨時都可以取消追蹤其他人!",
   "follow_request.authorize": "授權",
   "follow_request.reject": "拒絕",
   "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳號的追蹤請求。",
@@ -203,23 +208,6 @@
   "intervals.full.days": "{number, plural, one {# 天} other {# 天}}",
   "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}",
   "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}",
-  "introduction.federation.action": "下一步",
-  "introduction.federation.federated.headline": "聯邦",
-  "introduction.federation.federated.text": "來自聯盟宇宙中其他伺服器的公開嘟文將會在聯邦時間軸中顯示。",
-  "introduction.federation.home.headline": "首頁",
-  "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!",
-  "introduction.federation.local.headline": "本機",
-  "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。",
-  "introduction.interactions.action": "完成教學!",
-  "introduction.interactions.favourite.headline": "收藏",
-  "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。",
-  "introduction.interactions.reblog.headline": "轉嘟",
-  "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。",
-  "introduction.interactions.reply.headline": "回覆",
-  "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。",
-  "introduction.welcome.action": "開始旅程吧!",
-  "introduction.welcome.headline": "第一步",
-  "introduction.welcome.text": "歡迎來到聯盟宇宙!稍候您就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它承載了您的個人資料,所以請記住它的名字。",
   "keyboard_shortcuts.back": "返回上一頁",
   "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單",
   "keyboard_shortcuts.boost": "轉嘟",
@@ -327,6 +315,7 @@
   "notifications.column_settings.show": "在欄位中顯示",
   "notifications.column_settings.sound": "播放聲音",
   "notifications.column_settings.status": "新嘟文:",
+  "notifications.column_settings.unread_markers.category": "未讀通知標記",
   "notifications.filter.all": "全部",
   "notifications.filter.boosts": "轉嘟",
   "notifications.filter.favourites": "最愛",
diff --git a/app/javascript/mastodon/reducers/suggestions.js b/app/javascript/mastodon/reducers/suggestions.js
index 834be728f..1a6e66ee7 100644
--- a/app/javascript/mastodon/reducers/suggestions.js
+++ b/app/javascript/mastodon/reducers/suggestions.js
@@ -19,18 +19,18 @@ export default function suggestionsReducer(state = initialState, action) {
     return state.set('isLoading', true);
   case SUGGESTIONS_FETCH_SUCCESS:
     return state.withMutations(map => {
-      map.set('items', fromJS(action.accounts.map(x => x.id)));
+      map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id }))));
       map.set('isLoading', false);
     });
   case SUGGESTIONS_FETCH_FAIL:
     return state.set('isLoading', false);
   case SUGGESTIONS_DISMISS:
-    return state.update('items', list => list.filterNot(id => id === action.id));
+    return state.update('items', list => list.filterNot(x => x.account === action.id));
   case ACCOUNT_BLOCK_SUCCESS:
   case ACCOUNT_MUTE_SUCCESS:
-    return state.update('items', list => list.filterNot(id => id === action.relationship.id));
+    return state.update('items', list => list.filterNot(x => x.account === action.relationship.id));
   case DOMAIN_BLOCK_SUCCESS:
-    return state.update('items', list => list.filterNot(id => action.accounts.includes(id)));
+    return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account)));
   default:
     return state;
   }
diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js
index 9156db021..b66c19fd5 100644
--- a/app/javascript/mastodon/reducers/timelines.js
+++ b/app/javascript/mastodon/reducers/timelines.js
@@ -9,6 +9,7 @@ import {
   TIMELINE_CONNECT,
   TIMELINE_DISCONNECT,
   TIMELINE_LOAD_PENDING,
+  TIMELINE_MARK_AS_PARTIAL,
 } from '../actions/timelines';
 import {
   ACCOUNT_BLOCK_SUCCESS,
@@ -168,6 +169,12 @@ export default function timelines(state = initialState, action) {
       initialTimeline,
       map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items),
     );
+  case TIMELINE_MARK_AS_PARTIAL:
+    return state.update(
+      action.timeline,
+      initialTimeline,
+      map => map.set('isPartial', true).set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('unread', 0),
+    );
   default:
     return state;
   }
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 2059aa8f3..9d936e684 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -1307,6 +1307,29 @@
     overflow: hidden;
     text-decoration: none;
     font-size: 14px;
+
+    &--with-note {
+      strong {
+        display: inline;
+      }
+    }
+  }
+
+  &__note {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    color: $ui-secondary-color;
+  }
+}
+
+.follow-recommendations-account {
+  .icon-button {
+    color: $ui-primary-color;
+
+    &.active {
+      color: $valid-value-color;
+    }
   }
 }
 
@@ -2459,6 +2482,65 @@ a.account__display-name {
   border-color: darken($ui-base-color, 8%);
 }
 
+.column-title {
+  text-align: center;
+  padding: 40px;
+
+  .logo {
+    fill: $primary-text-color;
+    width: 50px;
+    margin: 0 auto;
+    margin-bottom: 40px;
+  }
+
+  h3 {
+    font-size: 24px;
+    line-height: 1.5;
+    font-weight: 700;
+    margin-bottom: 10px;
+  }
+
+  p {
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 400;
+    color: $darker-text-color;
+  }
+}
+
+.column-actions {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 40px;
+  padding-top: 40px;
+  padding-bottom: 200px;
+
+  &__background {
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    height: 220px;
+    width: auto;
+  }
+}
+
+.column-list {
+  margin: 0 20px;
+  border: 1px solid lighten($ui-base-color, 8%);
+  background: darken($ui-base-color, 2%);
+  border-radius: 4px;
+
+  &__empty-message {
+    padding: 40px;
+    text-align: center;
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 400;
+    color: $darker-text-color;
+  }
+}
+
 .compose-panel {
   width: 285px;
   margin-top: 10px;
@@ -6687,6 +6769,17 @@ noscript {
       }
     }
 
+    .account__header__joined {
+      font-size: 14px;
+      padding: 5px 15px;
+      color: $darker-text-color;
+
+      .columns-area--mobile & {
+        padding-left: 20px;
+        padding-right: 20px;
+      }
+    }
+
     .account__header__fields {
       margin: 0;
       border-top: 1px solid lighten($ui-base-color, 12%);
diff --git a/app/lib/account_reach_finder.rb b/app/lib/account_reach_finder.rb
new file mode 100644
index 000000000..706ce8c1f
--- /dev/null
+++ b/app/lib/account_reach_finder.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class AccountReachFinder
+  def initialize(account)
+    @account = account
+  end
+
+  def inboxes
+    (followers_inboxes + reporters_inboxes + relay_inboxes).uniq
+  end
+
+  private
+
+  def followers_inboxes
+    @account.followers.inboxes
+  end
+
+  def reporters_inboxes
+    Account.where(id: @account.targeted_reports.select(:account_id)).inboxes
+  end
+
+  def relay_inboxes
+    Relay.enabled.pluck(:inbox_url)
+  end
+end
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index 2b5d3ffc2..3baee4ca4 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -144,7 +144,7 @@ class ActivityPub::Activity
   end
 
   def delete_later!(uri)
-    redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, uri)
+    redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, true)
   end
 
   def status_from_object
@@ -210,12 +210,22 @@ class ActivityPub::Activity
     end
   end
 
-  def lock_or_return(key, expire_after = 7.days.seconds)
+  def lock_or_return(key, expire_after = 2.hours.seconds)
     yield if redis.set(key, true, nx: true, ex: expire_after)
   ensure
     redis.del(key)
   end
 
+  def lock_or_fail(key)
+    RedisLock.acquire({ redis: Redis.current, key: key }) do |lock|
+      if lock.acquired?
+        yield
+      else
+        raise Mastodon::RaceConditionError
+      end
+    end
+  end
+
   def fetch?
     !@options[:delivery]
   end
diff --git a/app/lib/activitypub/activity/announce.rb b/app/lib/activitypub/activity/announce.rb
index ae8b2db75..9f778ffb9 100644
--- a/app/lib/activitypub/activity/announce.rb
+++ b/app/lib/activitypub/activity/announce.rb
@@ -4,29 +4,29 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
   def perform
     return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
 
-    RedisLock.acquire(lock_options) do |lock|
-      if lock.acquired?
-        original_status = status_from_object
+    lock_or_fail("announce:#{@object['id']}") do
+      original_status = status_from_object
 
-        return reject_payload! if original_status.nil? || !announceable?(original_status)
+      return reject_payload! if original_status.nil? || !announceable?(original_status)
 
-        @status = Status.find_by(account: @account, reblog: original_status)
+      @status = Status.find_by(account: @account, reblog: original_status)
 
-        return @status unless @status.nil?
+      return @status unless @status.nil?
 
-        @status = Status.create!(
-          account: @account,
-          reblog: original_status,
-          uri: @json['id'],
-          created_at: @json['published'],
-          override_timestamps: @options[:override_timestamps],
-          visibility: visibility_from_audience
-        )
+      @status = Status.create!(
+        account: @account,
+        reblog: original_status,
+        uri: @json['id'],
+        created_at: @json['published'],
+        override_timestamps: @options[:override_timestamps],
+        visibility: visibility_from_audience
+      )
 
-        distribute(@status)
-      else
-        raise Mastodon::RaceConditionError
+      original_status.tags.each do |tag|
+        tag.use!(@account)
       end
+
+      distribute(@status)
     end
 
     @status
@@ -69,8 +69,4 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
   def reblog_of_local_status?
     status_from_uri(object_uri)&.account&.local?
   end
-
-  def lock_options
-    { redis: Redis.current, key: "announce:#{@object['id']}" }
-  end
 end
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index f10fc5f43..763c417f9 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -45,19 +45,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
   def create_status
     return reject_payload! if unsupported_object_type? || invalid_origin?(object_uri) || tombstone_exists? || !related_to_local_activity?
 
-    RedisLock.acquire(lock_options) do |lock|
-      if lock.acquired?
-        return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
+    lock_or_fail("create:#{object_uri}") do
+      return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
 
-        @status = find_existing_status
+      @status = find_existing_status
 
-        if @status.nil?
-          process_status
-        elsif @options[:delivered_to_account_id].present?
-          postprocess_audience_and_deliver
-        end
-      else
-        raise Mastodon::RaceConditionError
+      if @status.nil?
+        process_status
+      elsif @options[:delivered_to_account_id].present?
+        postprocess_audience_and_deliver
       end
     end
 
@@ -88,7 +84,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 
     resolve_thread(@status)
     fetch_replies(@status)
-    check_for_spam
     distribute(@status)
     forward_for_reply
   end
@@ -169,7 +164,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
   def attach_tags(status)
     @tags.each do |tag|
       status.tags << tag
-      TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility?
+      tag.use!(@account, status: status, at_time: status.created_at) if status.public_visibility?
     end
 
     @mentions.each do |mention|
@@ -314,13 +309,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     poll = replied_to_status.preloadable_poll
     already_voted = true
 
-    RedisLock.acquire(poll_lock_options) do |lock|
-      if lock.acquired?
-        already_voted = poll.votes.where(account: @account).exists?
-        poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
-      else
-        raise Mastodon::RaceConditionError
-      end
+    lock_or_fail("vote:#{replied_to_status.poll_id}:#{@account.id}") do
+      already_voted = poll.votes.where(account: @account).exists?
+      poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
     end
 
     increment_voters_count! unless already_voted
@@ -498,10 +489,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     Tombstone.exists?(uri: object_uri)
   end
 
-  def check_for_spam
-    SpamCheck.perform(@status)
-  end
-
   def forward_for_reply
     return unless @status.distributable? && @json['signature'].present? && reply_to_local?
 
@@ -519,12 +506,4 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     poll.reload
     retry
   end
-
-  def lock_options
-    { redis: Redis.current, key: "create:#{object_uri}" }
-  end
-
-  def poll_lock_options
-    { redis: Redis.current, key: "vote:#{replied_to_status.poll_id}:#{@account.id}" }
-  end
 end
diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb
index 2e5293b83..801647cf7 100644
--- a/app/lib/activitypub/activity/delete.rb
+++ b/app/lib/activitypub/activity/delete.rb
@@ -20,33 +20,35 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
   def delete_note
     return if object_uri.nil?
 
-    unless invalid_origin?(object_uri)
-      RedisLock.acquire(lock_options) { |_lock| delete_later!(object_uri) }
-      Tombstone.find_or_create_by(uri: object_uri, account: @account)
-    end
+    lock_or_return("delete_status_in_progress:#{object_uri}", 5.minutes.seconds) do
+      unless invalid_origin?(object_uri)
+        # This lock ensures a concurrent `ActivityPub::Activity::Create` either
+        # does not create a status at all, or has finished saving it to the
+        # database before we try to load it.
+        # Without the lock, `delete_later!` could be called after `delete_arrived_first?`
+        # and `Status.find` before `Status.create!`
+        lock_or_fail("create:#{object_uri}") { delete_later!(object_uri) }
 
-    @status   = Status.find_by(uri: object_uri, account: @account)
-    @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
+        Tombstone.find_or_create_by(uri: object_uri, account: @account)
+      end
 
-    return if @status.nil?
+      @status   = Status.find_by(uri: object_uri, account: @account)
+      @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
 
-    if @status.distributable?
-      forward_for_reply
-      forward_for_reblogs
-    end
+      return if @status.nil?
 
-    delete_now!
+      forward! if @json['signature'].present? && @status.distributable?
+      delete_now!
+    end
   end
 
-  def forward_for_reblogs
-    return if @json['signature'].blank?
-
-    rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
-    inboxes        = Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes - [@account.preferred_inbox_url]
+  def rebloggers_ids
+    return @rebloggers_ids if defined?(@rebloggers_ids)
+    @rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
+  end
 
-    ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
-      [payload, rebloggers_ids.first, inbox_url]
-    end
+  def inboxes_for_reblogs
+    Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes
   end
 
   def replied_to_status
@@ -58,13 +60,19 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
     !replied_to_status.nil? && replied_to_status.account.local?
   end
 
-  def forward_for_reply
-    return unless @json['signature'].present? && reply_to_local?
+  def inboxes_for_reply
+    replied_to_status.account.followers.inboxes
+  end
+
+  def forward!
+    inboxes = inboxes_for_reblogs
+    inboxes += inboxes_for_reply if reply_to_local?
+    inboxes -= [@account.preferred_inbox_url]
 
-    inboxes = replied_to_status.account.followers.inboxes - [@account.preferred_inbox_url]
+    sender_id = reply_to_local? ? replied_to_status.account_id : rebloggers_ids.first
 
-    ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
-      [payload, replied_to_status.account_id, inbox_url]
+    ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes.uniq) do |inbox_url|
+      [payload, sender_id, inbox_url]
     end
   end
 
@@ -75,8 +83,4 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
   def payload
     @payload ||= Oj.dump(@json)
   end
-
-  def lock_options
-    { redis: Redis.current, key: "create:#{object_uri}" }
-  end
 end
diff --git a/app/lib/activitypub/activity/flag.rb b/app/lib/activitypub/activity/flag.rb
index 8dfc76f0a..b0443849a 100644
--- a/app/lib/activitypub/activity/flag.rb
+++ b/app/lib/activitypub/activity/flag.rb
@@ -10,6 +10,8 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity
     target_accounts.each do |target_account|
       target_statuses = target_statuses_by_account[target_account.id]
 
+      next if target_account.suspended?
+
       ReportService.new.call(
         @account,
         target_account,
diff --git a/app/lib/admin/system_check/sidekiq_process_check.rb b/app/lib/admin/system_check/sidekiq_process_check.rb
index c44d86c44..22446edaf 100644
--- a/app/lib/admin/system_check/sidekiq_process_check.rb
+++ b/app/lib/admin/system_check/sidekiq_process_check.rb
@@ -7,7 +7,6 @@ class Admin::SystemCheck::SidekiqProcessCheck < Admin::SystemCheck::BaseCheck
     mailers
     pull
     scheduler
-    ingress
   ).freeze
 
   def pass?
diff --git a/app/lib/application_extension.rb b/app/lib/application_extension.rb
index 1d80b8c6d..e61cd0721 100644
--- a/app/lib/application_extension.rb
+++ b/app/lib/application_extension.rb
@@ -4,6 +4,8 @@ module ApplicationExtension
   extend ActiveSupport::Concern
 
   included do
-    validates :website, url: true, if: :website?
+    validates :name, length: { maximum: 60 }
+    validates :website, url: true, length: { maximum: 2_000 }, if: :website?
+    validates :redirect_uri, length: { maximum: 2_000 }
   end
 end
diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb
index 2cd6ef7ad..8907ade4c 100644
--- a/app/lib/delivery_failure_tracker.rb
+++ b/app/lib/delivery_failure_tracker.rb
@@ -17,6 +17,10 @@ class DeliveryFailureTracker
     UnavailableDomain.find_by(domain: @host)&.destroy
   end
 
+  def clear_failures!
+    Redis.current.del(exhausted_deliveries_key)
+  end
+
   def days
     Redis.current.scard(exhausted_deliveries_key) || 0
   end
@@ -25,6 +29,10 @@ class DeliveryFailureTracker
     !UnavailableDomain.where(domain: @host).exists?
   end
 
+  def exhausted_deliveries_days
+    Redis.current.smembers(exhausted_deliveries_key).sort.map { |date| Date.new(date.slice(0, 4).to_i, date.slice(4, 2).to_i, date.slice(6, 2).to_i) }
+  end
+
   alias reset! track_success!
 
   class << self
@@ -44,6 +52,24 @@ class DeliveryFailureTracker
     def reset!(url)
       new(url).reset!
     end
+
+    def warning_domains
+      domains = Redis.current.keys(exhausted_deliveries_key_by('*')).map do |key|
+        key.delete_prefix(exhausted_deliveries_key_by(''))
+      end
+
+      domains - UnavailableDomain.all.pluck(:domain)
+    end
+
+    def warning_domains_map
+      warning_domains.index_with { |domain| Redis.current.scard(exhausted_deliveries_key_by(domain)) }
+    end
+
+    private
+
+    def exhausted_deliveries_key_by(host)
+      "exhausted_deliveries:#{host}"
+    end
   end
 
   private
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index 90e6652a9..d57508ef9 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -219,6 +219,36 @@ class FeedManager
     end
   end
 
+  # Clear all statuses from or mentioning target_account from a list feed
+  # @param [List] list
+  # @param [Account] target_account
+  # @return [void]
+  def clear_from_list(list, target_account)
+    timeline_key        = key(:list, list.id)
+    timeline_status_ids = redis.zrange(timeline_key, 0, -1)
+    statuses            = Status.where(id: timeline_status_ids).select(:id, :reblog_of_id, :account_id).to_a
+    reblogged_ids       = Status.where(id: statuses.map(&:reblog_of_id).compact, account: target_account).pluck(:id)
+    with_mentions_ids   = Mention.active.where(status_id: statuses.flat_map { |s| [s.id, s.reblog_of_id] }.compact, account: target_account).pluck(:status_id)
+
+    target_statuses = statuses.select do |status|
+      status.account_id == target_account.id || reblogged_ids.include?(status.reblog_of_id) || with_mentions_ids.include?(status.id) || with_mentions_ids.include?(status.reblog_of_id)
+    end
+
+    target_statuses.each do |status|
+      unpush_from_list(list, status)
+    end
+  end
+
+  # Clear all statuses from or mentioning target_account from an account's lists
+  # @param [Account] account
+  # @param [Account] target_account
+  # @return [void]
+  def clear_from_lists(account, target_account)
+    List.where(account: account).each do |list|
+      clear_from_list(list, target_account)
+    end
+  end
+
   # Populate home feed of account from scratch
   # @param [Account] account
   # @return [void]
diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb
index 02ebe6f89..b26138642 100644
--- a/app/lib/formatter.rb
+++ b/app/lib/formatter.rb
@@ -118,7 +118,7 @@ class Formatter
   end
 
   def format_field(account, str, **options)
-    html = account.local? ? encode_and_link_urls(str, me: true) : reformat(str)
+    html = account.local? ? encode_and_link_urls(str, me: true, with_domain: true) : reformat(str)
     html = encode_custom_emojis(html, account.emojis, options[:autoplay]) if options[:custom_emojify]
     html.html_safe # rubocop:disable Rails/OutputSafety
   end
@@ -187,7 +187,7 @@ class Formatter
       elsif entity[:hashtag]
         link_to_hashtag(entity)
       elsif entity[:screen_name]
-        link_to_mention(entity, accounts)
+        link_to_mention(entity, accounts, options)
       end
     end
   end
@@ -352,22 +352,37 @@ class Formatter
     encode(entity[:url])
   end
 
-  def link_to_mention(entity, linkable_accounts)
+  def link_to_mention(entity, linkable_accounts, options = {})
     acct = entity[:screen_name]
 
-    return link_to_account(acct) unless linkable_accounts
+    return link_to_account(acct, options) unless linkable_accounts
 
-    account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) }
-    account ? mention_html(account) : "@#{encode(acct)}"
+    same_username_hits = 0
+    account = nil
+    username, domain = acct.split('@')
+    domain = nil if TagManager.instance.local_domain?(domain)
+
+    linkable_accounts.each do |item|
+      same_username = item.username.casecmp(username).zero?
+      same_domain   = item.domain.nil? ? domain.nil? : item.domain.casecmp(domain)&.zero?
+
+      if same_username && !same_domain
+        same_username_hits += 1
+      elsif same_username && same_domain
+        account = item
+      end
+    end
+
+    account ? mention_html(account, with_domain: same_username_hits.positive? || options[:with_domain]) : "@#{encode(acct)}"
   end
 
-  def link_to_account(acct)
+  def link_to_account(acct, options = {})
     username, domain = acct.split('@')
 
     domain  = nil if TagManager.instance.local_domain?(domain)
     account = EntityCache.instance.mention(username, domain)
 
-    account ? mention_html(account) : "@#{encode(acct)}"
+    account ? mention_html(account, with_domain: options[:with_domain]) : "@#{encode(acct)}"
   end
 
   def link_to_hashtag(entity)
@@ -388,7 +403,7 @@ class Formatter
     "<a href=\"#{encode(tag_url(tag))}\" class=\"mention hashtag\" rel=\"tag\">#<span>#{encode(tag)}</span></a>"
   end
 
-  def mention_html(account)
-    "<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>"
+  def mention_html(account, with_domain: false)
+    "<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(with_domain ? account.pretty_acct : account.username)}</span></a></span>"
   end
 end
diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb
index 188aa4a27..f5bc20346 100644
--- a/app/lib/potential_friendship_tracker.rb
+++ b/app/lib/potential_friendship_tracker.rb
@@ -27,11 +27,5 @@ class PotentialFriendshipTracker
     def remove(account_id, target_account_id)
       redis.zrem("interactions:#{account_id}", target_account_id)
     end
-
-    def get(account_id, limit: 20, offset: 0)
-      account_ids = redis.zrevrange("interactions:#{account_id}", offset, limit)
-      return [] if account_ids.empty?
-      Account.searchable.where(id: account_ids)
-    end
   end
 end
diff --git a/app/lib/spam_check.rb b/app/lib/spam_check.rb
deleted file mode 100644
index dcb2db9ca..000000000
--- a/app/lib/spam_check.rb
+++ /dev/null
@@ -1,198 +0,0 @@
-# frozen_string_literal: true
-
-class SpamCheck
-  include Redisable
-  include ActionView::Helpers::TextHelper
-
-  # Threshold over which two Nilsimsa values are considered
-  # to refer to the same text
-  NILSIMSA_COMPARE_THRESHOLD = 95
-
-  # Nilsimsa doesn't work well on small inputs, so below
-  # this size, we check only for exact matches with MD5
-  NILSIMSA_MIN_SIZE = 10
-
-  # How long to keep the trail of digests between updates,
-  # there is no reason to store it forever
-  EXPIRE_SET_AFTER = 1.week.seconds
-
-  # How many digests to keep in an account's trail. If it's
-  # too small, spam could rotate around different message templates
-  MAX_TRAIL_SIZE = 10
-
-  # How many detected duplicates to allow through before
-  # considering the message as spam
-  THRESHOLD = 5
-
-  def initialize(status)
-    @account = status.account
-    @status  = status
-  end
-
-  def skip?
-    disabled? || already_flagged? || trusted? || no_unsolicited_mentions? || solicited_reply?
-  end
-
-  def spam?
-    if insufficient_data?
-      false
-    elsif nilsimsa?
-      digests_over_threshold?('nilsimsa') { |_, other_digest| nilsimsa_compare_value(digest, other_digest) >= NILSIMSA_COMPARE_THRESHOLD }
-    else
-      digests_over_threshold?('md5') { |_, other_digest| other_digest == digest }
-    end
-  end
-
-  def flag!
-    auto_report_status!
-  end
-
-  def remember!
-    # The scores in sorted sets don't actually have enough bits to hold an exact
-    # value of our snowflake IDs, so we use it only for its ordering property. To
-    # get the correct status ID back, we have to save it in the string value
-
-    redis.zadd(redis_key, @status.id, digest_with_algorithm)
-    redis.zremrangebyrank(redis_key, 0, -(MAX_TRAIL_SIZE + 1))
-    redis.expire(redis_key, EXPIRE_SET_AFTER)
-  end
-
-  def reset!
-    redis.del(redis_key)
-  end
-
-  def hashable_text
-    return @hashable_text if defined?(@hashable_text)
-
-    @hashable_text = @status.text
-    @hashable_text = remove_mentions(@hashable_text)
-    @hashable_text = strip_tags(@hashable_text) unless @status.local?
-    @hashable_text = normalize_unicode(@status.spoiler_text + ' ' + @hashable_text)
-    @hashable_text = remove_whitespace(@hashable_text)
-  end
-
-  def insufficient_data?
-    hashable_text.blank?
-  end
-
-  def digest
-    @digest ||= begin
-      if nilsimsa?
-        Nilsimsa.new(hashable_text).hexdigest
-      else
-        Digest::MD5.hexdigest(hashable_text)
-      end
-    end
-  end
-
-  def digest_with_algorithm
-    if nilsimsa?
-      ['nilsimsa', digest, @status.id].join(':')
-    else
-      ['md5', digest, @status.id].join(':')
-    end
-  end
-
-  class << self
-    def perform(status)
-      spam_check = new(status)
-
-      return if spam_check.skip?
-
-      if spam_check.spam?
-        spam_check.flag!
-      else
-        spam_check.remember!
-      end
-    end
-  end
-
-  private
-
-  def disabled?
-    !Setting.spam_check_enabled
-  end
-
-  def remove_mentions(text)
-    return text.gsub(Account::MENTION_RE, '') if @status.local?
-
-    Nokogiri::HTML.fragment(text).tap do |html|
-      mentions = @status.mentions.map { |mention| ActivityPub::TagManager.instance.url_for(mention.account) }
-
-      html.traverse do |element|
-        element.unlink if element.name == 'a' && mentions.include?(element['href'])
-      end
-    end.to_s
-  end
-
-  def normalize_unicode(text)
-    text.unicode_normalize(:nfkc).downcase
-  end
-
-  def remove_whitespace(text)
-    text.gsub(/\s+/, ' ').strip
-  end
-
-  def auto_report_status!
-    status_ids = Status.where(visibility: %i(public unlisted)).where(id: matching_status_ids).pluck(:id) + [@status.id] if @status.distributable?
-    ReportService.new.call(Account.representative, @account, status_ids: status_ids, comment: I18n.t('spam_check.spam_detected'))
-  end
-
-  def already_flagged?
-    @account.silenced? || @account.targeted_reports.unresolved.where(account_id: -99).exists?
-  end
-
-  def trusted?
-    @account.trust_level > Account::TRUST_LEVELS[:untrusted] || (@account.local? && @account.user_staff?)
-  end
-
-  def no_unsolicited_mentions?
-    @status.mentions.all? { |mention| mention.silent? || (!@account.local? && !mention.account.local?) || mention.account.following?(@account) }
-  end
-
-  def solicited_reply?
-    !@status.thread.nil? && @status.thread.mentions.where(account: @account).exists?
-  end
-
-  def nilsimsa_compare_value(first, second)
-    first  = [first].pack('H*')
-    second = [second].pack('H*')
-    bits   = 0
-
-    0.upto(31) do |i|
-      bits += Nilsimsa::POPC[255 & (first[i].ord ^ second[i].ord)].ord
-    end
-
-    128 - bits # -128 <= Nilsimsa Compare Value <= 128
-  end
-
-  def nilsimsa?
-    hashable_text.size > NILSIMSA_MIN_SIZE
-  end
-
-  def other_digests
-    redis.zrange(redis_key, 0, -1)
-  end
-
-  def digests_over_threshold?(filter_algorithm)
-    other_digests.select do |record|
-      algorithm, other_digest, status_id = record.split(':')
-
-      next unless algorithm == filter_algorithm
-
-      yield algorithm, other_digest, status_id
-    end.size >= THRESHOLD
-  end
-
-  def matching_status_ids
-    if nilsimsa?
-      other_digests.filter_map { |record| record.split(':')[2] if record.start_with?('nilsimsa') && nilsimsa_compare_value(digest, record.split(':')[1]) >= NILSIMSA_COMPARE_THRESHOLD }
-    else
-      other_digests.filter_map { |record| record.split(':')[2] if record.start_with?('md5') && record.split(':')[1] == digest }
-    end
-  end
-
-  def redis_key
-    @redis_key ||= "spam_check:#{@account.id}"
-  end
-end
diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb
index 35b191dad..735d66a4f 100644
--- a/app/lib/status_reach_finder.rb
+++ b/app/lib/status_reach_finder.rb
@@ -6,11 +6,22 @@ class StatusReachFinder
   end
 
   def inboxes
-    Account.where(id: reached_account_ids).inboxes
+    (reached_account_inboxes + followers_inboxes + relay_inboxes).uniq
   end
 
   private
 
+  def reached_account_inboxes
+    # When the status is a reblog, there are no interactions with it
+    # directly, we assume all interactions are with the original one
+
+    if @status.reblog?
+      []
+    else
+      Account.where(id: reached_account_ids).inboxes
+    end
+  end
+
   def reached_account_ids
     [
       replied_to_account_id,
@@ -49,4 +60,20 @@ class StatusReachFinder
   def replies_account_ids
     @status.replies.pluck(:account_id)
   end
+
+  def followers_inboxes
+    if @status.in_reply_to_local_account? && @status.distributable?
+      @status.account.followers.or(@status.thread.account.followers).inboxes
+    else
+      @status.account.followers.inboxes
+    end
+  end
+
+  def relay_inboxes
+    if @status.public_visibility?
+      Relay.enabled.pluck(:inbox_url)
+    else
+      []
+    end
+  end
 end
diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb
index 29dde128c..a1d12a654 100644
--- a/app/lib/tag_manager.rb
+++ b/app/lib/tag_manager.rb
@@ -22,14 +22,6 @@ class TagManager
     uri.normalized_host
   end
 
-  def same_acct?(canonical, needle)
-    return true if canonical.casecmp(needle).zero?
-
-    username, domain = needle.split('@')
-
-    local_domain?(domain) && canonical.casecmp(username).zero?
-  end
-
   def local_url?(url)
     uri    = Addressable::URI.parse(url).normalize
     return false unless uri.host
diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb
new file mode 100644
index 000000000..03e40f923
--- /dev/null
+++ b/app/lib/video_metadata_extractor.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+class VideoMetadataExtractor
+  attr_reader :duration, :bitrate, :video_codec, :audio_codec,
+              :colorspace, :width, :height, :frame_rate
+
+  def initialize(path)
+    @path     = path
+    @metadata = Oj.load(ffmpeg_command_output, mode: :strict, symbol_keys: true)
+
+    parse_metadata
+  rescue Terrapin::ExitStatusError, Oj::ParseError
+    @invalid = true
+  rescue Terrapin::CommandNotFoundError
+    raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffprobe` command. Please install ffmpeg.'
+  end
+
+  def valid?
+    !@invalid
+  end
+
+  private
+
+  def ffmpeg_command_output
+    command = Terrapin::CommandLine.new('ffprobe', '-i :path -print_format :format -show_format -show_streams -show_error -loglevel :loglevel')
+    command.run(path: @path, format: 'json', loglevel: 'fatal')
+  end
+
+  def parse_metadata
+    if @metadata.key?(:format)
+      @duration = @metadata[:format][:duration].to_f
+      @bitrate  = @metadata[:format][:bit_rate].to_i
+    end
+
+    if @metadata.key?(:streams)
+      video_streams = @metadata[:streams].select { |stream| stream[:codec_type] == 'video' }
+      audio_streams = @metadata[:streams].select { |stream| stream[:codec_type] == 'audio' }
+
+      if (video_stream = video_streams.first)
+        @video_codec = video_stream[:codec_name]
+        @colorspace  = video_stream[:pix_fmt]
+        @width       = video_stream[:width]
+        @height      = video_stream[:height]
+        @frame_rate  = video_stream[:avg_frame_rate] == '0/0' ? nil : Rational(video_stream[:avg_frame_rate])
+      end
+
+      if (audio_stream = audio_streams.first)
+        @audio_codec = audio_stream[:codec_name]
+      end
+    end
+
+    @invalid = true if @metadata.key?(:error)
+  end
+end
diff --git a/app/models/account.rb b/app/models/account.rb
index 2e7d9f543..53c6a43a6 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -6,12 +6,8 @@
 #  id                            :bigint(8)        not null, primary key
 #  username                      :string           default(""), not null
 #  domain                        :string
-#  secret                        :string           default(""), not null
 #  private_key                   :text
 #  public_key                    :text             default(""), not null
-#  remote_url                    :string           default(""), not null
-#  salmon_url                    :string           default(""), not null
-#  hub_url                       :string           default(""), not null
 #  created_at                    :datetime         not null
 #  updated_at                    :datetime         not null
 #  note                          :text             default(""), not null
@@ -49,12 +45,18 @@
 #  avatar_storage_schema_version :integer
 #  header_storage_schema_version :integer
 #  devices_url                   :string
-#  sensitized_at                 :datetime
 #  suspension_origin             :integer
+#  sensitized_at                 :datetime
 #
 
 class Account < ApplicationRecord
-  self.ignored_columns = %w(subscription_expires_at)
+  self.ignored_columns = %w(
+    subscription_expires_at
+    secret
+    remote_url
+    salmon_url
+    hub_url
+  )
 
   USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
   MENTION_RE  = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i
@@ -114,7 +116,7 @@ class Account < ApplicationRecord
   scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
   scope :searchable, -> { without_suspended.where(moved_to_account_id: nil) }
   scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).left_outer_joins(:account_stat) }
-  scope :tagged_with, ->(tag) { joins(:accounts_tags).where(accounts_tags: { tag_id: tag }) }
+  scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) }
   scope :by_recent_status, -> { order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc, accounts.id desc')) }
   scope :by_recent_sign_in, -> { order(Arel.sql('(case when users.current_sign_in_at is null then 1 else 0 end) asc, users.current_sign_in_at desc, accounts.id desc')) }
   scope :popular, -> { order('account_stats.followers_count desc') }
@@ -238,6 +240,7 @@ class Account < ApplicationRecord
     transaction do
       create_deletion_request!
       update!(suspended_at: date, suspension_origin: origin)
+      create_canonical_email_block!
     end
   end
 
@@ -245,6 +248,7 @@ class Account < ApplicationRecord
     transaction do
       deletion_request&.destroy!
       update!(suspended_at: nil, suspension_origin: nil)
+      destroy_canonical_email_block!
     end
   end
 
@@ -280,19 +284,13 @@ class Account < ApplicationRecord
       if hashtags_map.key?(tag.name)
         hashtags_map.delete(tag.name)
       else
-        transaction do
-          tags.delete(tag)
-          tag.decrement_count!(:accounts_count)
-        end
+        tags.delete(tag)
       end
     end
 
     # Add hashtags that were so far missing
     hashtags_map.each_value do |tag|
-      transaction do
-        tags << tag
-        tag.increment_count!(:accounts_count)
-      end
+      tags << tag
     end
   end
 
@@ -365,7 +363,7 @@ class Account < ApplicationRecord
   end
 
   def excluded_from_timeline_account_ids
-    Rails.cache.fetch("exclude_account_ids_for:#{id}") { blocking.pluck(:target_account_id) + blocked_by.pluck(:account_id) + muting.pluck(:target_account_id) }
+    Rails.cache.fetch("exclude_account_ids_for:#{id}") { block_relationships.pluck(:target_account_id) + blocked_by_relationships.pluck(:account_id) + mute_relationships.pluck(:target_account_id) }
   end
 
   def excluded_from_timeline_domains
@@ -570,4 +568,16 @@ class Account < ApplicationRecord
   def clean_feed_manager
     FeedManager.instance.clean_feeds!(:home, [id])
   end
+
+  def create_canonical_email_block!
+    return unless local? && user_email.present?
+
+    CanonicalEmailBlock.create(reference_account: self, email: user_email)
+  end
+
+  def destroy_canonical_email_block!
+    return unless local?
+
+    CanonicalEmailBlock.where(reference_account: self).delete_all
+  end
 end
diff --git a/app/models/account_suggestions.rb b/app/models/account_suggestions.rb
new file mode 100644
index 000000000..d1774e62f
--- /dev/null
+++ b/app/models/account_suggestions.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+class AccountSuggestions
+  SOURCES = [
+    AccountSuggestions::SettingSource,
+    AccountSuggestions::PastInteractionsSource,
+    AccountSuggestions::GlobalSource,
+  ].freeze
+
+  def self.get(account, limit)
+    SOURCES.each_with_object([]) do |source_class, suggestions|
+      source_suggestions = source_class.new.get(
+        account,
+        skip_account_ids: suggestions.map(&:account_id),
+        limit: limit - suggestions.size
+      )
+
+      suggestions.concat(source_suggestions)
+    end
+  end
+
+  def self.remove(account, target_account_id)
+    SOURCES.each do |source_class|
+      source = source_class.new
+      source.remove(account, target_account_id)
+    end
+  end
+end
diff --git a/app/models/account_suggestions/global_source.rb b/app/models/account_suggestions/global_source.rb
new file mode 100644
index 000000000..ac764de50
--- /dev/null
+++ b/app/models/account_suggestions/global_source.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class AccountSuggestions::GlobalSource < AccountSuggestions::Source
+  def key
+    :global
+  end
+
+  def get(account, skip_account_ids: [], limit: 40)
+    account_ids = account_ids_for_locale(account.user_locale) - [account.id] - skip_account_ids
+
+    as_ordered_suggestions(
+      scope(account).where(id: account_ids),
+      account_ids
+    ).take(limit)
+  end
+
+  def remove(_account, _target_account_id)
+    nil
+  end
+
+  private
+
+  def scope(account)
+    Account.searchable
+           .followable_by(account)
+           .not_excluded_by_account(account)
+           .not_domain_blocked_by_account(account)
+  end
+
+  def account_ids_for_locale(locale)
+    Redis.current.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
+  end
+
+  def to_ordered_list_key(account)
+    account.id
+  end
+end
diff --git a/app/models/account_suggestions/past_interactions_source.rb b/app/models/account_suggestions/past_interactions_source.rb
new file mode 100644
index 000000000..d169394f1
--- /dev/null
+++ b/app/models/account_suggestions/past_interactions_source.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+class AccountSuggestions::PastInteractionsSource < AccountSuggestions::Source
+  include Redisable
+
+  def key
+    :past_interactions
+  end
+
+  def get(account, skip_account_ids: [], limit: 40)
+    account_ids = account_ids_for_account(account.id, limit + skip_account_ids.size) - skip_account_ids
+
+    as_ordered_suggestions(
+      scope.where(id: account_ids),
+      account_ids
+    ).take(limit)
+  end
+
+  def remove(account, target_account_id)
+    redis.zrem("interactions:#{account.id}", target_account_id)
+  end
+
+  private
+
+  def scope
+    Account.searchable
+  end
+
+  def account_ids_for_account(account_id, limit)
+    redis.zrevrange("interactions:#{account_id}", 0, limit).map(&:to_i)
+  end
+
+  def to_ordered_list_key(account)
+    account.id
+  end
+end
diff --git a/app/models/account_suggestions/setting_source.rb b/app/models/account_suggestions/setting_source.rb
new file mode 100644
index 000000000..be9eff233
--- /dev/null
+++ b/app/models/account_suggestions/setting_source.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+class AccountSuggestions::SettingSource < AccountSuggestions::Source
+  def key
+    :staff
+  end
+
+  def get(account, skip_account_ids: [], limit: 40)
+    return [] unless setting_enabled?
+
+    as_ordered_suggestions(
+      scope(account).where(setting_to_where_condition).where.not(id: skip_account_ids),
+      usernames_and_domains
+    ).take(limit)
+  end
+
+  def remove(_account, _target_account_id)
+    nil
+  end
+
+  private
+
+  def scope(account)
+    Account.searchable
+           .followable_by(account)
+           .not_excluded_by_account(account)
+           .not_domain_blocked_by_account(account)
+           .where(locked: false)
+           .where.not(id: account.id)
+  end
+
+  def usernames_and_domains
+    @usernames_and_domains ||= setting_to_usernames_and_domains
+  end
+
+  def setting_enabled?
+    setting.present?
+  end
+
+  def setting_to_where_condition
+    usernames_and_domains.map do |(username, domain)|
+      Arel::Nodes::Grouping.new(
+        Account.arel_table[:username].lower.eq(username.downcase).and(
+          Account.arel_table[:domain].lower.eq(domain&.downcase)
+        )
+      )
+    end.reduce(:or)
+  end
+
+  def setting_to_usernames_and_domains
+    setting.split(',').map do |str|
+      username, domain = str.strip.gsub(/\A@/, '').split('@', 2)
+      domain           = nil if TagManager.instance.local_domain?(domain)
+
+      next if username.blank?
+
+      [username, domain]
+    end.compact
+  end
+
+  def setting
+    Setting.bootstrap_timeline_accounts
+  end
+
+  def to_ordered_list_key(account)
+    [account.username, account.domain]
+  end
+end
diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb
new file mode 100644
index 000000000..bd1068d20
--- /dev/null
+++ b/app/models/account_suggestions/source.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+class AccountSuggestions::Source
+  def key
+    raise NotImplementedError
+  end
+
+  def get(_account, **kwargs)
+    raise NotImplementedError
+  end
+
+  def remove(_account, target_account_id)
+    raise NotImplementedError
+  end
+
+  protected
+
+  def as_ordered_suggestions(scope, ordered_list)
+    return [] if ordered_list.empty?
+
+    map = scope.index_by(&method(:to_ordered_list_key))
+
+    ordered_list.map { |ordered_list_key| map[ordered_list_key] }.compact.map do |account|
+      AccountSuggestions::Suggestion.new(
+        account: account,
+        source: key
+      )
+    end
+  end
+
+  def to_ordered_list_key(_account)
+    raise NotImplementedError
+  end
+end
diff --git a/app/models/account_suggestions/suggestion.rb b/app/models/account_suggestions/suggestion.rb
new file mode 100644
index 000000000..2c6f4d27f
--- /dev/null
+++ b/app/models/account_suggestions/suggestion.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AccountSuggestions::Suggestion < ActiveModelSerializers::Model
+  attributes :account, :source
+
+  delegate :id, to: :account, prefix: true
+end
diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb
new file mode 100644
index 000000000..3a3cebc55
--- /dev/null
+++ b/app/models/account_summary.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: account_summaries
+#
+#  account_id :bigint(8)        primary key
+#  language   :string
+#  sensitive  :boolean
+#
+
+class AccountSummary < ApplicationRecord
+  self.primary_key = :account_id
+
+  scope :safe, -> { where(sensitive: false) }
+  scope :localized, ->(locale) { where(language: locale) }
+  scope :filtered, -> { joins(arel_table.join(FollowRecommendationSuppression.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:account_id].eq(FollowRecommendationSuppression.arel_table[:account_id])).join_sources).where(FollowRecommendationSuppression.arel_table[:id].eq(nil)) }
+
+  def self.refresh
+    Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false)
+  end
+
+  def readonly?
+    true
+  end
+end
diff --git a/app/models/account_tag_stat.rb b/app/models/account_tag_stat.rb
deleted file mode 100644
index 3c36c155a..000000000
--- a/app/models/account_tag_stat.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-# == Schema Information
-#
-# Table name: account_tag_stats
-#
-#  id             :bigint(8)        not null, primary key
-#  tag_id         :bigint(8)        not null
-#  accounts_count :bigint(8)        default(0), not null
-#  hidden         :boolean          default(FALSE), not null
-#  created_at     :datetime         not null
-#  updated_at     :datetime         not null
-#
-
-class AccountTagStat < ApplicationRecord
-  belongs_to :tag, inverse_of: :account_tag_stat
-
-  def increment_count!(key)
-    update(key => public_send(key) + 1)
-  end
-
-  def decrement_count!(key)
-    update(key => [public_send(key) - 1, 0].max)
-  end
-end
diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb
index 3a1b67e06..a1c156a8b 100644
--- a/app/models/admin/action_log_filter.rb
+++ b/app/models/admin/action_log_filter.rb
@@ -17,12 +17,14 @@ class Admin::ActionLogFilter
     create_domain_allow: { target_type: 'DomainAllow', action: 'create' }.freeze,
     create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze,
     create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze,
+    create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze,
     demote_user: { target_type: 'User', action: 'demote' }.freeze,
     destroy_announcement: { target_type: 'Announcement', action: 'destroy' }.freeze,
     destroy_custom_emoji: { target_type: 'CustomEmoji', action: 'destroy' }.freeze,
     destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze,
     destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze,
     destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze,
+    destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze,
     destroy_status: { target_type: 'Status', action: 'destroy' }.freeze,
     disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze,
     disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze,
diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb
new file mode 100644
index 000000000..a8546d65a
--- /dev/null
+++ b/app/models/canonical_email_block.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: canonical_email_blocks
+#
+#  id                   :bigint(8)        not null, primary key
+#  canonical_email_hash :string           default(""), not null
+#  reference_account_id :bigint(8)        not null
+#  created_at           :datetime         not null
+#  updated_at           :datetime         not null
+#
+
+class CanonicalEmailBlock < ApplicationRecord
+  include EmailHelper
+
+  belongs_to :reference_account, class_name: 'Account'
+
+  validates :canonical_email_hash, presence: true
+
+  def email=(email)
+    self.canonical_email_hash = email_to_canonical_email_hash(email)
+  end
+
+  def self.block?(email)
+    where(canonical_email_hash: email_to_canonical_email_hash(email)).exists?
+  end
+end
diff --git a/app/models/concerns/account_associations.rb b/app/models/concerns/account_associations.rb
index 98849f8fc..aaf371ebd 100644
--- a/app/models/concerns/account_associations.rb
+++ b/app/models/concerns/account_associations.rb
@@ -63,5 +63,8 @@ module AccountAssociations
 
     # Account deletion requests
     has_one :deletion_request, class_name: 'AccountDeletionRequest', inverse_of: :account, dependent: :destroy
+
+    # Follow recommendations
+    has_one :follow_recommendation_suppression, inverse_of: :account, dependent: :destroy
   end
 end
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index 51e8e04a8..958f6c78e 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -184,6 +184,14 @@ module AccountInteractions
     active_relationships.where(target_account: other_account).exists?
   end
 
+  def following_anyone?
+    active_relationships.exists?
+  end
+
+  def not_following_anyone?
+    !following_anyone?
+  end
+
   def blocking?(other_account)
     block_relationships.where(target_account: other_account).exists?
   end
diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb
index 7cb03b819..f14357932 100644
--- a/app/models/custom_emoji.rb
+++ b/app/models/custom_emoji.rb
@@ -21,7 +21,8 @@
 #
 
 class CustomEmoji < ApplicationRecord
-  LIMIT = 50.kilobytes
+  LOCAL_LIMIT = (ENV['MAX_EMOJI_SIZE'] || 50.kilobytes).to_i
+  LIMIT       = [LOCAL_LIMIT, (ENV['MAX_REMOTE_EMOJI_SIZE'] || 200.kilobytes).to_i].max
 
   SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}'
 
@@ -38,7 +39,9 @@ class CustomEmoji < ApplicationRecord
 
   before_validation :downcase_domain
 
-  validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT }
+  validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true
+  validates_attachment_size :image, less_than: LIMIT, unless: :local?
+  validates_attachment_size :image, less_than: LOCAL_LIMIT, if: :local?
   validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 }
 
   scope :local, -> { where(domain: nil) }
diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb
new file mode 100644
index 000000000..e552b5a88
--- /dev/null
+++ b/app/models/follow_recommendation.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: follow_recommendations
+#
+#  account_id :bigint(8)        primary key
+#  rank       :decimal(, )
+#  reason     :text             is an Array
+#
+
+class FollowRecommendation < ApplicationRecord
+  self.primary_key = :account_id
+
+  belongs_to :account_summary, foreign_key: :account_id
+  belongs_to :account, foreign_key: :account_id
+
+  scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) }
+
+  def self.refresh
+    Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false)
+  end
+
+  def readonly?
+    true
+  end
+end
diff --git a/app/models/follow_recommendation_filter.rb b/app/models/follow_recommendation_filter.rb
new file mode 100644
index 000000000..acf03cd84
--- /dev/null
+++ b/app/models/follow_recommendation_filter.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class FollowRecommendationFilter
+  KEYS = %i(
+    language
+    status
+  ).freeze
+
+  attr_reader :params, :language
+
+  def initialize(params)
+    @language = params.delete('language') || I18n.locale
+    @params   = params
+  end
+
+  def results
+    if params['status'] == 'suppressed'
+      Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a
+    else
+      account_ids = Redis.current.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i)
+      accounts    = Account.where(id: account_ids).index_by(&:id)
+
+      account_ids.map { |id| accounts[id] }.compact
+    end
+  end
+end
diff --git a/app/models/follow_recommendation_suppression.rb b/app/models/follow_recommendation_suppression.rb
new file mode 100644
index 000000000..170506b85
--- /dev/null
+++ b/app/models/follow_recommendation_suppression.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: follow_recommendation_suppressions
+#
+#  id         :bigint(8)        not null, primary key
+#  account_id :bigint(8)        not null
+#  created_at :datetime         not null
+#  updated_at :datetime         not null
+#
+
+class FollowRecommendationSuppression < ApplicationRecord
+  include Redisable
+
+  belongs_to :account
+
+  after_commit :remove_follow_recommendations, on: :create
+
+  private
+
+  def remove_follow_recommendations
+    redis.pipelined do
+      I18n.available_locales.each do |locale|
+        redis.zrem("follow_recommendations:#{locale}", account_id)
+      end
+    end
+  end
+end
diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb
index 59fefcdf6..0b6f7629a 100644
--- a/app/models/follow_request.rb
+++ b/app/models/follow_request.rb
@@ -29,7 +29,7 @@ class FollowRequest < ApplicationRecord
   validates :account_id, uniqueness: { scope: :target_account_id }
 
   def authorize!
-    account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri)
+    account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri, bypass_limit: true)
     MergeWorker.perform_async(target_account.id, account.id) if account.local?
     destroy!
   end
diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb
index 26d6d3abf..698933c9f 100644
--- a/app/models/form/account_batch.rb
+++ b/app/models/form/account_batch.rb
@@ -21,6 +21,10 @@ class Form::AccountBatch
       approve!
     when 'reject'
       reject!
+    when 'suppress_follow_recommendation'
+      suppress_follow_recommendation!
+    when 'unsuppress_follow_recommendation'
+      unsuppress_follow_recommendation!
     end
   end
 
@@ -79,4 +83,18 @@ class Form::AccountBatch
     records.each { |account| authorize(account.user, :reject?) }
            .each { |account| DeleteAccountService.new.call(account, reserve_email: false, reserve_username: false) }
   end
+
+  def suppress_follow_recommendation!
+    authorize(:follow_recommendation, :suppress?)
+
+    accounts.each do |account|
+      FollowRecommendationSuppression.create(account: account)
+    end
+  end
+
+  def unsuppress_follow_recommendation!
+    authorize(:follow_recommendation, :unsuppress?)
+
+    FollowRecommendationSuppression.where(account_id: account_ids).destroy_all
+  end
 end
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index 999d835e6..0276ec058 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -16,7 +16,6 @@ class Form::AdminSettings
     open_deletion
     timeline_preview
     show_staff_badge
-    enable_bootstrap_timeline_accounts
     bootstrap_timeline_accounts
     flavour
     skin
@@ -35,7 +34,6 @@ class Form::AdminSettings
     mascot
     show_reblogs_in_public_timelines
     show_replies_in_public_timelines
-    spam_check_enabled
     trends
     trendable_by_default
     show_domain_blocks
@@ -49,7 +47,6 @@ class Form::AdminSettings
     open_deletion
     timeline_preview
     show_staff_badge
-    enable_bootstrap_timeline_accounts
     activity_api_enabled
     peers_api_enabled
     show_known_fediverse_at_about_page
@@ -59,7 +56,6 @@ class Form::AdminSettings
     enable_keybase
     show_reblogs_in_public_timelines
     show_replies_in_public_timelines
-    spam_check_enabled
     trends
     trendable_by_default
     noindex
diff --git a/app/models/instance.rb b/app/models/instance.rb
index 29be03662..8949be054 100644
--- a/app/models/instance.rb
+++ b/app/models/instance.rb
@@ -10,10 +10,13 @@
 class Instance < ApplicationRecord
   self.primary_key = :domain
 
+  attr_accessor :failure_days
+
   has_many :accounts, foreign_key: :domain, primary_key: :domain
 
   belongs_to :domain_block, foreign_key: :domain, primary_key: :domain
   belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain
+  belongs_to :unavailable_domain, foreign_key: :domain, primary_key: :domain # skipcq: RB-RL1031
 
   scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
 
diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb
index 0598d8fea..9e533c4aa 100644
--- a/app/models/instance_filter.rb
+++ b/app/models/instance_filter.rb
@@ -4,6 +4,8 @@ class InstanceFilter
   KEYS = %i(
     limited
     by_domain
+    warning
+    unavailable
   ).freeze
 
   attr_reader :params
@@ -13,7 +15,7 @@ class InstanceFilter
   end
 
   def results
-    scope = Instance.includes(:domain_block, :domain_allow).order(accounts_count: :desc)
+    scope = Instance.includes(:domain_block, :domain_allow, :unavailable_domain).order(accounts_count: :desc)
 
     params.each do |key, value|
       scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
@@ -32,6 +34,10 @@ class InstanceFilter
       Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc'))
     when 'by_domain'
       Instance.matches_domain(value)
+    when 'warning'
+      Instance.where(domain: DeliveryFailureTracker.warning_domains)
+    when 'unavailable'
+      Instance.joins(:unavailable_domain)
     else
       raise "Unknown filter: #{key}"
     end
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 96386d841..a6ab22f61 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -287,7 +287,7 @@ class MediaAttachment < ApplicationRecord
       if instance.file_content_type == 'image/gif'
         [:gif_transcoder, :blurhash_transcoder]
       elsif VIDEO_MIME_TYPES.include?(instance.file_content_type)
-        [:video_transcoder, :blurhash_transcoder, :type_corrector]
+        [:transcoder, :blurhash_transcoder, :type_corrector]
       elsif AUDIO_MIME_TYPES.include?(instance.file_content_type)
         [:image_extractor, :transcoder, :type_corrector]
       else
@@ -388,7 +388,7 @@ class MediaAttachment < ApplicationRecord
   # paths but ultimately the same file, so it makes sense to memoize the
   # result while disregarding the path
   def ffmpeg_data(path = nil)
-    @ffmpeg_data ||= FFMPEG::Movie.new(path)
+    @ffmpeg_data ||= VideoMetadataExtractor.new(path)
   end
 
   def enqueue_processing
diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb
index b0ce9d112..3a59bad93 100644
--- a/app/models/session_activation.rb
+++ b/app/models/session_activation.rb
@@ -44,7 +44,7 @@ class SessionActivation < ApplicationRecord
     end
 
     def activate(**options)
-      activation = create!(options)
+      activation = create!(**options)
       purge_old
       activation
     end
diff --git a/app/models/status.rb b/app/models/status.rb
index 7bedbef07..9f673ee53 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -167,6 +167,10 @@ class Status < ApplicationRecord
     attributes['local'] || uri.nil?
   end
 
+  def in_reply_to_local_account?
+    reply? && thread&.account&.local?
+  end
+
   def reblog?
     !reblog_of_id.nil?
   end
diff --git a/app/models/tag.rb b/app/models/tag.rb
index bb93a52e2..735c30608 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -20,10 +20,8 @@
 class Tag < ApplicationRecord
   has_and_belongs_to_many :statuses
   has_and_belongs_to_many :accounts
-  has_and_belongs_to_many :sample_accounts, -> { local.discoverable.popular.limit(3) }, class_name: 'Account'
 
   has_many :featured_tags, dependent: :destroy, inverse_of: :tag
-  has_one :account_tag_stat, dependent: :destroy
 
   HASHTAG_SEPARATORS = "_\u00B7\u200c"
   HASHTAG_NAME_RE    = "([[:word:]_][[:word:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:word:]#{HASHTAG_SEPARATORS}]*[[:word:]_])|([[:word:]_]*[[:alpha:]][[:word:]_]*)"
@@ -38,28 +36,11 @@ class Tag < ApplicationRecord
   scope :usable, -> { where(usable: [true, nil]) }
   scope :listable, -> { where(listable: [true, nil]) }
   scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
-  scope :discoverable, -> { listable.joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
   scope :recently_used, ->(account) { joins(:statuses).where(statuses: { id: account.statuses.select(:id).limit(1000) }).group(:id).order(Arel.sql('count(*) desc')) }
-  scope :matches_name, ->(value) { where(arel_table[:name].matches("#{value}%")) }
-
-  delegate :accounts_count,
-           :accounts_count=,
-           :increment_count!,
-           :decrement_count!,
-           to: :account_tag_stat
-
-  after_save :save_account_tag_stat
+  scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index
 
   update_index('tags#tag', :self)
 
-  def account_tag_stat
-    super || build_account_tag_stat
-  end
-
-  def cached_sample_accounts
-    Rails.cache.fetch("#{cache_key}/sample_accounts", expires_in: 12.hours) { sample_accounts }
-  end
-
   def to_param
     name
   end
@@ -94,6 +75,10 @@ class Tag < ApplicationRecord
     requested_review_at.present?
   end
 
+  def use!(account, status: nil, at_time: Time.now.utc)
+    TrendingTags.record_use!(self, account, status: status, at_time: at_time)
+  end
+
   def trending?
     TrendingTags.trending?(self)
   end
@@ -126,10 +111,10 @@ class Tag < ApplicationRecord
     end
 
     def search_for(term, limit = 5, offset = 0, options = {})
-      normalized_term = normalize(term.strip)
-      pattern         = sanitize_sql_like(normalized_term) + '%'
-      query           = Tag.listable.where(arel_table[:name].lower.matches(pattern))
-      query           = query.where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil))) if options[:exclude_unreviewed]
+      stripped_term = term.strip
+
+      query = Tag.listable.matches_name(stripped_term)
+      query = query.merge(matching_name(stripped_term).or(where.not(reviewed_at: nil))) if options[:exclude_unreviewed]
 
       query.order(Arel.sql('length(name) ASC, name ASC'))
            .limit(limit)
@@ -145,7 +130,7 @@ class Tag < ApplicationRecord
     end
 
     def matching_name(name_or_names)
-      names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s }
+      names = Array(name_or_names).map { |name| arel_table.lower(normalize(name)) }
 
       if names.size == 1
         where(arel_table[:name].lower.eq(names.first))
@@ -154,8 +139,6 @@ class Tag < ApplicationRecord
       end
     end
 
-    private
-
     def normalize(str)
       str.gsub(/\A#/, '')
     end
@@ -163,11 +146,6 @@ class Tag < ApplicationRecord
 
   private
 
-  def save_account_tag_stat
-    return unless account_tag_stat&.changed?
-    account_tag_stat.save
-  end
-
   def validate_name_change
     errors.add(:name, I18n.t('tags.does_not_match_previous_name')) unless name_was.mb_chars.casecmp(name.mb_chars).zero?
   end
diff --git a/app/models/tag_filter.rb b/app/models/tag_filter.rb
index a9ff5b703..85bfcbea5 100644
--- a/app/models/tag_filter.rb
+++ b/app/models/tag_filter.rb
@@ -33,8 +33,6 @@ class TagFilter
 
   def scope_for(key, value)
     case key.to_s
-    when 'directory'
-      Tag.discoverable
     when 'reviewed'
       Tag.reviewed.order(reviewed_at: :desc)
     when 'unreviewed'
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index 9c2aa0ee8..31890b082 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -13,19 +13,23 @@ class TrendingTags
   class << self
     include Redisable
 
-    def record_use!(tag, account, at_time = Time.now.utc)
-      return if account.silenced? || account.bot? || !tag.usable? || !(tag.trendable? || tag.requires_review?)
+    def record_use!(tag, account, status: nil, at_time: Time.now.utc)
+      return unless tag.usable? && !account.silenced?
 
+      # Even if a tag is not allowed to trend, we still need to
+      # record the stats since they can be displayed in other places
       increment_historical_use!(tag.id, at_time)
       increment_unique_use!(tag.id, account.id, at_time)
       increment_use!(tag.id, at_time)
 
-      tag.update(last_status_at: Time.now.utc) if tag.last_status_at.nil? || tag.last_status_at < 12.hours.ago
+      # Only update when the tag was last used once every 12 hours
+      # and only if a status is given (lets use ignore reblogs)
+      tag.update(last_status_at: at_time) if status.present? && (tag.last_status_at.nil? || (tag.last_status_at < at_time && tag.last_status_at < 12.hours.ago))
     end
 
     def update!(at_time = Time.now.utc)
       tag_ids = redis.smembers("#{KEY}:used:#{at_time.beginning_of_day.to_i}") + redis.zrange(KEY, 0, -1)
-      tags    = Tag.where(id: tag_ids.uniq)
+      tags    = Tag.trendable.where(id: tag_ids.uniq)
 
       # First pass to calculate scores and update the set
 
diff --git a/app/models/user.rb b/app/models/user.rb
index eb5b95c2b..5c5e926e6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -370,15 +370,20 @@ class User < ApplicationRecord
 
   protected
 
-  def send_devise_notification(notification, *args)
+  def send_devise_notification(notification, *args, **kwargs)
     # This method can be called in `after_update` and `after_commit` hooks,
     # but we must make sure the mailer is actually called *after* commit,
     # otherwise it may work on stale data. To do this, figure out if we are
     # within a transaction.
+
+    # It seems like devise sends keyword arguments as a hash in the last
+    # positional argument
+    kwargs = args.pop if args.last.is_a?(Hash) && kwargs.empty?
+
     if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self)
-      pending_devise_notifications << [notification, args]
+      pending_devise_notifications << [notification, args, kwargs]
     else
-      render_and_send_devise_message(notification, *args)
+      render_and_send_devise_message(notification, *args, **kwargs)
     end
   end
 
@@ -389,8 +394,8 @@ class User < ApplicationRecord
   end
 
   def send_pending_devise_notifications
-    pending_devise_notifications.each do |notification, args|
-      render_and_send_devise_message(notification, *args)
+    pending_devise_notifications.each do |notification, args, kwargs|
+      render_and_send_devise_message(notification, *args, **kwargs)
     end
 
     # Empty the pending notifications array because the
@@ -403,8 +408,8 @@ class User < ApplicationRecord
     @pending_devise_notifications ||= []
   end
 
-  def render_and_send_devise_message(notification, *args)
-    devise_mailer.send(notification, self, *args).deliver_later
+  def render_and_send_devise_message(notification, *args, **kwargs)
+    devise_mailer.send(notification, self, *args, **kwargs).deliver_later
   end
 
   def set_approved
@@ -458,9 +463,7 @@ class User < ApplicationRecord
   end
 
   def regenerate_feed!
-    return unless Redis.current.setnx("account:#{account_id}:regeneration", true)
-    Redis.current.expire("account:#{account_id}:regeneration", 1.day.seconds)
-    RegenerationWorker.perform_async(account_id)
+    RegenerationWorker.perform_async(account_id) if Redis.current.set("account:#{account_id}:regeneration", true, nx: true, ex: 1.day.seconds)
   end
 
   def needs_feed_update?
diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb
index c407a7789..6e46573ae 100644
--- a/app/models/web/push_subscription.rb
+++ b/app/models/web/push_subscription.rb
@@ -24,81 +24,101 @@ class Web::PushSubscription < ApplicationRecord
   validates :key_p256dh, presence: true
   validates :key_auth, presence: true
 
-  def push(notification)
-    I18n.with_locale(associated_user&.locale || I18n.default_locale) do
-      push_payload(payload_for_notification(notification), 48.hours.seconds)
-    end
+  delegate :locale, to: :associated_user
+
+  def encrypt(payload)
+    Webpush::Encryption.encrypt(payload, key_p256dh, key_auth)
+  end
+
+  def audience
+    @audience ||= Addressable::URI.parse(endpoint).normalized_site
+  end
+
+  def crypto_key_header
+    p256ecdsa = vapid_key.public_key_for_push_header
+
+    "p256ecdsa=#{p256ecdsa}"
+  end
+
+  def authorization_header
+    jwt = JWT.encode({ aud: audience, exp: 24.hours.from_now.to_i, sub: "mailto:#{contact_email}" }, vapid_key.curve, 'ES256', typ: 'JWT')
+
+    "WebPush #{jwt}"
   end
 
   def pushable?(notification)
-    data&.key?('alerts') && ActiveModel::Type::Boolean.new.cast(data['alerts'][notification.type.to_s])
+    policy_allows_notification?(notification) && alert_enabled_for_notification_type?(notification)
   end
 
   def associated_user
     return @associated_user if defined?(@associated_user)
 
-    @associated_user = if user_id.nil?
-                         session_activation.user
-                       else
-                         user
-                       end
+    @associated_user = begin
+      if user_id.nil?
+        session_activation.user
+      else
+        user
+      end
+    end
   end
 
   def associated_access_token
     return @associated_access_token if defined?(@associated_access_token)
 
-    @associated_access_token = if access_token_id.nil?
-                                 find_or_create_access_token.token
-                               else
-                                 access_token.token
-                               end
+    @associated_access_token = begin
+      if access_token_id.nil?
+        find_or_create_access_token.token
+      else
+        access_token.token
+      end
+    end
   end
 
   class << self
     def unsubscribe_for(application_id, resource_owner)
-      access_token_ids = Doorkeeper::AccessToken.where(application_id: application_id, resource_owner_id: resource_owner.id, revoked_at: nil)
-                                                .pluck(:id)
-
+      access_token_ids = Doorkeeper::AccessToken.where(application_id: application_id, resource_owner_id: resource_owner.id, revoked_at: nil).pluck(:id)
       where(access_token_id: access_token_ids).delete_all
     end
   end
 
   private
 
-  def push_payload(message, ttl = 5.minutes.seconds)
-    Webpush.payload_send(
-      message: Oj.dump(message),
-      endpoint: endpoint,
-      p256dh: key_p256dh,
-      auth: key_auth,
-      ttl: ttl,
-      ssl_timeout: 10,
-      open_timeout: 10,
-      read_timeout: 10,
-      vapid: {
-        subject: "mailto:#{::Setting.site_contact_email}",
-        private_key: Rails.configuration.x.vapid_private_key,
-        public_key: Rails.configuration.x.vapid_public_key,
-      }
-    )
-  end
-
-  def payload_for_notification(notification)
-    ActiveModelSerializers::SerializableResource.new(
-      notification,
-      serializer: Web::NotificationSerializer,
-      scope: self,
-      scope_name: :current_push_subscription
-    ).as_json
-  end
-
   def find_or_create_access_token
     Doorkeeper::AccessToken.find_or_create_for(
       application: Doorkeeper::Application.find_by(superapp: true),
-      resource_owner: session_activation.user_id,
+      resource_owner: user_id || session_activation.user_id,
       scopes: Doorkeeper::OAuth::Scopes.from_string('read write follow push'),
       expires_in: Doorkeeper.configuration.access_token_expires_in,
       use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?
     )
   end
+
+  def vapid_key
+    @vapid_key ||= Webpush::VapidKey.from_keys(Rails.configuration.x.vapid_public_key, Rails.configuration.x.vapid_private_key)
+  end
+
+  def contact_email
+    @contact_email ||= ::Setting.site_contact_email
+  end
+
+  def alert_enabled_for_notification_type?(notification)
+    truthy?(data&.dig('alerts', notification.type.to_s))
+  end
+
+  def policy_allows_notification?(notification)
+    case data&.dig('policy')
+    when nil, 'all'
+      true
+    when 'none'
+      false
+    when 'followed'
+      notification.account.following?(notification.from_account)
+    when 'follower'
+      notification.from_account.following?(notification.account)
+    end
+  end
+
+  def truthy?(val)
+    ActiveModel::Type::Boolean.new.cast(val)
+  end
 end
diff --git a/app/policies/delivery_policy.rb b/app/policies/delivery_policy.rb
new file mode 100644
index 000000000..24d06c168
--- /dev/null
+++ b/app/policies/delivery_policy.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class DeliveryPolicy < ApplicationPolicy
+  def clear_delivery_errors?
+    admin?
+  end
+
+  def restart_delivery?
+    admin?
+  end
+
+  def stop_delivery?
+    admin?
+  end
+end
diff --git a/app/policies/follow_recommendation_policy.rb b/app/policies/follow_recommendation_policy.rb
new file mode 100644
index 000000000..68cd0e547
--- /dev/null
+++ b/app/policies/follow_recommendation_policy.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class FollowRecommendationPolicy < ApplicationPolicy
+  def show?
+    staff?
+  end
+
+  def suppress?
+    staff?
+  end
+
+  def unsuppress?
+    staff?
+  end
+end
diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb
index 759ef30f9..d92aae7b3 100644
--- a/app/serializers/activitypub/actor_serializer.rb
+++ b/app/serializers/activitypub/actor_serializer.rb
@@ -13,7 +13,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
              :inbox, :outbox, :featured, :featured_tags,
              :preferred_username, :name, :summary,
              :url, :manually_approves_followers,
-             :discoverable
+             :discoverable, :published
 
   has_one :public_key, serializer: ActivityPub::PublicKeySerializer
 
@@ -158,6 +158,10 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
     !object.suspended? && !object.also_known_as.empty?
   end
 
+  def published
+    object.created_at.midnight.iso8601
+  end
+
   class CustomEmojiSerializer < ActivityPub::EmojiSerializer
   end
 
diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb
index 5cc42c7cf..36886181f 100644
--- a/app/serializers/rest/account_serializer.rb
+++ b/app/serializers/rest/account_serializer.rb
@@ -55,6 +55,10 @@ class REST::AccountSerializer < ActiveModel::Serializer
     full_asset_url(object.suspended? ? object.header.default_url : object.header_static_url)
   end
 
+  def created_at
+    object.created_at.midnight.as_json
+  end
+
   def last_status_at
     object.last_status_at&.to_date&.iso8601
   end
diff --git a/app/serializers/rest/suggestion_serializer.rb b/app/serializers/rest/suggestion_serializer.rb
new file mode 100644
index 000000000..3d697fd9f
--- /dev/null
+++ b/app/serializers/rest/suggestion_serializer.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class REST::SuggestionSerializer < ActiveModel::Serializer
+  attributes :source
+
+  has_one :account, serializer: REST::AccountSerializer
+end
diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb
index df17d9079..c48288b3b 100644
--- a/app/services/activitypub/fetch_remote_key_service.rb
+++ b/app/services/activitypub/fetch_remote_key_service.rb
@@ -5,6 +5,8 @@ class ActivityPub::FetchRemoteKeyService < BaseService
 
   # Returns account that owns the key
   def call(uri, id: true, prefetched_body: nil)
+    return if uri.blank?
+
     if prefetched_body.nil?
       if id
         @json = fetch_resource_without_id_validation(uri)
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index 27b088240..2c80175e7 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -88,6 +88,7 @@ class ActivityPub::ProcessAccountService < BaseService
     @account.url                     = url || @uri
     @account.uri                     = @uri
     @account.actor_type              = actor_type
+    @account.created_at              = @json['published'] if @json['published'].present?
   end
 
   def set_immediate_attributes!
@@ -102,7 +103,7 @@ class ActivityPub::ProcessAccountService < BaseService
   end
 
   def set_fetchable_key!
-    @account.public_key        = public_key || ''
+    @account.public_key = public_key || ''
   end
 
   def set_fetchable_attributes!
diff --git a/app/services/after_block_service.rb b/app/services/after_block_service.rb
index 314919df8..899e84be4 100644
--- a/app/services/after_block_service.rb
+++ b/app/services/after_block_service.rb
@@ -6,6 +6,7 @@ class AfterBlockService < BaseService
     @target_account = target_account
 
     clear_home_feed!
+    clear_list_feeds!
     clear_notifications!
     clear_conversations!
   end
@@ -16,6 +17,10 @@ class AfterBlockService < BaseService
     FeedManager.instance.clear_from_home(@account, @target_account)
   end
 
+  def clear_list_feeds!
+    FeedManager.instance.clear_from_lists(@account, @target_account)
+  end
+
   def clear_conversations!
     AccountConversation.where(account: @account).where('? = ANY(participant_account_ids)', @target_account.id).in_batches.destroy_all
   end
diff --git a/app/services/bootstrap_timeline_service.rb b/app/services/bootstrap_timeline_service.rb
index 8412aa7e7..e1a1b98c3 100644
--- a/app/services/bootstrap_timeline_service.rb
+++ b/app/services/bootstrap_timeline_service.rb
@@ -5,48 +5,13 @@ class BootstrapTimelineService < BaseService
     @source_account = source_account
 
     autofollow_inviter!
-    autofollow_bootstrap_timeline_accounts! if Setting.enable_bootstrap_timeline_accounts
   end
 
   private
 
   def autofollow_inviter!
     return unless @source_account&.user&.invite&.autofollow?
-    FollowService.new.call(@source_account, @source_account.user.invite.user.account)
-  end
-
-  def autofollow_bootstrap_timeline_accounts!
-    bootstrap_timeline_accounts.each do |target_account|
-      begin
-        FollowService.new.call(@source_account, target_account)
-      rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
-        nil
-      end
-    end
-  end
-
-  def bootstrap_timeline_accounts
-    return @bootstrap_timeline_accounts if defined?(@bootstrap_timeline_accounts)
-
-    @bootstrap_timeline_accounts = bootstrap_timeline_accounts_usernames.empty? ? admin_accounts : local_unlocked_accounts(bootstrap_timeline_accounts_usernames)
-  end
-
-  def bootstrap_timeline_accounts_usernames
-    @bootstrap_timeline_accounts_usernames ||= (Setting.bootstrap_timeline_accounts || '').split(',').map { |str| str.strip.gsub(/\A@/, '') }.reject(&:blank?)
-  end
 
-  def admin_accounts
-    User.admins
-        .includes(:account)
-        .where(accounts: { locked: false })
-        .map(&:account)
-  end
-
-  def local_unlocked_accounts(usernames)
-    Account.local
-           .without_suspended
-           .where(username: usernames)
-           .where(locked: false)
-           .where(moved_to_account_id: nil)
+    FollowService.new.call(@source_account, @source_account.user.invite.user.account)
   end
 end
diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb
index d3db07a74..329262cca 100644
--- a/app/services/follow_service.rb
+++ b/app/services/follow_service.rb
@@ -30,6 +30,11 @@ class FollowService < BaseService
 
     ActivityTracker.increment('activity:interactions')
 
+    # When an account follows someone for the first time, avoid showing
+    # an empty home feed while the follow request is being processed
+    # and the feeds are being merged
+    mark_home_feed_as_partial! if @source_account.not_following_anyone?
+
     if (@target_account.locked? && !@options[:bypass_locked]) || @source_account.silenced? || @target_account.activitypub?
       request_follow!
     elsif @target_account.local?
@@ -39,6 +44,10 @@ class FollowService < BaseService
 
   private
 
+  def mark_home_feed_as_partial!
+    redis.set("account:#{@source_account.id}:regeneration", true, nx: true, ex: 1.day.seconds)
+  end
+
   def following_not_possible?
     @target_account.nil? || @target_account.id == @source_account.id || @target_account.suspended?
   end
diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb
index e8e139b05..c42b79db8 100644
--- a/app/services/process_hashtags_service.rb
+++ b/app/services/process_hashtags_service.rb
@@ -8,8 +8,7 @@ class ProcessHashtagsService < BaseService
     Tag.find_or_create_by_names(tags) do |tag|
       status.tags << tag
       records << tag
-
-      TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility?
+      tag.use!(status.account, status: status, at_time: status.created_at) if status.public_visibility?
     end
 
     return unless status.distributable?
diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb
index 570cd8272..ec4cb11f9 100644
--- a/app/services/process_mentions_service.rb
+++ b/app/services/process_mentions_service.rb
@@ -43,7 +43,6 @@ class ProcessMentionsService < BaseService
     end
 
     status.save!
-    check_for_spam(status)
 
     mentions.each { |mention| create_notification(mention) }
   end
@@ -72,8 +71,4 @@ class ProcessMentionsService < BaseService
   def resolve_account_service
     ResolveAccountService.new
   end
-
-  def check_for_spam(status)
-    SpamCheck.perform(status)
-  end
 end
diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb
index 6f018e24b..f41276de0 100644
--- a/app/services/reblog_service.rb
+++ b/app/services/reblog_service.rb
@@ -35,6 +35,7 @@ class ReblogService < BaseService
 
     create_notification(reblog)
     bump_potential_friendship(account, reblog)
+    record_use(account, reblog)
 
     reblog
   end
@@ -59,6 +60,16 @@ class ReblogService < BaseService
     PotentialFriendshipTracker.record(account.id, reblog.reblog.account_id, :reblog)
   end
 
+  def record_use(account, reblog)
+    return unless reblog.public_visibility?
+
+    original_status = reblog.reblog
+
+    original_status.tags.each do |tag|
+      tag.use!(account)
+    end
+  end
+
   def build_json(reblog)
     Oj.dump(serialize_payload(ActivityPub::ActivityPresenter.from_status(reblog), ActivityPub::ActivitySerializer, signer: reblog.account))
   end
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index 764ed288d..5cc1dba06 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -16,6 +16,8 @@ class RemoveStatusService < BaseService
     @account  = status.account
     @options  = options
 
+    @status.discard
+
     RedisLock.acquire(lock_options) do |lock|
       if lock.acquired?
         remove_from_self if @account.local?
@@ -27,10 +29,7 @@ class RemoveStatusService < BaseService
         # original object being removed implicitly removes reblogs
         # of it. The Delete activity of the original is forwarded
         # separately.
-        if @account.local? && !@options[:original_removed]
-          remove_from_remote_followers
-          remove_from_remote_reach
-        end
+        remove_from_remote_reach if @account.local? && !@options[:original_removed]
 
         # Since reblogs don't mention anyone, don't get reblogged,
         # favourited and don't contain their own media attachments
@@ -42,7 +41,6 @@ class RemoveStatusService < BaseService
           remove_from_public
           remove_from_media if @status.media_attachments.any?
           remove_from_direct if status.direct_visibility?
-          remove_from_spam_check
           remove_media
         end
 
@@ -85,13 +83,10 @@ class RemoveStatusService < BaseService
   end
 
   def remove_from_remote_reach
-    return if @status.reblog?
-
-    # People who got mentioned in the status, or who
-    # reblogged it from someone else might not follow
-    # the author and wouldn't normally receive the
-    # delete notification - so here, we explicitly
-    # send it to them
+    # Followers, relays, people who got mentioned in the status,
+    # or who reblogged it from someone else might not follow
+    # the author and wouldn't normally receive the delete
+    # notification - so here, we explicitly send it to them
 
     status_reach_finder = StatusReachFinder.new(@status)
 
@@ -100,24 +95,6 @@ class RemoveStatusService < BaseService
     end
   end
 
-  def remove_from_remote_followers
-    ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url|
-      [signed_activity_json, @account.id, inbox_url]
-    end
-
-    relay! if relayable?
-  end
-
-  def relayable?
-    @status.public_visibility?
-  end
-
-  def relay!
-    ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
-      [signed_activity_json, @account.id, inbox_url]
-    end
-  end
-
   def signed_activity_json
     @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account))
   end
@@ -171,10 +148,6 @@ class RemoveStatusService < BaseService
     @status.media_attachments.destroy_all
   end
 
-  def remove_from_spam_check
-    redis.zremrangebyscore("spam_check:#{@status.account_id}", @status.id, @status.id)
-  end
-
   def lock_options
     { redis: Redis.current, key: "distribute:#{@status.id}" }
   end
diff --git a/app/services/report_service.rb b/app/services/report_service.rb
index 9d9c7d6c9..bc0a8b464 100644
--- a/app/services/report_service.rb
+++ b/app/services/report_service.rb
@@ -10,6 +10,8 @@ class ReportService < BaseService
     @comment        = options.delete(:comment) || ''
     @options        = options
 
+    raise ActiveRecord::RecordNotFound if @target_account.suspended?
+
     create_report!
     notify_staff!
     forward_to_origin! if !@target_account.local? && ActiveModel::Type::Boolean.new.cast(@options[:forward])
diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb
index b8ddeb2ad..493995447 100644
--- a/app/services/resolve_account_service.rb
+++ b/app/services/resolve_account_service.rb
@@ -122,7 +122,7 @@ class ResolveAccountService < BaseService
     return false if @options[:check_delivery_availability] && !DeliveryFailureTracker.available?(@domain)
     return false if @options[:skip_webfinger]
 
-    @account.nil? || (@account.ostatus? && @account.possibly_stale?)
+    @account.nil? || @account.possibly_stale?
   end
 
   def activitypub_ready?
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 9f4da91d4..b8dc8d5e0 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -42,7 +42,13 @@ class SuspendAccountService < BaseService
   end
 
   def distribute_update_actor!
-    ActivityPub::UpdateDistributionWorker.perform_async(@account.id) if @account.local?
+    return unless @account.local?
+
+    account_reach_finder = AccountReachFinder.new(@account)
+
+    ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url|
+      [signed_activity_json, @account.id, inbox_url]
+    end
   end
 
   def unmerge_from_home_timelines!
@@ -90,4 +96,8 @@ class SuspendAccountService < BaseService
       end
     end
   end
+
+  def signed_activity_json
+    @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account))
+  end
 end
diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb
index ce9ee48ed..949c670aa 100644
--- a/app/services/unsuspend_account_service.rb
+++ b/app/services/unsuspend_account_service.rb
@@ -12,6 +12,7 @@ class UnsuspendAccountService < BaseService
     merge_into_home_timelines!
     merge_into_list_timelines!
     publish_media_attachments!
+    distribute_update_actor!
   end
 
   private
@@ -36,6 +37,16 @@ class UnsuspendAccountService < BaseService
     # @account would now be nil.
   end
 
+  def distribute_update_actor!
+    return unless @account.local?
+
+    account_reach_finder = AccountReachFinder.new(@account)
+
+    ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url|
+      [signed_activity_json, @account.id, inbox_url]
+    end
+  end
+
   def merge_into_home_timelines!
     @account.followers_for_local_distribution.find_each do |follower|
       FeedManager.instance.merge_into_home(@account, follower)
@@ -81,4 +92,8 @@ class UnsuspendAccountService < BaseService
       end
     end
   end
+
+  def signed_activity_json
+    @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account))
+  end
 end
diff --git a/app/validators/blacklisted_email_validator.rb b/app/validators/blacklisted_email_validator.rb
index 1ca73fdcc..eb66ad93d 100644
--- a/app/validators/blacklisted_email_validator.rb
+++ b/app/validators/blacklisted_email_validator.rb
@@ -6,26 +6,25 @@ class BlacklistedEmailValidator < ActiveModel::Validator
 
     @email = user.email
 
-    user.errors.add(:email, :blocked) if blocked_email?
+    user.errors.add(:email, :blocked) if blocked_email_provider?
+    user.errors.add(:email, :taken) if blocked_canonical_email?
   end
 
   private
 
-  def blocked_email?
-    on_blacklist? || not_on_whitelist?
+  def blocked_email_provider?
+    disallowed_through_email_domain_block? || disallowed_through_configuration? || not_allowed_through_configuration?
   end
 
-  def on_blacklist?
-    return true  if EmailDomainBlock.block?(@email)
-    return false if Rails.configuration.x.email_domains_blacklist.blank?
-
-    domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
-    regexp  = Regexp.new("@(.+\\.)?(#{domains})", true)
+  def blocked_canonical_email?
+    CanonicalEmailBlock.block?(@email)
+  end
 
-    regexp.match?(@email)
+  def disallowed_through_email_domain_block?
+    EmailDomainBlock.block?(@email)
   end
 
-  def not_on_whitelist?
+  def not_allowed_through_configuration?
     return false if Rails.configuration.x.email_domains_whitelist.blank?
 
     domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.')
@@ -33,4 +32,13 @@ class BlacklistedEmailValidator < ActiveModel::Validator
 
     @email !~ regexp
   end
+
+  def disallowed_through_configuration?
+    return false if Rails.configuration.x.email_domains_blacklist.blank?
+
+    domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
+    regexp  = Regexp.new("@(.+\\.)?(#{domains})", true)
+
+    regexp.match?(@email)
+  end
 end
diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb
index 723302ec9..8f7d96b8e 100644
--- a/app/validators/existing_username_validator.rb
+++ b/app/validators/existing_username_validator.rb
@@ -4,11 +4,25 @@ class ExistingUsernameValidator < ActiveModel::EachValidator
   def validate_each(record, attribute, value)
     return if value.blank?
 
+    usernames_and_domains = begin
+      value.split(',').map do |str|
+        username, domain = str.strip.gsub(/\A@/, '').split('@')
+        domain = nil if TagManager.instance.local_domain?(domain)
+
+        next if username.blank?
+
+        [str, username, domain]
+      end.compact
+    end
+
+    usernames_with_no_accounts = usernames_and_domains.filter_map do |(str, username, domain)|
+      str unless Account.find_remote(username, domain)
+    end
+
     if options[:multiple]
-      missing_usernames = value.split(',').map { |username| username.strip.gsub(/\A@/, '') }.filter_map { |username| username unless Account.find_local(username) }
-      record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: missing_usernames.join(', '))) if missing_usernames.any?
+      record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: usernames_with_no_accounts.join(', '))) if usernames_with_no_accounts.any?
     else
-      record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) unless Account.find_local(value.strip.gsub(/\A@/, ''))
+      record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) if usernames_with_no_accounts.any? || usernames_and_domains.size > 1
     end
   end
 end
diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml
index 52fb0d946..76dec18b1 100644
--- a/app/views/accounts/_header.html.haml
+++ b/app/views/accounts/_header.html.haml
@@ -1,9 +1,9 @@
 .public-account-header{:class => ("inactive" if account.moved?)}
   .public-account-header__image
-    = image_tag (current_account&.user&.setting_auto_play_gif ? account.header_original_url : account.header_static_url), class: 'parallax'
+    = image_tag (prefers_autoplay? ? account.header_original_url : account.header_static_url), class: 'parallax'
   .public-account-header__bar
     = link_to short_account_url(account), class: 'avatar' do
-      = image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url), id: 'profile_page_avatar', data: {original: full_asset_url(account.avatar_original_url), static: full_asset_url(account.avatar_static_url), autoplay: current_account&.user&.setting_auto_play_gif}
+      = image_tag (prefers_autoplay? ? account.avatar_original_url : account.avatar_static_url), id: 'profile_page_avatar', data: { original: full_asset_url(account.avatar_original_url), static: full_asset_url(account.avatar_static_url), autoplay: prefers_autoplay? }
     .public-account-header__tabs
       .public-account-header__tabs__name
         %h1
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index f2f0c813d..e25b80846 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -5,7 +5,7 @@
   .flash-message-stack
     - @system_checks.each do |message|
       .flash-message.warning
-        = t("admin.system_checks.#{message.key}.message_html", message.value ? { value: content_tag(:strong, message.value) } : {})
+        = t("admin.system_checks.#{message.key}.message_html", value: message.value ? content_tag(:strong, message.value) : nil)
         - if message.action
           = link_to t("admin.system_checks.#{message.key}.action"), message.action
 
@@ -79,8 +79,6 @@
           = feature_hint(link_to(t('admin.dashboard.trends'), edit_admin_settings_path), @trends_enabled)
         %li
           = feature_hint(link_to(t('admin.dashboard.feature_relay'), admin_relays_path), @relay_enabled)
-        %li
-          = feature_hint(link_to(t('admin.dashboard.feature_spam_check'), edit_admin_settings_path), @spam_check_enabled)
 
   .dashboard__widgets__versions
     %div
diff --git a/app/views/admin/follow_recommendations/_account.html.haml b/app/views/admin/follow_recommendations/_account.html.haml
new file mode 100644
index 000000000..af5a4aaf7
--- /dev/null
+++ b/app/views/admin/follow_recommendations/_account.html.haml
@@ -0,0 +1,20 @@
+.batch-table__row
+  %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox
+    = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id
+  .batch-table__row__content.batch-table__row__content--unpadded
+    %table.accounts-table
+      %tbody
+        %tr
+          %td= account_link_to account
+          %td.accounts-table__count.optional
+            = number_to_human account.statuses_count, strip_insignificant_zeros: true
+            %small= t('accounts.posts', count: account.statuses_count).downcase
+          %td.accounts-table__count.optional
+            = number_to_human account.followers_count, strip_insignificant_zeros: true
+            %small= t('accounts.followers', count: account.followers_count).downcase
+          %td.accounts-table__count
+            - if account.last_status_at.present?
+              %time.time-ago{ datetime: account.last_status_at.to_date.iso8601, title: l(account.last_status_at.to_date) }= l account.last_status_at
+            - else
+              \-
+            %small= t('accounts.last_active')
diff --git a/app/views/admin/follow_recommendations/show.html.haml b/app/views/admin/follow_recommendations/show.html.haml
new file mode 100644
index 000000000..2878f07d7
--- /dev/null
+++ b/app/views/admin/follow_recommendations/show.html.haml
@@ -0,0 +1,38 @@
+- content_for :page_title do
+  = t('admin.follow_recommendations.title')
+
+%p= t('admin.follow_recommendations.description_html')
+
+%hr.spacer/
+
+= form_tag admin_follow_recommendations_path, method: 'GET', class: 'simple_form' do
+  .filters
+    .filter-subset.filter-subset--with-select
+      %strong= t('admin.follow_recommendations.language')
+      .input.select.optional
+        = select_tag :language, options_for_select(I18n.available_locales.map { |key| [human_locale(key), key]}, @language)
+
+    .filter-subset
+      %strong= t('admin.follow_recommendations.status')
+      %ul
+        %li= filter_link_to t('admin.accounts.moderation.active'), status: nil
+        %li= filter_link_to t('admin.follow_recommendations.suppressed'), status: 'suppressed'
+
+= form_for(@form, url: admin_follow_recommendations_path, method: :patch) do |f|
+  - RelationshipFilter::KEYS.each do |key|
+    = hidden_field_tag key, params[key] if params[key].present?
+
+  .batch-table
+    .batch-table__toolbar
+      %label.batch-table__toolbar__select.batch-checkbox-all
+        = check_box_tag :batch_checkbox_all, nil, false
+      .batch-table__toolbar__actions
+        - if params[:status].blank? && can?(:suppress, :follow_recommendation)
+          = f.button safe_join([fa_icon('times'), t('admin.follow_recommendations.suppress')]), name: :suppress, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
+        - if params[:status] == 'suppressed' && can?(:unsuppress, :follow_recommendation)
+          = f.button safe_join([fa_icon('plus'), t('admin.follow_recommendations.unsuppress')]), name: :unsuppress, class: 'table-action-link', type: :submit
+    .batch-table__body
+      - if @accounts.empty?
+        = nothing_here 'nothing-here--under-tabs'
+      - else
+        = render partial: 'account', collection: @accounts, locals: { f: f }
diff --git a/app/views/admin/instances/_exhausted_deliveries_days.haml b/app/views/admin/instances/_exhausted_deliveries_days.haml
new file mode 100644
index 000000000..e581f542d
--- /dev/null
+++ b/app/views/admin/instances/_exhausted_deliveries_days.haml
@@ -0,0 +1,2 @@
+%li.negative-hint
+  = l(exhausted_deliveries_days)
diff --git a/app/views/admin/instances/_instance.html.haml b/app/views/admin/instances/_instance.html.haml
index 188d0d984..990cf9ec8 100644
--- a/app/views/admin/instances/_instance.html.haml
+++ b/app/views/admin/instances/_instance.html.haml
@@ -22,4 +22,12 @@
           = t('admin.accounts.whitelisted')
         - else
           = t('admin.accounts.no_limits_imposed')
+        - if instance.failure_days
+          = ' / '
+          %span.negative-hint
+            = t('admin.instances.delivery.warning_message', count: instance.failure_days)
+        - if instance.unavailable_domain
+          = ' / '
+          %span.negative-hint
+            = t('admin.instances.delivery.unavailable_message')
     .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true
diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml
index 7c7958786..797948d94 100644
--- a/app/views/admin/instances/index.html.haml
+++ b/app/views/admin/instances/index.html.haml
@@ -16,6 +16,24 @@
       - unless whitelist_mode?
         %li= filter_link_to t('admin.instances.moderation.limited'), limited: '1'
 
+  .filter-subset
+    %strong= t('admin.instances.delivery.title')
+    %ul
+      %li= filter_link_to t('admin.instances.delivery.all'), warning: nil, unavailable: nil
+      %li= filter_link_to t('admin.instances.delivery.warning'), warning: '1', unavailable: nil
+      %li= filter_link_to t('admin.instances.delivery.unavailable'), warning: nil, unavailable: '1'
+
+  .back-link
+    = link_to admin_instances_path() do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_all')
+    = link_to admin_instances_path(limited: 1) do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_limited')
+    = link_to admin_instances_path(warning: 1) do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_warning')
+
 - unless whitelist_mode?
   = form_tag admin_instances_url, method: 'GET', class: 'simple_form' do
     .fields-group
diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml
index 0b9382771..462529338 100644
--- a/app/views/admin/instances/show.html.haml
+++ b/app/views/admin/instances/show.html.haml
@@ -1,6 +1,18 @@
 - content_for :page_title do
   = @instance.domain
 
+.filters
+  .back-link
+    = link_to admin_instances_path() do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_all')
+    = link_to admin_instances_path(limited: 1) do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_limited')
+    = link_to admin_instances_path(warning: 1) do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.instances.back_to_warning')
+
 .dashboard__counters
   %div
     = link_to admin_accounts_path(remote: '1', by_domain: @instance.domain) do
@@ -48,6 +60,13 @@
       = simple_format(h(@instance.public_comment))
     .speech-bubble__owner= t 'admin.instances.public_comment'
 
+- unless @exhausted_deliveries_days.empty?
+  %h4= t 'admin.instances.delivery_error_days'
+  %ul
+    = render partial: 'exhausted_deliveries_days', collection: @exhausted_deliveries_days
+  %p.hint
+    = t 'admin.instances.delivery_error_hint', count: DeliveryFailureTracker::FAILURE_DAYS_THRESHOLD
+
 %hr.spacer/
 
 %div.action-buttons
@@ -59,3 +78,9 @@
       = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button'
     - else
       = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button'
+    - if @instance.delivery_failure_tracker.available?
+      - unless @exhausted_deliveries_days.empty?
+        = link_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button'
+      = link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button'
+    - else
+      = link_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button'
diff --git a/app/views/admin/rules/index.html.haml b/app/views/admin/rules/index.html.haml
index 3b069d083..4fb993ad0 100644
--- a/app/views/admin/rules/index.html.haml
+++ b/app/views/admin/rules/index.html.haml
@@ -1,8 +1,9 @@
 - content_for :page_title do
   = t('admin.rules.title')
 
-.simple_form
-  %p.hint= t('admin.rules.description')
+%p= t('admin.rules.description_html')
+
+%hr.spacer/
 
 - if can? :create, :rule
   = simple_form_for @rule, url: admin_rules_path do |f|
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index fa8d8441e..373811ea3 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -47,10 +47,7 @@
   %hr.spacer/
 
   .fields-group
-    = f.input :enable_bootstrap_timeline_accounts, as: :boolean, wrapper: :with_label, label: t('admin.settings.enable_bootstrap_timeline_accounts.title'), hint: t('admin.settings.enable_bootstrap_timeline_accounts.desc_html')
-
-  .fields-group
-    = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label, label: t('admin.settings.bootstrap_timeline_accounts.title'), hint: t('admin.settings.bootstrap_timeline_accounts.desc_html'), disabled: !Setting.enable_bootstrap_timeline_accounts
+    = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label, label: t('admin.settings.bootstrap_timeline_accounts.title'), hint: t('admin.settings.bootstrap_timeline_accounts.desc_html')
 
   %hr.spacer/
 
@@ -69,10 +66,10 @@
 
   - unless whitelist_mode?
     .fields-group
-      = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html')
+      = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html'), recommended: true
 
     .fields-group
-      = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html')
+      = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html'), recommended: true
 
     .fields-group
       = f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html')
@@ -101,9 +98,6 @@
   .fields-group
     = f.input :show_replies_in_public_timelines, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_replies_in_public_timelines.title'), hint: t('admin.settings.show_replies_in_public_timelines.desc_html')
 
-  .fields-group
-    = f.input :spam_check_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.spam_check_enabled.title'), hint: t('admin.settings.spam_check_enabled.desc_html')
-
   %hr.spacer/
 
   .fields-group
diff --git a/app/views/admin/tags/_tag.html.haml b/app/views/admin/tags/_tag.html.haml
index 287d28e53..adf4ca7b2 100644
--- a/app/views/admin/tags/_tag.html.haml
+++ b/app/views/admin/tags/_tag.html.haml
@@ -10,8 +10,6 @@
         = tag.name
 
         %small
-          = t('admin.tags.in_directory', count: tag.accounts_count)
-          &bull;
           = t('admin.tags.unique_uses_today', count: tag.history.first[:accounts])
 
           - if tag.trending?
diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml
index 72eef18a9..e25b0ae84 100644
--- a/app/views/admin/tags/index.html.haml
+++ b/app/views/admin/tags/index.html.haml
@@ -3,12 +3,6 @@
 
 .filters
   .filter-subset
-    %strong= t('admin.tags.context')
-    %ul
-      %li= filter_link_to t('generic.all'), directory: nil
-      %li= filter_link_to t('admin.tags.directory'), directory: '1'
-
-  .filter-subset
     %strong= t('admin.tags.review')
     %ul
       %li= filter_link_to t('generic.all'), reviewed: nil, unreviewed: nil, pending_review: nil
@@ -20,8 +14,9 @@
     %strong= t('generic.order_by')
     %ul
       %li= filter_link_to t('admin.tags.most_recent'), popular: nil, active: nil
-      %li= filter_link_to t('admin.tags.most_popular'), popular: '1', active: nil
       %li= filter_link_to t('admin.tags.last_active'), active: '1', popular: nil
+      %li= filter_link_to t('admin.tags.most_popular'), popular: '1', active: nil
+
 
 = form_tag admin_tags_url, method: 'GET', class: 'simple_form' do
   .fields-group
diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml
index c9a147587..c4caffda1 100644
--- a/app/views/admin/tags/show.html.haml
+++ b/app/views/admin/tags/show.html.haml
@@ -10,15 +10,6 @@
     %div
       .dashboard__counters__num= number_with_delimiter @accounts_week
       .dashboard__counters__label= t 'admin.tags.accounts_week'
-  %div
-    - if @tag.accounts_count > 0
-      = link_to explore_hashtag_path(@tag) do
-        .dashboard__counters__num= number_with_delimiter @tag.accounts_count
-        .dashboard__counters__label= t 'admin.tags.directory'
-    - else
-      %div
-        .dashboard__counters__num= number_with_delimiter @tag.accounts_count
-        .dashboard__counters__label= t 'admin.tags.directory'
 
 %hr.spacer/
 
@@ -30,8 +21,8 @@
 
   .fields-group
     = f.input :usable, as: :boolean, wrapper: :with_label
-    = f.input :trendable, as: :boolean, wrapper: :with_label, disabled: !Setting.trends
-    = f.input :listable, as: :boolean, wrapper: :with_label, disabled: !Setting.profile_directory
+    = f.input :trendable, as: :boolean, wrapper: :with_label
+    = f.input :listable, as: :boolean, wrapper: :with_label
 
   .actions
     = f.button :button, t('generic.save_changes'), type: :submit
diff --git a/app/views/media/player.html.haml b/app/views/media/player.html.haml
index 191586248..c1d630a63 100644
--- a/app/views/media/player.html.haml
+++ b/app/views/media/player.html.haml
@@ -9,8 +9,11 @@
   = render partial: 'layouts/theme', object: @core
   = render partial: 'layouts/theme', object: @theme
 
+:ruby
+  meta = @media_attachment.file.meta || {}
+
 - if @media_attachment.video?
-  = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), frameRate: @media_attachment.file.meta.dig('original', 'frame_rate'), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description, media: [ActiveModelSerializers::SerializableResource.new(@media_attachment, serializer: REST::MediaAttachmentSerializer)].as_json do
+  = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), frameRate: meta.dig('original', 'frame_rate'), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description, media: [ActiveModelSerializers::SerializableResource.new(@media_attachment, serializer: REST::MediaAttachmentSerializer)].as_json do
     %video{ controls: 'controls' }
       %source{ src: @media_attachment.file.url(:original) }
 - elsif @media_attachment.gifv?
@@ -18,6 +21,6 @@
     %video{ autoplay: 'autoplay', muted: 'muted', loop: 'loop' }
       %source{ src: @media_attachment.file.url(:original) }
 - elsif @media_attachment.audio?
-  = react_component :audio, src: @media_attachment.file.url(:original), poster: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.account.avatar_static_url, backgroundColor: @media_attachment.file.meta.dig('colors', 'background'), foregroundColor: @media_attachment.file.meta.dig('colors', 'foreground'), accentColor: @media_attachment.file.meta.dig('colors', 'accent'), width: 670, height: 380, fullscreen: true, alt: @media_attachment.description, duration: @media_attachment.file.meta.dig(:original, :duration) do
+  = react_component :audio, src: @media_attachment.file.url(:original), poster: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.account.avatar_static_url, backgroundColor: meta.dig('colors', 'background'), foregroundColor: meta.dig('colors', 'foreground'), accentColor: meta.dig('colors', 'accent'), width: 670, height: 380, fullscreen: true, alt: @media_attachment.description, duration: meta.dig(:original, :duration) do
     %audio{ controls: 'controls' }
       %source{ src: @media_attachment.file.url(:original) }
diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml
index 93af131e5..daf164949 100644
--- a/app/views/statuses/_detailed_status.html.haml
+++ b/app/views/statuses/_detailed_status.html.haml
@@ -2,13 +2,13 @@
   .p-author.h-card
     = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'detailed-status__display-name u-url', target: stream_link_target, rel: 'noopener' do
       .detailed-status__display-avatar
-        - if current_account&.user&.setting_auto_play_gif || autoplay
+        - if prefers_autoplay?
           = image_tag status.account.avatar_original_url, alt: '', class: 'account__avatar u-photo'
         - else
           = image_tag status.account.avatar_static_url, alt: '', class: 'account__avatar u-photo'
       %span.display-name
         %bdi
-          %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay)
+          %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: prefers_autoplay?)
         %span.display-name__account
           = acct(status.account)
           = fa_icon('lock') if status.account.locked?
@@ -18,28 +18,22 @@
   .status__content.emojify{ :data => ({ spoiler: current_account&.user&.setting_expand_spoilers ? 'expanded' : 'folded' } if status.spoiler_text?) }<
     - if status.spoiler_text?
       %p<
-        %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}&nbsp;
+        %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: prefers_autoplay?)}&nbsp;
         %button.status__content__spoiler-link= t('statuses.show_more')
     .e-content
-      = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
+      = Formatter.instance.format(status, custom_emojify: true, autoplay: prefers_autoplay?)
       - if status.preloadable_poll
-        = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
-          = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay }
+        = render_poll_component(status)
 
   - if !status.media_attachments.empty?
     - if status.media_attachments.first.video?
-      - video = status.media_attachments.first
-      = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 670, height: 380, detailed: true, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_video_component(status, width: 670, height: 380, detailed: true)
     - elsif status.media_attachments.first.audio?
-      - audio = status.media_attachments.first
-      = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 670, height: 380, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_audio_component(status, width: 670, height: 380)
     - else
-      = react_component :media_gallery, height: 380, sensitive: sensitized?(status, current_account), standalone: true, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_media_gallery_component(status, height: 380, standalone: true)
   - elsif status.preview_card
-    = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
+    = render_card_component(status)
 
   .detailed-status__meta
     %data.dt-published{ value: status.created_at.to_time.iso8601 }
diff --git a/app/views/statuses/_poll.html.haml b/app/views/statuses/_poll.html.haml
index 64e62e97c..3546a923e 100644
--- a/app/views/statuses/_poll.html.haml
+++ b/app/views/statuses/_poll.html.haml
@@ -12,7 +12,7 @@
             %span.poll__number><
               = "#{percent.round}%"
             %span.poll__option__text
-              = Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
+              = Formatter.instance.format_poll_option(status, option, autoplay: prefers_autoplay?)
             - if own_votes.include?(index)
               %span.poll__voted
                 %i.poll__voted__mark.fa.fa-check
@@ -23,7 +23,7 @@
           %label.poll__option><
             %span.poll__input{ class: poll.multiple? ? 'checkbox' : nil}><
             %span.poll__option__text
-              = Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
+              = Formatter.instance.format_poll_option(status, option, autoplay: prefers_autoplay?)
   .poll__footer
     - unless show_results
       %button.button.button-secondary{ disabled: true }
diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml
index ab163245d..a7c78b997 100644
--- a/app/views/statuses/_simple_status.html.haml
+++ b/app/views/statuses/_simple_status.html.haml
@@ -13,13 +13,13 @@
       = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'status__display-name u-url', target: stream_link_target, rel: 'noopener noreferrer' do
         .status__avatar
           %div
-            - if current_account&.user&.setting_auto_play_gif || autoplay
+            - if prefers_autoplay?
               = image_tag status.account.avatar_original_url, alt: '', class: 'u-photo account__avatar'
             - else
               = image_tag status.account.avatar_static_url, alt: '', class: 'u-photo account__avatar'
         %span.display-name
           %bdi
-            %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay)
+            %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: prefers_autoplay?)
           = ' '
           %span.display-name__account
             = acct(status.account)
@@ -27,28 +27,22 @@
   .status__content.emojify{ :data => ({ spoiler: current_account&.user&.setting_expand_spoilers ? 'expanded' : 'folded' } if status.spoiler_text?) }<
     - if status.spoiler_text?
       %p<
-        %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}&nbsp;
+        %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: prefers_autoplay?)}&nbsp;
         %button.status__content__spoiler-link= t('statuses.show_more')
     .e-content<
-      = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
+      = Formatter.instance.format(status, custom_emojify: true, autoplay: prefers_autoplay?)
       - if status.preloadable_poll
-        = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
-          = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay }
+        = render_poll_component(status)
 
   - if !status.media_attachments.empty?
     - if status.media_attachments.first.video?
-      - video = status.media_attachments.first
-      = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 610, height: 343, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_video_component(status, width: 610, height: 343)
     - elsif status.media_attachments.first.audio?
-      - audio = status.media_attachments.first
-      = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 610, height: 343, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_audio_component(status, width: 610, height: 343)
     - else
-      = react_component :media_gallery, height: 343, sensitive: sensitized?(status, current_account), autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do
-        = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
+      = render_media_gallery_component(status, height: 343)
   - elsif status.preview_card
-    = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
+    = render_card_component(status)
 
   - if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id && !hide_show_thread
     = link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__content__read-more-button', target: stream_link_target, rel: 'noopener noreferrer' do
diff --git a/app/views/statuses/_status.html.haml b/app/views/statuses/_status.html.haml
index 13a06519c..9f3197d0d 100644
--- a/app/views/statuses/_status.html.haml
+++ b/app/views/statuses/_status.html.haml
@@ -5,7 +5,6 @@
   is_successor    ||= false
   direct_reply_id ||= false
   parent_id       ||= false
-  autoplay        ||= current_account&.user&.setting_auto_play_gif
   is_direct_parent  = direct_reply_id == status.id
   is_direct_child   = parent_id == status.in_reply_to_id
   centered        ||= include_threads && !is_predecessor && !is_successor
@@ -19,7 +18,7 @@
     .entry{ class: entry_classes }
       = link_to_older ActivityPub::TagManager.instance.url_for(@next_ancestor)
 
-  = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }, autoplay: autoplay
+  = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }
 
 .entry{ class: entry_classes }
 
@@ -39,14 +38,14 @@
       %span
         = t('stream_entries.pinned')
 
-  = render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, autoplay: autoplay, hide_show_thread: is_predecessor || is_successor
+  = render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, hide_show_thread: is_predecessor || is_successor
 
 - if include_threads
   - if @since_descendant_thread_id
     .entry{ class: entry_classes }
       = link_to_newer short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1)
   - @descendant_threads.each do |thread|
-    = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }, autoplay: autoplay
+    = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }
 
     - if thread[:next_status]
       .entry{ class: entry_classes }
diff --git a/app/views/statuses/embed.html.haml b/app/views/statuses/embed.html.haml
index 2f111f53f..18d62fd8e 100644
--- a/app/views/statuses/embed.html.haml
+++ b/app/views/statuses/embed.html.haml
@@ -1,2 +1,2 @@
 .activity-stream.activity-stream--headless
-  = render 'status', status: @status, centered: true, autoplay: @autoplay
+  = render 'status', status: @status, centered: true
diff --git a/app/views/user_mailer/webauthn_enabled.text.erb b/app/views/user_mailer/webauthn_enabled.text.erb
index 4c233fefb..d4482a69b 100644
--- a/app/views/user_mailer/webauthn_enabled.text.erb
+++ b/app/views/user_mailer/webauthn_enabled.text.erb
@@ -1,7 +1,7 @@
-<%= t 'devise.mailer.webauthn_credentia.added.title' %>
+<%= t 'devise.mailer.webauthn_credential.added.title' %>
 
 ===
 
-<%= t 'devise.mailer.webauthn_credentia.added.explanation' %>
+<%= t 'devise.mailer.webauthn_credential.added.explanation' %>
 
 => <%= edit_user_registration_url %>
diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb
index 9b4814644..09898ca49 100644
--- a/app/workers/activitypub/distribution_worker.rb
+++ b/app/workers/activitypub/distribution_worker.rb
@@ -35,7 +35,7 @@ class ActivityPub::DistributionWorker
     # Deliver the status to all followers.
     # If the status is a reply to another local status, also forward it to that
     # status' authors' followers.
-    @inboxes ||= if @status.reply? && @status.thread.account.local? && @status.distributable?
+    @inboxes ||= if @status.in_reply_to_local_account? && @status.distributable?
                    @account.followers.or(@status.thread.account.followers).inboxes
                  else
                    @account.followers.inboxes
diff --git a/app/workers/import/relationship_worker.rb b/app/workers/import/relationship_worker.rb
index 4a7100435..6791b15c3 100644
--- a/app/workers/import/relationship_worker.rb
+++ b/app/workers/import/relationship_worker.rb
@@ -5,7 +5,7 @@ class Import::RelationshipWorker
 
   sidekiq_options queue: 'pull', retry: 8, dead: false
 
-  def perform(account_id, target_account_uri, relationship, options = {})
+  def perform(account_id, target_account_uri, relationship, options)
     from_account   = Account.find(account_id)
     target_domain  = domain(target_account_uri)
     target_account = stoplight_wrap_request(target_domain) { ResolveAccountService.new.call(target_account_uri, { check_delivery_availability: true }) }
@@ -16,7 +16,7 @@ class Import::RelationshipWorker
     case relationship
     when 'follow'
       begin
-        FollowService.new.call(from_account, target_account, options)
+        FollowService.new.call(from_account, target_account, **options)
       rescue ActiveRecord::RecordInvalid
         raise if FollowLimitValidator.limit_for_account(from_account) < from_account.following_count
       end
@@ -27,7 +27,7 @@ class Import::RelationshipWorker
     when 'unblock'
       UnblockService.new.call(from_account, target_account)
     when 'mute'
-      MuteService.new.call(from_account, target_account, options)
+      MuteService.new.call(from_account, target_account, **options)
     when 'unmute'
       UnmuteService.new.call(from_account, target_account)
     end
diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb
index 74ef7d4da..6ebb9a400 100644
--- a/app/workers/merge_worker.rb
+++ b/app/workers/merge_worker.rb
@@ -3,11 +3,11 @@
 class MergeWorker
   include Sidekiq::Worker
 
-  sidekiq_options queue: 'pull'
-
   def perform(from_account_id, into_account_id)
     FeedManager.instance.merge_into_home(Account.find(from_account_id), Account.find(into_account_id))
   rescue ActiveRecord::RecordNotFound
     true
+  ensure
+    Redis.current.del("account:#{into_account_id}:regeneration")
   end
 end
diff --git a/app/workers/redownload_media_worker.rb b/app/workers/redownload_media_worker.rb
index 0638cd0f0..343caa32c 100644
--- a/app/workers/redownload_media_worker.rb
+++ b/app/workers/redownload_media_worker.rb
@@ -3,6 +3,7 @@
 class RedownloadMediaWorker
   include Sidekiq::Worker
   include ExponentialBackoff
+  include JsonLdHelper
 
   sidekiq_options queue: 'pull', retry: 3
 
@@ -15,6 +16,14 @@ class RedownloadMediaWorker
     media_attachment.download_thumbnail!
     media_attachment.save
   rescue ActiveRecord::RecordNotFound
-    true
+    # Do nothing
+  rescue Mastodon::UnexpectedResponseError => e
+    response = e.response
+
+    if response_error_unsalvageable?(response)
+      # Give up
+    else
+      raise e
+    end
   end
 end
diff --git a/app/workers/scheduler/follow_recommendations_scheduler.rb b/app/workers/scheduler/follow_recommendations_scheduler.rb
new file mode 100644
index 000000000..cb1e15961
--- /dev/null
+++ b/app/workers/scheduler/follow_recommendations_scheduler.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+class Scheduler::FollowRecommendationsScheduler
+  include Sidekiq::Worker
+  include Redisable
+
+  sidekiq_options retry: 0
+
+  # The maximum number of accounts that can be requested in one page from the
+  # API is 80, and the suggestions API does not allow pagination. This number
+  # leaves some room for accounts being filtered during live access
+  SET_SIZE = 100
+
+  def perform
+    # Maintaining a materialized view speeds-up subsequent queries significantly
+    AccountSummary.refresh
+    FollowRecommendation.refresh
+
+    fallback_recommendations = FollowRecommendation.limit(SET_SIZE).index_by(&:account_id)
+
+    I18n.available_locales.each do |locale|
+      recommendations = begin
+        if AccountSummary.safe.filtered.localized(locale).exists? # We can skip the work if no accounts with that language exist
+          FollowRecommendation.localized(locale).limit(SET_SIZE).index_by(&:account_id)
+        else
+          {}
+        end
+      end
+
+      # Use language-agnostic results if there are not enough language-specific ones
+      missing = SET_SIZE - recommendations.keys.size
+
+      if missing.positive?
+        added = 0
+
+        # Avoid duplicate results
+        fallback_recommendations.each_value do |recommendation|
+          next if recommendations.key?(recommendation.account_id)
+
+          recommendations[recommendation.account_id] = recommendation
+          added += 1
+
+          break if added >= missing
+        end
+      end
+
+      redis.pipelined do
+        redis.del(key(locale))
+
+        recommendations.each_value do |recommendation|
+          redis.zadd(key(locale), recommendation.rank, recommendation.account_id)
+        end
+      end
+    end
+  end
+
+  private
+
+  def key(locale)
+    "follow_recommendations:#{locale}"
+  end
+end
diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb
index 8bba9ca75..1b77dfdd9 100644
--- a/app/workers/thread_resolve_worker.rb
+++ b/app/workers/thread_resolve_worker.rb
@@ -14,5 +14,7 @@ class ThreadResolveWorker
 
     child_status.thread = parent_status
     child_status.save!
+  rescue ActiveRecord::RecordNotFound
+    true
   end
 end
diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb
index 46aeaa30b..57f5b5c22 100644
--- a/app/workers/web/push_notification_worker.rb
+++ b/app/workers/web/push_notification_worker.rb
@@ -3,22 +3,67 @@
 class Web::PushNotificationWorker
   include Sidekiq::Worker
 
-  sidekiq_options backtrace: true, retry: 5
+  sidekiq_options queue: 'push', retry: 5
+
+  TTL     = 48.hours.to_s
+  URGENCY = 'normal'
 
   def perform(subscription_id, notification_id)
-    subscription = ::Web::PushSubscription.find(subscription_id)
-    notification = Notification.find(notification_id)
+    @subscription = Web::PushSubscription.find(subscription_id)
+    @notification = Notification.find(notification_id)
+
+    # Polymorphically associated activity could have been deleted
+    # in the meantime, so we have to double-check before proceeding
+    return unless @notification.activity.present? && @subscription.pushable?(@notification)
+
+    payload = @subscription.encrypt(push_notification_json)
 
-    subscription.push(notification) unless notification.activity.nil?
-  rescue Webpush::ResponseError => e
-    code = e.response.code.to_i
+    request_pool.with(@subscription.audience) do |http_client|
+      request = Request.new(:post, @subscription.endpoint, body: payload.fetch(:ciphertext), http_client: http_client)
 
-    if (400..499).cover?(code) && ![408, 429].include?(code)
-      subscription.destroy!
-    else
-      raise e
+      request.add_headers(
+        'Content-Type'     => 'application/octet-stream',
+        'Ttl'              => TTL,
+        'Urgency'          => URGENCY,
+        'Content-Encoding' => 'aesgcm',
+        'Encryption'       => "salt=#{Webpush.encode64(payload.fetch(:salt)).delete('=')}",
+        'Crypto-Key'       => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{@subscription.crypto_key_header}",
+        'Authorization'    => @subscription.authorization_header
+      )
+
+      request.perform do |response|
+        # If the server responds with an error in the 4xx range
+        # that isn't about rate-limiting or timeouts, we can
+        # assume that the subscription is invalid or expired
+        # and must be removed
+
+        if (400..499).cover?(response.code) && ![408, 429].include?(response.code)
+          @subscription.destroy!
+        elsif !(200...300).cover?(response.code)
+          raise Mastodon::UnexpectedResponseError, response
+        end
+      end
     end
   rescue ActiveRecord::RecordNotFound
     true
   end
+
+  private
+
+  def push_notification_json
+    json = I18n.with_locale(@subscription.locale || I18n.default_locale) do
+      ActiveModelSerializers::SerializableResource.new(
+        @notification,
+        serializer: Web::NotificationSerializer,
+        scope: @subscription,
+        scope_name: :current_push_subscription
+      ).as_json
+    end
+
+    Oj.dump(json)
+  end
+
+  def request_pool
+    RequestPool.current
+  end
 end
diff --git a/babel.config.js b/babel.config.js
index 9be5b547a..b040cc159 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -18,7 +18,6 @@ module.exports = (api) => {
     ],
     plugins: [
       ['@babel/proposal-decorators', { legacy: true }],
-      '@babel/proposal-class-properties',
       ['react-intl', { messagesDir: './build/messages' }],
       'preval',
     ],
diff --git a/config/application.rb b/config/application.rb
index 74448d6e0..31fe9e4e0 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -10,15 +10,17 @@ require_relative '../lib/exceptions'
 require_relative '../lib/enumerable'
 require_relative '../lib/sanitize_ext/sanitize_config'
 require_relative '../lib/redis/namespace_extensions'
+require_relative '../lib/paperclip/schema_extensions'
+require_relative '../lib/paperclip/validation_extensions'
 require_relative '../lib/paperclip/url_generator_extensions'
 require_relative '../lib/paperclip/attachment_extensions'
 require_relative '../lib/paperclip/media_type_spoof_detector_extensions'
-require_relative '../lib/paperclip/transcoder_extensions'
 require_relative '../lib/paperclip/lazy_thumbnail'
 require_relative '../lib/paperclip/gif_transcoder'
-require_relative '../lib/paperclip/video_transcoder'
+require_relative '../lib/paperclip/transcoder'
 require_relative '../lib/paperclip/type_corrector'
 require_relative '../lib/paperclip/response_with_limit_adapter'
+require_relative '../lib/terrapin/multi_pipe_extensions'
 require_relative '../lib/mastodon/snowflake'
 require_relative '../lib/mastodon/version'
 require_relative '../lib/devise/two_factor_ldap_authenticatable'
@@ -29,6 +31,7 @@ require_relative '../lib/webpacker/helper_extensions'
 require_relative '../lib/action_dispatch/cookie_jar_extensions'
 require_relative '../lib/rails/engine_extensions'
 require_relative '../lib/active_record/database_tasks_extensions'
+require_relative '../lib/active_record/batches'
 
 Dotenv::Railtie.load
 
@@ -53,6 +56,7 @@ module Mastodon
     # All translations from config/locales/*.rb,yml are auto loaded.
     # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
     config.i18n.available_locales = [
+      :af,
       :ar,
       :ast,
       :bg,
@@ -76,6 +80,7 @@ module Mastodon
       :fi,
       :fr,
       :ga,
+      :gd,
       :gl,
       :he,
       :hi,
@@ -110,6 +115,7 @@ module Mastodon
       :ru,
       :sa,
       :sc,
+      :si,
       :sk,
       :sl,
       :sq,
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 1fd07044a..c25556665 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -86,9 +86,12 @@ Rails.application.configure do
   config.action_mailer.perform_caching = false
 
   # E-mails
+  outgoing_email_address = ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost')
+  outgoing_mail_domain   = Mail::Address.new(outgoing_email_address).domain
   config.action_mailer.default_options = {
-    from: ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost'),
-    reply_to: ENV['SMTP_REPLY_TO']
+    from: outgoing_email_address,
+    reply_to: ENV['SMTP_REPLY_TO'],
+    'Message-ID': -> { "<#{Mail.random_tag}@#{outgoing_mail_domain}>" },
   }
 
   config.action_mailer.smtp_settings = {
@@ -109,13 +112,13 @@ Rails.application.configure do
 
   config.action_dispatch.default_headers = {
     'Server'                  => 'Mastodon',
-    #'X-Frame-Options'         => 'DENY',
-    #'X-Content-Type-Options'  => 'nosniff',
-    #'X-XSS-Protection'        => '1; mode=block',
-    #'Referrer-Policy'         => 'same-origin',
-    #'Strict-Transport-Security' => 'max-age=63072000; includeSubDomains; preload',
+    'X-Frame-Options'         => 'DENY',
+    'X-Content-Type-Options'  => 'nosniff',
+    'X-XSS-Protection'        => '1; mode=block',
+    'Permissions-Policy'      => 'interest-cohort=()',
+    'Referrer-Policy'         => 'same-origin',
+    'Strict-Transport-Security' => 'max-age=63072000; includeSubDomains; preload',
     'X-Clacks-Overhead' => 'GNU Natalie Nguyen'
-
   }
 
   config.x.otp_secret = ENV.fetch('OTP_SECRET')
diff --git a/config/initializers/1_hosts.rb b/config/initializers/1_hosts.rb
index 757f1f735..eaf6e0181 100644
--- a/config/initializers/1_hosts.rb
+++ b/config/initializers/1_hosts.rb
@@ -4,7 +4,7 @@ port     = ENV.fetch('PORT') { 3000 }
 host     = ENV.fetch('LOCAL_DOMAIN') { "localhost:#{port}" }
 web_host = ENV.fetch('WEB_DOMAIN') { host }
 
-alternate_domains = ENV.fetch('ALTERNATE_DOMAINS') { '' }
+alternate_domains = ENV.fetch('ALTERNATE_DOMAINS') { '' }.split(/\s*,\s*/)
 
 Rails.application.configure do
   https = Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'
@@ -15,7 +15,7 @@ Rails.application.configure do
   config.x.use_s3       = ENV['S3_ENABLED'] == 'true'
   config.x.use_swift    = ENV['SWIFT_ENABLED'] == 'true'
 
-  config.x.alternate_domains = alternate_domains.split(/\s*,\s*/)
+  config.x.alternate_domains = alternate_domains
 
   config.action_mailer.default_url_options = { host: web_host, protocol: https ? 'https://' : 'http://', trailing_slash: false }
 
@@ -26,4 +26,10 @@ Rails.application.configure do
       "ws://#{ENV['REMOTE_DEV'] == 'true' ? host.split(':').first : 'localhost'}:4000"
     end
   end
+
+  unless Rails.env.test?
+    config.hosts << host if host.present?
+    config.hosts << web_host if web_host.present?
+    config.hosts.concat(alternate_domains) if alternate_domains.present?
+  end
 end
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 4d5b8f6ef..a5eed5db2 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -53,11 +53,13 @@ Rails.application.config.content_security_policy_nonce_generator = -> request {
 
 Rails.application.config.content_security_policy_nonce_directives = %w(style-src)
 
-PgHero::HomeController.content_security_policy do |p|
-  p.script_src :self, :unsafe_inline, assets_host
-  p.style_src  :self, :unsafe_inline, assets_host
-end
+Rails.application.reloader.to_prepare do
+  PgHero::HomeController.content_security_policy do |p|
+    p.script_src :self, :unsafe_inline, assets_host
+    p.style_src  :self, :unsafe_inline, assets_host
+  end
 
-PgHero::HomeController.after_action do
-  request.content_security_policy_nonce_generator = nil
+  PgHero::HomeController.after_action do
+    request.content_security_policy_nonce_generator = nil
+  end
 end
diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb
index 63cff7c59..f78db8653 100644
--- a/config/initializers/doorkeeper.rb
+++ b/config/initializers/doorkeeper.rb
@@ -52,6 +52,11 @@ Doorkeeper.configure do
   # Issue access tokens with refresh token (disabled by default)
   # use_refresh_token
 
+  # Forbids creating/updating applications with arbitrary scopes that are
+  # not in configuration, i.e. `default_scopes` or `optional_scopes`.
+  # (Disabled by default)
+  enforce_configured_scopes
+
   # Provide support for an owner to be assigned to each registered application (disabled by default)
   # Optional parameter :confirmation => true (default false) if you want to enforce ownership of
   # a registered application
diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb
index 9ad7fd814..e2a045647 100644
--- a/config/initializers/paperclip.rb
+++ b/config/initializers/paperclip.rb
@@ -112,7 +112,9 @@ else
   )
 end
 
-Paperclip.options[:content_type_mappings] = { csv: Import::FILE_TYPES }
+Rails.application.reloader.to_prepare do
+  Paperclip.options[:content_type_mappings] = { csv: Import::FILE_TYPES }
+end
 
 # In some places in the code, we rescue this exception, but we don't always
 # load the S3 library, so it may be an undefined constant:
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index e5d1be4c6..3d9bf96fd 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -1,7 +1,6 @@
 # Be sure to restart your server when you modify this file.
 
-Rails.application.config.session_store :cookie_store, {
+Rails.application.config.session_store :cookie_store,
   key: '_mastodon_session',
   secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'),
-  same_site: :lax,
-}
+  same_site: :lax
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index fc85a3913..219554df4 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -1,14 +1,7 @@
 # frozen_string_literal: true
 
-namespace    = ENV.fetch('REDIS_NAMESPACE') { nil }
-redis_params = { url: ENV['REDIS_URL'], driver: :hiredis }
-
-if namespace
-  redis_params[:namespace] = namespace
-end
-
 Sidekiq.configure_server do |config|
-  config.redis = redis_params
+  config.redis = REDIS_SIDEKIQ_PARAMS
 
   config.server_middleware do |chain|
     chain.add SidekiqErrorHandler
@@ -26,7 +19,7 @@ Sidekiq.configure_server do |config|
 end
 
 Sidekiq.configure_client do |config|
-  config.redis = redis_params
+  config.redis = REDIS_SIDEKIQ_PARAMS
 
   config.client_middleware do |chain|
     chain.add SidekiqUniqueJobs::Middleware::Client
diff --git a/config/initializers/suppress_csrf_warnings.rb b/config/initializers/suppress_csrf_warnings.rb
index 410ab585b..b86adc6f1 100644
--- a/config/initializers/suppress_csrf_warnings.rb
+++ b/config/initializers/suppress_csrf_warnings.rb
@@ -1,3 +1,5 @@
 # frozen_string_literal: true
 
-ActionController::Base.log_warning_on_csrf_failure = false
+Rails.application.reloader.to_prepare do
+  ActionController::Base.log_warning_on_csrf_failure = false
+end
diff --git a/config/locales/activerecord.af.yml b/config/locales/activerecord.af.yml
new file mode 100644
index 000000000..252f9fd5a
--- /dev/null
+++ b/config/locales/activerecord.af.yml
@@ -0,0 +1 @@
+af:
diff --git a/config/locales/activerecord.ar.yml b/config/locales/activerecord.ar.yml
index 2b39ee156..3f89ea6fa 100644
--- a/config/locales/activerecord.ar.yml
+++ b/config/locales/activerecord.ar.yml
@@ -5,13 +5,28 @@ ar:
       poll:
         expires_at: آخر أجل
         options: الخيارات
+      user:
+        agreement: اتفاقية الخدمة
+        email: عنوان البريد الإلكتروني
+        locale: محلي
+        password: كلمة المرور
+      user/account:
+        username: اسم المستخدم
+      user/invite_request:
+        text: السبب
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: فقط حروف و أرقام و سطور سفلية
+              invalid: يجب فقط أن يحتوي على حروف، وأرقام، وخطوط سفلية
+              reserved: محجوز
         status:
           attributes:
             reblog:
               taken: المنشور موجود مِن قبل
+        user:
+          attributes:
+            email:
+              blocked: يستخدم مزوّد بريد إلكتروني غير مسموح به
+              unreachable: يبدو أنه لا وجود
diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml
index a1f60b45a..601d6dcd9 100644
--- a/config/locales/activerecord.bg.yml
+++ b/config/locales/activerecord.bg.yml
@@ -5,3 +5,24 @@ bg:
       poll:
         expires_at: Краен срок
         options: Избори
+      user:
+        agreement: Споразумение за обслужване
+        email: Имейл адрес
+        locale: Локално
+        password: Парола
+      user/account:
+        username: Потребителско име
+      user/invite_request:
+        text: Причина
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: само букви, цифри и долни черти
+              reserved: е запазено
+        user:
+          attributes:
+            email:
+              blocked: използва се непозволен имейл доставчик
+              unreachable: изглежда, че не съществува
diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml
index 67dd9a094..e74146645 100644
--- a/config/locales/activerecord.ca.yml
+++ b/config/locales/activerecord.ca.yml
@@ -5,13 +5,28 @@ ca:
       poll:
         expires_at: Data límit
         options: Opcions
+      user:
+        agreement: Acord de servei
+        email: Adreça de correu electrònic
+        locale: Idioma
+        password: Contrasenya
+      user/account:
+        username: Nom d'usuari
+      user/invite_request:
+        text: Motiu
     errors:
       models:
         account:
           attributes:
             username:
               invalid: només lletres, números i subratllats
+              reserved: està reservat
         status:
           attributes:
             reblog:
               taken: del tut ja existeix
+        user:
+          attributes:
+            email:
+              blocked: utilitza un proveïdor de correu electrònic no autoritzat
+              unreachable: sembla que no existeix
diff --git a/config/locales/activerecord.co.yml b/config/locales/activerecord.co.yml
index 0a9a936dd..6bd3d4976 100644
--- a/config/locales/activerecord.co.yml
+++ b/config/locales/activerecord.co.yml
@@ -5,13 +5,28 @@ co:
       poll:
         expires_at: Fine
         options: Scelte
+      user:
+        agreement: Accordu di serviziu
+        email: Indirizzu e-mail
+        locale: Lingua
+        password: Chjave d’accessu
+      user/account:
+        username: Cugnome
+      user/invite_request:
+        text: Ragione
     errors:
       models:
         account:
           attributes:
             username:
               invalid: solu lettere, numeri è liniette basse
+              reserved: hè riservatu
         status:
           attributes:
             reblog:
               taken: di u statutu esista digià
+        user:
+          attributes:
+            email:
+              blocked: usa un purghjidore d'e-mail pruibitu
+              unreachable: ùn sembra micca esiste
diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml
index 57240a19e..580cabbfc 100644
--- a/config/locales/activerecord.cs.yml
+++ b/config/locales/activerecord.cs.yml
@@ -5,13 +5,28 @@ cs:
       poll:
         expires_at: Uzávěrka
         options: Volby
+      user:
+        agreement: Souhlas s podmínkami
+        email: E-mailová adresa
+        locale: Lokalizace
+        password: Heslo
+      user/account:
+        username: Uživatel
+      user/invite_request:
+        text: Zdůvodnění
     errors:
       models:
         account:
           attributes:
             username:
               invalid: pouze písmena, číslice a podtržítka
+              reserved: je vyhrazeno
         status:
           attributes:
             reblog:
               taken: příspěvku již existuje
+        user:
+          attributes:
+            email:
+              blocked: používá zakázanou e-mailovou službu
+              unreachable: pravděpodobně neexistuje
diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml
index e7367a4af..513cb2a8f 100644
--- a/config/locales/activerecord.da.yml
+++ b/config/locales/activerecord.da.yml
@@ -3,15 +3,30 @@ da:
   activerecord:
     attributes:
       poll:
-        expires_at: Deadline
+        expires_at: Tidsfrist
         options: Valgmuligheder
+      user:
+        agreement: Tjenesteaftale
+        email: E-mailadresse
+        locale: Landestandard
+        password: Adgangskode
+      user/account:
+        username: Brugernavn
+      user/invite_request:
+        text: Årsag
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: kun tal, bogstaver og understreger
+              invalid: må kun indeholde cifre, bogstaver og understreger
+              reserved: er reserveret
         status:
           attributes:
             reblog:
               taken: af allerede eksisterende status
+        user:
+          attributes:
+            email:
+              blocked: bruger en ikke-tilladt e-mailudbyder
+              unreachable: synes ikke at findes
diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml
index 46a48d234..31c410fa3 100644
--- a/config/locales/activerecord.de.yml
+++ b/config/locales/activerecord.de.yml
@@ -5,13 +5,28 @@ de:
       poll:
         expires_at: Frist
         options: Wahlmöglichkeiten
+      user:
+        agreement: Service-Vereinbarung
+        email: E-Mail-Adresse
+        locale: Sprache
+        password: Passwort
+      user/account:
+        username: Benutzername
+      user/invite_request:
+        text: Grund
     errors:
       models:
         account:
           attributes:
             username:
               invalid: nur Buchstaben, Ziffern und Unterstriche
+              reserved: ist reserviert
         status:
           attributes:
             reblog:
               taken: des Beitrags existiert schon
+        user:
+          attributes:
+            email:
+              blocked: verwendet einen nicht erlaubten E-Mail-Anbieter
+              unreachable: scheint nicht zu existieren
diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml
index 36e5f508d..67ce1758e 100644
--- a/config/locales/activerecord.el.yml
+++ b/config/locales/activerecord.el.yml
@@ -5,13 +5,28 @@ el:
       poll:
         expires_at: Προθεσμία
         options: Επιλογές
+      user:
+        agreement: Σύμβαση παροχής υπηρεσιών
+        email: Διεύθυνση email
+        locale: Γλώσσα
+        password: Συνθηματικό
+      user/account:
+        username: Όνομα χρήστη
+      user/invite_request:
+        text: Αιτιολογία
     errors:
       models:
         account:
           attributes:
             username:
               invalid: μόνο γράμματα, αριθμοί και κάτω παύλες
+              reserved: είναι δεσμευμένο
         status:
           attributes:
             reblog:
               taken: της κατάστασης ήδη υπάρχει
+        user:
+          attributes:
+            email:
+              blocked: χρησιμοποιεί μη επιτρεπόμενο πάροχο e-mail
+              unreachable: δεν φαίνεται να υπάρχει
diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml
index f8a3cf18b..ca48e0fe0 100644
--- a/config/locales/activerecord.eo.yml
+++ b/config/locales/activerecord.eo.yml
@@ -5,13 +5,28 @@ eo:
       poll:
         expires_at: Limdato
         options: Elektoj
+      user:
+        agreement: Servo-interkonsento
+        email: Retadreso
+        locale: Lokaĵaro
+        password: Pasvorto
+      user/account:
+        username: Uzantnomo
+      user/invite_request:
+        text: Kialo
     errors:
       models:
         account:
           attributes:
             username:
               invalid: nur leteroj, ciferoj kaj substrekoj
+              reserved: rezervita
         status:
           attributes:
             reblog:
               taken: de statuso jam ekzistas
+        user:
+          attributes:
+            email:
+              blocked: uzas nepermesitan retpoŝtan provizanton
+              unreachable: ne ŝajnas ekzisti
diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml
index 4cdd90278..4cef76e4a 100644
--- a/config/locales/activerecord.es-AR.yml
+++ b/config/locales/activerecord.es-AR.yml
@@ -5,13 +5,28 @@ es-AR:
       poll:
         expires_at: Fecha límite
         options: Opciones
+      user:
+        agreement: Acuerdo del servicio
+        email: Dirección de correo electrónico
+        locale: Localidad
+        password: Contraseña
+      user/account:
+        username: Nombre de usuario
+      user/invite_request:
+        text: Motivo
     errors:
       models:
         account:
           attributes:
             username:
               invalid: sólo letras, números y subguiones ("_")
+              reserved: está reservado
         status:
           attributes:
             reblog:
               taken: del estado ya existe
+        user:
+          attributes:
+            email:
+              blocked: usa un proveedor de correo electrónico no permitido
+              unreachable: no parece existir
diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml
new file mode 100644
index 000000000..9326e89d1
--- /dev/null
+++ b/config/locales/activerecord.es-MX.yml
@@ -0,0 +1,24 @@
+---
+es-MX:
+  activerecord:
+    attributes:
+      user:
+        agreement: Acuerdo de Servicio
+        email: Dirección de correo electrónico
+        locale: Idioma
+        password: Contraseña
+      user/account:
+        username: Nombre de usuario
+      user/invite_request:
+        text: Razón
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              reserved: está reservado
+        user:
+          attributes:
+            email:
+              blocked: utiliza un proveedor de correo no autorizado
+              unreachable: no parece existir
diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml
index 2fbf0ffd7..e05c9c1e2 100644
--- a/config/locales/activerecord.es.yml
+++ b/config/locales/activerecord.es.yml
@@ -1 +1,24 @@
---- {}
+---
+es:
+  activerecord:
+    attributes:
+      user:
+        agreement: Acuerdo de Servicio
+        email: Dirección de correo electrónico
+        locale: Idioma
+        password: Contraseña
+      user/account:
+        username: Nombre de usuario
+      user/invite_request:
+        text: Razón
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              reserved: está reservado
+        user:
+          attributes:
+            email:
+              blocked: utiliza un proveedor de correo no autorizado
+              unreachable: no parece existir
diff --git a/config/locales/activerecord.eu.yml b/config/locales/activerecord.eu.yml
index 235738f22..83b01f91d 100644
--- a/config/locales/activerecord.eu.yml
+++ b/config/locales/activerecord.eu.yml
@@ -5,13 +5,28 @@ eu:
       poll:
         expires_at: Epemuga
         options: Aukerak
+      user:
+        agreement: Zerbitzu-hitzarmena
+        email: E-posta helbidea
+        locale: Eskualdeko ezarpenak
+        password: Pasahitza
+      user/account:
+        username: Erabiltzaile-izena
+      user/invite_request:
+        text: Arrazoia
     errors:
       models:
         account:
           attributes:
             username:
               invalid: letrak, zenbakiak eta gidoi baxuak besterik ez
+              reserved: erreserbatuta dago
         status:
           attributes:
             reblog:
               taken: mezu honentzat bazegoen aurretik
+        user:
+          attributes:
+            email:
+              blocked: onartu gabeko e-posta hornitzaile bat erabiltzen du
+              unreachable: dirudienez ez da existitzen
diff --git a/config/locales/activerecord.fa.yml b/config/locales/activerecord.fa.yml
index 7fdfa38d1..291958d01 100644
--- a/config/locales/activerecord.fa.yml
+++ b/config/locales/activerecord.fa.yml
@@ -5,13 +5,28 @@ fa:
       poll:
         expires_at: مهلت
         options: گزینه‌ها
+      user:
+        agreement: توافق‌نامهٔ خدمت
+        email: نشانی رایانامه
+        locale: موقعیت
+        password: گذرواژه
+      user/account:
+        username: نام کاربری
+      user/invite_request:
+        text: دلیل
     errors:
       models:
         account:
           attributes:
             username:
               invalid: تنها حروف، اعداد، و زیرخط
+              reserved: محفوظ است
         status:
           attributes:
             reblog:
               taken: تا از وضعیت‌ها هنوز وجود دارند
+        user:
+          attributes:
+            email:
+              blocked: از فراهم‌کنندهٔ رایانامهٔ غیرمجازی استفاده می‌کند
+              unreachable: به نظر نمی‌رسد وجود داشته باشد
diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml
index 305042c42..efd8b5e75 100644
--- a/config/locales/activerecord.fi.yml
+++ b/config/locales/activerecord.fi.yml
@@ -5,9 +5,28 @@ fi:
       poll:
         expires_at: Määräaika
         options: Vaihtoehdot
+      user:
+        agreement: Palvelusopimus
+        email: Sähköpostiosoite
+        locale: Paikallinen
+        password: Salasana
+      user/account:
+        username: Käyttäjätunnus
+      user/invite_request:
+        text: Syy
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: vain kirjaimia, numeroita ja alaviivoja
+              invalid: saa sisältää vain kirjaimia, numeroita ja alaviivoja
+              reserved: on varattu
+        status:
+          attributes:
+            reblog:
+              taken: tila on jo olemassa
+        user:
+          attributes:
+            email:
+              blocked: käyttää kiellettyä sähköpostipalvelun tarjoajaa
+              unreachable: ei näytä olevan olemassa
diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml
index e26e02592..47cd8765d 100644
--- a/config/locales/activerecord.fr.yml
+++ b/config/locales/activerecord.fr.yml
@@ -5,13 +5,28 @@ fr:
       poll:
         expires_at: Date butoir
         options: Choix
+      user:
+        agreement: Contrat de service
+        email: Adresse courriel
+        locale: Langue
+        password: Mot de passe
+      user/account:
+        username: Nom d’utilisateur·ice
+      user/invite_request:
+        text: Raison
     errors:
       models:
         account:
           attributes:
             username:
               invalid: seulement des lettres, des nombres et des tirets bas
+              reserved: est réservé
         status:
           attributes:
             reblog:
               taken: du statut existe déjà
+        user:
+          attributes:
+            email:
+              blocked: utilise un fournisseur de courriel interdit
+              unreachable: ne semble pas exister
diff --git a/config/locales/activerecord.gd.yml b/config/locales/activerecord.gd.yml
new file mode 100644
index 000000000..eb09e8866
--- /dev/null
+++ b/config/locales/activerecord.gd.yml
@@ -0,0 +1,32 @@
+---
+gd:
+  activerecord:
+    attributes:
+      poll:
+        expires_at: Thig e gu crìoch
+        options: Roghainnean
+      user:
+        agreement: Aonta na seirbheise
+        email: Seòladh puist-d
+        locale: Sgeama ionadail
+        password: Facal-faire
+      user/account:
+        username: Ainm-cleachdaiche
+      user/invite_request:
+        text: Adhbhar
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: "– chan fhaod ach litrichean gun sràcan, àireamhan ’s fo-loidhnichean a bhith ’na bhroinn"
+              reserved: "– tha e glèidhte"
+        status:
+          attributes:
+            reblog:
+              taken: "– tha seo aig an staid mu thràth"
+        user:
+          attributes:
+            email:
+              blocked: "– tha seo a’ chleachdadh solaraiche puist-d nach eil ceadaichte"
+              unreachable: "– tha coltas nach eil seo ann"
diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml
index 78b5e0f8d..cbdd801e5 100644
--- a/config/locales/activerecord.gl.yml
+++ b/config/locales/activerecord.gl.yml
@@ -5,13 +5,28 @@ gl:
       poll:
         expires_at: Remata en
         options: Opcións
+      user:
+        agreement: Acordo do Servizo
+        email: Enderezo de email
+        locale: Locale
+        password: Contrasinal
+      user/account:
+        username: Nome de usuaria
+      user/invite_request:
+        text: Razón
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: só letras, números e liñas baixas
+              invalid: só letras, números e trazo baixo
+              reserved: está reservado
         status:
           attributes:
             reblog:
               taken: do estado xa existe
+        user:
+          attributes:
+            email:
+              blocked: utiliza un provedor de email non autorizado
+              unreachable: semella que non existe
diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml
index ca5fbacb4..db2fdb693 100644
--- a/config/locales/activerecord.hu.yml
+++ b/config/locales/activerecord.hu.yml
@@ -5,13 +5,28 @@ hu:
       poll:
         expires_at: Határidő
         options: Lehetőségek
+      user:
+        agreement: Szolgáltatási megállapodás
+        email: E-mail-cím
+        locale: Régió
+        password: Jelszó
+      user/account:
+        username: Felhasználónév
+      user/invite_request:
+        text: Indoklás
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: csak betűk, számok vagy alávonás
+              invalid: csak betűket, számokat vagy alávonást tartalmazhat
+              reserved: fenntartott
         status:
           attributes:
             reblog:
               taken: már létezik ehhez a bejegyzéshez
+        user:
+          attributes:
+            email:
+              blocked: nem engedélyezett e-mail szolgáltatót használ
+              unreachable: úgy látszik, nem létezik
diff --git a/config/locales/activerecord.hy.yml b/config/locales/activerecord.hy.yml
index 0da0b3d5e..237866b96 100644
--- a/config/locales/activerecord.hy.yml
+++ b/config/locales/activerecord.hy.yml
@@ -5,6 +5,9 @@ hy:
       poll:
         expires_at: Վերջնաժամկետ
         options: Տարբերակներ
+      user:
+        agreement: Ծառայության համաձայնագիր
+        email: Էլ․ հասցե
     errors:
       models:
         account:
diff --git a/config/locales/activerecord.id.yml b/config/locales/activerecord.id.yml
index 673d002e3..5510ccc8d 100644
--- a/config/locales/activerecord.id.yml
+++ b/config/locales/activerecord.id.yml
@@ -5,13 +5,28 @@ id:
       poll:
         expires_at: Tenggat waktu
         options: Pilihan
+      user:
+        agreement: Persetujuan layanan
+        email: Alamat email
+        locale: Locale
+        password: Kata sandi
+      user/account:
+        username: Nama pengguna
+      user/invite_request:
+        text: Alasan
     errors:
       models:
         account:
           attributes:
             username:
               invalid: hanya boleh berisi huruf, angka, dan underscore
+              reserved: sudah dipesan
         status:
           attributes:
             reblog:
               taken: status sudah ada
+        user:
+          attributes:
+            email:
+              blocked: menggunakan layanan email yang tidak diizinkan
+              unreachable: sepertinya tidak ada
diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml
index b5d656130..cdd803318 100644
--- a/config/locales/activerecord.is.yml
+++ b/config/locales/activerecord.is.yml
@@ -5,13 +5,28 @@ is:
       poll:
         expires_at: Lokadagur
         options: Valkostir
+      user:
+        agreement: Þjónustuskilmálar
+        email: Tölvupóstfang
+        locale: Staðfærsla
+        password: Lykilorð
+      user/account:
+        username: Notandanafn
+      user/invite_request:
+        text: Ástæða
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: aðeins bókstafir, tölur og undirstrik
+              invalid: má aðeins innihalda bókstafi, tölur og undirstrik
+              reserved: er frátekið
         status:
           attributes:
             reblog:
               taken: af stöðu er þegar fyrirliggjandi
+        user:
+          attributes:
+            email:
+              blocked: notar óleyfilega tölvupóstþjónustu
+              unreachable: virðist ekki vera til
diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml
index 70afdaef1..7e16990b5 100644
--- a/config/locales/activerecord.it.yml
+++ b/config/locales/activerecord.it.yml
@@ -5,13 +5,28 @@ it:
       poll:
         expires_at: Scadenza
         options: Scelte
+      user:
+        agreement: Condizioni di servizio
+        email: Indirizzo email
+        locale: Localizzazione
+        password: Password
+      user/account:
+        username: Nome utente
+      user/invite_request:
+        text: Motivo
     errors:
       models:
         account:
           attributes:
             username:
               invalid: solo lettere, numeri e trattini bassi
+              reserved: è riservato
         status:
           attributes:
             reblog:
               taken: dello stato esiste già
+        user:
+          attributes:
+            email:
+              blocked: utilizza un provider di posta elettronica non autorizzato
+              unreachable: non sembra esistere
diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml
index 8b0eefb12..ad4c1eccf 100644
--- a/config/locales/activerecord.ja.yml
+++ b/config/locales/activerecord.ja.yml
@@ -5,13 +5,28 @@ ja:
       poll:
         expires_at: 期限
         options: 項目
+      user:
+        agreement: サービス契約
+        email: メールアドレス
+        locale: ロケール
+        password: パスワード
+      user/account:
+        username: ユーザー名
+      user/invite_request:
+        text: 理由
     errors:
       models:
         account:
           attributes:
             username:
               invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください
+              reserved: は予約されています
         status:
           attributes:
             reblog:
               taken: は既にブーストされています
+        user:
+          attributes:
+            email:
+              blocked: は禁止されているプロバイダメールを使用します
+              unreachable: 存在しないようです
diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml
index 3c081269a..07f8a39f7 100644
--- a/config/locales/activerecord.ko.yml
+++ b/config/locales/activerecord.ko.yml
@@ -5,13 +5,28 @@ ko:
       poll:
         expires_at: 마감 기한
         options: 선택
+      user:
+        agreement: 이용약관
+        email: 이메일 주소
+        locale: 언어
+        password: 암호
+      user/account:
+        username: 사용자명
+      user/invite_request:
+        text: 이유
     errors:
       models:
         account:
           attributes:
             username:
               invalid: 영문자, 숫자, _만 사용 가능
+              reserved: 이미 예약되어 있습니다
         status:
           attributes:
             reblog:
               taken: 이미 게시물이 존재합니다
+        user:
+          attributes:
+            email:
+              blocked: 허용되지 않은 이메일 제공자입니다
+              unreachable: 존재하지 않는 것 같습니다
diff --git a/config/locales/activerecord.kw.yml b/config/locales/activerecord.kw.yml
new file mode 100644
index 000000000..b2cfc12ff
--- /dev/null
+++ b/config/locales/activerecord.kw.yml
@@ -0,0 +1 @@
+kw:
diff --git a/config/locales/activerecord.ml.yml b/config/locales/activerecord.ml.yml
index fc30a81fc..8b20ee34b 100644
--- a/config/locales/activerecord.ml.yml
+++ b/config/locales/activerecord.ml.yml
@@ -5,13 +5,28 @@ ml:
       poll:
         expires_at: സമയപരിധി
         options: ചോയ്‌സുകൾ
+      user:
+        agreement: സേവന ഉടമ്പടി
+        email: ഇ-മെയിൽ വിലാസം
+        locale: ഭാഷ
+        password: രഹസ്യവാചകം
+      user/account:
+        username: ഉപയോക്തൃനാമം
+      user/invite_request:
+        text: കാരണം
     errors:
       models:
         account:
           attributes:
             username:
               invalid: അക്ഷരങ്ങളും, അക്കങ്ങളും, പിന്നെ അടിവരയും മാത്രം
+              reserved: കരുതിവച്ചു
         status:
           attributes:
             reblog:
               taken: സ്റ്റാറ്റസ് ഇതിനകം നിലവിലുണ്ട്
+        user:
+          attributes:
+            email:
+              blocked: അനുവദനീയമല്ലാത്ത ഇ-മെയിൽ ദാതാവിനെ ഉപയോഗിക്കുന്നു
+              unreachable: നിലവിലില്ല
diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml
index a9bcb33fa..6bbdc5b40 100644
--- a/config/locales/activerecord.nl.yml
+++ b/config/locales/activerecord.nl.yml
@@ -5,13 +5,28 @@ nl:
       poll:
         expires_at: Deadline
         options: Keuzes
+      user:
+        agreement: Servicevoorwaarden
+        email: E-mailadres
+        locale: Taal
+        password: Wachtwoord
+      user/account:
+        username: Gebruikersnaam
+      user/invite_request:
+        text: Reden
     errors:
       models:
         account:
           attributes:
             username:
               invalid: alleen letters, nummers en underscores
+              reserved: gereserveerd
         status:
           attributes:
             reblog:
               taken: van toot bestaat al
+        user:
+          attributes:
+            email:
+              blocked: gebruikt een niet toegestane e-mailprovider
+              unreachable: schijnt niet te bestaan
diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml
index 31f1682bd..4f6a348dd 100644
--- a/config/locales/activerecord.nn.yml
+++ b/config/locales/activerecord.nn.yml
@@ -5,12 +5,20 @@ nn:
       poll:
         expires_at: Frist
         options: Val
+      user:
+        email: E-mail address
+        password: Passord
+      user/account:
+        username: Brukernavn
+      user/invite_request:
+        text: Grunn
     errors:
       models:
         account:
           attributes:
             username:
               invalid: bare bokstaver, tall og understreker
+              reserved: er reservert
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.no.yml b/config/locales/activerecord.no.yml
index 553bd65bf..aea66b101 100644
--- a/config/locales/activerecord.no.yml
+++ b/config/locales/activerecord.no.yml
@@ -5,12 +5,20 @@
       poll:
         expires_at: Tidsfrist
         options: Valg
+      user:
+        email: E-mail address
+        password: Passord
+      user/account:
+        username: Brukernavn
+      user/invite_request:
+        text: Grunn
     errors:
       models:
         account:
           attributes:
             username:
               invalid: bare bokstaver, tall og understreker
+              reserved: er reservert
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.oc.yml b/config/locales/activerecord.oc.yml
index 1157d9769..8a7b70d44 100644
--- a/config/locales/activerecord.oc.yml
+++ b/config/locales/activerecord.oc.yml
@@ -5,13 +5,28 @@ oc:
       poll:
         expires_at: Data limita
         options: Opcions
+      user:
+        agreement: Acòrd de servici
+        email: Corrièl
+        locale: Lenga
+        password: Senhal
+      user/account:
+        username: Nom d’utilizaire
+      user/invite_request:
+        text: Motiu
     errors:
       models:
         account:
           attributes:
             username:
               invalid: solament letras, nombres e tirets basses
+              reserved: es reservat
         status:
           attributes:
             reblog:
               taken: de l’estatut existís ja
+        user:
+          attributes:
+            email:
+              blocked: utilizar un provesidor d’email pas autorizat
+              unreachable: semblar pas existir
diff --git a/config/locales/activerecord.pa.yml b/config/locales/activerecord.pa.yml
new file mode 100644
index 000000000..bb8a6c834
--- /dev/null
+++ b/config/locales/activerecord.pa.yml
@@ -0,0 +1 @@
+pa:
diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml
index f10420ec7..c7b1e7fab 100644
--- a/config/locales/activerecord.pl.yml
+++ b/config/locales/activerecord.pl.yml
@@ -5,13 +5,28 @@ pl:
       poll:
         expires_at: Ostateczny termin
         options: Opcje
+      user:
+        agreement: Umowa o świadczenie usług
+        email: Adres e-mail
+        locale: Język
+        password: Hasło
+      user/account:
+        username: Nazwa użytkownika
+      user/invite_request:
+        text: Powód
     errors:
       models:
         account:
           attributes:
             username:
               invalid: może składać się tylko z liter, cyfr i podkreślników
+              reserved: jest zarezerwowana
         status:
           attributes:
             reblog:
               taken: status już istnieje
+        user:
+          attributes:
+            email:
+              blocked: używa niedozwolonego dostawcy poczty elektronicznej
+              unreachable: wydaje się nie istnieć
diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml
index f768f0d4f..a6314cdae 100644
--- a/config/locales/activerecord.pt-BR.yml
+++ b/config/locales/activerecord.pt-BR.yml
@@ -3,15 +3,30 @@ pt-BR:
   activerecord:
     attributes:
       poll:
-        expires_at: Expira em
+        expires_at: Vencimento
         options: Escolhas
+      user:
+        agreement: Termos do Serviço
+        email: Endereço de e-mail
+        locale: Local
+        password: Senha
+      user/account:
+        username: Nome de usuário
+      user/invite_request:
+        text: Motivos
     errors:
       models:
         account:
           attributes:
             username:
               invalid: apenas letras, números e underlines ( "_" )
+              reserved: está reservado
         status:
           attributes:
             reblog:
               taken: do status já existe
+        user:
+          attributes:
+            email:
+              blocked: utiliza um provedor de e-mail não permitido
+              unreachable: parece não existir
diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml
index 884b79fa1..17c199ea8 100644
--- a/config/locales/activerecord.pt-PT.yml
+++ b/config/locales/activerecord.pt-PT.yml
@@ -5,13 +5,28 @@ pt-PT:
       poll:
         expires_at: Expira em
         options: Escolhas
+      user:
+        agreement: Acordo de serviço
+        email: Endereço de e-mail
+        locale: Região
+        password: Palavra-passe
+      user/account:
+        username: Nome de utilizador
+      user/invite_request:
+        text: Motivo
     errors:
       models:
         account:
           attributes:
             username:
               invalid: apenas letras, números e underscores
+              reserved: está reservado
         status:
           attributes:
             reblog:
               taken: do status já existe
+        user:
+          attributes:
+            email:
+              blocked: utiliza um provedor de e-mail não permitido
+              unreachable: não parece existir
diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml
index bff0d9584..2f9210519 100644
--- a/config/locales/activerecord.ru.yml
+++ b/config/locales/activerecord.ru.yml
@@ -5,13 +5,28 @@ ru:
       poll:
         expires_at: Крайний срок
         options: Варианты
+      user:
+        agreement: Соглашение с условиями сервиса
+        email: Адрес эл. почты
+        locale: Язык
+        password: Пароль
+      user/account:
+        username: Имя пользователя
+      user/invite_request:
+        text: Причина
     errors:
       models:
         account:
           attributes:
             username:
               invalid: только буквы, цифры и символ подчёркивания
+              reserved: зарезервировано
         status:
           attributes:
             reblog:
               taken: поста уже существует
+        user:
+          attributes:
+            email:
+              blocked: использует запрещённого провайдера эл. почты
+              unreachable: не существует
diff --git a/config/locales/activerecord.sc.yml b/config/locales/activerecord.sc.yml
index cae24d30c..aadd00287 100644
--- a/config/locales/activerecord.sc.yml
+++ b/config/locales/activerecord.sc.yml
@@ -5,13 +5,28 @@ sc:
       poll:
         expires_at: Iscadèntzia
         options: Seberos
+      user:
+        agreement: Acordu de servìtziu
+        email: Indiritzu de posta eletrònica
+        locale: Idioma
+        password: Crae
+      user/account:
+        username: Nòmine utente
+      user/invite_request:
+        text: Resone
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: petzi lìteras, nùmeros e tratigheddos bassos
+              invalid: isceti lìteras, nùmeros e tratigheddos bassos
+              reserved: est prenotadu
         status:
           attributes:
             reblog:
               taken: de s'istadu esistet giai
+        user:
+          attributes:
+            email:
+              blocked: impreat unu frunidore de posta eletrònica proibidu
+              unreachable: paret chi no esistit
diff --git a/config/locales/activerecord.si.yml b/config/locales/activerecord.si.yml
new file mode 100644
index 000000000..f836cfba7
--- /dev/null
+++ b/config/locales/activerecord.si.yml
@@ -0,0 +1,13 @@
+---
+si:
+  activerecord:
+    attributes:
+      poll:
+        expires_at: නියමිත කාලය
+        options: තේරීම්
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: අකුරු, අංක සහ යට-ඉරි පමණි
diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml
index 29a11063e..920b73e7a 100644
--- a/config/locales/activerecord.sq.yml
+++ b/config/locales/activerecord.sq.yml
@@ -5,13 +5,28 @@ sq:
       poll:
         expires_at: Afat
         options: Mundësi
+      user:
+        agreement: Marrëveshje shërbimi
+        email: Adresë email
+        locale: Gjuhë
+        password: Fjalëkalim
+      user/account:
+        username: Emër përdoruesi
+      user/invite_request:
+        text: Arsye
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: vetëm shkronja, numra dhe nënvija
+              invalid: duhet të përmbajë vetëm shkronja, numra dhe nënvija
+              reserved: është i rezervuar
         status:
           attributes:
             reblog:
               taken: e gjendjes ekziston tashmë
+        user:
+          attributes:
+            email:
+              blocked: përdor një shërbim email të palejuar
+              unreachable: s’duket se ekziston
diff --git a/config/locales/activerecord.sr.yml b/config/locales/activerecord.sr.yml
index b4d929634..d974d0e7b 100644
--- a/config/locales/activerecord.sr.yml
+++ b/config/locales/activerecord.sr.yml
@@ -1,6 +1,10 @@
 ---
 sr:
   activerecord:
+    attributes:
+      poll:
+        expires_at: Крајњи рок
+        options: Избори
     errors:
       models:
         account:
diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml
index 67c160821..7c217efca 100644
--- a/config/locales/activerecord.sv.yml
+++ b/config/locales/activerecord.sv.yml
@@ -5,13 +5,28 @@ sv:
       poll:
         expires_at: Tidsgräns
         options: Val
+      user:
+        agreement: Serviceavtal
+        email: E-postadress
+        locale: Lokal
+        password: Lösenord
+      user/account:
+        username: Användarnamn
+      user/invite_request:
+        text: Anledning
     errors:
       models:
         account:
           attributes:
             username:
               invalid: endast bokstäver, siffror och understrykning
+              reserved: är reserverat
         status:
           attributes:
             reblog:
               taken: av status finns redan
+        user:
+          attributes:
+            email:
+              blocked: använder en icke tillåten e-postleverantör
+              unreachable: verkar inte existera
diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml
index 4dea79b88..5b693e2af 100644
--- a/config/locales/activerecord.th.yml
+++ b/config/locales/activerecord.th.yml
@@ -5,13 +5,25 @@ th:
       poll:
         expires_at: กำหนดเวลาสิ้นสุด
         options: ตัวเลือก
+      user:
+        agreement: ข้อตกลงการให้บริการ
+        email: ที่อยู่อีเมล
+        password: รหัสผ่าน
+      user/account:
+        username: ชื่อผู้ใช้
+      user/invite_request:
+        text: เหตุผล
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: ตัวอักษร, ตัวเลข และขีดล่างเท่านั้น
+              invalid: ต้องมีเฉพาะตัวอักษร, ตัวเลข และขีดล่างเท่านั้น
         status:
           attributes:
             reblog:
               taken: ของสถานะมีอยู่แล้ว
+        user:
+          attributes:
+            email:
+              blocked: ใช้ผู้ให้บริการอีเมลที่ไม่ได้รับอนุญาต
diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml
index 336c83e7b..890f065b1 100644
--- a/config/locales/activerecord.tr.yml
+++ b/config/locales/activerecord.tr.yml
@@ -5,13 +5,28 @@ tr:
       poll:
         expires_at: Bitiş zamanı
         options: Seçenekler
+      user:
+        agreement: Hizmet Sözleşmesi
+        email: E-posta adresi
+        locale: Bölge ayarı
+        password: Parola
+      user/account:
+        username: Kullanıcı adı
+      user/invite_request:
+        text: Gerekçe
     errors:
       models:
         account:
           attributes:
             username:
               invalid: sadece harfler, sayılar ve alt çizgiler
+              reserved: kullanılamaz
         status:
           attributes:
             reblog:
               taken: durum zaten var
+        user:
+          attributes:
+            email:
+              blocked: izin verilmeyen bir e-posta sağlayıcı kullanıyor
+              unreachable: mevcut gözükmüyor
diff --git a/config/locales/activerecord.tt.yml b/config/locales/activerecord.tt.yml
index 5eab4abff..a689958c4 100644
--- a/config/locales/activerecord.tt.yml
+++ b/config/locales/activerecord.tt.yml
@@ -1 +1,10 @@
+---
 tt:
+  activerecord:
+    attributes:
+      user:
+        email: Почта адресы
+        locale: Тел
+        password: Парол
+      user/account:
+        username: Кулланучы исеме
diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml
index ffbf59346..38d4771b3 100644
--- a/config/locales/activerecord.uk.yml
+++ b/config/locales/activerecord.uk.yml
@@ -5,13 +5,28 @@ uk:
       poll:
         expires_at: Кінцевий термін
         options: Варіанти вибору
+      user:
+        agreement: Угода про надання послуг
+        email: E-mail адреса
+        locale: Локаль
+        password: Пароль
+      user/account:
+        username: Ім'я користувача
+      user/invite_request:
+        text: Причина
     errors:
       models:
         account:
           attributes:
             username:
               invalid: тільки літери, цифри та підкреслення
+              reserved: зарезервовано
         status:
           attributes:
             reblog:
               taken: статусу вже існує
+        user:
+          attributes:
+            email:
+              blocked: використовує не дозволенного постачальника електронної пошти
+              unreachable: не існує
diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml
index f3c467fa1..c0e989563 100644
--- a/config/locales/activerecord.vi.yml
+++ b/config/locales/activerecord.vi.yml
@@ -5,13 +5,28 @@ vi:
       poll:
         expires_at: Hạn chót
         options: Lựa chọn
+      user:
+        agreement: Đồng ý quy tắc
+        email: Địa chỉ email
+        locale: Quốc gia
+        password: Mật khẩu
+      user/account:
+        username: Tên người dùng
+      user/invite_request:
+        text: Lý do
     errors:
       models:
         account:
           attributes:
             username:
               invalid: chỉ chấp nhận ký tự, số và dấu gạch dưới
+              reserved: bị cấm sử dụng
         status:
           attributes:
             reblog:
               taken: của tút đã tồn tại
+        user:
+          attributes:
+            email:
+              blocked: sử dụng dịch vụ email bị cấm
+              unreachable: không tồn tại
diff --git a/config/locales/activerecord.zgh.yml b/config/locales/activerecord.zgh.yml
index 827155466..40ea104bb 100644
--- a/config/locales/activerecord.zgh.yml
+++ b/config/locales/activerecord.zgh.yml
@@ -1 +1,18 @@
+---
 zgh:
+  activerecord:
+    attributes:
+      poll:
+        options: ⵜⵉⴷⵖⴰⵔⵉⵏ
+      user:
+        email: ⵜⴰⵏⵙⴰ ⵉⵎⴰⵢⵍ
+        locale: ⴰⴷⵖⴰⵔⴰⵏ
+        password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ
+      user/account:
+        username: ⵉⵙⵎ ⵏ ⵓⵏⵙⵙⵎⵔⵙ
+    errors:
+      models:
+        user:
+          attributes:
+            email:
+              unreachable: ⴰⵎⵎⴰⵏⵉ ⵉⵙ ⵓⵔ ⵉⵍⵍⵉ
diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml
index 8d2ddfd14..946e81893 100644
--- a/config/locales/activerecord.zh-CN.yml
+++ b/config/locales/activerecord.zh-CN.yml
@@ -5,13 +5,28 @@ zh-CN:
       poll:
         expires_at: 截止时间
         options: 选项
+      user:
+        agreement: 服务协议
+        email: 电子邮箱地址
+        locale: 本地化
+        password: 密码
+      user/account:
+        username: 用户名
+      user/invite_request:
+        text: 理由
     errors:
       models:
         account:
           attributes:
             username:
               invalid: 只能使用字母、数字和下划线
+              reserved: 是保留关键字
         status:
           attributes:
             reblog:
               taken: 已经被转嘟过
+        user:
+          attributes:
+            email:
+              blocked: 使用了被封禁的电子邮件提供商
+              unreachable: 似乎不存在
diff --git a/config/locales/activerecord.zh-HK.yml b/config/locales/activerecord.zh-HK.yml
index 89c3fa02d..1aa9dfebe 100644
--- a/config/locales/activerecord.zh-HK.yml
+++ b/config/locales/activerecord.zh-HK.yml
@@ -5,13 +5,28 @@ zh-HK:
       poll:
         expires_at: 截止時間
         options: 選項
+      user:
+        agreement: 服務合約
+        email: 電郵地址
+        locale: 地區設定
+        password: 密碼
+      user/account:
+        username: 使用者名稱
+      user/invite_request:
+        text: 原因
     errors:
       models:
         account:
           attributes:
             username:
               invalid: 只能使用字母、數字和下劃線
+              reserved: 已被保留
         status:
           attributes:
             reblog:
               taken: 已經被轉推過
+        user:
+          attributes:
+            email:
+              blocked: 使用不被允許的電子郵件供應商
+              unreachable: 似乎不存在
diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml
index 4f938a7f5..2e685868d 100644
--- a/config/locales/activerecord.zh-TW.yml
+++ b/config/locales/activerecord.zh-TW.yml
@@ -5,13 +5,28 @@ zh-TW:
       poll:
         expires_at: 截止時間
         options: 選擇
+      user:
+        agreement: 服務同意書
+        email: 電子信箱位址
+        locale: 地區
+        password: 密碼
+      user/account:
+        username: 使用者名稱
+      user/invite_request:
+        text: 原因
     errors:
       models:
         account:
           attributes:
             username:
               invalid: 只能有字母、數字及底線
+              reserved: 是保留關鍵字
         status:
           attributes:
             reblog:
               taken: 嘟文已經存在
+        user:
+          attributes:
+            email:
+              blocked: 使用不被允許的電子信箱供應商
+              unreachable: 似乎不存在
diff --git a/config/locales/af.yml b/config/locales/af.yml
new file mode 100644
index 000000000..4afb11de5
--- /dev/null
+++ b/config/locales/af.yml
@@ -0,0 +1,12 @@
+---
+af:
+  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.
+    '422': 
+    '429': Too many requests
+    '500': 
+    '503': The page could not be served due to a temporary server failure.
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 44ada75d1..07d7dab3a 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -3,7 +3,7 @@ ar:
   about:
     about_hashtag_html: هذه تبويقات متاحة للجمهور تحتوي على الكلمات الدلالية <strong>#%{hashtag}</strong>. يمكنك التفاعل معها إن كان لديك حساب في أي مكان على الفديفرس.
     about_mastodon_html: 'شبكة التواصل الإجتماعية المستقبَليّة: مِن دون إعلانات ، غير خاضعة لرقابة الشركات ، تصميم أخلاقي ولامركزية! بياناتكم مِلك لكم مع ماستدون!'
-    about_this: عن مثيل الخادوم هذا
+    about_this: عن مثيل الخادم هذا
     active_count_after: نشط
     active_footnote: مستخدم نشيط شهريا (MAU)
     administered_by: 'يُديره:'
@@ -21,8 +21,13 @@ ar:
     federation_hint_html: بواسطة حساب في %{instance} ستتمكن من تتبع أناس في أي خادم ماستدون وأكثر.
     get_apps: جرّب تطبيقا على الموبايل
     hosted_on: ماستدون مُستضاف على %{domain}
+    instance_actor_flash: |
+      هذا الحساب هو ممثل افتراضي يستخدم لتمثيل الخادم نفسه وليس أي مستخدم فردي.
+      يستخدم لأغراض الاتحاد ولا ينبغي حظره إلا إذا كنت ترغب في حظر مثيل الخادم بأكمله، في هذه الحالة يجب عليك استخدام أداة حظر النطاق.
     learn_more: تعلم المزيد
     privacy_policy: سياسة الخصوصية
+    rules: قوانين الخادم
+    rules_html: 'فيما يلي ملخص للقوانين التي تحتاج إلى اتباعها إذا كنت تريد أن يكون لديك حساب على هذا الخادم من ماستدون:'
     see_whats_happening: اطّلع على ما يجري
     server_stats: 'إحصائيات الخادم:'
     source_code: الشفرة المصدرية
@@ -69,6 +74,7 @@ ar:
       two: متابِعون
       zero: متابِعون
     following: مُتابَع
+    instance_actor_flash: هذا الحساب هو ممثل افتراضي يُستخدم لتمثيل الخادم نفسه ولا يمثل أي مستخدم فردي، يُستخدم لأغراض الاتحاد ولا ينبغي حظره.
     joined: انضم·ت في %{date}
     last_active: آخر نشاط
     link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date}
@@ -90,7 +96,6 @@ ar:
       zero: تبويقات
     posts_tab_heading: تبويقات
     posts_with_replies: التبويقات و الردود
-    reserved_username: اسم المستخدم محجوز
     roles:
       admin: المدير
       bot: روبوت
@@ -108,8 +113,10 @@ ar:
       delete: حذف
       destroyed_msg: تم تدمير ملاحظة الإشراف بنجاح!
     accounts:
+      add_email_domain_block: حظر نطاق بريد إلكتروني
       approve: صادِق عليه
       approve_all: الموافقة على الكل
+      approved_msg: تمت الموافقة على تسجيل %{username}
       are_you_sure: متأكد ؟
       avatar: الصورة الرمزية
       by_domain: النطاق
@@ -123,8 +130,10 @@ ar:
       confirm: تأكيد
       confirmed: مؤكَّد
       confirming: التأكد
+      delete: حذف البيانات
       deleted: تمت إزالته
       demote: إنزال الرُتبة الوظيفية
+      destroyed_msg: بيانات حساب %{username} الآن في قائمة الانتظار ليتم حذفها قريباً
       disable: تعطيل
       disable_two_factor_authentication: تعطيل المصادقة بخطوتين
       disabled: معطَّل
@@ -135,10 +144,12 @@ ar:
       email_status: حالة البريد الإلكتروني
       enable: تفعيل
       enabled: مفعَّل
+      enabled_msg: تم إلغاء تجميد حساب %{username}
       followers: المتابِعون
       follows: يتابع
       header: الرأسية
       inbox_url: رابط صندوق الوارد
+      invite_request_text: أسباب للانضمام
       invited_by: تمت دعوته مِن طرف
       ip: عنوان الإيبي
       joined: انضم
@@ -150,6 +161,8 @@ ar:
       login_status: وضع الدخول
       media_attachments: الوسائط المرفقة
       memorialize: تحويل الحساب إلى صفحة ذكرى
+      memorialized: تذكاري
+      memorialized_msg: تم تحويل %{username} بنجاح إلى حساب تذكاري
       moderation:
         active: نشِط
         all: الكل
@@ -170,10 +183,14 @@ ar:
       public: عمومي
       push_subscription_expires: انتهاء الاشتراك ”PuSH“
       redownload: انعش الصفحة التعريفية
+      redownloaded_msg: تم تحديث ملف %{username} التعريفي من الأصل
       reject: ارفض
       reject_all: ارفض الكل
+      rejected_msg: تم رفض تطبيق تسجيل %{username} بنجاح
       remove_avatar: حذف الصورة الرمزية
       remove_header: حذف الرأسية
+      removed_avatar_msg: تمت إزالة صورة %{username} الرمزية بنجاح
+      removed_header_msg: تمت إزالة صورة %{username} الرأسية بنجاح
       resend_confirmation:
         already_confirmed: هذا المستخدم مؤكد بالفعل
         send: أعد إرسال رسالة البريد الإلكتروني الخاصة بالتأكيد
@@ -190,6 +207,8 @@ ar:
       search: البحث
       search_same_email_domain: مستخدمون آخرون لديهم نفس نطاق البريد الإلكتروني
       search_same_ip: مستخدِمون آخرون بنفس الـ IP
+      sensitive: حساس
+      sensitized: مُعَين كمنشور حساس
       shared_inbox_url: رابط الصندوق المُشترَك للبريد الوارد
       show:
         created_reports: البلاغات التي أنشأها هذا الحساب
@@ -199,13 +218,19 @@ ar:
       statuses: المنشورات
       subscribe: اشترك
       suspended: تم تعليقه
+      suspension_irreversible: تم حذف بيانات هذا الحساب بشكل لا رجعة فيه، يمكنك إلغاء تعليق الحساب لجعله قابلا للاستخدام، ولكنه لن يسترد أي بيانات كانت لديه سابقاً.
+      suspension_reversible_hint_html: تم تعليق الحساب، وسيتم إزالة البيانات بالكامل في %{date}، حتى ذلك الحين، يمكن استعادة الحساب دون أي آثار سلبية أي كما أنه لم يحدث أي شيء، إذا كنت ترغب في حذف جميع بيانات الحساب الآن، فيمكنك فعل ذلك أدناه.
       time_in_queue: في قائمة الانتظار %{time}
       title: الحسابات
       unconfirmed_email: البريد الإلكتروني غير مؤكد
+      undo_sensitized: التراجع عن حساسية
       undo_silenced: رفع الصمت
       undo_suspension: إلغاء تعليق الحساب
+      unsilenced_msg: تم فك الحدود من حساب %{username} بنجاح
       unsubscribe: إلغاء الاشتراك
+      unsuspended_msg: تم إلغاء تجميد حساب %{username}
       username: اسم المستخدم
+      view_domain: عرض ملخص للنطاق
       warn: تحذير
       web: الويب
       whitelisted: في القائمة البيضاء
@@ -217,10 +242,20 @@ ar:
         create_account_warning: إنشاء تحذير
         create_announcement: إنشاء إعلان
         create_custom_emoji: إنشاء إيموجي مخصص
+        create_domain_allow: إنشاء نطاق المسموح به
+        create_domain_block: إنشاء كتلة نطاق
+        create_email_domain_block: إنشاء كتلة نطاق بريد إلكتروني
+        create_ip_block: إنشاء قاعدة IP جديدة
+        create_unavailable_domain: إنشاء نطاق غير متوفر
         demote_user: إنزال رتبة المستخدم
         destroy_announcement: احذف الإعلان
         destroy_custom_emoji: احذف الإيموجي المخصص
+        destroy_domain_allow: حذف النطاق المسموح به
+        destroy_domain_block: حذف كتلة النطاق
+        destroy_email_domain_block: حذف نطاق بريد إلكتروني
+        destroy_ip_block: حذف قانون IP
         destroy_status: حذف المنشور
+        destroy_unavailable_domain: حذف نطاق غير متوفر
         disable_2fa_user: تعطيل 2FA
         disable_custom_emoji: تعطيل الإيموجي المخصص
         disable_user: تعطيل المستخدم
@@ -232,50 +267,26 @@ ar:
         reopen_report: إعادة فتح التقرير
         reset_password_user: إعادة تعيين كلمة المرور
         resolve_report: حل الشكوى
+        sensitive_account: وضع علامة على الوسائط في حسابك على أنها حساسة
         silence_account: كتم الحساب
         suspend_account: تعليق الحساب
         unassigned_report: إلغاء إسناد الشكوى
+        unsensitive_account: إلغاء تحديد الوسائط في حسابك على أنها حساسة
         unsilence_account: إلغاء كتم الحساب
         unsuspend_account: إلغاء تعليق الحساب
         update_announcement: تحديث الإعلان
         update_custom_emoji: تحديث الإيموجي المخصص
+        update_domain_block: تحديث كتلة النطاق
         update_status: تحديث الحالة
       actions:
-        assigned_to_self_report: قام %{name} بتعيين التقرير %{target} لأنفسهم
-        change_email_user: غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target}
-        confirm_user: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}"
-        create_account_warning: قام %{name} بإرسال تحذير إلى %{target}
-        create_announcement: قام %{name} بإنشاء إعلان جديد %{target}
-        create_custom_emoji: "%{name} قام برفع إيموجي جديد %{target}"
-        create_domain_allow: قام %{name} بإضافة النطاق %{target} إلى القائمة البيضاء
-        create_domain_block: "%{name} قام بحجب نطاق %{target}"
-        create_email_domain_block: "%{name} قد قام بحظر نطاق البريد الإلكتروني %{target}"
-        demote_user: "%{name} قد قام بإنزال الرتبة الوظيفية لـ %{target}"
-        destroy_announcement: قام %{name} بحذف الإعلان %{target}
-        destroy_custom_emoji: قام %{name} بحذف الإيموجي %{target}
-        destroy_domain_allow: قام %{name} بإزالة النطاق %{target} مِن القائمة البيضاء
-        destroy_domain_block: "%{name} قام بإلغاء الحجب عن النطاق %{target}"
-        destroy_email_domain_block: قام %{name} بإضافة نطاق البريد الإلكتروني %{target} إلى اللائحة البيضاء
-        destroy_status: لقد قام %{name} بحذف منشور %{target}
-        disable_2fa_user: "%{name} لقد قام بتعطيل ميزة المصادقة بخطوتين للمستخدم %{target}"
-        disable_custom_emoji: "%{name} قام بتعطيل الإيموجي %{target}"
-        disable_user: "%{name} لقد قام بتعطيل تسجيل الدخول للمستخدِم %{target}"
-        enable_custom_emoji: "%{name} قام بتنشيط الإيموجي %{target}"
-        enable_user: لقد قام %{name} بتنشيط تسجيل الدخول للمستخدِم %{target}
-        memorialize_account: لقد قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية
-        promote_user: "%{name} قام بترقية المستخدم %{target}"
-        remove_avatar_user: تمت إزالة %{name} الصورة الرمزية %{target}
-        reopen_report: تمت إعادة فتح الشكوى %{name} %{target}
-        reset_password_user: "%{name} لقد قام بإعادة تعيين الكلمة السرية الخاصة بـ %{target}"
-        resolve_report: قام %{name} بحل الشكوى %{target}
-        silence_account: لقد قام %{name} بكتم حساب %{target}
-        suspend_account: لقد قام %{name} بتعليق حساب %{target}
-        unassigned_report: "%{name} تقرير غير معتمد %{target}"
-        unsilence_account: لقد قام %{name} بإلغاء الكتم عن حساب %{target}
-        unsuspend_account: لقد قام %{name} بإلغاء التعليق المفروض على حساب %{target}
-        update_announcement: قام %{name} بتحديث الإعلان %{target}
-        update_custom_emoji: "%{name} قام بتحديث الإيموجي %{target}"
-        update_status: لقد قام %{name} بتحديث منشور %{target}
+        assigned_to_self_report_html: قام %{name} بتعيين التقرير %{target} لأنفسهم
+        change_email_user_html: غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target}
+        confirm_user_html: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}"
+        create_account_warning_html: قام %{name} بإرسال تحذير إلى %{target}
+        create_announcement_html: قام %{name} بإنشاء إعلان جديد %{target}
+        create_custom_emoji_html: "%{name} قام برفع إيموجي جديد %{target}"
+        create_domain_allow_html: قام %{name} بإضافة النطاق %{target} إلى القائمة البيضاء
+        create_domain_block_html: "%{name} قام بحجب نطاق %{target}"
       deleted_status: "(منشور محذوف)"
       empty: لم يتم العثور على سجلات.
       filter_by_action: تصفية بحسب الإجراء
@@ -338,7 +349,6 @@ ar:
       feature_profile_directory: دليل الملفات التعريفية
       feature_registrations: التسجيلات
       feature_relay: المُرحّل الفديرالي
-      feature_spam_check: مكافح البريد المزعج
       feature_timeline_preview: معاينة الخيط الزمني
       features: الميّزات
       hidden_service: الفيديرالية مع الخدمات الخفية
@@ -368,6 +378,7 @@ ar:
       destroyed_msg: تم إلغاء الحجب المفروض على النطاق
       domain: النطاق
       edit: تحرير النطاق المحظور
+      existing_domain_block_html: لقد فرضت بالفعل سابقاً حدوداً أكثر صرامة على %{name}، تحتاج إلى <a href="%{unblock_url}">إلغاء حظره</a> أولاً.
       new:
         create: إنشاء حظر
         hint: لن تمنع كتلة المجال إنشاء إدخالات حساب في قاعدة البيانات ، ولكنها ستطبق طرق الإشراف المحددة بأثر رجعي وتلقائي على هذه الحسابات.
@@ -377,12 +388,18 @@ ar:
           silence: كتم
           suspend: تعليق
         title: حجب نطاق جديد
+      obfuscate: تشويش اسم النطاق
+      obfuscate_hint: تشويش اسم النطاق جزئيا في القائمة إذا كان الإعلان عن قائمة قيود النطاق مفعلاً
       private_comment: تعليق خاص
+      private_comment_hint: التعليق على تقييد هذا النطاق للاستخدام الداخلي من قبل المشرفين.
       public_comment: تعليق للعلن
+      public_comment_hint: التعليق على تقييد هذا النطاق لعامة الجمهور، إذا كان الإعلان عن قائمة قيود النطاق مفعلاً.
       reject_media: رفض ملفات الوسائط
       reject_media_hint: يزيل ملفات الوسائط المخزنة محليًا ويرفض تنزيل أي ملفات في المستقبل. غير ذي صلة للتعليق
       reject_reports: رفض التقارير
       reject_reports_hint: تجاهل جميع تقارير الإبلاغ القادمة من هذا النطاق. هذا يستثي التعليقات
+      rejecting_media: جار رفض ملفات الوسائط
+      rejecting_reports: جار رفض التقارير
       severity:
         silence: تم كتمه
         suspend: تم تعليقه
@@ -400,6 +417,7 @@ ar:
         title: رفع حظر النطاق عن %{domain}
         undo: إلغاء
       undo: إلغاء حجب النطاق
+      view: عرض كتلة النطاق
     email_domain_blocks:
       add_new: إضافة
       created_msg: لقد دخل حظر نطاق البريد الإلكتروني حيّز الخدمة
@@ -415,6 +433,7 @@ ar:
     instances:
       by_domain: النطاق
       delivery_available: التسليم متوفر
+      empty: لم يتم العثور على نطاقات.
       known_accounts:
         few: "%{count} حسابات معروفة"
         many: "%{count} حسابات معروفة"
@@ -443,6 +462,9 @@ ar:
         title: التصفية
       title: الدعوات
     ip_blocks:
+      add_new: إنشاء قانون
+      created_msg: تمت إضافة قاعدة IP جديدة
+      delete: حذف
       expires_in:
         '1209600': أسبوعان
         '15778476': 6 أشهر
@@ -450,6 +472,10 @@ ar:
         '31556952': سنة واحدة
         '86400': يوم واحد
         '94670856': 3 سنوات
+      new:
+        title: إنشاء قاعدة IP جديدة
+      no_ip_block_selected: لم يطرأ أي تغيير على أي قاعدة IP بما أنه لم يتم اختيار أي واحد
+      title: قواعد الـIP
     pending_accounts:
       title: الحسابات المعلقة (%{count})
     relationships:
@@ -457,6 +483,7 @@ ar:
     relays:
       add_new: إضافة مُرحّل جديد
       delete: حذف
+      description_html: "<strong>مُرَحِّل الاتحاد</strong> هو خادم وسيط يقوم بتبادل كميات كبيرة من التبويقات العامة بين الخوادم التي تشترك به وتنشر إليه. <strong>يمكنه أن يساعد الخوادم الصغيرة والمتوسطة على اكتشاف المحتوى من فيديفرس</strong>، الذي من شأنه خلاف ذلك أن يَتطلّب من المستخدمين المحليين أن يُتابِعوا يدوياً الأشخاص الآخرين على خوادم مُتحكم بها عن بُعد."
       disable: تعطيل
       disabled: مُعطَّل
       enable: تشغيل
@@ -496,6 +523,8 @@ ar:
       comment:
         none: لا شيء
       created_at: ذكرت
+      forwarded: أُعيد توجيهه
+      forwarded_to: أُعيد توجيهه إلى %{domain}
       mark_as_resolved: اعتبار الشكوى كمحلولة
       mark_as_unresolved: علم كغير محلولة
       notes:
@@ -515,6 +544,10 @@ ar:
       unassign: إلغاء تعيين
       unresolved: غير معالجة
       updated_at: محدث
+    rules:
+      add_new: إضافة قاعدة
+      edit: تعديل القانون
+      title: قوانين الخادم
     settings:
       activity_api_enabled:
         desc_html: عدد المنشورات المحلية و المستخدمين الناشطين و التسجيلات الأسبوعية الجديدة
@@ -529,6 +562,7 @@ ar:
         desc_html: يقوم بتغيير المظهر بواسطة سي أس أس يُحمَّل على كافة الصفحات
         title: سي أس أس مخصص
       default_noindex:
+        desc_html: يؤثر على جميع المستخدمين الذين لم يغيروا هذا الإعداد بأنفسهم
         title: عدم السماح مبدئيا لمحركات البحث بفهرسة الملفات التعريفية للمستخدمين
       domain_blocks:
         all: للجميع
@@ -537,12 +571,11 @@ ar:
         users: للمستخدمين المتصلين محليا
       domain_blocks_rationale:
         title: اظهر السبب
-      enable_bootstrap_timeline_accounts:
-        title: تمكين الاشتراكات الافتراضية للمستخدمين الجدد
       hero:
         desc_html: معروض على الصفحة الأولى. لا يقل عن 600 × 100 بكسل. عند عدم التعيين ، تعود الصورة إلى النسخة المصغرة على سبيل المثال
         title: الصورة الرأسية
       mascot:
+        desc_html: معروض على عدة صفحات، يوصى بِعلى الأقل 293x205 بكسل، عند عدم التعيين، تعود الصورة إلى التميمة الافتراضية
         title: صورة الماسكوت
       peers_api_enabled:
         desc_html: أسماء النطاقات التي التقى بها مثيل الخادوم على البيئة الموحَّدة فديفرس
@@ -563,6 +596,9 @@ ar:
         min_invite_role:
           disabled: لا أحد
           title: المستخدِمون المصرح لهم لإرسال الدعوات
+        require_invite_text:
+          desc_html: عندما تتطلب التسجيلات الموافقة اليدوية، جعل إدخال نص لسؤال "لماذا تريد أن تنضم؟" إلزاميا بدلاً من اختياري
+          title: الطلب من المستخدمين الجدد إدخال سبب للتسجيل
       registrations_mode:
         modes:
           approved: طلب الموافقة لازم عند إنشاء حساب
@@ -570,6 +606,7 @@ ar:
           open: يمكن للجميع إنشاء حساب
         title: طريقة إنشاء الحسابات
       show_known_fediverse_at_about_page:
+        desc_html: عند التعطيل، يُقيّد الخط الزمني العام المرتبط من صفحة الهبوط لعرض المحتوى المحلي فقط
         title: إظهار الفديفرس الموحَّد في خيط المُعايَنة
       show_staff_badge:
         desc_html: عرض شارة الموظفين على صفحة المستخدم
@@ -587,9 +624,6 @@ ar:
         desc_html: يمكنك كتابة سياسة الخصوصية الخاصة بك ، شروط الخدمة أو غيرها من القوانين. يمكنك استخدام علامات HTML
         title: شروط الخدمة المخصصة
       site_title: اسم مثيل الخادم
-      spam_check_enabled:
-        desc_html: يمكن لماستدون الإبلاغ التلقائي عن الحسابات التي ترسل رسائل متكررة غير مرغوب فيها. قد تكون هناك زائفات إيجابيات.
-        title: مكافحة البريد المزعج
       thumbnail:
         desc_html: يستخدم للعروض السابقة عبر Open Graph و API. 1200x630px موصى به
         title: الصورة الرمزية المصغرة لمثيل الخادوم
@@ -601,6 +635,7 @@ ar:
         desc_html: يؤثر على علامات الوسوم التي لم يكن مسموح بها مسبقاً
         title: السماح للوسوم بالظهور على المتداوَلة بدون مراجعة مسبقة
       trends:
+        desc_html: عرض علني للوسوم المستعرضة سابقاً التي هي رائجة الآن
         title: الوسوم المتداولة
     site_uploads:
       delete: احذف الملف الذي تم تحميله
@@ -623,9 +658,6 @@ ar:
       accounts_today: استخدامات هذا اليوم
       accounts_week: استخدامات هذا الأسبوع
       breakdown: توزيع استخدام اليوم حسب المصدر
-      context: السياق
-      directory: في دليل حسابات المستخدمين
-      in_directory: "%{count} في سجل حسابات المستخدمين"
       last_active: آخر نشاط
       most_popular: الأكثر شعبية
       most_recent: الأحدث
@@ -700,8 +732,11 @@ ar:
       prefix_sign_up: أنشئ حسابًا على ماستدون اليوم!
       suffix: بفضل حساب ، ستكون قادرا على متابعة الأشخاص ونشر تحديثات وتبادل رسائل مع مستخدمين مِن أي خادم Mastodon وأكثر!
     didnt_get_confirmation: لم تتلق تعليمات التأكيد ؟
+    dont_have_your_security_key: ليس لديك مفتاح الأمان الخاص بك؟
     forgot_password: نسيت كلمة المرور ؟
     invalid_reset_password_token: رمز إعادة تعيين كلمة المرور غير صالح أو منتهي الصلاحية. يرجى طلب واحد جديد.
+    link_to_otp: أدخل رمز ذو عامِلين من هاتفك أو رمز الاسترجاع
+    link_to_webauth: استخدم جهاز مفتاح الأمان الخاص بك
     login: تسجيل الدخول
     logout: خروج
     migrate_account: الانتقال إلى حساب آخر
@@ -726,7 +761,9 @@ ar:
       functional: حسابك جاهز.
       pending: إن طلبك قيد المراجعة من قبل فريقنا. قد يستغرق هذا بعض الوقت. سوف تتلقى بريدا إلكترونيا إذا تمت الموافقة على طلبك.
       redirecting_to: حسابك غير نشط لأنه تم تحويله حاليا إلى %{acct}.
+    too_fast: تم إرسال النموذج بسرعة كبيرة، حاول مرة أخرى.
     trouble_logging_in: هل صادفتكم مشكلة في الولوج؟
+    use_security_key: استخدام مفتاح الأمان
   authorize_follow:
     already_following: أنت تتابع بالفعل هذا الحساب
     already_requested: لقد قُمتَ بإرسال طلب متابَعة إلى هذا الحساب مِن قَبل
@@ -751,6 +788,7 @@ ar:
   date:
     formats:
       default: "%d %b %Y"
+      with_month_name: "%d %B %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}سا"
@@ -815,6 +853,7 @@ ar:
       request: اطلب نسخة مِن حسابك
       size: الحجم
     blocks: قمت بحظر
+    bookmarks: الفواصل المرجعية
     csv: CSV
     domain_blocks: النطاقات المحظورة
     lists: القوائم
@@ -824,6 +863,7 @@ ar:
     add_new: أضف واحدًا جديدا
     errors:
       limit: لقد قمت بالفعل بعرض الحد الأقصى من الوسوم
+    hint_html: "<strong>ما هي الوسوم الرائجة؟</strong> يتم عرضها بشكل بارز على ملفك الشخصي العام وتسمح للناس بتصفح منشوراتك العامة على وجه التحديد تحت تلك الوسوم. وهي أداة رائعة لتتبع الأعمال الإبداعية أو المشاريع الطويلة الأجل."
   filters:
     contexts:
       account: الملفات التعريفية
@@ -868,6 +908,13 @@ ar:
     active: نشط
     authorize: نعم ، قم بترخيصه
     authorize_connection_prompt: هل تريد ترخيص هذا الاتصال المشفّر؟
+    errors:
+      failed: فشل اتصال التشفير. الرجاء المحاولة مرة أخرى من %{provider}.
+      keybase:
+        invalid_token: رموز Keybase هي تجزئة من التوقيعات ويجب أن تكون 66 حرف hex
+        verification_failed: Keybase لا يستطيع التعرف على هذا الرمز كتوقيع لمستخدم Keybase %{kb_username}، الرجاء إعادة المحاولة من Keybase.
+      wrong_user: لا يمكن إنشاء دليل لـ%{proving} أثناء تسجيل الدخول كـ%{current}. قم بتسجيل الدخول كـ%{proving} ثم حاول مرة أخرى.
+    explanation_html: هنا يمكنك أن تربط بشكل مُشفر هوياتك الأُخريات من منصات أخرى مثل Keybase. هذا يتيح للأشخاص الآخرين إرسال رسائل مشفرة إليك على تلك المنصات ويسمح لهم بالثقة في أن المحتوى الذي ترسله لهم يأتي منك أنت.
     i_am_html: أنا %{username} على %{service}.
     identity: الهوية
     inactive: ليس نشطا
@@ -878,6 +925,8 @@ ar:
     status: حالة التحقق
     view_proof: عرض الدليل
   imports:
+    errors:
+      over_rows_processing_limit: يحتوي على أكثر من %{count} صف
     modes:
       merge: دمج
       merge_long: الإبقاء علي التسجيلات الحالية وإضافة الجديدة
@@ -887,6 +936,7 @@ ar:
     success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب
     types:
       blocking: قائمة المحظورين
+      bookmarks: الفواصل المرجعية
       domain_blocking: قائمة النطاقات المحظورة
       following: قائمة المستخدمين المتبوعين
       muting: قائمة الكتم
@@ -949,11 +999,20 @@ ar:
     redirecting_to: حسابك موجَّه إلى %{acct}.
     set_redirect: تعين إعادة التوجيه
     warning:
+      backreference_required: يجب على الحساب الجديد أن يتم تكوينه كمرجع خلفي لهذا الحساب
       before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:'
+      cooldown: بعد الانتقال هناك فترة تبريد لن تتمكن خلالها من الانتقال مرة أخرى
+      disabled_account: لن يكون حسابك الحالي قابلا للاستخدام بشكل كامل بعد ذلك، ولكن سيكون لديك حق الوصول إلى تصدير البيانات وكذلك إعادة التنشيط.
       followers: تقوم هذه العملية بنقل كافة المُتابِعين مِن الحساب الحالي إلى الحساب الجديد
+      only_redirect_html: بدلاً من ذلك، يمكنك <a href="%{path}">أن تضع فقط إعادة توجيه على ملفك الشخصي</a>.
       other_data: لن يتم نقل أية بيانات أخرى تلقائيا
+      redirect: سيتم تحديث ملفك التعريفي الحالي مع إشعار إعادة توجيه وسيتم استبعاده من عمليات البحث
   moderation:
     title: الإشراف
+  move_handler:
+    carry_blocks_over_text: انتقل هذا المستخدم من %{acct}، الذي حَظرته أنت.
+    carry_mutes_over_text: انتقل هذا المستخدم من %{acct}، الذي كتَمتَه أنت.
+    copy_account_note_text: 'انتقل هذا المستخدم من %{acct}، إليك ملاحظاتك السابقة عنه:'
   notification_mailer:
     digest:
       action: معاينة كافة الإشعارات
@@ -996,6 +1055,8 @@ ar:
       body: 'قام %{name} بترقية منشورك:'
       subject: قام %{name} بترقية منشورك
       title: ترقية جديدة
+    status:
+      subject: "%{name} نشر للتو"
   notifications:
     email_events: الأحداث للإشعارات عبر البريد الإلكتروني
     email_events_hint: 'اختر الأحداث التي تريد أن تصِلَك اشعارات عنها:'
@@ -1010,6 +1071,14 @@ ar:
           quadrillion: كواد
           thousand: ألف
           trillion: ترل
+  otp_authentication:
+    code_hint: قم بإدخال الرمز المُوَلّد عبر تطبيق الاستيثاق لديك للتأكيد
+    description_html: في حال تفعيل <strong>الاستيثاق بخطوتين</strong> باستخدام تطبيق استيثاق، فسيتطلب تسجيل الدخول منك أن يكون بحوزتك هاتفك النقال، الذي سيُولد الرمز لك لتُدخله.
+    enable: تفعيل
+    instructions_html: "<strong>قم بمسح رمز الـQR عبر Google Authenticator أو أي تطبيق TOTP على جهازك</strong>. من الآن فصاعدا سيقوم ذاك التطبيق بتوليد رموز يجب عليك إدخالها عند تسجيل الدخول."
+    manual_instructions: 'في حالة تعذّر مسح رمز QR وتحتاج إلى إدخاله يدوياً، يُمْكِنك إدخال هذا النص السري على التطبيق:'
+    setup: إعداد
+    wrong_code: الرمز الذي تم إدخاله غير صالح! هل وقت الخادم ووقت الجهاز صحيحَين؟
   pagination:
     newer: الأحدَث
     next: التالي
@@ -1024,6 +1093,7 @@ ar:
       duration_too_short: مبكّر جدا
       expired: لقد انتهى استطلاع الرأي
       invalid_choice: خيار التصويت الذي قُمتَ يتحديده غير موجود
+      over_character_limit: لا يمكن أن يكون أطول من %{max} حرف لكل واحد
       too_few_options: يجب أن يحتوي على أكثر من عنصر واحد
       too_many_options: لا يمكنه أن يحتوي أكثر مِن %{max} عناصر
   preferences:
@@ -1037,6 +1107,7 @@ ar:
   relationships:
     activity: نشاط الحساب
     dormant: في سبات
+    follow_selected_followers: متابَعة المتابِعين المحددين
     followers: المتابِعون
     following: يُتابِع
     invited: مَدعُوّ
@@ -1133,8 +1204,7 @@ ar:
     profile: الملف التعريفي
     relationships: المتابِعون والمتابَعون
     two_factor_authentication: المُصادقة بخُطوَتَيْن
-  spam_check:
-    spam_detected: هذا إبلاغ تلقائي. تم اكتشاف منشورات عشوائية غير مرغوب فيها.
+    webauthn_authentication: مفاتيح الأمان
   statuses:
     attached:
       audio:
@@ -1195,6 +1265,8 @@ ar:
         zero: بدون صوت %{count}
       vote: صوّت
     show_more: أظهر المزيد
+    show_newer: إظهار أحدث
+    show_older: إظهار أقدم
     show_thread: اعرض خيط المحادثة
     sign_in_to_participate: قم بتسجيل الدخول للمشاركة في هذه المحادثة
     title: '%{name}: "%{quote}"'
@@ -1212,6 +1284,88 @@ ar:
   tags:
     does_not_match_previous_name: لا يطابق الإسم السابق
   terms:
+    body_html: |
+      <h2>سياسة الخصوصية</h2>
+      <h3 id="collect">ما هي المعلومات التي نجمعها؟</h3>
+      <ul>
+      <li><em>معلومات الحساب الأساسية</em>: إذا سجلت على هذا الخادم، فسيُطلب منك أن تُدخل اسم المستخدم، عنوان بريد إلكتروني، وكلمة سر، وتستطيع أن تُدخل معلومات تعريفية إضافية مثل اسم معروض، وسيرة ذاتية، وصورة رمزية، وصورة رأسية. اسم المستخدم، والاسم المعروض، والسيرة الذاتية، والصورة الرمزية، والصورة الرأسية سيكونون ظاهرين بشكل علني للجميع دائماً.</li>
+      <li><em>المنشورات، المتابَعون، ومعلومات علنية أخرى</em>: قائمة الأشخاص الذين تُتابِعُهم علنية للجميع، نفس الشيء مع قائمة متابِعيك. عندما تُرسل رسالة، يتم تخزين التاريخ والوقت واسم البرنامج المنَشور منه. يُمكن للرسائل أن تحتوي على وسائط مُرفقة مثل الصور ومقاطع الفيديو. المنشورات العامة والغير مُدرجة متوفرات بشكل علني. عندما تُميّز منشور على ملفك الشخصي، فهذه أيضاً معلومات متوفرة بشكل علني. يتم تسليم منشوراتك إلى متابِعيك، في بعض الأحيان، يتم تسليمهم إلى خوادم مختلفة ويتم نسخهم وحفظهم هناك. عندما تحذف منشور معيّن، يتم تسليم هذه المعلومة على نفس المنوال إلى متابِعيك أيضاً، إعادة النشر والإعجاب بمنشور معيّن هما أضاً تصرفات علنية دائماً.</li>
+      <li><em>المنشورات المباشرة ومنشورات المتابِعين فقط</em>: تُخزّن وتُعالج كل المنشورات على الخادم. يتم تسليم "منشورات المتابعين فقط" إلى متابِعيك والأشخاص المذكورين في المنشور، ويتم تسليم المنشورات المباشرة إلى الأشخاص المذكورين في المنشور فقط لا غير. في بعض الأحيان يتم تسليمهم إلى خوادم مختلفة ويتم حفظ نُسخ منهم هناك. نحن نبذل جهداً حسن النية للحد من إمكانية وصول المنشورات إلى الأشخاص المُصرّح لهم فقط، ولكن قد تفشل الخوادم الأخرى في القيام بذلك، لذلك من المهم أن تُراجِع الخوادم التي ينتمي إليها متابِعوك. تستطيع أن تُصحّح في الإعدادات على خيار "الموافقة أو الرفض اليدوي" للمتابِعين الجدد. <em>ضع في الحسبان أنه من الممكن أن يقرأ أيُّ أحد من الخوادم هذه الرسائل أو المنشورات</em>، ومن الممكن أن يلتقط المُستقبِلون لقطات شاشة أو أن ينسخوا أو يعيدوا مشاركتهم بطريقة أخرى، لذلك <em>لا تنشر أي معلومات خطرة على ماستدون.</em></li>
+
+      <li><em>عناوين الـIP وبيانات وصفية أخرى</em>: عندما تُسجل دخولك، نقوم بتسجيل عنوان الـIP الذي دخلت منه، وأيضاً اسم المتصفح الذي دخلت منه، كل عناوين الـIP لتسجيلات الدخول متاحة لك للمراجعة وللإبطال في الإعدادات. يبقى آخر عنوان IP مُسجل لما يصل إلى 12 شهراً. ومن الممكن أن نحتفظ بسجلات الخادم التي تحتوي على عنوان الـIP من كل طلب وصول إلى خادمنا.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">بماذا نستعمل معلوماتك؟</h3>
+
+      <p>أي معلومات نجمعها عنك قَد تُستخدم بالطرق التالية:</p>
+
+      <ul>
+      <li>لتوفير الوظائف الأساسية لماستدون، تستطيع أن تتفاعل مع محتوى الآخرين وأن تنشر محتواك الخاص عندما تُسجل دخولك. كمثال، تستطيع أن تُتابِع حسابات أشخاص آخرين لعرض منشوراتهم المُجمّعة في خطك الزمني الشخصي الرئيسي.</li>
+      <li>للمساعدة في اعتدال المجتمع. كمثال، مقارنة عنوان الـIP الخاص بك بعناوين IP أخرى معروفة لمعرفة ما إذا ثمة هناك أي تهرب من الحظر أو انتهاكات أخرى.</li>
+      <li>يمكن أن يُستعمل عنوان بريدك الإلكتروني الذي أدخلته لإرسال معلومات إليك، أو إشعارات عن تفاعل أشخاص آخرين مع محتواك أو إرسالهم راسائل إليك، أو للرد على استفسارات، و/أو طلبات أو أسئلة أخرى.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">كيف نحمي معلوماتك؟</h3>
+
+      <p>نقوم بتنفيذ مجموعة متنوعة من التدابير الأمنية للحفاظ على سلامة معلوماتك الشخصية عندما تدخلها، أو ترسلها، أو تقوم بالوصول إليها. بجاني أشياء أخرى، تؤَمن جلسة المتصفح الخاص بك، وحركة المرور بين تطبيقاتك والـAPI (واجهة برمجة التطبيقات) باستخدام SSL (بروتوكول طبقة المقابس الآمنة)، وتُهَش أو بالأحرى تُجَزأ كلمة السر الخاصة بك باستخدام خوارزمية أحادية الاتجاه، يمكنك تفعيل خاصّية "الاستيثاق بخطوتين" لتؤَمن وتُصعب إمكانية الوصول إلى حسابك أكثر.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">ما هي سياسة الاحتفاظ بالبيانات لدينا؟</h3>
+
+      <p>سنبذل جهداً حسن النية لـ:</p>
+
+      <ul>
+      <li>حفظ سجلّات بيانات الخوادم التي تحتوي على عنوان الـIP من كل طلب وصول إلى خادمنا، بقدر ما يتم الاحتفاظ بهذه السجلات، لا تزيد عن 90 يومًا.</li>
+      <li>الاحتفاظ بعناوين الـIP المربوطة بالمُستخدمين المُسجلين دخولهم لمدة لا تزيد عن 12 شهراً.</li>
+      </ul>
+
+      <p>تستطيع أن تطلب وتُنزل أرشيف لمحتواك، الذي يحتوي على منشوراتك، ووسائطك المُرفقة، وصورك الرمزية، وصورك الرأسية.</p>
+
+      <p>تستطيع أن تحذف حسابك بشكل لا رجعة فيه في أي وقت تريد.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">هل نستخدم الـCookies (ملفات تعريف الارتباط)؟</h3>
+
+      <p>نعم، الـcookies هي عبارة عن قطعة نصية صغيرة مخزنة على قرص حاسوبك من قبل متصفحك (إذا سمحت له). تسمح هذه الـcookies للموقع بأن يتعرف على متصفحك، وإذا كنت قد سجلت دخولك إلى حسابك، فسيربطه بحسابك المسجل.</p>
+
+      <p>نستعمل الـcookies لفهم ولحفظ تفضيلاتك للزيارات المستقبلية</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">هل نُفصح عن أي معلومات لأطراف خارجية؟</h3>
+
+      <p>نحن لا نبيع، أو نتاجر، أو بأي طريقة أخرى نُحول بياناتك التعريفية الشخصية إلى جهات خارجية. طبعاً هذا الكلام لا ينطبق على الجهات الموثوقة التي تساعدنا في تشغيل موقعنا، أو في إجراء أعمالنا، أو في خدمتك طالما أنهم يوافقون على الحفاظ على سرّيتها. ومن الممكن أن نُطلق أو أن نُصرّح بمعلوماتك عندما نؤمِن بأن هذا هو التصرّف الصحيح للامتثال للقانون، أو لتطبيق سياسة موقعنا، أو لحفظ الحقوق، أو الأملاك، أو الأمان الخاص بنا أو بغيرنا.</p>
+
+      <p>من الممكن أن يُنزل محتواك من قبل خوادم أخرى في الشبكة، يتم تسليم منشوراتك "العامة" ومنشورات "المتابعين فقط" إلى الخوادم التي يقيم فيها متابِعوك، وتُسلم الرسائل المباشرة إلى خوادم التي يُقيم فيها المُستقبلون، طالما أن هؤلاء المتابِعين أو المُستلمين يقيمون في خوادم مختلفة عن هذا الخادم.</p>
+
+      <p>عندما تخوّل تطبيق معين لاستخدام حسابك، وطبعاً على حسب نطاق الأذونات التي سمحت له بها، فيستطيع هذا التطبيق الوصول إلى معلومات ملفك التعريفي العامة، قائمة المتابَعون منك، قائمة المتابِعون لك، كل منشوراتك، وكل إعجاباتك. لا يمكن للتطبيقات الوصول إلى عنوان بريدك الإلكتروني أو إلى كلمة مرورك.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">استخدام الأطفال للموقع</h3>
+
+      <p>إذا كان هذا الخادم في الـEU (الإتحاد الأوروبي) أو في الـEEA (المنطقة الاقتصادية الأوروبية): فموقعنا، ومنتجاتنا وخدماتنا كلها موجهة للأشخاص الذين لا تقل أعمارهم عن الـ16 سنة، إذا كنت تحت هذا السن، حسب متطلبات الـ<a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D9%86%D8%B8%D8%A7%D9%85_%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D9%88%D8%A8%D9%8A_%D8%A7%D9%84%D8%B9%D8%A7%D9%85_%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9_%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA">GDPR</a> (النظام الأوروبي العام لحماية البيانات) فلا تستخدم هذا الموقع.</p>
+
+
+      <p>إذا كان هذا السيرفر في الـUS (الولايات المتحدة الأمريكية): فموقعنا، ومنتجاتنا وخدماتنا كلها موجهة للأشخاص الذين لا تقل أعمارهم عن الـ13 سنة، إذا كنت تحت هذا السن، حسب متطلبات الـ<a href="https://ar.wikipedia.org/wiki/%D9%82%D8%A7%D9%86%D9%88%D9%86_%D8%AD%D9%85%D8%A7%D9%8A%D8%A9_%D8%AE%D8%B5%D9%88%D8%B5%D9%8A%D8%A9_%D8%A7%D9%84%D8%A3%D8%B7%D9%81%D8%A7%D9%84_%D8%B9%D9%84%D9%89_%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA">COPPA</a> (قانون حماية خصوصية الأطفال على الإنترنت) فلا تستخدم هذا الموقع.</p>
+
+      <p>من الممكن أن تكون المتطلبات القانونية مختلفة إذا كان هذا الخادم في ولاية قضائية أخرى.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">تغييرات لسياستنا للخصوصية</h3>
+
+      <p>إذا قررنا أن نغير سياستنا للخصوصية، فسنَنشر هذه التغييرات على هذه الصفحة.</p>
+
+      <p>هذه الوثيقة هي CC-BY-SA (النسبة-الترخيص بالمثل)، تم آخر تحديث لها في 7 مارس، 2018.</p>
+
+      <p>مقتبسة في الأصل من <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
     title: شروط الخدمة وسياسة الخصوصية على %{instance}
   themes:
     contrast: ماستدون (تباين عالٍ)
@@ -1222,11 +1376,16 @@ ar:
       default: "%b %d, %Y, %H:%M"
       month: "%b %Y"
   two_factor_authentication:
+    add: إضافة
     disable: تعطيل
+    disabled_success: تم تعطيل المصادقة بخطوتين
+    edit: تعديل
     enabled: نظام المصادقة بخطوتين مُفعَّل
     enabled_success: تم تفعيل المصادقة بخطوتين بنجاح
     generate_recovery_codes: توليد رموز الاسترجاع
     lost_recovery_codes: تُمكّنك رموز الاسترجاع الاحتياطية مِن استرجاع النفاذ إلى حسابك في حالة فقدان جهازك المحمول. إن ضاعت منك هذه الرموز فبإمكانك إعادة توليدها مِن هنا و إبطال الرموز القديمة.
+    methods: المصادقة بخُطوَتَيْن
+    otp: تطبيق استيثاق
     recovery_codes: النسخ الاحتياطي لرموز الاسترجاع
     recovery_codes_regenerated: تم إعادة توليد رموز الاسترجاع الاحتياطية بنجاح
     recovery_instructions_html: إن فقدت الوصول إلى هاتفك، يمكنك استخدام أحد رموز الاسترداد أدناه لاستعادة الوصول إلى حسابك. <strong>حافظ على رموز الاسترداد بأمان</strong>. يمكنك ، على سبيل المثال ، طباعتها وتخزينها مع مستندات أخرى هامة.
@@ -1245,6 +1404,7 @@ ar:
     warning:
       explanation:
         disable: عندما يتم تجميد حسابك، تظل بيانات حسابك سليمة، ولكن لا يمكنك تنفيذ أي إجراءات حتى يتم فتحه.
+        sensitive: سيتم التعامل مع ملفات الوسائط المحملة والوسائط المرتبطة لديك على أنها حساسة.
         silence: في حين أن حسابك محدود، فإن الأشخاص الذين يتبعونك بالفعل سيشاهدون تبويقاتك على هذا الخادم، وقد يتم استثناؤك من قوائم عامة مختلفة. ومع ذلك، قد يمكن للآخرين متابعتك يدويا.
         suspend: تم إيقاف حسابك بشكل دائم، وتم إزالة كافة تبويقاتك وملفات الوسائط التي تم تحميلها بشكل لا رجعة فيه من هذا الخادم، و كذا على الخوادم حيث كان لديك فيها متابِعون.
       get_in_touch: يمكنك الرد على هذا البريد الإلكتروني للاتصال بفريق %{instance}.
@@ -1253,11 +1413,13 @@ ar:
       subject:
         disable: تم تجميد حسابك %{acct}
         none: تحذير إلى %{acct}
+        sensitive: تم وضع علامة حساسة على وسائط منشورات حسابك %{acct}
         silence: إنّ حسابك %{acct} محدود
         suspend: لقد تم تعليق حسابك %{acct}
       title:
         disable: الحساب مُجمَّد
         none: تحذير
+        sensitive: تم وضع علامة حساسة على الوسائط الخاصة بك
         silence: الحساب محدود
         suspend: الحساب مُعلَّق
     welcome:
@@ -1280,11 +1442,8 @@ ar:
       tips: نصائح
       title: أهلاً بك، %{name}!
   users:
-    blocked_email_provider: مزوّد خدمة البريد الإلكتروني هذا غير مسموح به
     follow_limit_reached: لا يمكنك متابعة أكثر مِن %{limit} أشخاص
     generic_access_help_html: صادفت مشكلة في الوصول إلى حسابك؟ اتصل بـ %{email} للحصول على المساعدة
-    invalid_email: عنوان البريد الإلكتروني غير صالح
-    invalid_email_mx: لا يبدو أن عنوان البريد الإلكتروني موجود
     invalid_otp_token: رمز المصادقة بخطوتين غير صالح
     invalid_sign_in_token: رمز الآمان غير صحيح
     otp_lost_help_html: إن فقدتَهُما ، يمكنك الاتصال بـ %{email}
@@ -1294,3 +1453,20 @@ ar:
   verification:
     explanation_html: 'يمكنك <strong>التحقق من نفسك كمالك لروابط البيانات التعريفية على صفحتك الشخصية</strong>. لذلك، يجب أن يحتوي الموقع المقترِن على رابط إلى صفحتك التعريفية الشخصية على ماستدون. الرابط الخلفي <strong>يجب أن</strong> يحتوي على رمز <code>rel="me"</code>. محتوى النص في الرابط غير مهم. على سبيل المثال:'
     verification: التحقق
+  webauthn_credentials:
+    add: إضافة مفتاح أمان جديد
+    create:
+      error: حدثت مشكلة ما خلال إضافة مفتاح أمانك. الرجاء المحاولة مرة أخرى.
+      success: تم إضافة مفتاح الأمان الخاص بك.
+    delete: حذف
+    delete_confirmation: هل أنت متأكد من أنك تريد حذف مفتاح الأمان هذا؟
+    description_html: إذا قمت بتفعيل <strong>استيثاق مفتاح الأمان</strong>، فإن تسجيل الدخول سيتطلب منك استخدام أحد مفاتيح الأمان الخاصة بك.
+    destroy:
+      error: حدثت مشكلة ما خلال حذف مفتاح أمانك. الرجاء المحاولة مرة أخرى.
+      success: تم حذف مفتاح الأمان الخاص بك.
+    invalid_credential: مفتاح الأمان غير صالح
+    nickname_hint: أدخل اسم مستعار لمفتاح الأمان الجديد الخاص بك
+    not_enabled: لم تقم بتفعيل WebAuthn بعد
+    not_supported: هذا المتصفح لا يدعم مفاتيح الأمان
+    otp_required: لاستخدام مفاتيح الأمان، يرجى تفعيل الاستيثاق بعامِلين أولاً.
+    registered_on: تم التسجيل في %{date}
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 59dd30bed..a709113e6 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -5,7 +5,6 @@ ast:
     about_mastodon_html: 'La rede social del futuru: ¡ensin anuncios nin vixilancia, con un diseñu éticu y descentralizáu! Controla los tos datos con Mastodon.'
     about_this: Tocante a
     administered_by: 'Alministráu por:'
-    api: API
     apps: Aplicaciones pa móviles
     apps_platforms: Usa Mastodon dende Android, iOS y otres plataformes
     contact: Contautu
@@ -51,19 +50,16 @@ ast:
       other: Barritos
     posts_tab_heading: Barritos
     posts_with_replies: Barritos y rempuestes
-    reserved_username: El nome d'usuariu ta acutáu
     roles:
       bot: Robó
   admin:
     accounts:
       approve_all: Aprobar too
       are_you_sure: "¿De xuru?"
-      avatar: Avatar
       by_domain: Dominiu
       domain: Dominiu
       email: Corréu
       followers: Siguidores
-      ip: IP
       location:
         local: Llocal
         title: Allugamientu
@@ -82,26 +78,6 @@ ast:
       time_in_queue: Esperando na cola %{time}
       title: Cuentes
       username: Nome d'usuariu
-      web: Web
-    action_logs:
-      actions:
-        create_account_warning: "%{name} unvió una alvertencia a %{target}"
-        create_announcement: "%{name} creó un anunciu %{target}"
-        create_domain_block: "%{name} bloquió'l dominiu %{target}"
-        destroy_announcement: "%{name} desanició l'anunciu %{target}"
-        disable_custom_emoji: "%{name} desactivó'l fustaxe %{target}"
-        disable_user: "%{name} desactivó l'aniciu de sesión del usuariu %{target}"
-        enable_custom_emoji: "%{name} activó'l fustaxe %{target}"
-        enable_user: "%{name} activó l'aniciu de sesión del usuariu %{target}"
-        promote_user: "%{name} ascendió al usuariu %{target}"
-        remove_avatar_user: "%{name} desanició l'avatar de %{target}"
-        reopen_report: "%{name} reabrió l'informe de %{target}"
-        reset_password_user: "%{name} reafitó la contraseña del usuariu %{target}"
-        resolve_report: "%{name} resolvió l'informe de %{target}"
-        silence_account: "%{name} silenció la cuenta de %{target}"
-        suspend_account: "%{name} suspendió la cuenta de %{target}"
-        update_announcement: "%{name} anovó l'anunciu %{target}"
-        update_custom_emoji: "%{name} anovo'l fustaxe %{target}"
     announcements:
       destroyed_msg: "¡L'anunciu desanicióse con ésitu!"
       new:
@@ -119,7 +95,6 @@ ast:
       features: Carauterístiques
       hidden_service: Federación con servicios anubríos
       recent_users: Usuarios de recién
-      software: Software
       total_users: usuarios en total
       trends: Tendencies
       week_interactions: interaiciones d'esta selmana
@@ -160,7 +135,6 @@ ast:
     statuses:
       failed_to_execute: Fallu al executar
     tags:
-      context: Contestu
       most_recent: Lo más recién
       name: Etiqueta
       title: Etiquetes
@@ -183,7 +157,6 @@ ast:
     discovery: Descubrición
     localization:
       body: Mastodon tradúcenlu voluntarios,
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: tol mundu pue collaborar.
     sensitive_content: Conteníu sensible
     toot_layout: Distribución de los barritos
@@ -204,9 +177,6 @@ ast:
     login: Aniciar sesión
     migrate_account: Mudase a otra cuenta
     migrate_account_html: Si deseyes redirixir esta cuenta a otra, pues <a href="%{path}">configuralo equí</a>.
-    providers:
-      cas: CAS
-      saml: SAML
     register: Rexistrase
     security: Seguranza
     trouble_logging_in: "¿Problemes col aniciu de sesión?"
@@ -254,7 +224,6 @@ ast:
       request: Solicitar l'archivu
       size: Tamañu
     blocks: Xente que bloquiesti
-    csv: CSV
     lists: Llistes
     mutes: Xente que silenciesti
   featured_tags:
@@ -387,38 +356,12 @@ ast:
   sessions:
     browser: Restolador
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Restolador desconocíu
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Sesión actual
     description: "%{browser} en %{platform}"
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: plataforma desconocida
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Revocar
     revoke_success: La sesión revocóse con esitu
     title: Sesiones
@@ -439,8 +382,6 @@ ast:
     profile: Perfil
     two_factor_authentication: Autenticación en dos pasos
     webauthn_authentication: Claves d'autenticación
-  spam_check:
-    spam_detected: Esto ye un informe automatizáu. Deteutóse spam.
   statuses:
     attached:
       audio:
@@ -507,7 +448,6 @@ ast:
       subject: Afáyate en Mastodon
       tips: Conseyos
   users:
-    invalid_email: La direición de corréu nun ye válida
     invalid_otp_token: El códigu nun ye válidu
     otp_lost_help_html: Si pierdes l'accesu, contauta con %{email}
     seamless_external_login: Aniciesti sesión pente un serviciu esternu, polo que los axustes de la contraseña y corréu nun tán disponibles.
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 9284f25bf..ffa78b386 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -3,17 +3,183 @@ bg:
   about:
     about_mastodon_html: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>.
     about_this: За тази инстанция
+    active_count_after: активно
+    active_footnote: Месечни активни потребители (МАП)
+    administered_by: 'Администрирано от:'
+    api: API
+    apps: Мобилни приложения
+    apps_platforms: Използвайте Mastodon от iOS, Android и други платформи
+    browse_directory: Разгледайте профилна директория и филтрирайте по интереси
+    browse_local_posts: Разгледайте поток от публични публикации на живо от този сървър
+    browse_public_posts: Разгледайте поток от публични публикации на живо в Mastodon
     contact: За контакти
+    contact_missing: Не е зададено
+    contact_unavailable: Не е приложимо
+    discover_users: Открийте потребители
+    documentation: Документация
+    federation_hint_html: С акаунт в %{instance} ще можете да последвате хората от всеки сървър на Mastodon и отвъд.
+    get_apps: Опитайте мобилно приложение
+    hosted_on: Mastodon е хостван на %{domain}
+    learn_more: Още информация
+    privacy_policy: Политика за поверителност
+    see_whats_happening: Вижте какво се случва
+    server_stats: 'Сървърна статистика:'
     source_code: Програмен код
+    status_count_after:
+      one: състояние
+      other: състояния
     status_count_before: Написали
+    tagline: Следвайте приятели и открийте нови
+    terms: Условия за ползване
+    unavailable_content: Модерирани сървъри
+    unavailable_content_description:
+      domain: Сървър
+      reason: Причина
+      rejecting_media: 'Мултимедийните файлове от тези сървъри няма да бъдат обработени или съхранени и няма да бъдат показани миниатюри, което ще изисква ръчно щракване върху оригиналния файл:'
+      rejecting_media_title: Филтрирана мултимедия
+      silenced: 'Публикациите от тези сървъри ще бъдат скрити в обществени емисии и разговори и няма да се генерират известия от взаимодействията на потребителите им, освен ако не ги следвате:'
+      silenced_title: Заглушени сървъри
+      suspended: 'Никакви данни от тези сървъри няма да бъдат обработвани, съхранявани или обменяни, което прави невъзможно всяко взаимодействие или комуникация с потребители от тези сървъри:'
+      suspended_title: Спрени сървъри
+    user_count_after:
+      one: потребител
+      other: потребители
     user_count_before: Дом на
+    what_is_mastodon: Какво е Mastodon?
   accounts:
+    choices_html: 'Избори на %{name}:'
+    endorsements_hint: Можете да подкрепите хората, които следите, от уеб интерфейса и те ще се покажат тук.
+    featured_tags_hint: Можете да представите конкретни хаштагове, които ще се показват тук.
     follow: Последвай
+    followers:
+      one: Последовател
+      other: Последователи
     following: Следва
+    joined: Присъединил се на %{date}
+    last_active: последна дейност
+    link_verified_on: Собствеността върху тази връзка е проверена на %{date}
+    media: Мултимедия
+    moved_html: "%{name} се премести в %{new_profile_link}:"
+    network_hidden: Тази информация не е налична
+    never_active: Никога
     nothing_here: Тук няма никого!
     people_followed_by: Хора, които %{name} следва
     people_who_follow: Хора, които следват %{name}
+    pin_errors:
+      following: Трябва вече да следвате човека, когото искате да подкрепите
+    posts:
+      one: Публикация
+      other: Публикации
+    posts_tab_heading: Публикации
+    posts_with_replies: Публикации и отговори
+    roles:
+      admin: Админ
+      bot: Бот
+      group: Група
+      moderator: Мод
+    unavailable: Профилът не е наличен
     unfollow: Не следвай
+  admin:
+    account_actions:
+      action: Изпълняване на действие
+    account_moderation_notes:
+      create: Оставяне на бележка
+      created_msg: Бележката за модерация е създадена успешно!
+      delete: Изтриване
+    accounts:
+      add_email_domain_block: Блокиране на имейл домейн
+      approve: Одобряване
+      approve_all: Одобряване на всички
+      are_you_sure: Сигурни ли сте?
+      avatar: Аватар
+      by_domain: Домейн
+      change_email:
+        changed_msg: Имейлът на акаунта беше успешно променен!
+        current_email: Текущ имейл
+        label: Промяна на имейл
+        new_email: Нов имейл
+        submit: Промяна на имейл
+        title: Промяна на имейл за %{username}
+      confirm: Потвърждаване
+      confirmed: Потвърдено
+      confirming: Потвърждаване
+      delete: Изтриване на данни
+      deleted: Изтрито
+      demote: Понижаване
+      destroyed_msg: Данните на %{username} вече са на опашка за незабавно изтриване
+      disable: Замразяване
+      disable_two_factor_authentication: Изключване на 2FA
+      disabled: Замразено
+      display_name: Показвано име
+      domain: Домейн
+      edit: Редакция
+      email: Имейл
+      email_status: Състояние на имейл
+      enable: Размразяване
+      enabled: Включено
+      follows: Последвания
+      header: Заглавна част
+      inbox_url: Входящ URL
+      invite_request_text: Причини за присъединяване
+      invited_by: Покана от
+      ip: IP
+      joined: Присъединено
+      location:
+        all: Всичко
+        local: Локално
+        remote: Дистанционно
+        title: Местоположение
+      login_status: Състояние на вход
+      media_attachments: Прикачена мултимедия
+      moderation:
+        active: Активно
+        all: Всичко
+        pending: Чакащо
+        silenced: Заглушено
+        suspended: Спряно
+        title: Модерация
+      moderation_notes: Модераторни бележки
+      most_recent_activity: Последна дейност
+      most_recent_ip: Последен IP
+      no_account_selected: Нито един акаунт не е променен, тъй като нито един не е избран
+      no_limits_imposed: Няма наложени ограничения
+      not_subscribed: Без абонамент
+      pending: Изчаква преглед
+      perform_full_suspension: Спиране
+      promote: Повишаване
+      protocol: Протокол
+      public: Публично
+      push_subscription_expires: PuSH абонаментът изтича
+      redownload: Опресняване на профил
+      reject: Отхвърляне
+      reject_all: Отхвърляне на всичко
+      rejected_msg: Успешно отхвърлена заявка за регистрация на %{username}
+      remove_avatar: Премахване на аватар
+      remove_header: Премахване на заглавна част
+      unsubscribe: Отписване
+      username: Потребителско име
+      warn: Предупреждение
+      web: Уеб
+    action_logs:
+      action_types:
+        confirm_user: Потвърждаване на потребител
+        create_account_warning: Създаване на предупреждение
+        create_announcement: Създаване на оповестяване
+        create_custom_emoji: Създаване на персонализирано емоджи
+        create_ip_block: Създаване на IP правило
+        demote_user: Понижаване на потребител
+        destroy_announcement: Изтриване на оповестяване
+        destroy_custom_emoji: Изтриване на персонализирано емоджи
+        destroy_status: Изтриване на статус
+        disable_2fa_user: Деактивиране на 2FA
+        disable_custom_emoji: Деактивиране на персонализирано емоджи
+        disable_user: Деактивиране на потребител
+        enable_custom_emoji: Активиране на персонализирано емоджи
+        enable_user: Активиране на потребител
+        promote_user: Повишаване на потребител
+        remove_avatar_user: Премахване на аватар
+        reopen_report: Повторно отваряне на доклад
+        reset_password_user: Нулиране на парола
   application_mailer:
     settings: 'Промяна на предпочитанията за e-mail: %{link}'
     view: 'Преглед:'
@@ -132,5 +298,4 @@ bg:
   two_factor_authentication:
     disable: Деактивирай
   users:
-    invalid_email: E-mail адресът е невалиден
     invalid_otp_token: Невалиден код
diff --git a/config/locales/bn.yml b/config/locales/bn.yml
index 0cf936d68..922a081e8 100644
--- a/config/locales/bn.yml
+++ b/config/locales/bn.yml
@@ -21,9 +21,7 @@ bn:
     federation_hint_html: "%{instance}তে একটা নিবন্ধন থাকলে আপনি যেকোনো মাস্টাডন বা এধরণের অন্যান্য সার্ভারের মানুষের সাথে যুক্ত হতে পারবেন ।"
     get_apps: মোবাইল এপ্প একটা ব্যবহার করতে পারেন
     hosted_on: এই মাস্টাডনটি আছে %{domain} এ
-    instance_actor_flash: 'এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত।
-
-'
+    instance_actor_flash: "এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। \n"
     learn_more: বিস্তারিত জানুন
     privacy_policy: গোপনীয়তা নীতি
     see_whats_happening: কী কী হচ্ছে দেখুন
@@ -77,7 +75,6 @@ bn:
       other: লেখাগুলো
     posts_tab_heading: লেখাগুলো
     posts_with_replies: লেখা এবং মতামত
-    reserved_username: নামটি সংরক্ষিত
     roles:
       admin: পরিচালক
       bot: রোবট
@@ -234,17 +231,6 @@ bn:
         update_announcement: ঘোষণা আপডেট করুন
         update_custom_emoji: স্বনির্ধারিত ইমোজি আপডেট করুন
         update_status: স্থিতি আপডেট করুন
-      actions:
-        assigned_to_self_report: "%{name} তাদের জন্য %{target} রিপোর্ট অর্পণ করেছিলেন"
-        change_email_user: "%{name} %{target} ব্যবহারকারীর ইমেল ঠিকানা পরিবর্তন করেছেন"
-        confirm_user: "%{name} %{target} ব্যবহারকারীর ইমেল ঠিকানা নিশ্চিত করেছেন"
-        create_account_warning: "%{name} %{target} একটি সতর্কতা প্রেরণ করেছেন"
-        create_announcement: "%{name} একটি নতুন ঘোষণা তৈরি করেছেন %{target}"
-        create_custom_emoji: "%{name} নতুন ইমোজি আপলোড করেছেন %{target}"
-        create_domain_allow: "%{name} ডোমেন %{target} এর সঙ্গে ফেডারেশন অনুমোদিত করেছেন"
-        create_domain_block: "%{name} ডোমেন %{target} কে অবরুদ্ধ করেছেন"
-        create_email_domain_block: "%{name} ই-মেইল ডোমেন %{target} কে অবরুদ্ধ করেছেন"
-        demote_user: "%{name} ব্যবহারকারী %{target} কে হীনপদস্থ করেছেন"
     custom_emojis:
       destroyed_msg: ইমোজো সফলভাবে ধ্বংস হয়েছে!
       disable: অক্ষম
@@ -279,7 +265,6 @@ bn:
       feature_profile_directory: প্রোফাইল ডিরেক্টরি
       feature_registrations: নিবন্ধনগুলি
       feature_relay: ফেডারেশন রিলে
-      feature_spam_check: বিরোধী স্প্যাম
       feature_timeline_preview: পূর্বদর্শন সময়রেখা
       features: বৈশিষ্ট্যগুলি
       hidden_service: লুকানো সেবা সহ ফেডারেশন
diff --git a/config/locales/br.yml b/config/locales/br.yml
index 451bbade8..465049e9d 100644
--- a/config/locales/br.yml
+++ b/config/locales/br.yml
@@ -3,7 +3,6 @@ br:
   about:
     about_this: Diàr-benn
     active_count_after: oberiant
-    api: API
     apps: Arloadoù pellgomz
     apps_platforms: Ober get Mastodoñ àr iOS, Android ha savennoù arall
     contact: Darempred
@@ -36,7 +35,6 @@ br:
       other: Heulier·ez
       two: Heulier·ez
     following: O heuliañ
-    media: Media
     never_active: Birviken
     posts:
       few: Toud
@@ -50,7 +48,6 @@ br:
       admin: Merour
       bot: Robot
       group: Strollad
-      moderator: Mod
     unavailable: Profil dihegerz
     unfollow: Diheuliañ
   admin:
@@ -70,7 +67,6 @@ br:
       enabled: Gweredekaet
       followers: Heulier·ezed·ien
       header: Talbenn
-      ip: IP
       location:
         local: Lec'hel
         remote: A-bell
@@ -94,7 +90,6 @@ br:
       suspended: Astalet
       title: Kontoù
       username: Anv
-      web: Web
     action_logs:
       action_types:
         destroy_status: Dilemel ar statud
@@ -176,8 +171,6 @@ br:
       batch:
         delete: Dilemel
       deleted: Dilamet
-      media:
-        title: Media
       no_media: Media ebet
     tags:
       name: Ger-klik
@@ -185,15 +178,11 @@ br:
     warning_presets:
       add_new: Ouzhpenniñ unan nevez
       delete: Dilemel
-  application_mailer:
-    salutation: "%{name},"
   auth:
     change_password: Ger-tremen
     delete_account: Dilemel ar gont
     login: Mont tre
     logout: Digennaskañ
-    providers:
-      saml: SAML
     reset_password: Adderaouekaat ar ger-tremen
     security: Diogelroez
     setup:
@@ -217,11 +206,8 @@ br:
       about_x_years: "%{count}b"
       almost_x_years: "%{count}b"
       half_a_minute: Diouzhtu
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: Diouzhtu
       over_x_years: "%{count}b"
-      x_days: "%{count}d"
-      x_minutes: "%{count}m"
       x_months: "%{count}miz"
       x_seconds: "%{count}eil"
   deletes:
@@ -242,7 +228,6 @@ br:
     archive_takeout:
       date: Deiziad
       size: Ment
-    csv: CSV
     lists: Listennoù
   featured_tags:
     add_new: Ouzhpenniñ unan nevez
@@ -278,53 +263,19 @@ br:
       title: Heulier nevez
     mention:
       action: Respont
-  number:
-    human:
-      decimal_units:
-        format: "%n%u"
   otp_authentication:
     enable: Gweredekaat
     setup: Kefluniañ
-  pagination:
-    truncate: "&hellip;"
   relationships:
     followers: Heulier·ezed·ien
     following: O heuliañ
   sessions:
     browser: Merdeer
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Merdeer dianav
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     description: "%{browser} war %{platform}"
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
-      mac: macOS
       other: savenn dianav
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
   settings:
     account: Kont
     account_settings: Arventennoù ar gont
@@ -342,14 +293,7 @@ br:
         one: "%{count} skeudenn"
         other: "%{count} skeudenn"
         two: "%{count} skeudenn"
-      video:
-        few: "%{count} video"
-        many: "%{count} video"
-        one: "%{count} video"
-        other: "%{count} video"
-        two: "%{count} video"
     show_more: Diskouez muioc'h
-    title: '%{name}: "%{quote}"'
     visibilities:
       public: Publik
   stream_entries:
@@ -360,7 +304,6 @@ br:
   time:
     formats:
       default: "%He%M, %d %b %Y"
-      month: "%b %Y"
   two_factor_authentication:
     add: Ouzhpennañ
     disable: Diweredekaat
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index ee3c554b4..d8717ccf9 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -26,6 +26,8 @@ ca:
       S'utilitza per a propòsits de federació i no ha de ser bloquejat si no voleu bloquejar tota la instància, en aquest cas hauríeu d'utilitzar un bloqueig de domini.
     learn_more: Més informació
     privacy_policy: Política de privadesa
+    rules: Normes del servidor
+    rules_html: 'El de sota és un resum de les normes que has de seguir si vols tenir un compte en aquest servidor de Mastodon:'
     see_whats_happening: Mira què està passant
     server_stats: 'Estadístiques del servidor:'
     source_code: Codi font
@@ -78,7 +80,6 @@ ca:
       other: Tuts
     posts_tab_heading: Tuts
     posts_with_replies: Tuts i respostes
-    reserved_username: El nom d'usuari està reservat
     roles:
       admin: Administrador
       bot: Bot
@@ -229,6 +230,7 @@ ca:
         create_domain_block: Crea un bloqueig de domini
         create_email_domain_block: Crea un bloqueig de domini d'adreça de correu
         create_ip_block: Crear regla IP
+        create_unavailable_domain: Crea un domini no disponible
         demote_user: Degrada l'usuari
         destroy_announcement: Esborra l'anunci
         destroy_custom_emoji: Esborra l'emoji personalitzat
@@ -237,6 +239,7 @@ ca:
         destroy_email_domain_block: Esborra el bloqueig de domini de l'adreça de correu
         destroy_ip_block: Eliminar regla IP
         destroy_status: Esborra el tut
+        destroy_unavailable_domain: Esborra domini no disponible
         disable_2fa_user: Desactiva 2FA
         disable_custom_emoji: Desactiva l'emoji personalitzat
         disable_user: Deshabilita l'usuari
@@ -260,46 +263,48 @@ ca:
         update_domain_block: Actualitza el Bloqueig de Domini
         update_status: Actualitza l'estat
       actions:
-        assigned_to_self_report: "%{name} han assignat l'informe %{target} a ells mateixos"
-        change_email_user: "%{name} ha canviat l'adreça de correu electrònic del usuari %{target}"
-        confirm_user: "%{name} ha confirmat l'adreça de correu electrònic de l'usuari %{target}"
-        create_account_warning: "%{name} ha enviat un avís a %{target}"
-        create_announcement: "%{name} ha creat un nou anunci %{target}"
-        create_custom_emoji: "%{name} ha pujat un nou emoji %{target}"
-        create_domain_allow: "%{name} ha afegit a la llista blanca el domini %{target}"
-        create_domain_block: "%{name} ha blocat el domini %{target}"
-        create_email_domain_block: "%{name} ha afegit a la llista negra el domini del correu electrònic %{target}"
-        create_ip_block: "%{name} ha creat una regla IP per a %{target}"
-        demote_user: "%{name} ha degradat l'usuari %{target}"
-        destroy_announcement: "%{name} ha eliminat l'anunci %{target}"
-        destroy_custom_emoji: "%{name} ha destruït l'emoji %{target}"
-        destroy_domain_allow: "%{name} ha eliminat el domini %{target} de la llista blanca"
-        destroy_domain_block: "%{name} ha desblocat el domini %{target}"
-        destroy_email_domain_block: "%{name} ha afegit a la llista negra el domini de correu electrònic %{target}"
-        destroy_ip_block: "%{name} ha esborrat la regla IP per a %{target}"
-        destroy_status: "%{name} eliminat l'estat per %{target}"
-        disable_2fa_user: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}"
-        disable_custom_emoji: "%{name} ha desactivat l'emoji %{target}"
-        disable_user: "%{name} ha desactivat l'accés per a l'usuari %{target}"
-        enable_custom_emoji: "%{name} ha activat l'emoji %{target}"
-        enable_user: "%{name} ha activat l'accés per a l'usuari %{target}"
-        memorialize_account: "%{name} ha convertit el compte %{target} en una pàgina de memorial"
-        promote_user: "%{name} ha promogut l'usuari %{target}"
-        remove_avatar_user: "%{name} ha eliminat l'avatar de %{target}"
-        reopen_report: "%{name} ha reobert l'informe %{target}"
-        reset_password_user: "%{name} ha restablert la contrasenya de l'usuari %{target}"
-        resolve_report: "%{name} ha resolt l'informe %{target}"
-        sensitive_account: "%{name} ha marcat els mèdia de %{target} com a sensibles"
-        silence_account: "%{name} ha silenciat el compte de %{target}"
-        suspend_account: "%{name} ha suspès el compte de %{target}"
-        unassigned_report: "%{name} ha des-assignat l'informe %{target}"
-        unsensitive_account: "%{name} ha desmarcat els mèdia de %{target} com a sensibles"
-        unsilence_account: "%{name} ha silenciat el compte de %{target}"
-        unsuspend_account: "%{name} ha llevat la suspensió del compte de %{target}"
-        update_announcement: "%{name} ha actualitzat l'anunci %{target}"
-        update_custom_emoji: "%{name} ha actualitzat l'emoji %{target}"
-        update_domain_block: "%{name} ha actualitzat el bloqueig de domini per %{target}"
-        update_status: "%{name} estat actualitzat per %{target}"
+        assigned_to_self_report_html: "%{name} han assignat l'informe %{target} a ells mateixos"
+        change_email_user_html: "%{name} ha canviat l'adreça de correu electrònic del usuari %{target}"
+        confirm_user_html: "%{name} ha confirmat l'adreça de correu electrònic de l'usuari %{target}"
+        create_account_warning_html: "%{name} ha enviat un avís a %{target}"
+        create_announcement_html: "%{name} ha creat un nou anunci %{target}"
+        create_custom_emoji_html: "%{name} ha pujat un emoji nou %{target}"
+        create_domain_allow_html: "%{name} ha permès la federació amb el domini %{target}"
+        create_domain_block_html: "%{name} ha bloquejat el domini %{target}"
+        create_email_domain_block_html: "%{name} ha bloquejat el domini de correu electrònic %{target}"
+        create_ip_block_html: "%{name} ha creat una regla per a l'IP %{target}"
+        create_unavailable_domain_html: "%{name} ha aturat el lliurament al domini %{target}"
+        demote_user_html: "%{name} ha degradat l'usuari %{target}"
+        destroy_announcement_html: "%{name} ha eliminat l'anunci %{target}"
+        destroy_custom_emoji_html: "%{name} ha destruït l'emoji %{target}"
+        destroy_domain_allow_html: "%{name} no permet la federació amb el domini %{target}"
+        destroy_domain_block_html: "%{name} ha desbloquejat el domini %{target}"
+        destroy_email_domain_block_html: "%{name} ha desbloquejat el domini de correu electrònic %{target}"
+        destroy_ip_block_html: "%{name} ha esborrat la regla per a l'IP %{target}"
+        destroy_status_html: "%{name} ha eliminat el tut de %{target}"
+        destroy_unavailable_domain_html: "%{name} ha représ el lliurament delivery al domini %{target}"
+        disable_2fa_user_html: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}"
+        disable_custom_emoji_html: "%{name} ha desactivat l'emoji %{target}"
+        disable_user_html: "%{name} ha desactivat l'accés del usuari %{target}"
+        enable_custom_emoji_html: "%{name} ha activat l'emoji %{target}"
+        enable_user_html: "%{name} ha activat l'accés del usuari %{target}"
+        memorialize_account_html: "%{name} ha convertit el compte %{target} en una pàgina de memorial"
+        promote_user_html: "%{name} ha promogut l'usuari %{target}"
+        remove_avatar_user_html: "%{name} ha eliminat l'avatar de %{target}"
+        reopen_report_html: "%{name} ha reobert l'informe %{target}"
+        reset_password_user_html: "%{name} ha restablert la contrasenya de l'usuari %{target}"
+        resolve_report_html: "%{name} ha resolt l'informe %{target}"
+        sensitive_account_html: "%{name} ha marcat els mèdia de %{target} com a sensibles"
+        silence_account_html: "%{name} ha silenciat el compte de %{target}"
+        suspend_account_html: "%{name} ha suspès el compte de %{target}"
+        unassigned_report_html: "%{name} ha des-assignat l'informe %{target}"
+        unsensitive_account_html: "%{name} ha desmarcat com sensibles els mèdia de %{target}"
+        unsilence_account_html: "%{name} ha llevat el silenci del compte %{target}"
+        unsuspend_account_html: "%{name} ha llevat la suspensió del compte de %{target}"
+        update_announcement_html: "%{name} ha actualitzat l'anunci %{target}"
+        update_custom_emoji_html: "%{name} ha actualitzat l'emoji %{target}"
+        update_domain_block_html: "%{name} ha actualitzat el bloqueig de domini per a %{target}"
+        update_status_html: "%{name} ha actualitzat l'estat de %{target}"
       deleted_status: "(tut esborrat)"
       empty: No s’han trobat registres.
       filter_by_action: Filtra per acció
@@ -314,10 +319,12 @@ ca:
       new:
         create: Crea un anunci
         title: Nou anunci
+      publish: Publica-ho
       published_msg: L’anunci s’ha publicat amb èxit!
       scheduled_for: Programat per a %{time}
       scheduled_msg: Anunci programat per a ser publicat!
       title: Anuncis
+      unpublish: Despublicar
       unpublished_msg: L’anunci s’ha despublicat amb èxit!
       updated_msg: L'anunci s'ha actualitzat correctament!
     custom_emojis:
@@ -362,7 +369,6 @@ ca:
       feature_profile_directory: Directori de perfils
       feature_registrations: Registres
       feature_relay: Relay de la Federació
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Vista prèvia de línia de temps
       features: Característiques
       hidden_service: Federació amb serveis ocults
@@ -440,9 +446,31 @@ ca:
         create: Afegeix un domini
         title: Nova adreça de correu en la llista negra
       title: Llista negra de correus electrònics
+    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."
+      language: Per llenguatge
+      status: Estat
+      suppress: Suprimeix les recomanacions de seguiment
+      suppressed: Suprimit
+      title: Seguir les recomanacions
+      unsuppress: Restaurar les recomanacions de seguiment
     instances:
+      back_to_all: Totes
+      back_to_limited: Limitades
+      back_to_warning: Avís
       by_domain: Domini
+      delivery:
+        all: Totes
+        clear: Neteja els errors de lliurament
+        restart: Reinicia el lliurament
+        stop: Atura el lliurament
+        title: Lliurament
+        unavailable: No disponible
+        unavailable_message: El lliurament no està disponible
+        warning: Avís
       delivery_available: El lliurament està disponible
+      delivery_error_days: Dies de fallades de lliurament
+      delivery_error_hint: Si el lliurament no és possible per %{count} dies, serà automàticament marcat com a no lliurable.
       empty: No s'han trobat dominis.
       known_accounts:
         one: "%{count} compte conegut"
@@ -542,6 +570,13 @@ ca:
       unassign: Treu l'assignació
       unresolved: No resolt
       updated_at: Actualitzat
+    rules:
+      add_new: Afegir norma
+      delete: Suprimeix
+      description_html: Tot i que molts diuen que han llegit les normes i estan d'acord amb els termes del servei, normalment no les llegeixen fins que surgeix un problema. <strong>Fes que sigui més fàcil veure les normes del teu servidor d'una ullada proporcionant-les en una llista de punts.</strong> Intenta mantenir les normes individuals curtes i senzilles però sense dividir-les en massa parts separades.
+      edit: Edita la norma
+      empty: Encara no s'han definit les normes del servidor.
+      title: Normes del servidor
     settings:
       activity_api_enabled:
         desc_html: Nombre de tuts publicats localment, usuaris actius i registres nous en períodes setmanals
@@ -565,9 +600,6 @@ ca:
         users: Per als usuaris locals en línia
       domain_blocks_rationale:
         title: Mostra el raonament
-      enable_bootstrap_timeline_accounts:
-        desc_html: Fer que els nous usuaris segueixin automàticament als comptes configurats i la seva línia de temps no arrenqui buida
-        title: Activa els seguiments per defecte per els usuaris nous
       hero:
         desc_html: Es mostra en pàgina frontal. Recomanat al menys 600x100px. Si no es configura es mostrarà el del servidor
         title: Imatge d’heroi
@@ -621,9 +653,6 @@ ca:
         desc_html: Pots escriure la teva pròpia política de privadesa, els termes del servei o d'altres normes legals. Pots utilitzar etiquetes HTML
         title: Termes del servei personalitzats
       site_title: Nom del servidor
-      spam_check_enabled:
-        desc_html: Mastodon pot informar automàticament de comptes que envien repetits missatges no sol·licitats. Pot haver-hi falsos positius.
-        title: Anti-spam
       thumbnail:
         desc_html: S'utilitza per obtenir visualitzacions prèvies a través d'OpenGraph i API. Es recomana 1200x630px
         title: Miniatura del servidor
@@ -654,13 +683,18 @@ ca:
       no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
       title: Estats del compte
       with_media: Amb contingut multimèdia
+    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
+      rules_check:
+        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
     tags:
       accounts_today: Usos únics actuals
       accounts_week: Usos únics d'aquesta setmana
       breakdown: Desglossament de l’ús actual per origen
-      context: Context
-      directory: En el directori
-      in_directory: "%{count} en el directori"
       last_active: Darrer actiu
       most_popular: Més populars
       most_recent: Més recent
@@ -677,6 +711,7 @@ ca:
       add_new: Afegeix-ne un de nou
       delete: Esborra
       edit_preset: Edita l'avís predeterminat
+      empty: Encara no has definit cap preavís.
       title: Gestiona les configuracions predefinides dels avisos
   admin_mailer:
     new_pending_account:
@@ -1038,10 +1073,14 @@ ca:
       body: "%{name} t'ha mencionat en:"
       subject: "%{name} t'ha mencionat"
       title: Menció nova
+    poll:
+      subject: Ha finalitzat l'enquesta de %{name}
     reblog:
       body: "%{name} ha impulsat el teu estat:"
       subject: "%{name} ha impulsat el teu estat"
       title: Nou impuls
+    status:
+      subject: "%{name} ha publicat"
   notifications:
     email_events: Esdeveniments per a notificacions per correu electrònic
     email_events_hint: 'Selecciona els esdeveniments per als quals vols rebre notificacions:'
@@ -1190,8 +1229,6 @@ ca:
     relationships: Seguits i seguidors
     two_factor_authentication: Autenticació de dos factors
     webauthn_authentication: Claus de seguretat
-  spam_check:
-    spam_detected: Aquest és un informe automàtic. S'ha detectat spam.
   statuses:
     attached:
       audio:
@@ -1234,6 +1271,7 @@ ca:
     sign_in_to_participate: Inicia la sessió per participar a la conversa
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Directe
       private: Només seguidors
       private_long: Mostra només als seguidors
       public: Públic
@@ -1402,11 +1440,8 @@ ca:
       tips: Consells
       title: Benvingut a bord, %{name}!
   users:
-    blocked_email_provider: Aquest proveïdor de correu electrònic no és permés
     follow_limit_reached: No pots seguir més de %{limit} persones
     generic_access_help_html: Problemes accedint al teu compte? Pots contactar amb %{email} per a demanar assistència
-    invalid_email: L'adreça de correu no és correcta
-    invalid_email_mx: Sembla que l’adreça de correu electrònic no existeix
     invalid_otp_token: El codi de dos factors no és correcte
     invalid_sign_in_token: Codi de seguretat invàlid
     otp_lost_help_html: Si has perdut l'accés a tots dos pots contactar per %{email}
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 29ba79688..56a8aef17 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -1,7 +1,7 @@
 ---
 co:
   about:
-    about_hashtag_html: Quessi sò statuti pubblichi taggati cù <strong>#%{hashtag}</strong>. Pudete interagisce cù elli sì voi avete un contu in qualche parte di u fediverse.
+    about_hashtag_html: Quessi sò statuti pubblichi taggati cù <strong>#%{hashtag}</strong>. Pudete interagisce cù elli sì voi avete un contu in qualche parte di u fediversu.
     about_mastodon_html: 'A rete suciale di u futuru: micca pubblicità, micca surveglianza, cuncezzione etica, è dicentralizazione! Firmate in cuntrollu di i vostri dati cù Mastodon!'
     about_this: À prupositu
     active_count_after: attivi
@@ -26,6 +26,8 @@ co:
       Hè utilizatu da a federazione è ùn deve micca esse bluccatu eccettu s'e voi vulete bluccà tuttu u servore, in quellu casu duvereste utilizà un blucchime di duminiu.
     learn_more: Amparà di più
     privacy_policy: Pulitica di vita privata
+    rules: Regule di u servore
+    rules_html: 'Eccu un riassuntu di e regule da siguità s''e voi vulete creà un contu nant''à quessu servore di Mastodon:'
     see_whats_happening: Vede cio chì si passa
     server_stats: 'Statistiche di u servore:'
     source_code: Codice di fonte
@@ -78,7 +80,6 @@ co:
       other: Statuti
     posts_tab_heading: Statuti
     posts_with_replies: Statuti è risposte
-    reserved_username: Stu cugnome hè riservatu
     roles:
       admin: Amministratore
       bot: Bot
@@ -229,6 +230,7 @@ co:
         create_domain_block: Creà Blucchime di Duminiu
         create_email_domain_block: Creà Blucchime di Duminiu E-mail
         create_ip_block: Creà regula IP
+        create_unavailable_domain: Creà duminiu micca dispunibule
         demote_user: Ritrugadà Utilizatore
         destroy_announcement: Toglie Annunziu
         destroy_custom_emoji: Toglie Emoji Persunalizata
@@ -237,6 +239,7 @@ co:
         destroy_email_domain_block: Toglie blucchime di duminiu e-mail
         destroy_ip_block: Toglie regula IP
         destroy_status: Toglie u statutu
+        destroy_unavailable_domain: Toglie duminiu micca dispunibule
         disable_2fa_user: Disattivà l’identificazione à 2 fattori
         disable_custom_emoji: Disattivà Emoji Persunalizata
         disable_user: Disattivà Utilizatore
@@ -260,46 +263,48 @@ co:
         update_domain_block: Mette à Ghjornu Blucchime di Duminiu
         update_status: Cambià Statutu
       actions:
-        assigned_to_self_report: "%{name} s’hè assignatu u signalamentu %{target}"
-        change_email_user: "%{name} hà cambiatu l’indirizzu e-mail di %{target}"
-        confirm_user: "%{name} hà cunfirmatu l’indirizzu e-mail di %{target}"
-        create_account_warning: "%{name} hà mandatu un'avertimentu à %{target}"
-        create_announcement: "%{name} hà creatu u novu annunziu %{target}"
-        create_custom_emoji: "%{name} hà caricatu una nov’emoji %{target}"
-        create_domain_allow: "%{name} hà messu u duminiu %{target} nant’a lista bianca"
-        create_domain_block: "%{name} hà bluccatu u duminiu %{target}"
-        create_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista nera"
-        create_ip_block: "%{name} hà creatu a regula IP %{target}"
-        demote_user: "%{name} hà ritrugradatu l’utilizatore %{target}"
-        destroy_announcement: "%{name} hà sguassatu u novu annunziu %{target}"
-        destroy_custom_emoji: "%{name} hà sguassatu l'emoji %{target}"
-        destroy_domain_allow: "%{name} hà sguassatu u duminiu %{target} da a lista bianca"
-        destroy_domain_block: "%{name} hà sbluccatu u duminiu %{target}"
-        destroy_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista bianca"
-        destroy_ip_block: "%{name} hà toltu a regula IP %{target}"
-        destroy_status: "%{name} hà toltu u statutu di %{target}"
-        disable_2fa_user: "%{name} hà disattivatu l’identificazione à dui fattori per %{target}"
-        disable_custom_emoji: "%{name} hà disattivatu l’emoji %{target}"
-        disable_user: "%{name} hà disattivatu a cunnessione per %{target}"
-        enable_custom_emoji: "%{name} hà attivatu l’emoji %{target}"
-        enable_user: "%{name} hà attivatu a cunnessione per %{target}"
-        memorialize_account: "%{name} hà trasfurmatu u contu di %{target} in una pagina mimuriale"
-        promote_user: "%{name} hà prumossu %{target}"
-        remove_avatar_user: "%{name} hà toltu u ritrattu di %{target}"
-        reopen_report: "%{name} hà riapertu u signalamentu %{target}"
-        reset_password_user: "%{name} hà riinizializatu a chjave d’accessu di %{target}"
-        resolve_report: "%{name} hà chjosu u signalamentu %{target}"
-        sensitive_account: "%{name} hà marcatu i media di %{target} cum'è sensibili"
-        silence_account: "%{name} hà limitatu u contu di %{target}"
-        suspend_account: "%{name} hà suspesu u contu di %{target}"
-        unassigned_report: "%{name} hà disassignatu u signalamentu %{target}"
-        unsensitive_account: "%{name} hà sguassatu a marcatura di i media di %{target} cum'è sensibili"
-        unsilence_account: "%{name} hà fattu che u contu di %{target} ùn hè più limitatu"
-        unsuspend_account: "%{name} hà fattu che u contu di %{target} ùn hè più suspesu"
-        update_announcement: "%{name} hà cambiatu u novu annunziu %{target}"
-        update_custom_emoji: "%{name} hà messu à ghjornu l’emoji %{target}"
-        update_domain_block: "%{name} hà messu à ghjornu u blucchime di duminiu per %{target}"
-        update_status: "%{name} hà cambiatu u statutu di %{target}"
+        assigned_to_self_report_html: "%{name} s’hè assignatu u signalamentu %{target}"
+        change_email_user_html: "%{name} hà cambiatu l’indirizzu e-mail di %{target}"
+        confirm_user_html: "%{name} hà cunfirmatu l’indirizzu e-mail di %{target}"
+        create_account_warning_html: "%{name} hà mandatu un'avertimentu à %{target}"
+        create_announcement_html: "%{name} hà creatu u novu annunziu %{target}"
+        create_custom_emoji_html: "%{name} hà caricatu una nov’emoji %{target}"
+        create_domain_allow_html: "%{name} hà messu u duminiu %{target} nant’a lista bianca"
+        create_domain_block_html: "%{name} hà bluccatu u duminiu %{target}"
+        create_email_domain_block_html: "%{name} hà messu u duminiu e-mail %{target} nant’a lista nera"
+        create_ip_block_html: "%{name} hà creatu a regula IP %{target}"
+        create_unavailable_domain_html: "%{name} hà firmatu a distribuzione à u duminiu %{target}"
+        demote_user_html: "%{name} hà ritrugradatu l’utilizatore %{target}"
+        destroy_announcement_html: "%{name} hà sguassatu u novu annunziu %{target}"
+        destroy_custom_emoji_html: "%{name} hà sguassatu l'emoji %{target}"
+        destroy_domain_allow_html: "%{name} hà sguassatu u duminiu %{target} da a lista bianca"
+        destroy_domain_block_html: "%{name} hà sbluccatu u duminiu %{target}"
+        destroy_email_domain_block_html: "%{name} hà messu u duminiu e-mail %{target} nant’a lista bianca"
+        destroy_ip_block_html: "%{name} hà toltu a regula IP %{target}"
+        destroy_status_html: "%{name} hà toltu u statutu di %{target}"
+        destroy_unavailable_domain_html: "%{name} hà riprincipiatu a distribuzione à u duminiu %{target}"
+        disable_2fa_user_html: "%{name} hà disattivatu l’identificazione à dui fattori per %{target}"
+        disable_custom_emoji_html: "%{name} hà disattivatu l’emoji %{target}"
+        disable_user_html: "%{name} hà disattivatu a cunnessione per %{target}"
+        enable_custom_emoji_html: "%{name} hà attivatu l’emoji %{target}"
+        enable_user_html: "%{name} hà attivatu a cunnessione per %{target}"
+        memorialize_account_html: "%{name} hà trasfurmatu u contu di %{target} in una pagina mimuriale"
+        promote_user_html: "%{name} hà prumossu %{target}"
+        remove_avatar_user_html: "%{name} hà toltu u ritrattu di %{target}"
+        reopen_report_html: "%{name} hà riapertu u signalamentu %{target}"
+        reset_password_user_html: "%{name} hà riinizializatu a chjave d’accessu di %{target}"
+        resolve_report_html: "%{name} hà chjosu u signalamentu %{target}"
+        sensitive_account_html: "%{name} hà marcatu i media di %{target} cum'è sensibili"
+        silence_account_html: "%{name} hà limitatu u contu di %{target}"
+        suspend_account_html: "%{name} hà suspesu u contu di %{target}"
+        unassigned_report_html: "%{name} hà disassignatu u signalamentu %{target}"
+        unsensitive_account_html: "%{name} hà sguassatu a marcatura di i media di %{target} cum'è sensibili"
+        unsilence_account_html: "%{name} hà fattu che u contu di %{target} ùn hè più limitatu"
+        unsuspend_account_html: "%{name} hà fattu che u contu di %{target} ùn hè più suspesu"
+        update_announcement_html: "%{name} hà cambiatu u novu annunziu %{target}"
+        update_custom_emoji_html: "%{name} hà messu à ghjornu l’emoji %{target}"
+        update_domain_block_html: "%{name} hà messu à ghjornu u blucchime di duminiu per %{target}"
+        update_status_html: "%{name} hà cambiatu u statutu di %{target}"
       deleted_status: "(statutu sguassatu)"
       empty: Nunda trovu.
       filter_by_action: Filtrà da azzione
@@ -314,10 +319,12 @@ co:
       new:
         create: Creà un'annunziu
         title: Novu annunziu
+      publish: Pubblicà
       published_msg: Annunziu pubblicatu!
       scheduled_for: Prugrammatu per %{time}
       scheduled_msg: Annunziu prugrammatu per pubblicazione!
       title: Annunzii
+      unpublish: Annullà a pubblicazione
       unpublished_msg: Annunziu piattatu!
       updated_msg: Annunziu mudificatu!
     custom_emojis:
@@ -362,7 +369,6 @@ co:
       feature_profile_directory: Annuariu di i prufili
       feature_registrations: Arregistramenti
       feature_relay: Ripetitore di federazione
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Vista di a linea pubblica
       features: Funziunalità
       hidden_service: Federazione cù servizii piattati
@@ -402,6 +408,8 @@ co:
           silence: Silenzà
           suspend: Suspende
         title: Novu blucchime di duminiu
+      obfuscate: Uscurà u nome di duminiu
+      obfuscate_hint: Uscurà in parte u nome di duminiu indè a lista s'ella hè attivata l'affissera di a lista di limitazione di duminiu
       private_comment: Cummentariu privatu
       private_comment_hint: Cummentariu nant'à a limitazione di stu duminiu per l'usu internu di i muderatori.
       public_comment: Cummentariu pubblicu
@@ -438,9 +446,33 @@ co:
         create: Creà un blucchime
         title: Nova iscrizzione nant’a lista nera e-mail
       title: Lista nera e-mail
+    follow_recommendations:
+      language: Per a lingua
+      status: Statutu
+      suppress: Piattà a ricumandazione d'abbunamentu
+      suppressed: Piattate
+      title: Ricumandazione d'abbunamentu
+      unsuppress: Riattivà a ricumandazione d'abbunamentu
     instances:
+      back_to_all: Tutti
+      back_to_limited: Limitate
+      back_to_warning: Avertimenti
       by_domain: Duminiu
-      delivery_available: Rimessa dispunibule
+      delivery:
+        all: Tutti
+        clear: Sguassà l'errori di distribuzione
+        restart: Riprincipià a distribuzione
+        stop: Firmà a distribuzione
+        title: Distribuzione
+        unavailable: Indispunibule
+        unavailable_message: Distribuzione micca dispunibule
+        warning: Avertimentu
+        warning_message:
+          one: Errore di distribuzione per %{count} ghjornu
+          other: Errore di distribuzione per %{count} ghjorni
+      delivery_available: Distribuzione dispunibule
+      delivery_error_days: Ghjorni d'errori di a distribuzione
+      delivery_error_hint: S'ellu ùn si pò distribuì à u duminiu per %{count} ghjorni, sarà autumaticamente marcatu cum'è indistribuibile.
       empty: Mancun duminiu trovu.
       known_accounts:
         one: "%{count} contu cunnisciutu"
@@ -487,7 +519,7 @@ co:
     relays:
       add_new: Aghjunghje un ripetitore
       delete: Sguassà
-      description_html: Un <strong>ripetitore di federazione</strong> ghjè un servore intermediariu chì manda statuti pubblichi trà l'istanze abbunate. <strong>Pò aiutà l'istanze chjuche è mezane à scuprì u cuntinutu di u fediverse</strong> senza chì l'utilizatori appianu bisognu di seguità tutti i conti di l'altri servori.
+      description_html: Un <strong>ripetitore di federazione</strong> ghjè un servore intermediariu chì manda statuti pubblichi trà l'istanze abbunate. <strong>Pò aiutà l'istanze chjuche è mezane à scuprì u cuntinutu di u fediversu</strong> senza chì l'utilizatori appianu bisognu di seguità tutti i conti di l'altri servori.
       disable: Disattivà
       disabled: Disattivatu
       enable: Attivà
@@ -540,6 +572,11 @@ co:
       unassign: Disassignà
       unresolved: Micca sciolti
       updated_at: Messi à ghjornu
+    rules:
+      add_new: Aghjunghje regula
+      delete: Sguassà
+      edit: Mudificà regula
+      title: Regule di u servore
     settings:
       activity_api_enabled:
         desc_html: Numeri di statuti creati quì, utilizatori attivi, è arregistramenti novi tutte e settimane
@@ -563,8 +600,6 @@ co:
         users: À l'utilizatori lucali cunnettati
       domain_blocks_rationale:
         title: Vede ragiò
-      enable_bootstrap_timeline_accounts:
-        title: Attivà l'abbunamenti predefiniti per l'utilizatori novi
       hero:
         desc_html: Affissatu nant’a pagina d’accolta. Ricumandemu almenu 600x100px. S’ellu ùn hè micca definiti, a vignetta di u servore sarà usata
         title: Ritrattu di cuprendula
@@ -572,7 +607,7 @@ co:
         desc_html: Affissata nant'à parechje pagine. Almenu 293x205px ricumandatu. S'ella hè lasciata viota, a mascotta predefinita sarà utilizata
         title: Ritrattu di a mascotta
       peers_api_enabled:
-        desc_html: Indirizzi web stu servore hà vistu indè u fediverse
+        desc_html: Indirizzi web stu servore hà vistu indè u fediversu
         title: Pubblicà a lista di servori cunnisciuti
       preview_sensitive_media:
         desc_html: E priviste di i ligami nant'à l'altri siti mustreranu una vignetta ancu s'ellu hè marcatu cum'è sensibile u media
@@ -591,6 +626,7 @@ co:
           disabled: Nimu
           title: Auturizà l’invitazione da
         require_invite_text:
+          desc_html: Quandu l'arregistramenti necessitanu un'apprubazione manuale, fà chì u testu "Perchè vulete ghjunghje?" sia ubligatoriu invece d'esse facultativu
           title: Richiede chì i novi utilizatori empiinu una dumanda d'invitazione
       registrations_mode:
         modes:
@@ -617,9 +653,6 @@ co:
         desc_html: Quì pudete scrive e vostre regule di cunfidenzialità, cundizione d’usu o altre menzione legale. Pudete fà usu di marchi HTML
         title: Termini persunalizati
       site_title: Nome di u servore
-      spam_check_enabled:
-        desc_html: Mastodon pò autosilenzà è autosignalà conti, per esempiu ditettendu quelli chì mandanu missaghji micca sullicitati à ripetizione. Ci ponu esse falzi pusitivi.
-        title: Anti-spam
       thumbnail:
         desc_html: Utilizatu per viste cù OpenGraph è l’API. Ricumandemu 1200x630px
         title: Vignetta di u servore
@@ -650,13 +683,14 @@ co:
       no_status_selected: I statuti ùn sò micca stati mudificati perchè manc'unu era selezziunatu
       title: Statuti di u contu
       with_media: Cù media
+    system_checks:
+      rules_check:
+        action: Amministrà e regule di u servore
+        message_html: Ùn avete micca ancu difinitu di regula per u servore.
     tags:
       accounts_today: Usi unichi oghji
       accounts_week: Usi unichi sta settimana
       breakdown: Ditagli di l'usu d'oghji per origine
-      context: Cuntestu
-      directory: In l'annuariu
-      in_directory: "%{count} in l'annuariu"
       last_active: Ultima attività
       most_popular: Più pupulari
       most_recent: Più ricente
@@ -920,6 +954,8 @@ co:
     status: Statutu di a verificazione
     view_proof: Vede a prova
   imports:
+    errors:
+      over_rows_processing_limit: cuntene più di %{count} filari
     modes:
       merge: Unisce
       merge_long: Cunservà i dati esistenti è aghjunghje i novi
@@ -1032,10 +1068,14 @@ co:
       body: "%{name} v’hà mintuvatu·a indè :"
       subject: "%{name} v’hà mintuvatu·a"
       title: Nova menzione
+    poll:
+      subject: Un scandagliu da %{name} hè finitu
     reblog:
       body: 'U vostru statutu hè statu spartutu da %{name}:'
       subject: "%{name} hà spartutu u vostru statutu"
       title: Nova spartera
+    status:
+      subject: "%{name} hà appena pubblicatu"
   notifications:
     email_events: Avvenimenti da nutificà cù l'e-mail
     email_events_hint: 'Selezziunate l''avvenimenti per quelli vulete riceve nutificazione:'
@@ -1184,8 +1224,6 @@ co:
     relationships: Abbunamenti è abbunati
     two_factor_authentication: Identificazione à dui fattori
     webauthn_authentication: Chjave di sicurità
-  spam_check:
-    spam_detected: Quessu ghjè un riportu automaticu. Un spam hè statu ditettatu.
   statuses:
     attached:
       audio:
@@ -1228,6 +1266,7 @@ co:
     sign_in_to_participate: Cunnettatevi per participà à a cunversazione
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Direttu
       private: Solu per l’abbunati
       private_long: Mustrà solu à l’abbunati
       public: Pubblicu
@@ -1396,11 +1435,8 @@ co:
       tips: Cunsiglii
       title: Benvenutu·a, %{name}!
   users:
-    blocked_email_provider: Stu serviziu e-mail ùn hè micca auturizatu
     follow_limit_reached: Ùn pidete seguità più di %{limit} conti
     generic_access_help_html: Prublemi d'accessu à u vostru contu? Pudete cuntattà %{email} per ottene aiutu
-    invalid_email: L’indirizzu e-mail ùn hè currettu
-    invalid_email_mx: L'indirizzu e-mail ùn pare micca esiste
     invalid_otp_token: U codice d’identificazione ùn hè currettu
     invalid_sign_in_token: Codice di sicurità micca validu
     otp_lost_help_html: S’è voi avete persu i dui, pudete cuntattà %{email}
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index e54e63517..b49f70d11 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -26,6 +26,8 @@ cs:
       Používá se pro účely federace a nesmí být blokován, pokud nechcete blokovat celý server. V takovém případě použijte blokaci domény.
     learn_more: Zjistit více
     privacy_policy: Zásady ochrany osobních údajů
+    rules: Pravidla serveru
+    rules_html: 'Níže je shrnutí pravidel, která musíte dodržovat, pokud chcete mít účet na tomto Mastodon serveru:'
     see_whats_happening: Podívejte se, co se děje
     server_stats: 'Statistika serveru:'
     source_code: Zdrojový kód
@@ -66,7 +68,8 @@ cs:
       one: Sledující
       other: Sledujících
     following: Sledovaní
-    joined: Uživatelem od %{date}
+    instance_actor_flash: Tento účet je virtuální aktér, který představuje server samotný, nikoliv jednotlivého uživatele. Používá se pro účely federace a neměl by být pozastaven.
+    joined: Založen %{date}
     last_active: naposledy aktivní
     link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date}
     media: Média
@@ -85,7 +88,6 @@ cs:
       other: Tootů
     posts_tab_heading: Tooty
     posts_with_replies: Tooty a odpovědi
-    reserved_username: Toto uživatelské jméno je rezervováno
     roles:
       admin: Administrátor
       bot: Robot
@@ -106,6 +108,7 @@ cs:
       add_email_domain_block: Blokovat e-maily na této doméně
       approve: Schválit
       approve_all: Schválit vše
+      approved_msg: Žádost o registraci uživatele %{username} úspěšně schválena
       are_you_sure: Opravdu?
       avatar: Avatar
       by_domain: Doména
@@ -119,8 +122,10 @@ cs:
       confirm: Potvrdit
       confirmed: Potvrzeno
       confirming: Potvrzuji
+      delete: Smazat data
       deleted: Smazáno
       demote: Degradovat
+      destroyed_msg: Data účtu %{username} jsou nyní ve frontě k okamžitému smazání
       disable: Zablokovat
       disable_two_factor_authentication: Vypnout 2FA
       disabled: Blokováno
@@ -131,13 +136,15 @@ cs:
       email_status: Stav e-mailu
       enable: Povolit
       enabled: Povoleno
+      enabled_msg: Účet %{username} byl úspěšně rozmrazen
       followers: Sledující
       follows: Sleduje
       header: Záhlaví
       inbox_url: URL příchozí schránky
+      invite_request_text: Důvody založení
       invited_by: Pozván/a uživatelem
       ip: IP adresa
-      joined: Uživatelem od
+      joined: Založen
       location:
         all: Všechny
         local: Místní
@@ -146,6 +153,8 @@ cs:
       login_status: Stav přihlášení
       media_attachments: Mediální přílohy
       memorialize: Změnit na „in memoriam“
+      memorialized: In memoriam
+      memorialized_msg: Účet %{username} úspěšně změněn na „in memoriam“
       moderation:
         active: Aktivní
         all: Vše
@@ -166,10 +175,14 @@ cs:
       public: Veřejný
       push_subscription_expires: Odebírání PuSH expiruje
       redownload: Obnovit profil
+      redownloaded_msg: Profil účtu %{username} byl úspěšně obnoven ze zdroje
       reject: Zamítnout
       reject_all: Zamítnout vše
+      rejected_msg: Žádost o registraci uživatele %{username} úspěšně zamítnuta
       remove_avatar: Odstranit avatar
       remove_header: Odstranit záhlaví
+      removed_avatar_msg: Úspěšně odstraněn avatar uživatele %{username}
+      removed_header_msg: Úspěšně odstraněn obrázek záhlaví uživatele %{username}
       resend_confirmation:
         already_confirmed: Tento uživatel je již potvrzen
         send: Znovu odeslat potvrzovací e-mail
@@ -186,6 +199,8 @@ cs:
       search: Hledat
       search_same_email_domain: Ostatní uživatelé s e-mailem na stejné doméně
       search_same_ip: Další uživatelé se stejnou IP adresou
+      sensitive: Citlivý
+      sensitized: označen jako citlivý
       shared_inbox_url: URL sdílené příchozí schránky
       show:
         created_reports: Vytvořená hlášení
@@ -195,13 +210,19 @@ cs:
       statuses: Tooty
       subscribe: Odebírat
       suspended: Uživatel pozastaven
+      suspension_irreversible: Data tohoto účtu byla nevratně smazána. Účet můžete obnovit, aby byl použitelný, ale nebudou obnovena žádná jeho dřívější data.
+      suspension_reversible_hint_html: Účet byl pozastaven a jeho data budou kompletně smazána %{date}. Do té doby může být tento účet kompletně obnoven do původního stavu. Chcete-li smazat všechna data účtu ihned, můžete tak učinit níže.
       time_in_queue: Čeká ve frontě %{time}
       title: Účty
       unconfirmed_email: Nepotvrzený e-mail
+      undo_sensitized: Vrátit zpět citlivost
       undo_silenced: Zrušit ztišení
       undo_suspension: Zrušit pozastavení
+      unsilenced_msg: Omezení účtu %{username} úspěšně odstraněno
       unsubscribe: Přestat odebírat
+      unsuspended_msg: Úspěšně obnoven účet %{username}
       username: Uživatelské jméno
+      view_domain: Zobrazit souhrn domény
       warn: Varovat
       web: Web
       whitelisted: Na bílé listině
@@ -216,67 +237,81 @@ cs:
         create_domain_allow: Povolit doménu
         create_domain_block: Zablokovat doménu
         create_email_domain_block: Zablokovat e-maily na doméně
+        create_ip_block: Vytvořit IP pravidlo
+        create_unavailable_domain: Vytvořit nedostupnou doménu
         demote_user: Snížit roli uživatele
         destroy_announcement: Odstranit oznámení
         destroy_custom_emoji: Odstranit vlastní emoji
         destroy_domain_allow: Odstranit povolenou doménu
         destroy_domain_block: Odstranit blokování domény
         destroy_email_domain_block: Odstranit blokování e-mailů na doméně
+        destroy_ip_block: Smazat IP pravidlo
         destroy_status: Odstranit stav
+        destroy_unavailable_domain: Smazat nedostupnou doménu
         disable_2fa_user: Vypnout 2FA
         disable_custom_emoji: Zakázat vlastní emoji
         disable_user: Deaktivovat uživatele
         enable_custom_emoji: Povolit vlastní emoji
         enable_user: Povolit uživatele
+        memorialize_account: Změna na „in memoriam“
         promote_user: Povýšit uživatele
         remove_avatar_user: Odstranit avatar
         reopen_report: Znovu otevřít hlášení
         reset_password_user: Obnovit heslo
         resolve_report: Označit hlášení jako vyřešené
+        sensitive_account: Označit média ve vašem účtu jako citlivá
         silence_account: Ztišit účet
         suspend_account: Pozastavit účet
         unassigned_report: Zrušit přiřazení hlášení
+        unsensitive_account: Zrušit označení médií ve vašem účtu jako citlivých
         unsilence_account: Zrušit ztišení účtu
         unsuspend_account: Zrušit pozastavení účtu
         update_announcement: Aktualizovat oznámení
         update_custom_emoji: Aktualizovat vlastní emoji
+        update_domain_block: Změnit blokaci domény
         update_status: Aktualizovat stav
       actions:
-        assigned_to_self_report: Uživatel %{name} si přidělil hlášení %{target}
-        change_email_user: Uživatel %{name} změnil e-mailovou adresu uživatele %{target}
-        confirm_user: Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target}
-        create_account_warning: Uživatel %{name} poslal varování uživateli %{target}
-        create_announcement: Uživatel %{name} vytvořil nové oznámení %{target}
-        create_custom_emoji: Uživatel %{name} nahrál nové emoji %{target}
-        create_domain_allow: Uživatel %{name} přidal doménu %{target} na bílou listinu
-        create_domain_block: Uživatel %{name} zablokoval doménu %{target}
-        create_email_domain_block: Uživatel %{name} přidal e-mailovou doménu %{target} na černou listinu
-        demote_user: Uživatel %{name} degradoval uživatele %{target}
-        destroy_announcement: Uživatel %{name} odstranil oznámení %{target}
-        destroy_custom_emoji: Uživatel %{name} zničil emoji %{target}
-        destroy_domain_allow: Uživatel %{name} odebral doménu %{target} z bílé listiny
-        destroy_domain_block: Uživatel %{name} odblokoval doménu %{target}
-        destroy_email_domain_block: Uživatel %{name} odebral e-mailovou doménu %{target} z černé listiny
-        destroy_status: Uživatel %{name} odstranil toot uživatele %{target}
-        disable_2fa_user: Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target}
-        disable_custom_emoji: Uživatel %{name} zakázal emoji %{target}
-        disable_user: Uživatel %{name} zakázal přihlašování pro uživatele %{target}
-        enable_custom_emoji: Uživatel %{name} povolil emoji %{target}
-        enable_user: Uživatel %{name} povolil přihlašování pro uživatele %{target}
-        memorialize_account: Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku
-        promote_user: Uživatel %{name} povýšil uživatele %{target}
-        remove_avatar_user: Uživatel %{name} odstranil avatar uživatele %{target}
-        reopen_report: Uživatel %{name} znovu otevřel hlášení %{target}
-        reset_password_user: Uživatel %{name} obnovil heslo uživatele %{target}
-        resolve_report: Uživatel %{name} vyřešil hlášení %{target}
-        silence_account: Uživatel %{name} ztišil uživatele %{target}
-        suspend_account: Uživatel %{name} pozastavil účet uživatele %{target}
-        unassigned_report: Uživatel %{name} odebral hlášení %{target}
-        unsilence_account: Uživatel %{name} zrušil ztišení uživatele %{target}
-        unsuspend_account: Uživatel %{name} zrušil pozastavení účtu uživatele %{target}
-        update_announcement: Uživatel %{name} aktualizoval oznámení %{target}
-        update_custom_emoji: Uživatel %{name} aktualizoval emoji %{target}
-        update_status: Uživatel %{name} aktualizoval toot uživatele %{target}
+        assigned_to_self_report_html: Uživatel %{name} si přidělil hlášení %{target}
+        change_email_user_html: Uživatel %{name} změnil e-mailovou adresu uživatele %{target}
+        confirm_user_html: Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target}
+        create_account_warning_html: Uživatel %{name} poslal varování uživateli %{target}
+        create_announcement_html: Uživatel %{name} vytvořil nové oznámení %{target}
+        create_custom_emoji_html: Uživatel %{name} nahrál nové emoji %{target}
+        create_domain_allow_html: Uživatel %{name} přidal doménu %{target} na bílou listinu
+        create_domain_block_html: Uživatel %{name} zablokoval doménu %{target}
+        create_email_domain_block_html: Uživatel %{name} přidal e-mailovou doménu %{target} na černou listinu
+        create_ip_block_html: "%{name} vytvořil pravidlo pro IP %{target}"
+        create_unavailable_domain_html: "%{name} zastavil doručování na doménu %{target}"
+        demote_user_html: Uživatel %{name} degradoval uživatele %{target}
+        destroy_announcement_html: Uživatel %{name} odstranil oznámení %{target}
+        destroy_custom_emoji_html: Uživatel %{name} zničil emoji %{target}
+        destroy_domain_allow_html: Uživatel %{name} odebral doménu %{target} z bílé listiny
+        destroy_domain_block_html: Uživatel %{name} odblokoval doménu %{target}
+        destroy_email_domain_block_html: Uživatel %{name} odebral e-mailovou doménu %{target} z černé listiny
+        destroy_ip_block_html: "%{name} odstranil pravidlo pro IP %{target}"
+        destroy_status_html: Uživatel %{name} odstranil toot uživatele %{target}
+        disable_2fa_user_html: Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target}
+        disable_custom_emoji_html: Uživatel %{name} zakázal emoji %{target}
+        disable_user_html: Uživatel %{name} zakázal přihlašování pro uživatele %{target}
+        enable_custom_emoji_html: Uživatel %{name} povolil emoji %{target}
+        enable_user_html: Uživatel %{name} povolil přihlašování pro uživatele %{target}
+        memorialize_account_html: Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku
+        promote_user_html: Uživatel %{name} povýšil uživatele %{target}
+        remove_avatar_user_html: Uživatel %{name} odstranil avatar uživatele %{target}
+        reopen_report_html: Uživatel %{name} znovu otevřel hlášení %{target}
+        reset_password_user_html: Uživatel %{name} obnovil heslo uživatele %{target}
+        resolve_report_html: Uživatel %{name} vyřešil hlášení %{target}
+        sensitive_account_html: "%{name} označil média účtu %{target} jako citlivá"
+        silence_account_html: Uživatel %{name} ztišil uživatele %{target}
+        suspend_account_html: Uživatel %{name} pozastavil účet uživatele %{target}
+        unassigned_report_html: Uživatel %{name} odebral hlášení %{target}
+        unsensitive_account_html: "%{name} zrušil označení médií účtu %{target} jako citlivých"
+        unsilence_account_html: Uživatel %{name} zrušil ztišení uživatele %{target}
+        unsuspend_account_html: Uživatel %{name} zrušil pozastavení účtu uživatele %{target}
+        update_announcement_html: Uživatel %{name} aktualizoval oznámení %{target}
+        update_custom_emoji_html: Uživatel %{name} aktualizoval emoji %{target}
+        update_domain_block_html: "%{name} aktualizoval blokaci domény %{target}"
+        update_status_html: Uživatel %{name} aktualizoval toot uživatele %{target}
       deleted_status: "(smazaný toot)"
       empty: Nebyly nalezeny žádné záznamy.
       filter_by_action: Filtrovat podle akce
@@ -291,10 +326,12 @@ cs:
       new:
         create: Vytvořit oznámení
         title: Nové oznámení
+      publish: Zveřejnit
       published_msg: Oznámení bylo úspěšně zveřejněno
       scheduled_for: Naplánováno na %{time}
       scheduled_msg: Zveřejnění oznámení bylo naplánováno
       title: Oznámení
+      unpublish: Skrýt
       unpublished_msg: Zveřejněné oznámení bylo skryto
       updated_msg: Oznámení bylo úspěšně aktualizováno
     custom_emojis:
@@ -339,7 +376,6 @@ cs:
       feature_profile_directory: Adresář profilů
       feature_registrations: Registrace
       feature_relay: Federovací most
-      feature_spam_check: Antispam
       feature_timeline_preview: Náhled časové osy
       features: Vlastnosti
       hidden_service: Federace se skrytými službami
@@ -379,6 +415,8 @@ cs:
           silence: Ztišit
           suspend: Pozastavit
         title: Nová blokace domény
+      obfuscate: Obfuskovat doménu
+      obfuscate_hint: Částečně zkreslit název domény v seznamu, pokud je povoleno zveřejnění seznamu omezených domén
       private_comment: Soukromý komentář
       private_comment_hint: Komentář o tomto omezení domény pro vnitřní použití moderátory.
       public_comment: Veřejný komentář
@@ -417,9 +455,19 @@ cs:
         create: Přidat doménu
         title: Nová položka pro černou listinu e-mailů
       title: Černá listina e-mailů
+    follow_recommendations:
+      description_html: "<strong>Doporučená sledování pomáhají novým uživatelům rychle najít zajímavý obsah</strong>. Pokud uživatel neinteragoval s ostatními natolik, aby mu byla vytvořena doporučená sledování na míru, jsou použity tyto účty. Jsou přepočítávány na denní bázi ze směsi účtů s největším nedávným zapojením a nejvyšším počtem místních sledovatelů pro daný jazyk."
+      language: Pro jazyk
+      status: Stav
+      suppress: Potlačit doporučení sledování
+      suppressed: Potlačeno
+      title: Doporučená sledování
+      unsuppress: Obnovit doporučení sledování
     instances:
       by_domain: Doména
       delivery_available: Doručení je k dispozici
+      delivery_error_hint: Není-li možné doručení po dobu %{count} dnů, bude automaticky označen za nedoručitelný.
+      empty: Nebyly nalezeny žádné domény.
       known_accounts:
         few: "%{count} známé účty"
         many: "%{count} známých účtů"
@@ -445,6 +493,21 @@ cs:
         expired: Vypršené
         title: Filtrovat
       title: Pozvánky
+    ip_blocks:
+      add_new: Vytvořit pravidlo
+      created_msg: Nové IP pravidlo úspěšně přidáno
+      delete: Smazat
+      expires_in:
+        '1209600': 2 týdny
+        '15778476': 6 měsíců
+        '2629746': 1 měsíc
+        '31556952': 1 rok
+        '86400': 1 den
+        '94670856': 3 roky
+      new:
+        title: Vytvořit nové IP pravidlo
+      no_ip_block_selected: Nebyla změněna žádná IP pravidla, protože nebylo žádné zaškrtnuto
+      title: IP pravidla
     pending_accounts:
       title: Čekající účty (%{count})
     relationships:
@@ -488,6 +551,8 @@ cs:
       comment:
         none: Žádné
       created_at: Nahlášené
+      forwarded: Přeposláno
+      forwarded_to: Přeposláno na %{domain}
       mark_as_resolved: Označit jako vyřešené
       mark_as_unresolved: Označit jako nevyřešené
       notes:
@@ -507,10 +572,17 @@ cs:
       unassign: Odebrat
       unresolved: Nevyřešeno
       updated_at: Aktualizováno
+    rules:
+      add_new: Přidat pravidlo
+      delete: Smazat
+      description_html: Přestože většina tvrdí, že četla a souhlasí s podmínkami služby, lidé je obvykle nepročtou dříve, než vznikne problém. <strong>Usnadněte prohlížení pravidel vašeho serveru jejich poskytnutím v odrážkovém seznamu.</strong> Snažte se držet jednotlivá pravidla krátká a jednoduchá, ale zároveň je nerozdělovat do mnoha samostatných položek.
+      edit: Upravit pravidlo
+      empty: Zatím nebyla definována žádná pravidla serveru.
+      title: Pravidla serveru
     settings:
       activity_api_enabled:
         desc_html: Počty lokálně publikovaných tootů, aktivních uživatelů a nových registrací, v týdenních intervalech
-        title: Publikovat hromadné statistiky o uživatelské aktivitě
+        title: Publikovat hromadné statistiky o uživatelské aktivitě v API
       bootstrap_timeline_accounts:
         desc_html: Je-li uživatelských jmen více, oddělte je čárkami. Lze zadat pouze místní a odemčené účty. Je-li seznam prázdný, jsou výchozí hodnotou všichni místní administrátoři.
         title: Výchozí sledovaní pro nové uživatele
@@ -530,8 +602,6 @@ cs:
         users: Přihlášeným místním uživatelům
       domain_blocks_rationale:
         title: Zobrazit odůvodnění
-      enable_bootstrap_timeline_accounts:
-        title: Povolit výchozí sledování pro nové uživatele
       hero:
         desc_html: Zobrazuje se na hlavní stránce. Doporučujeme rozlišení alespoň 600x100 px. Pokud toto není nastaveno, bude zobrazena miniatura serveru
         title: Hlavní obrázek
@@ -540,7 +610,7 @@ cs:
         title: Obrázek maskota
       peers_api_enabled:
         desc_html: Domény, na které tento server narazil ve fedivesmíru
-        title: Zveřejnit seznam objevených serverů
+        title: Zveřejnit seznam objevených serverů v API
       preview_sensitive_media:
         desc_html: Náhledy odkazů na jiných stránkách budou zobrazeny i pokud jsou media označena jako citlivá
         title: Zobrazovat v náhledech OpenGraph i citlivá média
@@ -557,6 +627,9 @@ cs:
         min_invite_role:
           disabled: Nikdo
           title: Povolit pozvánky od
+        require_invite_text:
+          desc_html: Když jsou registrace schvalovány ručně, udělat odpověď na otázku "Proč se chcete připojit?" povinnou
+          title: Požadovat od nových uživatelů zdůvodnění založení
       registrations_mode:
         modes:
           approved: Pro registraci je vyžadováno schválení
@@ -582,9 +655,6 @@ cs:
         desc_html: Můžete si napsat vlastní zásady ochrany osobních údajů, podmínky používání či jiné právní dokumenty. Můžete použít HTML značky
         title: Vlastní podmínky používání
       site_title: Název serveru
-      spam_check_enabled:
-        desc_html: Mastodon může automaticky nahlašovat účty, které opakovaně odesílají nevyžádané zprávy. Mohou se najít špatné shody.
-        title: Antispamová automatizace
       thumbnail:
         desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučujeme rozlišení 1200x630px
         title: Miniatura serveru
@@ -600,6 +670,7 @@ cs:
         title: Populární hashtagy
     site_uploads:
       delete: Odstranit nahraný soubor
+      destroyed_msg: Upload stránky byl úspěšně smazán!
     statuses:
       back_to_account: Zpět na stránku účtu
       batch:
@@ -614,13 +685,18 @@ cs:
       no_status_selected: Nebyly změněny žádné tooty, neboť žádné nebyly vybrány
       title: Tooty účtu
       with_media: S médii
+    system_checks:
+      database_schema_check:
+        message_html: Na spuštění čekají databázové migrace. Nechte je prosím proběhnout pro zajištění očekávaného chování aplikace
+      rules_check:
+        action: Spravovat pravidla serveru
+        message_html: Nedefinovali jste žádná pravidla serveru.
+      sidekiq_process_check:
+        message_html: Pro %{value} frontu/fronty neběží žádný Sidekiq proces. Zkontrolujte prosím svou Sidekiq konfiguraci
     tags:
       accounts_today: Dnešní jedinečná použití
       accounts_week: Jedinečná použití tento týden
       breakdown: Přehled dnešního používání podle zdroje
-      context: Kontext
-      directory: V adresáři
-      in_directory: "%{count} v adresáři"
       last_active: Naposledy aktivní
       most_popular: Nejpopulárnější
       most_recent: Nejnovější
@@ -637,6 +713,7 @@ cs:
       add_new: Přidat nové
       delete: Smazat
       edit_preset: Upravit předlohu pro varování
+      empty: Zatím jste nedefinovali žádné předlohy varování.
       title: Spravovat předlohy pro varování
   admin_mailer:
     new_pending_account:
@@ -695,8 +772,11 @@ cs:
       prefix_sign_up: Registrujte se na Mastodonu již dnes!
       suffix: S účtem budete moci sledovat lidi, psát příspěvky a vyměňovat si zprávy s uživateli z kteréhokoliv serveru Mastodon a dalších služeb!
     didnt_get_confirmation: Neobdrželi jste pokyny pro potvrzení?
+    dont_have_your_security_key: Nemáte svůj bezpečnostní klíč?
     forgot_password: Zapomněli jste heslo?
     invalid_reset_password_token: Token pro obnovení hesla je buď neplatný, nebo vypršel. Vyžádejte si prosím nový.
+    link_to_otp: Zadat kód dvoufázového ověření z mobilu nebo záložní kód
+    link_to_webauth: Použít svůj bezpečnostní klíč
     login: Přihlásit
     logout: Odhlásit
     migrate_account: Přesunout se na jiný účet
@@ -721,7 +801,9 @@ cs:
       functional: Váš účet je zcela funkční.
       pending: Vaše žádost čeká na schválení naším personálem. To může nějakou dobu trvat. Pokud bude váš požadavek schválen, obdržíte e-mail.
       redirecting_to: Váš účet je neaktivní, protože je právě přesměrován na účet %{acct}.
+    too_fast: Formulář byl odeslán příliš rychle, zkuste to znovu.
     trouble_logging_in: Problémy s přihlášením?
+    use_security_key: Použít bezpečnostní klíč
   authorize_follow:
     already_following: Tento účet již sledujete
     already_requested: Tomuto účtu už jste žádost o sledování zaslali
@@ -746,6 +828,7 @@ cs:
   date:
     formats:
       default: "%-d. %b %Y"
+      with_month_name: "%d. %B %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count} hod"
@@ -810,6 +893,7 @@ cs:
       request: Vyžádat váš archiv
       size: Velikost
     blocks: Blokujete
+    bookmarks: Záložky
     csv: CSV
     domain_blocks: Blokování domén
     lists: Seznamy
@@ -874,9 +958,13 @@ cs:
     inactive: Neaktivní
     publicize_checkbox: 'A tootnout tohle:'
     publicize_toot: 'Je to dokázáno! Na %{service} jsem %{username}: %{url}'
+    remove: Odstranit důkaz z účtu
+    removed: Úspěšně odstraněn důkaz z účtu
     status: Stav ověření
     view_proof: Zobrazit důkaz
   imports:
+    errors:
+      over_rows_processing_limit: obsahuje více než %{count} řádků
     modes:
       merge: Sloučit
       merge_long: Ponechat existující záznamy a přidat nové
@@ -886,6 +974,7 @@ cs:
     success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas
     types:
       blocking: Seznam blokovaných
+      bookmarks: Záložky
       domain_blocking: Seznam blokovaných domén
       following: Seznam sledovaných
       muting: Seznam ignorovaných
@@ -956,6 +1045,10 @@ cs:
       redirect: Profil vašeho aktuálního účtu bude aktualizován s oznámením o přesměrování a bude vyloučen z výsledků hledání
   moderation:
     title: Moderování
+  move_handler:
+    carry_blocks_over_text: Tento účet se přesunul z %{acct}, který jste blokovali.
+    carry_mutes_over_text: Tento účet se přesunul z %{acct}, který jste skryli.
+    copy_account_note_text: 'Tento účet se přesunul z %{acct}, zde byly Vaše předchozí poznámky o něm:'
   notification_mailer:
     digest:
       action: Zobrazit všechna oznámení
@@ -990,10 +1083,14 @@ cs:
       body: 'Uživatel %{name} vás zmínil v:'
       subject: Uživatel %{name} vás zmínil
       title: Nová zmínka
+    poll:
+      subject: Anketa od %{name} skončila
     reblog:
       body: 'Uživatel %{name} boostnul váš toot:'
       subject: Uživatel %{name} boostnul váš toot
       title: Nový boost
+    status:
+      subject: Nový toot od %{name}
   notifications:
     email_events: Události pro e-mailová oznámení
     email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:'
@@ -1008,6 +1105,14 @@ cs:
           quadrillion: bld
           thousand: tis
           trillion: bil
+  otp_authentication:
+    code_hint: Pro potvrzení zadejte kód vygenerovaný Vaší ověřovací aplikací
+    description_html: Zapnete-li <strong>dvoufázové ověřování</strong> pomocí ověřovací aplikace, k přihlášení budete u sebe muset mít svůj mobil, který pro Vás bude generovat kódy k opsání.
+    enable: Zapnout
+    instructions_html: "<strong>Naskenujte tento QR kód do Google Authenticator nebo podobné TOTP aplikace na Vašem telefonu</strong>. Následně bude tato aplikace generovat kódy, které budete zadávat při přihlašování."
+    manual_instructions: 'Nemůžete-li načíst QR kód a potřebujete ho zadat ručně, zde je tajemství v textové podobě:'
+    setup: Nastavit
+    wrong_code: Zadaný kód je neplatný! Je čas na serveru i zařízení generujícím kód správný?
   pagination:
     newer: Novější
     next: Další
@@ -1036,6 +1141,7 @@ cs:
   relationships:
     activity: Aktivita účtu
     dormant: Nečinné
+    follow_selected_followers: Sledovat vybrané sledující
     followers: Sledující
     following: Sledovaní
     invited: Pozvánka odeslána
@@ -1075,7 +1181,7 @@ cs:
     browser: Prohlížeč
     browsers:
       alipay: Alipay
-      blackberry: Blackberry
+      blackberry: BlackBerry
       chrome: Chrome
       edge: Microsoft Edge
       electron: Electron
@@ -1132,10 +1238,14 @@ cs:
     profile: Profil
     relationships: Sledovaní a sledující
     two_factor_authentication: Dvoufázové ověřování
-  spam_check:
-    spam_detected: Tohle je automatizované hlášení. Byl detekován spam.
+    webauthn_authentication: Bezpečnostní klíče
   statuses:
     attached:
+      audio:
+        few: "%{count} audia"
+        many: "%{count} audií"
+        one: "%{count} audio"
+        other: "%{count} audií"
       description: 'Přiloženo: %{attached}'
       image:
         few: "%{count} obrázky"
@@ -1177,10 +1287,13 @@ cs:
         other: "%{count} hlasů"
       vote: Hlasovat
     show_more: Zobrazit více
+    show_newer: Zobrazit novější
+    show_older: Zobrazit starší
     show_thread: Zobrazit vlákno
     sign_in_to_participate: Chcete-li se zúčastnit této konverzace, přihlaste se
     title: "%{name}: „%{quote}“"
     visibilities:
+      direct: Přímé
       private: Pouze pro sledující
       private_long: Zobrazit pouze sledujícím
       public: Veřejné
@@ -1285,14 +1398,20 @@ cs:
       default: "%d. %b %Y, %H:%M"
       month: "%b %Y"
   two_factor_authentication:
+    add: Přidat
     disable: Vypnout
+    disabled_success: Dvoufázové ověření bylo úspěšně vypnuto
+    edit: Upravit
     enabled: Dvoufázové ověřování je zapnuto
     enabled_success: Dvoufázové ověřování bylo úspěšně zapnuto
     generate_recovery_codes: Vygenerovat záložní kódy
     lost_recovery_codes: Záložní kódy vám dovolí dostat se k vašemu účtu, pokud ztratíte telefon. Ztratíte-li záložní kódy, můžete je zde znovu vygenerovat. Vaše staré záložní kódy budou zneplatněny.
+    methods: Dvoufázové metody
+    otp: Ověřovací aplikace
     recovery_codes: Záložní kódy pro obnovu
     recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerovány
     recovery_instructions_html: Ztratíte-li někdy přístup ke svému telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. <strong>Uchovejte tyto kódy v bezpečí</strong>. Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty.
+    webauthn: Bezpečnostní klíče
   user_mailer:
     backup_ready:
       explanation: Vyžádali jste si úplnou zálohu svého účtu Mastodon. Nyní je připravena ke stažení!
@@ -1307,6 +1426,7 @@ cs:
     warning:
       explanation:
         disable: Zatímco je váš účet zmrazen, zůstávají data vašeho účtu nedotčena. Dokud ale nebude odemčen, nemůžete vykonávat žádné akce.
+        sensitive: Vámi nahrané a odkazované mediální soubory budou považovány za citlivé.
         silence: Zatímco je váš účet omezen, mohou vaše tooty na tomto serveru vidět pouze lidé, kteří váš již sledují, a můžete být vyloučeni z různých veřejných seznamů. Ostatní vás však pořád mohou manuálně sledovat.
         suspend: Váš účet byl pozastaven a všechny vaše tooty a nahrané mediální soubory byly nenávratně odstraněny z tohoto serveru a serverů, na kterých jste měli sledující.
       get_in_touch: Můžete odpovědět na tento e-mail a spojit se s personálem serveru %{instance}.
@@ -1315,11 +1435,13 @@ cs:
       subject:
         disable: Váš účet %{acct} byl zmrazen
         none: Varování pro uživatele %{acct}
+        sensitive: Média z Vašeho účtu %{acct} byla označena za citlivá
         silence: Váš účet %{acct} byl omezen
         suspend: Váš účet %{acct} byl pozastaven
       title:
         disable: Účet zmrazen
         none: Varování
+        sensitive: Vaše média byla označena jako citlivá
         silence: Účet omezen
         suspend: Účet pozastaven
     welcome:
@@ -1342,7 +1464,6 @@ cs:
   users:
     follow_limit_reached: Nemůžete sledovat více než %{limit} lidí
     generic_access_help_html: Máte potíže s přístupem ke svému účtu? Napište nám o pomoc na %{email}.
-    invalid_email: E-mailová adresa je neplatná
     invalid_otp_token: Neplatný kód pro dvoufázové ověřování
     invalid_sign_in_token: Neplatný bezpečnostní kód
     otp_lost_help_html: Pokud jste ztratili přístup k oběma, spojte se s %{email}
@@ -1352,3 +1473,20 @@ cs:
   verification:
     explanation_html: 'Můžete se <strong>ověřit jako vlastník odkazů v metadatech profilu</strong>. Pro tento účel musí stránka v odkazu obsahovat odkaz zpět na váš profil na Mastodonu. Odkaz zpět <strong>musí</strong> mít atribut <code>rel="me"</code>. Na textu odkazu nezáleží. Zde je příklad:'
     verification: Ověření
+  webauthn_credentials:
+    add: Přidat nový bezpečnostní klíč
+    create:
+      error: Při přidávání bezpečnostního klíče došlo k chybě. Zkuste to prosím znovu.
+      success: Váš bezpečnostní klíč byl úspěšně přidán.
+    delete: Odstranit
+    delete_confirmation: Jste si jisti, že chcete odstranit tento bezpečnostní klíč?
+    description_html: Pokud povolíte <strong>ověřování bezpečnostním klíčem</strong>, přihlašování bude vyžadovat použití jednoho z vašich bezpečnostních klíčů.
+    destroy:
+      error: Při odstraňování bezpečnostního klíče došlo k chybě. Zkuste to prosím znovu.
+      success: Váš bezpečnostní klíč byl úspěšně odstraněn.
+    invalid_credential: Neplatný bezpečnostní klíč
+    nickname_hint: Zadejte přezdívku nového bezpečnostního klíče
+    not_enabled: Zatím jste nepovolili WebAuthn
+    not_supported: Tento prohlížeč nepodporuje bezpečnostní klíče
+    otp_required: Pro použití bezpečnostních klíčů prosím nejprve zapněte dvoufázové ověřování.
+    registered_on: Přidán %{date}
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 92ce53fe6..942be3b58 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -7,7 +7,6 @@ cy:
     active_count_after: yn weithredol
     active_footnote: Defnyddwyr Gweithredol Misol (DGM)
     administered_by: 'Gweinyddir gan:'
-    api: API
     apps: Apiau symudol
     apps_platforms: Defnyddio Mastodon o iOS, Android a phlatfformau eraill
     browse_directory: Pori cyfeiriadur proffil a hidlo wrth diddordebau
@@ -93,10 +92,8 @@ cy:
       zero: Tŵtiau
     posts_tab_heading: Tŵtiau
     posts_with_replies: Tŵtiau ac atebion
-    reserved_username: Mae'r enw defnyddiwr ar gadw
     roles:
       admin: Gweinyddwr
-      bot: Bot
       group: Grŵp
       moderator: Safonwr
     unavailable: Proffil ddim ar gael
@@ -144,7 +141,6 @@ cy:
       header: Pennawd
       inbox_url: URL Mewnflwch
       invited_by: Gwahoddwyd gan
-      ip: IP
       joined: Ymunodd
       location:
         all: Popeth
@@ -170,7 +166,6 @@ cy:
       pending: Yn aros am adolygiad
       perform_full_suspension: Atal
       promote: Hyrwyddo
-      protocol: Protocol
       public: Cyhoeddus
       push_subscription_expires: Tanysgrifiad gwthiadwy yn dod i ben
       redownload: Adnewyddu proffil
@@ -189,7 +184,6 @@ cy:
       roles:
         admin: Gweinyddwr
         moderator: Aroglygydd
-        staff: Staff
         user: Defnyddiwr
       search: Chwilio
       search_same_email_domain: Defnyddwyr eraill gyda'r un parth ebost
@@ -250,42 +244,6 @@ cy:
         update_announcement: Diweddaru Cyhoeddiad
         update_custom_emoji: Diweddaru Emoji Addasiedig
         update_status: Diweddaru Statws
-      actions:
-        assigned_to_self_report: Aseiniodd %{name} adroddiad %{target} i'w hunan
-        change_email_user: Newidodd %{name} gyfeiriad e-bost y defnyddiwr %{target}
-        confirm_user: Cadarnhaodd %{name} gyfeiriad e-bost y defnyddiwr %{target}
-        create_account_warning: Anfonwyd rhybudd i %{target} gan %{name}
-        create_announcement: Wnaeth %{name} creu cyhoeddiad newydd %{target}
-        create_custom_emoji: Uwchlwythodd %{name} emoji newydd %{target}
-        create_domain_allow: Gwynrestrodd %{name} y parth %{target}
-        create_domain_block: Blociodd %{name} y parth %{target}
-        create_email_domain_block: Cosbrestrwyd parth e-bost %{target} gan %{name}
-        demote_user: Diraddiodd %{name} y defnyddiwr %{target}
-        destroy_announcement: Wnaeth %{name} dileu cyhoeddiad newydd %{target}
-        destroy_custom_emoji: Dinistriodd %{name} emoji %{target}
-        destroy_domain_allow: Tynnodd %{name} parth %{target} o'r gwynrestr
-        destroy_domain_block: Dadflociodd %{name} y parth %{target}
-        destroy_email_domain_block: Gwynrestrodd %{name} parth e-bost %{target}
-        destroy_status: Cafodd %{name} wared ar statws gan %{target}
-        disable_2fa_user: Diffoddodd %{name} ar ofyniad dau gam ar gyfer y defnyddiwr %{target}
-        disable_custom_emoji: Diffoddodd %{name} emoji %{target}
-        disable_user: Diffoddodd %{name} mewngofnodi ar gyfer y defnyddiwr %{target}
-        enable_custom_emoji: Galluogodd %{name} emoji %{target}
-        enable_user: Galluogodd %{name} mewngofnodi ar gyfer y defnyddiwr %{target}
-        memorialize_account: Newidodd %{name} gyfrif %{target} i dudalen goffau
-        promote_user: Dyrchafodd %{name} y defnyddiwr %{target}
-        remove_avatar_user: Cafodd %{name} wared ar afatar %{target}
-        reopen_report: Ailagorodd %{name} adroddiad %{target}
-        reset_password_user: Ailosododd %{name} gyfrinair y defnyddiwr %{target}
-        resolve_report: Datrusodd %{name} adroddiad %{target}
-        silence_account: Tawelodd %{name} gyfrif %{target}
-        suspend_account: Ataliodd %{name} gyfrif %{target}
-        unassigned_report: Dadbenododd %{name} adroddiad %{target}
-        unsilence_account: Terfynodd %{name} dawelu cyfrif %{target}
-        unsuspend_account: Terfynodd %{name} yr ataliad ar gyfrif %{target}
-        update_announcement: Wnaeth %{name} diweddaru cyhoeddiad newydd %{target}
-        update_custom_emoji: Diweddarodd %{name} emoji %{target}
-        update_status: Diweddarodd %{name} statws gan %{target}
       deleted_status: "(statws wedi ei ddileu)"
       empty: Dim logiau ar gael.
       filter_by_action: Hidlo wrth weithred
@@ -312,14 +270,12 @@ cy:
       copied_msg: Llwyddwyd i greu copi lleol o'r emoji
       copy: Copïo
       copy_failed_msg: Methwyd i greu copi lleol o'r emoji hwnnw
-      create_new_category: Create new category
       created_msg: Llwyddwyd i greu emoji!
       delete: Dileu
       destroyed_msg: Llwyddwyd i ddinistrio emojo!
       disable: Diffodd
       disabled: Wedi'i ddiffodd
       disabled_msg: Llwyddwyd i ddiffodd yr emoji hwnnw
-      emoji: Emoji
       enable: Galluogi
       enabled: Wedi ei alluogi
       enabled_msg: Llwyddwyd i alluogi yr emoji hwnnw
@@ -348,7 +304,6 @@ cy:
       feature_profile_directory: Cyfeiriadur proffil
       feature_registrations: Cofrestriadau
       feature_relay: Relái ffederasiwn
-      feature_spam_check: Gwrth-sbam
       feature_timeline_preview: Rhagolwg o'r ffrwd
       features: Nodweddion
       hidden_service: Ffederasiwn a gwasanaethau cudd
@@ -547,8 +502,6 @@ cy:
         users: I ddefnyddwyr lleol mewngofnodadwy
       domain_blocks_rationale:
         title: Dangos rhesymwaith
-      enable_bootstrap_timeline_accounts:
-        title: Alluogi dilyn diofyn i ddefnyddwyr newydd
       hero:
         desc_html: Yn cael ei arddangos ar y dudadlen flaen. Awgrymir 600x100px oleia. Pan nad yw wedi ei osod, mae'n ymddangos fel mân-lun yr achos
         title: Delwedd arwr
@@ -599,9 +552,6 @@ cy:
         desc_html: Mae modd i chi ysgrifennu polisi preifatrwydd, termau gwasanaeth a cyfreitheg arall eich hun. Mae modd defnyddio tagiau HTML
         title: Termau gwasanaeth wedi eu haddasu
       site_title: Enw'r achos
-      spam_check_enabled:
-        desc_html: Gall Mastodon adrodd cyrfifau sy'n anfon negeseuon niferus na chrefwyd yn awtomatig. Efallai fydd yna positifau anwir.
-        title: Awtomeiddiad gwrth-sbam
       thumbnail:
         desc_html: Ceith ei ddefnyddio ar gyfer rhagolygon drwy OpenGraph a'r API. Argymhellir 1200x630px
         title: Mân-lun yr achos
@@ -636,9 +586,6 @@ cy:
       accounts_today: Defyddau unigol heddiw
       accounts_week: Defnyddau unigol yr wythnos hon
       breakdown: Ymddatodiad o ddefnyddiaeth heddiw wrth ffynhonnell
-      context: Cyd-destun
-      directory: O fewn y gyfeiriadur
-      in_directory: "%{count} yn y gyfeiriadur"
       last_active: Yn weithredol ddiwethaf
       most_popular: Mwyaf poblogaidd
       most_recent: Mwyaf diweddar
@@ -682,13 +629,11 @@ cy:
     discovery: Darganfyddiad
     localization:
       body: Caiff Mastodon ei gyfieithu gan wirfoddolwyr.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Gall pawb gyfrannu.
     sensitive_content: Cynnwys sensitif
     toot_layout: Gosodiad tŵt
   application_mailer:
     notification_preferences: Newid gosodiadau e-bost
-    salutation: "%{name},"
     settings: 'Newid gosodiadau e-bost: %{link}'
     view: 'Gweld:'
     view_profile: Gweld proffil
@@ -720,9 +665,6 @@ cy:
     migrate_account: Symud i gyfrif gwahanol
     migrate_account_html: Os hoffech chi ailgyfeirio'r cyfrif hwn at un gwahanol, mae modd <a href="%{path}">ei ffurfweddu yma</a>.
     or_log_in_with: Neu logiwch mewn a
-    providers:
-      cas: CAS
-      saml: SAML
     register: Cofrestru
     registration_closed: Nid yw %{instance} yn derbyn aelodau newydd
     resend_confirmation: Ailanfon cyfarwyddiadau cadarnhau
@@ -761,9 +703,6 @@ cy:
     errors:
       invalid_key: ddim yn allwedd Ed25519 na Curve25519 dilys
       invalid_signature: ddim yn llofnod Ed25519 dilys
-  date:
-    formats:
-      default: "%b %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}awr"
@@ -828,7 +767,6 @@ cy:
       request: Gwneud cais am eich archif
       size: Maint
     blocks: Yr ydych yn blocio
-    csv: CSV
     domain_blocks: Blociau parth
     lists: Rhestrau
     mutes: Yr ydych yn tawelu
@@ -1033,7 +971,6 @@ cy:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
           billion: Biliwn
           million: Miliwn
@@ -1045,7 +982,6 @@ cy:
     next: Nesaf
     older: Hŷn
     prev: Blaenorol
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Rydych chi barod wedi pleidleisio ar y pleidlais hon
@@ -1108,39 +1044,17 @@ cy:
     activity: Gweithgaredd ddiwethaf
     browser: Porwr
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Porwr anhysbys
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
       nokia: Porwr Nokia S40 Ovi
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
       qq: Porwr QQ
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Sesiwn cyfredol
     description: "%{browser} ar %{platform}"
     explanation: Dyma'r porwyr gwê sydd wedi mewngofnodi i'ch cyfrif Mastododon ar hyn o bryd.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
       chrome_os: OS Chrome
       firefox_os: OS Firefox
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: platfform anhysbys
-      windows: Windows
-      windows_mobile: Windows Mobile
       windows_phone: Ffôn Windows
     revoke: Diddymu
     revoke_success: Sesiwn wedi ei ddiddymu yn llwyddiannus
@@ -1166,8 +1080,6 @@ cy:
     profile: Proffil
     relationships: Dilynion a dilynwyr
     two_factor_authentication: Awdurdodi dau-gam
-  spam_check:
-    spam_detected: Mae hyn yn adrodd awtomatig. Caiff sbam ei ganfod.
   statuses:
     attached:
       audio:
@@ -1230,7 +1142,6 @@ cy:
     show_more: Dangos mwy
     show_thread: Dangos edefyn
     sign_in_to_participate: Mengofnodwch i gymryd rhan yn y sgwrs
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Dilynwyr yn unig
       private_long: Dangos i ddilynwyr yn unig
@@ -1331,10 +1242,6 @@ cy:
     contrast: Mastodon (Cyferbyniad uchel)
     default: Mastodon (Tywyll)
     mastodon-light: Mastodon (golau)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     disable: Diffodd
     enabled: Awdurdodi dau-gam wedi'i alluogi
@@ -1391,11 +1298,8 @@ cy:
       tips: Awgrymiadau
       title: Croeso, %{name}!
   users:
-    blocked_email_provider: Nid yw'r darparwr ebost hon yn cael ei ganiatâu
     follow_limit_reached: Nid oes modd i chi ddilyn mwy na %{limit} o bobl
     generic_access_help_html: Cael trafferth yn cyrchu eich cyfrif? Efallai hoffwch cysylltu â %{email} am gymorth
-    invalid_email: Mae'r cyfeiriad e-bost hwn yn annilys
-    invalid_email_mx: Nid yw'r ebost yn edrcyh fel ei bod yn bodoli
     invalid_otp_token: Côd dau-ffactor annilys
     invalid_sign_in_token: Cod diogelwch annilys
     otp_lost_help_html: Os colloch chi fynediad i'r ddau, mae modd i chi gysylltu a %{email}
diff --git a/config/locales/da.yml b/config/locales/da.yml
index c98404066..79e8d8cca 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -1,51 +1,53 @@
 ---
 da:
   about:
-    about_hashtag_html: Disse er offentlige trut der indeholder tagget <strong>#%{hashtag}</strong>. Du kan interagere med dem hvis du har en konto hvor som helst i fediverset.
-    about_mastodon_html: Mastodon er et socialt netværk der er baseret på åbne web protokoller og frit, open-source source software. Der er decentraliseret ligesom e-mail tjenester.
+    about_hashtag_html: Disse er offentlige trut tagget med <strong>#%{hashtag}</strong>. Du kan interagere med dem, hvis du har en konto hvor som helst i fediverset.
+    about_mastodon_html: 'Fremtidens sociale netværk: Ingen annoncer, ingen virksomhedsovervågning, etisk design og decentralisering! Ej dine data med Mastodon!'
     about_this: Om
     active_count_after: aktive
-    active_footnote: Månedligt Aktive Brugere (MAU)
+    active_footnote: Månedlige aktive brugere (MAU)
     administered_by: 'Administreret af:'
     api: API
-    apps: Apps til mobilen
-    apps_platforms: Brug Mastodon på iOS, Android og andre platformer
-    browse_directory: Gennemse en profils indholdsfortegnelse og filtrer efter interesser
+    apps: Mobil-apps
+    apps_platforms: Benyt Mastodon på Android, iOS og andre platforme
+    browse_directory: Gennemse en profilindholdsfortegnelse og filtrér efter interesser
     browse_local_posts: Gennemse en live stream af offentlige indlæg fra denne server
-    browse_public_posts: Gennemse en live stream af offentlige indlæg fra Mastodon
+    browse_public_posts: Gennemse en live stream af offentlige indlæg på Mastodon
     contact: Kontakt
     contact_missing: Ikke sat
-    contact_unavailable: Ikke tilgængeligt
-    discover_users: Opdag brugere
+    contact_unavailable: Utilgængelig
+    discover_users: Find brugere
     documentation: Dokumentation
-    federation_hint_html: Med en konto på %{instance} har du har mulighed for at følge andre på en hvilken som helst Mastodon server.
-    get_apps: Prøv en mobil app
+    federation_hint_html: Med en konto på %{instance} vil du kunne følge andre på en hvilken som helst Mastodon-server.
+    get_apps: Prøv en mobil-app
     hosted_on: Mostodon hostet på %{domain}
     instance_actor_flash: |
-      Denne konto er en virtuel aktør, der bruges til at repræsentere selve serveren og ikke nogen individuel bruger.
-      Det bruges til Federation formål og bør ikke blokeres, medmindre du vil blokere hele Instance, i hvilket tilfælde du skal bruge en domæne blokering.
-    learn_more: Lær mere
-    privacy_policy: Privatlivspolitik
-    see_whats_happening: Se hvad der sker
-    server_stats: 'Server statstik:'
+      Denne konto er en virtuel skuespiller, der bruges til at repræsentere selve serveren og ikke nogen individuel bruger.
+      Det bruges til føderationsformål og bør ikke blokeres, medmindre du vil blokere hele forekomsten og i så tilfælde bør bruge en domæneblokering.
+    learn_more: Få mere at vide
+    privacy_policy: Fortrolighedspolitik
+    rules: Serverregler
+    rules_html: 'Nedenfor ses en oversigt over regler, som skal følges, hvis du ønsker at have en konto på denne Mastodon-server:'
+    see_whats_happening: Se, hvad der sker
+    server_stats: 'Serverstatstik:'
     source_code: Kildekode
     status_count_after:
       one: status
       other: statusser
     status_count_before: Som har skrevet
     tagline: Følg venner og find nye
-    terms: Vilkår for service
-    unavailable_content: Utilgængeligt indhold
+    terms: Tjenestevilkår
+    unavailable_content: Modererede servere
     unavailable_content_description:
       domain: Server
       reason: Årsag
-      rejecting_media: 'Medie filer fra disse servere vil ikke blive behandlet eller gemt, og ingen miniaturebilleder vil blive vist, som kræver tilgang til den originale fil:'
+      rejecting_media: 'Mediefiler fra disse servere behandles eller gemmes ikke, og ingen miniaturebilleder vises, og kræver manuel klik-igennem til originalfilen:'
       rejecting_media_title: Filtrerede medier
-      silenced: 'Posteringer fra disse servere vil være skjulte i den offentlige tidslinje feed eller beskeder og ingen notifikationer vil blive genereret fra brugere du ikke følger:'
-      silenced_title: Dæmpede servere
-      suspended: 'Ingen date fra disse servere vil blive behandlet, gemt eller udvekslet, at interagere eller kommunikere med brugere fra disse servere er ikke muligt:'
+      silenced: 'Indlæg fra disse servere er skjult i offentlige tidslinjer og konversationer, og der genereres ingen notifikationer fra deres brugerinteraktioner, medmindre du følger dem:'
+      silenced_title: Tavsgjorte servere
+      suspended: 'Ingen data fra disse servere behandles, gemmes eller udveksles, hvilket umuliggør interaktion eller kommunikation med brugere fra disse servere:'
       suspended_title: Suspenderede servere
-    unavailable_content_html: Mastodon tillader dig generelt at se indhold og interagere med brugere fra enhver anden server i fediverset. Dette er undtagelser der er foretaget på netop denne server.
+    unavailable_content_html: Mastodon tillader dig generelt at se indhold og interagere med brugere fra enhver anden server i fediverset. Disse er undtagelserne, som er implementeret på netop denne servertype.
     user_count_after:
       one: bruger
       other: brugere
@@ -53,34 +55,34 @@ da:
     what_is_mastodon: Hvad er Mastodon?
   accounts:
     choices_html: "%{name}s valg:"
-    endorsements_hint: Du kan støtte folk du følger fra web-interface, og de vil dukke op her.
-    featured_tags_hint: Du kan tilføje specifikke hashtags der vil blive vist her.
+    endorsements_hint: Du kan støtte personer, du følger, fra webgrænsefladen, og de vil fremgå hér.
+    featured_tags_hint: Du kan fremhæve bestemte hashtags, som så vil fremgå hér.
     follow: Følg
     followers:
       one: Følger
       other: Følgere
     following: Følger
-    joined: Tilmeldt den %{date}
-    last_active: sidst aktiv
-    link_verified_on: Ejerskabet af dette link blev tjekket den %{date}
+    instance_actor_flash: Denne konto er en virtuel aktør, der bruges til at repræsentere selve serveren og ikke nogen individuel bruger. Den anvendes til føderation og bør ikke suspenderes.
+    joined: Tilmeldt %{date}
+    last_active: senest aktiv
+    link_verified_on: Ejerskab af dette link blev tjekket %{date}
     media: Medier
     moved_html: "%{name} er flyttet til %{new_profile_link}:"
-    network_hidden: Denne information er ikke tilgængelig
+    network_hidden: Denne information er utilgængelig
     never_active: Aldrig
-    nothing_here: Der er intet her!
-    people_followed_by: Folk som %{name} følger
-    people_who_follow: Folk der følger %{name}
+    nothing_here: Der er intet hér!
+    people_followed_by: Personer, som %{name} følger
+    people_who_follow: Personer, som følger %{name}
     pin_errors:
-      following: Du er nødt til at følge den person du ønsker at støtte
+      following: Du skal allerede følge den person, du ønsker at støtte
     posts:
       one: Trut
       other: Trut
     posts_tab_heading: Trut
     posts_with_replies: Trut og svar
-    reserved_username: Brugernavnet er allerede taget
     roles:
-      admin: Administrator
-      bot: Robot
+      admin: Admin
+      bot: Bot
       group: Gruppe
       moderator: Moderator
     unavailable: Profil utilgængelig
@@ -88,316 +90,390 @@ da:
   admin:
     account_actions:
       action: Udfør handling
-      title: Udfør moderator handlinger på %{acct}
+      title: Udfør moderatorhandling på %{acct}
     account_moderation_notes:
       create: Læg en note
-      created_msg: Moderator notat succesfuldt oprettet!
+      created_msg: Moderatornotat oprettet!
       delete: Slet
-      destroyed_msg: Moderator notat succesfuldt destrueret!
+      destroyed_msg: Moderatornotat destrueret!
     accounts:
-      add_email_domain_block: Bloker e-mail domæne
+      add_email_domain_block: Blokér e-maildomæne
       approve: Godkend
       approve_all: Godkend alle
-      are_you_sure: Er du sikker?
+      approved_msg: Tilmeldingsansøgning for %{username} blev godkendt
+      are_you_sure: Sikker?
       avatar: Profilbillede
       by_domain: Domæne
       change_email:
-        changed_msg: Email til konto succesfuldt ændret!
-        current_email: Nuværende email
-        label: Ændre email
-        new_email: Ny email
-        submit: Ændre email
-        title: Ændre email for %{username}
+        changed_msg: Kontoens e-mail er skiftet!
+        current_email: Nuværende e-mail
+        label: Skift e-mail
+        new_email: Ny e-mail
+        submit: Skift e-mail
+        title: Skift e-mail for %{username}
       confirm: Bekræft
       confirmed: Bekræftet
       confirming: Bekræfter
       delete: Slet data
       deleted: Slettet
-      demote: Degrader
-      disable: Deaktiver
-      disable_two_factor_authentication: Deaktiver 2FA
-      disabled: Deaktiveret
+      demote: Degradér
+      destroyed_msg: "%{username}s data er nu i kø til straks at blive slettet"
+      disable: Frys
+      disable_two_factor_authentication: Deaktivér 2FA
+      disabled: Frosset
       display_name: Visningsnavn
       domain: Domæne
-      edit: Rediger
-      email: Email
-      email_status: Email status
-      enable: Aktiver
+      edit: Redigere
+      email: E-mail
+      email_status: E-mailstatus
+      enable: Optø
       enabled: Aktiveret
+      enabled_msg: "%{username}s konto er optøet"
       followers: Følgere
       follows: Følger
-      header: Overskrift/billede
-      inbox_url: Link til indbakke
+      header: Overskrift
+      inbox_url: Indbakke-URL
+      invite_request_text: Begrundelse for tilmelding
       invited_by: Inviteret af
-      ip: IP-adresse
-      joined: Tilmeldt den
+      ip: IP
+      joined: Tilmeldt
       location:
         all: Alle
         local: Lokalt
         remote: Fjernt
         title: Placering
-      login_status: Status på login
-      media_attachments: Medie bilag
-      memorialize: Omdan til et memoriam
-      memorialized: Memorialiseret
+      login_status: Indlogningsstatus
+      media_attachments: Medievedhæftninger
+      memorialize: Omdan til mindekonto
+      memorialized: Minde gjort
+      memorialized_msg: "%{username} gjort til mindekonto"
       moderation:
         active: Aktiv
         all: Alle
         pending: Afventer
-        silenced: Dæmpet
-        suspended: Udelukket
-        title: Moderasion
-      moderation_notes: Moderator notater
+        silenced: Tavsgjort
+        suspended: Suspenderet
+        title: Moderation
+      moderation_notes: Moderationsnotater
       most_recent_activity: Seneste aktivitet
-      most_recent_ip: Senest IP
-      no_account_selected: Ingen konti blev ændret da ingen var valgt
-      no_limits_imposed: Ingen ændringer gennemført
-      not_subscribed: Ikke abonneret
-      pending: Afventende anmeldelser
-      perform_full_suspension: Udeluk
+      most_recent_ip: Seneste IP
+      no_account_selected: Ingen kontiændringer, da ingen var valgt
+      no_limits_imposed: Ingen begrænsninger pålagt
+      not_subscribed: Abonnerer ikke
+      pending: Afventende vurdering
+      perform_full_suspension: Suspendér
       promote: Forfrem
       protocol: Protokol
-      public: Offentligt
-      push_subscription_expires: PuSH abonnement udløber
-      redownload: Opdater profil
+      public: Offentlig
+      push_subscription_expires: PuSH-abonnement udløber
+      redownload: Opfrisk profil
+      redownloaded_msg: Profil for %{username} opfriske fra oprindelsesserver
       reject: Afvis
       reject_all: Afvis alle
+      rejected_msg: Tilmeldingsansøgning fra %{username} afvist
       remove_avatar: Fjern profilbillede
-      remove_header: Fjern overskrift/billede
+      remove_header: Fjern overskrift
+      removed_avatar_msg: Profilbillede for %{username} fjernet
+      removed_header_msg: Overskriftsbillede for %{username} fjernet
       resend_confirmation:
-        already_confirmed: Denne bruger er allerede blevet bekræftet
-        send: Gensend bekræftelsesmail
-        success: Bekræftelsesmail sendt succesfuldt!
+        already_confirmed: Denne bruger er allerede bekræftet
+        send: Gensend bekræftelses e-mail
+        success: Bekræftelses e-mail afsendt!
       reset: Nulstil
-      reset_password: Nulstil kodeord
-      resubscribe: Abonner igen
+      reset_password: Nulstil adgangskode
+      resubscribe: Genabonnér
       role: Tilladelser
       roles:
-        admin: Admin
-        moderator: Mod
+        admin: Administrator
+        moderator: Moderator
         staff: Personale
         user: Bruger
       search: Søg
-      search_same_ip: Andre brugere med den samme IP-adresse
-      sensitive: Følsomt
-      sensitized: markeret som følsomt
-      shared_inbox_url: Link til delt indbakke
+      search_same_email_domain: Andre brugere med det samme e-maildomæne
+      search_same_ip: Andre brugere med den samme IP
+      sensitive: Sensitivt
+      sensitized: markeret som sensitivt
+      shared_inbox_url: Delt indbakke-URL
       show:
-        created_reports: Anmeldelser oprettet
-        targeted_reports: Anmeldelser fra andre
-      silence: Dæmp
-      silenced: Dæmpet
+        created_reports: Indsendte anmeldelser
+        targeted_reports: Anmeldt af andre
+      silence: Tavsgør
+      silenced: Tavsgjort
       statuses: Statusser
-      subscribe: Abonner
-      suspended: Udelukket
+      subscribe: Abonnér
+      suspended: Suspenderet
+      suspension_irreversible: Disse kontodata er blevet slettet permanent. Du kan afsuspendere kontoen for at gøre den brugbar, men dette gendanner ikke de tidligere kontodata.
+      suspension_reversible_hint_html: Kontoen er blevet suspenderet, og dens data fjernes helt d. %{date}. Indtil da kan kontoen genoprettes uden datatab mv. Ønsker alle kontodata fjernet straks, kan dette gøres nedenfor.
       time_in_queue: Venter i køen %{time}
       title: Konti
-      unconfirmed_email: Ikke-bekræftet email
-      undo_silenced: Fortryd dæmpning
-      undo_suspension: Fortryd udelukkelse
-      unsubscribe: Abonner ikke længere
+      unconfirmed_email: Ikke-bekræftet e-mail
+      undo_sensitized: Fortryd sensitiv
+      undo_silenced: Fortryd tavsgørelse
+      undo_suspension: Fortryd suspendering
+      unsilenced_msg: "%{username}s konto er optøet"
+      unsubscribe: Opsig abonnement
+      unsuspended_msg: "%{username}s konto er afsuspenderet"
       username: Brugernavn
       view_domain: Vis resumé for domæne
       warn: Advar
       web: Web
-      whitelisted: Hvidlistet
+      whitelisted: Tilladt for federering
     action_logs:
       action_types:
         assigned_to_self_report: Tildel rapport
-        change_email_user: Ændre e-mail for bruger
+        change_email_user: Skift e-mail for bruger
         confirm_user: Bekræft bruger
         create_account_warning: Opret advarsel
         create_announcement: Opret bekendtgørelse
-        create_domain_allow: Opret domæne tillad
+        create_custom_emoji: Opret tilpasset emoji
+        create_domain_allow: Opret domænetilladelse
         create_domain_block: Opret domæneblokering
+        create_email_domain_block: Opret e-maildomæneblokering
         create_ip_block: Opret IP-regel
+        create_unavailable_domain: Opret Utilgængeligt Domæne
+        demote_user: Degradere bruger
         destroy_announcement: Slet bekendtgørelse
+        destroy_custom_emoji: Slet tilpasset emoji
+        destroy_domain_allow: Slet domænetilladelse
         destroy_domain_block: Slet domæneblokering
-        destroy_email_domain_block: Slet e-mail domæne blokering
+        destroy_email_domain_block: Slet e-maildomæneblokering
         destroy_ip_block: Slet IP-regel
         destroy_status: Slet status
-        disable_2fa_user: Slet 2FA
-        disable_user: Deaktiver brugeren
-        enable_user: Aktiver brugeren
+        destroy_unavailable_domain: Slet Utilgængeligt Domæne
+        disable_2fa_user: Deaktivér 2FA
+        disable_custom_emoji: Deaktivér tilpasset emoji
+        disable_user: Deaktivér bruger
+        enable_custom_emoji: Aktivér tilpasset emoji
+        enable_user: Aktivér brugeren
+        memorialize_account: Gør til mindekonto
+        promote_user: Promovér bruger
         remove_avatar_user: Fjern profilbillede
-        reopen_report: Genåben rapport
+        reopen_report: Genåbn anmeldelse
         reset_password_user: Nulstil adgangskode
-        resolve_report: Løs rapport
-        silence_account: Dæmp konto
-        suspend_account: Suspendér Konto
-        unsilence_account: Fjern dæmpelse af konto
-        update_announcement: Opdater bekendtgørelse
-        update_status: Opdater status
+        resolve_report: Løs anmeldelse
+        sensitive_account: Markér medierne i din konto som sensitive
+        silence_account: Tavsgør konto
+        suspend_account: Suspendér konto
+        unassigned_report: Aftildel anmeldelse
+        unsensitive_account: Afmarkér medierne i din konto som sensitive
+        unsilence_account: Fjern kontotavsgørelse
+        unsuspend_account: Afsuspendér konto
+        update_announcement: Opdatér bekendtgørelse
+        update_custom_emoji: Opdatér tilpasset emoji
+        update_domain_block: Opdatér domæneblokering
+        update_status: Opdatér status
       actions:
-        assigned_to_self_report: "%{name} tildelte anmeldelsen %{target} til sig selv"
-        change_email_user: "%{name} ændrede email adressen for brugeren %{target}"
-        confirm_user: "%{name} bekræftede %{target}s email adresse"
-        create_account_warning: "%{name} sendte en advarsel til %{target}"
-        create_custom_emoji: "%{name} uploadede humørikonet %{target}"
-        create_domain_allow: "%{name} godkendte domænet %{target}"
-        create_domain_block: "%{name} blokerede domænet %{target}"
-        create_email_domain_block: "%{name} sortlistede email domænet %{target}"
-        create_ip_block: "%{name} oprettede regel for IP %{target}"
-        demote_user: "%{name} degraderede %{target}"
-        destroy_custom_emoji: "%{name} fjernede emoji %{target}"
-        destroy_domain_allow: "%{name} fjernede godkendelsen af domænet %{target}"
-        destroy_domain_block: "%{name} fjernede blokeringen af domænet %{target}"
-        destroy_email_domain_block: "%{name} hvid-listede email domænet %{target}"
-        destroy_ip_block: "%{name} slettede reglen for IP %{target}"
-        destroy_status: "%{name} fjernede statussen fra %{target}"
-        disable_2fa_user: "%{name} deaktiverede to faktor kravet for brugeren %{target}"
-        disable_custom_emoji: "%{name} deaktiverede humørikonet %{target}"
-        disable_user: "%{name} deaktiverede login for brugeren %{target}"
-        enable_custom_emoji: "%{name} aktiverede humørikonet %{target}"
-        enable_user: "%{name} aktiverede login for brugeren %{target}"
-        memorialize_account: "%{name} omdannede %{target}s konto til en mindeside"
-        promote_user: "%{name} forfremmede brugeren %{target}"
-        remove_avatar_user: "%{name} fjernede %{target}s profilbillede"
-        reopen_report: "%{name} genåbnede anmeldelsen %{target}"
-        reset_password_user: "%{name} nulstillede kodeordet for brugeren %{target}"
-        resolve_report: "%{name} løste anmeldelsen %{target}"
-        silence_account: "%{name} dæmpede %{target}s konto"
-        suspend_account: "%{name} udelukkede %{target}s konto"
-        unassigned_report: "%{name} fjernede tildelingen af rapporten %{target}"
-        unsilence_account: "%{name} fjernede dæmpningen fra %{target}s konto"
-        unsuspend_account: "%{name} fjernede udelukkelsen fra %{target}s konto"
-        update_custom_emoji: "%{name} opdaterede humørikonet %{target}"
-        update_status: "%{name} opdaterede status for %{target}"
+        assigned_to_self_report_html: "%{name} tildelte sig selv anmeldelsen %{target}"
+        change_email_user_html: "%{name} ændrede e-mailadressen for bruger %{target}"
+        confirm_user_html: "%{name} bekræftede e-mailadressen for bruger %{target}"
+        create_account_warning_html: "%{name} sendte en advarsel til %{target}"
+        create_announcement_html: "%{name} oprettede den nye bekendtgørelse %{target}"
+        create_custom_emoji_html: "%{name} uploadede det nye emoji %{target}"
+        create_domain_allow_html: "%{name} tillod federering med domænet %{target}"
+        create_domain_block_html: "%{name} blokerede domænet %{target}"
+        create_email_domain_block_html: "%{name} blokerede e-maildomænet %{target}"
+        create_ip_block_html: "%{name} oprettede en regel for IP %{target}"
+        create_unavailable_domain_html: "%{name} stoppede levering til domænet %{target}"
+        demote_user_html: "%{name} degraderede bruger %{target}"
+        destroy_announcement_html: "%{name} slettede bekendtgørelsen %{target}"
+        destroy_custom_emoji_html: "%{name} fjernede emojien %{target}"
+        destroy_domain_allow_html: "%{name} fjernede federeringstilladelsen med domænet %{target}"
+        destroy_domain_block_html: "%{name} afblokerede domænet %{target}"
+        destroy_email_domain_block_html: "%{name} afblokerede e-maildomænet %{target}"
+        destroy_ip_block_html: "%{name} slettede en regel for IP %{target}"
+        destroy_status_html: "%{name} fjernede statussen fra %{target}"
+        destroy_unavailable_domain_html: "%{name} genoptog levering til domænet %{target}"
+        disable_2fa_user_html: "%{name} deaktiverede tofaktorkravet for brugeren %{target}"
+        disable_custom_emoji_html: "%{name} deaktiverede humørikonet %{target}"
+        disable_user_html: "%{name} deaktiverede indlogning for brugeren %{target}"
+        enable_custom_emoji_html: "%{name} aktiverede humørikonet %{target}"
+        enable_user_html: "%{name} aktiverede indlogning for brugeren %{target}"
+        memorialize_account_html: "%{name} gjorde %{target}s konto til en mindeside"
+        remove_avatar_user_html: "%{name} fjernede %{target}s profilbillede"
+        reopen_report_html: "%{name} genåbnede anmeldelsen %{target}"
+        reset_password_user_html: "%{name} nulstillede adgangskoden for brugeren %{target}"
+        resolve_report_html: "%{name} løste anmeldelsen %{target}"
+        sensitive_account_html: "%{name} markerede %{target}s medier som sensitive"
+        silence_account_html: "%{name} tavsgjorde %{target}s konto"
+        suspend_account_html: "%{name} suspenderede %{target}s konto"
+        unassigned_report_html: "%{name} fjernede tildelingen af rapporten %{target}"
+        unsensitive_account_html: "%{name} afmarkerede %{target}s medier som sensitive"
+        unsilence_account_html: "%{name} fjernede tavsgøring af %{target}s konto"
+        unsuspend_account_html: "%{name} fjernede suspenderingen af %{target}s konto"
+        update_announcement_html: "%{name} opdaterede bekendtgørelsen %{target}"
+        update_custom_emoji_html: "%{name} opdaterede emoji %{target}"
+        update_domain_block_html: "%{name} opdaterede domæneblokeringen for %{target}"
+        update_status_html: "%{name} opdaterede status for %{target}"
       deleted_status: "(slettet status)"
-      empty: Ingen logs fundet.
-      filter_by_action: Filtrer efter handling
-      filter_by_user: Filtrer efter bruger
+      empty: Ingen logger fundet.
+      filter_by_action: Filtrér efter handling
+      filter_by_user: Filtrér efter bruger
       title: Revisionslog
     announcements:
       destroyed_msg: Bekendtgørelsen blev slettet!
       edit:
-        title: Rediger bekendtgørelse
+        title: Redigér bekendtgørelse
       empty: Ingen bekendtgørelser fundet.
-      live: Direkte
+      live: Live
       new:
         create: Opret bekendtgørelse
         title: Ny bekendtgørelse
-      published_msg: Bekendtgørelsen blev slettet!
+      publish: Publicér
+      published_msg: Bekendtgørelsen blev publiceret!
       scheduled_for: Planlagt til %{time}
+      scheduled_msg: Bekendtgørelse planlagt til publicering!
       title: Bekendtgørelser
+      unpublish: Afpublicér
+      unpublished_msg: Bekendtgørelsen blev afpubliceret!
       updated_msg: Bekendtgørelsen blev opdateret!
     custom_emojis:
-      assign_category: Vælg kategori
+      assign_category: Tildel kategori
       by_domain: Domæne
-      copied_msg: Succesfuldt oprettede en lokal kopi af humørikonet
-      copy: Kopier
-      copy_failed_msg: Kunne ikke oprette en lokal kopi af dette humørikon
+      copied_msg: Lokal kopi af emojien oprettet
+      copy: Kopiér
+      copy_failed_msg: Lokal kopi af denne emoji kunne ikke oprettes
       create_new_category: Opret ny kategori
-      created_msg: Humørikon succesfuldt oprettet!
+      created_msg: Emoji oprettet!
       delete: Slet
-      destroyed_msg: Emojo succesfuldt destrueret!
-      disable: Deaktiver
+      destroyed_msg: Emoji destrueret!
+      disable: Deaktivér
       disabled: Deaktiveret
-      disabled_msg: Succesfuldt deaktiverede det humørikon
-      emoji: Humørikon
-      enable: Aktiver
+      disabled_msg: Denne emoji blev deaktiveret
+      emoji: Emoji
+      enable: Aktivér
       enabled: Aktiveret
-      enabled_msg: Succesfuldt aktiverede det humørikon
+      enabled_msg: Denne emoji blev aktiveret
       image_hint: PNG op til 50KB
-      list: Listet
-      listed: Listet
+      list: Oplist
+      listed: Oplistet
       new:
-        title: Tilføj nyt brugerdefineret humørikon
+        title: Tilføj ny tilpasset emoji
       not_permitted: Du har ikke tilladelse til at udføre denne handling
       overwrite: Overskriv
       shortcode: Kortkode
-      shortcode_hint: Mindst 2 tegn, kun alfabetiske tegn og understreger
-      title: Brugerdefinerede humørikoner
-      uncategorized: Uden kategori
-      unlist: Ulistet
-      unlisted: Ikke listet
-      update_failed_msg: Kunne ikke opdatere det humørikon
-      updated_msg: Humørikon succesfuldt opdateret!
-      upload: Læg op
+      shortcode_hint: Mindst 2 tegn, kun alfanumeriske tegn og understreger
+      title: Tilpassede emojier
+      uncategorized: Ukategoriseret
+      unlist: Fjern fra oplistning
+      unlisted: Ikke oplistet
+      update_failed_msg: Kunne ikke opdatere den emoji
+      updated_msg: Emoji blev opdateret!
+      upload: Upload
     dashboard:
       authorized_fetch_mode: Sikker tilstand
       backlog: ophobede jobs
-      config: Konfiguration
-      feature_deletions: Konto sletninger
-      feature_invites: Invitations links
+      config: Opsætning
+      feature_deletions: Kontosletninger
+      feature_invites: Invitationslinks
       feature_profile_directory: Profilliste
       feature_registrations: Registreringer
-      feature_relay: Føderations relæ
-      feature_spam_check: Anti-spam
-      feature_timeline_preview: Tidslinje eksempelvisning
+      feature_relay: Federationsredistributør
+      feature_timeline_preview: Tidslinjeforhåndsvisning
       features: Funktioner
-      hidden_service: Føderation med skjulte tjenester
+      hidden_service: Federering med skjulte tjenester
       open_reports: åbne anmeldelser
-      pending_tags: hastags der afventer gennemgang
-      pending_users: brugere der afventer gennemgang
+      pending_tags: hastags afventende revidering
+      pending_users: brugere afventende revidering
       recent_users: Seneste brugere
-      search: Søg på fuld tekst
-      single_user_mode: Enkelt bruger mode
+      search: Fuldtekstsøgning
+      single_user_mode: Enkeltbrugertilstand
       software: Software
-      space: Brugt lagerplads
+      space: Lagerpladsforbrug
       title: Betjeningspanel
-      total_users: samlede antal brugere
+      total_users: brugere i alt
       trends: Tendenser
       week_interactions: interaktioner denne uge
       week_users_active: aktive denne uge
       week_users_new: brugere denne uge
-      whitelist_mode: Whitelist tilstand
+      whitelist_mode: Begrænset federeringstilstand
     domain_allows:
-      add_new: Whitelist domæne
-      created_msg: Domænet er tilføjet whitelist
-      destroyed_msg: Domænet er fjernet fra whitelist
-      undo: Fjern fra hvidliste
+      add_new: Tillade federering med domæne
+      created_msg: Domæne er blevet tilladt federering
+      destroyed_msg: Domæne er blevet forbudt federering
+      undo: Forbyd federering med domæne
     domain_blocks:
-      add_new: Tilføj ny domain block
-      created_msg: Domæne blokade bliver nu behandlet
-      destroyed_msg: Domæne blokade er blevet annulleret
+      add_new: Tilføj ny domæneblokering
+      created_msg: Domæneblokering under behandling
+      destroyed_msg: Domæneblokering er blevet fjernet
       domain: Domæne
-      edit: Rediger domæne blokering
+      edit: Redigér domæneblokering
+      existing_domain_block_html: Du har allerede pålagt %{name} strengere grænser, du skal <a href="%{unblock_url}">afblokerere</a> det først.
       new:
         create: Opret blokering
-        hint: Domæne blokeringen vil ikke forhindre oprettelse af konto opslag i databasen, men vil retroaktivt og automatisk benytte specifikke moderator metoder på disse konti.
+        hint: Domæneblokeringen vil ikke forhindre oprettelse af kontoposter i databasen, men vil retroaktivt og automatisk benytte specifikke moderationsmetoder på disse konti.
         severity:
-          desc_html: "<strong>Dæmp</strong> vil gøre denne kontos opslag usynlige til alle der ikke følger dem. <strong>Udeluk</strong> vil fjerne al kontoens indhold, medie og profildata. Brug <strong>Ingen</strong> hvis du bare ønsker at afvise medie filer."
+          desc_html: "<strong>Tavsgjort</strong> vil gøre kontoens indlæg usynlige for alle, som ikke følger dem. <strong>Suspendering</strong> vil fjerne alt kontoindhold, medier og profildata. Brug <strong>Ingen</strong>, hvis mediefiler blot ønskes afvist."
           noop: Ingen
-          silence: Dæmp
-          suspend: Udeluk
-        title: Ny domæne blokering
+          silence: Tavsgøre
+          suspend: Suspendere
+        title: Ny domæneblokering
+      obfuscate: Slør domænenavn
+      obfuscate_hint: Slør delvist domænenavnet på listen, hvis annoncering af listen over domænebegrænsninger er aktiveret
       private_comment: Privat kommentar
+      private_comment_hint: Kommentar om denne domænebegrænsning til intern brug for moderatorerne.
       public_comment: Offentlig kommentar
-      reject_media: Afvis medie filer
-      reject_media_hint: Fjerner lokalt lagrede multimedie filer og nægter at hente nogen i fremtiden. Irrelevant for udelukkelser
+      public_comment_hint: Kommentar om denne domænebegrænsning for den brede offentlighed, hvis annoncering af listen over domænebegrænsninger er aktiveret.
+      reject_media: Afvis mediefiler
+      reject_media_hint: Fjerner lokalt lagrede mediefiler og afviser at download nogle fremadrettet. Irrelevant for suspenderinger
       reject_reports: Afvis anmeldelser
+      reject_reports_hint: Ignorér alle anmeldelser fra dette domæne. Irrelevant for suspenderinger
       rejecting_media: afviser mediefiler
       rejecting_reports: afviser anmeldelser
       severity:
-        silence: dæmpet
+        silence: tavsgjort
         suspend: suspenderet
       show:
         affected_accounts:
           one: En konto i databasen påvirket
           other: "%{count} konti i databasen påvirket"
         retroactive:
-          silence: Fjern dæmpningen af alle eksisterende konti fra dette domæne
-          suspend: Fjern udelukkelsen af alle eksisterende konti fra dette domæne
-        title: Annuller domæne blokeringen for domænet %{domain}
-        undo: Fortryd
-      undo: Fortryd domain block
-      view: Vis domæne blokering
+          silence: Fjern tavsgøring for eksisterende, berørte konti fra dette domæne
+          suspend: Fjern suspendering for eksisterende, berørte konti fra dette domæne
+        title: Annullér domæneblokering for domænet %{domain}
+        undo: Annullér
+      undo: Annullér domæneblokering
+      view: Vis domæneblokering
     email_domain_blocks:
       add_new: Tilføj ny
-      created_msg: Tilføjede succesfuldt email domænet til sortliste
+      created_msg: E-maildomæne blokeret
       delete: Slet
-      destroyed_msg: Fjernede succesfuldt email domænet fra sortliste
+      destroyed_msg: E-maildomæne afblokeret
       domain: Domæne
-      empty: Ingen e-mail-domæner er i øjeblikket blokeret.
+      empty: Ingen e-maildomæner er pt. blokeret.
       from_html: fra %{domain}
       new:
         create: Tilføj domæne
-        title: Ny email blokade opslag
-      title: Email sortliste
+        title: Blokere nyt e-maildomæne
+      title: Blokerede e-maildomæner
+    follow_recommendations:
+      description_html: "<strong>Følg-anbefalinger hjælpe nye brugere til hurtigt at finde interessant indhold</strong>. Når en bruger ikke har interageret nok med andre til at danne personlige følg-anbefalinger, anbefales disse konti i stedet. De genberegnes dagligt baseret på en blanding af konti med de fleste nylige engagementer og fleste lokale følger-antal for et givet sprog."
+      language: For sprog
+      status: Status
+      suppress: Undertryk følg-anbefaling
+      suppressed: Undertrykt
+      title: Følg-anbefalinger
+      unsuppress: Genetablér følg-anbefaling
     instances:
+      back_to_all: Alle
+      back_to_limited: Begrænset
+      back_to_warning: Advarsel
       by_domain: Domæne
+      delivery:
+        all: Alle
+        clear: Ryd leveringsfejl
+        restart: Genstart levering
+        stop: Stop levering
+        title: Levering
+        unavailable: Utilgængelig
+        unavailable_message: Levering utilgængelig
+        warning: Advarsel
+        warning_message:
+          one: Leveringsfejl %{count} dag
+          other: Leveringsfejl %{count} dage
       delivery_available: Levering er tilgængelig
+      delivery_error_days: Leveringsfejldage
+      delivery_error_hint: Er levering ikke mulig i %{count} dage, markeres den automatisk som ikke-leverbar.
+      empty: Ingen domæner fundet.
       known_accounts:
         one: "%{count} kendt konto"
         other: "%{count} kendte konti"
@@ -407,19 +483,19 @@ da:
         title: Moderation
       private_comment: Privat kommentar
       public_comment: Offentlig kommentar
-      title: Førderation
+      title: Federation
       total_blocked_by_us: Blokeret af os
-      total_followed_by_them: Fulgt af dem
-      total_followed_by_us: Fulgt af os
-      total_reported: Rapporter om dem
-      total_storage: Vedhæftede medier
+      total_followed_by_them: Følges af dem
+      total_followed_by_us: Følges af os
+      total_reported: Anmeldelser om dem
+      total_storage: Medievedhæftninger
     invites:
-      deactivate_all: Deaktiver alle
+      deactivate_all: Deaktivér alle
       filter:
         all: Alle
         available: Tilgængelig
         expired: Udløbet
-        title: Filtre
+        title: Filter
       title: Invitationer
     ip_blocks:
       add_new: Opret regel
@@ -439,182 +515,227 @@ da:
     pending_accounts:
       title: Afventende konti (%{count})
     relationships:
-      title: "%{acct}'s relationer"
+      title: "%{acct}-relationer"
     relays:
-      add_new: Tilføj nyt relay
+      add_new: Tilføj ny videreformidler
       delete: Slet
-      description_html: Et <strong>federation relay</strong> er en mellemleds server der udveksler store mængder af offentlige trut mellem servere der abonnerer på og offentliggør til det. <strong>Det kan hjælpe små og mellemstore servere opdage indhold fra fediverset</strong>, hvilket der ellers ville kræve at lokale brugere manuelt følger andre folk på fjerne servere.
-      disable: Deaktiver
+      description_html: En <strong>federationsvidereformidler</strong> er en mellemliggende server, der udveksler store mængder af offentlige trut imellem servere, som abonnerer på og publicerer til den. <strong>Det kan hjælpe små og mellemstore servere opdage indhold fra fediverset</strong>, hvilket ellers ville kræve at lokale brugere manuelt følger andre personer på fjernservere.
+      disable: Deaktivér
       disabled: Deaktiveret
-      enable: Aktiver
-      enable_hint: Når dette er aktiveret, vil serveren abonnere på alle offentlige trut fra dette relay, og vil begynde at sende offentlige trut fra denne server dertil.
+      enable: Aktivér
+      enable_hint: Når aktiveret, vil serveren abonnere på alle offentlige indlæg fra denne videreformidler og vil begynde at sende denne servers offentlige indlæg til den.
       enabled: Aktiveret
-      inbox_url: Link til relay
-      pending: Venter på godkendelse fra relæet
-      save_and_enable: Gem og aktiver
-      setup: Opsæt en videresendelses forbindelse
-      signatures_not_enabled: Relæer fungerer ikke korrekt, mens sikker tilstand eller begrænset føderationstilstand er aktiveret
+      inbox_url: Videreformidler-URL
+      pending: Afventer videreformidlers godkendelse
+      save_and_enable: Gem og aktivér
+      setup: Opsæt en videreformidlerforbindelse
+      signatures_not_enabled: Videreformidlere fungerer ikke korrekt, mens sikker tilstand eller begrænset føderationstilstand er aktiveret
       status: Status
-      title: Videresendelser
+      title: Videreformidlere
     report_notes:
-      created_msg: Anmeldelse note blev oprettet!
-      destroyed_msg: Anmeldelse note blev slettet!
+      created_msg: Anmeldelsesnotat er oprettet!
+      destroyed_msg: Anmeldelsesnotat er slettet!
     reports:
       account:
+        notes:
+          one: "%{count} notat"
+          other: "%{count} notater"
         reports:
-          one: "%{count} rapport"
-          other: "%{count} rapporter"
+          one: "%{count} anmeldelse"
+          other: "%{count} anmeldelser"
       action_taken_by: Handling udført af
-      are_you_sure: Er du sikker?
+      are_you_sure: Sikker?
       assign_to_self: Tildel til mig
       assigned: Tildelt moderator
-      by_target_domain: Domæne for rapporteret konto
+      by_target_domain: Domæne for anmeldt konto
       comment:
         none: Ingen
       created_at: Anmeldt
-      mark_as_resolved: Marker som værende løst
-      mark_as_unresolved: Marker som værende uløst
+      forwarded: Videresendt
+      forwarded_to: Videresendt til %{domain}
+      mark_as_resolved: Markér som løst
+      mark_as_unresolved: Markér som ikke-løst
       notes:
         create: Tilføj notat
         create_and_resolve: Løs med notat
-        create_and_unresolve: Genåbne med notat
+        create_and_unresolve: Genåbn med notat
         delete: Slet
-        placeholder: Beskriv hvilke handlinger der er blevet udført, eller andre relevante opdateringer...
-      reopen: Genåben anmeldelse
+        placeholder: Beskriv de udførte handlinger eller andre relevante opdateringer...
+      reopen: Genåbn anmeldelse
       report: 'Anmeldelse #%{id}'
       reported_account: Anmeldt konto
       reported_by: Anmeldt af
       resolved: Løst
-      resolved_msg: Anmeldelse er sat til at være løst!
+      resolved_msg: Anmeldelse er nu løst!
       status: Status
       title: Anmeldelser
       unassign: Utildel
-      unresolved: Uløst
+      unresolved: Ikke-løst
       updated_at: Opdateret
+    rules:
+      add_new: Tilføj regel
+      delete: Slet
+      description_html: Mens de fleste hævder at have læst og accepteret tjenestevilkårene, så læser folk normalt ikke disse, før et problem er opstået. <strong>Gør det lettere med ét blik at se din servers regler ved at opliste disse på en punktsliste.</strong> Prøv at holde individuelle regler korte og enkle, men undgå også at opdele dem i mange separate underpunkter.
+      edit: Redigér regel
+      empty: Ingen serverregler defineret endnu.
+      title: Serverregler
     settings:
       activity_api_enabled:
         desc_html: Antal af lokalt opslåede statusser, aktive brugere, og nye registreringer i ugentlige opdelinger
-        title: Offentliggør samlede statistikker vedrørende brugeraktivitet
+        title: Offentliggør samlede statistikker vedr. brugeraktivitet i API'en
       bootstrap_timeline_accounts:
-        desc_html: Opdel flere brugernavne ved hjælp af komma. Kun lokale og ulåste konti vil virke. Standard hvis tom er alle lokale administratorer.
+        desc_html: Adskil flere brugernavne med kommaer. Kun lokale og ulåste konti vil fungere. Standard, hvis tom, er alle lokale admins.
         title: Standard følger for nye brugere
       contact_information:
-        email: Forretnings email
-        username: Kontakt brugernavn
+        email: Forretningse-mail
+        username: Kontaktbrugernavn
       custom_css:
         desc_html: Ændre udseendet med CSS indlæst på hver side
-        title: Brugerdefineret CSS
+        title: Tilpasset CSS
+      default_noindex:
+        desc_html: Påvirker alle brugere, som ikke selv har ændret denne indstilling
+        title: Fravælge som standard søgemaskineindekseringer for brugere
       domain_blocks:
         all: Til alle
         disabled: Til ingen
-        title: Vis domæne blokeringer
-      enable_bootstrap_timeline_accounts:
-        title: Aktiver standard følger for nye brugere
+        title: Vis domæneblokeringer
+        users: Til indloggede lokale brugere
+      domain_blocks_rationale:
+        title: Vis begrundelse
       hero:
-        desc_html: Vist på forsiden. Mindst 600x100px anbefales. Hvis ikke sat, vil dette falde tilbage til billedet fra serveren
-        title: Billede af helt
+        desc_html: Vist på forsiden. Mindst 600x100px anbefales. Hvis ikke sat, benyttes serverminiaturebillede
+        title: Heltebillede
+      mascot:
+        desc_html: Vist på forsiden. Mindst 293x205px anbefales. Hvis ikke sat, benyttes standardmaskot
+        title: Maskotbillede
       peers_api_enabled:
-        desc_html: Domæne navne denne server er stødt på i fediverset
-        title: Udgiv liste over opdagede server
+        desc_html: Domænenavne, denne server er stødt på i fediverset
+        title: Udgiv liste over opdagede server i API'en
       preview_sensitive_media:
-        desc_html: Forhåndsvisninger af links på andre websider vil vise et miniaturebillede selv hvis mediet er markeret som følsomt
-        title: Vis følsomt medie i OpenGraph forhåndsvisninger
+        desc_html: Linkforhåndsvisninger på andre websteder vil vise et miniaturebillede, selv hvis mediet er markeret som sensitivt
+        title: Vis følsomme medier i OpenGraph-forhåndsvisninger
       profile_directory:
-        desc_html: Tillad bruger at kunne blive fundet
+        desc_html: Tillad at brugere kan findes
         title: Aktivér profilmappe
       registrations:
         closed_message:
-          desc_html: Vist på forsiden når registreringer er lukkede. Du kan bruge HTML tags
-          title: Besked for lukkede registreringer
+          desc_html: Vist på forside, når tilmeldingsmuligheder er lukket. HTML-tags kan bruges
+          title: Lukket tilmelding-meddelelse
         deletion:
-          desc_html: Tillad alle at slette deres konto
-          title: Åben konto sletning
+          desc_html: Tillad enhver at slette sin konto
+          title: Åbn kontosletning
         min_invite_role:
           disabled: Ingen
-          title: Tillad invitationer af
+          title: Tillad invitationer fra
+        require_invite_text:
+          desc_html: Når tilmeldnger kræver manuel godkendelse, så gør “Hvorfor ønsker du at deltage?” tekstinput obligatorisk i stedet for valgfri
+          title: Nye brugere afkræves deltagelsesbegrundelse
       registrations_mode:
         modes:
-          approved: Godkendelse påkrævet for tilmelding
+          approved: Godkendelse kræves for tilmelding
           none: Ingen kan tilmelde sig
-          open: Alle kan tilmelde sig
-        title: Tilstand for registreringer
+          open: Enhver kan tilmelde sig
+        title: Tilmeldingstilstand
       show_known_fediverse_at_about_page:
-        desc_html: Når slået til, vil det vise trut fra hele det kendte fedivers på forhåndsvisning. Ellers vil det kun vise lokale trut.
-        title: Vis kendte fedivers på tidslinje forhåndsvisning
+        desc_html: Når deaktiveret, begrænses den offentlige tidslinje linket fra indgangssiden til kun at vise lokalt indhold
+        title: Medtag federeret indhold på ikke-godkendt, offentlig tidslinjeside
       show_staff_badge:
-        desc_html: Vis personale emblem på en brugerside
-        title: Vis personale emblem
+        desc_html: Vis et personaleemblem på en brugerside
+        title: Vis personaleemblem
       site_description:
-        desc_html: Introduktions afsnit på forsiden. Beskriv hvad der gør denne Mastodon server speciel og alt andet vigtigt. Du kan bruge HTML tags, især <code>&lt;a&gt;</code> og <code>&lt;em&gt;</code>.
-        title: Beskrivelse af serveren
+        desc_html: Introduktionsafsnit på API'en. Beskriv, hvad der gør denne Mastodonserver speciel samt alt andet vigtigt. HTML tags kan bruges, især <code>&lt;a&gt;</code> og <code>&lt;em&gt;</code>.
+        title: Serverbeskrivelse
       site_description_extended:
-        desc_html: Et godt sted for placering af adfærdskodes, regler, retningslinjer og andre ting der gør din server unik. Du kan bruge HTML tags
-        title: Brugerdefineret udvidet information
+        desc_html: Et god placering til dit adfærdskodes, regler, retningslinjer mv., som gør din server unik. HTML-tags kan bruges
+        title: Tilpasset udvidet information
       site_short_description:
-        desc_html: Vist på sidelinjen og meta tags. Beskriv hvad Mastodon er og hvad der gør denne server speciel i et enkelt afsnit. Hvis tomt, vil standard være beskrivelsen af serveren.
-        title: Kort beskrivelse af serveren
+        desc_html: Vises på sidebjælke og metatags. Beskriv i et enkelt afsnit, hvad Mastodon er, og hvad der gør denne server speciel.
+        title: Kort serverbeskrivelse
       site_terms:
-        desc_html: Du kan skrive din egen privatlivpolitik, servicevilkår, eller lignende. Du kan bruge HTML tags
-        title: Brugerdefineret servicevilkår
-      site_title: Navn af serveren
-      spam_check_enabled:
-        title: Anti-spam automatisering
+        desc_html: Du kan skrive din egen fortrolighedspolitik, tjenestevilkår el.lign. HTML-tags kan bruges
+        title: Tilpasset tjenestevilkår
+      site_title: Servernavn
       thumbnail:
-        desc_html: Brugt til forhåndsvisninger via OpenGraph og API. 1200x630px anbefales
-        title: Miniaturebillede for serveren
+        desc_html: Bruges til forhåndsvisninger via OpenGraph og API. 1200x630px anbefales
+        title: Serverminiaturebillede
       timeline_preview:
-        desc_html: Vis offentlig tidslinje på landingssiden
-        title: Tidslinje forhåndsvisning
-      title: Indstillinger for side
+        desc_html: Vis link til offentlig tidslinje på indgangssiden og lad API'en tilgå den offentlige tidslinje uden godkendelse
+        title: Tillad ikke-godkendt tilgang til offentlig tidslinje
+      title: Webstedsindstillinger
+      trendable_by_default:
+        desc_html: Påvirker hashtags, som ikke blevet nægtet tidligere
+        title: Tillad hashtags at forme tendens uden forudgående gennemsyn
       trends:
+        desc_html: Vis tidligere gennemgåede hashtags, som pt. trender
         title: Populære hashtags
     site_uploads:
-      delete: Slet oplagt fil
+      delete: Slet uploadet fil
+      destroyed_msg: Websteds-upload blev slettet!
     statuses:
       back_to_account: Tilbage til kontosiden
       batch:
         delete: Slet
-        nsfw_off: Marker som værende ikke følsomt
-        nsfw_on: Marker som værende følsomt
+        nsfw_off: Markér som ikke-sensitivt
+        nsfw_on: Markér som sensitivt
       deleted: Slettet
-      failed_to_execute: Udførelsen kunne ikke lade sig gøre
+      failed_to_execute: Udførelse mislykkedes
       media:
-        title: Multimedier
-      no_media: Ingen multimedier
-      no_status_selected: Ingen statusser blev ændret eller ingen blev valgt
-      title: Konto statusser
-      with_media: Med multimedier
+        title: Medier
+      no_media: Ingen medier
+      no_status_selected: Ingen indlæg ændret, da ingen var valgt
+      title: Kontoindlæg
+      with_media: Med medier
+    system_checks:
+      database_schema_check:
+        message_html: Databasemigreringer afventer. Kør dem for at sikre den forventede adfærd fra applikationen
+      rules_check:
+        action: Håndtér serverregler
+        message_html: Ingen serverregler defineret.
+      sidekiq_process_check:
+        message_html: Ingen Sidekiq-proces kører for %{value}-kø(er). Gennemgå din Sidekiq-opsætning
     tags:
-      accounts_today: Unikke brug i dag
-      accounts_week: Unikke brug denne uge
-      context: Kontekst
-      directory: I mappe
-      in_directory: "%{count} i mappe"
-      last_active: Sidst aktiv
+      accounts_today: Unikke anvendelser i dag
+      accounts_week: Unikke anvendelser denne uge
+      breakdown: Dagens anvendelse fordelt på kilde
+      last_active: Senest aktiv
       most_popular: Mest populære
       most_recent: Seneste
       name: Hashtag
-      review: Gennemgå status
+      review: Gennemsynsstatus
       reviewed: Gennemgået
       title: Hashtags
       trending_right_now: Populære lige nu
       unique_uses_today: "%{count} indlæg i dag"
-      unreviewed: Ikke gennemlæst
+      unreviewed: Ikke gennemgået
       updated_msg: Hashtag-indstillinger opdateret
     title: Administration
     warning_presets:
       add_new: Tilføj ny
       delete: Slet
+      edit_preset: Redigér advarselsforvalg
+      empty: Ingen advarselsforvalg defineret endnu.
+      title: Håndtérr advarselsforvalg
   admin_mailer:
+    new_pending_account:
+      body: Detaljerne for den nye konto fremgår nedenfor. Du kan godkende eller afvise denne ansøgning.
+      subject: Ny konto til gennemgang på %{instance} (%{username})
     new_report:
       body: "%{reporter} har anmeldt %{target}"
       body_remote: Nogen fra %{domain} har anmeldt %{target}
       subject: Ny anmeldelse for %{instance} (#%{id})
+    new_trending_tag:
+      body: 'Hashtagget #%{name} teender i dag, men er ikke tidligere blevet gennemgået. Det vises ikke offentligt, medmindre du tillader det eller blot gemme formularen, som den er, for aldrig at høre om det igen.'
+      subject: Nyt hashtag til gennemsyn på %{instance} (#%{name})
   aliases:
     add_new: Opret alias
+    created_msg: Nyt alias oprettet. Du kan nu påbegynde flytningen fra den gamle konto.
+    deleted_msg: Alias fjernet. Flytning fra dén konto til denne vil ikke længere være muligt.
     empty: Du har ingen aliasser.
+    hint_html: Ønsker du at flytte fra en anden konto til denne, kan du hér oprette det alias, der kræves, for at du kan fortsætte med at flytte følgere fra den gamle konto til denne. Denne handling er i sig selv <strong>harmløs og reversibel</strong>. <strong>Kontomigreringen påbegyndes fra den gamle konto</strong>.
+    remove: Fjern aliaslinkning
   appearance:
     advanced_web_interface: Avanceret webgrænseflade
+    advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede webgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, federeret tidslinje, et hvilket som helst antal lister og hashtags.'
     animations_and_accessibility: Animationer og tilgængelighed
     confirmation_dialogs: Bekræftelsesdialoger
     discovery: Opdagelse
@@ -622,63 +743,74 @@ da:
       body: Mastodon oversættes af frivillige.
       guide_link: https://da.crowdin.com/project/mastodon
       guide_link_text: Alle kan bidrage.
-    sensitive_content: Følsomt indhold
+    sensitive_content: Sensitivt indhold
+    toot_layout: Indlægslayout
   application_mailer:
-    notification_preferences: Ændre email præferencer
+    notification_preferences: Skift e-mailpræferencer
     salutation: "%{name}"
-    settings: 'Ændre email præferencer: %{link}'
-    view: 'Se:'
-    view_profile: Se profil
-    view_status: Se status
+    settings: 'Skift e-mailpræferencer: %{link}'
+    view: 'Vis:'
+    view_profile: Vis profil
+    view_status: Vis status
   applications:
-    created: Applikation blev oprettet
-    destroyed: Applikation er blevet slettet
-    invalid_url: Det angivne URL er ugyldigt
-    regenerate_token: Regenerer adgangs token
-    token_regenerated: Adgangs token blev regenereret
-    warning: Vær meget forsigtig med disse data. Del dem aldrig med nogen!
-    your_token: Din adgangs token
+    created: Applikation oprettet
+    destroyed: Applikation slettet
+    invalid_url: Den angivne URL er ugyldig
+    regenerate_token: Regenerér adgangstoken
+    token_regenerated: Adgangstoken regenereret
+    warning: Vær meget påpasselig med disse data. Del dem aldrig med nogen!
+    your_token: Dit adgangstoken
   auth:
     apply_for_account: Anmod om en invitation
-    change_password: Kodeord
+    change_password: Adgangskode
+    checkbox_agreement_html: Jeg accepterer <a href="%{rules_path}" target="_blank">serverreglerne</a> og <a href="%{terms_path}" target="_blank">tjenestevilkårene</a>
+    checkbox_agreement_without_rules_html: Jeg accepterer <a href="%{terms_path}" target="_blank">tjenestevilkårene</a>
     delete_account: Slet konto
-    delete_account_html: Hvis du ønsker at slette din konto, kan du <a href="%{path}">gøre det her</a>. Du vil blive bedt om bekræftelse.
+    delete_account_html: Ønsker du at slette din konto, kan du <a href="%{path}">gøre dette hér</a>. Du vil blive bedt om bekræftelse.
     description:
-      prefix_invited_by_user: "@%{name} inviterer dig til at deltage i denne Mastodons server!"
+      prefix_invited_by_user: "@%{name} inviterer dig til at deltage på denne Mastodon-server!"
       prefix_sign_up: Tilmeld dig Mastodon i dag!
-    didnt_get_confirmation: Har du endnu ikke modtaget instrukser for bekræftelse?
-    dont_have_your_security_key: Har du ikke dine sikkerhedsnøgler?
-    forgot_password: Glemt dit kodeord?
-    invalid_reset_password_token: Adgangskode nulstillings token er ugyldig eller udløbet. Anmod venligst om en ny.
+      suffix: Du vil med en konto kunne følge personer, indsende opdateringer og udveksle beskeder med brugere fra enhver Mastodon-server, og meget mere!
+    didnt_get_confirmation: Ikke modtaget nogle bekræftelsesinstruktioner?
+    dont_have_your_security_key: Har ikke din sikkerhedsnøgle?
+    forgot_password: Glemt din adgangskode?
+    invalid_reset_password_token: Adgangskodenulstillingstoken ugyldigt eller udløbet. Anmod om et nyt.
+    link_to_otp: Angiv en tofaktorkode fra din mobil, eller en gendannelseskode
+    link_to_webauth: Brug din sikkerhedsnøgleenhed
     login: Log ind
     logout: Log ud
     migrate_account: Flyt til en anden konto
-    migrate_account_html: Hvis du ønsker at omdirigere denne konto til en anden, kan du <a href="%{path}">gøre det her</a>.
-    or_log_in_with: Eller log in med
+    migrate_account_html: Ønsker du at omdirigere denne konto til en anden, kan du <a href="%{path}">opsætte dette hér</a>.
+    or_log_in_with: Eller log ind med
     providers:
       cas: CAS
       saml: SAML
     register: Opret dig
     registration_closed: "%{instance} accepterer ikke nye medlemmer"
-    resend_confirmation: Gensend bekræftelses instrukser
-    reset_password: Nulstil kodeord
+    resend_confirmation: Gensend bekræftelsesinstruktioner
+    reset_password: Nulstil adgangskode
     security: Sikkerhed
-    set_new_password: Sæt et nyt kodeord
+    set_new_password: Opsæt ny adgangskode
     setup:
-      email_settings_hint_html: Bekræftelsesmailen blev sendt til %{email}. Hvis denne e-mailadresse ikke er korrekt, kan du ændre den i kontoindstillinger.
+      email_below_hint_html: Er nedenstående e-mailadresse forkert, kan du rette den hér og modtage en ny bekræftelses-e-mail.
+      email_settings_hint_html: Bekræftelsese-mailen er sendt til %{email}. Er denne e-mailadresse forkert, kan du rette den via kontoindstillingerne.
       title: Opsætning
     status:
       account_status: Kontostatus
-      confirming: Venter på at e-mail bekræftelsen er fuldført.
-    trouble_logging_in: Har du problemer med at logge på?
+      confirming: Afventer færdiggørelse af e-mailbekræftelse.
+      functional: Din konto er fuldt operationel.
+      pending: Din ansøgning afventer gennemgang af vores medarbejdere. Dette kan tage noget tid. Du modtager en e-mail, hvis din ansøgning godkendes.
+      redirecting_to: Din konto er inaktiv, da den pt. er omdirigerer til %{acct}.
+    too_fast: Formularen indsendt for hurtigt, forsøg igen.
+    trouble_logging_in: Indlogningsproblemer?
     use_security_key: Brug sikkerhedsnøgle
   authorize_follow:
     already_following: Du følger allerede denne konto
-    already_requested: Du har allerede sendt en følgeanmodning til denne konto
-    error: Der opstod desværre en fejl under søgningen af denne fjerne konto
+    already_requested: Du har allerede sendt en følgeanmodning til den konto
+    error: Desværre opstod en fejl under søgning af fjernkontoen
     follow: Følg
-    follow_request: 'Du har anmodet om at følge:'
-    following: 'Succes! Du følger nu:'
+    follow_request: 'Du har sendt en følgeanmodning til:'
+    following: 'Accepteret! Du følger nu:'
     post_follow:
       close: Du kan også bare lukke dette vindue.
       return: Vis brugerens profil
@@ -686,13 +818,13 @@ da:
     title: Følg %{acct}
   challenge:
     confirm: Fortsæt
-    hint_html: "<strong>Tip:</strong> We won't ask you for your password again for the next hour."
+    hint_html: "<strong>Tip:</strong> Du bliver ikke anmodet om din adgangskode igen den næste time."
     invalid_password: Ugyldig adgangskode
-    prompt: Bekræft din adgangskode for at fortsætte
+    prompt: Bekræft adgangskode for at fortsætte
   crypto:
     errors:
-      invalid_key: er ikke en gyldig Ed25519 eller Curve25519 nøgle
-      invalid_signature: er ikke en gylidig Ed25519 signatur
+      invalid_key: er ikke en gyldig Ed25519- eller Curve25519-nøgle
+      invalid_signature: er ikke en gylidig Ed25519-signatur
   date:
     formats:
       default: "%b %d, %Y"
@@ -700,131 +832,153 @@ da:
   datetime:
     distance_in_words:
       about_x_hours: "%{count}t"
-      about_x_months: "%{count} måneder"
-      about_x_years: "%{count}år"
-      almost_x_years: "%{count}år"
-      half_a_minute: Lige nu
-      less_than_x_minutes: "%{count}m"
-      less_than_x_seconds: Lige nu
-      over_x_years: "%{count}år"
-      x_days: "%{count}d"
-      x_minutes: "%{count}m"
-      x_months: "%{count}md"
-      x_seconds: "%{count}s"
+      about_x_months: "%{count} md"
+      about_x_years: "%{count} år"
+      almost_x_years: "%{count} år"
+      half_a_minute: Netop nu
+      less_than_x_minutes: "%{count} m"
+      less_than_x_seconds: Netop nu
+      over_x_years: "%{count} år"
+      x_days: "%{count} d"
+      x_minutes: "%{count} m"
+      x_months: "%{count} md"
+      x_seconds: "%{count} s"
   deletes:
-    challenge_not_passed: De oplysninger, du indtastede var ikke korrekte
-    confirm_password: Indtast dit nuværende kodeord for at bekræfte din identitet
-    confirm_username: Indtast dit brugernavn for at bekræfte proceduren
+    challenge_not_passed: De angivne oplysninger er forkerte
+    confirm_password: Angiv din nuværende adgangskode for at bekræfte din identitet
+    confirm_username: Angiv dit brugernavn for at bekræfte proceduren
     proceed: Slet konto
-    success_msg: Din konto er nu blevet slettet
+    success_msg: Din konto er nu slettet
     warning:
-      email_change_html: Du kan <a href="%{path}">ændre din e-mail-adresse</a> uden at slette din konto
+      before: 'Inder der fortsættes, læs venligst disse notater omhyggeligt:'
+      caches: Indhold, cachelagret af andre servere, kan fortsat eksistere
+      data_removal: Dine indlæg og andre data fjernes permanent
+      email_change_html: Du kan <a href="%{path}">skifte e-mailadresse</a> uden at slette din konto
+      email_reconfirmation_html: Modtager du ikke bekræftelsese-mailen, kan du <a href="%{path}">anmode om en ny</a>
+      irreversible: Du vil ikke kunne gendanne/genaktivere din konto
+      more_details_html: For yderligere oplysningerer, tjek <a href="%{terms_path}">fortrolighedspolitikken</a>.
       username_available: Dit brugernavn vil blive tilgængeligt igen
       username_unavailable: Dit brugernavn vil forblive utilgængeligt
   directories:
     directory: Profilliste
-    explanation: Opdag brugere baseret på deres interesser
+    explanation: Find brugere baseret på deres interesser
     explore_mastodon: Uforsk %{title}
   domain_validator:
     invalid_domain: er ikke et gyldigt domænenavn
   errors:
-    '400': The request you submitted was invalid or malformed.
+    '400': Din indsendte anmodning er ugyldig eller fejlbehæftet.
     '403': Du har ikke tilladelse til at se denne side.
     '404': Den side du leder efter findes ikke.
-    '406': This page is not available in the requested format.
-    '410': Den side du leder efter findes ikke mere.
+    '406': Denne side er ikke tilgængelig i det anmodede format.
+    '410': Den side, du leder efter, findes ikke længere.
     '422':
-      content: Sikkerhedsbekræftelse mislykkedes. Blokerer du cookies?
-      title: Sikkerheds godkendelse mislykkedes
-    '429': Droslet
+      content: Sikkerhedsbekræftelse mislykkedes. Blokeres cookies?
+      title: Sikkerhedsbekræftelse mislykkedes
+    '429': For mange anmodninger
     '500':
-      content: Beklager men der gik noget galt i vores ende.
-      title: Siden er ikke korrekt
-    '503': Siden kunne ikke serveres på grund af en midlertidig serverfejl.
-    noscript_html: For at bruge Mastodon web applikationen, aktiver JavaScript. Alternativt kan du prøve en af disse <a href="%{apps_path}">apps</a> til Mastodon for din platform.
+      content: Beklager, noget gik galt hos os.
+      title: Denne side er forkert
+    '503': Siden kunne ikke vises grundet en midlertidig serverfejl.
+    noscript_html: For brug af Mastodon-webapplikationen, så aktivér JavaScript. Alternativt, prøv en af disse <a href="%{apps_path}">apps</a> til Mastodon til din platform.
   existing_username_validator:
     not_found: kunne ikke finde en lokal bruger med dette brugenavn
     not_found_multiple: kunne ikke finde %{usernames}
   exports:
     archive_takeout:
       date: Dato
-      download: Hent dit arkiv
-      hint_html: Du kan anmode om et arkiv af dine <strong>trut og oplagt medie</strong>. Den eksporterede data vil være i ActivityPub formattet, læseligt af enhvert kompatibel program. Du kan anmode om et arkiv en gang om ugen.
-      in_progress: Udarbejder dit arkiv...
+      download: Download dit arkiv
+      hint_html: Du kan anmode om et arkiv af dine <strong>trut og oplagt medie</strong>. Den eksporterede data vil være i ActivityPub formattet, læseligt af enhvert kompatibelt program. Du kan anmode om et arkiv én gang om ugen.
+      in_progress: Kompilerer dit arkiv...
       request: Anmod om dit arkiv
       size: Størrelse
     blocks: Du blokerer
     bookmarks: Bogmærker
     csv: CSV
-    domain_blocks: Domæne blokeringer
+    domain_blocks: Domæneblokeringer
     lists: Lister
-    mutes: Du dæmper
-    storage: Medie lager
+    mutes: Du tavsgør
+    storage: Medielagerplads
   featured_tags:
-    add_new: Tilføj ny
+    add_new: Tilføj nyt
     errors:
-      limit: Du har allerede vist det maksimale antal hashtags
+      limit: Du har allerede fremhævet det maksimale antal hashtags
+    hint_html: "<strong>Hvad er fremhævede hashtags?</strong> De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter."
   filters:
     contexts:
       account: Profiler
-      home: Hjemme tidslinje
+      home: Hjemmetidslinje
       notifications: Notifikationer
       public: Offentlig tidslinje
-      thread: Samtaler
+      thread: Konversationer
     edit:
-      title: Rediger filter
+      title: Redigere filter
     errors:
       invalid_context: Ingen eller ugyldig kontekst angivet
-      invalid_irreversible: Uigenkaldelig filtrering virker kun med hjem eller notifikations kontekst
+      invalid_irreversible: Uigenkaldelig filtrering virker kun med hjemme- eller notifikationskontekster
     index:
       delete: Slet
       empty: Du har ingen filtre.
-      title: Filtrer
+      title: Filtre
     new:
       title: Tilføj nyt filter
   footer:
     developers: Udviklere
     more: Mere…
     resources: Ressourcer
-    trending_now: Hot lige nu
+    trending_now: Trender lige nu
   generic:
     all: Alle
-    changes_saved_msg: Ændringerne blev gemt!
+    changes_saved_msg: Ændringerne er gemt!
     copy: Kopier
     delete: Slet
-    order_by: Sorter efter
+    no_batch_actions_available: Ingen multihandlinger tilgængelige på denne side
+    order_by: Sortér efter
     save_changes: Gem ændringer
     validation_errors:
-      one: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende fejl forneden
-      other: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende %{count} fejl forneden
+      one: Noget er ikke er helt i vinkel! Tjek fejlen nedenfor
+      other: Noget er ikke er helt i vinkel! Tjek de %{count} fejl nedenfor
+  html_validator:
+    invalid_markup: 'indeholder ugyldig HTML-markup: %{error}'
   identity_proofs:
     active: Aktiv
-    authorize: Ja, tillad
+    authorize: Ja, godkend
+    authorize_connection_prompt: Godkend denne kryptografiske forbindelse?
+    errors:
+      failed: Den kryptografiske forbindelse mislykkedes. Prøv igen fra %{provider}.
+      keybase:
+        invalid_token: Keybase-tokens er hashes af signaturer og skal udgøre 66 hex tegn
+        verification_failed: Keybase genkender ikke dette token som Keybasebruger %{kb_username}s signatur. Forsøg igen fra Keybase.
+      wrong_user: Kan ikke oprette et bevis til %{proving}, når indlogget %{current}. Log ind som %{proving} og forsøg igen.
+    explanation_html: Her kan du kryptografisk forbinde dine andre identiteter fra andre platforme, såsom Keybase. Dette lader andre personer sende dig krypterede beskeder på disse platforme og giver dem mulighed for at stole på, at det indhold, du sender dem, kommer fra dig.
     i_am_html: Jeg er %{username} på %{service}.
     identity: Identitet
     inactive: Inaktiv
     publicize_checkbox: 'Og toot dette:'
     publicize_toot: 'Det er bevist! Jeg er %{username} på %{service}: %{url}'
     remove: Fjern bevis fra konto
-    removed: Beviset er fjernet fra kontoen
-    status: Status for verifikation
+    removed: Bevis fjernet fra kontoen
+    status: Verifikationsstatus
     view_proof: Se bevis
   imports:
+    errors:
+      over_rows_processing_limit: indeholder mere end %{count} rækker
     modes:
       merge: Sammenflet
+      merge_long: Bibehold eksisterende poster og tilføj nye
       overwrite: Overskriv
-    preface: Du kan importere data du har eksporteret fra en anden server, så som en liste over folk du følger eller blokerer.
-    success: Dine data blev succesfuldt uploaded og vil nu blive behandlet hurtigst muligt
+      overwrite_long: Erstat aktuelle poster med de nye
+    preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer.
+    success: Dine data er uploadet og vil blive behandlet hurtigst muligt
     types:
       blocking: Blokeringsliste
       bookmarks: Bogmærker
-      domain_blocking: Domæne blokeringsliste
+      domain_blocking: Domæneblokeringsliste
       following: Følgningsliste
-      muting: Liste over dæmpninger
-    upload: Læg op
+      muting: Tavsgørelsesliste
+    upload: Upload
   in_memoriam_html: Til minde om.
   invites:
-    delete: Deaktiver
+    delete: Deaktivér
     expired: Udløbet
     expires_in:
       '1800': 30 minutter
@@ -834,79 +988,104 @@ da:
       '604800': 1 uge
       '86400': 1 dag
     expires_in_prompt: Aldrig
-    generate: Generer
-    invited_by: 'Du er blevet inviteret af:'
+    generate: Generér invitationslink
+    invited_by: 'Du blev inviteret af:'
     max_uses:
       one: 1 benyttelse
       other: "%{count} benyttelser"
     max_uses_prompt: Ubegrænset
-    prompt: Generer og del links med andre for at give dem adgang til denne server
+    prompt: Generér og del links med andre for at give dem adgang til denne server
     table:
       expires_at: Udløber
       uses: Benyttelser
-    title: Inviter folk
+    title: Invitere personer
   lists:
     errors:
-      limit: Du har nået det højeste antal lister
+      limit: Maks. listeantal nået
   media_attachments:
     validations:
-      images_and_video: Kan ikke vedhæfte en video til en status der allerede har billeder
-      not_ready: Kan ikke vedhæfte filer, der ikke er færdige med behandlingen. Prøv igen om et øjeblik!
-      too_many: Kan ikke vedhæfte mere en 4 filer
+      images_and_video: En video kan ikke vedhæftes et indlæg med billedindhold
+      not_ready: Filer under behandling kan ikke vedhæftes. Forsøg igen senere!
+      too_many: Maks. 4 filer kan vedhæftes
   migrations:
-    acct: username@domain af den nye konto
+    acct: Flyttet til
+    cancel: Afbryd omdirigering
+    cancel_explanation: Afbrydelse af omdirigeringen vil genaktivere din nuværende konto, men bringer ikke følgerne tilbage, som er blevet flyttet til den anden konto.
+    cancelled_msg: Omdirigeringen afbrudt.
     errors:
+      already_moved: er den samme konto, som du allerede er flyttet til
       missing_also_known_as: er ikke et alias for denne konto
-      move_to_self: kan ikke være den nuværende konto
-      not_found: kunne ikke bive fundet
+      move_to_self: må ikke være den nuværende konto
+      not_found: kunne ikke findes
       on_cooldown: Du er på nedkøling
-    followers_count: Følgere på tidspunktet for flytningen
+    followers_count: Følgere på flytningstidspunktet
     incoming_migrations: Flytter fra en anden konto
-    past_migrations: Tidligere migrationer
+    incoming_migrations_html: For at flytte fra en anden konto til denne skal der først <a href="%{path}">oprettes et kontoalias</a>.
+    moved_msg: Din konto omdirigeres nu til %{acct} og dine følgere overflyttes.
+    not_redirecting: Din konto omdirigerer pt. ikke til nogen anden konto.
+    on_cooldown: Du har for nylig migreret din konto. Denne funktion tilgængeliggøres igen om %{count} dage.
+    past_migrations: Tidligere migreringer
     proceed_with_move: Flyt følgere
     redirected_msg: Din konto omdirigerer nu til %{acct}.
     redirecting_to: Din konto omdirigerer til %{acct}.
+    set_redirect: Opsæt omdirigering
     warning:
-      other_data: Ingen andre data vil blive flyttet automatisk
+      backreference_required: Den nye konto skal først opsættes til at tilbage-referere til denne
+      before: 'Inder der fortsættes, læs venligst disse notater omhyggeligt:'
+      cooldown: Efter flytningen er der en venteperiode, hvor kontoen ikke kan flyttes igen
+      disabled_account: Efterfølgende er din nuværende konto ikke fuldt funktionsdygtig, der er dog adgang til dataeksport samt genaktivering.
+      followers: Denne handling vil flytte alle følgere fra den aktuelle konto til den nye ditto
+      only_redirect_html: Alternativt kan du <a href="%{path}">oprette en omdirigering for din profil alene</a>.
+      other_data: Ingen øvrige data flyttes automatisk
+      redirect: Din nuværende kontoprofil opdateres med en omdirigeringsnotits og ekskluderes fra søgninger
   moderation:
     title: Moderatering
+  move_handler:
+    carry_blocks_over_text: Denne bruger er flyttet fra %{acct}, som du har haft blokeret.
+    carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft tavsgjort.
+    copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, her er dine tidligere noter om dem:'
   notification_mailer:
     digest:
       action: Se alle notifikationer
-      body: Her er en kort gennemgang af de beskeder du gik glip af siden dit sidste besøg den %{since}
+      body: Her er et kort resumé af de beskeder, du er gået glip af siden dit seneste besøg d. %{since}
       mention: "%{name} nævnte dig i:"
       new_followers_summary:
-        one: Du har også fået dig en ny følger mens du var væk! Sådan!
-        other: Du har også fået %{count} nye følgere mens du var væk! Fantastisk!
+        one: Du har også fået en ny følger, mens du var væk! Sådan!
+        other: Du har også fået %{count} nye følgere, mens du var væk! Sådan!
       subject:
-        one: "1 ny notifikation siden du sidst var her \U0001F418"
-        other: "%{count} nye notifikationer siden du sidst var her \U0001F418"
+        one: "1 ny notifikation siden dit senest besøg \U0001F418"
+        other: "%{count} nye notifikationer siden dit senest besøg \U0001F418"
       title: Mens du var væk...
     favourite:
-      body: 'Din status blev favoriseret af %{name}:'
-      subject: "%{name} favoriserede din status"
+      body: 'Dit indlæg blev favoriseret af %{name}:'
+      subject: "%{name} favoriserede dit indlæg"
       title: Ny favorit
     follow:
       body: "%{name} følger dig nu!"
       subject: "%{name} følger dig nu"
       title: Ny følger
     follow_request:
-      action: Håndter følgeranmodninger
+      action: Håndtér følgeanmodninger
       body: "%{name} har anmodet om at følge dig"
-      subject: 'Følger afventer: %{name}'
-      title: Ny følgeranmodning
+      subject: 'Afventende følger: %{name}'
+      title: Ny følgeanmodning
     mention:
-      action: Svar
+      action: Besvar
       body: 'Du blev nævnt af %{name} i:'
       subject: Du blev nævnt af %{name}
       title: Ny omtale
+    poll:
+      subject: En afstemning fra %{name} er afsluttet
     reblog:
-      body: 'Din status blev fremhævet af %{name}:'
-      subject: "%{name} fremhævede din status"
-      title: Ny fremhævelse
+      body: 'Dit indlæg blev boostet af %{name}:'
+      subject: "%{name} boostede dit indlæg"
+      title: Nyt boost
+    status:
+      subject: "%{name} har netop postet"
   notifications:
-    email_events: Begivenheder for e-mail-meddelelser
-    other_settings: Andre indstillinger for notifikationer
+    email_events: Begivenheder for e-mailnotifikationer
+    email_events_hint: 'Vælg begivenheder, som notifikationer skal modtages for:'
+    other_settings: Andre notifikationsindstillinger
   number:
     human:
       decimal_units:
@@ -914,40 +1093,50 @@ da:
         units:
           billion: mia.
           million: mio.
+          quadrillion: kvd.
+          thousand: T
+          trillion: tri.
   otp_authentication:
-    enable: Aktiver
-    wrong_code: Den indtastede kode var ugyldig! Er serverens tid og enhedstid korrekt?
+    code_hint: Angiv koden genereret af din godkendelses-app for at bekræfte
+    description_html: Aktiverer du <strong>tofaktorgodkendelse</strong> vha. af en godkendelses-app, vil du skulle benytte din mobil, der genererer det token, der skal angives ved indlogning.
+    enable: Aktivér
+    instructions_html: "<strong>Skan denne QR-kode i Google Autehnticator eller en lign. TOTP-app på din mobil</strong>. Fra nu af, vil appen generere tokens, som vil skulle angives ifm. indlogning."
+    manual_instructions: 'Kan QR-koden ikke skannes, så du er nødt til manuelt at angive den, er her en simplel tekst-hemmelighed:'
+    setup: Sæt op
+    wrong_code: Den angivne kode er ugyldig! Er server- og enhedsklokkeslæt korrekte?
   pagination:
     newer: Nyere
     next: Næste
     older: Ældre
-    prev: Forrige
-    truncate: "...&hellip;"
+    prev: Foregående
+    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Du har allerede stemt i denne afstemning
-      duplicate_options: indeholder dublerede elementer
+      duplicate_options: indeholder dubletelementer
       duration_too_long: er for langt ude i fremtiden
-      duration_too_short: er for tidligy
+      duration_too_short: er for tidligt
       expired: Denne afstemning er allerede afsluttet
-      invalid_choice: Den valgte stemmeindstilling findes ikke
-      over_character_limit: kan ikke være længere end %{max} tegn hver
-      too_few_options: skal have mere end et element
-      too_many_options: kan ikke indeholde flere end %{max} elementer
+      invalid_choice: Den valgte afstemningsmulighed findes ikke
+      over_character_limit: må maks. udgøre %{max} tegn hver
+      too_few_options: skal have flere end ét element
+      too_many_options: må maks. indeholde %{max} elementer
   preferences:
     other: Andet
+    posting_defaults: Indlægsstandarder
     public_timelines: Offentlige tidslinjer
   reactions:
     errors:
-      limit_reached: Grænsen for forskellige reaktioner er nået
+      limit_reached: Grænse for forskellige reaktioner nået
       unrecognized_emoji: er ikke en genkendt emoji
   relationships:
-    activity: Aktivitet for konto
+    activity: Kontoaktivitet
+    dormant: I dvale
     follow_selected_followers: Følg valgte følgere
     followers: Følgere
     following: Følger
     invited: Inviteret
-    last_active: Sidst aktiv
+    last_active: Senest aktiv
     most_recent: Seneste
     moved: Flyttet
     mutual: Fælles
@@ -955,103 +1144,119 @@ da:
     relationship: Relation
     remove_selected_domains: Fjern alle følgere fra de valgte domæner
     remove_selected_followers: Fjern valgte følgere
-    remove_selected_follows: Følg ikke valgte brugere
-    status: Status for konto
+    remove_selected_follows: Følg ikke længere valgte brugere
+    status: Kontostatus
   remote_follow:
-    acct: Indtast dit brugernavn@domæne du vil handle fra
-    missing_resource: Kunne ikke finde det påkrævede omdirigerings link for din konto
-    no_account_html: Har du ikke en konto? Du kan <a href='%{sign_up_path}' target='_blank'>oprette dig her</a>
+    acct: Angiv dit brugernavn@domæne du vil agere fra
+    missing_resource: Nødvendige omdirigerings-URL til din konto ikke fundet
+    no_account_html: Har ingen konto? Du kan <a href='%{sign_up_path}' target='_blank'>oprette en hér</a>
     proceed: Fortsæt for at følge
     prompt: 'Du er ved at følge:'
+    reason_html: "<strong>Hvorfor er dette skridt nødvendigt?</strong> <code>%{instance}</code> er måske ikke den server, hvor du er registreret, så du skal først omdirigeres til din hjemmeserver."
+  remote_interaction:
+    favourite:
+      proceed: Fortsæt for at føje til favorit
+      prompt: 'Gør dette indlæg til favorit:'
+    reblog:
+      proceed: Fortsæt for at booste
+      prompt: 'Du ønsker at booste dette indlæg:'
+    reply:
+      proceed: Fortsæt for at besvare
+      prompt: 'Du ønsker at besvare dette indlæg:'
   scheduled_statuses:
+    over_daily_limit: Du har nået dagsgrænsen på %{limit} planlagte indlæg
+    over_total_limit: Du har nået grænsen på %{limit} planlagte indlæg
     too_soon: Den planlagte dato skal være i fremtiden
   sessions:
-    activity: Sidste aktivitet
+    activity: Seneste aktivitet
     browser: Browser
     browsers:
-      alipay: Ali-pay
-      blackberry: Blackberry OS
-      chrome: Google Chrome
-      edge: Microsoft edge
-      electron: Elektron
-      firefox: Mozilla Firefox
+      alipay: Alipay
+      blackberry: Blackberry
+      chrome: Chrome
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
       generic: Ukendt browser
       ie: IE
-      micro_messenger: Micromessenger
-      nokia: Nokia S40 ovi browser
-      opera: Opera browser
-      otter: Odder
+      micro_messenger: MicroMessenger
+      nokia: Nokia S40 Ovi Browser
+      opera: Opera
+      otter: Otter
       phantom_js: FantomJS
-      qq: QQ browser
-      safari: Apple Safari
+      qq: QQ Browser
+      safari: Safari
       uc_browser: UCbrowser
-      weibo: Weibo browser
-    current_session: Nuværrende session
+      weibo: Weibo
+    current_session: Aktuelle session
     description: "%{browser} på %{platform}"
-    explanation: Disse er de web browsere der på nuværende tidspunkt er logget ind på din Mastodon konto.
+    explanation: Disse er de webbrowsere, som pt. er pålogget din Mastodon-konto.
     ip: IP
     platforms:
-      adobe_air: Adobe air
+      adobe_air: Adobe Air
       android: Android
-      blackberry: Blackberry OS
-      chrome_os: Chromeos
-      firefox_os: Firefox Os
+      blackberry: Blackberry
+      chrome_os: ChromeOS
+      firefox_os: Firefox OS
       ios: iOS
       linux: Linux
-      mac: Mac.
+      mac: macOS
       other: ukendt platform
-      windows: Microsoft windows
-      windows_mobile: Windows mobil
-      windows_phone: Windows fon
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
     revoke: Tilbagekald
-    revoke_success: Sessionen blev tilbagekaldt
+    revoke_success: Session tilbagekaldt
     title: Sessioner
   settings:
     account: Konto
     account_settings: Kontoindstillinger
-    aliases: Konto-aliaser
+    aliases: Kontoaliaser
     appearance: Udseende
     authorized_apps: Godkendte apps
     back: Tilbage til Mastodon
-    delete: Sletning af konto
+    delete: Kontosletning
     development: Udvikling
-    edit_profile: Rediger profil
-    export: Data eksportering
+    edit_profile: Redigér profil
+    export: Dataeksport
     featured_tags: Fremhævede hashtags
-    import: Importer
-    import_and_export: Importer og eksporter
-    migrate: Konto migrering
+    identity_proofs: Identitetsbeviser
+    import: Import
+    import_and_export: Importér og eksportér
+    migrate: Kontomigrering
     notifications: Notifikationer
     preferences: Præferencer
     profile: Profil
     relationships: Følger og følgere
-    two_factor_authentication: To-faktor godkendelse
+    two_factor_authentication: Tofaktorgodkendelse
     webauthn_authentication: Sikkerhedsnøgler
   statuses:
     attached:
       audio:
         one: "%{count} lyd"
         other: "%{count} lyd"
-      description: 'Vedhæftede: %{attached}'
+      description: 'Vedhæftet: %{attached}'
       image:
         one: "%{count} billede"
         other: "%{count} billeder"
       video:
         one: "%{count} video"
         other: "%{count} videoer"
-    boosted_from_html: Fremhævet fra %{acct_link}
-    content_warning: 'Advarsel om indhold: %{warning}'
+    boosted_from_html: Boostet fra %{acct_link}
+    content_warning: 'Indholdsadvarsel: %{warning}'
     disallowed_hashtags:
       one: 'indeholdte et ikke tilladt hashtag: %{tags}'
       other: 'indeholdte de ikke tilladte hashtags: %{tags}'
-    language_detection: Opfang automatisk sprog
+    errors:
+      in_reply_not_found: Indlægget, du forsøger at besvare, ser ikke ud til at findes.
+    language_detection: Detektér sprog automatisk
     open_in_web: Åbn i browser
-    over_character_limit: grænsen på %{max} tegn er overskredet
+    over_character_limit: grænsen på %{max} tegn er nået
     pin_errors:
-      limit: Du har allerede fastgjort det maksimale antal trut
-      ownership: Du kan ikke fastgøre en anden persons trut
-      private: Ikke offentlige trut kan ikke blive fastgjort
-      reblog: Fremhævede trut kan ikke fastgøres
+      limit: Du har allerede fastgjort det maksimale antal indlæg
+      ownership: Andres indlæg kan ikke fastgøres
+      private: Ikke-offentlige indlæg kan ikke fastgjøres
+      reblog: Et boost kan ikke fastgøres
     poll:
       total_people:
         one: "%{count} person"
@@ -1060,110 +1265,127 @@ da:
         one: "%{count} stemme"
         other: "%{count} stemmer"
       vote: Stem
-    show_more: Vis mere
+    show_more: Vis flere
     show_newer: Vis nyere
     show_older: Vis ældre
     show_thread: Vis tråd
-    sign_in_to_participate: Log ind for at deltage i samtalen
+    sign_in_to_participate: Log ind for at deltage i konversationen
     title: '%{name}: "%{quote}"'
     visibilities:
-      private: Kun-følgere
+      direct: Direkte
+      private: Kun følgere
       private_long: Vis kun til følgere
       public: Offentlig
       public_long: Alle kan se
-      unlisted: Ikke listet
-      unlisted_long: Alle kan se, men vil ikke være listet på offentlige tidslinjer
+      unlisted: Ulistet
+      unlisted_long: Alle kan se, men er ikke listet på offentlige tidslinjer
   stream_entries:
-    pinned: Fastgjort trut
-    reblogged: fremhævede
-    sensitive_content: Følsomt indhold
+    pinned: Fastgjort indlæg
+    reblogged: boostet
+    sensitive_content: Sensitivt indhold
   tags:
-    does_not_match_previous_name: stemmer ikke overens med det forrige navn
+    does_not_match_previous_name: matcher ikke det foregående navn
   terms:
-    body_html: "<p><h2> Privatlivspolitik </h2> \n<h3 id=\"collect\">Hvilke information indsamler vi?</h3> \n\n<ul>\n  <li><em>Grundlæggende kontoinformation </em>: Hvis du registrerer dig på denne server, bliver du måske bedt om at indtaste et brugernavn, en e-mail-adresse og et kodeord. Du kan også indtaste yderligere profiloplysninger, såsom et visningsnavn og biografi, og uploade et profilbillede og headerbillede. Brugernavnet, visningsnavnet, biografien, profilbilledet og hovedbilledet vises altid offentligt. </li> \n  <li> <em>Stillinger, følgende og andre offentlige oplysninger </em>: Listen over personer du følger er offentliggjort, det samme gælder for dine tilhængere. Når du sender en besked, gemmes datoen og klokkeslættet såvel som det program, du sendte beskeden fra. Meddelelser kan indeholde medievedhæftninger, som f.eks. Billeder og videoer. Offentlige og unoterede indlæg er offentligt tilgængelige. Når du har et indlæg på din profil, er det også offentligt tilgængelig information. Dine indlæg leveres til dine tilhængere, i nogle tilfælde betyder det, at de leveres til forskellige servere, og der gemmes kopier der. Når du sletter indlæg, leveres det også til dine tilhængere. Handlingen med reblogging eller favorisering af et andet indlæg er altid offentligt. </li>\n  <li><em> Direkte og efterfølger-kun indlæg </ em>: Alle indlæg gemmes og behandles på serveren. Følgere-kun indlæg leveres til dine tilhængere og brugere, der er nævnt i dem, og direkte indlæg leveres kun til brugere nævnt i dem. I nogle tilfælde betyder det, at de leveres til forskellige servere, og der gemmes kopier der. Vi gør en god tro for at begrænse adgangen til disse stillinger kun til autoriserede personer, men andre servere kan undlade at gøre det. Derfor er det vigtigt at gennemgå de servere, dine tilhængere tilhører. Du kan skifte en mulighed for at godkende og afvise nye følgere manuelt i indstillingerne. <em> Vær opmærksom på, at operatørerne af serveren og enhver modtagende server muligvis kan se sådanne meddelelser </em>, og at modtagere muligvis skærmbilleder, kopierer eller på anden vis deler dem igen. <em> Del ikke nogen farlig information over Mastodon. </em> </li>\n  <li> <em> IP'er og andre metadata </em>: Når du logger ind, registrerer vi den IP-adresse, du logger ind fra, samt navnet på din browser-applikation. Alle indloggede sessioner er tilgængelige til din anmeldelse og tilbagekaldelse i indstillingerne. Den seneste anvendte IP-adresse gemmes i op til 12 måneder. Vi kan også beholde serverlogfiler, som indeholder IP-adressen til hver anmodning til vores server. </li>\n</ul>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"use\">Hvad bruger vi dine oplysninger til? </h3>\n\n<p> Enhver af de oplysninger, vi indsamler fra dig, kan bruges på følgende måder: </p>\n\n<ul>\n  <li> At levere kernen funktionalitet Mastodon. Du kan kun interagere med andres indhold og indsende dit eget indhold, når du er logget ind. Du kan f.eks. Følge andre personer for at se deres kombinerede indlæg på din egen personlige tidslinje. </li>\n  <li> For at hjælpe moderering af samfundet, f.eks. sammenligning af din IP-adresse med andre kendte, for at bestemme forbud mod unddragelse eller andre overtrædelser. </li>\n  <li> Den e-mail-adresse, du angiver, kan bruges til at sende dig oplysninger, meddelelser om andre personer, der interagerer med dit indhold eller sender dig beskeder, og for at svare på henvendelser og / eller andre forespørgsler eller spørgsmål. </li>\n</ul>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"protect\">Hvordan beskytter vi dine oplysninger? </h3>\n\n<p> Vi implementerer en række sikkerhedsforanstaltninger for at opretholde sikkerheden for dine personlige oplysninger, når du indtaster, indsender eller har adgang til dine personlige oplysninger. Bl.a. er din browsersession samt trafikken mellem dine applikationer og API'en sikret med SSL, og din adgangskode er hashed ved hjælp af en stærk envejsalgoritme. Du kan muligvis aktivere tofaktors godkendelse for yderligere at sikre adgang til din konto. </p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"data-retention\"> Hvad er vores data retention politik? </h3>\n\n<p> Vi vil gøre en god tro indsats for at: </p>\n\n<ul>\n  <li> Behold serverlogfiler, der indeholder IP-adressen på alle anmodninger til denne server, for så vidt som sådanne logfiler holdes, ikke mere end 90 dage. </li>\n  <li> Behold de IP-adresser, der er forbundet med registrerede brugere, ikke mere end 12 måneder. </li>\n</ul>\n\n<p> Du kan anmode om og downloade et arkiv af dit indhold, herunder dine indlæg, medievedhæftninger, profilbillede og headerbillede. </p>\n\n<p> Du kan til enhver tid slette din konto. </p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"cookies\"> Bruger vi cookies? </h3>\n\n<p> Ja. Cookies er små filer, som et websted eller dets tjenesteudbyder overfører til din computers harddisk via din webbrowser (hvis du tillader det). Disse cookies gør det muligt for webstedet at genkende din browser og, hvis du har en registreret konto, associerer den med din registrerede konto. </p>\n\n<p> Vi bruger cookies til at forstå og gemme dine præferencer til fremtidige besøg. </p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"disclose\"> Viser vi nogen information til eksterne parter? </h3>\n\n<p> Vi sælger ikke, handler eller på anden måde overfører dine personlige identificerbare oplysninger til eksterne parter. Dette omfatter ikke tillid til tredjeparter, der hjælper os med at drive vores hjemmeside, udføre vores forretning eller servicere dig, så længe parterne er enige om at holde disse oplysninger fortrolige. Vi kan også frigive dine oplysninger, når vi mener, at udgivelsen er hensigtsmæssig for at overholde loven, håndhæve vores webstedspolitikker eller beskytte vores eller andre rettigheder, ejendom eller sikkerhed. </p>\n\n<p> Dit offentlige indhold kan downloades af andre servere i netværket. Dine offentlige og efterfølger-kun indlæg leveres til de servere, hvor dine tilhængere er bosat, og direkte meddelelser leveres til modtagerens servere, for så vidt som disse tilhængere eller modtagere opholder sig på en anden server end dette. </p>\n\n<p> Når du autoriserer et program til at bruge din konto, afhænger det af omfanget af tilladelser, du godkender, det kan få adgang til dine offentlige profiloplysninger, din følgende liste, dine tilhængere, dine lister, alle dine indlæg og dine favoritter. Applikationer kan aldrig få adgang til din e-mail-adresse eller adgangskode. </p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"children\"> Bebyggelse af børn </h3>\n\n<p> Hvis denne server er i EU eller EØS: Vores websted, produkter og tjenester er alle rettet mod personer, der er mindst 16 år gamle. Hvis du er under 16 år, skal du ikke bruge dette websted efter kravene i GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\"> Generel databeskyttelsesforordning </a>). . </p>\n\n<p> Hvis denne server er i USA: Vores websted, produkter og tjenester er alle rettet mod personer, der er mindst 13 år. Hvis du er under 13 år, skal du ikke bruge kravene i COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\"> Børns online beskyttelse af personlige oplysninger </a>) dette websted. </p>\n\n<p> Lovkrav kan være anderledes, hvis denne server er i en anden jurisdiktion. </p>\n\n<hr class = \"spacer\" />\n\n<h3 id=\"changes\"> Ændringer i vores privatlivspolitik </h3>\n\n<p> Hvis vi beslutter os for at ændre vores privatlivspolitik, vil vi sende disse ændringer på denne side. </p>\n\n<p> Dette dokument er CC-BY-SA. Det blev senest opdateret 7. marts 2018. </p>\n\n<p> Oprindelig tilpasset fra <a href=\"https://github.com/discourse/discourse\"> Discourse privacy policy </a>.</p>\n"
-    title: Vilkår og privatlivpolitik for %{instance}
+    body_html: "<p><h2>Fortrolighedspolitik</h2> \n<h3 id=\"collect\">Hvilke oplysninger indsamler vi?</h3> \n\n<ul>\n  <li><em>Grundlæggende kontooplysninger</em>: Opretter du dig på denne server, kan du blive bedt om at angive brugernavn, e-mailadresse og adgangskode. Du kan også angive yderligere profiloplysninger, såsom visningsnavn og biografi, og uploade et profil- og overskriftsbillede. Brugernavn, visningsnavn, biografi, profil- og overskriftsbilleder vises altid offentligt.</li> \n  <li> <em>Indlæg, følgning og andre offentlige oplysninger</em>: Listen over personer, du følger, er offentligt tilgængelig, det samme gælder dine følgere. Når du sender en besked, gemmes dato og klokkeslæt såvel som det program, du sendte beskeden fra. Beskeder kan indeholde medievedhæftninger, såsom billeder og videoer. Offentlige og ulistede indlæg er offentligt tilgængelige. Når du fremhæver et indlæg på din profil, er det også offentligt tilgængelig information. Dine indlæg leveres til dine tilhængere, i nogle tilfælde betyder det, at de leveres til forskellige servere, hvor kopier gemmes. Når du sletter indlæg, leveres det også til dine følgere. Genbloggingshandlinger eller favorisering af et andet indlæg sker altid offentligt.</li>\n  <li><em>Direkte og kun følgere-indlæg</em>: Alle indlæg gemmes og behandles på serveren. Kun følgere-indlæg leveres til dine følgere og brugere, som er nævnt i disse, og direkte indlæg leveres kun til brugere nævnt heri. I visse tilfælde betyder dette, at de leveres til forskellige servere, hvor der gemmes kopier. Vi gør en bedste-evne indsats for at begrænse adgangen til disse indlæg til kun godkendte personer, men andre servere kan undlade dette tiltag. Det er derfor vigtigt at gennemgå de servere, dine følgere tilhører. Du kan skifte en valgmulighed for at godkende og afvise nye følgere manuelt i indstillingerne.<em>Husk dog på, at operatørerne af serveren og enhver modtagende server vil kunne se sådanne meddelelser</em>, og at modtagere vil kunne tage skærmfotos, kopiere eller på anden vis deler disse igen.<em> Del ingen sensitive mv. oplysninger over Mastodon.</em> </li>\n  <li> <em>IP'er og andre metadata</em>: Når du logger ind, registrerer vi den IP-adresse, du logger ind fra, samt navnet på din browser-applikation. Du vil have alle indloggede sessioner tilgængelige for gennemgang og tilbagekaldelse via indstillingerne. Den senest anvendte IP-adresse gemmes i op til 12 måneder. Vi kan også beholde serverlogfiler indeholdende IP-adressen for hver forespørgsel til vores server.</li>\n</ul>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"use\">Hvad bruger vi dine oplysninger til?</h3>\n\n<p>Enhver oplysning, vi indsamler fra dig, kan blive brugt på flg. måder: </p>\n\n<ul>\n  <li>Til at levere Mastodons kernfunktionalitet. Du kan kun interagere med andres indhold og indsende dit eget, når du er logget ind. Du kan f.eks. følge andre personer for at se deres kombinerede indlæg på din egen personlige tidslinje.</li>\n  <li>Som hjælp til moderering af fællesskabet, f.eks. sammenligning af din IP-adresse med andre kendte, for at bestemme udelukkelsesomgåelse eller andre overtrædelser.</li>\n  <li>Den af dig angivne e-mailadresse kan bruges til at sende dig oplysninger, notifikationer om andre personer, som interagerer med dit indhold eller sender dig beskeder samt til at svare på henvendelser og/eller andre forespørgsler eller spørgsmål. </li>\n</ul>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"protect\">Hvordan beskytter vi dine oplysninger?</h3>\n\n<p>Vi implementerer en række sikkerhedsforanstaltninger for at sikre dine personlige oplysninger, når du angiver, indsender eller tilgår dine personlige oplysninger. Bl.a. sikres din browsersession samt trafikken mellem dine applikationer og API'en med SSL, og din adgangskode er hashed vha. en stærk envejsalgoritme. Du kan aktivere tofaktorgodkendelse for yderligere at adgangssikre din konto.</p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"data-retention\">Hvad er vores datalagringspolitik?</h3>\n\n<p>Vi vil efter bedste oprigtige evne gøre en indsats for at: </p>\n\n<ul>\n  <li>Beholde/lagre serverlogfiler indeholdende IP-adressen på alle forespørgsler til denne server, for så vidt at sådanne logfiler ikke opbevares/lagres længere end 90 dage.</li>\n  <li>Beholde/lagre IP-adresser forbundet med registrerede brugere i maksimalt 12 måneder.</li>\n</ul>\n\n<p>Du kan anmode om og downloade et arkiv af dit indhold, herunder dine indlæg, medievedhæftninger samt profil- og headerbilleder </p>\n\n<p>Du kan til enhver tid slette din konto permanent.</p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"cookies\">Bruger vi cookies?</h3>\n\n<p>Ja. Cookies er små filer, som et websted eller dets tjenesteudbyder overfører til din computers lagerplads via din webbrowser (hvis du tillader det). Disse cookies gør det muligt for webstedet at genkende din browser og, hvis du har en registreret konto, associerer den med din registrerede konto.</p>\n\n<p>Vi bruger cookies til at forstå og gemme dine præferencer for fremtidige besøg.</p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"disclose\">Afslører vi nogle oplysninger til eksterne parter?</h3>\n\n<p>Vi hverken sælger, handler/bytter eller på anden måde overfører dine personlige identificerbare oplysninger til eksterne parter. Herfra undtaget er dog betroede tredjeparter, som hjælper os med at drive vores websted, drive vores forretning eller servicere dig, så længe parterne accepterer at holde disse oplysninger fortrolige. Vi kan også vælge at frigive dine oplysninger, såfremt vi mener, at frigivelsen er hensigtsmæssig ift. at overholde loven, håndhæve vores webstedspolitikker eller beskytte vores/andres rettigheder, ejendom eller sikkerhed.</p>\n\n<p>Dit offentlige indhold kan blive downloades af andre servere i netværket. Dine offentlige og kun-følgere indlæg leveres til de servere, hvor dine tilhængere er hjemhørende, og direkte beskeder leveres til modtagerens servere, for så vidt som disse følgere/modtagere ikke er hjemhørende på denne server.</p>\n\n<p>Når du godkender en applikation til at bruge din konto, afhængt af tilladelsesomfanget, godkender du, at det kan tilgå dine offentlige profiloplysninger, din liste over dem, du følger, dine følgere, dine lister, alle dine indlæg og dine favoritter. Applikationer kan aldrig tilgå din e-mailadresse eller adgangskode.</p>\n\n<hr class=\"spacer\" />\n\n<h3 id=\"children\">Børns brug af webstedet</h3>\n\n<p>Hvis denne server er i EU eller EØS: Vores websted, produkter og tjenester er alle er alle beregnet på personer, som er fyldt 16 år. Er du ike fyldt 16 år, så benyt ikke dette websted jf. kravene i GDPR, (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">Generel Databeskyttelsesforordning</a>).</p>\n\n<p>Hvis denne server er i USA: Vores websted, produkter og tjenester er alle rettet mod personer, som er fyldt 13 år. Er du ikke fyldt 13 år, så benyt ikke dette websted jf. kravene i COPPA, (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Børns online fortrolighedsbeskyttelsesslov</a>).</p>\n\n<p>Lovkrav kan afvige, hvis denne server befinder sig i et andet retsområde.</p>\n\n<hr class = \"spacer\" />\n\n<h3 id=\"changes\">Ændringer i vores fortrolighedspolitik</h3>\n\n<p>Beslutter vi os for at ændre vores fortrolighedspolitik, vil disse ændringer fremgå på denne side.</p>\n\n<p>Dette dokument er CC-BY-SA, og det blev senest opdateret 7. marts 2018.</p>\n\n<p> Oprindelig tilpasset fra <a href=\"https://github.com/discourse/discourse\"> Discourse' Fortrolighedspolitik</a>.</p>\n"
+    title: Tjenestevilkår og Fortrolighedspolitik for %{instance}
   themes:
-    contrast: Mastodon (Høj kontrast)
-    default: Mastodont (Mørk)
-    mastodon-light: Mastodon (Lys)
+    contrast: Mastodon (høj kontrast)
+    default: Mastodont (mørkt)
+    mastodon-light: Mastodon (lyst)
   time:
     formats:
       default: "%b %d, %Y, %H:%M"
       month: "%b %Y"
   two_factor_authentication:
     add: Tilføj
-    disable: Deaktiver
-    edit: Rediger
-    enabled: To-faktor godkendelse er aktiveret
-    enabled_success: To-faktor godkendelse succesfuldt aktiveret
-    generate_recovery_codes: Generer gendannelseskoder
-    lost_recovery_codes: Gendannelseskoder vil lade dig få adgang til din konto hvis du mister din telefon. Hvis du har mistet dine gendannelseskoder, kan du regenerere dem her. Dine gamle gendannelseskoder vil blive ugyldige.
-    methods: To-faktor metoder
-    recovery_codes: Reserve koder
-    recovery_codes_regenerated: Reserve koder blev succesfuldt regenereret
-    recovery_instructions_html: Hvis du nogensinde mister adgang til din telefon, kan du bruge en af genoprettelses koderne forneden for at få adgang til din konto. <strong>Gem gendannelses koderne et sikkert sted</strong>. Foreksempel kan du printe dem ud og gemme dem sammen med andre vigtige dokumenter.
+    disable: Deaktivér 2FA
+    disabled_success: Tofaktorgodkendelse deaktiveret
+    edit: Redigér
+    enabled: Tofaktorgodkendelse aktiveret
+    enabled_success: Tofaktorgodkendelse aktiveret
+    generate_recovery_codes: Generér gendannelseskoder
+    lost_recovery_codes: Gendannelseskoder lader dig opnå adgang til din konto, hvis du mister din mobil. Har du mistet dine gendannelseskoder, kan du regenerere dem her. Dine gamle gendannelseskoder ugyldiggøres.
+    methods: Tofaktormetoder
+    otp: Godkendelses-app
+    recovery_codes: Sikkerhedskopiér koder
+    recovery_codes_regenerated: Gendannelseskoder er regenereret
+    recovery_instructions_html: Mister du nogensinde adgang til din mobil, kan du bruge en af gendannelseskoderne nedenfor til at opnå adgang til din konto. <strong>Opbevar gendannelseskoderne et sikkert sted</strong>. Du kan f.eks. udskrive dem, og gemme dem sammen med andre vigtige dokumenter.
     webauthn: Sikkerhedsnøgler
   user_mailer:
     backup_ready:
-      explanation: Din anmodning for fuld backup af din Mastodon konto. Den er nu klar til at blive hentet!
-      subject: Dit arkiv er klar til at blive hentet ned
-      title: Udpluk af arkiv
+      explanation: Den anmodede fulde sikkerhedskopi af din Mastodon-konto er nu klar til download!
+      subject: Dit arkiv er klar til download
+      title: Arkiv-takeout
     sign_in_token:
       details: 'Her er detaljer om forsøget:'
-      subject: Bekræft venligst forsøg på at logge ind
-      title: Login forsøg
+      explanation: 'Der er registreret et forsøg på at logge ind på din konto fra en ukendt IP-adresse. Er dette er dig, så angiv nedenstående sikkerhedskode på siden med log ind-verifikationssiden:'
+      further_actions: 'Var dette ikke dig, så ændr din adgangskode og aktivér tofaktorgodkendelse på din konto. Du kan gøre dette hér:'
+      subject: Bekræft indlogningsforsøg
+      title: Indlogningsforsøg
     warning:
+      explanation:
+        disable: Du kan ikke længere logge ind på, eller på anden vis bruge, din konto, men din profil og øvrige data forbliver intakte.
+        sensitive: Dine uploadede mediefiler og linkede medier vil blive behandlet som sensitive.
+        silence: Du kan stadig bruge din konto, men kun personer, som allerede følger dig, vil se dine indlæg på denne server, og du kan blive udelukket fra forskellige offentlige lister. Personer vil stadig manuelt kunne følge dig.
+        suspend: Du kan ikke længere bruge din konto, og din profil samt øvrige data kan ikke længere tilgås. Du kan stadig logge ind for at anmode om en sikkerhedskopi af dine data, indtil dataene helt er fjernet. men visse data bevares mhp. at forhindre dig i at omgå udelukkelsen.
+      get_in_touch: Du kan besvare denne e-mail for at komme i kontakt med personalet på %{instance}.
       review_server_policies: Gennemgå serverpolitikker
-      statuses: 'Især for:'
+      statuses: 'Specifikt til:'
       subject:
         disable: Din konto %{acct} er blevet frosset
         none: Advarsel for %{acct}
+        sensitive: Din konto %{acct} opslagsmedie er blevet markeret som sensitivt
         silence: Din konto %{acct} er blevet begrænset
         suspend: Din konto %{acct} er blevet suspenderet
       title:
         disable: Konto frosset
         none: Advarsel
+        sensitive: Dit medie er blevet markeret som sensitivt
         silence: Konto begrænset
         suspend: Konto suspenderet
     welcome:
       edit_profile_action: Opsæt profil
-      edit_profile_step: Du kan skræddersy din profil ved at uploade et profilbillede, overskrift, ændre dit visningsnavn og mere. Hvis du kunne tænke dig at gennemse nye følgere før de må følge dig, kan du låse din konto.
-      explanation: Her er nogle råd til at starte med
-      final_action: Kom igang med at poste
-      final_step: 'Start med at skrive opslag! Selv uden følgere vil dine offentlige beskeder kunne ses af andre, foreksempel på den lokale tidslinje og i hashtags. Måske kunne du tænke dig at introducere dig selv på #introductions hashtagget.'
+      edit_profile_step: Du kan tilpasse din profil ved at uploade et profilbillede, overskrift, ændre dit visningsnavn mm. Ønsker du at vurdere nye følgere, før de må følge dig, kan du låse din konto.
+      explanation: Her er nogle råd for at få dig igang
+      final_action: Begynd at poste
+      final_step: 'Begynd at poste! Selv uden følgere vil dine offentlige beskeder kunne ses af andre f.eks. på den lokale tidslinje og i hashtags. Måske kunne du tænke dig at introducere dig selv på #introductions-hashtagget.'
       full_handle: Dit fulde brugernavn
-      full_handle_hint: Dette er hvad du vil fortælle dine venner så de kan sende dig beskeder eller følge dig fra andre server.
+      full_handle_hint: Dette er, hvad du vil fortælle dine venner, så de kan sende dig beskeder eller følge dig fra andre server.
       review_preferences_action: Ændre præferencer
-      review_preferences_step: Vær sikker på at sætte dine præferencer, så som hvilke emails du kunne tænke dig at modtage, eller hvilket niveau af privatliv der skal være standard for dine opslag. Hvis du kunne tænke dig ikke at blive køresyg, kan du vælge at aktivere automatisk afspilning af GIFfer.
+      review_preferences_step: Vær sikker på at opsætte dine præferencer, såsom hvilke e-mails du kunne tænke dig at modtage, eller hvilket fortrolighedsniveau, der skal være standard for dine opslag. Har du ikke let til køresyge, kan du vælge at aktivere auto-afspilning af GIF'er.
       subject: Velkommen til Mastodon
-      tip_federated_timeline: Den delte tidslinje er et brandslange agtigt indblik over Mastodon netværket. Men det inkluderer kun folk dine naboer abonnerer på, så den er ikke fuldendt.
-      tip_following: Du følger som standard administratoren(e) for den server du er på. For at finde flere folk, tjek både den lokale og fælles tidslinje.
-      tip_local_timeline: Den lokale tidslinje er et have af folk i %{instance}. Disse er dine umiddelbare naboer!
-      tip_mobile_webapp: Hvis din mobil browser tilbyder dig at tilføje Mastodon til din hjemmeskærm, kan du modtage push meddelelser. Dette opfører sig på mange måder ligesom en almindelig app!
-      tips: Råd
+      tip_federated_timeline: Den delte tidslinje giver det store overblik over Mastodon-netværket, men det inkluderer kun folk, dine naboer abonnerer på, så det er ikke komplet.
+      tip_following: Du følger som standard din servers admin(s). For at finde flere interessante folk, så tjek den lokale og fælles tidslinje.
+      tip_local_timeline: Den lokale tidslinje er det store overblik over folk på %{instance}. Disse er dine umiddelbare naboer!
+      tip_mobile_webapp: Tilbyder din mobilbrowser at føje Mastodon til din hjemmeskærm, kan du modtage push-notifikationer. Dette fungerer på mange måder ligesom en almindelig app!
+      tips: Tips
       title: Velkommen ombord, %{name}!
   users:
-    blocked_email_provider: Denne e-mail-udbyder er ikke tilladt
-    follow_limit_reached: Du kan ikke følge mere end %{limit} personer
-    generic_access_help_html: Har du problemer med at få adgang til din konto? Du kan komme i kontakt med %{email} for hjælp
-    invalid_email: E-mail adressen er ugyldig
-    invalid_email_mx: E-mail-adressen virker ikke til at eksistere
-    invalid_otp_token: Ugyldig to-faktor kode
+    follow_limit_reached: Du kan maks. følge %{limit} personer
+    generic_access_help_html: Problemer med at tilgå din konto? Du kan kontakte %{email} for hjælp
+    invalid_otp_token: Ugyldig tofaktorkode
     invalid_sign_in_token: Ugyldig sikkerhedskode
-    otp_lost_help_html: Hvis du har mistet adgang til begge, kan du få kontakt via %{email}
-    seamless_external_login: Du er logget ind via en ekstern service, så er kodeord og e-mail indstillinger ikke tilgængelige.
+    otp_lost_help_html: Har du mistet adgang til begge, kan du kontakte %{email}
+    seamless_external_login: Du er logget ind via en ekstern tjeneste, så adgangskode- og e-mailindstillinger er utilgængelige.
     signed_in_as: 'Logget ind som:'
+    suspicious_sign_in_confirmation: Du lader ikke at have logget ind fra denne enhed før, og du har ikke logget ind i et stykke tid, så der sendes en sikkerhedskode til din e-mailadresse mhp. at bekræfte din identitet.
   verification:
-    verification: Verificering
+    explanation_html: 'Du kan <strong>bekræfte dig selv som ejer af linkene i din profilmetadata</strong>. For at gøre det, skal det linkede websted indeholde et link pegende tilbage til din Mastodon-profil. Returlinket <strong>skal</strong> have en <code>rel="mig"</code>-attribut. Linkets tekstindhold betyder ikke noget. Her er et eksempel:'
+    verification: Bekræftelse
   webauthn_credentials:
     add: Tilføj ny sikkerhedsnøgle
     create:
+      error: Der var et problem med at tilføje din sikkerhedskode. Forsøg igen.
       success: Din sikkerhedsnøgle blev tilføjet.
     delete: Slet
+    delete_confirmation: Sikker på, at du vil slette denne sikkerhedsnøgle?
+    description_html: Aktiverer du <strong>sikkerhedsnøglegodkendelse</strong>, vil indlogning kræve brug af en af dine sikkerhedsnøgler.
     destroy:
-      success: Din sikkerhedsnøgle blev slettet.
+      error: Der var et problem med at slette din sikkerhedsnøgle. Forsøg igen.
+      success: Din sikkerhedsnøgle er slettet.
     invalid_credential: Ugyldig sikkerhedsnøgle
-    nickname_hint: Indtast kaldenavnet på din nye sikkerhedsnøgle
+    nickname_hint: Angiv kaldenavnet på din nye sikkerhedsnøgle
     not_enabled: Du har endnu ikke aktiveret WebAuthn
     not_supported: Denne browser understøtter ikke sikkerhedsnøgler
-    registered_on: Registreret den %{date}
+    otp_required: For at bruge sikkerhedsnøgler skal tofaktorgodkendelse først aktiveres.
+    registered_on: Registreret d. %{date}
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 34d03f808..2ccdf3a0d 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -26,6 +26,8 @@ de:
       Dieser wird für Föderationszwecke verwendet und sollte nicht blockiert werden, es sei denn du möchtest die gesamte Instanz blockieren.
     learn_more: Mehr erfahren
     privacy_policy: Datenschutzerklärung
+    rules: Server-Regeln
+    rules_html: 'Unten ist eine Zusammenfassung der Regeln, denen du folgen folgen musst, wenn du ein Konto auf diesem Mastodon-Server haben möchtest:'
     see_whats_happening: Finde heraus, was gerade in der Welt los ist
     server_stats: 'Serverstatistiken:'
     source_code: Quellcode
@@ -78,7 +80,6 @@ de:
       other: Beiträge
     posts_tab_heading: Beiträge
     posts_with_replies: Beiträge mit Antworten
-    reserved_username: Dieser Profilname ist belegt
     roles:
       admin: Administrator
       bot: Bot
@@ -229,6 +230,7 @@ de:
         create_domain_block: Domain blockieren
         create_email_domain_block: E-Mail-Domain-Block erstellen
         create_ip_block: IP-Regel erstellen
+        create_unavailable_domain: Nicht verfügbare Domain erstellen
         demote_user: Benutzer degradieren
         destroy_announcement: Ankündigung löschen
         destroy_custom_emoji: Eigene Emoji löschen
@@ -237,6 +239,7 @@ de:
         destroy_email_domain_block: E-Mail-Domain-Blockade löschen
         destroy_ip_block: IP-Regel löschen
         destroy_status: Beitrag löschen
+        destroy_unavailable_domain: Nicht verfügbare Domain löschen
         disable_2fa_user: 2FA deaktivieren
         disable_custom_emoji: Benutzerdefiniertes Emoji deaktivieren
         disable_user: Benutzer deaktivieren
@@ -260,46 +263,48 @@ de:
         update_domain_block: Domain Block aktualisieren
         update_status: Beitrag aktualisieren
       actions:
-        assigned_to_self_report: "%{name} hat sich die Meldung %{target} selbst zugewiesen"
-        change_email_user: "%{name} hat die E-Mail-Adresse des Nutzers %{target} geändert"
-        confirm_user: "%{name} hat die E-Mail-Adresse von %{target} bestätigt"
-        create_account_warning: "%{name} hat eine Warnung an %{target} gesendet"
-        create_announcement: "%{name} hat die neue Ankündigung %{target} erstellt"
-        create_custom_emoji: "%{name} hat neues Emoji %{target} hochgeladen"
-        create_domain_allow: "%{name} hat die Domain %{target} gewhitelistet"
-        create_domain_block: "%{name} hat die Domain %{target} blockiert"
-        create_email_domain_block: "%{name} hat die E-Mail-Domain %{target} geblacklistet"
-        create_ip_block: "%{name} hat eine Regel für IP %{target} erstellt"
-        demote_user: "%{name} stufte Benutzer_in %{target} herunter"
-        destroy_announcement: "%{name} hat die neue Ankündigung %{target} gelöscht"
-        destroy_custom_emoji: "%{name} zerstörte Emoji %{target}"
-        destroy_domain_allow: "%{name} hat die Domain %{target} von der Whitelist entfernt"
-        destroy_domain_block: "%{name} hat die Domain %{target} entblockt"
-        destroy_email_domain_block: "%{name} hat die E-Mail-Domain %{target} gewhitelistet"
-        destroy_ip_block: "%{name} hat eine Regel für IP %{target} gelöscht"
-        destroy_status: "%{name} hat einen Beitrag von %{target} entfernt"
-        disable_2fa_user: "%{name} hat Zwei-Faktor-Anforderung für Benutzer_in %{target} deaktiviert"
-        disable_custom_emoji: "%{name} hat das %{target} Emoji deaktiviert"
-        disable_user: "%{name} hat Zugang von Benutzer_in %{target} deaktiviert"
-        enable_custom_emoji: "%{name} hat das %{target} Emoji aktiviert"
-        enable_user: "%{name} hat Zugang von Benutzer_in %{target} aktiviert"
-        memorialize_account: "%{name} hat das Konto von %{target} in eine Gedenkseite umgewandelt"
-        promote_user: "%{name} hat %{target} befördert"
-        remove_avatar_user: "%{name} hat das Profilbild von %{target} entfernt"
-        reopen_report: "%{name} hat die Meldung %{target} wieder geöffnet"
-        reset_password_user: "%{name} hat das Passwort von %{target} zurückgesetzt"
-        resolve_report: "%{name} hat die Meldung %{target} bearbeitet"
-        sensitive_account: "%{name} markierte %{target}'s Medien als NSFW"
-        silence_account: "%{name} hat das Konto von %{target} stummgeschaltet"
-        suspend_account: "%{name} hat das Konto von %{target} verbannt"
-        unassigned_report: "%{name} hat die Zuweisung der Meldung %{target} entfernt"
-        unsensitive_account: "%{name} markierte %{target}'s Medien nicht als NSFW"
-        unsilence_account: "%{name} hat die Stummschaltung von %{target} aufgehoben"
-        unsuspend_account: "%{name} hat die Verbannung von %{target} aufgehoben"
-        update_announcement: "%{name} aktualisierte Ankündigung %{target}"
-        update_custom_emoji: "%{name} hat das %{target} Emoji geändert"
-        update_domain_block: "%{name} hat den Domain-Block für %{target} aktualisiert"
-        update_status: "%{name} hat einen Beitrag von %{target} aktualisiert"
+        assigned_to_self_report_html: "%{name} hat sich die Meldung %{target} selbst zugewiesen"
+        change_email_user_html: "%{name} hat die E-Mail-Adresse des Nutzers %{target} geändert"
+        confirm_user_html: "%{name} hat die E-Mail-Adresse von %{target} bestätigt"
+        create_account_warning_html: "%{name} hat eine Warnung an %{target} gesendet"
+        create_announcement_html: "%{name} hat die neue Ankündigung %{target} erstellt"
+        create_custom_emoji_html: "%{name} hat neues Emoji %{target} hochgeladen"
+        create_domain_allow_html: "%{name} hat die Domain %{target} gewhitelistet"
+        create_domain_block_html: "%{name} hat die Domain %{target} blockiert"
+        create_email_domain_block_html: "%{name} hat die E-Mail-Domain %{target} geblacklistet"
+        create_ip_block_html: "%{name} hat eine Regel für IP %{target} erstellt"
+        create_unavailable_domain_html: "%{name} hat die Lieferung an die Domain %{target} eingestellt"
+        demote_user_html: "%{name} stufte Benutzer_in %{target} herunter"
+        destroy_announcement_html: "%{name} hat die neue Ankündigung %{target} gelöscht"
+        destroy_custom_emoji_html: "%{name} zerstörte Emoji %{target}"
+        destroy_domain_allow_html: "%{name} hat die Domain %{target} von der Whitelist entfernt"
+        destroy_domain_block_html: "%{name} hat die Domain %{target} entblockt"
+        destroy_email_domain_block_html: "%{name} hat die E-Mail-Domain %{target} gewhitelistet"
+        destroy_ip_block_html: "%{name} hat eine Regel für IP %{target} gelöscht"
+        destroy_status_html: "%{name} hat einen Beitrag von %{target} entfernt"
+        destroy_unavailable_domain_html: "%{name} setzte die Lieferung an die Domain %{target} fort"
+        disable_2fa_user_html: "%{name} hat Zwei-Faktor-Anforderung für Benutzer_in %{target} deaktiviert"
+        disable_custom_emoji_html: "%{name} hat das %{target} Emoji deaktiviert"
+        disable_user_html: "%{name} hat Zugang von Benutzer_in %{target} deaktiviert"
+        enable_custom_emoji_html: "%{name} hat das %{target} Emoji aktiviert"
+        enable_user_html: "%{name} hat Zugang von Benutzer_in %{target} aktiviert"
+        memorialize_account_html: "%{name} hat das Konto von %{target} in eine Gedenkseite umgewandelt"
+        promote_user_html: "%{name} hat %{target} befördert"
+        remove_avatar_user_html: "%{name} hat das Profilbild von %{target} entfernt"
+        reopen_report_html: "%{name} hat die Meldung %{target} wieder geöffnet"
+        reset_password_user_html: "%{name} hat das Passwort von %{target} zurückgesetzt"
+        resolve_report_html: "%{name} hat die Meldung %{target} bearbeitet"
+        sensitive_account_html: "%{name} markierte %{target}'s Medien als NSFW"
+        silence_account_html: "%{name} hat das Konto von %{target} stummgeschaltet"
+        suspend_account_html: "%{name} hat das Konto von %{target} verbannt"
+        unassigned_report_html: "%{name} hat die Zuweisung der Meldung %{target} entfernt"
+        unsensitive_account_html: "%{name} markierte %{target}'s Medien nicht als NSFW"
+        unsilence_account_html: "%{name} hat die Stummschaltung von %{target} aufgehoben"
+        unsuspend_account_html: "%{name} hat die Verbannung von %{target} aufgehoben"
+        update_announcement_html: "%{name} aktualisierte Ankündigung %{target}"
+        update_custom_emoji_html: "%{name} hat das %{target} Emoji geändert"
+        update_domain_block_html: "%{name} hat den Domain-Block für %{target} aktualisiert"
+        update_status_html: "%{name} hat einen Beitrag von %{target} aktualisiert"
       deleted_status: "(gelöschter Beitrag)"
       empty: Keine Protokolle gefunden.
       filter_by_action: Nach Aktion filtern
@@ -314,10 +319,12 @@ de:
       new:
         create: Ankündigung erstellen
         title: Neue Ankündigung
+      publish: Veröffentlichen
       published_msg: Ankündigung erfolgreich erstellt!
       scheduled_for: Geplant für %{time}
       scheduled_msg: Ankündigung ist zur Veröffentlichung vorgemerkt!
       title: Ankündigungen
+      unpublish: Veröffentlichung rückgängig machen
       unpublished_msg: Ankündigung ist jetzt nicht mehr sichtbar!
       updated_msg: Ankündigung erfolgreich geändert!
     custom_emojis:
@@ -362,7 +369,6 @@ de:
       feature_profile_directory: Profilverzeichnis
       feature_registrations: Offene Anmeldung
       feature_relay: Föderationsrelais
-      feature_spam_check: Anti-Spam
       feature_timeline_preview: Zeitleistenvorschau
       features: Funktionen
       hidden_service: Föderation mit versteckten Diensten
@@ -440,9 +446,34 @@ de:
         create: Blockade erstellen
         title: Neue E-Mail-Domain-Blockade
       title: E-Mail-Domain-Blockade
+    follow_recommendations:
+      description_html: "<strong>Folgeempfehlungen helfen neuen Nutzern dabei, schnell interessante Inhalte zu finden</strong>. Wenn ein Nutzer noch nicht genug mit anderen interagiert hat, um personalisierte Folgeempfehlungen zu erstellen, werden stattdessen diese Benutzerkonten verwendet. Sie werden täglich basiert auf einer Mischung aus am meisten interagierenden Benutzerkonten und solchen mit den meisten Folgenden für eine bestimmte Sprache neuberechnet."
+      language: Für Sprache
+      status: Status
+      suppress: Folgeempfehlungen unterdrücken
+      suppressed: Unterdrückt
+      title: Folgeempfehlungen
+      unsuppress: Nicht mehr unterdrücken
     instances:
+      back_to_all: Alle
+      back_to_limited: Beschränkt
+      back_to_warning: Warnung
       by_domain: Domain
+      delivery:
+        all: Alle
+        clear: Zustellfehler löschen
+        restart: Lieferung neu starten
+        stop: Lieferung stoppen
+        title: Zustellung
+        unavailable: Nicht verfügbar
+        unavailable_message: Zustellung funktioniert nicht
+        warning: Warnung
+        warning_message:
+          one: Zustellfehler seit %{count} Tag
+          other: Zustellfehler seit %{count} Tagen
       delivery_available: Zustellung funktioniert
+      delivery_error_days: Tage seitdem die Zustellung nicht funktioniert
+      delivery_error_hint: Wenn eine Lieferung für %{count} Tage nicht möglich ist, wird sie automatisch als nicht lieferbar markiert.
       empty: Keine Domains gefunden.
       known_accounts:
         one: "%{count} bekanntes Konto"
@@ -542,6 +573,13 @@ de:
       unassign: Zuweisung entfernen
       unresolved: Ungelöst
       updated_at: Aktualisiert
+    rules:
+      add_new: Regel hinzufügen
+      delete: Löschen
+      description_html: Während die meisten behaupten, die Nutzungsbedingungen gelesen und akzeptiert zu haben, lesen die Menschen sie in der Regel erst nach einem Problem. <strong>Vereinfache es, die Regeln deines Servers auf einen Blick zu sehen, indem du sie in einer einfachen Auflistung zur Verfügung stellst.</strong> Versuche die einzelnen Regeln kurz und einfach zu halten, aber versuche nicht, sie in viele verschiedene Elemente aufzuteilen.
+      edit: Regel bearbeiten
+      empty: Es wurden bis jetzt keine Server-Regeln definiert.
+      title: Server-Regeln
     settings:
       activity_api_enabled:
         desc_html: Anzahl der lokal geposteten Beiträge, aktiven Nutzern und neuen Registrierungen in wöchentlichen Zusammenfassungen
@@ -565,9 +603,6 @@ de:
         users: Für angemeldete lokale Benutzer
       domain_blocks_rationale:
         title: Rationale anzeigen
-      enable_bootstrap_timeline_accounts:
-        desc_html: Neue Benutzer automatisch den konfigurierten Konten folgen lassen, sodass ihr Home-Feed nicht leer startet
-        title: Aktiviere die Option "Konten, denen Neu-Angemeldete automatisch folgen"
       hero:
         desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Server-Thumbnail dafür verwendet
         title: Bild für Einstiegsseite
@@ -621,9 +656,6 @@ de:
         desc_html: Hier kannst du deine eigenen Geschäftsbedingungen, Datenschutzerklärung und anderes rechtlich Relevante eintragen. Du kannst HTML-Tags nutzen
         title: Benutzerdefinierte Geschäftsbedingungen
       site_title: Name des Servers
-      spam_check_enabled:
-        desc_html: Mastodon kann automatisch Server stummschalten und automatisch Konten melden basierend auf Maßnahmen wie die Erkennung von Konten, die wiederholt unerwünschte Nachrichten senden. Es können hierbei mögliche Probleme auftreten.
-        title: Anti-Spam
       thumbnail:
         desc_html: Wird für die Vorschau via OpenGraph und API verwendet. 1200×630 px wird empfohlen
         title: Vorschaubild des Servers
@@ -654,13 +686,18 @@ de:
       no_status_selected: Keine Beiträge wurden geändert, weil keine ausgewählt wurden
       title: Beiträge des Kontos
       with_media: Mit Medien
+    system_checks:
+      database_schema_check:
+        message_html: Es gibt ausstehende Datenbankmigrationen. Bitte führen Sie sie aus, um sicherzustellen, dass sich die Anwendung wie erwartet verhält
+      rules_check:
+        action: Serverregeln verwalten
+        message_html: Sie haben keine Serverregeln definiert.
+      sidekiq_process_check:
+        message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfen Sie Ihre Sidekiq-Konfiguration
     tags:
       accounts_today: Einzigartige Nutzungen heute
       accounts_week: Einzigartige Nutzung dieser Woche
       breakdown: Heruntergebrochene Statistiken der heutigen Nutzung nach Quelle
-      context: Kontext
-      directory: Im Verzeichnis
-      in_directory: "%{count} im Verzeichnis"
       last_active: Zuletzt aktiv
       most_popular: Am beliebtesten
       most_recent: Neuste
@@ -677,6 +714,7 @@ de:
       add_new: Neu hinzufügen
       delete: Löschen
       edit_preset: Warnungsvorlage bearbeiten
+      empty: Du hast noch keine Warnungsvorlagen hinzugefügt.
       title: Warnungsvorlagen verwalten
   admin_mailer:
     new_pending_account:
@@ -1038,10 +1076,14 @@ de:
       body: "%{name} hat dich erwähnt:"
       subject: "%{name} hat dich erwähnt"
       title: Neue Erwähnung
+    poll:
+      subject: Eine Umfrage von %{name} ist beendet
     reblog:
       body: "%{name} hat deinen Beitrag geteilt:"
       subject: "%{name} hat deinen Beitrag geteilt"
       title: Dein Beitrag wurde geteilt
+    status:
+      subject: "%{name} hat gerade etwas gepostet"
   notifications:
     email_events: Ereignisse für E-Mail-Benachrichtigungen
     email_events_hint: 'Wähle Ereignisse, für die du Benachrichtigungen erhalten möchtest:'
@@ -1164,7 +1206,7 @@ de:
       other: unbekannte Plattform
       windows: Windows
       windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
+      windows_phone: Windows Handy
     revoke: Schließen
     revoke_success: Sitzung erfolgreich geschlossen
     title: Sitzungen
@@ -1190,8 +1232,6 @@ de:
     relationships: Folgende und Gefolgte
     two_factor_authentication: Zwei-Faktor-Auth
     webauthn_authentication: Sicherheitsschlüssel
-  spam_check:
-    spam_detected: Dies ist ein automatisierter Bericht. Es wurde Spam erkannt.
   statuses:
     attached:
       audio:
@@ -1234,6 +1274,7 @@ de:
     sign_in_to_participate: Melde dich an, um an der Konversation teilzuhaben
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Direktnachricht
       private: Nur Folgende
       private_long: Nur für Folgende sichtbar
       public: Öffentlich
@@ -1404,11 +1445,8 @@ de:
       tips: Tipps
       title: Willkommen an Bord, %{name}!
   users:
-    blocked_email_provider: Dieser E-Mail-Anbieter ist nicht erlaubt
     follow_limit_reached: Du kannst nicht mehr als %{limit} Leuten folgen
     generic_access_help_html: Probleme beim Zugriff auf dein Konto? Du kannst dich mit %{email} in Verbindung setzen, um Hilfe zu erhalten
-    invalid_email: Ungültige E-Mail-Adresse
-    invalid_email_mx: Die E-Mail-Adresse scheint nicht vorhanden zu sein
     invalid_otp_token: Ungültiger Zwei-Faktor-Authentisierungs-Code
     invalid_sign_in_token: Ungültiger Sicherheitscode
     otp_lost_help_html: Wenn Du beides nicht mehr weißt, melde Dich bei uns unter der E-Mailadresse %{email}
diff --git a/config/locales/devise.af.yml b/config/locales/devise.af.yml
new file mode 100644
index 000000000..252f9fd5a
--- /dev/null
+++ b/config/locales/devise.af.yml
@@ -0,0 +1 @@
+af:
diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml
index 6c63ca6e8..d8cfdbd42 100644
--- a/config/locales/devise.ar.yml
+++ b/config/locales/devise.ar.yml
@@ -21,6 +21,7 @@ ar:
         action: للتحقق من عنوان البريد الإلكتروني
         action_with_app: تأكيد ثم العودة إلى %{app}
         explanation: لقد قمت بإنشاء حساب على %{host} بواسطة عنوان البريد الإلكتروني الحالي. إنك على بعد خطوات قليلة من تفعليه. إن لم تكن من طلب ذلك، يرجى ألّا تولي اهتماما بهذه الرسالة.
+        explanation_when_pending: لقد تقدمت بطلب دعوة إلى %{host} باستخدام عنوان البريد الإلكتروني هذا، بمجرد تأكيد عنوان البريد الإلكتروني الخاص بك، سنقوم بمراجعة تطبيقك. يمكنك تسجيل الدخول لتغيير التفاصيل الخاصة بك أو حذف حسابك، ولكن لا يمكنك الوصول إلى معظم الوظائف حتى تتم الموافقة على حسابك. إذا تم رفض طلبك، سيتم إزالة بياناتك، لذلك لن يكون هناك أي إجراء آخر مطلوب منك. إذا لم يكن هذا أنت، يرجى تجاهل هذا البريد الإلكتروني.
         extra_html: ندعوك إلى الإطلاع على <a href="%{terms_path}">القواعد الخاصة بمثيل الخادوم هذا</a> and <a href="%{policy_path}">و شروط الخدمة الخاصة بنا</a>.
         subject: 'ماستدون: تعليمات التأكيد لمثيل الخادوم %{instance}'
         title: للتحقق من عنوان البريد الإلكتروني
@@ -59,6 +60,23 @@ ar:
         title: تم استبدال رموز استرجاع 2FA
       unlock_instructions:
         subject: 'ماستدون: تعليمات فك القفل'
+      webauthn_credential:
+        added:
+          explanation: تم إضافة مفتاح الأمان التالي إلى حسابك
+          subject: 'ماستدون: مفتاح أمان جديد'
+          title: تم إضافة مفتاح أمان جديد
+        deleted:
+          explanation: تم إزالة مفتاح الأمان التالي من حسابك
+          subject: 'ماستدون: تم حذف مفتاح الأمان'
+          title: تم حذف أحد مفاتيح الأمان الخاصة بك
+      webauthn_disabled:
+        explanation: تم تعطيل الاستيثاق مع مفاتيح الأمان لحسابك. تسجيل الدخول الآن ممكن باستخدام الرمز (token) الذي تم إنشاؤه بواسطة تطبيق TOTP المقترن.
+        subject: 'ماستدون: الاستيثاق مع مفاتيح الأمان معطلة'
+        title: مفاتيح الأمان معطلة
+      webauthn_enabled:
+        explanation: تم تفعيل استيثاق مفتاح الأمان للحساب الخاص بك. يمكن الآن استخدام مفتاح الأمان الخاص بك لتسجيل الدخول.
+        subject: 'ماستدون: تم تفعيل نظام استيثاق مفتاح الأمان'
+        title: مفاتيح الأمان مفعلة
     omniauth_callbacks:
       failure: تعذرت المصادقة من %{kind} بسبب "%{reason}".
       success: تمت المصادقة بنجاح عبر حساب %{kind}.
diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml
index 3c04af81b..c3773bcae 100644
--- a/config/locales/devise.bg.yml
+++ b/config/locales/devise.bg.yml
@@ -12,18 +12,71 @@ bg:
       last_attempt: Разполагаш с още един опит преди профилът ти да бъде заключен.
       locked: Профилът ти е заключен.
       not_found_in_database: Невалиден %{authentication_keys}.
+      pending: Вашият акаунт все още е в процес на проверка.
       timeout: Сесията ти изтече, моля влез отново, за да продължиш.
       unauthenticated: Преди да продължиш, трябва да влезеш в профила си или да се регистрираш.
       unconfirmed: Преди да продължиш, трябва да потвърдиш регистрацията си.
     mailer:
       confirmation_instructions:
+        action: Потвърдете имейл адреса
+        action_with_app: Потвърдете и се върнете към %{app}
+        explanation: Създали сте акаунт на %{host} с този имейл адрес. Само на едно щракване разстояние сте от активирането му. Ако това не сте били вие, моля, игнорирайте този имейл.
+        explanation_when_pending: Кандидатствахте за покана до %{host} с този имейл адрес. След като потвърдите своя имейл адрес, ние ще разгледаме вашето заявление. Можете да влезете, за да промените данните си или да изтриете акаунта си, но нямате достъп до повечето функции, докато акаунтът ви не бъде одобрен. Ако вашето заявление бъде отхвърлено, вашите данни ще бъдат премахнати, така че няма да се изискват допълнителни действия от вас. Ако това не сте били вие, моля, игнорирайте този имейл.
+        extra_html: Моля, проверете <a href="%{terms_path}">правилата на сървъра</a> и <a href="%{policy_path}">нашите условия за обслужване</a>.
         subject: 'Mastodon: Инструкции за потвърждаване %{instance}'
+        title: Потвърдете имейл адреса
+      email_changed:
+        explanation: 'Имейл адресът на вашия акаунт се променя на:'
+        extra: Ако не сте сменили имейла си, вероятно някой е получил достъп до вашия акаунт. Моля, сменете паролата си незабавно или се свържете с администратора на сървъра, ако сте блокирани от акаунта си.
+        subject: 'Mastodon: Имейлът е променен'
+        title: Нов имейл адрес
       password_change:
+        explanation: Паролата за вашия акаунт е променена.
+        extra: Ако не сте променили паролата си, вероятно някой е получил достъп до вашия акаунт. Моля, сменете паролата си незабавно или се свържете с администратора на сървъра, ако сте блокирани от акаунта си.
         subject: 'Mastodon: Паролата е променена'
+        title: Паролата е променена
+      reconfirmation_instructions:
+        explanation: Потвърдете новия адрес, за да промените имейла си.
+        extra: Ако тази промяна не е инициирана от вас, моля, игнорирайте този имейл. Имейл адресът за акаунта на Mastodon няма да се промени, докато не влезете във връзката по-горе.
+        subject: 'Mastodon: Потвърдете имейла за %{instance}'
+        title: Потвърдете имейл адреса
       reset_password_instructions:
+        action: Промяна на парола
+        explanation: Поискахте нова парола за вашия акаунт.
+        extra: Ако не сте поискали това, моля, игнорирайте този имейл. Паролата ви няма да се промени, докато не влезете във връзката по-горе и не създадете нова.
         subject: Инструкции за смяна на паролата
+        title: Нулиране на парола
+      two_factor_disabled:
+        explanation: Двуфакторното удостоверяване за вашия акаунт е деактивирано. Влизането вече е възможно, като се използват само имейл адрес и парола.
+        subject: 'Mastodon: Двуфакторното удостоверяване е деактивирано'
+        title: 2FA деактивирано
+      two_factor_enabled:
+        explanation: За вашия акаунт е активирано двуфакторно удостоверяване. За влизане ще е необходим ключ, генериран от сдвоеното приложение TOTP.
+        subject: 'Mastodon: Двуфакторното удостоверяване е активирано'
+        title: 2FA активирано
+      two_factor_recovery_codes_changed:
+        explanation: Предишните кодове за възстановяване са обезсилени и се генерират нови.
+        subject: 'Mastodon: Възстановени са двуфакторни кодове за възстановяване'
+        title: 2FA кодове за възстановяване са променени
       unlock_instructions:
         subject: Инструкции за отключване
+      webauthn_credential:
+        added:
+          explanation: Следният ключ за сигурност е добавен към вашия акаунт
+          subject: 'Mastodon: Нов ключ за сигурност'
+          title: Добавен е нов ключ за сигурност
+        deleted:
+          explanation: Следният ключ за сигурност е изтрит от вашия акаунт
+          subject: 'Mastodon: Ключът за сигурност е изтрит'
+          title: Един от вашите ключове за сигурност е изтрит
+      webauthn_disabled:
+        explanation: Удостоверяването с ключове за сигурност е деактивирано за вашия акаунт. Влизането вече е възможно, използвайки само ключа, генериран от сдвоеното приложение TOTP.
+        subject: 'Mastodon: Удостоверяването с ключове за сигурност е деактивирано'
+        title: Ключовете за сигурност са деактивирани
+      webauthn_enabled:
+        explanation: Удостоверяването с ключ за сигурност е активирано за вашия акаунт. Вашият ключ за сигурност вече може да се използва за вход.
+        subject: 'Mastodon: Активирано удостоверяване с ключ за сигурност'
+        title: Ключовете за сигурност са активирани
     omniauth_callbacks:
       failure: Не успяхме да те упълномощим чрез %{kind}, защото "%{reason}".
       success: Успешно упълномощаване чрез %{kind} профил.
@@ -38,6 +91,7 @@ bg:
       signed_up: Привет! Регистрирацията ти е успешна.
       signed_up_but_inactive: Регистрирацията ти е успешна. Въпреки това, не можеш да влезеш в профила си, защото той все още не е потвърден.
       signed_up_but_locked: Регистрирацията ти е успешна. Въпреки това, не можеш да влезеш в профила си, защото той е заключен.
+      signed_up_but_pending: На вашия имейл адрес е изпратено съобщение с връзка за потвърждение. След като щракнете върху връзката, ние ще прегледаме вашето заявление. Ще бъдете уведомени, ако то е одобрено.
       signed_up_but_unconfirmed: Писмо с връзка за потвърждаване на профила ти беше изпратено на твоя имейл адрес. Моля, отвори връзката, за да активираш своя профил.
       update_needs_confirmation: Профилът ти е успешно променен, но ние трябва да проверим твоя нов имейл адрес. Моля, провери пощата си и отвори връзката за потвърждаване на новия адрес.
       updated: Профилът ти е успешно променен.
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index 56ec4637d..da102b7d4 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -70,8 +70,12 @@ cs:
           subject: 'Mastodon: Bezpečnostní klíč byl smazán'
           title: Jeden z vašich bezpečnostních klíčů byl smazán
       webauthn_disabled:
+        explanation: Pro váš účet bylo vypnuto ověření bezpečnostními klíči. Přihlášení je nyní možné pouze s tokenem vygenerovaným spárovanou TOTP aplikací.
+        subject: 'Mastodon: Přihlašování bezpečnostními klíči vypnuto'
         title: Bezpečnostní klíče zakázány
       webauthn_enabled:
+        explanation: Pro váš účet bylo povoleno ověření bezpečnostními klíči. Nyní můžete svůj bezpečnostní klíč použít pro přihlášení.
+        subject: 'Mastodon: Přihlašování bezpečnostními klíči povoleno'
         title: Bezpečnostní klíče povoleny
     omniauth_callbacks:
       failure: Nelze vás ověřit z %{kind}, protože „%{reason}“.
diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml
index c23d2bbbf..9f5ef3b14 100644
--- a/config/locales/devise.da.yml
+++ b/config/locales/devise.da.yml
@@ -3,8 +3,8 @@ da:
   devise:
     confirmations:
       confirmed: Din e-mail er nu bekræftet.
-      send_instructions: Du vil modtage en mail med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek venligst din spam mappe hvis du ikke har modtaget denne email.
-      send_paranoid_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage en email med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek gerne din spam mappe hvis du ikke modtager denne email.
+      send_instructions: Du vil om få minutter modtage en e-mailvejledning til, hvordan du bekræfter din e-mailadresse. Tjek din spammappe, hvis du modtager denne e-mail.
+      send_paranoid_instructions: Findes din e-mailadresse allerede i vores database, vil du om få minutter modtage en e-mailvejledning til, hvordan du bekræfter din e-mailadresse. Tjek din spammappe, hvis du ikke modtager denne e-mail.
     failure:
       already_authenticated: Du er allerede logget ind.
       inactive: Din konto er endnu ikke aktiveret.
@@ -13,97 +13,103 @@ da:
       locked: Din konto er låst.
       not_found_in_database: Ugyldig %{authentication_keys} eller adgangskode.
       pending: Din konto er stadig under bedømmelse.
-      timeout: Din session er udløbet. Log venligst ind igen for at fortsætte.
-      unauthenticated: Du er nødt til at logge ind eller oprette dig for at fortsætte.
-      unconfirmed: Du er nødt til at bekræfte din email adresse for at fortsætte.
+      timeout: Din session udløb. Log ind igen for at fortsætte.
+      unauthenticated: Du skal logge ind eller tilmelde dig for at fortsætte.
+      unconfirmed: Du skal bekræfte din e-mailadresse for at fortsætte.
     mailer:
       confirmation_instructions:
-        action: Bekræft email adresse
-        action_with_app: Bekræft og vend tilbage til %{app}
-        explanation: Du har oprettet en konto på %{host} med denne email adresse. Du er et klik fra at aktivere din konto. Hvis du ikke har oprettet dig, ignorer venligst denne email.
-        explanation_when_pending: Du har ansøgt om en invitation til %{host} med denne mailadresse. Når du bekræfter din mailadresse vil vi bedømme din ansøgning. Indtil da kan du ikke logge ind. Din data slettes hvis din ansøgning bliver afvist så du behøver ikke foretage yderligere handlinger. Hvis dette ikke var dig kan du ignorere denne mail.
-        extra_html: Tjek også <a href="%{terms_path}">reglerne for serveren</a> og <a href="%{policy_path}">vores betingelser</a>.
-        subject: 'Mastodon: Bekræftelses instrukser for %{instance}'
-        title: Bekræft email adresse
+        action: Bekræft e-mailadresse
+        action_with_app: Bekræft og returnér til %{app}
+        explanation: Du har oprettet en konto på %{host} med denne e-mailadresse og er nu et klik fra at aktivere din konto. Har du ikke oprettet dig, så ignorér blot denne e-mail.
+        explanation_when_pending: Du ansøgte om en invitation til %{host} med denne e-mailadresse. Når du har bekræftet din e-mailadresse, gennemgår vi din ansøgning. Du kan logge ind for at ændre dine oplysninger eller slette din konto, men du kan ikke tilgå de fleste af funktionerne, før din konto er godkendt. Afvises din ansøgning, fjernes dine data, så ingen yderligere handling fra dig er nødvendig. Har du ikke ansøgt, så ignorér blot denne e-mail.
+        extra_html: Tjek også <a href="%{terms_path}">reglerne for serveren</a> samt <a href="%{policy_path}">vores tjenestevilkår</a>.
+        subject: 'Mastodon: Bekræftelsesinstrukser for %{instance}'
+        title: Bekræft e-mailadresse
       email_changed:
-        explanation: 'Email adressen for din konto bliver ændret til:'
-        extra: Hvis du ikke har ændret din email adresse er det muligt, at nogen har fået adgang til din konto. Venligst ændre dit kodeord med det samme eller kontakt administratoren på serveren hvis du er låst ude af din konto.
-        subject: 'Mastodon: Email ændret'
-        title: Ny email adresse
+        explanation: 'Din kontos e-mailadressen ændres til:'
+        extra: Har du ikke selv skiftet din e-mailadresse, er det muligt, at nogen har fået adgang til din konto. Skift venligst din adgangskode med det samme eller kontakt serveradministratoren, hvis du er låst ude af din konto.
+        subject: 'Mastodon: E-mail skiftet'
+        title: Ny e-mailadresse
       password_change:
-        explanation: Kodeordet for din konto er blevet ændret.
-        extra: Hvis du ikke har ændret dit kodeord er det muligt, at nogen har fået adgang til din konto. Venligst ændre dit kodeord med det samme eller kontakt administratoren på serveren hvis du er låst ude af din konto.
-        subject: 'Mastodon: Kodeord ændret'
-        title: Kodeordet er blevet ændret
+        explanation: Din kontoadgangskode er skiftet.
+        extra: Har du ikke selv ændret dim adgangskode, er det muligt, at nogen har fået adgang til din konto. Skift venligst din adgangskode med det samme eller kontakt serveradministratoren, hvis du er låst ude af din konto.
+        subject: 'Mastodon: Adgangskode skiftet'
+        title: Adgangskode skiftet
       reconfirmation_instructions:
-        explanation: Bekræft den nye adresse for at ændre din email.
-        extra: Hvis denne ændring ikke blev foretaget af dig, ignorer denne email. Email adressen for denne Mastodon konto vil ikke blive ændret før du følger linket foroven.
-        subject: 'Mastodon: Bekræft email for %{instance}'
-        title: Bekræft email adresse
+        explanation: Bekræft den nye adresse for at skifte din e-mail.
+        extra: Er denne ændring ikke iværksat af dig, så ignorér denne e-mail. E-mailadressen til Mastodon-kontoen ændres ikke, før du tilgår linket ovenfor.
+        subject: 'Mastodon: Bekræft e-mail for %{instance}'
+        title: Bekræft e-mailadresse
       reset_password_instructions:
-        action: Ændre kodeord
-        explanation: Du anmodede om en ny adgangskode for din konto.
-        extra: Hvis du ikke har anmodet om dette, ignorer denne email. Din adgangskode vil ikke blive ændret før du har fulgt linket foroven og oprettet en ny.
-        subject: 'Mastodon: Instrukser for nulstilling af adgangskode'
-        title: Kodeordet er blevet nulstillet
+        action: Skift adgangskode
+        explanation: Du har anmodet om en ny kontoadgangskode.
+        extra: Har du ikke anmodet om dette, så ignorér denne e-mail. Din adgangskode skiftes først, når du via linket ovenfor har oprettet en ny.
+        subject: 'Mastodon: Nulstil adgangskode-instruktioner'
+        title: Adgangskode nulstillet
       two_factor_disabled:
-        explanation: To-trins godkendelse for din konto er blevet deaktiveret. Det nu kun muligt at logge ind med email og kodeord.
-        subject: 'Mastodon: To-trins godkendelse er deaktiveret'
+        explanation: Tofaktorgodkendelse for din konto er blevet deaktiveret. Indlogning er nu kun mulig via email og adgangskode.
+        subject: 'Mastodon: Tofaktorgodkendelse deaktiveret'
         title: 2FA deaktiveret
       two_factor_enabled:
-        explanation: To-trins godkendelse er blevet aktiveret for din konto. En token fra den parrede TOTP app vil være påkrævet for at logge ind.
-        subject: 'Mastodon: To-trins godkendelse er nu aktiveret'
+        explanation: Tofaktorgodkendelse er blevet aktiveret for din konto. Et token genereret af den parrede TOTP-app vil være nødvendig for at logge ind.
+        subject: 'Mastodon: Tofaktorgodkendelse aktiveret'
         title: 2FA aktiveret
       two_factor_recovery_codes_changed:
-        explanation: De tidligere gendannelseskoder er ugyldige og nye genereret.
-        subject: 'Mastodan: To-trins gendannelseskoder er fornyet'
-        title: 2FA gendannelseskoder er ændret
+        explanation: De tidligere gendannelseskoder er ugyldiggjorte og nye er genereret.
+        subject: 'Mastodan: Tofaktorgendannelseskoder genereret igen'
+        title: 2FA gendannelseskoder skiftet
       unlock_instructions:
-        subject: 'Mastodon: Instruktioner for oplåsning'
+        subject: 'Mastodon: Oplåsningsinstruktioner'
       webauthn_credential:
         added:
+          explanation: Flg. sikkerhedsnøgle er tilføjet din konto
           subject: 'Mastodon: Ny sikkerhedsnøgle'
-          title: En ny sikkerhedsnøgle er blevet tilføjet
+          title: En ny sikkerhedsnøgle er tilføjet
         deleted:
+          explanation: Flg. sikkerhedsnøgle er slettet din konto
           subject: 'Mastodon: Sikkerhedsnøgle slettet'
           title: En af dine sikkerhedsnøgler er blevet slettet
       webauthn_disabled:
+        explanation: Godkendelse med sikkerhedsnøgler er blevet deaktiveret for din konto. Indlogning er nu kun mulig via token genereret af den parrede TOTP-app.
+        subject: 'Mastodon: Godkendelse med sikkerhedsnøgler deaktiveret'
         title: Sikkerhedsnøgler deaktiveret
       webauthn_enabled:
+        explanation: Sikkerhedsnøglegodkendelse er aktiveret for din konto. Din sikkerhedsnøgle kan nu bruges til indlogning.
+        subject: 'Mastodon: Sikkerhedsnøglegodkendelse aktiveret'
         title: Sikkerhedsnøgler aktiveret
     omniauth_callbacks:
       failure: Kunne ikke godkende dig fra %{kind} fordi "%{reason}".
-      success: Godkendelse fra %{kind} konto lykkedes.
+      success: Godkendt fra %{kind}-konto.
     passwords:
-      no_token: Du kan ikke tilgå denne side uden at komme fra en email om nulstilling af adgangskode. Hvis du kommer fra en email om nulstilling af adgangskode, tjek om du brugte det fulde link der blev angivet.
-      send_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage et link til nulstilling af adgangskode til din email adresse om få minutter. Tjek din spam mappe hvis du ikke har modtaget denne email.
-      send_paranoid_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage et link til nulstilling af adgangskode til din email adresse om få minutter. Tjek din spam mappe hvis du ikke har modtaget denne email.
-      updated: Din adgangskode er nu blevet ændret. Du er nu logget ind.
-      updated_not_active: Din adgangskode blev ændret.
+      no_token: Du kan kun tilgå denne side via linket fra en adgangskodenulstillings e-mail. Kommer du fra en sådan e-mail, så sørg for at benytte den angivne, komplette URL.
+      send_instructions: Er din e-mail-adresse allerede registreret, e-mailer vi dig et link til adgangskodenulstilling. Tjek din spammappe, hvis du ikke ser e-mailen i din indbakke indenfor få minutter.
+      send_paranoid_instructions: Er din e-mail-adresse allerede registreret, e-mailer vi dig et link til adgangskodegendannelse. Tjek din spammappe, hvis du ikke ser e-mailen i din indbakke indenfor få minutter.
+      updated: Din adgangskode er skiftet, og du er nu logget ind.
+      updated_not_active: Din adgangskode er skiftet.
     registrations:
       destroyed: Farvel! Din konto er nu annulleret. Vi håber snart at se dig igen.
       signed_up: Velkommen! Du har nu tilmeldt dig.
-      signed_up_but_inactive: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto endnu ikke er aktiveret.
-      signed_up_but_locked: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto er låst.
-      signed_up_but_pending: En besked med et bekræftelseslink er blevet sendt til din mailadresse. Vi vil behandle din ansøgning når du har trykket på dette link. Du får en meddelelse hvis din ansøgning bliver accepteret.
-      signed_up_but_unconfirmed: En besked med et bekræftelses link er nu blevet sendt til din email adresse. Følg linket for at aktivere din konti. Tjek din spam mappe hvis du ikke har modtaget denne email.
-      update_needs_confirmation: Du har succesfuldt opdateret din konto, men vi er nødt til at bekræfte din email adresse. Tjek venligst din email og følg bekræftelses linket for at bekræfte din nye email adresse. Tjek venligst din spam mappe hvis du ikke har modtaget denne email.
-      updated: Din konto er nu blevet opdateret.
+      signed_up_but_inactive: Du har nu oprettet dig. Da din konto endnu ikke er aktiveret, kan du dog pt. ikke logge ind.
+      signed_up_but_locked: Du har nu oprettet dig. Da din konto er låst, kan du pt. ikke logge ind.
+      signed_up_but_pending: En besked med et bekræftelseslink er e-mailet til dig. Når du har klikket på linket, gennemgår vi din ansøgning, og du får besked, hvis den godkendes.
+      signed_up_but_unconfirmed: En besked med et bekræftelseslink er e-mailet til dig. Følg linket for at aktivere din konto. Tjek din spammappe, hvis du ikke ser denne e-mail i din indbakke.
+      update_needs_confirmation: Du har opdateret din konto. Din nye e-mailadresse skal dog bekræftes. For at gøre dette, tjek din e-mail og følg bekræftelseslinket. Tjek din spammappe, hvis du ikke ser denne e-mail i din indbakke indenfor få minutter.
+      updated: Din konto er nu opdateret.
     sessions:
       already_signed_out: Du er nu logget ud.
       signed_in: Du er nu logget ind.
       signed_out: Du er nu logget ud.
     unlocks:
-      send_instructions: Du vil modtage en email med instrukser for hvordan du låser op for din konto om nogle få minutter. Venligst tjek din spam mappe hvis du ikke har modtaget denne email.
-      send_paranoid_instructions: Hvis din konto findes, vil du modtage en email med instrukser for hvordan du låser op for den om få minutter. Tjek venligst din spam mappe hvis du ikke har modtaget denne mail.
-      unlocked: Din konto er succesfuldt blevet låst op. Log venligst ind for at fortsætte.
+      send_instructions: Instruktioner mailes til dig om, hvordan du oplåser din konto. Er denne e-mail ikke er i din indbakke inden for få minutter, så tjek spammappe.
+      send_paranoid_instructions: Findes din konto, mailes du instrukser om, hvordan du oplåser den. Ser du ikke denne e-mail i din indbakke undenfor få minutter, så tjek spammappen.
+      unlocked: Din konto er nu oplåst. Log ind for at fortsætte.
   errors:
     messages:
-      already_confirmed: er allerede blevet bekræftet, prøv venligst at logge ind
-      confirmation_period_expired: skal bekræftes indenfor %{period}, anmod venligst om en ny
-      expired: er udløbet, anmod venligst en ny
+      already_confirmed: er allerede bekræftet. Prøv at logge ind
+      confirmation_period_expired: skal bekræftes indenfor %{period}. Anmod om en ny
+      expired: er udløbet. Anmod en ny
       not_found: ikke fundet
       not_locked: blev ikke låst
       not_saved:
-        one: '1 fejl forhindrede denne %{resource} fra at blive gemt:'
-        other: "%{count} fejl forhindrede denne %{resource} fra at blive gemt:"
+        one: '1 fejl forhindrede denne %{resource} i at blive gemt:'
+        other: "%{count} fejl forhindrede denne %{resource} i at blive gemt:"
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
index cc4140d14..458fa6d75 100644
--- a/config/locales/devise.en.yml
+++ b/config/locales/devise.en.yml
@@ -78,7 +78,7 @@ en:
         subject: 'Mastodon: Security key authentication enabled'
         title: Security keys enabled
     omniauth_callbacks:
-      failure: Could not authenticate you from %{kind} because "%{reason}".
+      failure: Could not authenticate you from %{kind} because “%{reason}”.
       success: Successfully authenticated from %{kind} account.
     passwords:
       no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.
diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml
index 0631d1c07..7b6f6783b 100644
--- a/config/locales/devise.eo.yml
+++ b/config/locales/devise.eo.yml
@@ -60,6 +60,23 @@ eo:
         title: Reakiraj kodoj de 2FA estas ŝanĝitaj
       unlock_instructions:
         subject: 'Mastodon: Instrukcioj por malŝlosi'
+      webauthn_credential:
+        added:
+          explanation: La sekva sekureca ŝlosilo estis aldonita al via konto
+          subject: 'Mastodon: Nova sekureca ŝlosilo'
+          title: Nova sekureca ŝlosilo estis aldonita
+        deleted:
+          explanation: La sekva sekureca ŝlosilo estis forigita de via konto
+          subject: 'Mastodon: sekureca ŝlosilo forigita'
+          title: Unu el viaj sekurecaj ŝlosiloj estis forigita
+      webauthn_disabled:
+        explanation: Aŭtentikigo per sekurecaj ŝlosiloj estis malebligita por via konto. Ensaluto nun eblas per nur la signo generita de la parigita TOTP-programo.
+        subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita'
+        title: Sekurecaj ŝlosiloj malaktivigitaj
+      webauthn_enabled:
+        explanation: Sekureca ŝlosila aŭtentokontrolo estis ebligita por via konto. Via sekureca ŝlosilo nun uzeblas por ensaluti.
+        subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita'
+        title: Sekurecaj ŝlosiloj aktivigitaj
     omniauth_callbacks:
       failure: 'Ni ne povis aŭtentigi vin per %{kind}: ''%{reason}''.'
       success: Aŭtentigita sukcese per %{kind}.
diff --git a/config/locales/devise.es-MX.yml b/config/locales/devise.es-MX.yml
new file mode 100644
index 000000000..83b425d44
--- /dev/null
+++ b/config/locales/devise.es-MX.yml
@@ -0,0 +1,115 @@
+---
+es-MX:
+  devise:
+    confirmations:
+      confirmed: Su dirección de correo electrónico ha sido confirmada correctamente.
+      send_instructions: Recibirás un correo electrónico con instrucciones para confirmar tu dirección de correo electrónico en unos minutos. Por favor, comprueba tu carpeta de spam si no recibiste este correo electrónico.
+      send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
+    failure:
+      already_authenticated: Usted ya está registrado.
+      inactive: Su cuenta no ha sido activada aún.
+      invalid: "%{authentication_keys} o contraseña inválida."
+      last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada.
+      locked: Tu cuenta está bloqueada.
+      not_found_in_database: Incorrecto %{authentication_keys} o contraseña.
+      pending: Su cuenta aun se encuentra bajo revisión.
+      timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar.
+      unauthenticated: Necesita iniciar sesión o registrarse antes de continuar.
+      unconfirmed: Tiene que confirmar su dirección de correo electrónico antes de continuar.
+    mailer:
+      confirmation_instructions:
+        action: Verifica tu dirección de correo electrónico
+        action_with_app: Confirmar y volver a %{app}
+        explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estás a un solo clic de activarlo. Si no fuiste tú, por favor ignora este correo electrónico.
+        explanation_when_pending: Has solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirmes tu dirección de correo electrónico, revisaremos tu solicitud. Puedes iniciar sesión para cambiar tus datos o eliminar tu cuenta, pero no puedes acceder a la mayoría de las funciones hasta que tu cuenta sea aprobada. Si su solicitud es rechazada, sus datos serán eliminados, por lo que no será necesaria ninguna acción adicional por su parte. Si no fuiste tú, por favor ignora este correo electrónico.
+        extra_html: Por favor, revisa <a href="%{terms_path}">las reglas del servidor</a> y <a href="%{policy_path}">nuestros términos de servicio</a>.
+        subject: 'Mastodon: Instrucciones de confirmación para %{instance}'
+        title: Verificar dirección de correo electrónico
+      email_changed:
+        explanation: 'El correo electrónico para su cuenta esta siendo cambiada a:'
+        extra: Si usted no ha cambiado su correo electrónico, es probable que alguien haya conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte al administrador de la instancia si usted no puede iniciar sesión.
+        subject: 'Mastodon: Correo electrónico cambiado'
+        title: Nueva dirección de correo electrónico
+      password_change:
+        explanation: La contraseña de su cuenta a sido cambiada.
+        extra: Si usted no a cambiado su contraseña. es probable que alguien a conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte a el administrador de la instancia si usted esta bloqueado de su cuenta.
+        subject: 'Mastodon: Contraseña cambiada'
+        title: Contraseña cambiada
+      reconfirmation_instructions:
+        explanation: Confirme la nueva dirección para cambiar su coreo electrónico.
+        extra: Si no iniciaste este cambio, por favor ignora este correo. Esta dirección de correo para la cuenta de Mastodon no cambiará hasta que accedas al vinculo arriba.
+        subject: 'Mastodon: Confirme correo electrónico para %{instance}'
+        title: Verifique dirección de correo electrónico
+      reset_password_instructions:
+        action: Cambiar contraseña
+        explanation: Solicitaste una nueva contraseña para tu cuenta.
+        extra: Si no solicitaste esto, por favor ignora este correo. Tu contraseña no cambiará hasta que tu accedas al vinculo arriba y crees una nueva.
+        subject: 'Mastodon: Instrucciones para reiniciar contraseña'
+        title: Reiniciar contraseña
+      two_factor_disabled:
+        explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña.
+        subject: 'Mastodon: La autenticación de dos factores está deshabilitada'
+        title: 2FA desactivada
+      two_factor_enabled:
+        explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar.
+        subject: 'Mastodon: La autenticación de dos factores está habilitada'
+        title: 2FA activada
+      two_factor_recovery_codes_changed:
+        explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos.
+        subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados'
+        title: Códigos de recuperación 2FA cambiados
+      unlock_instructions:
+        subject: 'Mastodon: Instrucciones para desbloquear'
+      webauthn_credential:
+        added:
+          explanation: La siguiente clave de seguridad ha sido añadida a su cuenta
+          subject: 'Mastodon: Nueva clave de seguridad'
+          title: Se ha añadido una nueva clave de seguridad
+        deleted:
+          explanation: La siguiente clave de seguridad ha sido eliminada de su cuenta
+          subject: 'Mastodon: Clave de seguridad eliminada'
+          title: Una de sus claves de seguridad ha sido eliminada
+      webauthn_disabled:
+        explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. El inicio de sesión es ahora posible únicamente utilizando el token generado por la aplicación emparejada TOTP.
+        subject: 'Mastodon: Autenticación con claves de seguridad desactivada'
+        title: Claves de seguridad desactivadas
+      webauthn_enabled:
+        explanation: La autenticación con clave de seguridad ha sido habilitada para su cuenta. Su clave de seguridad ahora puede ser usada para iniciar sesión.
+        subject: 'Mastodon: Autenticación con clave de seguridad activada'
+        title: Claves de seguridad activadas
+    omniauth_callbacks:
+      failure: No podemos autentificarle desde %{kind} debido a "%{reason}".
+      success: Autentificado con éxito desde la cuenta %{kind} .
+    passwords:
+      no_token: No puede acceder a esta página sin provenir desde el correo de reinicio de contraseña. Si viene desde el correo de reinicio de contraseña, por favor asegúrese que está utilizando la dirección completa proporcionada.
+      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo reiniciar su contraseña en pocos minutos.
+      send_paranoid_instructions: Si su correo electrónico existe en nuestra base de datos, recibirá un enlace de recuperación de contraseña en su dirección de correo en pocos minutos.
+      updated: Su contraseña ha sido cambiada con éxito. Ahora ya está registrado.
+      updated_not_active: Su contraseña ha sido cambiada con éxito.
+    registrations:
+      destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo."
+      signed_up: "¡Bienvenido! Se ha registrado con éxito."
+      signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía.
+      signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada.
+      signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada.
+      signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta.
+      update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo.
+      updated: su cuenta ha sido actualizada con éxito.
+    sessions:
+      already_signed_out: Cerró sesión con éxito.
+      signed_in: Se registró con éxito.
+      signed_out: Cerró sesión con éxito.
+    unlocks:
+      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo desbloquear su cuenta en pocos minutos.
+      send_paranoid_instructions: Si su cuenta existe, recibirá un correo electrónico con instrucciones sobre cómo desbloquearla en pocos minutos.
+      unlocked: Su cuenta ha sido desbloqueada con éxito. Por favor inicie sesión para continuar.
+  errors:
+    messages:
+      already_confirmed: ya fue confirmado, por favor intente iniciar sesión
+      confirmation_period_expired: necesita ser confirmado dentro de %{period}, por favor pida una nueva
+      expired: ha expirado, por favor pida una nueva
+      not_found: no encontrado
+      not_locked: no fue bloqueada
+      not_saved:
+        one: '1 error prohibió este %{resource} de ser guardado:'
+        other: "%{count} errores prohibieron este %{resource} de ser guardado:"
diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml
index 11ec46594..29489aeb0 100644
--- a/config/locales/devise.es.yml
+++ b/config/locales/devise.es.yml
@@ -2,27 +2,27 @@
 es:
   devise:
     confirmations:
-      confirmed: Su direccion de email ha sido confirmada con exito.
-      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
+      confirmed: Su dirección de correo electrónico ha sido confirmada correctamente.
+      send_instructions: Recibirás un correo electrónico con instrucciones para confirmar tu dirección de correo electrónico en unos minutos. Por favor, comprueba tu carpeta de spam si no recibiste este correo electrónico.
       send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
     failure:
       already_authenticated: Usted ya está registrado.
-      inactive: Su cuenta todavía no está activa.
-      invalid: Inválido %{authentication_keys} o contraseña.
-      last_attempt: Tiene un intento más antes de que su cuenta sea bloqueada.
-      locked: Su cuenta está bloqueada.
-      not_found_in_database: Inválido %{authentication_keys} o contraseña.
+      inactive: Su cuenta no ha sido activada aún.
+      invalid: "%{authentication_keys} o contraseña inválida."
+      last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada.
+      locked: Tu cuenta está bloqueada.
+      not_found_in_database: Incorrecto %{authentication_keys} o contraseña.
       pending: Su cuenta aun se encuentra bajo revisión.
       timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar.
       unauthenticated: Necesita iniciar sesión o registrarse antes de continuar.
       unconfirmed: Tiene que confirmar su dirección de correo electrónico antes de continuar.
     mailer:
       confirmation_instructions:
-        action: Verificar dirección de correo electrónico
-        action_with_app: Confirmar y regresar a %{app}
-        explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estas a un clic de activarla. Si no fue usted, por favor ignore este correo electrónico.
-        explanation_when_pending: Usted ha solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirme su dirección de correo electrónico, revisaremos su aplicación. No puede iniciar sesión hasta que su aplicación sea revisada. Si su solicitud está rechazada, sus datos serán eliminados, así que no será necesaria ninguna acción adicional por ti. Si no fuera usted, por favor ignore este correo electrónico.
-        extra_html: Por favor revise <a href="%{terms_path}">las reglas de la instancia</a> y <a href="%{policy_path}">nuestros términos de servicio</a>.
+        action: Verifica tu dirección de correo electrónico
+        action_with_app: Confirmar y volver a %{app}
+        explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estás a un solo clic de activarlo. Si no fuiste tú, por favor ignora este correo electrónico.
+        explanation_when_pending: Has solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirmes tu dirección de correo electrónico, revisaremos tu solicitud. Puedes iniciar sesión para cambiar tus datos o eliminar tu cuenta, pero no puedes acceder a la mayoría de las funciones hasta que tu cuenta sea aprobada. Si su solicitud es rechazada, sus datos serán eliminados, por lo que no será necesaria ninguna acción adicional por su parte. Si no fuiste tú, por favor ignora este correo electrónico.
+        extra_html: Por favor, revisa <a href="%{terms_path}">las reglas del servidor</a> y <a href="%{policy_path}">nuestros términos de servicio</a>.
         subject: 'Mastodon: Instrucciones de confirmación para %{instance}'
         title: Verificar dirección de correo electrónico
       email_changed:
@@ -64,52 +64,4 @@ es:
         added:
           explanation: La siguiente clave de seguridad ha sido añadida a su cuenta
           subject: 'Mastodon: Nueva clave de seguridad'
-          title: Se agregó una nueva clave de seguridad
-        deleted:
-          explanation: La siguiente clave de seguridad ha sido eliminada de su cuenta
-          subject: 'Mastodon: Clave de seguridad eliminada'
-          title: Una de sus claves de seguridad ha sido eliminada
-      webauthn_disabled:
-        explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. El inicio de sesión es ahora posible únicamente utilizando el token generado por la aplicación emparejada TOTP.
-        subject: 'Mastodon: Autenticación con claves de seguridad desactivada'
-        title: Claves de seguridad desactivadas
-      webauthn_enabled:
-        explanation: La autenticación con clave de seguridad ha sido habilitada para su cuenta. Su clave de seguridad ahora puede ser usada para iniciar sesión.
-        subject: 'Mastodon: Autenticación con clave de seguridad activada'
-        title: Claves de seguridad activadas
-    omniauth_callbacks:
-      failure: No podemos autentificarle desde %{kind} debido a "%{reason}".
-      success: Autentificado con éxito desde la cuenta %{kind} .
-    passwords:
-      no_token: No puede acceder a esta página sin provenir desde el correo de reinicio de contraseña. Si viene desde el correo de reinicio de contraseña, por favor asegúrese que está utilizando la dirección completa proporcionada.
-      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo reiniciar su contraseña en pocos minutos.
-      send_paranoid_instructions: Si su correo electrónico existe en nuestra base de datos, recibirá un enlace de recuperación de contraseña en su dirección de correo en pocos minutos.
-      updated: Su contraseña ha sido cambiada con éxito. Ahora ya está registrado.
-      updated_not_active: Su contraseña ha sido cambiada con éxito.
-    registrations:
-      destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo."
-      signed_up: "¡Bienvenido! Se ha registrado con éxito."
-      signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía.
-      signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada.
-      signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada.
-      signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta.
-      update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo.
-      updated: su cuenta ha sido actualizada con éxito.
-    sessions:
-      already_signed_out: Cerró sesión con éxito.
-      signed_in: Se registró con éxito.
-      signed_out: Cerró sesión con éxito.
-    unlocks:
-      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo desbloquear su cuenta en pocos minutos.
-      send_paranoid_instructions: Si su cuenta existe, recibirá un correo electrónico con instrucciones sobre cómo desbloquearla en pocos minutos.
-      unlocked: Su cuenta ha sido desbloqueada con éxito. Por favor inicie sesión para continuar.
-  errors:
-    messages:
-      already_confirmed: ya fue confirmado, por favor intente iniciar sesión
-      confirmation_period_expired: necesita ser confirmado dentro de %{period}, por favor pida una nueva
-      expired: ha expirado, por favor pida una nueva
-      not_found: no encontrado
-      not_locked: no fue bloqueada
-      not_saved:
-        one: '1 error prohibió este %{resource} de ser guardado:'
-        other: "%{count} errores prohibieron este %{resource} de ser guardado:"
+          title: Se ha añadido una nueva clave de seguridad
diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml
index 473246d8a..1e71181d1 100644
--- a/config/locales/devise.eu.yml
+++ b/config/locales/devise.eu.yml
@@ -60,6 +60,23 @@ eu:
         title: 2FA berreskuratze kodeak aldatuta
       unlock_instructions:
         subject: 'Mastodon: Desblokeatzeko argibideak'
+      webauthn_credential:
+        added:
+          explanation: Segurtasun gako hau zure kontuan gehitu da
+          subject: 'Mastodon: Segurtasun gako berria'
+          title: Segurtasun gako berri bat gehitu da
+        deleted:
+          explanation: Segurtasun gako hau zure kontutik ezabatu da
+          subject: 'Mastodon: Segurtasun gakoa ezabatu da'
+          title: Zure segurtasun gakoetako bat ezabatu da
+      webauthn_disabled:
+        explanation: Segurtasun gako bidezko autentifikazioa desgaitu da zure kontuan. Saioa hasteko modu bakarra parekatutako TOTP aplikazioak sortutako tokena erabiltzea da orain.
+        subject: 'Mastodon: Segurtasun gakoekin autentifikatzea desgaituta'
+        title: Segurtasun gakoak desgaituta
+      webauthn_enabled:
+        explanation: Segurtasun gako bidezko autentifikazioa gaitu da zure kontuan. Orain zure segurtasun gakoa erabil dezakezu saioa hasteko.
+        subject: 'Mastodon: Segurtasun gako bidezko autentifikazioa gaituta'
+        title: Segurtasun gakoak gaituta
     omniauth_callbacks:
       failure: Ezin izan zaizu %{kind} motatik autentifikatu arrazoia "%{reason}" dela.
       success: Ongi egin da autentifikazioa %{kind}  kontuarekin.
diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml
index 84a471459..3716bf4af 100644
--- a/config/locales/devise.fi.yml
+++ b/config/locales/devise.fi.yml
@@ -2,7 +2,7 @@
 fi:
   devise:
     confirmations:
-      confirmed: Sähköpostiosoitteesi vahvistus onnistui.
+      confirmed: Sähköpostiosoitteesi on vahvistettu onnistuneesti.
       send_instructions: Saat pian sähköpostitse ohjeet sähköpostiosoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi.
       send_paranoid_instructions: Jos sähköpostiosoitteesi on tietokannassamme, saat pian ohjeet osoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi.
     failure:
diff --git a/config/locales/devise.gd.yml b/config/locales/devise.gd.yml
new file mode 100644
index 000000000..7b0f0a7bc
--- /dev/null
+++ b/config/locales/devise.gd.yml
@@ -0,0 +1,117 @@
+---
+gd:
+  devise:
+    confirmations:
+      confirmed: Chaidh an seòladh puist-d agad a dhearbhadh.
+      send_instructions: Gheibh thu post-d an ceann corra mionaid le stiùireadh air mar a dhearbhas tu an seòladh puist-d agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      send_paranoid_instructions: Ma tha an seòladh puist-d agad san stòr-dàta againn, gheibh thu post-d an ceann corra mionaid le stiùireadh air mar a dhearbhas tu an seòladh puist-d agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+    failure:
+      already_authenticated: Tha thu air do chlàradh a-steach mu thràth.
+      inactive: Cha deach an cunntas agad a ghnìomhachadh fhathast.
+      invalid: "%{authentication_keys} no facal-faire mì-dhligheach."
+      last_attempt: Tha aon oidhirp eile agad mus dèid an cunntas agad a ghlasadh.
+      locked: Tha an cunntas agad glaiste.
+      not_found_in_database: "%{authentication_keys} no facal-faire mì-dhligheach."
+      pending: Tha an cunntas agad fo lèirmheas fhathast.
+      timeout: Dh’fhalbh an ùine air an t-seisean agad. Clàraich a-steach a-rithist airson leantainn air adhart.
+      unauthenticated: Feumaidh tu clàradh a-steach no clàradh leinn mus lean thu air adhart.
+      unconfirmed: Feumaidh tu an seòladh puist-d agad a dhearbhadh mus lean thu air adhart.
+    mailer:
+      confirmation_instructions:
+        action: Dearbh an seòladh puist-d
+        action_with_app: Dearbh ’s till gu %{app}
+        explanation: Tha thu air cunntas a chruthachadh air %{host} leis an t-seòladh puist-d seo. Chan eil ach aon bhriogadh a dhìth gus am bi e gnìomhach. Mur e tusa a bh’ ann, leig seachad am post-d seo.
+        explanation_when_pending: Chuir thu iarrtas a-steach ach am faigh thu cuireadh dha %{host} air an t-seòladh puist-d seo. Nuair a bhios tu air an seòladh puist-d agad a dhearbhadh, nì sinn lèirmheas air d’ iarrtas. ’S urrainn dhut clàradh a-steach airson am fiosrachadh mu d’ dhèidhinn atharrachadh no an cunntas agad a sguabadh às ach chan fhaigh thu cothrom air a’ mhòrchuid a ghleusan gus am bi an cunntas agad air a dhearbhadh. Ma thèid d’ iarrtas a dhiùltadh, thèid an dàta agad a thoirt air falbh is cha leig thu leas dad sam bith eile a dhèanamh. Mur e tusa a bh’ ann, leig seachad am post-d seo.
+        extra_html: Thoir sùil air <a href="%{terms_path}">riaghailtean an fhrithealaiche</a> agus <a href="%{policy_path}">teirmichean na seirbheise againn</a> cuideachd.
+        subject: 'Mastodon: Stiùireadh dearbhaidh airson %{instance}'
+        title: Dearbh an seòladh puist-d
+      email_changed:
+        explanation: 'Tha an seòladh puist-d dhan chunntas agad ’ga atharrachadh gu:'
+        extra: Mur an do dh’atharraich thu fhèin am post-d agad, tha deagh theans gun d’ fhuair cuideigin eile grèim air a’ chunntas agad. Atharraich am facal-faire agad sa bhad no cuir fios gu rianaire an fhrithealaiche ma chaidh do ghlasadh a-mach às a’ chunntas agad.
+        subject: 'Mastodon: Chaidh am post-d atharrachadh'
+        title: Seòladh puist-d ùr
+      password_change:
+        explanation: Chaidh facal-faire a’ chunntais agad atharrachadh.
+        extra: Mur an do dh’atharraich thu fhèin am facal-faire agad, tha deagh theans gun d’ fhuair cuideigin eile grèim air a’ chunntas agad. Atharraich am facal-faire agad sa bhad no cuir fios gu rianaire an fhrithealaiche ma chaidh do ghlasadh a-mach às a’ chunntas agad.
+        subject: 'Mastodon: Chaidh am facal-faire atharrachadh'
+        title: Chaidh am facal-faire atharrachadh
+      reconfirmation_instructions:
+        explanation: Dearbh an seòladh ùr airson am post-d agad atharrachadh.
+        extra: Mura rinn thu fhèin an t-atharrachadh seo, leig seachad am post-d seo. Chan atharraich seòladh puist-d a’ chunntais Mastodon agad gus am briog thu air a’ cheangal gu h-àrd.
+        subject: 'Mastodon: Dearbh am post-d airson %{instance}'
+        title: Dearbh an seòladh puist-d
+      reset_password_instructions:
+        action: Atharraich am facal-faire
+        explanation: Dh’iarr thu facal-faire ùr dhan chunntas agad.
+        extra: Mur an do dh’iarr thu fhèin seo, leig seachad am post-d seo. Chan atharraich am facal-faire agad gus an inntrig thu an ceangal gu h-àrd ’s an cruthaich thu facal-faire ùr.
+        subject: 'Mastodon: Stiùireadh air ath-shuidheachadh an fhacail-fhaire'
+        title: Ath-shuidheachadh an fhacail-fhaire
+      two_factor_disabled:
+        explanation: Chaidh an dearbhadh dà-cheumnach a chur à comas dhan chunntas agad. ’S urrainn dhut clàradh a-steach le seòladh puist-d is facal-faire a-mhàin a-nis.
+        subject: 'Mastodon: Tha an dearbhadh dà-cheumnach à comas'
+        title: Dearbhadh dà-cheumnach à comas
+      two_factor_enabled:
+        explanation: Chaidh an dearbhadh dà-cheumnach a chur an comas dhan chunntas agad. Bidh feum air tòcan a ghineas an aplacaid TOTP a chaidh a phaidhreachadh airson clàradh a-steach.
+        subject: 'Mastodon: Tha an dearbhadh dà-cheumnach an comas'
+        title: Dearbhadh dà-cheumnach an comas
+      two_factor_recovery_codes_changed:
+        explanation: Tha na còdan aisig a bh’ agad cheana mì-dhligheach a-nis agus chaidh feadhainn ùra a ghintinn.
+        subject: 'Mastodon: Chaidh còdan aisig dà-cheumnach ath-ghintinn'
+        title: Dh’atharraich còdan aisig an dearbhaidh dà-cheumnaich
+      unlock_instructions:
+        subject: 'Mastodon: Stiùireadh neo-ghlasaidh'
+      webauthn_credential:
+        added:
+          explanation: Chaidh an iuchair tèarainteachd a leanas a chur ris a’ chunntas agad
+          subject: 'Mastodon: Iuchair tèarainteachd ùr'
+          title: Chaidh iuchair tèarainteachd ùr a chur ris
+        deleted:
+          explanation: Chaidh an iuchair tèarainteachd a leanas a sguabadh às on chunntas agad
+          subject: 'Mastodon: Chaidh iuchair tèarainteachd a sguabadh às'
+          title: Chaidh tè dhe na h-iuchraichean tèarainteachd agad a sguabadh às
+      webauthn_disabled:
+        explanation: Chaidh an dearbhadh le iuchraichean tèarainteachd a chur à comas dhan chunntas agad. ’S urrainn dhut clàradh a-steach leis an tòcan a ghineas an aplacaid TOTP paidhrichte a-mhàin a-nis.
+        subject: 'Mastodon: Tha dearbhadh le iuchraichean tèarainteachd à comas'
+        title: Chaidh na h-iuchraichean tèarainteachd a chur à comas
+      webauthn_enabled:
+        explanation: Chaidh an dearbhadh le iuchair tèarainteachd a chur an comas dhan chunntas agad. ’S urrainn dhut an iuchair tèarainteachd agad a chleachdadh airson clàradh a-steach a-nis.
+        subject: 'Mastodon: Tha dearbhadh le iuchair tèarainteachd an comas'
+        title: Chaidh na h-iuchraichean tèarainteachd a chur an comas
+    omniauth_callbacks:
+      failure: Cha b’ urrainn dhuinn dearbhadh cò thusa o %{kind} air adhbhar “%{reason}”.
+      success: Chaidh dearbhadh cò thusa o chunntas %{kind}.
+    passwords:
+      no_token: Chan urrainn dhut an duilleag seo inntrigeadh ach o phost-d ath-shuidheachadh facail-fhaire. Mas ann gun tàinig thu o phost-d dhen leithid, dèan cinnteach gun do chleachd thu an URL slàn a chaidh a thoirt dhut.
+      send_instructions: Ma tha an seòladh puist-d agad san stòr-dàta againn, gheibh thu post-d le ceangal aiseag facail-fhaire an ceann corra mionaid. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      send_paranoid_instructions: Ma tha an seòladh puist-d agad san stòr-dàta againn, gheibh thu post-d le ceangal aiseag facail-fhaire an ceann corra mionaid. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      updated: Chaidh am facal-faire agad atharrachadh ’s do chlàradh a-steach.
+      updated_not_active: Chaidh am facal-faire agad atharrachadh.
+    registrations:
+      destroyed: Soraidh slàn leat! Chaidh crìoch a chur air a’ chunntas agad. Tha sinn an dòchas nach bi thu fada gun tilleadh.
+      signed_up: Fàilte ort! Tha thu air clàradh leinn.
+      signed_up_but_inactive: Tha thu air clàradh leinn. Gidheadh, chan urrainn dhuinn do clàradh a-steach air sgàth ’s nach deach an cunntas agad a ghnìomhachadh fhathast.
+      signed_up_but_locked: Tha thu air clàradh leinn. Gidheadh, chan urrainn dhuinn do clàradh a-steach air sgàth ’s gu bheil an cunntas agad glaiste.
+      signed_up_but_pending: Chaidh teachdaireachd le ceangal dearbhaidh a chur dhan t-seòladh puist-d agad. Nuair a bhios tu air briogadh air a’ cheangal, nì sinn lèirmheas air d’ iarrtas. Leigidh sinn fios dhut ma thèid aontachadh ris.
+      signed_up_but_unconfirmed: Chaidh teachdaireachd le ceangal dearbhaidh a chur dhan t-seòladh puist-d agad. Lean ris a’ cheangal ud a ghnìomhachadh a’ chunntais agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      update_needs_confirmation: Chaidh an cunntas agad ùrachadh ach feumaidh sinn an seòladh puist-d ùr agad a dhearbhadh. Thoir sùil air a’ phost-d agad agus lean ris a’ cheangal dearbhaidh a dhearbhadh an t-seòlaidh puist-d ùir agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      updated: Chaidh an cunntas agad ùrachadh.
+    sessions:
+      already_signed_out: Chaidh do chlàradh a-mach.
+      signed_in: Chaidh do chlàradh a-steach.
+      signed_out: Chaidh do chlàradh a-mach.
+    unlocks:
+      send_instructions: Gheibh thu post-d an ceann corra mionaid le stiùireadh air mar a bheir thu a’ ghlas far a’ chunntais agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      send_paranoid_instructions: Ma tha an cunntas agad ann, gheibh thu post-d an ceann corra mionaid le stiùireadh air mar a bheir thu a’ ghlas fo bhàrr. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo.
+      unlocked: Chaidh a’ ghlas a thoirt far a’ chunntais agad. Clàraich a-steach airson leantainn air adhart.
+  errors:
+    messages:
+      already_confirmed: "– chaidh a dhearbhadh mu thràth, feuch is clàraich a-steach"
+      confirmation_period_expired: "– feumaidh tu a dhearbhadh am broinn %{period}, iarr fear ùr"
+      expired: "– dh’fhalbh an ùine air, iarr fear ùr"
+      not_found: "– cha deach seo a lorg"
+      not_locked: "– cha deach seo a ghlasadh"
+      not_saved:
+        few: 'Dh’adhbharaich %{count} mearachdan nach gabh a’ %{resource} seo a shàbhaladh:'
+        one: 'Dh’adhbharaich %{count} mhearachd nach gabh a’ %{resource} seo a shàbhaladh:'
+        other: 'Dh’adhbharaich %{count} mearachd nach gabh a’ %{resource} seo a shàbhaladh:'
+        two: 'Dh’adhbharaich %{count} mhearachd nach gabh a’ %{resource} seo a shàbhaladh:'
diff --git a/config/locales/devise.hi.yml b/config/locales/devise.hi.yml
index 62048c9f5..423d69fd0 100644
--- a/config/locales/devise.hi.yml
+++ b/config/locales/devise.hi.yml
@@ -4,7 +4,6 @@ hi:
     confirmations:
       confirmed: आपका ईमेल पता का सफलतापूर्वक पुष्टि कर लिया गया था
     failure:
-      already_authenticated: आप पहले से ही साइन इन है|
       inactive: आपका खाता सक्रिय नहीं है!
       locked: आपके अकाउंट को ब्लॉक किया गया है।
     mailer:
diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml
index 6fe6c257d..2e51a69dc 100644
--- a/config/locales/devise.id.yml
+++ b/config/locales/devise.id.yml
@@ -18,36 +18,36 @@ id:
       unconfirmed: Anda harus mengkonfirmasi alamat email terlebih dahulu.
     mailer:
       confirmation_instructions:
-        action: Verifikasi alamat surel
+        action: Verifikasi alamat email
         action_with_app: Konfirmasi dan kembali ke %{app}
-        explanation: Anda membuat akun di %{host} dengan surel ini. Anda hanya perlu satu klik untuk mengaktifkannya. Jika ini bukan Anda, abaikan surel ini.
-        explanation_when_pending: Anda melamar undangan ke %{host} dengan surel ini. Saat Anda mengonfirmasi alamat surel Anda, kami akan meninjaunya. Anda dapat masuk untuk mengubah detail Anda atau menghapus akun Anda, tapi Anda tak dapat mengakses mayoritas fungsi sampai akun disetujui. Jika lamaran anda ditolak, data Anda akan dihapus, tak ada aksi lain yang dilakukan dari Anda. Jika ini bukan Anda, abaikan surel ini.
+        explanation: Anda membuat akun di %{host} dengan email ini. Anda hanya perlu satu klik untuk mengaktifkannya. Jika ini bukan Anda, abaikan email ini.
+        explanation_when_pending: Anda melamar undangan ke %{host} dengan email ini. Saat Anda mengonfirmasi alamat email Anda, kami akan meninjaunya. Anda dapat masuk untuk mengubah detail Anda atau menghapus akun Anda, tapi Anda tak dapat mengakses mayoritas fungsi sampai akun disetujui. Jika lamaran Anda ditolak, data Anda akan dihapus, jadi Anda tak perlu melakukan apa-apa. Jika ini bukan Anda, abaikan email ini.
         extra_html: Tolong cek juga <a href="%{terms_path}">peraturan server</a> dan <a href="%{policy_path}">ketentuan layanan kami</a>.
         subject: 'Mastodon: Petunjuk mengkonfirmasi untuk %{instance}'
-        title: Verifikasi alamat surel
+        title: Verifikasi alamat email
       email_changed:
-        explanation: 'Alamat surel akun Anda diubah menjadi:'
-        extra: Jika Anda tak mengganti surel Anda, mungkin seseorang telah mendapatkan akses ke Akun Anda. Mohon ubah kata sandi secepatnya atau hubungi admin server jika Anda dikunci dari akun Anda.
-        subject: 'Mastodon: Surel diganti'
-        title: Alamat surel baru
+        explanation: 'Alamat email akun Anda diubah menjadi:'
+        extra: Jika Anda tak mengganti email Anda, mungkin seseorang telah mendapatkan akses ke akun Anda. Mohon ubah kata sandi secepatnya atau hubungi admin server jika akun Anda terkunci.
+        subject: 'Mastodon: Email diganti'
+        title: Alamat email baru
       password_change:
         explanation: Kata sandi akun Anda telah diganti.
         extra: Jika Anda tak mengubah kata sandi Anda, mungkin seseorang telah mendapatkan akses ke akun Anda. Mohon ubah kata sandi secepatnya atau hubungi admin server jika Anda dikunci dari akun Anda.
         subject: 'Mastodon: Kata sandi telah diubah'
         title: Kata sandi diubah
       reconfirmation_instructions:
-        explanation: Konfirmasi alamat baru untuk mengubah surel Anda.
-        extra: Jika perubahan ini tidak dimulai dari Anda, abaikan surel ini. Alamat surel untuk akun Mastodon tak berubah sampai Anda mengakses tautan di atas.
-        subject: 'Mastodon: Konfirmasi surel untuk %{instance}'
-        title: Verifikasi alamat surel
+        explanation: Konfirmasi alamat baru untuk mengubah email Anda.
+        extra: Jika perubahan ini tidak dimulai dari Anda, abaikan email ini. Alamat email untuk akun Mastodon tak berubah sampai Anda mengakses tautan di atas.
+        subject: 'Mastodon: Konfirmasi email untuk %{instance}'
+        title: Verifikasi alamat email
       reset_password_instructions:
         action: Ubah kata sandi
         explanation: Kata sandi baru yang diminta untuk akun Anda.
-        extra: Jika Anda tak meminta ini, abaikan surel ini. Kata sandi tak berubah sampai Anda mengakses tautan di atas dan membuatnya yang baru.
+        extra: Jika Anda tak meminta ini, abaikan email ini. Kata sandi tak berubah sampai Anda mengakses tautan di atas dan membuatnya yang baru.
         subject: 'Mastodon: Petunjuk mereset kata sandi'
         title: Reset kata sandi
       two_factor_disabled:
-        explanation: Otentifikasi dua-faktor untuk akun Anda dimatikan. Kini Masuk dapat dilakukan hanya dengan alamat surel dan kata sandi.
+        explanation: Otentifikasi dua-faktor untuk akun Anda dimatikan. Kini Masuk dapat dilakukan hanya dengan alamat email dan kata sandi.
         subject: 'Mastodon: Otentifikasi dua-faktor dimatikan'
         title: 2FA dimatikan
       two_factor_enabled:
@@ -91,7 +91,7 @@ id:
       signed_up: Selamat datang! Pendaftaran anda berhasil.
       signed_up_but_inactive: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda belum diaktifkan.
       signed_up_but_locked: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda dikunci.
-      signed_up_but_pending: Pesan dengan tautan konfirmasi telah dikirim ke alamat surel Anda. Setelah Anda mengklik tautan, kami akan meninjau lamaran Anda. Anda akan diberitahu jika diterima.
+      signed_up_but_pending: Pesan dengan tautan konfirmasi telah dikirim ke alamat email Anda. Setelah Anda mengklik tautan, kami akan meninjau lamaran Anda. Anda akan diberitahu jika diterima.
       signed_up_but_unconfirmed: Sebuah pesan berisi link konfirmasi telah dikirim ke alamat email anda. Silakan ikuti link tersebut untuk mengaktifkan akun anda.
       update_needs_confirmation: Akun anda telah berhasil diubah, tetapi kami harus memverifikasi alamat email anda yang baru. Mohon cek email anda dan ikuti link untuk mengkonfirmasi alamat email anda yang baru.
       updated: Akun anda berhasil diubah.
diff --git a/config/locales/devise.kw.yml b/config/locales/devise.kw.yml
new file mode 100644
index 000000000..b2cfc12ff
--- /dev/null
+++ b/config/locales/devise.kw.yml
@@ -0,0 +1 @@
+kw:
diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml
index fadc48126..bf3b02e3f 100644
--- a/config/locales/devise.nl.yml
+++ b/config/locales/devise.nl.yml
@@ -51,7 +51,7 @@ nl:
         subject: 'Mastodon: Tweestapsverificatie uitgeschakeld'
         title: Tweestapsverificatie uitgeschakeld
       two_factor_enabled:
-        explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen aanmelden is een door een tweestapsverificatie-app genereerde aanmeldcode nodig.
+        explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen aanmelden is een door een tweestapsverificatie-app genereerde toegangscode nodig.
         subject: 'Mastodon: Tweestapsverificatie ingeschakeld'
         title: Tweestapsverificatie ingeschakeld
       two_factor_recovery_codes_changed:
@@ -78,7 +78,7 @@ nl:
         subject: 'Mastodon: Verificatie met beveiligingssleutels is ingeschakeld'
         title: Beveiligingssleutels ingeschakeld
     omniauth_callbacks:
-      failure: Kon je niet inloggen met jouw %{kind} account, omdat "%{reason}".
+      failure: Kon je niet inloggen met jouw %{kind} account, omdat “%{reason}”.
       success: Succesvol met jouw %{kind} account ingelogd.
     passwords:
       no_token: Je kunt deze pagina niet benaderen zonder dat je een e-mail om je wachtwoord opnieuw in te stellen hebt ontvangen.
diff --git a/config/locales/devise.pa.yml b/config/locales/devise.pa.yml
new file mode 100644
index 000000000..bb8a6c834
--- /dev/null
+++ b/config/locales/devise.pa.yml
@@ -0,0 +1 @@
+pa:
diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml
index 496ce7b1d..0bd6bb3cd 100644
--- a/config/locales/devise.pt-PT.yml
+++ b/config/locales/devise.pt-PT.yml
@@ -9,7 +9,7 @@ pt-PT:
       already_authenticated: A tua sessão já está aberta.
       inactive: A tua conta ainda não está ativada.
       invalid: "%{authentication_keys} ou palavra-passe inválida."
-      last_attempt: Tens mais uma tentativa antes de a tua conta ficar bloqueada.
+      last_attempt: Tens mais uma tentativa antes de a tua conta ser bloqueada.
       locked: A tua conta está bloqueada.
       not_found_in_database: "%{authentication_keys} ou palavra-passe inválida."
       pending: A sua conta está ainda a aguardar revisão.
@@ -21,7 +21,7 @@ pt-PT:
         action: Verificar o endereço de e-mail
         action_with_app: Confirmar e regressar a %{app}
         explanation: Criou uma conta em %{host} com este endereço de e-mail. Está a um clique de activá-la. Se não foi você que fez este registo, por favor ignore esta mensagem.
-        explanation_when_pending: Você solicitou um convite para %{host} com este endereço de e-mail. Logo que confirme o seu endereço de e-mail, iremos rever a sua inscrição. Pode iniciar sessão para alterar os seus dados ou eliminar a sua conta, mas não poderá aceder à maioria das funções até que a sua conta seja aprovada. Se a sua inscrição for rejeitada, os seus dados serão removidos, pelo que não será necessária qualquer acção adicional da sua parte. Se não solicitou este convite, por favor, ignore este e-mail.
+        explanation_when_pending: Você solicitou um convite para %{host} com este endereço de e-mail. Logo que confirme o seu endereço de e-mail, iremos rever a sua inscrição. Pode iniciar sessão para alterar os seus dados ou eliminar a sua conta, mas não poderá aceder à maioria das funções até que a sua conta seja aprovada. Se a sua inscrição for rejeitada, os seus dados serão eliminados, pelo que não será necessária qualquer ação adicional da sua parte. Se não solicitou este convite, por favor, ignore este e-mail.
         extra_html: Por favor leia <a href="%{terms_path}">as regras da instância</a> e os <a href="%{policy_path}"> nossos termos de serviço</a>.
         subject: 'Mastodon: Instruções de confirmação %{instance}'
         title: Verificar o endereço de e-mail
@@ -66,9 +66,9 @@ pt-PT:
           subject: 'Mastodon: Nova chave de segurança'
           title: Foi adicionada uma nova chave de segurança
         deleted:
-          explanation: A seguinte chave de segurança foi removida da sua conta
-          subject: 'Mastodon: Chave de segurança removida'
-          title: Uma das suas chaves de segurança foi removida
+          explanation: A seguinte chave de segurança foi eliminada da sua conta
+          subject: 'Mastodon: Chave de segurança eliminada'
+          title: Uma das suas chaves de segurança foi eliminada
       webauthn_disabled:
         explanation: A autenticação com chave de segurança foi desativada para sua conta. É agora possível aceder à sua conta utilizando apenas o token gerado pelo aplicativo TOTP pareado.
         subject: 'Mastodon: Autenticação com chave de segurança desativada'
@@ -90,7 +90,7 @@ pt-PT:
       destroyed: Adeus! A tua conta foi cancelada. Esperamos ver-te em breve.
       signed_up: Bem-vindo! A tua conta foi registada com sucesso.
       signed_up_but_inactive: A tua conta foi registada. No entanto ainda não está activa.
-      signed_up_but_locked: A tua conta foi registada. No entanto está bloqueada.
+      signed_up_but_locked: A sua conta foi registada com sucesso. No entanto, não pudemos iniciar a sua sessão porque a conta está bloqueada.
       signed_up_but_pending: Uma mensagem com um link de confirmação foi enviada para o seu endereço de e-mail. Depois de clicar no link, iremos rever a sua inscrição. Será notificado se a sua conta é aprovada.
       signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o teu email. Por favor segue esse link para activar a tua conta.
       update_needs_confirmation: Alteraste o teu endereço de email ou palavra-passe, mas é necessário confirmar essa alteração. Por favor vai ao teu email e segue link que te enviámos.
@@ -102,7 +102,7 @@ pt-PT:
     unlocks:
       send_instructions: Vais receber um email com instruções para desbloquear a tua conta dentro de alguns minutos.
       send_paranoid_instructions: Se a tua conta existe, vais receber um email com instruções a detalhar como a desbloquear dentro de alguns minutos.
-      unlocked: A sua conta foi desbloqueada. Por favor inica uma nova sessão para continuar.
+      unlocked: A sua conta foi desbloqueada com sucessos. Por favor, inicie uma nova sessão para continuar.
   errors:
     messages:
       already_confirmed: já confirmado, por favor tente iniciar sessão
diff --git a/config/locales/devise.sc.yml b/config/locales/devise.sc.yml
index 0256c4674..02bcab0d1 100644
--- a/config/locales/devise.sc.yml
+++ b/config/locales/devise.sc.yml
@@ -3,36 +3,36 @@ sc:
   devise:
     confirmations:
       confirmed: S'indiritzu tuo de posta eletrònica est istadu cunfirmadu.
-      send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica.
-      send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
     failure:
       already_authenticated: Ses giai intradu.
       inactive: Su contu tuo no est ancora ativadu.
-      invalid: "%{authentication_keys} o crae de intrada non vàlida."
+      invalid: "%{authentication_keys} o crae non vàlida."
       last_attempt: Tenes ancora un'àteru tentativu, in antis chi su contu tuo bèngiat blocadu.
       locked: Su contu tuo est blocadu.
-      not_found_in_database: "%{authentication_keys} o crae de intrada non vàlida."
+      not_found_in_database: "%{authentication_keys} o crae non vàlida."
       pending: Su contu tuo est ancora in revisione.
       timeout: Sa sessione tua est iscadida. Torra·bi a intrare pro sighire.
       unauthenticated: Tocat a ti autenticare o ti registrare prima de sighire.
-      unconfirmed: Deves cunfirmare s'indiritzu tuo de posta eletrònica prima de sighire.
+      unconfirmed: Depes cunfirmare s'indiritzu tuo de posta eletrònica prima de sighire.
     mailer:
       confirmation_instructions:
         action: Verìfica s'indiritzu de posta eletrònica
         action_with_app: Cunfirma e torra a %{app}
         explanation: As creadu unu contu in %{host} cun custu indiritzu de posta eletrònica. T'ammancat unu clic pro s'ativatzione. Si non fias tue, non càrcules custu messàgiu de posta eletrònica.
         explanation_when_pending: As pedidu un'invitu a %{host} cun custu indiritzu de posta eletrònica. Cunfirmadu s'indiritzu de posta eletrònica, amus a revisionare sa dimanda tua. Podes intrare pro cambiare is detàllios o cantzellare su contu tuo, ma non podes atzèdere a sa majoria de is funtziones finas a chi su contu tuo siat aprovadu. Si sa dimanda tua est refudada, is datos ant a èssere bogados, duncas no t'ant a pedire prus peruna atzione. Si non fias tue, non càrcules custu messàgiu de posta eletrònica.
-        extra_html: Verìfica puru <a href="%{terms_path}">is règulas de su server</a> e <a href="%{policy_path}">is cunditziones de servìtziu nostras</a>.
+        extra_html: Verìfica puru <a href="%{terms_path}">is règulas de su serbidore</a> e <a href="%{policy_path}">is cunditziones de servìtziu nostras</a>.
         subject: 'Mastodon: Istrutziones de cunfirma pro %{instance}'
         title: Verìfica s'indiritzu de posta eletrònica
       email_changed:
-        explanation: 'Custu indiritzu de posta eletrònica pro su contu tuo est istadu mudadu a:'
-        extra: Si no as mudadu indiritzu de posta, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su server si ses blocadu a foras dae su contu tuo.
+        explanation: 'Custu indiritzu de posta eletrònica pro su contu tuo est essende mudadu a:'
+        extra: Si no as mudadu indiritzu de posta, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su serbidore si ses blocadu a foras dae su contu tuo.
         subject: 'Mastodon: Indiritzu de posta mudadu'
         title: Indiritzu de posta eletrònica nou
       password_change:
         explanation: Sa crae de su contu tuo est istada mudada.
-        extra: Si no as mudadu sa crae tua, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su server si ses blocadu a foras dae su contu tuo.
+        extra: Si no as mudadu sa crae tua, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su serbidore si ses blocadu a foras dae su contu tuo.
         subject: 'Mastodon: Crae mudada'
         title: Crae mudada
       reconfirmation_instructions:
@@ -45,7 +45,7 @@ sc:
         explanation: As pedidu una crae noa pro su contu tuo.
         extra: Si no dd'as pedida tue, non càrcules custu messàgiu de posta eletrònica. Custa crae no at a mudare finas a s'atzessu tuo a su ligàmene in subra pro sa creatzione de una noa.
         subject: 'Mastodon: Istrutziones pro resetare sa crae'
-        title: Crae resetada
+        title: Càmbiu de crae
       two_factor_disabled:
         explanation: S'autenticatzione a duos fatores est istada disativada pro su contu tuo. Immoe podes intrare impreende isceti indiritzu de posta eletrònica e crae.
         subject: 'Mastodon: Autenticatzione a duos fatores disativada'
@@ -70,38 +70,38 @@ sc:
           subject: 'Mastodon: Crae de seguresa cantzellada'
           title: Una de is craes de seguresa tuas est istada cantzellada
       webauthn_disabled:
-        explanation: S'autenticatzione cun craes de seguresa est istada disabilitada pro su contu tuo. S'intrada como est possìbile impreende isceti su getone ingendradu dae s'aplicatzione TOTP ligada.
+        explanation: S'autenticatzione cun craes de seguresa est istada disabilitada pro su contu tuo. S'intrada immoe est possìbile impreende isceti su getone ingendradu dae s'aplicatzione TOTP ligada.
         subject: 'Mastodon: Autenticatzione cun craes de seguresa disabilitada'
         title: Craes de seguresa disabilitadas
       webauthn_enabled:
-        explanation: S'autenticatzione cun crae de seguresa est istada abilitada pro su contu tuo. Sa crae de seguresa tua como si podet èssere impreare pro intrare.
+        explanation: S'autenticatzione cun crae de seguresa est istada abilitada pro su contu tuo. Sa crae de seguresa tua immoe si podet impreare pro intrare.
         subject: 'Mastodon: Autenticatzione cun sa crae de seguresa ativada'
         title: Craes de seguresa abilitadas
     omniauth_callbacks:
-      failure: Autenticatzione dae %{kind} fallida, ca "%{reason}".
-      success: Autenticadu dae su contu de %{kind}.
+      failure: Faddina in s'autenticatzione dae %{kind}, ca "%{reason}".
+      success: Autenticatzione curreta dae su contu de %{kind}.
     passwords:
-      no_token: No podes intrare a custa pàgina chene passare dae unu messàgiu de posta eletrònica pro resetare sa crae. Si benes dae su messàgiu de posta pro resetare sa crae, faghe in modu de impreare s'URL intreu chi t'ant donadu.
-      send_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire una unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
-      send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire una unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
-      updated: Sa crae tua est istada mudada. Immoe ses intradu.
+      no_token: No podes intrare a custa pàgina sena passare dae unu messàgiu de posta eletrònica pro resetare sa crae. Si benes dae su messàgiu de posta pro resetare sa crae, faghe in modu de impreare s'URL intreu chi t'ant donadu.
+      send_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      updated: Sa crae tua est istada mudada. Autenticatzione curreta.
       updated_not_active: Sa crae tua est istada mudada.
     registrations:
       destroyed: A si bìdere! Su contu tuo est istadu cantzelladu. Isperamus de ti torrare a bìdere chitzi.
-      signed_up: Registratzione curreta. Ti donamus sa benebènnida!
+      signed_up: Registratzione curreta. Ti donamus sa benebènnida.
       signed_up_but_inactive: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo no est ancora ativu.
       signed_up_but_locked: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo est blocadu.
       signed_up_but_pending: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. A pustis chi incarcas in su ligàmene, amus a revisionare sa dimanda tua. Si aprovada, t'at a arribare una notìfica.
-      signed_up_but_unconfirmed: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. Sighi su ligàmene pro ativare su contu tuo. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica.
-      update_needs_confirmation: Su contu tuo est istadu atualizadu, ma devimus verificare s'indiritzu tuo de posta eletrònica nou. Controlla sa posta eletrònica e sighi su ligàmene pro cunfirmare s'indiritzu nou de posta eletrònica. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      signed_up_but_unconfirmed: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. Sighi su ligàmene pro ativare su contu tuo. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      update_needs_confirmation: Su contu tuo est istadu atualizadu, ma depimus verificare s'indiritzu tuo de posta eletrònica nou. Controlla sa posta eletrònica e sighi su ligàmene pro cunfirmare s'indiritzu nou de posta eletrònica. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
       updated: Su contu tuo est istadu atualizadu.
     sessions:
       already_signed_out: Sessione serrada.
       signed_in: Atzessu curretu.
       signed_out: Sessione serrada.
     unlocks:
-      send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro isblocare su contu tuo tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica.
-      send_paranoid_instructions: Si su contu tuo esistit, as a retzire unu messàgiu de posta eletrònica cun istrutziones pro ddu isblocare tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica.
+      send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro isblocare su contu tuo de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
+      send_paranoid_instructions: Si su contu tuo esistit, as a retzire unu messàgiu de posta eletrònica cun istrutziones pro ddu isblocare de immoe a pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica.
       unlocked: Su contu tuo est istadu isblocadu. Intra pro sighire.
   errors:
     messages:
@@ -111,5 +111,5 @@ sc:
       not_found: no agatadu
       not_locked: no fiat blocadu
       not_saved:
-        one: '1 faddina at proibidu de sarvare custu %{resource}:'
+        one: '1 faddina at proibidu de sarvare %{resource}:'
         other: "%{count} faddinas ant proibidu de sarvare %{resource}:"
diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml
new file mode 100644
index 000000000..346b13be4
--- /dev/null
+++ b/config/locales/devise.si.yml
@@ -0,0 +1,27 @@
+---
+si:
+  devise:
+    failure:
+      locked: ඔබගේ ගිණුම අගුළු දමා ඇත.
+    mailer:
+      confirmation_instructions:
+        title: වි. තැපැල් ලිපිනය තහවුරු කරන්න
+      email_changed:
+        title: නව විද්‍යුත් තැපැල් ලිපිනය
+      password_change:
+        title: මුරපදය වෙනස් කරන ලදි
+      reconfirmation_instructions:
+        title: වි. තැපැල් ලිපිනය තහවුරු කරන්න
+      reset_password_instructions:
+        action: මුරපදය වෙනස් කරන්න
+      webauthn_disabled:
+        title: ආරක්ෂක යතුරු අබල කර ඇත
+      webauthn_enabled:
+        title: ආරක්ෂක යතුරු සබල කර ඇත
+    registrations:
+      update_needs_confirmation: ඔබ ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කළ නමුත් අපට ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ යුතුය. කරුණාකර ඔබගේ විද්‍යුත් තැපෑල පරීක්ෂා කර තහවුරු කිරීමේ සබැඳිය අනුගමනය කර ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් බහාලුම පරීක්ෂා කරන්න.
+      updated: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කර ඇත.
+    sessions:
+      already_signed_out: සාර්ථකව නික්මුනි.
+      signed_in: සාර්ථකව පිවිසුනි.
+      signed_out: සාර්ථකව නික්මුනි.
diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml
index 97b97ce48..6e2f1b411 100644
--- a/config/locales/devise.sq.yml
+++ b/config/locales/devise.sq.yml
@@ -4,7 +4,7 @@ sq:
     confirmations:
       confirmed: Adresa juaj email u ripohua me sukses.
       send_instructions: Brenda pak minutash, do të merrni një email me udhëzime se si të ripohoni adresën tuaj email. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
-      send_paranoid_instructions: Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, do të merrni një email me udhëzime se si të ripohoni adresën tuaj email. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      send_paranoid_instructions: Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, do të merrni një email me udhëzime se si të ripohoni adresën tuaj email. Ju lutemi, nëse nuk e morët këtë email, kontrolloni dosjen e mesazheve të padëshiruar.
     failure:
       already_authenticated: Jeni tashmë i futur.
       inactive: Llogaria juaj s’është aktivizuar ende.
diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml
index baffc2701..9739ee21d 100644
--- a/config/locales/devise.sr.yml
+++ b/config/locales/devise.sr.yml
@@ -12,6 +12,7 @@ sr:
       last_attempt: Имате још један покушај пре него што Ваш налог буде закључан.
       locked: Ваш налог је закључан.
       not_found_in_database: Неисправан %{authentication_keys} или лозинка.
+      pending: Ваш рачун је још увек у прегледу.
       timeout: Време трајања Ваше сесије је истекло. За наставак пријавите се поново.
       unauthenticated: За наставак се морате пријавити или регистровати.
       unconfirmed: Пре наставка морате потврдити свој налог.
@@ -20,6 +21,7 @@ sr:
         action: Потврдите адресу е-поште
         action_with_app: Потврди и врати се на %{app}
         explanation: Направили сте налог на %{host} са адресом ове е-поште. На један клик сте удаљени од активирања. Ако ово нисте ви, молимо игноришите ову е-пошту.
+        explanation_when_pending: Пријавили сте се за позив %{host} са овим имејлом. Када потврдите свој имејл, прегледаћемо вашу пријаву. Можете се пријавити да бисте променили детаље или избрисали налог, али не можете приступити већини функција док вам налог не буде одобрен. Ако ваша пријава буде одбијена, ваши подаци ће бити уклоњени, тако да од вас неће бити потребне даље радње. Ако ово нисте били ви, занемарите овај имејл.
         extra_html: Молимо да такође проверите <a href="%{terms_path}"> правила ове инстанце и <a href="%{policy_path}"> наше услове коришћења.
         subject: 'Мастодонт: Упутство за потврду корисничког налога на инстанци %{instance}'
         title: Потврдите адресу е-поште
@@ -44,8 +46,37 @@ sr:
         extra: Ако нисте затражили ово, молимо игноришите ову е-пошту. Ваша лозинка неће бити промењена док не приступите повезници/вези изнад и не направите нову.
         subject: 'Мастодонт: Упутство за ресетовање лозинке'
         title: Лозинка ресетована
+      two_factor_disabled:
+        explanation: Двофакторска аутентификација за ваш налог је онемогућена. Пријава је сада могућа само помоћу имејла и лозинке.
+        subject: 'Mastodon: Двофакторска аутентификација је онемогућена'
+        title: 2FA искључена
+      two_factor_enabled:
+        explanation: Двофакторска аутентификација је омогућена за ваш налог. За пријаву ће бити потребан токен који генерише упарена ТОТП апликација.
+        subject: 'Mastodon: Двофакторска аутентификација је омогућена'
+        title: 2FA укључена
+      two_factor_recovery_codes_changed:
+        explanation: Претходни кодови за опоравак су поништени и генерисани су нови.
+        subject: 'Mastodon: Поново су генерисани кодови за опоравак'
+        title: 2FA кодови опоравка промењени
       unlock_instructions:
         subject: 'Мастодонт: Упутство за откључавање корисничког налога'
+      webauthn_credential:
+        added:
+          explanation: Следећи безбедносни кључ је додат на ваш налог
+          subject: 'Mastodon: Нови сигурносни кључ'
+          title: Додан је нови безбедносни кључ
+        deleted:
+          explanation: Следећи безбедносни кључ је уклоњен из вашег налога
+          subject: 'Mastodon: Сигурносни кључ је избрисан'
+          title: Један од ваших безбедносних кључева је избрисан
+      webauthn_disabled:
+        explanation: Аутентификација помоћу безбедносних кључева је онемогућена за ваш налог. Пријава је сада могућа само помоћу токена који генерише упарена ТОТП апликација.
+        subject: 'Mastodon: Аутентификација са сигурносним кључевима онемогућена'
+        title: Сигурносни кључеви су онемогућени
+      webauthn_enabled:
+        explanation: Аутентификација са безбедносним кључем је омогућена за ваш налог. Ваш сигурносни кључ се сада може користити за пријављивање.
+        subject: 'Mastodon: Омогућена аутентификација са безбедним кључем'
+        title: Сигурносни кључеви су омогућени
     omniauth_callbacks:
       failure: Нисмо у могућности ауторизовати Вас са %{kind} налогом због "%{reason}".
       success: Успешна ауторизација са %{kind} налога.
@@ -60,6 +91,7 @@ sr:
       signed_up: Добродошли! Успешно сте се регистровали.
       signed_up_but_inactive: Успешно сте се регистровали. Нажалост не можете се пријавити зато што Ваш налог још није активиран.
       signed_up_but_locked: Успешно сте се регистровали. Нажалост не можете се пријавити зато што је Ваш налог закључан.
+      signed_up_but_pending: На ваш имејл послата је порука са везом за потврду. Након што кликнете на везу, прегледаћемо вашу пријаву. Бићете обавештени ако буде одобрено.
       signed_up_but_unconfirmed: Порука за потврду Вашег налога је послата на Вашу имејл адресу. Кликните на везу у имејлу да потврдите свој налог. Молимо проверите и спам фасциклу ако нисте примили поруку.
       update_needs_confirmation: Uспешно сте ажурирали свој налог, али треба да потврдимо нову адресу Ваше е-поште. Молимо Вас да проверите е-пошту и пратите линк за потврду нове адресе Ваше е-поште.
       updated: Ваш налог је успешно ажуриран.
diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml
index 071f00878..5e982ba05 100644
--- a/config/locales/devise.sv.yml
+++ b/config/locales/devise.sv.yml
@@ -2,41 +2,41 @@
 sv:
   devise:
     confirmations:
-      confirmed: Din e-postadress har bekräftats.
-      send_instructions: Du kommer att få ett mail med instruktioner för hur du bekräftar din e-postadress om några minuter. Kontrollera din spammapp om du inte fick det här e-postmeddelandet.
-      send_paranoid_instructions: Om din e-postadress finns i vår databas får du ett mail med instruktioner för hur du bekräftar din e-postadress inom några minuter. Kontrollera din spammapp om du inte fick det här e-postmeddelandet.
+      confirmed: Din e-postadress har framgångsfullt bekräftats.
+      send_instructions: Du kommer att få ett mail med instruktioner för hur du bekräftar din e-postadress om några minuter. Kontrollera din spammapp om du inte fick det e-postmeddelandet.
+      send_paranoid_instructions: Om din e-postadress finns i vår databas får du ett mail med instruktioner för hur du bekräftar din e-postadress inom några minuter. Kontrollera din spammapp om du inte fick det e-postmeddelandet.
     failure:
-      already_authenticated: Du är redan inloggad.
-      inactive: Ditt konto är inte aktiverat än..
-      invalid: Ogiltigt %{authentication_keys} eller lösenord.
-      last_attempt: Du har ytterligare ett försök innan ditt konto blir låst.
+      already_authenticated: Du har redan loggat in.
+      inactive: Ditt konto är ännu inte aktiverat.
+      invalid: Ogiltig %{authentication_keys} eller lösenord.
+      last_attempt: Du har ytterligare ett försök innan ditt konto är låst.
       locked: Ditt konto är låst.
       not_found_in_database: Ogiltigt %{authentication_keys} eller lösenord.
       pending: Ditt konto granskas fortfarande.
-      timeout: Din session löpte ut. Vänligen logga in igen för att fortsätta.
+      timeout: Din session har avslutats. Vänligen logga in igen för att fortsätta.
       unauthenticated: Du måste logga in eller registrera dig innan du fortsätter.
       unconfirmed: Du måste bekräfta din e-postadress innan du fortsätter.
     mailer:
       confirmation_instructions:
-        action: Verifiera e-postadress
+        action: Verifiera e-post adressen
         action_with_app: Bekräfta och återgå till %{app}
-        explanation: Du har skapat ett konto på %{host} med den här e-postadressen. Du är ett klick bort från att aktivera det. Om det inte var du ignorerar det här e-postmeddelandet.
-        explanation_when_pending: Du ansökte om en inbjudan till %{host} med denna e-postadress. När du har bekräftat din e-postadress kommer vi att granska din ansökan. Du kan logga in för att ändra dina uppgifter eller ta bort ditt konto, men du kan inte komma åt de flesta funktionerna förrän ditt konto har godkänts. Om din ansökan avvisas kommer dina uppgifter att tas bort, så ingen ytterligare åtgärd kommer att krävas av dig. Om detta inte var du, vänligen ignorera detta mail.
-        extra_html: Kolla gärna också <a href="%{terms_path}">instansens regler</a> och <a href="%{policy_path}">våra användarvillkor</a>.
-        subject: 'Mastodon: Bekräftelsesinstruktioner för %{instance}'
-        title: Verifiera e-postadress
+        explanation: Du har skapat ett konto på %{host} med den här e-post adressen. Du är ett klick från att aktivera det. Om det inte var du, ignorera det här e-post meddelandet.
+        explanation_when_pending: Du ansökte om en inbjudan till %{host} med denna e-post adress. När du har bekräftat din e-post adress kommer vi att granska din ansökan. Du kan logga in för att ändra dina uppgifter eller ta bort ditt konto, men du kan inte komma åt de flesta funktionerna förrän ditt konto har godkänts. Om din ansökan avvisas kommer dina uppgifter att tas bort, så ingen ytterligare åtgärd kommer att krävas av dig. Om detta inte var du, vänligen ignorera detta mail.
+        extra_html: Vänligen observera <a href="%{terms_path}"> systemets regler</a> och <a href="%{policy_path}">våra användarvillkor</a>.
+        subject: 'Mastodon: Bekräftelse instruktioner för %{instance}'
+        title: Verifiera e-post adress
       email_changed:
-        explanation: 'E-postadressen för ditt konto ändras till:'
-        extra: Om du inte ändrade din e-post är det troligt att någon har fått tillgång till ditt konto. Vänligen ändra ditt lösenord omedelbart eller kontakta instansadministratören om du är låst ur ditt konto.
-        subject: 'Mastodon: E-post ändrad'
-        title: Ny e-postadress
+        explanation: 'E-post adressen för ditt konto ändras till:'
+        extra: Om du inte ändrade din e-post är det troligt att någon har fått tillgång till ditt konto. Vänligen ändra ditt lösenord omedelbart eller kontakta dataserver administratören om du är utelåst från ditt konto.
+        subject: 'Mastodon: e-post ändrad'
+        title: Ny e-post adress
       password_change:
         explanation: Lösenordet för ditt konto har ändrats.
-        extra: Om du inte ändrade ditt lösenord är det troligt att någon har fått tillgång till ditt konto. Vänligen ändra ditt lösenord omedelbart eller kontakta instansadministratören om du är utelåst från ditt konto.
-        subject: 'Mastodon: Lösenord ändrat'
-        title: lösenordet ändrat
+        extra: Om du inte ändrade ditt lösenord är det troligt att någon har fått tillgång till ditt konto. Vänligen ändra ditt lösenord omedelbart eller kontakta server administratören om du är utelåst från ditt konto.
+        subject: 'Mastodon: Lösenordet har ändrats'
+        title: Lösenordet har ändrats
       reconfirmation_instructions:
-        explanation: Bekräfta den nya adressen för att ändra din e-postadress.
+        explanation: Bekräfta den nya adressen för att ändra din e-post adress.
         extra: Om den här ändringen inte initierades av dig kan du ignorerar det här e-postmeddelandet. E-postadressen för Mastodon-kontot ändras inte förrän du kommer åt länken ovan.
         subject: 'Mastodon: Bekräfta e-post för %{instance}'
         title: Verifiera e-postadress
@@ -62,6 +62,7 @@ sv:
         subject: 'Mastodon: Lås upp instruktioner'
       webauthn_credential:
         added:
+          explanation: Följande säkerhetsnyckel har lagts till i ditt konto
           subject: 'Mastodon: Ny säkerhetsnyckel'
           title: En ny säkerhetsnyckel har lagts till
         deleted:
@@ -69,8 +70,12 @@ sv:
           subject: 'Mastodon: Säkerhetsnyckeln borttagen'
           title: En av dina säkerhetsnycklar har tagits bort
       webauthn_disabled:
+        explanation: Autentisering med säkerhetsnycklar till ditt konto har inaktiverats. Inloggning är nu endast möjligt med den token som genereras av den sammankopplade TOTP-appen.
+        subject: 'Mastodon: Autentisering med säkerhetsnycklar är inaktiverat'
         title: Säkerhetsnycklar inaktiverade
       webauthn_enabled:
+        explanation: Autentisering med säkerhetsnyckel till ditt konto har aktiverats. Din säkerhetsnyckel kan nu användas för inloggning.
+        subject: 'Mastodon: Autentisering med säkerhetsnyckel är aktiverat'
         title: Säkerhetsnycklar aktiverade
     omniauth_callbacks:
       failure: Det gick inte att autentisera dig från %{kind} för "%{reason}".
diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml
index 371a497ad..62ab8f93e 100644
--- a/config/locales/devise.th.yml
+++ b/config/locales/devise.th.yml
@@ -68,6 +68,7 @@ th:
         deleted:
           explanation: ลบกุญแจความปลอดภัยดังต่อไปนี้ออกจากบัญชีของคุณแล้ว
           subject: 'Mastodon: ลบกุญแจความปลอดภัยแล้ว'
+          title: ลบหนึ่งในกุญแจความปลอดภัยของคุณแล้ว
       webauthn_disabled:
         subject: 'Mastodon: ปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว'
         title: ปิดใช้งานกุญแจความปลอดภัยแล้ว
diff --git a/config/locales/devise.tt.yml b/config/locales/devise.tt.yml
index 5eab4abff..3b73d0fab 100644
--- a/config/locales/devise.tt.yml
+++ b/config/locales/devise.tt.yml
@@ -1 +1,15 @@
+---
 tt:
+  devise:
+    confirmations:
+      confirmed: Сезнең э. почта адресыгыз уңышлы расланган.
+    mailer:
+      reset_password_instructions:
+        action: Серсүзне үзгәртү
+        title: Серсүзне алыштыру
+      webauthn_credential:
+        deleted:
+          subject: 'Mastodon: Иминлек ачкычы бетерелгән'
+  errors:
+    messages:
+      not_found: табылмады
diff --git a/config/locales/doorkeeper.af.yml b/config/locales/doorkeeper.af.yml
new file mode 100644
index 000000000..252f9fd5a
--- /dev/null
+++ b/config/locales/doorkeeper.af.yml
@@ -0,0 +1 @@
+af:
diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml
index b391a1354..03863a338 100644
--- a/config/locales/doorkeeper.ar.yml
+++ b/config/locales/doorkeeper.ar.yml
@@ -73,16 +73,20 @@ ar:
       index:
         application: التطبيق
         created_at: صُرّح له في
-        date_format: "%Y-%m-%d %H:%M:%S"
+        date_format: "%d-%m-%Y %H:%M:%S"
         scopes: المجالات
         title: تطبيقاتك المرخص لها
     errors:
       messages:
         access_denied: لقد رفض مالك المَورِدِ أو تصريح السيرفر طلبك.
+        credential_flow_not_configured: فشل تدفق بيانات اعتماد كلمة سر مالك المورد بسبب عدم تهيئة Doorkeeper.configure.resource_owner_from_credentials.
         invalid_client: فشلت المصادقة مع العميل لأنه العميل مجهول أو لغياب المصادقة ضمن العميل أو أنّ أسلوب المصادقة غير مدعومة.
         invalid_grant: إنّ التصريح المقدَّم غير صالح، سواء انتهت مدة صلاحيته أو تم إلغاؤه أو أنه لا يتطابق مع عنوان إعادة التحويل في طلب التصريح أو أنّ هذا التصريح قد تم تقديمه لعميل آخر.
         invalid_redirect_uri: إنّ عنوان إعادة التحويل غير صالح.
-        invalid_request: إنّ هذا الطلب يستلزم مؤشرا أو يحمل قيمة مُعامِل غير مدعومة أو فيه خلل ما.
+        invalid_request:
+          missing_param: 'فقدان أحد المعلمات المطلوبة: %{value}.'
+          request_not_authorized: الطلب بحاجة إلى تفويض، المعلمة المطلوبة لترخيص الطلب مفقودة أو غير صالحة.
+          unknown: يفتقد الطلب إلى معلمة مطلوبة، أو يتضمن قيمة معملمة غير مدعومة، أو هناك خلل ما.
         invalid_resource_owner: إنّ المُعرِّفات التي قدّمها صاحب المورِد غير صحيحة أو أنه لا وجود لصاحب المورِد
         invalid_scope: المجال المطلوب غير صحيح أو مجهول أو مُعبَّر عنه بشكل خاطئ.
         invalid_token:
diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml
index f36187e12..083d19bb2 100644
--- a/config/locales/doorkeeper.bg.yml
+++ b/config/locales/doorkeeper.bg.yml
@@ -5,6 +5,8 @@ bg:
       doorkeeper/application:
         name: Име
         redirect_uri: URI за пренасочване
+        scopes: Обхват
+        website: Уебсайт на приложение
     errors:
       models:
         doorkeeper/application:
@@ -33,9 +35,14 @@ bg:
         redirect_uri: Използвай един ред за всяко URI
         scopes: Разделяй диапазоните с интервал. Остави празно, за да използваш диапазона по подразбиране.
       index:
+        application: Приложение
         callback_url: URL за обратно повикване
+        delete: Изтриване
+        empty: Нямате приложения.
         name: Име
         new: Ново приложение
+        scopes: Обхват
+        show: Показване
         title: Твоите приложения
       new:
         title: Ново приложение
@@ -56,6 +63,8 @@ bg:
         able_to: Ще е възможно
         prompt: Приложението %{client_name} заявява достъп до твоя акаунт
         title: Изисква се упълномощаване
+      show:
+        title: Копирайте този код за удостоверяване и го поставете в приложението.
     authorized_applications:
       buttons:
         revoke: Отмяна
@@ -64,6 +73,7 @@ bg:
       index:
         application: Приложение
         created_at: Създадено на
+        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Диапазони
         title: Твоите упълномощени приложения
     errors:
@@ -73,7 +83,10 @@ bg:
         invalid_client: Удостоверяването на клиента предизвика грешка, поради непознат клиент, липсващо клиентско удостоверяване, или заради това, че методът на удостоверяване не се поддържа.
         invalid_grant: Предоставеното удостоверение за достъп е невалидно, изтекло, отхвърлено, не съвпада с пренасочващото URI, използвано в заявката за удостоверение, или е бил издадено от друг клиент.
         invalid_redirect_uri: Наличното пренасочващо URI е невалидно.
-        invalid_request: Заявката е с липсващ задължителен параметър, включва стойност на параметъра, която не се поддържа, или е изкривена по друг начин.
+        invalid_request:
+          missing_param: 'Липсва задължителен параметър: %{value}.'
+          request_not_authorized: Заявката трябва да бъде упълномощена. Необходимият параметър за разрешаване на заявка липсва или е невалиден.
+          unknown: Заявката е с липсващ задължителен параметър, включва стойност на параметъра, която не се поддържа, или е изкривена по друг начин.
         invalid_resource_owner: Предоставените идентификационни данни на притежателя на ресурса са невалидни, или притежателят не може да бъде намерен.
         invalid_scope: Заявеният диапазон е невалиден, неизвестен или изкривен.
         invalid_token:
@@ -105,6 +118,37 @@ bg:
       application:
         title: Нужно е упълномощаване по OAuth
     scopes:
+      admin:read: прочит на всички данни на сървъра
+      admin:read:accounts: прочит на деликатна информация от всички акаунти
+      admin:read:reports: прочит на деликатна информация от всички докладвания и докладвани акаунти
+      admin:write: промяна на всички данни на сървъра
+      admin:write:accounts: извършване на действия за модериране на акаунти
+      admin:write:reports: извършване на действия за модериране на докладвания
       follow: следването, блокирането, деблокирането и отмяната на следването на акаунтите
+      push: получаване на вашите изскачащи известия
       read: четенето на данните от твоя акаунт
+      read:accounts: преглед на информация за акаунти
+      read:blocks: преглед на вашите блокирания
+      read:bookmarks: преглед на вашите отметки
+      read:favourites: преглед на вашите любими
+      read:filters: преглед на вашите филтри
+      read:follows: преглед на вашите последвания
+      read:lists: преглед на вашите списъци
+      read:mutes: преглед на вашите заглушавания
+      read:notifications: преглед на вашите известия
+      read:reports: преглед на вашите докладвания
+      read:search: търсене от ваше име
+      read:statuses: преглед на всички състояния
       write: публикуването от твое име
+      write:accounts: промяна на вашия профил
+      write:blocks: блокиране на акаунти и домейни
+      write:bookmarks: отмятане на състояния
+      write:favourites: любими състояния
+      write:filters: създаване на филтри
+      write:follows: последване на хора
+      write:lists: създаване на списъци
+      write:media: качване на мултимедийни файлове
+      write:mutes: заглушаване на хора и разговори
+      write:notifications: изчистване на вашите известия
+      write:reports: докладване на други хора
+      write:statuses: публикуване на състояния
diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml
index 3de9d4bab..d85738ec2 100644
--- a/config/locales/doorkeeper.ca.yml
+++ b/config/locales/doorkeeper.ca.yml
@@ -83,7 +83,10 @@ ca:
         invalid_client: La autentificació del client ha fallat perquè és un client desconegut o no està inclòs l'autentificació del client o el mètode d'autenticació no està confirmat.
         invalid_grant: La concessió d'autorizació oferida és invàlida, ha vençut, s'ha revocat, no coincideix amb l'URI de redirecció utilizada en la petició d'autorizació, o fou emesa per a un altre client.
         invalid_redirect_uri: L'URI de redirecció inclòs no és vàlid.
-        invalid_request: En la petició manca un paràmetre necessari o inclou un valor de paràmetre no suportat o te un altre tipus de format incorrecte.
+        invalid_request:
+          missing_param: 'Falta paràmetre requerit: %{value}.'
+          request_not_authorized: La petició ha de ser autoritzada. Falta o és invàlid un paràmetre requerit per l'autorització de la petició.
+          unknown: En la petició manca un paràmetre necessari o inclou un valor de paràmetre no suportat o te un altre tipus de format incorrecte.
         invalid_resource_owner: Les credencials del propietari del recurs proporcionat no son vàlides, o el propietari del recurs no pot ser trobat
         invalid_scope: L'àmbit demanat és invàlid, desconegut o erroni.
         invalid_token:
diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml
index a4c8cd4fc..6819d8fc6 100644
--- a/config/locales/doorkeeper.co.yml
+++ b/config/locales/doorkeeper.co.yml
@@ -62,7 +62,7 @@ co:
       new:
         able_to: St’applicazione puderà
         prompt: L’applicazione %{client_name} hà dumandatu d’avè accessu à u vostru contu
-        title: Permessu riquestu
+        title: Permessu richiestu
       show:
         title: Codice d’auturizazione da cupià indè l’applicazione.
     authorized_applications:
@@ -73,7 +73,7 @@ co:
       index:
         application: Applicazione
         created_at: Auturizata u
-        date_format: "%d-%m-%Y %H:%M:%S"
+        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Scopi
         title: E vostre applicazione auturizate
     errors:
@@ -83,7 +83,10 @@ co:
         invalid_client: L’autintificazione di u cliente hà fiascatu perchè u cliente ùn hè micca cunnisciutu, l’identificazione di u cliente ùn hè cumpresa, o u modu d’identificazione ùn marchja micca.
         invalid_grant: L’accunsentu d’auturizazione furnitu ùn hè currettu, hè spiratu, sguassatu, ùn và micca cù l’indirizzu di ridirezzione usatu in a dumanda d’auturizazione, o hè statu emessu per un’altru cliente.
         invalid_redirect_uri: L’URI di ridirezzione ùn hè curretta.
-        invalid_request: Ci manca un parametru riquestu indè a dumanda, cuntene un parametru ch’ùn esiste micca, o altru sbagliu di forma.
+        invalid_request:
+          missing_param: 'Parametru richiestu mancante: %{value}.'
+          request_not_authorized: A dumanda deve esse auturizata. Ci manca o hè invalidu un parametru richiestu per a dumanda d'auturizazione.
+          unknown: Ci manca un parametru richiestu indè a dumanda, cuntene un parametru ch’ùn esiste micca, o altru sbagliu di forma.
         invalid_resource_owner: L’idintificanti di u pruprietariu di a risorsa ùn sò curretti, o u pruprietariu ùn pò micca esse trovu
         invalid_scope: U scopu dumandatu ùn hè currettu, hè scunnisciutu, o altru sbagliu di forma.
         invalid_token:
@@ -113,7 +116,7 @@ co:
           applications: Applicazione
           oauth2_provider: Furnitore OAuth2
       application:
-        title: Auturizazione OAuth riquestata
+        title: Auturizazione OAuth richiestata
     scopes:
       admin:read: leghje tutti i dati nant'à u servore
       admin:read:accounts: leghje i cuntinuti sensibili di tutti i conti
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index aecb781c9..13b3df74b 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -83,7 +83,10 @@ cs:
         invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentizaci či nepodporované autentizační metodě.
         invalid_grant: Poskytnuté oprávnění je neplatné, vypršela jeho platnost, bylo zamítnuto, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu.
         invalid_redirect_uri: URI pro přesměrování není platné.
-        invalid_request: Požadavku chybí povinný parametr, obsahuje nepodporovanou hodnotu parametru, či je jinak špatné formulovaný.
+        invalid_request:
+          missing_param: 'Chybí potřebný parametr: %{value}.'
+          request_not_authorized: Požadavek musí být autorizován. Potřebný parametr pro autorizaci požadavku chybí nebo není platný.
+          unknown: Požadavku chybí potřebný parametr, obsahuje nepodporovanou hodnotu parametru nebo je jinak špatně formulován.
         invalid_resource_owner: Poskytnuté přihlašovací údaje vlastníka zdroje nejsou platné, nebo vlastník zdroje nemůže být nalezen
         invalid_scope: Požadovaný rozsah je neplatný, neznámý, nebo špatně formulovaný.
         invalid_token:
diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml
index fcc59b98d..93c618da9 100644
--- a/config/locales/doorkeeper.cy.yml
+++ b/config/locales/doorkeeper.cy.yml
@@ -83,7 +83,6 @@ cy:
         invalid_client: Methwyd dilysu cleient oherwydd cleient anhysbys, methiant i gynnwys dilysu cleient, neu defnydd o ddull dilysu nid yw'n cael ei gefnodi.
         invalid_grant: Mae'r grant dilysu a ddarparwyd yn annilys, wedi dod i ben, wedi'i wrthod, ddim yn cyfateb a'r URI ailgyferio a ddefnyddiwyd yn y cais dilysu, neu wedi ei ddarparu i gleient arall.
         invalid_redirect_uri: Nid yw'r uri ailgyfeirio cynnwysiedig yn gyfredol.
-        invalid_request: Nid yw'r cais yn cynnwys paramedr angenrheidiol, yn cynnwys paramader paramedr nad yw'n cael ei gefnogi, neu wedi ei gamffurfio mewn rhyw fodd arall.
         invalid_resource_owner: Nid yw meini prawf perchennog yr adnodd yn ddilys, neu ni ellir canfod perchennog yr adnodd
         invalid_scope: Mae'r sgôp a geisiwyd amdano yn annilys, anhysbys, neu'n gamffurfiedig.
         invalid_token:
diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml
index cf630195f..dc1f491a4 100644
--- a/config/locales/doorkeeper.da.yml
+++ b/config/locales/doorkeeper.da.yml
@@ -3,36 +3,36 @@ da:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Navn på program
+        name: Applikationsnavn
         redirect_uri: Link
         scopes: Områder
-        website: Webside for applikation
+        website: Applikationswebsted
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
               fragment_present: kan ikke indeholde et fragment.
-              invalid_uri: skal være et gyldigt URI.
+              invalid_uri: skal være en gyldigt URI.
               relative_uri: skal være en absolut URI.
-              secured_uri: skal være en HTTPS/SSL URI.
+              secured_uri: skal være en HTTPS-/SSL-URI.
   doorkeeper:
     applications:
       buttons:
         authorize: Godkend
-        cancel: Annuller
-        destroy: Destruer
-        edit: Rediger
+        cancel: Afbryd
+        destroy: Destruér
+        edit: Redigér
         submit: Indsend
       confirmations:
-        destroy: Er du sikker?
+        destroy: Sikker?
       edit:
-        title: Rediger applikation
+        title: Redigér applikation
       form:
-        error: Ups! Tjek din form for mulige fejl
+        error: Ups! Tjek din formular for mulige fejl
       help:
-        native_redirect_uri: Brug %{native_redirect_uri} for lokale tests
-        redirect_uri: Brug en linje per URI
+        native_redirect_uri: Brug %{native_redirect_uri} til lokale tests
+        redirect_uri: Brug én linje pr. URI
         scopes: Adskil omfang med mellemrum. Lad være blankt for at bruge standard omfang.
       index:
         application: Applikation
@@ -48,28 +48,28 @@ da:
         title: Ny applikation
       show:
         actions: Handlinger
-        application_id: Klient nøgle
-        callback_urls: Callback-URLs
+        application_id: Klientnøgle
+        callback_urls: Callback-URL'er
         scopes: Omfang
-        secret: Secret
+        secret: Klienthemmelighed
         title: 'Applikation: %{name}'
     authorizations:
       buttons:
         authorize: Godkend
         deny: Afvis
       error:
-        title: Der opstod en fejl
+        title: En fejl opstod
       new:
         able_to: Den vil være i stand til
         prompt: Applikationen %{client_name} anmoder om adgang til din konto
-        title: Godkendelse påkrævet
+        title: Godkendelse krævet
       show:
-        title: Kopiere denne godkendelseskode og indsæt den i applikationen.
+        title: Kopiér og indsæt denne godkendelseskode i applikationen.
     authorized_applications:
       buttons:
         revoke: Ophæv
       confirmations:
-        revoke: Er du sikker?
+        revoke: Sikker?
       index:
         application: Applikation
         created_at: Godkendt
@@ -78,42 +78,45 @@ da:
         title: Dine godkendte applikationer
     errors:
       messages:
-        access_denied: Ejeren af ressourcen eller godkendelses serveren afviste anmodningen.
-        credential_flow_not_configured: Flytning af ressourceejers adgangskode mislykkedes grundet Doorkeeper.configure.resource_owner_from_credentials ikke er opsat.
-        invalid_client: Klient autentikationen mislykkedes grundet en ukendt klient, ingen klient autentikation fulgte med, eller en ikke-understøttet metode.
-        invalid_grant: Autoriseringen er ugyldig, udløbet, ophævet, passer ikke med den henvisnings URI der blev brugt i autoriserings anmodningen, eller blev givet til en anden klient.
-        invalid_redirect_uri: Ormdirigerings-uri'en der blev angivet er ikke gyldig.
-        invalid_request: Anmodningen mangler en parametre, inkluderer en ikke understøttet parametre værdi eller er på en eller anden måde deformeret.
-        invalid_resource_owner: De angivne ressource ejer kredentialer er ikke gyldige, eller ressource ejeren kunne ikke blive fundet
-        invalid_scope: Det anmodede omfang er ugyldigt, ukendt eller deformeret.
+        access_denied: Ressourceejeren eller godkendelsesserveren afviste anmodningen.
+        credential_flow_not_configured: Ressourceejeradgangskodeakkreditiv flow mislykkedes grundet ikke-opsat Doorkeeper.configure.resource_owner_from_credentials.
+        invalid_client: Klientbekræftelse mislykkedes grundet en ukendt klient, ingen klientbekræftelse inkluderet, eller uunderstøttet bekræftelsesmetode.
+        invalid_grant: Den leverede godkendelse er ugyldig, udløbet, tilbagekaldt, matcher ikke omdirigerings-URI brugt i godkendelsesanmodningen, eller er udstedt til en anden klient.
+        invalid_redirect_uri: Inkluderede ormdirigerings-URI er ugyldig.
+        invalid_request:
+          missing_param: 'Mangler krævet parameter: %{value}.'
+          request_not_authorized: Anmodning skal godkendes. Krævet parameter til godkendelse af anmodning mangler eller er ugyldig.
+          unknown: Anmodningen mangler en krævet parametre, inkluderer en uunderstøttet parametre værdi eller er på anden vis fejlbehæftet.
+        invalid_resource_owner: De angivne ressourceejerakkreditiver er ugyldige, eller ressourceejer kunne ikke findes
+        invalid_scope: Det anmodede omfang er ugyldigt, ukendt eller fejlbehæftet.
         invalid_token:
-          expired: Adgangs-beviset er udløbet
-          revoked: Adgangs-beviset er blevet ophævet
-          unknown: Adgangs-beviset er ugyldigt
-        resource_owner_authenticator_not_configured: Ressource ejeren kunne ikke blive fundet grundet Doorkeeper.configure.resource_owner_authenticator ikke er konfigureret.
-        server_error: Autoriserings serveren blev mødt med en uventet betingelse der forhindrede den i at færdiggøre anmodningen.
-        temporarily_unavailable: Autoriserings serveren er på nuværende tidspunkt ikke i stand til at håndtere anmodningen grundet midlertidig overlast eller serveren er ved at blive opdateret.
-        unauthorized_client: Klienten er ikke godkendt til at udføre denne anmodning ved at bruge denne metode.
-        unsupported_grant_type: Autoriserings typen understøttes ikke af autoriserings serveren.
-        unsupported_response_type: Godkendelses serveren understøtter ikke denne type respons.
+          expired: Adgangstoken er udløbet
+          revoked: Adgangstoken er tilbagekaldt
+          unknown: Adgangstoken er ugyldig
+        resource_owner_authenticator_not_configured: Ressourceejer kunne ikke findes grundet ikke-opsat Doorkeeper.configure.resource_owner_authenticator.
+        server_error: Godkejdelsesserveren stødte på en uventet betingelse, der forhindrede den i at imødekomme anmodningen.
+        temporarily_unavailable: Godkendelsesserveren kan pt. ikke håndtere anmodningen grundet midlertidig overbelastning eller servervedligehold.
+        unauthorized_client: Klienten er ikke godkendt til at udføre denne anmodning via denne metode.
+        unsupported_grant_type: Godkendelsestypen understøttes ikke af godkendelsesserveren.
+        unsupported_response_type: Godkendelsesserveren understøtter ikke denne svartype.
     flash:
       applications:
         create:
-          notice: Applikationen blev oprettet.
+          notice: Applikation oprettet.
         destroy:
-          notice: Applikationen blev slettet.
+          notice: Applikation slettet.
         update:
-          notice: Applikationen blev opdateret.
+          notice: Applikation opdateret.
       authorized_applications:
         destroy:
-          notice: Applikationen blev ophævet.
+          notice: Applikation tilbagekaldt.
     layouts:
       admin:
         nav:
           applications: Applikationer
-          oauth2_provider: OAuth Udbyder
+          oauth2_provider: OAuth-udbyder
       application:
-        title: OAuth godkendelse påkrævet
+        title: OAuth-godkendelse krævet
     scopes:
       admin:read: læs al data på serveren
       admin:read:accounts: læs sensitiv information fra alle konti
@@ -121,31 +124,31 @@ da:
       admin:write: redigér al data på serveren
       admin:write:accounts: udfør modereringshandlinger på konti
       admin:write:reports: udfør modereringshandlinger på anmeldelser
-      follow: ændre din kontos forhold
-      push: modtage dine push notifikationer
-      read: læse alle din kontos data
-      read:accounts: se konto oplysninger
+      follow: ændre kontorelationer
+      push: modtage dine push-notifikationer
+      read: læse alle dine kontodata
+      read:accounts: se kontooplysninger
       read:blocks: se dine blokeringer
       read:bookmarks: se dine bogmærker
       read:favourites: se dine favoritter
       read:filters: se dine filtre
-      read:follows: se hvem du følger
+      read:follows: se, hvem du følger
       read:lists: se dine lister
-      read:mutes: se dine dæmpninger
+      read:mutes: se dine tavsgørelser
       read:notifications: se dine notifikationer
       read:reports: se dine anmeldelser
       read:search: søge på dine vegne
       read:statuses: se alle statusser
-      write: ændre din kontos data
+      write: ændre alle dine kontodata
       write:accounts: ændre din profil
-      write:blocks: bloker konti og domæner
-      write:bookmarks: bogmærk statusser
-      write:favourites: favoriser statusser
-      write:filters: opret filtre
-      write:follows: følg folk
-      write:lists: opret lister
-      write:media: upload multimedie filer
-      write:mutes: dæmp folk og samtaler
-      write:notifications: ryd dine notifikationer
-      write:reports: anmeld andre folk
-      write:statuses: udgiv statusser
+      write:blocks: blokere konti og domæner
+      write:bookmarks: bogmærke statusser
+      write:favourites: favorisere statusser
+      write:filters: oprette filtre
+      write:follows: følge personer
+      write:lists: oprette lister
+      write:media: uploade multimediefiler
+      write:mutes: tavsgøre personer og konversationer
+      write:notifications: rydde dine notifikationer
+      write:reports: anmelde personer
+      write:statuses: udgive statusser
diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml
index 8b850b56a..032a3dbce 100644
--- a/config/locales/doorkeeper.de.yml
+++ b/config/locales/doorkeeper.de.yml
@@ -83,7 +83,10 @@ de:
         invalid_client: 'Client-Authentifizierung ist fehlgeschlagen: Client unbekannt, keine Authentisierung mitgeliefert oder Authentisierungsmethode wird nicht unterstützt.'
         invalid_grant: Die beigefügte Autorisierung ist ungültig, abgelaufen, wurde widerrufen, einem anderen Client ausgestellt oder der Weiterleitungs-URI stimmt nicht mit der Autorisierungs-Anfrage überein.
         invalid_redirect_uri: Der beigefügte Weiterleitungs-URI ist ungültig.
-        invalid_request: Die Anfrage enthält ein nicht-unterstütztes Argument, ein Parameter fehlt, oder sie ist anderweitig fehlerhaft.
+        invalid_request:
+          missing_param: 'Erforderlicher Parameter fehlt: %{value}.'
+          request_not_authorized: Anfrage muss autorisiert werden. Benötigter Parameter für die Autorisierung der Anfrage fehlt oder ungültig.
+          unknown: Der Anfrage fehlt ein benötigter Parameter, enthält einen nicht unterstützten Parameterwert oder ist anderweitig fehlerhaft.
         invalid_resource_owner: Die angegebenen Zugangsdaten für das Konto sind ungültig oder das Konto kann nicht gefunden werden
         invalid_scope: Die angeforderte Befugnis ist ungültig, unbekannt oder fehlerhaft.
         invalid_token:
diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml
index 7423606d4..29db6d883 100644
--- a/config/locales/doorkeeper.el.yml
+++ b/config/locales/doorkeeper.el.yml
@@ -83,7 +83,10 @@ el:
         invalid_client: Η ταυτοποίηση του πελάτη απέτυχε είτε λόγω άγνωστου πελάτη, είτε λόγω έλλειψης ταυτοποιημένου πελάτη ή λόγω μη υποστηριζόμενης μεθόδου ταυτοποίησης.
         invalid_grant: Η άδεια πιστοποίησης που δόθηκε είναι άκυρη, ληγμένη, έχει ανακληθεί, δεν συμφωνεί με το URI ανακατεύθυνσης που δόθηκε στο αίτημα πιστοποίησης ή εκδόθηκε προς άλλο πελάτη.
         invalid_redirect_uri: Το URI ανακατεύθυνσης που δόθηκε δεν είναι έγκυρο.
-        invalid_request: Το αίτημα δεν έχει κάποια απαιτούμενη παράμετρο, περιέχει κάποια μη υποστηριζόμενη τιμή παραμέτρου ή είναι μη σωστά δομημένη.
+        invalid_request:
+          missing_param: 'Λείπει η απαιτούμενη παράμετρος: %{value}.'
+          request_not_authorized: Το αίτημα πρέπει να είναι εξουσιοδοτημένο. Η απαιτούμενη παράμετρος για την έγκριση της αίτησης λείπει ή είναι άκυρη.
+          unknown: Από το αίτημα λείπει μία υποχρεωτική παράμετρος ή περιλαμβάνει μια μη υποστηριζόμενη τιμή ή έχει λανθασμένη μορφή με κάποιο άλλο τρόπο.
         invalid_resource_owner: Τα διαπιστευτήρια που έδωσε ο ιδιοκτήτης του πόρου δεν είναι έγκυρα, ή δεν βρέθηκε ο ιδιοκτήτης του πόρου
         invalid_scope: Το αιτούμενο εύρος εφαρμογής είναι άκυρο, άγνωστο ή λάθος διατυπωμένο.
         invalid_token:
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index 65066cd8e..c590fbde0 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -83,7 +83,10 @@ eo:
         invalid_client: Klienta aŭtentigo malsukcesa pro nekonata kliento, neniu klienta aŭtentigo inkluzivita, aŭ nesubtenata aŭtentiga metodo.
         invalid_grant: La rajtiga konsento ne estas valida, ne plu estas valida, estis forigita, ne kongruas kun la plusenda URI uzita en la aŭtentiga peto, aŭ estis sendita al alia kliento.
         invalid_redirect_uri: La plusenda URI uzita ne estas valida.
-        invalid_request: Mankis al la peto nepra parametro, enhavas nesubtenatan parametran valoron, aŭ la peto simple estas misformita.
+        invalid_request:
+          missing_param: 'Mankas bezonata parametro: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+          unknown: Mankis al la peto nepra parametro, enhavas nesubtenatan parametran valoron, aŭ la peto simple estas misformita.
         invalid_resource_owner: La donitaj identigiloj pri la posedanto de la rimedo ne estas validaj, aŭ tiu lasta ne povas esti trovita
         invalid_scope: La petita amplekso estas nevalida, nekonata, aŭ misformita.
         invalid_token:
diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml
index 29ce9b4c1..7af66e81b 100644
--- a/config/locales/doorkeeper.es-AR.yml
+++ b/config/locales/doorkeeper.es-AR.yml
@@ -83,7 +83,10 @@ es-AR:
         invalid_client: La autenticación del cliente falló debido a que es un cliente desconocido, o no está incluída la autenticación del cliente, o el método de autenticación no está soportado.
         invalid_grant: La concesión de autorización ofrecida no es válida, venció, se revocó, no coincide con la dirección web de redireccionamiento usada en la petición de autorización, o fue emitida para otro cliente.
         invalid_redirect_uri: La dirección web de redireccionamiento incluida no es válida.
-        invalid_request: En la solicitud falta un parámetro requerido, o incluye un valor de parámetro no soportado, o está corrompida.
+        invalid_request:
+          missing_param: 'Falta el parámetro requerido: %{value}.'
+          request_not_authorized: La solicitud necesita ser autorizada. El parámetro requerido para la autorización de la solicitud está ausente o no es válido.
+          unknown: En la solicitud falta un parámetro requerido, o incluye un valor de parámetro no soportado, o está corrompido.
         invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o no se puede encontrar al propietario del recurso
         invalid_scope: El ámbito solicitado no es válido, o conocido, o está corrompido.
         invalid_token:
@@ -120,7 +123,7 @@ es-AR:
       admin:read:reports: leer información sensible de todos los informes y cuentas denunciadas
       admin:write: modificar todos los datos en el servidor
       admin:write:accounts: ejecutar acciones de moderación en cuentas
-      admin:write:reports: ejecutar acciones de moderación en informes
+      admin:write:reports: ejecutar acciones de moderación en denuncias
       follow: modificar relaciones de cuenta
       push: recibir tus notificaciones push
       read: leer todos los datos de tu cuenta
@@ -145,7 +148,7 @@ es-AR:
       write:follows: seguir cuentas
       write:lists: crear listas
       write:media: subir archivos de medios
-      write:mutes: silenciar usuarios y conversaciones
+      write:mutes: silenciar cuentas y conversaciones
       write:notifications: limpiar tus notificaciones
       write:reports: denunciar otras cuentas
       write:statuses: publicar toots
diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml
new file mode 100644
index 000000000..df12ceb79
--- /dev/null
+++ b/config/locales/doorkeeper.es-MX.yml
@@ -0,0 +1,154 @@
+---
+es-MX:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Nombre de aplicación
+        redirect_uri: URI para redirección
+        scopes: Ámbitos
+        website: Sitio web
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: no puede contener un fragmento.
+              invalid_uri: debe ser un URI válido.
+              relative_uri: debe ser una URI absoluta.
+              secured_uri: debe ser un URI HTTPS/SSL.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Autorizar
+        cancel: Cancelar
+        destroy: Destruir
+        edit: Editar
+        submit: Enviar
+      confirmations:
+        destroy: "¿Está seguro?"
+      edit:
+        title: Editar aplicación
+      form:
+        error: "¡Uuups! Compruebe su formulario"
+      help:
+        native_redirect_uri: Utilice %{native_redirect_uri} para pruebas locales
+        redirect_uri: Utilice una línea por URI
+        scopes: Separe los ámbitos con espacios. Déjelo en blanco para utilizar los ámbitos por defecto.
+      index:
+        application: Aplicación
+        callback_url: URL de callback
+        delete: Eliminar
+        empty: No tienes aplicaciones.
+        name: Nombre
+        new: Nueva aplicación
+        scopes: Ámbitos
+        show: Mostrar
+        title: Sus aplicaciones
+      new:
+        title: Nueva aplicación
+      show:
+        actions: Acciones
+        application_id: Id de la aplicación
+        callback_urls: URLs de callback
+        scopes: Ámbitos
+        secret: Secreto
+        title: 'Aplicación: %{name}'
+    authorizations:
+      buttons:
+        authorize: Autorizar
+        deny: Desautorizar
+      error:
+        title: Ha ocurrido un error
+      new:
+        able_to: Será capaz de
+        prompt: La aplicación %{client_name} solicita tener acceso a su cuenta
+        title: Se requiere autorización
+      show:
+        title: Copia este código de autorización y pégalo en la aplicación.
+    authorized_applications:
+      buttons:
+        revoke: Revocar
+      confirmations:
+        revoke: "¿Está seguro?"
+      index:
+        application: Aplicación
+        created_at: Creado el
+        date_format: "%A-%m-%d %H:%M:%S"
+        scopes: Ámbitos
+        title: Sus aplicaciones autorizadas
+    errors:
+      messages:
+        access_denied: El propietario del recurso o servidor de autorización denegó la petición.
+        credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar.
+        invalid_client: La autentificación del cliente falló debido o a que es un cliente desconocido o no está incluída la autentificación del cliente o el método de autentificación no está confirmado.
+        invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente.
+        invalid_redirect_uri: La URI de redirección incluida no es válida.
+        invalid_request:
+          missing_param: 'Falta el parámetro requerido: %{value}.'
+          request_not_authorized: La solicitud debe ser autorizada. Parámetro requerido para la autorización de la solicitud falta o no es válido.
+          unknown: En la petición falta un parámetro necesario o incluye un valor de parámetro no soportado o tiene otro tipo de formato incorrecto.
+        invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o el propietario del recurso no puede ser encontrado
+        invalid_scope: El ámbito pedido es inválido, desconocido o erróneo.
+        invalid_token:
+          expired: El autentificador de acceso expiró
+          revoked: El autentificador de acceso fue revocado
+          unknown: El autentificador de acceso es inválido
+        resource_owner_authenticator_not_configured: El propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_authenticator está sin configurar.
+        server_error: El servidor de la autorización entontró una condición inesperada que le impidió cumplir con la solicitud.
+        temporarily_unavailable: El servidor de la autorización es actualmente incapaz de manejar la petición debido a una sobrecarga temporal o un trabajo de mantenimiento del servidor.
+        unauthorized_client: El cliente no está autorizado a realizar esta petición utilizando este método.
+        unsupported_grant_type: El tipo de concesión de autorización no está soportado por el servidor de autorización.
+        unsupported_response_type: El servidor de autorización no soporta este tipo de respuesta.
+    flash:
+      applications:
+        create:
+          notice: Aplicación creada.
+        destroy:
+          notice: Aplicación eliminada.
+        update:
+          notice: Aplicación actualizada.
+      authorized_applications:
+        destroy:
+          notice: Aplicación revocada.
+    layouts:
+      admin:
+        nav:
+          applications: Aplicaciones
+          oauth2_provider: Proveedor OAuth2
+      application:
+        title: OAuth autorización requerida
+    scopes:
+      admin:read: leer todos los datos en el servidor
+      admin:read:accounts: leer información sensible de todas las cuentas
+      admin:read:reports: leer información sensible de todos los informes y cuentas reportadas
+      admin:write: modificar todos los datos en el servidor
+      admin:write:accounts: realizar acciones de moderación en cuentas
+      admin:write:reports: realizar acciones de moderación en informes
+      follow: seguir, bloquear, desbloquear y dejar de seguir cuentas
+      push: recibir tus notificaciones push
+      read: leer los datos de tu cuenta
+      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
+      read:mutes: ver a quién has silenciado
+      read:notifications: ver tus notificaciones
+      read:reports: ver tus informes
+      read:search: buscar en su nombre
+      read:statuses: ver todos los estados
+      write: publicar en tu nombre
+      write:accounts: modifica tu perfil
+      write:blocks: bloquear cuentas y dominios
+      write:bookmarks: guardar estados como marcadores
+      write:favourites: toots favoritos
+      write:filters: crear filtros
+      write:follows: seguir usuarios
+      write:lists: crear listas
+      write:media: subir archivos multimedia
+      write:mutes: silenciar usuarios y conversaciones
+      write:notifications: limpia tus notificaciones
+      write:reports: reportar a otras personas
+      write:statuses: publicar estados
diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml
index 61e6cb6a1..a55b83e8f 100644
--- a/config/locales/doorkeeper.es.yml
+++ b/config/locales/doorkeeper.es.yml
@@ -83,7 +83,6 @@ es:
         invalid_client: La autentificación del cliente falló debido o a que es un cliente desconocido o no está incluída la autentificación del cliente o el método de autentificación no está confirmado.
         invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente.
         invalid_redirect_uri: La URI de redirección incluida no es válida.
-        invalid_request: En la petición falta un parámetro necesario o incluye un valor de parámetro no soportado o tiene otro tipo de formato incorrecto.
         invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o el propietario del recurso no puede ser encontrado
         invalid_scope: El ámbito pedido es inválido, desconocido o erróneo.
         invalid_token:
@@ -140,7 +139,7 @@ es:
       write:accounts: modifica tu perfil
       write:blocks: bloquear cuentas y dominios
       write:bookmarks: guardar estados como marcadores
-      write:favourites: toots favoritos
+      write:favourites: publicaciones favoritas
       write:filters: crear filtros
       write:follows: seguir usuarios
       write:lists: crear listas
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
index d3b011a67..6f038c365 100644
--- a/config/locales/doorkeeper.et.yml
+++ b/config/locales/doorkeeper.et.yml
@@ -73,7 +73,6 @@ et:
       index:
         application: Rakendus
         created_at: Autoriseeritud
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Ulatused
         title: Autoriseeritud rakendused
     errors:
@@ -83,7 +82,6 @@ et:
         invalid_client: Kliendi autentimine ebaõnnestus, kuna tundmatu klient, puudulik autentimine või mitte toetatud autentimismeetod.
         invalid_grant: Antud autoriseerimisluba on vale, aegunud, tagasi võetud, ei kattu kasutatud ümbersuunamise URLid või oli antud teisele kliendile.
         invalid_redirect_uri: Antud ümbersuunamise URL ei ole õige.
-        invalid_request: Taotlusel puudub kohustuslik parameeter, sisaldab mitte toetatud parameetri väärtust või on kuidagi teisiti vale.
         invalid_resource_owner: Antud ressursi omaniku andmed on valed või ressursi omanikku ei leitud
         invalid_scope: Soovitud ulatus on vale, tundmatu või vigane.
         invalid_token:
diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml
index 07fc13983..576ece002 100644
--- a/config/locales/doorkeeper.eu.yml
+++ b/config/locales/doorkeeper.eu.yml
@@ -83,7 +83,10 @@ eu:
         invalid_client: Bezeroaren autentifikazioak huts egin du bezero ezezaguna delako, ez delako bezero autentifikazioa txertatu, edo autentifikazio metodoa ez delako onartzen.
         invalid_grant: Emandako autorizatzea baliogabea da, iraungitu da, indargabetu da. ez dator bat autorizatze eskarian erabilitako URI-arekin, edo beste bezero batek sortu du.
         invalid_redirect_uri: Sartutako birbideratze URI-a baliogabea da.
-        invalid_request: Eskaerak beharrezkoa den parametro bat falta du, onartu gabeko parametro-balio bat du, edo beste moduren batean gaizki osatua dago.
+        invalid_request:
+          missing_param: 'Beharrezko parametroa falta da: %{value}.'
+          request_not_authorized: Eskaera baimendu behar da. Eskaera baimentzeko beharrezko parametroa falta da edo baliogabea da.
+          unknown: Eskaerak beharrezkoa den parametro bat falta du, onartu gabeko parametro-balio bat du, edo beste moduren batean gaizki osatua dago.
         invalid_resource_owner: Emandako baliabidearen jabearen kredentzialak baliogabeak dira, edo baliabidearen jabea ez da aurkitu
         invalid_scope: Eskatutako esparrua baliogabea da, ezezaguna, edo gaizki osatua dago.
         invalid_token:
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
index 534d7c5da..bc86a064c 100644
--- a/config/locales/doorkeeper.fa.yml
+++ b/config/locales/doorkeeper.fa.yml
@@ -83,7 +83,10 @@ fa:
         invalid_client: تأیید هویت کارخواه به دلیل کارخواه ناشناخته، عدم وجود تأیید هویت کاره یا روش تأیید هویت پشتیبانی‌نشده شکست خورد.
         invalid_grant: اعطای دسترسی فراهم ‌شده نامعتبر، منقضی یا نامطابق با نشانی بازگشت استفاده‌شده در درخواست تأیید هویت بوده و یا برای کارخواهی دیگر صادر شده است.
         invalid_redirect_uri: نشانی بازگشت موجود، معتبر نیست.
-        invalid_request: درخواست فاقد یک پارامتر ضروری، شامل یک پارامتر پشتیبانی‌نشده یا به‌هم ریخته است.
+        invalid_request:
+          missing_param: 'پارامتر لازم ناموجود: %{value}.'
+          request_not_authorized: درخواست باید تأیید هویت شود. پارامتر موردنیاز برای تأیید هویت درخواست، مفقود یا نامعتبر است.
+          unknown: درخواست بدریخت، فاقد یک پارامتر ضروری یا شامل یک پارامتر پشتیبانی‌نشده است.
         invalid_resource_owner: اعتبارنامهٔ مالک منبع فراهم‌شده نامعتبر بوده یا مالک منبع نتوانست پیدا شود
         invalid_scope: حوزهٔ درخواستی نامعتبر، ناشناخته یا دستکاری‌شده است.
         invalid_token:
diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml
index 34b08dd76..7922599f6 100644
--- a/config/locales/doorkeeper.fi.yml
+++ b/config/locales/doorkeeper.fi.yml
@@ -83,7 +83,6 @@ fi:
         invalid_client: Asiakasohjelman valtuutus epäonnistui, koska asiakas on tuntematon, asiakkaan valtuutus ei ollut mukana tai valtuutustapaa ei tueta.
         invalid_grant: Valtuutuslupa on virheellinen, umpeutunut, peruttu, valtuutuspyynnössä käytettyä uudelleenohjaus-URI:tä vastaamaton tai myönnetty toiselle asiakkaalle.
         invalid_redirect_uri: Uudelleenohjaus-URI on virheellinen.
-        invalid_request: Pyynnöstä puuttuu vaadittu parametri, se sisältää tukemattoman parametriarvon tai on muulla tavoin väärin muotoiltu.
         invalid_resource_owner: Annetut resurssin omistajan tunnnukset ovat virheelliset, tai resurssin omistajaa ei löydy
         invalid_scope: Pyydetyt oikeudet ovat virheellisiä, tuntemattomia tai väärin muotoiltuja.
         invalid_token:
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 8a628538b..6ebe93b9c 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -67,7 +67,7 @@ fr:
         title: Copiez ce code d’autorisation et collez-le dans l’application.
     authorized_applications:
       buttons:
-        revoke: Annuler
+        revoke: Révoquer
       confirmations:
         revoke: Voulez-vous vraiment faire ça ?
       index:
@@ -81,9 +81,12 @@ fr:
         access_denied: Le propriétaire de la ressource ou le serveur d’autorisation a refusé la requête.
         credential_flow_not_configured: Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_from_credentials n’est pas configuré.
         invalid_client: L’authentification du client a échoué à cause d’un client inconnu, d’aucune authentification de client incluse ou d’une méthode d’authentification non prise en charge.
-        invalid_grant: Le consentement d’autorisation accordé n’est pas valide, a expiré, est annulé, ne concorde pas avec l’URL de redirection utilisée dans la requête d’autorisation ou a été émis à un autre client.
+        invalid_grant: L’autorisation accordée est invalide, expirée, annulée, ne concorde pas avec l’URL de redirection utilisée dans la requête d’autorisation, ou a été délivrée à un autre client.
         invalid_redirect_uri: L’URL de redirection n’est pas valide.
-        invalid_request: La requête omet un paramètre requis, inclut une valeur de paramètre non prise en charge ou est autrement mal formée.
+        invalid_request:
+          missing_param: 'Parramètre requis manquant: %{value}.'
+          request_not_authorized: La requête doit être autorisée. Le paramètre requis pour la requête d'autorisation est manquant ou non valide.
+          unknown: La requête omet un paramètre requis, inclut une valeur de paramètre non prise en charge ou est autrement mal formée.
         invalid_resource_owner: Les identifiants fournis par le propriétaire de la ressource ne sont pas valides ou le propriétaire de la ressource ne peut être trouvé
         invalid_scope: La permission demandée est invalide, inconnue ou mal formée.
         invalid_token:
@@ -106,7 +109,7 @@ fr:
           notice: Application mise à jour.
       authorized_applications:
         destroy:
-          notice: Application annulée.
+          notice: Application révoquée.
     layouts:
       admin:
         nav:
diff --git a/config/locales/doorkeeper.gd.yml b/config/locales/doorkeeper.gd.yml
new file mode 100644
index 000000000..0d06b9264
--- /dev/null
+++ b/config/locales/doorkeeper.gd.yml
@@ -0,0 +1,154 @@
+---
+gd:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Ainm na h-aplacaid
+        redirect_uri: URI ath-stiùiridh
+        scopes: Sgòpaichean
+        website: Làrach-lìn na h-aplacaid
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: "– chan fhaod bloigh a bhith ’na bhroinn."
+              invalid_uri: "– feumaidh seo a bhith ’na URI dligheach."
+              relative_uri: "– feumaidh seo a bhith ’na URI absaloideach."
+              secured_uri: "– feumaidh seo a bhith ’na URI HTTPS/SSL."
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Ùghdarraich
+        cancel: Sguir dheth
+        destroy: Mill
+        edit: Deasaich
+        submit: Cuir a-null
+      confirmations:
+        destroy: A bheil thu cinnteach?
+      edit:
+        title: Deasaich an aplacaid
+      form:
+        error: Iochd! Thoir sùil air an fhoirm agad air eagal ’s gu bheil mearachd ann
+      help:
+        native_redirect_uri: Cleachd %{native_redirect_uri} gus a chur fo dheuchainn gu h-ionadail
+        redirect_uri: Cleachd loidhne fa leth do gach URI
+        scopes: Sgar sgòpaichean le beàrnan. Fàg seo bàn airson nan sgòpaichean tùsail a chleachdadh.
+      index:
+        application: Aplacaid
+        callback_url: URL gairm air ais
+        delete: Sguab às
+        empty: Chan eil aplacaid agad.
+        name: Ainm
+        new: Aplacaid ùr
+        scopes: Sgòpaichean
+        show: Seall
+        title: Na h-aplacaidean agad
+      new:
+        title: Aplacaid ùr
+      show:
+        actions: Gnìomhan
+        application_id: Iuchair cliant
+        callback_urls: URLaichean gairm air ais
+        scopes: Sgòpaichean
+        secret: Rùn a’ chliant
+        title: 'Aplacaidean: %{name}'
+    authorizations:
+      buttons:
+        authorize: Ùghdarraich
+        deny: Diùlt
+      error:
+        title: Thachair mearachd
+      new:
+        able_to: 'Seo na comasan a bhios air:'
+        prompt: Tha aplacaid %{client_name} ag iarraidh inntrigeadh dhan chunntas agad
+        title: Tha feum air ùghdarrachadh
+      show:
+        title: Dèan lethbhreac dhen chòd ùghdarrachaidh seo ’s cuir san aplacaid e.
+    authorized_applications:
+      buttons:
+        revoke: Cùl-ghairm
+      confirmations:
+        revoke: A bheil thu cinnteach?
+      index:
+        application: Aplacaid
+        created_at: Ceadaichte
+        date_format: "%Y-%m-%d %H:%M:%S"
+        scopes: Sgòpaichean
+        title: Na h-aplacaidean ùghdarraichte agad
+    errors:
+      messages:
+        access_denied: Dhiùlt sealbhadair a’ ghoireis no am frithealaiche ùghdarrachaidh an t-iarrtas.
+        credential_flow_not_configured: Dh’fhàillig le sruth cruthachadh teisteas facail-fhaire do shealbhadair a’ ghoireis ri linn Doorkeeper.configure.resource_owner_from_credentials gun rèiteachadh.
+        invalid_client: Dh’fhàillig le dearbhadh a’ chliant ri linn cliant nach aithne dhuinn, dearbhadh cliant nach deach gabhail a-staigh no dòigh dearbhaidh ris nach cuirear taic.
+        invalid_grant: Chan eil an t-ùghdarrachadh a chaidh a thoirt seachad dligheach, dh’fhalbh an ùine air, chaidh a chùl-ghairm no chan eil e a-rèir URI an ath-stiùiridh a chaidh a chleachdadh san iarrtas ùghdarrachaidh no chaidh fhoillseachadh le cliant eile.
+        invalid_redirect_uri: Chan eil an URI ath-stiùiridh a chaidh a ghabhail a-staigh dligheach.
+        invalid_request:
+          missing_param: 'Tha paramadair riatanach a dhìth: %{value}.'
+          request_not_authorized: Tha an t-iarrtas feumach air ùghdarrachadh. Tha paramadair riatanach a dhìth air an iarrtas ùghdarrachaidh no tha e mì-dhligheach.
+          unknown: Tha paramadair a dhìth air an iarrtas, tha luach paramadair ’na bhroinn ris nach cuirear taic no tha droch-chruth air choireigin eile air.
+        invalid_resource_owner: Chan eil teisteas sealbhadair a’ ghoireis a chaidh a sholar dligheach no cha ghabh sealbhadair a’ ghoireis a lorg
+        invalid_scope: Tha an sgòp a chaidh iarraidh mì-dhligheach, chan aithne dhuinn e no tha droch-chruth air.
+        invalid_token:
+          expired: Dh’fhalbh an ùine air an tòcan inntrigidh
+          revoked: Chaidh an tòcan inntrigidh a chùl-ghairm
+          unknown: Chan eil an tòcan inntrigidh dligheach
+        resource_owner_authenticator_not_configured: Cha deach sealbhadair a’ ghoireis a lorg ri linn Doorkeeper.configure.resource_owner_authenticator gun rèiteachadh.
+        server_error: Thachair am frithealaiche dearbhaidh ri cumha gun dùil nach do leig leis an t-iarrtas a choileanadh.
+        temporarily_unavailable: Chan urrainn dhan fhrithealaiche ùghdarrachaidh an t-iarrtas a làimhseachadh aig an àm seo ri linn eallach anabarrach no obair-ghlèidhidh air an fhrithealaiche.
+        unauthorized_client: Cha deach an cliant ùghdarrachadh airson an t-iarrtas seo a dhèanamh air an dòigh seo.
+        unsupported_grant_type: Cha chuir am frithealaiche ùghdarrachaidh taic ris an seòrsa seo de thoirt cead ùghdarrachaidh.
+        unsupported_response_type: Cha chuir am frithealaiche ùghdarrachaidh taic ris an seòrsa seo de fhreagairt.
+    flash:
+      applications:
+        create:
+          notice: Chaidh an aplacaid a chruthachadh.
+        destroy:
+          notice: Chaidh an aplacaid a sguabadh às.
+        update:
+          notice: Chaidh an aplacaid ùrachadh.
+      authorized_applications:
+        destroy:
+          notice: Chaidh an t-iarrtas a chùl-ghairm.
+    layouts:
+      admin:
+        nav:
+          applications: Aplacaidean
+          oauth2_provider: Solaraiche OAuth2
+      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: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:reports: gnìomhan na maorsainneachd a ghabhail air gearanan
+      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:favourites: na h-annsachdan agad fhaicinn
+      read:filters: na criathragan agad fhaicinn
+      read:follows: faicinn cò air 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 staidean 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 staidean
+      write:favourites: staidean a chur ris na h-annsachdan
+      write:filters: criathragan a chruthachadh
+      write:follows: leantainn air daoine
+      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: staidean fhoillseachadh
diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml
index c6c347a7f..dd2071639 100644
--- a/config/locales/doorkeeper.gl.yml
+++ b/config/locales/doorkeeper.gl.yml
@@ -3,7 +3,7 @@ gl:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Nome do aplicativo
+        name: Nome da aplicación
         redirect_uri: URI a redireccionar
         scopes: Ámbitos
         website: Sitio web da aplicación
@@ -83,7 +83,10 @@ gl:
         invalid_client: A autenticación do cliente fallou por ser un cliente descoñecido, non se incluíu autenticación do cliente, ou o método de autenticación non está soportado.
         invalid_grant: A validación da autorización proporcionada non é valida, caducou, foi rexeitada, non coincide a redirección URI utilizada na petición de autorización, ou foi proporcionada para outro cliente.
         invalid_redirect_uri: A uri de redirección incluída non é válida.
-        invalid_request: A petición fáltalle un parámetro requerido, inclúe un valor de parámetro non soportado, ou de algún xeito non ten o formato axeitado.
+        invalid_request:
+          missing_param: 'Falta o parámetro requerido: %{value}.'
+          request_not_authorized: A solicitude debe ser autorizada. O parámetro requerido para a aprobación da solicitude non é válido ou non existe.
+          unknown: Fáltalle un parámetro requerido á solicitude, inclúe un valor do parámetro non soportado, ou dalgún xeito non é correcto.
         invalid_resource_owner: As credenciais do dono do recurso proporcionadas non son válidas, ou o dono do recurso non pode ser atopado
         invalid_scope: O permiso solicitado non é válido, descoñecido, ou mal formado.
         invalid_token:
diff --git a/config/locales/doorkeeper.he.yml b/config/locales/doorkeeper.he.yml
index 78bb0a142..987ce2200 100644
--- a/config/locales/doorkeeper.he.yml
+++ b/config/locales/doorkeeper.he.yml
@@ -81,7 +81,6 @@ he:
         invalid_client: הרשאת הלקוח נכשלה עקב לקוח שאינו ידוע, חוסר בהרשאת לקוח או שיטת הרשאה שאינה נתמכת.
         invalid_grant: חוזה ההרשאה המצורף אינו חוקי, אינו תקף, מבוטל, או שאינו מתאים לקישורית ההפניה שבשימוש על ידי בקשת ההרשאה, או שהופק על ידי לקוח אחר.
         invalid_redirect_uri: קישורית ההפניה המצורפת אינה חוקית.
-        invalid_request: הבקשה חסרה פרמטר נדרש, מכילה פרמטר עם ערך שאיננו נתמך, או שתצורתה שגויה.
         invalid_resource_owner: הרשאות בעלי המשאב שהוזנו אינן חוקיות, או שלא ניתן למצוא את בעלי המשאב
         invalid_scope: התחום המבוקש אינו חוקי, אינו ידוע, או שתצורותו שגויה.
         invalid_token:
diff --git a/config/locales/doorkeeper.hr.yml b/config/locales/doorkeeper.hr.yml
index d2cde038b..915a16008 100644
--- a/config/locales/doorkeeper.hr.yml
+++ b/config/locales/doorkeeper.hr.yml
@@ -70,7 +70,6 @@ hr:
         access_denied: Vlasnik resursa ili autorizacijski poslužitelj odbili su zahtjev.
         invalid_client: Autentifikacija klijenta nije uspjela zbog nepoznatog klijenta, nedostatka autentifikacije klijenta ili nepodržane metode autentifikacije.
         invalid_redirect_uri: Sadržani uri preusmjerenja nije valjan.
-        invalid_request: Zahtjevu nedostaje traženi parametar, uključuje nepodržanu vrijednost parametra ili je na neki drugi način neispravno formatiran.
         invalid_resource_owner: Pružene vjerodajnice vlasnika resursa nisu valjane ili nije moguće pronaći vlasnika resursa
         invalid_scope: Traženi opseg nije valjan, znan ili je neispravno oblikovan.
         invalid_token:
diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml
index 32709299f..e65a66618 100644
--- a/config/locales/doorkeeper.hu.yml
+++ b/config/locales/doorkeeper.hu.yml
@@ -36,7 +36,7 @@ hu:
         scopes: A hatásköröket szóközzel válaszd el. Hagyd üresen az alapértelmezett hatáskörökhöz.
       index:
         application: Alkalmazás
-        callback_url: Callback URL
+        callback_url: Visszahívási URL
         delete: Eltávolítás
         empty: Nincsenek alkalmazásaid.
         name: Név
@@ -83,7 +83,10 @@ hu:
         invalid_client: A kliens hitelesítése megszakadt, mert ismeretlen a kliens, a kliens nem küldött hitelesítést, vagy a hitelesítés módja nem támogatott.
         invalid_grant: A biztosított hitelesítés érvénytelen, lejárt, visszavont, vagy nem egyezik a hitelesítési kérésben használt URI-val, vagy más kliensnek címezték.
         invalid_redirect_uri: Az átirányító URI nem valós.
-        invalid_request: A kérésből hiányzik egy szükséges paraméter, nem támogatott paramétert tartalmaz, vagy máshogy sérült.
+        invalid_request:
+          missing_param: 'Szükséges paraméter hiányzik: %{value}.'
+          request_not_authorized: A kérést jóvá kell hagyni. A jóváhagyási kérelemhez szükséges egyik paraméter hiányzik vagy hibás.
+          unknown: A kérelemből hiányzik egy szükséges paraméter, nem támogatott paraméter-értéket tartalmaz, vagy máshogy sérült.
         invalid_resource_owner: A biztosított erőforrás tulajdonosának hitelesítő adatai nem valósak, vagy az erőforrás tulajdonosa nem található.
         invalid_scope: A kért nézet érvénytelen, ismeretlen, vagy hibás.
         invalid_token:
diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml
index ba3f4e124..ec5beb1c3 100644
--- a/config/locales/doorkeeper.hy.yml
+++ b/config/locales/doorkeeper.hy.yml
@@ -6,9 +6,7 @@ hy:
         name: Յաւելուածի անուն
         redirect_uri: վերաղյել URI
         scopes: Դաշտեր
-        website: 'Յաւելուածի վէբկայք
-
-'
+        website: Յաւելուածի վէբկայք
     errors:
       models:
         doorkeeper/application:
@@ -50,9 +48,7 @@ hy:
         title: Նոր յաւելուած
       show:
         actions: Գործողութիւններ
-        application_id: 'Կլիենտի բանալի
-
-'
+        application_id: Կլիենտի բանալի
         callback_urls: URL֊ների ետկանչ
         scopes: Դաշտեր
         secret: Կլիենտի գաղտնիք
@@ -77,7 +73,6 @@ hy:
       index:
         application: Յաւելուած
         created_at: Նոյնականացրած
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Դաշտեր
         title: Քո նոյնականացրած ծրագրերը
     errors:
@@ -87,7 +82,6 @@ hy:
         invalid_client: Կլիենտի նոյնականացումը ձախողուեց անյայտ կլիենտի, կլիենտի նոյնականացման, կամ նոյնականացման չաջակցուող ձեւի պատճառով։
         invalid_grant: Տրամադրուած նոյնականացման թոյլտուութիւնն անվաւեր է, սպառուած, չեղարկուած, չի համապատասխանում վերայղուած URI֊ի նոյնականացման յայտին, կամ յղուել է այլ կլիենտի։
         invalid_redirect_uri: Վերայղուած uri֊ի անվաւեր է։
-        invalid_request: Յայտից բացակայում է պահանջուող պարամետրը, ներառում է չաջակցուող արժէք կամ այլ անսարքութիւն։
         invalid_resource_owner: Տրամադրուած ռեսուրսի տիրոջ տուեալները անվաւեր են կամ ռեսուրսի տէրը չի գտնուել
         invalid_scope: Յայտի դաշտն անվաւեր, անյայտ կամ անսարք։
         invalid_token:
@@ -145,13 +139,4 @@ hy:
       write:blocks: արգելափակել հաշիւները եւ դոմէյնները
       write:bookmarks: էջանշել գրառումները
       write:favourites: հաւանել գրառումները
-      write:filters: 'ստեղծել ֆիլտրեր
-
-'
-      write:follows: հետեւել
-      write:lists: ստեղծել ցանկեր
-      write:media: բեռնել մեդիա ֆայլեր
-      write:mutes: լռեցնել մարդկանց եւ զրոյցները
-      write:notifications: մաքրել ծանուցումները
-      write:reports: բողոքել այլոցից
-      write:statuses: թթել
+      write:filters: "'ստեղծել ֆիլտրեր"
diff --git a/config/locales/doorkeeper.id.yml b/config/locales/doorkeeper.id.yml
index 840390481..066d85e73 100644
--- a/config/locales/doorkeeper.id.yml
+++ b/config/locales/doorkeeper.id.yml
@@ -83,7 +83,10 @@ id:
         invalid_client: Perizinan klien gagal karena klien tidak diketahui, tidak ada klien yang diizinkan, atau metode perizinan tidak didukung.
         invalid_grant: Pemberian izin yang diberikan tidak valid, kadaluarsa, telah dicabut, atau tidak cocok dengan URI pengalihan yang digunakan pada permintaan izin, atau telah diberikan pada klien lain.
         invalid_redirect_uri: Uri pengalihan tidak valid.
-        invalid_request: Permintaan ini tidak mempunyai parameter yang dibutuhkan, mengandung parameter yang tidak didukung, atau mungkin strukturnya tidak benar.
+        invalid_request:
+          missing_param: 'Kehilangan parameter yang diperlukan: %{value}.'
+          request_not_authorized: Permintaan perlu diotorisasi. Parameter yang diperlukan untuk otorisasi hilang atau tidak valid.
+          unknown: Permintaan ini kehilangan parameter yang dibutuhkan, termasuk parameter yang tidak didukung, atau mungkin format tidak benar.
         invalid_resource_owner: Identitas pemilik data yang diberikan tidak valid, atau pemilik data tidak ditemukan
         invalid_scope: Scope yang diminta tidak valid, tidak diketahui, atau struktur tidak benar.
         invalid_token:
diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml
index 0d15479c5..17ea34206 100644
--- a/config/locales/doorkeeper.is.yml
+++ b/config/locales/doorkeeper.is.yml
@@ -83,7 +83,10 @@ is:
         invalid_client: Auðkenning á biðlara brást vegna þess að biðlarinn er óþekktur, að auðkenning biðlarans fylgdi ekki með, eða að notuð var óstudd auðkenningaraðferð.
         invalid_grant: Uppgefin auðkenningarheimild er ógild, útrunnin, afturkölluð, samsvarar ekki endurbirtingarslóðinni í auðkenningarbeiðninni, eða var gefin út til annars biðlara.
         invalid_redirect_uri: Endurbeiningarslóðin sem fylgdi er ekki gild.
-        invalid_request: Í beiðnina vantar nauðsynlega færibreytu, hún inniheldur óleyfilegt gildi á færibreytu, eða er gölluð á einhvern annan hátt.
+        invalid_request:
+          missing_param: 'Vantar nauðsynlega færibreytu: %{value}.'
+          request_not_authorized: Beiðnina þarf að heimila. Nauðsynlega færibreytu svo hægt sé að heimila hana vantar eða að hún er gölluð.
+          unknown: Í beiðnina vantar nauðsynlega færibreytu, hún inniheldur óleyfilegt gildi á færibreytu, eða er gölluð á einhvern annan hátt.
         invalid_resource_owner: Uppgefin auðkenni eiganda tilfangs eru ekki gild, eða að eigandi tilfangs finnst ekki
         invalid_scope: Umbeðið gildissvið er ógilt, óþekkt eða rangt uppsett.
         invalid_token:
diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml
index 607abb2b3..6aea56e49 100644
--- a/config/locales/doorkeeper.it.yml
+++ b/config/locales/doorkeeper.it.yml
@@ -83,7 +83,10 @@ it:
         invalid_client: Accesso al servizio fallito perché il servizio è sconosciuto, l'accesso al servizio non è stato incluso, o il metodo di accesso non è supportato.
         invalid_grant: Il permesso d'autorizzazione è non valido, scaduto, disabilitato, non coincide con l'URI di reindirizzamento fornito nella richiesta di autorizzazione, o è stato rilasciato da un altro client.
         invalid_redirect_uri: L'URI di reindirizzamento fornito non è valido.
-        invalid_request: La richiesta non contiene un parametro necessario, contiene un valore parametrico non supportato, o è altrimenti malformulata.
+        invalid_request:
+          missing_param: 'Manca il parametro obbligatorio: %{value}.'
+          request_not_authorized: La richiesta deve essere autorizzata. Il parametro richiesto per autorizzare la richiesta è mancante o non valido.
+          unknown: La richiesta manca di un parametro necessario, include un parametro non supportato, o è in qualche altro modo mal strutturata.
         invalid_resource_owner: Le credenziali di accesso fornite per il proprietario non sono corrette, o il proprietario del servizio non è stato trovato
         invalid_scope: Lo scope richiesto è invalido, sconosciuto, o malformulato.
         invalid_token:
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index 73932bafd..d20825c24 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -83,7 +83,10 @@ ja:
         invalid_client: 不明なクライアントであるか、クライアント情報が含まれていない、またはサポートされていない認証方法のため、クライアントの認証に失敗しました。
         invalid_grant: 指定された認証許可は無効であるか、期限切れ、取り消されている、リダイレクトURIの不一致、または別のクライアントに発行されています。
         invalid_redirect_uri: 無効なリダイレクトURIが含まれています。
-        invalid_request: リクエストに必要なパラメータが欠けているか、サポートされていないパラメータが含まれている、または不正なフォーマットです。
+        invalid_request:
+          missing_param: '必須パラメータがありません: %{value}'
+          request_not_authorized: リクエストを承認する必要があります。リクエストを認可するために必要なパラメータがありません。
+          unknown: リクエストに必要なパラメータが欠けているか、サポートされていないパラメータが含まれている、または不正なフォーマットです。
         invalid_resource_owner: 指定されたリソース所有者のクレデンシャルが無効であるか、リソース所有者が見つかりません
         invalid_scope: 要求されたアクセス権は無効であるか、不明、または不正なフォーマットです。
         invalid_token:
diff --git a/config/locales/doorkeeper.ka.yml b/config/locales/doorkeeper.ka.yml
index f4178a752..5a9ec3610 100644
--- a/config/locales/doorkeeper.ka.yml
+++ b/config/locales/doorkeeper.ka.yml
@@ -81,7 +81,6 @@ ka:
         invalid_client: ამოუცნობი კლიენტის გამო კლიენტ აუტენტიფიკაცია ვერ მოხერხდა, კლიენტის აუტენტიფიკაცია არ იყო თან დართული, ან მხარდაუჭერელი აუტენტიფიკაციის მეთოდი.
         invalid_grant: მოწოდებული ავტორიზაციის გრანტი არასწორია, ვადაგასულია, გაუქმებულია არ ემთხვევა გადამისამართების ურის, რომელიც მოიხმარება ავტორიზაცის მოთხოვნაში, ან მიეცა სხვა კლიენტს.
         invalid_redirect_uri: მითითებული გადამისამართების ური არაა ვალიდური.
-        invalid_request: მოთხოვნას აკლია აუცილებელი პარამეტრი, მოიცავს მხარდაუჭერელ პარამეტრის მნიშვნელობას, ან სხვაგვარად არაა გამართული.
         invalid_resource_owner: მოწოდებული რესურსის მფლობელის რწმუნებულებები არაა ვალიდური, ან მფლობელის პონვა ვერ ხერხდება
         invalid_scope: მოთხოვნილი ფარგალი არასწორია, ამოუცნობია ან არაა გამართული.
         invalid_token:
diff --git a/config/locales/doorkeeper.kk.yml b/config/locales/doorkeeper.kk.yml
index 75f8de542..15a1dbff7 100644
--- a/config/locales/doorkeeper.kk.yml
+++ b/config/locales/doorkeeper.kk.yml
@@ -73,7 +73,6 @@ kk:
       index:
         application: Қосымша
         created_at: Авторизацияланды
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Scopеs
         title: Your authorized applicаtions
     errors:
@@ -83,7 +82,6 @@ kk:
         invalid_client: Client authentication failed due to unknоwn client, no client authentication included, or unsupported authentication method.
         invalid_grant: The provided authorization grant is invаlid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
         invalid_redirect_uri: The redirеct uri included is not valid.
-        invalid_request: The request is missing a required parameter, includes an unsupported parameter vаlue, or is otherwise malformed.
         invalid_resource_owner: The provided resource owner credentials are not valid, or rеsource owner cannot be found
         invalid_scope: The requested scope is invаlid, unknown, or malformed.
         invalid_token:
diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml
index 16a2d0490..edc89a3e2 100644
--- a/config/locales/doorkeeper.ko.yml
+++ b/config/locales/doorkeeper.ko.yml
@@ -83,7 +83,10 @@ ko:
         invalid_client: 알 수 없는 클라이언트이기 때문에 클라이언트 인증이 실패하였습니다, 클라이언트 자격증명이 포함되지 않았거나, 지원 되지 않는 메소드입니다.
         invalid_grant: 제공된 권한 부여가 잘못되거나, 만료되었거나, 취소되었거나, 권한 부여 요청에 사용된 리디렉션 URI가 일치하지 않거나, 다른 클라이언트에 지정되었습니다.
         invalid_redirect_uri: 리디렉션 URI가 올바르지 않습니다
-        invalid_request: 요청에 필요한 매개변수가 없거나, 지원 되지 않는 매개변수가 있거나, 형식이 잘못되었습니다.
+        invalid_request:
+          missing_param: '필수 매개변수 누락: %{value}.'
+          request_not_authorized: 인증이 필요한 요청입니다. 인증 요청에 필요한 필수 매개 인자가 없거나 올바르지 않습니다.
+          unknown: 요청에 필요한 매개변수가 없거나, 지원 되지 않는 매개변수가 있거나, 형식이 잘못되었습니다.
         invalid_resource_owner: 제공 된 리소스 소유자 자격증명이 올바르지 않거나 리소스 소유자를 찾을 수 없습니다
         invalid_scope: 요청한 범위가 올바르지 않거나, 알 수 없거나, 잘못 된 형식입니다.
         invalid_token:
diff --git a/config/locales/doorkeeper.ku.yml b/config/locales/doorkeeper.ku.yml
index 29d5f40db..db2f0b713 100644
--- a/config/locales/doorkeeper.ku.yml
+++ b/config/locales/doorkeeper.ku.yml
@@ -73,7 +73,6 @@ ku:
       index:
         application: نەرمەکال
         created_at: ده‌سه‌ڵاتپێدراو
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: بوارەکان
         title: بەرنامە ڕێگەپێدراوەکانت
     errors:
@@ -83,7 +82,6 @@ ku:
         invalid_client: سەلماندنی کڕیار سەرکەوتوو نەبوو بەهۆی کڕیاری نەناسراوەوە، هیچ ڕەسەنایەتی سەلماندنێکی کلایەنت لەخۆوە نەدەگرێت، یان شێوازی سەلماندنی پەسەند نەکراو.
         invalid_grant: بەخشین مۆڵەتی دابینکراو نایاساییە، بەسەرچووە، هەڵوەشاندنەوەیە، ناگونجێلەگەڵ ئاراستەی URI بەکارهاتوو لە داواکاری ڕێپێدان، یان دەرچووە بۆ کڕیارێکی تر.
         invalid_redirect_uri: Uri دووبارە ئاڕاستەکردنەوەکە لەخۆدەگرێت دروست نیە.
-        invalid_request: داواکاریەکە پارامیتەری داواکراوی بزرە، بەهای پارامیتەری پشتگیری نەکراو لەخۆ دەگرێت، یان بە پێچەوانەوە نادروستە.
         invalid_resource_owner: بڕواپێدانەکانی خاوەنی سەرچاوەی دابینکراو دروست نیە، یان ناتوانرێت خاوەنی سەرچاوە بدۆزرێتەوە
         invalid_scope: بواری داواکراو نادروستە، نەناسراو، یان تێکچووە.
         invalid_token:
@@ -111,7 +109,6 @@ ku:
       admin:
         nav:
           applications: بەرنامەکان
-          oauth2_provider: OAuth2 Provider
       application:
         title: داوای ڕێپێدانی OAuth
     scopes:
diff --git a/config/locales/doorkeeper.kw.yml b/config/locales/doorkeeper.kw.yml
new file mode 100644
index 000000000..b2cfc12ff
--- /dev/null
+++ b/config/locales/doorkeeper.kw.yml
@@ -0,0 +1 @@
+kw:
diff --git a/config/locales/doorkeeper.ml.yml b/config/locales/doorkeeper.ml.yml
index 21540b976..83a37b1cd 100644
--- a/config/locales/doorkeeper.ml.yml
+++ b/config/locales/doorkeeper.ml.yml
@@ -28,12 +28,47 @@ ml:
         title: അപ്ലിക്കേഷൻ എഡിറ്റുചെയ്യുക
       form:
         error: ക്ഷമിക്കണം! സാധ്യമായ പിശകുകൾക്കായി നിങ്ങളുടെ ഫോം പരിശോധിക്കുക
+      help:
+        redirect_uri: ഒരു യു‌ആർ‌ഐക്ക് ഒരു വരി ഉപയോഗിക്കുക
       index:
         application: അപ്ലിക്കേഷന്‍
         delete: മായ്ക്കുക
+        empty: നിങ്ങൾക്ക് അപ്ലിക്കേഷനുകളൊന്നുമില്ല.
         name: പേര്
+        new: പുതിയ അപ്ലിക്കേഷൻ
+        show: കാണിക്കുക
+        title: നിങ്ങളുടെ അപ്ലിക്കേഷനുകൾ
+      new:
+        title: പുതിയ അപ്ലിക്കേഷൻ
+      show:
+        actions: പ്രവർത്തനങ്ങൾ
+        title: 'അപ്ലിക്കേഷൻ: %{name}'
+    authorizations:
+      buttons:
+        authorize: അംഗീകരിക്കുക
+        deny: നിരസിക്കുക
+      error:
+        title: ഒരു പിഴവ് സംഭവിച്ചിരിക്കുന്നു
+      new:
+        title: അംഗീകാരം ആവശ്യമാണ്
+      show:
+        title: ഈ അംഗീകാര കോഡ് പകർത്തി അപ്ലിക്കേഷനിൽ ഒട്ടിക്കുക.
     authorized_applications:
       buttons:
         revoke: പിൻവലിക്കുക
       confirmations:
         revoke: നിങ്ങൾക്ക് ഉറപ്പാണോ?
+      index:
+        application: അപ്ലിക്കേഷന്‍
+        created_at: അംഗീകാരപ്പെടുത്തിയത്
+        date_format: "%Y-%m-%d %H:%M:%S"
+        title: നിങ്ങളുടെ അംഗീകൃത അപ്ലിക്കേഷനുകൾ
+    errors:
+      messages:
+        access_denied: റിസോഴ്സ് ഉടമയോ അംഗീകാര സെർവറോ അഭ്യർത്ഥന നിരസിച്ചു.
+        credential_flow_not_configured: Doorkeeper.configure.resource_owner_from_credentials ക്രമീകരിക്കാത്തതിനാൽ റിസോഴ്സ് ഉടമ പാസ്‌വേഡ് ക്രെഡൻഷ്യലുകളുടെ ഒഴുക്ക് പരാജയപ്പെട്ടു.
+        invalid_client: അജ്ഞാത ക്ലയന്റ്, ക്ലയന്റ് പ്രാമാണീകരണം ഉൾപ്പെടുത്തിയിട്ടില്ല, അല്ലെങ്കിൽ പിന്തുണയ്‌ക്കാത്ത പ്രാമാണീകരണ രീതി എന്നിവ കാരണം ക്ലയൻറ് പ്രാമാണീകരണം പരാജയപ്പെട്ടു.
+        invalid_token:
+          expired: പ്രവേശന ടോക്കൺ കാലഹരണപ്പെട്ടു
+          revoked: പ്രവേശന ടോക്കൺ അസാധുവാക്കി
+          unknown: പ്രവേശന ടോക്കൺ അസാധുവാണ്
diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml
index 10e075a66..786a0fcb8 100644
--- a/config/locales/doorkeeper.nl.yml
+++ b/config/locales/doorkeeper.nl.yml
@@ -83,7 +83,10 @@ nl:
         invalid_client: Clientverificatie is mislukt door een onbekende client, ontbrekende client-authenticatie of een niet ondersteunde authenticatie-methode.
         invalid_grant: De verstrekte autorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect-URI die is opgegeven of werd uitgegeven aan een andere client.
         invalid_redirect_uri: De opgegeven redirect-URI is ongeldig.
-        invalid_request: Het verzoek mist een vereiste parameter, bevat een niet ondersteunde parameterwaarde of is anderszins onjuist.
+        invalid_request:
+          missing_param: 'Ontbrekende vereiste parameter: %{value}.'
+          request_not_authorized: Het verzoek moet worden geautoriseerd. De vereiste parameter voor het autorisatieverzoek ontbreekt of is ongeldig.
+          unknown: Het verzoek mist een vereiste parameter, bevat een niet ondersteunde parameterwaarde of is op een andere manier onjuist.
         invalid_resource_owner: De verstrekte resource-eigenaargegevens zijn ongeldig of de resource-eigenaar kan niet worden gevonden
         invalid_scope: De opgevraagde toestemming is ongeldig, onbekend of onjuist.
         invalid_token:
diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml
index f5437672a..419bc28a6 100644
--- a/config/locales/doorkeeper.nn.yml
+++ b/config/locales/doorkeeper.nn.yml
@@ -73,7 +73,6 @@ nn:
       index:
         application: Applikasjon
         created_at: Autorisert
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Skop
         title: Dine autoriserte applikasjonar
     errors:
@@ -83,7 +82,6 @@ nn:
         invalid_client: Klientautentisering feilet på grunn av ukjent klient, ingen autentisering inkludert, eller autentiseringsmetode er ikke støttet.
         invalid_grant: Autoriseringen er ugyldig, utløpt, opphevet, stemmer ikke overens med omdirigerings-URIen eller var utstedt til en annen klient.
         invalid_redirect_uri: Omdirigerings-URLen er ikkje gyldig.
-        invalid_request: Forespørslen mangler en eller flere parametere, inkluderte en parameter som ikke støttes eller har feil struktur.
         invalid_resource_owner: Ressurseierens detaljer er ikke gyldige, eller så er det ikke mulig å finne eieren
         invalid_scope: Det etterspurte omfanget er ugyldig, ukjent eller har feil struktur.
         invalid_token:
diff --git a/config/locales/doorkeeper.no.yml b/config/locales/doorkeeper.no.yml
index 3512aeca2..0783b8723 100644
--- a/config/locales/doorkeeper.no.yml
+++ b/config/locales/doorkeeper.no.yml
@@ -73,7 +73,6 @@
       index:
         application: Applikasjon
         created_at: Autorisert
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Omfang
         title: Dine autoriserte applikasjoner
     errors:
@@ -83,7 +82,6 @@
         invalid_client: Klientautentisering feilet på grunn av ukjent klient, ingen autentisering inkludert, eller autentiseringsmetode er ikke støttet.
         invalid_grant: Autoriseringen er ugyldig, utløpt, opphevet, stemmer ikke overens med omdirigerings-URIen eller var utstedt til en annen klient.
         invalid_redirect_uri: Den inkluderte omdirigerings-URLen er ikke gyldig.
-        invalid_request: Forespørslen mangler en eller flere parametere, inkluderte en parameter som ikke støttes eller har feil struktur.
         invalid_resource_owner: Ressurseierens detaljer er ikke gyldige, eller så er det ikke mulig å finne eieren
         invalid_scope: Det etterspurte omfanget er ugyldig, ukjent eller har feil struktur.
         invalid_token:
diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml
index d84b5e7d9..471ed1c8c 100644
--- a/config/locales/doorkeeper.oc.yml
+++ b/config/locales/doorkeeper.oc.yml
@@ -83,7 +83,10 @@ oc:
         invalid_client: L’autorizacion del client capitèt pas pr’amor que lo client es desconegut, l’autorizacion del client es pas enclús, o lo metòde d’autorizacion es pas suportat.
         invalid_grant: L’acòrdi d’autorizacion donadat es pas valid, expirat, revocat, una redireccion URI utilizat en la demanda d’autorizacion no correspond, o a estat desliurat a un altre client.
         invalid_redirect_uri: L’URL de redireccion es pas valida.
-        invalid_request: La demanda a un paramètre que li manca, a una valor qu’es pas suportada, o quicòm mal format.
+        invalid_request:
+          missing_param: 'Paramètre requerit absent : %{value}.'
+          request_not_authorized: La requèsta deu èsser autorizada. Lo paramètre requerit per autorizar las requèstas es absent o invalid.
+          unknown: Li manca un paramètre requerit a la requèsta, inclutz un paramètre pas pres en carga, o es mal formatada.
         invalid_resource_owner: La qualificacion del proprietari de la ressorça donada es pas valida, o lo proprietari de la ressorça es pas trobable
         invalid_scope: L’encastre demandat es pas valid, o d’un marrit format.
         invalid_token:
diff --git a/config/locales/doorkeeper.pa.yml b/config/locales/doorkeeper.pa.yml
new file mode 100644
index 000000000..bb8a6c834
--- /dev/null
+++ b/config/locales/doorkeeper.pa.yml
@@ -0,0 +1 @@
+pa:
diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml
index 7c6c4fb6d..2954fad8f 100644
--- a/config/locales/doorkeeper.pl.yml
+++ b/config/locales/doorkeeper.pl.yml
@@ -83,7 +83,10 @@ pl:
         invalid_client: Autoryzacja klienta nie powiodła się z powodu nieznanego klienta, braku uwierzytelnienia klienta, lub niewspieranej metody uwierzytelniania.
         invalid_grant: Grant uwierzytelnienia jest niepoprawny, przeterminowany, unieważniony, nie pasuje do URI przekierowwania użytego w żądaniu uwierzytelnienia, lub został wystawiony przez innego klienta.
         invalid_redirect_uri: URI przekierowania jest nieprawidłowy.
-        invalid_request: 'Żądanie jest nieprawidłowe: brakujący parametr, niewspierana wartość parametru, lub inny błąd.'
+        invalid_request:
+          missing_param: 'Brak wymaganego parametru: %{value}.'
+          request_not_authorized: Żądanie musi być autoryzowane. Wymagany do autoryzacji żądania parametr nie istnieje lub jest nieprawidłowy.
+          unknown: Żądanie nie zawiera wymaganego parametru, zawiera nieobsługiwaną wartość parametru, lub jest w inny sposób uszkodzone.
         invalid_resource_owner: Dostarczone dane uwierzytelniające właściciela zasobu są niepoprawne, lub właściciel zasobu nie może zostać znaleziony
         invalid_scope: Zakres żądania jest niepoprawny, nieznany, lub błędnie zbudowany.
         invalid_token:
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
index 7d18fb2bb..cadc5a410 100644
--- a/config/locales/doorkeeper.pt-BR.yml
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -83,7 +83,6 @@ pt-BR:
         invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação foi incluído ou o método de autenticação não é suportado.
         invalid_grant: A garantia de autorização está inválida, expirou ou foi revogada, não é equivalente ao link de redirecionamento usado na solicitação de autorização ou foi emitido por outro cliente.
         invalid_redirect_uri: O link de redirecionamento não é válido.
-        invalid_request: A solicitação não possui um parâmetro obrigatório, inclui um valor não suportado ou está mal formatado.
         invalid_resource_owner: As credenciais do proprietário informadas não são válidas ou o proprietário não pôde ser encontrado
         invalid_scope: A autorização requirida é inválida, desconhecida ou está mal formatada.
         invalid_token:
diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml
index d492029b4..4a5bb899a 100644
--- a/config/locales/doorkeeper.pt-PT.yml
+++ b/config/locales/doorkeeper.pt-PT.yml
@@ -83,7 +83,10 @@ pt-PT:
         invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação incluído ou método de autenticação não suportado.
         invalid_grant: A concessão de autorização fornecida é inválida, expirou, foi revogada, não corresponde à URI de redirecionamento usada no pedido de autorização ou foi emitida para outro cliente.
         invalid_redirect_uri: A URI de redirecionamento incluída não é válida.
-        invalid_request: A solicitação não possui um parâmetro requerido, inclui um valor  não suportado ou tem outro tipo de formato incorreto.
+        invalid_request:
+          missing_param: 'Parâmetro requerido em falta: %{value}.'
+          request_not_authorized: O pedido precisa ser autorizado. O parâmetro requerido para autorização da solicitação está ausente ou é inválido.
+          unknown: A solicitação não possui um parâmetro requerido, inclui um valor de parâmetro não suportado ou tem outro tipo de formato incorreto.
         invalid_resource_owner: As credenciais do proprietário do recurso não são válidas ou o proprietário do recurso não pode ser encontrado
         invalid_scope: O âmbito solicitado é inválido, desconhecido ou tem um formato incorreto.
         invalid_token:
diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml
index 3f3077c1e..fc4efdcc5 100644
--- a/config/locales/doorkeeper.ro.yml
+++ b/config/locales/doorkeeper.ro.yml
@@ -73,7 +73,6 @@ ro:
       index:
         application: Aplicație
         created_at: Autorizat
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Domenii
         title: Aplicațiile dvs autorizate
     errors:
@@ -83,7 +82,6 @@ ro:
         invalid_client: Autentificarea clientului a eșuat din cauza unui client necunoscut, nici o autentificare client inclusă, sau metodă de autentificare nesuportată.
         invalid_grant: Acordarea autorizației furnizată este invalidă, expirată, revocată, nu corespunde URI-ului de redirecționare folosit în cererea de autorizare, sau a fost eliberat altui client.
         invalid_redirect_uri: Uri-ul de redirecționare inclus nu este valid.
-        invalid_request: Solicitarea îi lipsește un parametru necesar, include o valoare de parametru nesuportată sau este dealtfel formatat incorect.
         invalid_resource_owner: Acreditările proprietarului de resurse nu sunt valide sau proprietarul de resurse nu poate fi găsit
         invalid_scope: Domeniul de aplicare solicitat este invalid, necunoscut sau incorect.
         invalid_token:
diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml
index 33e01c79b..df36db865 100644
--- a/config/locales/doorkeeper.ru.yml
+++ b/config/locales/doorkeeper.ru.yml
@@ -36,7 +36,7 @@ ru:
         scopes: Разделяйте список разрешений пробелами. Оставьте незаполненным для использования разрешений по умолчанию.
       index:
         application: Приложение
-        callback_url: Callback URL
+        callback_url: URL обратной связи
         delete: Удалить
         empty: У вас нет созданных приложений.
         name: Название
@@ -83,7 +83,10 @@ ru:
         invalid_client: Клиентская аутентификация завершилась неудачей (неизвестный клиент, не включена клиентская аутентификация, или метод аутентификации не поддерживается.
         invalid_grant: Предоставленный доступ некорректен, истек, отозван, не совпадает с URI перенаправления, использованным в запросе авторизации, или был выпущен для другого клиента.
         invalid_redirect_uri: Включенный URI перенаправления некорректен.
-        invalid_request: В запросе не хватает обязательного параметра, присутствует неподдерживаемое значение параметра, либо он был сформирован неверно.
+        invalid_request:
+          missing_param: 'Отсутствует обязательный параметр: %{value}.'
+          request_not_authorized: Запрос должен быть авторизован. Обязательный параметр для авторизации запроса отсутствует или недействителен.
+          unknown: В запросе отсутствует обязательный параметр, включено неподдерживаемое значение параметра или он имеет иной формат.
         invalid_resource_owner: Предоставленные данные владельца ресурса некорректны, или владелец ресурса не может быть найден
         invalid_scope: Запрошенное разрешение некорректно, неизвестно или неверно сформировано.
         invalid_token:
diff --git a/config/locales/doorkeeper.sc.yml b/config/locales/doorkeeper.sc.yml
index 2a6aeb2c1..667268f41 100644
--- a/config/locales/doorkeeper.sc.yml
+++ b/config/locales/doorkeeper.sc.yml
@@ -32,7 +32,7 @@ sc:
         error: Controlla si su formulàriu tuo tenet faddinas
       help:
         native_redirect_uri: Imprea %{native_redirect_uri} pro is tests locales
-        redirect_uri: Imprea una lìnia pro ogni URI
+        redirect_uri: Imprea una lìnia pro onni URI
         scopes: Iscroba is àmbitos cun ispàtzios. Lassa bòidu pro impreare is predefinidos.
       index:
         application: Aplicatzione
@@ -48,8 +48,8 @@ sc:
         title: Aplicatzione noa
       show:
         actions: Atziones
-        application_id: ID de s'aplicatzione
-        callback_urls: URLs de torrada
+        application_id: Crae de cliente
+        callback_urls: URL de torrada
         scopes: Àmbitos
         secret: Segretu de cliente
         title: 'Aplicatzione: %{name}'
@@ -79,21 +79,24 @@ sc:
     errors:
       messages:
         access_denied: Sa propiedade sa resursa o su serbidore de autorizatziones at refudadu sa rechesta.
-        credential_flow_not_configured: Su flussu de is credentziales de sa crae de intrada de su mere de sa risursa est fallidu pro neghe de su fatu chi Doorkeeper.configure.resource_owner_from_credentials no est cunfiguradu.
-        invalid_client: S'autenticatzione de su cliente est fallida ca su cliente est disconnotu, s'atzessu a su cliente no est istadu incluidu, o sa manera de autenticatzione no est suportada.
+        credential_flow_not_configured: Su flussu de is credentziales de sa crae de intrada de su mere de sa risursa est faddidu pro neghe de su fatu chi Doorkeeper.configure.resource_owner_from_credentials no est cunfiguradu.
+        invalid_client: S'autenticatzione de su cliente est faddida ca su cliente est disconnotu, s'atzessu a su cliente no est istadu incluidu, o sa manera de autenticatzione no est suportada.
         invalid_grant: Su permissu de autorizatzione est invàlidu, iscadidu, revocadu, non currispondet a s'URI de re-indiritzamentu impreadu in sa rechesta de autorizatzione, o est istadu frunidu a un'àteru cliente.
         invalid_redirect_uri: S'URI de re-indiritzamentu no est vàlidu.
-        invalid_request: In sa rechesta mancat unu paràmetru netzessàriu, ddoe est unu valore de unu paràmetru non suportadu o est fata male in carchi àtera manera.
+        invalid_request:
+          missing_param: 'Ammancat unu paràmetru de cunfiguratzione rechestu: %{value}.'
+          request_not_authorized: Sa rechesta depet èssere autorizada. Ammancat unu paràmetru pro s'autorizatzione de sa rechesta, o puru no est vàlidu.
+          unknown: Ammancat unu paràmetru rechestu, o cuntenet unu paràmetru chi no est cumpatìbile, o no est formadu bene.
         invalid_resource_owner: Is credentziales de su mere de sa risursa frunidas non sunt vàlidas, o su mere de sa risursa non podet èssere agatadu
-        invalid_scope: S'àmbitu pedidu est invàlidu, disconnotu, o formuladu male.
+        invalid_scope: S'àmbitu rechestu est invàlidu, disconnotu, o formuladu male.
         invalid_token:
           expired: Su getone de atzessu est iscadidu
           revoked: Su getone de atzessu est istadu revocadu
           unknown: Su getone de atzessu no est vàlidu
         resource_owner_authenticator_not_configured: Su mere de sa risursa no est istadu agatadu pro neghe de su fatu chi Doorkeeper.configure.resource_owner_authenticator no est configuradu.
-        server_error: Su serbidore de autorizatzione at agatadu una cunditzione no isetada chi dd'at impedidu de esecutare sa rechesta tua.
+        server_error: Su serbidore de autorizatzione at agatadu una cunditzione no isetada chi ddi at impedidu de esecutare sa rechesta tua.
         temporarily_unavailable: Su serbidore de autorizatzione no est, in custu momentu, in gradu de gestire sa rechesta pro neghe de unu subracàricu temporàneu o de una manutentzione.
-        unauthorized_client: Su cliente no est autorizadu a esecutare custa rechesta in custa manera.
+        unauthorized_client: Su cliente no est autorizadu a esecutare custa rechesta cun custu mètodu.
         unsupported_grant_type: Sa casta de modalidade de autorizatzione no est suportada dae su serbidore de atzessu.
         unsupported_response_type: Su serbidore de autorizatzione non suportat custa casta de risposta.
     flash:
@@ -126,7 +129,7 @@ sc:
       read: lèghere totu is datos de su contu tuo
       read:accounts: bìdere is informatziones in su contu
       read:blocks: bìdere is blocos tuos
-      read:bookmarks: càstia is sinnalibros tuos
+      read:bookmarks: bìdere is sinnalibros tuos
       read:favourites: bìdere is preferidos tuos
       read:filters: bìdere is filtros tuos
       read:follows: bìdere is sighiduras tuas
@@ -134,18 +137,18 @@ sc:
       read:mutes: bìdere is utentes chi as postu a sa muda
       read:notifications: bìdere is notìficas tuas
       read:reports: bìdere is sinnalatziones tuas
-      read:search: chircare a nùmene tuo
+      read:search: chircare a nòmine tuo
       read:statuses: bìdere totu is istados
       write: modificare totu is datos de su contu tuo
       write:accounts: modificare su profilu tuo
       write:blocks: blocare contos e domìnios
-      write:bookmarks: agiunghe is istados a is sinnalibros
+      write:bookmarks: agiùnghere is istados a is sinnalibros
       write:favourites: pònnere istados in is preferidos
       write:filters: creare filtros
       write:follows: sighire persones
       write:lists: creare listas
-      write:media: càrriga documentos multimediales
-      write:mutes: impostare persones e arresonadas a sa muda
+      write:media: carrigare documentos multimediales
+      write:mutes: pònnere persones e arresonadas a sa muda
       write:notifications: isboidare is notìficas tuas
       write:reports: sinnalare àteras persones
       write:statuses: publicare istados
diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml
new file mode 100644
index 000000000..9e399ec31
--- /dev/null
+++ b/config/locales/doorkeeper.si.yml
@@ -0,0 +1,39 @@
+---
+si:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: යෙදුමේ නම
+  doorkeeper:
+    applications:
+      buttons:
+        cancel: අවලංගු
+        destroy: විනාශ කරන්න
+        edit: සංස්කරණය
+      confirmations:
+        destroy: ඔබට විශ්වාසද?
+      index:
+        application: යෙදුම
+        name: නම
+        show: පෙන්වන්න
+        title: ඔබගේ යෙදුම්
+      show:
+        actions: ක්‍රියාමාර්ග
+        application_id: අනුග්‍රාහක යතුර
+    authorizations:
+      buttons:
+        authorize: සත්‍යාපනය
+    authorized_applications:
+      confirmations:
+        revoke: ඔබට විශ්වාසද?
+      index:
+        application: යෙදුම
+        date_format: "%Y-%m-%d %H:%M:%S"
+    layouts:
+      admin:
+        nav:
+          applications: යෙදුම්
+    scopes:
+      read:filters: ඔබගේ පෙරහන් බලන්න
+      read:lists: ඔබගේ ලැයිස්තු බලන්න
+      read:notifications: ඔබගේ දැනුම්දීම් බලන්න
diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml
index bf414361d..bd039024d 100644
--- a/config/locales/doorkeeper.sk.yml
+++ b/config/locales/doorkeeper.sk.yml
@@ -81,7 +81,6 @@ sk:
         invalid_client: Overenie klienta zlyhalo. Neznámy klient, chýbajú údaje o klientovi alebo nepodporovaná metóda overovania.
         invalid_grant: Dané oprávnenie je neplatné, vypršané, zrušené, nesúhlasí s presmerovacou URI použitou v autorizačnej požiadavke, alebo bolo vydané pre iný klient.
         invalid_redirect_uri: Presmerovacia URI je neplatná.
-        invalid_request: Požiadavke chýba povinný parameter alebo obsahuje nepodporovanú hodnotu niektorého parametra alebo je nejako inak poškodená.
         invalid_resource_owner: Uvedené prihlasovacie údaje sú neplatné alebo nenájdené
         invalid_scope: Požadovaný rozsah je neplatný, neznámy alebo poškodený.
         invalid_token:
diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml
index 26d92ddb5..bb69d7519 100644
--- a/config/locales/doorkeeper.sl.yml
+++ b/config/locales/doorkeeper.sl.yml
@@ -72,7 +72,6 @@ sl:
       index:
         application: Program
         created_at: Odobreno
-        date_format: "%Y-%m-%d %H:%M:%S"
         scopes: Obsegi
         title: Vaši odobreni programi
     errors:
@@ -82,7 +81,6 @@ sl:
         invalid_client: Overitev odjemalca ni uspelo zaradi neznanega odjemalca, zaradi nevključitve overitve odjemalca ali zaradi nepodprte metode overitve.
         invalid_grant: Predložena odobritev za pooblastilo je neveljavna, potekla, preklicana, se ne ujema z URI preusmeritvijo, ki je uporabljena v zahtevi za pooblastilo ali je bila izdana drugemu odjemalcu.
         invalid_redirect_uri: URI za preusmeritev ni veljaven.
-        invalid_request: Zahtevku manjka zahtevan parameter, vključuje nepodprto vrednost parametra ali je nepravilno oblikovan.
         invalid_resource_owner: Predložene poverilnice lastnika virov niso veljavne ali pa lastnika virov ni mogoče najti
         invalid_scope: Zahtevani obseg je neveljaven, neznan ali nepravilen.
         invalid_token:
diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml
index 3ae622a13..1b83bbc7c 100644
--- a/config/locales/doorkeeper.sq.yml
+++ b/config/locales/doorkeeper.sq.yml
@@ -81,9 +81,12 @@ sq:
         access_denied: I zoti i burimit ose shërbyesi i autorizimit e hodhi poshtë kërkesën.
         credential_flow_not_configured: Rrjedha për Kredenciale Fjalëkalimi të të Zotit të Burimit dështoi për shkak se Doorkeeper.configure.resource_owner_from_credentials është i paformësuar.
         invalid_client: Mirëfilltësimi i klientit dështoi për shkak klienti të panjohur, mospërfshirjeje mirëfilltësimi klienti, ose metode të pambuluar mirëfilltësimi.
-        invalid_grant: Autorizimi i dhënë është i pavlefshëm, ka skaduar, është shfuqizuar, nuk përputhet me URI-n e ridrejtimit të përdorur te kërkesa e autorizimit, ose është emetuar për klient tjetër.
+        invalid_grant: Autorizimi i dhënë është i pavlefshëm, ka skaduar, është shfuqizuar, s’përputhet me URI-n e ridrejtimit të përdorur te kërkesa e autorizimit, ose është emetuar për klient tjetër.
         invalid_redirect_uri: URI e ridrejtimit s’është e vlefshme.
-        invalid_request: Kërkesës i mungon një parametër i domosdoshëm, përfshin një vlerë të pambuluar parametri, ose përndryshe është e keqformuar.
+        invalid_request:
+          missing_param: 'Mungon parametër i domosdoshëm: %{value}.'
+          request_not_authorized: Kërkesa duhet autorizuar. Një parametër i domosdoshëm për autorizimin e kërkesës mungon ose është i pavlefshëm.
+          unknown: Kërkesës i mungon një parametër i domosdoshëm, përfshin një vlerë parametri që nuk mbulohet, ose përndryshe është formuar keq.
         invalid_resource_owner: Kredencialet e dhëna për të zotin e burimit s’janë të vlefshme, ose s’gjendet i zoti i burimit
         invalid_scope: Fushëveprimi i kërkuar është i pavlefshëm, i panjohur ose i keqformuar.
         invalid_token:
@@ -94,7 +97,7 @@ sq:
         server_error: Shërbyesi i autorizimit hasi një kusht të papritur, i cili e pengoi të plotësonte kërkesën.
         temporarily_unavailable: Shërbyesi i mirëfilltësimeve hëpërhë s’është në gjendje të trajtojë kërkesën, për shkak të një mbingarkese të përkohshme ose ndonjë mirëmbajtjeje të shërbyesit.
         unauthorized_client: Klienti s’është i autorizuar të kryejë këtë kërkesë duke përdorur këtë metodë.
-        unsupported_grant_type: Lloji i autorizimit të dhënë nuk mbulohet nga shërbyesi i autorizimeve.
+        unsupported_grant_type: Lloji i dhënë i autorizimeve nuk mbulohet nga shërbyesi i autorizimeve.
         unsupported_response_type: Shërbyesi i autorizimeve nuk e mbulon këtë lloj përgjigjeje.
     flash:
       applications:
diff --git a/config/locales/doorkeeper.sr-Latn.yml b/config/locales/doorkeeper.sr-Latn.yml
index 8e96f8b93..c1d7c6e5e 100644
--- a/config/locales/doorkeeper.sr-Latn.yml
+++ b/config/locales/doorkeeper.sr-Latn.yml
@@ -82,7 +82,6 @@ sr-Latn:
         invalid_client: Klijentska identifikacija nije uspela zbog nepoznatog klijenta, zato što klijent nije uključio identifikaciju ili zato što je iskorišćen nepodržani identifikacioni metod.
         invalid_grant: Zadata identifikaciona dozvola je neispravna, istekla, opozvana, ne poklapa se sa adresom preusmeravanja ili je izdata nekog drugom klijentu.
         invalid_redirect_uri: Uključena adresa preusmeravanja nije ispravna.
-        invalid_request: Obavezni parametar fali u zahtevu, zahtev uključuje nepodržanu vrednost parametra ili je parametar na neki drugi način pogrešan.
         invalid_resource_owner: Zadati kredencijali vlasnika resursa nisu ispravni ili vlasnik resursa ne može biti nađen
         invalid_scope: Zahtevani opseg važenja nije ispravan, nepoznat je ili je na neki drugi način pogrešan.
         invalid_token:
diff --git a/config/locales/doorkeeper.sr.yml b/config/locales/doorkeeper.sr.yml
index 723c02d09..1d92cf2f0 100644
--- a/config/locales/doorkeeper.sr.yml
+++ b/config/locales/doorkeeper.sr.yml
@@ -82,7 +82,6 @@ sr:
         invalid_client: Клијентска идентификација није успела због непознатог клијента, зато што клијент није укључио идентификацију или зато што је искоришћен неподржани идентификациони метод.
         invalid_grant: Задата идентификациона дозвола је неисправна, истекла, опозвана, не поклапа се са адресом преусмеравања или је издата неког другом клијенту.
         invalid_redirect_uri: Укључена адреса преусмеравања није исправна.
-        invalid_request: Обавезни параметар фали у захтеву, захтев укључује неподржану вредност параметра или је параметар на неки други начин погрешан.
         invalid_resource_owner: Задати креденцијали власника ресурса нису исправни или власник ресурса не може бити нађен
         invalid_scope: Захтевани опсег важења није исправан, непознат је или је на неки други начин погрешан.
         invalid_token:
diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml
index 015f0702f..e87ddc1dc 100644
--- a/config/locales/doorkeeper.sv.yml
+++ b/config/locales/doorkeeper.sv.yml
@@ -83,7 +83,10 @@ sv:
         invalid_client: Klientautentisering misslyckades på grund av okänd klient, ingen klientautentisering inkluderad eller icke godkänd autentiseringsmetod.
         invalid_grant: Det beviljade godkännandetillskottet är ogiltigt, upphört, återkallat, matchar inte den omdirigering URI som användes i auktorisationsförfrågan eller har utfärdats till en annan klient.
         invalid_redirect_uri: Den omdirigerade uri är inte giltig.
-        invalid_request: Förfrågan saknar en obligatorisk parameter, innehåller ett icke-stödt parametervärde eller är annars felaktigt.
+        invalid_request:
+          missing_param: 'Nödvändig parameter saknas: %{value}.'
+          request_not_authorized: Begäran måste godkännas. Den nödvändiga parametern för att godkänna begärandet saknas eller är ogiltig.
+          unknown: Förfrågningen saknar en nödvändig parameter, inkluderar en ett parametervärde som inte stöds, eller är annars felaktigt utformad.
         invalid_resource_owner: De angivna resursägarnas referenser är inte giltiga, eller resursägare kan inte hittas
         invalid_scope: Det begärda räckvidden är ogiltigt, okänt eller felaktigt.
         invalid_token:
diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml
index ba59444be..7703646c5 100644
--- a/config/locales/doorkeeper.th.yml
+++ b/config/locales/doorkeeper.th.yml
@@ -28,6 +28,8 @@ th:
         destroy: คุณแน่ใจหรือไม่?
       edit:
         title: แก้ไขแอปพลิเคชัน
+      form:
+        error: อ๊ะ! ตรวจสอบแบบฟอร์มของคุณสำหรับข้อผิดพลาดที่อาจเกิดขึ้น
       help:
         native_redirect_uri: ใช้ %{native_redirect_uri} สำหรับการทดสอบในเซิร์ฟเวอร์
         redirect_uri: ใช้หนึ่งบรรทัดต่อ URI
@@ -71,12 +73,14 @@ th:
       index:
         application: แอปพลิเคชัน
         created_at: อนุญาตเมื่อ
-        date_format: "%Y-%m-%d %H:%M:%S"
+        date_format: "%d/%m/%Y %H:%M:%S"
         scopes: ขอบเขต
         title: แอปพลิเคชันที่ได้รับอนุญาตของคุณ
     errors:
       messages:
         access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ
+        invalid_request:
+          missing_param: 'พารามิเตอร์ที่จำเป็นขาดหายไป: %{value}'
         invalid_token:
           expired: โทเคนการเข้าถึงหมดอายุแล้ว
           revoked: เพิกถอนโทเคนการเข้าถึงแล้ว
diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml
index 45a5821e4..8019b421a 100644
--- a/config/locales/doorkeeper.tr.yml
+++ b/config/locales/doorkeeper.tr.yml
@@ -36,7 +36,7 @@ tr:
         scopes: Kapsamları boşluklarla ayırın. Varsayılan kapsamları kullanmak için boş bırakın.
       index:
         application: Uygulama
-        callback_url: Callback URL
+        callback_url: Geri Dönüş URL
         delete: Sil
         empty: Hiç uygulamanız yok.
         name: İsim
@@ -48,10 +48,10 @@ tr:
         title: Yeni uygulama
       show:
         actions: Eylemler
-        application_id: Client key
+        application_id: İstemci anahtarı
         callback_urls: Callback URL
         scopes: Kapsamlar
-        secret: Client secret
+        secret: İstemci gizli anahtarı
         title: 'Uygulama: %{name}'
     authorizations:
       buttons:
@@ -73,7 +73,7 @@ tr:
       index:
         application: Uygulama
         created_at: Yetkili
-        date_format: "%Y-%m-%d %H:%M:%S"
+        date_format: "%m-%d-%Y %H:%M:%S"
         scopes: Kapsamlar
         title: Yetkili uygulamalarınız
     errors:
@@ -83,7 +83,10 @@ tr:
         invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu.
         invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URL'siyle eşleşmiyor veya başka bir istemciye verilmiş.
         invalid_redirect_uri: Dahil edilmiş yönlendirme URL'si geçersiz.
-        invalid_request: İstekte gerekli bir parametre eksik, desteklenmeyen bir parametre değeri içeriyor veya başka türlü hatalı biçimlendirilmiş.
+        invalid_request:
+          missing_param: 'Gerekli parametre eksik: %{value}.'
+          request_not_authorized: İsteğin yetkilendirilmesi gerekiyor. İsteği yetkilendirmek için gereken parametre eksik veya geçersiz.
+          unknown: İstekte gerekli bir parametre eksik, desteklenmeyen bir parametre değeri içeriyor veya aksi durumda hatalı biçimlendirilmiş.
         invalid_resource_owner: Sağlanan kaynak sahibi kimlik bilgileri geçerli değil veya kaynak sahibi bulunamıyor
         invalid_scope: İstenen kapsam geçersiz, bilinmeyen veya hatalı biçimlendirilmiş olabilir.
         invalid_token:
diff --git a/config/locales/doorkeeper.tt.yml b/config/locales/doorkeeper.tt.yml
index 5eab4abff..af6e8f180 100644
--- a/config/locales/doorkeeper.tt.yml
+++ b/config/locales/doorkeeper.tt.yml
@@ -1 +1,15 @@
+---
 tt:
+  doorkeeper:
+    applications:
+      buttons:
+        cancel: Баш тарту
+        edit: Үзгәртү
+        submit: Җибәрү
+      index:
+        delete: Бетерү
+        name: Исем
+        show: Күрсәтү
+    authorized_applications:
+      index:
+        date_format: "%Y-%m-%d %H:%M:%S"
diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml
index c5f0c64b6..8d0d8e770 100644
--- a/config/locales/doorkeeper.uk.yml
+++ b/config/locales/doorkeeper.uk.yml
@@ -83,7 +83,10 @@ uk:
         invalid_client: Не вдалося аутентифікувати клієнта (клієнт невідомий, аутентифікацію клієнта не увімкнено, або непідтримуваний метод аутентифікації).
         invalid_grant: Наданий санкціонований дозвіл недійсний, прострочений, анульований, не відповідає URI перенаправлення, що використовується в запиті авторизації, або був виданий іншому клієнту.
         invalid_redirect_uri: Включений URI перенаправлення не є дійсним.
-        invalid_request: У запиті відсутній обов'язковий параметр, міститься непідтримуване значення параметра, або він сформований неправильно.
+        invalid_request:
+          missing_param: 'Відсутній обов''язковий параметр: %{value}.'
+          request_not_authorized: Запит повинен бути авторизований. Необхідний параметр запиту авторизації відсутній або хибний.
+          unknown: У запиті відсутній необхідний параметр, він містить непідтримуваний параметр або його сформовано не правильно.
         invalid_resource_owner: Надані дані власника ресурсу не є дійсними, або власника ресурсу неможливо знайти
         invalid_scope: Запитуваний дозвіл недійсний, невідомий, або неправильно сформований.
         invalid_token:
diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml
index a51891fd0..fae700282 100644
--- a/config/locales/doorkeeper.vi.yml
+++ b/config/locales/doorkeeper.vi.yml
@@ -62,7 +62,7 @@ vi:
       new:
         able_to: Nó sẽ có thể
         prompt: Ứng dụng %{client_name} yêu cầu quyền truy cập vào tài khoản của bạn
-        title: Cần được cho phép
+        title: Yêu cầu truy cập
       show:
         title: Sao chép mã này và dán nó vào ứng dụng.
     authorized_applications:
@@ -83,7 +83,10 @@ vi:
         invalid_client: Xác thực ứng dụng khách không thành công do máy khách mơ hồ, không bao gồm xác thực ứng dụng khách hoặc phương thức xác thực không được hỗ trợ.
         invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị gỡ hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác.
         invalid_redirect_uri: URL chuyển hướng không hợp lệ.
-        invalid_request: Yêu cầu thiếu tham số bắt buộc, bao gồm giá trị tham số không được hỗ trợ hoặc không đúng định dạng.
+        invalid_request:
+          missing_param: 'Thiếu tham số bắt buộc: %{value}.'
+          request_not_authorized: Yêu cầu cần được cho phép trước. Tham số bắt buộc bị thiếu hoặc vô giá trị.
+          unknown: Thiếu tham số bắt buộc. Có thể giá trị tham số không được hỗ trợ, hoặc không đúng định dạng.
         invalid_resource_owner: Thông tin xác thực chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên
         invalid_scope: Quyền yêu cầu không hợp lệ, không có thật hoặc sai định dạng.
         invalid_token:
diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml
index 3e0d88c82..79b56ffd9 100644
--- a/config/locales/doorkeeper.zh-CN.yml
+++ b/config/locales/doorkeeper.zh-CN.yml
@@ -83,7 +83,10 @@ zh-CN:
         invalid_client: 由于应用信息未知、未提交认证信息或使用了不支持的认证方式,认证失败
         invalid_grant: 授权方式无效、过期或已被撤销、与授权请求中的回调地址不一致,或使用了其他应用的回调地址
         invalid_redirect_uri: 无效的登录回调地址
-        invalid_request: 请求缺少必要的参数,或者参数值、格式不正确
+        invalid_request:
+          missing_param: 缺少必需的参数:%{value}
+          request_not_authorized: 请求需要被授权。授权请求所需的参数缺失或无效。
+          unknown: 该请求缺少一个必要的参数,包括一个不支持的参数值,或者其他格式错误。
         invalid_resource_owner: 资源所有者认证无效,或找不到所有者
         invalid_scope: 请求的权限范围无效、未知或格式不正确
         invalid_token:
@@ -117,10 +120,10 @@ zh-CN:
     scopes:
       admin:read: 读取服务器上的所有数据
       admin:read:accounts: 读取所有帐号的敏感信息
-      admin:read:reports: 读取所有举报和被举报帐号的敏感信息
+      admin:read:reports: 读取所有报告和被报告帐号的敏感信息
       admin:write: 修改服务器上的所有数据
       admin:write:accounts: 对帐号执行管理操作
-      admin:write:reports: 对举报执行管理操作
+      admin:write:reports: 对报告执行管理操作
       follow: 关注或屏蔽用户
       push: 接收你的帐户的推送通知
       read: 读取你的帐户数据
@@ -133,7 +136,7 @@ zh-CN:
       read:lists: 查看你的列表
       read:mutes: 查看你的隐藏列表
       read:notifications: 查看你的通知
-      read:reports: 查看你的举报
+      read:reports: 查看你的报告
       read:search: 以你的身份搜索
       read:statuses: 查看所有嘟文
       write: 修改你的账号数据
@@ -147,5 +150,5 @@ zh-CN:
       write:media: 上传媒体文件
       write:mutes: 隐藏用户和对话
       write:notifications: 清除你的通知
-      write:reports: 举报他人
+      write:reports: 报告他人
       write:statuses: 发表嘟文
diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml
index 872727049..60c64cc31 100644
--- a/config/locales/doorkeeper.zh-HK.yml
+++ b/config/locales/doorkeeper.zh-HK.yml
@@ -83,7 +83,10 @@ zh-HK:
         invalid_client: 用戶程式認證 (Client Authentication) 失敗,原因是使用了未知的用戶程式、沒有傳回用戶認證資訊、或者使用了不支援的認證方法 (Authentication Method)。
         invalid_grant: 所提供的認證申請 (authorization grant) 不正確、過期、已被取消、或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。
         invalid_redirect_uri: 不正確的轉接網址。
-        invalid_request: 請求缺少必要的參數、有不支援的參數、或包含其他格式錯誤。
+        invalid_request:
+          missing_param: 缺少必要的參數:%{value}.
+          request_not_authorized: 請求必須被授權。用於授權的必要參數缺失或無效。
+          unknown: 這個請求缺少必要的參數,包括有不支援的參數、或有其他格式錯誤。
         invalid_resource_owner: 資源擁有者的登入資訊無效、或者無法找到該資源擁有者
         invalid_scope: 你所請求的權限範圍 (scope) 無效、未知、或格式錯誤。
         invalid_token:
diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml
index 6526a35f5..101abb7f7 100644
--- a/config/locales/doorkeeper.zh-TW.yml
+++ b/config/locales/doorkeeper.zh-TW.yml
@@ -83,7 +83,10 @@ zh-TW:
         invalid_client: 客戶端驗證失敗,可能是因為未知的客戶端程式、未包含客戶端驗證、或使用了不支援的認證方法。
         invalid_grant: 授權申請不正確、逾期、已被取消、與授權請求內的重新導向 URI 不符、或屬於別的客戶端程式。
         invalid_redirect_uri: 包含的重新導向 URI 是不正確的。
-        invalid_request: 請求缺少必要的參數、有不支援的參數、或其他格式錯誤。
+        invalid_request:
+          missing_param: 缺少必要的參數:%{value}.
+          request_not_authorized: 請求必須是已授權的。用於授權的必要參數缺少或無效。
+          unknown: 請求缺少必要的參數、有不支援的參數、或其他格式錯誤。
         invalid_resource_owner: 資源擁有者的登入資訊錯誤,或無法找到該資源擁有者
         invalid_scope: 請求的範圍錯誤、未定義、或格式錯誤。
         invalid_token:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 5442d38b8..148704ef3 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -26,6 +26,8 @@ el:
       Χρησιμεύει στη λειτουργία της ομοσπονδίας και δε θα πρέπει να αποκλειστεί, εκτός κι αν είναι επιθυμητός ο αποκλεισμός ολόκληρου του κόμβου. Σε αυτή την περίπτωση θα πρέπει να χρησιμοποιηθεί η λειτουργία αποκλεισμού τομέα.
     learn_more: Μάθε περισσότερα
     privacy_policy: Πολιτική απορρήτου
+    rules: Κανόνες διακομιστή
+    rules_html: 'Παρακάτω είναι μια σύνοψη των κανόνων που πρέπει να ακολουθήσετε αν θέλετε να έχετε ένα λογαριασμό σε αυτόν τον διακομιστή Mastodon:'
     see_whats_happening: Μάθε τι συμβαίνει
     server_stats: 'Στατιστικά κόμβου:'
     source_code: Πηγαίος κώδικας
@@ -77,7 +79,6 @@ el:
       other: Τουτ
     posts_tab_heading: Τουτ
     posts_with_replies: Τουτ και απαντήσεις
-    reserved_username: Το όνομα χρήστη είναι κατειλημμένο
     roles:
       admin: Διαχειριστής
       bot: Μποτ (αυτόματος λογαριασμός)
@@ -257,44 +258,6 @@ el:
         update_announcement: Ενημέρωση Ανακοίνωσης
         update_custom_emoji: Ενημέρωση Προσαρμοσμένου Emoji
         update_status: Ενημέρωση Κατάστασης
-      actions:
-        assigned_to_self_report: Ο/Η %{name} ανάθεσε την καταγγελία %{target} στον εαυτό του/της
-        change_email_user: Ο/Η %{name} άλλαξε τη διεύθυνση email του χρήστη %{target}
-        confirm_user: Ο/Η %{name} επιβεβαίωσε τη διεύθυνση email του χρήστη %{target}
-        create_account_warning: Ο/Η %{name} έστειλε προειδοποίηση προς %{target}
-        create_announcement: Νέα ανακοίνωση %{target} από %{name}
-        create_custom_emoji: Ο/Η %{name} ανέβασε νέο emoji %{target}
-        create_domain_allow: Ο/Η %{name} έβαλε τον τομέα %{target} σε λευκή λίστα
-        create_domain_block: Ο/Η %{name} μπλόκαρε τον τομέα %{target}
-        create_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε μαύρη λίστα
-        create_ip_block: Ο/Η %{name} δημιούργησε κανόνα για την IP %{target}
-        demote_user: Ο/Η %{name} υποβίβασε το χρήστη %{target}
-        destroy_announcement: Διαγραφή ανακοίνωσης %{target} από %{name}
-        destroy_custom_emoji: Ο/Η %{name} κατέστρεψε το emoji %{target}
-        destroy_domain_allow: Ο/Η %{name} αφαίρεσε τον τομέα %{target} από λίστα εγκρίσεων
-        destroy_domain_block: Ο/Η %{name} ξεμπλόκαρε τον τομέα %{target}
-        destroy_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε λευκή λίστα
-        destroy_ip_block: Ο/Η %{name} διέγραψε κανόνα για την IP %{target}
-        destroy_status: Ο/Η %{name} αφαίρεσε την κατάσταση του/της %{target}
-        disable_2fa_user: Ο/Η %{name} απενεργοποίησε την απαίτηση δύο παραγόντων για το χρήστη %{target}
-        disable_custom_emoji: Ο/Η %{name} απενεργοποίησε το emoji %{target}
-        disable_user: Ο/Η %{name} απενεργοποίησε την είσοδο για το χρήστη %{target}
-        enable_custom_emoji: Ο/Η %{name} ενεργοποίησε το emoji %{target}
-        enable_user: Ο/Η %{name} ενεργοποίησε την είσοδο του χρήστη %{target}
-        memorialize_account: Ο/Η %{name} μετέτρεψε το λογαριασμό του/της %{target} σε σελίδα νεκρολογίας
-        promote_user: Ο/Η %{name} προβίβασε το χρήστη %{target}
-        remove_avatar_user: Ο/Η %{name} αφαίρεσε το αβατάρ του/της %{target}
-        reopen_report: Ο/Η %{name} ξανάνοιξε την καταγγελία %{target}
-        reset_password_user: Ο/Η %{name} επανέφερε το συνθηματικό του χρήστη %{target}
-        resolve_report: Ο/Η %{name} επέλυσε την καταγγελία %{target}
-        silence_account: Ο/Η %{name} αποσιώπησε το λογαριασμό του/της %{target}
-        suspend_account: Ο/Η %{name} έπαυσε το λογαριασμό του/της %{target}
-        unassigned_report: Ο/Η %{name} αποδέσμευσε την καταγγελία %{target}
-        unsilence_account: Ο/Η %{name} ήρε την αποσιώπηση του λογαριασμού του/της %{target}
-        unsuspend_account: Ο/Η %{name} ήρε την παύση του λογαριασμού του χρήστη %{target}
-        update_announcement: Ενημέρωση ανακοίνωσης %{target} από %{name}
-        update_custom_emoji: Ο/Η %{name} ενημέρωσε το emoji %{target}
-        update_status: Ο/Η %{name} ενημέρωσε την κατάσταση του/της %{target}
       deleted_status: "(διαγραμμένη δημοσίευση)"
       empty: Δεν βρέθηκαν αρχεία καταγραφής.
       filter_by_action: Φιλτράρισμα ανά ενέργεια
@@ -309,10 +272,12 @@ el:
       new:
         create: Δημιουργία ανακοίνωσης
         title: Νέα ανακοίνωση
+      publish: Δημοσίευση
       published_msg: Επιτυχής δημοσίευση ανακοίνωσης!
       scheduled_for: Προγραμματισμένη για %{time}
       scheduled_msg: Η ανακοίνωση προγραμματίστηκε για δημοσίευση!
       title: Ανακοινώσεις
+      unpublish: Αναίρεση δημοσίευσης
       unpublished_msg: Επιτυχής ακύρωση δημοσίευσης ανακοίνωσης!
       updated_msg: Επιτυχής ενημέρωση ανακοίνωσης!
     custom_emojis:
@@ -357,7 +322,6 @@ el:
       feature_profile_directory: Κατάλογος χρηστών
       feature_registrations: Εγγραφές
       feature_relay: Ανταποκριτής ομοσπονδίας
-      feature_spam_check: Καταπολέμηση ανεπιθύμητης επικοινωνίας
       feature_timeline_preview: Προεπισκόπιση ροής
       features: Λειτουργίες
       hidden_service: Ομοσπονδία με κρυμμένες υπηρεσίες
@@ -433,9 +397,12 @@ el:
         create: Πρόσθεση τομέα
         title: Νέα εγγραφή email στη μαύρη λίστα
       title: Μαύρη λίστα email
+    follow_recommendations:
+      status: Κατάσταση
     instances:
       by_domain: Τομέας
       delivery_available: Διαθέσιμη παράδοση
+      empty: Δεν βρέθηκαν τομείς.
       known_accounts:
         one: "%{count} γνωστός λογαριασμός"
         other: "%{count} γνωστοί λογαριασμοί"
@@ -533,6 +500,13 @@ el:
       unassign: Αποσύνδεση
       unresolved: Άλυτη
       updated_at: Ενημερωμένη
+    rules:
+      add_new: Προσθήκη κανόνα
+      delete: Διαγραφή
+      description_html: Ενώ οι περισσότεροι ισχυρίζονται ότι έχουν διαβάσει και συμφωνούν με τους όρους της υπηρεσίας, συνήθως οι άνθρωποι δεν διαβάζουν μέχρι μετά την εμφάνιση ενός προβλήματος. <strong>Κάντε ευκολότερο να δουν τους κανόνες του διακομιστή σας με μια ματιά παρέχοντας τους σε μια λίστα σημείων.</strong> Προσπαθήστε να κρατήσετε μεμονωμένους κανόνες σύντομους και απλούς, αλλά προσπαθήστε να μην τους χωρίσετε σε πολλά ξεχωριστά αντικείμενα.
+      edit: Επεξεργασία κανόνα
+      empty: Δεν έχουν οριστεί ακόμα κανόνες διακομιστή.
+      title: Κανόνες διακομιστή
     settings:
       activity_api_enabled:
         desc_html: Καταμέτρηση τοπικών δημοσιεύσεων, ενεργών χρηστών και νέων εγγραφών σε εβδομαδιαίες ομαδοποιήσεις
@@ -556,9 +530,6 @@ el:
         users: Προς συνδεδεμένους τοπικούς χρήστες
       domain_blocks_rationale:
         title: Εμφάνιση σκεπτικού
-      enable_bootstrap_timeline_accounts:
-        desc_html: Οι νέοι χρήστες να ακολουθούν τους προρυθμισμένουνς λογαριασμούς ώστε η αρχική ροή τους να μην είναι άδεια
-        title: Προεπιλογή παρακολούθησης για τους νέους χρήστες
       hero:
         desc_html: Εμφανίζεται στην μπροστινή σελίδα. Συνίσταται τουλάχιστον 600x100px. Όταν λείπει, χρησιμοποιείται η μικρογραφία του κόμβου
         title: Εικόνα ήρωα
@@ -609,9 +580,6 @@ el:
         desc_html: Μπορείς να γράψεις τη δική σου πολιτική απορρήτου, όρους χρήσης ή άλλους νομικούς όρους. Μπορείς να χρησιμοποιήσεις HTML tags
         title: Προσαρμοσμένοι όροι χρήσης της υπηρεσίας
       site_title: Όνομα κόμβου
-      spam_check_enabled:
-        desc_html: Το Mastodon μπορεί να αποσιωπεί και να καταγγέλει αυτόματα λογαριασμούς βάσει της συμπεριφοράς τους όπως για παράδειγμα επαναλαμβανόμενη αποστολή ανεπιθύμητων μηνυμάτων. Μπορεί να υπάρξουν και λανθασμένες ανιχνεύσεις.
-        title: Καταπολέμηση ανεπιθύμητης επικοινωνίας
       thumbnail:
         desc_html: Χρησιμοποιείται για προεπισκοπήσεις μέσω του OpenGraph και του API. Συστήνεται 1200x630px
         title: Μικρογραφία κόμβου
@@ -642,13 +610,16 @@ el:
       no_status_selected: Καμία δημοσίευση δεν άλλαξε αφού καμία δεν ήταν επιλεγμένη
       title: Καταστάσεις λογαριασμού
       with_media: Με πολυμέσα
+    system_checks:
+      database_schema_check:
+        message_html: Υπάρχουν μετακινήσεις βάσης δεδομένων που εκκρεμούν. Παρακαλώ εκτελέστε τις για να βεβαιωθείτε ότι η εφαρμογή συμπεριφέρεται όπως αναμένεται
+      rules_check:
+        action: Διαχείριση κανόνων διακομιστή
+        message_html: Δεν έχετε ορίσει κανέναν κανόνα διακομιστή.
     tags:
       accounts_today: Μοναδικές χρήσεις ημέρας
       accounts_week: Μοναδικές χρήσεις εβδομάδας
       breakdown: Ανάλυση σημερινής χρήσης ανα πηγή
-      context: Συνάφεια
-      directory: Στον κατάλογο
-      in_directory: "%{count} στον κατάλογο"
       last_active: Τελευταία δραστηριότητα
       most_popular: Δημοφιλέστερες
       most_recent: Πιο πρόσφατες
@@ -665,6 +636,7 @@ el:
       add_new: Πρόσθεση νέου
       delete: Διαγραφή
       edit_preset: Ενημέρωση προκαθορισμένης προειδοποίησης
+      empty: Δεν έχετε ακόμη ορίσει κάποια προεπιλογή προειδοποίησης.
       title: Διαχείριση προκαθορισμένων προειδοποιήσεων
   admin_mailer:
     new_pending_account:
@@ -752,6 +724,7 @@ el:
       functional: Ο λογαριασμός σου είναι πανέτοιμος.
       pending: Η εφαρμογή σας εκκρεμεί έγκρισης, πιθανόν θα διαρκέσει κάποιο χρόνο. Θα λάβετε email αν εγκριθεί.
       redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}.
+    too_fast: Η φόρμα υποβλήθηκε πολύ γρήγορα, προσπαθήστε ξανά.
     trouble_logging_in: Πρόβλημα σύνδεσης;
     use_security_key: Χρήση κλειδιού ασφαλείας
   authorize_follow:
@@ -775,10 +748,6 @@ el:
     errors:
       invalid_key: δεν είναι έγκυρο κλειδί Ed25519 ή Curve25519
       invalid_signature: δεν είναι έγκυρη υπογραφή Ed25519
-  date:
-    formats:
-      default: "%b %d, %Y"
-      with_month_name: "%B %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}ω"
@@ -1029,6 +998,8 @@ el:
       body: 'Η κατάστασή σου προωθήθηκε από τον/την %{name}:'
       subject: Ο/Η %{name} προώθησε την κατάστασή σου
       title: Νέα προώθηση
+    status:
+      subject: Ο/Η %{name} μόλις έγραψε κάτι
   notifications:
     email_events: Συμβάντα για ειδοποιήσεις μέσω email
     email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:'
@@ -1113,40 +1084,13 @@ el:
     activity: Τελευταία δραστηριότητα
     browser: Φυλλομετρητής (Browser)
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Άγνωστος φυλλομετρητής
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Τρέχουσα σύνδεση
     description: "%{browser} σε %{platform}"
     explanation: Αυτοί είναι οι φυλλομετρητές (browsers) που είναι συνδεδεμένοι στον λογαριασμό σου στο Mastodon αυτή τη στιγμή.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: άγνωστη πλατφόρμα
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Ανακάλεσε
     revoke_success: Η σύνδεση ανακλήθηκε επιτυχώς
     title: Σύνδεση
@@ -1171,8 +1115,6 @@ el:
     profile: Προφίλ
     relationships: Ακολουθείς και σε ακολουθούν
     two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA)
-  spam_check:
-    spam_detected: Αυτή είναι μια αυτόματη αναφορά. Εντοπίστηκε ανεπιθύμητο υλικό (spam).
   statuses:
     attached:
       audio:
@@ -1213,7 +1155,6 @@ el:
     show_older: Εμφάνιση παλαιότερων
     show_thread: Εμφάνιση νήματος
     sign_in_to_participate: Συνδέσου για να συμμετάσχεις στη συζήτηση
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Μόνο ακόλουθοι
       private_long: Εμφάνιση μόνο σε ακόλουθους
@@ -1314,10 +1255,6 @@ el:
     contrast: Mastodon (Υψηλή αντίθεση)
     default: Mastodon (Σκοτεινό)
     mastodon-light: Mastodon (Ανοιχτόχρωμο)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Προσθήκη
     disable: Απενεργοποίησε
@@ -1378,11 +1315,8 @@ el:
       tips: Συμβουλές
       title: Καλώς όρισες, %{name}!
   users:
-    blocked_email_provider: Δεν είναι επιτρεπτός αυτός ο πάροχος email
     follow_limit_reached: Δεν μπορείς να ακολουθήσεις περισσότερα από %{limit} άτομα
     generic_access_help_html: Δυσκολεύεσαι να μπεις στο λογαριασμό σου; Μπορείς να επικοινωνήσεις στο %{email} για βοήθεια
-    invalid_email: Η διεύθυνση email είναι άκυρη
-    invalid_email_mx: Αυτή η διεύθυνση email δεν φαίνεται να υπάρχει
     invalid_otp_token: Άκυρος κωδικός πιστοποίησης 2 παραγόντων (2FA)
     invalid_sign_in_token: Άκυρος κωδικός ασφάλειας
     otp_lost_help_html: Αν χάσεις και τα δύο, μπορείς να επικοινωνήσεις με τον/την %{email}
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 182a8e985..d8ad5bd84 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,7 +1,7 @@
 ---
 en:
   about:
-    about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
+    about_hashtag_html: These are public posts tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
     about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
     about_this: About
     active_count_after: active
@@ -32,9 +32,9 @@ en:
     server_stats: 'Server stats:'
     source_code: Source code
     status_count_after:
-      one: status
-      other: statuses
-    status_count_before: Who authored
+      one: post
+      other: posts
+    status_count_before: Who published
     tagline: Follow friends and discover new ones
     terms: Terms of service
     unavailable_content: Moderated servers
@@ -76,10 +76,10 @@ en:
     pin_errors:
       following: You must be already following the person you want to endorse
     posts:
-      one: Toot
-      other: Toots
-    posts_tab_heading: Toots
-    posts_with_replies: Toots and replies
+      one: Post
+      other: Posts
+    posts_tab_heading: Posts
+    posts_with_replies: Posts and replies
     roles:
       admin: Admin
       bot: Bot
@@ -199,7 +199,7 @@ en:
         targeted_reports: Reported by others
       silence: Limit
       silenced: Limited
-      statuses: Statuses
+      statuses: Posts
       subscribe: Subscribe
       suspended: Suspended
       suspension_irreversible: The data of this account has been irreversibly deleted. You can unsuspend the account to make it usable but it will not recover any data it previously had.
@@ -230,6 +230,7 @@ en:
         create_domain_block: Create Domain Block
         create_email_domain_block: Create E-mail Domain Block
         create_ip_block: Create IP rule
+        create_unavailable_domain: Create Unavailable Domain
         demote_user: Demote User
         destroy_announcement: Delete Announcement
         destroy_custom_emoji: Delete Custom Emoji
@@ -237,7 +238,8 @@ en:
         destroy_domain_block: Delete Domain Block
         destroy_email_domain_block: Delete e-mail domain block
         destroy_ip_block: Delete IP rule
-        destroy_status: Delete Status
+        destroy_status: Delete Post
+        destroy_unavailable_domain: Delete Unavailable Domain
         disable_2fa_user: Disable 2FA
         disable_custom_emoji: Disable Custom Emoji
         disable_user: Disable User
@@ -259,7 +261,7 @@ en:
         update_announcement: Update Announcement
         update_custom_emoji: Update Custom Emoji
         update_domain_block: Update Domain Block
-        update_status: Update Status
+        update_status: Update Post
       actions:
         assigned_to_self_report_html: "%{name} assigned report %{target} to themselves"
         change_email_user_html: "%{name} changed the e-mail address of user %{target}"
@@ -271,6 +273,7 @@ en:
         create_domain_block_html: "%{name} blocked domain %{target}"
         create_email_domain_block_html: "%{name} blocked e-mail domain %{target}"
         create_ip_block_html: "%{name} created rule for IP %{target}"
+        create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
         demote_user_html: "%{name} demoted user %{target}"
         destroy_announcement_html: "%{name} deleted announcement %{target}"
         destroy_custom_emoji_html: "%{name} destroyed emoji %{target}"
@@ -278,7 +281,8 @@ en:
         destroy_domain_block_html: "%{name} unblocked domain %{target}"
         destroy_email_domain_block_html: "%{name} unblocked e-mail domain %{target}"
         destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
-        destroy_status_html: "%{name} removed status by %{target}"
+        destroy_status_html: "%{name} removed post by %{target}"
+        destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}"
         disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
         disable_custom_emoji_html: "%{name} disabled emoji %{target}"
         disable_user_html: "%{name} disabled login for user %{target}"
@@ -300,8 +304,8 @@ en:
         update_announcement_html: "%{name} updated announcement %{target}"
         update_custom_emoji_html: "%{name} updated emoji %{target}"
         update_domain_block_html: "%{name} updated domain block for %{target}"
-        update_status_html: "%{name} updated status by %{target}"
-      deleted_status: "(deleted status)"
+        update_status_html: "%{name} updated post by %{target}"
+      deleted_status: "(deleted post)"
       empty: No logs found.
       filter_by_action: Filter by action
       filter_by_user: Filter by user
@@ -315,10 +319,12 @@ en:
       new:
         create: Create announcement
         title: New announcement
+      publish: Publish
       published_msg: Announcement successfully published!
       scheduled_for: Scheduled for %{time}
       scheduled_msg: Announcement scheduled for publication!
       title: Announcements
+      unpublish: Unpublish
       unpublished_msg: Announcement successfully unpublished!
       updated_msg: Announcement successfully updated!
     custom_emojis:
@@ -363,7 +369,6 @@ en:
       feature_profile_directory: Profile directory
       feature_registrations: Registrations
       feature_relay: Federation relay
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Timeline preview
       features: Features
       hidden_service: Federation with hidden services
@@ -441,9 +446,34 @@ en:
         create: Add domain
         title: Block new e-mail domain
       title: Blocked e-mail domains
+    follow_recommendations:
+      description_html: "<strong>Follow recommendations help new users quickly find interesting content</strong>. When a user has not interacted with others enough to form personalized follow recommendations, these accounts are recommended instead. They are re-calculated on a daily basis from a mix of accounts with the highest recent engagements and highest local follower counts for a given language."
+      language: For language
+      status: Status
+      suppress: Suppress follow recommendation
+      suppressed: Suppressed
+      title: Follow recommendations
+      unsuppress: Restore follow recommendation
     instances:
+      back_to_all: All
+      back_to_limited: Limited
+      back_to_warning: Warning
       by_domain: Domain
+      delivery:
+        all: All
+        clear: Clear delivery errors
+        restart: Restart delivery
+        stop: Stop delivery
+        title: Delivery
+        unavailable: Unavailable
+        unavailable_message: Delivery unavailable
+        warning: Warning
+        warning_message:
+          one: Delivery failure %{count} day
+          other: Delivery failure %{count} days
       delivery_available: Delivery is available
+      delivery_error_days: Delivery error days
+      delivery_error_hint: If delivery is not possible for %{count} days, it will be automatically marked as undeliverable.
       empty: No domains found.
       known_accounts:
         one: "%{count} known account"
@@ -490,11 +520,11 @@ en:
     relays:
       add_new: Add new relay
       delete: Delete
-      description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
+      description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public posts between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
       disable: Disable
       disabled: Disabled
       enable: Enable
-      enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it.
+      enable_hint: Once enabled, your server will subscribe to all public posts from this relay, and will begin sending this server's public posts to it.
       enabled: Enabled
       inbox_url: Relay URL
       pending: Waiting for relay's approval
@@ -545,16 +575,18 @@ en:
       updated_at: Updated
     rules:
       add_new: Add rule
-      description: While most claim to have read and agree to the terms of service, usually people do not read through until after a problem arises. Make it easier to see your server's rules at a glance by providing them in a flat bullet point list. Try to keep individual rules short and simple, but try not to split them up into many separate items either.
+      delete: Delete
+      description_html: While most claim to have read and agree to the terms of service, usually people do not read through until after a problem arises. <strong>Make it easier to see your server's rules at a glance by providing them in a flat bullet point list.</strong> Try to keep individual rules short and simple, but try not to split them up into many separate items either.
       edit: Edit rule
+      empty: No server rules have been defined yet.
       title: Server rules
     settings:
       activity_api_enabled:
-        desc_html: Counts of locally posted statuses, active users, and new registrations in weekly buckets
-        title: Publish aggregate statistics about user activity
+        desc_html: Counts of locally published posts, active users, and new registrations in weekly buckets
+        title: Publish aggregate statistics about user activity in the API
       bootstrap_timeline_accounts:
-        desc_html: Separate multiple usernames by comma. Only local and unlocked accounts will work. Default when empty is all local admins.
-        title: Default follows for new users
+        desc_html: Separate multiple usernames by comma. These accounts will be guaranteed to be shown in follow recommendations
+        title: Recommend these accounts to new users
       contact_information:
         email: Business e-mail
         username: Contact username
@@ -571,9 +603,6 @@ en:
         users: To logged-in local users
       domain_blocks_rationale:
         title: Show rationale
-      enable_bootstrap_timeline_accounts:
-        desc_html: Make new users automatically follow configured accounts so their home feed doesn't start out empty
-        title: Enable default follows for new users
       hero:
         desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail
         title: Hero image
@@ -582,7 +611,7 @@ en:
         title: Mascot image
       peers_api_enabled:
         desc_html: Domain names this server has encountered in the fediverse
-        title: Publish list of discovered servers
+        title: Publish list of discovered servers in the API
       preview_sensitive_media:
         desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive
         title: Show sensitive media in OpenGraph previews
@@ -627,9 +656,6 @@ en:
         desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags
         title: Custom terms of service
       site_title: Server name
-      spam_check_enabled:
-        desc_html: Mastodon can auto-report accounts that send repeated unsolicited messages. There may be false positives.
-        title: Anti-spam automation
       thumbnail:
         desc_html: Used for previews via OpenGraph and API. 1200x630px recommended
         title: Server thumbnail
@@ -657,8 +683,8 @@ en:
       media:
         title: Media
       no_media: No media
-      no_status_selected: No statuses were changed as none were selected
-      title: Account statuses
+      no_status_selected: No posts were changed as none were selected
+      title: Account posts
       with_media: With media
     system_checks:
       database_schema_check:
@@ -672,12 +698,9 @@ en:
       accounts_today: Unique uses today
       accounts_week: Unique uses this week
       breakdown: Breakdown of today's usage by source
-      context: Context
-      directory: In directory
-      in_directory: "%{count} in directory"
-      last_active: Last active
+      last_active: Recently used
       most_popular: Most popular
-      most_recent: Most recent
+      most_recent: Recently created
       name: Hashtag
       review: Review status
       reviewed: Reviewed
@@ -691,6 +714,7 @@ en:
       add_new: Add new
       delete: Delete
       edit_preset: Edit warning preset
+      empty: You haven't defined any warning presets yet.
       title: Manage warning presets
   admin_mailer:
     new_pending_account:
@@ -721,14 +745,14 @@ en:
       guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Everyone can contribute.
     sensitive_content: Sensitive content
-    toot_layout: Toot layout
+    toot_layout: Post layout
   application_mailer:
     notification_preferences: Change e-mail preferences
     salutation: "%{name},"
     settings: 'Change e-mail preferences: %{link}'
     view: 'View:'
     view_profile: View profile
-    view_status: View status
+    view_status: View post
   applications:
     created: Application successfully created
     destroyed: Application successfully deleted
@@ -865,7 +889,7 @@ en:
     archive_takeout:
       date: Date
       download: Download your archive
-      hint_html: You can request an archive of your <strong>toots and uploaded media</strong>. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.
+      hint_html: You can request an archive of your <strong>posts and uploaded media</strong>. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.
       in_progress: Compiling your archive...
       request: Request your archive
       size: Size
@@ -982,7 +1006,7 @@ en:
       limit: You have reached the maximum amount of lists
   media_attachments:
     validations:
-      images_and_video: Cannot attach a video to a status that already contains images
+      images_and_video: Cannot attach a video to a post that already contains images
       not_ready: Cannot attach files that have not finished processing. Try again in a moment!
       too_many: Cannot attach more than 4 files
   migrations:
@@ -1035,8 +1059,8 @@ en:
         other: "%{count} new notifications since your last visit \U0001F418"
       title: In your absence...
     favourite:
-      body: 'Your status was favourited by %{name}:'
-      subject: "%{name} favourited your status"
+      body: 'Your post was favourited by %{name}:'
+      subject: "%{name} favourited your post"
       title: New favourite
     follow:
       body: "%{name} is now following you!"
@@ -1055,8 +1079,8 @@ en:
     poll:
       subject: A poll by %{name} has ended
     reblog:
-      body: 'Your status was boosted by %{name}:'
-      subject: "%{name} boosted your status"
+      body: 'Your post was boosted by %{name}:'
+      subject: "%{name} boosted your post"
       title: New boost
     status:
       subject: "%{name} just posted"
@@ -1135,16 +1159,16 @@ en:
   remote_interaction:
     favourite:
       proceed: Proceed to favourite
-      prompt: 'You want to favourite this toot:'
+      prompt: 'You want to favourite this post:'
     reblog:
       proceed: Proceed to boost
-      prompt: 'You want to boost this toot:'
+      prompt: 'You want to boost this post:'
     reply:
       proceed: Proceed to reply
-      prompt: 'You want to reply to this toot:'
+      prompt: 'You want to reply to this post:'
   scheduled_statuses:
-    over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day
-    over_total_limit: You have exceeded the limit of %{limit} scheduled toots
+    over_daily_limit: You have exceeded the limit of %{limit} scheduled posts for that day
+    over_total_limit: You have exceeded the limit of %{limit} scheduled posts
     too_soon: The scheduled date must be in the future
   sessions:
     activity: Last activity
@@ -1209,8 +1233,6 @@ en:
     relationships: Follows and followers
     two_factor_authentication: Two-factor Auth
     webauthn_authentication: Security keys
-  spam_check:
-    spam_detected: This is an automated report. Spam has been detected.
   statuses:
     attached:
       audio:
@@ -1229,14 +1251,14 @@ en:
       one: 'contained a disallowed hashtag: %{tags}'
       other: 'contained the disallowed hashtags: %{tags}'
     errors:
-      in_reply_not_found: The status you are trying to reply to does not appear to exist.
+      in_reply_not_found: The post you are trying to reply to does not appear to exist.
     language_detection: Automatically detect language
     open_in_web: Open in web
     over_character_limit: character limit of %{max} exceeded
     pin_errors:
-      limit: You have already pinned the maximum number of toots
-      ownership: Someone else's toot cannot be pinned
-      private: Non-public toot cannot be pinned
+      limit: You have already pinned the maximum number of posts
+      ownership: Someone else's post cannot be pinned
+      private: Non-public posts cannot be pinned
       reblog: A boost cannot be pinned
     poll:
       total_people:
@@ -1253,6 +1275,7 @@ en:
     sign_in_to_participate: Sign in to participate in the conversation
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Direct
       private: Followers-only
       private_long: Only show to followers
       public: Public
@@ -1260,7 +1283,7 @@ en:
       unlisted: Unlisted
       unlisted_long: Everyone can see, but not listed on public timelines
   stream_entries:
-    pinned: Pinned toot
+    pinned: Pinned post
     reblogged: boosted
     sensitive_content: Sensitive content
   tags:
@@ -1386,7 +1409,7 @@ en:
       explanation:
         disable: You can no longer login to your account or use it in any other way, but your profile and other data remains intact.
         sensitive: Your uploaded media files and linked media will be treated as sensitive.
-        silence: You can still use your account but only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you.
+        silence: You can still use your account but only people who are already following you will see your posts on this server, and you may be excluded from various public listings. However, others may still manually follow you.
         suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed, but we will retain some data to prevent you from evading the suspension.
       get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}.
       review_server_policies: Review server policies
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 64b7ccfc7..3031acb5a 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -26,6 +26,7 @@ eo:
       Ĝi estas uzata por frataraj celoj kaj ĝi ne devus esti blokita krom se vi volas bloki la tutan servilon, tiuokaze vi devus uzi domajnan blokadon.
     learn_more: Lerni pli
     privacy_policy: Privateca politiko
+    rules: Reguloj de la servilo
     see_whats_happening: Vidi kio okazas
     server_stats: Servo statuso
     source_code: Fontkodo
@@ -71,7 +72,6 @@ eo:
       other: Mesaĝoj
     posts_tab_heading: Mesaĝoj
     posts_with_replies: Mesaĝoj kaj respondoj
-    reserved_username: La uzantnomo estas rezervita
     roles:
       admin: Administranto
       bot: Roboto
@@ -136,11 +136,11 @@ eo:
       memorialize: Ŝanĝi al memoro
       memorialized: Memorita
       moderation:
-        active: Aktivaj
+        active: Aktiva
         all: Ĉio
         pending: Pritraktata
-        silenced: Silentigitaj
-        suspended: Haltigitaj
+        silenced: Silentigita
+        suspended: Haltigita
         title: Kontrolado
       moderation_notes: Kontrolaj notoj
       most_recent_activity: Lasta ago
@@ -173,6 +173,7 @@ eo:
         staff: Teamo
         user: Uzanto
       search: Serĉi
+      search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno
       search_same_ip: Aliaj uzantoj kun la sama IP
       sensitive: Tikla
       sensitized: markita tikla
@@ -222,6 +223,7 @@ eo:
         disable_user: Malebligi uzanton
         enable_custom_emoji: Ebligi Propran Emoĝion
         enable_user: Ebligi uzanton
+        memorialize_account: Memorigu Konton
         promote_user: Promocii Uzanton
         remove_avatar_user: Forigi profilbildon
         reopen_report: Remalfermi signalon
@@ -230,6 +232,8 @@ eo:
         sensitive_account: Marki tikla la aŭdovidaĵojn de via konto
         silence_account: Silentigi konton
         suspend_account: Haltigi konton
+        unassigned_report: Malatribui Raporton
+        unsensitive_account: Malmarku la amaskomunikilojn en via konto kiel sentemaj
         unsilence_account: Malsilentigi konton
         unsuspend_account: Malhaltigi konton
         update_announcement: Ĝisdatigi anoncon
@@ -237,43 +241,33 @@ eo:
         update_domain_block: Ĝigdatigi domajnan blokadon
         update_status: Ĝisdatigi staton
       actions:
-        assigned_to_self_report: "%{name} asignis signalon %{target} al si mem"
-        change_email_user: "%{name} ŝanĝis retadreson de uzanto %{target}"
-        confirm_user: "%{name} konfirmis retadreson de uzanto %{target}"
-        create_account_warning: "%{name} sendis averton al %{target}"
-        create_announcement: "%{name} kreis novan anoncon %{target}"
-        create_custom_emoji: "%{name} alŝutis novan emoĝion %{target}"
-        create_domain_allow: "%{name} aldonis domajnon %{target} al la blanka listo"
-        create_domain_block: "%{name} blokis domajnon %{target}"
-        create_email_domain_block: "%{name} blokis retpoŝtan domajnon %{target}"
-        create_ip_block: "%{name} kreis regulon por IP %{target}"
-        demote_user: "%{name} degradis uzanton %{target}"
-        destroy_announcement: "%{name} forigis anoncon %{target}"
-        destroy_custom_emoji: "%{name} neniigis la emoĝion %{target}"
-        destroy_domain_allow: "%{name} forigis domajnon %{target} el la blanka listo"
-        destroy_domain_block: "%{name} malblokis domajnon %{target}"
-        destroy_email_domain_block: "%{name} malblokis retpoŝtan domajnon %{target}"
-        destroy_ip_block: "%{name} forigis regulon por IP %{target}"
-        destroy_status: "%{name} forigis mesaĝojn de %{target}"
-        disable_2fa_user: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}"
-        disable_custom_emoji: "%{name} malebligis emoĝion %{target}"
-        disable_user: "%{name} malebligis ensaluton por uzanto %{target}"
-        enable_custom_emoji: "%{name} ebligis emoĝion %{target}"
-        enable_user: "%{name} ebligis ensaluton por uzanto %{target}"
-        memorialize_account: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
-        promote_user: "%{name} plirangigis uzanton %{target}"
-        remove_avatar_user: "%{name} forigis profilbildon de %{target}"
-        reopen_report: "%{name} remalfermis signalon %{target}"
-        reset_password_user: "%{name} restarigis pasvorton de uzanto %{target}"
-        resolve_report: "%{name} solvis signalon %{target}"
-        silence_account: "%{name} kaŝis la konton de %{target}"
-        suspend_account: "%{name} haltigis la konton de %{target}"
-        unassigned_report: "%{name} malasignis signalon %{target}"
-        unsilence_account: "%{name} malkaŝis la konton de %{target}"
-        unsuspend_account: "%{name} malhaltigis la konton de %{target}"
-        update_announcement: "%{name} ĝisdatigis anoncon %{target}"
-        update_custom_emoji: "%{name} ĝisdatigis emoĝion %{target}"
-        update_status: "%{name} ĝisdatigis mesaĝon de %{target}"
+        assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem"
+        change_email_user_html: "%{name} ŝanĝis retadreson de uzanto %{target}"
+        confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}"
+        create_account_warning_html: "%{name} sendis averton al %{target}"
+        create_announcement_html: "%{name} kreis novan anoncon %{target}"
+        create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}"
+        create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo"
+        create_domain_block_html: "%{name} blokis domajnon %{target}"
+        create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}"
+        create_ip_block_html: "%{name} kreis regulon por IP %{target}"
+        demote_user_html: "%{name} degradis uzanton %{target}"
+        destroy_announcement_html: "%{name} forigis anoncon %{target}"
+        destroy_custom_emoji_html: "%{name} neniigis la emoĝion %{target}"
+        destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo"
+        destroy_domain_block_html: "%{name} malblokis domajnon %{target}"
+        destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}"
+        destroy_ip_block_html: "%{name} forigis regulon por IP %{target}"
+        destroy_status_html: "%{name} forigis mesaĝojn de %{target}"
+        disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}"
+        disable_custom_emoji_html: "%{name} malebligis emoĝion %{target}"
+        disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}"
+        enable_custom_emoji_html: "%{name} ebligis emoĝion %{target}"
+        enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}"
+        memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
+        promote_user_html: "%{name} plirangigis uzanton %{target}"
+        remove_avatar_user_html: "%{name} forigis profilbildon de %{target}"
+        reopen_report_html: "%{name} remalfermis signalon %{target}"
       deleted_status: "(forigita mesaĝo)"
       empty: Neniu protokolo trovita.
       filter_by_action: Filtri per ago
@@ -288,10 +282,12 @@ eo:
       new:
         create: Krei anoncon
         title: Nova anonco
+      publish: Publikigi
       published_msg: Anonco sukcese publikigita!
       scheduled_for: Planigita je %{time}
       scheduled_msg: Anonco planigita por publikigo!
       title: Anoncoj
+      unpublish: Malpublikigi
       unpublished_msg: Anonco sukcese malpublikigita!
       updated_msg: Anonco sukcese ĝisdatigis!
     custom_emojis:
@@ -336,7 +332,6 @@ eo:
       feature_profile_directory: Profilujo
       feature_registrations: Registriĝoj
       feature_relay: Federacia ripetilo
-      feature_spam_check: Kontraŭ-spamo
       feature_timeline_preview: Templinio antaŭvidi
       features: Funkcioj
       hidden_service: Federacio kun kaŝitaj servoj
@@ -376,6 +371,7 @@ eo:
           silence: Kaŝi
           suspend: Haltigi
         title: Nova domajna blokado
+      obfuscate: Malklara domajna nomo
       private_comment: Privata komento
       public_comment: Publika komento
       reject_media: Malakcepti aŭdovidajn dosierojn
@@ -410,8 +406,16 @@ eo:
         create: Aldoni domajnon
         title: Nova blokado de retadresa domajno
       title: Nigra listo de retadresaj domajnoj
+    follow_recommendations:
+      language: Por la lingvo
+      status: Stato
+      suppress: Subpremita sekvu rekomendojn
+      suppressed: Subpremita
+      title: Rekomendoj de sekvado
     instances:
       by_domain: Domajno
+      delivery:
+        warning: Averto
       delivery_available: Liverado disponeblas
       empty: Neniuj domajnoj trovitaj.
       known_accounts:
@@ -490,6 +494,8 @@ eo:
       comment:
         none: Nenio
       created_at: Signalita
+      forwarded: Plusendita
+      forwarded_to: Plusendita al %{domain}
       mark_as_resolved: Marki solvita
       mark_as_unresolved: Marki nesolvita
       notes:
@@ -509,6 +515,11 @@ eo:
       unassign: Malasigni
       unresolved: Nesolvitaj
       updated_at: Ĝisdatigita
+    rules:
+      add_new: Aldoni regulon
+      delete: Forigi
+      edit: Redakti la regulon
+      title: Reguloj de la servilo
     settings:
       activity_api_enabled:
         desc_html: Sumo de lokaj mesaĝoj, aktivaj uzantoj, kaj novaj registriĝoj laŭsemajne
@@ -529,8 +540,6 @@ eo:
         users: Al ensalutintaj lokaj uzantoj
       domain_blocks_rationale:
         title: Montri la kialon
-      enable_bootstrap_timeline_accounts:
-        title: Ebligi dekomencajn sekvantojn por novaj uzantoj
       hero:
         desc_html: Montrata en la ĉefpaĝo. Almenaŭ 600x100px rekomendita. Kiam ne agordita, la bildeto de la servilo estos uzata
         title: Kapbildo
@@ -581,8 +590,6 @@ eo:
         desc_html: Vi povas skribi vian propran privatecan politikon, viajn uzkondiĉojn aŭ aliajn leĝaĵojn. Vi povas uzi HTML-etikedojn
         title: Propraj uzkondiĉoj
       site_title: Nomo de la servilo
-      spam_check_enabled:
-        title: Kontraŭ-spamo aŭtomatige
       thumbnail:
         desc_html: Uzata por antaŭvidoj per OpenGraph kaj per API. 1200x630px rekomendita
         title: Bildeto de la servilo
@@ -593,6 +600,8 @@ eo:
       trends:
         desc_html: Publike montri antaŭe kontrolitajn kradvortojn, kiuj nune furoras
         title: Furoraj kradvortoj
+    site_uploads:
+      delete: Forigi elŝutitan dosieron
     statuses:
       back_to_account: Reveni al konta paĝo
       batch:
@@ -607,13 +616,16 @@ eo:
       no_status_selected: Neniu mesaĝo estis ŝanĝita ĉar neniu estis elektita
       title: Mesaĝoj de la konto
       with_media: Kun aŭdovidaĵoj
+    system_checks:
+      database_schema_check:
+        message_html: Estas pritraktataj datumbazaj migradoj. Bonvolu ekzekuti ilin por certigi, ke la apliko kondutas kiel atendite
+      rules_check:
+        action: Administri servilajn regulojn
+        message_html: Vi ne difinis iujn servilajn regulojn.
     tags:
       accounts_today: Unikaj uzoj hodiaŭ
       accounts_week: Unikaj uzoj je ĉi tiu semajno
       breakdown: Disigo de la hodiaŭa uzo per fonto
-      context: Kunteksto
-      directory: En la adresaro
-      in_directory: "%{count} en adresaro"
       last_active: Laste aktiva
       most_popular: La plej populara
       most_recent: Plej lasta
@@ -646,6 +658,7 @@ eo:
     add_new: Krei alinomon
     created_msg: Kreis novan alinomon sukcese. Vi povas inici la transloki el la malnovan konton nun.
     deleted_msg: Forigis la alinomon sukcese. Transloki el tiu konto al ĉi tiu ne plu eblos.
+    empty: Vi havas neniun kaŝnomon.
     remove: Malligili alinomon
   appearance:
     advanced_web_interface: Altnivela retpaĝa interfaco
@@ -685,8 +698,10 @@ eo:
       prefix_invited_by_user: "@%{name} invitigi vin aligiĝi ĉi tiu servilo de Mastodon!"
       prefix_sign_up: Registriĝi ĉe Mastodon hodiaŭ!
     didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi?
+    dont_have_your_security_key: Ne havas vi vian sekurecan ŝlosilon?
     forgot_password: Pasvorto forgesita?
     invalid_reset_password_token: Ĵetono por restarigi pasvorton nevalida aŭ eksvalida. Bonvolu peti novan.
+    link_to_webauth: Uzi vian sekurecan ŝlosilon
     login: Ensaluti
     logout: Elsaluti
     migrate_account: Movi al alia konto
@@ -708,6 +723,7 @@ eo:
       functional: Via konto estas plene funkcianta.
     too_fast: Formularo sendita tro rapide, klopodu denove.
     trouble_logging_in: Ĝeni ensaluti?
+    use_security_key: Uzi sekurecan ŝlosilon
   authorize_follow:
     already_following: Vi jam sekvas tiun konton
     already_requested: Vi jam sendis peton de sekvado al ĉi tiu konto
@@ -731,6 +747,7 @@ eo:
   date:
     formats:
       default: "%Y-%m-%d "
+      with_month_name: "%e-a de %B %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}h"
@@ -816,7 +833,7 @@ eo:
       invalid_irreversible: Nemalfarebla filtrado funkcias nur por hejma aŭ sciiga kuntekstoj
     index:
       delete: Forigi
-      empty: Vi ne havas filtriloj.
+      empty: Vi havas neniun filtrilon.
       title: Filtriloj
     new:
       title: Aldoni novan filtrilon
@@ -956,6 +973,8 @@ eo:
       body: "%{name} diskonigis vian mesaĝon:"
       subject: "%{name} diskonigis vian mesaĝon"
       title: Nova diskonigo
+    status:
+      subject: "%{name} ĵus afiŝita"
   notifications:
     email_events: Eventoj por retpoŝtaj sciigoj
     email_events_hint: 'Elekti la eventojn pri kioj vi volas ricevi sciigojn:'
@@ -971,7 +990,12 @@ eo:
           thousand: m
           trillion: Dn
   otp_authentication:
+    code_hint: Enmetu la kodon kreitan de via aŭtentiga aplikaĵo por konfirmi
     enable: Ebligi
+    instructions_html: "<strong>Skanu ĉi tiun QR-kodon per Google Authenticator aŭ per simila aplikaĵo en via poŝtelefono</strong>. De tiam, la aplikaĵo kreos nombrojn, kiujn vi devos enmeti."
+    manual_instructions: 'Se vi ne povas skani la QR-kodon kaj bezonas enmeti ĝin mane, jen la tut-teksta sekreto:'
+    setup: Agordi
+    wrong_code: La enmetita kodo estis nevalida! Ĉu la servila tempo kaj la aparata tempo ĝustas?
   pagination:
     newer: Pli nova
     next: Sekva
@@ -1000,7 +1024,7 @@ eo:
   relationships:
     activity: Konta aktiveco
     dormant: Dormanta
-    follow_selected_followers: Forigu selektitajn sekvantojn
+    follow_selected_followers: Sekvi selektitajn sekvantojn
     followers: Sekvantoj
     following: Sekvatoj
     invited: Invitita
@@ -1097,6 +1121,7 @@ eo:
     profile: Profilo
     relationships: Sekvatoj kaj sekvantoj
     two_factor_authentication: Dufaktora aŭtentigo
+    webauthn_authentication: Sekurecaj ŝlosiloj
   statuses:
     attached:
       audio:
@@ -1137,6 +1162,7 @@ eo:
     sign_in_to_participate: Ensaluti por partopreni en la konversacio
     title: "%{name}: “%{quote}”"
     visibilities:
+      direct: Rekta
       private: Montri nur al sekvantoj
       private_long: Montri nur al sekvantoj
       public: Publika
@@ -1168,9 +1194,11 @@ eo:
     enabled_success: Dufaktora aŭtentigo sukcese ebligita
     generate_recovery_codes: Krei realirajn kodojn
     lost_recovery_codes: Realiraj kodoj permesas rehavi aliron al via konto se vi perdis vian telefonon. Se vi perdis viajn realirajn kodojn, vi povas rekrei ilin ĉi tie. Viaj malnovaj realiraj kodoj iĝos eksvalidaj.
+    methods: Metodoj de dufaktora aŭtentigo
     recovery_codes: Realiraj kodoj
     recovery_codes_regenerated: Realiraj kodoj sukcese rekreitaj
     recovery_instructions_html: Se vi perdas aliron al via telefono, vi povas uzi unu el la subaj realiraj kodoj por rehavi aliron al via konto. <strong>Konservu realirajn kodojn sekure</strong>. Ekzemple, vi povas printi ilin kaj konservi ilin kun aliaj gravaj dokumentoj.
+    webauthn: Sekurecaj ŝlosiloj
   user_mailer:
     backup_ready:
       explanation: Vi petis kompletan arkivon de via Mastodon-konto. Ĝi nun pretas por elŝutado!
@@ -1212,8 +1240,8 @@ eo:
       title: Bonvenon, %{name}!
   users:
     follow_limit_reached: Vi ne povas sekvi pli ol %{limit} homo(j)
-    invalid_email: La retadreso estas nevalida
     invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo
+    invalid_sign_in_token: Nevalida sekureca kodo
     otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email}
     seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retadresaj agordoj ne estas disponeblaj.
     signed_in_as: 'Ensalutinta kiel:'
@@ -1221,5 +1249,12 @@ eo:
     explanation_html: 'Vi povas <strong>pruvi, ke vi estas la posedanto de la ligiloj en viaj profilaj metadatumoj</strong>. Por fari tion, la alligita retejo devas enhavi ligilon reen al via Mastodon-profilo. La religilo <strong>devas</strong> havi la atributon <code>rel="me"</code>. Ne gravas la teksta enhavo de la religilo. Jen ekzemplo:'
     verification: Kontrolo
   webauthn_credentials:
+    add: Aldoni novan sekurecan ŝlosilon
+    create:
+      success: Via sekureca ŝlosilo estis sukcese aldonita.
     delete: Forigi
+    delete_confirmation: Ĉu vi certas, ke vi volas forigi ĉi tiun sekurecan ŝlosilon?
+    destroy:
+      success: Via sekureca ŝlosilo estis sukcese forigita.
+    invalid_credential: Nevalida sekureca ŝlosilo
     registered_on: Registrigita je %{date}
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index 32e079074..d4ac238d0 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -1,7 +1,7 @@
 ---
 es-AR:
   about:
-    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Si tenés una cuenta en cualquier parte del fediverso, podés interactuar con ellos.
+    about_hashtag_html: Estos son mensajes públicos etiquetados con <strong>#%{hashtag}</strong>. Si tenés una cuenta en cualquier parte del fediverso, podés interactuar con ellos.
     about_mastodon_html: 'La red social del futuro: ¡sin publicidad, sin vigilancia corporativa, con diseño ético y descentralización! ¡Con Mastodon vos sos el dueño de tus datos!'
     about_this: Acerca de Mastodon
     active_count_after: activo
@@ -11,12 +11,12 @@ es-AR:
     apps: Aplicaciones móviles
     apps_platforms: Usá Mastodon desde iOS, Android y otras plataformas
     browse_directory: Explorá el directorio de perfiles y filtrá por intereses
-    browse_local_posts: Explorá un flujo en tiempo real de toots públicos en este servidor
-    browse_public_posts: Explorá un flujo en tiempo real de toots públicos en Mastodon
+    browse_local_posts: Explorá un flujo en tiempo real de mensajes públicos en este servidor
+    browse_public_posts: Explorá un flujo en tiempo real de mensajes públicos en Mastodon
     contact: Contacto
     contact_missing: No establecido
     contact_unavailable: No disponible
-    discover_users: Descubrir usuarios
+    discover_users: Descubrí usuarios
     documentation: Documentación
     federation_hint_html: Con una cuenta en %{instance} vas a poder seguir a cuentas de cualquier servidor de Mastodon y más allá.
     get_apps: Probá una aplicación móvil
@@ -26,22 +26,24 @@ es-AR:
       Se usa para fines federativos y no debe ser bloqueado a menos que quieras bloquear toda la instancia, en cuyo caso deberías usar un bloqueo de dominio.
     learn_more: Aprendé más
     privacy_policy: Política de privacidad
+    rules: Reglas del servidor
+    rules_html: 'Abajo hay un resumen de las reglas que tenés que seguir si querés tener una cuenta en este servidor de Mastodon:'
     see_whats_happening: Esto es lo que está pasando ahora
     server_stats: 'Estadísticas del servidor:'
     source_code: Código fuente
     status_count_after:
-      one: toot
-      other: toots
+      one: mensaje
+      other: mensajes
     status_count_before: Que enviaron
     tagline: Seguí a tus amigos y descubrí nueva gente
     terms: Términos del servicio
     unavailable_content: Servidores moderados
     unavailable_content_description:
       domain: Servidor
-      reason: Razón
+      reason: Motivo
       rejecting_media: 'Los archivos de medios de este servidor no van a ser procesados y no se mostrarán miniaturas, lo que requiere un clic manual hacia el archivo original:'
       rejecting_media_title: Medios filtrados
-      silenced: 'Los toots de estos servidores se ocultarán en las líneas temporales y conversaciones públicas, y no se generarán notificaciones de las interacciones de sus usuarios, a menos que los estés siguiendo:'
+      silenced: 'Los mensajes de estos servidores se ocultarán en las líneas temporales y conversaciones públicas, y no se generarán notificaciones de las interacciones de sus usuarios, a menos que los estés siguiendo:'
       silenced_title: Servidores silenciados
       suspended: 'No se procesarán, almacenarán o intercambiarán datos de estos servidores, haciendo imposible cualquier interacción o comunicación con los usuarios de estos servidores:'
       suspended_title: Servidores suspendidos
@@ -53,7 +55,7 @@ es-AR:
     what_is_mastodon: "¿Qué es Mastodon?"
   accounts:
     choices_html: 'Recomendados de %{name}:'
-    endorsements_hint: Podés recomendar a cuentas que seguís desde la interface web, y van a aparecer acá.
+    endorsements_hint: Podés recomendar, desde la interface web, a cuentas que seguís, y van a aparecer acá.
     featured_tags_hint: Podés destacar etiquetas específicas que se mostrarán acá.
     follow: Seguir
     followers:
@@ -74,11 +76,10 @@ es-AR:
     pin_errors:
       following: Ya tenés que estar siguiendo a la cuenta que querés recomendar
     posts:
-      one: Toot
-      other: Toots
-    posts_tab_heading: Toots
-    posts_with_replies: Toots y respuestas
-    reserved_username: El nombre de usuario está reservado
+      one: Mensaje
+      other: Mensajes
+    posts_tab_heading: Mensajes
+    posts_with_replies: Mensajes y respuestas
     roles:
       admin: Administrador
       bot: Bot
@@ -129,7 +130,7 @@ es-AR:
       enabled: Habilitada
       enabled_msg: Se descongeló exitosamente la cuenta de %{username}
       followers: Seguidores
-      follows: Seguidores
+      follows: Siguiendo
       header: Cabecera
       inbox_url: Dirección web de la bandeja de entrada
       invite_request_text: Motivos para unirte
@@ -147,15 +148,15 @@ es-AR:
       memorialized: Cuenta conmemorativa
       memorialized_msg: "%{username} se convirtió exitosamente en una cuenta conmemorativa"
       moderation:
-        active: Activa
+        active: Activas
         all: Todas
-        pending: Pendiente
+        pending: Pendientes
         silenced: Silenciadas
         suspended: Suspendidas
         title: Moderación
       moderation_notes: Notas de moderación
       most_recent_activity: Actividad más reciente
-      most_recent_ip: Direcciones IP más recientes
+      most_recent_ip: Dirección IP más reciente
       no_account_selected: No se cambió ninguna cuenta ya que ninguna fue seleccionada
       no_limits_imposed: Sin límites impuestos
       not_subscribed: No suscripto
@@ -165,15 +166,15 @@ es-AR:
       protocol: Protocolo
       public: Pública
       push_subscription_expires: La suscripción push vence
-      redownload: Recargar perfil
-      redownloaded_msg: Se actualizó exitosamente el perfil de %{username} desde el origen
+      redownload: Refrescar perfil
+      redownloaded_msg: Se refrescó exitosamente el perfil de %{username} desde el origen
       reject: Rechazar
       reject_all: Rechazar todas
       rejected_msg: Se rechazó exitosamente la solicitud de registro de %{username}
       remove_avatar: Quitar avatar
       remove_header: Quitar cabecera
       removed_avatar_msg: Se quitó exitosamente el avatar de %{username}
-      removed_header_msg: Se quitó exitosamente el encabezado de %{username}
+      removed_header_msg: Se quitó exitosamente la cabecera de %{username}
       resend_confirmation:
         already_confirmed: Este usuario ya está confirmado
         send: Reenviar correo electrónico de confirmación
@@ -195,10 +196,10 @@ es-AR:
       shared_inbox_url: Dirección web de la bandeja de entrada compartida
       show:
         created_reports: Denuncias hechas
-        targeted_reports: Denunciado por otros
+        targeted_reports: Denunciada por otros
       silence: Limitar
       silenced: Limitadas
-      statuses: Toots
+      statuses: Mensajes
       subscribe: Suscribirse
       suspended: Suspendidas
       suspension_irreversible: Se eliminaron irreversiblemente los datos de esta cuenta. Podés dejar de suspenderla para hacerla utilizable, pero no se recuperarán los datos que tenía anteriormente.
@@ -229,6 +230,7 @@ es-AR:
         create_domain_block: Crear bloqueo de dominio
         create_email_domain_block: Crear bloqueo de dominio de correo electrónico
         create_ip_block: Crear regla de dirección IP
+        create_unavailable_domain: Crear dominio no disponible
         demote_user: Descender usuario
         destroy_announcement: Eliminar anuncio
         destroy_custom_emoji: Eliminar emoji personalizado
@@ -236,7 +238,8 @@ es-AR:
         destroy_domain_block: Eliminar bloqueo de dominio
         destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico
         destroy_ip_block: Eliminar regla de dirección IP
-        destroy_status: Eliminar toot
+        destroy_status: Eliminar mensaje
+        destroy_unavailable_domain: Eliminar dominio no disponible
         disable_2fa_user: Deshabilitar 2FA
         disable_custom_emoji: Deshabilitar emoji personalizado
         disable_user: Deshabilitar usuario
@@ -258,49 +261,51 @@ es-AR:
         update_announcement: Actualizar anuncio
         update_custom_emoji: Actualizar emoji personalizado
         update_domain_block: Actualizar bloque de dominio
-        update_status: Actualizar toot
+        update_status: Actualizar mensaje
       actions:
-        assigned_to_self_report: "%{name} se asignó la denuncia %{target} a sí"
-        change_email_user: "%{name} cambió la dirección de correo electrónico del usuario %{target}"
-        confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}"
-        create_account_warning: "%{name} envió una advertencia a %{target}"
-        create_announcement: "%{name} creó el nuevo anuncio %{target}"
-        create_custom_emoji: "%{name} subió nuevo emoji %{target}"
-        create_domain_allow: "%{name} permitió la federación con el dominio %{target}"
-        create_domain_block: "%{name} bloqueó el dominio %{target}"
-        create_email_domain_block: "%{name} bloqueó el dominio de correo electrónico %{target}"
-        create_ip_block: "%{name} creó la regla para la dirección IP %{target}"
-        demote_user: "%{name} bajó de nivel al usuario %{target}"
-        destroy_announcement: "%{name} eliminó el anuncio %{target}"
-        destroy_custom_emoji: "%{name} destruyó el emoji %{target}"
-        destroy_domain_allow: "%{name} no permitió la federación con el dominio %{target}"
-        destroy_domain_block: "%{name} desbloqueó el dominio %{target}"
-        destroy_email_domain_block: "%{name} desbloqueó el dominio de correo electrónico %{target}"
-        destroy_ip_block: "%{name} eliminó la regla para la dirección IP %{target}"
-        destroy_status: "%{name} eliminó el toot de %{target}"
-        disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}"
-        disable_custom_emoji: "%{name} deshabilitó el emoji %{target}"
-        disable_user: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
-        enable_custom_emoji: "%{name} habilitó el emoji %{target}"
-        enable_user: "%{name} habilitó el inicio de sesión para el usuario %{target}"
-        memorialize_account: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa"
-        promote_user: "%{name} promovió al usuario %{target}"
-        remove_avatar_user: "%{name} quitó el avatar de %{target}"
-        reopen_report: "%{name} reabrió la denuncia %{target}"
-        reset_password_user: "%{name} cambió la contraseña del usuario %{target}"
-        resolve_report: "%{name} resolvió la denuncia %{target}"
-        sensitive_account: "%{name} marcó los medios de %{target} como sensibles"
-        silence_account: "%{name} silenció la cuenta de %{target}"
-        suspend_account: "%{name} suspendió la cuenta de %{target}"
-        unassigned_report: "%{name} desasignó la denuncia %{target}"
-        unsensitive_account: "%{name} desmarcó los medios de %{target} como sensibles"
-        unsilence_account: "%{name} quitó el silenciado de la cuenta de %{target}"
-        unsuspend_account: "%{name} quitó la suspensión de la cuenta de %{target}"
-        update_announcement: "%{name} actualizó el anuncio %{target}"
-        update_custom_emoji: "%{name} actualizó el emoji %{target}"
-        update_domain_block: "%{name} actualizó el bloqueo de dominio para %{target}"
-        update_status: "%{name} actualizó el toot de %{target}"
-      deleted_status: "[toot eliminado]"
+        assigned_to_self_report_html: "%{name} se asignó la denuncia %{target} a sí"
+        change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}"
+        confirm_user_html: "%{name} confirmó la dirección de correo del usuario %{target}"
+        create_account_warning_html: "%{name} envió una advertencia a %{target}"
+        create_announcement_html: "%{name} creó el nuevo anuncio %{target}"
+        create_custom_emoji_html: "%{name} subió nuevo emoji %{target}"
+        create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}"
+        create_domain_block_html: "%{name} bloqueó el dominio %{target}"
+        create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}"
+        create_ip_block_html: "%{name} creó la regla para la dirección IP %{target}"
+        create_unavailable_domain_html: "%{name} detuvo la entrega al dominio %{target}"
+        demote_user_html: "%{name} bajó de nivel al usuario %{target}"
+        destroy_announcement_html: "%{name} eliminó el anuncio %{target}"
+        destroy_custom_emoji_html: "%{name} destruyó el emoji %{target}"
+        destroy_domain_allow_html: "%{name} no permitió la federación con el dominio %{target}"
+        destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}"
+        destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}"
+        destroy_ip_block_html: "%{name} eliminó la regla para la dirección IP %{target}"
+        destroy_status_html: "%{name} eliminó el mensaje de %{target}"
+        destroy_unavailable_domain_html: "%{name} reanudó la entrega al dominio %{target}"
+        disable_2fa_user_html: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}"
+        disable_custom_emoji_html: "%{name} deshabilitó el emoji %{target}"
+        disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
+        enable_custom_emoji_html: "%{name} habilitó el emoji %{target}"
+        enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
+        memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa"
+        promote_user_html: "%{name} promovió al usuario %{target}"
+        remove_avatar_user_html: "%{name} quitó el avatar de %{target}"
+        reopen_report_html: "%{name} reabrió la denuncia %{target}"
+        reset_password_user_html: "%{name} cambió la contraseña del usuario %{target}"
+        resolve_report_html: "%{name} resolvió la denuncia %{target}"
+        sensitive_account_html: "%{name} marcó los medios de %{target} como sensibles"
+        silence_account_html: "%{name} silenció la cuenta de %{target}"
+        suspend_account_html: "%{name} suspendió la cuenta de %{target}"
+        unassigned_report_html: "%{name} desasignó la denuncia %{target}"
+        unsensitive_account_html: "%{name} desmarcó los medios de %{target} como sensibles"
+        unsilence_account_html: "%{name} quitó el silenciado de la cuenta de %{target}"
+        unsuspend_account_html: "%{name} quitó la suspensión de la cuenta de %{target}"
+        update_announcement_html: "%{name} actualizó el anuncio %{target}"
+        update_custom_emoji_html: "%{name} actualizó el emoji %{target}"
+        update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}"
+        update_status_html: "%{name} actualizó el mensaje de %{target}"
+      deleted_status: "[mensaje eliminado]"
       empty: No se encontraron registros.
       filter_by_action: Filtrar por acción
       filter_by_user: Filtrar por usuario
@@ -314,10 +319,12 @@ es-AR:
       new:
         create: Crear anuncio
         title: Nuevo anuncio
+      publish: Publicar
       published_msg: "¡Anuncio publicado exitosamente!"
       scheduled_for: Programado para %{time}
       scheduled_msg: "¡Anuncio programado para su publicación!"
       title: Anuncios
+      unpublish: Eliminar publicación
       unpublished_msg: "¡Se dejó de publicar el anuncio exitosamente!"
       updated_msg: "¡Anuncio actualizado exitosamente!"
     custom_emojis:
@@ -362,7 +369,6 @@ es-AR:
       feature_profile_directory: Directorio de perfiles
       feature_registrations: Registros
       feature_relay: Relé de federación
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Previsualización de la línea temporal
       features: Funciones
       hidden_service: Federación con servicios ocultos
@@ -395,15 +401,15 @@ es-AR:
       existing_domain_block_html: Ya le aplicaste límites más estrictos a %{name}, por lo que primero necesitás <a href="%{unblock_url}">desbloquearlo</a>.
       new:
         create: Crear bloqueo
-        hint: El bloqueo de dominio no va a prevenir la creación de toots de cuenta en la base de datos, pero se aplicarán métodos específicos de moderación en esas cuentas, retroactiva y automáticamente.
+        hint: El bloqueo de dominio no va a prevenir la creación de mensajes de cuenta en la base de datos, pero se aplicarán métodos específicos de moderación en esas cuentas, retroactiva y automáticamente.
         severity:
-          desc_html: "<strong>Silenciar</strong> hará que los toots de la cuenta sean invisibles a quienes no estén siguiendo esa cuenta. <strong>Suspender</strong> quitará todo el contenido, archivos de medio y datos de perfil de la cuenta. Usá <strong>Ninguno</strong> si simplemente querés rechazar archivos de medios."
+          desc_html: "<strong>Silenciar</strong> hará que los mensajes de la cuenta sean invisibles a quienes no estén siguiendo esa cuenta. <strong>Suspender</strong> quitará todo el contenido, archivos de medio y datos de perfil de la cuenta. Usá <strong>Ninguno</strong> si simplemente querés rechazar archivos de medios."
           noop: Ninguno
           silence: Silenciar
           suspend: Suspender
         title: Nuevo bloqueo de dominio
       obfuscate: Obfuscar nombre de dominio
-      obfuscate_hint: Obfusca parcialmente el nombre de dominio en la lista si el anuncio de la lista de limitaciones de dominio está habilitado
+      obfuscate_hint: Obfusca parcialmente el nombre de dominio en la lista, si el anuncio de la lista de limitaciones de dominio está habilitado
       private_comment: Comentario privado
       private_comment_hint: Comentario sobre la limitación de este dominio, para uso interno de los moderadores.
       public_comment: Comentario público
@@ -440,9 +446,34 @@ es-AR:
         create: Agregar dominio
         title: Bloquear nuevo dominio de correo electrónico
       title: Dominios bloqueados de correo electrónico
+    follow_recommendations:
+      description_html: "<strong>Las recomendaciones de cuentas para seguir ayudan a los nuevos usuarios a encontrar rápidamente contenido interesante</strong>. Cuando un usuario no ha interactuado con otros lo suficiente como para formar recomendaciones personalizadas de seguimiento, se recomiendan estas cuentas, en su lugar. Se recalculan diariamente a partir de una mezcla de cuentas con las interacciones más recientes y el mayor número de seguidores para un idioma determinado."
+      language: Por idioma
+      status: Estado
+      suppress: Eliminar recomendación de cuentas para seguir
+      suppressed: Eliminado
+      title: Recomendaciones de cuentas para seguir
+      unsuppress: Restablecer recomendaciones de cuentas para seguir
     instances:
+      back_to_all: Todos
+      back_to_limited: Limitados
+      back_to_warning: Advertencia
       by_domain: Dominio
+      delivery:
+        all: Todos
+        clear: Limpiar errores de entrega
+        restart: Reiniciar entrega
+        stop: Detener entrega
+        title: Entrega
+        unavailable: No disponible
+        unavailable_message: Entrega no disponible
+        warning: Advertencia
+        warning_message:
+          one: Falla de entrega %{count} día
+          other: Falla de entrega %{count} días
       delivery_available: La entrega está disponible
+      delivery_error_days: Días de error de entrega
+      delivery_error_hint: Si la entrega no es posible durante %{count} días, se marcará automáticamente como no entregable.
       empty: No se encontraron dominios.
       known_accounts:
         one: "%{count} cuenta conocida"
@@ -457,7 +488,7 @@ es-AR:
       total_blocked_by_us: Bloqueada por nosotros
       total_followed_by_them: Seguidas por ellos
       total_followed_by_us: Seguidas por nosotros
-      total_reported: Denuncias sobre ellos
+      total_reported: Denuncias sobre ellas
       total_storage: Adjuntos
     invites:
       deactivate_all: Desactivar todas
@@ -489,11 +520,11 @@ es-AR:
     relays:
       add_new: Agregar nuevo relé
       delete: Eliminar
-      description_html: Un <strong>relé de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a cuentas de servidores remotos.
+      description_html: Un <strong>relé de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de mensajes públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a cuentas de servidores remotos.
       disable: Deshabilitar
       disabled: Deshabilitado
       enable: Habilitar
-      enable_hint: Una vez habilitado, tu servidor se suscribirá a todos los toots públicos desde este relé, y comenzará a enviar los toots públicos de este servidor al relé.
+      enable_hint: Una vez habilitado, tu servidor se suscribirá a todos los mensajes públicos desde este relé, y comenzará a enviar los mensajes públicos de este servidor al relé.
       enabled: Habilitado
       inbox_url: Dirección web del relé
       pending: Esperando aprobación del relé
@@ -541,14 +572,21 @@ es-AR:
       title: Denuncias
       unassign: Desasignar
       unresolved: No resueltas
-      updated_at: Actualizada
+      updated_at: Actualizadas
+    rules:
+      add_new: Agregar regla
+      delete: Eliminar
+      description_html: Aunque la mayoría afirma haber leído y aceptado los términos del servicio, normalmente la gente no los revisa hasta después de que surge un problema. <strong>Hacé que sea más fácil ver las reglas de tu servidor, de un vistazo, disponiéndolas en una lista por puntos.</strong> Tratá de hacer cada regla corta y sencilla, pero no de dividirlas en muchos temas individuales.
+      edit: Editar regla
+      empty: Aún no se han definido las reglas del servidor.
+      title: Reglas del servidor
     settings:
       activity_api_enabled:
-        desc_html: Conteos de toots publicados localmente, usuarios activos y nuevos registros en tandas semanales
-        title: Publicar estadísticas agregadas sobre la actividad del usuario
+        desc_html: Conteos de mensajes publicados localmente, usuarios activos y nuevos registros en tandas semanales
+        title: Publicar estadísticas agregadas sobre la actividad del usuario en la API
       bootstrap_timeline_accounts:
-        desc_html: Separar múltiples nombres de usuario con coma. Sólo funcionarán las cuentas locales y desbloqueadas. Predeterminadamente, cuando está vacío todos los administradores locales.
-        title: Seguimientos predeterminados para usuarios nuevos
+        desc_html: Separar múltiples nombres de usuario con coma. Sólo funcionarán las cuentas locales y desbloqueadas. Predeterminadamente, cuando está vacío se trata de todos los administradores locales.
+        title: Recomendar estas cuentas a usuarios nuevos
       contact_information:
         email: Correo electrónico de negocios
         username: Nombre de usuario de contacto
@@ -565,9 +603,6 @@ es-AR:
         users: A usuarios locales con sesiones abiertas
       domain_blocks_rationale:
         title: Mostrar razonamiento
-      enable_bootstrap_timeline_accounts:
-        desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal principal no comience vacía
-        title: Habilitar seguimientos predeterminados para nuevas cuentas
       hero:
         desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor
         title: Imagen de portada
@@ -576,7 +611,7 @@ es-AR:
         title: Imagen de la mascota
       peers_api_enabled:
         desc_html: Nombres de dominio que este servidor encontró en el fediverso
-        title: Publicar lista de servidores descubiertos
+        title: Publicar lista de servidores descubiertos en la API
       preview_sensitive_media:
         desc_html: Las previsualizaciones de enlaces en otros sitios web mostrarán una miniatura incluso si el medio está marcado como contenido sensible
         title: Mostrar medios sensibles en previsualizaciones de OpenGraph
@@ -615,15 +650,12 @@ es-AR:
         desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que definen tu servidor. Podés usar etiquets HTML
         title: Información extendida personalizada
       site_short_description:
-        desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo.
+        desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe qué es Mastodon y qué hace especial a este servidor en un solo párrafo.
         title: Descripción corta del servidor
       site_terms:
-        desc_html: Podés escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Podés usar etiquetas HTML
-        title: Términos de servicio personalizados
+        desc_html: Podés escribir tus propias políticas de privacidad, términos del servicio u otras cuestiones legales. Podés usar etiquetas HTML
+        title: Términos del servicio personalizados
       site_title: Nombre del servidor
-      spam_check_enabled:
-        desc_html: Mastodon puede denunciar automáticamente cuentas que envían mensajes no solicitados de forma repetida. Podrían haber falsos positivos.
-        title: Automatización antispam
       thumbnail:
         desc_html: Usado para previsualizaciones vía OpenGraph y APIs. Se recomienda 1200x630 píxeles
         title: Miniatura del servidor
@@ -651,36 +683,42 @@ es-AR:
       media:
         title: Medios
       no_media: Sin medios
-      no_status_selected: No se cambió ningún toot ya que ninguno fue seleccionado
-      title: Toots de la cuenta
+      no_status_selected: No se cambió ningún mensaje, ya que ninguno fue seleccionado
+      title: Mensajes de la cuenta
       with_media: Con medios
+    system_checks:
+      database_schema_check:
+        message_html: Hay migraciones pendientes de la base de datos. Por favor, ejecutalas para asegurarte de que la aplicación funciona según lo esperado
+      rules_check:
+        action: Administrar reglas del servidor
+        message_html: No definiste ninguna regla del servidor.
+      sidekiq_process_check:
+        message_html: No hay ningún proceso Sidekiq en ejecución para la/s cola/s %{value}. Por favor, revisá tu configuración de Sidekiq
     tags:
       accounts_today: Usos únicos de hoy
       accounts_week: Usos únicos esta semana
       breakdown: Desglose del consumo de hoy por fuentes
-      context: Contexto
-      directory: En el directorio
-      in_directory: "%{count} en el directorio"
-      last_active: Última actividad
+      last_active: Usadas recientemente
       most_popular: Lo más popular
-      most_recent: Lo más reciente
+      most_recent: Creadas recientemente
       name: Etiqueta
       review: Estado de revisión
       reviewed: Revisado
       title: Etiquetas
       trending_right_now: En tendencia ahora mismo
-      unique_uses_today: "%{count} toots hoy"
-      unreviewed: No revisado
-      updated_msg: La configuración de letiqueta se actualizó exitosamente
+      unique_uses_today: "%{count} mensajes hoy"
+      unreviewed: No revisada
+      updated_msg: La configuración de la etiqueta se actualizó exitosamente
     title: Administración
     warning_presets:
       add_new: Agregar nuevo
       delete: Eliminar
       edit_preset: Editar preajuste de advertencia
+      empty: Aún no ha definido ningún preajuste de advertencia.
       title: Administrar preajustes de advertencia
   admin_mailer:
     new_pending_account:
-      body: Abajo están los detalles de la nueva cuenta. Podés aprobar o rechazar esta aplicación.
+      body: Abajo están los detalles de la nueva cuenta. Podés aprobar o rechazar esta solicitud.
       subject: Nueva cuenta para revisión en %{instance} (%{username})
     new_report:
       body: "%{reporter} denunció a %{target}"
@@ -694,7 +732,7 @@ es-AR:
     created_msg: El nuevo alias se creó exitosamente. Ahora podés empezar la mudanza desde la cuenta vieja.
     deleted_msg: Eliminaste el alias exitosamente. La mudanza de esa cuenta a esta ya no será posible.
     empty: No tenés alias.
-    hint_html: Si querés mudarte desde otra cuenta a esta, acá podés crear un alias, el cual es necesario antes de empezar a mudar seguidores de la cuenta vieja a esta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta anterior</strong>.
+    hint_html: Si querés mudarte desde otra cuenta a esta, acá podés crear un alias, el cual es necesario antes de empezar a mudar seguidores de la cuenta vieja a ésta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta anterior</strong>.
     remove: Desvincular alias
   appearance:
     advanced_web_interface: Interface web avanzada
@@ -707,14 +745,14 @@ es-AR:
       guide_link: https://es.crowdin.com/project/mastodon
       guide_link_text: Todos pueden contribuir.
     sensitive_content: Contenido sensible
-    toot_layout: Diseño del toot
+    toot_layout: Diseño del mensaje
   application_mailer:
     notification_preferences: Cambiar configuración de correo electrónico
     salutation: "%{name}:"
     settings: 'Cambiar configuración de correo electrónico: %{link}'
     view: 'Vista:'
     view_profile: Ver perfil
-    view_status: Ver estado
+    view_status: Ver mensaje
   applications:
     created: Aplicación creada exitosamente
     destroyed: Aplicación eliminada exitosamente
@@ -733,7 +771,7 @@ es-AR:
     description:
       prefix_invited_by_user: "¡@%{name} te invita para que te unás a este servidor de Mastodon!"
       prefix_sign_up: "¡Unite a Mastodon hoy!"
-      suffix: Con una cuenta vas a poder seguir gente, escribir toots e intercambiar mensajes ¡con usuarios de cualquier servidor de Mastodon y más!
+      suffix: Con una cuenta vas a poder seguir a otras cuentas, escribir mensajes e intercambiarlos con usuarios de cualquier servidor de Mastodon, ¡y mucho más!
     didnt_get_confirmation: "¿No recibiste el correo electrónico de confirmación?"
     dont_have_your_security_key: "¿No tenés tu llave de seguridad?"
     forgot_password: "¿Te olvidaste la contraseña?"
@@ -808,14 +846,14 @@ es-AR:
       x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: La información que ingresaste no es correcta
-    confirm_password: Ingresa tu contraseña actual para verificar tu identidad
+    confirm_password: Ingresá tu contraseña actual para verificar tu identidad
     confirm_username: Ingresá tu nombre de usuario para confirmar el procedimiento
     proceed: Eliminar cuenta
     success_msg: Tu cuenta fue eliminada exitosamente
     warning:
       before: 'Antes de proceder, por favor, leé estas notas cuidadosamente:'
       caches: El contenido que fue almacenado en caché por otros servidores puede persistir
-      data_removal: Tus toots y el resto de los datos se eliminarán definitivamente
+      data_removal: Tus mensajes y el resto de los datos se eliminarán definitivamente
       email_change_html: Podés <a href="%{path}">cambiar tu dirección de correo electrónico</a> sin eliminar tu cuenta
       email_contact_html: Si todavía no llegó, podés escribir a <a href="mailto:%{email}">%{email}</a> para pedir ayuda
       email_reconfirmation_html: Si no te llegó el correo de confirmación, podés <a href="%{path}">solicitarlo de nuevo</a>
@@ -845,13 +883,13 @@ es-AR:
     '503': La página no se pudo cargar debido a un fallo temporal del servidor.
     noscript_html: Para usar la aplicación web de Mastodon, por favor, activá Javascript. Alternativamente, probá alguna de las <a href="%{apps_path}">aplicaciones nativas</a> de Mastodon para tu plataforma.
   existing_username_validator:
-    not_found: no pudo encontrar un usuario local con ese nombre de usuario
+    not_found: no se pudo encontrar un usuario local con ese nombre de usuario
     not_found_multiple: no se pudo encontrar a %{usernames}
   exports:
     archive_takeout:
       date: Fecha
       download: Descargá tu archivo historial
-      hint_html: Podés solicitar un archivo historial de tus <strong>toots y medios subidos</strong>. Los datos exportados estarán en formato "ActivityPub", legibles por cualquier software compatible. Podés solicitar un archivo historial cada 7 días.
+      hint_html: Podés solicitar un archivo historial de tus <strong>mensajes y medios subidos</strong>. Los datos exportados estarán en formato "ActivityPub", legibles por cualquier software compatible. Podés solicitar un archivo historial cada 7 días.
       in_progress: Compilando tu archivo historial...
       request: Solicitá tu archivo historial
       size: Tamaño
@@ -866,11 +904,11 @@ es-AR:
     add_new: Agregar nueva
     errors:
       limit: Alcanzaste el máximo de etiquetas destacadas
-    hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus toots públicos específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
+    hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Son etiquetas que se muestran de forma permanente en tu perfil público y permiten a los usuarios navegar por tus mensajes públicos que contengan esas etiquetas. Las etiquetas destacadas son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
   filters:
     contexts:
       account: Perfiles
-      home: Inicio y listas
+      home: Principal y listas
       notifications: Notificaciones
       public: Líneas temporales públicas
       thread: Conversaciones
@@ -917,7 +955,7 @@ es-AR:
     i_am_html: Soy %{username} en %{service}.
     identity: Identidad
     inactive: Inactiva
-    publicize_checkbox: 'Y tooteá esto:'
+    publicize_checkbox: 'Y enviá esto:'
     publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}"
     remove: Quitar prueba de cuenta
     removed: Se quitó la prueba de cuenta exitosamente
@@ -968,7 +1006,7 @@ es-AR:
       limit: Alcanzaste el máximo de listas
   media_attachments:
     validations:
-      images_and_video: No se puede adjuntar un video a un toot que ya contenga imágenes
+      images_and_video: No se puede adjuntar un video a un mensaje que ya contenga imágenes
       not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Intentá de nuevo en un rato!
       too_many: No se pueden adjuntar más de 4 archivos
   migrations:
@@ -994,11 +1032,11 @@ es-AR:
     redirecting_to: Tu cuenta está siendo redirigida a %{acct}.
     set_redirect: Establecer redireccionamiento
     warning:
-      backreference_required: La nueva cuenta debe ser configurada primero para hacer referencia a esta
+      backreference_required: La cuenta nueva debe ser configurada primero para hacer referencia a ésta
       before: 'Antes de proceder, por favor, leé estas notas cuidadosamente:'
       cooldown: Después de mudarte hay un período de receso intermedio durante el cual no podrás volver a mudarte
       disabled_account: Tu cuenta actual no será completamente utilizable luego de esto. Sin embargo, tendrás acceso a la exportación de datos así como a la reactivación.
-      followers: Esta acción mudará a todos los seguidores de la cuenta actual a la nueva cuenta
+      followers: Esta acción mudará a todos los seguidores de la cuenta actual a la cuenta nueva
       only_redirect_html: Alternativamente, podés <a href="%{path}">poner solamente un redireccionamiento en tu perfil</a>.
       other_data: No se mudarán otros datos automáticamente
       redirect: El perfil de tu cuenta actual se actualizará con un aviso de redireccionamiento y será excluido de las búsquedas
@@ -1021,8 +1059,8 @@ es-AR:
         other: "%{count} nuevas notificaciones desde tu última visita \U0001F418"
       title: En tu ausencia...
     favourite:
-      body: 'Tu toot fue marcado como favorito por %{name}:'
-      subject: "%{name} marcó tu toot como favorito"
+      body: 'Tu mensaje fue marcado como favorito por %{name}:'
+      subject: "%{name} marcó tu mensaje como favorito"
       title: Nuevo favorito
     follow:
       body: "¡%{name} te está siguiendo!"
@@ -1038,10 +1076,14 @@ es-AR:
       body: 'Fuiste mencionado por %{name} en:'
       subject: Fuiste mencionado por %{name}
       title: Nueva mención
+    poll:
+      subject: Terminó una encuesta de %{name}
     reblog:
-      body: "%{name} retooteó tu toot:"
-      subject: "%{name} retooteó tu toot"
-      title: Nuevo retoot
+      body: "%{name} adhirió a tu mensaje:"
+      subject: "%{name} adhirió a tu mensaje"
+      title: Nueva adhesión
+    status:
+      subject: "%{name} acaba de enviar un mensaje"
   notifications:
     email_events: Eventos para notificaciones por correo electrónico
     email_events_hint: 'Seleccioná los eventos para los que querés recibir notificaciones:'
@@ -1083,7 +1125,7 @@ es-AR:
       too_many_options: no puede contener más de %{max} elementos
   preferences:
     other: Otras opciones
-    posting_defaults: Configuración predeterminada de publicaciones
+    posting_defaults: Configuración predeterminada de mensajes
     public_timelines: Líneas temporales públicas
   reactions:
     errors:
@@ -1095,19 +1137,19 @@ es-AR:
     follow_selected_followers: Seguir a los seguidores seleccionados
     followers: Seguidores
     following: Siguiendo
-    invited: Invitado
+    invited: Invitados
     last_active: Última actividad
-    most_recent: Más reciente
-    moved: Mudada
-    mutual: Mutua
-    primary: Principal
+    most_recent: Más recientes
+    moved: Mudadas
+    mutual: Mutuales
+    primary: Principales
     relationship: Relación
     remove_selected_domains: Quitar todos los seguidores de los dominios seleccionados
     remove_selected_followers: Quitar los seguidores seleccionados
     remove_selected_follows: Dejar de seguir a los usuarios seleccionados
     status: Estado de la cuenta
   remote_follow:
-    acct: Ingresá tu usuario@dominio desde el que querés seguir
+    acct: Ingresá tu usuario@dominio desde el que querés continuar
     missing_resource: No se pudo encontrar la dirección web de redireccionamiento requerida para tu cuenta
     no_account_html: "¿No tenés cuenta? Podés <a href='%{sign_up_path}' target='_blank'>registrarte acá</a>"
     proceed: Proceder para seguir
@@ -1116,16 +1158,16 @@ es-AR:
   remote_interaction:
     favourite:
       proceed: Proceder para marcar como favorito
-      prompt: 'Vas a marcar este toot como favorito:'
+      prompt: 'Vas a marcar este mensaje como favorito:'
     reblog:
-      proceed: Proceder para retootear
-      prompt: 'Vas a retootear este toot:'
+      proceed: Proceder para adherir
+      prompt: 'Vas a adherir a este mensaje:'
     reply:
       proceed: Proceder para responder
-      prompt: 'Vas a responder a este toot:'
+      prompt: 'Vas a responder a este mensaje:'
   scheduled_statuses:
-    over_daily_limit: Superaste el límite de %{limit} toots programados para ese día
-    over_total_limit: Superaste el límite de %{limit} toots programados
+    over_daily_limit: Superaste el límite de %{limit} mensajes programados para ese día
+    over_total_limit: Superaste el límite de %{limit} mensajes programados
     too_soon: La fecha programada debe estar en el futuro
   sessions:
     activity: Última actividad
@@ -1170,7 +1212,7 @@ es-AR:
     title: Sesiones
   settings:
     account: Cuenta
-    account_settings: Configuración de la cuenta
+    account_settings: Config. de la cuenta
     aliases: Alias de la cuenta
     appearance: Apariencia
     authorized_apps: Aplicaciones autorizadas
@@ -1190,8 +1232,6 @@ es-AR:
     relationships: Seguimientos
     two_factor_authentication: Autenticación de dos factores
     webauthn_authentication: Llaves de seguridad
-  spam_check:
-    spam_detected: Este es un informe automatizado. Se detectó spam.
   statuses:
     attached:
       audio:
@@ -1204,21 +1244,21 @@ es-AR:
       video:
         one: "%{count} video"
         other: "%{count} videos"
-    boosted_from_html: Retooteado desde %{acct_link}
+    boosted_from_html: Adherido desde %{acct_link}
     content_warning: 'Advertencia de contenido: %{warning}'
     disallowed_hashtags:
       one: 'contenía una etiqueta no permitida: %{tags}'
       other: 'contenía las etiquetas no permitidas: %{tags}'
     errors:
-      in_reply_not_found: El toot al que intentás responder no existe.
+      in_reply_not_found: El mensaje al que intentás responder no existe.
     language_detection: Detectar idioma automáticamente
-    open_in_web: Abrir en web
+    open_in_web: Abrir en la web
     over_character_limit: se excedió el límite de %{max} caracteres
     pin_errors:
-      limit: Ya fijaste el número máximo de toots
-      ownership: No se puede fijar el toot de otra persona
-      private: Los toots no públicos no se pueden fijar
-      reblog: No se puede fijar un retoot
+      limit: Ya fijaste el número máximo de mensajes
+      ownership: No se puede fijar el mensaje de otra cuenta
+      private: Los mensajes que no son públicos no se pueden fijar
+      reblog: No se puede fijar una adhesión
     poll:
       total_people:
         one: "%{count} persona"
@@ -1234,6 +1274,7 @@ es-AR:
     sign_in_to_participate: Iniciá sesión para participar en la conversación
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Directo
       private: Sólo a seguidores
       private_long: Sólo mostrar a seguidores
       public: Público
@@ -1241,8 +1282,8 @@ es-AR:
       unlisted: No listado
       unlisted_long: Todos pueden ver, pero no está listado en las líneas temporales públicas
   stream_entries:
-    pinned: Toot fijado
-    reblogged: retooteó
+    pinned: Mensaje fijado
+    reblogged: adhirió a este mensaje
     sensitive_content: Contenido sensible
   tags:
     does_not_match_previous_name: no coincide con el nombre anterior
@@ -1253,8 +1294,8 @@ es-AR:
 
       <ul>
       <li><em>Información básica de la cuenta</em>: Si te registrás en este servidor, se te va a pedir un nombre de usuario, una dirección de correo electrónico y una contraseña. También podés ingresar información adicional de perfil como un nombre para mostrar y una biografía, y subir un avatar y una imagen de cabecera. El nombre de usuario, nombre para mostrar, biografía, avatar e imagen de cabecera siempre son visibles públicamente.</li>
-      <li><em>Toots, seguimiento y otra información pública</em>: La lista de gente a la que seguís es mostrada públicamente, al igual que la de tus seguidores. Cuando enviás un mensaje, se almacenan la fecha y hora, así como la aplicación desde la cual enviaste el mensaje. Los mensajes pueden contener archivos adjuntos de medios, como imágenes y videos. Los toots públicos y no listados están técnicamente disponibles para todos. Cuando destacás un toot en tu perfil, eso también se considera información disponible públicamente. Tus toots son entregados a tus seguidores; en algunos casos significa que son entregados a diferentes servidores y las copias son almacenadas allí. Cuando eliminás toots, esto también afecta a tus seguidores. La acción de retootear o marcar como favorito otro toot es siempre pública.</li>
-      <li><em>Toots directos y sólo para seguidores</em>: Todos los toots se almacenan y procesan en el servidor. Los toots sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esos toots sólo a las personas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen tus seguidores. Podés cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración. <em>Por favor, tené en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes</em>, y que los destinatarios pueden tomar capturas de pantalla, copiarlos o volver a compartirlos de alguna otra manera. <em>No compartas ninguna información peligrosa en Mastodon.</em></li>
+      <li><em>Mensajes, seguimiento y otra información pública</em>: La lista de cuentas a las que seguís es mostrada públicamente, al igual que la de tus seguidores. Cuando enviás un mensaje, se almacenan la fecha y hora, así como la aplicación desde la cual enviaste el mensaje. Los mensajes pueden contener archivos adjuntos de medios, como imágenes y videos. Los mensajes públicos y no listados están técnicamente disponibles para todos. Cuando destacás un mensaje en tu perfil, eso también se considera información disponible públicamente. Tus mensajes son entregados a tus seguidores; en algunos casos significa que son entregados a diferentes servidores y las copias son almacenadas allí. Cuando eliminás mensajes, esto también afecta a tus seguidores. La acción de adherir o marcar como favorito otro mensaje es siempre pública.</li>
+      <li><em>Mensajes directos y sólo para seguidores</em>: Todos los mensajes se almacenan y procesan en el servidor. Los mensajes sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esos mensajes sólo a las cuentas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen tus seguidores. Podés cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración. <em>Por favor, tené en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes</em>, y que los destinatarios pueden tomar capturas de pantalla, copiarlos o volver a compartirlos de alguna otra manera. <em>No compartas ninguna información peligrosa en Mastodon.</em></li>
       <li><em>Direcciones IP y otros metadatos</em>: Cuando iniciás sesión, registramos la dirección IP desde dónde lo estás haciendo, así como el nombre de tu navegador web. Todos los inicios de sesiones están disponibles para tu revisión y revocación en la configuración. La última dirección IP usada se almacena hasta por 12 meses. También podemos conservar los registros del servidor que incluyen la dirección IP de cada solicitud a nuestro servidor.</li>
       </ul>
 
@@ -1265,9 +1306,9 @@ es-AR:
       <p>Toda la información que recolectamos de vos puede ser usada de las siguientes maneras:</p>
 
       <ul>
-      <li>Para proporcionar la funcionalidad principal de Mastodon. Sólo podés interactuar con el contenido de otras personas y publicar tu propio contenido cuando hayás iniciado sesión. Por ejemplo, podés seguir a otras personas para ver sus mensajes combinados en tu propia línea temporal personalizada.</li>
+      <li>Para proporcionar la funcionalidad principal de Mastodon. Sólo podés interactuar con el contenido de otras cuentas y publicar tu propio contenido cuando hayás iniciado sesión. Por ejemplo, podés seguir a otras cuentas para ver sus mensajes combinados en tu propia línea temporal personalizada.</li>
       <li>Para ayudar a la moderación de la comunidad, por ejemplo, comparando tu dirección IP con otras conocidas para determinar la evasión de prohibiciones u otras violaciones.</li>
-      <li>La dirección de correo electrónico que nos proporcionés podría usarse para enviarte información, notificaciones sobre otras personas que interactúen con tu contenido o para enviarte mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.</li>
+      <li>La dirección de correo electrónico que nos proporcionés podría usarse para enviarte información, notificaciones sobre otras cuentas que interactúen con tu contenido o para enviarte mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.</li>
       </ul>
 
       <hr class="spacer" />
@@ -1287,7 +1328,7 @@ es-AR:
       <li>Conservar las direcciones IP asociadas a los usuarios registrados, por no más de 12 meses.</li>
       </ul>
 
-      <p>Podés solicitar y descargar un archivo historial de tu contenido, incluyendo tus toots, archivos adjuntos de medios, avatar e imagen de cabecera.</p>
+      <p>Podés solicitar y descargar un archivo historial de tu contenido, incluyendo tus mensajes, archivos adjuntos de medios, avatar e imagen de cabecera.</p>
 
       <p>Podés eliminar tu cuenta de forma irreversible en cualquier momento.</p>
 
@@ -1295,7 +1336,7 @@ es-AR:
 
       <h3 id="cookies">¿Usamos cookies?</h3>
 
-      <p>Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere a la unidad de almacenamiento de tu computadora a través de tu navegador web (si así lo permitís). Estas cookies permiten al sitio reconocer tu navegador web y, si tenés una cuenta registrada, asociarla con la misma.</p>
+      <p>Sí. Las cookies son pequeños archivos que un sitio web o su proveedor de servicios transfiere a la unidad de almacenamiento de tu computadora a través de tu navegador web (si así lo permitís). Estas cookies permiten al sitio reconocer tu navegador web y, si tenés una cuenta registrada, asociarla con la misma.</p>
 
       <p>Usamos cookies para entender y guardar tu configuración para futuras visitas.</p>
 
@@ -1354,7 +1395,7 @@ es-AR:
     webauthn: Llaves de seguridad
   user_mailer:
     backup_ready:
-      explanation: Solicitado un resguardo completo de tu cuenta de Mastodon. ¡Ya está listo para descargar!
+      explanation: Solicitaste un resguardo completo de tu cuenta de Mastodon. ¡Ya está listo para descargar!
       subject: Tu archivo historial está listo para descargar
       title: Descargar archivo historial
     sign_in_token:
@@ -1367,7 +1408,7 @@ es-AR:
       explanation:
         disable: Ya no podés iniciar sesión en tu cuenta o usarla de alguna manera, pero tu perfil y otros datos permanecen intactos.
         sensitive: Tus archivos de medios subidos y enlaces de medios serán tratados como sensibles.
-        silence: Todavía podés usar tu cuenta, pero sólo las personas que ya te estén siguiendo verán tus toots en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otras personas pueden seguirte manualmente.
+        silence: Todavía podés usar tu cuenta, pero sólo las cuentas que ya te estén siguiendo verán tus mensajes en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otras cuentas pueden seguirte manualmente.
         suspend: Ya no podés usar tu cuenta; tu perfil y otros datos ya no son accesibles. Todavía podés iniciar sesión para solicitar un resguardo de tus datos hasta que los mismos sean totalmente quitados, pero retendremos ciertos datos para prevenirte de evadir la suspensión.
       get_in_touch: Podés responder a esta dirección de correo electrónico para ponerte en contacto con la administración de %{instance}.
       review_server_policies: Revisar las políticas del servidor
@@ -1375,7 +1416,7 @@ es-AR:
       subject:
         disable: Tu cuenta %{acct} fue congelada
         none: Advertencia para %{acct}
-        sensitive: Los toots con medios de tu cuenta %{acct} fueron marcados como sensibles
+        sensitive: Los mensajes con medios de tu cuenta %{acct} fueron marcados como sensibles
         silence: Tu cuenta %{acct} fue limitada
         suspend: Tu cuenta %{acct} fue suspendida
       title:
@@ -1386,14 +1427,14 @@ es-AR:
         suspend: Cuenta suspendida
     welcome:
       edit_profile_action: Configurar perfil
-      edit_profile_step: Podés personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre para mostrar y más cosas. Si querés revisar a tus nuevos seguidores antes de que se les permita seguirte, podés bloquear tu cuenta (esto es, hacerla privada).
+      edit_profile_step: Podés personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre para mostrar y más cosas. Si querés revisar a tus nuevos seguidores antes de que se les permita seguirte, podés hacer tu cuenta privada.
       explanation: Aquí hay algunos consejos para empezar
-      final_action: Empezar a tootear
-      final_step: ¡Empezá a tootear! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local y con etiquetas. Capaz que quieras presentarte al mundo con la etiqueta "#presentación".
+      final_action: Empezá a enviar mensajes
+      final_step: ¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local, y con etiquetas. Capaz que quieras presentarte al mundo con la etiqueta "#presentación".
       full_handle: Tu nombre de usuario completo
       full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor.
       review_preferences_action: Cambiar configuración
-      review_preferences_step: Asegurate de establecer tu configuración, como qué tipo de correos electrónicos te gustaría recibir, o qué nivel de privacidad te gustaría que sea el predeterminado para tus toots. Si no tenés mareos, podrías elegir habilitar la reproducción automática de GIFs.
+      review_preferences_step: Asegurate de establecer tu configuración, como qué tipo de correos electrónicos te gustaría recibir, o qué nivel de privacidad te gustaría que sea el predeterminado para tus mensajes. Si no sufrís de mareos, podrías elegir habilitar la reproducción automática de GIFs.
       subject: Bienvenido a Mastodon
       tip_federated_timeline: La línea temporal federada es una línea contínua global de la red de Mastodon. Pero sólo incluye gente que tus vecinos están siguiendo, así que no es completa.
       tip_following: Predeterminadamente seguís al / a los administrador/es de tu servidor. Para encontrar más gente interesante, revisá las lineas temporales local y federada.
@@ -1402,11 +1443,8 @@ es-AR:
       tips: Consejos
       title: "¡Bienvenido a bordo, %{name}!"
   users:
-    blocked_email_provider: No está permitido este proveedor de correo electrónico
     follow_limit_reached: No podés seguir a más de %{limit} cuentas
     generic_access_help_html: "¿Tenés problemas para acceder a tu cuenta? Podés ponerte en contacto con %{email} para obtener ayuda"
-    invalid_email: La dirección de correo electrónico no es válida
-    invalid_email_mx: Parece que esta dirección de correo electrónico no existe
     invalid_otp_token: Código de dos factores no válido
     invalid_sign_in_token: Código de seguridad no válido
     otp_lost_help_html: Si perdiste al acceso a ambos, podés ponerte en contacto con %{email}
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
new file mode 100644
index 000000000..0890512e8
--- /dev/null
+++ b/config/locales/es-MX.yml
@@ -0,0 +1,1392 @@
+---
+es-MX:
+  about:
+    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en cualquier parte del fediverso.
+    about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!'
+    about_this: Información
+    active_count_after: activo
+    active_footnote: Usuarios Activos Mensuales (UAM)
+    administered_by: 'Administrado por:'
+    apps: Aplicaciones móviles
+    apps_platforms: Utiliza Mastodon desde iOS, Android y otras plataformas
+    browse_directory: Navega por el directorio de perfiles y filtra por intereses
+    browse_local_posts: Explora en vivo los posts públicos de este servidor
+    browse_public_posts: Navega por un transmisión en vivo de publicaciones públicas en Mastodon
+    contact: Contacto
+    contact_missing: No especificado
+    discover_users: Descubrir usuarios
+    documentation: Documentación
+    federation_hint_html: Con una cuenta en %{instance} usted podrá seguir a las personas en cualquier servidor de Mastodon y más allá.
+    get_apps: Probar una aplicación móvil
+    hosted_on: Mastodon hosteado en %{domain}
+    instance_actor_flash: |
+      Esta cuenta es un actor virtual usado para representar al servidor y no a ningún usuario individual.
+      Se usa para fines federativos y no debe ser bloqueado a menos que usted quiera bloquear toda la instancia, en cuyo caso se debe utilizar un bloque de dominio.
+    learn_more: Aprende más
+    privacy_policy: Política de privacidad
+    rules: Normas del servidor
+    rules_html: 'A continuación hay un resumen de las normas que debes seguir si quieres tener una cuenta en este servidor de Mastodon:'
+    see_whats_happening: Ver lo que está pasando
+    server_stats: 'Datos del servidor:'
+    source_code: Código fuente
+    status_count_after:
+      one: estado
+      other: estados
+    status_count_before: Qué han escrito
+    tagline: Seguir a amigos existentes y descubre nuevos
+    terms: Condiciones de servicio
+    unavailable_content: Contenido no disponible
+    unavailable_content_description:
+      domain: Servidor
+      reason: 'Motivo:'
+      rejecting_media: Los archivos multimedia de este servidor no serán procesados y no se mostrarán miniaturas, lo que requiere un clic manual en el otro servidor.
+      rejecting_media_title: Medios filtrados
+      silenced: Las publicaciones de este servidor no se mostrarán en ningún lugar salvo en el Inicio si sigues al autor.
+      silenced_title: Servidores silenciados
+      suspended: No podrás seguir a nadie de este servidor, y ningún dato de este será procesado o almacenado, y no se intercambiarán datos.
+      suspended_title: Servidores suspendidos
+    unavailable_content_html: Mastodon generalmente le permite ver contenido e interactuar con usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se han hecho en este servidor en particular.
+    user_count_after:
+      one: usuario
+      other: usuarios
+    user_count_before: Tenemos
+    what_is_mastodon: "¿Qué es Mastodon?"
+  accounts:
+    choices_html: 'Elecciones de %{name}:'
+    endorsements_hint: Puedes recomendar a gente que sigues desde la interfaz web, y aparecerán allí.
+    featured_tags_hint: Puede presentar hashtags específicos que se mostrarán aquí.
+    follow: Seguir
+    followers:
+      one: Seguidor
+      other: Seguidores
+    following: Siguiendo
+    instance_actor_flash: Esta cuenta es un actor virtual utilizado para representar al servidor en sí mismo y no a ningún usuario individual. Se utiliza para propósitos de la federación y no se debe suspender.
+    joined: Se unió el %{date}
+    last_active: última conexión
+    link_verified_on: La propiedad de este vínculo fue verificada el %{date}
+    media: Multimedia
+    moved_html: "%{name} se ha trasladado a %{new_profile_link}:"
+    network_hidden: Esta información no está disponible
+    never_active: Nunca
+    nothing_here: "¡No hay nada aquí!"
+    people_followed_by: Usuarios a quien %{name} sigue
+    people_who_follow: Usuarios que siguen a %{name}
+    pin_errors:
+      following: Debes estar siguiendo a la persona a la que quieres aprobar
+    posts:
+      one: Toot
+      other: Toots
+    posts_tab_heading: Toots
+    posts_with_replies: Toots con respuestas
+    roles:
+      admin: Administrador
+      group: Grupo
+      moderator: Moderador
+    unavailable: Perfil no disponible
+    unfollow: Dejar de seguir
+  admin:
+    account_actions:
+      action: Realizar acción
+      title: Moderar %{acct}
+    account_moderation_notes:
+      create: Crear
+      created_msg: "¡Nota de moderación creada con éxito!"
+      delete: Borrar
+      destroyed_msg: "¡Nota de moderación destruida con éxito!"
+    accounts:
+      add_email_domain_block: Poner en lista negra el dominio del correo
+      approve: Aprobar
+      approve_all: Aprobar todos
+      approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente
+      are_you_sure: "¿Estás seguro?"
+      by_domain: Dominio
+      change_email:
+        changed_msg: "¡El correo electrónico se ha actualizado correctamente!"
+        current_email: Correo electrónico actual
+        label: Cambiar el correo electrónico
+        new_email: Nuevo correo electrónico
+        submit: Cambiar el correo electrónico
+        title: Cambiar el correo electrónico de %{username}
+      confirm: Confirmar
+      confirmed: Confirmado
+      confirming: Confirmando
+      delete: Eliminar datos
+      deleted: Borrado
+      demote: Degradar
+      destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente
+      disable: Deshabilitar
+      disable_two_factor_authentication: Desactivar autenticación de dos factores
+      disabled: Deshabilitada
+      display_name: Nombre
+      domain: Dominio
+      edit: Editar
+      email: E-mail
+      email_status: E-mail Status
+      enable: Habilitar
+      enabled: Habilitada
+      enabled_msg: Se ha descongelado correctamente la cuenta de %{username}
+      followers: Seguidores
+      follows: Sigue
+      header: Cabecera
+      inbox_url: URL de la bandeja de entrada
+      invite_request_text: Razones para unirse
+      invited_by: Invitado por
+      joined: Unido
+      location:
+        all: Todos
+        remote: Remoto
+        title: Localización
+      login_status: Estado del login
+      media_attachments: Multimedia
+      memorialize: Convertir en memorial
+      memorialized: Cuenta conmemorativa
+      memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa"
+      moderation:
+        active: Activo
+        all: Todos
+        pending: Pendiente
+        silenced: Silenciados
+        suspended: Suspendidos
+        title: Moderación
+      moderation_notes: Notas de moderación
+      most_recent_activity: Actividad más reciente
+      most_recent_ip: IP más reciente
+      no_account_selected: Ninguna cuenta se cambió como ninguna fue seleccionada
+      no_limits_imposed: Sin límites impuestos
+      not_subscribed: No se está suscrito
+      pending: Revisión pendiente
+      perform_full_suspension: Suspender
+      promote: Promocionar
+      protocol: Protocolo
+      public: Público
+      push_subscription_expires: Expiración de la suscripción PuSH
+      redownload: Refrescar avatar
+      redownloaded_msg: Se actualizó correctamente el perfil de %{username} desde el origen
+      reject: Rechazar
+      reject_all: Rechazar todos
+      rejected_msg: La solicitud de registro de %{username} ha sido rechazada con éxito
+      remove_avatar: Eliminar el avatar
+      remove_header: Eliminar cabecera
+      removed_avatar_msg: Se ha eliminado exitosamente la imagen del avatar de %{username}
+      removed_header_msg: Se ha eliminado con éxito la imagen de cabecera de %{username}
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito!"
+      reset: Reiniciar
+      reset_password: Reiniciar contraseña
+      resubscribe: Re-suscribir
+      role: Permisos
+      roles:
+        admin: Administrador
+        moderator: Moderador
+        staff: Personal
+        user: Usuario
+      search: Buscar
+      search_same_email_domain: Otros usuarios con el mismo dominio de correo
+      search_same_ip: Otros usuarios con la misma IP
+      sensitive: Sensible
+      sensitized: marcado como sensible
+      shared_inbox_url: URL de bandeja compartida
+      show:
+        created_reports: Reportes hechos por esta cuenta
+        targeted_reports: Reportes hechos sobre esta cuenta
+      silence: Silenciar
+      silenced: Silenciado
+      statuses: Estados
+      subscribe: Suscribir
+      suspended: Suspendido
+      suspension_irreversible: Los datos de esta cuenta han sido irreversiblemente eliminados. Puedes deshacer la suspensión de la cuenta para hacerla utilizable, pero no recuperará los datos que tenías anteriormente.
+      suspension_reversible_hint_html: La cuenta ha sido suspendida y los datos se eliminarán completamente el %{date}. Hasta entonces, la cuenta puede ser restaurada sin ningún efecto perjudicial. Si desea eliminar todos los datos de la cuenta inmediatamente, puede hacerlo a continuación.
+      time_in_queue: Esperando en cola %{time}
+      title: Cuentas
+      unconfirmed_email: Correo electrónico sin confirmar
+      undo_sensitized: Desmarcar como sensible
+      undo_silenced: Des-silenciar
+      undo_suspension: Des-suspender
+      unsilenced_msg: Se quitó con éxito el límite de la cuenta %{username}
+      unsubscribe: Desuscribir
+      unsuspended_msg: Se quitó con éxito la suspensión de la cuenta de %{username}
+      username: Nombre de usuario
+      view_domain: Ver resumen del dominio
+      warn: Adevertir
+      whitelisted: Añadido a la lista blanca
+    action_logs:
+      action_types:
+        assigned_to_self_report: Asignar Reporte
+        change_email_user: Cambiar Correo Electrónico del Usuario
+        confirm_user: Confirmar Usuario
+        create_account_warning: Crear Advertencia
+        create_announcement: Crear Anuncio
+        create_custom_emoji: Crear Emoji Personalizado
+        create_domain_allow: Crear Permiso de Dominio
+        create_domain_block: Crear Bloqueo de Dominio
+        create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico
+        create_ip_block: Crear regla IP
+        demote_user: Degradar Usuario
+        destroy_announcement: Eliminar Anuncio
+        destroy_custom_emoji: Eliminar Emoji Personalizado
+        destroy_domain_allow: Eliminar Permiso de Dominio
+        destroy_domain_block: Eliminar Bloqueo de Dominio
+        destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico
+        destroy_ip_block: Eliminar regla IP
+        destroy_status: Eliminar Estado
+        disable_2fa_user: Deshabilitar 2FA
+        disable_custom_emoji: Deshabilitar Emoji Personalizado
+        disable_user: Deshabilitar Usuario
+        enable_custom_emoji: Habilitar Emoji Personalizado
+        enable_user: Habilitar Usuario
+        memorialize_account: Transformar en Cuenta Conmemorativa
+        promote_user: Promover Usuario
+        remove_avatar_user: Eliminar Avatar
+        reopen_report: Reabrir Reporte
+        reset_password_user: Restablecer Contraseña
+        resolve_report: Resolver Reporte
+        sensitive_account: Marcar multimedia en tu cuenta como sensible
+        silence_account: Silenciar Cuenta
+        suspend_account: Suspender Cuenta
+        unassigned_report: Desasignar Reporte
+        unsensitive_account: Desmarcar multimedia en tu cuenta como sensible
+        unsilence_account: Dejar de Silenciar Cuenta
+        unsuspend_account: Dejar de Suspender Cuenta
+        update_announcement: Actualizar Anuncio
+        update_custom_emoji: Actualizar Emoji Personalizado
+        update_domain_block: Actualizar el Bloqueo de Dominio
+        update_status: Actualizar Estado
+      actions:
+        assigned_to_self_report_html: "%{name} asignó el informe %{target} a sí mismo"
+        change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}"
+        confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}"
+        create_account_warning_html: "%{name} envió una advertencia a %{target}"
+        create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}"
+        create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}"
+        create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}"
+        create_domain_block_html: "%{name} bloqueó el dominio %{target}"
+        create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}"
+        create_ip_block_html: "%{name} creó una regla para la IP %{target}"
+        demote_user_html: "%{name} degradó al usuario %{target}"
+        destroy_announcement_html: "%{name} eliminó el anuncio %{target}"
+        destroy_custom_emoji_html: "%{name} destruyó emoji %{target}"
+        destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}"
+        destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}"
+        destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}"
+        destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}"
+        destroy_status_html: "%{name} eliminó el estado por %{target}"
+        disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}"
+        disable_custom_emoji_html: "%{name} desactivó el emoji %{target}"
+        disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
+        enable_custom_emoji_html: "%{name} activó el emoji %{target}"
+        enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
+        memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
+        promote_user_html: "%{name} promoción al usuario %{target}"
+        remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
+        reopen_report_html: "%{name} reabrió el informe %{target}"
+        reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}"
+        resolve_report_html: "%{name} resolvió el informe %{target}"
+        sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible"
+        silence_account_html: "%{name} silenció la cuenta de %{target}"
+        suspend_account_html: "%{name} suspendió la cuenta de %{target}"
+        unassigned_report_html: "%{name} des-asignó el informe %{target}"
+        unsensitive_account_html: "%{name} desmarcó la multimedia de %{target} como sensible"
+        unsilence_account_html: "%{name} desilenció la cuenta de %{target}"
+        unsuspend_account_html: "%{name} reactivó la cuenta de %{target}"
+        update_announcement_html: "%{name} actualizó el anuncio %{target}"
+        update_custom_emoji_html: "%{name} actualizó el emoji %{target}"
+        update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}"
+        update_status_html: "%{name} actualizó el estado de %{target}"
+      deleted_status: "(estado borrado)"
+      empty: No se encontraron registros.
+      filter_by_action: Filtrar por acción
+      filter_by_user: Filtrar por usuario
+      title: Log de auditoría
+    announcements:
+      destroyed_msg: "¡Anuncio eliminado con éxito!"
+      edit:
+        title: Editar anuncio
+      empty: No se encontraron anuncios.
+      live: En vivo
+      new:
+        create: Crear anuncio
+        title: Nuevo anuncio
+      publish: Publicar
+      published_msg: "¡Anuncio publicado con éxito!"
+      scheduled_for: Programado para %{time}
+      scheduled_msg: "¡Anuncio programado para su publicación!"
+      title: Anuncios
+      unpublish: Eliminar publicación
+      unpublished_msg: "¡Anuncio despublicado con éxito!"
+      updated_msg: "¡Anuncio actualizado con éxito!"
+    custom_emojis:
+      assign_category: Asignar categoría
+      by_domain: Dominio
+      copied_msg: Copia local del emoji creada con éxito
+      copy: Copiar
+      copy_failed_msg: No se pudo realizar una copia local de ese emoji
+      create_new_category: Crear una nueva categoría
+      created_msg: "¡Emoji creado con éxito!"
+      delete: Borrar
+      destroyed_msg: "¡Emojo destruido con éxito!"
+      disable: Deshabilitar
+      disabled: Desactivado
+      disabled_msg: Se deshabilitó con éxito ese emoji
+      enable: Habilitar
+      enabled: Activado
+      enabled_msg: Se habilitó con éxito ese emoji
+      image_hint: PNG de hasta 50KB
+      list: Lista
+      listed: Listados
+      new:
+        title: Añadir nuevo emoji personalizado
+      not_permitted: No tienes permiso para realizar esta acción
+      overwrite: Sobrescribir
+      shortcode: Código de atajo
+      shortcode_hint: Al menos 2 caracteres, solo caracteres alfanuméricos y guiones bajos
+      title: Emojis personalizados
+      uncategorized: Sin clasificar
+      unlist: No listado
+      unlisted: Sin listar
+      update_failed_msg: No se pudo actualizar ese emoji
+      updated_msg: "¡Emoji actualizado con éxito!"
+      upload: Subir
+    dashboard:
+      authorized_fetch_mode: Modo seguro
+      backlog: trabajos de backlog
+      config: Configuración
+      feature_deletions: Borrados de cuenta
+      feature_invites: Enlaces de invitación
+      feature_profile_directory: Directorio de perfil
+      feature_registrations: Registros
+      feature_relay: Relés de federación
+      feature_timeline_preview: Vista previa de la línea de tiempo
+      features: Características
+      hidden_service: Federación con servicios ocultos
+      open_reports: informes abiertos
+      pending_tags: hashtags esperando revisión
+      pending_users: usuarios esperando por revisión
+      recent_users: Usuarios recientes
+      search: Búsqueda por texto completo
+      single_user_mode: Modo único usuario
+      space: Uso de almacenamiento
+      title: Tablero
+      total_users: usuarios en total
+      trends: Tendencias
+      week_interactions: interacciones esta semana
+      week_users_active: activo esta semana
+      week_users_new: usuarios esta semana
+      whitelist_mode: En la lista blanca
+    domain_allows:
+      add_new: Añadir dominio a la lista blanca
+      created_msg: Dominio añadido a la lista blanca con éxito
+      destroyed_msg: Dominio quitado de la lista blanca con éxito
+      undo: Quitar de la lista blanca
+    domain_blocks:
+      add_new: Añadir nuevo
+      created_msg: El bloque de dominio está siendo procesado
+      destroyed_msg: El bloque de dominio se deshizo
+      domain: Dominio
+      edit: Editar nuevo dominio bloqueado
+      existing_domain_block_html: Ya ha impuesto límites más estrictos a %{name}, necesita <a href="%{unblock_url}">desbloquearlo primero</a>.
+      new:
+        create: Crear bloque
+        hint: El bloque de dominio no prevendrá la creación de entradas de cuenta en la base de datos, pero aplicará retroactiva y automáticamente métodos de moderación específica en dichas cuentas.
+        severity:
+          desc_html: "<strong>Silenciar</strong> hará los posts de la cuenta invisibles a cualquiera que no lo esté siguiendo. <strong>Suspender</strong> eliminará todo el contenido, media, y datos del perfil. Usa <strong>Ninguno</strong> si solo quieres rechazar archivos multimedia."
+          noop: Ninguno
+          silence: Silenciar
+          suspend: Suspender
+        title: Nuevo bloque de dominio
+      obfuscate: Ocultar nombre de dominio
+      obfuscate_hint: Oculta parcialmente el nombre de dominio en la lista si mostrar la lista de limitaciones de dominio está habilitado
+      private_comment: Comentario privado
+      private_comment_hint: Comentario sobre esta limitación de dominio para el uso interno por parte de los moderadores.
+      public_comment: Comentario público
+      public_comment_hint: Comentario sobre esta limitación de dominio para el público en general, si la publicidad de la lista de limitaciones de dominio está habilitada.
+      reject_media: Rechazar archivos multimedia
+      reject_media_hint: Remueve localmente archivos multimedia almacenados para descargar cualquiera en el futuro. Irrelevante para suspensiones
+      reject_reports: Rechazar informes
+      reject_reports_hint: Ignore todos los reportes de este dominio. Irrelevante para suspensiones
+      rejecting_media: rechazar archivos multimedia
+      rejecting_reports: rechazando informes
+      severity:
+        silence: silenciado
+        suspend: suspendido
+      show:
+        affected_accounts:
+          one: Una cuenta en la base de datos afectada
+          other: "%{count} cuentas en la base de datos afectadas"
+        retroactive:
+          silence: Des-silenciar todas las cuentas existentes de este dominio
+          suspend: Des-suspender todas las cuentas existentes de este dominio
+        title: Deshacer bloque de dominio para %{domain}
+        undo: Deshacer
+      undo: Deshacer
+      view: Ver dominio bloqueado
+    email_domain_blocks:
+      add_new: Añadir nuevo
+      created_msg: Dominio de correo añadido a la lista negra con éxito
+      delete: Borrar
+      destroyed_msg: Dominio de correo borrado de la lista negra con éxito
+      domain: Dominio
+      empty: Actualmente no hay dominios de correo electrónico en la lista negra.
+      from_html: de %{domain}
+      new:
+        create: Añadir dominio
+        title: Nueva entrada en la lista negra de correo
+      title: Lista negra de correo
+    follow_recommendations:
+      description_html: "<strong>Las recomendaciones de cuentas a las que seguir ayudan a los nuevos usuarios a encontrar rápidamente contenido interesante</strong>. Cuando un usuario no ha interactuado con otros lo suficiente como para formar recomendaciones personalizadas de seguimiento, estas cuentas se recomiendan en su lugar. Se recalculan diariamente a partir de una mezcla de cuentas con las interacciones más recientes y el mayor número de seguidores para un idioma determinado."
+      language: Para el idioma
+      status: Estado
+      suppress: Eliminar recomendación de cuentas a las que seguir
+      suppressed: Eliminado
+      title: Recomendaciones de cuentas a las que seguir
+      unsuppress: Restaurar recomendaciones de cuentas a las que seguir
+    instances:
+      by_domain: Dominio
+      delivery_available: Entrega disponible
+      empty: No se encontraron dominios.
+      known_accounts:
+        one: "%{count} cuenta conocida"
+        other: "%{count} cuentas conocidas"
+      moderation:
+        all: Todos
+        limited: Limitado
+        title: Moderación
+      private_comment: Comentario privado
+      public_comment: Comentario público
+      title: Instancias conocidas
+      total_blocked_by_us: Bloqueado por nosotros
+      total_followed_by_them: Seguidos por ellos
+      total_followed_by_us: Seguido por nosotros
+      total_reported: Informes sobre ellas
+      total_storage: Archivos multimedia
+    invites:
+      deactivate_all: Desactivar todos
+      filter:
+        all: Todas
+        available: Disponibles
+        expired: Expiradas
+        title: Filtrar
+      title: Invitaciones
+    ip_blocks:
+      add_new: Crear regla
+      created_msg: Nueva regla IP añadida con éxito
+      delete: Eliminar
+      expires_in:
+        '1209600': 2 semanas
+        '15778476': 6 meses
+        '2629746': 1 mes
+        '31556952': 1 año
+        '86400': 1 día
+        '94670856': 3 años
+      new:
+        title: Crear nueva regla IP
+      no_ip_block_selected: No se han cambiado reglas IP ya que no se ha seleccionado ninguna
+      title: Reglas IP
+    pending_accounts:
+      title: Cuentas pendientes (%{count})
+    relationships:
+      title: Relaciones de %{acct}
+    relays:
+      add_new: Añadir un nuevo relés
+      delete: Borrar
+      description_html: Un <strong>relés de federation</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores pequeños y medianos a descubir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manialmente a personas de servidores remotos.
+      disable: Deshabilitar
+      disabled: Deshabilitado
+      enable: Hablitar
+      enable_hint: Una vez conectado, tu servidor se suscribirá a todos los toots públicos de este relés, y comenzará a enviar los toots públicos de este servidor hacia él.
+      enabled: Habilitado
+      inbox_url: URL del relés
+      pending: Esperando la aprobación del relés
+      save_and_enable: Guardar y conectar
+      setup: Preparar una conexión de relés
+      signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el modo de lista blanca estén habilitados
+      status: Estado
+      title: Releses
+    report_notes:
+      created_msg: "¡El registro de la denuncia se ha creado correctamente!"
+      destroyed_msg: "¡El registro de la denuncia se ha borrado correctamente!"
+    reports:
+      account:
+        notes:
+          one: "%{count} nota"
+          other: "%{count} notas"
+        reports:
+          one: "%{count} informe"
+          other: "%{count} informes"
+      action_taken_by: Acción tomada por
+      are_you_sure: "¿Estás seguro?"
+      assign_to_self: Asignármela a mí
+      assigned: Moderador asignado
+      by_target_domain: Dominio de la cuenta reportada
+      comment:
+        none: Ninguno
+      created_at: Denunciado
+      forwarded: Reenviado
+      forwarded_to: Reenviado a %{domain}
+      mark_as_resolved: Marcar como resuelto
+      mark_as_unresolved: Marcar como no resuelto
+      notes:
+        create: Añadir una nota
+        create_and_resolve: Resolver con una nota
+        create_and_unresolve: Reabrir con una nota
+        delete: Eliminar
+        placeholder: Especificar qué acciones se han tomado o cualquier otra novedad respecto a esta denuncia…
+      reopen: Reabrir denuncia
+      report: 'Reportar #%{id}'
+      reported_account: Cuenta reportada
+      reported_by: Reportado por
+      resolved: Resuelto
+      resolved_msg: "¡La denuncia se ha resuelto correctamente!"
+      status: Estado
+      title: Reportes
+      unassign: Desasignar
+      unresolved: No resuelto
+      updated_at: Actualizado
+    rules:
+      add_new: Añadir norma
+      delete: Eliminar
+      description_html: Aunque la mayoría de las afirmaciones de haber leído y aceptado los términos de servicio, normalmente la gente no los lee hasta después de que surja un problema. <strong>Haz que sea más fácil ver las reglas de tu servidor de un vistazo, proporcionándolas en una lista de puntos.</strong> Intenta mantener reglas individuales cortas y sencillas, pero intenta no dividirlas en muchos objetos separados.
+      edit: Editar norma
+      empty: Aún no se han definido reglas del servidor.
+      title: Normas del servidor
+    settings:
+      activity_api_enabled:
+        desc_html: Conteo de estados publicados localmente, usuarios activos, y nuevos registros en  periodos semanales
+        title: Publicar estadísticas locales acerca de actividad de usuario
+      bootstrap_timeline_accounts:
+        desc_html: Separa con comas los nombres de usuario. Solo funcionará para cuentas locales desbloqueadas. Si se deja vacío, se tomará como valor por defecto a todos los administradores locales.
+        title: Seguimientos predeterminados para usuarios nuevos
+      contact_information:
+        email: Correo de trabajo
+        username: Nombre de usuario
+      custom_css:
+        desc_html: Modificar el aspecto con CSS cargado en cada página
+        title: CSS personalizado
+      default_noindex:
+        desc_html: Afecta a todos los usuarios que no han cambiado esta configuración por sí mismos
+        title: Optar por los usuarios fuera de la indexación en los motores de búsqueda por defecto
+      domain_blocks:
+        all: A todos
+        disabled: A nadie
+        title: Mostrar dominios bloqueados
+        users: Para los usuarios locales que han iniciado sesión
+      domain_blocks_rationale:
+        title: Mostrar la razón de ser
+      hero:
+        desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia
+        title: Imagen de portada
+      mascot:
+        desc_html: Mostrado en múltiples páginas. Se recomienda un tamaño mínimo de 293x205px. Cuando no se especifica, se muestra la mascota por defecto
+        title: Imagen de la mascota
+      peers_api_enabled:
+        desc_html: Nombres de dominio que esta instancia ha encontrado en el fediverso
+        title: Publicar lista de instancias descubiertas
+      preview_sensitive_media:
+        desc_html: Los enlaces de vistas previas en otras web mostrarán una miniatura incluso si el medio está marcado como contenido sensible
+        title: Mostrar contenido sensible en previews de OpenGraph
+      profile_directory:
+        desc_html: Permitir que los usuarios puedan ser descubiertos
+        title: Habilitar directorio de perfiles
+      registrations:
+        closed_message:
+          desc_html: Se muestra en la portada cuando los registros están cerrados. Puedes usar tags HTML
+          title: Mensaje de registro cerrado
+        deletion:
+          desc_html: Permite a cualquiera a eliminar su cuenta
+          title: Eliminación de cuenta abierta
+        min_invite_role:
+          disabled: Nadie
+          title: Permitir invitaciones de
+        require_invite_text:
+          desc_html: Cuando los registros requieren aprobación manual, haga obligatorio en la invitaciones el campo "¿Por qué quieres unirte?" en lugar de opcional
+          title: Requiere a los nuevos usuarios rellenar un texto de solicitud de invitación
+      registrations_mode:
+        modes:
+          approved: Se requiere aprobación para registrarse
+          none: Nadie puede registrarse
+          open: Cualquiera puede registrarse
+        title: Modo de registros
+      show_known_fediverse_at_about_page:
+        desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales.
+        title: Mostrar fediverso conocido en la vista previa de la historia
+      show_staff_badge:
+        desc_html: Mostrar un parche de staff en la página de un usuario
+        title: Mostrar parche de staff
+      site_description:
+        desc_html: Párrafo introductorio en la portada y en meta tags. Puedes usar tags HTML, en particular <code>&lt;a&gt;</code> y <code>&lt;em&gt;</code>.
+        title: Descripción de instancia
+      site_description_extended:
+        desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que estén impuestas aparte en tu instancia. Puedes usar tags HTML
+        title: Información extendida personalizada
+      site_short_description:
+        desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. si está vacío, pone por defecto la descripción de la instancia.
+        title: Descripción corta de la instancia
+      site_terms:
+        desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML
+        title: Términos de servicio personalizados
+      site_title: Nombre de instancia
+      thumbnail:
+        desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px
+        title: Portada de instancia
+      timeline_preview:
+        desc_html: Mostrar línea de tiempo pública en la portada
+        title: Previsualización
+      title: Ajustes del sitio
+      trendable_by_default:
+        desc_html: Afecta a etiquetas que no han sido previamente rechazadas
+        title: Permitir que las etiquetas sean tendencia sin revisión previa
+      trends:
+        desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia
+        title: Hashtags de tendencia
+    site_uploads:
+      delete: Eliminar archivo subido
+      destroyed_msg: "¡Carga del sitio eliminada con éxito!"
+    statuses:
+      back_to_account: Volver a la cuenta
+      batch:
+        delete: Eliminar
+        nsfw_off: Marcar contenido como no sensible
+        nsfw_on: Marcar contenido como sensible
+      deleted: Eliminado
+      failed_to_execute: Falló al ejecutar
+      media:
+        title: Multimedia
+      no_media: No hay multimedia
+      no_status_selected: No se cambió ningún estado al no seleccionar ninguno
+      title: Estado de las cuentas
+      with_media: Con multimedia
+    system_checks:
+      database_schema_check:
+        message_html: Hay migraciones pendientes de la base de datos. Por favor, ejecútalas para asegurarte de que la aplicación funciona como debería
+      rules_check:
+        action: Administrar reglas del servidor
+        message_html: No ha definido ninguna regla del servidor.
+      sidekiq_process_check:
+        message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq
+    tags:
+      accounts_today: Usos únicos de hoy
+      accounts_week: Usos únicos esta semana
+      breakdown: Desglose del consumo actual por fuentes
+      last_active: Última actividad
+      most_popular: Más popular
+      most_recent: Más reciente
+      review: Estado de revisión
+      reviewed: Revisado
+      title: Etiquetas
+      trending_right_now: En tendencia ahora mismo
+      unique_uses_today: "%{count} publicando hoy"
+      unreviewed: No revisado
+      updated_msg: Hashtags actualizados exitosamente
+    title: Administración
+    warning_presets:
+      add_new: Añadir nuevo
+      delete: Borrar
+      edit_preset: Editar aviso predeterminado
+      empty: Aún no ha definido ninguna advertencia predefinida.
+      title: Editar configuración predeterminada de avisos
+  admin_mailer:
+    new_pending_account:
+      body: Los detalles de la nueva cuenta están abajos. Puedes aprobar o rechazar esta aplicación.
+      subject: Nueva cuenta para revisión en %{instance} (%{username})
+    new_report:
+      body: "%{reporter} ha reportado a %{target}"
+      body_remote: Alguien de %{domain} a reportado a %{target}
+      subject: Nuevo reporte para la %{instance} (#%{id})
+    new_trending_tag:
+      body: 'El hashtag #%{name} está en tendencia hoy, pero no ha sido revisado previamente. No se mostrará públicamente a menos que lo permita, o simplemente guarde el formulario como para no volver a ver esto.'
+      subject: Nuevo hashtag para revisión en %{instance} (#%{name})
+  aliases:
+    add_new: Crear alias
+    created_msg: El nuevo alias se ha creado correctamente. Ahora puedes empezar el traslado desde la cuenta antigua.
+    deleted_msg: Elimina el alias correctamente. El traslado de esa cuenta a esta ya no será posible.
+    empty: No tienes ningún alias.
+    hint_html: Si quieres migrar de otra cuenta a esta, aquí puedes crear un alias, es necesario proceder antes de empezar a mover seguidores de la cuenta anterior a esta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta antigua</strong>.
+    remove: Desvincular alias
+  appearance:
+    advanced_web_interface: Interfaz web avanzada
+    advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.'
+    animations_and_accessibility: Animaciones y accesibilidad
+    confirmation_dialogs: Diálogos de confirmación
+    discovery: Descubrir
+    localization:
+      body: Mastodon es traducido con la ayuda de voluntarios.
+      guide_link: https://es.crowdin.com/project/mastodon
+      guide_link_text: Todos pueden contribuir.
+    sensitive_content: Contenido sensible
+    toot_layout: Diseño de los toots
+  application_mailer:
+    notification_preferences: Cambiar preferencias de correo electrónico
+    settings: 'Cambiar preferencias de correo: %{link}'
+    view: 'Vista:'
+    view_profile: Ver perfil
+    view_status: Ver estado
+  applications:
+    created: Aplicación creada exitosamente
+    destroyed: Apicación eliminada exitosamente
+    invalid_url: La URL proporcionada es incorrecta
+    regenerate_token: Regenerar token de acceso
+    token_regenerated: Token de acceso regenerado exitosamente
+    warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie!
+    your_token: Tu token de acceso
+  auth:
+    apply_for_account: Solicitar una invitación
+    change_password: Contraseña
+    checkbox_agreement_html: Acepto <a href="%{rules_path}" target="_blank">las reglas del servidor</a> y <a href="%{terms_path}" target="_blank">términos de servicio</a>
+    checkbox_agreement_without_rules_html: Acepto los <a href="%{terms_path}" target="_blank">términos de servicio</a>
+    delete_account: Borrar cuenta
+    delete_account_html: Si desea eliminar su cuenta, puede <a href="%{path}">proceder aquí</a>. Será pedido de una confirmación.
+    description:
+      prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!"
+      prefix_sign_up: "¡Únete a Mastodon hoy!"
+      suffix: "¡Con una cuenta podrás seguir a gente, publicar novedades e intercambiar mensajes con usuarios de cualquier servidor de Mastodon y más!"
+    didnt_get_confirmation: "¿No recibió el correo de confirmación?"
+    dont_have_your_security_key: "¿No tienes tu clave de seguridad?"
+    forgot_password: "¿Olvidaste tu contraseña?"
+    invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo.
+    link_to_otp: Introduce un código de dos factores desde tu teléfono o un código de recuperación
+    link_to_webauth: Utilice su dispositivo de clave de seguridad
+    login: Iniciar sesión
+    logout: Cerrar sesión
+    migrate_account: Mudarse a otra cuenta
+    migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>.
+    or_log_in_with: O inicia sesión con
+    register: Registrarse
+    registration_closed: "%{instance} no está aceptando nuevos miembros"
+    resend_confirmation: Volver a enviar el correo de confirmación
+    reset_password: Restablecer contraseña
+    security: Cambiar contraseña
+    set_new_password: Establecer nueva contraseña
+    setup:
+      email_below_hint_html: Si la dirección de correo electrónico que aparece a continuación es incorrecta, se puede cambiarla aquí y recibir un nuevo correo electrónico de confirmación.
+      email_settings_hint_html: El correo electrónico de confirmación fue enviado a %{email}. Si esa dirección de correo electrónico no sea correcta, se puede cambiarla en la configuración de la cuenta.
+      title: Configuración
+    status:
+      account_status: Estado de la cuenta
+      confirming: Esperando confirmación de correo electrónico.
+      functional: Su cuenta está totalmente operativa.
+      pending: Su solicitud está pendiente de revisión por nuestros administradores. Eso puede tardar algún tiempo. Usted recibirá un correo electrónico si el solicitud sea aprobada.
+      redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}.
+    too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo.
+    trouble_logging_in: "¿Problemas para iniciar sesión?"
+    use_security_key: Usar la clave de seguridad
+  authorize_follow:
+    already_following: Ya estás siguiendo a esta cuenta
+    already_requested: Ya has enviado una solicitud de seguimiento a esa cuenta
+    error: Desafortunadamente, ha ocurrido un error buscando la cuenta remota
+    follow: Seguir
+    follow_request: 'Tienes una solicitud de seguimiento de:'
+    following: "¡Éxito! Ahora estás siguiendo a:"
+    post_follow:
+      close: O, puedes simplemente cerrar esta ventana.
+      return: Regresar al perfil del usuario
+      web: Ir al sitio web
+    title: Seguir a %{acct}
+  challenge:
+    confirm: Continuar
+    hint_html: "<strong>Tip:</strong> No volveremos a preguntarte por la contraseña durante la siguiente hora."
+    invalid_password: Contraseña incorrecta
+    prompt: Confirmar contraseña para seguir
+  crypto:
+    errors:
+      invalid_key: no es una clave Ed25519 o Curve25519 válida
+      invalid_signature: no es una firma Ed25519 válida
+  datetime:
+    distance_in_words:
+      about_x_months: "%{count}m"
+      about_x_years: "%{count}a"
+      almost_x_years: "%{count}a"
+      half_a_minute: Justo ahora
+      less_than_x_seconds: Justo ahora
+      over_x_years: "%{count}a"
+      x_months: "%{count}m"
+  deletes:
+    challenge_not_passed: Los datos introducidos son incorrectos
+    confirm_password: Ingresa tu contraseña actual para demostrar tu identidad
+    confirm_username: Escribe tu nombre de usuario para confirmar
+    proceed: Eliminar cuenta
+    success_msg: Tu cuenta se eliminó con éxito
+    warning:
+      before: 'Antes de continuar, por favor lee con atención las siguientes notas:'
+      caches: El contenido que ha sido almacenado en caché por otros servidores puede persistir
+      data_removal: Tus publicaciones y el resto de datos se eliminarán definitivamente
+      email_change_html: Puedes <a href="%{path}"> cambiar tu dirección de correo electrónico</a> sin eliminar tu cuenta
+      email_contact_html: Si aún no te ha llegado, puedes escribir a <a href="mailto:%{email}">%{email}</a> para pedir ayuda
+      email_reconfirmation_html: Si no te ha llegado el correo de confirmación, puedes <a href="%{path}"> volver a solicitarlo</a>
+      irreversible: No podrás restaurar ni reactivar tu cuenta
+      more_details_html: Para más detalles, ver <a href="%{terms_path}"> la política de privacidad</a>.
+      username_available: Tu nombre de usuario volverá a estar disponible
+      username_unavailable: Tu nombre de usuario no estará disponible
+  directories:
+    directory: Directorio de perfiles
+    explanation: Descubre usuarios según sus intereses
+    explore_mastodon: Explorar %{title}
+  domain_validator:
+    invalid_domain: no es un nombre de dominio válido
+  errors:
+    '400': La solicitud que has enviado no es valida o estaba malformada.
+    '403': No tienes permiso para acceder a esta página.
+    '404': La página que estabas buscando no existe.
+    '406': Esta página no está disponible en el formato solicitado.
+    '410': La página que estabas buscando no existe más.
+    '422':
+      content: Verificación de seguridad fallida. ¿Estás bloqueando algunas cookies?
+      title: Verificación de seguridad fallida
+    '429': Asfixiado
+    '500':
+      content: Lo sentimos, algo ha funcionado mal por nuestra parte.
+      title: Esta página no es correcta
+    '503': La página no se ha podido cargar debido a un fallo temporal del servidor.
+    noscript_html: Para usar la aplicación web de Mastodon, por favor activa Javascript. Alternativamente, prueba alguna de las <a href="%{apps_path}">aplicaciones nativas</a> para Mastodon para tu plataforma.
+  existing_username_validator:
+    not_found: no pudo encontrar un usuario local con ese nombre de usuario
+    not_found_multiple: no pudo encontrar %{usernames}
+  exports:
+    archive_takeout:
+      date: Fecha
+      download: Descargar tu archivo
+      hint_html: Puedes solicitar un archivo de tus <strong>toots y archivos multimedia subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
+      in_progress: Recopilando tu archivo...
+      request: Solicitar tu archivo
+      size: Tamaño
+    blocks: Personas que has bloqueado
+    bookmarks: Marcadores
+    domain_blocks: Bloqueos de dominios
+    lists: Listas
+    mutes: Tienes en silencio
+    storage: Almacenamiento
+  featured_tags:
+    add_new: Añadir nuevo
+    errors:
+      limit: Ya has alcanzado la cantidad máxima de hashtags
+    hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
+  filters:
+    contexts:
+      account: Perfiles
+      home: Timeline propio
+      notifications: Notificaciones
+      public: Timeline público
+      thread: Conversaciones
+    edit:
+      title: Editar filtro
+    errors:
+      invalid_context: Se suminstró un contexto inválido o vacío
+      invalid_irreversible: El filtrado irreversible solo funciona con los contextos propios o de notificaciones
+    index:
+      delete: Borrar
+      empty: No tienes filtros.
+      title: Filtros
+    new:
+      title: Añadir un nuevo filtro
+  footer:
+    developers: Desarrolladores
+    more: Mas…
+    resources: Recursos
+    trending_now: Tendencia ahora
+  generic:
+    all: Todos
+    changes_saved_msg: "¡Cambios guardados con éxito!"
+    copy: Copiar
+    delete: Eliminar
+    no_batch_actions_available: No hay acciones por lotes disponibles en esta página
+    order_by: Ordenar por
+    save_changes: Guardar cambios
+    validation_errors:
+      one: "¡Algo no está bien! Por favor, revisa el error"
+      other: "¡Algo no está bien! Por favor, revise %{count} errores más abajo"
+  html_validator:
+    invalid_markup: 'contiene código HTML no válido: %{error}'
+  identity_proofs:
+    active: Activo
+    authorize: Sí, autorizar
+    authorize_connection_prompt: "¿Autorizar esta conexión criptográfica?"
+    errors:
+      failed: La conexión criptográfica falló. Por favor, inténtalo de nuevo desde %{provider}.
+      keybase:
+        invalid_token: Los tokens de Keybase son hashes de firmas y deben tener 66 caracteres hex
+        verification_failed: Keybase no reconoce este token como una firma del usuario de Keybase %{kb_username}. Por favor, inténtelo de nuevo desde Keybase.
+      wrong_user: No se puede crear una prueba para %{proving} mientras se inicia sesión como %{current}. Inicia sesión como %{proving} e inténtalo de nuevo.
+    explanation_html: Aquí puedes conectar criptográficamente sus otras identidades, como un perfil de Keybase. Esto permite a otras personas enviarle mensajes encriptados y confiar en el contenido que les envías.
+    i_am_html: Soy %{username} en %{service}.
+    identity: Identidad
+    inactive: Inactivo
+    publicize_checkbox: 'Y tootee esto:'
+    publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}"
+    remove: Eliminar prueba de la cuenta
+    removed: Prueba eliminada con éxito de la cuenta
+    status: Estado de la verificación
+    view_proof: Ver prueba
+  imports:
+    errors:
+      over_rows_processing_limit: contiene más de %{count} filas
+    modes:
+      merge: Unir
+      merge_long: Mantener registros existentes y añadir nuevos
+      overwrite: Sobrescribir
+      overwrite_long: Reemplazar registros actuales con los nuevos
+    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.
+    success: Sus datos se han cargado correctamente y serán procesados en brevedad
+    types:
+      blocking: Lista de bloqueados
+      bookmarks: Marcadores
+      domain_blocking: Lista de dominios bloqueados
+      following: Lista de seguidos
+      muting: Lista de silenciados
+    upload: Cargar
+  in_memoriam_html: En memoria.
+  invites:
+    delete: Desactivar
+    expired: Expiradas
+    expires_in:
+      '1800': 30 minutos
+      '21600': 6 horas
+      '3600': 1 hora
+      '43200': 12 horas
+      '604800': 1 semana
+      '86400': 1 día
+    expires_in_prompt: Nunca
+    generate: Generar
+    invited_by: 'Fuiste invitado por:'
+    max_uses:
+      one: 1 uso
+      other: "%{count} usos"
+    max_uses_prompt: Sin límite
+    prompt: Generar y compartir enlaces con otros para conceder acceso a este nodo
+    table:
+      expires_at: Expira
+      uses: Usos
+    title: Invitar a gente
+  lists:
+    errors:
+      limit: Has alcanzado la cantidad máxima de listas
+  media_attachments:
+    validations:
+      images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes
+      not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Inténtalo de nuevo en un momento!
+      too_many: No se pueden adjuntar más de 4 archivos
+  migrations:
+    acct: username@domain de la nueva cuenta
+    cancel: Cancelar redireccionamiento
+    cancel_explanation: Al cancelar el redireccionamiento se reactivará tu cuenta actual, pero no recuperarás los seguidores que hayan sido trasladados a la otra cuenta.
+    cancelled_msg: El redireccionamiento se ha cancelado correctamente.
+    errors:
+      already_moved: es la misma cuenta a la que ya has migrado
+      missing_also_known_as: no está haciendo referencia a esta cuenta
+      move_to_self: no puede ser la cuenta actual
+      not_found: no se pudo encontrar
+      on_cooldown: Estás en tiempo de reutilización
+    followers_count: Seguidores al momento de migrar
+    incoming_migrations: Migrar de una cuenta diferente
+    incoming_migrations_html: Para migrar de otra cuenta a esta, primero necesitas <a href="%{path}">crear un alias de la cuenta</a>.
+    moved_msg: Tu cuenta ahora se está redirigiendo a %{acct} y tus seguidores se están migrando.
+    not_redirecting: Tu cuenta no se está redirigiendo a ninguna otra cuenta actualmente.
+    on_cooldown: Has migrado tu cuenta recientemente. Esta función estará disponible de nuevo en %{count} días.
+    past_migrations: Migraciones pasadas
+    proceed_with_move: Migrar seguidores
+    redirected_msg: Tu cuenta ahora redirige a %{acct}.
+    redirecting_to: Tu cuenta se está redirigiendo a %{acct}.
+    set_redirect: Establecer redirección
+    warning:
+      backreference_required: La nueva cuenta debe ser configurada primero para hacer referencia a esta
+      before: 'Antes de continuar, por favor lee con atención las siguientes notas:'
+      cooldown: Después de migrar hay un período de espera durante el cual no podrás volver a migrar
+      disabled_account: Tu cuenta actual no será completamente utilizable después. Sin embargo, tendrás acceso a la exportación de datos así como a la reactivación.
+      followers: Esta acción migrará a todos los seguidores de la cuenta actual a la nueva cuenta
+      only_redirect_html: Alternativamente, solo puedes <a href="%{path}">poner una redirección en tu perfil</a>.
+      other_data: No se moverán otros datos automáticamente
+      redirect: El perfil de tu cuenta actual se actualizará con un aviso de redirección y será excluido de las búsquedas
+  moderation:
+    title: Moderación
+  move_handler:
+    carry_blocks_over_text: Este usuario se mudó desde %{acct}, que habías bloqueado.
+    carry_mutes_over_text: Este usuario se mudó desde %{acct}, que habías silenciado.
+    copy_account_note_text: 'Este usuario se mudó desde %{acct}, aquí estaban tus notas anteriores sobre él:'
+  notification_mailer:
+    digest:
+      action: Ver todas las notificaciones
+      body: Un resumen de los mensajes que perdiste en desde tu última visita, el %{since}
+      mention: "%{name} te ha mencionado en:"
+      new_followers_summary:
+        one: "¡Ademas, has adquirido un nuevo seguidor mientras no estabas! ¡Hurra!"
+        other: "¡Ademas, has adquirido %{count} nuevos seguidores mientras no estabas! ¡Genial!"
+      subject:
+        one: "1 nueva notificación desde tu última visita \U0001F418"
+        other: "%{count} nuevas notificaciones desde tu última visita \U0001F418"
+      title: En tu ausencia…
+    favourite:
+      body: 'Tu estado fue marcado como favorito por %{name}:'
+      subject: "%{name} marcó como favorito tu estado"
+      title: Nuevo favorito
+    follow:
+      body: "¡%{name} te está siguiendo!"
+      subject: "%{name} te está siguiendo"
+      title: Nuevo seguidor
+    follow_request:
+      action: Administrar solicitudes para seguir
+      body: "%{name} ha solicitado seguirte"
+      subject: 'Seguidor pendiente: %{name}'
+      title: Nueva solicitud para seguir
+    mention:
+      action: Responder
+      body: 'Fuiste mencionado por %{name} en:'
+      subject: Fuiste mencionado por %{name}
+      title: Nueva mención
+    poll:
+      subject: Una encuesta de %{name} ha terminado
+    reblog:
+      body: "%{name} ha retooteado tu estado:"
+      subject: "%{name} ha retooteado tu estado"
+      title: Nueva difusión
+    status:
+      subject: "%{name} acaba de publicar"
+  notifications:
+    email_events: Eventos para notificaciones por correo electrónico
+    email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:'
+    other_settings: Otros ajustes de notificaciones
+  number:
+    human:
+      decimal_units:
+        units:
+          thousand: m
+  otp_authentication:
+    code_hint: Introduce el código generado por tu aplicación de autentificación para confirmar
+    description_html: Si habilitas <strong>autenticación de dos factores</strong> a través de una aplicación de autenticación, el ingreso requerirá que estés en posesión de tu teléfono, que generará códigos para que ingreses.
+    enable: Activar
+    instructions_html: "<strong>Escanea este código QR desde Google Authenticator o una aplicación similar en tu teléfono</strong>. A partir de ahora, esta aplicación generará códigos que tendrásque ingresar cuando quieras iniciar sesión."
+    manual_instructions: 'Si no puedes escanear el código QR y necesitas introducirlo manualmente, este es el secreto en texto plano:'
+    setup: Configurar
+    wrong_code: "¡El código ingresado es inválido! ¿Es correcta la hora del dispositivo y el servidor?"
+  pagination:
+    newer: Más nuevo
+    next: Próximo
+    older: Más antiguo
+    prev: Anterior
+  polls:
+    errors:
+      already_voted: Ya has votado en esta encuesta
+      duplicate_options: contiene elementos duplicados
+      duration_too_long: está demasiado lejos en el futuro
+      duration_too_short: es demasiado pronto
+      expired: La encuesta ya ha terminado
+      invalid_choice: La opción de voto seleccionada no existe
+      over_character_limit: no puede exceder %{max} caracteres cada uno
+      too_few_options: debe tener más de un elemento
+      too_many_options: no puede contener más de %{max} elementos
+  preferences:
+    other: Otros
+    posting_defaults: Configuración por defecto de publicaciones
+    public_timelines: Líneas de tiempo públicas
+  reactions:
+    errors:
+      limit_reached: Límite de reacciones diferentes alcanzado
+      unrecognized_emoji: no es un emoji conocido
+  relationships:
+    activity: Actividad de la cuenta
+    dormant: Inactivo
+    follow_selected_followers: Seguir a los seguidores seleccionados
+    followers: Seguidores
+    following: Siguiendo
+    invited: Invitado
+    last_active: Última actividad
+    most_recent: Más reciente
+    moved: Movido
+    mutual: Mutuo
+    primary: Principal
+    relationship: Relación
+    remove_selected_domains: Eliminar todos los seguidores de los dominios seleccionados
+    remove_selected_followers: Eliminar los seguidores seleccionados
+    remove_selected_follows: Dejar de seguir a los usuarios seleccionados
+    status: Estado de la cuenta
+  remote_follow:
+    acct: Ingresa tu usuario@dominio desde el que quieres seguir
+    missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta
+    no_account_html: "¿No tienes una cuenta? Puedes <a href='%{sign_up_path}' target='_blank'>registrarte aqui</a>"
+    proceed: Proceder a seguir
+    prompt: 'Vas a seguir a:'
+    reason_html: "¿<strong>¿Por qué es necesario este paso?</strong> <code>%{instance}</code> puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen."
+  remote_interaction:
+    favourite:
+      proceed: Proceder a marcar como favorito
+      prompt: 'Quieres marcar como favorito este toot:'
+    reblog:
+      proceed: Proceder a retootear
+      prompt: 'Quieres retootear este toot:'
+    reply:
+      proceed: Proceder a responder
+      prompt: 'Quieres responder a este toot:'
+  scheduled_statuses:
+    over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día
+    over_total_limit: Ha superado el límite de %{limit} toots programados
+    too_soon: La fecha programada debe estar en el futuro
+  sessions:
+    activity: Última actividad
+    browser: Navegador
+    browsers:
+      generic: Desconocido
+      nokia: Navegador de Nokia S40 Ovi
+      qq: Navegador QQ
+    current_session: Sesión actual
+    description: "%{browser} en %{platform}"
+    explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon.
+    platforms:
+      mac: Mac
+      other: Desconocido
+    revoke: Revocar
+    revoke_success: Sesión revocada exitosamente
+    title: Sesiones
+  settings:
+    account: Cuenta
+    account_settings: Ajustes de la cuenta
+    aliases: Alias de la cuenta
+    appearance: Apariencia
+    authorized_apps: Aplicaciones autorizadas
+    back: Volver al inicio
+    delete: Borrar cuenta
+    development: Desarrollo
+    edit_profile: Editar perfil
+    export: Exportar información
+    featured_tags: Hashtags destacados
+    identity_proofs: Pruebas de identidad
+    import: Importar
+    import_and_export: Importar y exportar
+    migrate: Migración de cuenta
+    notifications: Notificaciones
+    preferences: Preferencias
+    profile: Perfil
+    relationships: Siguiendo y seguidores
+    two_factor_authentication: Autenticación de dos factores
+    webauthn_authentication: Claves de seguridad
+  statuses:
+    attached:
+      description: 'Adjunto: %{attached}'
+      image:
+        one: "%{count} imagen"
+        other: "%{count} imágenes"
+      video:
+        one: "%{count} vídeo"
+        other: "%{count} vídeos"
+    boosted_from_html: Impulsado desde %{acct_link}
+    content_warning: 'Alerta de contenido: %{warning}'
+    disallowed_hashtags:
+      one: 'contenía un hashtag no permitido: %{tags}'
+      other: 'contenía los hashtags no permitidos: %{tags}'
+    errors:
+      in_reply_not_found: El estado al que intentas responder no existe.
+    language_detection: Detección automática de idioma
+    open_in_web: Abrir en web
+    over_character_limit: Límite de caracteres de %{max} superado
+    pin_errors:
+      limit: Ya has fijado el número máximo de publicaciones
+      ownership: El toot de alguien más no puede fijarse
+      private: Los toots no-públicos no pueden fijarse
+      reblog: Un boost no puede fijarse
+    poll:
+      total_people:
+        one: persona %{count}
+        other: "%{count} gente"
+      total_votes:
+        one: "%{count} voto"
+        other: "%{count} votos"
+      vote: Vota
+    show_more: Mostrar más
+    show_newer: Mostrar más recientes
+    show_older: Mostrar más antiguos
+    show_thread: Mostrar discusión
+    sign_in_to_participate: Regístrate para participar en la conversación
+    visibilities:
+      direct: Directo
+      private: Sólo mostrar a seguidores
+      private_long: Solo mostrar a tus seguidores
+      public: Público
+      public_long: Todos pueden ver
+      unlisted: Público, pero no mostrar en la historia federada
+      unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas
+  stream_entries:
+    pinned: Toot fijado
+    reblogged: retooteado
+    sensitive_content: Contenido sensible
+  tags:
+    does_not_match_previous_name: no coincide con el nombre anterior
+  terms:
+    body_html: |
+      <h2>Política de Privacidad</h2>
+      <h3 id="collect">¿Qué información recogemos?</h3>
+
+      <ul>
+      <li><em>Información básica sobre su cuenta</em>: Si se registra en este servidor, se le requerirá un nombre de usuario, una dirección de correo electrónico y una contraseña. Además puede incluir información adicional en el perfil como un nombre de perfil y una biografía, y subir una foto de perfil y una imagen de cabecera. El nombre de usuario, nombre de perfil, biografía, foto de perfil e imagen de cabecera siempre son visibles públicamente</li>
+      <li><em>Publicaciones, seguimiento y otra información pública</em>: La lista de gente a la que sigue es mostrada públicamente, al igual que sus seguidores. Cuando publica un mensaje, la fecha y hora es almacenada, así como la aplicación desde la cual publicó el mensaje. Los mensajes pueden contener archivos adjuntos multimedia, como imágenes y vídeos. Las publicaciones públicas y no listadas están disponibles públicamente. Cuando destaca una entrada en su perfil, también es información disponible públicamente. Sus publicaciones son entregadas a sus seguidores, en algunos casos significa que son entregadas a diferentes servidores y las copias son almacenadas allí. Cuando elimina publicaciones, esto también se transfiere a sus seguidores. La acción de rebloguear o marcar como favorito otra publicación es siempre pública.</li>
+      <li><em>Publicaciones directas y sólo para seguidores</em>: Todos los mensajes se almacenan y procesan en el servidor. Los mensajes sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esas publicaciones sólo a las personas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen sus seguidores. Puede cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración <em>Por favor, tenga en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes</em>, y que los destinatarios pueden capturarlos, copiarlos o volver a compartirlos de alguna otra manera. <em>No comparta ninguna información peligrosa en Mastodon.</em></li>
+      <li><em>Direcciones IP y otros metadatos</em>: Al iniciar sesión, registramos la dirección IP desde la que se ha iniciado sesión, así como el nombre de la aplicación de su navegador. Todas las sesiones iniciadas están disponibles para su revisión y revocación en los ajustes. La última dirección IP utilizada se almacena hasta 12 meses. También podemos conservar los registros del servidor que incluyen la dirección IP de cada solicitud a nuestro servidor.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">¿Para qué utilizamos su información?</h3>
+
+      <p>Toda la información que obtenemos de usted puede ser utilizada de las siguientes maneras:</p>
+
+      <ul>
+      <li>Para proporcionar la funcionalidad principal de Mastodon. Sólo puedes interactuar con el contenido de otras personas y publicar tu propio contenido cuando estés conectado. Por ejemplo, puedes seguir a otras personas para ver sus mensajes combinados en tu propia línea de tiempo personalizada.</li>
+      <li>Para ayudar a la moderación de la comunidad, por ejemplo, comparando su dirección IP con otras conocidas para determinar la evasión de prohibiciones u otras violaciones.</li>
+      <li>La dirección de correo electrónico que nos proporcione podrá utilizarse para enviarle información, notificaciones sobre otras personas que interactúen con su contenido o para enviarle mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">¿Cómo protegemos su información?</h3>
+
+      <p>Implementamos una variedad de medidas de seguridad para mantener la seguridad de su información personal cuando usted ingresa, envía o accede a su información personal. Entre otras cosas, la sesión de su navegador, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL, y su contraseña está protegida mediante un algoritmo unidireccional fuerte. Puede habilitar la autenticación de dos factores para un acceso más seguro a su cuenta.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">¿Cuál es nuestra política de retención de datos?</h3>
+
+      <p>Haremos un esfuerzo de buena fe para:</p>
+
+      <ul>
+      <li>Conservar los registros del servidor que contengan la dirección IP de todas las peticiones a este servidor, en la medida en que se mantengan dichos registros, no más de 90 días.</li>
+      <li>Conservar las direcciones IP asociadas a los usuarios registrados no más de 12 meses.</li>
+      </ul>
+
+      <p>Puede solicitar y descargar un archivo de su contenido, incluidos sus mensajes, archivos adjuntos multimedia, foto de perfil e imagen de cabecera.</p>
+
+      <p>Usted puede borrar su cuenta de forma irreversible en cualquier momento.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">¿Utilizamos cookies?</h3>
+
+      <p>Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere al disco duro de su ordenador a través de su navegador web (si usted lo permite). Estas cookies permiten al sitio reconocer su navegador y, si tiene una cuenta registrada, asociarla con su cuenta registrada.</p>
+
+      <p>Utilizamos cookies para entender y guardar sus preferencias para futuras visitas.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">¿Revelamos alguna información a terceros?</h3>
+
+      <p>No vendemos, comerciamos ni transferimos a terceros su información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podemos divulgar su información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio, o proteger nuestros u otros derechos, propiedad o seguridad.</p>
+
+      <p>Su contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.</p>
+
+      <p>Cuando usted autoriza a una aplicación a usar su cuenta, dependiendo del alcance de los permisos que usted apruebe, puede acceder a la información de su perfil público, su lista de seguimiento, sus seguidores, sus listas, todos sus mensajes y sus favoritos. Las aplicaciones nunca podrán acceder a su dirección de correo electrónico o contraseña.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">Uso del sitio por parte de los niños</h3>
+
+      <p>Si este servidor está en la UE o en el EEE: Nuestro sitio, productos y servicios están dirigidos a personas mayores de 16 años. Si es menor de 16 años, según los requisitos de la GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation_Data_Protection_Regulation">General Data Protection Regulation</a>) no utilice este sitio.</p>
+
+      <p>Si este servidor está en los EE.UU.: Nuestro sitio, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si usted es menor de 13 años, según los requisitos de COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) no utilice este sitio.</p>
+
+      <p>Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">Cambios en nuestra Política de Privacidad</h3>
+
+      <p>Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.</p>
+
+      <p>Este documento es CC-BY-SA. Fue actualizado por última vez el 7 de marzo de 2018.</p>
+
+      <p>Adaptado originalmente desde <a href="https://github.com/discourse/discourse">la política de privacidad de Discourse</a>.</p>
+    title: Términos del Servicio y Políticas de Privacidad de %{instance}
+  themes:
+    contrast: Alto contraste
+    default: Mastodon
+    mastodon-light: Mastodon (claro)
+  time:
+    formats:
+      default: "%d de %b del %Y, %H:%M"
+  two_factor_authentication:
+    add: Añadir
+    disable: Deshabilitar
+    disabled_success: Autenticación de doble factor desactivada correctamente
+    edit: Editar
+    enabled: La autenticación de dos factores está activada
+    enabled_success: Verificación de dos factores activada exitosamente
+    generate_recovery_codes: generar códigos de recuperación
+    lost_recovery_codes: Los códigos de recuperación te permiten obtener acceso a tu cuenta si pierdes tu teléfono. Si has perdido tus códigos de recuperación, puedes regenerarlos aquí. Tus viejos códigos de recuperación se harán inválidos.
+    methods: Métodos de autenticación de doble factor
+    otp: Aplicación de autenticación
+    recovery_codes: Hacer copias de seguridad de tus códigos de recuperación
+    recovery_codes_regenerated: Códigos de recuperación regenerados con éxito
+    recovery_instructions_html: Si pierdes acceso a tu teléfono, puedes usar uno de los siguientes códigos de recuperación para obtener acceso a tu cuenta. <strong>Mantenlos a salvo</strong>. Por ejemplo, puedes imprimirlos y guardarlos con otros documentos importantes.
+    webauthn: Claves de seguridad
+  user_mailer:
+    backup_ready:
+      explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar!
+      subject: Tu archivo está preparado para descargar
+      title: Descargar archivo
+    sign_in_token:
+      details: 'Aquí están los detalles del intento:'
+      explanation: 'Hemos detectado un intento de inicio de sesión en tu cuenta desde una dirección IP no reconocida. Si has sido tú, por favor ingresa el siguiente código de seguridad en la página del desafío:'
+      further_actions: 'Si no has sido tú, por favor cambia tu contraseña y habilita la autenticación de dos factores en tu cuenta. Puedes hacerlo aquí:'
+      subject: Por favor, confirma el intento de inicio de sesión
+      title: Intento de inicio de sesión
+    warning:
+      explanation:
+        disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee.
+        sensitive: Los archivos multimedia subidos y vinculados serán tratados como sensibles.
+        silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente.
+        suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
+      get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}.
+      review_server_policies: Revisar las políticas del servidor
+      statuses: 'Específicamente, para:'
+      subject:
+        disable: Su cuenta %{acct} ha sido congelada
+        none: Advertencia para %{acct}
+        sensitive: Tu cuenta %{acct} ha sido marcada como sensible
+        silence: Su cuenta %{acct} ha sido limitada
+        suspend: Su cuenta %{acct} ha sido suspendida
+      title:
+        disable: Cuenta congelada
+        none: Advertencia
+        sensitive: Tu multimedia ha sido marcado como sensible
+        silence: Cuenta limitada
+        suspend: Cuenta suspendida
+    welcome:
+      edit_profile_action: Configurar el perfil
+      edit_profile_step: Puedes personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre de usuario y más cosas. Si quieres revisar a tus nuevos seguidores antes de que se les permita seguirte, puedes bloquear tu cuenta.
+      explanation: Aquí hay algunos consejos para empezar
+      final_action: Empezar a publicar
+      final_step: '¡Empieza a publicar! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea de tiempo local y con "hashtags". Podrías querer introducirte con el "hashtag" #introductions.'
+      full_handle: Su sobrenombre completo
+      full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
+      review_preferences_action: Cambiar preferencias
+      review_preferences_step: Asegúrate de poner tus preferencias, como que correos te gustaría recibir, o que nivel de privacidad te gustaría que tus publicaciones tengan por defecto. Si no tienes mareos, podrías elegir habilitar la reproducción automática de "GIFs".
+      subject: Bienvenido a Mastodon
+      tip_federated_timeline: La línea de tiempo federada es una vista de la red de Mastodon. Pero solo incluye gente que tus vecinos están siguiendo, así que no está completa.
+      tip_following: Sigues a tus administradores de servidor por defecto. Para encontrar más gente interesante, revisa las lineas de tiempo local y federada.
+      tip_local_timeline: La linea de tiempo local is una vista de la gente en %{instance}. Estos son tus vecinos inmediatos!
+      tip_mobile_webapp: Si el navegador de tu dispositivo móvil ofrece agregar Mastodon a tu página de inicio, puedes recibir notificaciones. Actúa como una aplicación nativa en muchas formas!
+      tips: Consejos
+      title: Te damos la bienvenida a bordo, %{name}!
+  users:
+    follow_limit_reached: No puedes seguir a más de %{limit} personas
+    generic_access_help_html: "¿Tienes problemas para acceder a tu cuenta? Puedes ponerte en contacto con %{email} para conseguir ayuda"
+    invalid_otp_token: Código de dos factores incorrecto
+    invalid_sign_in_token: Código de seguridad no válido
+    otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email}
+    seamless_external_login: Has iniciado sesión desde un servicio externo, así que los ajustes de contraseña y correo no están disponibles.
+    signed_in_as: 'Sesión iniciada como:'
+    suspicious_sign_in_confirmation: Parece que no has iniciado sesión desde este dispositivo antes, y no has iniciado sesión durante un tiempo, así que estamos enviando un código de seguridad a tu dirección de correo electrónico para confirmar que eres tú.
+  verification:
+    explanation_html: 'Puedes <strong> verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil </strong>. Para eso, el sitio vinculado debe contener un vínculo a tu perfil de Mastodon. El vínculo en tu sitio <strong> debe </strong> tener un atributo <code> rel="me"</code>. El texto del vínculo no importa. Aquí un ejemplo:'
+    verification: Verificación
+  webauthn_credentials:
+    add: Agregar nueva clave de seguridad
+    create:
+      error: Hubo un problema al añadir su clave de seguridad. Por favor, inténtalo de nuevo.
+      success: Su clave de seguridad se ha añadido correctamente.
+    delete: Eliminar
+    delete_confirmation: "¿Estás seguro de que quieres eliminar esta clave de seguridad?"
+    description_html: Si habilita la <strong>autenticación de clave de seguridad</strong>, iniciar sesión requerirá que utilice una de sus claves de seguridad.
+    destroy:
+      error: Hubo un problema al añadir su clave de seguridad. Por favor, inténtalo de nuevo.
+      success: Su clave de seguridad se ha eliminado correctamente.
+    invalid_credential: Clave de seguridad no válida
+    nickname_hint: Introduzca el apodo de su nueva clave de seguridad
+    not_enabled: Aún no has activado WebAuthn
+    not_supported: Este navegador no soporta claves de seguridad
+    otp_required: Para usar claves de seguridad, por favor habilite primero la autenticación de doble factor.
+    registered_on: Registrado el %{date}
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 0582fd1f1..0f8984863 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -1,13 +1,12 @@
 ---
 es:
   about:
-    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en cualquier parte del fediverso.
+    about_hashtag_html: Estos son publicaciones públicas etiquetadas con <strong>#%{hashtag}</strong>. Puedes interactuar con ellas si tienes una cuenta en cualquier parte del fediverso.
     about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!'
     about_this: Información
     active_count_after: activo
     active_footnote: Usuarios Activos Mensuales (UAM)
     administered_by: 'Administrado por:'
-    api: API
     apps: Aplicaciones móviles
     apps_platforms: Utiliza Mastodon desde iOS, Android y otras plataformas
     browse_directory: Navega por el directorio de perfiles y filtra por intereses
@@ -15,7 +14,6 @@ es:
     browse_public_posts: Navega por un transmisión en vivo de publicaciones públicas en Mastodon
     contact: Contacto
     contact_missing: No especificado
-    contact_unavailable: N/A
     discover_users: Descubrir usuarios
     documentation: Documentación
     federation_hint_html: Con una cuenta en %{instance} usted podrá seguir a las personas en cualquier servidor de Mastodon y más allá.
@@ -26,6 +24,8 @@ es:
       Se usa para fines federativos y no debe ser bloqueado a menos que usted quiera bloquear toda la instancia, en cuyo caso se debe utilizar un bloque de dominio.
     learn_more: Aprende más
     privacy_policy: Política de privacidad
+    rules: Normas del servidor
+    rules_html: 'A continuación hay un resumen de las normas que debes seguir si quieres tener una cuenta en este servidor de Mastodon:'
     see_whats_happening: Ver lo que está pasando
     server_stats: 'Datos del servidor:'
     source_code: Código fuente
@@ -74,14 +74,12 @@ es:
     pin_errors:
       following: Debes estar siguiendo a la persona a la que quieres aprobar
     posts:
-      one: Toot
-      other: Toots
-    posts_tab_heading: Toots
-    posts_with_replies: Toots con respuestas
-    reserved_username: El nombre de usuario está reservado
+      one: Publicación
+      other: Publicaciones
+    posts_tab_heading: Publicaciones
+    posts_with_replies: Publicaciones y respuestas
     roles:
       admin: Administrador
-      bot: Bot
       group: Grupo
       moderator: Moderador
     unavailable: Perfil no disponible
@@ -101,7 +99,6 @@ es:
       approve_all: Aprobar todos
       approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente
       are_you_sure: "¿Estás seguro?"
-      avatar: Avatar
       by_domain: Dominio
       change_email:
         changed_msg: "¡El correo electrónico se ha actualizado correctamente!"
@@ -134,11 +131,9 @@ es:
       inbox_url: URL de la bandeja de entrada
       invite_request_text: Razones para unirse
       invited_by: Invitado por
-      ip: IP
       joined: Unido
       location:
         all: Todos
-        local: Local
         remote: Remoto
         title: Localización
       login_status: Estado del login
@@ -215,7 +210,6 @@ es:
       username: Nombre de usuario
       view_domain: Ver resumen del dominio
       warn: Adevertir
-      web: Web
       whitelisted: Añadido a la lista blanca
     action_logs:
       action_types:
@@ -229,6 +223,7 @@ es:
         create_domain_block: Crear Bloqueo de Dominio
         create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico
         create_ip_block: Crear regla IP
+        create_unavailable_domain: Crear Dominio No Disponible
         demote_user: Degradar Usuario
         destroy_announcement: Eliminar Anuncio
         destroy_custom_emoji: Eliminar Emoji Personalizado
@@ -237,6 +232,7 @@ es:
         destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico
         destroy_ip_block: Eliminar regla IP
         destroy_status: Eliminar Estado
+        destroy_unavailable_domain: Eliminar Dominio No Disponible
         disable_2fa_user: Deshabilitar 2FA
         disable_custom_emoji: Deshabilitar Emoji Personalizado
         disable_user: Deshabilitar Usuario
@@ -260,46 +256,48 @@ es:
         update_domain_block: Actualizar el Bloqueo de Dominio
         update_status: Actualizar Estado
       actions:
-        assigned_to_self_report: "%{name} se ha asignado la denuncia %{target} a sí mismo"
-        change_email_user: "%{name} ha cambiado la dirección de correo del usuario %{target}"
-        confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}"
-        create_account_warning: "%{name} envió una advertencia a %{target}"
-        create_announcement: "%{name} creó el nuevo anuncio %{target}"
-        create_custom_emoji: "%{name} subió un nuevo emoji %{target}"
-        create_domain_allow: "%{name} ha añadido a la lista blanca el dominio %{target}"
-        create_domain_block: "%{name} bloqueó el dominio %{target}"
-        create_email_domain_block: "%{name} puso en lista negra el dominio de correos %{target}"
-        create_ip_block: "%{name} creó la regla para la IP %{target}"
-        demote_user: "%{name} degradó al usuario %{target}"
-        destroy_announcement: "%{name} eliminó el anuncio %{target}"
-        destroy_custom_emoji: "%{name} destruyó el emoji %{target}"
-        destroy_domain_allow: "%{name} ha eliminado el dominio %{target} de la lista blanca"
-        destroy_domain_block: "%{name} desbloqueó el dominio %{target}"
-        destroy_email_domain_block: "%{name} puso en lista blanca el dominio de correos %{target}"
-        destroy_ip_block: "%{name} eliminó la regla para la IP %{target}"
-        destroy_status: "%{name} eliminó el estado de %{target}"
-        disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}"
-        disable_custom_emoji: "%{name} deshabilitó el emoji %{target}"
-        disable_user: "%{name} deshabilitó el acceso del usuario %{target}"
-        enable_custom_emoji: "%{name} habilitó el emoji %{target}"
-        enable_user: "%{name} habilitó el acceso del usuario %{target}"
-        memorialize_account: "%{name} convirtió la cuenta de %{target} en una página de memorial"
-        promote_user: "%{name} promoción al usuario %{target}"
-        remove_avatar_user: "%{name} ha eliminado el avatar de %{target}"
-        reopen_report: "%{name} ha reabierto la denuncia %{target}"
-        reset_password_user: "%{name} restauró la contraseña del usuario %{target}"
-        resolve_report: "%{name} ha resuelto la denuncia %{target}"
-        sensitive_account: "%{name} marcó multimedia de %{target} como sensible"
-        silence_account: "%{name} silenció la cuenta de %{target}"
-        suspend_account: "%{name} suspendió la cuenta de %{target}"
-        unassigned_report: "%{name} ha desasignado la denuncia %{target}"
-        unsensitive_account: "%{name} desmarcó multimedia de %{target} como sensible"
-        unsilence_account: "%{name} desactivó el silenciado de la cuenta de %{target}"
-        unsuspend_account: "%{name} desactivó la suspensión de la cuenta de %{target}"
-        update_announcement: "%{name} actualizó el anuncio %{target}"
-        update_custom_emoji: "%{name} actualizó el emoji %{target}"
-        update_domain_block: "%{name} actualizó el bloqueo de dominio para %{target}"
-        update_status: "%{name} actualizó el estado de %{target}"
+        assigned_to_self_report_html: "%{name} asignó el informe %{target} a sí mismo"
+        change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}"
+        confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}"
+        create_account_warning_html: "%{name} envió una advertencia a %{target}"
+        create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}"
+        create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}"
+        create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}"
+        create_domain_block_html: "%{name} bloqueó el dominio %{target}"
+        create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}"
+        create_ip_block_html: "%{name} creó una regla para la IP %{target}"
+        create_unavailable_domain_html: "%{name} detuvo las entregas al dominio %{target}"
+        demote_user_html: "%{name} degradó al usuario %{target}"
+        destroy_announcement_html: "%{name} eliminó el anuncio %{target}"
+        destroy_custom_emoji_html: "%{name} destruyó emoji %{target}"
+        destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}"
+        destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}"
+        destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}"
+        destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}"
+        destroy_status_html: "%{name} eliminó el estado por %{target}"
+        destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}"
+        disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}"
+        disable_custom_emoji_html: "%{name} desactivó el emoji %{target}"
+        disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
+        enable_custom_emoji_html: "%{name} activó el emoji %{target}"
+        enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
+        memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
+        promote_user_html: "%{name} promoción al usuario %{target}"
+        remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
+        reopen_report_html: "%{name} reabrió el informe %{target}"
+        reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}"
+        resolve_report_html: "%{name} resolvió el informe %{target}"
+        sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible"
+        silence_account_html: "%{name} silenció la cuenta de %{target}"
+        suspend_account_html: "%{name} suspendió la cuenta de %{target}"
+        unassigned_report_html: "%{name} des-asignó el informe %{target}"
+        unsensitive_account_html: "%{name} desmarcó la multimedia de %{target} como sensible"
+        unsilence_account_html: "%{name} desilenció la cuenta de %{target}"
+        unsuspend_account_html: "%{name} reactivó la cuenta de %{target}"
+        update_announcement_html: "%{name} actualizó el anuncio %{target}"
+        update_custom_emoji_html: "%{name} actualizó el emoji %{target}"
+        update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}"
+        update_status_html: "%{name} actualizó el estado de %{target}"
       deleted_status: "(estado borrado)"
       empty: No se encontraron registros.
       filter_by_action: Filtrar por acción
@@ -314,10 +312,12 @@ es:
       new:
         create: Crear anuncio
         title: Nuevo anuncio
+      publish: Publicar
       published_msg: "¡Anuncio publicado con éxito!"
       scheduled_for: Programado para %{time}
       scheduled_msg: "¡Anuncio programado para su publicación!"
       title: Anuncios
+      unpublish: Retirar publicación
       unpublished_msg: "¡Anuncio despublicado con éxito!"
       updated_msg: "¡Anuncio actualizado con éxito!"
     custom_emojis:
@@ -333,7 +333,6 @@ es:
       disable: Deshabilitar
       disabled: Desactivado
       disabled_msg: Se deshabilitó con éxito ese emoji
-      emoji: Emoji
       enable: Habilitar
       enabled: Activado
       enabled_msg: Se habilitó con éxito ese emoji
@@ -362,7 +361,6 @@ es:
       feature_profile_directory: Directorio de perfil
       feature_registrations: Registros
       feature_relay: Relés de federación
-      feature_spam_check: Contra-spam
       feature_timeline_preview: Vista previa de la línea de tiempo
       features: Características
       hidden_service: Federación con servicios ocultos
@@ -372,7 +370,6 @@ es:
       recent_users: Usuarios recientes
       search: Búsqueda por texto completo
       single_user_mode: Modo único usuario
-      software: Software
       space: Uso de almacenamiento
       title: Tablero
       total_users: usuarios en total
@@ -440,9 +437,34 @@ es:
         create: Añadir dominio
         title: Nueva entrada en la lista negra de correo
       title: Lista negra de correo
+    follow_recommendations:
+      description_html: "<strong>Las recomendaciones de cuentas ayudan a los nuevos usuarios a encontrar rápidamente contenido interesante</strong>. Cuando un usuario no ha interactuado con otros lo suficiente como para suscitar recomendaciones personalizadas de cuentas a las que seguir, en su lugar se le recomiendan estas cuentas. Se recalculan diariamente a partir de una mezcla de cuentas con el mayor número de interacciones recientes y con el mayor número de seguidores locales con un idioma determinado."
+      language: Para el idioma
+      status: Estado
+      suppress: Suprimir recomendación de cuentas
+      suppressed: Suprimida
+      title: Recomendaciones de cuentas
+      unsuppress: Restaurar recomendaciones de cuentas
     instances:
+      back_to_all: Todos
+      back_to_limited: Limitados
+      back_to_warning: Advertencia
       by_domain: Dominio
+      delivery:
+        all: Todos
+        clear: Limpiar errores de entrega
+        restart: Reiniciar entrega
+        stop: Detener entrega
+        title: Entrega
+        unavailable: No disponible
+        unavailable_message: Entrega no disponible
+        warning: Advertencia
+        warning_message:
+          one: Fallo de entrega %{count} día
+          other: Fallo de entrega %{count} días
       delivery_available: Entrega disponible
+      delivery_error_days: Días de error de entrega
+      delivery_error_hint: Si la entrega no es posible a lo largo de %{count} días, se marcará automáticamente como no entregable.
       empty: No se encontraron dominios.
       known_accounts:
         one: "%{count} cuenta conocida"
@@ -489,11 +511,11 @@ es:
     relays:
       add_new: Añadir un nuevo relés
       delete: Borrar
-      description_html: Un <strong>relés de federation</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores pequeños y medianos a descubir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manialmente a personas de servidores remotos.
+      description_html: Un <strong>relé de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de publicaciones públicas entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores pequeños y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos.
       disable: Deshabilitar
       disabled: Deshabilitado
       enable: Hablitar
-      enable_hint: Una vez conectado, tu servidor se suscribirá a todos los toots públicos de este relés, y comenzará a enviar los toots públicos de este servidor hacia él.
+      enable_hint: Una vez conectado, tu servidor se suscribirá a todos las publicaciones públicas de este relé, y comenzará a enviar las publicaciones públicas de este servidor hacia él.
       enabled: Habilitado
       inbox_url: URL del relés
       pending: Esperando la aprobación del relés
@@ -542,6 +564,13 @@ es:
       unassign: Desasignar
       unresolved: No resuelto
       updated_at: Actualizado
+    rules:
+      add_new: Añadir norma
+      delete: Eliminar
+      description_html: Aunque la mayoría afirma haber leído y estar de acuerdo con los términos de servicio, la gente normalmente no los lee hasta después de que surja algún problema. <strong>Haz que sea más fácil ver las normas de tu servidor de un vistazo estipulándolas en una lista de puntos.</strong> Intenta que cada norma sea corta y sencilla, pero sin estar divididas en muchos puntos.
+      edit: Editar norma
+      empty: Aún no se han definido las normas del servidor.
+      title: Normas del servidor
     settings:
       activity_api_enabled:
         desc_html: Conteo de estados publicados localmente, usuarios activos, y nuevos registros en  periodos semanales
@@ -565,9 +594,6 @@ es:
         users: Para los usuarios locales que han iniciado sesión
       domain_blocks_rationale:
         title: Mostrar la razón de ser
-      enable_bootstrap_timeline_accounts:
-        desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal de inicio no comience vacía
-        title: Habilitar seguimientos predeterminados para usuarios nuevos
       hero:
         desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia
         title: Imagen de portada
@@ -603,7 +629,7 @@ es:
           open: Cualquiera puede registrarse
         title: Modo de registros
       show_known_fediverse_at_about_page:
-        desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales.
+        desc_html: Cuando esté desactivado, se mostrarán solamente publicaciones locales en la línea temporal pública
         title: Mostrar fediverso conocido en la vista previa de la historia
       show_staff_badge:
         desc_html: Mostrar un parche de staff en la página de un usuario
@@ -621,9 +647,6 @@ es:
         desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML
         title: Términos de servicio personalizados
       site_title: Nombre de instancia
-      spam_check_enabled:
-        desc_html: Mastodon puede silenciar y reportar cuentas automáticamente usando medidas como detectar cuentas que envían mensajes no solicitados repetidos. Puede que haya falsos positivos.
-        title: Contra-spam
       thumbnail:
         desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px
         title: Portada de instancia
@@ -654,17 +677,21 @@ es:
       no_status_selected: No se cambió ningún estado al no seleccionar ninguno
       title: Estado de las cuentas
       with_media: Con multimedia
+    system_checks:
+      database_schema_check:
+        message_html: Hay migraciones pendientes de la base de datos. Por favor, ejecútalas para asegurarte de que la aplicación funciona como debería
+      rules_check:
+        action: Administrar reglas del servidor
+        message_html: No ha definido ninguna regla del servidor.
+      sidekiq_process_check:
+        message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq
     tags:
       accounts_today: Usos únicos de hoy
       accounts_week: Usos únicos esta semana
       breakdown: Desglose del consumo actual por fuentes
-      context: Contexto
-      directory: En el directorio
-      in_directory: "%{count} en el directorio"
       last_active: Última actividad
       most_popular: Más popular
       most_recent: Más reciente
-      name: Hashtag
       review: Estado de revisión
       reviewed: Revisado
       title: Etiquetas
@@ -677,6 +704,7 @@ es:
       add_new: Añadir nuevo
       delete: Borrar
       edit_preset: Editar aviso predeterminado
+      empty: Aún no has definido ningún preajuste de advertencia.
       title: Editar configuración predeterminada de avisos
   admin_mailer:
     new_pending_account:
@@ -707,10 +735,9 @@ es:
       guide_link: https://es.crowdin.com/project/mastodon
       guide_link_text: Todos pueden contribuir.
     sensitive_content: Contenido sensible
-    toot_layout: Diseño de los toots
+    toot_layout: Diseño de las publicaciones
   application_mailer:
     notification_preferences: Cambiar preferencias de correo electrónico
-    salutation: "%{name},"
     settings: 'Cambiar preferencias de correo: %{link}'
     view: 'Vista:'
     view_profile: Ver perfil
@@ -745,9 +772,6 @@ es:
     migrate_account: Mudarse a otra cuenta
     migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>.
     or_log_in_with: O inicia sesión con
-    providers:
-      cas: CAS
-      saml: SAML
     register: Registrarse
     registration_closed: "%{instance} no está aceptando nuevos miembros"
     resend_confirmation: Volver a enviar el correo de confirmación
@@ -788,24 +812,15 @@ es:
     errors:
       invalid_key: no es una clave Ed25519 o Curve25519 válida
       invalid_signature: no es una firma Ed25519 válida
-  date:
-    formats:
-      default: "%b %d, %Y"
-      with_month_name: "%B %d, %Y"
   datetime:
     distance_in_words:
-      about_x_hours: "%{count}h"
       about_x_months: "%{count}m"
       about_x_years: "%{count}a"
       almost_x_years: "%{count}a"
       half_a_minute: Justo ahora
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: Justo ahora
       over_x_years: "%{count}a"
-      x_days: "%{count}d"
-      x_minutes: "%{count}m"
       x_months: "%{count}m"
-      x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: Los datos introducidos son incorrectos
     confirm_password: Ingresa tu contraseña actual para demostrar tu identidad
@@ -851,13 +866,12 @@ es:
     archive_takeout:
       date: Fecha
       download: Descargar tu archivo
-      hint_html: Puedes solicitar un archivo de tus <strong>toots y archivos multimedia subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
+      hint_html: Puedes solicitar un archivo de tus <strong>publicaciones y archivos multimedia subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
       in_progress: Recopilando tu archivo...
       request: Solicitar tu archivo
       size: Tamaño
     blocks: Personas que has bloqueado
     bookmarks: Marcadores
-    csv: CSV
     domain_blocks: Bloqueos de dominios
     lists: Listas
     mutes: Tienes en silencio
@@ -1038,10 +1052,14 @@ es:
       body: 'Fuiste mencionado por %{name} en:'
       subject: Fuiste mencionado por %{name}
       title: Nueva mención
+    poll:
+      subject: Una encuesta de %{name} ha terminado
     reblog:
-      body: "%{name} ha retooteado tu estado:"
-      subject: "%{name} ha retooteado tu estado"
+      body: "%{name} ha retooteado tu publicación:"
+      subject: "%{name} ha retooteado tu publicación"
       title: Nueva difusión
+    status:
+      subject: "%{name} acaba de publicar"
   notifications:
     email_events: Eventos para notificaciones por correo electrónico
     email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:'
@@ -1049,13 +1067,8 @@ es:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
-          billion: B
-          million: M
-          quadrillion: Q
           thousand: m
-          trillion: T
   otp_authentication:
     code_hint: Introduce el código generado por tu aplicación de autentificación para confirmar
     description_html: Si habilitas <strong>autenticación de dos factores</strong> a través de una aplicación de autenticación, el ingreso requerirá que estés en posesión de tu teléfono, que generará códigos para que ingreses.
@@ -1069,7 +1082,6 @@ es:
     next: Próximo
     older: Más antiguo
     prev: Anterior
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Ya has votado en esta encuesta
@@ -1116,55 +1128,30 @@ es:
   remote_interaction:
     favourite:
       proceed: Proceder a marcar como favorito
-      prompt: 'Quieres marcar como favorito este toot:'
+      prompt: 'Quieres marcar como favorita esta publicación:'
     reblog:
       proceed: Proceder a retootear
-      prompt: 'Quieres retootear este toot:'
+      prompt: 'Quieres retootear esta publicación:'
     reply:
       proceed: Proceder a responder
-      prompt: 'Quieres responder a este toot:'
+      prompt: 'Quieres responder a esta publicación:'
   scheduled_statuses:
-    over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día
-    over_total_limit: Ha superado el límite de %{limit} toots programados
+    over_daily_limit: Ha superado el límite de %{limit} publicaciones programadas para ese día
+    over_total_limit: Ha superado el límite de %{limit} publicaciones programadas
     too_soon: La fecha programada debe estar en el futuro
   sessions:
     activity: Última actividad
     browser: Navegador
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Desconocido
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
       nokia: Navegador de Nokia S40 Ovi
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
       qq: Navegador QQ
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Sesión actual
     description: "%{browser} en %{platform}"
     explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: Desconocido
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Revocar
     revoke_success: Sesión revocada exitosamente
     title: Sesiones
@@ -1190,13 +1177,8 @@ es:
     relationships: Siguiendo y seguidores
     two_factor_authentication: Autenticación de dos factores
     webauthn_authentication: Claves de seguridad
-  spam_check:
-    spam_detected: Este es un informe automatizado. Se ha detectado correo no deseado.
   statuses:
     attached:
-      audio:
-        one: "%{count} audio"
-        other: "%{count} audio"
       description: 'Adjunto: %{attached}'
       image:
         one: "%{count} imagen"
@@ -1216,8 +1198,8 @@ es:
     over_character_limit: Límite de caracteres de %{max} superado
     pin_errors:
       limit: Ya has fijado el número máximo de publicaciones
-      ownership: El toot de alguien más no puede fijarse
-      private: Los toots no-públicos no pueden fijarse
+      ownership: La publicación de otra persona no puede fijarse
+      private: Las publicaciones no públicas no pueden fijarse
       reblog: Un boost no puede fijarse
     poll:
       total_people:
@@ -1232,8 +1214,8 @@ es:
     show_older: Mostrar más antiguos
     show_thread: Mostrar discusión
     sign_in_to_participate: Regístrate para participar en la conversación
-    title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Directa
       private: Sólo mostrar a seguidores
       private_long: Solo mostrar a tus seguidores
       public: Público
@@ -1241,7 +1223,7 @@ es:
       unlisted: Público, pero no mostrar en la historia federada
       unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas
   stream_entries:
-    pinned: Toot fijado
+    pinned: Publicación fijada
     reblogged: retooteado
     sensitive_content: Contenido sensible
   tags:
@@ -1336,7 +1318,6 @@ es:
   time:
     formats:
       default: "%d de %b del %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Añadir
     disable: Deshabilitar
@@ -1367,8 +1348,8 @@ es:
       explanation:
         disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee.
         sensitive: Los archivos multimedia subidos y vinculados serán tratados como sensibles.
-        silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente.
-        suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
+        silence: Mientras su cuenta está limitada, sólo las personas que ya te están siguiendo verán tus publicaciones en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otros pueden seguirte manualmente.
+        suspend: Su cuenta ha sido suspendida, y todas tus publicaciones y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
       get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}.
       review_server_policies: Revisar las políticas del servidor
       statuses: 'Específicamente, para:'
@@ -1402,11 +1383,8 @@ es:
       tips: Consejos
       title: Te damos la bienvenida a bordo, %{name}!
   users:
-    blocked_email_provider: Este proveedor de correo electrónico no está permitido
     follow_limit_reached: No puedes seguir a más de %{limit} personas
     generic_access_help_html: "¿Tienes problemas para acceder a tu cuenta? Puedes ponerte en contacto con %{email} para conseguir ayuda"
-    invalid_email: La dirección de correo es incorrecta
-    invalid_email_mx: La dirección de correo electrónico parece inexistente
     invalid_otp_token: Código de dos factores incorrecto
     invalid_sign_in_token: Código de seguridad no válido
     otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email}
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 17f462da1..6239977c7 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -7,7 +7,6 @@ et:
     active_count_after: aktiivne
     active_footnote: Igakuiselt aktiivseid kasutajaid (MAU)
     administered_by: 'Administraator:'
-    api: API
     apps: Mobiilrakendused
     apps_platforms: Kasuta Mastodoni iOS-is, Androidis ja teistel platvormidel
     browse_directory: Sirvi profiilide kataloogi ja filtreeri huvide alusel
@@ -37,7 +36,6 @@ et:
     terms: Kasutustingimused
     unavailable_content: Sisu pole saadaval
     unavailable_content_description:
-      domain: Server
       reason: Põhjus
       rejecting_media: 'Meedia failid sellelt serverilt ei töödelda ega salvestata ning mitte ühtegi eelvaadet ei kuvata, mis nõuab manuaalselt vajutust originaalfailile:'
       silenced: 'Postitused nendelt serveritelt peidetakse avalikes ajajoontes ja vestlustes ning mitte ühtegi teavitust ei tehta nende kasutajate tegevustest, välja arvatud juhul, kui Te neid jälgite:'
@@ -74,7 +72,6 @@ et:
       other: Tuututused
     posts_tab_heading: Tuututused
     posts_with_replies: Tuututused ja vastused
-    reserved_username: Kasutajanimi on reserveeritud
     roles:
       admin: Administraator
       bot: Robot
@@ -125,7 +122,6 @@ et:
       header: Päis
       inbox_url: Sisendkausta URL
       invited_by: Kutsuja
-      ip: IP
       joined: Liitus
       location:
         all: Kõik
@@ -231,42 +227,6 @@ et:
         update_announcement: Uuenda teadaannet
         update_custom_emoji: Uuendas kohandatud emotikoni
         update_status: Uuendas staatust
-      actions:
-        assigned_to_self_report: "%{name} määras teabe %{target} iseendale"
-        change_email_user: "%{name} muutis kasutaja %{target} e-postiaadressit"
-        confirm_user: "%{name} kinnitas kasutaja %{target} e-postiaadressi"
-        create_account_warning: "%{name} saatis kasutajale %{target} hoiatuse"
-        create_announcement: "%{name} lõi uue teadaande %{target}"
-        create_custom_emoji: "%{name} laadis üles uue emotikooni %{target}"
-        create_domain_allow: "%{name} lisas domeeni %{target} lubatute nimekirja"
-        create_domain_block: "%{name} blokeeris domeeni %{target}"
-        create_email_domain_block: "%{name} lisas e-posti domeeni %{target} musta nimekirja"
-        demote_user: "%{name} alandas kasutaja %{target}"
-        destroy_announcement: "%{name} kustutas teadaande %{target}"
-        destroy_custom_emoji: "%{name} kustutas emotikooni %{target}"
-        destroy_domain_allow: "%{name} eemaldas domeeni %{target} lubatute nimekirjast"
-        destroy_domain_block: "%{name} eemaldas blokeeringu domeenilt %{target}"
-        destroy_email_domain_block: "%{name} lisas e-posti domeeni %{target} lubatute nimekirja"
-        destroy_status: "%{name} eemaldas %{target} staatuse"
-        disable_2fa_user: "%{name} eemaldas kaheastmelise autentimise kohustuse kasutajalt %{target}"
-        disable_custom_emoji: "%{name} keelas emotikooni %{target}"
-        disable_user: "%{name} keelas sisselogimise kasutajal %{target}"
-        enable_custom_emoji: "%{name} lubas emotikooni %{target}"
-        enable_user: "%{name} lubas sisselogimise kasutajal %{target}"
-        memorialize_account: "%{name} muutis %{target}-i kasutaja memoriaaliks"
-        promote_user: "%{name} edendas kasutajat %{target}"
-        remove_avatar_user: "%{name} kustutas kasutaja %{target} profiilipildi"
-        reopen_report: "%{name} taasavas teate %{target}"
-        reset_password_user: "%{name} lähtestas parooli kasutajal %{target}"
-        resolve_report: "%{name} lahendas teate %{target}"
-        silence_account: "%{name} vaigistas %{target}-i kasutaja"
-        suspend_account: "%{name} peatas %{target}-i kasutaja"
-        unassigned_report: "%{name} eemaldas määratluse teatelt %{target}"
-        unsilence_account: "%{name} eemaldas vaigistuse %{target}-i kontolt"
-        unsuspend_account: "%{name} eemaldas peatamise %{target}-i kontolt"
-        update_announcement: "%{name} uuendas teadaannet %{target}"
-        update_custom_emoji: "%{name} uuendas emotikooni %{target}"
-        update_status: "%{name} uuendas kasutaja %{target} staatust"
       deleted_status: "(kustutatud staatus)"
       empty: Logisi ei leitud.
       filter_by_action: Filtreeri tegevuse järgi
@@ -329,7 +289,6 @@ et:
       feature_profile_directory: Profiilikataloog
       feature_registrations: Registreerimised
       feature_relay: Föderatsiooni relee
-      feature_spam_check: Rämpsposti filter
       feature_timeline_preview: Ajajoone eelvaade
       features: Omadused
       hidden_service: Föderatsioon peidetud teenustega
@@ -432,7 +391,6 @@ et:
         all: Kõik
         available: Saadaval
         expired: Aegunud
-        title: Filter
       title: Kutsed
     pending_accounts:
       title: Ootel olevad kasutajad (%{count})
@@ -515,8 +473,6 @@ et:
         users: Sisseloginud kohalikele kasutajatele
       domain_blocks_rationale:
         title: Näita põhjendust
-      enable_bootstrap_timeline_accounts:
-        title: Luba vaikimisi jälgimisi uutele kasutajatele
       hero:
         desc_html: Kuvatud kodulehel. Vähemalt 600x100px soovitatud. Kui pole seadistatud, kuvatakse serveri pisililt
         title: Maskotipilt
@@ -567,9 +523,6 @@ et:
         desc_html: Te saate kirjutada oma privaatsuspoliitika, kasutustingimused jm seaduslikku infot. Te saate kasutada HTMLi silte
         title: Kasutustingimused
       site_title: Serveri nimi
-      spam_check_enabled:
-        desc_html: Mastodon suudab automaatselt vaigistada ja teatada kasutajatest, kasutades erinevaid meetmeid, näiteks kui kasutaja saadab korduvalt ebasobivaid sõnumeid. Võib esineda ka valehäireid.
-        title: Rämpsposti filter
       thumbnail:
         desc_html: Kasutatud OpenGraph ja API eelvaadeteks. 1200x630px soovitatud
         title: Serveri pisipilt
@@ -604,9 +557,6 @@ et:
       accounts_today: Unikaalseid kasutusi täna
       accounts_week: Unikaalseid kasutusi see nädal
       breakdown: Tänane kasutus allikate kohta
-      context: Kontekst
-      directory: Kataloogis
-      in_directory: "%{count} kataloogis"
       last_active: Viimati aktiivne
       most_popular: Kõige populaarsemad
       most_recent: Viimased
@@ -650,13 +600,11 @@ et:
     discovery: Avastus
     localization:
       body: Mastodon on tõlgitud vabatahtlike poolt.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Igaüks võib panustada.
     sensitive_content: Tundlik sisu
     toot_layout: Tuututuse kujundus
   application_mailer:
     notification_preferences: Muuda e-kirjade eelistusi
-    salutation: "%{name},"
     settings: 'Muuda e-kirjade eelistusi: %{link}'
     view: 'Vaade:'
     view_profile: Vaata profiili
@@ -688,9 +636,6 @@ et:
     migrate_account: Koli teisele kasutajale
     migrate_account_html: Kui Te soovite seda kontot ümber viia teisele, <a href="%{path}">saate teha seda siit</a>.
     or_log_in_with: Või logi sisse koos
-    providers:
-      cas: CAS
-      saml: SAML
     register: Loo konto
     registration_closed: "%{instance} ei võta vastu uusi liikmeid"
     resend_confirmation: Saada kinnitusjuhendid uuesti
@@ -739,13 +684,10 @@ et:
       about_x_years: "%{count}a"
       almost_x_years: "%{count}a"
       half_a_minute: Just praegu
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: Just praegu
       over_x_years: "%{count}a"
       x_days: "%{count}p"
-      x_minutes: "%{count}m"
       x_months: "%{count}k"
-      x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: Informatsioon, mida sisestasite, oli vale
     confirm_password: Sisesta oma praegune salasõna, et kinnitada oma identiteet
@@ -796,7 +738,6 @@ et:
       request: Taotle oma arhiivi
       size: Suurus
     blocks: Teie blokeerite
-    csv: CSV
     domain_blocks: Domeeni blokeeringud
     lists: Nimistud
     mutes: Teie vaigistate
@@ -981,11 +922,7 @@ et:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
-          billion: B
-          million: M
-          quadrillion: Q
           thousand: T
           trillion: Tr
   pagination:
@@ -993,7 +930,6 @@ et:
     next: Järgmine
     older: Vanemad
     prev: Eelm
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Olete siin juba hääletanud
@@ -1056,40 +992,13 @@ et:
     activity: Viimane aktiivsus
     browser: Veebilehitseja
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Tundmatu veebilehitseja
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Praegune seanss
     description: "%{browser} platvormil %{platform}"
     explanation: Need on praegused veebilehitsejad, mis on sisse logitud Teie Mastodoni kontosse.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: tundmatu platvorm
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Tühista
     revoke_success: Seanssi tühistamine õnnestus
     title: Seanssid
@@ -1114,17 +1023,12 @@ et:
     profile: Profiil
     relationships: Jälgitud ja jälgijad
     two_factor_authentication: Kahesammuline autentimine
-  spam_check:
-    spam_detected: See on automatiseeritud teavitus. Rämpspost on tuvastatud.
   statuses:
     attached:
       description: 'Manused: %{attached}'
       image:
         one: "%{count} pilt"
         other: "%{count} pilti"
-      video:
-        one: "%{count} video"
-        other: "%{count} videot"
     boosted_from_html: Upitatud %{acct_link}
     content_warning: 'Sisu hoiatus: %{warning}'
     disallowed_hashtags:
@@ -1151,7 +1055,6 @@ et:
     show_more: Näita rohkem
     show_thread: Kuva lõim
     sign_in_to_participate: Logi sisse, et liituda vestlusega
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Ainult jälgijatele
       private_long: Näita ainult jälgijatele
@@ -1226,7 +1129,6 @@ et:
       title: Tere tulemast pardale, %{name}!
   users:
     follow_limit_reached: Te ei saa jälgida rohkem kui %{limit} inimest
-    invalid_email: See e-posti aadress on vale
     invalid_otp_token: Vale kaheastmelise autentimise kood
     otp_lost_help_html: Kui Te kaotasite ligipääsu mõlemale, saate võtta ühendust %{email}-iga
     seamless_external_login: Te olete sisse loginud läbi väljaspool asuva teenusega, niiet salasõna ja e-posti sätted pole saadaval.
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index cd82a5d9a..cd84e5d17 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -1,8 +1,8 @@
 ---
 eu:
   about:
-    about_hashtag_html: Hauek  <strong>#%{hashtag}</strong> traola duten toot publikoak dira. Fedibertsoko edozein kontu baduzu harremanetan jarri zaitezke.
-    about_mastodon_html: Mastodon web protokolo ireki eta libreak darabiltzan gizarte sare bat da. E-mail sarea bezala deszentralizatua da.
+    about_hashtag_html: Hauek <strong>#%{hashtag}</strong> traola duten bidalketa publikoak dira. Fedibertsoko edozein kontu baduzu harremanetan jarri zaitezke.
+    about_mastodon_html: 'Etorkizuneko sare soziala: ez iragarkirik eta ez zelatatze korporatiborik, diseinu etikoa eta deszentralizazioa! Izan zure datuen jabea Mastodonekin!'
     about_this: Honi buruz
     active_count_after: aktibo
     active_footnote: Hilabeteko erabiltzaile aktiboak (HEA)
@@ -11,8 +11,8 @@ eu:
     apps: Aplikazio mugikorrak
     apps_platforms: Erabili Mastodon, iOS, Android eta beste plataformetatik
     browse_directory: Arakatu profilen direktorio bat eta iragazi interesen arabera
-    browse_local_posts: Ikusi zerbitzari honetako mezu publikoen zuzeneko jario bat
-    browse_public_posts: Arakatu Mastodoneko mezu publikoen zuzeneko jario bat
+    browse_local_posts: Arakatu zerbitzari honetako bidalketa publikoen zuzeneko jario bat
+    browse_public_posts: Arakatu Mastodoneko bidalketa publikoen zuzeneko jario bat
     contact: Kontaktua
     contact_missing: Ezarri gabe
     contact_unavailable: E/E
@@ -21,17 +21,17 @@ eu:
     federation_hint_html: "%{instance} instantzian kontu bat izanda edozein Mastodon zerbitzariko jendea jarraitu ahal izango duzu, eta harago ere."
     get_apps: Probatu mugikorrerako aplikazio bat
     hosted_on: Mastodon %{domain} domeinuan ostatatua
-    instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke.
-
-'
+    instance_actor_flash: "Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. \n"
     learn_more: Ikasi gehiago
     privacy_policy: Pribatutasun politika
+    rules: Zerbitzariaren arauak
+    rules_html: 'Behean Mastodon zerbitzari honetan kontua eduki nahi baduzu jarraitu beharreko arauen laburpena daukazu:'
     see_whats_happening: Ikusi zer gertatzen ari den
     server_stats: 'Zerbitzariaren estatistikak:'
     source_code: Iturburu kodea
     status_count_after:
-      one: mezu
-      other: mezu
+      one: bidalketa
+      other: bidalketa
     status_count_before: Hauek
     tagline: Jarraitu lagunak eta egin berriak
     terms: Erabilera baldintzak
@@ -40,8 +40,11 @@ eu:
       domain: Zerbitzaria
       reason: Arrazoia
       rejecting_media: 'Zerbitzari hauetako multimedia fitxategiak ez dira prozesatuko ez gordeko, eta ez dira iruditxoak bistaratuko, jatorrizko irudira joan behar izango da klik eginez:'
-      silenced: 'Zerbitzari hauetako mezuak denbora-lerro eta elkarrizketa publikoetan ezkutatuko dira, eta bere erabiltzaileen interakzioek ez dute jakinarazpenik sortuko ez badituzu jarraitzen:'
+      rejecting_media_title: Iragazitako multimedia
+      silenced: 'Zerbitzari hauetako bidalketak denbora-lerro eta elkarrizketa publikoetan ezkutatuko dira, eta bere erabiltzaileen interakzioek ez dute jakinarazpenik sortuko ez badituzu jarraitzen:'
+      silenced_title: Isilarazitako zerbitzariak
       suspended: 'Ez da zerbitzari hauetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari hauetako erabiltzaileekin komunikatzea ezinezkoa eginez:'
+      suspended_title: Kanporatutako zerbitzariak
     unavailable_content_html: Mastodonek orokorrean fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikustea eta beraiekin aritzea ahalbidetzen dizu. Salbuespena egin da zerbitzari zehatz honekin.
     user_count_after:
       one: erabiltzaile
@@ -57,6 +60,7 @@ eu:
       one: Jarraitzaile
       other: jarraitzaile
     following: Jarraitzen
+    instance_actor_flash: Kontu hau zerbitzaria adierazten duen aktore birtual bat da eta ez banako erabiltzaile bat. Federatzeko helburuarekin erabiltzen da eta ez da kanporatu behar.
     joined: "%{date}(e)an elkartua"
     last_active: azkenekoz aktiboa
     link_verified_on: 'Esteka honen jabetzaren egiaztaketa data: %{date}'
@@ -70,11 +74,10 @@ eu:
     pin_errors:
       following: Onetsi nahi duzun pertsona aurretik jarraitu behar duzu
     posts:
-      one: Toot
-      other: Toot
-    posts_tab_heading: Tootak
-    posts_with_replies: Tootak eta erantzunak
-    reserved_username: Erabiltzaile-izena erreserbatuta dago
+      one: Bidalketa
+      other: Bidalketa
+    posts_tab_heading: Bidalketa
+    posts_with_replies: Bidalketak eta erantzunak
     roles:
       admin: Administratzailea
       bot: Bot-a
@@ -95,6 +98,7 @@ eu:
       add_email_domain_block: Sartu domeinua zerrenda beltzean
       approve: Onartu
       approve_all: Onartu denak
+      approved_msg: "%{username} erabiltzailearen erregistratzeko eskaera behar bezala onartu da"
       are_you_sure: Ziur zaude?
       avatar: Abatarra
       by_domain: Domeinua
@@ -108,8 +112,10 @@ eu:
       confirm: Berretsi
       confirmed: Berretsita
       confirming: Berresten
+      delete: Ezabatu datuak
       deleted: Ezabatua
       demote: Jaitsi mailaz
+      destroyed_msg: "%{username} erabiltzailearen datuak behin betiko ezabatzeko ilaran daude"
       disable: Desgaitu
       disable_two_factor_authentication: Desgaitu 2FA
       disabled: Desgaituta
@@ -120,10 +126,12 @@ eu:
       email_status: Posta elektronikoaren egoera
       enable: Gaitu
       enabled: Gaituta
+      enabled_msg: "%{username} kontua behar bezala desblokeatu da"
       followers: Jarraitzaileak
       follows: Jarraitzen du
       header: Goiburua
       inbox_url: Sarrera ontziaren URL-a
+      invite_request_text: Bat egiteko arrazoiak
       invited_by: 'Honek gonbidatua:'
       ip: IP-a
       joined: Elkartuta
@@ -135,6 +143,8 @@ eu:
       login_status: Saioaren egoera
       media_attachments: Multimedia eranskinak
       memorialize: Bihurtu memoriala
+      memorialized: Oroigarri bihurtua
+      memorialized_msg: "%{username} behar bezala bihurtu da oroigarri kontu"
       moderation:
         active: Aktiboa
         all: Denak
@@ -155,10 +165,14 @@ eu:
       public: Publikoa
       push_subscription_expires: Push harpidetzaren iraugitzea
       redownload: Freskatu profila
+      redownloaded_msg: "%{username} erabiltzailearen profila behar bezala freskatu da jatorritik"
       reject: Ukatu
       reject_all: Ukatu denak
+      rejected_msg: "%{username} erabiltzailearen izen emate eskaera behar bezala ukatu da"
       remove_avatar: Kendu abatarra
       remove_header: Kendu goiburua
+      removed_avatar_msg: "%{username} erabiltzailearen avatarra behar bezala kendu da"
+      removed_header_msg: "%{username} erabiltzailearen goiburuko irudia behar bezala kendu da"
       resend_confirmation:
         already_confirmed: Erabiltzaile hau berretsita dago
         send: Birbidali baieztapen e-maila
@@ -175,22 +189,30 @@ eu:
       search: Bilatu
       search_same_email_domain: E-mail domeinu bera duten beste erabiltzailean
       search_same_ip: IP bera duten beste erabiltzaileak
+      sensitive: Hunkigarria
+      sensitized: hunkigarri gisa markatua
       shared_inbox_url: Partekatutako sarrera ontziaren URL-a
       show:
         created_reports: Sortutako txostenak
         targeted_reports: Besteen salaketak
       silence: Isilarazi
       silenced: Isilarazita
-      statuses: Mezuak
+      statuses: Bidalketa
       subscribe: Harpidetu
       suspended: Kanporatuta
+      suspension_irreversible: Kontu honen datuak behin betiko ezabatu dira. Kontua kanporatzea atzera bota dezakezu, berriz erabilgarri izan dadin, baina datuak ezingo dira berreskuratu.
+      suspension_reversible_hint_html: Kontu hau kanporatua izan da eta bere datuak %{date}(e)an behin betiko ezabatuko dira. Ordura arte kontua kalterik gabe leheneratu daiteke. Kontuaren datu guztiak oraintxe bertan ezabatu nahi badituzu, jarraian egin dezakezu.
       time_in_queue: Kolan zain %{time}
       title: Kontuak
       unconfirmed_email: Baieztatu gabeko e-mail helbidea
+      undo_sensitized: Desegin hunkigarria
       undo_silenced: Utzi isilarazteari
       undo_suspension: Desegin kanporatzea
+      unsilenced_msg: "%{username} kontuaren mugak behar bezala kendu dira"
       unsubscribe: Kendu harpidetza
+      unsuspended_msg: "%{username} kontuaren kanporatzea behar bezala bota da atzera"
       username: Erabiltzaile-izena
+      view_domain: Ikusi domeinuaren laburpena
       warn: Abisatu
       web: Weba
       whitelisted: Zerrenda zurian
@@ -205,55 +227,83 @@ eu:
         create_domain_allow: Sortu domeinu baimena
         create_domain_block: Sortu domeinu blokeoa
         create_email_domain_block: Sortu e-mail domeinu blokeoa
+        create_ip_block: Sortu IP araua
+        create_unavailable_domain: Sortu eskuragarri ez dagoen domeinua
+        demote_user: Jaitsi erabiltzailearen maila
         destroy_announcement: Ezabatu iragarpena
         destroy_custom_emoji: Ezabatu emoji pertsonalizatua
         destroy_domain_allow: Ezabatu domeinu baimena
         destroy_domain_block: Ezabatu domeinu blokeoa
         destroy_email_domain_block: Ezabatu e-mail domeinu blokeoa
-        destroy_status: Ezabatu mezua
+        destroy_ip_block: Ezabatu IP araua
+        destroy_status: Ezabatu bidalketa
+        destroy_unavailable_domain: Ezabatu eskuragarri ez dagoen domeinua
         disable_2fa_user: Desgaitu 2FA
         disable_custom_emoji: Desgaitu emoji pertsonalizatua
         disable_user: Desgaitu erabiltzailea
         enable_custom_emoji: Gaitu emoji pertsonalizatua
         enable_user: Gaitu erabiltzailea
+        memorialize_account: Bihurtu kontua oroigarri
+        promote_user: Igo erabiltzailea mailaz
+        remove_avatar_user: Kendu abatarra
+        reopen_report: Berrireki txostena
+        reset_password_user: Berrezarri pasahitza
+        resolve_report: Konpondu txostena
+        sensitive_account: Markatu zure kontuko multimedia hunkigarri bezala
+        silence_account: Isilarazi kontua
+        suspend_account: Kanporatu kontua
+        unassigned_report: Kendu txostenaren esleipena
+        unsensitive_account: Utzi zure kontuko multimedia hunkigarri bezala markatzeari
+        unsilence_account: Utzi kontua isilarazteari
+        unsuspend_account: Atzera bota kontua kanporatzea
         update_announcement: Eguneratu iragarpena
+        update_custom_emoji: Eguneratu emoji pertsonalizatua
+        update_domain_block: Eguneratu domeinu-blokeoa
+        update_status: Eguneratu bidalketa
       actions:
-        assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio"
-        change_email_user: "%{name}(e)k %{target}(r)en e-mail helbidea aldatu du"
-        confirm_user: "%{name}(e)k %{target}(r)en e-mail helbidea berretsi du"
-        create_account_warning: "%{name}-k abisua bidali dio %{target}-ri"
-        create_announcement: "%{name}(e)k %{target}(e)rako iragarpen berria sortu du"
-        create_custom_emoji: "%{name}(e)k emoji berria kargatu du %{target}"
-        create_domain_allow: "%{name}(e)k %{target} domeinua zerrenda zurian zartu du"
-        create_domain_block: "%{name}(e)k %{target} domeinua blokeatu du"
-        create_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda beltzean sartu du"
-        demote_user: "%{name}(e)k %{target} mailaz jaitsi du"
-        destroy_announcement: "%{name}(e)k %{target}(e)rako iragarpena kendu du"
-        destroy_custom_emoji: "%{name} erabiltzaileak %{target} emojia suntsitu du"
-        destroy_domain_allow: "%{name}(e)k %{target} domeinua zerrenda zuritik kendu du"
-        destroy_domain_block: "%{name}(e)k %{target} domeinua desblokeatu du"
-        destroy_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda zurian sartu du"
-        destroy_status: "%{name}(e)k %{target}(e)n egoera kendu du"
-        disable_2fa_user: "%{name}(e)k %{target}(r)i bi faktoreetako eskaera kendu dio"
-        disable_custom_emoji: "%{name}(e)k %{target} emoji-a desgaitu du"
-        disable_user: "%{name}(e)k %{target}(r)en saioa desgaitu du"
-        enable_custom_emoji: "%{name}(e)k %{target} emoji-a gaitu du"
-        enable_user: "%{name}(e)k %{target} erabiltzailearen saioa gaitu du"
-        memorialize_account: "%{name}(e)k %{target}(r)en kontua memoriala bihurtu du"
-        promote_user: "%{name}(e)k %{target}(r)en kategoria igo du"
-        remove_avatar_user: "%{name}(e)k %{target}(r)en abatarra kendu du"
-        reopen_report: "%{name}(e)k %{target}(r)en salaketa berrireki du"
-        reset_password_user: "%{name}(e)k %{target}(r)en pasahitza berrezarri du"
-        resolve_report: "%{name}(e)k %{target}(r)en salaketa konpondu du"
-        silence_account: "%{name}(e)k %{target}(r)en kontua isilarazi du"
-        suspend_account: "%{name}(e)k %{target} kontua kanporatu du"
-        unassigned_report: "%{name}(e)k %{target} txotenaren esleipena atzera bota du"
-        unsilence_account: "%{name}(e)k %{target} isilarazteko agindua kendu du"
-        unsuspend_account: "%{name}(e)k %{target} kontuaren kanporaketa atzera bota du"
-        update_announcement: "%{name}(e)k %{target}(e)rako iragarpena eguneratu du du"
-        update_custom_emoji: "%{name}(e)k %{target} emoji-a eguneratu du"
-        update_status: "%{name} (e)k %{target}(r)en mezua aldatu du"
-      deleted_status: "(ezabatutako mezua)"
+        assigned_to_self_report_html: "%{name} erabiltzaileak %{target} salaketa bere buruari esleitu dio"
+        change_email_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen e-posta helbidea aldatu du"
+        confirm_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen e-posta helbidea berretsi du"
+        create_account_warning_html: "%{name} erabiltzaileak abisua bidali dio %{target} erabiltzaileari"
+        create_announcement_html: "%{name} erabiltzaileak %{target} iragarpen berria sortu du"
+        create_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji berria kargatu du"
+        create_domain_allow_html: "%{name} erabiltzaileak %{target} domeinuarekin federazioa onartu du"
+        create_domain_block_html: "%{name} erabiltzaileak %{target} domeinua blokeatu du"
+        create_email_domain_block_html: "%{name} erabiltzaileak %{target} e-posta helbideen domeinua blokeatu du"
+        create_ip_block_html: "%{name} kontuak %{target} IParen araua sortu du"
+        create_unavailable_domain_html: "%{name}(e)k %{target} domeinurako banaketa gelditu du"
+        demote_user_html: "%{name} erabiltzaileak %{target} erabiltzailea mailaz jaitsi du"
+        destroy_announcement_html: "%{name} erabiltzaileak %{target} iragarpena ezabatu du"
+        destroy_custom_emoji_html: "%{name} erabiltzaileak %{target} emojia suntsitu du"
+        destroy_domain_allow_html: "%{name} erabiltzaileak %{target} domeinuarekin federatzea debekatu du"
+        destroy_domain_block_html: "%{name} erabiltzaileak %{target} domeinua desblokeatu du"
+        destroy_email_domain_block_html: "%{name} erabiltzaileak %{target} e-posta helbideen domeinua desblokeatu du"
+        destroy_ip_block_html: "%{name} erabiltzaileak %{target} IParen araua ezabatu du"
+        destroy_status_html: "%{name} erabiltzaileak %{target} erabiltzailearen bidalketa kendu du"
+        destroy_unavailable_domain_html: "%{name}(e)k %{target} domeinurako banaketari berrekin dio"
+        disable_2fa_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen bi faktoreko autentifikazioa desgaitu du"
+        disable_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji-a desgaitu du"
+        disable_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen saioa desgaitu du"
+        enable_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji-a gaitu du"
+        enable_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen saioa gaitu du"
+        memorialize_account_html: "%{name} erabiltzaileak %{target} kontua memoriala bihurtu du"
+        promote_user_html: "%{name} erabiltzaileak %{target} erabiltzailea mailaz igo du"
+        remove_avatar_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen abatarra kendu du"
+        reopen_report_html: "%{name} erabiltzaileak %{target} txostena berrireki du"
+        reset_password_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen pasahitza berrezarri du"
+        resolve_report_html: "%{name} erabiltzaileak %{target} txostena konpondu du"
+        sensitive_account_html: "%{name} erabiltzaileak %{target} erabiltzailearen multimedia hunkigarri bezala markatu du"
+        silence_account_html: "%{name} erabiltzaileak %{target} kontua isilarazi du"
+        suspend_account_html: "%{name} erabiltzaileak %{target} kontua kanporatu du"
+        unassigned_report_html: "%{name} erabiltzaileak %{target} txostenaren esleipena atzera bota du"
+        unsensitive_account_html: "%{name} erabiltzaileak %{target} erabiltzailearen multimedia hunkigarri bezala markatzeari utzi dio"
+        unsilence_account_html: "%{name} erabiltzaileak %{target} kontua isilarazteari utzi dio"
+        unsuspend_account_html: "%{name} erabiltzaileak %{target} kontuaren kanporaketa atzera bota du"
+        update_announcement_html: "%{name} erabiltzaileak %{target} iragarpena eguneratu du"
+        update_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji-a eguneratu du"
+        update_domain_block_html: "%{name} erabiltzaileak %{target} domeinu-blokeoa eguneratu du"
+        update_status_html: "%{name} erabiltzaileak %{target} erabiltzailearen bidalketa eguneratu du"
+      deleted_status: "(ezabatutako bidalketa)"
       empty: Ez da egunkaririk aurkitu.
       filter_by_action: Iragazi ekintzen arabera
       filter_by_user: Iragazi erabiltzaileen arabera
@@ -267,10 +317,12 @@ eu:
       new:
         create: Sortu iragarpena
         title: Iragarpen berria
+      publish: Argitaratu
       published_msg: Iragarpena ongi argitaratu da!
       scheduled_for: "%{time}-rako programatuta"
       scheduled_msg: Iragarpena argitaratzeko programatuta!
       title: Iragarpenak
+      unpublish: Desargitaratu
       unpublished_msg: Iragarpena ongi desargitaratu da!
       updated_msg: Iragarpena ongi eguneratu da!
     custom_emojis:
@@ -295,6 +347,7 @@ eu:
       listed: Zerrendatua
       new:
         title: Gehitu emoji pertsonal berria
+      not_permitted: Ez daukazu ekintza hau burutzeko baimenik
       overwrite: Gainidatzi
       shortcode: Laster-kodea
       shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarra  besterik ez
@@ -314,7 +367,6 @@ eu:
       feature_profile_directory: Profil-direktorioa
       feature_registrations: Izen emateak
       feature_relay: Federazio errelea
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Denbora-lerroaren aurrebista
       features: Ezaugarriak
       hidden_service: Federazioa ezkutuko zerbitzuekin
@@ -349,11 +401,13 @@ eu:
         create: Sortu blokeoa
         hint: Domeinuaren blokeoak ez du eragotziko kontuen sarrerak sortzea datu-basean, baina automatikoki ezarriko zaizkie moderazio metodo bereziak iraganeko mezuetan ere.
         severity:
-          desc_html: "<strong>Isilarazi</strong>-k kontuko mezuak jarraitzaileek besterik ez ikustea eragingo du. <strong>Kanporatu</strong>-k kontuaren edukia, multimedia eta profileko datuak ezabatuko ditu. <strong>Bat ere ez</strong> nahi duzun guztia multimedia fitxategiak ukatzea bada."
+          desc_html: "<strong>Isilarazi</strong>-k kontuko bidalketak jarraitzaileek besterik ez ikustea eragingo du. <strong>Kanporatu</strong>-k kontuaren edukia, multimedia eta profileko datuak ezabatuko ditu. <strong>Bat ere ez</strong> nahi duzun guztia multimedia fitxategiak ukatzea bada."
           noop: Bat ere ez
           silence: Isilarazi
           suspend: Kanporatu
         title: Domeinuaren blokeo berria
+      obfuscate: Lausotu domeinu-izena
+      obfuscate_hint: Domeinuaren izena partzialki lausotu zerrendan, domeinuen zerrenda iragartzea mugatzea gaituta badago
       private_comment: Iruzkin pribatua
       private_comment_hint: Domeinu hau mugatzeari buruzko iruzkina moderatzaileen barne erabilerarako.
       public_comment: Iruzkin publikoa
@@ -390,9 +444,35 @@ eu:
         create: Gehitu domeinua
         title: Sarrera berria e-mail zerrenda beltzean
       title: E-mail zerrenda beltza
+    follow_recommendations:
+      description_html: "<strong>Jarraitzeko gomendioek erabiltzaile berriei eduki interesgarria azkar aurkitzen laguntzen diete</strong>. Erabiltzaile batek jarraitzeko gomendio pertsonalizatuak jasotzeko adina interakzio izan ez duenean, kontu hauek gomendatzen zaizkio. Egunero birkalkulatzen dira hizkuntza bakoitzerako, azken aldian parte-hartze handiena izan duten eta jarraitzaile lokal gehien dituzten kontuak nahasiz."
+      language: Hizkuntza
+      status: Egoera
+      suppress: Kendu jarraitzeko gomendioa
+      suppressed: Kenduta
+      title: Jarraitzeko gomendioak
+      unsuppress: Berrezarri jarraitzeko gomendioa
     instances:
+      back_to_all: Guztiak
+      back_to_limited: Mugatua
+      back_to_warning: Abisua
       by_domain: Domeinua
+      delivery:
+        all: Guztiak
+        clear: Garbitu banaketa erroreak
+        restart: Berrabiarazi banaketa
+        stop: Gelditu banaketa
+        title: Banaketa
+        unavailable: Eskuraezina
+        unavailable_message: Banaketa ez dago eskuragarri
+        warning: Abisua
+        warning_message:
+          one: Banaketa hutsegitea egun %{count}
+          other: Banaketa hutsegitea %{count} egun
       delivery_available: Bidalketa eskuragarri dago
+      delivery_error_days: Banaketa errore egunak
+      delivery_error_hint: Banaketa ezin bada %{count} egunean egin, banaezin bezala markatuko da automatikoki.
+      empty: Ez da domeinurik aurkitu.
       known_accounts:
         one: Kontu ezagun %{count}
         other: "%{count} kontu ezagun"
@@ -416,6 +496,21 @@ eu:
         expired: Iraungitua
         title: Iragazi
       title: Gonbidapenak
+    ip_blocks:
+      add_new: Sortu araua
+      created_msg: IP arau berria behar bezala gehitu da
+      delete: Ezabatu
+      expires_in:
+        '1209600': 2 aste
+        '15778476': 6 hilabete
+        '2629746': Hilabete 1
+        '31556952': Urte 1
+        '86400': Egun 1
+        '94670856': 3 urte
+      new:
+        title: Sortu IP arau berria
+      no_ip_block_selected: Ez da IP araurik aldatu, ez delako batere hautatu
+      title: IP arauak
     pending_accounts:
       title: Zain dauden kontuak (%{count})
     relationships:
@@ -423,11 +518,11 @@ eu:
     relays:
       add_new: Gehitu hari errelea
       delete: Ezabatu
-      description_html: "<strong>Federazio errele</strong> bat zerbitzari tartekari bat da, bertara harpidetutako eta bertan argitaratzen duten zerbitzarien artean toot publiko kopuru handiak banatzen ditu. <strong>Zerbitzari txiki eta ertainei Fedibertsoko edukia aurkitzen laguntzen die</strong>, bestela erabiltzaile lokalek eskuz jarraitu beharko lituzkete urruneko zerbitzarietako erabiltzaileak."
+      description_html: "<strong>Federazio errele</strong> bat zerbitzari tartekari bat da, bertara harpidetutako eta bertan argitaratzen duten zerbitzarien artean bidalketa publiko kopuru handiak banatzen ditu. <strong>Zerbitzari txiki eta ertainei Fedibertsoko edukia aurkitzen laguntzen die</strong>, bestela erabiltzaile lokalek eskuz jarraitu beharko lituzkete urruneko zerbitzarietako erabiltzaileak."
       disable: Desgaitu
       disabled: Desgaituta
       enable: Gaitu
-      enable_hint: Behin gaituta, zure zerbitzaria errele honetako toot publiko guztietara harpidetuko da, eta zerbitzari honetako toot publikoak errelera bidaltzen hasiko da.
+      enable_hint: Behin gaituta, zure zerbitzaria errele honetako bidalketa publiko guztietara harpidetuko da, eta zerbitzari honetako bidalketa publikoak errelera bidaltzen hasiko da.
       enabled: Gaituta
       inbox_url: Errelearen URLa
       pending: Erreleak onartzearen zain
@@ -455,6 +550,8 @@ eu:
       comment:
         none: Bat ere ez
       created_at: Salatua
+      forwarded: Birbidalia
+      forwarded_to: 'Hona birbidalia: %{domain}'
       mark_as_resolved: Markatu konpondutako gisa
       mark_as_unresolved: Markatu konpondu gabeko gisa
       notes:
@@ -474,9 +571,16 @@ eu:
       unassign: Kendu esleipena
       unresolved: Konpondu gabea
       updated_at: Eguneratua
+    rules:
+      add_new: Gehitu araua
+      delete: Ezabatu
+      description_html: Gehienek erabilera baldintzak irakurri eta onartu dituztela baieztatzen badute ere, orokorrean arazoren bat dagoen arte ez dituzte irakurtzen. <strong>Zerbitzariaren arauak begirada batean ikustea errazteko buletadun zerrenda batean bildu.</strong> Saiatu arauak labur eta sinple idazten, baina elementu askotan banatu gabe.
+      edit: Editatu araua
+      empty: Ez da zerbitzariko araurik definitu oraindik.
+      title: Zerbitzariaren arauak
     settings:
       activity_api_enabled:
-        desc_html: Lokalki bidalitako mezu kopurua, erabiltzaile aktiboak, eta izen emate berriak asteko
+        desc_html: Lokalki argitaratutako bidalketa kopurua, erabiltzaile aktiboak, eta izen emate berriak asteko
         title: Argitaratu erabiltzaile-jardueraren estatistikak
       bootstrap_timeline_accounts:
         desc_html: Banandu erabiltzaile-izenak koma bitartez. Giltzapetu gabeko kontu lokalekin dabil bakarrik. Hutsik dagoenean lehenetsitakoa admin lokal guztiak da.
@@ -497,8 +601,6 @@ eu:
         users: Saioa hasita duten erabiltzaile lokalei
       domain_blocks_rationale:
         title: Erakutsi arrazoia
-      enable_bootstrap_timeline_accounts:
-        title: Gaitu lehenetsitako jarraipena erabiltzaile berrientzat
       hero:
         desc_html: Azaleko orrian bistaratua. Gutxienez 600x100px aholkatzen da. Ezartzen ez bada, zerbitzariaren irudia hartuko du
         title: Azaleko irudia
@@ -524,6 +626,9 @@ eu:
         min_invite_role:
           disabled: Inor ez
           title: Baimendu hauen gobidapenak
+        require_invite_text:
+          desc_html: Izen emateak eskuz onartu behar direnean, "Zergatik elkartu nahi duzu?" testu sarrera derrigorrezko bezala ezarri, ez hautazko
+          title: Eskatu erabiltzaile berriei bat egiteko arrazoia sartzeko
       registrations_mode:
         modes:
           approved: Izena emateko onarpena behar da
@@ -549,9 +654,6 @@ eu:
         desc_html: Zure pribatutasun politika, erabilera baldintzak eta bestelako testu legalak idatzi ditzakezu. HTML etiketak erabili ditzakezu
         title: Erabilera baldintza pertsonalizatuak
       site_title: Zerbitzariaren izena
-      spam_check_enabled:
-        desc_html: Mastodonek automatikoki isildu eta salatu ditzake kontuak neurriei jarraituz, esaterako eskatu gabeko mezuak behin eta berriro bidaltzen dituzten kontuak antzemanez. Positibo faltsuak gertatu daitezke.
-        title: Anti-spam
       thumbnail:
         desc_html: Aurrebistetarako erabilia OpenGraph eta API bidez. 1200x630px aholkatzen da
         title: Zerbitzariaren iruditxoa
@@ -579,16 +681,21 @@ eu:
       media:
         title: Multimedia
       no_media: Multimediarik ez
-      no_status_selected: Ez da mezurik aldatu ez delako mezurik aukeratu
-      title: Kontuaren mezuak
+      no_status_selected: Ez da bidalketarik aldatu ez delako bidalketarik aukeratu
+      title: Kontuaren bidalketak
       with_media: Multimediarekin
+    system_checks:
+      database_schema_check:
+        message_html: Aplikatu gabeko datu-basearen migrazioak daude. Exekutatu aplikazioak esperotako portaera izan dezan
+      rules_check:
+        action: Kudeatu zerbitzariaren arauak
+        message_html: Ez duzu zerbitzariaren araurik definitu.
+      sidekiq_process_check:
+        message_html: Ez da ari Sidekiq prozesurik exekutatzen %{value} ilad(et)an. Egiaztatu Sidekiq konfigurazioa
     tags:
       accounts_today: Erabilera bakanak gaur
       accounts_week: Erabilera bakanak aste honetan
       breakdown: Gaurko erabilera iturriaren arabera
-      context: Testuingurua
-      directory: Direktorioan
-      in_directory: "%{count} direktorioan"
       last_active: Azkenekoz aktiboa
       most_popular: Erabilienak
       most_recent: Azkenak
@@ -597,7 +704,7 @@ eu:
       reviewed: Berrikusita
       title: Traolak
       trending_right_now: Joera orain
-      unique_uses_today: "%{count} idazten gaur"
+      unique_uses_today: "%{count} bidalketa gaur"
       unreviewed: Berrikusi gabe
       updated_msg: Traola-ezarpenak ongi eguneratu dira
     title: Administrazioa
@@ -605,6 +712,7 @@ eu:
       add_new: Gehitu berria
       delete: Ezabatu
       edit_preset: Editatu abisu aurre-ezarpena
+      empty: Ez duzu abisu aurrezarpenik definitu oraindik.
       title: Kudeatu abisu aurre-ezarpenak
   admin_mailer:
     new_pending_account:
@@ -635,14 +743,14 @@ eu:
       guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Edonork lagundu dezake.
     sensitive_content: Eduki hunkigarria
-    toot_layout: Toot disposizioa
+    toot_layout: Bidalketen diseinua
   application_mailer:
     notification_preferences: Aldatu e-mail hobespenak
     salutation: "%{name},"
     settings: 'Aldatu e-mail hobespenak: %{link}'
     view: 'Ikusi:'
     view_profile: Ikusi profila
-    view_status: Ikusi mezua
+    view_status: Ikusi bidalketa
   applications:
     created: Aplikazioa ongi sortu da
     destroyed: Aplikazioa ongi ezabatu da
@@ -661,10 +769,13 @@ eu:
     description:
       prefix_invited_by_user: "@%{name} erabiltzaileak Mastodon zerbitzari honetara elkartzera gonbidatzen zaitu!"
       prefix_sign_up: Eman izena Mastodon-en!
-      suffix: Kontu bat baduzu, jendea jarraitu ahal izango duzu, mezuak bidali eta Mastodon zein kanpoko zerbitzarietako erabiltzaileekin elkarrizketan aritu!
+      suffix: Kontu bat baduzu, jendea jarraitu ahal izango duzu, bidalketak sortu eta Mastodon zein kanpoko zerbitzarietako erabiltzaileekin elkarrizketan aritu!
     didnt_get_confirmation: Ez dituzu berresteko argibideak jaso?
+    dont_have_your_security_key: Ez daukazu zure segurtasun gakoa?
     forgot_password: Pasahitza ahaztu duzu?
     invalid_reset_password_token: Pasahitza berrezartzeko token-a baliogabea da edo iraungitu du. Eskatu beste bat.
+    link_to_otp: Erabili zure mugikorreko bi faktoreko kodea edo berreskuratze kode bat
+    link_to_webauth: Erabili zure segurtasun gako gailua
     login: Hasi saioa
     logout: Amaitu saioa
     migrate_account: Migratu beste kontu batera
@@ -689,7 +800,9 @@ eu:
       functional: Zure kontua guztiz erabilgarri dago.
       pending: Zure eskaera gainbegiratzeko dago oraindik. Honek denbora behar lezake. Zure eskaera onartzen bada e-mail bat jasoko duzu.
       redirecting_to: Zure kontua ez dago aktibo orain %{acct} kontura birbideratzen duelako.
+    too_fast: Formularioa azkarregi bidali duzu, saiatu berriro.
     trouble_logging_in: Arazoak saioa hasteko?
+    use_security_key: Erabili segurtasun gakoa
   authorize_follow:
     already_following: Kontu hau aurretik jarraitzen duzu
     already_requested: Bidali duzu dagoeneko kontu hori jarraitzeko eskaera bat
@@ -707,9 +820,14 @@ eu:
     hint_html: "<strong>Oharra:</strong> Ez dizugu pasahitza berriro eskatuko ordu batez."
     invalid_password: Pasahitz baliogabea
     prompt: Berretsi pasahitza jarraitzeko
+  crypto:
+    errors:
+      invalid_key: ez da baliozko Ed25519 edo Curve25519 gakoa
+      invalid_signature: ez da baliozko Ed25519 sinadura
   date:
     formats:
       default: "%Y(e)ko %b %d"
+      with_month_name: "%Y(e)ko %B %d"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}h"
@@ -733,7 +851,7 @@ eu:
     warning:
       before: 'Jarraitu aurretik, irakurri adi ohar hauek:'
       caches: Beste zerbitzariek cachean duten edukia mantentzea gerta daiteke
-      data_removal: Zure mezuak eta beste datuak behin betiko ezabatuko dira
+      data_removal: Zure bidalketak eta beste datuak behin betiko ezabatuko dira
       email_change_html: <a href="%{path}">Zure e-mail helbidea aldatu dezakezu</a> kontua ezabatu gabe
       email_contact_html: Oraindik heltzen ez bada, e-mail bai bidali dezakezu <a href="mailto:%{email}">%{email}</a> helbidera laguntza eskatzeko
       email_reconfirmation_html: Ez baduzu baieztamen e-maila jasotzen, <a href="%{path}">berriro eskatu</a> dezakezu
@@ -769,11 +887,12 @@ eu:
     archive_takeout:
       date: Data
       download: Deskargatu zure artxiboa
-      hint_html: Zure <strong>toot eta igotako multimedia</strong>ren artxibo bat eskatu dezakezu. Esportatutako datuak ActivityPub formatua izango dute, bateragarria den edozein programarekin irakurtzeko. Artxiboa 7 egunetan behin eska dezakezu.
+      hint_html: Zure <strong>bidalketa eta igotako multimedia</strong>ren artxibo bat eskatu dezakezu. Esportatutako datuak ActivityPub formatua izango dute, bateragarria den edozein programarekin irakurtzeko. Artxiboa 7 egunean behin eska dezakezu.
       in_progress: Zure artxiboa biltzen...
       request: Eskatu zure artxiboa
       size: Tamaina
     blocks: Zuk blokeatutakoak
+    bookmarks: Laster-markak
     csv: CSV
     domain_blocks: Domeinuen blokeoak
     lists: Zerrendak
@@ -783,7 +902,7 @@ eu:
     add_new: Gehitu berria
     errors:
       limit: Gehienezko traola kopurua nabarmendu duzu jada
-    hint_html: "<strong>Zer dira nabarmendutako traolak?</strong> Zure profilean toki nabarmendu batean agertzen dira eta jendeari traola hau daukaten mezu publikoak arakatzea ahalbidetzen diote. Sormen lana edo epe luzerako proiektuak jarraitzeko primerakoak dira."
+    hint_html: "<strong>Zer dira nabarmendutako traolak?</strong> Zure profilean toki nabarmendu batean agertzen dira eta jendeari traola hau daukaten bidalketa publikoak arakatzea ahalbidetzen diote. Sormen lana edo epe luzerako proiektuak jarraitzeko primerakoak dira."
   filters:
     contexts:
       account: Profilak
@@ -834,13 +953,15 @@ eu:
     i_am_html: "%{username} erabiltzailea naiz %{service} zerbitzuan."
     identity: Identitatea
     inactive: Ez aktiboa
-    publicize_checkbox: 'Eta bidali toot hau:'
+    publicize_checkbox: 'Eta argitaratu bidalketa hau:'
     publicize_toot: 'Frogatua dago! %{username} erabiltzailea naiz %{service} zerbitzuan: %{url}'
     remove: Kendu froga kontutik
     removed: Ongi kendu da froga kontutik
     status: Egiaztatze egoera
     view_proof: Ikusi froga
   imports:
+    errors:
+      over_rows_processing_limit: "%{count} lerro baina gehiago ditu"
     modes:
       merge: Bateratu
       merge_long: Mantendu dauden erregistroak eta gehitu berriak
@@ -850,6 +971,7 @@ eu:
     success: Zure datuak ongi igo dira eta dagokionean prozesatuko dira
     types:
       blocking: Blokeatutakoen zerrenda
+      bookmarks: Laster-markak
       domain_blocking: Domeinuen blokeo zerrenda
       following: Jarraitutakoen zerrenda
       muting: Mutututakoen zerrenda
@@ -882,7 +1004,7 @@ eu:
       limit: Gehieneko zerrenda kopurura heldu zara
   media_attachments:
     validations:
-      images_and_video: Ezin da irudiak dituen mezu batean bideo bat erantsi
+      images_and_video: Ezin da irudiak dituen bidalketa batean bideo bat erantsi
       not_ready: Ezin dira prozesatzen amaitu gabeko fitxategiak erantsi. Saiatu geroago!
       too_many: Ezin dira 4 fitxategi baino gehiago erantsi
   migrations:
@@ -904,6 +1026,7 @@ eu:
     on_cooldown: Duela gutxi migratu duzu. Funtzio hau %{count} egun barru egongo da berriro eskuragarri.
     past_migrations: Aurreko migrazioak
     proceed_with_move: Mugitu jarraitzaileak
+    redirected_msg: 'Zure kontuak hona birbideratzen du orain: %{acct}.'
     redirecting_to: 'Zure kontuak hona birbideratzen du: %{acct}.'
     set_redirect: Ezarri birbideratzea
     warning:
@@ -917,6 +1040,10 @@ eu:
       redirect: Zure uneko kontuaren profila eguneratuko da birbideratze ohar batekin eta bilaketetatik kenduko da
   moderation:
     title: Moderazioa
+  move_handler:
+    carry_blocks_over_text: Erabiltzaile hau %{acct} kontutik dator, zeina blokeatuta daukazun.
+    carry_mutes_over_text: Erabiltzaile hau %{acct} kontutik dator, zeina isilarazita daukazun.
+    copy_account_note_text: 'Erabiltzaile hau %{acct} kontutik dator, hemen berari buruzko zure aurreko oharrak:'
   notification_mailer:
     digest:
       action: Ikusi jakinarazpen guztiak
@@ -930,8 +1057,8 @@ eu:
         other: "%{count} jakinarazpen berri azken bisitatik \U0001F418"
       title: Kanpoan zeundela...
     favourite:
-      body: "%{name}(e)k zure mezua gogoko du:"
-      subject: "%{name}(e)k zure mezua gogoko du"
+      body: "%{name}(e)k zure bidalketa gogoko du:"
+      subject: "%{name}(e)k zure bidalketa gogoko du"
       title: Gogoko berria
     follow:
       body: "%{name}(e)k jarraitzen zaitu!"
@@ -947,10 +1074,14 @@ eu:
       body: "%{name}(e)k aipatu zaitu:"
       subject: "%{name}(e)k aipatu zaitu"
       title: Aipamen berria
+    poll:
+      subject: "%{name} erabiltzailearen inkesta bat amaitu da"
     reblog:
-      body: "%{name}(e)k bultzada eman dio zure mezuari:"
-      subject: "%{name}(e)k bultzada eman dio zure mezuari"
+      body: "%{name}(e)k bultzada eman dio zure bidalketari:"
+      subject: "%{name}(e)k bultzada eman dio zure bidalketari"
       title: Bultzada berria
+    status:
+      subject: "%{name} erabiltzaileak bidalketa egin berri du"
   notifications:
     email_events: E-mail jakinarazpenentzako gertaerak
     email_events_hint: 'Hautatu jaso nahi dituzun gertaeren jakinarazpenak:'
@@ -965,6 +1096,14 @@ eu:
           quadrillion: Q
           thousand: K
           trillion: T
+  otp_authentication:
+    code_hint: Sartu zure autentifikazio aplikazioak sortutako kodea berresteko
+    description_html: Autentifikazio aplikazio bidezko <strong>bi faktoreetako autentifikazioa</strong> gaitzen baduzu, saioa hasteko telefonoa eskura izan beharko duzu, honek zuk sartu behar dituzun kodeak sortuko dituelako.
+    enable: Gaitu
+    instructions_html: "<strong>Eskaneatu QR kode hau Google Authenticator edo antzeko TOTP aplikazio batekin zure telefonoan</strong>. Hortik aurrera, aplikazio horrek saioa hasteko sartu beharko dituzun kodeak sortuko ditu."
+    manual_instructions: 'Ezin baduzu QR kodea eskaneatu eta eskuz sartu behar baduzu, hona sekretua testu arruntean:'
+    setup: Konfiguratu
+    wrong_code: Sartutako kodea baliogabea da! Zerbitzariaren eta gailuaren erlojuak ondo ezarrita daude?
   pagination:
     newer: Berriagoa
     next: Hurrengoa
@@ -993,6 +1132,7 @@ eu:
   relationships:
     activity: Kontuaren aktibitatea
     dormant: Ez aktiboa
+    follow_selected_followers: Jarraitu hautatutako jarraitzaileak
     followers: Jarraitzaileak
     following: Jarraitzen
     invited: Gonbidatuta
@@ -1016,16 +1156,16 @@ eu:
   remote_interaction:
     favourite:
       proceed: Bihurtu gogoko
-      prompt: 'Toot hau gogoko bihurtu nahi duzu:'
+      prompt: 'Bidalketa hau gogoko bihurtu nahi duzu:'
     reblog:
       proceed: Eman bultzada
-      prompt: 'Toot honi bultzada eman nahi diozu:'
+      prompt: 'Bidalketa honi bultzada eman nahi diozu:'
     reply:
       proceed: Ekin erantzuteari
-      prompt: 'Toot honi erantzun nahi diozu:'
+      prompt: 'Bidalketa honi erantzun nahi diozu:'
   scheduled_statuses:
-    over_daily_limit: Egun horretarako programatutako toot kopuruaren muga gainditu duzu (%{limit})
-    over_total_limit: Programatutako toot kopuruaren muga gainditu duzu (%{limit})
+    over_daily_limit: 'Egun horretarako programatutako bidalketa kopuruaren muga gainditu duzu: %{limit}'
+    over_total_limit: 'Programatutako bidalketa kopuruaren muga gainditu duzu: %{limit}'
     too_soon: Programatutako data etorkizunean egon behar du
   sessions:
     activity: Azken jarduera
@@ -1089,10 +1229,12 @@ eu:
     profile: Profila
     relationships: Jarraitutakoak eta jarraitzaileak
     two_factor_authentication: Bi faktoreetako autentifikazioa
-  spam_check:
-    spam_detected: Hau salaketa automatiko bat da. Spam-a antzeman da.
+    webauthn_authentication: Segurtasun gakoak
   statuses:
     attached:
+      audio:
+        one: Audio %{count}
+        other: "%{count} audio"
       description: 'Erantsita: %{attached}'
       image:
         one: irudi %{count}
@@ -1106,14 +1248,14 @@ eu:
       one: 'debekatutako traola bat zuen: %{tags}'
       other: 'debekatutako traola hauek zituen: %{tags}'
     errors:
-      in_reply_not_found: Erantzuten saiatu zaren mezua antza ez da existitzen.
+      in_reply_not_found: Erantzuten saiatu zaren bidalketa antza ez da existitzen.
     language_detection: Antzeman hizkuntza automatikoki
     open_in_web: Ireki web-ean
     over_character_limit: "%{max}eko karaktere muga gaindituta"
     pin_errors:
-      limit: Gehienez finkatu daitekeen toot kopurua finkatu duzu jada
-      ownership: Ezin duzu beste norbaiten toot bat finkatu
-      private: Ezin dira publikoak ez diren tootak finkatu
+      limit: Gehienez finkatu daitekeen bidalketa kopurua finkatu duzu jada
+      ownership: Ezin duzu beste norbaiten bidalketa bat finkatu
+      private: Ezin dira publikoak ez diren bidalketak finkatu
       reblog: Bultzada bat ezin da finkatu
     poll:
       total_people:
@@ -1124,10 +1266,13 @@ eu:
         other: "%{count} boto"
       vote: Bozkatu
     show_more: Erakutsi gehiago
+    show_newer: Erakutsi berriagoak
+    show_older: Erakutsi zaharragoak
     show_thread: Erakutsi haria
     sign_in_to_participate: Eman izena elkarrizketan parte hartzeko
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Zuzena
       private: Jarraitzaileak besterik ez
       private_long: Erakutsi jarraitzaileei besterik ez
       public: Publikoa
@@ -1135,7 +1280,7 @@ eu:
       unlisted: Zerrendatu gabea
       unlisted_long: Edonork ikusi dezake, baina ez da denbora-lerro publikoetan agertzen
   stream_entries:
-    pinned: Finkatutako toota
+    pinned: Finkatutako bidalketa
     reblogged: "(r)en bultzada"
     sensitive_content: 'Kontuz: Eduki hunkigarria'
   tags:
@@ -1146,9 +1291,9 @@ eu:
       <h3 id="collect">Zer informazio biltzen dugu?</h3>
 
       <ul>
-      <li><em>Kontuaren oinarrizko informazioa</em>: Zerbitzari honetan izena ematen baduzu, erabiltzaile-izena, e-mail helbidea eta pasahitza sartzea galdetu dakizuke. Profilean bestelako informazioa sartu dezakezu esaterako pantaila.-izena eta biografia, eta profileko eta goiburuko irudiak igo ditzakezu. Erabiltzaile-izena, pantaila-izena, biografia, profileko irudia eta goiburuko irudia beti dira publikoak.</li>
-      <li><em>Mezuak, jarraitzea eta beste informazioa</em>: Jarraitzen duzun jendearen zerrenda publikoa da, baita zure jarraitzaileena. Mezu bat bidaltzean, data eta ordua eta mezua bidaltzeko erabilitako aplikazioa gordetzen dira. Mezuen eranskinak izan ditzakete, esaterako irudiak eta bideoak. Mezu publikoak eta zerrendatu gabeak publikoki ikusi daitezke. Zure profilean mezu bat sustatzen duzunean, informazio hori ere publikoki eskuragarri dago. Zure mezuak zure jarraitzaileei bidaltzen zaie, kasu batzuetan honek esan nahi du beste zerbitzari batzuetara bidaltzen dela eta han kopiak gordetzen dituzte. Mezuak ezabatzen dituzunean, hau zure jarraitzaileei bidaltzen zaie ere, beste mezu batzuk zabaltzea edo gogoko izatea beti da informazio publikoa.</li>
-      <li><em>Mezu zuzenak eta soilik jarraitzaileentzako mezuak</em>: Mezu guztiak zerbitzarian gorde eta prozesatzen dira. Soilik jarraitzaileentzako diren mezuak zure jarraitzaileei bidaltzen zaie eta bertan aipatutako erabiltzaileei, mezu zuzenak soilik aipatutako erabiltzaileei bidaltzen zaie. Honek esan nahi du kasu batzuetan beste zerbitzari batzuetara bidaltzen dela mezua eta han kopiak gordetzen direla. Borondate oneko ahalegin bat egiten dugu mezuok soilik baimena duten pertsonek ikus ditzaten, baina beste zerbitzariek agian ez. Hortaz, zure jarraitzaileen zerbitzaria zein den egiaztatzea garrantzitsua da. Jarraitzaileak eskuz onartu eta ukatzeko aukera aldatu dezakezu. <em>Kontuan izan zerbitzariaren operadoreak eta mezua jasotzen duen edozein zerbitzarik operadoreek mezuok ikus ditzaketela</em> eta edonork atera dezakeela pantaila argazki bat, kopiatu edo beste modu batean partekatu.<em>Ez partekatu informazio arriskutsua Mastodon bidez.</em></li>
+      <li><em>Kontuaren oinarrizko informazioa</em>: Zerbitzari honetan izena ematen baduzu, erabiltzaile-izena, e-posta helbidea eta pasahitza sartzea galdetu dakizuke. Profilean bestelako informazioa sartu dezakezu esaterako pantaila-izena eta biografia, eta profileko eta goiburuko irudiak igo ditzakezu. Erabiltzaile-izena, pantaila-izena, biografia, profileko irudia eta goiburuko irudia beti dira publikoak.</li>
+      <li><em>Bidalketak, jarraitzea eta beste informazioa</em>: Jarraitzen duzun jendearen zerrenda publikoa da, baita zure jarraitzaileena ere. Bidalketa bat argitaratzean, data eta ordua eta mezua bidaltzeko erabilitako aplikazioa gordetzen dira. Bidalketek eranskinak izan ditzakete, esaterako irudiak eta bideoak. Bidalketa publikoak eta zerrendatu gabeak publikoki ikusi daitezke. Zure profilean bidalketa bat sustatzen duzunean, informazio hori ere publikoki eskuragarri dago. Zure bidalketak zure jarraitzaileei bidaltzen zaizkie, kasu batzuetan honek esan nahi du beste zerbitzari batzuetara bidaltzen dela eta han kopiak gordetzen dituztela. Bidalketak ezabatzen dituzunean, hori ere zure jarraitzaileei bidaltzen zaie. Beste bidalketa batzuk zabaltzea edo gogoko izatea beti da informazio publikoa.</li>
+      <li><em>Mezu zuzenak eta soilik jarraitzaileentzako bidalketak</em>: Bidalketa guztiak zerbitzarian gorde eta prozesatzen dira. Soilik jarraitzaileentzako diren bidalketak zure jarraitzaileei bidaltzen zaizkie eta bertan aipatutako erabiltzaileei. Mezu zuzenak soilik aipatutako erabiltzaileei bidaltzen zaizkie. Honek esan nahi du kasu batzuetan beste zerbitzari batzuetara bidaltzen dela mezua eta han kopiak gordetzen direla. Borondate oneko ahalegin bat egiten dugu mezuok soilik baimena duten pertsonek ikus ditzaten, baina beste zerbitzariek agian ez. Hortaz, zure jarraitzaileen zerbitzaria zein den egiaztatzea garrantzitsua da. Jarraitzaileak eskuz onartu eta ukatzeko aukera aldatu dezakezu. <em>Kontuan izan zerbitzariaren operadoreak eta mezua jasotzen duen edozein zerbitzariko operadoreek mezuok ikus ditzaketela</em> eta edonork atera dezakeela pantaila argazki bat, kopiatu edo beste modu batean partekatu.<em>Ez partekatu informazio arriskutsua Mastodon bidez.</em></li>
       <li><em>IP-ak eta bestelako meta-datuak</em>: Saioa hasten duzunean, zure IP helbidea gordetzen dugu, eta erabiltzen duzun nabigatzaile edo aplikazioa. Hasitako saio guztiak zuk ikusteko moduan daude eta ezarpenetan indargabetu ditzakezu. Erabilitako azken IP helbidea 12 hilabetez gordetzen da. Gure zerbitzariak jasotako eskari guztiak eta IP-a duten zerbitzariko egunkariak gorde genitzake.</li>
       </ul>
 
@@ -1161,7 +1306,7 @@ eu:
       <ul>
       <li>Mastodon zerbitzuko funtzio nagusietarako. Beste pertsonen edukiarekin harremanetan sartzeko edo zure edukia argitaratzeko saioa hasi behar duzu. Adibidez, beste pertsona batzuk jarraitu ditzakezu zure denbora-lerro pertsonalizatu bat izateko.</li>
       <li>Komunitatearen moderazioari laguntzeko, esaterako zure IP-a ezagutzen ditugun beste batzuekin alderatu dezakegu, debekuak ekiditea edo bestelako arau-urraketak eragozteko.</li>
-      <li>Emandako e-mail helbidea informazioa bidaltzeko erabili genezake, beste pertsonek zure edukiekin harremanetan jartzean jakinarazteko, edo mezu bat bidaltzen dizutenean, galderak erantzutean eta bestelako eskari eta galderetarako.</li>
+      <li>Emandako e-posta helbidea informazioa bidaltzeko erabili genezake, beste pertsonek zure edukiekin harremanetan jartzean jakinarazteko, edo mezu bat bidaltzen dizutenean, galderak erantzutean eta bestelako eskari eta galderetarako.</li>
       </ul>
 
       <hr class="spacer" />
@@ -1189,7 +1334,7 @@ eu:
 
       <h3 id="cookies">Cookie-ak erabiltzen ditugu?</h3>
 
-      <p>Bai. Cookie-ak gune edo zerbitzu hornitzaile baten zure ordenagailuko disko gogorrera bidaltzen dituen fitxategi txikiak dira (Zuk baimentzen baduzu). Cookie hauek guneari zure nabigatzailea identifikatzea, konturik duzun jakin, eta erregistratutako kontuarekin erlazionatzea ahalbidetzen diote.</p>
+      <p>Bai. Cookie-ak gune edo zerbitzu hornitzaile baten zure ordenagailuko disko gogorrera bidaltzen dituen fitxategi txikiak dira (zuk baimentzen baduzu). Cookie hauek guneari zure nabigatzailea identifikatzea, konturik duzun jakin, eta erregistratutako kontuarekin erlazionatzea ahalbidetzen diote.</p>
 
       <p>Cookie-ak erabiltzen ditugu zure hobespenak ulertu eta hurrengo saioetarako gordetzeko</p>
 
@@ -1199,9 +1344,9 @@ eu:
 
       <p>Ez dugu identifikatu zaitzakeen informazio pertsonala saltzen, trukatzen edo kanpora bidaltzen. Salbuespena konfiantzako hirugarrengoak dira, gunea martxan izaten laguntzen digutenak, negozioa aurrera eramateko aholkua ematen digutenak edo zuri zerbitzua ematen laguntzen digutenak, hauek informazioaren konfidentzialtasuna errespetatzea onartzen dutenean. Agian legearekin betetzeko beharrezkoa den informazioa ere eman genezake, gunearen politika indarrean jartzeko behar dena, edo gure eskubideak, jabetzak, edo segurtasuna babesteko beharrezkoa dena.</p>
 
-      <p>Zure eduki publikoak sareko beste zerbitzariek deskargatu dezakete. Zure mezu publikoak eta soilik jarraitzaileentzat diren mezuak zure jarraitzaileen zerbitzarietara bidaltzen dira, jarraitzaile edo hartzaile horiek beste zerbitzari batean badute kontua.</p>
+      <p>Zure eduki publikoak sareko beste zerbitzariek deskargatu dezakete. Zure bidalketa publikoak eta soilik jarraitzaileentzat diren mezuak zure jarraitzaileen zerbitzarietara bidaltzen dira, jarraitzaile edo hartzaile horiek beste zerbitzari batean badute kontua.</p>
 
-      <p>Aplikazio bati zure kontua erabiltzeko baimena ematen diozunean, onartutako baimen esparruaren arabera, zure profileko informazio publikoa atzitu lezake, zuk jarraitutakoen zerrenda, zure jarraitzaileen zerrenda, zure mezu guztiak eta zure gogokoak. Aplikazioen ezin dute inoiz zure e-mail helbidea edo pasahitza atzitu.</p>
+      <p>Aplikazio bati zure kontua erabiltzeko baimena ematen diozunean, onartutako baimen esparruaren arabera, zure profileko informazio publikoa atzitu lezake, zuk jarraitutakoen zerrenda, zure jarraitzaileen zerrenda, zure bidalketa guztiak eta zure gogokoak. Aplikazioen ezin dute inoiz zure e-posta helbidea edo pasahitza atzitu.</p>
 
       <hr class="spacer" />
 
@@ -1219,7 +1364,7 @@ eu:
 
       <p>Gure pribatutasun politika aldatzea erabakitzen badugu, aldaketak orri honetan argitaratuko ditugu.</p>
 
-      <p>Dokumentu honek CC-BY-SA lizentzia du. Eta azkenekoz 2019ko martxoak 7an eguneratu zen</p>
+      <p>Dokumentu honek CC-BY-SA lizentzia du. Eta azkenekoz 2018ko martxoak 7an eguneratu zen</p>
 
       <p>Jatorrian <a href="https://github.com/discourse/discourse">Discourse sarearen pribatutasun politikatik</a> moldatua.</p>
     title: "%{instance} instantziaren erabilera baldintzak eta pribatutasun politika"
@@ -1232,23 +1377,36 @@ eu:
       default: "%Y(e)ko %b %d, %H:%M"
       month: "%Y(e)ko %b"
   two_factor_authentication:
+    add: Gehitu
     disable: Desgaitu
+    disabled_success: Bi faktoreko autentifikazioa ongi desgaitu da
+    edit: Editatu
     enabled: Bi faktoreetako autentifikazioa gaituta dago
     enabled_success: Bi faktoreetako autentifikazioa ongi gaitu da
     generate_recovery_codes: Sortu berreskuratze kodeak
     lost_recovery_codes: Berreskuratze kodeek telefonoa galtzen baduzu kontura sarbidea berreskuratzea ahalbideko dizute. Berreskuratze kodeak galdu badituzu, hemen birsortu ditzakezu. Zure berreskuratze kode zaharrak indargabetuko dira,.
+    methods: Bi faktoreko metodoak
+    otp: Autentifikazio-aplikazioa
     recovery_codes: Berreskuratze kodeen babes-kopia
     recovery_codes_regenerated: Berreskuratze kodeak ongi sortu dira
     recovery_instructions_html: Zure telefonora sarbidea galtzen baduzu, beheko berreskuratze kode bat erabili dezakezu kontura berriro sartu ahal izateko. <strong>Gore barreskuratze kodeak toki seguruan</strong>. Adibidez inprimatu eta dokumentu garrantzitsuekin batera gorde.
+    webauthn: Segurtasun gakoak
   user_mailer:
     backup_ready:
       explanation: Zure Mastodon kontuaren babes-kopia osoa eskatu duzu. Deskargatzeko prest dago!
       subject: Zure artxiboa deskargatzeko prest dago
       title: Artxiboa jasotzea
+    sign_in_token:
+      details: 'Hemen daude saiakeraren xehetasunak:'
+      explanation: 'IP helbide ezezagun batetik zure kontuan saioa hasteko saiakera bat detektatu dugu. Zu bazara, sartu beheko segurtasun kodea saioa hasteko erronkaren orrian:'
+      further_actions: 'Ez bazara zu, aldatu zure pasahitza eta gaitu bi faktoreko autentifikazioa zure kontuan. Hemen egin dezakezu:'
+      subject: Berretsi saioa hasteko saiakera
+      title: Saioa hasteko saiakera
     warning:
       explanation:
         disable: Zure kontua izoztuta dagoen bitartean, zure kontua bere horretan dirau, baina ezin duzu ekintzarik burutu desblokeatzen den arte.
-        silence: Zure kontua murriztua dagoen bitartean, jada zu jarraitzen zaituztenak besterik ez dituzte zure tootak ikusiko zerbitzari honetan, eta agian zerrenda publikoetatik kenduko zaizu. Hala ere besteek oraindik zu jarraitu zaitzakete.
+        sensitive: Igotzen dituzun multimedia fitxategiak eta estekatutako edukiak hunkigarri bezala hartuko dira.
+        silence: Zure kontua murriztua dagoen bitartean, jada zu jarraitzen zaituztenak besterik ez dituzte zure bidalketak ikusiko zerbitzari honetan, eta agian zerrenda publikoetatik kenduko zaizu. Hala ere besteek oraindik zu jarraitu zaitzakete.
         suspend: Zure kontua kanporatua izan da, zure toot guztiak eta multimedia fitxategiak behin betiko ezabatu dira zerbitzari honetatik, eta zure jarraitzaileen zerbitzarietatik.
       get_in_touch: "%{instance} instantziako jendearekin harremanetan jartzeko e-mail honi erantzun ahal diozu."
       review_server_policies: Berrikusi zerbitzariko politikak
@@ -1256,23 +1414,25 @@ eu:
       subject:
         disable: Zure  %{acct} kontua izoztu da
         none: "%{acct} konturako abisua"
+        sensitive: Zure %{acct} kontuaren multimedia bidalketak hunkigarri bezala markatu dira
         silence: Zure  %{acct} kontua murriztu da
         suspend: Zure %{acct} kontua kanporatua izan da
       title:
         disable: Kontu izoztua
         none: Abisua
+        sensitive: Zure multimedia edukiak hunkigarri bezala markatu dira
         silence: Kontu murriztua
         suspend: Kontu kanporatua
     welcome:
       edit_profile_action: Ezarri profila
       edit_profile_step: Pertsonalizatu profila abatar bat igoz, goiburu bat, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik gainbegiratu nahi badituzu, kontua giltzaperatu dezakezu.
       explanation: Hona hasteko aholku batzuk
-      final_action: Hasi mezuak bidaltzen
-      final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure mezu publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.'
+      final_action: Hasi bidalketak argitaratzen
+      final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure bidalketa publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.'
       full_handle: Zure erabiltzaile-izen osoa
       full_handle_hint: Hau da lagunei esango zeniekeena beste zerbitzari batetik zu jarraitzeko edo zuri mezuak bidaltzeko.
       review_preferences_action: Aldatu hobespenak
-      review_preferences_step: Ziurtatu hobespenak ezartzen dituzula, jaso nahi dituzu e-mail mezuak, lehenetsitako pribatutasuna mezu berrietarako. Mareatzen ez bazaitu GIF-ak automatikoki abiatzea ezarri dezakezu ere.
+      review_preferences_step: Ziurtatu hobespenak ezartzen dituzula, hala nola, jaso nahi dituzu e-postak edo lehenetsitako pribatutasuna bidalketa berrietarako. Mareatzen ez bazaitu GIF-ak automatikoki abiatzea ere ezarri dezakezu.
       subject: Ongi etorri Mastodon-era
       tip_federated_timeline: Federatutako denbora-lerroan Mastodon sarearen trafikoa ikusten da. Baina zure instantziako auzokideak jarraitutakoak besterik ez daude hor, ez da osoa.
       tip_following: Lehenetsita zerbitzariko administratzailea jarraitzen duzu. Jende interesgarri gehiago aurkitzeko, egiaztatu denbora-lerro lokala eta federatua.
@@ -1282,11 +1442,30 @@ eu:
       title: Ongi etorri, %{name}!
   users:
     follow_limit_reached: Ezin dituzu %{limit} pertsona baino gehiago jarraitu
-    invalid_email: E-mail helbidea baliogabea da
+    generic_access_help_html: Arazoak dituzu zure kontura sartzeko? Jarri harremanetan %{email} helbidearekin laguntzarako
     invalid_otp_token: Bi faktoreetako kode baliogabea
+    invalid_sign_in_token: Segurtasun kode baliogabea
     otp_lost_help_html: 'Bietara sarbidea galdu baduzu, jarri kontaktuan hemen: %{email}'
     seamless_external_login: Kanpo zerbitzu baten bidez hasi duzu saioa, beraz pasahitza eta e-mail ezarpenak ez daude eskuragarri.
     signed_in_as: 'Saioa honela hasita:'
+    suspicious_sign_in_confirmation: Dirudienez inoiz ez duzu saioa hasi gailu honetatik eta aspaldian ez duzu saiorik hasi. Horregatik, segurtasun kode bat bidaliko dizugu zure e-posta helbidera zu zarela egiaztatzeko.
   verification:
     explanation_html: 'Ezin duzu <strong>zure burua zure profileko metadatuen esteken jabe gisa egiaztatu</strong>. Horretarako, estekatutako webgunean zure Mastodon profilera daraman esteka bat egon behar du. Mastodonera daraman esteka horrek<strong>derrigorrez</strong> <code>rel="me"</code> artibutua izan behar du . Estekaren testuak ez du axola. Hona adibide bat:'
     verification: Egiaztaketa
+  webauthn_credentials:
+    add: Gehitu segurtasun gako berria
+    create:
+      error: Arazo bat egon da zure segurtasun gakoa gehitzean. Saiatu berriro mesedez.
+      success: Zure segurtasun gakoa behar bezala gehitu da.
+    delete: Ezabatu
+    delete_confirmation: Ziur zaude segurtasun gako hau ezabatu nahi duzula?
+    description_html: "<strong>Segurtasun gako bidezko autentifikazioa</strong> gaitzen baduzu, saioa hasteko zure segurtasun gakoetako bat erabili beharko duzu."
+    destroy:
+      error: Arazo bat egon da zure segurtasun gakoa ezabatzean. Saiatu berriro mesedez.
+      success: Zure segurtasun gakoa behar bezala ezabatu da.
+    invalid_credential: Segurtasun gako baliogabea
+    nickname_hint: Sartu zure segurtasun gako berriaren ezizena
+    not_enabled: Ez duzu WebAuthn gaitu oraindik
+    not_supported: Nabigatzaile honek ez ditu segurtasun gakoak onartzen
+    otp_required: Segurtasun gakoak erabili aurretik bi faktoreko autentifikazioa gaitu behar duzu.
+    registered_on: "%{date}(e)an erregistratua"
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index cf094478a..e37219251 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -26,6 +26,7 @@ fa:
       این حساب برای مقاصد خودگردانی به کار می‌رفته و نباید مسدود شود؛ مگر این که بخواهید کل نمونه را مسدود کنید که در آن صورت نیز باید از انسداد دامنه استفاده کنید.
     learn_more: بیشتر بدانید
     privacy_policy: سیاست رازداری
+    rules: قوانین کارساز
     see_whats_happening: ببینید چه خبر است
     server_stats: 'آمار کارساز:'
     source_code: کدهای منبع
@@ -80,7 +81,6 @@ fa:
       other: بوق
     posts_tab_heading: بوق‌ها
     posts_with_replies: بوق‌ها و پاسخ‌ها
-    reserved_username: این نام کاربری در دسترس نیست
     roles:
       admin: مدیر
       bot: ربات
@@ -136,7 +136,7 @@ fa:
       inbox_url: نشانی صندوق ورودی
       invite_request_text: دلایل‌تان برای پیوستن
       invited_by: دعوت‌شده از طرف
-      ip: IP
+      ip: آی‌پی
       joined: عضو شده در
       location:
         all: همه
@@ -262,46 +262,24 @@ fa:
         update_domain_block: به‌روزرسانی مسدودسازی دامنه
         update_status: به‌روز رسانی وضعیت
       actions:
-        assigned_to_self_report: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت"
-        change_email_user: "%{name} نشانی ایمیل کاربر %{target} را تغییر داد"
-        confirm_user: "%{name} نشانی ایمیل کاربر %{target} را تأیید کرد"
-        create_account_warning: "%{name} هشداری برای %{target} فرستاد"
-        create_announcement: "%{name} اعلامیه‌ای جدید ایجاد کرد %{target}"
-        create_custom_emoji: "%{name} شکلک تازهٔ %{target} را بارگذاشت"
-        create_domain_allow: "%{name} دامنهٔ %{target} را مجاز کرد"
-        create_domain_block: "%{name} دامین %{target} را مسدود کرد"
-        create_email_domain_block: "%{name} دامین ایمیل %{target} را مسدود کرد"
-        create_ip_block: "%{name} برای آی‌پی %{target} قاعده‌ای ایجاد کرد"
-        demote_user: "%{name} مقام کاربر %{target} را تنزل داد"
-        destroy_announcement: "%{name} اعلامیهٔ %{target} را حذف کرد"
-        destroy_custom_emoji: "%{name} اموجی %{target} را نابود کرد"
-        destroy_domain_allow: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت"
-        destroy_domain_block: "%{name} انسداد دامنهٔ %{target} را رفع کرد"
-        destroy_email_domain_block: "%{name} دامنهٔ ایمیل %{target} را به فهرست مجاز افزود"
-        destroy_ip_block: "%{name} قاعده‌ای را از آی‌پی %{target} حذف کرد"
-        destroy_status: "%{name} نوشتهٔ %{target} را پاک کرد"
-        disable_2fa_user: "%{name} اجبار ورود دومرحله‌ای را برای کاربر %{target} غیرفعال کرد"
-        disable_custom_emoji: "%{name} شکلک %{target} را غیرفعال کرد"
-        disable_user: "%{name} ورود را برای کاربر %{target} غیرفعال کرد"
-        enable_custom_emoji: "%{name} شکلک %{target} را فعال کرد"
-        enable_user: "%{name} ورود را برای کاربر %{target} فعال کرد"
-        memorialize_account: "%{name} حساب کاربر %{target} را تبدیل به صفحهٔ یادمان کرد"
-        promote_user: "%{name} کاربر %{target} را ترفیع داد"
-        remove_avatar_user: "%{name} تصویر نمایهٔ کاربر %{target} را حذف کرد"
-        reopen_report: "%{name} گزارش %{target} را دوباره به جریان انداخت"
-        reset_password_user: "%{name} رمز کاربر %{target} را بازنشاند"
-        resolve_report: "%{name} گزارش %{target} را رفع کرد"
-        sensitive_account: "%{name} رسانهٔ %{target} را به عنوان حساس علامت‌گذاری کرد"
-        silence_account: "%{name} حساب کاربر %{target} را خاموش (بی‌صدا) کرد"
-        suspend_account: "%{name} حساب کاربر %{target} را تعلیق کرد"
-        unassigned_report: "%{name} بررسی گزارش %{target} را متوقف کرد"
-        unsensitive_account: "%{name} علامت حساس رسانهٔ %{target} را برداشت"
-        unsilence_account: "%{name} حساب کاربر %{target} را روشن (باصدا) کرد"
-        unsuspend_account: "%{name} حساب کاربر %{target} را از تعلیق خارج کرد"
-        update_announcement: "%{name} اعلامیهٔ %{target} را به‌روز کرد"
-        update_custom_emoji: "%{name} شکلک %{target} را به‌روز کرد"
-        update_domain_block: "%{name} مسدودسازی دامنه را برای %{target} به‌روزرسانی کرد"
-        update_status: "%{name} نوشتهٔ %{target} را به‌روز کرد"
+        assigned_to_self_report_html: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت"
+        change_email_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را عوض کرد"
+        confirm_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را تأیید کرد"
+        create_account_warning_html: "%{name} هشداری برای %{target} فرستاد"
+        create_announcement_html: "%{name} اعلامیه‌ای جدید ایجاد کرد %{target}"
+        create_custom_emoji_html: "%{name} اموجی تازهٔ %{target} را بارگذاشت"
+        create_domain_allow_html: "%{name} دامنهٔ %{target} را مجاز کرد"
+        create_domain_block_html: "%{name} دامنهٔ %{target} را مسدود کرد"
+        create_email_domain_block_html: "%{name} دامنهٔ رایانامهٔ %{target} را مسدود کرد"
+        create_ip_block_html: "%{name} برای آی‌پی %{target} قانونی ایجاد کرد"
+        demote_user_html: "%{name} کاربر %{target} را تنزل داد"
+        destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد"
+        destroy_custom_emoji_html: "%{name} اموجی %{target} را نابود کرد"
+        destroy_domain_allow_html: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت"
+        destroy_domain_block_html: "%{name} انسداد دامنهٔ %{target} را رفع کرد"
+        destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت"
+        destroy_ip_block_html: "%{name} قاعدهٔ آی‌پی %{target} را حذف کرد"
+        destroy_status_html: "%{name} وضعیت %{target} را برداشت"
       deleted_status: "(نوشتهٔ پاک‌شده)"
       empty: هیچ گزارشی پیدا نشد.
       filter_by_action: پالایش بر اساس کنش
@@ -316,10 +294,12 @@ fa:
       new:
         create: ساختن اعلامیه
         title: اعلامیهٔ تازه
+      publish: انتشار
       published_msg: اعلامیه با موفقیت منتشر شد!
       scheduled_for: زمان‌بسته برای %{time}
       scheduled_msg: اعلامیه برای نشر، زمان‌بندی شد!
       title: اعلامیه‌ها
+      unpublish: عدم انتشار
       unpublished_msg: انتشار اعلامیه با موفقیت لغو شد!
       updated_msg: اعلامیه با موفقیت به‌روز شد!
     custom_emojis:
@@ -364,7 +344,6 @@ fa:
       feature_profile_directory: فهرست گزیدهٔ کاربران
       feature_registrations: ثبت‌نام‌ها
       feature_relay: رله
-      feature_spam_check: ضدهرزنامه
       feature_timeline_preview: پیش‌نمایش نوشته‌ها
       features: ویژگی‌ها
       hidden_service: ارتباط میان‌سروری با سرویس‌های نهفته
@@ -404,6 +383,8 @@ fa:
           silence: خموشاندن
           suspend: تعلیق
         title: مسدودسازی دامین تازه
+      obfuscate: مبهم‌سازی نام دامنهٔ
+      obfuscate_hint: در صورت به کار افتاده بودن اعلام فهرست محدودیت‌های دامنه، نام دامنه در فهرست را به صورت جزیی مبهم می‌کند
       private_comment: یادداشت خصوصی
       private_comment_hint: یادداشتی دربارهٔ محدودیت روی این دامین برای سایر ناظمان.
       public_comment: یادداشت عمومی
@@ -440,7 +421,13 @@ fa:
         create: ساختن مسدودسازی
         title: مسدودسازی دامین ایمیل تازه
       title: مسدودسازی دامین‌های ایمیل
+    follow_recommendations:
+      language: برای زبان
+      status: وضعیت
+      title: پیشنهادهای پی‌گیری
+      unsuppress: بازگردانی پیشنهادهای پی‌گیری
     instances:
+      back_to_all: همه
       by_domain: دامین
       delivery_available: پیام آماده است
       empty: هیج دامنه‌ای پیدا نشد.
@@ -542,6 +529,12 @@ fa:
       unassign: پس‌گرفتن مسئولیت
       unresolved: حل‌نشده
       updated_at: به‌روز شد
+    rules:
+      add_new: افزودن قانون
+      delete: حذف
+      edit: ویرایش قانون
+      empty: هنوز هیچ قانونی برای کارساز تعریف نشده.
+      title: قوانین کارساز
     settings:
       activity_api_enabled:
         desc_html: تعداد بوق‌های محلی، کاربران فعال، و کاربران تازه در هر هفته
@@ -565,8 +558,6 @@ fa:
         users: برای کاربران محلی واردشده
       domain_blocks_rationale:
         title: دیدن دلیل
-      enable_bootstrap_timeline_accounts:
-        title: به کار انداختن پیگیری‌های پیش‌گزیده برای کاربران تازه
       hero:
         desc_html: در صفحهٔ آغازین نمایش می‌یابد. دست‌کم ۶۰۰×۱۰۰ پیکسل توصیه می‌شود. اگر تعیین نشود، با تصویر بندانگشتی سرور جایگزین خواهد شد
         title: تصویر سربرگ
@@ -620,9 +611,6 @@ fa:
         desc_html: می‌توانید سیاست رازداری، شرایط استفاده، یا سایر مسائل قانونی را به دلخواه خود بنویسید. تگ‌های HTML هم مجاز است
         title: شرایط استفادهٔ سفارشی
       site_title: نام سرور
-      spam_check_enabled:
-        desc_html: ماستدون می‌تواند حساب‌ها را به طور خودکار بی‌صدا کند یا گزارش دهد. این کار بر اساس سنجه‌هایی از قبیل شناسایی پیغام‌های ناخواستهٔ تکراری انجام می‌شود و ممکن است گاهی اشتباه باشد.
-        title: ضدهرزنامه
       thumbnail:
         desc_html: برای دیدن با OpenGraph و رابط برنامه‌نویسی. وضوح پیشنهادی ۱۲۰۰×۶۳۰ پیکسل
         title: تصویر کوچک سرور
@@ -653,13 +641,14 @@ fa:
       no_status_selected: هیچ بوقی تغییری نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند
       title: نوشته‌های حساب
       with_media: دارای عکس یا ویدیو
+    system_checks:
+      rules_check:
+        action: مدیریت قانون‌های کارساز
+        message_html: هیچ قانون کارسازی تعریف نکرده‌اید.
     tags:
       accounts_today: کاربرد یکتا در امروز
       accounts_week: کاربرد یکتا در این هفته
       breakdown: کاربردهای امروز به تفکیک منبع
-      context: زمینه
-      directory: در فهرست
-      in_directory: "%{count} در فهرست"
       last_active: آخرین فعالیت
       most_popular: محبوب‌ترین
       most_recent: تازه‌ترین
@@ -923,6 +912,8 @@ fa:
     status: وضعیت تأیید
     view_proof: دیدن مدرک
   imports:
+    errors:
+      over_rows_processing_limit: دارای بیش از %{count} ردیف
     modes:
       merge: ادغام
       merge_long: داده‌های فعلی را داشته باشید و داده‌های تازه‌ای بیفزایید
@@ -1035,10 +1026,14 @@ fa:
       body: "%{name} در این‌جا از شما نام برد:"
       subject: "%{name} از شما نام برد"
       title: نام‌برده‌شدن تازه
+    poll:
+      subject: نظرسنجی‌ای از %{name} پایان یافت
     reblog:
       body: "%{name} نوشتهٔ شما را بازبوقید:"
       subject: "%{name} نوشتهٔ شما را بازبوقید"
       title: بازبوق تازه
+    status:
+      subject: "%{name} چیزی فرستاد"
   notifications:
     email_events: رویدادها برای اعلان‌های ایمیلی
     email_events_hint: 'رویدادهایی که می‌خواهید برایشان اعلانی دریافت کنید را برگزینید:'
@@ -1048,11 +1043,11 @@ fa:
       decimal_units:
         format: "%n%u"
         units:
-          billion: B
-          million: M
-          quadrillion: Q
-          thousand: K
-          trillion: T
+          billion: ب
+          million: م
+          quadrillion: ک
+          thousand: ه
+          trillion: ت
   otp_authentication:
     code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید
     description_html: اگر <strong>ورود دومرحله‌ای</strong> را با استفاده از از یک کارهٔ تأییدکننده به کار بیندازید، لازم است برای ورود، به تلفن خود که برایتان یک ژتون خواهد ساخت دسترسی داشته باشید.
@@ -1066,7 +1061,7 @@ fa:
     next: بعدی
     older: قدیمی‌تر
     prev: قبلی
-    truncate: "&hellip;"
+    truncate: "…"
   polls:
     errors:
       already_voted: شما قبلاً در این نظرسنجی رأی داده‌اید
@@ -1128,7 +1123,7 @@ fa:
     activity: آخرین فعالیت
     browser: مرورگر
     browsers:
-      alipay: Alipay
+      alipay: علی‌پی
       blackberry: بلک‌بری
       chrome: کروم
       edge: مایکروسافت اج
@@ -1137,31 +1132,31 @@ fa:
       generic: مرورگر ناشناخته
       ie: اینترنت اکسپلورر
       micro_messenger: مایکرومسنجر
-      nokia: Nokia S40 Ovi Browser
+      nokia: مرورگر اوی نوکیا اس۴۰
       opera: اپرا
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
+      otter: دیگر
+      phantom_js: فنتوم‌جی‌اس
+      qq: مرورگر کیوکیو
       safari: سافاری
-      uc_browser: UCBrowser
-      weibo: Weibo
+      uc_browser: مرورگر یوسی
+      weibo: وبیو
     current_session: نشست فعلی
     description: "%{browser} روی %{platform}"
     explanation: مرورگرهای زیر هم‌اینک به حساب شما وارد شده‌اند.
-    ip: IP
+    ip: آی‌پی
     platforms:
-      adobe_air: Adobe Air
+      adobe_air: ایر ادوبی
       android: اندروید
       blackberry: بلک‌بری
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
+      chrome_os: سیستم‌عامل کروم
+      firefox_os: سیستم‌عامل فایرفاکس
+      ios: آی‌اواس
       linux: لینوکس
       mac: مک
       other: سیستم ناشناخته
       windows: ویندوز
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
+      windows_mobile: ویندوز همراه
+      windows_phone: تلفن ویندوزی
     revoke: لغو کردن
     revoke_success: نشست با موفقیت لغو شد
     title: نشست‌ها
@@ -1187,8 +1182,6 @@ fa:
     relationships: پیگیری‌ها و پیگیران
     two_factor_authentication: ورود دومرحله‌ای
     webauthn_authentication: کلیدهای امنیتی
-  spam_check:
-    spam_detected: این یک گزارش خودکار برای تشخیص هرزنامه است.
   statuses:
     attached:
       audio:
@@ -1229,8 +1222,9 @@ fa:
     show_older: نمایش قدیمی‌تر
     show_thread: نمایش رشته
     sign_in_to_participate: برای شرکت در گفتگو وارد حساب خود شوید
-    title: '%{name}: "%{quote}"'
+    title: "%{name}: «%{quote}»"
     visibilities:
+      direct: مستقیم
       private: خصوصی
       private_long: تنها پیگیران شما می‌بینند
       public: عمومی
@@ -1333,7 +1327,7 @@ fa:
   time:
     formats:
       default: "%d %b %Y, %H:%M"
-      month: "%b %Y"
+      month: "%Ob %Y"
   two_factor_authentication:
     add: افزودن
     disable: غیرفعال‌کردن
@@ -1399,11 +1393,8 @@ fa:
       tips: نکته‌ها
       title: خوش آمدید، کاربر %{name}!
   users:
-    blocked_email_provider: فراهم‌کنندهٔ رایانامه مجاز نیست
     follow_limit_reached: شما نمی‌توانید بیش از %{limit} نفر را پی بگیرید
     generic_access_help_html: مشکل در دسترسی به حسابتان؟ می‌توانید برای کمک با %{email} تکاس بگیرید
-    invalid_email: نشانی ایمیل نامعتبر است
-    invalid_email_mx: به نظر نمی‌رسد نشانی رایانامه وجود داشته باشد
     invalid_otp_token: کد ورود دومرحله‌ای نامعتبر است
     invalid_sign_in_token: کد امنیتی نادرست
     otp_lost_help_html: اگر شما دسترسی به هیچ‌کدامشان ندارید، باید با ایمیل %{email} تماس بگیرید
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 9eb0d9397..541b1b38e 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -6,7 +6,6 @@ fi:
     about_this: Tietoja tästä palvelimesta
     active_count_after: aktiivinen
     administered_by: 'Ylläpitäjä:'
-    api: API
     apps: Mobiili sovellukset
     apps_platforms: Käytä Mastodonia iOS:llä, Androidilla tai muilla alustoilla
     browse_directory: Selaa profiilihakemistoa ja suodata kiinnostuksen kohteiden mukaan
@@ -51,7 +50,6 @@ fi:
     joined: Liittynyt %{date}
     last_active: viimeksi aktiivinen
     link_verified_on: Tämän linkin omistus on tarkastettu %{date}
-    media: Media
     moved_html: "%{name} on muuttanut osoitteeseen %{new_profile_link}:"
     network_hidden: Nämä tiedot eivät ole käytettävissä
     never_active: Ei koskaan
@@ -65,7 +63,6 @@ fi:
       other: Tuuttaukset
     posts_tab_heading: Tuuttaukset
     posts_with_replies: Tuuttaukset ja vastaukset
-    reserved_username: Käyttäjänimi on varattu
     roles:
       admin: Ylläpitäjä
       bot: Botti
@@ -114,7 +111,6 @@ fi:
       header: Otsakekuva
       inbox_url: Saapuvan postilaatikon osoite
       invited_by: Kutsuja
-      ip: IP
       joined: Liittynyt
       location:
         all: Kaikki
@@ -197,34 +193,6 @@ fi:
         promote_user: Käyttäjä ylennetty
         remove_avatar_user: Profiilikuvan poisto
         silence_account: Hiljennä tili
-      actions:
-        assigned_to_self_report: "%{name} otti raportin %{target} tehtäväkseen"
-        change_email_user: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen"
-        confirm_user: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen"
-        create_custom_emoji: "%{name} lähetti uuden emojin %{target}"
-        create_domain_block: "%{name} esti verkkotunnuksen %{target}"
-        create_email_domain_block: "%{name} lisäsi sähköpostiverkkotunnuksen %{target} estolistalle"
-        demote_user: "%{name} alensi käyttäjän %{target}"
-        destroy_domain_block: "%{name} poisti verkkotunnuksen %{target} eston"
-        destroy_email_domain_block: "%{name} lisäsi sähköpostiverkkotunnuksen %{target} sallittujen listalle"
-        destroy_status: "%{name} poisti käyttäjän %{target} tilan"
-        disable_2fa_user: "%{name} poisti käyttäjältä %{target} kaksivaiheisen todentamisen vaatimuksen"
-        disable_custom_emoji: "%{name} poisti emojin %{target} käytöstä"
-        disable_user: "%{name} poisti sisäänkirjautumisen käytöstä käyttäjältä %{target}"
-        enable_custom_emoji: "%{name} salli emojin %{target} käyttöön"
-        enable_user: "%{name} salli sisäänkirjautumisen käyttäjälle %{target}"
-        memorialize_account: "%{name} muutti käyttäjän %{target} tilin muistosivuksi"
-        promote_user: "%{name} ylensi käyttäjän %{target}"
-        remove_avatar_user: "%{name} poisti käyttäjän %{target} profiilikuvan"
-        reopen_report: "%{name} avasi uudelleen raportin %{target}"
-        reset_password_user: "%{name} palautti käyttäjän %{target} salasanan"
-        resolve_report: "%{name} hylkäsi raportin %{target}"
-        silence_account: "%{name} hiljensi käyttäjän %{target}"
-        suspend_account: "%{name} siirsi käyttäjän %{target} jäähylle"
-        unsilence_account: "%{name} poisti käyttäjän %{target} hiljennyksen"
-        unsuspend_account: "%{name} perui käyttäjän %{target} jäähyn"
-        update_custom_emoji: "%{name} päivitti emojin %{target}"
-        update_status: "%{name} päivitti käyttäjän %{target} tilan"
       deleted_status: "(poistettu tilapäivitys)"
       empty: Lokeja ei löytynyt.
       filter_by_action: Suodata tapahtuman mukaan
@@ -253,7 +221,6 @@ fi:
       disable: Poista käytöstä
       disabled: Ei käytössä
       disabled_msg: Emojin poisto käytöstä onnistui
-      emoji: Emoji
       enable: Ota käyttöön
       enabled: Käytössä
       enabled_msg: Emojin käyttöönotto onnistui
@@ -280,7 +247,6 @@ fi:
       feature_invites: Kutsulinkit
       feature_profile_directory: Profiilihakemisto
       feature_registrations: Rekisteröitymiset
-      feature_spam_check: Roskapostin esto
       feature_timeline_preview: Aikajanan esikatselu
       features: Ominaisuudet
       recent_users: Viimeaikaiset käyttäjät
@@ -407,8 +373,6 @@ fi:
         title: Näytä domainestot
       domain_blocks_rationale:
         title: Näytä syy
-      enable_bootstrap_timeline_accounts:
-        title: Uudet käyttäjät seuraavat oletuksena tilejä
       hero:
         desc_html: Näytetään etusivulla. Suosituskoko vähintään 600x100 pikseliä. Jos kuvaa ei aseteta, käytetään instanssin pikkukuvaa
         title: Sankarin kuva
@@ -469,13 +433,10 @@ fi:
         nsfw_on: NSFW PÄÄLLÄ
       deleted: Poistettu
       failed_to_execute: Suoritus epäonnistui
-      media:
-        title: Media
       no_media: Ei mediaa
       title: Tilin tilat
       with_media: Sisältää mediaa
     tags:
-      context: Konteksti
       last_active: Aktiivinen viimeksi
       most_popular: Suosituimmat
       most_recent: Viimeisimmät
@@ -503,7 +464,6 @@ fi:
     sensitive_content: Arkaluontoista sisältöä
   application_mailer:
     notification_preferences: Muuta sähköpostiasetuksia
-    salutation: "%{name},"
     settings: 'Muuta sähköpostiasetuksia: %{link}'
     view: 'Näytä:'
     view_profile: Näytä profiili
@@ -735,7 +695,6 @@ fi:
         format: "%n %u"
         units:
           billion: Mrd
-          million: M
           quadrillion: Brd
           thousand: k
           trillion: B
@@ -769,40 +728,14 @@ fi:
     activity: Viimeisin toiminta
     browser: Selain
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Tuntematon selain
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
       nokia: Nokia S40 Ovi -selain
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Nykyinen istunto
     description: "%{browser}, %{platform}"
     explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi.
     ip: IP-osoite
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
-      mac: macOS
       other: tuntematon järjestelmä
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Hylkää
     revoke_success: Istunnon hylkäys onnistui
     title: Istunnot
@@ -906,7 +839,6 @@ fi:
       tips: Vinkkejä
       title: Tervetuloa mukaan, %{name}!
   users:
-    invalid_email: Virheellinen sähköpostiosoite
     invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
     otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyttä osoitteeseen %{email}
     seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 0c96d462d..92f373d00 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1,11 +1,11 @@
 ---
 fr:
   about:
-    about_hashtag_html: Voici les pouets tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec eux si vous avez un compte n’importe où dans le Fédiverse.
-    about_mastodon_html: 'Le réseau social de l''avenir : Pas d''annonces, pas de surveillance institutionnelle, conception éthique et décentralisation ! Possédez vos données avec Mastodon !'
+    about_hashtag_html: Voici des messages publics tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec si vous avez un compte n’importe où dans le fédiverse.
+    about_mastodon_html: 'Le réseau social de l''avenir : pas de publicité, pas de surveillance institutionnelle, conception éthique et décentralisation ! Gardez le contrôle de vos données avec Mastodon !'
     about_this: À propos
     active_count_after: actif·ve·s
-    active_footnote: Utilisateur·rice·s actif·ve·s mensuels (MAU)
+    active_footnote: Nombre mensuel d'utilisateur·rice·s actif·ve·s (NMUA)
     administered_by: 'Administrée par :'
     api: API
     apps: Applications mobiles
@@ -23,9 +23,11 @@ fr:
     hosted_on: Serveur Mastodon hébergé par %{domain}
     instance_actor_flash: |
       Ce compte est un acteur virtuel utilisé pour représenter le serveur lui-même et non un utilisateur individuel.
-      Il est utilisé à des fins de fédération et ne doit pas être bloqué à moins que vous ne vouliez bloquer l’instance entière, dans ce cas vous devriez utiliser un bloqueur de domaine.
+      Il est utilisé à des fins de fédération et ne doit pas être bloqué à moins que vous ne vouliez bloquer l’instance entière, auquel cas vous devriez utiliser un bloqueur de domaine.
     learn_more: En savoir plus
     privacy_policy: Politique de confidentialité
+    rules: Règles du serveur
+    rules_html: 'Voici un résumé des règles que vous devez suivre si vous voulez avoir un compte sur ce serveur de Mastodon :'
     see_whats_happening: Voir ce qui se passe
     server_stats: 'Statistiques du serveur :'
     source_code: Code source
@@ -33,17 +35,17 @@ fr:
       one: statut
       other: statuts
     status_count_before: Ayant publié
-    tagline: Suivez vos ami·e·s et découvrez en de nouveaux·elles
+    tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles
     terms: Conditions d’utilisation
     unavailable_content: Serveurs modérés
     unavailable_content_description:
       domain: Serveur
       reason: Motif
-      rejecting_media: 'Les fichiers média de ces serveurs ne seront pas traités ou stockés et aucune miniature ne sera affichée, nécessitant un clic vers le fichier d’origine :'
+      rejecting_media: 'Les fichiers média de ces serveurs ne seront ni traités ni stockés, et aucune miniature ne sera affichée, rendant nécessaire de cliquer vers le fichier d’origine :'
       rejecting_media_title: Médias filtrés
       silenced: 'Les messages de ces serveurs seront cachés des flux publics et conversations, et les interactions de leurs utilisateur·rice·s ne donneront lieu à aucune notification, à moins que vous ne les suiviez :'
       silenced_title: Serveurs masqués
-      suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant toute interaction ou communication avec les utilisateur·rice·s de ces serveurs impossible :'
+      suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant impossible toute interaction ou communication avec les utilisateur·rice·s de ces serveurs :'
       suspended_title: Serveurs suspendus
     unavailable_content_html: Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateur·rice·s de n'importe quel autre serveur dans le fédiverse. Voici les exceptions qui ont été faites sur ce serveur en particulier.
     user_count_after:
@@ -74,11 +76,10 @@ fr:
     pin_errors:
       following: Vous devez être déjà abonné·e à la personne que vous désirez recommander
     posts:
-      one: Pouet
-      other: Pouets
-    posts_tab_heading: Pouets
-    posts_with_replies: Pouets & réponses
-    reserved_username: Ce nom d’utilisateur·ice est réservé
+      one: Message
+      other: Messages
+    posts_tab_heading: Messages
+    posts_with_replies: Messages et réponses
     roles:
       admin: Admin
       bot: Robot
@@ -229,6 +230,7 @@ fr:
         create_domain_block: Créer un blocage de domaine
         create_email_domain_block: Créer un blocage de domaine de courriel
         create_ip_block: Créer une règle IP
+        create_unavailable_domain: Créer un domaine indisponible
         demote_user: Rétrograder l’utilisateur·ice
         destroy_announcement: Supprimer l’annonce
         destroy_custom_emoji: Supprimer des émojis personnalisés
@@ -237,6 +239,7 @@ fr:
         destroy_email_domain_block: Supprimer le blocage de domaine de courriel
         destroy_ip_block: Supprimer la règle IP
         destroy_status: Supprimer le statut
+        destroy_unavailable_domain: Supprimer le domaine indisponible
         disable_2fa_user: Désactiver l’A2F
         disable_custom_emoji: Désactiver les émojis personnalisés
         disable_user: Désactiver l’utilisateur·ice
@@ -260,46 +263,46 @@ fr:
         update_domain_block: Mettre à jour le blocage de domaine
         update_status: Mettre à jour le statut
       actions:
-        assigned_to_self_report: "%{name} s’est assigné·e le signalement de %{target}"
-        change_email_user: "%{name} a modifié l’adresse de courriel de l’utilisateur·rice %{target}"
-        confirm_user: "%{name} adresse courriel confirmée pour l’utilisateur·rice %{target}"
-        create_account_warning: "%{name} a envoyé un avertissement à %{target}"
-        create_announcement: "%{name} a créé une nouvelle annonce %{target}"
-        create_custom_emoji: "%{name} a importé de nouveaux émojis %{target}"
-        create_domain_allow: "%{name} a inscrit le domaine %{target} sur liste blanche"
-        create_domain_block: "%{name} a bloqué le domaine %{target}"
-        create_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste noire"
-        create_ip_block: "%{name} a créé une règle pour l’IP %{target}"
-        demote_user: "%{name} a rétrogradé l’utilisateur·rice %{target}"
-        destroy_announcement: "%{name} a supprimé l’annonce %{target}"
-        destroy_custom_emoji: "%{name} a détruit l’émoticône %{target}"
-        destroy_domain_allow: "%{name} a supprimé le domaine %{target} de la liste blanche"
-        destroy_domain_block: "%{name} a débloqué le domaine %{target}"
-        destroy_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste blanche"
-        destroy_ip_block: "%{name} a supprimé la règle pour l’IP %{target}"
-        destroy_status: "%{name} a enlevé le statut de %{target}"
-        disable_2fa_user: "%{name} a désactivé l’authentification à deux facteurs pour l’utilisateur·rice %{target}"
-        disable_custom_emoji: "%{name} a désactivé l’émoji %{target}"
-        disable_user: "%{name} a désactivé la connexion pour l’utilisateur·rice %{target}"
-        enable_custom_emoji: "%{name} a activé l’émoji %{target}"
-        enable_user: "%{name} a activé la connexion pour l’utilisateur·rice %{target}"
-        memorialize_account: "%{name} a transformé le compte de %{target} en une page de mémorial"
-        promote_user: "%{name} a promu l’utilisateur·rice %{target}"
-        remove_avatar_user: "%{name} a supprimé l’avatar de %{target}"
-        reopen_report: "%{name} a rouvert le signalement %{target}"
-        reset_password_user: "%{name} a réinitialisé le mot de passe de %{target}"
-        resolve_report: "%{name} a résolu le signalement %{target}"
-        sensitive_account: "%{name} a marqué le média de %{target} comme sensible"
-        silence_account: "%{name} a masqué le compte de %{target}"
-        suspend_account: "%{name} a suspendu le compte %{target}"
-        unassigned_report: "%{name} a désassigné le signalement %{target}"
-        unsensitive_account: "%{name} a enlevé le marquage du média de %{target} comme sensible"
-        unsilence_account: "%{name} ne masque plus le compte de %{target}"
-        unsuspend_account: "%{name} a réactivé le compte de %{target}"
-        update_announcement: "%{name} a actualisé l’annonce %{target}"
-        update_custom_emoji: "%{name} a mis à jour l’émoji %{target}"
-        update_domain_block: "%{name} a mis à jour le blocage de domaine pour %{target}"
-        update_status: "%{name} a mis à jour le statut de %{target}"
+        assigned_to_self_report_html: "%{name} s’est assigné·e le signalement de %{target}"
+        change_email_user_html: "%{name} a modifié l'adresse de courriel de l'utilisateur·rice %{target}"
+        confirm_user_html: "%{name} a confirmé l'adresse courriel de l'utilisateur·rice %{target}"
+        create_account_warning_html: "%{name} a envoyé un avertissement à %{target}"
+        create_announcement_html: "%{name} a créé une nouvelle annonce %{target}"
+        create_custom_emoji_html: "%{name} a téléversé un nouvel émoji %{target}"
+        create_domain_allow_html: "%{name} a autorisé la fédération avec le domaine %{target}"
+        create_domain_block_html: "%{name} a bloqué le domaine %{target}"
+        create_email_domain_block_html: "%{name} a bloqué de domaine de courriel %{target}"
+        create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}"
+        demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}"
+        destroy_announcement_html: "%{name} a supprimé l'annonce %{target}"
+        destroy_custom_emoji_html: "%{name} a détruit l'émoji %{target}"
+        destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}"
+        destroy_domain_block_html: "%{name} a débloqué le domaine %{target}"
+        destroy_email_domain_block_html: "%{name} a débloqué le domaine de courriel %{target}"
+        destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}"
+        destroy_status_html: "%{name} a supprimé le statut de %{target}"
+        disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}"
+        disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}"
+        disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}"
+        enable_custom_emoji_html: "%{name} a activé l'émoji %{target}"
+        enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}"
+        memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial"
+        promote_user_html: "%{name} a promu l'utilisateur·rice %{target}"
+        remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}"
+        reopen_report_html: "%{name} a rouvert le signalement %{target}"
+        reset_password_user_html: "%{name} a réinitialisé le mot de passe de l'utilisateur·rice %{target}"
+        resolve_report_html: "%{name} a résolu le signalement %{target}"
+        sensitive_account_html: "%{name} a marqué le média de %{target} comme sensible"
+        silence_account_html: "%{name} a masqué le compte de %{target}"
+        suspend_account_html: "%{name} a suspendu le compte de %{target}"
+        unassigned_report_html: "%{name} a désassigné le signalement %{target}"
+        unsensitive_account_html: "%{name} a enlevé le marquage comme sensible du média de %{target}"
+        unsilence_account_html: "%{name} a enlevé le masquage du compte de %{target}"
+        unsuspend_account_html: "%{name} a réactivé le compte de %{target}"
+        update_announcement_html: "%{name} a mis à jour l'annonce %{target}"
+        update_custom_emoji_html: "%{name} a mis à jour l'émoji %{target}"
+        update_domain_block_html: "%{name} a mis à jour le blocage de domaine pour %{target}"
+        update_status_html: "%{name} a mis à jour le statut de %{target}"
       deleted_status: "(statut supprimé)"
       empty: Aucun journal trouvé.
       filter_by_action: Filtrer par action
@@ -314,10 +317,12 @@ fr:
       new:
         create: Créer une annonce
         title: Nouvelle annonce
+      publish: Publier
       published_msg: Annonce publiée avec succès !
       scheduled_for: Planifiée pour %{time}
       scheduled_msg: Annonce planifiée pour publication !
       title: Annonces
+      unpublish: Supprimer la publication
       unpublished_msg: L’annonce a été dépubliée avec succès !
       updated_msg: L’annonce a été mise à jour avec succès !
     custom_emojis:
@@ -362,7 +367,6 @@ fr:
       feature_profile_directory: Annuaire des profils
       feature_registrations: Inscriptions
       feature_relay: Relais de fédération
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Aperçu du fil public
       features: Fonctionnalités
       hidden_service: Fédération avec des services cachés
@@ -405,9 +409,9 @@ fr:
       obfuscate: Obfusquer le nom de domaine
       obfuscate_hint: Obfusquer partiellement le nom de domaine dans la liste si la liste des limitations de domaine est activée
       private_comment: Commentaire privé
-      private_comment_hint: Commenter sur cette limitation de domaine pour informer les modérateurs internes.
+      private_comment_hint: Commentaire sur cette limitation de domaine pour informer en interne les modérateurs.
       public_comment: Commentaire public
-      public_comment_hint: Commentaire sur cette limitation de domaine pour le grand public, si l'affichage publique de la liste des limitations de domaine est activée.
+      public_comment_hint: Commentaire sur cette limitation de domaine pour le grand public, si l'affichage public de la liste des limitations de domaine est activé.
       reject_media: Rejeter les fichiers média
       reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions
       reject_reports: Rejeter les signalements
@@ -440,8 +444,18 @@ fr:
         create: Créer le blocage
         title: Nouveau blocage de domaine de courriel
       title: Blocage de domaines de courriel
+    follow_recommendations:
+      description_html: "<strong>Les recommandations d'abonnement aident les nouvelles personnes à trouver rapidement du contenu intéressant</strong>. Si un·e utilisateur·rice n'a pas assez interagi avec les autres pour avoir des recommandations personnalisées, ces comptes sont alors recommandés. La sélection est mise à jour quotidiennement depuis un mélange de comptes ayant le plus d'interactions récentes et le plus grand nombre d'abonné·e·s locaux pour une langue donnée."
+      language: Pour la langue
+      status: État
+      suppress: Supprimer les recommandations d'abonnement
+      suppressed: Supprimée
+      title: Recommandations d'abonnement
+      unsuppress: Rétablir les recommandations d'abonnement
     instances:
       by_domain: Domaine
+      delivery:
+        unavailable: Indisponible
       delivery_available: Livraison disponible
       empty: Aucun domaine trouvé.
       known_accounts:
@@ -457,7 +471,7 @@ fr:
       total_blocked_by_us: Bloqués par nous
       total_followed_by_them: Suivi par eux
       total_followed_by_us: Suivi par nous
-      total_reported: Signalements à leurs propos
+      total_reported: Signalements à leur sujet
       total_storage: Attachements de média
     invites:
       deactivate_all: Tout désactiver
@@ -489,11 +503,11 @@ fr:
     relays:
       add_new: Ajouter un nouveau relais
       delete: Supprimer
-      description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de pouets publics entre les serveurs qui publient dessus et ceux qui y sont abonnés. <strong>Il peut aider les petits et moyen serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants.
+      description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de messages publics entre les serveurs qui s’inscrivent et ceux qui publient dessus. <strong>Il peut aider les petits et moyens serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que leurs membres suivent des gens inscrits sur d’autres serveurs.
       disable: Désactiver
       disabled: Désactivé
       enable: Activer
-      enable_hint: Une fois activé, votre serveur souscrira à tous les pouets publics présents sur ce relais et y enverra ses propres pouets publics.
+      enable_hint: Une fois activé, votre serveur souscrira à tous les messages publics de ce relais et y enverra ses propres messages publics.
       enabled: Activé
       inbox_url: URL du relais
       pending: En attente de l’approbation du relai
@@ -542,6 +556,13 @@ fr:
       unassign: Dés-assigner
       unresolved: Non résolus
       updated_at: Mis à jour
+    rules:
+      add_new: Ajouter une règle
+      delete: Supprimer
+      description_html: Bien que la plupart des gens prétende avoir lu les conditions d'utilisation avant de les accepter, généralement les utilisateur·rice·s ne les lisent vraiment que lorsque un problème apparaît. <strong>Pour faciliter la visualisation des règles de votre serveur en un seul coup d’œil, présentez-les sous la forme d'une liste à puces !</strong> Essayez de garder chacune des règles simple et concise, mais faites attention à ne pas non plus les diviser en de trop nombreux éléments distincts.
+      edit: Modifier la règle
+      empty: Aucune règle de serveur n'a été définie pour l'instant.
+      title: Règles du serveur
     settings:
       activity_api_enabled:
         desc_html: Nombre de statuts affichés localement, de comptes actifs et de nouvelles inscriptions regroupé·e·s par semaine
@@ -565,9 +586,6 @@ fr:
         users: Aux utilisateur·rice·s connecté·e·s localement
       domain_blocks_rationale:
         title: Montrer la raison
-      enable_bootstrap_timeline_accounts:
-        desc_html: Faire suivre automatiquement les comptes configurés aux nouveaux·lles utilisateurs·rices afin que leur flux personnel ne démarre pas vide
-        title: Activer les abonnements par défaut pour les nouveaux·elles utilisateur·rice·s
       hero:
         desc_html: Affichée sur la page d’accueil. Au moins 600x100px recommandé. Lorsqu’elle n’est pas définie, se rabat sur la vignette du serveur
         title: Image d’en-tête
@@ -575,7 +593,7 @@ fr:
         desc_html: Affiché sur plusieurs pages. Au moins 293×205px recommandé. Lorsqu’il n’est pas défini, retombe à la mascotte par défaut
         title: Image de la mascotte
       peers_api_enabled:
-        desc_html: Noms des domaines que ce serveur a découvert dans le fediverse
+        desc_html: Noms des domaines que ce serveur a découvert dans le fédiverse
         title: Publier la liste des serveurs découverts
       preview_sensitive_media:
         desc_html: Les aperçus de lien sur les autres sites web afficheront une vignette même si les médias sont marqués comme sensibles
@@ -603,8 +621,8 @@ fr:
           open: N’importe qui peut s’inscrire
         title: Mode d’enregistrement
       show_known_fediverse_at_about_page:
-        desc_html: Lorsque l’option est activée, les pouets provenant de toutes les serveurs connus sont montrés dans la prévisualisation. Sinon, seuls les pouets locaux sont montrés
-        title: Afficher le fediverse connu dans la prévisualisation du fil
+        desc_html: Lorsque désactivée, restreint le fil public accessible via la page d’accueil de l’instance pour ne montrer que le contenu local
+        title: Inclure le contenu fédéré sur la page de fil public sans authentification
       show_staff_badge:
         desc_html: Montrer un badge de responsable sur une page utilisateur·rice
         title: Montrer un badge de responsable
@@ -621,9 +639,6 @@ fr:
         desc_html: Affichée sur la page des conditions d’utilisation du site. Vous pouvez utiliser des balises HTML
         title: Politique de confidentialité
       site_title: Nom du serveur
-      spam_check_enabled:
-        desc_html: Mastodon peut signaler automatiquement les comptes qui envoient des messages non sollicités de façon répétée. Il peut y avoir des faux positifs.
-        title: Automatisation anti-spam
       thumbnail:
         desc_html: Utilisée pour les prévisualisations via OpenGraph et l’API. 1200x630px recommandé
         title: Vignette du serveur
@@ -654,13 +669,18 @@ fr:
       no_status_selected: Aucun statut n’a été modifié car aucun n’a été sélectionné
       title: Statuts du compte
       with_media: Avec médias
+    system_checks:
+      database_schema_check:
+        message_html: Vous avez des migrations de base de données en attente. Veuillez les exécuter pour vous assurer que l'application se comporte comme prévu
+      rules_check:
+        action: Gérer les règles du serveur
+        message_html: Vous n'avez pas défini de règles pour le serveur.
+      sidekiq_process_check:
+        message_html: Aucun processus Sidekiq en cours d'exécution pour la/les file(s) d'attente %{value}. Veuillez vérifier votre configuration de Sidekiq
     tags:
       accounts_today: Utilisations uniques aujourd'hui
       accounts_week: Utilisation unique cette semaine
       breakdown: Répartition de l’utilisation actuelle par source
-      context: Contexte
-      directory: Dans l’annuaire
-      in_directory: "%{count} dans l’annuaire"
       last_active: Dernière activité
       most_popular: Plus populaire
       most_recent: Plus récent
@@ -669,7 +689,7 @@ fr:
       reviewed: Traité
       title: Hashtags
       trending_right_now: Populaire en ce moment
-      unique_uses_today: "%{count} posts aujourd'hui"
+      unique_uses_today: "%{count} publications aujourd'hui"
       unreviewed: Non traité
       updated_msg: Paramètres du hashtag mis à jour avec succès
     title: Administration
@@ -677,6 +697,7 @@ fr:
       add_new: Ajouter un nouveau
       delete: Supprimer
       edit_preset: Éditer les avertissements prédéfinis
+      empty: Vous n'avez pas encore créé de paramètres prédéfinis pour les avertissements.
       title: Gérer les avertissements prédéfinis
   admin_mailer:
     new_pending_account:
@@ -687,7 +708,7 @@ fr:
       body_remote: Quelqu’un de %{domain} a signalé %{target}
       subject: Nouveau signalement sur %{instance} (#%{id})
     new_trending_tag:
-      body: 'Le hashtag #%{name} est dans les tendances aujourd’hui, mais il n’a pas été approuvé. Il ne sera pas affiché publiquement à moins que vous l’autorisiez, ou sauvegardez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.'
+      body: 'Le hashtag #%{name} est dans les tendances aujourd’hui, mais il n’a pas encore été approuvé. Il ne sera pas affiché publiquement à moins que vous l’autorisiez. Sauvegardez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.'
       subject: Nouveau hashtag en attente d’approbation sur %{instance} (#%{name})
   aliases:
     add_new: Créer un alias
@@ -707,7 +728,7 @@ fr:
       guide_link: https://fr.crowdin.com/project/mastodon
       guide_link_text: Tout le monde peut y contribuer.
     sensitive_content: Contenu sensible
-    toot_layout: Agencement du pouet
+    toot_layout: Agencement des messages
   application_mailer:
     notification_preferences: Modifier les préférences de courriel
     salutation: "%{name},"
@@ -749,7 +770,7 @@ fr:
       cas: CAS
       saml: SAML
     register: S’inscrire
-    registration_closed: "%{instance} n’accepte pas de nouveaux membres"
+    registration_closed: "%{instance} a désactivé les inscriptions"
     resend_confirmation: Envoyer à nouveau les consignes de confirmation
     reset_password: Réinitialiser le mot de passe
     security: Sécurité
@@ -791,7 +812,7 @@ fr:
   date:
     formats:
       default: "%d %b %Y"
-      with_month_name: "%B %d, %Y"
+      with_month_name: "%d %B %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count} h"
@@ -851,7 +872,7 @@ fr:
     archive_takeout:
       date: Date
       download: Télécharger votre archive
-      hint_html: Vous pouvez demander une archive de vos <strong>pouets et médias téléversés</strong>. Les données exportées seront au format ActivityPub, lisible par tout logiciel compatible. Vous pouvez demander une archive tous les 7 jours.
+      hint_html: Vous pouvez demander une archive de vos <strong>messages et médias téléversés</strong>. Les données exportées seront au format ActivityPub, lisible par tout logiciel compatible. Vous pouvez demander une archive tous les 7 jours.
       in_progress: Création de votre archive…
       request: Demandez vos archives
       size: Taille
@@ -873,7 +894,7 @@ fr:
       home: Accueil et listes
       notifications: Notifications
       public: Fils publics
-      thread: Conversations
+      thread: Discussions
     edit:
       title: Éditer le filtre
     errors:
@@ -917,7 +938,7 @@ fr:
     i_am_html: Je suis %{username} sur %{service}.
     identity: Identité
     inactive: Inactive
-    publicize_checkbox: 'Et le poueter :'
+    publicize_checkbox: 'Et publier ceci :'
     publicize_toot: 'C’est prouvé ! Je suis %{username} sur %{service}: %{url}'
     remove: Retirer la preuve du compte
     removed: Preuve retirée du compte avec succès
@@ -996,10 +1017,10 @@ fr:
     warning:
       backreference_required: Le nouveau compte doit d'abord être configuré pour faire référence à celui-ci en définissant un alias
       before: 'Avant de procéder, veuillez lire attentivement ces notes :'
-      cooldown: Après le déménagement, il y a une période de gel pendant laquelle vous ne pourrez plus re-déménager
+      cooldown: Après le déménagement, il y a une période d’attente pendant laquelle vous ne pourrez pas re-déménager
       disabled_account: Votre compte actuel ne sera pas entièrement utilisable par la suite. Cependant, vous aurez accès à l'exportation de données et à la ré-activation.
       followers: Cette action va déménager tou·te·s les abonné·e·s du compte actuel vers le nouveau compte
-      only_redirect_html: Alternativement, vous pouvez <a href="%{path}">seulement appliquer une redirection sur votre profil</a>.
+      only_redirect_html: Alternativement, vous pouvez <a href="%{path}">seulement afficher une redirection sur votre profil</a>.
       other_data: Aucune autre donnée ne sera déplacée automatiquement
       redirect: Le profil de votre compte actuel sera mis à jour avec un avis de redirection et sera exclu des recherches
   moderation:
@@ -1007,7 +1028,7 @@ fr:
   move_handler:
     carry_blocks_over_text: Cet utilisateur que vous aviez bloqué est parti de %{acct}.
     carry_mutes_over_text: Cet utilisateur que vous aviez masqué est parti de %{acct}.
-    copy_account_note_text: 'Cet·te utilisateur·rice est parti de %{acct}, voici vos notes précédentes à son sujet :'
+    copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :'
   notification_mailer:
     digest:
       action: Voir toutes les notifications
@@ -1021,8 +1042,8 @@ fr:
         other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418"
       title: Pendant votre absence…
     favourite:
-      body: "%{name} a ajouté votre pouet à ses favoris :"
-      subject: "%{name} a ajouté votre pouet à ses favoris"
+      body: "%{name} a ajouté votre message à ses favoris :"
+      subject: "%{name} a ajouté votre message à ses favoris"
       title: Nouveau favori
     follow:
       body: "%{name} vous suit !"
@@ -1038,10 +1059,14 @@ fr:
       body: "%{name} vous a mentionné⋅e dans :"
       subject: "%{name} vous a mentionné·e"
       title: Nouvelle mention
+    poll:
+      subject: Un sondage de %{name} est terminé
     reblog:
-      body: "%{name} a partagé votre statut :"
-      subject: "%{name} a partagé votre statut"
+      body: 'Votre message été partagé par %{name} :'
+      subject: "%{name} a partagé votre message"
       title: Nouveau partage
+    status:
+      subject: "%{name} vient de publier"
   notifications:
     email_events: Événements pour les notifications par courriel
     email_events_hint: 'Sélectionnez les événements pour lesquels vous souhaitez recevoir des notifications :'
@@ -1083,7 +1108,7 @@ fr:
       too_many_options: ne peut contenir plus de %{max} propositions
   preferences:
     other: Autre
-    posting_defaults: Paramètres par défaut des pouets
+    posting_defaults: Paramètres de publication par défaut
     public_timelines: Fils publics
   reactions:
     errors:
@@ -1104,7 +1129,7 @@ fr:
     relationship: Relation
     remove_selected_domains: Supprimer tous les abonné·e·s des domaines sélectionnés
     remove_selected_followers: Supprimer les abonné·e·s sélectionnés
-    remove_selected_follows: Cesser de suivre les utilisateur·rice·s sélectionné·e·s
+    remove_selected_follows: Cesser de suivre les comptes sélectionnés
     status: État du compte
   remote_follow:
     acct: Entrez l’adresse profil@serveur depuis laquelle vous voulez effectuer cette action
@@ -1116,16 +1141,16 @@ fr:
   remote_interaction:
     favourite:
       proceed: Confirmer l’ajout aux favoris
-      prompt: 'Vous souhaitez mettre ce pouet en favori :'
+      prompt: 'Vous souhaitez ajouter ce message à vos favoris :'
     reblog:
       proceed: Confirmer le partage
-      prompt: 'Vous souhaitez partager ce pouet :'
+      prompt: 'Vous souhaitez partager ce message :'
     reply:
       proceed: Confirmer la réponse
-      prompt: 'Vous souhaitez répondre à ce pouet :'
+      prompt: 'Vous souhaitez répondre à ce message :'
   scheduled_statuses:
-    over_daily_limit: Vous avez dépassé la limite de %{limit} pouets planifiés pour ce jour
-    over_total_limit: Vous avez dépassé la limite de %{limit} pouets planifiés
+    over_daily_limit: Vous avez dépassé la limite de %{limit} messages planifiés par jour
+    over_total_limit: Vous avez dépassé la limite de %{limit} messages planifiés
     too_soon: La date planifiée doit être dans le futur
   sessions:
     activity: Dernière activité
@@ -1190,8 +1215,6 @@ fr:
     relationships: Abonnements et abonné·e·s
     two_factor_authentication: Identification à deux facteurs
     webauthn_authentication: Clés de sécurité
-  spam_check:
-    spam_detected: Ceci est un rapport automatisé. Des pollupostages ont été détectés.
   statuses:
     attached:
       audio:
@@ -1234,14 +1257,15 @@ fr:
     sign_in_to_participate: Inscrivez-vous pour prendre part à la conversation
     title: '%{name} : "%{quote}"'
     visibilities:
+      direct: Direct
       private: Abonné⋅e⋅s uniquement
       private_long: Afficher seulement à vos vos abonné·e·s
-      public: Public
+      public: Publique
       public_long: Tout le monde peut voir vos statuts
       unlisted: Public sans être affiché sur le fil public
-      unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics
+      unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas listés sur les fils publics
   stream_entries:
-    pinned: Pouet épinglé
+    pinned: Message épinglé
     reblogged: a partagé
     sensitive_content: Contenu sensible
   tags:
@@ -1252,29 +1276,29 @@ fr:
       <h3 id="collect">Quelles informations collectons-nous ?</h3>
 
       <ul>
-      <li><em>Informations de base sur votre compte</em> : Si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.</li>
-      <li><em>Posts, liste d’abonnements et autres informations publiques</em> : La liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimer un post, il est probable que vos abonné·e·s en soient informé·e·s. Partager un message ou le marquer comme favori est toujours une action publique.</li>
-      <li><em>Posts directs et abonné·e·s uniquement</em> : Tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne foi pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. <em>Gardez s’il vous plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages</em> et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. <em>Ne partager aucune information sensible à l’aide de Mastodon.</em></li>
-      <li><em>IP et autres métadonnées</em> : Quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.</li>
+      <li><em>Informations de base sur votre compte</em> : si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.</li>
+      <li><em>Posts, liste d’abonnements et autres informations publiques</em> : la liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimez un post, il est probable que l'action soit aussi délivrée à vos abonné·e·s. Partager un message ou le marquer comme favori est toujours une action publique.</li>
+      <li><em>Posts directs et abonné·e·s uniquement</em> : tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne foi pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. <em>Gardez s’il vous plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages</em> et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. <em>Ne partagez aucune information sensible à l’aide de Mastodon !</em></li>
+      <li><em>IP et autres métadonnées</em> : quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.</li>
       </ul>
 
       <hr class="spacer" />
 
       <h3 id="use">Que faisons-nous des informations que nous collectons ?</h3>
 
-      <p>Toutes les informations que nous collectons sur vous peuvent être utilisées d’une des manières suivantes :</p>
+      <p>Toutes les informations que nous collectons sur vous peuvent être utilisées des manières suivantes :</p>
 
       <ul>
-      <li>Pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.</li>
-      <li>Pour aider à la modération de la communauté, par exemple, comparer votre adresse IP à d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.</li>
-      <li>L’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyer des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour touts autres requêtes ou questions.</li>
+      <li>pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.</li>
+      <li>pour aider à la modération de la communauté : par exemple, comparer votre adresse IP avec d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.</li>
+      <li>l’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyer des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour toutes autres requêtes ou questions.</li>
       </ul>
 
       <hr class="spacer" />
 
       <h3 id="protect">Comment protégeons-nous vos informations ?</h3>
 
-      <p>Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont sécurisés à l’aide de TLS tandis que votre mot de passe est haché en utilisant un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.</p>
+      <p>Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont sécurisés à l’aide de TLS ; tandis que votre mot de passe est haché en utilisant un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.</p>
 
       <hr class="spacer" />
 
@@ -1283,8 +1307,8 @@ fr:
       <p>Nous ferons un effort de bonne foi :</p>
 
       <ul>
-      <li>Pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.</li>
-      <li>Pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.</li>
+      <li>pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.</li>
+      <li>pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.</li>
       </ul>
 
       <p>Vous pouvez demander une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.</p>
@@ -1295,27 +1319,27 @@ fr:
 
       <h3 id="cookies">Utilisons-nous des témoins de connexion ?</h3>
 
-      <p>Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transfère sur le disque dur de votre ordinateur via votre navigateur web (si vous l’avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et de, dans le cas où vous possédez un compte, de vous associer avec ce dernier.</p>
+      <p>Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transfère sur le disque dur de votre ordinateur via votre navigateur web (si vous l’avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et, dans le cas où vous possédez un compte, de vous associer avec ce dernier.</p>
 
       <p>Nous utilisons les témoins de connexion comme un moyen de comprendre et de nous souvenir de vos préférences pour vos prochaines visites.</p>
 
       <hr class="spacer" />
 
-      <h3 id="disclose">Divulguons-nous des informations à des tierces parties ?</h3>
+      <h3 id="disclose">Divulguons-nous des informations à des tiers ?</h3>
 
-      <p>Nous ne vendons, n’échangeons ou ne transférons d’une quelque manière que soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tierces parties de confiance qui nous aident à opérer ce site, à conduire nos activités commerciales ou à vous servir, tant qu’elles acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que c’est nécessaire pour nous conformer à la loi, pour appliquer les politiques de notre site ainsi que pour défendre nos droits, notre propriété, notre sécurité et celles et ceux d’autres personnes.</p>
+      <p>Nous ne vendons, n’échangeons ou ne transférons d’une quelconque manière que ce soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tiers de confiance qui nous aident à faire fonctionner ce site, à conduire nos activités commerciales ou à vous servir, du moment qu’ils acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que cela est nécessaire pour nous conformer à la loi, pour faire respecter les règles de notre site, ainsi que pour défendre nos droits, notre propriété, notre sécurité, ou ceux d’autres personnes.</p>
 
       <p>Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement peuvent être délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.</p>
 
-      <p>Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tous vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.</p>
+      <p>Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, à votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tous vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.</p>
 
       <hr class="spacer" />
 
       <h3 id="children">Utilisation de ce site par les enfants</h3>
 
-      <p>Si ce serveur est situé dans l’UE ou l’EEE : Notre site, produits et services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (<a href="https://fr.wikipedia.org/wiki/R%C3%A8glement_g%C3%A9n%C3%A9ral_sur_la_protection_des_donn%C3%A9es">Règlement Général sur la Protection des Données</a>), merci de ne pas utiliser ce site.</p>
+      <p>Si ce serveur est situé dans l’UE ou l’EEE : notre site, nos produits et nos services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (<a href="https://fr.wikipedia.org/wiki/R%C3%A8glement_g%C3%A9n%C3%A9ral_sur_la_protection_des_donn%C3%A9es">Règlement Général sur la Protection des Données</a>), merci de ne pas utiliser ce site.</p>
 
-      <p>Si ce serveur est situé dans aux États-Unis d’Amérique : Notre site, produits et services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (<a href="https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>), merci de ne pas utiliser ce site.</p>
+      <p>Si ce serveur est situé aux États-Unis d’Amérique : notre site, nos produits et nos services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (<a href="https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>), merci de ne pas utiliser ce site.</p>
 
       <p>Les exigences légales peuvent être différentes si ce serveur se trouve dans une autre juridiction.</p>
 
@@ -1367,15 +1391,15 @@ fr:
       explanation:
         disable: Lorsque votre compte est gelé, les données de votre compte demeurent intactes, mais vous ne pouvez effectuer aucune action jusqu’à ce qu’il soit débloqué.
         sensitive: Vos fichiers médias téléversés et vos médias liés seront traités comme sensibles.
-        silence: Lorsque votre compte est limité, seul·e·s les utilisateur·rice·s qui vous suivent déjà verront vos pouets sur ce serveur, et vous pourriez être exclu de plusieurs listes publiques. Néanmoins, d’autres utilisateur·rice·s peuvent vous suivre manuellement.
-        suspend: Votre compte a été suspendu, et tous vos pouets et vos fichiers multimédia téléversés ont été supprimés irréversiblement de ce serveur, et des serveurs où vous aviez des abonné·e·s.
+        silence: Vous pouvez encore utiliser votre compte, mais seuls les comptes qui vous suivent déjà verront vos messages sur ce serveur, et vous pouvez être exclu de plusieurs listes publiques. Néanmoins, il est encore possible de vous suivre manuellement.
+        suspend: Votre ne pouvez plus utiliser votre compte, et votre profil ainsi que d’autres données ne sont plus accessibles. Vous pouvez vous connecter pour demander une sauvegarde de vos données avant qu’elles ne soient complètement supprimées, mais nous gardons certaines données pour vous empêcher d’échapper à la suspension.
       get_in_touch: Vous pouvez répondre à cette adresse pour entrer en contact avec l’équipe de %{instance}.
       review_server_policies: Passer en revue les politiques du serveur
       statuses: 'Spécialement, pour :'
       subject:
         disable: Votre compte %{acct} a été gelé
         none: Avertissement pour %{acct}
-        sensitive: Les médias publiés depuis votre compte %{acct} ont été marqués comme étant sensibles
+        sensitive: Les médias de votre compte %{acct} ont été marqués comme sensibles
         silence: Votre compte %{acct} a été limité
         suspend: Votre compte %{acct} a été suspendu
       title:
@@ -1388,8 +1412,8 @@ fr:
       edit_profile_action: Configuration du profil
       edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant un avatar, une image d’en-tête, en changeant votre pseudo et plus encore. Si vous souhaitez examiner les nouveaux·lles abonné·e·s avant qu’il·elle·s ne soient autorisé·e·s à vous suivre, vous pouvez verrouiller votre compte.
       explanation: Voici quelques conseils pour vous aider à démarrer
-      final_action: Commencer à publier
-      final_step: 'Commencez à poster ! Même sans abonné·e·s, vos messages publics peuvent être vus par d’autres, par exemple sur le fil public local et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
+      final_action: Commencez à publier
+      final_step: 'Commencez à publier ! Même sans abonné·e·s, vos messages publics peuvent être vus par d’autres, par exemple sur le fil public local et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
       full_handle: Votre identifiant complet
       full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur.
       review_preferences_action: Modifier les préférences
@@ -1402,11 +1426,8 @@ fr:
       tips: Astuces
       title: Bienvenue à bord, %{name} !
   users:
-    blocked_email_provider: Ce fournisseur de courriel n'est pas autorisé
     follow_limit_reached: Vous ne pouvez pas suivre plus de %{limit} personnes
     generic_access_help_html: Rencontrez-vous des difficultés d’accès à votre compte ? Vous pouvez contacter %{email} pour obtenir de l’aide
-    invalid_email: L’adresse courriel est invalide
-    invalid_email_mx: L’adresse courriel n’existe pas
     invalid_otp_token: Le code d’authentification à deux facteurs est invalide
     invalid_sign_in_token: Code de sécurité non valide
     otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
new file mode 100644
index 000000000..f49284b8d
--- /dev/null
+++ b/config/locales/gd.yml
@@ -0,0 +1,1410 @@
+---
+gd:
+  about:
+    about_hashtag_html: Seo postaichean poblach le taga <strong>#%{hashtag}</strong> riutha. ’S urrainn dhut eadar-ghnìomh a ghabhail leotha ma tha cunntas agad àite sam bith sa cho-shaoghal.
+    about_mastodon_html: 'An lìonra sòisealta dhan àm ri teachd: Gun sanasachd, gun chaithris corporra, dealbhadh beusail agus dì-mheadhanachadh! Gabh sealbh air an dàta agad fhèin le Mastodon!'
+    about_this: Mu dhèidhinn
+    active_count_after: gnìomhach
+    active_footnote: Cleachdaichean gnìomhach gach mìos (MAU)
+    administered_by: 'Rianachd le:'
+    api: API
+    apps: Aplacaidean mobile
+    apps_platforms: Cleachd Mastodon o iOS, Android ’s ùrlaran eile
+    browse_directory: Rùraich eòlaire phròifilean ’s criathraich a-rèir ùidhean
+    browse_local_posts: Brabhsaich sruth beò de phostaichean poblach on fhrithealaiche seo
+    browse_public_posts: Brabhsaich sruth beò de phostaichean poblach air Mastodon
+    contact: Fios thugainn
+    contact_missing: Cha deach a shuidheachadh
+    contact_unavailable: Chan eil seo iomchaidh
+    discover_users: Lorg cleachdaichean
+    documentation: Docamaideadh
+    federation_hint_html: Le cunntas air %{instance}, ’s urrainn dhut leantainn air daoine air frithealaiche Mastodon sam bith is a bharrachd.
+    get_apps: Feuch aplacaid mobile
+    hosted_on: Mastodon ’ga òstadh air %{domain}
+    instance_actor_flash: |
+      ’S e actar biortail a tha sa chunntas seo a riochdaicheas am frithealaiche fhèin seach cleachdaiche sònraichte.
+      Tha e ’ga chleachdadh a chùm co-nasgaidh agus cha bu chòir dhut a bhacadh ach ma tha thu airson an t-ionstans gu lèir a bhacadh agus b’ fheàirrde thu bacadh àrainne a chleachdadh an àite sin.
+    learn_more: Barrachd fiosrachaidh
+    privacy_policy: Poileasaidh prìobhaideachd
+    rules: Riaghailtean an fhrithealaiche
+    rules_html: 'Tha geàrr-chunntas air na riaghailtean a dh’fheumas tu gèilleadh riutha ma tha thu airson cunntas fhaighinn air an fhrithealaiche Mastodon seo gu h-ìosal:'
+    see_whats_happening: Faic dè tha dol
+    server_stats: 'Stadastaireachd an fhrithealaiche:'
+    source_code: Bun-tùs
+    status_count_after:
+      few: postaichean
+      one: phost
+      other: post
+      two: phost
+    status_count_before: A sgrìobh
+    tagline: Lean air caraidean ’s lorg feadhainn ùra
+    terms: Teirmichean na seirbheise
+    unavailable_content: Frithealaichean fo mhaorsainneachd
+    unavailable_content_description:
+      domain: Frithealaiche
+      reason: Adhbhar
+      rejecting_media: 'Cha dèid faidhlichean meadhain o na frithealaichean seo a phròiseasadh no a stòradh agus cha dèid dealbhagan dhiubh a shealltainn. Feumar briogadh gus an ruigear am faidhle tùsail a làimh:'
+      rejecting_media_title: Meadhanan criathraichte
+      silenced: 'Thèid postaichean o na frithealaichean seo fhalach air loidhnichean-ama is còmhraidhean poblach agus cha dèid brathan a ghintinn à eadar-ghnìomhan nan cleachdaichean aca ach ma bhios tu fèin a’ leantainn orra:'
+      silenced_title: Frithealaichean mùchte
+      suspended: 'Cha dèid dàta sam bith o na frithealaichean seo a phròiseasadh, a stòradh no iomlaid agus chan urrainn do na cleachdaichean o na frithealaichean sin conaltradh no eadar-ghnìomh a ghabhail an-seo:'
+      suspended_title: Frithealaichean à rèim
+    unavailable_content_html: San fharsaingeachd, leigidh Mastodon leat susbaint o fhrithealaiche sam bith sa cho-shaoghal a shealltainn agus eadar-ghìomh a ghabhail leis na cleachdaichean uapa-san. Seo na h-easgaidhean a tha an sàs air an fhrithealaiche shònraichte seo.
+    user_count_after:
+      few: cleachdaichean
+      one: chleachdaiche
+      other: cleachdaiche
+      two: chleachdaiche
+    user_count_before: "’Na dhachaigh do"
+    what_is_mastodon: Dè th’ ann am Mastodon?
+  accounts:
+    choices_html: 'Roghadh is taghadh %{name}:'
+    endorsements_hint: "’S urrainn dhut daoine air a leanas tu a bhrosnachadh on eadar-aghaidh-lìn agus nochdaidh iad an-seo."
+    featured_tags_hint: "’S urrainn dhut tagaichean hais sònraichte a bhrosnachadh a thèid a shealltainn an-seo."
+    follow: Lean air
+    followers:
+      few: Luchd-leantainn
+      one: Neach-leantainn
+      other: Luchd-leantainn
+      two: Luchd-leantainn
+    following: A’ leantainn
+    instance_actor_flash: "’S e actar biortail a tha sa chunntas seo a riochdaicheas am frithealaiche fhèin seach cleachdaiche sònraichte. Tha e ’ga chleachdadh a chùm co-nasgaidh agus cha bu chòir dhut a chur à rèim."
+    joined: Air ballrachd fhaighinn %{date}
+    last_active: gnìomhach an turas mu dheireadh
+    link_verified_on: Chaidh dearbhadh cò leis a tha an ceangal seo %{date}
+    media: Meadhanan
+    moved_html: 'Chaidh %{name} imrich gu %{new_profile_link}:'
+    network_hidden: Chan eil am fiosrachadh seo ri fhaighinn
+    never_active: Chan ann idir
+    nothing_here: Chan eil dad an-seo!
+    people_followed_by: Daoine air a leanas %{name}
+    people_who_follow: Daoine a tha a’ leantainn air %{name}
+    pin_errors:
+      following: Feumaidh tu leantainn air neach mus urrainn dhut a bhrosnachadh
+    posts:
+      few: Postaichean
+      one: Post
+      other: Postaichean
+      two: Postaichean
+    posts_tab_heading: Postaichean
+    posts_with_replies: Postaichean ’s freagairtean
+    roles:
+      admin: Rianaire
+      bot: Bot
+      group: Buidheann
+      moderator: Maor
+    unavailable: Chan eil a’ phròifil ri làimh
+    unfollow: Na lean tuilleadh
+  admin:
+    account_actions:
+      action: Gabh an gnìomh
+      title: Gabh gnìomh maorsainneachd air %{acct}
+    account_moderation_notes:
+      create: Fàg nòta
+      created_msg: Chaidh nòta na maorsainneachd a chruthachadh!
+      delete: Sguab às
+      destroyed_msg: Chaidh nòta na maorsainneachd a mhilleadh!
+    accounts:
+      add_email_domain_block: Bac àrainn a’ phuist-d
+      approve: Aontaich ris
+      approve_all: Aontaich ris na h-uile
+      approved_msg: Chaidh aontachadh ris an iarrtas clàraidh aig %{username}
+      are_you_sure: A bheil thu cinnteach?
+      avatar: Avatar
+      by_domain: Àrainn
+      change_email:
+        changed_msg: Chaidh post-d a’ chunntais atharrachadh!
+        current_email: Am post-d làithreach
+        label: Atharraich am post-d
+        new_email: Post-d ùr
+        submit: Atharraich am post-d
+        title: Atharraich am post-d airson %{username}
+      confirm: Dearbh
+      confirmed: Chaidh a dhearbhachadh
+      confirming: "’Ga dhearbhadh"
+      delete: Sguab às an dàta
+      deleted: Chaidh a sguabadh às
+      demote: Ìslich
+      destroyed_msg: Chaidh an dàta aig %{username} a chur air a’ chiutha ach an dèid a sguabadh às an ceann greis bheag
+      disable: Reòth
+      disable_two_factor_authentication: Cuir an dearbhadh dà-cheumnach à comas
+      disabled: Reòthte
+      display_name: Ainm-taisbeanaidh
+      domain: Àrainn
+      edit: Deasaich
+      email: Post-d
+      email_status: Staid a’ phuist-d
+      enable: Dì-reòth
+      enabled: An comas
+      enabled_msg: Chaidh an cunntas aig %{username} a dhì-reòthadh
+      followers: Luchd-leantainn
+      follows: A’ leantainn air
+      header: Bann-cinn
+      inbox_url: URL a’ bhogsa a-steach
+      invite_request_text: Adhbharan na ballrachd
+      invited_by: Air cuireadh fhaighinn o
+      ip: IP
+      joined: Air ballrachd fhaighinn
+      location:
+        all: Na h-uile
+        local: Ionadail
+        remote: Cèin
+        title: Ionad
+      login_status: Staid a’ chlàraidh a-steach
+      media_attachments: Ceanglachain mheadhanan
+      memorialize: Dèan cuimhneachan dheth
+      memorialized: Mar chuimhneachan
+      memorialized_msg: Chaidh cunntas cuimhneachain a dhèanamh dhe %{username}
+      moderation:
+        active: Gnìomhach
+        all: Na h-uile
+        pending: Ri dhèiligeadh
+        silenced: Mùchte
+        suspended: À rèim
+        title: Maorsainneachd
+      moderation_notes: Nòtaichean na maorsainneachd
+      most_recent_activity: A’ ghnìomhachd as ùire
+      most_recent_ip: An IP as ùire
+      no_account_selected: Cha deach cunntas sam bith atharrachadh o nach deach gin dhiubh a thaghadh
+      no_limits_imposed: Cha deach crìoch sam bith a sparradh
+      not_subscribed: Gun fho-sgrìobhadh
+      pending: A’ feitheamh air lèirmheas
+      perform_full_suspension: Cuir à rèim
+      promote: Àrdaich
+      protocol: Pròtacal
+      public: Poblach
+      push_subscription_expires: Falbhaidh an ùine air an fho-sgrìobhadh PuSH
+      redownload: Ath-nuadhaich a’ phròifil
+      redownloaded_msg: Chaidh a’ phròifil aig %{username} on tùs
+      reject: Diùlt
+      reject_all: Diùlt na h-uile
+      rejected_msg: Chaidh an t-iarrtas clàraidh aig %{username} a dhiùltadh
+      remove_avatar: Thoir air falbh an t-avatar
+      remove_header: Thoir air falbh am bann-cinn
+      removed_avatar_msg: Chaidh dealbh an avatar aig %{username} a thoirt air falbh
+      removed_header_msg: Chaidh dealbh a’ bhanna-chinn aig %{username} a thoirt air falbh
+      resend_confirmation:
+        already_confirmed: Chaidh an cleachdaiche seo a dhearbhadh mu thràth
+        send: Cuir am post-d dearbhaidh a-rithist
+        success: Chaidh post-d dearbhaidh a chur!
+      reset: Ath-shuidhich
+      reset_password: Ath-shuidhich am facal-faire
+      resubscribe: Fo-sgrìobh a-rithist
+      role: Ceadan
+      roles:
+        admin: Rianaire
+        moderator: Maor
+        staff: Ball dhen sgioba
+        user: Cleachdaiche
+      search: Lorg
+      search_same_email_domain: Cleachdaichean eile aig a bheil an aon àrainn puist-d
+      search_same_ip: Cleachdaichean eile aig a bheil an t-aon IP
+      sensitive: Frionasach
+      sensitized: chaidh comharradh gu bheil e frionasach
+      shared_inbox_url: URL a’ bhogsa a-steach cho-roinnte
+      show:
+        created_reports: Gearanan a chaidh a dhèanamh
+        targeted_reports: Gearanan le càch
+      silence: Crìoch
+      silenced: Cuingichte
+      statuses: Postaichean
+      subscribe: Fo-sgrìobh
+      suspended: À rèim
+      suspension_irreversible: Chaidh dàta a’ chunntais seo a sguabadh às gu buan. ’S urrainn an cunntas a chur ann an rèim a-rithist ach an gabh a chleachdadh ach chan fhaigh thu gin dhen dàta air ais a b’ àbhaist a bhith aige.
+      suspension_reversible_hint_html: Chaidh an cunntas a chur à rèim agus thèid an dàta aige a sguabadh às gu buan %{date}. Gus an dig an t-àm ud, gabhaidh an cunntas aiseag fhathast gun droch bhuaidh sam bith air. Nam bu toigh leat gach dàta a’ chunntais a thoirt air falbh sa bhad, ’s urrainn dhut sin a dhèanamh gu h-ìosal.
+      time_in_queue: A’ feitheamh air a’ chiudha fad %{time}
+      title: Cunntasan
+      unconfirmed_email: Post-d gun dearbhadh
+      undo_sensitized: Thoir air falbh a comharra gu bheil e frionasach
+      undo_silenced: Dì-mhùch
+      undo_suspension: Cuir ann an rèim a-rithist
+      unsilenced_msg: Chaidh an cuingeachadh a thoirt air falbh on chunntas aig %{username}
+      unsubscribe: Cuir crìoch air an fho-sgrìobhadh
+      unsuspended_msg: Chaidh an cunntas aig %{username} a chur ann an rèim a-rithist
+      username: Ainm-cleachdaiche
+      view_domain: Sealladh geàrr-chunntas na h-àrainn
+      warn: Thoir rabhadh
+      web: Lìon
+      whitelisted: Ceadaichte a chùm co-nasgaidh
+    action_logs:
+      action_types:
+        assigned_to_self_report: Iomruin an gearan
+        change_email_user: Atharraich post-d a’ chleachdaiche
+        confirm_user: Dearbh an cleachdaiche
+        create_account_warning: Cruthaich rabhadh
+        create_announcement: Cruthaich brath-fios
+        create_custom_emoji: Cruthaich Emoji gnàthaichte
+        create_domain_allow: Cruthaich ceadachadh àrainne
+        create_domain_block: Cruthaich bacadh àrainne
+        create_email_domain_block: Cruthaich bacadh àrainne puist-d
+        create_ip_block: Cruthaich riaghailt IP
+        demote_user: Ìslich an cleachdaiche
+        destroy_announcement: Sguab às am brath-fios
+        destroy_custom_emoji: Sguab às an t-Emoji gnàthaichte
+        destroy_domain_allow: Sguab às ceadachadh na h-àrainne
+        destroy_domain_block: Sguab às bacadh na h-àrainne
+        destroy_email_domain_block: Sguab às bacadh na h-àrainne puist-d
+        destroy_ip_block: Sguab às an riaghailt IP
+        destroy_status: Sguab às am post
+        disable_2fa_user: Cuir an dearbhadh dà-cheumnach à comas
+        disable_custom_emoji: Cuir an t-Emoji gnàthaichte à comas
+        disable_user: Cuir an cleachdaiche à comas
+        enable_custom_emoji: Cuir an t-Emoji gnàthaichte an comas
+        enable_user: Cuir an cleachdaiche an comas
+        memorialize_account: Dèan cuimhneachan dhen chunntas
+        promote_user: Àrdaich an cleachdaiche
+        remove_avatar_user: Thoir air falbh an t-avatar
+        reopen_report: Fosgail an gearan a-rithist
+        reset_password_user: Ath-shuidhich am facal-faire
+        resolve_report: Fuasgail an gearan
+        sensitive_account: Comharraich gu bheil na meadhanan sa chunntas agad frionasach
+        silence_account: Mùch an cunntas
+        suspend_account: Cuir an cunntas à rèim
+        unassigned_report: Dì-iomruin an gearan
+        unsensitive_account: Comharraich nach eil na meadhanan sa chunntas agad frionasach
+        unsilence_account: Dì-mhùch an cunntas
+        unsuspend_account: Cuir an cunntas ann an rèim a-rithist
+        update_announcement: Ùraich am brath-fios
+        update_custom_emoji: Ùraich an t-Emoji gnàthaichte
+        update_domain_block: Ùraich bacadh na h-àrainne
+        update_status: Ùraich am post
+      actions:
+        assigned_to_self_report_html: Dh’iomruin %{name} an gearan %{target} dhaibh fhèin
+        change_email_user_html: Dh’atharraich %{name} seòladh puist-d a’ chleachdaiche %{target}
+        confirm_user_html: Dhearbh %{name} seòladh puist-d a’ chleachdaiche %{target}
+        create_account_warning_html: Chuir %{name} rabhadh gu %{target}
+        create_announcement_html: Chruthaich %{name} brath-fios %{target} ùr
+        create_custom_emoji_html: Luchdaich %{name} suas Emoji %{target} ùr
+        create_domain_allow_html: Cheadaich %{name} co-nasgadh leis an àrainn %{target}
+        create_domain_block_html: Bhac %{name} an àrainn %{target}
+        create_email_domain_block_html: Bhac %{name} an àrainn puist-d %{target}
+        create_ip_block_html: Chruthaich %{name} riaghailt dhan IP %{target}
+        demote_user_html: Dh’ìslich %{name} an cleachdaiche %{target}
+        destroy_announcement_html: Sguab %{name} às am brath-fios %{target}
+        destroy_custom_emoji_html: Mhill %{name} an Emoji %{target}
+        destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target}
+        destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target}
+        destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target}
+        destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target}
+        destroy_status_html: Thug %{name} post aig %{target} air falbh
+        disable_2fa_user_html: Chuir %{name} riatanas an dearbhaidh dà-cheumnaich à comas dhan chleachdaiche %{target}
+        disable_custom_emoji_html: Chuir %{name} an Emoji %{target} à comas
+        disable_user_html: Chuir %{name} an clàradh a-steach à comas dhan chleachdaiche %{target}
+        enable_custom_emoji_html: Chuir %{name} an Emoji %{target} an comas
+        enable_user_html: Chuir %{name} an clàradh a-steach an comas dhan chleachdaiche %{target}
+        memorialize_account_html: Rinn %{name} duilleag cuimhneachain dhen chunntas aig %{target}
+        promote_user_html: Dh’àrdaich %{name} an cleachdaiche %{target}
+        remove_avatar_user_html: Thug %{name} avatar aig %{target} air falbh
+        reopen_report_html: Dh’fhosgail %{name} an gearan %{target} a-rithist
+        reset_password_user_html: Dh’ath-shuidhich %{name} am facal-faire aig a’ chleachdaiche %{target}
+        resolve_report_html: Dh’fhuasgail %{name} an gearan %{target}
+        sensitive_account_html: Chuir %{name} comharra gu bheil e frionasach ri meadhan aig %{target}
+        silence_account_html: Mhùch %{name} an cunntas aig %{target}
+        suspend_account_html: Chuir %{name} an cunntas aig %{target} à rèim
+        unassigned_report_html: Neo-iomruin %{name} an gearan %{target}
+        unsensitive_account_html: Chuir %{name} comharra nach eil e frionasach ri meadhan aig %{target}
+        unsilence_account_html: Dì-mhùch %{name} an cunntas aig %{target}
+        unsuspend_account_html: Chuir %{name} an cunntas aig %{target} ann an rèim a-rithist
+        update_announcement_html: Dh’ùraich %{name} am brath-fios %{target}
+        update_custom_emoji_html: Dh’ùraich %{name} an Emoji %{target}
+        update_domain_block_html: Dh’ùraich %{name} bacadh na h-àrainne %{target}
+        update_status_html: Dh’ùraich %{name} post le %{target}
+      deleted_status: "(post air a sguabadh às)"
+      empty: Cha deach loga a lorg.
+      filter_by_action: Criathraich a-rèir gnìomha
+      filter_by_user: Criathraich a-rèir cleachdaiche
+      title: Sgrùd an loga
+    announcements:
+      destroyed_msg: Chaidh am brath-fios a sguabadh às!
+      edit:
+        title: Deasaich am brath-fios
+      empty: Cha deach brath-fios a lorg.
+      live: Beò
+      new:
+        create: Cruthaich brath-fios
+        title: Brath-fios ùr
+      publish: Foillsich
+      published_msg: Chaidh am brath-fios fhoillseachadh!
+      scheduled_for: Chaidh a chur air an sgeideal %{time}
+      scheduled_msg: Thèid am brath-fios fhoillseachadh a-rèir sgeideil!
+      title: Brathan-fios
+      unpublish: Neo-fhoillsich
+      unpublished_msg: Chaidh am brath-fios a dhì-fhoillseachadh!
+      updated_msg: Chaidh am brath-fios ùrachadh!
+    custom_emojis:
+      assign_category: Iomruin roinn-seòrsa dha
+      by_domain: Àrainn
+      copied_msg: Chaidh lethbhreac ionadail dhen Emoji a chruthachadh
+      copy: Dèan lethbhreac
+      copy_failed_msg: Na dèan lethbhreac ionadail dhen Emoji sin
+      create_new_category: Cruthaich roinn-seòrsa ùr
+      created_msg: Chaidh an t-Emoji a chruthachadh!
+      delete: Sguab às
+      destroyed_msg: Chaidh an Emoji gnàthaichte a mhilleadh!
+      disable: Cuir à comas
+      disabled: Chaidh a chur à comas
+      disabled_msg: Chaidh an t-Emoji sin a chur à comas
+      emoji: Emoji
+      enable: Cuir an comas
+      enabled: Chaidh a chur an comas
+      enabled_msg: Chaidh an t-Emoji sin a chur an comas
+      image_hint: PNG suas ri 50KB
+      list: Liosta
+      listed: Liostaichte
+      new:
+        title: Cuir Emoji gnàthaichte ùr ris
+      not_permitted: Chan fhaod thu seo a dhèanamh
+      overwrite: Sgrìobh thairis air
+      shortcode: Geàrr-chòd
+      shortcode_hint: Co-dhiù 2 charactar, litrichean gun stràcan, àireamhan is fo-loidhnichean a-mhàin
+      title: Emojis gnàthaichte
+      uncategorized: Gun roinn-seòrsa
+      unlist: Falaich o liostaichean
+      unlisted: Falaichte o liostaichean
+      update_failed_msg: Cha b’ urrainn dhuinn an t-Emoji sin ùrachadh
+      updated_msg: Chaidh an t-Emoji ùrachadh!
+      upload: Luchdaich suas
+    dashboard:
+      authorized_fetch_mode: Modh tèarainte
+      backlog: an càrn-obrach
+      config: Rèiteachadh
+      feature_deletions: Cunntasan air an sguabadh às
+      feature_invites: Ceanglaichean cuiridh
+      feature_profile_directory: Eòlaire nam pròifil
+      feature_registrations: Clàraidhean
+      feature_relay: Ath-sheachadan co-nasgaidh
+      feature_timeline_preview: Ro-shealladh air an loidhne-ama
+      features: Gleusan
+      hidden_service: Co-nasgadh le seirbheisean falaichte
+      open_reports: gearanan fosgailte
+      pending_tags: tagaichean hais a’ feitheamh air lèirmheas
+      pending_users: cleachdaichean a’ feitheamh air lèirmheas
+      recent_users: Cleachdaichean o chionn ghoirid
+      search: Lorg làn-teacsa
+      single_user_mode: Modh a’ chleachdaiche shingilte
+      software: Bathar-bog
+      space: Caitheamh àite
+      title: Deas-bhòrd
+      total_users: cleachdaichean iomlan
+      trends: Treandaichean
+      week_interactions: eadar-ghnìomhan an t-seachdain seo
+      week_users_active: gnìomhach an t-seachdain seo
+      week_users_new: cleachdaichean an t-seachdain seo
+      whitelist_mode: Modh a’ cho-nasgaidh chuingichte
+    domain_allows:
+      add_new: Ceadaich co-nasgadh le àrainn
+      created_msg: Chaidh an àrainn a cheadachadh a chùm co-nasgaidh
+      destroyed_msg: Chan eil co-nasgadh leis an àrainn seo ceadaichte tuilleadh
+      undo: Na ceadaich co-nasgadh leis an àrainn
+    domain_blocks:
+      add_new: Cuir bacadh àrainne ùr ris
+      created_msg: Tha bacadh na h-àrainne ’ga phròiseasadh
+      destroyed_msg: Chan eil an àrainn ’ga bacadh tuilleadh
+      domain: Àrainn
+      edit: Deasaich bacadh na h-àrainne
+      existing_domain_block_html: Chuir thu cuingeachadh nas teinne air %{name} mu thràth, feumaidh tu a <a href="%{unblock_url}">dì-bhacadh</a> an toiseach.
+      new:
+        create: Cruthaich bacadh
+        hint: Cha chuir bacadh na h-àrainne crìoch air cruthachadh chunntasan san stòr-dàta ach cuiridh e dòighean maorsainneachd sònraichte an sàs gu fèin-obrachail air a h-uile dàta a tha aig na cunntasan ud.
+        severity:
+          desc_html: Falaichidh am <strong>mùchadh</strong> postaichean a’ chunntais do dhuine sam bith nach ail a’ leantainn air. Bheir an <strong>cur à rèim</strong> air falbh gach susbaint, meadhan is dàta pròifil a’ chunntais. Tagh <strong>Chan eil gin</strong> mur eil thu ach airson faidhlichean meadhain a dhiùltadh.
+          noop: Chan eil gin
+          silence: Mùch
+          suspend: Cuir à rèim
+        title: Bacadh àrainne ùr
+      obfuscate: Doilleirich ainm na h-àrainne
+      obfuscate_hint: Doilleirich pàirt de dh’ainm na h-àrainne air an liosta ma tha foillseachadh liosta nan cuingeachaidhean àrainne an comas
+      private_comment: Beachd prìobhaideachd
+      private_comment_hint: Beachd mu chuingeachadh na h-àrainne seo nach cleachd ach na maoir.
+      public_comment: Beachd poblach
+      public_comment_hint: Beachd poblach mu chuingeachadh na h-àrainne seo ma tha foillseachadh liosta nan cuingeachaidhean àrainne an comas.
+      reject_media: Diùlt faidhlichean meadhain
+      reject_media_hint: Bheir seo air falbh na faidhlichean meadhain a chaidh a stòradh agus diùltaidh e luchdadh a-nuas sam bith dhiubh san àm ri teachd. Chan eil buaidh aig seo fo chur à rèim
+      reject_reports: Diùlt gearanan
+      reject_reports_hint: Leig seachad gearan sam bith a thig a-steach on àrainn seo. Chan eil buaidh aig seo fo chur à rèim
+      rejecting_media: a’ diùltadh faidhlichean meadhain
+      rejecting_reports: a’ diùltadh gearanan
+      severity:
+        silence: mùchte
+        suspend: à rèim
+      show:
+        affected_accounts:
+          few: Bheir seo buaidh air %{count} cunntasan san stòr-dàta
+          one: Bheir seo buaidh air %{count} chunntas san stòr-dàta
+          other: Bheir seo buaidh air %{count} cunntas san stòr-dàta
+          two: Bheir seo buaidh air %{count} chunntas san stòr-dàta
+        retroactive:
+          silence: Dì-mhùch na cunntasan a tha ann on àrainn seo ’s air a bheil buaidh
+          suspend: Cuir na cunntasan a tha ann on àrainn seo ’s air a bheil buaidh ann an rèim a-rithist
+        title: Neo-dhèan bacadh na h-àrainne %{domain}
+        undo: Neo-dhèan
+      undo: Neo-dhèan bacadh na h-àrainne
+      view: Seall bacadh na h-àrainne
+    email_domain_blocks:
+      add_new: Cuir tè ùr ris
+      created_msg: Chaidh àrainn a’ phuist-d a bhacadh
+      delete: Sguab às
+      destroyed_msg: Chaidh àrainn a’ phuist-d a dhì-bhacadh
+      domain: Àrainn
+      empty: Chan eil àrainn puist-d sam bith ’ga bhacadh aig an àm seo.
+      from_html: o %{domain}
+      new:
+        create: Cuir àrainn ris
+        title: Bac àrainn puist-d ùr
+      title: Àrainnean puist-d ’gam bacadh
+    follow_recommendations:
+      description_html: "<strong>Cuidichidh molaidhean leantainn an luchd-cleachdaidh ùr ach an lorg iad susbaint inntinneach gu luath</strong>. Mur an do ghabh cleachdaiche eadar-ghnìomhan gu leòr le càch airson molaidhean leantainn gnàthaichte fhaighinn, mholamaid na cunntasan seo ’nan àite. Thèid an àireamhachadh às ùr gach latha stèidhichte air na cunntasan air an robh an conaltradh as trice ’s an luchd-leantainn ionadail as motha sa chànan."
+      language: Dhan chànan
+      status: Staid
+      suppress: Mùch na molaidhean leantainn
+      suppressed: Mùchte
+      title: Molaidhean leantainn
+      unsuppress: Aisig am moladh leantainn
+    instances:
+      by_domain: Àrainn
+      delivery_available: Tha lìbhrigeadh ri fhaighinn
+      empty: Cha deach àrainn a lorg.
+      known_accounts:
+        few: "%{count} cunntasan as aithne dhuinn"
+        one: "%{count} cunntas as aithne dhuinn"
+        other: "%{count} cunntas as aithne dhuinn"
+        two: "%{count} chunntas as aithne dhuinn"
+      moderation:
+        all: Na h-uile
+        limited: Cuingichte
+        title: Maorsainneachd
+      private_comment: Beachd prìobhaideachd
+      public_comment: Beachd poblach
+      title: Co-nasgadh
+      total_blocked_by_us: "‘Ga bhacadh leinne"
+      total_followed_by_them: "’Ga leantainn leotha-san"
+      total_followed_by_us: "’Ga leantainn leinne"
+      total_reported: Gearanan mun dèidhinn
+      total_storage: Ceanglachain mheadhanan
+    invites:
+      deactivate_all: Cuir na h-uile à gnìomh
+      filter:
+        all: Na h-uile
+        available: Ri fhaighinn
+        expired: Dh’fhalbh an ùine air
+        title: Criathraich
+      title: Cuiridhean
+    ip_blocks:
+      add_new: Cruthaich riaghailt
+      created_msg: Chaidh riaghailt IP ùr a chur ris
+      delete: Sguab às
+      expires_in:
+        '1209600': 2 sheachdain
+        '15778476': leth-bhliadhna
+        '2629746': mìos
+        '31556952': bliadhna
+        '86400': latha
+        '94670856': 3 bliadhnaichean
+      new:
+        title: Cruthaich riaghailt IP ùr
+      no_ip_block_selected: Cha deach riaghailt IP sam bith atharrachadh o nach deach gin dhiubh a thaghadh
+      title: Riaghailtean IP
+    pending_accounts:
+      title: Cunntasan ri dhèiligeadh (%{count})
+    relationships:
+      title: Na dàimhean aig %{acct}
+    relays:
+      add_new: Cuir ath-sheachadan ùr ris
+      delete: Sguab às
+      description_html: "’S e frithealaiche eadar-mheadhanach a th’ ann an <strong>ath-sheachadan co-nasgaidh</strong> a nì iomlaid air grunnan mòra de dhùdan poblach eadar na frithealaichean a dh’fho-sgrìobhas ’s a dh’fhoillsicheas dha. <strong>’S urrainn dha cuideachadh a thoirt do dh’fhrithealaichean beaga is meadhanach mòr ach an lorg iad susbaint sa cho-shaoghal</strong> agus às an aonais, bhiodh aig cleachdaichean ionadail leantainn air daoine eile air frithealaichean cèine a làimh."
+      disable: Cuir à comas
+      disabled: Chaidh a chur à comas
+      enable: Cuir an comas
+      enable_hint: Nuair a bhios seo air a chur an comas, nì am frithealaiche agad fo-sgrìobhadh air a h-uile post poblach on ath-sheachadan seo agus tòisichidh e air postaichean poblach an fhrithealaiche seo a chur a-null dha.
+      enabled: Chaidh a chur an comas
+      inbox_url: URL an ath-sheachadain
+      pending: A’ feitheamh ri aontachadh an ath-sheachadain
+      save_and_enable: Sàbhail ’s cuir an comas
+      setup: Suidhich ceangal ri ath-sheachadain
+      signatures_not_enabled: Chan obraich ath-sheachadain mar bu chòir nuair a bhios am modh tèarainte no modh a’ cho-nasgaidh chuingichte an comas
+      status: Staid
+      title: Ath-sheachadain
+    report_notes:
+      created_msg: Chaidh nòta a chruthachadh dhan ghearan!
+      destroyed_msg: Chaidh nòta a’ ghearain a sguabadh às!
+    reports:
+      account:
+        notes:
+          few: "%{count} nòtaichean"
+          one: "%{count} nòta"
+          other: "%{count} nòta"
+          two: "%{count} nòta"
+        reports:
+          few: "%{count} gearanan"
+          one: "%{count} ghearan"
+          other: "%{count} gearan"
+          two: "%{count} ghearan"
+      action_taken_by: Chaidh an gnìomh a ghabhail le
+      are_you_sure: A bheil thu cinnteach?
+      assign_to_self: Iomruin dhomh-sa
+      assigned: Maor iomruinte
+      by_target_domain: Àrainn cunntas a’ ghearain
+      comment:
+        none: Chan eil gin
+      created_at: Chaidh an gearan a dhèanamh
+      forwarded: Chaidh a shìneadh air adhart
+      forwarded_to: Chaidh a shìneadh air adhart gu %{domain}
+      mark_as_resolved: Cuir comharra gun deach fhuasgladh
+      mark_as_unresolved: Cuir comharra nach deach fhuasgladh
+      notes:
+        create: Cuir nòta ris
+        create_and_resolve: Fuasgail le nòta
+        create_and_unresolve: Ath-fhosgail le nòta
+        delete: Sguab às
+        placeholder: Mìnich dè na ghnìomhan a chaidh a ghabhail no naidheachd sam bith eile mu dhèidhinn…
+      reopen: Fosgail an gearan a-rithist
+      report: 'Gearan air #%{id}'
+      reported_account: Cunntas mun a chaidh a ghearan
+      reported_by: Chaidh gearan a dhèanamh le
+      resolved: Air fhuasgladh
+      resolved_msg: Chaidh an gearan fhuasgladh!
+      status: Staid
+      title: Gearanan
+      unassign: Dì-iomruin
+      unresolved: Gun fhuasgladh
+      updated_at: Air ùrachadh
+    rules:
+      add_new: Cuir riaghailt ris
+      delete: Sguab às
+      description_html: Ged a dh’innseas a’ mhòrchuid gun do leugh iad teirmichean na seirbheise is gu bheil iad ag aontachadh riutha, ’s ann mar as trice nach lean daoine orra ’gan leughadh gun deireadh nuair a thachras iad ri duilgheadas. <strong>Dèan e nas fhasa dhaibh gun tuig iad riaghailtean an fhrithealaiche ann am priobadh na sùla is tu a’ toirt liosta peilearaichte dhaibh.</strong> Feuch an cùm thu gach riaghailt goirid is sìmplidh ach feuch nach sgaoil thu ann an iomadh nì iad nas motha.
+      edit: Deasaich an riaghailt
+      empty: Cha deach riaghailtean an fhrithealaiche a mhìneachadh fhathast.
+      title: Riaghailtean an fhrithealaiche
+    settings:
+      activity_api_enabled:
+        desc_html: Cunntasan nam postaichean a chaidh fhoillseachadh gu h-ionadail, nan cleachdaichean gnìomhach ’s nan clàraidhean ùra an am bucaidean seachdaineil
+        title: Foillsich agragaid dhen stadastaireachd mu ghnìomhachd nan cleachdaichean
+      bootstrap_timeline_accounts:
+        desc_html: Sgar iomadh ainm cleachdaiche le cromag. Chan obraich ach cunntasan ionadail ’s gun ghlas orra. ’S e na rianairean ionadail uile a tha sa bhun-roghainn nuair a bhios seo falamh.
+        title: Leantainn tùsail nan cleachdaichean ùra
+      contact_information:
+        email: Post-d gnìomhachais
+        username: Ainm cleachdaiche a’ chonaltraidh
+      custom_css:
+        desc_html: Atharraich an coltas le CSS a thèid a luchdadh le gach duilleag
+        title: CSS gnàthaichte
+      default_noindex:
+        desc_html: Bidh buaidh air a h-uile cleachdaiche nach do dh’atharraich an roghainn seo dhaibh fhèin
+        title: Thoir air falbh ro-aonta nan cleachdaichean air inneacsadh le einnseanan-luirg mar a’ bhun-roghainn
+      domain_blocks:
+        all: Dhan a h-uile duine
+        disabled: Na seall idir
+        title: Seall bacaidhean àrainne
+        users: Dhan luchd-chleachdaidh a clàraich a-steach gu h-ionadail
+      domain_blocks_rationale:
+        title: Seall an t-adhbhar
+      hero:
+        desc_html: Thèid seo a shealltainn air a’ phrìomh-dhuilleag. Mholamaid 600x100px air a char as lugha. Mura dèid seo a shuidheachadh, thèid dealbhag an fhrithealaiche a shealltainn ’na àite
+        title: Dealbh gaisgich
+      mascot:
+        desc_html: Thèid seo a shealltainn air iomadh duilleag. Mholamaid 293×205px air a char as lugha. Mura dèid seo a shuidheachadh, thèid an suaichnean a shealltainn ’na àite
+        title: Dealbh suaichnein
+      peers_api_enabled:
+        desc_html: Ainmean àrainne air an do thachair am frithealaiche seo sa cho-shaoghal
+        title: Foillsich liosta nam frithealaichean a chaidh a lorg
+      preview_sensitive_media:
+        desc_html: Ro-sheallaidh ceanglaichean dealbhag fhiù ’s ma chaidh comharradh gu bheil am meadhan frionasach
+        title: Seall meadhanan frionasach ann an ro-sheallaidhean OpenGraph
+      profile_directory:
+        desc_html: Suidhich gun gabh cleachdaichean a lorg
+        title: Cuir eòlaire nam pròifil an comas
+      registrations:
+        closed_message:
+          desc_html: Thèid seo a shealltainn air an duilleag-dhachaigh nuair a bhios an clàradh dùinte. ’S urrainn dhut tagaichean HTML a chleachdadh
+          title: Teachdaireachd a’ chlàraidh dhùinte
+        deletion:
+          desc_html: Leig le neach sa bith an cunntas a sguabadh às
+          title: Fosgail sguabadh às chunntasan
+        min_invite_role:
+          disabled: Na ceadaich idir
+          title: Ceadaich cuiridhean le
+        require_invite_text:
+          desc_html: Nuair a bhios aontachadh a làimh riatanach dhan chlàradh, dèan an raon teacsa “Carson a bu mhiann leat ballrachd fhaighinn?” riatanach seach roghainneil
+          title: Iarr air cleachdaichean ùra gun innis iad carson a tha iad ag iarraidh ballrachd
+      registrations_mode:
+        modes:
+          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: Modh a’ chlàraidh
+      show_known_fediverse_at_about_page:
+        desc_html: Nuair a bhios seo à comas, cha sheall an loidhne-ama phoblach a thèid a cheangal rithe on duilleag-landaidh ach susbaint ionadail
+        title: Gabh a-staigh susbaint cho-naisgte air duilleag na loidhne-ama poblaich gun ùghdarrachadh
+      show_staff_badge:
+        desc_html: Seall bràist sgioba air duilleag cleachdaiche
+        title: Seall bràist sgioba
+      site_description:
+        desc_html: Earrann tuairisgeil air an API. Mìnich dè tha sònraichte mun fhrithealaiche Mastodon seo agus rud sa bith eile a tha cudromach. ’S urrainn dhut tagaichean HTML a chleachdadh agus <code>&lt;a&gt;</code> ’s <code>&lt;em&gt;</code> gu sònraichte.
+        title: Tuairisgeul an fhrithealaiche
+      site_description_extended:
+        desc_html: Seo deagh àite airson an còd-giùlain, na riaghailtean ’s na comharran-treòrachaidh agad agus do nithean eile a tha sònraichte mun fhrithealaiche agad. ‘S urrainn dhut tagaichean HTML a chleachdadh
+        title: Fiosrachadh leudaichte gnàthaichte
+      site_short_description:
+        desc_html: Nochdaidh seo air a’ bhàr-taoibh agus sna meata-thagaichean. Mìnich dè th’ ann am Mastodon agus dè tha sònraichte mun fhrithealaiche agad ann an aon earrann a-mhàin.
+        title: Tuairisgeul goirid an fhrithealaiche
+      site_terms:
+        desc_html: "’S urrainn dhut am poileasaidh prìobhaideachd no teirmichean na seirbheise agad fhèin no fiosrachadh laghail sa bith eile a sgrìobhadh. ‘S urrainn dhut tagaichean HTML a chleachdadh"
+        title: Teirmichean gnàthaichte na seirbheise
+      site_title: Ainm an fhrithealaiche
+      thumbnail:
+        desc_html: Thèid seo a chleachdadh airson ro-sheallaidhean slighe OpenGraph no API. Mholamaid 1200x630px
+        title: Dealbhag an fhrithealaiche
+      timeline_preview:
+        desc_html: Seall ceangal dhan loidhne-ama phoblach air an duilleag-landaidh is ceadaich inntrigeadh gun ùghdarrachadh leis an API air an loidhne-ama phoblach
+        title: Ceadaich inntrigeadh gun ùghdarrachadh air an loidhne-ama phoblach
+      title: Roghainnean na làraich
+      trendable_by_default:
+        desc_html: Bheir seo buaidh air na tagaichean hais nach deach a dhì-cheadachadh roimhe
+        title: Leig le tagaichean hais treandadh às aonais lèirmheis ro làimh
+      trends:
+        desc_html: Seall tagaichean hais gu poblach a chaidh lèirmheas a dhèanamh orra roimhe ’s a tha a’ treandadh aig a àm seo
+        title: Tagaichean hais a’ treandadh
+    site_uploads:
+      delete: Sguab às am faidhle a chaidh a luchdadh suas
+      destroyed_msg: Chaidh an luchdadh suas dhan làrach a sguabadh às!
+    statuses:
+      back_to_account: Till gu duilleag a’ chunntais
+      batch:
+        delete: Sguab às
+        nsfw_off: Cuir comharra nach eil e frionasach
+        nsfw_on: Cuir comharra gu bheil e frionasach
+      deleted: Chaidh a sguabadh às
+      failed_to_execute: Cha b’ urrainn dhuinn a ruith
+      media:
+        title: Meadhanan
+      no_media: Chan eil meadhanan ann
+      no_status_selected: Cha deach post sam bith atharrachadh o nach deach gin dhiubh a thaghadh
+      title: Postaichean a’ chunntais
+      with_media: Le meadhanan riutha
+    system_checks:
+      database_schema_check:
+        message_html: Tha imrichean stòir-dhàta ri dhèiligeadh ann. Ruith iad a dhèanamh cinnteach gum bi giùlan na h-aplacaid mar a bhiodhte ’n dùil
+      rules_check:
+        action: Stiùirich riaghailtean an fhrithealaiche
+        message_html: Cha do mhìnich thu riaghailtean an fhrithealaiche fhathast.
+      sidekiq_process_check:
+        message_html: Chan eil pròiseas Sidekiq sam bith a ruith dhan chiutha/dha na ciuthan %{value}. Thoir sùil air an rèiteachadh Sidekiq agad
+    tags:
+      accounts_today: Cleachdaidhean fa leth an-diugh
+      accounts_week: Cleachdaidhean fa leth an t-seachdain seo
+      breakdown: Seall an cleachdadh an-diugh a-rèir tùis
+      last_active: Gnìomhach an turas mu dheireadh
+      most_popular: Na tha fèill mhòr air
+      most_recent: As ùire
+      name: Taga hais
+      review: Dèan lèirmheas air an staid
+      reviewed: Chaidh lèirmheas a dhèanamh air
+      title: Tagaichean hais
+      trending_right_now: A’ treandadh an-dràsta
+      unique_uses_today: "%{count} a’ postadh an-diugh"
+      unreviewed: Gun lèirmheas
+      updated_msg: Chaidh roghainnean nan tagaichean hais ùrachadh
+    title: Rianachd
+    warning_presets:
+      add_new: Cuir fear ùr ris
+      delete: Sguab às
+      edit_preset: Deasaich rabhadh ro-shuidhichte
+      empty: Cha do mhìnich thu ro-sheataichean rabhaidhean fhathast.
+      title: Stiùirich na rabhaidhean ro-shuidhichte
+  admin_mailer:
+    new_pending_account:
+      body: Chì thu mion-fhiosrachadh a’ chunntais ùir gu h-ìosal. ’S urrainn dhut gabhail ris an iarrtas seo no a dhiùltadh.
+      subject: Tha cunntas ùr air %{instance} a’ feitheamh air lèirmheas (%{username})
+    new_report:
+      body: Rinn %{reporter} gearan air %{target}
+      body_remote: Rinn cuideigin o %{domain} gearan air %{target}
+      subject: Tha gearan ùr aig %{instance} (#%{id})
+    new_trending_tag:
+      body: 'Tha an taga hais #%{name} a’ treandadh an-diugh ach cha deach lèirmheas a dhèanamh air cheana. Cha nochd e gu poblach ach ma cheadaicheas tu e. Ma shàbhaileas tu am foirm seo mar a tha e, cha bhodraig e a-rithist thu.'
+      subject: Tha taga hais ùr air %{instance} a’ feitheamh air lèirmheas (#%{name})
+  aliases:
+    add_new: Cruthaich alias
+    created_msg: Chaidh an t-alias ùr a chruthachadh. ’S urrainn dhut tòiseachadh air imrich on seann-chunntas a-nis.
+    deleted_msg: Chaidh an t-alias a thoirt air falbh. Chan urrainn dhut imrich on chunntas ud chan fhear seo tuilleadh.
+    empty: Chan eil alias agad.
+    hint_html: Nam bu mhiann leat imrich o chunntas eile dhan fhear seo, ’s urrainn dhut alias a chruthachadh an-seo agus feumaidh tu sin a dhèanamh mus urrainn dhut tòiseachadh air an luchd-leantainn agad imrich on seann-chunntas dhan fhear seo. Tha an gnìomh seo fhèin <strong>neo-chronail is can eil e buan</strong>. <strong>Tòisichidh tu air imrich a’ chunntais on t-seann-chunntas</strong>.
+    remove: Dì-cheangail an t-alias
+  appearance:
+    advanced_web_interface: Eadar-aghaidh-lìn adhartach
+    advanced_web_interface_hint: 'Ma tha thu airson leud gu lèir na sgrìn agad a chleachdadh, leigidh an eadar-aghaidh-lìn adhartach leat gun rèitich thu mòran cholbhan eadar-dhealaichte ach a faic thu na thogras tu de dh’fhiosrachadh aig an aon àm: Dachaigh, brathan, loidhne-ama cho-naisgte, na thogras tu de liostaichean is tagaichean hais.'
+    animations_and_accessibility: Beòthachaidhean agus so-ruigsinneachd
+    confirmation_dialogs: Còmhraidhean dearbhaidh
+    discovery: Lorg
+    localization:
+      body: Tha Mastodon ’ga eadar-theangachadh le saor-thoilich.
+      guide_link: https://crowdin.com/project/mastodon
+      guide_link_text: "’S urrainn do dhuine sam bith cuideachadh."
+    sensitive_content: Susbaint fhrionasach
+    toot_layout: Co-dhealbhachd nam postaichean
+  application_mailer:
+    notification_preferences: Atharraich roghainnean a’ phuist-d
+    salutation: "%{name},"
+    settings: 'Atharraich roghainnean a’ phuist-d: %{link}'
+    view: 'Seall:'
+    view_profile: Seall a’ phròifil
+    view_status: Seall am post
+  applications:
+    created: Chaidh an t-iarrtas a chruthachadh
+    destroyed: Chaidh an t-iarrtas a sguabadh às
+    invalid_url: Tha an t-URL a thugadh seachad mì-dhligheach
+    regenerate_token: Ath-ghin an tòcan inntrigidh
+    token_regenerated: Chaidh an tòcan inntrigidh ath-ghintinn
+    warning: Bi glè chùramach leis an dàta seo. Na co-roinn le duine sam bith e!
+    your_token: An tòcan inntrigidh agad
+  auth:
+    apply_for_account: Iarr cuireadh
+    change_password: Facal-faire
+    checkbox_agreement_html: Gabhaidh mi ri <a href="%{rules_path}" target="_blank">riaghailtean an fhrithealaiche</a> ’s <a href="%{terms_path}" target="_blank">teirmichean a’ chleachdaidh</a>
+    checkbox_agreement_without_rules_html: Gabhaidh mi ri <a href="%{terms_path}" target="_blank">teirmichean a’ chleachdaidh</a>
+    delete_account: Sguab às an cunntas
+    delete_account_html: Nam bu mhiann leat an cunntas agad a sguabadh às, <a href="%{path}">Nì thu an-seo e</a>. Thèid dearbhadh iarraidh ort.
+    description:
+      prefix_invited_by_user: Thug @%{name} cuireadh dhut ach am faigh thu ballrachd air an fhrithealaiche seo de Mhastodon!
+      prefix_sign_up: Clàraich le Mastodon an-diugh!
+      suffix: Le cunntas, ’s urrainn dhut leantainn air daoine, naidheachdan a phostadh agus conaltradh leis an luchd-chleachdaidh air frithealaiche Mastodon sam bith is a bharrachd!
+    didnt_get_confirmation: Nach d’fhuair thu an stiùireadh mun dearbhadh?
+    dont_have_your_security_key: Nach eil iuchair tèarainteachd agad?
+    forgot_password: Na dhìochuimhnich thu am facal-faire agad?
+    invalid_reset_password_token: Tha tòcan ath-shuidheachadh an fhacail-fhaire mì-dhligheach no dh’fhalbh an ùine air. Feuch an iarr thu fear ùr.
+    link_to_otp: Cuir a-steach còd dà-cheumnach no còd aisig on fhòn agad
+    link_to_webauth: Cleachd uidheam na h-iuchrach tèarainteachd agad
+    login: Clàraich a-steach
+    logout: Clàraich a-mach
+    migrate_account: Imrich gu cunntas eile
+    migrate_account_html: Nam bu mhiann leat an cunntas seo ath-stiùireadh gu fear eile, ’s urrainn dhut <a href="%{path}">a rèiteachadh an-seo</a>.
+    or_log_in_with: No clàraich a-steach le
+    providers:
+      cas: CAS
+      saml: SAML
+    register: Clàraich leinn
+    registration_closed: Cha ghabh %{instance} ri buill ùra
+    resend_confirmation: Cuir an stiùireadh mun dearbhadh a-rithist
+    reset_password: Ath-shuidhich am facal-faire
+    security: Tèarainteachd
+    set_new_password: Suidhich facal-faire ùr
+    setup:
+      email_below_hint_html: Mur eil am post-d gu h-ìosal mar bu chòir, ’s urrainn dhut atharrachadh an-seo agus gheibh thu post-d dearbhaidh ùr.
+      email_settings_hint_html: Chaidh am post-d dearbhaidh a chur gu %{email}. Mur eil an seòladh puist-d seo mar bu chòir, ’s urrainn dhut atharrachadh ann an roghainnean a’ chunntais.
+      title: Suidheachadh
+    status:
+      account_status: Staid a’ chunntais
+      confirming: A’ feitheamh air coileanadh an dearbhaidh on phost-d.
+      functional: Tha an cunntas agad ag obair gu slàn.
+      pending: Feumaidh an sgioba againn lèirmheas a dhèanamh air d’ iarrtas. Dh’fhaoidte gun doir seo greis. Gheibh thu post-d nuair a bhios sinn air aontachadh ri d’ iarrtas.
+      redirecting_to: Chan eil an cunntas gad gnìomhach on a tha e ’ga ath-stiùireadh gu %{acct}.
+    too_fast: Chaidh am foirm a chur a-null ro luath, feuch ris a-rithist.
+    trouble_logging_in: A bheil duilgheadas agad leis a’ chlàradh a-steach?
+    use_security_key: Cleachd iuchair tèarainteachd
+  authorize_follow:
+    already_following: Tha thu a’ leantainn air a’ chunntas seo mu thràth
+    already_requested: Chuir thu iarrtas leantainn dhan chunntas seo mu thràth
+    error: Gu mì-fhortanach, thachair mearachd le lorg a’ chunntais chèin
+    follow: Lean air
+    follow_request: 'Chuir thu iarrtas leantainn gu:'
+    following: 'Taghta! Chaidh leat a’ leantainn air:'
+    post_follow:
+      close: Air neo dùin an uinneag seo.
+      return: Seall pròifil a’ chleachdaiche
+      web: Tadhail air an lìon
+    title: Lean air %{acct}
+  challenge:
+    confirm: Lean air adhart
+    hint_html: "<strong>Gliocas:</strong> Chan iarr sinn am facal-faire agad ort a-rithist fad uair a thìde."
+    invalid_password: Facal-faire mì-dhligheach
+    prompt: Dearbh am facal-faire airson leantainn air adhart
+  crypto:
+    errors:
+      invalid_key: "– chan e iuchair Ed25519 no Curve25519 dhligheach a th’ ann"
+      invalid_signature: "– chan e soidhneadh Ed25519 dligheach a th’ ann"
+  date:
+    formats:
+      default: "%d %b %Y"
+      with_month_name: "%d %B %Y"
+  datetime:
+    distance_in_words:
+      about_x_hours: "%{count}u"
+      about_x_months: "%{count}mì"
+      about_x_years: "%{count}bl"
+      almost_x_years: "%{count}bl"
+      half_a_minute: An-dràsta fhèin
+      less_than_x_minutes: "%{count}m"
+      less_than_x_seconds: An-dràsta fhèin
+      over_x_years: "%{count}bl"
+      x_days: "%{count}l"
+      x_minutes: "%{count}m"
+      x_months: "%{count}mì"
+      x_seconds: "%{count}d"
+  deletes:
+    challenge_not_passed: Chan eil am fiosrachadh a chuir thu a-steach mar bu chòir
+    confirm_password: Cuir a-steach am facal-faire làithreach a dhearbhadh cò thusa
+    confirm_username: Cuir a-steach an t-ainm-cleachdaiche agad a dhearbhadh a’ ghnìomha
+    proceed: Sguab às an cunntas
+    success_msg: Chaidh an cunntas agad a sguabadh às
+    warning:
+      before: 'Mus lean thu air adhart, leugh na nòtaichean seo gu cùramach:'
+      caches: Dh’fhaoidte gum mair susbaint ann an tasgadain fhrithealaichean eile
+      data_removal: Thèid na postaichean agad ’s dàta eile a thoirt air falbh gu buan
+      email_change_html: ’S urrainn dhut <a href="%{path}">an seòladh puist-d agad atharrachadh</a> gun a bhith a’ sguabadh às a’ chunntais agad
+      email_contact_html: Mura faigh thu fhathast e, ’s urrainn dhut post-d a chur gu <a href="mailto:%{email}">%{email}</a> airson cuideachaidh
+      email_reconfirmation_html: Mur an d’ fhuair thu am post-d dearbhaidh, ’s urrainn dhut <a href="%{path}">iarraidh a-rithist</a>
+      irreversible: Chan urrainn dhut an cunntas agad aiseag no ath-ghnìomhachadh
+      more_details_html: Airson barrachd fiosrachaidh faic am <a href="%{terms_path}">poileasaidh prìobhaideachd</a>.
+      username_available: Bidh an t-ainm-cleachdaiche agad ri fhaighinn a-rithist
+      username_unavailable: Cha bhi an t-ainm-cleachdaiche agad ri fhaighinn fhathast
+  directories:
+    directory: Eòlaire nam pròifil
+    explanation: Lorg cleachdaichean stèidhichte air an ùidhean
+    explore_mastodon: Rùraich %{title}
+  domain_validator:
+    invalid_domain: "– chan eil seo ’na ainm àrainne dligheach"
+  errors:
+    '400': Cha robh an t-iarrtas a chuir thu a-null dligheach no bha droch-chruth air.
+    '403': Chan eil cead agad gus an duilleag seo a shealltainn.
+    '404': Chan eil an duilleag a tha thu a’ lorg an-seo.
+    '406': Chan eil an duilleag seo ri fhaighinn san fhòrmat a dh’iarr thu.
+    '410': Chan eil an duilleag a tha thu a’ lorg an-seo tuilleadh.
+    '422':
+      content: Dh’fhàillig le dearbhadh na tèarainteachd. A bheil thu a’ bacadh nam briosgaidean?
+      title: Dh’fhàillig le dearbhadh na tèarainteachd
+    '429': Cus iarrtasan
+    '500':
+      content: Tha sinn duilich ach chaidh rudeigin ceàrr a-bhos an-seo.
+      title: Chan eil an duilleag seo mar bu chòir
+    '503': Cha b’ urrainn an duilleag fhrithealadh ri linn mearachd sealach an fhrithealaiche.
+    noscript_html: Airson aplacaid-lìn Mastodon a chleachdadh, cuir JavaScript an comas. Mar roghainn eile, ’s urrainn dhut fear dhe na <a href="%{apps_path}">cliantan tùsail</a> airson Mastodon dhan ùrlar agad fheuchainn.
+  existing_username_validator:
+    not_found: cha b’ urrainn dhuinn cleachdaiche ionadail a lorg air a bheil an t-ainm-cleachdaiche seo
+    not_found_multiple: cha b’ urrainn dhuinn %{usernames} a lorg
+  exports:
+    archive_takeout:
+      date: Ceann-latha
+      download: Luchdaich a-nuas an tasg-lann agad
+      hint_html: "’S urrainn dhut tasg-lann iarraidh dhe <strong>na postaichean agad is meadhanan a luchdaich thu suas</strong>. Thèid an dàta às-phortadh san fhòrmat ActivityPub a ghabhas leughadh le bathar-bog co-chòrdail sam bith. ’S urrainn dhut tasg-lann iarraidh gach 7 làithean."
+      in_progress: A’ cruinneachadh na tasg-lainn agad…
+      request: Iarr an tasg-lann agad
+      size: Meud
+    blocks: Tha thu a’ bacadh
+    bookmarks: Comharran-lìn
+    csv: CSV
+    domain_blocks: Bacaidhean àrainne
+    lists: Liostaichean
+    mutes: Tha thu a’ mùchadh
+    storage: Stòras mheadhanan
+  featured_tags:
+    add_new: Cuir fear ùr ris
+    errors:
+      limit: Bhrosnaich thu an uiread as motha de thagaichean hais mu thràth
+    hint_html: "<strong>Dè th’ anns na tagaichean hais brosnaichte?</strong> Thèid an sealltainn gu follaiseach air a’ phròifil phoblach agad agus ’s urrainnear na postaichean poblach agad sa bheil na tagaichean hais sònraichte sin a bhrabhsadh leotha. ’S e deagh-acainn a th’ annta airson sùil a chumail air obair chruthachail no pròiseactan fada."
+  filters:
+    contexts:
+      account: Pròifilean
+      home: Dachaigh ’s liostaichean
+      notifications: Brathan
+      public: Loidhnichean-ama poblach
+      thread: Còmhraidhean
+    edit:
+      title: Deasaich a’ chriathrag
+    errors:
+      invalid_context: Cha deach co-theacs a sholar no tha e mì-dhligheach
+      invalid_irreversible: Chan obraich criathradh buan ach ann an co-theacsa na dachaigh no na brathan
+    index:
+      delete: Sguab às
+      empty: Chan eil criathrag agad.
+      title: Criathragan
+    new:
+      title: Cuir criathrag ùr ris
+  footer:
+    developers: Luchd-leasachaidh
+    more: Barrachd…
+    resources: Goireasan
+    trending_now: A’ treandadh an-dràsta
+  generic:
+    all: Na h-uile
+    changes_saved_msg: Chaidh na h-atharraichean a shàbhaladh!
+    copy: Dèan lethbhreac
+    delete: Sguab às
+    no_batch_actions_available: Chan eil gnìomh grunna ri fhaighinn air an duilleag seo
+    order_by: Seòrsaich a-rèir
+    save_changes: Sàbhail na h-atharraichean
+    validation_errors:
+      few: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air na %{count} mhearachdan gu h-ìosal
+      one: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal
+      other: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mearachd gu h-ìosal
+      two: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal
+  html_validator:
+    invalid_markup: 'tha HTML markup mì-dhligheach ann: %{error}'
+  identity_proofs:
+    active: Gnìomhach
+    authorize: Tha, ùghdarraich
+    authorize_connection_prompt: A bheil thu airson an ceangal crioptaichte seo ùghdarrachadh?
+    errors:
+      failed: Dh’fhàillig leis a’ cheangal chrioptaichte. Feuch ris a-rithist o %{provider}.
+      keybase:
+        invalid_token: "’S e haisichean de shoidhnidhean a th’ anns na tòcanan Keybase agus feumaidh 66 caractar sia-dheicheach a bhith annta"
+        verification_failed: Chan aithnich Keybase an tòcan seo ’na shoidhneadh aig cleachdaiche Keybase %{kb_username}. Feuch ris a-rithist o Keybase.
+      wrong_user: Chan urrainn dhuinn dearbhadh air %{proving} a chruthachadh fhad ’s a bhios tu clàraichte a-steach mar %{current}. Clàraich a-steach mar %{proving} is feuch ris a-rithist.
+    explanation_html: "’S urrainn dhut na dearbh-aithnean eile agad a cheangal le crioptachadh o ùrlaran eile, can Keybase. Leigidh seo le càch teachdaireachdan crioptaichte a chur thugad air na h-ùrlaran sin agus bheir seo comas dhaibh gun cuir iad earbsa san t-susbaint a chuireas tu thuca ’s iad cinnteach gur ann uat-sa fhèin a thàinig i."
+    i_am_html: Is mise %{username} air %{service}.
+    identity: Dearbh-aithne
+    inactive: Neo-ghnìomhach
+    publicize_checkbox: "’S postaich seo mar dhùd:"
+    publicize_toot: 'Chaidh a dhearbhadh! Is mise %{username} air %{service}: %{url}'
+    remove: Thoir an dearbhadh air falbh on chunntas
+    removed: Chaidh an dearbhadh a thoirt air falbh on chunntas
+    status: Staid an dearbhaidh
+    view_proof: Seall an dearbhadh
+  imports:
+    errors:
+      over_rows_processing_limit: tha còrr is %{count} ràgh(an) ann
+    modes:
+      merge: Co-aonaich
+      merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris
+      overwrite: Sgrìobh thairis air
+      overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann
+    preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine air a leanas tu no a tha thu a’ bacadh."
+    success: Chaidh an dàta agad a luchdadh suas is thèid a phròiseasadh a-nis
+    types:
+      blocking: Liosta-bhacaidh
+      bookmarks: Comharran-lìn
+      domain_blocking: Liosta-bhacaidh àrainnean
+      following: Liosta dhen fheadhainn air a leanas tu
+      muting: Liosta a’ mhùchaidh
+    upload: Luchdaich suas
+  in_memoriam_html: Mar chuimhneachan.
+  invites:
+    delete: Cuir à gnìomh
+    expired: Dh’fhalbh an ùine air
+    expires_in:
+      '1800': Leth-uair a thìde
+      '21600': 6 uairean a thìde
+      '3600': Uair a thìde
+      '43200': 12 uair a thìde
+      '604800': Seachdain
+      '86400': Latha
+    expires_in_prompt: Chan ann idir
+    generate: Gin ceangal cuiridh
+    invited_by: 'Fhuair thu cuireadh o:'
+    max_uses:
+      few: "%{count} cleachdaichean"
+      one: "%{count} chleachdadh"
+      other: "%{count} cleachdadh"
+      two: "%{count} chleachdadh"
+    max_uses_prompt: Gun chrìoch
+    prompt: Cruthaich is co-roinn ceanglaichean le càch airson inntrigeadh dhan fhrithealaiche seo a thoirt dhaibh
+    table:
+      expires_at: Falbhaidh an ùine air
+      uses: Cleachdadh
+    title: Thoir cuireadh do dhaoine
+  lists:
+    errors:
+      limit: Ràinig thu na tha ceadaichte dhut de liostaichean
+  media_attachments:
+    validations:
+      images_and_video: Chan urrainn dhut video a cheangal ri post sa bheil dealbh mu thràth
+      not_ready: Chan urrainn dhuinn faidhlichean a cheangal ris nach eil air am pròiseasadh fhathast. Feuch ris a-rithist an ceann greis!
+      too_many: Chan urrainn dhut barrachd air 4 faidhlichean a ceangal ris
+  migrations:
+    acct: Air imrich gu
+    cancel: Sguir dhen ath-stiùireadh
+    cancel_explanation: Ma sguireas tu dhen ath-stiùireadh, thèid an cunntas làithreach agad a ghnìomhachadh a-rithist ach chan aisig sin an luchd-leantainn dhut a chaidh imrich dhan chunntas ud.
+    cancelled_msg: Chaidh sgur dhen ath-stiùireadh.
+    errors:
+      already_moved: "– seo an t-aon chunntas chan a ghluais thu mu thràth"
+      missing_also_known_as: "– chan eil seo ’na alias aig a’ chunntas seo"
+      move_to_self: "– chan fhaod thu an cunntas làithreach a chleachdadh dha seo"
+      not_found: "– cha deach seo a lorg"
+      on_cooldown: Tha àm socrachaidh ort
+    followers_count: Luchd-leantainn aig àm na h-imrich
+    incoming_migrations: Ag imrich o chunntas eile
+    incoming_migrations_html: Airson imrich o chunntas eile dhan fhear seo, feumaidh tu <a href="%{path}">alias cunntais a chruthachadh</a> an toiseach.
+    moved_msg: Tha an cunntas agad ’ga ath-stiùireadh gu %{acct} a-nis ’s an luchd-leantainn agad ’gan imrich.
+    not_redirecting: Chan eil an cunntas agad ’ga ath-stiùireadh gu cunntas sam bith eile aig an àm seo.
+    on_cooldown: Rinn thu imrich air a’ chunntas agad o chionn ghoirid. Bidh an gleus seo ri làimh dhut a-rithist an ceann %{count} là(ithean).
+    past_migrations: Imrichean roimhpe
+    proceed_with_move: Imrich an luchd-leantainn
+    redirected_msg: Tha an cunntas agad ’ga ath-stiùireadh gu %{acct} a-nis.
+    redirecting_to: Tha an cunntas agad ’ga ath-stiùireadh gu %{acct}.
+    set_redirect: Suidhich ath-stiùireadh
+    warning:
+      backreference_required: Feumaidh tu an cunntas ùr a rèiteachadh an toiseach ach an tomh e air ais dhan fhear seo
+      before: 'Mus lean thu air adhart, leugh na nòtaichean seo gu cùramach:'
+      cooldown: Às dèidh imrich, tha àm socrachaidh ann rè nach urrainn dhut imrich eile a dhèanamh
+      disabled_account: Cha ghabh an cunntas làithreach agad a chleachdadh gu slàn às a dhèidh. Gidheadh, bidh an dà chuid às-phortadh an dàta is ath-ghnìomhachadh ri fhaighinn dhut.
+      followers: Imrichidh an gnìomh seo a h-uile neach-leantainn on chunntas làithreach dhan chunntas ùr
+      only_redirect_html: Mar roghainn eile, ’s urrainn dhut <a href="%{path}">ath-stiùireadh a-mhàin a chur air a’ phròifil agad</a>.
+      other_data: Cha dèid dàta sam bith eile imrich gu fèin-obrachail
+      redirect: Thèid pròifil a’ chunntais làithrich agad ùrachadh le brath ath-stiùiridh agus às-dhùnadh on lorg
+  moderation:
+    title: Maorsainneachd
+  move_handler:
+    carry_blocks_over_text: Chaidh an cleachdaiche seo imrich o %{acct} a b’ àbhaist dhut a bhacadh.
+    carry_mutes_over_text: Chaidh an cleachdaiche seo imrich o %{acct} a b’ àbhaist dhut a mhùchadh.
+    copy_account_note_text: 'Da cleachdaiche air gluasad o %{acct}, seo na nòtaichean a bh’ agad mu dhèidhinn roimhe:'
+  notification_mailer:
+    digest:
+      action: Seall a h-uile brath
+      body: Seo geàrr-chunntas air na h-atharraichean nach fhaca thu on tadhal mu dheireadh agad %{since}
+      mention: 'Thug %{name} iomradh ort an-seo:'
+      new_followers_summary:
+        few: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
+        one: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
+        other: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
+        two: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
+      subject:
+        few: "%{count} brathan ùra on tadhal mu dheireadh agad \U0001F418"
+        one: "%{count} bhrath ùr on tadhal mu dheireadh agad \U0001F418"
+        other: "%{count} brath ùr on tadhal mu dheireadh agad \U0001F418"
+        two: "%{count} bhrath ùr on tadhal mu dheireadh agad \U0001F418"
+      title: Fhad ’s a bha thu air falbh…
+    favourite:
+      body: 'Is annsa le %{name} am post agad:'
+      subject: Is annsa le %{name} am post agad
+      title: Annsachd ùr
+    follow:
+      body: Tha %{name} a’ leantainn ort a-nis!
+      subject: Tha %{name} a’ leantainn ort a-nis
+      title: Neach-leantainn ùr
+    follow_request:
+      action: Stiùirich na h-iarrtasan leantainn
+      body: Dh’iarr %{name} leantainn ort
+      subject: 'Neach-leantainn ri dhèiligeadh: %{name}'
+      title: Iarrtas leantainn ùr
+    mention:
+      action: Freagair
+      body: 'Thug %{name} iomradh ort an-seo:'
+      subject: Thug %{name} iomradh ort
+      title: Iomradh ùr
+    poll:
+      subject: Thàinig cunntas-bheachd le %{name} gu crìoch
+    reblog:
+      body: 'Chaidh am post agad a bhrosnachadh le %{name}:'
+      subject: Bhrosnaich %{name} am post agad
+      title: Brosnachadh ùr
+    status:
+      subject: Tha %{name} air post a sgrìobhadh
+  notifications:
+    email_events: Tachartasan nam brathan puist-d
+    email_events_hint: 'Tagh na tachartasan dhan a bheil thu airson brathan fhaighinn:'
+    other_settings: Roghainnean eile nam brathan
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: bill.
+          million: mill.
+          quadrillion: quad.
+          thousand: mìle
+          trillion: trill.
+  otp_authentication:
+    code_hint: Cuir a-steach an còd a chaidh a ghintinn leis an aplacaid dearbhaidh agad airson a dhearbhadh
+    description_html: Ma chuireas tu an comas an <strong>dearbhadh dà-cheumnach</strong> le aplacaid dearbhaidh, feumaidh am fòn agad a bhith ri làimh dhut airson clàradh a-steach is ginidh esan tòcanan dhut.
+    enable: Cuir an comas
+    instructions_html: "<strong>Sganaich an còd QR le Google Authenticator no aplacaid TOTP sam bith eile air an fhòn agad</strong>. O seo a-mach, ginidh an aplacaid ud tòcanan a dh’fheumas tu cur a-steach nuair a bhios tu ri clàradh a-steach."
+    manual_instructions: 'Mur urrainn dhut an còd QR a sganadh is ma dh’fheumas tu a chur a-steach a làimh, seo an rùn ’na theasa lom dhut:'
+    setup: Suidhich
+    wrong_code: Cha robh an còd a chuir thu a-steach mar bu chòir! A bheil àm an fhrithealaiche agus àm an uidheim a-rèir a chèile?
+  pagination:
+    newer: Nas ùire
+    next: Air adhart
+    older: Nas sine
+    prev: Air ais
+    truncate: "&hellip;"
+  polls:
+    errors:
+      already_voted: Chuir thu bhòt sa chunntas-bheachd seo mu thràth
+      duplicate_options: " – tha nithean dùblaichte ann"
+      duration_too_long: "– tha seo ro fhad air falbh san àm ri teachd"
+      duration_too_short: "– tha seo ro aithghearr"
+      expired: Tha an cunntas-bheachd air a thighinn gu crìoch
+      invalid_choice: Chan eil an roghainn dhan a bhòt thu ann
+      over_character_limit: "– chan fhaod a bhith nas fhaide na %{max} caractar"
+      too_few_options: "– feumaidh iomadh nì a bhith aige"
+      too_many_options: "– chan fhaod còrr is %{max} nì a bhith ’na bhroinn"
+  preferences:
+    other: Eile
+    posting_defaults: Bun-roghainnean a’ phostaidh
+    public_timelines: Loidhnichean-ama poblach
+  reactions:
+    errors:
+      limit_reached: Ràinig thu crìoch nam freagairtean eadar-dhealaichte
+      unrecognized_emoji: "– chan aithne dhuinn an Emoji seo"
+  relationships:
+    activity: Gnìomhachd a’ chunntais
+    dormant: Na thàmh
+    follow_selected_followers: Lean air an luchd-leantainn a thagh thu
+    followers: Luchd-leantainn
+    following: A’ leantainn
+    invited: Air cuireadh fhaighinn
+    last_active: Gnìomhach an turas mu dheireadh
+    most_recent: As ùire
+    moved: Air imrich
+    mutual: Co-dhàimh
+    primary: Prìomh-dhàimh
+    relationship: Dàimh
+    remove_selected_domains: Thoir air falbh a h-uile neach-leantainn o na h-àrainnean a thagh thu
+    remove_selected_followers: Thoir air falbh a h-uile neach-leantainn a thagh thu
+    remove_selected_follows: Na lean air na cleachdaichean a thagh thu tuilleadh
+    status: Staid a’ chunntais
+  remote_follow:
+    acct: Cuir a-steach ainm-cleachdaiche@àrainn airson a chur ort
+    missing_resource: Cha do lorg sinn URL ath-stiùiridh riatanach a’ chunntais agad
+    no_account_html: Nach eil cunntas agad? ’S urrainn dhut <a href='%{sign_up_path}' target='_blank'>clàradh leinn an-seo</a>
+    proceed: Lean air adhart gus leantainn air
+    prompt: 'Bidh thu a’ leantainn air:'
+    reason_html: "<strong>Carson a tha feum air a’ cheum seo?</strong> Dh’fhaoidte nach e <code>%{instance}</code> am frithealaiche far an do rinn thu clàradh agus feumaidh sinn d’ ath-stiùireadh dhan fhrithealaiche dachaigh agad an toiseach."
+  remote_interaction:
+    favourite:
+      proceed: Lean air adhart gus a chur ris na h-annsachdan
+      prompt: 'Tha thu airson am post seo a chur ris na h-annsachdan:'
+    reblog:
+      proceed: Lean air adhart gus a bhrosnachadh
+      prompt: 'Tha thu airson am post seo a bhrosnachadh:'
+    reply:
+      proceed: Lean air adhart gus freagairt
+      prompt: 'Tha thu airson freagairt dhan phost seo:'
+  scheduled_statuses:
+    over_daily_limit: Chaidh thu thar na crìoch de %{limit} post(aichean) sgeidealaichte dhan latha ud
+    over_total_limit: Chaidh thu thar na crìoch de %{limit} post(aichean) sgeidealaichte
+    too_soon: Feumaidh ceann-latha an sgeideil a bhith san àm ri teachd
+  sessions:
+    activity: A’ ghnìomhachd mu dheireadh
+    browser: Brabhsair
+    browsers:
+      alipay: Alipay
+      blackberry: Blackberry
+      chrome: Chrome
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
+      generic: Brabhsair nach aithne dhuinn
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Nokia S40 Ovi Browser
+      opera: Opera
+      otter: Otter
+      phantom_js: PhantomJS
+      qq: QQ Browser
+      safari: Safari
+      uc_browser: UCBrowser
+      weibo: Weibo
+    current_session: An seisean làithreach
+    description: "%{browser} air %{platform}"
+    explanation: Seo na bhrabhsairean-lìn a tha clàraichte a-staigh sa chunntas Mastodon agad aig an àm seo.
+    ip: IP
+    platforms:
+      adobe_air: Adobe Air
+      android: Android
+      blackberry: Blackberry
+      chrome_os: ChromeOS
+      firefox_os: Firefox OS
+      ios: iOS
+      linux: Linux
+      mac: macOS
+      other: ùrlar nach aithne dhuinn
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
+    revoke: Cùl-ghairm
+    revoke_success: Chaidh an seisean a chùl-ghairm
+    title: Seiseanan
+  settings:
+    account: Cunntas
+    account_settings: Roghainnean a’ chunntais
+    aliases: Aliasan a’ chunntais
+    appearance: Coltas
+    authorized_apps: Aplacaidean ùghdarraichte
+    back: Till gu Mastodon
+    delete: Sguabadh às cunntais
+    development: Leasachadh
+    edit_profile: Deasaich a’ phròifil
+    export: Às-phortadh dàta
+    featured_tags: Tagaichean hais brosnaichte
+    identity_proofs: Dearbhaidhean na dearbh-aithne
+    import: Ion-phortaich
+    import_and_export: Ion-phortaich is às-phortaich
+    migrate: Imrich cunntais
+    notifications: Brathan
+    preferences: Roghainnean
+    profile: Pròifil
+    relationships: Dàimhean leantainn
+    two_factor_authentication: Dearbhadh dà-cheumnach
+    webauthn_authentication: Iuchraichean tèarainteachd
+  statuses:
+    attached:
+      audio:
+        few: "%{count} fuaimean"
+        one: "%{count} fhuaim"
+        other: "%{count} fuaim"
+        two: "%{count} fhuaim"
+      description: 'Ceanglachain: %{attached}'
+      image:
+        few: "%{count} dealbhan"
+        one: "%{count} dealbh"
+        other: "%{count} dealbh"
+        two: "%{count} dhealbh"
+      video:
+        few: "%{count} videothan"
+        one: "%{count} video"
+        other: "%{count} video"
+        two: "%{count} video"
+    boosted_from_html: Brosnachadh o %{acct_link}
+    content_warning: 'Rabhadh susbainte: %{warning}'
+    disallowed_hashtags:
+      few: "– bha na tagaichean hais toirmisgte seo ann: %{tags}"
+      one: "– bha na tagaichean hais toirmisgte seo ann: %{tags}"
+      other: "– bha na tagaichean hais toirmisgte seo ann: %{tags}"
+      two: "– bha na tagaichean hais toirmisgte seo ann: %{tags}"
+    errors:
+      in_reply_not_found: Tha coltas nach eil am post dhan a tha thu airson freagairt ann.
+    language_detection: Mothaich dhan chànan gu fèin-obrachail
+    open_in_web: Fosgail air an lìon
+    over_character_limit: chaidh thu thar crìoch charactaran de %{max}
+    pin_errors:
+      limit: Tha an àireamh as motha de dhùdan prìnichte agad a tha ceadaichte
+      ownership: Chan urrainn dhut post càich a phrìneachadh
+      private: Chan urrainn dhut post neo-phoblach a phrìneachadh
+      reblog: Chan urrainn dhut brosnachadh a phrìneachadh
+    poll:
+      total_people:
+        few: "%{count} daoine"
+        one: "%{count} neach"
+        other: "%{count} duine"
+        two: "%{count} neach"
+      total_votes:
+        few: "%{count} bhòtaichean"
+        one: "%{count} bhòt"
+        other: "%{count} bhòt"
+        two: "%{count} bhòt"
+      vote: Bhòt
+    show_more: Seall barrachd dheth
+    show_newer: Seall feadhainn as ùire
+    show_older: Seall feadhainn as sine
+    show_thread: Seall an snàithlean
+    sign_in_to_participate: Clàraich a-steach a ghabhail pàirt sa chòmhradh
+    title: "%{name}: “%{quote}”"
+    visibilities:
+      direct: Dìreach
+      private: Luchd-leantainn a-mhàin
+      private_long: Na seall dhan luchd-leantainn
+      public: Poblach
+      public_long: Chì a h-uile duine seo
+      unlisted: Falaichte o liostaichean
+      unlisted_long: Chì a h-uile duine seo ach cha nochd e air loidhnichean-ama poblach
+  stream_entries:
+    pinned: Post prìnichte
+    reblogged: "’ga bhrosnachadh"
+    sensitive_content: Susbaint fhrionasach
+  tags:
+    does_not_match_previous_name: "– chan eil seo a-rèir an ainm roimhe"
+  terms:
+    body_html: '<h2>Poileasaidh prìobhaideachd</h2> <h3 id="collect">Dè am fiosrachadh a chruinnicheas sinn?</h3> <ul> <li><em>Fiosrachadh bunasach a’ cunntais</em>: Ma chlàraicheas tu leis an fhrithealaiche seo, dh’fhaoidte gun dèid iarraidh ort gun cuir thu a-steach ainm-cleachdaiche, seòladh puist-d agus facal-faire. Faodaidh tu barrachd fiosrachaidh a chur ris a’ phròifil agad ma thogras tu, can ainm-taisbeanaidh agus teacsa mu do dhèidhinn agus dealbhan pròifile ’s banna-chinn a luchdadh suas. Thèid an t-ainm-cleachdaiche, an t-ainm-taisbeanaidh, an teacsa mu do dhèidhinn agus dealbhan na pròifile ’s a bhanna-chinn a shealltainn gu poblach an-còmhnaidh.</li> <li><em>Postaichean, luchd-leantainn agus fiosrachadh poblach eile</em>: Tha liosta nan daoine air a leanas tu poblach mar a tha i dhan luchd-leantainn agad. Nuair a chuireas tu a-null teachdaireachd, thèid an t-àm ’s an ceann-latha a stòradh cho math ris an aplacaid leis an do chuir thu am foirm a-null. Faodaidh ceanglachain meadhain a bhith am broinn teachdaireachdan, can dealbhan no videothan. Tha postaichean poblach agus postaichean falaichte o liostaichean ri ’m faighinn gu poblach. Nuair a bhrosnaicheas tu post air a’ phròifil agad, ’s e fiosrachadh poblach a tha sin cuideachd. Thèid na postaichean agad a lìbhrigeadh dhan luchd-leantainn agad agus is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nuair a sguabas tu às post, thèid sin a lìbhrigeadh dhan luchd-leantainn agad cuideachd. Tha ath-bhlogachadh no dèanamh annsachd de phost eile poblach an-còmhnaidh.</li> <li><em>Postaichean dìreach is dhan luchd-leantainn a-mhàin</em>: Thèid a h-uile post a stòradh ’s a phròiseasadh air an fhrithealaiche. Thèid na postaichean dhan luchd-leantainn a-mhàin a lìbhrigeadh dhan luchd-leantainn agad agus dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost. Thèid postaichean dìreach a lìbhrigeadh dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost a-mhàin. Is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nì sinn ar dìcheall gun cuingich sinn an t-inntrigeadh dha na postaichean air na daoine a fhuair ùghdarrachadh dhaibh ach dh’fhaoidte nach dèan frithealaichean eile seo. Mar sin dheth, tha e cudromach gun doir thu sùil air na frithealaichean dhan a bhuineas an luchd-leantainn agad. Faodaidh tu roghainn a chur air no dheth a leigeas leat aontachadh ri luchd-leantainn ùra no an diùltadh a làimh. <em>Thoir an aire gum faic rianairean an fhrithealaiche agus frithealaiche sam bith a gheibh am fiosrachadh na teachdaireachdan dhen leithid</em> agus gur urrainn dha na faightearan glacaidhean-sgrìn no lethbhreacan dhiubh a dhèanamh no an cho-roinneadh air dòighean eile. <em>Na co-roinn fiosrachadh cunnartach air Mastodon idir.</em></li> <li><em>IPan is meata-dàta eile</em>: Nuair a nì thu clàradh a-steach, clàraidh sinn an seòladh IP on a rinn thu clàradh a-steach cuide ri ainm aplacaid a’ bhrabhsair agad. Bidh a h-uile seisean clàraidh a-steach ri làimh dhut airson an lèirmheas agus an cùl-ghairm sna roghainnean. Thèid an seòladh IP as ùire a chleachd thu a stòradh suas ri 12 mhìos. Faodaidh sinn cuideachd logaichean an fhrithealaiche a chumail a ghabhas a-steach seòladh IP aig a h-uile iarrtas dhan fhrithealaiche againn.</li> </ul> <hr class="spacer" /> <h3 id="use">Dè na h-adhbharan air an cleachd sinn am fiosrachadh agad?</h3> <p>Seo na dòighean air an cleachd sinn fiosrachadh sam bith a chruinnich sinn uat ma dh’fhaoidte:</p> <ul> <li>Airson bun-ghleusan Mhastodon a lìbhrigeadh. Chan urrainn dhut eadar-ghnìomh a ghabhail le susbaint càich no an t-susbaint agad fhèin a phostadh ach nuair a bhios tu air do chlàradh a-steach. Mar eisimpleir, faodaidh tu leantainn air càch ach am faic thu na postaichean aca còmhla air loidhne-ama pearsanaichte na dachaigh agad.</li> <li>Airson cuideachadh le maorsainneachd na coimhearsnachd, can airson coimeas a dhèanamh eadar an seòladh IP agad ri feadhainn eile feuch am mothaich sinn do sheachnadh toirmisg no briseadh eile nan riaghailtean.</li> <li>Faodaidh sinn an seòladh puist-d agad a chleachdadh airson fiosrachadh no brathan mu eadar-ghnìomhan a ghabh càch leis an t-susbaint agad no teachdaireachdan a chur thugad, airson freagairt ri ceasnachaidhean agus/no iarrtasan no ceistean eile.</li> </ul> <hr class="spacer" /> <h3 id="protect">Ciamar a dhìonas sinn am fiosrachadh agad?</h3> <p>Cuiridh sinn iomadh gleus tèarainteachd an sàs ach an glèidheadh sinn sàbhailteachd an fhiosrachaidh phearsanta agad nuair a chuireas tu gin a-steach, nuair a chuireas tu a-null e no nuair a nì thu inntrigeadh air. Am measg gleusan eile, thèid seisean a’ bhrabhsair agad cuide ris an trafaig eadar na h-aplacaidean agad ’s an API a dhìon le SSL agus thèid hais a dhèanamh dhen fhacal-fhaire agad le algairim aon-shligheach làidir. Faodaidh tu dearbhadh dà-cheumnach a chur an comas airson barrachd tèarainteachd a chur ris an inntrigeadh dhan chunntas agad.</p> <hr class="spacer" /> <h3 id="data-retention">Dè am poileasaidh cumail dàta againn?</h3> <p>Nì sinn ar dìcheall:</p> <ul> <li>Nach cùm sinn logaidhean an fhrithealaiche sa bheil seòlaidhean IP nan iarrtasan uile dhan fhrithealaiche seo nas fhaide na 90 latha ma chumas sinn logaichean dhen leithid idir.</li> <li>Nach cùm sinn na seòlaidhean IP a tha co-cheangailte ri cleachdaichean clàraichte nas fhaide na 12 mhìos.</li> </ul> <p>’S urrainn dhut tasg-lann iarraidh dhen t-susbaint agad ’s a luchdadh a-nuas is gabhaidh seo a-staigh na postaichean, na ceanglachain meadhain, dealbh na pròifil agus dealbh a’ bhanna-chinn agad.</p> <p>’S urrainn dhut an cunntas agad a sguabadh às gu buan uair sam bith.</p> <hr class="spacer"/> <h3 id="cookies">An cleachd sinn briosgaidhean?</h3> <p>Cleachdaidh. ’S e faidhlichean beaga a tha sna briosgaidean a thar-chuireas làrach no solaraiche seirbheise gu clàr-cruaidh a’ choimpiutair agad leis a’ bhrabhsair-lìn agad (ma cheadaicheas tu sin). Bheir na briosgaidean sin comas dhan làrach gun aithnich i am brabhsair agad agus ma tha cunntas clàraichte agad, gun co-cheangail i ris a’ chunntas chlàraichte agad e.</p> <p>Cleachdaidh sinn briosgaidean airson na roghainnean agad a thuigsinn ’s a ghlèidheadh gus an tadhail thu oirnn san àm ri teachd.</p> <hr class="spacer" /> <h3 id="disclose">Am foillsich sinn fiosrachadh sam bith gu pàrtaidhean air an taobh a-muigh?</h3> <p>Cha reic, malairt no tar-chuir sinn fiosrachadh air a dh’aithnichear thu fhèin gu pàrtaidh sam bith air an taobh a-muigh. Cha ghabh seo a-staigh treas-phàrtaidhean earbsach a chuidicheas leinn le ruith na làraich againn, le obrachadh a’ ghnìomhachais againn no gus an t-seirbheis a thoirt leat cho fada ’s a dh’aontaicheas na treas-phàrtaidhean sin gun cùm iad am fiosrachadh dìomhair. Faodaidh sinn am fiosrachadh agad fhoillseachadh cuideachd nuair a bhios sinn dhen bheachd gu bheil am foillseachadh sin iomchaidh airson gèilleadh dhan lagh, poileasaidhean na làraich againn èigneachadh no na còraichean, an sealbh no an t-sàbhailteachd againn fhèin no aig càch a dhìon.</p> <p>Dh’fhaoidte gun dèid an t-susbaint phoblach agad a luchdadh a-nuas le frithealaichean eile san lìonra. Thèid na postaichean poblach agad ’s an fheadhainn dhan luchd-leantainn a-mhàin a lìbhrigeadh dha na frithealaichean far a bheil an luchd-leantainn agad a’ còmhnaidh agus thèid na teachdaireachdan dìreach a lìbhrigeadh gu frithealaichean nam faightearan nuair a bhios iad a’ còmhnaidh air frithealaiche eile.</p> <p>Nuair a dh’ùghdarraicheas tu aplacaid gun cleachd i an cunntas agad, a-rèir sgòp nan ceadan a dh’aontaicheas tu riutha, faodaidh i fiosrachadh poblach na pròifil agad, liosta na feadhna air a bhios tu a’ leantainn, an luchd-leantainn agad, na liostaichean agad, na postaichean agad uile ’s na h-annsachdan agad inntrigeadh. Chan urrainn do dh’aplacaidean an seòladh puist-d no am facal-faire agad inntrigeadh idir.</p> <hr class="spacer" /> <h3 id="children">Cleachdadh na làraich leis a’ chloinn</h3> <p>Ma tha am frithealaiche seo san Aonadh Eòrpach (AE) no san Roinn Eaconomach na h-Eòrpa (EEA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) nach cleachd thu an làrach seo.</p> <p>Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children''s Online Privacy Protection Act</a>)ha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) nach cleachd thu an làrach seo.</p> <p>Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children''s Online Privacy Protection Act</a>) nach cleachd thu an làrach seo.</p> <p>Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.</p> <hr class="spacer" /> <h3 id="changes">Atharraichean air a’ phoileasaidh phrìobhaideachd againn</h3> <p>Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.</p> <p>Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.</p> <p>Chaidh a fhreagarrachadh o thùs o <a href="https://github.com/discourse/discourse">phoileasaidh prìobhaideachd Discourse</a>.</p> nach cleachd thu an làrach seo.</p> <p>Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.</p> <hr class="spacer" /> <h3 id="changes">Atharraichean air a’ phoileasaidh phrìobhaideachd againn</h3> <p>Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.</p> <p>Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.</p> <p>Chaidh a fhreagarrachadh o thùs o <a href="https://github.com/discourse/discourse">phoileasaidh prìobhaideachd Discourse</a>.</p>
+
+      '
+    title: Teirmichean na seirbheise ⁊ poileasaidh prìobhaideachd %{instance}
+  themes:
+    contrast: Mastodon (iomsgaradh àrd)
+    default: Mastodon (dorcha)
+    mastodon-light: Mastodon (soilleir)
+  time:
+    formats:
+      default: "%d %b %Y, %H∶%M"
+      month: "%b %Y"
+  two_factor_authentication:
+    add: Cuir ris
+    disable: Cuir an dearbhadh dà-cheumnach à comas
+    disabled_success: Chaidh an dearbhadh dà-cheumnach a chur à comas
+    edit: Deasaich
+    enabled: Tha an dearbhadh dà-cheumnach an comas
+    enabled_success: Chaidh an dearbhadh dà-cheumnach a chur an comas
+    generate_recovery_codes: Gin còdan aiseig
+    lost_recovery_codes: Le còdan aiseig, gheibh thu a-steach dhan chunntas agad a-rithist ma chailleas tu am fòn agad. Ma chaill thu na còdan aiseig agad, ’s urrainn dhut an ath-ghintinn an-seo. Cha bhi na seann-chòdan aiseig agad dligheach tuilleadh an uairsin.
+    methods: Dòighean dà-cheumnach
+    otp: Aplacaid dearbhaidh
+    recovery_codes: Còdan aiseig ’nan lethbhreac-glèidhidh
+    recovery_codes_regenerated: Chaidh na còdan aiseig ath-ghintinn
+    recovery_instructions_html: Ma chailleas tu an t-inntrigeadh dhan fhòn agad, ’s urrainn dhut fear dhe na còdan aisig gu h-ìosal a chleachdadh airson faighinn a-steach dhan chunntas agad a-rithist. <strong>Cùm na còdan aisig sàbhailte</strong>. Mar eisimpleir, ’s urrainn dhut an clò-bhualadh ’s a chumail far a bheil thu a’ cumail na sgrìobhainnean cudromach eile agad.
+    webauthn: Iuchraichean tèarainteachd
+  user_mailer:
+    backup_ready:
+      explanation: Dh’iarr thu lethbhreac-glèidhidh slàn dhen chunntas Mastodon agad. Tha e deis ri luchdadh a-nuas a-nis!
+      subject: Tha an tasg-lann agad deis ri luchdadh a-nuas
+      title: Tasg-lann dhut
+    sign_in_token:
+      details: 'Seo mion-fhiosrachadh mun oidhirp:'
+      explanation: 'Mhothaich sinn do dh’oidhirp clàraidh a-steach dhan chunntas agad o sheòladh IP nach aithne dhuinn. Mas e tusa a bh’ ann, cuir a-steach an còd tèarainteachd gu h-ìosal air duilleag dùbhlan a’ chlàraidh a-steach:'
+      further_actions: 'Mur e tusa a bh’ ann, atharraich am facal-faire agad agus cuir an comas an dearbhadh dà-cheumnach air a’ chunntas agad. ’S urrainn dhut sin a dhèanamh an-seo:'
+      subject: Dearbh an oidhirp air clàradh a-steach
+      title: Oidhirp clàraidh a-steach
+    warning:
+      explanation:
+        disable: Chan urrainn dhut clàradh a-steach dhan chunntas agad tuilleadh no a chleachdadh ann an dòigh sam bith eile ach mairidh a’ phròifil ’s an dàta eile agad.
+        sensitive: Thèid dèiligeadh ris na faidhlichean meadhain is na meadhanan ceangailte agad mar fheadhainn fhrionasach.
+        silence: "’S urrainn dhut an cunntas agad a chleachdadh fhathast ach chan fhaic ach na daoine a tha a’ leantainn ort mu thràth na postaichean agad air an fhrithealaiche seo agus dh’fhaoidte gun dèid d’ às-dhùnadh o iomadh liosta phoblach. Gidheadh, faodaidh càch leantainn ort a làimh fhathast."
+        suspend: Chan urrainn dhut an cunntas agad a chleachdadh tuilleadh agus chan fhaigh thu grèim air a’ phròifil no air an dàta eile agad. ’S urrainn dhut clàradh a-steach fhathast airson lethbhreac-glèidhidh dhen dàta agad iarraidh mur dèid an dàta a thoirt air falbh gu slàn ach cumaidh sinn cuid dhen dàta ach nach seachain thu an cur à rèim.
+      get_in_touch: "’S urrainn dhut freagairt dhan phost-d seo no conaltradh ris an sgioba aig %{instance}."
+      review_server_policies: Thoir sùil air riaghailtean an fhrithealaiche
+      statuses: 'Gu sònraichte, dha:'
+      subject:
+        disable: Chaidh an cunntas %{acct} agad a reòthadh
+        none: Rabhadh dha %{acct}
+        sensitive: Chaidh comharra a chur ri meadhanan a’ chunntais %{acct} agad gu bheil iad frionasach
+        silence: Chaidh an cunntas %{acct} agad a chuingeachadh
+        suspend: Chaidh an cunntas %{acct} agad a chur à rèim
+      title:
+        disable: Cunntas reòite
+        none: Rabhadh
+        sensitive: Chaidh comharra a chur ris na meadhanan agad gu bheil iad frionasach
+        silence: Cunntas cuingichte
+        suspend: Cunntas à rèim
+    welcome:
+      edit_profile_action: Suidhich a’ phròifil agad
+      edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas avatar no bann-cinn, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. Nam bu mhiann leat lèirmheas a dhèanamh air daoine mus fhaod iad leantainn ort, ’s urrainn dhut an cunntas agad a ghlasadh."
+      explanation: Seo gliocas no dhà gus tòiseachadh
+      final_action: Tòisich air postadh
+      final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith a’ leantainn ort, chì cuid mhath na teachdaireachdan poblach agad, can air an loidhne-ama ionadail agus le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #introductions?'
+      full_handle: D’ ainm-cleachdaiche slàn
+      full_handle_hint: Seo na bheir thu dha na caraidean agad ach an urrainn dhaibh teachdaireachd a chur thugad no leantainn ort o fhrithealaiche eile.
+      review_preferences_action: Atharraich na roghainnean
+      review_preferences_step: Dèan cinnteach gun suidhich thu na roghainnean agad, can dè na puist-d a bu mhiann leat fhaighinn no dè a’ bun-roghainn air ìre na prìobhaideachd a bu chòir a bhith aig na postaichean agad. Mura cuir gluasad an òrrais ort, b’ urrainn dhut cluich fèin-obrachail nan GIFs a chur an comas.
+      subject: Fàilte gu Mastodon
+      tip_federated_timeline: "’S e sealladh farsaing dhen lìonra Mastodon a tha san loidhne-ama cho-naisgte. Gidheadh, cha ghabh i a-staigh ach na daoine air an do rinn do nàbaidhean fo-sgrìobhadh, mar sin chan eil i coileanta."
+      tip_following: Leanaidh tu air rianaire(an) an fhrithealaiche agad o thùs. Airson daoine nas inntinniche a lorg, thoir sùil air na loidhnichean-ama ionadail is co-naisgte.
+      tip_local_timeline: "’S e sealladh farsaing air na daoine a th’ air %{instance} a tha san loidhne-ama ionadail agad. Seo na nàbaidhean a tha faisg ort!"
+      tip_mobile_webapp: Ma leigeas am brabhsair mobile agad leat Mastodon a chur ris an sgrìn-dhachaigh, ’s urrainn dhut brathan putaidh fhaighinn. Bidh e ’ga ghiùlan fhèin coltach ri aplacaid thùsail air iomadh dòigh!
+      tips: Gliocasan
+      title: Fàilte air bòrd, %{name}!
+  users:
+    follow_limit_reached: Chan urrainn dhut leantainn air còrr is %{limit} daoine
+    generic_access_help_html: A bheil trioblaid agad le inntrigeadh a’ chunntais agad? ’S urrainn dhut fios a chur gu %{email} airson taic
+    invalid_otp_token: Còd dà-cheumnach mì-dhligheach
+    invalid_sign_in_token: Còd tèarainteachd mì-dhligheach
+    otp_lost_help_html: Ma chaill thu an t-inntrigeadh dhan dà chuid diubh, ’s urrainn dhut fios a chur gu %{email}
+    seamless_external_login: Rinn thu clàradh a-steach le seirbheis on taobh a-muigh, mar sin chan eil roghainnean an fhacail-fhaire ’s a’ phuist-d ri làimh dhut.
+    signed_in_as: 'Chlàraich thu a-steach mar:'
+    suspicious_sign_in_confirmation: Tha coltas nach do rinn thu clàradh a-steach on uidheam seo cheana agus cha do clàraich thu a-steach greis mhath. Air an adhbhar sin, cuiridh sinn còd tèarainteachd dhan t-seòladh puist-d agad ach an dearbhamaid gur e tusa a th’ ann.
+  verification:
+    explanation_html: '’S urrainn dhut <strong>dearbhadh gur e seilbheadair nan ceanglaichean ann am meata-dàta na pròifil agad a th’ annad</strong>. Airson sin a dhèanamh, feumaidh ceangal air ais dhan phròifil Mastodon a bhith aig an làrach-lìn cheangailte. <strong>Feumaidh</strong> buadh <code>rel="me"</code> a bhith aig a’ cheangal air ais. Chan eil e gu diofar dè an t-susbaint a tha ann an teacsa a’ cheangail. Seo ball-eisimpleir dhut:'
+    verification: Dearbhadh
+  webauthn_credentials:
+    add: Cuir iuchair tèarainteachd ùr ris
+    create:
+      error: Bha duilgheadas ann le bhith a’ cur ris an iuchair tèarainteachd agad. Feuch ris a-rithist.
+      success: Chaidh an iuchair tèarainteachd agad a chur ris.
+    delete: Sguab às
+    delete_confirmation: A bheil thu cinnteach gu bheil thu airson an iuchair tèarainteachd seo a sguabadh às?
+    description_html: Ma chuireas tu <strong>dearbhadh le iuchair tèarainteachd</strong> an comas, chan urrainn dhut clàradh a-steach às aonais tè dhe na h-iuchraichean tèarainteachd agad.
+    destroy:
+      error: Bha duilgheadas ann le bhith a’ sguabadh às an iuchair tèarainteachd agad. Feuch ris a-rithist.
+      success: Chaidh an iuchair tèarainteachd agad a sguabadh às.
+    invalid_credential: Iuchair tèarainteachd mì-dhligheach
+    nickname_hint: Cuir a-steach far-ainm na h-iuchrach tèarainteachd ùir agad
+    not_enabled: Cha do chuir thu WebAuthn an comas fhathast
+    not_supported: Cha chuir am brabhsair seo taic ri iuchraichean tèarainteachd
+    otp_required: Mus cleachd thu iuchraichean tèarainteachd, feumaidh tu an dearbhadh dà-cheumnach a chur an comas.
+    registered_on: Air a chlàradh %{date}
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 48aaff0ad..30e4eeab8 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -1,8 +1,8 @@
 ---
 gl:
   about:
-    about_hashtag_html: Estes son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Podes interactuar con eles se tes unha conta nalgures do fediverso.
-    about_mastodon_html: Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada como o correo electrónico.
+    about_hashtag_html: Estas son publicacións públicas etiquetadas con <strong>#%{hashtag}</strong>. Podes interactuar con elas se tes unha conta nalgures do fediverso.
+    about_mastodon_html: 'A rede social do futuro: Sen publicidade, sen seguimento por empresas, deseño ético e descentralización! En Mastodon ti posúes os teus datos!'
     about_this: Acerca de
     active_count_after: activas
     active_footnote: Usuarias Activas no Mes (UAM)
@@ -23,15 +23,17 @@ gl:
     hosted_on: Mastodon aloxado en %{domain}
     instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio.
 
-'
+      '
     learn_more: Saber máis
     privacy_policy: Política de privacidade
+    rules: Regras do servidor
+    rules_html: 'Aquí tes un resumo das regras que debes seguir se queres ter unha conta neste servidor de Mastodon:'
     see_whats_happening: Ver o que está a acontecer
     server_stats: 'Estatísticas do servidor:'
     source_code: Código fonte
     status_count_after:
-      one: estado
-      other: estados
+      one: publicación
+      other: publicacións
     status_count_before: Que publicaron
     tagline: Segue ás túas amizades e coñece novas
     terms: Termos do servizo
@@ -74,11 +76,10 @@ gl:
     pin_errors:
       following: Tes que seguir á persoa que queres engadir
     posts:
-      one: Toot
-      other: Toots
-    posts_tab_heading: Toots
-    posts_with_replies: Toots e respostas
-    reserved_username: O nome de usuaria está reservado
+      one: Publicación
+      other: Publicacións
+    posts_tab_heading: Publicacións
+    posts_with_replies: Publicacións e respostas
     roles:
       admin: Administradora
       bot: Bot
@@ -198,7 +199,7 @@ gl:
         targeted_reports: Denuncias feitas por outros
       silence: Silenciar
       silenced: Silenciado
-      statuses: Estados
+      statuses: Publicacións
       subscribe: Subscribirse
       suspended: Suspendida
       suspension_irreversible: Elimináronse de xeito irreversible os datos desta conta. Podes reactivar a conta para facela usable novamente pero non recuperará os datos eliminados.
@@ -229,6 +230,7 @@ gl:
         create_domain_block: Crear bloqueo de dominio
         create_email_domain_block: Crear bloqueo de dominio de correo electrónico
         create_ip_block: Crear regra IP
+        create_unavailable_domain: Crear dominio Non dispoñible
         demote_user: Degradar usuaria
         destroy_announcement: Eliminar anuncio
         destroy_custom_emoji: Eliminar emoticona personalizada
@@ -236,7 +238,8 @@ gl:
         destroy_domain_block: Eliminar bloqueo de dominio
         destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico
         destroy_ip_block: Eliminar regra IP
-        destroy_status: Eliminar estado
+        destroy_status: Eliminar publicación
+        destroy_unavailable_domain: Eliminar dominio Non dispoñible
         disable_2fa_user: Desactivar 2FA
         disable_custom_emoji: Desactivar emoticona personalizada
         disable_user: Desactivar usuaria
@@ -258,49 +261,51 @@ gl:
         update_announcement: Actualizar anuncio
         update_custom_emoji: Actualizar emoticona personalizada
         update_domain_block: Actualizar bloqueo do dominio
-        update_status: Actualizar estado
+        update_status: Actualizar publicación
       actions:
-        assigned_to_self_report: "%{name} atribuíu a denuncia %{target} a el mesmo"
-        change_email_user: "%{name} cambiou o enderezo de correo-e da usuaria %{target}"
-        confirm_user: "%{name} comfirmou o enderezo de correo da usuaria %{target}"
-        create_account_warning: "%{name} enviou un aviso a %{target}"
-        create_announcement: "%{name} creou un novo anuncio %{target}"
-        create_custom_emoji: "%{name} subiu unha nova emoticona %{target}"
-        create_domain_allow: "%{name} engadiu á listaxe branca o dominio %{target}"
-        create_domain_block: "%{name} bloqueou o dominio %{target}"
-        create_email_domain_block: "%{name} engadiu á listaxe negra o dominio de email %{target}"
-        create_ip_block: "%{name} creou regra para IP %{target}"
-        demote_user: "%{name} degradou a usuaria %{target}"
-        destroy_announcement: "%{name} eliminou o anuncio %{target}"
-        destroy_custom_emoji: "%{name} eliminou a emoticona %{target}"
-        destroy_domain_allow: "%{name} eliminou o dominio %{target} da listaxe branca"
-        destroy_domain_block: "%{name} desbloqueou o dominio %{target}"
-        destroy_email_domain_block: "%{name} engadiu á lista branca o dominio de email %{target}"
-        destroy_ip_block: "%{name} eliminou regra para IP %{target}"
-        destroy_status: "%{name} eliminou o estado de %{target}"
-        disable_2fa_user: "%{name} desactivou o requirimento de dobre factor para a usuaria %{target}"
-        disable_custom_emoji: "%{name} desactivou a emoticona %{target}"
-        disable_user: "%{name} desactivou o acceso á conta para a usuaria %{target}"
-        enable_custom_emoji: "%{name} activou a emoticona %{target}"
-        enable_user: "%{name} activou o acceso á conta para a usuaria %{target}"
-        memorialize_account: "%{name} converteu a conta de %{target} nunha páxina para a lembranza"
-        promote_user: "%{name} promoveu a usuaria %{target}"
-        remove_avatar_user: "%{name} eliminou a imaxe de perfil de %{target}"
-        reopen_report: "%{name} reabriu a denuncia %{target}"
-        reset_password_user: "%{name} restableceu o contrasinal da usuaria %{target}"
-        resolve_report: "%{name} resolveu a denuncia %{target}"
-        sensitive_account: "%{name} marcou o multimedia de %{target} como sensible"
-        silence_account: "%{name} silenciou a conta de %{target}"
-        suspend_account: "%{name} suspendeu a conta de %{target}"
-        unassigned_report: "%{name} deixou de atribuír a denuncia %{target}"
-        unsensitive_account: "%{name} desmarcou o multimedia de %{target} como sensible"
-        unsilence_account: "%{name} deixou de silenciar a conta de %{target}"
-        unsuspend_account: "%{name} desactivou a suspensión da conta de %{target}"
-        update_announcement: "%{name} actualizou o anuncio %{target}"
-        update_custom_emoji: "%{name} actualizou a emoticona %{target}"
-        update_domain_block: "%{name} actualizou o bloqueo do dominio %{target}"
-        update_status: "%{name} actualizou o estado de %{target}"
-      deleted_status: "(estado eliminado)"
+        assigned_to_self_report_html: "%{name} asignou a denuncia %{target} para si mesma"
+        change_email_user_html: "%{name} cambiou o enderezo de email da usuaria %{target}"
+        confirm_user_html: "%{name} confirmou o enderezo de email da usuaria %{target}"
+        create_account_warning_html: "%{name} envioulle unha advertencia a %{target}"
+        create_announcement_html: "%{name} creou un novo anuncio %{target}"
+        create_custom_emoji_html: "%{name} subiu un novo emoji %{target}"
+        create_domain_allow_html: "%{name} permitiu a federación co dominio %{target}"
+        create_domain_block_html: "%{name} bloqueou o dominio %{target}"
+        create_email_domain_block_html: "%{name} bloqueou o dominio de email %{target}"
+        create_ip_block_html: "%{name} creou regra para o IP %{target}"
+        create_unavailable_domain_html: "%{name} deixou de interactuar co dominio %{target}"
+        demote_user_html: "%{name} degradou a usuaria %{target}"
+        destroy_announcement_html: "%{name} eliminou o anuncio %{target}"
+        destroy_custom_emoji_html: "%{name} destruíu o emoji %{target}"
+        destroy_domain_allow_html: "%{name} retirou a federación co dominio %{target}"
+        destroy_domain_block_html: "%{name} desbloqueou o dominio %{target}"
+        destroy_email_domain_block_html: "%{name} desbloqueou o dominio de email %{target}"
+        destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}"
+        destroy_status_html: "%{name} eliminou a publicación de %{target}"
+        destroy_unavailable_domain_html: "%{name} retomou a interacción co dominio %{target}"
+        disable_2fa_user_html: "%{name} desactivou o requerimento do segundo factor para a usuaria %{target}"
+        disable_custom_emoji_html: "%{name} desactivou o emoji %{target}"
+        disable_user_html: "%{name} desactivou a conexión para a usuaria %{target}"
+        enable_custom_emoji_html: "%{name} activou o emoji %{target}"
+        enable_user_html: "%{name} activou a conexión para a usuaria %{target}"
+        memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo"
+        promote_user_html: "%{name} promocionou a usuaria %{target}"
+        remove_avatar_user_html: "%{name} eliminou o avatar de %{target}"
+        reopen_report_html: "%{name} reabriu a denuncia %{target}"
+        reset_password_user_html: "%{name} restableceu o contrasinal da usuaria %{target}"
+        resolve_report_html: "%{name} resolveu a denuncia %{target}"
+        sensitive_account_html: "%{name} marcou o multimedia de %{target} como sensible"
+        silence_account_html: "%{name} acalou a conta de %{target}"
+        suspend_account_html: "%{name} suspendeu a conta de %{target}"
+        unassigned_report_html: "%{name} quitoulle a asignación á denuncia %{target}"
+        unsensitive_account_html: "%{name} desmarcou como sensible o multimedia de %{target}"
+        unsilence_account_html: "%{name} reactivou a conta de %{target}"
+        unsuspend_account_html: "%{name} retiroulle a suspensión á conta de %{target}"
+        update_announcement_html: "%{name} actualizou o anuncio %{target}"
+        update_custom_emoji_html: "%{name} actualizou o emoji %{target}"
+        update_domain_block_html: "%{name} actualizou o bloqueo do dominio para %{target}"
+        update_status_html: "%{name} actualizou a publicación de %{target}"
+      deleted_status: "(publicación eliminada)"
       empty: Non se atoparon rexistros.
       filter_by_action: Filtrar por acción
       filter_by_user: Filtrar por usuaria
@@ -314,10 +319,12 @@ gl:
       new:
         create: Crear anuncio
         title: Novo anuncio
+      publish: Publicar
       published_msg: Anuncio publicado de xeito correcto!
       scheduled_for: Programado para %{time}
       scheduled_msg: Anuncio programado para a súa publicación!
       title: Anuncios
+      unpublish: Retirar publicación
       unpublished_msg: Anuncio desbotado de xeito correcto!
       updated_msg: Anuncio actualizado de xeito correcto!
     custom_emojis:
@@ -362,7 +369,6 @@ gl:
       feature_profile_directory: Directorio do perfil
       feature_registrations: Rexistros
       feature_relay: Repetidor da federación
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Vista previa da cronoloxía
       features: Funcións
       hidden_service: Federación con servizos agochados
@@ -440,9 +446,34 @@ gl:
         create: Engadir dominio
         title: Nova entrada na listaxe negra de email
       title: Listaxe negra de email
+    follow_recommendations:
+      description_html: "<strong>As recomendacións de seguimento son útiles para que as novas usuarias atopen contidos interesantes</strong>. Cando unha usuaria aínda non interactuou con outras para obter recomendacións de seguimento, estas contas serán recomendadas. Variarán a diario xa que se escollen en base ao maior número de interaccións e ao contador local de seguimentos para un idioma dado."
+      language: Para o idioma
+      status: Estado
+      suppress: Suprimir recomendación de seguimento
+      suppressed: Eliminada
+      title: Recomendacións de seguimento
+      unsuppress: Restablecer recomendación de seguimento
     instances:
+      back_to_all: Todo
+      back_to_limited: Limitado
+      back_to_warning: Aviso
       by_domain: Dominio
+      delivery:
+        all: Todo
+        clear: Eliminar erros na entrega
+        restart: Restablecer a entrega
+        stop: Deter a entrega
+        title: Entrega
+        unavailable: Non dispoñible
+        unavailable_message: Entrega non dispoñible
+        warning: Aviso
+        warning_message:
+          one: Fallou a entrega %{count} día
+          other: Fallou a entrega %{count} días
       delivery_available: Entrega dispoñíbel
+      delivery_error_days: Días de fallo na entrega
+      delivery_error_hint: Se non é posible a entrega durante %{count} días, será automáticamente marcado como non entregable.
       empty: Non se atopan dominios.
       known_accounts:
         one: "%{count} conta coñecida"
@@ -489,11 +520,11 @@ gl:
     relays:
       add_new: Engadir un novo repetidor
       delete: Eliminar
-      description_html: Un <strong>repetidor da federación</strong> é un servidor intermedio que intercambia grandes volumes de toots públicos entre servidores que se suscriban e publiquen nel. <strong>Pode axudar a servidores pequenos e medios a descubrir contido no fediverso</strong>, o que de outro xeito precisaría que as usuarias locais seguisen a outra xente en servidores remotos.
+      description_html: Un <strong>repetidor da federación</strong> é un servidor intermedio que intercambia grandes volumes de publicacións públicas entre servidores que se suscriban e publiquen nel. <strong>Pode axudar a servidores pequenos e medios a descubrir contido no fediverso</strong>, o que de outro xeito precisaría que as usuarias locais seguisen a outra xente en servidores remotos.
       disable: Desactivar
       disabled: Desactivado
       enable: Activar
-      enable_hint: Unha vez activado, o teu servidor subscribirase a todos os toots públicos deste repetidor, e tamén comezará a enviar a el os toots públicos do servidor.
+      enable_hint: Unha vez activado, o teu servidor subscribirase a todas as publicacións públicas deste repetidor, e tamén comezará a enviar a el as publicacións públicas do servidor.
       enabled: Activado
       inbox_url: URL do repetidor
       pending: Agardando pola aprobación do repetidor
@@ -542,13 +573,20 @@ gl:
       unassign: Non asignar
       unresolved: Non resolto
       updated_at: Actualizado
+    rules:
+      add_new: Engadir regra
+      delete: Eliminar
+      description_html: Aínda que a maioría di que leu e acepta os termos de servizo, normalmente non os lemos ata que xurde un problema. <strong>Facilita a visualización das regras do servidor mostrándoas nunha lista de puntos.</strong> Intenta manter as regras individuais curtas e simples, mais non dividilas en demasiados elementos separados.
+      edit: Editar regra
+      empty: Aínda non se definiron as regras do servidor.
+      title: Regras do servidor
     settings:
       activity_api_enabled:
         desc_html: Conta de estados publicados de xeito local, usuarias activas, e novos rexistros en períodos semanais
-        title: Publicar estatísticas agregadas sobre a actividade da usuaria
+        title: Publicar na API estatísticas acumuladas sobre a actividade da usuaria
       bootstrap_timeline_accounts:
-        desc_html: Separar os múltiples nomes de usuaria con vírgulas. Só funcionarán as contas locais non bloqueadas. Se fica baleiro, serán todos os administradores locais.
-        title: Seguimentos por defecto para novas contas
+        desc_html: Separar os múltiples nomes de usuaria con vírgulas. Estas contas teñen garantido aparecer nas recomendacións de seguimento
+        title: Recoméndalle estas contas ás novas usuarias
       contact_information:
         email: Email de negocios
         username: Nome de usuaria de contacto
@@ -565,9 +603,6 @@ gl:
         users: Para usuarias locais conectadas
       domain_blocks_rationale:
         title: Amosar motivo
-      enable_bootstrap_timeline_accounts:
-        desc_html: Facer que as novas usuarias sigan automáticamente certas contas para que así a cronoloxía inicial non esté baleira
-        title: Activar seguimentos por omisión para novas usuarias
       hero:
         desc_html: Amosado na páxina principal. Polo menos 600x100px recomendados. Se non está definido, estará por defecto a miniatura do servidor
         title: Imaxe do heroe
@@ -576,7 +611,7 @@ gl:
         title: Imaxe da mascota
       peers_api_enabled:
         desc_html: Nomes de dominio que este servidor atopou no fediverso
-        title: Publicar listaxe de servidores descobertos
+        title: Publicar na API listaxe de servidores descobertos
       preview_sensitive_media:
         desc_html: A vista previa de ligazóns de outros sitios web mostrará unha imaxe incluso si os medios están marcados como sensibles
         title: Mostrar medios sensibles con vista previa OpenGraph
@@ -621,9 +656,6 @@ gl:
         desc_html: Podes escribir a túa propia política de privacidade, termos de servizo ou aclaracións legais. Podes empregar cancelos HTML
         title: Termos de servizo personalizados
       site_title: Nome do servidor
-      spam_check_enabled:
-        desc_html: Mastodon pode silenciar e informar automáticamente sobre contas baseándose en medidas como detectar contas que envían mensaxes non solicitadas de xeito repetido. Podería haber falsos positivos.
-        title: Anti-spam
       thumbnail:
         desc_html: Utilizado para vistas previsas vía OpenGraph e API. Recoméndase 1200x630px
         title: Icona do servidor
@@ -651,16 +683,21 @@ gl:
       media:
         title: Medios
       no_media: Sen medios
-      no_status_selected: Non se cambiou ningún estado xa que ningún foi seleccionado
-      title: Estados da conta
+      no_status_selected: Non se cambiou ningunha publicación xa que ningunha foi seleccionada
+      title: Publicacións da conta
       with_media: con medios
+    system_checks:
+      database_schema_check:
+        message_html: Existen migracións pendentes na base de datos. Bota man desta tarefa para facer que a aplicación funcione como se agarda dela
+      rules_check:
+        action: Xestionar regras do servidor
+        message_html: Non tes definidas regras para o servidor.
+      sidekiq_process_check:
+        message_html: Non hai procesos Sidekiq a funcionar para a cola(s) %{value}. Revisa a túa configuración para Sidekiq
     tags:
       accounts_today: Usos únicos hoxe
       accounts_week: Usos únicos esta semana
       breakdown: Consumo do uso diario por fonte
-      context: Contexto
-      directory: No directorio
-      in_directory: "%{count} no directorio"
       last_active: Úlimo activo
       most_popular: Máis popular
       most_recent: Máis recente
@@ -677,6 +714,7 @@ gl:
       add_new: Engadir novo
       delete: Eliminar
       edit_preset: Editar aviso preestablecido
+      empty: Non definiches os avisos prestablecidos.
       title: Xestionar avisos preestablecidos
   admin_mailer:
     new_pending_account:
@@ -707,21 +745,21 @@ gl:
       guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Todas podemos contribuír.
     sensitive_content: Contido sensible
-    toot_layout: Disposición do toot
+    toot_layout: Disposición da publicación
   application_mailer:
     notification_preferences: Cambiar os axustes de correo-e
     salutation: "%{name},"
     settings: 'Mudar as preferencias de e-mail: %{link}'
     view: 'Vista:'
     view_profile: Ver perfil
-    view_status: Ver estado
+    view_status: Ver publicación
   applications:
     created: Creouse con éxito este aplicativo
     destroyed: Eliminouse con éxito o aplicativo
     invalid_url: A URL proporcionada non é válida
     regenerate_token: Votar a xenerar o testemuño de acceso
     token_regenerated: Rexenerouse con éxito o testemuño de acceso
-    warning: Teña moito tino con estos datos. Nunca os comparta con ninguén!
+    warning: Ten moito tino con estos datos. Non os compartas nunca con ninguén!
     your_token: O seu testemuño de acceso
   auth:
     apply_for_account: Solicite un convite
@@ -851,7 +889,7 @@ gl:
     archive_takeout:
       date: Data
       download: Descargue o seu ficheiro
-      hint_html: Pode solicitar un ficheiro cos <strong>seus toots e ficheiros de medios</strong>. Os datos estarán en formato ActivityPub e son compatibles con calquer software que o siga. Pode solicitar un ficheiro cada 7 días.
+      hint_html: Pode solicitar un ficheiro coas <strong>súas publicacións e ficheiros de medios</strong>. Os datos estarán en formato ActivityPub e son compatibles con calquera software que o siga. Podes solicitar un ficheiro cada 7 días.
       in_progress: Xerando o seu ficheiro...
       request: Solicite o ficheiro
       size: Tamaño
@@ -968,7 +1006,7 @@ gl:
       limit: Acadou o número máximo de listas
   media_attachments:
     validations:
-      images_and_video: Non pode anexar un vídeo a un estado que xa contén imaxes
+      images_and_video: Non podes anexar un vídeo a unha publicación que xa contén imaxes
       not_ready: Non se poden anexar ficheiros que aínda se están a procesar. Agarda un intre!
       too_many: Non pode anexar máis de 4 ficheiros
   migrations:
@@ -1021,8 +1059,8 @@ gl:
         other: "%{count} novas notificacións desde a súa última visita \U0001F418"
       title: Na súa ausencia...
     favourite:
-      body: 'O seu estado foi marcado favorito por %{name}:'
-      subject: "%{name} marcou favorito o teu estado"
+      body: 'A túa publicación foi marcada como favorita por %{name}:'
+      subject: "%{name} marcou como favorita a túa publicación"
       title: Nova favorita
     follow:
       body: Agora %{name} séguete!
@@ -1038,10 +1076,14 @@ gl:
       body: 'Foi mencionada por %{name} en:'
       subject: Foches mencionada por %{name}
       title: Nova mención
+    poll:
+      subject: A enquisa de %{name} rematou
     reblog:
-      body: 'O seu estado foi promocionado por %{name}:'
-      subject: "%{name} promoveu o teu estado"
+      body: 'A túa publicación promovida por %{name}:'
+      subject: "%{name} promoveu a túa publicación"
       title: Nova promoción
+    status:
+      subject: "%{name} publicou"
   notifications:
     email_events: Eventos para os correos de notificación
     email_events_hint: 'Escolle os eventos sobre os que queres recibir notificacións:'
@@ -1116,16 +1158,16 @@ gl:
   remote_interaction:
     favourite:
       proceed: Darlle a favorito
-      prompt: 'Vas marcar favorito este toot:'
+      prompt: 'Vas marcar favorita esta publicación:'
     reblog:
       proceed: Darlle a promocionar
-      prompt: 'Vas promocionar este toot:'
+      prompt: 'Vas promover esta publicación:'
     reply:
       proceed: Respostar
-      prompt: 'Vas responder a este toot:'
+      prompt: 'Vas responder a esta publicación:'
   scheduled_statuses:
-    over_daily_limit: Excedeu o límite de %{limit} toots programados para ese día
-    over_total_limit: Excedeu o límite de %{limit} toots programados
+    over_daily_limit: Excedeches o límite de %{limit} publicacións programadas para ese día
+    over_total_limit: Excedeches o límite de %{limit} publicacións programadas
     too_soon: A data de programación debe estar no futuro
   sessions:
     activity: Última actividade
@@ -1190,8 +1232,6 @@ gl:
     relationships: Seguindo e seguidoras
     two_factor_authentication: Validar Dobre Factor
     webauthn_authentication: Chaves de seguridade
-  spam_check:
-    spam_detected: Esto é un informe automatizado. Detectouse Spam.
   statuses:
     attached:
       audio:
@@ -1210,14 +1250,14 @@ gl:
       one: 'contiña un cancelo non permitido: %{tags}'
       other: 'contiña uns cancelos non permitidos: %{tags}'
     errors:
-      in_reply_not_found: O estado ó cal tentas respostar semella que non existe.
+      in_reply_not_found: A publicación á que tentas respostar semella que non existe.
     language_detection: Detección automática do idioma
     open_in_web: Abrir na web
     over_character_limit: Excedeu o límite de caracteres %{max}
     pin_errors:
-      limit: Xa fixou o número máximo permitido de mensaxes
-      ownership: Non pode fixar a mensaxe de outra usuaria
-      private: As mensaxes non-públicas non poden ser fixadas
+      limit: Xa fixaches o número máximo permitido de publicacións
+      ownership: Non podes fixar a publicación doutra usuaria
+      private: As publicacións non-públicas non poden ser fixadas
       reblog: Non se poden fixar as mensaxes promovidas
     poll:
       total_people:
@@ -1234,6 +1274,7 @@ gl:
     sign_in_to_participate: Conéctese para participar na conversa
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Directa
       private: Só seguidoras
       private_long: Mostrar só as seguidoras
       public: Público
@@ -1241,8 +1282,8 @@ gl:
       unlisted: Non listado
       unlisted_long: Visible para calquera, pero non listado en liñas de tempo públicas
   stream_entries:
-    pinned: Mensaxe fixada
-    reblogged: comparteu
+    pinned: Publicación fixada
+    reblogged: promovido
     sensitive_content: Contido sensible
   tags:
     does_not_match_previous_name: non concorda co nome anterior
@@ -1367,7 +1408,7 @@ gl:
       explanation:
         disable: Cando a súa conta está conxelada, os datos permanecen intactos, pero non pode levar a fin accións ate que se desbloquea.
         sensitive: Os teus ficheiros e ligazóns a multimedia serán tratados como sensibles.
-        silence: Mentras a conta está limitada, só a xente que actualmente te segue verá os teus toots en este servidor, e poderías estar excluída de varias listaxes públicas. Porén, outras persoas poderíante seguir de xeito manual.
+        silence: Mentras a conta está limitada, só a xente que actualmente te segue verá as publicacións neste servidor, e poderías estar excluída de varias listaxes públicas. Porén, outras persoas poderíante seguir de xeito manual.
         suspend: A súa conta foi suspendida, e todos os seus toots e medios subidos foron eliminados de este servidor de xeito irreversible, e dos servidores onde tivese seguidoras.
       get_in_touch: Pode responder a este correo para contactar coa administración de %{instance}.
       review_server_policies: Revisar políticas do servidor
@@ -1402,11 +1443,8 @@ gl:
       tips: Consellos
       title: Benvida, %{name}!
   users:
-    blocked_email_provider: Este provedor de email non está permitido
     follow_limit_reached: Non pode seguir a máis de %{limit} persoas
     generic_access_help_html: Problemas para acceder a conta? Podes contactar con %{email} para obter axuda
-    invalid_email: O enderezo de correo non é válido
-    invalid_email_mx: Semella que o enderezo de email non existe
     invalid_otp_token: O código do segundo factor non é válido
     invalid_sign_in_token: Código de seguridade non válido
     otp_lost_help_html: Si perde o acceso a ambos, pode contactar con %{email}
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 7fa884cb3..300d13d62 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -24,7 +24,6 @@ he:
     people_followed_by: הנעקבים של %{name}
     people_who_follow: העוקבים של %{name}
     posts_with_replies: חצרוצים ותגובות
-    reserved_username: שם המשתמש שמור
     roles:
       admin: מנהל
       moderator: מנחה
@@ -105,17 +104,6 @@ he:
       unsubscribe: הפסקת הרשמה
       username: שם משתמש
       web: רשת
-    action_logs:
-      actions:
-        confirm_user: יש אישור מאת %{name} על כתובת הדוא"ל של %{target}
-        create_custom_emoji: "%{name} תרמה/תרם אמוג'י חדש %{target}"
-        create_domain_block: "%{name} חסמה/חסם את שם המתחם %{target}"
-        create_email_domain_block: מתחם דוא"ל %{target} הוסף לרשימה השחורה ע"י %{name}
-        demote_user: '%{name} הורד(ה) בדרגה ע"י %{target}'
-        destroy_domain_block: החסימה על מתחם %{target} הוסרה ע"י %{name}
-        destroy_email_domain_block: מתחם דוא"ל %{target} הוכנס לרשימה הלבנה ע"י %{name}
-        destroy_status: ההודעה של  %{target} הוסרה ע"י %{name}
-        disable_2fa_user: אימות דו שלבי של  %{target} הוסר ע"י %{name}
     domain_blocks:
       add_new: הוספת חדש
       created_msg: חסימת שרת בתהליך
@@ -293,5 +281,4 @@ he:
     recovery_codes_regenerated: קודי האחזור יוצרו בהצלחה
     recovery_instructions_html: במידה והגישה למכשירך תאבד, ניתן לייצר קודי אחזור למטה על מנת לאחזר גישה לחשבונך בכל עת. <strong>נא לשמור על קודי הגישה במקום בטוח</strong>. לדוגמא על ידי הדפסתם ושמירתם עם מסמכים חשובים אחרים, או שימוש בתוכנה ייעודית לניהול סיסמאות וסודות.
   users:
-    invalid_email: כתובת הדוא"ל אינה חוקית
     invalid_otp_token: קוד דו-שלבי שגוי
diff --git a/config/locales/hr.yml b/config/locales/hr.yml
index f8a659ac2..3380f7d42 100644
--- a/config/locales/hr.yml
+++ b/config/locales/hr.yml
@@ -6,7 +6,6 @@ hr:
     about_this: Dodatne informacije
     active_count_after: aktivnih
     active_footnote: Mjesečno aktivnih korisnika (MAU)
-    api: API
     apps: Mobilne aplikacije
     apps_platforms: Koristite Mastodon na iOS-u, Androidu i drugim platformama
     contact: Kontakt
@@ -30,18 +29,10 @@ hr:
     nothing_here: Ovdje nema ničeg!
     people_followed_by: Ljudi koje %{name} prati
     people_who_follow: Ljudi koji prate %{name}
-    posts:
-      few: Toota
-      one: Toot
-      other: Tootova
     posts_tab_heading: Tootovi
     posts_with_replies: Tootovi i odgovori
-    reserved_username: Korisničko ime je rezervirano
     roles:
-      admin: Admin
-      bot: Bot
       group: Grupa
-      moderator: Mod
     unavailable: Profil nije dostupan
     unfollow: Prestani pratiti
   admin:
@@ -53,7 +44,6 @@ hr:
       approve: Odobri
       approve_all: Odobri sve
       are_you_sure: Jeste li sigurni?
-      avatar: Avatar
       by_domain: Domena
       change_email:
         changed_msg: E-pošta računa uspješno je promijenjena!
@@ -76,7 +66,6 @@ hr:
       followers: Pratitelji
       follows: Praćeni
       header: Zaglavlje
-      ip: IP
       location:
         all: Sve
         local: Lokalno
@@ -110,7 +99,6 @@ hr:
     title: Prati %{acct}
   datetime:
     distance_in_words:
-      about_x_hours: "%{count}h"
       about_x_months: "%{count}mj"
       about_x_years: "%{count}god"
       almost_x_years: "%{count}god"
@@ -118,7 +106,6 @@ hr:
       less_than_x_seconds: Upravo sada
       over_x_years: "%{count}god"
       x_months: "%{count}mj"
-      x_seconds: "%{count}s"
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
@@ -135,7 +122,6 @@ hr:
       download: Preuzmite svoju arhivu
       size: Veličina
     blocks: Blokirali ste
-    csv: CSV
     lists: Liste
     storage: Pohrana medijskih sadržaja
   filters:
@@ -217,7 +203,6 @@ hr:
     next: Sljedeće
     older: Starije
     prev: Prethodno
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Već ste glasali u ovoj anketi
@@ -228,17 +213,7 @@ hr:
     prompt: 'Pratit ćete:'
   sessions:
     platforms:
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
-      mac: macOS
       other: nepoznata platforma
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Opozovi
     revoke_success: Sesija je uspješno opozvana
     title: Sesije
@@ -296,7 +271,6 @@ hr:
       subject: Dobro došli na Mastodon
       tips: Savjeti
   users:
-    invalid_email: Adresa e-pošte nije valjana
     invalid_otp_token: Nevažeći dvo-faktorski kôd
     invalid_sign_in_token: Nevažeći sigurnosni kôd
     signed_in_as: 'Prijavljeni kao:'
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 97596ff0c..1dd540683 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -1,8 +1,8 @@
 ---
 hu:
   about:
-    about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> hashtag-gel ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban.
-    about_mastodon_html: A Mastodon egy szabad webes protokollokat használó, nyílt forráskódú szociális háló. Decentralizált, akár az e-mail.
+    about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> hashtaggel ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban.
+    about_mastodon_html: 'A jövő közösségi hálózata: Hirdetések és céges megfigyelés nélkül, etikus dizájnnal és decentralizációval! Legyél a saját adataid ura a Mastodonnal!'
     about_this: Névjegy
     active_count_after: aktív
     active_footnote: Havonta aktív felhasználók
@@ -26,6 +26,8 @@ hu:
       felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni, hacsak nem akarod a teljes szervert kitiltani, mely esetben a domain tiltásának használata javasolt.
     learn_more: Tudj meg többet
     privacy_policy: Adatvédelmi szabályzat
+    rules: Szerverünk szabályai
+    rules_html: 'Alább látod azon követendő szabályok összefoglalóját, melyet be kell tartanod, ha szeretnél fiókot ezen a szerveren:'
     see_whats_happening: Nézd, mi történik
     server_stats: 'Szerver statisztika:'
     source_code: Forráskód
@@ -80,7 +82,6 @@ hu:
       other: Tülk
     posts_tab_heading: Tülkölés
     posts_with_replies: Tülkölés válaszokkal
-    reserved_username: Ez már foglalt felhasználónév
     roles:
       admin: Adminisztrátor
       bot: Bot
@@ -178,7 +179,7 @@ hu:
       removed_header_msg: A %{username} fiók fejlécét sikeresen töröltük
       resend_confirmation:
         already_confirmed: Ezt a felhasználót már megerősítették
-        send: Küldd újra a megerősítő e-mailt
+        send: Megerősítő e-mail újraküldése
         success: A megerősítő e-mail sikeresen elküldve!
       reset: Visszaállítás
       reset_password: Jelszó visszaállítása
@@ -262,46 +263,46 @@ hu:
         update_domain_block: Domain tiltás frissítése
         update_status: Állapot frissítése
       actions:
-        assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte"
-        change_email_user: "%{name} megváltoztatta %{target} felhasználó e-mail címét"
-        confirm_user: "%{name} megerősítette e-mail címét: %{target}"
-        create_account_warning: "%{name} figyelmeztetést küldött %{target} felhasználónak"
-        create_announcement: "%{name} új közleményt hozott létre %{target}"
-        create_custom_emoji: "%{name} új emodzsit töltött fel: %{target}"
-        create_domain_allow: "%{name} engedélyező listára vette %{target} domaint"
-        create_domain_block: "%{name} letiltotta az alábbi domaint: %{target}"
-        create_email_domain_block: "%{name} letiltotta az e-mail domaint: %{target}"
-        create_ip_block: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban"
-        demote_user: "%{name} lefokozta az alábbi felhasználót: %{target}"
-        destroy_announcement: "%{name} törölte a közleményt %{target}"
-        destroy_custom_emoji: "%{name} törölte az emodzsit: %{target}"
-        destroy_domain_allow: "%{name} leszedte %{target} domaint az engedélyező listáról"
-        destroy_domain_block: "%{name} engedélyezte az alábbi domaint: %{target}"
-        destroy_email_domain_block: "%{name} engedélyezte az e-mail domaint: %{target}"
-        destroy_ip_block: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban"
-        destroy_status: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}"
-        disable_2fa_user: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján"
-        disable_custom_emoji: "%{name} letiltotta az alábbi emodzsit: %{target}"
-        disable_user: "%{name} letiltotta az alábbi felhasználó bejelentkezését: %{target}"
-        enable_custom_emoji: "%{name} engedélyezte az alábbi emodzsit: %{target}"
-        enable_user: "%{name} engedélyezte az alábbi felhasználó bejelentkezését: %{target}"
-        memorialize_account: "%{name} emléket állított az alábbi felhasználónak: %{target}"
-        promote_user: "%{name} előléptette az alábbi felhasználót: %{target}"
-        remove_avatar_user: "%{name} törölte %{target} profilképét"
-        reopen_report: "%{name} újranyitotta a bejelentést: %{target}"
-        reset_password_user: "%{name} visszaállította az alábbi felhasználó jelszavát: %{target}"
-        resolve_report: "%{name} megoldotta alábbi bejelentést: %{target}"
-        sensitive_account: "%{name} szenzitívnek jelölte %{target} médiatartalmát"
-        silence_account: "%{name} lenémította %{target} felhasználói fiókját"
-        suspend_account: "%{name} felfüggesztette %{target} felhasználói fiókját"
-        unassigned_report: "%{name} törölte a %{target} bejelentés hozzárendelését"
-        unsensitive_account: "%{name} levette a szenzitív jelölést %{target} médiatartalmáról"
-        unsilence_account: "%{name} feloldotta a némítást %{target} felhasználói fiókján"
-        unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését"
-        update_announcement: "%{name} frissítette a közleményt %{target}"
-        update_custom_emoji: "%{name} frissítette az alábbi emodzsit: %{target}"
-        update_domain_block: "%{name} frissítette a %{target} domain tiltását"
-        update_status: "%{name} frissítette %{target} felhasználó tülkjét"
+        assigned_to_self_report_html: "%{name} a %{target} bejelentést magához rendelte"
+        change_email_user_html: "%{name} megváltoztatta %{target} felhasználó e-mail címét"
+        confirm_user_html: "%{name} megerősítette %{target} e-mail-címét"
+        create_account_warning_html: "%{name} figyelmeztetést küldött %{target} számára"
+        create_announcement_html: "%{name} új közleményt hozott létre: %{target}"
+        create_custom_emoji_html: "%{name} új emodzsit töltött fel: %{target}"
+        create_domain_allow_html: "%{name} engedélyezte a föderációt %{target} domainnel"
+        create_domain_block_html: "%{name} letiltotta a %{target} domaint"
+        create_email_domain_block_html: "%{name} letiltotta a %{target} e-mail domaint"
+        create_ip_block_html: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban"
+        demote_user_html: "%{name} lefokozta %{target} felhasználót"
+        destroy_announcement_html: "%{name} törölte a %{target} közleményt"
+        destroy_custom_emoji_html: "%{name} törölte a %{target} emodzsit"
+        destroy_domain_allow_html: "%{name} letiltotta a föderációt a %{target} domainnel"
+        destroy_domain_block_html: "%{name} engedélyezte a %{target} domaint"
+        destroy_email_domain_block_html: "%{name} engedélyezte a %{target} e-mail domaint"
+        destroy_ip_block_html: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban"
+        destroy_status_html: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}"
+        disable_2fa_user_html: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján"
+        disable_custom_emoji_html: "%{name} letiltotta a %{target} emodzsit"
+        disable_user_html: "%{name} letiltotta %{target} felhasználó bejelentkezését"
+        enable_custom_emoji_html: "%{name} engedélyezte a %{target} emodzsit"
+        enable_user_html: "%{name} engedélyezte %{target} felhasználó bejelentkezését"
+        memorialize_account_html: "%{name} emléket állított %{target} felhasználónak"
+        promote_user_html: "%{name} előléptette %{target} felhasználót"
+        remove_avatar_user_html: "%{name} törölte %{target} profilképét"
+        reopen_report_html: "%{name} újranyitotta a %{target} bejelentést"
+        reset_password_user_html: "%{name} visszaállította %{target} felhasználó jelszavát"
+        resolve_report_html: "%{name} megoldotta a %{target} bejelentést"
+        sensitive_account_html: "%{name} szenzitívnek jelölte %{target} médiatartalmát"
+        silence_account_html: "%{name} lenémította %{target} felhasználói fiókját"
+        suspend_account_html: "%{name} felfüggesztette %{target} felhasználói fiókját"
+        unassigned_report_html: "%{name} törölte a %{target} bejelentés hozzárendelését"
+        unsensitive_account_html: "%{name} levette a szenzitív jelölést %{target} médiatartalmáról"
+        unsilence_account_html: "%{name} feloldotta a némítást %{target} felhasználói fiókján"
+        unsuspend_account_html: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését"
+        update_announcement_html: "%{name} frissítette a %{target} közleményt"
+        update_custom_emoji_html: "%{name} frissítette a %{target} emodzsit"
+        update_domain_block_html: "%{name} frissítette a %{target} domain tiltását"
+        update_status_html: "%{name} frissítette %{target} felhasználó tülkjét"
       deleted_status: "(törölt tülk)"
       empty: Nem található napló.
       filter_by_action: Szűrés művelet alapján
@@ -316,10 +317,12 @@ hu:
       new:
         create: Közlemény létrehozása
         title: Új közlemény
+      publish: Közzététel
       published_msg: A közlemény sikeresen publikálva!
       scheduled_for: Ekkorra ütemezve %{time}
       scheduled_msg: A közlemény közzétételre beütemezve!
       title: Közlemények
+      unpublish: Közzététel visszavonása
       unpublished_msg: A közlemény közzététele sikeresen visszavonva!
       updated_msg: A közlemény sikeresen frissítve!
     custom_emojis:
@@ -364,7 +367,6 @@ hu:
       feature_profile_directory: Profil adatbázis
       feature_registrations: Regisztráció
       feature_relay: Föderációs relé
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Idővonal betekintő
       features: Funkciók
       hidden_service: Föderáció rejtett szolgáltatásokkal
@@ -442,6 +444,14 @@ hu:
         create: Domain hozzáadása
         title: Új e-mail domain tiltása
       title: Tiltott e-mail domainek
+    follow_recommendations:
+      description_html: "<strong>A követési ajánlatok segítik az új felhasználókat az érdekes tartalmak gyors megtalálásában</strong>. Ha egy felhasználó még nem érintkezett eleget másokkal ahhoz, hogy személyre szabott ajánlatokat kapjon, ezeket a fiókokat ajánljuk helyette. Ezeket naponta újraszámítjuk a nemrég legtöbb embert foglalkoztató, illetve legtöbb helyi követővel rendelkező fiókok alapján."
+      language: Ezen a nyelven
+      status: Állapot
+      suppress: Követési ajánlatok elnémítása
+      suppressed: Elnémítva
+      title: Követési ajánlatok
+      unsuppress: Követési ajánlatok visszaállítása
     instances:
       by_domain: Domain
       delivery_available: Kézbesítés elérhető
@@ -544,6 +554,13 @@ hu:
       unassign: Hozzárendelés törlése
       unresolved: Megoldatlan
       updated_at: Frissítve
+    rules:
+      add_new: Szabály hozzáadása
+      delete: Törlés
+      description_html: Bár a többség azt állítja, hogy elolvasták és egyetértenek a felhasználói feltételekkel, általában ez nem teljesül, amíg egy probléma elő nem jön. <strong>Tedd könnyebbé a szervered szabályinak áttekintését azzal, hogy pontokba foglalod azt egy listába.</strong> Próbáld meg a különálló szabályokat megtartani rövidnek, egyszerűnek, de próbáld meg azt is, hogy nem darabolod fel őket sok különálló kis pontra.
+      edit: Szabály szerkesztése
+      empty: Nincsenek még szerver szabályok definiálva.
+      title: Szerverszabályzat
     settings:
       activity_api_enabled:
         desc_html: Helyi tülkök, aktív felhasználók és új regisztrációk száma heti bontásban
@@ -567,9 +584,6 @@ hu:
         users: Bejelentkezett helyi felhasználóknak
       domain_blocks_rationale:
         title: Mutasd meg az indokolást
-      enable_bootstrap_timeline_accounts:
-        desc_html: Az új felhasználók automatikusan követik a beállított fiókokat, így a Saját idővonaluk kezdéskor nem lesz üres
-        title: Alapértelmezett követés engedélyezése új felhasználóknak
       hero:
         desc_html: A kezdőoldalon látszik. Legalább 600x100px méret javasolt. Ha nincs beállítva, a szerver bélyegképet használjuk
         title: Hősi kép
@@ -623,9 +637,6 @@ hu:
         desc_html: Megírhatod saját adatkezelési szabályzatodat, felhasználási feltételeidet vagy más hasonló jellegű dokumentumodat. HTML-tageket is használhatsz
         title: Egyedi felhasználási feltételek
       site_title: A szerver neve
-      spam_check_enabled:
-        desc_html: A Mastodon automatikusan elnémíthatja és bejelentheti azokat a fiókokat, akik rendszeresen kéretlen üzeneteket küldenek. Persze lehetnek tévedések is.
-        title: Automatikus anti-spam
       thumbnail:
         desc_html: OpenGraph-os és API-s előnézetekben használjuk. Ajánlott mérete 1200x630 pixel
         title: A szerver bélyegképe
@@ -656,13 +667,18 @@ hu:
       no_status_selected: Nem változtattunk meg semmit, mert semmi sem volt kiválasztva
       title: Felhasználó tülkjei
       with_media: Médiafájlokkal
+    system_checks:
+      database_schema_check:
+        message_html: Vannak elintézetlen adatbázis migrációink. Kérlek, futtasd őket, hogy biztosítsd, az alkalmazás megfelelően működik
+      rules_check:
+        action: Szerver szabályok menedzselése
+        message_html: Még nem definiáltál egy szerver szabályt sem.
+      sidekiq_process_check:
+        message_html: Nincs Sidekiq folyamat, mely a %{value} sorhoz van rendelve. Kérlek, nézd át a Sidekiq beállításait
     tags:
       accounts_today: Egyedi használat a mai napon
       accounts_week: Egyedi használat ezen a héten
       breakdown: Mai használat bontása forrás szerint
-      context: Környezet
-      directory: Katalógusban
-      in_directory: "%{count} a katalógusban"
       last_active: Utoljára aktív
       most_popular: Legnépszerűbb
       most_recent: Legutóbbi
@@ -679,6 +695,7 @@ hu:
       add_new: Új hozzáadása
       delete: Törlés
       edit_preset: Figyelmeztetés szerkesztése
+      empty: Nem definiáltál még egyetlen figyelmeztetést sem.
       title: Figyelmeztetések
   admin_mailer:
     new_pending_account:
@@ -942,7 +959,7 @@ hu:
       following: Követettjeid listája
       muting: Némított felhasználók listája
     upload: Feltöltés
-  in_memoriam_html: In Memoriam.
+  in_memoriam_html: Emlékünkben.
   invites:
     delete: Visszavonás
     expired: Lejárt
@@ -1040,10 +1057,14 @@ hu:
       body: "%{name} megemlített téged:"
       subject: "%{name} megemlített téged"
       title: Új említés
+    poll:
+      subject: "%{name} szavazása véget ért"
     reblog:
       body: 'A tülködet %{name} megtolta:'
       subject: "%{name} megtolta a tülködet"
       title: Új megtolás
+    status:
+      subject: "%{name} tülkölt egyet"
   notifications:
     email_events: Események email értesítésekhez
     email_events_hint: 'Válaszd ki azokat az eseményeket, melyekről értesítést szeretnél:'
@@ -1192,13 +1213,11 @@ hu:
     relationships: Követések és követők
     two_factor_authentication: Kétlépcsős hitelesítés
     webauthn_authentication: Biztonsági kulcsok
-  spam_check:
-    spam_detected: Ez egy automatikus jelentés. Spamet érzékeltünk.
   statuses:
     attached:
       audio:
         one: "%{count} audio"
-        other: "%{count} audio"
+        other: "%{count} hang"
       description: 'Csatolva: %{attached}'
       image:
         one: "%{count} kép"
@@ -1234,8 +1253,9 @@ hu:
     show_older: Régebbiek mutatása
     show_thread: Szál mutatása
     sign_in_to_participate: Jelentkezz be, hogy részt vehess a beszélgetésben
-    title: '%{name}: "%{quote}"'
+    title: "%{name}: „%{quote}”"
     visibilities:
+      direct: Közvetlen
       private: Csak követőknek
       private_long: A tülk csak követőidnek jelenik meg
       public: Nyilvános
@@ -1404,11 +1424,8 @@ hu:
       tips: Tippek
       title: Üdv a fedélzeten, %{name}!
   users:
-    blocked_email_provider: Ez az email szolgáltató nem engedélyezett
     follow_limit_reached: Nem követhetsz több, mint %{limit} embert
     generic_access_help_html: Nem tudod elérni a fiókodat? Segítségért lépj kapcsolatba velünk ezen %{email}
-    invalid_email: A megadott e-mail cím helytelen
-    invalid_email_mx: Az email cím nem tűnik létezőnek
     invalid_otp_token: Érvénytelen ellenőrző kód
     invalid_sign_in_token: Érvénytelen biztonsági kód
     otp_lost_help_html: Ha mindkettőt elvesztetted, kérhetsz segítséget itt %{email}
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index 0cfae56ef..fb694709c 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -21,11 +21,11 @@ hy:
     federation_hint_html: "%{instance} հանգոյցում հաշիւ բացելով կարող ես հետեւել այլ մարդկանց Մաստադոնի ցանկացած հանգոյցից և ոչ միայն։"
     get_apps: Փորձեք բջջային հավելվածը
     hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում
-    instance_actor_flash: 'Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։
-
-'
+    instance_actor_flash: "Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ \n"
     learn_more: Իմանալ ավելին
     privacy_policy: Գաղտնիության քաղաքականություն
+    rules: Սերվերի կանոնները
+    rules_html: Ներքևում կանոնների ամփոփագիր է, որին պետք է հետևեք, եթե ցանկանում եք այս սերվերում ունենան Mastodon-ի հաշիվ
     see_whats_happening: Տես ինչ ա կատարվում
     server_stats: Սերվերի վիճակը․
     source_code: Ելատեքստ
@@ -78,7 +78,6 @@ hy:
       other: Թութերից
     posts_tab_heading: Թթեր
     posts_with_replies: Թթեր եւ պատասխաններ
-    reserved_username: Ծածկանունն արդէն վերցուած է
     roles:
       admin: Ադմինիստրատոր
       bot: Բոտ
@@ -259,47 +258,6 @@ hy:
         update_custom_emoji: Թարմացնել սեփական էմոջիները
         update_domain_block: Թարմացնել տիրոյթի արգելափակումը
         update_status: Թարմացնել գրառումը
-      actions:
-        assigned_to_self_report: "%{name} բողոքել է %{target} իրենց համար"
-        change_email_user: "%{name} փոփոխել է %{target} օգտատիրոջ էլ․ հասցէն"
-        confirm_user: "%{name} հաստատել է %{target} օգտատիրոջ էլ․ հասցէն"
-        create_account_warning: "%{name} զգուշացրել է %{target}ին"
-        create_announcement: "%{name} ստեղծեց նոր յայտարարութիւն %{target}"
-        create_custom_emoji: "%{name} վերբեռնել է նոր էմոջի՝ %{target}"
-        create_domain_allow: "%{name} թոյլատրել ֆեդերացիան %{target} տիրոյթի հետ"
-        create_domain_block: "%{name} արգելափակեց %{target} տիրոյթը"
-        create_email_domain_block: "%{name} արգելափակեց էլ․ փոստի տիրոյթ %{target}"
-        create_ip_block: "%{name} ստեղծեց կանոն %{target} IP֊ի համար"
-        demote_user: "%{name} աստիճանազրկեց օգտատիրոջ %{target}"
-        destroy_announcement: "%{name} ջնջեց յայտարարութիւն %{target}"
-        destroy_custom_emoji: "%{name} ջնջել է %{target} էմոջին"
-        destroy_domain_allow: "%{name} չթոյլատրեց ֆեդերացիան %{target} տիրոյթի հետ"
-        destroy_domain_block: "%{name} ապաարգելափակեց տիրոյթ %{target}"
-        destroy_email_domain_block: "%{name} ապաարգելափակեց էլ․ փոստի տիրոյթ %{target}"
-        destroy_ip_block: "%{name} ջնջեց կանոնը %{target} IP֊ի համար"
-        destroy_status: "%{name} ջնջեց %{target}ի գրառում"
-        disable_2fa_user: "%{name}ը կասեցրեց 2F պահանջը %{target} օգտատիրոջ համար"
-        disable_custom_emoji: "%{name} ապակտիւացրել է %{target} էմոջին"
-        disable_user: "%{name} անջատել է մուտքը %{target} օգտատիրոջ համար"
-        enable_custom_emoji: "%{name} ակտիվացրել է %{target} էմոջին"
-        enable_user: "%{name} թոյլատրեց մուտք %{target} օգտատիրոջ համար"
-        memorialize_account: "%{name} դարձրեց %{target}ի հաշիւը յիշատակի էջ"
-        promote_user: "%{name} աջակցեց օգտատիրոջը %{target}"
-        remove_avatar_user: "%{name} հեռացրեց %{target}ի աւատարը"
-        reopen_report: "%{name} վերաբացեց բողոք %{target}"
-        reset_password_user: "%{name} վերականգնեց օգտատիրոջ գաղտնաբառը %{target}"
-        resolve_report: "%{name} լուծարեց բողոքը %{target}"
-        sensitive_account: "%{name}ը նշեց %{target}ի մեդիան որպէս զգայուն"
-        silence_account: "%{name} լռեցրեց %{target}ի հաշիւը"
-        suspend_account: "%{name} լռեցրեց %{target}ի հաշիւը"
-        unassigned_report: "%{name} չսահմանուած բողոք %{target}"
-        unsensitive_account: "%{name}ը հեռացրեց %{target}֊ի մեդիայի զգայուն նշումը"
-        unsilence_account: "%{name}֊ը հանեց լռեցումը %{target}֊ի հաշուից"
-        unsuspend_account: "%{name}ը ապակասեցրեց %{target}ի հաշիւը"
-        update_announcement: "%{name}ը թարմացրեց %{target}ի յայտարարութիւնը"
-        update_custom_emoji: "%{name} թարմացրել է %{target} էմոջին"
-        update_domain_block: "%{name}ը թարմացրեց %{target}ի տիրոյթի արգելափակումը"
-        update_status: "%{name}ը թարմացրեց %{target}ի կարգավիճակը"
       deleted_status: "(ջնջուած գրառում)"
       empty: Ոչ մի գրառում չկայ։
       filter_by_action: Զտել ըստ գործողութեան
@@ -361,7 +319,6 @@ hy:
       feature_profile_directory: Օգտատիրոջ մատեան
       feature_registrations: Գրանցումներ
       feature_relay: Ֆեդերացիայի շերտ
-      feature_spam_check: Հակա-սպամ
       feature_timeline_preview: Հոսքի նախադիտում
       features: Յատկանիշներ
       hidden_service: Ֆեդերացիա թաքնուած ծառայութիւնների հետ
@@ -569,7 +526,6 @@ hy:
       title: Օգտատիրոջ գրառումները
       with_media: Մեդիայի հետ
     tags:
-      context: Համատեքստ
       last_active: Վերջին ակտիւութիւնը
       most_popular: Ամէնայայտնի
       most_recent: Վերջին
@@ -595,11 +551,9 @@ hy:
     discovery: Բացայայտում
     localization:
       body: Մաստոդոնը թարգմանուում է կամաւորների կողմից։
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Աջակցել կարող են բոլորը։
     sensitive_content: Զգայուն բովանդակութիւն
   application_mailer:
-    salutation: "%{name},"
     view: Նայել․
     view_profile: Նայել անձնական էջը
     view_status: Նայել գրառումը
@@ -619,9 +573,6 @@ hy:
     logout: Դուրս գալ
     migrate_account: Տեղափոխուել այլ հաշիւ
     or_log_in_with: Կամ մուտք գործել օգտագործելով՝
-    providers:
-      cas: CAS
-      saml: SAML
     register: Գրանցվել
     registration_closed: "%{instance}ը չի ընդունում նոր անդամներ"
     reset_password: Վերականգնել գաղտանաբառը
@@ -650,7 +601,6 @@ hy:
       invalid_signature: անվաւեր Ed25519 բանալի
   date:
     formats:
-      default: "%b %d, %Y"
       with_month_name: "%d %B %Y"
   datetime:
     distance_in_words:
@@ -698,7 +648,6 @@ hy:
       size: Չափը
     blocks: Արգելափակել
     bookmarks: Էջանիշեր
-    csv: CSV
     domain_blocks: Տիրոյթի արգելափակումներ
     lists: Ցանկեր
     mutes: Լռեցրել ես
@@ -823,7 +772,6 @@ hy:
     next: Հաջորդ
     older: Ավելի հին
     prev: Նախորդ
-    truncate: "&hellip;"
   polls:
     errors:
       duration_too_short: շատ կարճ է
@@ -852,38 +800,12 @@ hy:
     activity: Վերջին թութը
     browser: Դիտարկիչ
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Անհայտ դիտարկիչ
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     description: "%{browser}, %{platform}"
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
       android: Անդրոիդ
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
       linux: Լինուքս
-      mac: macOS
       other: անհայտ հարթակ
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Չեղարկել
     title: Սեսսիա
   settings:
@@ -931,7 +853,6 @@ hy:
     show_more: Աւելին
     show_thread: Բացել շղթան
     sign_in_to_participate: Մուտք գործէք՝ զրոյցին միանալու համար
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Միայն հետեւողներին
       private_long: Հասանելի միայն հետեւորդներին
@@ -1032,10 +953,6 @@ hy:
     contrast: Mastodon (բարձր կոնտրաստով)
     default: Mastodon (Մուգ)
     mastodon-light: Mastodon (Լուսավոր)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Ավելացնել
     disable: Անջատել
@@ -1071,9 +988,6 @@ hy:
       tip_local_timeline: Տեղական հոսքում երևում են %{instance} հանգոյցի օգտատերի գրառումները։ Նրանք քո հանգոյցի հարևաններն են։
       tips: Հուշումներ
   users:
-    blocked_email_provider: Սույն էլփոստի տրամադրողը արգելված է
-    invalid_email: Էլ․ հասցէն անվաւեր է
-    invalid_email_mx: Այս հասցէն կարծես թէ գոյութիւն չունի
     invalid_otp_token: Անվաւեր 2F կոդ
     invalid_sign_in_token: Անվաւեր անվտանգութեան կոդ
     signed_in_as: Մոտք գործել որպէս․
diff --git a/config/locales/id.yml b/config/locales/id.yml
index bf63f62a4..31f2ae62f 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -8,7 +8,7 @@ id:
     active_footnote: Pengguna Aktif Bulanan (PAB)
     administered_by: 'Dikelola oleh:'
     api: API
-    apps: Aplikasi hp
+    apps: Aplikasi mobile
     apps_platforms: Gunakan Mastodon dari iOS, Android, dan platform lain
     browse_directory: Jelajahi direktori profil dan saring sesuai minat
     browse_local_posts: Jelajahi siaran langsung dari pos publik server ini
@@ -21,11 +21,11 @@ id:
     federation_hint_html: Dengan akun di %{instance} Anda dapat mengikuti orang di server Mastodon mana pun dan di luarnya.
     get_apps: Coba aplikasi mobile
     hosted_on: Mastodon dihosting di %{domain}
-    instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain.
-
-'
+    instance_actor_flash: "Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. \n"
     learn_more: Pelajari selengkapnya
     privacy_policy: Kebijakan Privasi
+    rules: Aturan server
+    rules_html: 'Di bawah ini adalah ringkasan aturan yang perlu Anda ikuti jika Anda ingin memiliki akun di server Mastodon ini:'
     see_whats_happening: Lihat apa yang sedang terjadi
     server_stats: 'Statistik server:'
     source_code: Kode sumber
@@ -74,7 +74,6 @@ id:
       other: Toot
     posts_tab_heading: Toot
     posts_with_replies: Toot dan balasan
-    reserved_username: Nama pengguna telah dipesan
     roles:
       admin: Admin
       bot: Bot
@@ -119,7 +118,7 @@ id:
       display_name: Nama
       domain: Domain
       edit: Ubah
-      email: E-mail
+      email: Email
       email_status: Status Email
       enable: Aktifkan
       enabled: Diaktifkan
@@ -174,7 +173,7 @@ id:
         already_confirmed: Pengguna ini sudah dikonfirmasi
         send: Kirim ulang email konfirmasi
         success: Email konfirmasi berhasil dikirim!
-      reset: Reset
+      reset: Atur ulang
       reset_password: Reset kata sandi
       resubscribe: Langganan ulang
       role: Hak akses
@@ -225,6 +224,7 @@ id:
         create_domain_block: Buat Blokir Domain
         create_email_domain_block: Buat Email Blokir Domain
         create_ip_block: Buat aturan IP
+        create_unavailable_domain: Buat Domain yang Tidak Tersedia
         demote_user: Turunkan Pengguna
         destroy_announcement: Hapus Pengumuman
         destroy_custom_emoji: Hapus Emoji Khusus
@@ -233,6 +233,7 @@ id:
         destroy_email_domain_block: Hapus email blokir domain
         destroy_ip_block: Hapus aturan IP
         destroy_status: Hapus Status
+        destroy_unavailable_domain: Hapus Domain yang Tidak Tersedia
         disable_2fa_user: Nonaktifkan 2FA
         disable_custom_emoji: Nonaktifkan Emoji Khusus
         disable_user: Nonaktifkan Pengguna
@@ -256,46 +257,48 @@ id:
         update_domain_block: Perbarui Blokir Domain
         update_status: Perbarui Status
       actions:
-        assigned_to_self_report: "%{name} menugaskan laporan %{target} kpd dirinya sendiri"
-        change_email_user: "%{name} mengubah alamat email pengguna %{target}"
-        confirm_user: "%{name} mengonfirmasi alamat email pengguna %{target}"
-        create_account_warning: "%{name} mengirim peringatan untuk %{target}"
-        create_announcement: "%{name} membuat pengumuman baru %{target}"
-        create_custom_emoji: "%{name} mengunggah emoji baru %{target}"
-        create_domain_allow: "%{name} memasukkan ke daftar putih domain %{target}"
-        create_domain_block: "%{name} memblokir domain %{target}"
-        create_email_domain_block: "%{name} memblokir domain email %{target}"
-        create_ip_block: "%{name} membuat aturan untuk IP %{target}"
-        demote_user: "%{name} menurunkan pengguna %{target}"
-        destroy_announcement: "%{name} menghapus pengumuman %{target}"
-        destroy_custom_emoji: "%{name} menghapus emoji %{target}"
-        destroy_domain_allow: "%{name} menghapus domain %{target} dari daftar putih"
-        destroy_domain_block: "%{name} membuka blokir domain %{target}"
-        destroy_email_domain_block: "%{name} membuka blokir domain email %{target}"
-        destroy_ip_block: "%{name} menghapus aturan untuk IP %{target}"
-        destroy_status: "%{name} menghapus status %{target}"
-        disable_2fa_user: "%{name} mematikan syarat dua faktor utk pengguna %{target}"
-        disable_custom_emoji: "%{name} mematikan emoji %{target}"
-        disable_user: "%{name} mematikan login untuk pengguna %{target}"
-        enable_custom_emoji: "%{name} mengaktifkan emoji %{target}"
-        enable_user: "%{name} mengaktifkan login untuk pengguna %{target}"
-        memorialize_account: "%{name} mengubah akun %{target} jadi halaman memorial"
-        promote_user: "%{name} mempromosikan pengguna %{target}"
-        remove_avatar_user: "%{name} menghapus avatar %{target}"
-        reopen_report: "%{name} membuka ulang laporan %{target}"
-        reset_password_user: "%{name} mereset kata sandi pengguna %{target}"
-        resolve_report: "%{name} menyelesaikan laporan %{target}"
-        sensitive_account: "%{name} menandai media %{target} sebagai sensitif"
-        silence_account: "%{name} membungkam akun %{target}"
-        suspend_account: "%{name} menangguhkan akun %{target}"
-        unassigned_report: "%{name} tidak menugaskan laporan %{target}"
-        unsensitive_account: "%{name} membatalkan tanda media %{target} sebagai sensitif"
-        unsilence_account: "%{name} menghapus bungkaman akun %{target}"
-        unsuspend_account: "%{name} menghapus penangguhan akun %{target}"
-        update_announcement: "%{name} memperbarui pengumuman %{target}"
-        update_custom_emoji: "%{name} memperbarui emoji %{target}"
-        update_domain_block: "%{name} memperbarui blokir domain untuk %{target}"
-        update_status: "%{name} memperbarui status %{target}"
+        assigned_to_self_report_html: "%{name} menugaskan laporan %{target} ke dirinya sendiri"
+        change_email_user_html: "%{name} mengubah alamat email pengguna %{target}"
+        confirm_user_html: "%{name} mengonfirmasi alamat email pengguna %{target}"
+        create_account_warning_html: "%{name} mengirim peringatan untuk %{target}"
+        create_announcement_html: "%{name} membuat pengumuman baru %{target}"
+        create_custom_emoji_html: "%{name} mengunggah emoji baru %{target}"
+        create_domain_allow_html: "%{name} mengizinkan penggabungan dengan domain %{target}"
+        create_domain_block_html: "%{name} memblokir domain %{target}"
+        create_email_domain_block_html: "%{name} memblokir domain email %{target}"
+        create_ip_block_html: "%{name} membuat aturan untuk IP %{target}"
+        create_unavailable_domain_html: "%{name} menghentikan pengiriman ke domain %{target}"
+        demote_user_html: "%{name} menurunkan pengguna %{target}"
+        destroy_announcement_html: "%{name} menghapus pengumuman %{target}"
+        destroy_custom_emoji_html: "%{name} menghapus emoji %{target}"
+        destroy_domain_allow_html: "%{name} membatalkan izin penggabungan dengan domain %{target}"
+        destroy_domain_block_html: "%{name} membuka blokir domain %{target}"
+        destroy_email_domain_block_html: "%{name} membuka blokir domain email %{target}"
+        destroy_ip_block_html: "%{name} menghapus aturan untuk IP %{target}"
+        destroy_status_html: "%{name} menghapus status %{target}"
+        destroy_unavailable_domain_html: "%{name} melanjutkan pengiriman ke domain %{target}"
+        disable_2fa_user_html: "%{name} mematikan syarat dua faktor utk pengguna %{target}"
+        disable_custom_emoji_html: "%{name} mematikan emoji %{target}"
+        disable_user_html: "%{name} mematikan login untuk pengguna %{target}"
+        enable_custom_emoji_html: "%{name} mengaktifkan emoji %{target}"
+        enable_user_html: "%{name} mengaktifkan login untuk pengguna %{target}"
+        memorialize_account_html: "%{name} mengubah akun %{target} jadi halaman memorial"
+        promote_user_html: "%{name} mempromosikan pengguna %{target}"
+        remove_avatar_user_html: "%{name} menghapus avatar %{target}"
+        reopen_report_html: "%{name} membuka ulang laporan %{target}"
+        reset_password_user_html: "%{name} mereset kata sandi pengguna %{target}"
+        resolve_report_html: "%{name} menyelesaikan laporan %{target}"
+        sensitive_account_html: "%{name} menandai media %{target} sebagai sensitif"
+        silence_account_html: "%{name} membisukan akun %{target}"
+        suspend_account_html: "%{name} menangguhkan akun %{target}"
+        unassigned_report_html: "%{name} membatalkan penugasan laporan %{target}"
+        unsensitive_account_html: "%{name} membatalkan tanda media %{target} sebagai sensitif"
+        unsilence_account_html: "%{name} membunyikan akun %{target}"
+        unsuspend_account_html: "%{name} membatalkan penangguhan akun %{target}"
+        update_announcement_html: "%{name} memperbarui pengumuman %{target}"
+        update_custom_emoji_html: "%{name} memperbarui emoji %{target}"
+        update_domain_block_html: "%{name} memperbarui blokir domain untuk %{target}"
+        update_status_html: "%{name} memperbarui status %{target}"
       deleted_status: "(status dihapus)"
       empty: Log tidak ditemukan.
       filter_by_action: Filter berdasarkan tindakan
@@ -310,10 +313,12 @@ id:
       new:
         create: Buat pengumuman
         title: Pengumuman baru
+      publish: Terbitkan
       published_msg: Pengumuman berhasil diterbitkan!
       scheduled_for: Dijadwalkan untuk %{time}
       scheduled_msg: Pengumuman dijadwalkan untuk publikasi!
       title: Pengumuman
+      unpublish: Batal terbitkan
       unpublished_msg: Pengumuman berhasil ditarik!
       updated_msg: Pengumuman berhasil diperbarui!
     custom_emojis:
@@ -358,7 +363,6 @@ id:
       feature_profile_directory: Direktori profil
       feature_registrations: Registrasi
       feature_relay: Relai federasi
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Pratinjau linimasa
       features: Fitur
       hidden_service: Federasi dengan layanan tersembunyi
@@ -398,6 +402,8 @@ id:
           silence: Pendiaman
           suspend: Suspen
         title: Pemblokiran domain baru
+      obfuscate: Nama domain kabur
+      obfuscate_hint: Mengaburkan nama domain sebagian di daftar jika pengiklanan batasan daftar domain diaktifkan
       private_comment: Komentar pribadi
       private_comment_hint: Komentar tentang pembatasan domain ini untuk penggunaan internal oleh moderator.
       public_comment: Komentar publik
@@ -433,9 +439,33 @@ id:
         create: Tambah domain
         title: Blokir domain email baru
       title: Domain email terblokir
+    follow_recommendations:
+      description_html: <strong>"Rekomendasi untuk diikuti" membantu pengguna baru untuk secara cepat menemukan konten yang menarik</strong>. Ketika pengguna belum cukup berinteraksi dengan lainnya sehingga belum memunculkan rekomendasi, akun-akun ini akan direkomendasikan. Mereka dihitung ulang secara harian dari campuran akun-akun dengan keterlibatan tertinggi baru-baru ini dan jumlah pengikut lokal tertinggi untuk bahasa tertentu.
+      language: Untuk bahasa
+      status: Status
+      suppress: Hapus akun yang direkomendasikan untuk diikuti
+      suppressed: Dihapus
+      title: Rekomendasi untuk diikuti
+      unsuppress: Kembalikan rekomendasi untuk diikuti
     instances:
+      back_to_all: Semua
+      back_to_limited: Terbatas
+      back_to_warning: Peringatan
       by_domain: Domain
+      delivery:
+        all: Semua
+        clear: Hapus galat pengiriman
+        restart: Mulai ulang pengiriman
+        stop: Setop pengiriman
+        title: Pengiriman
+        unavailable: Tidak tersedia
+        unavailable_message: Pengiriman tidak tersedia
+        warning: Peringatan
+        warning_message:
+          other: Kegagalan pengiriman %{count} hari
       delivery_available: Pengiriman tersedia
+      delivery_error_days: Lama hari pengiriman galat
+      delivery_error_hint: Jika pengiriman tidak terjadi selama %{count} hari, ia akan ditandai secara otomatis sebagai tidak terkirim.
       empty: Domain tidak ditemukan.
       known_accounts:
         other: "%{count} akun yang dikenal"
@@ -532,6 +562,13 @@ id:
       unassign: Bebas Tugas
       unresolved: Belum Terseleseikan
       updated_at: Diperbarui
+    rules:
+      add_new: Tambah aturan
+      delete: Hapus
+      description_html: Saat kebanyakan mengklaim sudah membaca dan menyetujui ketentuan layanan, biasanya orang-orang tidak membacanya sampai masalah muncul. <strong>Lebih mudah melihat sepintas aturan server Anda dengan menampilkannya dalam daftar bulatan</strong>. Coba buat aturan individu sependek dan sesederhana mungkin, tapi coba jangan memisahkannya ke dalam item terpisah yang sangat banyak.
+      edit: Edit aturan
+      empty: Belum ada aturan server yang didefinisikan.
+      title: Aturan server
     settings:
       activity_api_enabled:
         desc_html: Hitung status yang dipos scr lokal, pengguna aktif, dan registrasi baru dlm keranjang bulanan
@@ -555,9 +592,6 @@ id:
         users: Ke pengguna lokal yang sudah login
       domain_blocks_rationale:
         title: Tampilkan alasan
-      enable_bootstrap_timeline_accounts:
-        desc_html: Buat pengguna baru mengikuti akun yang sudah dipilih agar beranda mereka tidak kosong
-        title: Aktifkan opsi ikuti otomatis untuk pengguna baru
       hero:
         desc_html: Ditampilkan di halaman depan. Direkomendasikan minimal 600x100px. Jika tidak diatur, kembali ke server gambar kecil
         title: Gambar pertama
@@ -611,9 +645,6 @@ id:
         desc_html: Anda dapat menulis kebijakan privasi, ketentuan layanan, atau hal legal lainnya sendiri. Anda dapat menggunakan tag HTML
         title: Ketentuan layanan kustom
       site_title: Judul Situs
-      spam_check_enabled:
-        desc_html: Mastodon dapat melaporkan secara otomatis akun yang mengirimkan pesan berulang tanpa diminta. Ini mungkin ada kesalahan.
-        title: Automasi anti-spam
       thumbnail:
         desc_html: Dipakai sebagai pratinjau via OpenGraph dan API. Direkomendasikan 1200x630px
         title: Server gambar kecil
@@ -644,13 +675,18 @@ id:
       no_status_selected: Tak ada status yang berubah karena tak ada yang dipilih
       title: Status akun
       with_media: Dengan media
+    system_checks:
+      database_schema_check:
+        message_html: Ada proses migrasi basis data tertunda. Silakan jalankan untuk memastikan aplikasi bekerja seperti yang diharapkan
+      rules_check:
+        action: Kelola aturan server
+        message_html: Anda belum menentukan aturan server apapun.
+      sidekiq_process_check:
+        message_html: Tidak ada proses Sidekiq yang berjalan untuk %{value} antrian. Silakan tinjau konfigurasi Sidekiq Anda
     tags:
       accounts_today: Penggunaan unik hari ini
       accounts_week: Penggunaan unik minggu ini
       breakdown: Rinci penggunaan hari ini berdasar sumber
-      context: Konteks
-      directory: Di direktori
-      in_directory: "%{count} di direktori"
       last_active: Terakhir aktif
       most_popular: Paling populer
       most_recent: Terkini
@@ -667,6 +703,7 @@ id:
       add_new: Tambah baru
       delete: Hapus
       edit_preset: Sunting preset peringatan
+      empty: Anda belum mendefinisikan peringatan apapun.
       title: Kelola preset peringatan
   admin_mailer:
     new_pending_account:
@@ -1024,10 +1061,14 @@ id:
       body: 'Anda disebut oleh %{name} pada:'
       subject: Anda disebut oleh %{name}
       title: Sebutan baru
+    poll:
+      subject: Japat oleh %{name} telah berakhir
     reblog:
       body: 'Status anda di-boost oleh %{name}:'
       subject: "%{name} mem-boost status anda"
       title: Boost baru
+    status:
+      subject: "%{name} baru saja memposting"
   notifications:
     email_events: Event untuk notifikasi email
     email_events_hint: 'Pilih event yang ingin Anda terima notifikasinya:'
@@ -1176,8 +1217,6 @@ id:
     relationships: Ikuti dan pengikut
     two_factor_authentication: Autentikasi Two-factor
     webauthn_authentication: Kunci keamanan
-  spam_check:
-    spam_detected: Ini adalah laporan otomatis. Spam terdeteksi.
   statuses:
     attached:
       audio:
@@ -1214,6 +1253,7 @@ id:
     sign_in_to_participate: Masuk untuk mengikuti percakapan
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Langsung
       private: Khusus pengikut
       private_long: Hanya tampilkan ke pengikut
       public: Publik
@@ -1382,11 +1422,8 @@ id:
       tips: Tips
       title: Selamat datang, %{name}!
   users:
-    blocked_email_provider: Layanan email ini tidak diizinkan
     follow_limit_reached: Anda tidak dapat mengikuti lebih dari %{limit} orang
     generic_access_help_html: Mengalami masalah saat akses akun? Anda mungkin perlu menghubungi %{email} untuk mencari bantuan
-    invalid_email: Alamat email tidak cocok
-    invalid_email_mx: Alamat email ini sepertinya tidak ada
     invalid_otp_token: Kode dua faktor tidak cocok
     invalid_sign_in_token: Kode keamanan tidak valid
     otp_lost_help_html: Jika Anda kehilangan akses keduanya, Anda dapat menghubungi %{email}
diff --git a/config/locales/io.yml b/config/locales/io.yml
index a99c4a966..ad9ac5be6 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -155,5 +155,4 @@ io:
     generate_recovery_codes: Generate Recovery Codes
     recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe, for example by printing them and storing them with other important documents.
   users:
-    invalid_email: La retpost-adreso ne esas valida
     invalid_otp_token: La dufaktora autentikigila kodexo ne esas valida
diff --git a/config/locales/is.yml b/config/locales/is.yml
index 2d6102d98..08802a797 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -26,6 +26,8 @@ is:
       Tilgangur hans tengist virkni vefþjónasambandsins og ætti alls ekki að loka á hann nema að þú viljir útiloka allan viðkomandi vefþjón, en þá ætti frekar að útiloka sjálft lénið.
     learn_more: Kanna nánar
     privacy_policy: Persónuverndarstefna
+    rules: Reglur netþjónsins
+    rules_html: 'Hér fyrir neðan er yfirlit yfir þær reglur sem þú þarft að fara eftir ef þú ætlar að vera með notandaaðgang á þessum Mastodon-netþjóni:'
     see_whats_happening: Sjáðu hvað er í gangi
     server_stats: 'Tölfræði þjóns:'
     source_code: Grunnkóði
@@ -78,7 +80,6 @@ is:
       other: Tíst
     posts_tab_heading: Tíst
     posts_with_replies: Tíst og svör
-    reserved_username: Notandanafnið er frátekið
     roles:
       admin: Stjóri
       bot: Róbót
@@ -229,6 +230,7 @@ is:
         create_domain_block: Búa til lén bannað
         create_email_domain_block: Búa til tölvupóstfang bannað
         create_ip_block: Búa til IP-reglu
+        create_unavailable_domain: Útbúa lén sem ekki er tiltækt
         demote_user: Lækka notanda í tign
         destroy_announcement: Eyða tilkynningu
         destroy_custom_emoji: Eyða sérsniðnu tjáningartákni
@@ -237,6 +239,7 @@ is:
         destroy_email_domain_block: Eyða tölvupóstfangi bannað
         destroy_ip_block: Eyða IP-reglu
         destroy_status: Eyða stöðufærslu
+        destroy_unavailable_domain: Eyða léni sem ekki er tiltækt
         disable_2fa_user: Gera tveggja-þátta auðkenningu óvirka
         disable_custom_emoji: Gera sérsniðið tjáningartákn óvirkt
         disable_user: Gera notanda óvirkan
@@ -260,46 +263,48 @@ is:
         update_domain_block: Uppfæra útilokun léns
         update_status: Uppfæra stöðufærslu
       actions:
-        assigned_to_self_report: "%{name} úthlutaði skýrslu %{target} til sín"
-        change_email_user: "%{name} breytti tölvupóstfangi fyrir notandann %{target}"
-        confirm_user: "%{name} staðfesti tölvupóstfang fyrir notandann %{target}"
-        create_account_warning: "%{name} sendi aðvörun til %{target}"
-        create_announcement: "%{name} útbjó auglýsingu %{target}"
-        create_custom_emoji: "%{name} sendi inn nýtt tjáningartákn %{target}"
-        create_domain_allow: "%{name} setti lén %{target} á lista yfir leyft"
-        create_domain_block: "%{name} útilokaði lénið %{target}"
-        create_email_domain_block: "%{name} setti póstlén %{target} á lista yfir bannað"
-        create_ip_block: "%{name} bjó til reglu fyrir IP-vistfangið %{target}"
-        demote_user: "%{name} lækkaði notandann %{target} í tign"
-        destroy_announcement: "%{name} eyddi auglýsingu %{target}"
-        destroy_custom_emoji: "%{name} henti út tjáningartákninu %{target}"
-        destroy_domain_allow: "%{name} fjarlægði lén %{target} af lista yfir leyft"
-        destroy_domain_block: "%{name} aflétti útilokun af léninu %{target}"
-        destroy_email_domain_block: "%{name} setti póstlén %{target} á lista yfir leyft"
-        destroy_ip_block: "%{name} eyddi reglu fyrir IP-vistfangið %{target}"
-        destroy_status: "%{name} fjarlægði stöðufærslu frá %{target}"
-        disable_2fa_user: "%{name} gerði tveggja-þátta auðkenningu óvirka fyrir notandann %{target}"
-        disable_custom_emoji: "%{name} gerði tjáningartáknið %{target} óvirkt"
-        disable_user: "%{name} gerðir innskráningu óvirka fyrir notandann %{target}"
-        enable_custom_emoji: "%{name} gerði tjáningartáknið %{target} virkt"
-        enable_user: "%{name} gerðir innskráningu virka fyrir notandann %{target}"
-        memorialize_account: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu"
-        promote_user: "%{name} hækkaði notandann %{target} í tign"
-        remove_avatar_user: "%{name} fjarlægði auðkennismynd af %{target}"
-        reopen_report: "%{name} enduropnaði skýrslu %{target}"
-        reset_password_user: "%{name} endurstillti lykilorð fyrir notandann %{target}"
-        resolve_report: "%{name} leysti skýrslu %{target}"
-        sensitive_account: "%{name} merkti myndefni frá %{target} sem viðkvæmt"
-        silence_account: "%{name} gerði notandaaðganginn %{target} hulinn"
-        suspend_account: "%{name} setti notandaaðganginn %{target} í bið"
-        unassigned_report: "%{name} fjarlægði úthlutun af skýrslu %{target}"
-        unsensitive_account: "%{name} afmerkti myndefni frá %{target} sem viðkvæmt"
-        unsilence_account: "%{name} hætti að hylja notandaaðganginn %{target}"
-        unsuspend_account: "%{name} tók notandaaðganginn %{target} úr bið"
-        update_announcement: "%{name} uppfærði auglýsingu %{target}"
-        update_custom_emoji: "%{name} uppfærði tjáningartákn %{target}"
-        update_domain_block: "%{name} uppfærði útilokun lénsins %{target}"
-        update_status: "%{name} uppfærði stöðufærslu frá %{target}"
+        assigned_to_self_report_html: "%{name} úthlutaði kæru %{target} til sín"
+        change_email_user_html: "%{name} breytti tölvupóstfangi fyrir notandann %{target}"
+        confirm_user_html: "%{name} staðfesti tölvupóstfang fyrir notandann %{target}"
+        create_account_warning_html: "%{name} sendi aðvörun til %{target}"
+        create_announcement_html: "%{name} útbjó nýja tilkynningu %{target}"
+        create_custom_emoji_html: "%{name} sendi inn nýtt tjáningartákn %{target}"
+        create_domain_allow_html: "%{name} leyfði skýjasamband með léninu %{target}"
+        create_domain_block_html: "%{name} útilokaði lénið %{target}"
+        create_email_domain_block_html: "%{name} útilokaði póstlénið %{target}"
+        create_ip_block_html: "{name} útbjó reglu fyrir IP-vistfangið %{target}"
+        create_unavailable_domain_html: "%{name} stöðvaði afhendingu til lénsins %{target}"
+        demote_user_html: "%{name} lækkaði notandann %{target} í tign"
+        destroy_announcement_html: "%{name} eyddi tilkynninguni %{target}"
+        destroy_custom_emoji_html: "%{name} henti út tjáningartákninu %{target}"
+        destroy_domain_allow_html: "%{name} bannaði skýjasamband með léninu %{target}"
+        destroy_domain_block_html: "%{name} aflétti útilokun af léninu %{target}"
+        destroy_email_domain_block_html: "%{name} aflétti útilokun af póstléninu %{target}"
+        destroy_ip_block_html: "{name} eyddi reglu fyrir IP-vistfangið %{target}"
+        destroy_status_html: "%{name} fjarlægði stöðufærslu frá %{target}"
+        destroy_unavailable_domain_html: "%{name} hóf aftur afhendingu til lénsins %{target}"
+        disable_2fa_user_html: "%{name} gerði kröfu um tveggja-þátta innskráningu óvirka fyrir notandann %{target}"
+        disable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} óvirkt"
+        disable_user_html: "%{name} gerði innskráningu óvirka fyrir notandann %{target}"
+        enable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} virkt"
+        enable_user_html: "%{name} gerði innskráningu virka fyrir notandann %{target}"
+        memorialize_account_html: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu"
+        promote_user_html: "%{name} hækkaði notandann %{target} í tign"
+        remove_avatar_user_html: "{name} fjarlægði auðkennismynd af %{target}"
+        reopen_report_html: "%{name} enduropnaði kæru %{target}"
+        reset_password_user_html: "%{name} endurstillti lykilorð fyrir notandann %{target}"
+        resolve_report_html: "%{name} leysti kæru %{target}"
+        sensitive_account_html: "%{name} merkti myndefni frá %{target} sem viðkvæmt"
+        silence_account_html: "%{name} þaggaði niður í aðgangnum %{target}"
+        suspend_account_html: "%{name} setti notandaaðganginn %{target} í bið"
+        unassigned_report_html: "%{name} fjarlægði úthlutun af kæru %{target}"
+        unsensitive_account_html: "%{name} tók merkinguna viðkvæmt af myndefni frá %{target}"
+        unsilence_account_html: "%{name} hætti að hylja notandaaðganginn %{target}"
+        unsuspend_account_html: "%{name} tók notandaaðganginn {target} úr bið"
+        update_announcement_html: "%{name} uppfærði tilkynningu %{target}"
+        update_custom_emoji_html: "%{name} uppfærði tjáningartáknið %{target}"
+        update_domain_block_html: "%{name} uppfærði lénalás fyrir %{target}"
+        update_status_html: "%{name} uppfærði stöðufærslu frá %{target}"
       deleted_status: "(eydd stöðufærsla)"
       empty: Engar atvikaskrár fundust.
       filter_by_action: Sía eftir aðgerð
@@ -314,10 +319,12 @@ is:
       new:
         create: Búa til auglýsingu
         title: Ný auglýsing
+      publish: Birta
       published_msg: Það tókst að birta auglýsinguna!
       scheduled_for: Áætlað %{time}
       scheduled_msg: Auglýsing var sett á áætlun!
       title: Auglýsingar
+      unpublish: Taka úr birtingu
       unpublished_msg: Það tókst að taka auglýsinguna úr birtingu!
       updated_msg: Það tókst að uppfæra auglýsinguna!
     custom_emojis:
@@ -362,7 +369,6 @@ is:
       feature_profile_directory: Notandasniðamappa
       feature_registrations: Nýskráningar
       feature_relay: Sambandsendurvarpi
-      feature_spam_check: Ruslpóstvarnir
       feature_timeline_preview: Forskoðun tímalínu
       features: Eiginleikar
       hidden_service: Skýjasamband með faldar þjónustur
@@ -440,9 +446,34 @@ is:
         create: Bæta við léni
         title: Ný færsla á bannlista fyrir tölvupóstföng
       title: Bannlisti yfir tölvupóstföng
+    follow_recommendations:
+      description_html: "<strong>Að fylgja meðmælum hjálpar nýjum notendum að finna áhugavert efni á einfaldan máta</strong>. Þegar notandi hefur ekki átt í nægilegum samskiptum við aðra til að vera farinn að móta sér skoðanir á hverju hann vill fylgjast með, er mælt með að fylgjast með þessum aðgöngum. Þeir eru endurreiknaðir daglega út frá blöndu þeirra aðganga sem eru með hvað mestri þáttöku í umræðum og mesta fylgjendafjölda út frá hverju tungumáli."
+      language: Fyrir tungumálið
+      status: Staða
+      suppress: Útiloka að fylgja meðmælum
+      suppressed: Útilokað
+      title: Fylgja meðmælum
+      unsuppress: Endurheimta að fylgja meðmælum
     instances:
+      back_to_all: Allt
+      back_to_limited: Takmarkað
+      back_to_warning: Aðvörun
       by_domain: Lén
+      delivery:
+        all: Allt
+        clear: Hreinsa afhendingarvillur
+        restart: Endurræsa afhendingu
+        stop: Stöðva afhendingu
+        title: Afhending
+        unavailable: Ekki tiltækt
+        unavailable_message: Afhending ekki möguleg
+        warning: Aðvörun
+        warning_message:
+          one: "%{count} dagur með villum í afhendingu"
+          other: "%{count} dagar með villum í afhendingu"
       delivery_available: Afhending er til taks
+      delivery_error_days: Dagar með villum í afhendingu
+      delivery_error_hint: Ef afhending er ekki möguleg í %{count} daga, verður það sjálfkrafa merkt sem óafhendanlegt.
       empty: Engin lén fundust.
       known_accounts:
         one: "%{count} þekktur notandaaðgangur"
@@ -542,6 +573,13 @@ is:
       unassign: Aftengja úthlutun
       unresolved: Óleyst
       updated_at: Uppfært
+    rules:
+      add_new: Skrá reglu
+      delete: Eyða
+      description_html: Þó að flestir segist hafa lesið og samþykkt þjónustuskilmála, er fólk samt gjarnt á að lesa slíkar upplýsingar ekki til enda fyrr en upp koma einhver vandamál. <strong>Gerðu fólki auðvelt að sjá mikilvægustu reglurnar með því að setja þær fram í flötum punktalista.</strong> Reyndu að hafa hverja reglu stutta og skýra, en ekki vera heldur að skipta þeim upp í mörg aðskilin atriði.
+      edit: Breyta reglu
+      empty: Engar reglur fyrir netþjón hafa ennþá verið skilgreindar.
+      title: Reglur netþjónsins
     settings:
       activity_api_enabled:
         desc_html: Fjöldi staðværra stöðufærslna, virkra notenda og nýskráninga í vikulegum skömmtum
@@ -565,9 +603,6 @@ is:
         users: Til innskráðra staðværra notenda
       domain_blocks_rationale:
         title: Birta röksemdafærslu
-      enable_bootstrap_timeline_accounts:
-        desc_html: Láta nýja notendur sjálfkrafa fylgjast með uppsettum aðgöngum svo að heimastreymi þeirra byrji ekki autt
-        title: Virkja sjálfgefnar fylgnistillingar fyrir nýja notendur
       hero:
         desc_html: Birt á forsíðunni. Mælt með að hún sé a.m.k. 600×100 mynddílar. Þegar þetta er ekki stillt, er notuð smámynd netþjónsins
         title: Aðalmynd
@@ -621,9 +656,6 @@ is:
         desc_html: Þú getur skrifað þína eigin persónuverndarstefnu, þjónustuskilmála eða annað lagatæknilegt. Þú getur notað HTML-einindi
         title: Sérsniðnir þjónustuskilmálar
       site_title: Heiti vefþjóns
-      spam_check_enabled:
-        desc_html: Mastodon getur tilkynnt sjálfvirkt um aðganga sem senda ítrekað óumbeðin skilaboð. Mögulega geta verið rangar slíkar tilkynningar.
-        title: Sjálfvirkar ruslpóstvarnir
       thumbnail:
         desc_html: Notað við forskoðun í gegnum OpenGraph og API-kerfisviðmót. Mælt með 1200×630 mynddílum
         title: Smámynd vefþjóns
@@ -654,13 +686,18 @@ is:
       no_status_selected: Engum stöðufærslum var breytt þar sem engar voru valdar
       title: Staða notendaaðganga
       with_media: Með myndefni
+    system_checks:
+      database_schema_check:
+        message_html: Það eru fyrirliggjandi yfirfærslur á gagnagrunnum. Keyrðu þær til að tryggja að forritið hegði sér eins og skyldi
+      rules_check:
+        action: Sýsla með reglur netþjónsins
+        message_html: Þú hefur ekki skilgreint neinar reglur fyrir netþjón.
+      sidekiq_process_check:
+        message_html: Ekkert Sidekiq-ferli er í gangi fyrir %{value} biðröð/biðraðir. Endilega athugaðu Sidekiq-uppsetninguna þína
     tags:
       accounts_today: Einstök afnot í dag
       accounts_week: Einstök afnot í þessari viku
       breakdown: Samantekt á notkun dagsins eftir uppruna
-      context: Samhengi
-      directory: Í möppunni
-      in_directory: "%{count} í möppunni"
       last_active: Síðasta virkni
       most_popular: Vinsælast
       most_recent: Nýjast
@@ -677,6 +714,7 @@ is:
       add_new: Bæta við nýju
       delete: Eyða
       edit_preset: Breyta forstilltri aðvörun
+      empty: Þú hefur ekki enn skilgreint neinar aðvaranaforstillingar.
       title: Sýsla með forstilltar aðvaranir
   admin_mailer:
     new_pending_account:
@@ -1038,10 +1076,14 @@ is:
       body: "%{name} minntist á þig í:"
       subject: "%{name} minntist á þig"
       title: Ný tilvísun
+    poll:
+      subject: Könnun frá %{name} er lokið
     reblog:
       body: "%{name} endurbirti stöðufærsluna þína:"
       subject: "%{name} endurbirti stöðufærsluna þína"
       title: Ný endurbirting
+    status:
+      subject: "%{name} sendi inn rétt í þessu"
   notifications:
     email_events: Atburðir fyrir tilkynningar í tölvupósti
     email_events_hint: 'Veldu þá atburði sem þú vilt fá tilkynningar í tölvupósti þegar þeir koma upp:'
@@ -1190,8 +1232,6 @@ is:
     relationships: Fylgist með og fylgjendur
     two_factor_authentication: Tveggja-þátta auðkenning
     webauthn_authentication: Öryggislyklar
-  spam_check:
-    spam_detected: Þetta er sjálfvirk kæra. Ruslpóstur hefur fundist.
   statuses:
     attached:
       audio:
@@ -1234,6 +1274,7 @@ is:
     sign_in_to_participate: Skráðu þig inn til að taka þátt í samtalinu
     title: "%{name}: „%{quote}‟"
     visibilities:
+      direct: Beint
       private: Einungis fylgjendur
       private_long: Aðeins birt fylgjendum
       public: Opinber
@@ -1402,11 +1443,8 @@ is:
       tips: Ábendingar
       title: Velkomin/n um borð, %{name}!
   users:
-    blocked_email_provider: Þessi tölvupóstþjónusta er ekki leyfileg
     follow_limit_reached: Þú getur ekki fylgst með fleiri en %{limit} aðilum
     generic_access_help_html: Vandamál við að tengjast aðgangnum þínum? Þú getur sett þig í samband við %{email} til að fá aðstoð
-    invalid_email: Tölvupóstfangið er ógilt
-    invalid_email_mx: Tölvupóstfangið virðist ekki vera til
     invalid_otp_token: Ógildur tveggja-þátta kóði
     invalid_sign_in_token: Ógildur öryggiskóði
     otp_lost_help_html: Ef þú hefur misst aðganginn að hvoru tveggja, geturðu sett þig í samband við %{email}
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 1e0ab42f0..b6f482737 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -26,6 +26,8 @@ it:
       È utilizzato per scopi di federazione e non dovrebbe essere bloccato a meno che non si voglia bloccare l'intera istanza: in questo caso si dovrebbe utilizzare un blocco di dominio.
     learn_more: Scopri altro
     privacy_policy: Politica della privacy
+    rules: Regole del server
+    rules_html: 'Di seguito è riportato un riassunto delle regole che devi seguire se vuoi avere un account su questo server di Mastodon:'
     see_whats_happening: Guarda cosa succede
     server_stats: 'Statistiche del server:'
     source_code: Codice sorgente
@@ -35,7 +37,7 @@ it:
     status_count_before: Che hanno pubblicato
     tagline: Segui amici e trovane di nuovi
     terms: Termini di Servizio
-    unavailable_content: Contenuto non disponibile
+    unavailable_content: Server moderati
     unavailable_content_description:
       domain: Server
       reason: 'Motivo:'
@@ -78,7 +80,6 @@ it:
       other: Toot
     posts_tab_heading: Toot
     posts_with_replies: Toot e risposte
-    reserved_username: Questo nome utente è già stato preso
     roles:
       admin: Amministratore
       bot: Bot
@@ -229,6 +230,7 @@ it:
         create_domain_block: Crea blocco di dominio
         create_email_domain_block: Crea blocco dominio e-mail
         create_ip_block: Crea regola IP
+        create_unavailable_domain: Crea dominio non disponibile
         demote_user: Degrada l'utente
         destroy_announcement: Cancella annuncio
         destroy_custom_emoji: Cancella emoji personalizzata
@@ -237,6 +239,7 @@ it:
         destroy_email_domain_block: Cancella blocco dominio e-mail
         destroy_ip_block: Elimina regola IP
         destroy_status: Cancella stato
+        destroy_unavailable_domain: Elimina dominio non disponibile
         disable_2fa_user: Disabilita l'autenticazione a due fattori
         disable_custom_emoji: Disabilita emoji personalizzata
         disable_user: Disabilita utente
@@ -260,46 +263,48 @@ it:
         update_domain_block: Aggiorna blocco di dominio
         update_status: Aggiorna stato
       actions:
-        assigned_to_self_report: "%{name} ha assegnato il rapporto %{target} a se stesso"
-        change_email_user: "%{name} ha cambiato l'indirizzo email per l'utente %{target}"
-        confirm_user: "%{name} ha confermato l'indirizzo email per l'utente %{target}"
-        create_account_warning: "%{name} ha mandato un avvertimento a %{target}"
-        create_announcement: "%{name} ha creato un nuovo annuncio %{target}"
-        create_custom_emoji: "%{name} ha caricato un nuovo emoji %{target}"
-        create_domain_allow: "%{name} ha messo il dominio %{target} nella whitelist"
-        create_domain_block: "%{name} ha bloccato il dominio %{target}"
-        create_email_domain_block: "%{name} ha messo il dominio email %{target} nella blacklist"
-        create_ip_block: "%{name} ha creato la regola per l'IP %{target}"
-        demote_user: "%{name} ha degradato l'utente %{target}"
-        destroy_announcement: "%{name} ha eliminato l'annuncio %{target}"
-        destroy_custom_emoji: "%{name} ha distrutto l'emoji %{target}"
-        destroy_domain_allow: "%{name} ha tolto il dominio %{target} dalla whitelist"
-        destroy_domain_block: "%{name} ha sbloccato il dominio %{target}"
-        destroy_email_domain_block: "%{name}ha messo il dominio email %{target} nella whitelist"
-        destroy_ip_block: "%{name} ha eliminato la regola per l'IP %{target}"
-        destroy_status: "%{name} ha eliminato lo status di %{target}"
-        disable_2fa_user: "%{name} ha disabilitato l'obbligo dei due fattori per l'utente %{target}"
-        disable_custom_emoji: "%{name} ha disabilitato l'emoji %{target}"
-        disable_user: "%{name} ha disabilitato il login per l'utente %{target}"
-        enable_custom_emoji: "%{name} ha abilitato l'emoji %{target}"
-        enable_user: "%{name} ha abilitato il login per l'utente %{target}"
-        memorialize_account: "%{name} ha trasformato l'account di %{target} in una pagina in memoriam"
-        promote_user: "%{name} ha promosso l'utente %{target}"
-        remove_avatar_user: "%{name} ha eliminato l'avatar di %{target}"
-        reopen_report: "%{name} ha riaperto il rapporto %{target}"
-        reset_password_user: "%{name} ha reimpostato la password dell'utente %{target}"
-        resolve_report: "%{name} ha risolto il rapporto %{target}"
-        sensitive_account: "%{name} ha contrassegnato il media di %{target} come sensibile"
-        silence_account: "%{name} ha silenziato l'account di %{target}"
-        suspend_account: "%{name} ha sospeso l'account di %{target}"
-        unassigned_report: "%{name} report non assegnato %{target}"
-        unsensitive_account: "%{name} ha deselezionato il media di %{target} come sensibile"
-        unsilence_account: "%{name} ha de-silenziato l'account di %{target}"
-        unsuspend_account: "%{name} ha annullato la sospensione dell'account di %{target}"
-        update_announcement: "%{name} ha aggiornato l'annuncio %{target}"
-        update_custom_emoji: "%{name} ha aggiornato l'emoji %{target}"
-        update_domain_block: "%{name} ha aggiornato il blocco di dominio per %{target}"
-        update_status: "%{name} stato aggiornato da %{target}"
+        assigned_to_self_report_html: "%{name} ha assegnato il rapporto %{target} a se stesso"
+        change_email_user_html: "%{name} ha cambiato l'indirizzo e-mail dell'utente %{target}"
+        confirm_user_html: "%{name} ha confermato l'indirizzo e-mail dell'utente %{target}"
+        create_account_warning_html: "%{name} ha inviato un avviso a %{target}"
+        create_announcement_html: "%{name} ha creato un nuovo annuncio %{target}"
+        create_custom_emoji_html: "%{name} ha caricato una nuova emoji %{target}"
+        create_domain_allow_html: "%{name} ha consentito alla federazione col dominio %{target}"
+        create_domain_block_html: "%{name} ha bloccato dominio %{target}"
+        create_email_domain_block_html: "%{name} ha bloccato dominio e-mail %{target}"
+        create_ip_block_html: "%{name} ha creato una regola per l'IP %{target}"
+        create_unavailable_domain_html: "%{name} ha interrotto la consegna al dominio %{target}"
+        demote_user_html: "%{name} ha retrocesso l'utente %{target}"
+        destroy_announcement_html: "%{name} ha eliminato l'annuncio %{target}"
+        destroy_custom_emoji_html: "%{name} ha eliminato emoji %{target}"
+        destroy_domain_allow_html: "%{name} ha negato la federazione al dominio %{target}"
+        destroy_domain_block_html: "%{name} ha sbloccato dominio %{target}"
+        destroy_email_domain_block_html: "%{name} ha sbloccato il dominio e-mail %{target}"
+        destroy_ip_block_html: "%{name} ha eliminato la regola per l'IP %{target}"
+        destroy_status_html: "%{name} ha eliminato lo status di %{target}"
+        destroy_unavailable_domain_html: "%{name} ha ripreso la consegna al dominio %{target}"
+        disable_2fa_user_html: "%{name} ha disabilitato l'autenticazione a due fattori per l'utente %{target}"
+        disable_custom_emoji_html: "%{name} ha disabilitato emoji %{target}"
+        disable_user_html: "%{name} ha disabilitato il login per l'utente %{target}"
+        enable_custom_emoji_html: "%{name} ha abilitato emoji %{target}"
+        enable_user_html: "%{name} ha abilitato il login per l'utente %{target}"
+        memorialize_account_html: "%{name} ha trasformato l'account di %{target} in una pagina in memoriam"
+        promote_user_html: "%{name} ha promosso l'utente %{target}"
+        remove_avatar_user_html: "%{name} ha rimosso l'immagine profilo di %{target}"
+        reopen_report_html: "%{name} ha riaperto il rapporto %{target}"
+        reset_password_user_html: "%{name} ha reimpostato la password dell'utente %{target}"
+        resolve_report_html: "%{name} ha risolto il rapporto %{target}"
+        sensitive_account_html: "%{name} ha segnato il media di %{target} come sensibile"
+        silence_account_html: "%{name} ha silenziato l'account di %{target}"
+        suspend_account_html: "%{name} ha sospeso l'account di %{target}"
+        unassigned_report_html: "%{name} ha disassegnato il rapporto %{target}"
+        unsensitive_account_html: "%{name} ha annullato il segnare il media di %{target} come sensibile"
+        unsilence_account_html: "%{name} ha riattivato l'account di %{target}"
+        unsuspend_account_html: "%{name} ha annullato la sospensione dell'account di %{target}"
+        update_announcement_html: "%{name} ha aggiornato l'annuncio %{target}"
+        update_custom_emoji_html: "%{name} ha aggiornato emoji %{target}"
+        update_domain_block_html: "%{name} ha aggiornato il blocco dominio per %{target}"
+        update_status_html: "%{name} ha aggiornato lo status di %{target}"
       deleted_status: "(stato cancellato)"
       empty: Nessun log trovato.
       filter_by_action: Filtra per azione
@@ -314,10 +319,12 @@ it:
       new:
         create: Crea annuncio
         title: Nuovo annuncio
+      publish: Pubblica
       published_msg: Annuncio pubblicato!
       scheduled_for: Programmato per %{time}
       scheduled_msg: Annuncio programmato per la pubblicazione!
       title: Annunci
+      unpublish: Annulla la pubblicazione
       unpublished_msg: Annuncio ritirato!
       updated_msg: Annuncio aggiornato!
     custom_emojis:
@@ -362,7 +369,6 @@ it:
       feature_profile_directory: Directory dei profili
       feature_registrations: Registrazioni
       feature_relay: Ripetitore di federazione
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Anteprima timeline
       features: Funzionalità
       hidden_service: Federazione con servizi nascosti
@@ -440,9 +446,34 @@ it:
         create: Aggiungi dominio
         title: Nuova voce della lista nera delle email
       title: Lista nera email
+    follow_recommendations:
+      description_html: "<strong>I consigli su chi seguire aiutano i nuovi utenti a trovare rapidamente dei contenuti interessanti</strong>. Quando un utente non ha interagito abbastanza con altri per avere dei consigli personalizzati, vengono consigliati questi account. Sono ricalcolati ogni giorno da un misto di account con le più alte interazioni recenti e con il maggior numero di seguaci locali per una data lingua."
+      language: Per lingua
+      status: Stato
+      suppress: Nascondi consigli su chi seguire
+      suppressed: Nascosti
+      title: Consigli su chi seguire
+      unsuppress: Ripristina consigli su chi seguire
     instances:
+      back_to_all: Tutto
+      back_to_limited: Limitato
+      back_to_warning: Avviso
       by_domain: Dominio
+      delivery:
+        all: Tutto
+        clear: Cancella errori di consegna
+        restart: Riavvia la consegna
+        stop: Interrompi consegna
+        title: Consegna
+        unavailable: Non disponibile
+        unavailable_message: Consegna non disponibile
+        warning: Avviso
+        warning_message:
+          one: Errore di consegna %{count} giorno
+          other: Errori di consegna %{count} giorni
       delivery_available: Distribuzione disponibile
+      delivery_error_days: Giorni con errori di consegna
+      delivery_error_hint: Se la consegna non è possibile per %{count} giorni, sarà automaticamente contrassegnata come non consegnabile.
       empty: Nessun dominio trovato.
       known_accounts:
         one: "%{count} account noto"
@@ -542,6 +573,13 @@ it:
       unassign: Non assegnare
       unresolved: Non risolto
       updated_at: Aggiornato
+    rules:
+      add_new: Aggiungi regola
+      delete: Cancella
+      description_html: Mentre la maggior parte degli utenti sostiene di aver letto e accettato i termini di servizio, di solito non li leggono fino a quando sorge un problema. <strong>Rendi più facile vedere le regole del server, fornendole in un semplice elenco</strong>. Cerca di mantenere le singole regole brevi e semplici, ma cerca anche di non dividerle in molti elementi separati.
+      edit: Modifica regola
+      empty: Non sono ancora state definite regole del server.
+      title: Regole del server
     settings:
       activity_api_enabled:
         desc_html: Conteggi degli status pubblicati localmente, degli utenti attivi e delle nuove registrazioni in gruppi settimanali
@@ -565,9 +603,6 @@ it:
         users: Agli utenti locali connessi
       domain_blocks_rationale:
         title: Mostra motivazione
-      enable_bootstrap_timeline_accounts:
-        desc_html: I nuovi utenti seguiranno automaticamente gli account configurati, in modo che il loro home feed all'inizio non sia vuoto
-        title: Abilita seguiti predefiniti per i nuovi utenti
       hero:
         desc_html: Mostrata nella pagina iniziale. Almeno 600x100 px consigliati. Se non impostata, sarà usato il thumbnail del server
         title: Immagine dell'eroe
@@ -621,9 +656,6 @@ it:
         desc_html: Potete scrivere la vostra politica sulla privacy, condizioni del servizio o altre informazioni legali. Potete usare tag HTML
         title: Termini di servizio personalizzati
       site_title: Nome del server
-      spam_check_enabled:
-        desc_html: Mastodon può silenziare e segnalare automaticamente account che inviano ripetutamente messaggi non richiesti. Potrebbero esserci falsi positivi.
-        title: Automazione anti-spam
       thumbnail:
         desc_html: Usato per anteprime tramite OpenGraph e API. 1200x630px consigliati
         title: Thumbnail del server
@@ -654,13 +686,18 @@ it:
       no_status_selected: Nessun status è stato modificato perché nessuno era stato selezionato
       title: Gli status dell'account
       with_media: con media
+    system_checks:
+      database_schema_check:
+        message_html: Ci sono migrazioni del database in attesa. Sei pregato di eseguirle per assicurarti che l'applicazione si comporti come previsto
+      rules_check:
+        action: Gestisci regole del server
+        message_html: Non hai definito alcuna regola del server.
+      sidekiq_process_check:
+        message_html: Nessun processo di Sidekiq in esecuzione per le code di %{value}. Sei pregato di revisionare la tua configurazione di Sidekiq
     tags:
       accounts_today: Usi unici oggi
       accounts_week: Usi unici questa settimana
       breakdown: Suddivisione dell'utilizzo di oggi per fonte
-      context: Contesto
-      directory: Nella directory
-      in_directory: "%{count} nella directory"
       last_active: Ultima attività
       most_popular: Più popolari
       most_recent: Più recenti
@@ -677,6 +714,7 @@ it:
       add_new: Aggiungi nuovo
       delete: Cancella
       edit_preset: Modifica avviso predefinito
+      empty: Non hai ancora definito alcun avviso preimpostato.
       title: Gestisci avvisi predefiniti
   admin_mailer:
     new_pending_account:
@@ -688,7 +726,7 @@ it:
       subject: Nuova segnalazione per %{instance} (#%{id})
     new_trending_tag:
       body: 'L''hashtag #%{name} oggi è di tendenza, ma non è stato mai controllato. Non sarà visualizzato pubblicamente se non lo permetti; se salvi il form senza modifiche non lo vedrai mai più.'
-      subject: Nuovo hashtag pronto per essere controllato su %{instance} (%{name})
+      subject: Nuovo hashtag pronto per essere controllato su %{instance} (#%{name})
   aliases:
     add_new: Crea alias
     created_msg: Hai creato un nuovo alias. Ora puoi iniziare lo spostamento dal vecchio account.
@@ -1040,10 +1078,14 @@ it:
       body: 'Sei stato menzionato da %{name} su:'
       subject: Sei stato menzionato da %{name}
       title: Nuova menzione
+    poll:
+      subject: Un sondaggio da %{name} è terminato
     reblog:
       body: 'Il tuo status è stato condiviso da %{name}:'
       subject: "%{name} ha condiviso il tuo status"
       title: Nuova condivisione
+    status:
+      subject: "%{name} ha appena pubblicato un post"
   notifications:
     email_events: Eventi per notifiche via email
     email_events_hint: 'Seleziona gli eventi per i quali vuoi ricevere le notifiche:'
@@ -1192,8 +1234,6 @@ it:
     relationships: Follows e followers
     two_factor_authentication: Autenticazione a due fattori
     webauthn_authentication: Chiavi di sicurezza
-  spam_check:
-    spam_detected: Questo è un rapporto automatico. È stato rilevato dello spam.
   statuses:
     attached:
       audio:
@@ -1236,6 +1276,7 @@ it:
     sign_in_to_participate: Accedi per partecipare alla conversazione
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Diretto
       private: Mostra solo ai tuoi seguaci
       private_long: Mostra solo ai seguaci
       public: Pubblico
@@ -1340,7 +1381,7 @@ it:
     mastodon-light: Mastodon (chiaro)
   time:
     formats:
-      default: "%b %d, %Y, %H:%M"
+      default: "%d %b %Y, %H:%M"
       month: "%b %Y"
   two_factor_authentication:
     add: Aggiungi
@@ -1407,11 +1448,8 @@ it:
       tips: Suggerimenti
       title: Benvenuto a bordo, %{name}!
   users:
-    blocked_email_provider: Questo provider di posta non è consentito
     follow_limit_reached: Non puoi seguire più di %{limit} persone
     generic_access_help_html: Problemi nell'accesso al tuo account? Puoi contattare %{email} per assistenza
-    invalid_email: L'indirizzo email inserito non è valido
-    invalid_email_mx: L'indirizzo e-mail non sembra esistere
     invalid_otp_token: Codice d'accesso non valido
     invalid_sign_in_token: Codice di sicurezza non valido
     otp_lost_help_html: Se perdessi l'accesso ad entrambi, puoi entrare in contatto con %{email}
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 1b5eeec8d..435c39c72 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -21,11 +21,11 @@ ja:
     federation_hint_html: "%{instance} のアカウントひとつでどんなMastodon互換サーバーのユーザーでもフォローできるでしょう。"
     get_apps: モバイルアプリを試す
     hosted_on: Mastodon hosted on %{domain}
-    instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。
-
-'
+    instance_actor_flash: "このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 \n"
     learn_more: もっと詳しく
     privacy_policy: プライバシーポリシー
+    rules: サーバーのルール
+    rules_html: 'このMastodonサーバーにアカウントをお持ちの場合は、以下のルールの概要を確認してください:'
     see_whats_happening: やりとりを見てみる
     server_stats: 'サーバー統計:'
     source_code: ソースコード
@@ -74,7 +74,6 @@ ja:
       other: トゥート
     posts_tab_heading: トゥート
     posts_with_replies: トゥートと返信
-    reserved_username: このユーザー名は予約されています
     roles:
       admin: Admin
       bot: Bot
@@ -225,6 +224,7 @@ ja:
         create_domain_block: ドメインブロックを作成
         create_email_domain_block: メールドメインブロックを作成
         create_ip_block: IPルールを作成
+        create_unavailable_domain: 利用できないドメインを作成
         demote_user: ユーザーを降格
         destroy_announcement: お知らせを削除
         destroy_custom_emoji: カスタム絵文字を削除
@@ -233,6 +233,7 @@ ja:
         destroy_email_domain_block: メールドメインブロックを削除
         destroy_ip_block: IPルールを削除
         destroy_status: トゥートを削除
+        destroy_unavailable_domain: 使用できないドメインを削除
         disable_2fa_user: 二段階認証を無効化
         disable_custom_emoji: カスタム絵文字を無効化
         disable_user: ユーザーを無効化
@@ -241,7 +242,7 @@ ja:
         memorialize_account: 追悼アカウント化
         promote_user: ユーザーを昇格
         remove_avatar_user: アイコンを削除
-        reopen_report: 通報を再度開く
+        reopen_report: 未解決に戻す
         reset_password_user: パスワードをリセット
         resolve_report: 通報を解決済みにする
         sensitive_account: アカウントのメディアを閲覧注意にマーク
@@ -256,46 +257,48 @@ ja:
         update_domain_block: ドメインブロックを更新
         update_status: トゥートを更新
       actions:
-        assigned_to_self_report: "%{name} さんが通報 %{target} を自身の担当に割り当てました"
-        change_email_user: "%{name} さんが %{target} さんのメールアドレスを変更しました"
-        confirm_user: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました"
-        create_account_warning: "%{name} さんが %{target} さんに警告メールを送信しました"
-        create_announcement: "%{name} さんが新しいお知らせ %{target} を作成しました"
-        create_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を追加しました"
-        create_domain_allow: "%{name} さんが %{target} の連合を許可しました"
-        create_domain_block: "%{name} さんがドメイン %{target} をブロックしました"
-        create_email_domain_block: "%{name} さんが %{target} をメールドメインブロックに追加しました"
-        create_ip_block: "%{name} さんが IP %{target} のルールを作成しました"
-        demote_user: "%{name} さんが %{target} さんを降格しました"
-        destroy_announcement: "%{name} さんがお知らせ %{target} を削除しました"
-        destroy_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を削除しました"
-        destroy_domain_allow: "%{name} さんが %{target} の連合許可を外しました"
-        destroy_domain_block: "%{name} さんがドメイン %{target} のブロックを外しました"
-        destroy_email_domain_block: "%{name} さんが %{target} をメールドメインブロックから外しました"
-        destroy_ip_block: "%{name} さんが IP %{target} のルールを削除しました"
-        destroy_status: "%{name} さんが %{target} さんのトゥートを削除しました"
-        disable_2fa_user: "%{name} さんが %{target} さんの二段階認証を無効化しました"
-        disable_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を無効化しました"
-        disable_user: "%{name} さんが %{target} さんのログインを無効化しました"
-        enable_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を有効化しました"
-        enable_user: "%{name} さんが %{target} さんのログインを有効化しました"
-        memorialize_account: "%{name} さんが %{target} さんを追悼アカウントページに登録しました"
-        promote_user: "%{name} さんが %{target} さんを昇格しました"
-        remove_avatar_user: "%{name} さんが %{target} さんのアイコンを削除しました"
-        reopen_report: "%{name} さんが通報 %{target} を再び開きました"
-        reset_password_user: "%{name} さんが %{target} さんのパスワードをリセットしました"
-        resolve_report: "%{name} さんが通報 %{target} を解決済みにしました"
-        sensitive_account: "%{name} さんが %{target} さんのメディアを閲覧注意にマークしました"
-        silence_account: "%{name} さんが %{target} さんをサイレンスにしました"
-        suspend_account: "%{name} さんが %{target} さんを停止しました"
-        unassigned_report: "%{name} さんが通報 %{target} の担当を外しました"
-        unsensitive_account: "%{name} さんが %{target} さんのメディアの閲覧注意を解除しました"
-        unsilence_account: "%{name} さんが %{target} さんのサイレンスを解除しました"
-        unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました"
-        update_announcement: "%{name} さんがお知らせ %{target} を更新しました"
-        update_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を更新しました"
-        update_domain_block: "%{name} が %{target} のドメインブロックを更新しました"
-        update_status: "%{name} さんが %{target} さんのトゥートを更新しました"
+        assigned_to_self_report_html: "%{name} さんが通報 %{target} を自身の担当に割り当てました"
+        change_email_user_html: "%{name} さんが %{target} さんのメールアドレスを変更しました"
+        confirm_user_html: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました"
+        create_account_warning_html: "%{name} さんが %{target} さんに警告メールを送信しました"
+        create_announcement_html: "%{name} さんが新しいお知らせ %{target} を作成しました"
+        create_custom_emoji_html: "%{name} さんがカスタム絵文字 %{target} を追加しました"
+        create_domain_allow_html: "%{name} さんが %{target} の連合を許可しました"
+        create_domain_block_html: "%{name} さんがドメイン %{target} をブロックしました"
+        create_email_domain_block_html: "%{name} さんが %{target} をメールドメインブロックに追加しました"
+        create_ip_block_html: "%{name} さんが IP %{target} のルールを作成しました"
+        create_unavailable_domain_html: "%{name} がドメイン %{target} への配送を停止しました"
+        demote_user_html: "%{name} さんが %{target} さんを降格しました"
+        destroy_announcement_html: "%{name} さんがお知らせ %{target} を削除しました"
+        destroy_custom_emoji_html: "%{name} さんがカスタム絵文字 %{target} を削除しました"
+        destroy_domain_allow_html: "%{name} さんが %{target} の連合許可を外しました"
+        destroy_domain_block_html: "%{name} さんがドメイン %{target} のブロックを外しました"
+        destroy_email_domain_block_html: "%{name} さんが %{target} をメールドメインブロックから外しました"
+        destroy_ip_block_html: "%{name} さんが IP %{target} のルールを削除しました"
+        destroy_status_html: "%{name} さんが %{target} さんの投稿を削除しました"
+        destroy_unavailable_domain_html: "%{name} がドメイン %{target} への配送を再開しました"
+        disable_2fa_user_html: "%{name} さんが %{target} さんの二段階認証を無効化しました"
+        disable_custom_emoji_html: "%{name} さんがカスタム絵文字 %{target} を無効化しました"
+        disable_user_html: "%{name} さんが %{target} さんのログインを無効化しました"
+        enable_custom_emoji_html: "%{name} さんがカスタム絵文字 %{target} を有効化しました"
+        enable_user_html: "%{name} さんが %{target} さんのログインを有効化しました"
+        memorialize_account_html: "%{name} さんが %{target} さんを追悼アカウントページに登録しました"
+        promote_user_html: "%{name} さんが %{target} さんを昇格しました"
+        remove_avatar_user_html: "%{name} さんが %{target} さんのアイコンを削除しました"
+        reopen_report_html: "%{name} さんが通報 %{target} を未解決に戻しました"
+        reset_password_user_html: "%{name} さんが %{target} さんのパスワードをリセットしました"
+        resolve_report_html: "%{name} さんが通報 %{target} を解決済みにしました"
+        sensitive_account_html: "%{name} さんが %{target} さんのメディアを閲覧注意にマークしました"
+        silence_account_html: "%{name} さんが %{target} さんをサイレンスにしました"
+        suspend_account_html: "%{name} さんが %{target} さんを停止しました"
+        unassigned_report_html: "%{name} さんが通報 %{target} の担当を外しました"
+        unsensitive_account_html: "%{name} さんが %{target} さんのメディアの閲覧注意を解除しました"
+        unsilence_account_html: "%{name} さんが %{target} さんのサイレンスを解除しました"
+        unsuspend_account_html: "%{name} さんが %{target} さんの停止を解除しました"
+        update_announcement_html: "%{name} さんがお知らせ %{target} を更新しました"
+        update_custom_emoji_html: "%{name} さんがカスタム絵文字 %{target} を更新しました"
+        update_domain_block_html: "%{name} が %{target} のドメインブロックを更新しました"
+        update_status_html: "%{name} さんが %{target} さんの投稿を更新しました"
       deleted_status: "(削除済)"
       empty: ログが見つかりませんでした
       filter_by_action: アクションでフィルター
@@ -310,10 +313,12 @@ ja:
       new:
         create: お知らせを作成
         title: お知らせを追加
+      publish: 公開する
       published_msg: お知らせを掲載しました
       scheduled_for: "%{time} に予約"
       scheduled_msg: お知らせの掲載を予約しました
       title: お知らせ
+      unpublish: 非公開にする
       unpublished_msg: お知らせを非掲載にしました
       updated_msg: お知らせを更新しました
     custom_emojis:
@@ -358,7 +363,6 @@ ja:
       feature_profile_directory: ディレクトリ
       feature_registrations: 新規登録
       feature_relay: 連合リレー
-      feature_spam_check: スパム対策
       feature_timeline_preview: タイムラインプレビュー
       features: 機能
       hidden_service: 秘匿サービスとの連合
@@ -435,9 +439,33 @@ ja:
         create: ドメインを追加
         title: 新規メールドメインブロック
       title: メールドメインブロック
+    follow_recommendations:
+      description_html: "<strong>おすすめフォローは、新規ユーザーが興味のあるコンテンツをすばやく見つけるのに役立ちます。</strong>ユーザーが他のユーザーとの交流を十分にしていない場合、パーソナライズされたおすすめフォローを生成する代わりに、これらのアカウントが表示されます。最近のエンゲージメントが最も高いアカウントと、特定の言語のローカルフォロワー数が最も多いアカウントを組み合わせて、毎日再計算されます。"
+      language: 言語
+      status: ステータス
+      suppress: おすすめフォローに表示しない
+      suppressed: 非表示
+      title: おすすめフォロー
+      unsuppress: おすすめフォローを復元
     instances:
+      back_to_all: すべて
+      back_to_limited: 制限あり
+      back_to_warning: 警告あり
       by_domain: ドメイン
+      delivery:
+        all: すべて
+        clear: 配送エラーをクリア
+        restart: 配送を再開
+        stop: 配送を停止
+        title: 配送
+        unavailable: 使用不可
+        unavailable_message: 配送不可
+        warning: 警告あり
+        warning_message:
+          other: "%{count} 日配送失敗"
       delivery_available: 配送可能
+      delivery_error_days: 配送エラー日数
+      delivery_error_hint: "%{count} 日間配送ができない場合は、自動的に配送不可としてマークされます。"
       empty: ドメインが見つかりませんでした。
       known_accounts:
         other: 既知のアカウント数 %{count}
@@ -516,14 +544,14 @@ ja:
       forwarded: 転送済み
       forwarded_to: "%{domain} に転送されました"
       mark_as_resolved: 解決済みとしてマーク
-      mark_as_unresolved: 未解決として再び開く
+      mark_as_unresolved: 未解決に戻す
       notes:
         create: 書き込む
         create_and_resolve: 書き込み、解決済みにする
-        create_and_unresolve: 書き込み、未解決として開く
+        create_and_unresolve: 書き込み、未解決に戻す
         delete: 削除
         placeholder: どのような措置が取られたか、または関連する更新を記述してください…
-      reopen: 再び開く
+      reopen: 未解決に戻す
       report: 通報#%{id}
       reported_account: 報告対象アカウント
       reported_by: 報告者
@@ -534,6 +562,13 @@ ja:
       unassign: 担当を外す
       unresolved: 未解決
       updated_at: 更新日時
+    rules:
+      add_new: ルールを追加
+      delete: 削除
+      description_html: ほとんどの人が利用規約を読んで同意したと主張しますが、通常は問題が発生するまで読みません。<strong>箇条書きにして、サーバーのルールが一目で分かるようにしましょう</strong>。個々のルールは短くシンプルなものにし、多くの項目に分割しないようにしましょう。
+      edit: ルールを編集
+      empty: サーバーのルールが定義されていません。
+      title: サーバーのルール
     settings:
       activity_api_enabled:
         desc_html: 週ごとのローカルに投稿されたトゥート数、アクティブなユーザー数、新規登録者数
@@ -557,9 +592,6 @@ ja:
         users: ログイン済みローカルユーザーのみ許可
       domain_blocks_rationale:
         title: コメントを表示
-      enable_bootstrap_timeline_accounts:
-        desc_html: 新規ユーザーが設定したアカウントを自動的にフォローして、ホームフィードが空にならないようにする
-        title: 新規ユーザーの自動フォローを有効にする
       hero:
         desc_html: フロントページに表示されます。サイズは600x100px以上推奨です。未設定の場合、標準のサムネイルが使用されます
         title: ヒーローイメージ
@@ -613,9 +645,6 @@ ja:
         desc_html: 独自のプライバシーポリシーや利用規約、その他の法的根拠を記述できます。HTMLタグが使えます
         title: カスタム利用規約
       site_title: サーバーの名前
-      spam_check_enabled:
-        desc_html: 迷惑なメッセージを繰り返し送信するアカウントを自動で通報することができます。誤検知を含む可能性があります。
-        title: スパム対策を有効にする
       thumbnail:
         desc_html: OpenGraphとAPIによるプレビューに使用されます。サイズは1200×630px推奨です
         title: サーバーのサムネイル
@@ -646,13 +675,18 @@ ja:
       no_status_selected: 何も選択されていないため、変更されていません
       title: トゥート一覧
       with_media: メディアあり
+    system_checks:
+      database_schema_check:
+        message_html: 未実行のデータベースマイグレーションがあります。実行して正常に動作するようにしてください。
+      rules_check:
+        action: サーバーのルールを管理
+        message_html: サーバーのルールを定義していません。
+      sidekiq_process_check:
+        message_html: "%{value} キューに対応するSidekiq プロセスがありません。Sidekiq の設定を確認してください。"
     tags:
       accounts_today: 本日使用した人数
       accounts_week: 今週使用した人数
       breakdown: 直近のサーバー別使用状況
-      context: 表示先
-      directory: ディレクトリに使用
-      in_directory: "%{count} 人がディレクトリに使用"
       last_active: 最近使われた順
       most_popular: 使用頻度順
       most_recent: 新着順
@@ -669,6 +703,7 @@ ja:
       add_new: 追加
       delete: 削除
       edit_preset: プリセット警告文を編集
+      empty: まだプリセット警告文が作成されていません。
       title: プリセット警告文を管理
   admin_mailer:
     new_pending_account:
@@ -905,11 +940,11 @@ ja:
         verification_failed: KeybaseはこのトークンをKeybaseユーザー%{kb_username}の署名として認識しませんでした。Keybaseから再試行してください。
       wrong_user: "%{current}としてログインしている間%{proving}の証明を作成することはできません。%{proving}としてログインし、もう一度やり直してください。"
     explanation_html: ここではKeybaseのような他のサービスのアカウントと暗号化し関連づけることができます。これによりそれらのサービス上で他の人が暗号化されたメッセージを送信したり、あなたの送信した内容があなたからのものであると信用できるようになります。
-    i_am_html: I am %{username} on %{service}.
-    identity: Identity
+    i_am_html: 私は %{service} の %{username} です。
+    identity: 所属
     inactive: 非アクティブ
     publicize_checkbox: 'そしてこれをトゥートします:'
-    publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}'
+    publicize_toot: '証明されました!私は %{service} の %{username} です: %{url}'
     remove: アカウントから証明書を削除
     removed: アカウントから証明書を削除することに成功しました
     status: 認証状態
@@ -1026,10 +1061,14 @@ ja:
       body: "%{name} さんから返信がありました:"
       subject: "%{name} さんに返信されました"
       title: 新たな返信
+    poll:
+      subject: "%{name}  さんの投票が終了しました"
     reblog:
       body: "%{name} さんにブーストされた、あなたのトゥートがあります:"
       subject: "%{name} さんにブーストされました"
       title: 新たなブースト
+    status:
+      subject: "%{name} さんが投稿しました"
   notifications:
     email_events: メールによる通知
     email_events_hint: '受信する通知を選択:'
@@ -1178,8 +1217,6 @@ ja:
     relationships: フォロー・フォロワー
     two_factor_authentication: 二段階認証
     webauthn_authentication: セキュリティキー
-  spam_check:
-    spam_detected: これは自動的に作成された通報です。スパムが検出されています。
   statuses:
     attached:
       audio:
@@ -1216,6 +1253,7 @@ ja:
     sign_in_to_participate: ログインして会話に参加
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: ダイレクト
       private: フォロワー限定
       private_long: フォロワーにのみ表示されます
       public: 公開
@@ -1384,11 +1422,8 @@ ja:
       tips: 豆知識
       title: ようこそ、%{name}!
   users:
-    blocked_email_provider: このメールプロバイダは許可されていません
     follow_limit_reached: あなたは現在 %{limit} 人以上フォローできません
     generic_access_help_html: アクセスできませんか? %{email} に問い合わせることができます。
-    invalid_email: メールアドレスが無効です
-    invalid_email_mx: メールアドレスが存在しないようです
     invalid_otp_token: 二段階認証コードが間違っています
     invalid_sign_in_token: 無効なセキュリティコードです
     otp_lost_help_html: どちらも使用できない場合、%{email} に連絡を取ると解決できるかもしれません
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 523d2bdd5..80c738b26 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -33,7 +33,6 @@ ka:
     pin_errors:
       following: იმ ადამიანს, ვინც მოგწონთ, უკვე უნდა მიჰყვებოდეთ
     posts_with_replies: ტუტები და პასუხები
-    reserved_username: მომხმარებელი რეზერვირებულია
     roles:
       admin: ადმინისტრატორი
       bot: ბოტი
@@ -127,35 +126,6 @@ ka:
       username: მომხმარებლის სახელი
       web: ვები
     action_logs:
-      actions:
-        assigned_to_self_report: "%{name}-მა დანიშნა რეპორტი %{target} საკუთარ თავზე"
-        change_email_user: "%{name}-მა შეცვალა %{target} მომხმარებლის ელ-ფოსტის მისამართი"
-        confirm_user: "%{name}-მა დაამოწმა %{target} მომხმარებლის ელ-ფოსტის მისამართი"
-        create_custom_emoji: "%{name}-მა ატვირთა ახალი ემოჯი %{target}"
-        create_domain_block: "%{name}-მა დაბლოკა დომენი %{target}"
-        create_email_domain_block: "%{name}-მა შავ სიაში მოაქცია დომენი %{target}"
-        demote_user: "%{name}-მა დააქვეითა მომხმარებელი %{target}"
-        destroy_domain_block: "%{name}-მა ბლოკი მოხსნა დომენს %{target}"
-        destroy_email_domain_block: "%{name} თეთრ სიაში მოაქცია დომენი %{target}"
-        destroy_status: "%{name}-მა გააუქმა სტატუსი %{target}-ზე"
-        disable_2fa_user: "%{name} გათიშა მეორე ფაქტორის მოთხოვნილება მომხმარებელზე %{target}"
-        disable_custom_emoji: "%{name}-მა გათისა ემოჯი %{target}"
-        disable_user: "%{name}-მა გათიშა ლოგინი მომხმარებლისთვის %{target}"
-        enable_custom_emoji: "%{name}-მა ჩართო ემოჯი %{target}"
-        enable_user: "%{name}-მა ჩართო ლოგინი მომხმარებლისთვის %{target}"
-        memorialize_account: "%{name}-მა აქცია ანგარიში %{target} მემორანდუმის გვერდად"
-        promote_user: "%{name}-მა დააწინაურა მომხმარებელი %{target}"
-        remove_avatar_user: "%{name}-მა გააუქმა %{target} მომხმარებლის ავატარი"
-        reopen_report: "%{name}-მა ხელახლა გახსნა რეპორტი %{target}"
-        reset_password_user: "%{name} გადატვირთა მომხმარებლის %{target} პაროლი"
-        resolve_report: "%{name}-მა მოაგვარა %{target} მომხმარებლის რეპორტი"
-        silence_account: "%{name}-მა გააჩუმა %{target} ანგარიში"
-        suspend_account: "%{name} შეაჩერა %{target} ანგარიში"
-        unassigned_report: "%{name}-მა მოაშორა რეპორტი %{target}"
-        unsilence_account: "%{name}-მა მოაშორა გაჩუმება %{target} ანგარიშს"
-        unsuspend_account: "%{name}-მა მოაშორა შეჩერება %{target} ანგარიშს"
-        update_custom_emoji: "%{name}-მა განაახლა ემოჯი %{target}"
-        update_status: "%{name}-მა განაახლა სტატუსი %{target}-ით"
       deleted_status: "(გაუქმებული სტატუსი)"
       title: აუდიტის ლოგი
     custom_emojis:
@@ -783,7 +753,6 @@ ka:
       tips: რჩევები
       title: კეთილი იყოს თქვენი მობრძანება, %{name}!
   users:
-    invalid_email: ელ-ფოსტის მისამართი არაა მართებული
     invalid_otp_token: არასწორი მეორე ფაქტორის კოდი
     otp_lost_help_html: თუ დაკარგეთ წვდომა ორივეზე, შესაძლოა დაუკავშირდეთ %{email}-ს
     seamless_external_login: შესული ხართ გარე სერვისით, აქედან გამომდინარე პაროლი და ელ-ფოსტის მისამართი არაა ხელმისაწვდომი.
diff --git a/config/locales/kab.yml b/config/locales/kab.yml
index af83d5fc6..7046fe8ec 100644
--- a/config/locales/kab.yml
+++ b/config/locales/kab.yml
@@ -7,7 +7,6 @@ kab:
     active_count_after: d urmid
     active_footnote: Imseqdacen yekkren s wayyur (MAU)
     administered_by: 'Yettwadbel sɣur:'
-    api: API
     apps: Isnasen izirazen
     apps_platforms: Seqdec Maṣṭudun deg iOS, Android d tɣeṛγṛin-nniḍen
     browse_directory: Qelleb deg ukaram n imaɣnuten teǧǧeḍ-d gar-asen widak tebɣiḍ
@@ -63,7 +62,6 @@ kab:
       other: Tijewwiqin
     posts_tab_heading: Tijewwiqin
     posts_with_replies: Tijewwaqin akked tririyin
-    reserved_username: Isem-agi n umseqdac yettwaṭṭef yakan
     roles:
       admin: Anedbal
       bot: Aṛubut
@@ -172,7 +170,6 @@ kab:
       undo_silenced: Kkes asgugem
       unsubscribe: Ur ṭafar ara
       username: Isem n useqdac
-      web: Web
       whitelisted: Deg tebdert tamellalt
     action_logs:
       action_types:
@@ -187,40 +184,6 @@ kab:
         reset_password_user: Ales awennez n wawal n uffir
         silence_account: Sgugem amiḍan
         update_domain_block: Leqqem iḥder n taɣult
-      actions:
-        assigned_to_self_report: "%{name} imudd aneqqis %{target} i yiman-nsen"
-        change_email_user: "%{name} ibeddel imayl n umseqdac %{target}"
-        confirm_user: "%{name} isentem tansa imayl n umseqdac %{target}"
-        create_account_warning: "%{name} yuzen alɣu i %{target}"
-        create_announcement: "%{name} yerna taselɣut tamaynut %{target}"
-        create_custom_emoji: "%{name} yessuli-d imujiten imaynuten %{target}"
-        create_domain_allow: "%{name} yerna taɣult %{target} ɣer tebdart tamellalt"
-        create_domain_block: "%{name} yesseḥbes taɣult %{target}"
-        create_email_domain_block: "%{name} yerna taɣult n imayl %{target} ɣer tebdart taberkant"
-        create_ip_block: "%{name} rnu alugen i IP %{target}"
-        demote_user: "%{name} iṣubb-d deg usellun aseqdac %{target}"
-        destroy_announcement: "%{name} yekkes taselɣut %{target}"
-        destroy_custom_emoji: "%{name} ihudd imuji %{target}"
-        destroy_domain_allow: "%{name} yekkes taɣult %{target} seg tebdart tamellalt"
-        destroy_domain_block: "%{name} yekkes aseḥbes n taɣult %{target}"
-        destroy_email_domain_block: "%{name} yerna taɣult n imayl %{target} ɣer tebdart tamellalt"
-        destroy_ip_block: "%{name} kkes alugen i IP %{target}"
-        destroy_status: "%{name} yekkes tasuffeɣt n %{target}"
-        disable_custom_emoji: "%{name} yessens imuji %{target}"
-        disable_user: "%{name} yessens tuqqna i umseqdac %{target}"
-        enable_custom_emoji: "%{name} yermed imuji %{target}"
-        enable_user: "%{name} yermed tuqqna i umseqdac %{target}"
-        memorialize_account: "%{name} yerra amiḍan n %{target} d asebter n usmekti"
-        promote_user: "%{name} yerna deg usellun n useqdac %{target}"
-        remove_avatar_user: "%{name} yekkes avaṭar n %{target}"
-        reset_password_user: "%{name} iwennez awal uffir n useqdac %{target}"
-        resolve_report: "%{name} yefra aneqqis %{target}"
-        silence_account: "%{name} yesgugem amiḍan n %{target}"
-        unsilence_account: "%{name} yekkes asgugem n umiḍan n %{target}"
-        update_announcement: "%{name} ileqqem taselɣut %{target}"
-        update_custom_emoji: "%{name} yelqem imuji %{target}"
-        update_domain_block: "%{name} ileqqem iḥder n taɣult i %{target}"
-        update_status: "%{name} yelqem tasuffeɣt n %{target}"
       deleted_status: "(tasuffeɣt tettwakkes)"
       empty: Ulac iɣmisen i yellan.
       filter_by_user: Sizdeg s useqdac
@@ -416,9 +379,6 @@ kab:
       title: Tisuffiγin n umiḍan
       with_media: S taγwalt
     tags:
-      context: Asatal
-      directory: Deg ukaram
-      in_directory: "%{count} deg ukaram"
       last_active: Armud aneggaru
       most_popular: Ittwasnen aṭas
       most_recent: Melmi kan
@@ -437,11 +397,9 @@ kab:
   appearance:
     discovery: Asnirem
     localization:
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Yal yiwen·t y·tezmer a ttekki.
     sensitive_content: Agbur amḥulfu
   application_mailer:
-    salutation: "%{name},"
     view: 'Ẓaṛ:'
     view_profile: Ssken-d amaɣnu
     view_status: Ssken-d tasuffiɣt
@@ -461,9 +419,6 @@ kab:
     logout: Ffeγ
     migrate_account: Gujj γer umiḍan nniḍen
     or_log_in_with: Neγ eqqen s
-    providers:
-      cas: CAS
-      saml: SAML
     register: Jerred
     registration_closed: "%{instance} ur yeqbil ara imttekkiyen imaynuten"
     reset_password: Wennez awal uffir
@@ -491,7 +446,6 @@ kab:
   date:
     formats:
       default: "%d %b %Y"
-      with_month_name: "%B %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}isr"
@@ -531,7 +485,6 @@ kab:
     archive_takeout:
       date: Azemz
       size: Teγzi
-    csv: CSV
     lists: Tibdarin
     mutes: Wid tesgugmeḍ
   featured_tags:
@@ -625,11 +578,9 @@ kab:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
           billion: AṬ
           million: A
-          thousand: K
           trillion: Am
   otp_authentication:
     enable: Rmed
@@ -639,7 +590,6 @@ kab:
     next: Wayed
     older: Aqbuṛ
     prev: Win iɛeddan
-    truncate: "&hellip;"
   preferences:
     other: Wiyaḍ
   relationships:
@@ -667,37 +617,10 @@ kab:
     activity: Armud aneggaru
     browser: Iminig
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Iminig arusin
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
-      uc_browser: UCBrowser
-      weibo: Weibo
     current_session: Tiγimit tamirant
     description: "%{browser} s %{platform}"
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
-      mac: macOS
-      windows: Windows
-      windows_mobile: Windows Mobile
       windows_phone: Tiliγri Windows Phone
     revoke: Ḥwi
     title: Tiɣimiyin
@@ -743,7 +666,6 @@ kab:
     show_more: Ssken-d ugar
     show_thread: Ssken-d lxiḍ
     sign_in_to_participate: Qqen i waken ad tzeddiḍ deg udiwenni
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Imeḍfaṛen kan
       private_long: Ssken i ymeḍfaṛen kan
@@ -759,10 +681,6 @@ kab:
     contrast: Maṣṭudun (agnil awriran)
     default: Maṣṭudun (Aberkan)
     mastodon-light: Maṣṭudun (Aceɛlal)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Rnu
     disable: Gdel
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index 5f0da1888..34262650f 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -7,7 +7,6 @@ kk:
     active_count_after: актив
     active_footnote: Соңғы айдағы актив қолданушылар (MAU)
     administered_by: 'Админ:'
-    api: API
     apps: Мобиль қосымшалар
     apps_platforms: iOS, Android және басқа платформалардағы Mastodon қолданыңыз
     browse_directory: Профильдер каталогын қажет фильтрлер арқылы қараңыз
@@ -74,7 +73,6 @@ kk:
       other: Жазба
     posts_tab_heading: Жазба
     posts_with_replies: Жазбалар және жауаптар
-    reserved_username: Мұндай логин тіркелген
     roles:
       admin: Админ
       bot: Бот
@@ -193,39 +191,6 @@ kk:
       web: Веб
       whitelisted: Рұқсат тізімі
     action_logs:
-      actions:
-        assigned_to_self_report: "%{name} шағым тастады %{target} өздері үшін"
-        change_email_user: "%{name} e-mail адресін өзгертті - %{target}"
-        confirm_user: "%{name} e-mail адресін құптады - %{target}"
-        create_account_warning: "%{name} ескерту жіберді - %{target}"
-        create_custom_emoji: "%{name} жаңа эмодзи қосты %{target}"
-        create_domain_allow: "%{name} ақ тізімдегі домен %{target}"
-        create_domain_block: "%{name} домен бұғаттады - %{target}"
-        create_email_domain_block: "%{name} e-mail доменін қара тізімге қосты - %{target}"
-        demote_user: "%{name} төмендетілген қолданушы - %{target}"
-        destroy_custom_emoji: "%{name} эмодзи жойды %{target}"
-        destroy_domain_allow: "%{name} домені %{target} ақ тізімнен шығарылды"
-        destroy_domain_block: "%{name} бұғатталмаған домен %{target}"
-        destroy_email_domain_block: "%{name} e-mail доменін ақ тізімге кіргізді %{target}"
-        destroy_status: "%{name} жазбасын өшірді %{target}"
-        disable_2fa_user: "%{name} қолданушы үшін екі фактор ажыратылған %{target}"
-        disable_custom_emoji: "%{name} эмодзи алып тастады %{target}"
-        disable_user: "%{name} қосылмаған логин %{target}"
-        enable_custom_emoji: "%{name} қосылған эмодзи %{target}"
-        enable_user: "%{name} қосылған логин %{target}"
-        memorialize_account: "%{name} %{target} аккаунтын естеліктеріне қосты"
-        promote_user: "%{name} жарнамалады %{target}"
-        remove_avatar_user: "%{name} %{target} аватарын өшірді"
-        reopen_report: "%{name} %{target} шағымын қайта қарады"
-        reset_password_user: "%{name} %{target} құпиясөзін қалпына келтірді"
-        resolve_report: "%{name} %{target} шағымын қарастырды"
-        silence_account: "%{name} %{target} аккаунтын үнсіз қылды"
-        suspend_account: "%{name} %{target} аккаунтын тоқтатты"
-        unassigned_report: "%{name} бекітілмеген есеп %{target}"
-        unsilence_account: "%{name} %{target} аккаунтын қайта қосты"
-        unsuspend_account: "%{name} %{target} аккаунтын қайта қосты"
-        update_custom_emoji: "%{name} эмодзи жаңартты %{target}"
-        update_status: "%{name} жазбасын жаңартты %{target}"
       deleted_status: "(өшірілген жазба)"
       title: Аудит логы
     announcements:
@@ -276,7 +241,6 @@ kk:
       feature_profile_directory: Профиль каталогы
       feature_registrations: Тіркелулер
       feature_relay: Федерация релесі
-      feature_spam_check: Анти-спам
       feature_timeline_preview: Таймлайн превьюі
       features: Мүмкіндіктер
       hidden_service: Жасырын қызметтер федерациясы
@@ -451,8 +415,6 @@ kk:
         users: Жергілікті қолданушыларға
       domain_blocks_rationale:
         title: Дәлелді көрсету
-      enable_bootstrap_timeline_accounts:
-        title: Жаңа қолданушылар жазылатын адамдарды белгілеу
       hero:
         desc_html: Бастапқы бетінде көрсетіледі. Кем дегенде 600x100px ұсынылады. Орнатылмаған кезде, сервердің нобайына оралады
         title: Қаһарман суреті
@@ -503,9 +465,6 @@ kk:
         desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML тег
         title: Қолдану шарттары мен ережелер
       site_title: Сервер аты
-      spam_check_enabled:
-        desc_html: Мастодон бірнеше рет қажетсіз хабарламаларды жіберетін есептік жазбаларды автоматты түрде жасай алады. Жалған позитивтер болуы мүмкін.
-        title: Спамға қарсы автоматика
       thumbnail:
         desc_html: Used for previews via OpenGraph and API. 1200x630px рекоменделеді
         title: Сервер суреті
@@ -540,9 +499,6 @@ kk:
       accounts_today: Бүгін қолданылғандар
       accounts_week: Осы аптада қолданылғандар
       breakdown: Бүгінгі пайдалану көздері бойынша бөлу
-      context: Контекст
-      directory: Бөлім ішінде
-      in_directory: "%{count} бөлім ішінде"
       last_active: Соңғы белсенділік
       most_popular: Ең танымал
       most_recent: Ең соңғы
@@ -575,7 +531,6 @@ kk:
     add_new: Алиас қосу
     created_msg: Жаңа алиас сәтті жасалды. Енді сіз ескі аккаунттан көшіруді бастай аласыз.
     deleted_msg: Алиасты сәтті алып тастаңыз. Осы есептік жазбадан екіншіге ауысу мүмкін болмайды.
-    hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>.
     remove: Алиас сілтемесін алып тастау
   appearance:
     advanced_web_interface: Кеңейтілген веб-интерфейс
@@ -587,7 +542,6 @@ kk:
     toot_layout: Жазба формасы
   application_mailer:
     notification_preferences: Change e-mail prеferences
-    salutation: "%{name},"
     settings: 'Change e-mail preferеnces: %{link}'
     view: 'Viеw:'
     view_profile: Viеw Profile
@@ -835,26 +789,9 @@ kk:
       missing_also_known_as: бұл тіркелгіге сілтеме жасамайды
       move_to_self: ағымдағы шот болуы мүмкін емес
       not_found: табылмады
-      on_cooldown: You are on cooldown
     followers_count: Көшу кезіндегі оқырмандар
-    incoming_migrations: Moving from a different account
-    incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>.
-    moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over.
-    not_redirecting: Your account is not redirecting to any other account currently.
-    on_cooldown: You have recently migrated your account. This function will become available again in %{count} days.
-    past_migrations: Past migrations
-    proceed_with_move: Move followers
-    redirecting_to: Your account is redirecting to %{acct}.
-    set_redirect: Set redirect
     warning:
-      backreference_required: The new account must first be configured to back-reference this one
       before: 'Жұмысты бастамас бұрын, осы жазбаларды мұқият оқып шығыңыз:'
-      cooldown: After moving there is a cooldown period during which you will not be able to move again
-      disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
-      followers: This action will move all followers from the current account to the new account
-      only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
-      other_data: No other data will be moved automatically
-      redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
   moderation:
     title: Модерация
   notification_mailer:
@@ -898,11 +835,9 @@ kk:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
           billion: В
           million: М
-          quadrillion: Q
           thousand: К
           trillion: Т
   pagination:
@@ -910,7 +845,6 @@ kk:
     next: Келесі
     older: Ерте
     prev: Алдыңғы
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Бұл сауалнамаға қатысқансыз
@@ -1028,8 +962,6 @@ kk:
     profile: Профиль
     relationships: Жазылымдар және оқырмандар
     two_factor_authentication: Екі-факторлы авторизация
-  spam_check:
-    spam_detected: Бұл автоматтандырылған есеп. Спам анықталды.
   statuses:
     attached:
       description: 'Жүктелді: %{attached}'
@@ -1063,7 +995,6 @@ kk:
     show_more: Тағы әкел
     show_thread: Тақырыпты көрсет
     sign_in_to_participate: Сұхбатқа қатысу үшін кіріңіз
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Тек оқырмандарға
       private_long: Тек оқырмандарға ғана көрінеді
@@ -1164,10 +1095,6 @@ kk:
     contrast: Mastodon (Жоғары контраст)
     default: Mastodon (Қою)
     mastodon-light: Mastodon (Ашық)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     disable: Ажырату
     enabled: Екі-факторлы авторизация қосылған
@@ -1219,7 +1146,6 @@ kk:
       title: Ортаға қош келдің, %{name}!
   users:
     follow_limit_reached: Сіз %{limit} лимитінен көп адамға жазыла алмайсыз
-    invalid_email: Бұл e-mail адрес қате
     invalid_otp_token: Қате екі-факторлы код
     otp_lost_help_html: Егер кіру жолдарын жоғалтып алсаңыз, сізге %{email} арқылы жіберіледі
     seamless_external_login: Сыртқы сервис арқылы кіріпсіз, сондықтан құпиясөз және электрондық пошта параметрлері қол жетімді емес.
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 042660432..f76ebbd08 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -26,6 +26,8 @@ ko:
       이것은 페더레이션을 목적으로 사용 되며 인스턴스 전체를 차단하려 하지 않는 이상 차단하지 않아야 합니다, 그 경우에는 도메인 차단을 사용하세요.
     learn_more: 자세히
     privacy_policy: 개인정보 정책
+    rules: 서버 규칙
+    rules_html: '아래의 글은 이 마스토돈 서버에 계정이 있다면 따라야 할 규칙의 요약입니다:'
     see_whats_happening: 무슨 일이 일어나는 지 보기
     server_stats: '서버 통계:'
     source_code: 소스 코드
@@ -74,7 +76,6 @@ ko:
       other: 툿
     posts_tab_heading: 툿
     posts_with_replies: 툿과 답장
-    reserved_username: 이 아이디는 예약되어 있습니다
     roles:
       admin: 관리자
       bot: 봇
@@ -225,6 +226,7 @@ ko:
         create_domain_block: 도메인 차단 추가
         create_email_domain_block: 이메일 도메인 차단 생성
         create_ip_block: IP 규칙 만들기
+        create_unavailable_domain: 사용 불가능한 도메인 생성
         demote_user: 사용자 강등
         destroy_announcement: 공지사항 삭제
         destroy_custom_emoji: 커스텀 에모지 삭제
@@ -233,6 +235,7 @@ ko:
         destroy_email_domain_block: 이메일 도메인 차단 삭제
         destroy_ip_block: IP 규칙 삭제
         destroy_status: 게시물 삭제
+        destroy_unavailable_domain: 사용 불가능한 도메인 제거
         disable_2fa_user: 2단계 인증 비활성화
         disable_custom_emoji: 커스텀 에모지 비활성화
         disable_user: 사용자 비활성화
@@ -256,46 +259,48 @@ ko:
         update_domain_block: 도메인 차단 갱신
         update_status: 게시물 게시
       actions:
-        assigned_to_self_report: "%{name}이 리포트 %{target}을 자신에게 할당했습니다"
-        change_email_user: "%{name}이 %{target}의 이메일 주소를 변경했습니다"
-        confirm_user: "%{name}이 %{target}의 이메일 주소를 컨펌했습니다"
-        create_account_warning: "%{name}가 %{target}에게 경고 보냄"
-        create_announcement: "%{name} 님이 새 공지 %{target}을 만들었습니다"
-        create_custom_emoji: "%{name}이 새로운 에모지 %{target}를 추가했습니다"
-        create_domain_allow: "%{name} 님이 %{target} 도메인을 허용리스트에 넣었습니다"
-        create_domain_block: "%{name}이 도메인 %{target}를 차단했습니다"
-        create_email_domain_block: "%{name}이 이메일 도메인 %{target}를 차단했습니다"
-        create_ip_block: "%{name} 님이 IP 규칙 %{target}을 만들었습니다"
-        demote_user: "%{name}이 %{target}을 강등했습니다"
-        destroy_announcement: "%{name} 님이 공지 %{target}을 삭제했습니다"
-        destroy_custom_emoji: "%{name}이 %{target} 에모지를 삭제함"
-        destroy_domain_allow: "%{name} 님이 %{target} 도메인을 허용리스트에서 제거하였습니다"
-        destroy_domain_block: "%{name}이 도메인 %{target}의 차단을 해제했습니다"
-        destroy_email_domain_block: "%{name}이 이메일 도메인 %{target}을 허용리스트에 넣었습니다"
-        destroy_ip_block: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다"
-        destroy_status: "%{name}이 %{target}의 툿을 삭제했습니다"
-        disable_2fa_user: "%{name}이 %{target}의 2FA를 비활성화 했습니다"
-        disable_custom_emoji: "%{name}이 에모지 %{target}를 비활성화 했습니다"
-        disable_user: "%{name}이 %{target}의 로그인을 비활성화 했습니다"
-        enable_custom_emoji: "%{name}이 에모지 %{target}를 활성화 했습니다"
-        enable_user: "%{name}이 %{target}의 로그인을 활성화 했습니다"
-        memorialize_account: "%{name}이 %{target}의 계정을 메모리엄으로 전환했습니다"
-        promote_user: "%{name}이 %{target}를 승급시켰습니다"
-        remove_avatar_user: "%{name}이 %{target}의 아바타를 지웠습니다"
-        reopen_report: "%{name}이 리포트 %{target}을 다시 열었습니다"
-        reset_password_user: "%{name}이 %{target}의 암호를 초기화했습니다"
-        resolve_report: "%{name}이 %{target} 신고를 처리됨으로 변경하였습니다"
-        sensitive_account: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다"
-        silence_account: "%{name}이 %{target}의 계정을 침묵시켰습니다"
-        suspend_account: "%{name}이 %{target}의 계정을 정지시켰습니다"
-        unassigned_report: "%{name}이 리포트 %{target}을 할당 해제했습니다"
-        unsensitive_account: "%{name} 님이 %{target}의 미디어를 민감하지 않음으로 표시했습니다"
-        unsilence_account: "%{name}이 %{target}에 대한 침묵을 해제했습니다"
-        unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다"
-        update_announcement: "%{name} 님이 공지 %{target}을 갱신했습니다"
-        update_custom_emoji: "%{name}이 에모지 %{target}를 업데이트 했습니다"
-        update_domain_block: "%{name} 님이 %{target}에 대한 도메인 차단을 갱신했습니다"
-        update_status: "%{name}이 %{target}의 상태를 업데이트 했습니다"
+        assigned_to_self_report_html: "%{name} 님이 신고 %{target}을 자신에게 할당했습니다"
+        change_email_user_html: "%{name} 님이 사용자 %{target}의 이메일 주소를 변경했습니다"
+        confirm_user_html: "%{name} 님이 사용자 %{target}의 이메일 주소를 승인했습니다"
+        create_account_warning_html: "%{name} 님이 %{target}에게 경고를 보냈습니다"
+        create_announcement_html: "%{name} 님이 새 공지 %{target}을 만들었습니다"
+        create_custom_emoji_html: "%{name} 님이 새로운 에모지 %{target}를 업로드 했습니다"
+        create_domain_allow_html: "%{name} 님이 %{target} 도메인을 허용리스트에 넣었습니다"
+        create_domain_block_html: "%{name} 님이 도메인 %{target}를 차단했습니다"
+        create_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}를 차단했습니다"
+        create_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 만들었습니다"
+        create_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 중지"
+        demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다"
+        destroy_announcement_html: "%{name} 님이 공지 %{target}을 삭제했습니다"
+        destroy_custom_emoji_html: "%{name} 님이 %{target} 에모지를 삭제했습니다"
+        destroy_domain_allow_html: "%{name} 님이 %{target} 도메인과의 연합을 금지했습니다"
+        destroy_domain_block_html: "%{name} 님이 도메인 %{target}의 차단을 해제했습니다"
+        destroy_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}을 차단 해제하였습니다"
+        destroy_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다"
+        destroy_status_html: "%{name} 님이 %{target}의 게시물을 삭제했습니다"
+        destroy_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 재개"
+        disable_2fa_user_html: "%{name} 님이 사용자 %{target}의 2FA를 비활성화 했습니다"
+        disable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 비활성화 했습니다"
+        disable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 비활성화 했습니다"
+        enable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 활성화 했습니다"
+        enable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 활성화 했습니다"
+        memorialize_account_html: "%{name} 님이 %{target}의 계정을 기념비 페이지로 전환했습니다"
+        promote_user_html: "%{name} 님이 사용자 %{target}를 승급시켰습니다"
+        remove_avatar_user_html: "%{name} 님이 %{target}의 아바타를 지웠습니다"
+        reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다"
+        reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다"
+        resolve_report_html: "%{name} 님이 신고 %{target}를 처리됨으로 변경하였습니다"
+        sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다"
+        silence_account_html: "%{name} 님이 %{target}의 계정을 침묵시켰습니다"
+        suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다"
+        unassigned_report_html: "%{name} 님이 신고 %{target}을 할당 해제했습니다"
+        unsensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감하지 않음으로 표시했습니다"
+        unsilence_account_html: "%{name} 님이 %{target}의 계정에 대한 침묵을 해제했습니다"
+        unsuspend_account_html: "%{name} 님이 %{target}의 계정에 대한 정지를 해제했습니다"
+        update_announcement_html: "%{name} 님이 공지사항 %{target}을 갱신했습니다"
+        update_custom_emoji_html: "%{name} 님이 에모지 %{target}를 업데이트 했습니다"
+        update_domain_block_html: "%{name} 님이 %{target}에 대한 도메인 차단을 갱신했습니다"
+        update_status_html: "%{name} 님이 %{target}의 게시물을 업데이트 했습니다"
       deleted_status: "(삭제됨)"
       empty: 로그를 찾을 수 없습니다
       filter_by_action: 행동으로 거르기
@@ -310,10 +315,12 @@ ko:
       new:
         create: 공지사항 생성
         title: 새 공지사항
+      publish: 게시
       published_msg: 공지가 성공적으로 발행되었습니다!
       scheduled_for: "%{time}에 예약됨"
       scheduled_msg: 공지의 발행이 예약되었습니다!
       title: 공지사항
+      unpublish: 게시 취소
       unpublished_msg: 공지가 성공적으로 발행 취소되었습니다!
       updated_msg: 공지가 성공적으로 업데이트되었습니다!
     custom_emojis:
@@ -358,7 +365,6 @@ ko:
       feature_profile_directory: 프로필 책자
       feature_registrations: 가입
       feature_relay: 연합 릴레이
-      feature_spam_check: 안티 스팸
       feature_timeline_preview: 타임라인 미리보기
       features: 기능
       hidden_service: 히든 서비스와의 연합
@@ -437,9 +443,33 @@ ko:
         create: 차단 규칙 생성
         title: 새 이메일 도메인 차단
       title: Email 도메인 차단
+    follow_recommendations:
+      description_html: "<strong>팔로우 추천은 새 사용자들이 관심 가는 콘텐트를 빠르게 찾을 수 있도록 도와줍니다</strong>. 사용자가 개인화 된 팔로우 추천이 만들어지기 위한 충분한 상호작용을 하지 않은 경우, 이 계정들이 대신 추천 됩니다. 이들은 해당 언어에 대해 많은 관심을 갖거나 많은 로컬 팔로워를 가지고 있는 계정들을 섞어서 날마다 다시 계산 됩니다."
+      language: 할당할 언어
+      status: 게시물
+      suppress: 팔로우 추천 숨기기
+      suppressed: 숨겨짐
+      title: 팔로우 추천
+      unsuppress: 팔로우 추천 복원
     instances:
+      back_to_all: 전체
+      back_to_limited: 제한됨
+      back_to_warning: 경고
       by_domain: 도메인
+      delivery:
+        all: 전체
+        clear: 전달 에러 초기화
+        restart: 전달 재시작
+        stop: 전달 중지
+        title: 전달
+        unavailable: 사용불가
+        unavailable_message: 전달 불가
+        warning: 경고
+        warning_message:
+          other: 전달 실패 %{count}일
       delivery_available: 전송 가능
+      delivery_error_days: 전달 에러가 난 날짜들
+      delivery_error_hint: 만약 %{count}일동안 전달이 불가능하다면, 자동으로 전달불가로 표시됩니다.
       empty: 도메인이 하나도 없습니다.
       known_accounts:
         other: 알려진 계정 %{count}개
@@ -536,6 +566,13 @@ ko:
       unassign: 할당 해제
       unresolved: 미해결
       updated_at: 업데이트 시각
+    rules:
+      add_new: 규칙 추가
+      delete: 삭제
+      description_html: 대부분의 경우 사람들이 이용약관을 반드시 읽고 동의하도록 하지만, 보통의 사람들은 문제가 일어나기 전까지는 읽지 않습니다. <strong>여러분의 서버 규칙을 목록으로 정리해서 한 번에 읽기 쉽게 만드세요.</strong> 규칙 각각을 짧고 단순하게 만들고, 하나를 여러 개로 쪼개지도 마세요.
+      edit: 규칙 수정
+      empty: 아직 정의된 서버 규칙이 없습니다.
+      title: 서버 규칙
     settings:
       activity_api_enabled:
         desc_html: 주별 로컬에 게시 된 글, 활성 사용자 및 새로운 가입자 수
@@ -559,9 +596,6 @@ ko:
         users: 로그인 한 유저에게
       domain_blocks_rationale:
         title: 사유 보여주기
-      enable_bootstrap_timeline_accounts:
-        desc_html: 새 사용자들이 자동으로 설정 된 계정들을 팔로우 하도록 해서 그들의 홈 피드가 빈 상태로 시작하지 않도록 합니다
-        title: 새 유저가 팔로우할 계정을 보여주기
       hero:
         desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 서버의 썸네일이 사용 됩니다
         title: 히어로 이미지
@@ -615,9 +649,6 @@ ko:
         desc_html: 당신은 독자적인 개인정보 취급 방침이나 이용약관, 그 외의 법적 근거를 작성할 수 있습니다. HTML태그를 사용할 수 있습니다
         title: 커스텀 서비스 이용 약관
       site_title: 서버 이름
-      spam_check_enabled:
-        desc_html: 마스토돈은 반복된 메시지 등의 측정값에 따라 자동으로 계정을 침묵, 신고할 수 있습니다. 위양성(False-positive)이 존재할 수 있습니다.
-        title: 안티 스팸
       thumbnail:
         desc_html: OpenGraph와 API의 미리보기로 사용 됩니다. 1200x630px을 권장합니다
         title: 서버 썸네일
@@ -648,13 +679,18 @@ ko:
       no_status_selected: 아무 것도 선택 되지 않아 아무 것도 바뀌지 않았습니다
       title: 계정 툿
       with_media: 미디어 있음
+    system_checks:
+      database_schema_check:
+        message_html: 데이터베이스 마이그레이션이 대기중입니다. 응용프로그램이 예상한대로 동작할 수 있도록 마이그레이션을 실행해 주세요
+      rules_check:
+        action: 서버 규칙 관리
+        message_html: 아직 서버규칙을 정하지 않았습니다.
+      sidekiq_process_check:
+        message_html: "%{value} 큐에 대한 사이드킥 프로세스가 발견되지 않았습니다. 사이드킥 설정을 검토해주세요"
     tags:
       accounts_today: 오늘의 순 사용자
       accounts_week: 금주의 순 사용자
       breakdown: 소스별 오늘의 사용량 분석
-      context: 문맥
-      directory: 책자에 있음
-      in_directory: 디렉토리에 %{count}개 있음
       last_active: 최근 활동
       most_popular: 최고 인기
       most_recent: 최신
@@ -671,6 +707,7 @@ ko:
       add_new: 새로 추가
       delete: 삭제
       edit_preset: 경고 틀 수정
+      empty: 아직 어떤 경고 틀도 정의되지 않았습니다.
       title: 경고 틀 관리
   admin_mailer:
     new_pending_account:
@@ -785,7 +822,7 @@ ko:
   date:
     formats:
       default: "%Y-%b-%d"
-      with_month_name: "%Y-%B-%d"
+      with_month_name: "%Y년 %B %d일"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}시간"
@@ -1028,10 +1065,14 @@ ko:
       body: "%{name} 님이 답장을 보냈습니다:"
       subject: "%{name} 님이 답장을 보냈습니다"
       title: 새 멘션
+    poll:
+      subject: "%{name}의 투표가 종료되었습니다"
     reblog:
       body: "%{name} 님이 내 툿을 부스트 했습니다:"
       subject: "%{name} 님이 내 툿을 부스트 했습니다"
       title: 새 부스트
+    status:
+      subject: "%{name} 님이 방금 게시물을 올렸습니다"
   notifications:
     email_events: 이메일 알림에 대한 이벤트
     email_events_hint: '알림 받을 이벤트를 선택해주세요:'
@@ -1121,40 +1162,40 @@ ko:
     activity: 마지막 활동
     browser: 브라우저
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
+      alipay: 알리페이
+      blackberry: 블랙베리
+      chrome: 크롬
+      edge: 마이크로소프트 엣지
+      electron: 일렉트론
+      firefox: 파이어폭스
       generic: 알 수 없는 브라우저
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
+      ie: 인터넷 익스플로러
+      micro_messenger: 마이크로메신저
       nokia: Nokia S40 Ovi 브라우저
-      opera: Opera
+      opera: 오페라
       otter: Otter
-      phantom_js: PhantomJS
+      phantom_js: 팬텀JS
       qq: QQ 브라우저
-      safari: Safari
+      safari: 사파리
       uc_browser: UC브라우저
-      weibo: Weibo
+      weibo: 웨이보
     current_session: 현재 세션
     description: "%{platform}의 %{browser}"
     explanation: 내 마스토돈 계정에 현재 로그인 중인 웹 브라우저 목록입니다.
     ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
+      adobe_air: 어도비 Air
+      android: 안드로이드
+      blackberry: 블랙베리
+      chrome_os: 크롬OS
+      firefox_os: 파이어폭스OS
       ios: iOS
-      linux: Linux
-      mac: macOS
+      linux: 리눅스
+      mac: 맥OS
       other: 알 수 없는 플랫폼
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
+      windows: 윈도우즈
+      windows_mobile: 윈도우즈 모바일
+      windows_phone: 윈도우즈 폰
     revoke: 삭제
     revoke_success: 세션이 성공적으로 삭제되었습니다
     title: 세션
@@ -1180,8 +1221,6 @@ ko:
     relationships: 팔로잉과 팔로워
     two_factor_authentication: 2단계 인증
     webauthn_authentication: 보안 키
-  spam_check:
-    spam_detected: 이것은 자동화 된 신고입니다. 스팸이 감지되었습니다.
   statuses:
     attached:
       audio:
@@ -1218,6 +1257,7 @@ ko:
     sign_in_to_participate: 로그인 하여 이 대화에 참여하기
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: 다이렉트
       private: 비공개
       private_long: 팔로워에게만 공개됩니다
       public: 공개
@@ -1386,11 +1426,8 @@ ko:
       tips: 팁
       title: 환영합니다 %{name} 님!
   users:
-    blocked_email_provider: 허용된 이메일 제공자가 아닙니다
     follow_limit_reached: 당신은 %{limit}명의 사람을 넘어서 팔로우 할 수 없습니다
     generic_access_help_html: 계정 로그인에 문제가 있나요? %{email} 로 도움을 요청할 수 있습니다
-    invalid_email: 메일 주소가 올바르지 않습니다
-    invalid_email_mx: 이메일 주소가 존재하지 않는 것 같습니다
     invalid_otp_token: 2단계 인증 코드가 올바르지 않습니다
     invalid_sign_in_token: 잘못된 보안 코드
     otp_lost_help_html: 만약 양쪽 모두를 잃어버렸다면 %{email}을 통해 복구할 수 있습니다
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index 0d76e1b97..d421b42a7 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -7,7 +7,6 @@ ku:
     active_count_after: چالاک
     active_footnote: بەکارهێنەرانی چالاکی مانگانە (MAU)
     administered_by: 'بەڕێوەبراو لەلایەن:'
-    api: API
     apps: ئەپەکانی مۆبایل
     apps_platforms: بەکارهێنانی ماستۆدۆن لە iOS، ئەندرۆید و سەکۆکانی تر
     browse_directory: گەڕان لە ڕێبەرێکی پرۆفایل و پاڵاوتن بەپێی بەرژەوەندیەکان
@@ -77,7 +76,6 @@ ku:
       other: تووتەکان
     posts_tab_heading: تووتەکان
     posts_with_replies: تووتەکان و وڵامەکان
-    reserved_username: ناوی بەکارهێنەر پارێزراوە
     roles:
       admin: بەڕێوەبەر
       bot: بۆت
@@ -256,46 +254,6 @@ ku:
         update_announcement: بەڕۆژکردنەوەی راگەیەندراو
         update_custom_emoji: بەڕۆژکردنی ئێمۆمۆجی دڵخواز
         update_status: بەڕۆژکردنی دۆخ
-      actions:
-        assigned_to_self_report: "%{name} پێداچوونەوە بە گوزارشتی %{target} لە ئەستۆ گرتووە"
-        change_email_user: "%{name} ناونیشانی ئیمەیلی بەکارهینەری %{target} گۆڕا"
-        confirm_user: "%{name} ناونیشانی ئیمەیلی بەکارهینەری %{target} پەسەند کرد"
-        create_account_warning: "%{name} ئاگاداریێک بۆ %{target} نارد"
-        create_announcement: "%{name} ئاگاداری نوێی دروستکرد %{target}"
-        create_custom_emoji: "%{name} ئیمۆجی نوێی %{target} بارکرد"
-        create_domain_allow: "%{name} دۆمەینی %{target} ڕێپێدا"
-        create_domain_block: "%{name} دۆمەنی %{target} بلۆککرد"
-        create_email_domain_block: "%{name} دۆمەینی ئیمەیلی %{target} بلۆککرد"
-        create_ip_block: "%{name} یاسای دروستکراو بۆ ئای‌پی %{target}"
-        demote_user: "%{name} ئاستی بەکارهێنەری %{target} دابەزاند"
-        destroy_announcement: "%{name} ئاگاداری %{target} سڕیەوە"
-        destroy_custom_emoji: "%{name} ئیمۆجی %{target} لە ناوبرد"
-        destroy_domain_allow: "%{name} دۆمەنی%{target} لە پێرستی ڕێپێدراو لابرد"
-        destroy_domain_block: "%{name} بەرگیری لە دۆمەینی %{target} لابرد"
-        destroy_email_domain_block: "%{name} دۆمەینی ئیمەیلی %{target} خستە پێرستی ڕێپێدراو"
-        destroy_ip_block: "%{name} یاسای سڕینەوە بۆ ئای‌پی %{target}"
-        destroy_status: "%{name} نووسراوەی %{target} سڕیەوە"
-        disable_2fa_user: "%{name} دوو مەرجی فاکتەر بۆ بەکارهێنەر %{target} لە کارخست"
-        disable_custom_emoji: "%{name} ئیمۆجی %{target} ناچالاک کرد"
-        disable_user: "%{name} چوونەژوورەوەی بەکارهێنەری %{target} لەکارخست"
-        enable_custom_emoji: "%{name} ئیمۆجی %{target} چالاک کرد"
-        enable_user: "%{name} چوونەژوورەوەی بەکارهێنەری %{target} چالککرد"
-        memorialize_account: "%{name} هەژمارەی بەکارهێنەری %{target} گۆڕا بە پەڕەی یادەوەری"
-        promote_user: "%{name} ئاستی بەکارهێنەری %{target} بەرزکردەوە"
-        remove_avatar_user: "%{name} وێنۆچکەی بەکارهێنەری %{target} سڕیەوە"
-        reopen_report: "%{name} گوزارشتی %{target} دووبارە وەگڕخستەوە"
-        reset_password_user: "%{name} تێپەروشەی بەکارهێنەری %{target} گەڕانەوە"
-        resolve_report: "%{name} گوزارشتی %{target} دووبارە وەگڕخستەوە"
-        sensitive_account: "%{name} بە %{target}'s میدیا وەک هەستیار دیاری کراوە"
-        silence_account: "%{name} هەژماری %{target}'s بێدەنگ کرا"
-        suspend_account: "%{name} هەژماری %{target}'ی ڕاگیرا"
-        unassigned_report: "%{name} ڕاپۆرتی دیاری نەکراوی %{target}"
-        unsensitive_account: "%{name} بە %{target}'s میدیا وەک هەستیار دیاری نەکراوە"
-        unsilence_account: "%{name} هەژماری %{target}'s بێ دەنگ"
-        unsuspend_account: "%{name} هەژماری %{target}'s هەڵنەپەسێردراو"
-        update_announcement: "%{name} بەڕۆژکراوەی راگەیاندنی %{target}"
-        update_custom_emoji: "%{name} ئیمۆجی %{target} نوێکرایەوە"
-        update_status: "%{name} نووسراوەی %{target} بەڕۆژکرد"
       deleted_status: "(نووسراوە سڕاوە)"
       empty: هیچ لاگی کارنەدۆزرایەوە.
       filter_by_action: فلتەر کردن بە کردار
@@ -358,7 +316,6 @@ ku:
       feature_profile_directory: ڕێنیشاندەرێکی پرۆفایل
       feature_registrations: تۆمارکراوەکان
       feature_relay: گواستنەوەی گشتی
-      feature_spam_check: دژە سپام
       feature_timeline_preview: پێش نیشاندانی نووسراوەکان
       features: تایبەتمەندیەکان
       hidden_service: پەیوەندی نێوان ڕاژە یان خزمەتگوزاری نێننی
@@ -556,8 +513,6 @@ ku:
         users: بۆ چوونە ژوورەوەی بەکارهێنەرانی ناوخۆ
       domain_blocks_rationale:
         title: پیشاندانی ڕێژەیی
-      enable_bootstrap_timeline_accounts:
-        title: چالاککردنی بەدواکەکانی گریمانەیی بۆ بەکارهێنەرە نوێکان
       hero:
         desc_html: نیشان درا لە پەڕەی سەرەتا. بەلایەنی کەمەوە 600x100px پێشنیارکراوە. کاتێک ڕێک نەکەویت، دەگەڕێتەوە بۆ وێنۆجکەی ڕاژە
         title: وێنەی پاڵەوان
@@ -608,9 +563,6 @@ ku:
         desc_html: دەتوانیت سیاسەتی تایبەتیێتی خۆت بنووسیت، مەرجەکانی خزمەتگوزاری یان یاسایی تر. دەتوانیت تاگەکانی HTML بەکاربێنیت
         title: مەرجەکانی خزمەتگوزاری ئاسایی
       site_title: ناوی ڕاژە
-      spam_check_enabled:
-        desc_html: ماستۆدۆن دەتوانێت هەژمارەکان خۆکارانە بێدەنگ یان گوزارشتیان بکا. زۆر جار بۆ ناسینی هەرزەپەیام و پەیامی نەخوازیاری دووپاتدەبێتەوە،جار و بار بە هەڵە دەردەچێت.
-        title: دژە هەرزەنامە
       thumbnail:
         desc_html: بۆ پێشبینین بەکارهاتووە لە ڕێگەی OpenGraph وە API. ڕووناکی بینین ١٢٠٠x٦٣٠پیکسێڵ پێشنیارکراوە
         title: وێنەی بچکۆلەی ڕاژە
@@ -645,9 +597,6 @@ ku:
       accounts_today: بەکارهێنانی بێ هاوتای ئەمڕۆ
       accounts_week: بەکارهێنەری یەکتا لەم هەفتەیە
       breakdown: بەکارهێنانی ئەمڕۆ بە جوداکردنی سەرچاوە
-      context: دەق
-      directory: لە پێرست
-      in_directory: "%{count} لە پێرست"
       last_active: دوا چالاکی
       most_popular: بەناوبانگترین
       most_recent: تازەترین
@@ -691,13 +640,11 @@ ku:
     discovery: دۆزینەوە
     localization:
       body: ماستۆدۆن لەلایەن خۆبەخشەوە وەردەگێڕێت.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: هەموو کەسێک دەتوانێت بەشداری بکات.
     sensitive_content: ناوەڕۆکی هەستیار
     toot_layout: لۆی توت
   application_mailer:
     notification_preferences: گۆڕینی پەسەندکراوەکانی ئیمەیڵ
-    salutation: "%{name},"
     settings: 'گۆڕینی پەسەندکراوەکانی ئیمەیڵ: %{link}'
     view: 'نیشاندان:'
     view_profile: پرۆفایل نیشان بدە
@@ -732,9 +679,6 @@ ku:
     migrate_account: گواستنەوە بۆ ئەژمێرێکی تر
     migrate_account_html: ئەگەر دەتەوێت ئەم هەژمارە دووبارە ئاڕاستە بکەیت بۆ ئەژمێرێکی تر، دەتوانیت <href="%{path}"> کرتەیەک لێرە بکەی </a>.
     or_log_in_with: یان چوونە ژوورەوە بە
-    providers:
-      cas: CAS
-      saml: SAML
     register: خۆ تۆمارکردن
     registration_closed: "%{instance} ئەندامانی نوێ قبووڵ ناکات"
     resend_confirmation: دووبارە ناردنی ڕێنماییەکانی دووپاتکردنەوە
@@ -774,24 +718,15 @@ ku:
     errors:
       invalid_key: کلیلی باوڕپێکراو Ed25519 یان Curve25519 دروست نییە
       invalid_signature: واژووی Ed25519 بڕوادار نییە
-  date:
-    formats:
-      default: "%b %d, %Y"
-      with_month_name: "%B %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}کات"
-      about_x_months: "%{count}mo"
       about_x_years: "%{count}ساڵ"
       almost_x_years: "%{count}ساڵ"
       half_a_minute: ئێستا
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: ئێستا
       over_x_years: "%{count}ساڵ"
       x_days: "%{count}ڕۆژ"
-      x_minutes: "%{count}m"
-      x_months: "%{count}mo"
-      x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: ئەو زانیاریانەی تێنووست کردووە ڕاست نەبوو
     confirm_password: تێپەڕوشەی ئێستات تێبنووسە بۆ سەلماندنی ناسنامەکەت
@@ -843,7 +778,6 @@ ku:
       size: قەبارە
     blocks: تۆ بلۆک دەکەیت
     bookmarks: نیشانکراوەکان
-    csv: CSV
     domain_blocks: دۆمەین قەپاتکرا
     lists: لیستەکان
     mutes: هەژمارە بێدەنگ کراوە
@@ -1030,16 +964,6 @@ ku:
     email_events: رووداوەکان بۆ ئاگاداری ئیمەیلی
     email_events_hint: 'ئەو ڕووداوانە دیاریبکە کە دەتەوێت ئاگانامەکان وەربگری بۆ:'
     other_settings: ڕێکبەندەکانی ئاگانامەکانی تر
-  number:
-    human:
-      decimal_units:
-        format: "%n%u"
-        units:
-          billion: B
-          million: M
-          quadrillion: Q
-          thousand: K
-          trillion: T
   otp_authentication:
     code_hint: کۆدێک داخڵ بکە کە دروست کراوە لەلایەن ئەپی ڕەسەنایەتیەوە بۆ دڵنیابوون
     description_html: ئەگەر تۆ <strong> هاتنەژوورەوەی دوو قۆناغی</strong> بە یارمەتی ئەپێکی پەسەندکردن چالاک بکەن، پێویستە بۆ چوونەژوورەوە ، بە تەلەفۆنەکەتان کە کۆدیکتان بۆ دروستدەکات دەستپێگەیشتنتان هەبێت.
@@ -1053,7 +977,6 @@ ku:
     next: داهاتوو
     older: کۆنتر
     prev: پێشوو
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: تۆ پێشتر دەنگت داوە لەسەر ئەم ڕاپرسییە
@@ -1115,7 +1038,6 @@ ku:
     activity: دوایین چالاکی
     browser: وێبگەڕ
     browsers:
-      alipay: Alipay
       blackberry: بلاکبێری
       chrome: کرۆم
       edge: مایکرۆسۆفت ئیچ
@@ -1131,18 +1053,15 @@ ku:
       qq: وێبگەڕی QQ
       safari: سافری
       uc_browser: وێبگەڕی UC
-      weibo: Weibo
     current_session: دانیشتنی ئێستا
     description: "%{browser} لەسەر %{platform}"
     explanation: ئەمانە وێبگەڕەکەن کە ئێستا چووەتە ژوورەوە بۆ ئەژمێری ماستۆدۆنی خۆت.
     ip: ئای‌پی
     platforms:
-      adobe_air: Adobe Air
       android: ئەندرۆید
       blackberry: بلاکبێری
       chrome_os: سیستەمی کارگێڕی کرۆم
       firefox_os: سیستەمی کارگێڕی فایەرفۆکس
-      ios: iOS
       linux: لینۆکس
       mac: ماک
       other: سیستەمیکارگێڕی نەناسراو
@@ -1174,8 +1093,6 @@ ku:
     relationships: شوێنکەوتوو و شوێنکەوتوان
     two_factor_authentication: کۆدی دووقۆناغی هاتنەژوور
     webauthn_authentication: کلیلەکانی پاراستن
-  spam_check:
-    spam_detected: ئەمە هەژمارەیەکی خۆکارانەیەبۆ ناساندنی سپام.
   statuses:
     attached:
       audio:
@@ -1216,7 +1133,6 @@ ku:
     show_older: پیشاندانی کۆنتر
     show_thread: نیشاندانی ڕشتە
     sign_in_to_participate: بچۆ ژوورەوە بۆ بەشداریکردن لە گفتوگۆکەدا
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: شوێنکەوتوانی تەنها
       private_long: تەنها بۆ شوێنکەوتوانی پیشان بدە
@@ -1313,10 +1229,6 @@ ku:
     contrast: ماستۆدۆن (کۆنتراستی بەرز)
     default: ماستۆدۆن (ڕەش)
     mastodon-light: ماستۆدۆن (کاڵ)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: زیادکردن
     disable: لەکارخستنی 2FA
@@ -1382,11 +1294,8 @@ ku:
       tips: ئامۆژگاریەکان
       title: بەخێربێیت، بەکارهێنەر %{name}!
   users:
-    blocked_email_provider: ئەم دابینکەری ئیمەیڵە رێگەپێدراو نییە
     follow_limit_reached: ناتوانیت زیاتر لە %{limit} خەڵک پەیڕەو کەیت
     generic_access_help_html: کێشەت هەیە لە گەیشتن بە هەژمارەکەت؟ دەتوانیت لەگەڵ %{email} بۆ یارمەتیدان پەیوەندی بگرن
-    invalid_email: ناونیشانی ئیمەیڵەکە نادروستە
-    invalid_email_mx: لەوە ناچێت ناونیشانی ئیمەیڵ بوونی هەبێت
     invalid_otp_token: کۆدی دوو-فاکتەر نادروستە
     invalid_sign_in_token: کۆدی پاراستن دروست نیە
     otp_lost_help_html: گەر بەو دووڕێگا نەتوانی بچیتە ژوورەوە، لەوانەیە پەیوەندی بگری بە %{email} بۆ یارمەتی
diff --git a/config/locales/kw.yml b/config/locales/kw.yml
new file mode 100644
index 000000000..d34dc7529
--- /dev/null
+++ b/config/locales/kw.yml
@@ -0,0 +1,12 @@
+---
+kw:
+  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.
+    '422': 
+    '429': Too many requests
+    '500': 
+    '503': The page could not be served due to a temporary server failure.
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 0e4bb65bc..1cf19c728 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -34,7 +34,6 @@ lt:
       following: Privalai sekti žmogų kurį nori pagerbti
     posts_tab_heading: Tootai
     posts_with_replies: Tootai ir atsakymai
-    reserved_username: Vartotojo vardas rezervuotas
     roles:
       admin: Administratorius
       bot: Bot'as
@@ -139,37 +138,6 @@ lt:
       username: Slapyvardis
       warn: Įspėti
     action_logs:
-      actions:
-        assigned_to_self_report: "%{name} paskyrė reportą %{target} saviems"
-        change_email_user: "%{name} pakeitė el pašto adresą vartotojui %{target}"
-        confirm_user: "%{name} patvirtino el pašto adresą vartotojui %{target}"
-        create_account_warning: "%{name} išsiuntė įspėjimą %{target}"
-        create_custom_emoji: "%{name} įkėlė naują jaustuką %{target}"
-        create_domain_block: "%{name} užblokavo domena %{target}"
-        create_email_domain_block: "%{name} įkėlė į juodajį sąrašą el pašto domena %{target}"
-        demote_user: "%{name} pažemino %{target}"
-        destroy_custom_emoji: "%{name} sunaikino jaustuką %{target}"
-        destroy_domain_block: "%{name} atrakino domeną %{target}"
-        destroy_email_domain_block: "%{name} pašalino iš juodojo sąrašo el pašto domeną %{target}"
-        destroy_status: "%{name} pašalino statusą %{target}"
-        disable_2fa_user: "%{name} išjungė 2 faktorių autentikavimo sistemos reikalavimus vartotojui  %{target}"
-        disable_custom_emoji: "%{name} išjungė jaustuką %{target}"
-        disable_user: "%{name} išjungė prisijungimą vartotojui %{target}"
-        enable_custom_emoji: "%{name} įjungė jaustuką %{target}"
-        enable_user: "%{name} įjungė prisijungimą vartotojui %{target}"
-        memorialize_account: "%{name} pavertė vartotojo %{target} paskyrą į prisiminimų puslapį"
-        promote_user: "%{name} paaukštino vartotoją %{target}"
-        remove_avatar_user: "%{name} panaikino vartotojo %{target} profilio nuotrauką"
-        reopen_report: "%{name} atidarė skundą %{target}"
-        reset_password_user: "%{name} atstatyti slaptažodį vartotojui %{target}"
-        resolve_report: "%{name} išsprendė skundą %{target}"
-        silence_account: "%{name} pritildė vartotojo %{target} paskyrą"
-        suspend_account: "%{name} laikinai užblokavo vartotojo %{target} paskyrą"
-        unassigned_report: "%{name} nepaskirtas skundas %{target}"
-        unsilence_account: "%{name} atitildė vartotojo %{target} paskyrą"
-        unsuspend_account: "%{name} atblokavo vartotojo %{target} paskyrą"
-        update_custom_emoji: "%{name} atnaujino jaustuką %{target}"
-        update_status: "%{name} pakeitė statusą %{target}"
       deleted_status: "(panaikintas statusas)"
       title: Audito žurnalas
     custom_emojis:
@@ -824,7 +792,6 @@ lt:
       title: Sveiki atvykę, %{name}!
   users:
     follow_limit_reached: Negalite sekti daugiau nei %{limit} žmonių
-    invalid_email: Netinkamas el pašto adresas
     invalid_otp_token: Netinkamas dviejų veiksnių kodas
     otp_lost_help_html: Jeigu praradote prieiga prie abiejų, susisiekite su mumis per %{email}
     seamless_external_login: Jūs esate prisijungę per išorini įrenginį, todėl slaptąžodis ir el pašto nustatymai neprieinami.
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index 2f24ee3ec..a1eb360fc 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -2,12 +2,13 @@
 ml:
   about:
     about_this: കുറിച്ച്
-    api: API
+    api: എപിഐ
     apps: മൊബൈൽ ആപ്പുകൾ
     contact: ബന്ധപ്പെടുക
     contact_missing: സജ്ജമാക്കിയിട്ടില്ല
     contact_unavailable: ലഭ്യമല്ല
     discover_users: ഉപയോഗ്‌താക്കളെ കണ്ടെത്തുക
+    documentation: വിവരണം
     get_apps: മൊബൈൽ ആപ്പ് പരീക്ഷിക്കുക
     learn_more: കൂടുതൽ പഠിക്കുക
     privacy_policy: സ്വകാര്യതാ നയം
@@ -20,6 +21,7 @@ ml:
     unavailable_content_description:
       domain: സെർവർ
       reason: കാരണം
+      suspended_title: താൽക്കാലികമായി നിർത്തിവെച്ച സെർവറുകൾ
     what_is_mastodon: എന്താണ് മാസ്റ്റഡോൺ?
   accounts:
     follow: പിന്തുടരുക
@@ -69,11 +71,17 @@ ml:
       edit: തിരുത്തുക
       email: ഇമെയിൽ
       header: തലക്കെട്ട്
+      joined: ജോയിൻ ചെയ്‌തിരിക്കുന്നു
       location:
         all: എല്ലാം
+        local: പ്രാദേശികം
+        title: സ്ഥലം
+      login_status: ലോഗിൻ അവസ്ഥ
       moderation:
         active: സജീവമാണ്
         all: എല്ലാം
+        suspended: താൽക്കാലികമായി നിർത്തി
+        title: മധ്യസ്ഥന്‍
       resend_confirmation:
         send: സ്ഥിരീകരണ ഇമെയിൽ വീണ്ടും അയയ്ക്കുക
         success: സ്ഥിരീകരണ ഇമെയിൽ വിജയകരമായി അയച്ചു!
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 089707d03..8ef468b95 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -41,7 +41,6 @@ ms:
       other: Toot
     posts_tab_heading: Toot
     posts_with_replies: Toot dan maklum balas
-    reserved_username: Nama pengguna ini terpelihara
     roles:
       moderator: Pengawal
     unfollow: Nyahikut
@@ -52,7 +51,10 @@ ms:
       delete: Padam
       destroyed_msg: Nota kawalan telah berjaya dipadam!
     accounts:
+      approved_msg: Berjaya meluluskan permohonan pendaftaran %{username}
       are_you_sure: Anda pasti?
+      avatar: Avatar
+      by_domain: Domain
       change_email:
         changed_msg: Emel akaun telah berjaya ditukar!
         current_email: Emel Semasa
@@ -63,20 +65,29 @@ ms:
       confirm: Sahkan
       confirmed: Disahkan
       confirming: Mengesahkan
-      demote: Turunkan pangkat
+      delete: Padam data
+      deleted: Dipadam
+      demote: Turunkan taraf
+      destroyed_msg: Data %{username} sekarang menunggu giliran untuk dipadam sebentar lagi
       disable: Lumpuhkan
       disable_two_factor_authentication: Lumpuhkan 2FA
       disabled: Dilumpuhkan
       display_name: Nama paparan
+      domain: Domain
       edit: Tukar
       email: Emel
       email_status: Status Emel
       enable: Bolehkan
       enabled: Dibolehkan
+      enabled_msg: Berjaya menyahbekukan akaun %{username}
       followers: Pengikut
       follows: Mengikuti
+      header: Pengepala
       inbox_url: URL mesej masuk
+      invite_request_text: Sebab menyertai
+      invited_by: Dijemput oleh
       ip: Alamat IP
+      joined: Sudah sertai
       location:
         all: Semua
         local: Tempatan
@@ -85,23 +96,36 @@ ms:
       login_status: Status log masuk
       media_attachments: Lampiran media
       memorialize: Tukarkan menjadi akaun peringatan
+      memorialized: Dikenang
+      memorialized_msg: Berjaya mengubah %{username} menjadi akaun kenangan
       moderation:
+        active: Aktif
         all: Semua
+        pending: Menunggu
         silenced: Disenyapkan
         suspended: Digantungkan
         title: Kawalan
       moderation_notes: Nota kawalan
       most_recent_activity: Aktiviti terbaru
       most_recent_ip: IP terbaru
+      no_account_selected: Tiada akaun diubah kerana tiada yang dipilih
       no_limits_imposed: Tiada had dikuatkuasakan
       not_subscribed: Tiada langganan
+      pending: Menunggu penilaian semula
       perform_full_suspension: Gantung
-      promote: Naikkan pangkat
+      promote: Naikkan taraf
       protocol: Protokol
       public: Awam
       push_subscription_expires: Langganan PuSH tamat tempoh
       redownload: Segarkan semula avatar
+      redownloaded_msg: Berjaya memuat semula profil %{username} dari asalnya
+      reject: Tolak
+      reject_all: Tolak semua
+      rejected_msg: Berjaya menolak permohonan pendaftaran %{username}
       remove_avatar: Buang avatar
+      remove_header: Buang pengepala
+      removed_avatar_msg: Berjaya membuang gambar avatar %{username}
+      removed_header_msg: Berjaya membuang gambar pengepala %{username}
       resend_confirmation:
         already_confirmed: Pengguna ini telah disahkan
         send: Hantar semula emel pengesahan
@@ -116,6 +140,10 @@ ms:
         staff: Kakitangan
         user: Pengguna
       search: Cari
+      search_same_email_domain: Pengguna lain dengan domain e-mel yang sama
+      search_same_ip: Pengguna lain dengan IP yang sama
+      sensitive: Sensitif
+      sensitized: tanda sebagai sensitif
       shared_inbox_url: URL Peti Masuk Berkongsi
       show:
         created_reports: Laporan yang dicipta oleh akaun ini
@@ -125,43 +153,90 @@ ms:
       statuses: Status
       subscribe: Langgan
       suspended: Digantung
+      suspension_irreversible: Data akaun ini telah dipadam secara kekal. Anda boleh nyahgantungkannya untuk menggunakannya, tetapi data lama tidak akan diperoleh.
+      suspension_reversible_hint_html: Akaun ini telah digantung, dan datanya akan dibuang pada %{date}. Sebelum tarikh itu, akaun ini boleh diaktif semula tanpa kesan buruk. Jika anda mahu memadamkan data akaun ini serta-merta, anda boleh melakukannya di bawah.
+      time_in_queue: Menunggu giliran %{time}
       title: Akaun
       unconfirmed_email: Emel Belum Disahkan
+      undo_sensitized: Nyahtanda sensitif
       undo_silenced: Buang senyap
       undo_suspension: Buang penggantungan
+      unsilenced_msg: Berjaya menjadikan akaun %{username} tidak terhad
       unsubscribe: Buang langganan
+      unsuspended_msg: Berjaya menyahgantungkan akaun %{username}
       username: Nama pengguna
+      view_domain: Lihat ringkasan domain
+      warn: Beri amaran
+      web: Web
+      whitelisted: Dibenarkan untuk persekutuan
     action_logs:
+      action_types:
+        assigned_to_self_report: Buat Laporan
+        change_email_user: Ubah E-mel untuk Pengguna
+        confirm_user: Sahkan Pengguna
+        create_account_warning: Cipta Amaran
+        create_announcement: Cipta Pengumuman
+        create_custom_emoji: Cipta Emoji Tersendiri
+        create_domain_allow: Cipta Pelepasan Domain
+        create_domain_block: Cipta Penyekatan Domain
+        create_email_domain_block: Cipta Penyekatan Domain E-mel
+        create_ip_block: Cipta peraturan IP
+        demote_user: Turunkan Taraf Pengguna
+        destroy_announcement: Padam Pengumuman
+        destroy_custom_emoji: Padam Emoji Tersendiri
+        destroy_domain_allow: Padam Pelepasan Domain
+        destroy_domain_block: Padam Penyekatan Domain
+        destroy_email_domain_block: Padam Penyekatan Domain E-mel
+        destroy_ip_block: Padam Peraturan IP
+        destroy_status: Padam Kiriman
+        disable_2fa_user: Nyahdayakan 2FA
+        disable_custom_emoji: Nyahdayakan Emoji Tersendiri
+        disable_user: Nyahdayakan Pengguna
+        enable_custom_emoji: Dayakan Emoji Tersendiri
+        enable_user: Dayakan Pengguna
+        memorialize_account: Jadikan Akaun Kenangan
+        promote_user: Naikkan Taraf Pengguna
+        remove_avatar_user: Buang Avatar
+        reopen_report: Buka Semula Laporan
+        reset_password_user: Tetap Semula Kata Laluan
+        resolve_report: Buat Keputusan Laporan
+        sensitive_account: Tandakan media di akaun anda sebagai sensitif
+        silence_account: Senyapkan Akaun
+        suspend_account: Gantung Akaun
+        unassigned_report: Batalkan Laporan
+        unsensitive_account: Nyahtanda media di akaun anda sebagai sensitif
+        unsilence_account: Nyahsenyapkan Akaun
+        unsuspend_account: Nyahgantung Akaun
+        update_announcement: Kemas Kini Pengumuman
+        update_custom_emoji: Kemas Kini Emoji Tersendiri
+        update_domain_block: Kemas Kini Penyekatan Domain
+        update_status: Kemas Kini Kiriman
       actions:
-        assigned_to_self_report: "%{name} memberikan laporan %{target} kepada diri mereka sendiri"
-        change_email_user: "%{name} menukar alamat emel pengguna %{target}"
-        confirm_user: "%{name} mengesahkan alamat emel pengguna %{target}"
-        create_custom_emoji: "%{name} memuat naik emoji baru %{target}"
-        create_domain_block: "%{name} menyekat domain %{target}"
-        create_email_domain_block: "%{name} menyenaraihitamkan domain emel %{target}"
-        demote_user: "%{name} menurunkan pangkat pengguna %{target}"
-        destroy_custom_emoji: "%{name} membuang emoji %{target}"
-        destroy_domain_block: "%{name} membuang sekatan domain %{target}"
-        destroy_email_domain_block: "%{name} menyenaraiputihkan domain emel %{target}"
-        destroy_status: "%{name} membuang status oleh %{target}"
-        disable_2fa_user: "%{name} melumpuhkan keperluan dua faktor untuk pengguna %{target}"
-        disable_custom_emoji: "%{name} melumpuhkan emoji %{target}"
-        disable_user: "%{name} melumpuhkan log masuk untuk pengguna %{target}"
-        enable_custom_emoji: "%{name} membolehkan emoji %{target}"
-        enable_user: "%{name} membolehkan log masuk untuk pengguna %{target}"
-        memorialize_account: "%{name} menukarkan akaun %{target} menjadi halaman peringatan"
-        promote_user: "%{name} menaikkan pangkat pengguna %{target}"
-        remove_avatar_user: "%{name} membuang avatar pengguna %{target}"
-        reopen_report: "%{name} membuka semula laporan %{target}"
-        reset_password_user: "%{name} set semula kata laluan pengguna %{target}"
-        resolve_report: "%{name} menyelesaikan laporan %{target}"
-        silence_account: "%{name} menyenyapkan akaun %{target}"
-        suspend_account: "%{name} menggantung akaun %{target}"
-        unassigned_report: "%{name} menyahtugaskan laporan %{target}"
-        unsilence_account: "%{name} menyahsenyapkan akaun %{target}"
-        unsuspend_account: "%{name} menyahgantungkan akaun %{target}"
-        update_custom_emoji: "%{name} mengemaskini emoji %{target}"
-        update_status: "%{name} mengemaskini status oleh %{target}"
+        assigned_to_self_report_html: "%{name} menugaskan laporan %{target} kepada dirinya sendiri"
+        change_email_user_html: "%{name} telah mengubah alamat e-mel pengguna %{target}"
+        confirm_user_html: "%{name} telah mengesahkan alamat e-mel pengguna %{target}"
+        create_account_warning_html: "%{name} telah memberi amaran kepada %{target}"
+        create_announcement_html: "%{name} telah mencipta pengumuman baharu %{target}"
+        create_custom_emoji_html: "%{name} telah memuat naik emoji baharu %{target}"
+        create_domain_allow_html: "%{name} membenarkan persekutuan dengan domain %{target}"
+        create_domain_block_html: "%{name} telah menyekat domain %{target}"
+        create_email_domain_block_html: "%{name} telah menyekat domain e-mel %{target}"
+        create_ip_block_html: "%{name} telah mencipta peraturan IP %{target}"
+        demote_user_html: "%{name} menurunkan taraf pengguna %{target}"
+        destroy_announcement_html: "%{name} memadamkan pengumuman %{target}"
+        destroy_custom_emoji_html: "%{name} memusnahkan emoji %{target}"
+        destroy_domain_allow_html: "%{name} membuang keizinan persekutuan dengan domain %{target}"
+        destroy_domain_block_html: "%{name} telah menyahsekat domain %{target}"
+        destroy_email_domain_block_html: "%{name} telah menyahsekat domain e-mel %{target}"
+        destroy_ip_block_html: "%{name} memadamkan peraturan untuk IP %{target}"
+        destroy_status_html: "%{name} membuang kiriman oleh %{target}"
+        disable_2fa_user_html: "%{name} menyahdayakan keperluan dua faktor bagi pengguna %{target}"
+        disable_custom_emoji_html: "%{name} menyahdayakan emoji %{target}"
+        disable_user_html: "%{name} menyahdayakan log masuk bagi pengguna %{target}"
+        enable_custom_emoji_html: "%{name} mendayakan emoji %{target}"
+        enable_user_html: "%{name} mendayakan log masuk untuk pengguna %{target}"
+        memorialize_account_html: "%{name} mengubah akaun %{target} menjadi halaman kenangan"
+        promote_user_html: "%{name} menaikkan taraf pengguna %{target}"
       deleted_status: "(status telah dipadam)"
       title: Log audit
     custom_emojis:
@@ -208,10 +283,16 @@ ms:
       week_interactions: interaksi minggu ini
       week_users_active: aktif minggu ini
       week_users_new: pengguna minggu ini
+    domain_allows:
+      destroyed_msg: Domain sudah tidak diizinkan dari persekutuan
+      undo: Nyahizin persekutuan dengan domain
     domain_blocks:
       add_new: Tambah
       created_msg: Sekatan domain sedang diproses
       destroyed_msg: Sekatan domain telah dibatalkan
+      domain: Domain
+      edit: Sunting penyekatan domain
+      existing_domain_block_html: Anda telah memberikan pembatasan yang lebih tegas ke atas %{name}, anda perlu <a href="%{unblock_url}">menyahsekatinya</a> dulu.
       new:
         create: Cipta sekatan
         hint: Sekatan domain tidak akan menghindarkan penciptaan entri akaun dalam pangkalan data, tetapi akan diberikan kaedah kawalan khusus tertentu pada akaun-akaun tersebut secara retroaktif dan automatik.
@@ -221,10 +302,21 @@ ms:
           silence: Senyapkan
           suspend: Gantungkan
         title: Sekatan domain baru
+      obfuscate: Nama domain samar-samar
+      obfuscate_hint: Menjadikan nama domain samar-samar dalam senarai jika pengiklanan senarai pembatasan domain didayakan
+      private_comment: Komen peribadi
+      private_comment_hint: Komen tentang pembatasan domain ini bagi kegunaan dalaman para pengendali.
+      public_comment: Komen umum
+      public_comment_hint: Komen tentang pembatasan domain ini untuk khalayak umum, jika pengiklanan senarai pembatasan domain didayakan.
       reject_media: Tolak fail media
       reject_media_hint: Buang fail media yang disimpan di sini dan menolak sebarang muat turun pada masa depan. Tidak berkaitan dengan penggantungan
       reject_reports: Tolak laporan
       reject_reports_hint: Abaikan semua laporan daripada domain ini. Tidak dikira untuk penggantungan
+      rejecting_media: menolak fail media
+      rejecting_reports: menolak laporan
+      severity:
+        silence: disenyapkan
+        suspend: digantung
       show:
         affected_accounts:
           other: "%{count} akaun dalam pangkalan data menerima kesan"
@@ -234,17 +326,45 @@ ms:
         title: Buang sekatan domain %{domain}
         undo: Buang
       undo: Buang
+      view: Lihat penyekatan domain
     email_domain_blocks:
       add_new: Tambah
       created_msg: Berjaya menambah domain emel ke dalam senarai hitam
       delete: Padam
       destroyed_msg: Berjaya memadam domain emel daripada senarai hitam
+      domain: Domain
+      empty: Tiada domain e-mel sedang disekat.
+      from_html: dari %{domain}
       new:
         create: Tambah domain
         title: Entri senarai hitam emel baru
       title: Senarai hitam emel
+    follow_recommendations:
+      description_html: "<strong>Saranan ikutan membantu pengguna mencari kandungan menarik dengan cepat</strong>. Apabila pengguna belum cukup berhubung dengan akaun lain untuk membentuk saranan ikutan tersendiri, akaun-akaun inilah yang akan disarankan. Ia dinilai semula setiap hari dari gabungan keterlibatan tertinggi terkini dan juga jumlah pengikut tempatan tertinggi mengikut bahasa masing-masing."
+      language: Untuk bahasa
+      status: Status
+      suppress: Hadkan saranan ikutan
+      suppressed: Dihadkan
+      title: Saranan ikutan
+      unsuppress: Tetap semula saranan ikutan
     instances:
+      by_domain: Domain
+      delivery_available: Penghantaran tersedia
+      empty: Tiada domain ditemukan.
+      known_accounts:
+        other: "%{count} akaun dikenali"
+      moderation:
+        all: Semua
+        limited: Terhad
+        title: Penyederhanaan
+      private_comment: Komen peribadi
+      public_comment: Komen umum
       title: Tika diketahui
+      total_blocked_by_us: Disekati kami
+      total_followed_by_them: Diikuti mereka
+      total_followed_by_us: Diikuti kami
+      total_reported: Laporan tentang mereka
+      total_storage: Lampiran media
     invites:
       deactivate_all: Nyahaktifkan semua
       filter:
@@ -253,6 +373,19 @@ ms:
         expired: Tamat tempoh
         title: Tapis
       title: Undangan
+    ip_blocks:
+      add_new: Cipta peraturan
+      created_msg: Berjaya menambah peraturan IP baharu
+      delete: Padam
+      expires_in:
+        '1209600': 2 minggu
+        '15778476': 6 bulan
+        '2629746': 1 bulan
+        '31556952': 1 tahun
+        '86400': 1 hari
+        '94670856': 3 tahun
+      new:
+        title: Cipta peraturan IP baharu
     relays:
       add_new: Tambah geganti baru
       delete: Padam
@@ -284,6 +417,34 @@ ms:
         create: Tambah nota
         create_and_resolve: Selesaikan dengan nota
         placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan...
+    settings:
+      peers_api_enabled:
+        title: Terbitkan senarai pelayan ditemukan dalam aplikasi
+      preview_sensitive_media:
+        desc_html: Pratonton laman sesawang daripada pautan akan terpapar di gambar kecil meski jika media itu ditanda sebagai sensitif
+        title: Papar media sensitif di pratonton OpenGraph
+      profile_directory:
+        desc_html: Benarkan pengguna untuk ditemukan
+        title: Benarkan direktori profil
+      registrations:
+        closed_message:
+          desc_html: Dipaparkan di muka depan apabil pendaftaran ditutup. Anda boleh menggunakan penanda HTML
+          title: Mesej pendaftaran telah ditutup
+        deletion:
+          desc_html: Benarkan sesiapapun memadamkan akaun mereka
+          title: Buka pemadaman akaun
+        min_invite_role:
+          disabled: Tiada sesiapa
+          title: Benarkan jemputan dari
+        require_invite_text:
+          desc_html: Apabila pendaftaran memerlukan kelulusan manual, tandakan input teks "Kenapa anda mahu menyertai?" sebagai wajib, bukan pilihan
+          title: Memerlukan alasan bagi pengguna baru untuk menyertai
+      registrations_mode:
+        modes:
+          approved: Kelulusan diperlukan untuk pendaftaran
+          none: Tiada siapa boleh mendaftar
+          open: Sesiapapun boleh mendaftar
+        title: Mod pendaftaran
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index a419e0b47..8eec6f38c 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -21,11 +21,11 @@ nl:
     federation_hint_html: Met een account op %{instance} ben je in staat om mensen die zich op andere Mastodonservers (en op andere plekken) bevinden te volgen.
     get_apps: Mobiele apps
     hosted_on: Mastodon op %{domain}
-    instance_actor_flash: 'Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken.
-
-'
+    instance_actor_flash: "Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo'n geval dien je echter een domeinblokkade te gebruiken. \n"
     learn_more: Meer leren
     privacy_policy: Privacybeleid
+    rules: Serverregels
+    rules_html: 'Hieronder vind je een samenvatting van de regels die je op deze Mastodon-server moet opvolgen:'
     see_whats_happening: Kijk wat er aan de hand is
     server_stats: 'Serverstatistieken:'
     source_code: Broncode
@@ -78,7 +78,6 @@ nl:
       other: Toots
     posts_tab_heading: Toots
     posts_with_replies: Toots en reacties
-    reserved_username: Deze gebruikersnaam is gereserveerd
     roles:
       admin: Beheerder
       bot: Bot
@@ -229,6 +228,7 @@ nl:
         create_domain_block: Domeinblokkade aanmaken
         create_email_domain_block: E-maildomeinblokkade aanmaken
         create_ip_block: IP-regel aanmaken
+        create_unavailable_domain: Niet beschikbaar domein aanmaken
         demote_user: Gebruiker degraderen
         destroy_announcement: Mededeling verwijderen
         destroy_custom_emoji: Lokale emoji verwijderen
@@ -237,6 +237,7 @@ nl:
         destroy_email_domain_block: E-maildomeinblokkade verwijderen
         destroy_ip_block: IP-regel verwijderen
         destroy_status: Toot verwijderen
+        destroy_unavailable_domain: Niet beschikbaar domein verwijderen
         disable_2fa_user: Tweestapsverificatie uitschakelen
         disable_custom_emoji: Lokale emojij uitschakelen
         disable_user: Gebruiker uitschakelen
@@ -260,41 +261,48 @@ nl:
         update_domain_block: Domeinblokkade bijwerken
         update_status: Toot bijwerken
       actions:
-        assigned_to_self_report: "%{name} heeft rapportage %{target} aan zichzelf toegewezen"
-        change_email_user: "%{name} veranderde het e-mailadres van gebruiker %{target}"
-        confirm_user: E-mailadres van gebruiker %{target} is door %{name} bevestigd
-        create_account_warning: "%{name} verzond een waarschuwing naar %{target}"
-        create_announcement: "%{name} heeft de nieuwe mededeling %{target} aangemaakt"
-        create_custom_emoji: Nieuwe emoji %{target} is door %{name} geüpload
-        create_domain_allow: "%{name} heeft federatie met het domein %{target} goedgekeurd"
-        create_domain_block: Domein %{target} is door %{name} geblokkeerd
-        create_email_domain_block: "%{name} heeft het e-maildomein %{target} geblokkeerd"
-        demote_user: Gebruiker %{target} is door %{name} gedegradeerd
-        destroy_announcement: "%{name} heeft de mededeling %{target} verwijderd"
-        destroy_custom_emoji: "%{name} verwijderde emoji %{target}"
-        destroy_domain_allow: "%{name} heeft federatie met het domein %{target} afgekeurd"
-        destroy_domain_block: Domein %{target} is door %{name} gedeblokkeerd
-        destroy_email_domain_block: "%{name} heeft het e-maildomein %{target} gedeblokkeerd"
-        destroy_status: Toot van %{target} is door %{name} verwijderd
-        disable_2fa_user: Vereisten tweestapsverificatie van %{target} zijn door %{name} uitgeschakeld
-        disable_custom_emoji: Emoji %{target} is door %{name} uitgeschakeld
-        disable_user: Inloggen voor %{target} is door %{name} uitgeschakeld
-        enable_custom_emoji: Emoji %{target} is door %{name} ingeschakeld
-        enable_user: Inloggen voor %{target} is door %{name} ingeschakeld
-        memorialize_account: Het account %{target} is door %{name} in een In memoriam veranderd
-        promote_user: Gebruiker %{target} is door %{name} gepromoveerd
-        remove_avatar_user: "%{name} verwijderde de avatar van %{target}"
-        reopen_report: "%{name} heeft rapportage %{target} heropend"
-        reset_password_user: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld
-        resolve_report: "%{name} heeft rapportage %{target} opgelost"
-        silence_account: Account %{target} is door %{name} genegeerd
-        suspend_account: Account %{target} is door %{name} opgeschort
-        unassigned_report: "%{name} heeft het toewijzen van rapportage %{target} ongedaan gemaakt"
-        unsilence_account: Negeren van account %{target} is door %{name} opgeheven
-        unsuspend_account: Opschorten van account %{target} is door %{name} opgeheven
-        update_announcement: "%{name} heeft de mededeling %{target} bijgewerkt"
-        update_custom_emoji: Emoji %{target} is door %{name} bijgewerkt
-        update_status: De toots van %{target} zijn door %{name} bijgewerkt
+        assigned_to_self_report_html: "%{name} heeft rapportage %{target} aan zichzelf toegewezen"
+        change_email_user_html: "%{name} veranderde het e-mailadres van gebruiker %{target}"
+        confirm_user_html: E-mailadres van gebruiker %{target} is door %{name} bevestigd
+        create_account_warning_html: "%{name} verzond een waarschuwing naar %{target}"
+        create_announcement_html: "%{name} heeft de nieuwe mededeling %{target} aangemaakt"
+        create_custom_emoji_html: Nieuwe emoji %{target} is door %{name} geüpload
+        create_domain_allow_html: "%{name} heeft de federatie met het domein %{target} goedgekeurd"
+        create_domain_block_html: Domein %{target} is door %{name} geblokkeerd
+        create_email_domain_block_html: "%{name} heeft het e-maildomein %{target} geblokkeerd"
+        create_ip_block_html: "%{name} maakte regel aan voor IP %{target}"
+        create_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} beëindigd"
+        demote_user_html: Gebruiker %{target} is door %{name} gedegradeerd
+        destroy_announcement_html: "%{name} heeft de mededeling %{target} verwijderd"
+        destroy_custom_emoji_html: "%{name} verwijderde emoji %{target}"
+        destroy_domain_allow_html: "%{name} heeft de federatie met het domein %{target} afgekeurd"
+        destroy_domain_block_html: Domein %{target} is door %{name} gedeblokkeerd
+        destroy_email_domain_block_html: "%{name} heeft het e-maildomein %{target} gedeblokkeerd"
+        destroy_ip_block_html: "%{name} verwijderde regel voor IP %{target}"
+        destroy_status_html: Toot van %{target} is door %{name} verwijderd
+        destroy_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} hervat"
+        disable_2fa_user_html: De vereiste tweestapsverificatie voor %{target} is door %{name} uitgeschakeld
+        disable_custom_emoji_html: Emoji %{target} is door %{name} uitgeschakeld
+        disable_user_html: Inloggen voor %{target} is door %{name} uitgeschakeld
+        enable_custom_emoji_html: Emoji %{target} is door %{name} ingeschakeld
+        enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld
+        memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd
+        promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd
+        remove_avatar_user_html: "%{name} verwijderde de avatar van %{target}"
+        reopen_report_html: "%{name} heeft rapportage %{target} heropend"
+        reset_password_user_html: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld
+        resolve_report_html: "%{name} heeft rapportage %{target} opgelost"
+        sensitive_account_html: "%{name} markeerde de media van %{target} als gevoelig"
+        silence_account_html: Account %{target} is door %{name} beperkt
+        suspend_account_html: Account %{target} is door %{name} opgeschort
+        unassigned_report_html: "%{name} heeft het toewijzen van rapportage %{target} ongedaan gemaakt"
+        unsensitive_account_html: "%{name} markeerde media van %{target} als niet gevoelig"
+        unsilence_account_html: Beperking van account %{target} is door %{name} opgeheven
+        unsuspend_account_html: Opschorten van account %{target} is door %{name} opgeheven
+        update_announcement_html: "%{name} heeft de mededeling %{target} bijgewerkt"
+        update_custom_emoji_html: Emoji %{target} is door %{name} bijgewerkt
+        update_domain_block_html: "%{name} heeft de domeinblokkade bijgewerkt voor %{target}"
+        update_status_html: "%{name} heeft de toots van %{target} bijgewerkt"
       deleted_status: "(verwijderde toot}"
       empty: Geen logs gevonden.
       filter_by_action: Op actie filteren
@@ -309,10 +317,12 @@ nl:
       new:
         create: Mededeling aanmaken
         title: Nieuwe mededeling
+      publish: Inschakelen
       published_msg: Publiceren van mededeling geslaagd!
       scheduled_for: Ingepland voor %{time}
       scheduled_msg: Mededeling staat ingepland voor publicatie!
       title: Mededelingen
+      unpublish: Uitschakelen
       unpublished_msg: Ongedaan maken van gepubliceerde mededeling geslaagd!
       updated_msg: Bijwerken van mededeling geslaagd!
     custom_emojis:
@@ -357,7 +367,6 @@ nl:
       feature_profile_directory: Gebruikersgids
       feature_registrations: Registraties
       feature_relay: Federatierelay
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Voorvertoning van tijdlijn
       features: Functies
       hidden_service: Federatie met verborgen diensten
@@ -397,6 +406,8 @@ nl:
           silence: Negeren
           suspend: Opschorten
         title: Nieuwe domeinblokkade
+      obfuscate: Domeinnaam verdoezelen
+      obfuscate_hint: De domeinnaam gedeeltelijk verdoezelen wanneer de lijst met domeinblokkades wordt getoond
       private_comment: Privé-opmerking
       private_comment_hint: Opmerking over deze domeinbeperking voor intern gebruik door de moderatoren.
       public_comment: Openbare opmerking
@@ -433,9 +444,34 @@ nl:
         create: Blokkeren
         title: Nieuw e-maildomein blokkeren
       title: Geblokkeerde e-maildomeinen
+    follow_recommendations:
+      description_html: "<strong>Deze aanbevolen accounts helpen nieuwe gebruikers snel interessante inhoud</strong>te vinden. Wanneer een gebruiker niet met andere gebruikers genoeg interactie heeft gehad om gepersonaliseerde aanbevelingen te krijgen, worden in plaats daarvan deze accounts aanbevolen. Deze accounts worden dagelijks opnieuw berekend met behulp van accounts met het hoogste aantal recente interacties en het hoogste aantal lokale volgers in een bepaalde taal."
+      language: Voor taal
+      status: Status
+      suppress: Aanbevolen account niet meer aanbevelen
+      suppressed: Account niet meer aanbevolen
+      title: Aanbevolen accounts
+      unsuppress: Account weer aanbevelen
     instances:
+      back_to_all: Alles
+      back_to_limited: Beperkt
+      back_to_warning: Waarschuwing
       by_domain: Domein
+      delivery:
+        all: Alles
+        clear: Bezorgfouten weghalen
+        restart: Bezorging herstarten
+        stop: Bezorging beëindigen
+        title: Bezorging
+        unavailable: Niet beschikbaar
+        unavailable_message: Bezorging is niet beschikbaar
+        warning: Waarschuwing
+        warning_message:
+          one: Bezorgingsfout voor %{count} dag
+          other: Bezorgfout voor %{count} dagen
       delivery_available: Bezorging is mogelijk
+      delivery_error_days: Dagen met bezorgfouten
+      delivery_error_hint: Wanneer de bezorging voor %{count} dagen niet mogelijk is, wordt de bezorging automatisch als niet beschikbaar gemarkeerd.
       empty: Geen domeinen gevonden.
       known_accounts:
         one: "%{count} bekend account"
@@ -535,13 +571,20 @@ nl:
       unassign: Niet langer toewijzen
       unresolved: Onopgelost
       updated_at: Bijgewerkt
+    rules:
+      add_new: Regel toevoegen
+      delete: Verwijderen
+      description_html: Hoewel de meeste mensen zeggen dat ze de gebruiksvoorwaarden hebben gelezen en er mee akkoord gaan, lezen mensen deze meestal niet totdat er een probleem optreedt. <strong>Maak het eenvoudiger om de regels van deze server in één oogopslag te zien, door ze puntsgewijs in een lijst te zetten.</strong> Probeer de verschillende regels kort en simpel te houden, maar probeer ze ook niet in verschillende items onder te verdelen.
+      edit: Regel bewerken
+      empty: Voor deze server zijn nog geen regels opgesteld.
+      title: Serverregels
     settings:
       activity_api_enabled:
         desc_html: Wekelijks overzicht van de hoeveelheid lokale toots, actieve gebruikers en nieuwe registraties
-        title: Statistieken over gebruikersactiviteit publiceren
+        title: Statistieken over gebruikersactiviteit via de API publiceren
       bootstrap_timeline_accounts:
-        desc_html: Meerdere gebruikersnamen met komma's scheiden. Alleen lokale en niet opgeschorte accounts werken. Laat leeg voor alle lokale beheerders.
-        title: Standaard te volgen accounts voor nieuwe gebruikers
+        desc_html: Meerdere gebruikersnamen met komma's scheiden. Deze accounts worden in ieder geval aan nieuwe gebruikers aanbevolen
+        title: Aanbevolen accounts voor nieuwe gebruikers
       contact_information:
         email: Vul een openbaar gebruikt e-mailadres in
         username: Vul een gebruikersnaam in
@@ -552,14 +595,12 @@ nl:
         desc_html: Heeft invloed op alle gebruikers die deze instelling niet zelf hebben veranderd
         title: Toots van gebruikers standaard niet door zoekmachines laten indexeren
       domain_blocks:
-        all: Naar iedereen
-        disabled: Naar niemand
+        all: Aan iedereen
+        disabled: Aan niemand
         title: Domeinblokkades tonen
-        users: Naar ingelogde lokale gebruikers
+        users: Aan ingelogde lokale gebruikers
       domain_blocks_rationale:
         title: Motivering tonen
-      enable_bootstrap_timeline_accounts:
-        title: Standaard te volgen accounts voor nieuwe gebruikers inschakelen
       hero:
         desc_html: Wordt op de voorpagina getoond. Tenminste 600x100px aanbevolen. Wanneer dit niet is ingesteld wordt de thumbnail van de Mastodonserver getoond
         title: Hero-afbeelding
@@ -568,7 +609,7 @@ nl:
         title: Mascotte-afbeelding
       peers_api_enabled:
         desc_html: Domeinnamen die deze server in de fediverse is tegengekomen
-        title: Lijst van bekende servers publiceren
+        title: Lijst van bekende servers via de API publiceren
       preview_sensitive_media:
         desc_html: Linkvoorvertoningen op andere websites hebben een thumbnail, zelfs als een afbeelding of video als gevoelig is gemarkeerd
         title: Gevoelige afbeeldingen en video's in OpenGraph-voorvertoningen tonen
@@ -585,6 +626,9 @@ nl:
         min_invite_role:
           disabled: Niemand
           title: Uitnodigingen toestaan door
+        require_invite_text:
+          desc_html: Maak het invullen van "Waarom wil je je hier registreren?" verplicht in plaats van optioneel, wanneer registraties handmatig moeten worden goedgekeurd
+          title: Nieuwe gebruikers moeten een reden invullen waarom ze zich willen registreren
       registrations_mode:
         modes:
           approved: Goedkeuring vereist om te kunnen registreren
@@ -610,9 +654,6 @@ nl:
         desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken
         title: Aangepaste gebruiksvoorwaarden
       site_title: Naam Mastodonserver
-      spam_check_enabled:
-        desc_html: Mastodon kan accounts die herhaaldelijk ongevraagde berichten versturen automatisch negeren of rapporteren. Het is mogelijk dat er foutpositieven tussen zitten.
-        title: Automatische spambestrijding
       thumbnail:
         desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen
         title: Thumbnail Mastodonserver
@@ -643,13 +684,18 @@ nl:
       no_status_selected: Er werden geen toots gewijzigd, omdat er geen enkele werd geselecteerd
       title: Toots van account
       with_media: Met media
+    system_checks:
+      database_schema_check:
+        message_html: Niet alle databasemigraties zijn voltooid. Je moet deze uitvoeren om er voor te zorgen dat de applicatie blijft werken zoals het hoort
+      rules_check:
+        action: Serverregels beheren
+        message_html: Je hebt voor deze server geen regels opgesteld.
+      sidekiq_process_check:
+        message_html: Er draait geen Sidekiqproces voor de wachtrij(en) %{value}. Controleer je Sidekiqconfiguratie
     tags:
       accounts_today: Aantal verschillende keren vandaag gebruikt
       accounts_week: Aantal verschillende keren deze week gebruikt
       breakdown: Uitsplitsing van het gebruik van vandaag naar bron
-      context: Context
-      directory: In de gebruikersgids
-      in_directory: "%{count} keer in de gebruikersgids"
       last_active: Laatst actief
       most_popular: Meest populair
       most_recent: Meest recent
@@ -665,8 +711,9 @@ nl:
     warning_presets:
       add_new: Nieuwe toevoegen
       delete: Verwijderen
-      edit_preset: Voorinstelling van waarschuwing bewerken
-      title: Voorinstellingen van waarschuwingen beheren
+      edit_preset: Preset voor waarschuwing bewerken
+      empty: Je hebt nog geen presets voor waarschuwingen toegevoegd.
+      title: Presets voor waarschuwingen beheren
   admin_mailer:
     new_pending_account:
       body: Zie hieronder de details van het nieuwe account. Je kunt de aanvraag goedkeuren of afkeuren.
@@ -703,7 +750,7 @@ nl:
     settings: 'E-mailvoorkeuren wijzigen: %{link}'
     view: 'Bekijk:'
     view_profile: Profiel bekijken
-    view_status: Status bekijken
+    view_status: Toot bekijken
   applications:
     created: Aanmaken toepassing geslaagd
     destroyed: Verwijderen toepassing geslaagd
@@ -1027,10 +1074,14 @@ nl:
       body: 'Jij bent door %{name} vermeld in:'
       subject: Jij bent vermeld door %{name}
       title: Nieuwe vermelding
+    poll:
+      subject: Een poll van %{name} is beëindigd
     reblog:
       body: 'Jouw toot werd door %{name} geboost:'
       subject: "%{name} boostte jouw toot"
       title: Nieuwe boost
+    status:
+      subject: "%{name} heeft zojuist een toot geplaatst"
   notifications:
     email_events: E-mailmeldingen voor gebeurtenissen
     email_events_hint: 'Selecteer gebeurtenissen waarvoor je meldingen wilt ontvangen:'
@@ -1047,9 +1098,9 @@ nl:
           trillion: bln.
   otp_authentication:
     code_hint: Voer de code in die door de authenticatie-app werd gegenereerd
-    description_html: Na het instellen van <strong>tweestapsverificatie</strong> met een authenticatie-app, kun je alleen inloggen als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode.
+    description_html: Na het instellen van <strong>tweestapsverificatie</strong> met een authenticatie-app, kun je alleen inloggen als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren toegangscode.
     enable: Inschakelen
-    instructions_html: "<strong>Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon</strong>. Van nu af aan genereert deze app aanmeldcodes die je bij het inloggen moet invoeren."
+    instructions_html: "<strong>Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon</strong>. Van nu af aan genereert deze app toegangscodes die je bij het inloggen moet invoeren."
     manual_instructions: 'Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder de geheime code in platte tekst:'
     setup: Instellen
     wrong_code: De ingevoerde code is ongeldig! Klopt de systeemtijd van de server en die van jouw apparaat?
@@ -1179,8 +1230,6 @@ nl:
     relationships: Volgers en gevolgden
     two_factor_authentication: Tweestapsverificatie
     webauthn_authentication: Beveiligingssleutels
-  spam_check:
-    spam_detected: Dit is een automatisch gegenereerde rapportage. Er is spam gedetecteerd.
   statuses:
     attached:
       audio:
@@ -1194,7 +1243,7 @@ nl:
         one: "%{count} video"
         other: "%{count} video's"
     boosted_from_html: Geboost van %{acct_link}
-    content_warning: 'Tekstwaarschuwing: %{warning}'
+    content_warning: 'Inhoudswaarschuwing: %{warning}'
     disallowed_hashtags:
       one: 'bevatte een niet toegestane hashtag: %{tags}'
       other: 'bevatte niet toegestane hashtags: %{tags}'
@@ -1223,6 +1272,7 @@ nl:
     sign_in_to_participate: Meld je aan om aan dit gesprek mee te doen
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Direct
       private: Alleen volgers
       private_long: Alleen aan jouw volgers tonen
       public: Openbaar
@@ -1391,12 +1441,9 @@ nl:
       tips: Tips
       title: Welkom aan boord %{name}!
   users:
-    blocked_email_provider: Deze e-mailprovider is niet toegestaan
     follow_limit_reached: Je kunt niet meer dan %{limit} accounts volgen
     generic_access_help_html: Problemen met toegang tot je account? Neem dan contact op met %{email} voor assistentie
-    invalid_email: E-mailadres is ongeldig
-    invalid_email_mx: Het e-mailadres lijkt niet te bestaan
-    invalid_otp_token: Ongeldige tweestaps-aanmeldcode
+    invalid_otp_token: Ongeldige tweestaps-toegangscode
     invalid_sign_in_token: Ongeldige beveiligingscode
     otp_lost_help_html: Als je toegang tot beiden kwijt bent geraakt, neem dan contact op via %{email}
     seamless_external_login: Je bent ingelogd via een externe dienst, daarom zijn wachtwoorden en e-mailinstellingen niet beschikbaar.
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index 463364e3d..7c2db24e6 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -7,7 +7,6 @@ nn:
     active_count_after: aktiv
     active_footnote: Månadlege aktive brukarar (MAB)
     administered_by: 'Administrert av:'
-    api: API
     apps: Mobilappar
     apps_platforms: Bruk Mastodon på iOS, Android og andre plattformer
     browse_directory: Bla gjennom en profilmappe og filtrer etter interesser
@@ -27,9 +26,6 @@ nn:
     see_whats_happening: Sjå kva som skjer
     server_stats: 'Tenarstatistikk:'
     source_code: Kjeldekode
-    status_count_after:
-      one: status
-      other: statusar
     status_count_before: Som skreiv
     tagline: Fylg vener og oppdag nye
     terms: Brukarvilkår
@@ -61,7 +57,6 @@ nn:
     joined: Vart med %{date}
     last_active: sist aktiv
     link_verified_on: Eigarskap for denne lenkja vart sist sjekka %{date}
-    media: Media
     moved_html: "%{name} har flytta til %{new_profile_link}:"
     network_hidden: Denne informasjonen er ikkje tilgjengeleg
     never_active: Aldri
@@ -75,7 +70,6 @@ nn:
       other: Tut
     posts_tab_heading: Tut
     posts_with_replies: Tut og svar
-    reserved_username: Dette brukarnamnet er oppteke
     roles:
       admin: Administrator
       bot: Robot
@@ -127,7 +121,7 @@ nn:
       header: Overskrift
       inbox_url: Innbokslenkje
       invited_by: Innboden av
-      ip: IP
+      ip: IP-adresse
       joined: Vart med
       location:
         all: Alle
@@ -170,8 +164,6 @@ nn:
       resubscribe: Ting på nytt
       role: Løyve
       roles:
-        admin: Administrator
-        moderator: Moderator
         staff: Personell
         user: Brukar
       search: Søk
@@ -235,44 +227,6 @@ nn:
         update_announcement: Oppdater kunngjøringen
         update_custom_emoji: Oppdater tilpassa emoji
         update_status: Oppdater tut
-      actions:
-        assigned_to_self_report: "%{name} tilegnet rapport %{target} til seg selv"
-        change_email_user: "%{name} endra e-postadressa til brukaren %{target}"
-        confirm_user: "%{name} stadfesta e-postadressa til brukaren %{target}"
-        create_account_warning: "%{name} sende ei åtvaring til %{target}"
-        create_announcement: "%{name} laget en ny kunngjøring %{target}"
-        create_custom_emoji: "%{name} lasta opp eit nytt kjensleteikn %{target}"
-        create_domain_allow: "%{name} kvitlista domenet %{target}"
-        create_domain_block: "%{name} blokkerte domenet %{target}"
-        create_email_domain_block: "%{name} svartelista e-postdomenet %{target}"
-        create_ip_block: "%{name} opprettet en regel for IP-en %{target}"
-        demote_user: "%{name} degraderte brukaren %{target}"
-        destroy_announcement: "%{name} slettet kunngjøring %{target}"
-        destroy_custom_emoji: "%{name} utsletta kjensleteiknet %{target}"
-        destroy_domain_allow: "%{name} fjerna domenet %{target} frå kvitliste"
-        destroy_domain_block: "%{name} slutta å blokkera domenet %{target}"
-        destroy_email_domain_block: "%{name} kvitlista e-postdomenet %{target}"
-        destroy_ip_block: "%{name} slettet en regel for IP-en %{target}"
-        destroy_status: "%{name} sletta status av %{target}"
-        disable_2fa_user: "%{name} tok vekk krav om tofaktorautentisering for brukaren %{target}"
-        disable_custom_emoji: "%{name} deaktiverte emojien %{target}"
-        disable_user: "%{name} slo av innlogging for brukaren %{target}"
-        enable_custom_emoji: "%{name} aktiverte emojien %{target}"
-        enable_user: "%{name} aktiverte innlogging for brukaren %{target}"
-        memorialize_account: "%{name} endret %{target}s konto til en minneside"
-        promote_user: "%{name} fremja brukaren %{target}"
-        remove_avatar_user: "%{name} fjerna %{target} sitt profilbilete"
-        reopen_report: "%{name} opna rapporten %{target} på nytt"
-        reset_password_user: "%{name} nullstilte passordet til brukaren %{target}"
-        resolve_report: "%{name} løyste ein rapport %{target}"
-        silence_account: "%{name} målbatt %{target} sin konto"
-        suspend_account: "%{name} utviste %{target} sin konto"
-        unassigned_report: "%{name} avtilegnet rapport %{target}"
-        unsilence_account: "%{name} fjernet forstummingen av %{target}s konto"
-        unsuspend_account: "%{name} utviste %{target} sin konto"
-        update_announcement: "%{name} oppdaterte kunngjøring %{target}"
-        update_custom_emoji: "%{name} oppdaterte kjensleteiknet %{target}"
-        update_status: "%{name} oppdaterte status for %{target}"
       deleted_status: "(sletta status)"
       empty: Ingen loggar funne.
       filter_by_action: Sorter etter handling
@@ -306,7 +260,6 @@ nn:
       disable: Slå av
       disabled: Slege av
       disabled_msg: Deaktiverte emoji
-      emoji: Emoji
       enable: Slå på
       enabled: Slege på
       enabled_msg: Aktiverte kjensleteikn
@@ -335,7 +288,6 @@ nn:
       feature_profile_directory: Profilmappe
       feature_registrations: Registreringar
       feature_relay: Føderasjonsoverganger
-      feature_spam_check: Søppelvern
       feature_timeline_preview: Førehandsvisning av tidsline
       features: Eigenskapar
       hidden_service: Føderering med skjulte tjenester
@@ -435,7 +387,7 @@ nn:
         all: Alle
         available: Tilgjengeleg
         expired: Utgått
-        title: Filter
+        title: Filtrer
       title: Innbydingar
     ip_blocks:
       add_new: Opprett regel
@@ -469,7 +421,6 @@ nn:
       save_and_enable: Lagr og slå på
       setup: Sett opp en overgangsforbindelse
       signatures_not_enabled: Overganger vil ikke fungere riktig mens sikkermodus eller hvitelistingsmodus er skrudd på
-      status: Status
       title: Vidaresendingar
     report_notes:
       created_msg: Rapportmerknad laga!
@@ -504,7 +455,6 @@ nn:
       reported_by: Rapportert av
       resolved: Oppløyst
       resolved_msg: Rapporten er løyst!
-      status: Status
       title: Rapportar
       unassign: Avset
       unresolved: Uløyst
@@ -578,9 +528,6 @@ nn:
         desc_html: Du kan skrive din egen personverns-strategi, bruksviklår og andre regler. Du kan bruke HTML tagger
         title: Eigne brukarvilkår
       site_title: Tenarnamn
-      spam_check_enabled:
-        desc_html: Mastodon kan auto-rapportere kontoer som sender gjentatte uforespurte meldinger. Det kan oppstå falske positive treff.
-        title: Nettsøppelvern
       thumbnail:
         desc_html: Brukes ved forhandsvisning via OpenGraph og API. 1200x630px anbefales
         title: Småbilete for tenaren
@@ -604,8 +551,6 @@ nn:
         nsfw_on: NSFW PÅ
       deleted: Sletta
       failed_to_execute: Lét seg ikkje gjera
-      media:
-        title: Media
       no_media: Ingen media
       no_status_selected: Ingen statusar vart endra sidan ingen vart valde
       title: Kontostatusar
@@ -614,9 +559,6 @@ nn:
       accounts_today: Ulike brukarar i dag
       accounts_week: Unike brukstilfeller denne uken
       breakdown: Oversyn over bruk i dag etter kjelde
-      context: Kontekst
-      directory: I mappen
-      in_directory: "%{count} i mappen"
       last_active: Sist aktiv
       most_popular: Mest populær
       most_recent: Nyast
@@ -660,13 +602,11 @@ nn:
     discovery: Oppdaging
     localization:
       body: Mastodon er oversatt av frivillige.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Alle kan bidra.
     sensitive_content: Sensitivt innhold
     toot_layout: Tutoppsett
   application_mailer:
     notification_preferences: Endr e-post-innstillingane
-    salutation: "%{name},"
     settings: 'Endr e-post-innstillingar: %{link}'
     view: 'Sjå:'
     view_profile: Sjå profil
@@ -701,9 +641,6 @@ nn:
     migrate_account: Flytt til ein annan konto
     migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du <a href="%{path}">konfigurere det her</a>.
     or_log_in_with: Eller logg inn med
-    providers:
-      cas: CAS
-      saml: SAML
     register: Registrer deg
     registration_closed: "%{instance} tek ikkje imot nye medlemmar"
     resend_confirmation: Send stadfestingsinstruksjonar på nytt
@@ -743,9 +680,6 @@ nn:
     errors:
       invalid_key: er ikkje ein gild Ed25519 eller Curve25519 nykel
       invalid_signature: er ikkje ein gild Ed25519-signatur
-  date:
-    formats:
-      default: "%b %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}t"
@@ -756,10 +690,10 @@ nn:
       less_than_x_minutes: "%{count}min"
       less_than_x_seconds: No nettopp
       over_x_years: "%{count} år"
-      x_days: "%{count}d"
+      x_days: "%{count} dager"
       x_minutes: "%{count}min"
       x_months: "%{count}md"
-      x_seconds: "%{count}s"
+      x_seconds: "%{count} sek"
   deletes:
     challenge_not_passed: Det du skreiv var ikkje rett
     confirm_password: Skriv det noverande passordet ditt for å stadfesta identiteten din
@@ -810,7 +744,6 @@ nn:
       request: Bed om arkivet ditt
       size: Storleik
     blocks: Du blokkerer
-    csv: CSV
     domain_blocks: Domeneblokkeringer
     lists: Lister
     mutes: Du dempar
@@ -995,12 +928,12 @@ nn:
   number:
     human:
       decimal_units:
-        format: "%n%u"
+        format: "%n %u"
         units:
           billion: Mrd
           million: Mil
           quadrillion: Bil
-          thousand: K
+          thousand: T
           trillion: Bil
   otp_authentication:
     code_hint: Skriv inn koden generert av autentiseringsappen din for å bekrefte
@@ -1015,7 +948,6 @@ nn:
     next: Neste
     older: Eldre
     prev: Førre
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Du har allereie røysta i denne rundspørjinga
@@ -1076,40 +1008,23 @@ nn:
     activity: Siste aktivitet
     browser: Nettlesar
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
+      alipay: AliPay
+      blackberry: BlackBerry
       generic: Ukjend lesar
-      ie: Internet Explorer
       micro_messenger: Micromessenger
       nokia: Nokia S40 Ovi-lesar
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
       qq: QQ-lesar
-      safari: Safari
       uc_browser: UC-lesar
-      weibo: Weibo
     current_session: Noverande økt
     description: "%{browser} på %{platform}"
     explanation: Desse nettlesarane er logga inn på Mastodon-kontoen din.
-    ip: IP
+    ip: IP-adresse
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
+      blackberry: BlackBerry
       chrome_os: Chrome OS
-      firefox_os: Firefox OS
       ios: IOS
-      linux: Linux
       mac: Mac
       other: ukjend plattform
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Tilbakekall
     revoke_success: Økt tilbakekalt
     title: Økter
@@ -1135,8 +1050,6 @@ nn:
     relationships: Fylgjar og fylgjarar
     two_factor_authentication: Tostegsautorisering
     webauthn_authentication: Sikkerhetsnøkler
-  spam_check:
-    spam_detected: Dette er en automatisert rapport. Spam har blitt oppdaget.
   statuses:
     attached:
       audio:
@@ -1146,9 +1059,6 @@ nn:
       image:
         one: "%{count} bilete"
         other: "%{count} bilete"
-      video:
-        one: "%{count} video"
-        other: "%{count} videoar"
     boosted_from_html: Framheva av %{acct_link}
     content_warning: 'Innhaldsåtvaring: %{warning}'
     disallowed_hashtags:
@@ -1165,9 +1075,6 @@ nn:
       private: Du kan ikkje festa uoffentlege tut
       reblog: Ei framheving kan ikkje festast
     poll:
-      total_people:
-        one: "%{count} person"
-        other: "%{count} folk"
       total_votes:
         one: "%{count} røyst"
         other: "%{count} røyster"
@@ -1279,7 +1186,6 @@ nn:
   time:
     formats:
       default: "%d.%b %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Legg til
     disable: Slå av
@@ -1337,13 +1243,10 @@ nn:
       tip_following: Du fylgjer automatisk tenaradministrator(ane). For å finna fleire forvitnelege folk kan du sjekka den lokale og fødererte tidslina.
       tip_local_timeline: Den lokale tidslinjen blir kontant matet med meldinger fra personer på %{instance}. Dette er dine nærmeste naboer!
       tip_mobile_webapp: Hvis din mobile nettleser tilbyr deg å legge Mastadon til din hjemmeskjerm kan du motta push-varslinger. Det er nesten som en integrert app på mange måter!
-      tips: Tips
       title: Velkomen om bord, %{name}!
   users:
-    blocked_email_provider: Denne E-postleverandøren er ikke tillatt
     follow_limit_reached: Du kan ikkje fylgja fleire enn %{limit} folk
     generic_access_help_html: Har du vanskar med tilgjenge til kontoen din? Tak gjerne kontakt med %{email}
-    invalid_email: E-mailadressa er ugyldig
     invalid_otp_token: Ugyldig tostegskode
     invalid_sign_in_token: Ugild trygdenykel
     otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email}
diff --git a/config/locales/no.yml b/config/locales/no.yml
index b70eb167c..4ad36f0ad 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -7,7 +7,6 @@
     active_count_after: aktive
     active_footnote: Månedlige aktive brukere (MAU)
     administered_by: 'Administrert av:'
-    api: API
     apps: Mobilapper
     apps_platforms: Bruk Mastodon gjennom iOS, Android og andre plattformer
     browse_directory: Bla gjennom en profilmappe og filtrer etter interesser
@@ -21,17 +20,12 @@
     federation_hint_html: Med en konto på %{instance} vil du kunne følge folk på enhver Mastodon-tjener, og mer til.
     get_apps: Prøv en mobilapp
     hosted_on: Mastodon driftet på %{domain}
-    instance_actor_flash: 'Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet.
-
-'
+    instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n"
     learn_more: Lær mer
     privacy_policy: Privatlivsretningslinjer
     see_whats_happening: Se hva som skjer
     server_stats: 'Tjenerstatistikker:'
     source_code: Kildekode
-    status_count_after:
-      one: status
-      other: statuser
     status_count_before: Som skrev
     tagline: Følg venner og oppdag nye
     terms: Bruksvilkår
@@ -63,7 +57,6 @@
     joined: Ble med den %{date}
     last_active: sist aktiv
     link_verified_on: Eierskap av denne lenken ble sjekket %{date}
-    media: Media
     moved_html: "%{name} har flyttet til %{new_profile_link}:"
     network_hidden: Denne informasjonen er ikke tilgjengelig
     never_active: Aldri
@@ -77,10 +70,8 @@
       other: Tuter
     posts_tab_heading: Tuter
     posts_with_replies: Tuter med svar
-    reserved_username: Brukernavnet er reservert
     roles:
       admin: Administrator
-      bot: Bot
       group: Gruppe
       moderator: Moderere
     unavailable: Profilen er utilgjengelig
@@ -172,8 +163,6 @@
       resubscribe: Abonner på nytt
       role: Rettigheter
       roles:
-        admin: Administrator
-        moderator: Moderator
         staff: Personale
         user: Bruker
       search: Søk
@@ -234,44 +223,6 @@
         update_announcement: Oppdater kunngjøringen
         update_custom_emoji: Oppdater tilpasset Emoji
         update_status: Oppdater statusen
-      actions:
-        assigned_to_self_report: "%{name} tilegnet rapport %{target} til seg selv"
-        change_email_user: "%{name} forandret e-postadressen for bruker %{target}"
-        confirm_user: "%{name} bekreftet e-postadresse for bruker %{target}"
-        create_account_warning: "%{name} sendte en advarsel til %{target}"
-        create_announcement: "%{name} laget en ny kunngjøring %{target}"
-        create_custom_emoji: "%{name} lastet opp ny emoji %{target}"
-        create_domain_allow: "%{name} hvitelistet domenet %{target}"
-        create_domain_block: "%{name} blokkerte domenet %{target}"
-        create_email_domain_block: "%{name} svartelistet e-postdomenet %{target}"
-        create_ip_block: "%{name} opprettet en regel for IP-en %{target}"
-        demote_user: "%{name} degraderte bruker %{target}"
-        destroy_announcement: "%{name} slettet kunngjøring %{target}"
-        destroy_custom_emoji: "%{name} ødela emojien %{target}"
-        destroy_domain_allow: "%{name} fjernet domenet %{target} fra hvitelisten"
-        destroy_domain_block: "%{name} fjernet blokkeringen av domenet %{target}"
-        destroy_email_domain_block: "%{name} hvitelistet e-postdomenet %{target}"
-        destroy_ip_block: "%{name} slettet en regel for IP-en %{target}"
-        destroy_status: "%{name} fjernet status av %{target}"
-        disable_2fa_user: "%{name} deaktiverte tofaktor-autentiseringskravet for bruker %{target}"
-        disable_custom_emoji: "%{name} deaktiverte emoji %{target}"
-        disable_user: "%{name} deaktiverte innlogging for bruker %{target}"
-        enable_custom_emoji: "%{name} aktiverte emoji %{target}"
-        enable_user: "%{name} aktiverte innlogging for bruker %{target}"
-        memorialize_account: "%{name} endret %{target}s konto til en minneside"
-        promote_user: "%{name} oppgraderte bruker %{target}"
-        remove_avatar_user: "%{name} fjernet %{target} sitt profilbilde"
-        reopen_report: "%{name} gjenåpnet rapporten %{target}"
-        reset_password_user: "%{name} nullstilte passordet til bruker %{target}"
-        resolve_report: "%{name} avviste rapporten %{target}"
-        silence_account: "%{name} forstummet %{target}s konto"
-        suspend_account: "%{name} suspendert %{target}s konto"
-        unassigned_report: "%{name} avtilegnet rapport %{target}"
-        unsilence_account: "%{name} fjernet forstummingen av %{target}s konto"
-        unsuspend_account: "%{name} opphevde suspenderingen av %{target}s konto"
-        update_announcement: "%{name} oppdaterte kunngjøring %{target}"
-        update_custom_emoji: "%{name} oppdaterte emoji %{target}"
-        update_status: "%{name} oppdaterte status for %{target}"
       deleted_status: "(statusen er slettet)"
       empty: Ingen loggføringer ble funnet.
       filter_by_action: Sorter etter handling
@@ -305,7 +256,6 @@
       disable: Deaktivere
       disabled: Skrudd av
       disabled_msg: Deaktiverte emoji uten problem
-      emoji: Emoji
       enable: Aktivere
       enabled: Skrudd på
       enabled_msg: Aktiverte emojien uten problem
@@ -334,7 +284,6 @@
       feature_profile_directory: Profilmappe
       feature_registrations: Registreringer
       feature_relay: Føderasjonsoverganger
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Tidslinje-forhåndsvisning
       features: Egenskaper
       hidden_service: Føderering med skjulte tjenester
@@ -468,7 +417,6 @@
       save_and_enable: Lagre og skru på
       setup: Sett opp en overgangsforbindelse
       signatures_not_enabled: Overganger vil ikke fungere riktig mens sikkermodus eller hvitelistingsmodus er skrudd på
-      status: Status
       title: Overganger
     report_notes:
       created_msg: Rapportnotat opprettet!
@@ -503,7 +451,6 @@
       reported_by: Rapportert av
       resolved: Løst
       resolved_msg: Rapport løst!
-      status: Status
       title: Rapporter
       unassign: Fjern tilegning
       unresolved: Uløst
@@ -577,9 +524,6 @@
         desc_html: Du kan skrive din egen personverns-strategi, bruksviklår og andre regler. Du kan bruke HTML tagger
         title: Skreddersydde bruksvilkår
       site_title: Nettstedstittel
-      spam_check_enabled:
-        desc_html: Mastodon kan auto-rapportere kontoer som sender gjentatte uforespurte meldinger. Det kan oppstå falske positive treff.
-        title: Anti-spam-automatisering
       thumbnail:
         desc_html: Brukes ved forhandsvisning via OpenGraph og API. 1200x630px anbefales
         title: Miniatyrbilde for instans
@@ -599,8 +543,6 @@
         nsfw_on: NSFW PÅ
       deleted: Slettet
       failed_to_execute: Utføring mislyktes
-      media:
-        title: Media
       no_media: Ingen media
       no_status_selected: Ingen statuser ble endret da ingen ble valgt
       title: Kontostatuser
@@ -608,9 +550,6 @@
     tags:
       accounts_today: Ulike brukere i dag
       accounts_week: Unike brukstilfeller denne uken
-      context: Sammenheng
-      directory: I mappen
-      in_directory: "%{count} i mappen"
       last_active: Senest aktiv
       most_popular: Mest populært
       most_recent: Nyligst
@@ -648,13 +587,11 @@
     discovery: Oppdagelse
     localization:
       body: Mastodon er oversatt av frivillige.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Alle kan bidra.
     sensitive_content: Sensitivt innhold
     toot_layout: Tut-utseende
   application_mailer:
     notification_preferences: Endre E-postinnstillingene
-    salutation: "%{name},"
     settings: 'Endre foretrukne e-postinnstillinger: %{link}'
     view: 'Se:'
     view_profile: Vis Profil
@@ -689,9 +626,6 @@
     migrate_account: Flytt til en annen konto
     migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du <a href="%{path}">konfigurere det her</a>.
     or_log_in_with: Eller logg på med
-    providers:
-      cas: CAS
-      saml: SAML
     register: Bli med
     registration_closed: "%{instance} godtar ikke nye medlemmer"
     resend_confirmation: Send bekreftelsesinstruksjoner på nytt
@@ -730,9 +664,6 @@
     errors:
       invalid_key: er ikke en gyldig Ed25519- eller Curve25519-nøkkel
       invalid_signature: er ikke en gyldig Ed25519-signatur
-  date:
-    formats:
-      default: "%b %d, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count} timer"
@@ -797,7 +728,6 @@
       request: Be om ditt arkiv
       size: Størrelse
     blocks: Du blokkerer
-    csv: CSV
     domain_blocks: Domeneblokkeringer
     lists: Lister
     mutes: Du demper
@@ -992,7 +922,6 @@
     next: Neste
     older: Eldre
     prev: Forrige
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Du har allerede stemt i denne avstemningen
@@ -1055,38 +984,17 @@
     browsers:
       alipay: AliPay
       blackberry: BlackBerry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Ukjent nettleser
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
       nokia: Nokia S40 Ovi-nettleser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
       uc_browser: UC Browser
-      weibo: Weibo
     current_session: Nåværende økt
     description: "%{browser} på %{platform}"
     explanation: Dette er nettlesere som er pålogget på din Mastodon-konto akkurat nå.
     ip: IP-adresse
     platforms:
-      adobe_air: Adobe Air
-      android: Android
       blackberry: BlackBerry
       chrome_os: Chrome OS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
-      mac: macOS
       other: ukjent plattform
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Tilbakekall
     revoke_success: Økt tilbakekalt
     title: Økter
@@ -1112,8 +1020,6 @@
     relationships: Følginger og følgere
     two_factor_authentication: Tofaktorautentisering
     webauthn_authentication: Sikkerhetsnøkler
-  spam_check:
-    spam_detected: Dette er en automatisert rapport. Spam har blitt oppdaget.
   statuses:
     attached:
       audio:
@@ -1123,9 +1029,6 @@
       image:
         one: "%{count} bilde"
         other: "%{count} bilder"
-      video:
-        one: "%{count} video"
-        other: "%{count} videoer"
     content_warning: 'Innholdsadvarsel: %{warning}'
     language_detection: Oppdag språk automatisk
     open_in_web: Åpne i nettleser
@@ -1136,9 +1039,6 @@
       private: Kun offentlige tuter kan festes
       reblog: En fremheving kan ikke festes
     poll:
-      total_people:
-        one: "%{count} person"
-        other: "%{count} personer"
       total_votes:
         one: "%{count} stemme"
         other: "%{count} stemmer"
@@ -1250,7 +1150,6 @@
   time:
     formats:
       default: "%-d. %b %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     add: Legg til
     disable: Skru av
@@ -1306,12 +1205,9 @@
       tip_following: Du følger din tjeners administrator(er) som standard. For å finne mer interessante personer, sjekk den lokale og forente tidslinjen.
       tip_local_timeline: Den lokale tidslinjen blir kontant matet med meldinger fra personer på %{instance}. Dette er dine nærmeste naboer!
       tip_mobile_webapp: Hvis din mobile nettleser tilbyr deg å legge Mastadon til din hjemmeskjerm kan du motta push-varslinger. Det er nesten som en integrert app på mange måter!
-      tips: Tips
       title: Velkommen ombord, %{name}!
   users:
-    blocked_email_provider: Denne E-postleverandøren er ikke tillatt
     follow_limit_reached: Du kan ikke følge mer enn %{limit} personer
-    invalid_email: E-postaddressen er ugyldig
     invalid_otp_token: Ugyldig to-faktorkode
     invalid_sign_in_token: Ugyldig sikkerhetskode
     otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email}
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 3837ce56a..91eccd6ad 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -23,6 +23,7 @@ oc:
     hosted_on: Mastodon albergat sus %{domain}
     learn_more: Ne saber mai
     privacy_policy: Politica de confidencialitat
+    rules: Règlas del servidor
     see_whats_happening: Agachatz çò qu’arriba
     server_stats: 'Estatisticas del servidor :'
     source_code: Còdi font
@@ -71,7 +72,6 @@ oc:
       other: Tuts
     posts_tab_heading: Tuts
     posts_with_replies: Tuts e responsas
-    reserved_username: Aqueste nom d’utilizaire es reservat
     roles:
       admin: Admin
       bot: Robòt
@@ -226,42 +226,6 @@ oc:
         update_announcement: Actualizar l’anóncia
         update_custom_emoji: Actualizar l’emoji personalizat
         update_status: Actualizar l’estatut
-      actions:
-        assigned_to_self_report: "%{name} s’assignèt lo rapòrt %{target}"
-        change_email_user: "%{name} cambièt l’adreça de corrièl de %{target}"
-        confirm_user: "%{name} confirmèt l’adreça a %{target}"
-        create_account_warning: "%{name} mandèt un avertiment a %{target}"
-        create_announcement: "%{name} creèt una nòva anóncia %{target}"
-        create_custom_emoji: "%{name} mandèt un nòu emoji %{target}"
-        create_domain_allow: "%{name} botèt a la lista blanca lo domeni %{target}"
-        create_domain_block: "%{name} bloquèt lo domeni %{target}"
-        create_email_domain_block: "%{name} botèt a la lista nègra lo domeni de corrièl %{target}"
-        demote_user: "%{name} retragradèt l‘utilizaire %{target}"
-        destroy_announcement: "%{name} suprimiguèt una anóncia %{target}"
-        destroy_custom_emoji: "%{name} destruguèt l’emoji %{target}"
-        destroy_domain_allow: "%{name} levèt lo domeni %{target} de la lista blanca"
-        destroy_domain_block: "%{name} desbloquèt lo domeni %{target}"
-        destroy_email_domain_block: "%{name} botèt a la lista blanca lo domeni de corrièl %{target}"
-        destroy_status: "%{name} levèt l‘estatut a %{target}"
-        disable_2fa_user: "%{name} desactivèt l’autentificacion en dos temps per %{target}"
-        disable_custom_emoji: "%{name} desactivèt l’emoji %{target}"
-        disable_user: "%{name} desactivèt la connexion per %{target}"
-        enable_custom_emoji: "%{name} activèt l’emoji %{target}"
-        enable_user: "%{name} activèt la connexion per %{target}"
-        memorialize_account: "%{name} transformèt en memorial la pagina de perfil a %{target}"
-        promote_user: "%{name} promoguèt %{target}"
-        remove_avatar_user: "%{name} suprimèt l’avatar a %{target}"
-        reopen_report: "%{name} tornèt dobrir lo rapòrt %{target}"
-        reset_password_user: "%{name} reïnicializèt lo senhal a %{target}"
-        resolve_report: "%{name} anullèt lo rapòrt %{target}"
-        silence_account: "%{name} metèt en silenci lo compte a %{target}"
-        suspend_account: "%{name} susprenguèt lo compte a %{target}"
-        unassigned_report: "%{name} daissèt de tractar lo rapòrt %{target}"
-        unsilence_account: "%{name} levèt lo silenci del compte a %{target}"
-        unsuspend_account: "%{name} restabliguèt lo compte a %{target}"
-        update_announcement: "%{name} actualizèt una anóncia %{target}"
-        update_custom_emoji: "%{name} metèt a jorn l’emoji %{target}"
-        update_status: "%{name} metèt a jorn l’estatut a %{target}"
       deleted_status: "(estatut suprimit)"
       empty: Cap de jornal pas trobat.
       filter_by_action: Filtrar per accion
@@ -323,7 +287,6 @@ oc:
       feature_profile_directory: Annuari de perfils
       feature_registrations: Inscripcions
       feature_relay: Relai de federacion
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Apercebut del flux d’actualitats
       features: Foncionalitats
       hidden_service: Federacion amb servicis amagats
@@ -495,6 +458,8 @@ oc:
       unassign: Levar
       unresolved: Pas resolgut
       updated_at: Actualizat
+    rules:
+      title: Règlas del servidor
     settings:
       activity_api_enabled:
         desc_html: Nombre d’estatuts publicats, d’utilizaires actius e de novèlas inscripcions en rapòrt setmanièr
@@ -517,13 +482,11 @@ oc:
         users: Als utilizaires locals connectats
       domain_blocks_rationale:
         title: Mostrar lo rasonament
-      enable_bootstrap_timeline_accounts:
-        title: Activar lo seguiment per defaut pels nòuvenguts
       hero:
         desc_html: Mostrat en primièra pagina. Almens 600x100px recomandat. S’es pas configurat l’imatge del servidor serà mostrat
         title: Imatge de l’eròi
       mascot:
-        desc_html: Mostrat sus mantun paginas. Almens 293×205px recomandat. S’es pas configurat, mostrarem la mascòta per defaut
+        desc_html: Mostrat sus mantun pagina. Almens 293×205px recomandat. S’es pas configurat, mostrarem la mascòta per defaut
         title: Imatge de la mascòta
       peers_api_enabled:
         desc_html: Noms de domeni qu’aqueste servidor a trobats pel fediverse
@@ -569,8 +532,6 @@ oc:
         desc_html: Afichada sus la pagina de las condicions d’utilizacion<br>Podètz utilizar de balisas HTML
         title: Politica de confidencialitat del site
       site_title: Títol del servidor
-      spam_check_enabled:
-        title: Anti-spam
       thumbnail:
         desc_html: Servís pels apercebuts via OpenGraph e las API. Talha de 1200x630px recomandada
         title: Miniatura del servidor
@@ -596,12 +557,13 @@ oc:
       no_status_selected: Cap d’estatut pas cambiat estant que cap èra pas seleccionat
       title: Estatuts del compte
       with_media: Amb mèdia
+    system_checks:
+      rules_check:
+        action: Gerir las règlas servidor
+        message_html: Avètz pas definida cap de règla.
     tags:
       accounts_today: Utilizacions unicas uèi
       accounts_week: Utilizacions unicas aquesta setmana
-      context: Contèxt
-      directory: A l’annuari
-      in_directory: "%{count} a l’annuari"
       last_active: Darrièra activitat
       most_popular: Mai popularas
       most_recent: Mai recentas
@@ -640,7 +602,6 @@ oc:
     discovery: Descobèrta
     localization:
       body: Mastodon es traduch per de benevòls.
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Tot lo monde pòt contribuïr.
     sensitive_content: Contengut sensible
     toot_layout: Disposicion del tut
@@ -726,7 +687,6 @@ oc:
       x_days: "%{count} jorns"
       x_minutes: "%{count} min"
       x_months: "%{count} meses"
-      x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: Las informacions qu’avètz fornidas son pas corrèctas
     confirm_password: Picatz vòstre senhal actual per verificar vòstra identitat
@@ -949,12 +909,6 @@ oc:
     human:
       decimal_units:
         format: "%n%u"
-        units:
-          billion: B
-          million: M
-          quadrillion: Q
-          thousand: K
-          trillion: T
   otp_authentication:
     enable: Activar
     setup: Parametrar
@@ -963,7 +917,6 @@ oc:
     next: Seguent
     older: Mai ancians
     prev: Precedent
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Avètz ja votat per aqueste sondatge
@@ -1083,8 +1036,6 @@ oc:
     relationships: Abonaments e seguidors
     two_factor_authentication: Autentificacion en dos temps
     webauthn_authentication: Claus de seguretat
-  spam_check:
-    spam_detected: Aquò es un senhalament automatic. D’spam es estat detectat.
   statuses:
     attached:
       audio:
@@ -1119,6 +1070,8 @@ oc:
         other: "%{count} vòtes"
       vote: Votar
     show_more: Ne veire mai
+    show_newer: Veire mai recents
+    show_older: Veire mai ancians
     show_thread: Mostrar lo fil
     sign_in_to_participate: Inscrivètz-vos per participar a la conversacion
     title: '%{name} : "%{quote}"'
@@ -1236,6 +1189,7 @@ oc:
     enabled_success: L’autentificacion en dos temps es ben activada
     generate_recovery_codes: Generar los còdis de recuperacion
     lost_recovery_codes: Los còdi de recuperacion vos permeton d’accedir a vòstre compte se perdètz vòstre mobil. S’avètz perdut vòstres còdis de recuperacion los podètz tornar generar aquí. Los ancians còdis seràn pas mai valides.
+    methods: Metòde en dos temps
     recovery_codes: Salvar los còdis de recuperacion
     recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar
     recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. <strong>Gardatz los còdis en seguretat</strong>, per exemple, imprimissètz los e gardatz los amb vòstres documents importants.
@@ -1248,7 +1202,7 @@ oc:
     warning:
       explanation:
         disable: Quand vòstre compte es gelat, las donadas d’aqueste demòran senceras, mas podètz pas realizar cap d’accion fins que siá desblocat.
-        silence: Del temps que vòstre compte es limitat, solament lo monde que vos sègon veiràn vòstres tuts sus aqueste servidor, e poiriatz èsser tirat de mantunas listas publicas. Pasmens, d’autres vos pòdon sègre manualament.
+        silence: Del temps que vòstre compte es limitat, solament lo monde que vos sègon veiràn vòstres tuts sus aqueste servidor, e poiriatz èsser tirat de mantuna lista publica. Pasmens, d’autres vos pòdon sègre manualament.
         suspend: Vòstre compte es suspendut e totes vòstres tuts e fichièrs enviats son estats suprimits sens retorn possible d’aqueste servidor e los de vòstres seguidors.
       get_in_touch: Podètz respondre a aqueste corrièl per contactar la còla de %{instance}.
       review_server_policies: Repassar las politicas del servidor
@@ -1282,7 +1236,6 @@ oc:
       title: Vos desirem la benvenguda a bòrd %{name} !
   users:
     follow_limit_reached: Podètz pas sègre mai de %{limit} personas
-    invalid_email: L’adreça de corrièl es invalida
     invalid_otp_token: Còdi d’autentificacion en dos temps invalid
     invalid_sign_in_token: Còdi de seguretat invalid
     otp_lost_help_html: Se perdatz l’accès al dos, podètz benlèu contactar %{email}
diff --git a/config/locales/pa.yml b/config/locales/pa.yml
new file mode 100644
index 000000000..0fc957a99
--- /dev/null
+++ b/config/locales/pa.yml
@@ -0,0 +1,12 @@
+---
+pa:
+  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.
+    '422': 
+    '429': Too many requests
+    '500': 
+    '503': The page could not be served due to a temporary server failure.
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 23c67267e..9844ac083 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -26,6 +26,8 @@ pl:
       Jest używane w celu federowania i nie powinno być blokowane, chyba że chcesz zablokować całą instację, w takim przypadku użyj blokady domeny.
     learn_more: Dowiedz się więcej
     privacy_policy: Polityka prywatności
+    rules: Regulamin serwera
+    rules_html: 'Poniżej znajduje się podsumowanie zasad, których musisz przestrzegać, jeśli chcesz mieć konto na tym serwerze Mastodona:'
     see_whats_happening: Zobacz co się dzieje
     server_stats: 'Statystyki serwera:'
     source_code: Kod źródłowy
@@ -86,7 +88,6 @@ pl:
       other: Wpisów
     posts_tab_heading: Wpisy
     posts_with_replies: Wpisy z odpowiedziami
-    reserved_username: Ta nazwa użytkownika jest zarezerwowana
     roles:
       admin: Administrator
       bot: Bot
@@ -237,6 +238,7 @@ pl:
         create_domain_block: Utwórz blokadę domeny
         create_email_domain_block: Utwórz blokadę domeny e-mail
         create_ip_block: Utwórz regułę IP
+        create_unavailable_domain: Utwórz niedostępną domenę
         demote_user: Zdegraduj użytkownika
         destroy_announcement: Usuń ogłoszenie
         destroy_custom_emoji: Usuń niestandardowe emoji
@@ -245,6 +247,7 @@ pl:
         destroy_email_domain_block: Usuń blokadę domeny e-mail
         destroy_ip_block: Usuń regułę IP
         destroy_status: Usuń wpis
+        destroy_unavailable_domain: Usuń niedostępną domenę
         disable_2fa_user: Wyłącz 2FA
         disable_custom_emoji: Wyłącz niestandardowe emoji
         disable_user: Wyłącz użytkownika
@@ -268,46 +271,48 @@ pl:
         update_domain_block: Zaktualizuj blokadę domeny
         update_status: Aktualizuj wpis
       actions:
-        assigned_to_self_report: "%{name} przypisał(a) sobie zgłoszenie %{target}"
-        change_email_user: "%{name} zmienił(a) adres e-mail użytkownika %{target}"
-        confirm_user: "%{name} potwierdził(a) adres e-mail użytkownika %{target}"
-        create_account_warning: "%{name} wysłał(a) ostrzeżenie do %{target}"
-        create_announcement: "%{name} utworzył(a) nowe ogłoszenie %{target}"
-        create_custom_emoji: "%{name} dodał(a) nowe emoji %{target}"
-        create_domain_allow: "%{name} dodał(a) na białą listę domenę %{target}"
-        create_domain_block: "%{name} zablokował(a) domenę %{target}"
-        create_email_domain_block: "%{name} dodał(a) domenę e-mail %{target} na czarną listę"
-        create_ip_block: "%{name} stworzył dla IP %{target}"
-        demote_user: "%{name} zdegradował(a) użytkownika %{target}"
-        destroy_announcement: "%{name} usunął(-ęła) ogłoszenie %{target}"
-        destroy_custom_emoji: "%{name} usunął(-ęła) emoji %{target}"
-        destroy_domain_allow: "%{name} usunął(-ęła) domenę %{target} z białej listy"
-        destroy_domain_block: "%{name} odblokował(a) domenę %{target}"
-        destroy_email_domain_block: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy"
-        destroy_ip_block: "%{name} usunął regułę dla IP %{target}"
-        destroy_status: "%{name} usunął(-ęła) wpis użytkownika %{target}"
-        disable_2fa_user: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}"
-        disable_custom_emoji: "%{name} wyłączył(a) emoji %{target}"
-        disable_user: "%{name} zablokował(a) możliwość logowania użytkownikowi %{target}"
-        enable_custom_emoji: "%{name} włączył(a) emoji %{target}"
-        enable_user: "%{name} przywrócił(a) możliwość logowania użytkownikowi %{target}"
-        memorialize_account: "%{name} nadał(a) kontu %{target} status in memoriam"
-        promote_user: "%{name} podniósł(a) uprawnienia użytkownikowi %{target}"
-        remove_avatar_user: "%{name} usunął(-ęła) awatar użytkownikowi %{target}"
-        reopen_report: "%{name} otworzył(a) ponownie zgłoszenie %{target}"
-        reset_password_user: "%{name} przywrócił(a) hasło użytkownikowi %{target}"
-        resolve_report: "%{name} rozwiązał(a) zgłoszenie %{target}"
-        sensitive_account: "%{name} oznaczył(a) zawartość multimedialną %{target} jako wrażliwą"
-        silence_account: "%{name} wyciszył(a) konto %{target}"
-        suspend_account: "%{name} zawiesił(a) konto %{target}"
-        unassigned_report: "%{name} cofnął(-ęła) przypisanie zgłoszenia %{target}"
-        unsensitive_account: "%{name} cofnął(-ęła) oznaczenie zawartości multimedialnej %{target} jako wrażliwą"
-        unsilence_account: "%{name} cofnął(-ęła) wyciszenie konta %{target}"
-        unsuspend_account: "%{name} cofnął(-ęła) zawieszenie konta %{target}"
-        update_announcement: "%{name} zaktualizował(-a) ogłoszenie %{target}"
-        update_custom_emoji: "%{name} zaktualizował(a) emoji %{target}"
-        update_domain_block: "%{name} zaktualizował(-a) blokadę domeny dla %{target}"
-        update_status: "%{name} zaktualizował(a) wpis użytkownika %{target}"
+        assigned_to_self_report_html: "%{name} przypisał(a) sobie zgłoszenie %{target}"
+        change_email_user_html: "%{name} zmienił(a) adres e-mail użytkownika %{target}"
+        confirm_user_html: "%{name} potwierdził(a) adres e-mail użytkownika %{target}"
+        create_account_warning_html: "%{name} wysłał(a) ostrzeżenie do %{target}"
+        create_announcement_html: "%{name} utworzył(a) nowe ogłoszenie %{target}"
+        create_custom_emoji_html: "%{name} dodał(a) nowe emoji %{target}"
+        create_domain_allow_html: "%{name} dodał(a) na białą listę domenę %{target}"
+        create_domain_block_html: "%{name} zablokował(a) domenę %{target}"
+        create_email_domain_block_html: "%{name} dodał(a) domenę e-mail %{target} na czarną listę"
+        create_ip_block_html: "%{name} stworzył(a) regułę dla IP %{target}"
+        create_unavailable_domain_html: "%{name} przestał(a) doręczać na domenę %{target}"
+        demote_user_html: "%{name} zdegradował(a) użytkownika %{target}"
+        destroy_announcement_html: "%{name} usunął(-ęła) ogłoszenie %{target}"
+        destroy_custom_emoji_html: "%{name} usunął(-ęła) emoji %{target}"
+        destroy_domain_allow_html: "%{name} usunął(-ęła) domenę %{target} z białej listy"
+        destroy_domain_block_html: "%{name} odblokował(a) domenę %{target}"
+        destroy_email_domain_block_html: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy"
+        destroy_ip_block_html: "%{name} usunął(-ęła) regułę dla IP %{target}"
+        destroy_status_html: "%{name} usunął(-ęła) wpis użytkownika %{target}"
+        destroy_unavailable_domain_html: "%{name} wznowił(a) doręczanie do domeny %{target}"
+        disable_2fa_user_html: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}"
+        disable_custom_emoji_html: "%{name} wyłączył(a) emoji %{target}"
+        disable_user_html: "%{name} zablokował(a) możliwość logowania użytkownikowi %{target}"
+        enable_custom_emoji_html: "%{name} włączył(a) emoji %{target}"
+        enable_user_html: "%{name} przywrócił(a) możliwość logowania użytkownikowi %{target}"
+        memorialize_account_html: "%{name} nadał(a) kontu %{target} status in memoriam"
+        promote_user_html: "%{name} podniósł(a) uprawnienia użytkownikowi %{target}"
+        remove_avatar_user_html: "%{name} usunął(-ęła) awatar użytkownikowi %{target}"
+        reopen_report_html: "%{name} otworzył(a) ponownie zgłoszenie %{target}"
+        reset_password_user_html: "%{name} przywrócił(a) hasło użytkownikowi %{target}"
+        resolve_report_html: "%{name} rozwiązał(a) zgłoszenie %{target}"
+        sensitive_account_html: "%{name} oznaczył(a) zawartość multimedialną %{target} jako wrażliwą"
+        silence_account_html: "%{name} wyciszył(a) konto %{target}"
+        suspend_account_html: "%{name} zawiesił(a) konto %{target}"
+        unassigned_report_html: "%{name} cofnął(-ęła) przypisanie zgłoszenia %{target}"
+        unsensitive_account_html: "%{name} cofnął(-ęła) oznaczenie zawartości multimedialnej %{target} jako wrażliwą"
+        unsilence_account_html: "%{name} cofnął(-ęła) wyciszenie konta %{target}"
+        unsuspend_account_html: "%{name} cofnął(-ęła) zawieszenie konta %{target}"
+        update_announcement_html: "%{name} zaktualizował(a) ogłoszenie %{target}"
+        update_custom_emoji_html: "%{name} zaktualizował(a) emoji %{target}"
+        update_domain_block_html: "%{name} zaktualizował(a) blokadę domeny dla %{target}"
+        update_status_html: "%{name} zaktualizował(a) wpis użytkownika %{target}"
       deleted_status: "(usunięty wpis)"
       empty: Nie znaleziono aktywności w dzienniku.
       filter_by_action: Filtruj według działania
@@ -322,10 +327,12 @@ pl:
       new:
         create: Utwórz ogłoszenie
         title: Nowe ogłoszenie
+      publish: Opublikuj
       published_msg: Pomyślnie opublikowano ogłoszenie!
       scheduled_for: Zaplanowano na %{time}
       scheduled_msg: Zaplanowano publikację ogłoszenia!
       title: Ogłoszenia
+      unpublish: Cofnij publikację
       unpublished_msg: Pomyślnie wycofano publikację ogłoszenia!
       updated_msg: Pomyślnie zaktualizowano ogłoszenie!
     custom_emojis:
@@ -370,7 +377,6 @@ pl:
       feature_profile_directory: Katalog profilów
       feature_registrations: Rejestracja
       feature_relay: Przekazywanie federacji
-      feature_spam_check: Anty-spam
       feature_timeline_preview: Podgląd osi czasu
       features: Możliwości
       hidden_service: Federowanie z ukrytymi usługami
@@ -450,9 +456,31 @@ pl:
         create: Utwórz blokadę
         title: Nowa blokada domeny e-mail
       title: Blokowanie domen e-mail
+    follow_recommendations:
+      description_html: "<strong>Polecane śledzenia pomagają nowym użytkownikom szybko odnaleźć interesujące treści</strong>. Jeżeli użytkownik nie wchodził w interakcje z innymi wystarczająco często, aby powstały spersonalizowane rekomendacje, polecane są te konta. Są one obliczane każdego dnia na podstawie kombinacji kont o największej liczbie niedawnej aktywności i największej liczbie lokalnych obserwatorów dla danego języka."
+      language: Dla języka
+      status: Stan
+      suppress: Usuń polecenie śledzenia
+      suppressed: Usunięto
+      title: Polecane konta
+      unsuppress: Przywróć polecenie śledzenia konta
     instances:
+      back_to_all: Wszystkie
+      back_to_limited: Ograniczone
+      back_to_warning: Ostrzeżenie
       by_domain: Domena
+      delivery:
+        all: Wszystkie
+        clear: Wyczyść błędy w doręczaniu
+        restart: Uruchom ponownie doręczenie
+        stop: Zatrzymaj doręczanie
+        title: Doręczanie
+        unavailable: Niedostępne
+        unavailable_message: Doręczaniei niedostępne
+        warning: Ostrzeżenie
       delivery_available: Doręczanie jest dostępne
+      delivery_error_days: Dni błędów doręczenia
+      delivery_error_hint: Jeżeli doręczanie nie będzie możliwe przez %{count} dni, zostanie automatycznie oznaczona jako nie do doręczania.
       empty: Nie znaleziono domen.
       known_accounts:
         few: "%{count} znane konta"
@@ -558,6 +586,13 @@ pl:
       unassign: Cofnij przypisanie
       unresolved: Nierozwiązane
       updated_at: Zaktualizowano
+    rules:
+      add_new: Dodaj zasadę
+      delete: Usuń
+      description_html: Chociaż większość twierdzi, że przeczytała i zgadza się z warunkami korzystania z usługi, zwykle ludzie nie czytają ich, dopóki nie pojawi się problem. <strong>Ułatw użytkownikom szybkie przejrzenie zasad serwera, umieszczając je na prostej liście punktowanej.</strong> Postaraj się, aby poszczególne zasady były krótkie i proste, ale staraj się też nie dzielić ich na wiele oddzielnych elementów.
+      edit: Edytuj zasadę
+      empty: Jeszcze nie zdefiniowano zasad serwera.
+      title: Regulamin serwera
     settings:
       activity_api_enabled:
         desc_html: Liczy publikowane lokalnie wpisy, aktywnych użytkowników i nowe rejestracje w ciągu danego tygodnia
@@ -581,9 +616,6 @@ pl:
         users: Zalogowanym lokalnym użytkownikom
       domain_blocks_rationale:
         title: Pokaż uzasadnienia
-      enable_bootstrap_timeline_accounts:
-        desc_html: Niech nowi użytkownicy automatycznie śledzą ustawione konta, aby ich główna oś czasu nie był początkowo pusta
-        title: Dodawaj domyślne obserwacje nowym użytkownikom
       hero:
         desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura serwera
         title: Obraz bohatera
@@ -637,9 +669,6 @@ pl:
         desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz korzystać ze znaczników HTML
         title: Niestandardowe zasady użytkowania
       site_title: Nazwa serwera
-      spam_check_enabled:
-        desc_html: Mastodon może automatycznie zgłaszać konta, które wysyłają powtarzające się niechciane wiadomości. Część zgłoszeń może być nieprawidłowa.
-        title: Automatyzacja antyspamu
       thumbnail:
         desc_html: 'Używana w podglądzie przez OpenGraph i API. Zalecany rozmiar: 1200x630 pikseli'
         title: Miniatura serwera
@@ -670,13 +699,18 @@ pl:
       no_status_selected: Żaden wpis nie został zmieniony, bo żaden nie został wybrany
       title: Wpisy konta
       with_media: Z zawartością multimedialną
+    system_checks:
+      database_schema_check:
+        message_html: Istnieją oczekujące migracje bazy danych. Uruchom je, aby upewnić się, że aplikacja działa tak, jak powinna
+      rules_check:
+        action: Zarządzaj regułami serwera
+        message_html: Nie zdefiniowano żadnych reguł serwera.
+      sidekiq_process_check:
+        message_html: Brak uruchomionego procesu Sidekiq dla kolejki(-ek) %{value}. Sprawdź konfigurację Sidekiq
     tags:
       accounts_today: Unikalne wykorzystania dzisiaj
       accounts_week: Unikalne wykorzystania w tym tygodniu
       breakdown: Podział dzisiejszego wykorzystania według źródła
-      context: Kontekst
-      directory: W katalogu
-      in_directory: "%{count} w katalogu"
       last_active: Ostatnia aktywność
       most_popular: Najpopularniejsze
       most_recent: Ostatnie
@@ -693,6 +727,7 @@ pl:
       add_new: Dodaj nowy
       delete: Usuń
       edit_preset: Edytuj szablon ostrzeżenia
+      empty: Nie zdefiniowano jeszcze żadnych szablonów ostrzegawczych.
       title: Zarządzaj szablonami ostrzeżeń
   admin_mailer:
     new_pending_account:
@@ -821,7 +856,7 @@ pl:
       x_days: "%{count} dni"
       x_minutes: "%{count}min"
       x_months: "%{count} miesięcy"
-      x_seconds: "%{count}s"
+      x_seconds: "%{count} s"
   deletes:
     challenge_not_passed: Wprowadzone informacje za nieprawidłowe
     confirm_password: Wprowadź aktualne hasło, aby potwierdzić tożsamość
@@ -1062,10 +1097,14 @@ pl:
       body: "%{name} wspomniał(a) o Tobie w:"
       subject: "%{name} wspomniał(a) o Tobie"
       title: Nowe wspomnienie o Tobie
+    poll:
+      subject: Ankieta %{name} zakończyła się
     reblog:
       body: 'Twój wpis został podbity przez %{name}:'
       subject: Twój wpis został podbity przez %{name}
       title: Nowe podbicie
+    status:
+      subject: "%{name} właśnie opublikował(a) wpis"
   notifications:
     email_events: 'Powiadamiaj e-mailem o:'
     email_events_hint: 'Wybierz wydarzenia, o których chcesz otrzymywać powiadomienia:'
@@ -1164,7 +1203,7 @@ pl:
       generic: nieznana przeglądarka
       ie: Internet Explorer
       micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
+      nokia: Przeglądarka Nokia S40 Ovi
       opera: Opera
       otter: Przeglądarka Otter
       phantom_js: PhantomJS
@@ -1214,8 +1253,6 @@ pl:
     relationships: Śledzeni i śledzący
     two_factor_authentication: Uwierzytelnianie dwuetapowe
     webauthn_authentication: Klucze bezpieczeństwa
-  spam_check:
-    spam_detected: To zgłoszenie jest automatyczne. Został wykryty spam.
   statuses:
     attached:
       audio:
@@ -1270,6 +1307,7 @@ pl:
     sign_in_to_participate: Zaloguj się, aby udzielić się w tej konwersacji
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Bezpośredni
       private: Tylko dla śledzących
       private_long: Widoczne tylko dla osób, które Cię śledzą
       public: Publiczne
@@ -1438,11 +1476,8 @@ pl:
       tips: Wskazówki
       title: Witaj na pokładzie, %{name}!
   users:
-    blocked_email_provider: Ten dostawca e-mail jest niedozwolony
     follow_limit_reached: Nie możesz śledzić więcej niż %{limit} osób
     generic_access_help_html: Nie możesz uzyskać dostępu do konta? Skontaktuj się z %{email} aby uzyskać pomoc
-    invalid_email: Adres e-mail jest niepoprawny
-    invalid_email_mx: Ten adres e-mail wydaje się nie istnieć
     invalid_otp_token: Kod uwierzytelniający jest niepoprawny
     invalid_sign_in_token: Nieprawidłowy kod zabezpieczający
     otp_lost_help_html: Jeżeli utracisz dostęp do obu, możesz skontaktować się z %{email}
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 529548225..e5bde9cfa 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -26,6 +26,8 @@ pt-BR:
       É usado para propósitos de federação e não deve ser bloqueado a menos que queira bloquear toda a instância, o que no caso devia usar um bloqueio de domínio.
     learn_more: Saiba mais
     privacy_policy: Política de Privacidade
+    rules: Regras do servidor
+    rules_html: 'Abaixo está um resumo das regras que você precisa seguir se você quer ter uma conta neste servidor do Mastodon:'
     see_whats_happening: Veja o que está acontecendo
     server_stats: 'Estatísticas da instância:'
     source_code: Código-fonte
@@ -78,12 +80,10 @@ pt-BR:
       other: Toots
     posts_tab_heading: Toots
     posts_with_replies: Toots e respostas
-    reserved_username: Nome de usuário reservado
     roles:
       admin: Admin
       bot: Robô
       group: Grupo
-      moderator: Mod
     unavailable: Perfil indisponível
     unfollow: Deixar de seguir
   admin:
@@ -134,11 +134,9 @@ pt-BR:
       inbox_url: URL da caixa de entrada
       invite_request_text: Motivos para entrar
       invited_by: Convidado por
-      ip: IP
       joined: Entrou
       location:
         all: Todos
-        local: Local
         remote: Remoto
         title: Localização
       login_status: Situação da conta
@@ -215,7 +213,6 @@ pt-BR:
       username: Nome de usuário
       view_domain: Ver resumo para o domínio
       warn: Notificar
-      web: Web
       whitelisted: Permitido
     action_logs:
       action_types:
@@ -259,47 +256,6 @@ pt-BR:
         update_custom_emoji: Editar Emoji Personalizado
         update_domain_block: Atualizar bloqueio de domínio
         update_status: Editar Status
-      actions:
-        assigned_to_self_report: "%{name} pegou a denúncia %{target}"
-        change_email_user: "%{name} alterou o endereço de e-mail do usuário %{target}"
-        confirm_user: "%{name} confirmou o endereço de e-mail do usuário %{target}"
-        create_account_warning: "%{name} enviou um aviso para %{target}"
-        create_announcement: "%{name} criou o novo anúncio %{target}"
-        create_custom_emoji: "%{name} enviou o novo emoji %{target}"
-        create_domain_allow: "%{name} permitiu %{target}"
-        create_domain_block: "%{name} bloqueou %{target}"
-        create_email_domain_block: "%{name} adicionou o domínio de e-mail %{target} à lista negra"
-        create_ip_block: "%{name} criou regra para o IP %{target}"
-        demote_user: "%{name} rebaixou o usuário %{target}"
-        destroy_announcement: "%{name} excluiu o anúncio %{target}"
-        destroy_custom_emoji: "%{name} excluiu emoji %{target}"
-        destroy_domain_allow: "%{name} bloqueou %{target}"
-        destroy_domain_block: "%{name} desbloqueou %{target}"
-        destroy_email_domain_block: "%{name} adicionou domínio de e-mail %{target} à lista branca"
-        destroy_ip_block: "%{name} excluiu regra para o IP %{target}"
-        destroy_status: "%{name} excluiu toot de %{target}"
-        disable_2fa_user: "%{name} desativou a exigência de autenticação de dois fatores para o usuário %{target}"
-        disable_custom_emoji: "%{name} desativou o emoji %{target}"
-        disable_user: "%{name} desativou o acesso para o usuário %{target}"
-        enable_custom_emoji: "%{name} ativou o emoji %{target}"
-        enable_user: "%{name} ativou o acesso para o usuário %{target}"
-        memorialize_account: "%{name} transformou a conta de %{target} em um página de memorial"
-        promote_user: "%{name} promoveu o usuário %{target}"
-        remove_avatar_user: "%{name} removeu a imagem de perfil de %{target}"
-        reopen_report: "%{name} reabriu a denúncia %{target}"
-        reset_password_user: "%{name} redefiniu a senha do usuário %{target}"
-        resolve_report: "%{name} resolveu a denúncia %{target}"
-        sensitive_account: "%{name} marcou a mídia de %{target} como sensível"
-        silence_account: "%{name} silenciou a conta de %{target}"
-        suspend_account: "%{name} baniu a conta de %{target}"
-        unassigned_report: "%{name} largou a denúncia %{target}"
-        unsensitive_account: "%{name} desmarcou a mídia de %{target} como sensível"
-        unsilence_account: "%{name} desativou o silêncio de %{target}"
-        unsuspend_account: "%{name} removeu a suspensão da conta de %{target}"
-        update_announcement: "%{name} atualizou o anúncio %{target}"
-        update_custom_emoji: "%{name} atualizou o emoji %{target}"
-        update_domain_block: "%{name} atualizou o bloqueio de domínio para %{target}"
-        update_status: "%{name} atualizou o status de %{target}"
       deleted_status: "(status excluído)"
       empty: Nenhum registro encontrado.
       filter_by_action: Filtrar por ação
@@ -333,7 +289,6 @@ pt-BR:
       disable: Desativar
       disabled: Desativado
       disabled_msg: Emoji desativado com sucesso
-      emoji: Emoji
       enable: Ativar
       enabled: Ativado
       enabled_msg: Emoji ativado com sucesso
@@ -362,7 +317,6 @@ pt-BR:
       feature_profile_directory: Diretório de perfis
       feature_registrations: Novas contas
       feature_relay: Repetidor da federação
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Prévia da linha
       features: Funcionalidades
       hidden_service: Federação com serviços onion
@@ -402,6 +356,7 @@ pt-BR:
           silence: Silenciar
           suspend: Banir
         title: Novo bloqueio de domínio
+      obfuscate: Ofuscar nome de domínio
       private_comment: Comentário privado
       private_comment_hint: Comente sobre essa restrição ao domínio para uso interno dos moderadores.
       public_comment: Comentário público
@@ -498,7 +453,6 @@ pt-BR:
       save_and_enable: Salvar e ativar
       setup: Configurar uma conexão de repetidor
       signatures_not_enabled: Repetidores não funcionarão adequadamente enquanto o modo seguro ou o modo lista de permitidos estiverem ativos
-      status: Status
       title: Repetidores
     report_notes:
       created_msg: Nota de denúncia criada com sucesso!
@@ -535,11 +489,14 @@ pt-BR:
       reported_by: Denunciada por
       resolved: Resolvido
       resolved_msg: Denúncia resolvida com sucesso!
-      status: Status
       title: Denúncias
       unassign: Largar
       unresolved: Não resolvido
       updated_at: Atualizado
+    rules:
+      add_new: Adicionar regra
+      edit: Editar regra
+      title: Regras do servidor
     settings:
       activity_api_enabled:
         desc_html: Contagem de toots locais, usuários ativos e novos usuários semanalmente
@@ -563,8 +520,6 @@ pt-BR:
         users: Para usuários locais logados
       domain_blocks_rationale:
         title: Mostrar motivo
-      enable_bootstrap_timeline_accounts:
-        title: Ativar seguidos por padrão por novas contas
       hero:
         desc_html: Aparece na página inicial. Recomendado ao menos 600x100px. Se não estiver definido, a miniatura da instância é usada no lugar
         title: Imagem de capa
@@ -618,9 +573,6 @@ pt-BR:
         desc_html: Você pode escrever a sua própria Política de Privacidade, Termos de Serviço, entre outras coisas. Você pode usar tags HTML
         title: Termos de serviço personalizados
       site_title: Nome da instância
-      spam_check_enabled:
-        desc_html: Mastodon pode denunciar automaticamente contas que enviem repetidamente toots não solicitados. Pode haver falsos positivos.
-        title: Automação anti-spam
       thumbnail:
         desc_html: Usada para prévias via OpenGraph e API. Recomenda-se 1200x630px
         title: Miniatura da instância
@@ -655,16 +607,11 @@ pt-BR:
       accounts_today: Usos únicos de hoje
       accounts_week: Usos únicos desta semana
       breakdown: Descrição do consumo atual por fonte
-      context: Contexto
-      directory: No diretório
-      in_directory: "%{count} no diretório"
       last_active: Última atividade
       most_popular: Mais populares
       most_recent: Mais recentes
-      name: Hashtag
       review: Status da revisão
       reviewed: Revisado
-      title: Hashtags
       trending_right_now: Em alta no momento
       unique_uses_today: "%{count} tootando hoje"
       unreviewed: Não revisadas
@@ -707,7 +654,6 @@ pt-BR:
     toot_layout: Layout do Toot
   application_mailer:
     notification_preferences: Alterar preferências de e-mail
-    salutation: "%{name},"
     settings: 'Alterar e-mail de preferência: %{link}'
     view: 'Ver:'
     view_profile: Ver perfil
@@ -742,9 +688,6 @@ pt-BR:
     migrate_account: Mudar-se para outra conta
     migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode <a href="%{path}">configurar isso aqui</a>.
     or_log_in_with: Ou entre com
-    providers:
-      cas: CAS
-      saml: SAML
     register: Criar conta
     registration_closed: "%{instance} não está aceitando novos membros"
     resend_confirmation: Reenviar instruções de confirmação
@@ -791,15 +734,12 @@ pt-BR:
       with_month_name: "%d de %b de %Y"
   datetime:
     distance_in_words:
-      about_x_hours: "%{count}h"
       about_x_months: "%{count}m"
       about_x_years: "%{count}a"
       almost_x_years: "%{count}a"
       half_a_minute: Agora
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: Agora
       over_x_years: "%{count}a"
-      x_days: "%{count}d"
       x_minutes: "%{count}min"
       x_months: "%{count}m"
       x_seconds: "%{count}seg"
@@ -854,7 +794,6 @@ pt-BR:
       size: Tamanho
     blocks: Você bloqueou
     bookmarks: Marcadores
-    csv: CSV
     domain_blocks: Bloqueios de domínio
     lists: Listas
     mutes: Você silenciou
@@ -1044,7 +983,6 @@ pt-BR:
   number:
     human:
       decimal_units:
-        format: "%n%u"
         units:
           billion: BI
           million: MI
@@ -1064,7 +1002,6 @@ pt-BR:
     next: Próximo
     older: Mais antigo
     prev: Anterior
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Enquete votada
@@ -1146,18 +1083,10 @@ pt-BR:
     current_session: Sessão atual
     description: "%{browser} em %{platform}"
     explanation: Estes são os navegadores que estão conectados com a sua conta Mastodon.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
       blackberry: BlackBerry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: MacOS
       other: Plataforma desconhecida
-      windows: Windows
       windows_mobile: Windows Mobile
       windows_phone: Windows Phone
     revoke: Fechar
@@ -1185,8 +1114,6 @@ pt-BR:
     relationships: Seguindo e seguidores
     two_factor_authentication: Autenticação de dois fatores
     webauthn_authentication: Chaves de segurança
-  spam_check:
-    spam_detected: Esta é uma denúncia automática. Spam foi detectado.
   statuses:
     attached:
       audio:
@@ -1227,7 +1154,6 @@ pt-BR:
     show_older: Mostrar mais antigos
     show_thread: Mostrar conversa
     sign_in_to_participate: Entre para participar dessa conversa
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Privado
       private_long: Posta apenas para seguidores
@@ -1397,11 +1323,8 @@ pt-BR:
       tips: Dicas
       title: Boas vindas, %{name}!
   users:
-    blocked_email_provider: Este provedor de e-mail não é permitido
     follow_limit_reached: Você não pode seguir mais de %{limit} pessoas
     generic_access_help_html: Problemas para acessar sua conta? Você pode entrar em contato com %{email} para obter ajuda
-    invalid_email: Endereço de e-mail inválido
-    invalid_email_mx: O endereço de e-mail parece não existir
     invalid_otp_token: Código de dois fatores inválido
     invalid_sign_in_token: Cógido de segurança inválido
     otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email}
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index f7b47fb10..1a903b96f 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -26,6 +26,8 @@ pt-PT:
       É usada para motivos de federação e não deve ser bloqueada a não ser que que queira bloquear a instância por completo. Se for esse o caso, deverá usar o bloqueio de domínio.
     learn_more: Saber mais
     privacy_policy: Política de privacidade
+    rules: Regras da instância
+    rules_html: 'Abaixo está um resumo das regras que precisa seguir se pretender ter uma conta nesta instância do Mastodon:'
     see_whats_happening: Veja o que está a acontecer
     server_stats: 'Estatísticas da instância:'
     source_code: Código fonte
@@ -78,7 +80,6 @@ pt-PT:
       other: Publicações
     posts_tab_heading: Publicações
     posts_with_replies: Posts e Respostas
-    reserved_username: Este nome de utilizadores é reservado
     roles:
       admin: Administrador(a)
       bot: Robô
@@ -114,8 +115,8 @@ pt-PT:
       confirmed: Confirmado
       confirming: A confirmar
       delete: Eliminar dados
-      deleted: Apagada
-      demote: Rebaixar
+      deleted: Eliminada
+      demote: Despromoveu
       destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato
       disable: Desativar
       disable_two_factor_authentication: Desativar 2FA
@@ -201,7 +202,7 @@ pt-PT:
       statuses: Status
       subscribe: Inscrever-se
       suspended: Suspensa
-      suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Você pode cancelar a suspensão da conta para torná-la utilizável, mas ela não irá recuperar os dados que possuía anteriormente.
+      suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Pode cancelar a suspensão da conta para torná-la utilizável, mas ela não irá recuperar os dados que possuía anteriormente.
       suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se deseja eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
       time_in_queue: Aguardando na fila %{time}
       title: Contas
@@ -229,14 +230,16 @@ pt-PT:
         create_domain_block: Criar Bloqueio de Domínio
         create_email_domain_block: Criar Bloqueio de Domínio de E-mail
         create_ip_block: Criar regra de IP
+        create_unavailable_domain: Criar Domínio Indisponível
         demote_user: Despromover Utilizador
-        destroy_announcement: Remover Anúncio
-        destroy_custom_emoji: Remover Emoji Personalizado
-        destroy_domain_allow: Remover Permissão de Domínio
-        destroy_domain_block: Remover Bloqueio de Domínio
-        destroy_email_domain_block: Remover Bloqueio de Domínio de E-mail
+        destroy_announcement: Eliminar Anúncio
+        destroy_custom_emoji: Eliminar Emoji Personalizado
+        destroy_domain_allow: Eliminar Permissão de Domínio
+        destroy_domain_block: Eliminar Bloqueio de Domínio
+        destroy_email_domain_block: Eliminar Bloqueio de Domínio de E-mail
         destroy_ip_block: Eliminar regra de IP
-        destroy_status: Remover Estado
+        destroy_status: Eliminar Publicação
+        destroy_unavailable_domain: Eliminar Domínio Indisponível
         disable_2fa_user: Desativar 2FA
         disable_custom_emoji: Desativar Emoji Personalizado
         disable_user: Desativar Utilizador
@@ -260,53 +263,55 @@ pt-PT:
         update_domain_block: Atualizar Bloqueio de Domínio
         update_status: Atualizar Estado
       actions:
-        assigned_to_self_report: "%{name} atribuiu o relatório %{target} a si próprios"
-        change_email_user: "%{name} alterou o endereço de e-mail do utilizador %{target}"
-        confirm_user: "%{name} confirmou o endereço de e-mail do utilizador %{target}"
-        create_account_warning: "%{name} enviou um aviso para %{target}"
-        create_announcement: "%{name} criou um novo anúncio %{target}"
-        create_custom_emoji: "%{name} enviado emoji novo %{target}"
-        create_domain_allow: "%{name} colocou o domínio %{target} na lista branca"
-        create_domain_block: "%{name} bloqueou o domínio %{target}"
-        create_email_domain_block: "%{name} adicionou na lista negra o domínio de correio electrónico %{target}"
-        create_ip_block: "%{name} criou regra para o IP %{target}"
-        demote_user: "%{name} rebaixou o utilizador %{target}"
-        destroy_announcement: "%{name} excluiu o anúncio %{target}"
-        destroy_custom_emoji: "%{name} destruiu o emoji %{target}"
-        destroy_domain_allow: "%{name} removeu o domínio %{target} da lista branca"
-        destroy_domain_block: "%{name} desbloqueou o domínio %{target}"
-        destroy_email_domain_block: "%{name} retirou o domínio de e-mail %{target} da lista negra"
-        destroy_ip_block: "%{name} eliminou regra para o IP %{target}"
-        destroy_status: "%{name} removeu o publicação feita por %{target}"
-        disable_2fa_user: "%{name} desactivou o requerimento de autenticação em dois passos para o utilizador %{target}"
-        disable_custom_emoji: "%{name} desabilitou o emoji %{target}"
-        disable_user: "%{name} desativou o acesso para o utilizador %{target}"
-        enable_custom_emoji: "%{name} habilitou o emoji %{target}"
-        enable_user: "%{name} ativou o acesso para o utilizador %{target}"
-        memorialize_account: "%{name} transformou a conta de %{target} em um memorial"
-        promote_user: "%{name} promoveu o utilizador %{target}"
-        remove_avatar_user: "%{name} removeu a imagem de perfil de %{target}"
-        reopen_report: "%{name} reabriu o relatório %{target}"
-        reset_password_user: "%{name} restabeleceu a palavra-passe do utilizador %{target}"
-        resolve_report: "%{name} recusou o relatório %{target}"
-        sensitive_account: "%{name} marcou a media de %{target} como sensível"
-        silence_account: "%{name} silenciou a conta de %{target}"
-        suspend_account: "%{name} suspendeu a conta de %{target}"
-        unassigned_report: "%{name} não atribuiu o relatório %{target}"
-        unsensitive_account: "%{name} desmarcou a media de %{target} como sensível"
-        unsilence_account: "%{name} desativou o silêncio de %{target}"
-        unsuspend_account: "%{name} desativou a suspensão de  %{target}"
-        update_announcement: "%{name} atualizou o anúncio %{target}"
-        update_custom_emoji: "%{name} atualizou o emoji %{target}"
-        update_domain_block: "%{name} atualizou o bloqueio de domínio para %{target}"
-        update_status: "%{name} atualizou o estado de %{target}"
-      deleted_status: "(apagou a publicação)"
+        assigned_to_self_report_html: "%{name} atribuiu o relatório %{target} a si próprio"
+        change_email_user_html: "%{name} alterou o endereço de e-mail do utilizador %{target}"
+        confirm_user_html: "%{name} confirmou o endereço de e-mail do utilizador %{target}"
+        create_account_warning_html: "%{name} enviou um aviso para %{target}"
+        create_announcement_html: "%{name} criou o novo anúncio %{target}"
+        create_custom_emoji_html: "%{name} carregou o novo emoji %{target}"
+        create_domain_allow_html: "%{name} habilitou a federação com o domínio %{target}"
+        create_domain_block_html: "%{name} bloqueou o domínio %{target}"
+        create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
+        create_ip_block_html: "%{name} criou regra para o IP %{target}"
+        create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
+        demote_user_html: "%{name} despromoveu o utilizador %{target}"
+        destroy_announcement_html: "%{name} eliminou o anúncio %{target}"
+        destroy_custom_emoji_html: "%{name} destruiu o emoji %{target}"
+        destroy_domain_allow_html: "%{name} desabilitou a federação com o domínio %{target}"
+        destroy_domain_block_html: "%{name} desbloqueou o domínio %{target}"
+        destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
+        destroy_ip_block_html: "%{name} eliminou regra para o IP %{target}"
+        destroy_status_html: "%{name} removeu a publicação de %{target}"
+        destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}"
+        disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
+        disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}"
+        disable_user_html: "%{name} desativou o acesso para o utilizador %{target}"
+        enable_custom_emoji_html: "%{name} habilitou o emoji %{target}"
+        enable_user_html: "%{name} ativou o acesso para o utilizador %{target}"
+        memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
+        promote_user_html: "%{name} promoveu o utilizador %{target}"
+        remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}"
+        reopen_report_html: "%{name} reabriu o relatório %{target}"
+        reset_password_user_html: "%{name} restabeleceu a palavra-passe do utilizador %{target}"
+        resolve_report_html: "%{name} resolveu o relatório %{target}"
+        sensitive_account_html: "%{name} marcou a media de %{target} como sensível"
+        silence_account_html: "%{name} silenciou a conta de %{target}"
+        suspend_account_html: "%{name} suspendeu a conta de %{target}"
+        unassigned_report_html: "%{name} desatribuiu o realtório %{target}"
+        unsensitive_account_html: "%{name} desmarcou a media de %{target} como sensível"
+        unsilence_account_html: "%{name} desativou o silêncio de %{target}"
+        unsuspend_account_html: "%{name} desativou a suspensão de %{target}"
+        update_announcement_html: "%{name} atualizou o anúncio %{target}"
+        update_custom_emoji_html: "%{name} atualizou o emoji %{target}"
+        update_domain_block_html: "%{name} atualizou o bloqueio de domínio para %{target}"
+        update_status_html: "%{name} atualizou o estado de %{target}"
+      deleted_status: "(publicação eliminada)"
       empty: Não foram encontrados registos.
       filter_by_action: Filtrar por ação
       filter_by_user: Filtrar por utilizador
       title: Registo de auditoria
     announcements:
-      destroyed_msg: Anúncio excluído com sucesso!
+      destroyed_msg: Anúncio eliminado com sucesso!
       edit:
         title: Editar anúncio
       empty: Nenhum anúncio encontrado.
@@ -314,10 +319,12 @@ pt-PT:
       new:
         create: Criar anúncio
         title: Novo anúncio
+      publish: Publicar
       published_msg: Anúncio publicado com sucesso!
       scheduled_for: Agendado para %{time}
       scheduled_msg: Anúncio agendado para publicação!
       title: Anúncios
+      unpublish: Anular publicação
       unpublished_msg: Anúncio retirado de exibição com sucesso!
       updated_msg: Anúncio atualizado com sucesso!
     custom_emojis:
@@ -328,7 +335,7 @@ pt-PT:
       copy_failed_msg: Não foi possível criar uma cópia local deste emoji
       create_new_category: Criar nova categoria
       created_msg: Emoji criado com sucesso!
-      delete: Apagar
+      delete: Eliminar
       destroyed_msg: Emoji destruído com sucesso!
       disable: Desativar
       disabled: Desativado
@@ -359,10 +366,9 @@ pt-PT:
       config: Configuração
       feature_deletions: Eliminações da conta
       feature_invites: Links de convites
-      feature_profile_directory: Directório de perfil
+      feature_profile_directory: Diretório de perfis
       feature_registrations: Registos
       feature_relay: Repetidor da federação
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Pré-visualização da cronologia
       features: Componentes
       hidden_service: Federação com serviços escondidos
@@ -440,9 +446,34 @@ pt-PT:
         create: Adicionar domínio
         title: Novo bloqueio de domínio de email
       title: Bloqueio de Domínio de Email
+    follow_recommendations:
+      description_html: "<strong>Recomendações de quem seguir ajudam novos utilizadores a encontrar conteúdo interessante rapidamente.</strong>. Quando um utilizador não interage com outros o suficiente para formar recomendações personalizadas, estas contas são recomendadas. Elas são recalculadas diariamente a partir de uma mistura de contas com mais atividade recente e maior número de seguidores locais para um determinado idioma."
+      language: Para o idioma
+      status: Estado
+      suppress: Suprimir recomendação de contas a seguir
+      suppressed: Suprimida
+      title: Seguir recomendações
+      unsuppress: Restaurar recomendações de contas a seguir
     instances:
+      back_to_all: Todas
+      back_to_limited: Limitadas
+      back_to_warning: Aviso
       by_domain: Domínio
+      delivery:
+        all: Todas
+        clear: Limpar erros de entrega
+        restart: Reiniciar entrega
+        stop: Parar entrega
+        title: Entrega
+        unavailable: Indisponível
+        unavailable_message: Entrega indisponível
+        warning: Aviso
+        warning_message:
+          one: Falhou entrega %{count} dia
+          other: Falhou entrega %{count} dias
       delivery_available: Entrega disponível
+      delivery_error_days: Dias de erro de entrega
+      delivery_error_hint: Se a entrega não for possível durante %{count} dias, será automaticamente marcada como não realizável.
       empty: Não foram encontrados domínios.
       known_accounts:
         one: "%{count} conta conhecida"
@@ -488,7 +519,7 @@ pt-PT:
       title: Relações de %{acct}
     relays:
       add_new: Adicionar novo repetidor
-      delete: Apagar
+      delete: Eliminar
       description_html: Um <strong>repetidor de federação</strong> é um servidor intermediário que troca grandes volumes de publicações públicas entre instâncias que o subscrevem e publicam. <strong>Ele pode ajudar pequenas e medias instâncias a descobrir conteúdo do fediverso</strong> que, de outro modo, exigiria que os utilizadores locais seguissem manualmente outras pessoas em instâncias remotas.
       disable: Desactivar
       disabled: Desactivado
@@ -504,7 +535,7 @@ pt-PT:
       title: Retransmissores
     report_notes:
       created_msg: Relatório criado com sucesso!
-      destroyed_msg: Relatório apagado com sucesso!
+      destroyed_msg: Nota de relatório eliminada com sucesso!
     reports:
       account:
         notes:
@@ -529,7 +560,7 @@ pt-PT:
         create: Adicionar nota
         create_and_resolve: Resolver com nota
         create_and_unresolve: Reabrir com nota
-        delete: Apagar
+        delete: Eliminar
         placeholder: Descreve as ações que foram tomadas ou quaisquer outras atualizações relacionadas...
       reopen: Reabrir relatório
       report: 'Denúncia #%{id}'
@@ -542,6 +573,13 @@ pt-PT:
       unassign: Não atribuir
       unresolved: Por resolver
       updated_at: Atualizado
+    rules:
+      add_new: Adicionar regra
+      delete: Eliminar
+      description_html: Embora a maioria afirme ter lido e concordado com os termos de serviço, geralmente as pessoas só leem depois de surgir um problema. <strong>Dê uma olhada nas regras do seu servidor fornecendo-as em uma lista de marcadores planos.</strong> Tente manter as regras individuais curtas e simples, mas tente também não dividi-las em muitos itens separados.
+      edit: Editar regra
+      empty: Nenhuma regra de instância foi ainda definida.
+      title: Regras da instância
     settings:
       activity_api_enabled:
         desc_html: Contagem semanais de publicações locais, utilizadores activos e novos registos
@@ -565,9 +603,6 @@ pt-PT:
         users: Para utilizadores locais que se encontrem autenticados
       domain_blocks_rationale:
         title: Mostrar motivo
-      enable_bootstrap_timeline_accounts:
-        desc_html: Faça com que novos utilizadores sigam automaticamente contas configuradas, para que a cronologia destes não se apresente inicialmente vazia
-        title: Habilitar seguidores predefinidos para novos utilizadores
       hero:
         desc_html: Apresentado na primeira página. Pelo menos 600x100px recomendados. Quando não é definido, é apresentada a miniatura da instância
         title: Imagem Hero
@@ -588,7 +623,7 @@ pt-PT:
           desc_html: Mostrar na página inicial quando registos estão encerrados<br/>Podes usar tags HTML
           title: Mensagem de registos encerrados
         deletion:
-          desc_html: Permite a qualquer um apagar a conta
+          desc_html: Permitir a qualquer utilizador eliminar a sua conta
           title: Permitir eliminar contas
         min_invite_role:
           disabled: Ninguém
@@ -621,9 +656,6 @@ pt-PT:
         desc_html: Podes escrever a sua própria política de privacidade, termos de serviço, entre outras coisas. Pode utilizar etiquetas HTML
         title: Termos de serviço personalizados
       site_title: Título do site
-      spam_check_enabled:
-        desc_html: O Mastodon pode reportar automaticamente contas que enviem repetidamente mensagens não solicitadas. Poderão ocorrer alguns falso-positivos.
-        title: Automação anti-spam
       thumbnail:
         desc_html: Usada para visualizações via OpenGraph e API. Recomenda-se 1200x630px
         title: Miniatura da instância
@@ -638,15 +670,15 @@ pt-PT:
         desc_html: Exibir publicamente hashtags atualmente em destaque que já tenham sido revistas anteriormente
         title: Hashtags em destaque
     site_uploads:
-      delete: Excluir arquivo carregado
-      destroyed_msg: Upload do site excluído com sucesso!
+      delete: Eliminar arquivo carregado
+      destroyed_msg: Upload do site eliminado com sucesso!
     statuses:
       back_to_account: Voltar para página da conta
       batch:
         delete: Eliminar
         nsfw_off: NSFW OFF
         nsfw_on: NSFW ON
-      deleted: Apagado
+      deleted: Eliminado
       failed_to_execute: Falhou ao executar
       media:
         title: Media
@@ -654,13 +686,18 @@ pt-PT:
       no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado
       title: Estado das contas
       with_media: Com media
+    system_checks:
+      database_schema_check:
+        message_html: Existem migrações de base de dados pendentes. Por favor, execute-as para garantir que o aplicativo se comporte como esperado
+      rules_check:
+        action: Gerir regras da instância
+        message_html: Não definiu nenhuma regra para a instância.
+      sidekiq_process_check:
+        message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq
     tags:
       accounts_today: Usos únicos hoje
       accounts_week: Usos únicos desta semana
       breakdown: Descrição do consumo atual por fonte
-      context: Contexto
-      directory: No diretório
-      in_directory: "%{count} no diretório"
       last_active: Última actividade
       most_popular: Mais popular
       most_recent: Mais recente
@@ -675,8 +712,9 @@ pt-PT:
     title: Administração
     warning_presets:
       add_new: Adicionar novo
-      delete: Apagar
+      delete: Eliminar
       edit_preset: Editar o aviso predefinido
+      empty: Ainda não definiu nenhum aviso predefinido.
       title: Gerir os avisos predefinidos
   admin_mailer:
     new_pending_account:
@@ -692,7 +730,7 @@ pt-PT:
   aliases:
     add_new: Criar pseudónimo
     created_msg: Criou com sucesso um novo pseudónimo. Pode agora iniciar a migração da conta antiga.
-    deleted_msg: Removido o pseudónimo com sucesso. Migrar dessa conta para esta não será mais possível.
+    deleted_msg: O pseudónimo foi eliminado com sucesso. Migrar dessa conta para esta não será mais possível.
     empty: Não tem pseudónimos.
     hint_html: Se quiser mudar de outra conta para esta, pode criar aqui um pseudónimo, que é necessário antes de poder prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é <strong>inofensiva e reversível</strong>. <strong>A migração da conta é iniciada a partir da conta antiga</strong>.
     remove: Desvincular pseudónimo
@@ -729,7 +767,7 @@ pt-PT:
     checkbox_agreement_html: Concordo com as <a href="%{rules_path}" target="_blank">regras da instância</a> e com os <a href="%{terms_path}" target="_blank">termos de serviço</a>
     checkbox_agreement_without_rules_html: Concordo com os <a href="%{terms_path}" target="_blank">termos do serviço</a>
     delete_account: Eliminar conta
-    delete_account_html: Se desejas eliminar a conta, podes <a href="%{path}">continua aqui</a>. Uma confirmação será pedida.
+    delete_account_html: Se deseja eliminar a sua conta, pode <a href="%{path}">continuar aqui</a>. Uma confirmação será solicitada.
     description:
       prefix_invited_by_user: "@%{name} convidou-o a juntar-se a esta instância do Mastodon!"
       prefix_sign_up: Inscreva-se hoje no Mastodon!
@@ -743,7 +781,7 @@ pt-PT:
     login: Entrar
     logout: Sair
     migrate_account: Mudar para uma conta diferente
-    migrate_account_html: Se desejas redirecionar esta conta para uma outra podes<a href="%{path}">configurar isso aqui</a>.
+    migrate_account_html: Se deseja redirecionar esta conta para uma outra pode <a href="%{path}">configurar isso aqui</a>.
     or_log_in_with: Ou iniciar sessão com
     providers:
       cas: CAS
@@ -808,14 +846,14 @@ pt-PT:
       x_seconds: "%{count} segundos"
   deletes:
     challenge_not_passed: A informação que introduziu não estava correta
-    confirm_password: Introduz a palavra-passe atual para verificar a tua identidade
+    confirm_password: Introduza a sua palavra-passe atual para verificar a sua identidade
     confirm_username: Introduza o seu nome de utilizador para confirmar o procedimento
     proceed: Eliminar conta
-    success_msg: A tua conta foi eliminada com sucesso
+    success_msg: A sua conta foi eliminada com sucesso
     warning:
       before: 'Antes de continuar, por favor leia cuidadosamente estas notas:'
       caches: O conteúdo que foi armazenado em cache por outras instâncias pode persistir
-      data_removal: As suas publicações e outros dados serão removidos permanentemente
+      data_removal: As suas publicações e outros dados serão eliminados permanentemente
       email_change_html: Pode <a href="%{path}">alterar o seu endereço de e-mail</a> sem eliminar a sua conta
       email_contact_html: Se ainda não chegou, pode enviar um e-mail a <a href="mailto:%{email}">%{email}</a> para obter ajuda
       email_reconfirmation_html: Se não recebeu o e-mail de confirmação, pode <a href="%{path}">pedi-lo novamente</a>
@@ -880,7 +918,7 @@ pt-PT:
       invalid_context: Inválido ou nenhum contexto fornecido
       invalid_irreversible: Filtragem irreversível só funciona no contexto das notificações ou do início
     index:
-      delete: Apagar
+      delete: Eliminar
       empty: Não tem filtros.
       title: Filtros
     new:
@@ -1038,10 +1076,14 @@ pt-PT:
       body: 'Foste mencionado por %{name}:'
       subject: "%{name} mencionou-te"
       title: Nova menção
+    poll:
+      subject: Uma votação realizada por %{name} terminou
     reblog:
       body: 'O teu post foi partilhado por %{name}:'
       subject: "%{name} partilhou o teu post"
       title: Nova partilha
+    status:
+      subject: "%{name} acabou de publicar"
   notifications:
     email_events: Eventos para notificações por e-mail
     email_events_hint: 'Selecione os eventos para os quais deseja receber notificações:'
@@ -1190,8 +1232,6 @@ pt-PT:
     relationships: Seguindo e seguidores
     two_factor_authentication: Autenticação em dois passos
     webauthn_authentication: Chaves de segurança
-  spam_check:
-    spam_detected: Este é um relatório automatizado. Foi detectado spam.
   statuses:
     attached:
       audio:
@@ -1234,6 +1274,7 @@ pt-PT:
     sign_in_to_participate: Inicie a sessão para participar na conversa
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Direto
       private: Mostrar apenas para seguidores
       private_long: Mostrar apenas para seguidores
       public: Público
@@ -1402,11 +1443,8 @@ pt-PT:
       tips: Dicas
       title: Bem-vindo a bordo, %{name}!
   users:
-    blocked_email_provider: Este provedor de e-mail não é permitido
     follow_limit_reached: Não podes seguir mais do que %{limit} pessoas
     generic_access_help_html: Problemas para aceder à sua conta? Pode entrar em contacto com %{email} para obter ajuda
-    invalid_email: O endereço de e-mail é inválido
-    invalid_email_mx: O endereço de e-mail não parece existir
     invalid_otp_token: Código de autenticação inválido
     invalid_sign_in_token: Cógido de segurança inválido
     otp_lost_help_html: Se tu perdeste acesso a ambos, tu podes entrar em contacto com %{email}
@@ -1414,19 +1452,19 @@ pt-PT:
     signed_in_as: 'Registado como:'
     suspicious_sign_in_confirmation: Parece que não iniciou sessão através deste dispositivo antes, e não acede à sua conta há algum tempo. Portanto, enviámos um código de segurança para o seu endereço de e-mail para confirmar que é você.
   verification:
-    explanation_html: 'Tu podes <strong>comprovar que és o dono dos links nos metadados do teu perfil</strong>. Para isso, o website para o qual o link aponta tem de conter um link para o teu perfil do Mastodon. Este link <strong>tem</strong> de ter um <code>rel="me"</code> atributo. O conteúdo do texto não é relevante. Aqui está um exemplo:'
+    explanation_html: 'Pode <strong>comprovar que é o dono dos links nos metadados do seu perfil</strong>. Para isso, o website para o qual o link aponta tem de conter um link para o seu perfil do Mastodon. Este link <strong>tem</strong> de ter um atributo <code>rel="me"</code>. O conteúdo do texto não é relevante. Aqui está um exemplo:'
     verification: Verificação
   webauthn_credentials:
     add: Adicionar nova chave de segurança
     create:
       error: Ocorreu um problema ao adicionar sua chave de segurança. Tente novamente.
       success: A sua chave de segurança foi adicionada com sucesso.
-    delete: Remover
-    delete_confirmation: Tem a certeza de que pretende remover esta chave de segurança?
+    delete: Eliminar
+    delete_confirmation: Tem a certeza de que pretende eliminar esta chave de segurança?
     description_html: Se você ativar a <strong>autenticação com chave de segurança</strong>, para aceder à sua conta será necessário que utilize uma das suas chaves de segurança.
     destroy:
       error: Ocorreu um problema ao remover a sua chave de segurança. Tente novamente.
-      success: A sua chave de segurança foi removida com sucesso.
+      success: A sua chave de segurança foi eliminada com sucesso.
     invalid_credential: Chave de segurança inválida
     nickname_hint: Introduza o apelido da sua nova chave de segurança
     not_enabled: Ainda não ativou o WebAuthn
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 630bd91d6..0e2dc57af 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -7,15 +7,12 @@ ro:
     active_count_after: activi
     active_footnote: Utilizatori activi lunar (UAL)
     administered_by: 'Administrat de:'
-    api: API
     apps: Aplicații mobile
     apps_platforms: Folosește Mastodon de pe iOS, Android și alte platforme
     browse_directory: Răsfoiți directorul de profil și filtrați după interese
     browse_local_posts: Răsfoiți un flux live al postărilor publice de pe acest server
     browse_public_posts: Răsfoiește un flux live de postări publice pe Mastodon
-    contact: Contact
     contact_missing: Nesetat
-    contact_unavailable: N/A
     discover_users: Descoperă utilizatori
     documentation: Documentație
     federation_hint_html: Cu un cont pe %{instance} vei putea urmări oameni pe orice server de Mastodon sau mai departe.
@@ -38,7 +35,6 @@ ro:
     terms: Termeni de serviciu
     unavailable_content: Conținut indisponibil
     unavailable_content_description:
-      domain: Server
       reason: Motiv
       rejecting_media: 'Fişierele media de pe aceste servere nu vor fi procesate sau stocate şi nici o miniatură nu va fi afişată, necesitând click manual la fişierul original:'
       rejecting_media_title: Fișiere media filtrate
@@ -65,7 +61,6 @@ ro:
     joined: Înscris %{date}
     last_active: ultima activitate
     link_verified_on: Proprietatea acestui link a fost verificată la %{date}
-    media: Media
     moved_html: "%{name} s-a mutat la %{new_profile_link}:"
     network_hidden: Aceste informaţii nu sunt disponibile
     never_active: Niciodată
@@ -80,12 +75,9 @@ ro:
       other: De Postări
     posts_tab_heading: Postări
     posts_with_replies: Postări și răspunsuri
-    reserved_username: Numele de utilizator este rezervat
     roles:
-      admin: Admin
       bot: Robot
       group: Grup
-      moderator: Mod
     unavailable: Profil indisponibil
     unfollow: Nu mai urmării
   admin:
@@ -102,7 +94,6 @@ ro:
       approve: Aprobă
       approve_all: Aprobă toate
       are_you_sure: Ești sigur?
-      avatar: Avatar
       by_domain: Domeniu
       change_email:
         changed_msg: E-mail de cont schimbat cu succes!
@@ -131,11 +122,9 @@ ro:
       header: Antet
       inbox_url: URL mesaje primite
       invited_by: Invitat de
-      ip: IP
       joined: Înscris
       location:
         all: Toate
-        local: Local
         remote: La distanţă
         title: Locaţie
       login_status: Stare conectare
@@ -157,8 +146,6 @@ ro:
       pending: În așteptare
       perform_full_suspension: Suspendate
       promote: Promovează
-      protocol: Protocol
-      public: Public
       push_subscription_expires: Abonamentul PuSH expiră
       redownload: Reîmprospătează profilul
       reject: Respinge
@@ -174,8 +161,6 @@ ro:
       resubscribe: Resubscrie-te
       role: Permisiuni
       roles:
-        admin: Administrator
-        moderator: Moderator
         staff: Personal
         user: Utilizator
       search: Caută
@@ -198,7 +183,6 @@ ro:
       unsubscribe: Dezabonare
       username: Nume
       warn: Avertizează
-      web: Web
       whitelisted: Excluse la blocare
     action_logs:
       action_types:
@@ -246,13 +230,11 @@ ro:
     remove: Deconectare alias
   appearance:
     localization:
-      guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Toată lumea poate contribui.
     sensitive_content: Conținut sensibil
     toot_layout: Aspect postare
   application_mailer:
     notification_preferences: Modifică preferințe e-mail
-    salutation: "%{name},"
     settings: 'Modifică preferințe e-mail: %{link}'
     view: 'Vizualizare:'
     view_profile: Vizualizați profilul
@@ -284,9 +266,6 @@ ro:
     migrate_account: Transfer către un alt cont
     migrate_account_html: Dacă dorești să redirecționezi acest cont către un altul, poți <a href="%{path}">configura asta aici</a>.
     or_log_in_with: Sau conectează-te cu
-    providers:
-      cas: CAS
-      saml: SAML
     register: Înregistrare
     registration_closed: "%{instance} nu acceptă membri noi"
     resend_confirmation: Retrimite instrucțiunile de confirmare
@@ -335,9 +314,7 @@ ro:
       less_than_x_seconds: Chiar acum
       over_x_years: "%{count}ani"
       x_days: "%{count}z"
-      x_minutes: "%{count}m"
       x_months: "%{count}l"
-      x_seconds: "%{count}s"
   deletes:
     challenge_not_passed: Informațiile introduse nu au fost corecte
     confirm_password: Introdu parola curentă pentru a-ți verifica identitatea
@@ -522,14 +499,7 @@ ro:
     activity: Ultima activitate
     browser: Navigator
     browsers:
-      alipay: Alipay
-      blackberry: Blackberry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Navigator necunoscut
-      ie: Internet Explorer
   settings:
     account: Cont
     back: Înapoi la Mastodon
@@ -543,10 +513,6 @@ ro:
         few: "%{count} imagini"
         one: "%{count} imagine"
         other: "%{count} de imagini"
-      video:
-        few: "%{count} videoclipuri"
-        one: "%{count} video"
-        other: "%{count} de videoclipuri"
     boosted_from_html: Impuls de la %{acct_link}
     content_warning: 'Avertisment privind conținutul: %{warning}'
     disallowed_hashtags:
@@ -576,11 +542,9 @@ ro:
     show_more: Arată mai mult
     show_thread: Arată discuția
     sign_in_to_participate: Conectează-te pentru a participa la conversație
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Doar urmăritorii
       private_long: Arată doar urmăritorilor
-      public: Public
       public_long: Toată lumea poate vedea
       unlisted: Nelistat
       unlisted_long: Toată lumea poate vedea, dar nu este listată pe fluxurile publice
@@ -730,7 +694,6 @@ ro:
       title: Bine ai venit la bord, %{name}!
   users:
     follow_limit_reached: Nu poți urmări mai mult de %{limit} persoane
-    invalid_email: Adresa de e-mail nu este validă
     invalid_otp_token: Cod doi pași nevalid
     otp_lost_help_html: Dacă ai pierdut accesul la ambele, poți lua legătura cu %{email}
     seamless_external_login: Sunteți autentificat prin intermediul unui serviciu extern, astfel încât parola și setările de e-mail nu sunt disponibile.
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 9895f9a55..4844cea5b 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -26,6 +26,8 @@ ru:
       Используется для целей федерации и не должен быть заблокирован, если вы не хотите заблокировать всю инстанцию, вместо этого лучше использовать доменную блокировку.
     learn_more: Узнать больше
     privacy_policy: Политика конфиденциальности
+    rules: Правила сервера
+    rules_html: 'Ниже приведена сводка правил, которых вам нужно придерживаться, если вы хотите иметь учётную запись на этом сервере Мастодона:'
     see_whats_happening: Узнайте, что происходит вокруг
     server_stats: 'Статистика сервера:'
     source_code: Исходный код
@@ -86,7 +88,6 @@ ru:
       other: статусов
     posts_tab_heading: Посты
     posts_with_replies: Посты с ответами
-    reserved_username: Имя пользователя зарезервировано
     roles:
       admin: Администратор
       bot: Бот
@@ -150,7 +151,7 @@ ru:
         remote: Удаленные
         title: Размещение
       login_status: Статус учётной записи
-      media_attachments: Файлы мультимедиа
+      media_attachments: Медиафайлы
       memorialize: Сделать мемориалом
       memorialized: Превращён в памятник
       memorialized_msg: "%{username} успешно превращён в памятник"
@@ -198,8 +199,8 @@ ru:
       search: Поиск
       search_same_email_domain: Другие пользователи с тем же доменом электронной почты
       search_same_ip: Другие пользователи с таким же IP
-      sensitive: Деликатный
-      sensitized: отмечено как деликатный контент
+      sensitive: Отметить как «деликатного содержания»
+      sensitized: отмечено как «деликатного характера»
       shared_inbox_url: URL общих входящих
       show:
         created_reports: Жалобы, отправленные с этой учётной записи
@@ -214,7 +215,7 @@ ru:
       time_in_queue: Ожидание в очереди %{time}
       title: Учётные записи
       unconfirmed_email: Неподтверждённый e-mail
-      undo_sensitized: Снять отметку "деликатный"
+      undo_sensitized: Убрать отметку «деликатного содержания»
       undo_silenced: Отменить скрытие
       undo_suspension: Снять блокировку
       unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно
@@ -233,81 +234,85 @@ ru:
         create_account_warning: Выдача предупреждения
         create_announcement: Создание объявлений
         create_custom_emoji: Добавление эмодзи
-        create_domain_allow: Создать разрешение для домена
+        create_domain_allow: Разрешение доменов
         create_domain_block: Блокировка доменов
         create_email_domain_block: Блокировка e-mail доменов
-        create_ip_block: Создать IP правило
+        create_ip_block: Создание правил для IP-адресов
+        create_unavailable_domain: Добавление домена в список недоступных
         demote_user: Разжалование пользователей
         destroy_announcement: Удаление объявлений
         destroy_custom_emoji: Удаление эмодзи
-        destroy_domain_allow: Удалить разрешение для домена
+        destroy_domain_allow: Отзыв разрешений для доменов
         destroy_domain_block: Разблокировка доменов
         destroy_email_domain_block: Разблокировка e-mail доменов
-        destroy_ip_block: Удалить IP правило
+        destroy_ip_block: Удаление правил для IP-адресов
         destroy_status: Удаление постов
+        destroy_unavailable_domain: Исключение доменов из списка недоступных
         disable_2fa_user: Отключение 2FA
         disable_custom_emoji: Отключение эмодзи
         disable_user: Заморозка пользователей
         enable_custom_emoji: Включение эмодзи
         enable_user: Разморозка пользователей
-        memorialize_account: Сделать мемориалом
+        memorialize_account: Присвоение пользователям статуса «мемориала»
         promote_user: Повышение пользователей
         remove_avatar_user: Удаление аватаров
         reopen_report: Возобновление жалоб
         reset_password_user: Сброс пароля пользователей
         resolve_report: Отметка жалоб «решёнными»
-        sensitive_account: Отметить все медиафайлы в вашей учётной записи как деликатные
+        sensitive_account: Присвоение пользователя отметки «деликатного содержания»
         silence_account: Скрытие пользователей
         suspend_account: Блокировка пользователей
         unassigned_report: Снятие жалоб
-        unsensitive_account: Снять отметку "деликатный" с медиафайлов вашей учётной записи
+        unsensitive_account: Снятие с пользователей отметки «деликатного содержания»
         unsilence_account: Отмена скрытия пользователей
         unsuspend_account: Разблокировка пользователей
         update_announcement: Обновление объявлений
         update_custom_emoji: Обновление эмодзи
-        update_domain_block: Изменить блокировку домена
+        update_domain_block: Изменение блокировки домена
         update_status: Изменение постов
       actions:
-        assigned_to_self_report: "%{name} назначил(а) себя для решения жалобы %{target}"
-        change_email_user: "%{name} сменил(а) e-mail пользователя %{target}"
-        confirm_user: "%{name} подтвердил(а) e-mail адрес пользователя %{target}"
-        create_account_warning: "%{name} выдал(а) предупреждение %{target}"
-        create_announcement: "%{name} создал(а) новое объявление %{target}"
-        create_custom_emoji: "%{name} загрузил(а) новый эмодзи %{target}"
-        create_domain_allow: "%{name} внес(ла) домен %{target} в белый список"
-        create_domain_block: "%{name} заблокировал(а) домен %{target}"
-        create_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в чёрный список"
-        create_ip_block: "%{name} создал правило для IP %{target}"
-        demote_user: "%{name} разжаловал(а) пользователя %{target}"
-        destroy_announcement: "%{name} удалил объявление %{target}"
-        destroy_custom_emoji: "%{name} измельчил(а) эмодзи %{target} в пыль"
-        destroy_domain_allow: "%{name} убрал домен %{target} из белого списка"
-        destroy_domain_block: "%{name} разблокировал(а) домен %{target}"
-        destroy_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в белый список"
-        destroy_ip_block: "%{name} удалил правило для IP %{target}"
-        destroy_status: "%{name} удалил(а) пост пользователя %{target}"
-        disable_2fa_user: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}"
-        disable_custom_emoji: "%{name} отключил(а) эмодзи %{target}"
-        disable_user: "%{name} заморозил(а) пользователя %{target}"
-        enable_custom_emoji: "%{name} включил(а) эмодзи %{target}"
-        enable_user: "%{name} разморозил(а) пользователя %{target}"
-        memorialize_account: "%{name} перевел(а) учётную запись пользователя %{target} в режим памятника"
-        promote_user: "%{name} повысил(а) пользователя %{target}"
-        remove_avatar_user: "%{name} убрал(а) аватарку пользователя %{target}"
-        reopen_report: "%{name} переоткрыл(а) жалобу %{target}"
-        reset_password_user: "%{name} сбросил(а) пароль пользователя %{target}"
-        resolve_report: "%{name} решил(а) жалобу %{target}"
-        sensitive_account: "%{name} пометил медиа %{target} как деликатное"
-        silence_account: "%{name} наложил(а) ограничения на видимость постов учётной записи %{target}"
-        suspend_account: "%{name} заблокировал(а) учётную запись %{target}"
-        unassigned_report: "%{name} сняла назначение жалобы %{target}"
-        unsensitive_account: '%{name} снял отметку "деликатное" с медиа %{target}'
-        unsilence_account: "%{name} снял ограничения видимости постов пользователя %{target}"
-        unsuspend_account: "%{name} снял(а) блокировку с пользователя %{target}"
-        update_announcement: "%{name} обновил объявление %{target}"
-        update_custom_emoji: "%{name} обновил(а) эмодзи %{target}"
-        update_domain_block: "%{name} обновил блокировку домена для %{target}"
-        update_status: "%{name} изменил(а) пост пользователя %{target}"
+        assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}"
+        change_email_user_html: "%{name} сменил(а) e-mail пользователя %{target}"
+        confirm_user_html: "%{name} подтвердил(а) e-mail адрес пользователя %{target}"
+        create_account_warning_html: "%{name} выдал(а) предупреждение %{target}"
+        create_announcement_html: "%{name} создал(а) новое объявление %{target}"
+        create_custom_emoji_html: "%{name} загрузил(а) новый эмодзи %{target}"
+        create_domain_allow_html: "%{name} разрешил(а) федерацию с доменом %{target}"
+        create_domain_block_html: "%{name} заблокировал(а) домен %{target}"
+        create_email_domain_block_html: "%{name} заблокировал(а) e-mail домен %{target}"
+        create_ip_block_html: "%{name} создал(а) правило для IP %{target}"
+        create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}"
+        demote_user_html: "%{name} разжаловал(а) пользователя %{target}"
+        destroy_announcement_html: "%{name} удалил(а) объявление %{target}"
+        destroy_custom_emoji_html: "%{name} удалил(а) эмодзи %{target}"
+        destroy_domain_allow_html: "%{name} запретил(а) федерацию с доменом %{target}"
+        destroy_domain_block_html: "%{name} снял(а) блокировку с домена %{target}"
+        destroy_email_domain_block_html: "%{name} снял(а) блокировку с e-mail домена %{target}"
+        destroy_ip_block_html: "%{name} удалил(а) правило для IP %{target}"
+        destroy_status_html: "%{name} удалил(а) пост пользователя %{target}"
+        destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}"
+        disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}"
+        disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}"
+        disable_user_html: "%{name} заморозил(а) пользователя %{target}"
+        enable_custom_emoji_html: "%{name} включил(а) эмодзи %{target}"
+        enable_user_html: "%{name} разморозил(а) пользователя %{target}"
+        memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника"
+        promote_user_html: "%{name} повысил(а) пользователя %{target}"
+        remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}"
+        reopen_report_html: "%{name} повторно открыл(а) жалобу %{target}"
+        reset_password_user_html: "%{name} сбросил(а) пароль пользователя %{target}"
+        resolve_report_html: "%{name} решил(а) жалобу %{target}"
+        sensitive_account_html: "%{name} установил(а) отметку файлов %{target} как «деликатных»"
+        silence_account_html: "%{name} наложил(а) ограничения на видимость постов пользователя %{target}"
+        suspend_account_html: "%{name} заблокировал(а) учётную запись %{target}"
+        unassigned_report_html: "%{name} снял(а) назначение жалобы %{target}"
+        unsensitive_account_html: "%{name} снял(а) отметку файлов %{target} как «деликатных»"
+        unsilence_account_html: "%{name} снял(а) ограничения видимости постов пользователя %{target}"
+        unsuspend_account_html: "%{name} снял(а) блокировку с пользователя %{target}"
+        update_announcement_html: "%{name} обновил(а) объявление %{target}"
+        update_custom_emoji_html: "%{name} обновил(а) эмодзи %{target}"
+        update_domain_block_html: "%{name} обновил(а) блокировку домена для %{target}"
+        update_status_html: "%{name} изменил(а) пост пользователя %{target}"
       deleted_status: "(удалённый пост)"
       empty: Журнал пуст.
       filter_by_action: Фильтр по действию
@@ -322,10 +327,12 @@ ru:
       new:
         create: Создать объявление
         title: Новое объявление
+      publish: Опубликовать
       published_msg: Объявление опубликовано.
       scheduled_for: Запланировано на %{time}
       scheduled_msg: Объявление добавлено в очередь публикации.
       title: Объявления
+      unpublish: Отменить публикацию
       unpublished_msg: Объявление скрыто.
       updated_msg: Объявление обновлено.
     custom_emojis:
@@ -370,7 +377,6 @@ ru:
       feature_profile_directory: Каталог профилей
       feature_registrations: Регистрация
       feature_relay: Ретрансляторы
-      feature_spam_check: Анти-спам
       feature_timeline_preview: Предпросмотр ленты
       features: Возможности
       hidden_service: Федерация со скрытыми сервисами
@@ -415,6 +421,8 @@ ru:
           silence: Скрытие
           suspend: Блокировка
         title: Новая блокировка e-mail домена
+      obfuscate: Скрыть доменное имя
+      obfuscate_hint: Частично скрыть доменное имя в списке, если включена публикация списка ограничений домена
       private_comment: Приватный комментарий
       private_comment_hint: Комментарий к доменной блокировке для внутреннего использования модераторами.
       public_comment: Публичный комментарий
@@ -453,9 +461,36 @@ ru:
         create: Создать блокировку
         title: Новая блокировка по домену
       title: Блокировка e-mail доменов
+    follow_recommendations:
+      description_html: "<strong>Следуйте рекомендациям, чтобы помочь новым пользователям быстро находить интересный контент</strong>. Если пользователь не взаимодействовал с другими в достаточной степени, чтобы сформировать персонализированные рекомендации, вместо этого рекомендуется использовать эти учетные записи. Они пересчитываются на ежедневной основе на основе комбинации аккаунтов с наибольшим количеством недавних взаимодействий и наибольшим количеством местных подписчиков для данного языка."
+      language: Для языка
+      status: Статус
+      suppress: Скрыть рекомендацию
+      suppressed: Скрыта
+      title: Рекомендации подписок
+      unsuppress: Восстановить рекомендацию
     instances:
+      back_to_all: Все узлы
+      back_to_limited: Все ограниченные узлы
+      back_to_warning: Все узлы требующие внимания
       by_domain: Домен
+      delivery:
+        all: Все
+        clear: Очистить ошибки доставки
+        restart: Перезапустить доставку
+        stop: Остановить доставку
+        title: По доступности
+        unavailable: Недоступные
+        unavailable_message: Доставка невозможна
+        warning: Требующие внимания
+        warning_message:
+          few: Доставка невозможна %{count} дня
+          many: Доставка невозможна %{count} дней
+          one: Доставка невозможна %{count} день
+          other: Доставка невозможна %{count} дня
       delivery_available: Доставка возможна
+      delivery_error_days: Дней ошибок доставки
+      delivery_error_hint: Если доставка доставка не удастся в течение %{count} дней, он будет автоматически отмечен недоступным для доставки.
       empty: Домены не найдены.
       known_accounts:
         few: "%{count} известные учётные записи"
@@ -561,6 +596,13 @@ ru:
       unassign: Снять назначение
       unresolved: Нерешённые
       updated_at: Обновлена
+    rules:
+      add_new: Добавить правило
+      delete: Удалить
+      description_html: Хотя большинство утверждает, что прочитали и согласны с условиями обслуживания, обычно люди не читают их до тех пор, пока не возникнет проблема. <strong>Упростите просмотр правил вашего сервера с первого взгляда, предоставив их в виде простого маркированного списка.</strong> Старайтесь, чтобы отдельные правила были краткими и простыми, но старайтесь не разбивать их на множество отдельных элементов.
+      edit: Редактировать правило
+      empty: Правила сервера еще не определены.
+      title: Правила сервера
     settings:
       activity_api_enabled:
         desc_html: Подсчёт количества локальных постов, активных пользователей и новых регистраций на еженедельной основе
@@ -584,8 +626,6 @@ ru:
         users: Залогиненным локальным пользователям
       domain_blocks_rationale:
         title: Показать обоснование
-      enable_bootstrap_timeline_accounts:
-        title: Включить подписки по умолчанию для новых пользователей
       hero:
         desc_html: Отображается на главной странице. Рекомендуется разрешение не менее 600х100px. Если не установлено, используется изображение узла
         title: Баннер узла
@@ -596,8 +636,8 @@ ru:
         desc_html: Домены, которые были замечены этим узлом среди всей федерации
         title: Публикация списка обнаруженных узлов
       preview_sensitive_media:
-        desc_html: Предпросмотр для ссылок будет отображать миниатюры даже для содержимого, помеченного как деликатное
-        title: Показывать деликатные медиафайлы в превью OpenGraph
+        desc_html: Предпросмотр для ссылок будет показывать миниатюры даже для содержимого, помеченного как «деликатного характера»
+        title: Показывать медиафайлы «деликатного характера» в превью OpenGraph
       profile_directory:
         desc_html: Позволять находить пользователей
         title: Включить каталог профилей
@@ -639,9 +679,6 @@ ru:
         desc_html: Вы можете добавить сюда собственную политику конфиденциальности, пользовательское соглашение и другие документы. Можно использовать теги HTML
         title: Условия использования
       site_title: Название сайта
-      spam_check_enabled:
-        desc_html: Мастодон может автоматически сообщать об учётных записях, отправляющих повторяющиеся нежелательные сообщения. Возможны ложные срабатывания.
-        title: Анти-спам
       thumbnail:
         desc_html: Используется для предпросмотра с помощью OpenGraph и API. Рекомендуется разрешение 1200x630px
         title: Картинка узла
@@ -662,8 +699,8 @@ ru:
       back_to_account: Назад к учётной записи
       batch:
         delete: Удалить
-        nsfw_off: Снять отметку «деликатного»
-        nsfw_on: Отметить как «деликатное»
+        nsfw_off: Снять отметку «деликатного характера»
+        nsfw_on: Отметить как «деликатного характера»
       deleted: Удалено
       failed_to_execute: Не удалось выполнить
       media:
@@ -672,13 +709,18 @@ ru:
       no_status_selected: Ничего не изменилось, так как ни один пост не был выделен
       title: Посты пользователя
       with_media: С файлами
+    system_checks:
+      database_schema_check:
+        message_html: Есть отложенные миграции базы данных. Запустите их, чтобы убедиться, что приложение работает должным образом
+      rules_check:
+        action: Управление правилами сервера
+        message_html: Вы не определили правила сервера.
+      sidekiq_process_check:
+        message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq
     tags:
       accounts_today: Уникальных использований за сегодня
       accounts_week: Уникальных использований за эту неделю
       breakdown: Разбивка сегодняшнего использования по источникам
-      context: Контекст
-      directory: В каталоге
-      in_directory: "%{count} в каталоге"
       last_active: Последняя активность
       most_popular: Самые популярные
       most_recent: Последние
@@ -695,6 +737,7 @@ ru:
       add_new: Добавить
       delete: Удалить
       edit_preset: Удалить шаблон предупреждения
+      empty: Вы еще не определили пресеты предупреждений.
       title: Управление шаблонами предупреждений
   admin_mailer:
     new_pending_account:
@@ -716,7 +759,7 @@ ru:
     remove: Отвязать псевдоним
   appearance:
     advanced_web_interface: Многоколоночный интерфейс
-    advanced_web_interface_hint: 'Если вы хотите использовать всю ширину экрана, расширенный веб-интерфейс позволяет настроить множество различных столбцов, чтобы увидеть столько информации, сколько вы хотите: главную ленту, уведомления, глобальную ленту, любое количество списков и хэштегов.'
+    advanced_web_interface_hint: 'Если вы хотите использовать всю ширину экрана, многоколоночный веб-интерфейс позволяет настроить множество различных столбцов и видеть столько информации, сколько вы захотите: главную ленту, уведомления, глобальную ленту, неограниченное количество списков и хэштегов.'
     animations_and_accessibility: Анимации и доступность
     confirmation_dialogs: Окна подтверждений
     discovery: Обзор
@@ -724,7 +767,7 @@ ru:
       body: Mastodon переводится добровольцами.
       guide_link: https://sasha-sorokin.gitlab.io/mastodon-ru/
       guide_link_text: Каждый может внести свой вклад.
-    sensitive_content: Деликатное содержимое
+    sensitive_content: Содержимое «деликатного характера»
     toot_layout: Структура постов
   application_mailer:
     notification_preferences: Настроить уведомления можно здесь
@@ -944,6 +987,8 @@ ru:
     status: Статус
     view_proof: Посмотреть подтверждение
   imports:
+    errors:
+      over_rows_processing_limit: содержит более %{count} строк
     modes:
       merge: Объединить
       merge_long: Сохранить имеющиеся данные и добавить новые.
@@ -1062,10 +1107,14 @@ ru:
       body: 'Вас упомянул(а) %{name} в:'
       subject: "%{name} упомянул(а) вас"
       title: Новое упоминание
+    poll:
+      subject: Опрос %{name} завершился
     reblog:
       body: 'Ваш пост был продвинут %{name}:'
       subject: "%{name} продвинул(а) ваш пост"
       title: Новое продвижение
+    status:
+      subject: "%{name} только что запостил(а)"
   notifications:
     email_events: События для e-mail уведомлений
     email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:'
@@ -1082,11 +1131,11 @@ ru:
           trillion: трлн
   otp_authentication:
     code_hint: Для подтверждения введите код, сгенерированный приложением-аутентификатором
-    description_html: Если вы включите <strong>двухфакторную аутентификацию</strong> с помощью приложения-аутентификатора, Вход в систему потребует от вас наличия вашего телефона, который будет генерировать токены для входа в систему.
+    description_html: Подключив <strong>двуфакторную авторизацию</strong>, для входа в свою учётную запись вам будет необходим смартфон и приложение-аутентификатор на нём, которое будет генерировать специальные временные коды. Без этих кодов войти в учётную запись не получиться, даже если все данные верны, что существенно увеличивает безопасность вашей учётной записи.
     enable: Включить
-    instructions_html: "<strong>Отсканируйте этот QR-код в Google Authenticator или аналогичном приложении TOTP на вашем телефоне</strong>. С этого момента приложение будет генерировать токены, которые вам придется вводить при входе."
-    manual_instructions: 'Если вы не можете отсканировать QR-код и ввести его вручную, то вот секретный текст:'
-    setup: Создан
+    instructions_html: "<strong>Отсканируйте этот QR-код с помощью приложения-аутентификатора</strong>, такого как Google Authenticator, Яндекс.Ключ или andOTP. После сканирования и добавления, приложение начнёт генерировать коды, которые потребуется вводить для завершения входа в учётную запись."
+    manual_instructions: 'Если отсканировать QR-код не получается или не представляется возможным, вы можете ввести ключ настройки вручную:'
+    setup: Настроить
     wrong_code: Введенный код недействителен! Время сервера и время устройства правильно?
   pagination:
     newer: Новее
@@ -1174,7 +1223,7 @@ ru:
       weibo: Weibo
     current_session: Текущая сессия
     description: "%{browser} на %{platform}"
-    explanation: Здесь отображаются все веб-браузеры, в которых выполнен вход в вашу учётную запись. Авторизованные приложения отображаются в другой секции.
+    explanation: Здесь отображаются все браузеры, с которых выполнен вход в вашу учётную запись. Авторизованные приложения находятся в секции «Приложения».
     ip: IP
     platforms:
       adobe_air: Adobe Air
@@ -1214,8 +1263,6 @@ ru:
     relationships: Подписки и подписчики
     two_factor_authentication: Подтверждение входа
     webauthn_authentication: Ключи безопасности
-  spam_check:
-    spam_detected: Это автоматический отчет. Обнаружен спам.
   statuses:
     attached:
       audio:
@@ -1270,6 +1317,7 @@ ru:
     sign_in_to_participate: Войдите, чтобы принять участие в дискуссии
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Адресованный
       private: Для подписчиков
       private_long: Показывать только подписчикам
       public: Для всех
@@ -1279,7 +1327,7 @@ ru:
   stream_entries:
     pinned: Закреплённый пост
     reblogged: продвинул(а)
-    sensitive_content: Деликатное содержимое
+    sensitive_content: Содержимое «деликатного характера»
   tags:
     does_not_match_previous_name: не совпадает с предыдущим именем
   terms:
@@ -1382,7 +1430,7 @@ ru:
     otp: Приложение для проверки подлинности
     recovery_codes: Коды восстановления
     recovery_codes_regenerated: Коды восстановления успешно сгенерированы
-    recovery_instructions_html: 'Пожалуйста, сохраните коды ниже в надёжном месте: они понадобятся, чтобы войти в учётную запись, если вы потеряете доступ к своему смартфону. Вы можете вручную переписать их, распечатать и спрятать среди важных документов или, например, в любимой книжке. <strong>Каждый код действителен один раз</strong>.'
+    recovery_instructions_html: 'Пожалуйста, сохраните коды ниже в надёжном месте: они понадобятся, чтобы войти в учётную запись, если вы потеряете доступ к своему смартфону. Вы можете вручную переписать их, распечатать и спрятать среди важных документов или, например, в любимой книжке. <strong>Каждый код действителен только один раз</strong>.'
     webauthn: Ключи безопасности
   user_mailer:
     backup_ready:
@@ -1398,7 +1446,7 @@ ru:
     warning:
       explanation:
         disable: Пока ваша учётная запись заморожена, ваши данные остаются нетронутыми, но вы не можете производить никаких действий до разблокировки.
-        sensitive: Ваши загруженные медиа-файлы и связанные с ними медиа будут рассматриваться как деликатные.
+        sensitive: Все загружаемые и прикреплённые вами медиафайлы будут расцениваться как «деликатного характера».
         silence: Пока действуют данные ограничения, публикуемые вами посты будут видеть исключительно люди, которые на вас уже подписаны на этом узле, вы также можете быть исключены из различных публичных лент. Несмотря на это, остальные пользователи по-прежнему могут подписаться на вас, чтобы читать новые посты.
         suspend: Ваша учётная запись заблокирована и все ваши посты и загруженные медиафайлы безвозвратно удалены с этого сервера и других серверов, где у вас были подписчики.
       get_in_touch: Вы можете ответить на это письмо, чтобы связаться с сотрудниками %{instance}.
@@ -1407,13 +1455,13 @@ ru:
       subject:
         disable: Ваша учётная запись %{acct} заморожена
         none: "%{acct} вынесено предупреждение"
-        sensitive: Ваша учётная запись %{acct} помечена как деликатная
+        sensitive: Ваша учётная запись %{acct} была отмечена как «деликатного характера»
         silence: На учётную запись %{acct} наложены ограничения
         suspend: Ваша учётная запись %{acct} была заблокирована
       title:
         disable: Учётная запись заморожена
         none: Предупреждение
-        sensitive: Ваш медиафайл был отмечен как деликатный
+        sensitive: Ваши медиафайлы отмечены как «деликатного характера»
         silence: На учётную запись наложены ограничения
         suspend: Учётная запись заблокирована
     welcome:
@@ -1434,11 +1482,8 @@ ru:
       tips: Советы
       title: Добро пожаловать на борт, %{name}!
   users:
-    blocked_email_provider: Этот почтовый провайдер не разрешен
     follow_limit_reached: Вы не можете подписаться больше, чем на %{limit} человек
     generic_access_help_html: Не можете войти в свою учётную запись? Свяжитесь с %{email} для помощи
-    invalid_email: Введенный e-mail неверен
-    invalid_email_mx: Адрес электронной почты не существует
     invalid_otp_token: Введен неверный код двухфакторной аутентификации
     invalid_sign_in_token: Неверный код безопасности
     otp_lost_help_html: Если Вы потеряли доступ к обоим, свяжитесь с %{email}
@@ -1447,7 +1492,7 @@ ru:
     suspicious_sign_in_confirmation: Похоже, вы раньше не входили с этого устройства, и давно не осуществляли вход, поэтому мы отправили вам код безопасности на почту, чтобы подтвердить, что это действительно вы.
   verification:
     explanation_html: 'Владение ссылками в профиле <strong>можно подтвердить</strong>. Для этого на указанном сайте должна содержаться ссылка на ваш профиль Mastodon, а у самой ссылки <strong>должен</strong> быть атрибут <code>rel="me"</code>. Что внутри ссылки — значения не имеет. Вот вам пример ссылки:'
-    verification: Подтверждение
+    verification: Верификация ссылок
   webauthn_credentials:
     add: Добавить новый ключ безопасности
     create:
diff --git a/config/locales/sc.yml b/config/locales/sc.yml
index 626c7671c..18142cb49 100644
--- a/config/locales/sc.yml
+++ b/config/locales/sc.yml
@@ -2,50 +2,52 @@
 sc:
   about:
     about_hashtag_html: Custos sunt tuts pùblicos etichetados cun <strong>#%{hashtag}</strong>. Bi podes intrare in cuntatu si tenes unu contu in cale si siat logu de su fediversu.
-    about_mastodon_html: 'Sa rete sotziale de su benidore: sena publitzidade, sena vigilàntzia corporativa, disignu èticu e detzentralizatzione! Sias mere de is datos tuos cun Mastodon!'
+    about_mastodon_html: 'Sa rete sotziale de su benidore: sena publitzidade, sena vigilàntzia corporativa, disinnu èticu e detzentralizatzione! Sias mere de is datos tuos cun Mastodon!'
     about_this: Informatziones
     active_count_after: ativu
-    active_footnote: Utentes Ativos Mensiles (UAM)
+    active_footnote: Utentes cun atividade mensile (UAM)
     administered_by: 'Amministradu dae:'
-    api: "*API"
+    api: API
     apps: Aplicatziones mòbiles
     apps_platforms: Imprea Mastodon dae iOS, Android e àteras prataformas
-    browse_directory: Nàviga su diretòriu de profilos e filtra segundu interessos
-    browse_local_posts: Nàviga unu flussu in direta de messàgios pùblicos de custu serbidore
-    browse_public_posts: Nàviga unu flussu in direta de messàgios pùblicos in Mastodon
+    browse_directory: Nàviga in su diretòriu de profilos e filtra segundu interessos
+    browse_local_posts: Nàviga in unu flussu in direta de messàgios pùblicos de custu serbidore
+    browse_public_posts: Nàviga in unu flussu in direta de messàgios pùblicos in Mastodon
     contact: Cuntatu
-    contact_missing: No impostadu
+    contact_missing: No cunfiguradu
     contact_unavailable: No a disponimentu
     discover_users: Iscoberi utentes
     documentation: Documentatzione
     federation_hint_html: Cun unu contu in %{instance} as a pòdere sighire persones in cale si siat serbidore de Mastodon o de su fediversu.
     get_apps: Proa un'aplicatzione mòbile
-    hosted_on: Mastodon acasagiadu in %{domain}
-    instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su serbidore matessi, no est un''utente individuale. Benit impreadu pro punnas de federatzione e non lu dias dèpere blocare si non cheres blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu.
+    hosted_on: Mastodon allogiadu in %{domain}
+    instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su pròpiu serbidore, no est un''utente individuale. Benit impreadu pro punnas de federatzione e no ddu dias dèpere blocare si non boles blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu.
 
-'
+      '
     learn_more: Àteras informatziones
     privacy_policy: Polìtica de riservadesa
+    rules: Règulas de su serbidore
+    rules_html: 'Depes sighire is règulas imbenientes si boles tènnere unu contu in custu serbidore de Mastodon:'
     see_whats_happening: Càstia su chi est acontessende
     server_stats: 'Istatìsticas de su serbidore:'
-    source_code: Còdighe mitza
+    source_code: Còdighe de orìgine
     status_count_after:
       one: istadu
       other: istados
-    status_count_before: Autores de
-    tagline: Sighi is amigos tuos e iscoberi·nde de noos
+    status_count_before: Atributzione de
+    tagline: Sighi is amistades tuas e iscoberi·nde àteras
     terms: Cunditziones de su servìtziu
     unavailable_content: Serbidores moderados
     unavailable_content_description:
       domain: Serbidore
       reason: Resone
-      rejecting_media: 'Is documentos multimediales de custos serbidores no at a èssere protzessadu o sarvadu e peruna miniadura at a èssere ammustradas, ca tenent bisòngiu de un''incarcu manuale in su documentu originale:'
-      rejecting_media_title: Mèdios filtrados
+      rejecting_media: 'Is documentos multimediales de custos serbidores no ant a èssere protzessados o sarvados e peruna miniadura at a èssere ammustrada, ca tenent bisòngiu de unu clic manuale in su documentu originale:'
+      rejecting_media_title: Cuntenutos multimediales filtrados
       silenced: 'Is messàgios dae custos serbidores ant a èssere cuados in is lìnias de tempus e is arresonadas pùblicas, e no at a èssere generada peruna notìfica dae is interatziones de is utentes, francu chi nde sias sighende:'
       silenced_title: Serbidores a sa muda
       suspended: 'Perunu datu de custos serbidores at a èssere protzessadu, immagasinadu o cuncambiadu; est impossìbile duncas cale si siat interatzione o comunicatzione cun is utentes de custos serbidores:'
       suspended_title: Serbidores suspèndidos
-    unavailable_content_html: Mastodon ti permitit de bìdere su cuntenutu de utentes de cale si siat àteru serbidore de su fediversu. Custas sunt etzetziones chi fatas in custu serbidore particulare.
+    unavailable_content_html: Mastodon ti permitit de bìdere su cuntenutu de utentes de cale si siat àteru serbidore de su fediversu. Custas sunt etzetziones fatas in custu serbidore ispetzìficu.
     user_count_after:
       one: utente
       other: utentes
@@ -60,12 +62,13 @@ sc:
       one: Sighidura
       other: Sighiduras
     following: Sighende
+    instance_actor_flash: Custu contu est un'atore virtuale chi costumaiat a rapresentare su serbidore etotu e nono unu cale si siat utente individuale. Est impreadu pro finalidades de sa federatzione e non si depet suspèndere.
     joined: At aderidu su %{date}
     last_active: ùrtima atividade
     link_verified_on: Sa propiedade de custu ligàmene est istada controllada su %{date}
     media: Elementos multimediales
     moved_html: "%{name} est istadu trasferidu a %{new_profile_link}:"
-    network_hidden: Custa informatzione no a disponimentu
+    network_hidden: Custa informatzione no est a disponimentu
     never_active: Mai
     nothing_here: Nudda inoghe.
     people_followed_by: Gente sighida dae %{name}
@@ -77,12 +80,11 @@ sc:
       other: Tuts
     posts_tab_heading: Tuts
     posts_with_replies: Tuts e rispostas
-    reserved_username: Custu nòmine de utente est giai impreadu
     roles:
       admin: Admin
       bot: Bot
       group: Grupu
-      moderator: Moderadore
+      moderator: Moderatzione
     unavailable: Su profilu no est a disponimentu
     unfollow: Non sigas prus
   admin:
@@ -106,7 +108,7 @@ sc:
         changed_msg: As cambiadu s'indiritzu eletrònicu.
         current_email: Indiritzu eletrònicu atuale
         label: Muda s'indiritzu eletrònicu
-        new_email: Indiritzu de eletrònicu nou
+        new_email: Indiritzu eletrònicu nou
         submit: Muda s'indiritzu eletrònicu
         title: Muda s'indiritzu eletrònicu de %{username}
       confirm: Cunfirma
@@ -131,6 +133,7 @@ sc:
       follows: Sighende
       header: Intestatzione
       inbox_url: URL de intrada
+      invite_request_text: Resones pro aderire
       invited_by: Invitu dae
       ip: IP
       joined: At aderidu
@@ -143,7 +146,7 @@ sc:
       media_attachments: Allegados multimediales
       memorialize: Cunverte in memoriam
       memorialized: Memorializadu
-      memorialized_msg: As trasformadu %{username} in unu contu de ammentu
+      memorialized_msg: As trasformadu %{username} in unu contu de regordu
       moderation:
         active: Ativu
         all: Totus
@@ -164,13 +167,13 @@ sc:
       public: Pùblicu
       push_subscription_expires: Sa sutiscritzione PuSH iscadit
       redownload: Atualiza su profilu
-      redownloaded_msg: Su profilu de %{username} est istadu agiornadu dae s'orìgine
+      redownloaded_msg: Su profilu de %{username} est istadu atualizadu dae s'orìgine
       reject: Refuda
       reject_all: Refuda totu
       rejected_msg: Sa dimanda de registru de %{username} est istada refudada
       remove_avatar: Boga immàgine de profilu
       remove_header: Boga s'intestatzione
-      removed_avatar_msg: S'immàgine de d'àvatar de %{username} est istada bogada
+      removed_avatar_msg: S'immàgine de profilu de %{username} est istada bogada
       removed_header_msg: S'immàgine de intestatzione de %{username} est istada bogada
       resend_confirmation:
         already_confirmed: Custa persone est giai cunfirmada
@@ -181,8 +184,8 @@ sc:
       resubscribe: Torra a sutascrìere
       role: Permissos
       roles:
-        admin: Admin
-        moderator: Mod
+        admin: Amministratzione
+        moderator: Moderatzione
         staff: Personale
         user: Utente
       search: Chirca
@@ -240,13 +243,13 @@ sc:
         disable_user: Disativa utente
         enable_custom_emoji: Ativa s'emoji personalizadu
         enable_user: Ativa utente
-        memorialize_account: Regorda su contu
+        memorialize_account: Torra in unu contu de regordu
         promote_user: Promove utente
         remove_avatar_user: Cantzella immàgine de profilu
         reopen_report: Torra a abèrrere s'informe
         reset_password_user: Reseta sa crae
         resolve_report: Isorve s'informe
-        sensitive_account: Marca sos cuntenutos multimediales in su contu tuo comente sensìbile
+        sensitive_account: Marca is cuntenutos multimediales in su contu tuo comente sensìbiles
         silence_account: Pone custu contu a sa muda
         suspend_account: Suspende custu contu
         unassigned_report: Boga s'assignatzione de custu informe
@@ -255,47 +258,49 @@ sc:
         unsuspend_account: Boga custu contu de is contos suspèndidos
         update_announcement: Atualiza s'annùntziu
         update_custom_emoji: Atualiza s'emoji personalizadu
+        update_domain_block: Atualiza blocu de domìniu
         update_status: Atualiza s'istadu
       actions:
-        assigned_to_self_report: "%{name} s'est auto-assignadu s'informe %{target}"
-        change_email_user: "%{name} at mudadu s'indiritzu de posta eletrònica de s'utente %{target}"
-        confirm_user: "%{name} at cunfirmadu s'indiritzu de posta eletrònica de s'utente %{target}"
-        create_account_warning: "%{name} at imbiadu un'avisu a %{target}"
-        create_announcement: "%{name} at creadu un'annùntziu nou %{target}"
-        create_custom_emoji: "%{name} at carrigadu un'emoji nou%{target}"
-        create_domain_allow: "%{name} at permìtidu sa federatzione cun su domìniu %{target}"
-        create_domain_block: "%{name} at blocadu su domìniu %{target}"
-        create_email_domain_block: "%{name} at blocadu su domìniu de posta eletrònica %{target}"
-        create_ip_block: "%{name} at creadu una règula pro s'IP %{target}"
-        demote_user: "%{name} at degradadu s'utente %{target}"
-        destroy_announcement: "%{name} at cantzelladu s'annùntziu %{target}"
-        destroy_custom_emoji: "%{name} at cantzelladu s'emoji %{target}"
-        destroy_domain_allow: "%{name} no at permìtidu sa federatzione cun su domìniu %{target}"
-        destroy_domain_block: "%{name} at isblocadu su domìniu %{target}"
-        destroy_email_domain_block: "%{name} at isblocadu su domìniu de posta eletrònica %{target}"
-        destroy_ip_block: "%{name} at cantzelladu sa règula pro s'IP %{target}"
-        destroy_status: "%{name} at eliminadu s'istadu de %{target}"
-        disable_2fa_user: "%{name} at disativadu su rechisitu de duos fatores pro s'utente %{target}"
-        disable_custom_emoji: "%{name} at disativadu s'emoji %{target}"
-        disable_user: "%{name} at disativadu s'atzessu pro s'utente %{target}"
-        enable_custom_emoji: "%{name} at ativadu s'emoji %{target}"
-        enable_user: "%{name} at ativadu s'atzessu pro s'utente %{target}"
-        memorialize_account: "%{name} at cunvertidu su contu %{target} in una pàgina in memoriam"
-        promote_user: "%{name} at promòvidu s'utente %{target}"
-        remove_avatar_user: "%{name} at cantzelladu s'immàgine de profilu de %{target}"
-        reopen_report: "%{name} at torradu a abèrrere s'informe %{target}"
-        reset_password_user: "%{name} at restadu sa crae de s'utente %{target}"
-        resolve_report: "%{name} at isòrvidu s'informe %{target}"
-        sensitive_account: "%{name} at marcadu s'elementu multimediale de %{target} comente sensìbile"
-        silence_account: "%{name} at postu su contu de %{target} a sa muda"
-        suspend_account: "%{name} at suspèndidu su contu de %{target}"
-        unassigned_report: "%{name} at bogadu s'assignatzione de s'informe %{target}"
-        unsensitive_account: '%{name} at bogadu sa marcadura "sensìbile" a s''elementu multimediale de %{target}'
-        unsilence_account: "%{name} at postu su contu de %{target} a sa muda"
-        unsuspend_account: "%{name} at bogadu sa suspensione de su contu de %{target}"
-        update_announcement: "%{name} at atualizadu s'annùntziu %{target}"
-        update_custom_emoji: "%{name} at atualizadu s'emoji %{target}"
-        update_status: "%{name} at atualizadu s'istadu de %{target}"
+        assigned_to_self_report_html: "%{name} s'est auto-assignadu s'informe %{target}"
+        change_email_user_html: "%{name} at mudadu s'indiritzu de posta eletrònica de s'utente %{target}"
+        confirm_user_html: "%{name} at cunfirmadu s'indiritzu de posta eletrònica de s'utente %{target}"
+        create_account_warning_html: "%{name} at imbiadu un'avisu a %{target}"
+        create_announcement_html: "%{name} at creadu un'annùntziu nou %{target}"
+        create_custom_emoji_html: "%{name} at carrigadu un'emoji nou %{target}"
+        create_domain_allow_html: "%{name} at permìtidu sa federatzione cun su domìniu %{target}"
+        create_domain_block_html: "%{name} at blocadu su domìniu %{target}"
+        create_email_domain_block_html: "%{name} at blocadu su domìniu de posta eletrònica %{target}"
+        create_ip_block_html: "%{name} at creadu una règula pro s'IP %{target}"
+        demote_user_html: "%{name} at degradadu s'utente %{target}"
+        destroy_announcement_html: "%{name} at cantzelladu s'annùntziu %{target}"
+        destroy_custom_emoji_html: "%{name} at cantzelladu s'emoji %{target}"
+        destroy_domain_allow_html: "%{name} no at permìtidu sa federatzione cun su domìniu %{target}"
+        destroy_domain_block_html: "%{name} at isblocadu su domìniu %{target}"
+        destroy_email_domain_block_html: "%{name} at isblocadu su domìniu de posta eletrònica %{target}"
+        destroy_ip_block_html: "%{name} at cantzelladu sa règula pro s'IP %{target}"
+        destroy_status_html: "%{name} at eliminadu sa publicatzione de %{target}"
+        disable_2fa_user_html: "%{name} at disativadu su rechisitu de duos fatores pro s'utente %{target}"
+        disable_custom_emoji_html: "%{name} at disativadu s'emoji %{target}"
+        disable_user_html: "%{name} at disativadu s'atzessu pro s'utente %{target}"
+        enable_custom_emoji_html: "%{name} at ativadu s'emoji %{target}"
+        enable_user_html: "%{name} at ativadu s'atzessu pro s'utente %{target}"
+        memorialize_account_html: "%{name} at cunvertidu su contu %{target} in una pàgina in memoriam"
+        promote_user_html: "%{name} at promòvidu s'utente %{target}"
+        remove_avatar_user_html: "%{name} at cantzelladu s'immàgine de profilu de %{target}"
+        reopen_report_html: "%{name} at torradu a abèrrere s'informe %{target}"
+        reset_password_user_html: "%{name} at resetadu sa crae de s'utente %{target}"
+        resolve_report_html: "%{name} at isòrvidu s'informe %{target}"
+        sensitive_account_html: "%{name} at marcadu s'elementu multimediale de %{target} comente sensìbile"
+        silence_account_html: "%{name} at postu su contu de %{target} a sa muda"
+        suspend_account_html: "%{name} at suspèndidu su contu de %{target}"
+        unassigned_report_html: "%{name} at bogadu s'assignatzione de s'informe %{target}"
+        unsensitive_account_html: '%{name} at bogadu sa marcadura "sensìbile" a s''elementu multimediale de %{target}'
+        unsilence_account_html: "%{name} at ativadu is notìficas pro su contu de %{target}"
+        unsuspend_account_html: "%{name} at bogadu sa suspensione de su contu de %{target}"
+        update_announcement_html: "%{name} at atualizadu s'annùntziu %{target}"
+        update_custom_emoji_html: "%{name} at atualizadu s'emoji %{target}"
+        update_domain_block_html: "%{name} at atualizadu su blocu de domìniu pro %{target}"
+        update_status_html: "%{name} at atualizadu sa publicatzione de %{target}"
       deleted_status: "(istadu cantzelladu)"
       empty: Perunu registru agatadu.
       filter_by_action: Filtra pro atzione
@@ -310,10 +315,12 @@ sc:
       new:
         create: Crea un'annùntziu
         title: Annùntziu nou
+      publish: Pùblica
       published_msg: As publicadu s'annùntziu.
       scheduled_for: Programmadu pro %{time}
       scheduled_msg: As programmadu s'annùntziu pro èssere publicadu!
       title: Annùntzios
+      unpublish: Annulla sa publicatzione
       unpublished_msg: As ritiradu s'annùntziu!
       updated_msg: As atualizadu s'annùntziu.
     custom_emojis:
@@ -327,7 +334,7 @@ sc:
       delete: Cantzella
       destroyed_msg: As cantzelladu s'emoji.
       disable: Disativa
-      disabled: Disativu
+      disabled: Disativadu
       disabled_msg: As disativadu s'emoji
       emoji: Emoji
       enable: Ativa
@@ -339,7 +346,7 @@ sc:
       new:
         title: Agiunghe emoji personalizadu nou
       not_permitted: Non tenes su permissu de fàghere custa atzione
-      overwrite: Subraiscrie
+      overwrite: Subrascrie
       shortcode: Incurtzadura
       shortcode_hint: Mìnimu 2 caràteres, isceti caràteres alfanumèricos e tratigheddos bàscios
       title: Emojis personalizados
@@ -356,9 +363,8 @@ sc:
       feature_deletions: Eliminatzione de contos
       feature_invites: Ligàmenes de invitu
       feature_profile_directory: Diretòriu de profilos
-      feature_registrations: Registradas
+      feature_registrations: Registros
       feature_relay: Ripetidore de federatzione
-      feature_spam_check: Anti-àliga
       feature_timeline_preview: Pre-visualizatzione de sa lìnia de tempus
       features: Caraterìsticas
       hidden_service: Federatzione cun servìtzios cuados
@@ -393,17 +399,19 @@ sc:
         create: Crea unu blocu
         hint: Su blocu de domìniu no at a impedire sa creatzione de contos noos in sa base de datos, ma ant a èssere aplicados in manera retroativa mètodos de moderatzione ispetzìficos subra custos contos.
         severity:
-          desc_html: "<strong>A sa muda</strong> at a pònnere is messàgios de custos contos comente invisìbiles a sa gente chi no ddi siat sighende. <strong>Sa suspensione</strong> at a cantzellare totu su cuntenutu de su contu, elementos multimediales e datos de profilu. Imprea <strong>Perunu</strong> si boles isceti refudare is archìvios multimediales."
+          desc_html: "<strong>A sa muda</strong> at a pònnere is messàgios de custos contos comente invisìbiles a sa gente chi no ddos siat sighende. <strong>Sa suspensione</strong> at a cantzellare totu su cuntenutu de su contu, elementos multimediales e datos de profilu. Imprea <strong>Perunu</strong> si boles isceti refudare is archìvios multimediales."
           noop: Perunu
           silence: A sa muda
-          suspend: Suspèndidu
+          suspend: Suspensione
         title: Blocu de domìniu nou
+      obfuscate: Cua su nòmine de domìniu
+      obfuscate_hint: Cua una parte de su nòmine de domìniu in sa lista si sa visualizatzione de sa lista de domìnios limitados est ativa
       private_comment: Cummentu privadu
-      private_comment_hint: Lassa unu cummentu a subra de custa limitatzione de domìniu pro impreu internu de s'iscuadra de moderatzione.
+      private_comment_hint: Lassa unu cummentu subra de custa limitatzione de domìniu pro impreu internu de s'iscuadra de moderatzione.
       public_comment: Cummentu pùblicu
-      public_comment_hint: Lassa unu cummentu pro su pùblicu generale a subra de custa limitatzione de su domìniu, si sa publicatzione de sa lista de limitatziones de domìniu est abilitada.
-      reject_media: Refuda documentos multimediales
-      reject_media_hint: Cantzellat documentos multimediales sarvados in locale e refudat iscarrigamentos in su benidore. Non rilevante pro is suspensiones
+      public_comment_hint: Lassa unu cummentu pro su pùblicu generale subra de custa limitatzione de su domìniu, si sa publicatzione de sa lista de limitatziones de domìniu est abilitada.
+      reject_media: Refuda elementos multimediales
+      reject_media_hint: Cantzellat elementos multimediales sarvados in locale e refudat iscarrigamentos in su benidore. Non rilevante pro is suspensiones
       reject_reports: Refuda informes
       reject_reports_hint: Iscarta informes chi benint de custu domìniu. Non rilevante pro is suspensiones
       rejecting_media: refudende documentos multimediales
@@ -423,7 +431,7 @@ sc:
       undo: Iscontza su blocu de domìniu
       view: Bide su blocu de domìniu
     email_domain_blocks:
-      add_new: Agiunghe noa
+      add_new: Agiunghe nou
       created_msg: Domìniu de posta eletrònica blocadu
       delete: Cantzella
       destroyed_msg: Domìniu de posta eletrònica isblocadu
@@ -434,9 +442,18 @@ sc:
         create: Agiunghe unu domìniu
         title: Bloca su domìniu de posta eletrònica nou
       title: Domìnios de posta eletrònica blocados
+    follow_recommendations:
+      description_html: "<strong>Is cussìgios de sighiduras agiudant a is persones noas a agatare deretu cuntenutu interessante</strong>. Si una persone at interagidu cun pagu gente e non podet retzire cussìgios de sighiduras personalizados, custos contos ant a èssere ammustrados. Ant a èssere torrados a carculare dae un'ammisturu de contos cun is pertzentuales de cumpromissu prus artos e su nùmeru prus artu de sighiduras pro un'idioma ispetzìficu."
+      language: Pro idioma
+      status: Istadu
+      suppress: Cantzella su cussìgiu de sighidura
+      suppressed: Cantzelladu
+      title: Cussìgios de sighidura
+      unsuppress: Recùpera su cussìgiu de sighidura
     instances:
       by_domain: Domìniu
       delivery_available: Sa cunsigna est a disponimentu
+      empty: Perunu domìniu agatadu.
       known_accounts:
         one: "%{count} contu connòschidu"
         other: "%{count} contos connòschidos"
@@ -462,7 +479,7 @@ sc:
       title: Invitos
     ip_blocks:
       add_new: Crea una règula
-      created_msg: As agiuntu una règula IP noa
+      created_msg: Règula IP noa agiunta
       delete: Cantzella
       expires_in:
         '1209600': 2 chidas
@@ -484,7 +501,7 @@ sc:
       delete: Cantzella
       description_html: Unu <strong>ripetidore de federatzione</strong> est unu serbidore intermediàriu chi cuncàmbiat volùmenes mannos de tuts pùblicos intre serbidores chi si connetent e bi pùblicant. <strong>Podet agiudare a serbidores minores e medianos a iscobèrrere cuntenutu de su fediversu</strong>, in manera chi is utentes locales non tèngiant bisòngiu de sighire a manu àtera gente de serbidores remotos.
       disable: Disativa
-      disabled: Disativu
+      disabled: Disativadu
       enable: Ativa
       enable_hint: Si abilitadu, su serbidore tuo at a èssere sutascritu a totu is tuts pùblicos de custu ripetidore e bi at a cumintzare a imbiare totu is tuts pùblicos de custu serbidore.
       enabled: Ativadu
@@ -513,7 +530,9 @@ sc:
       by_target_domain: Domìniu de su contu signaladu
       comment:
         none: Perunu
-      created_at: Signaladu
+      created_at: Sinnaladu
+      forwarded: Torradu a imbiare
+      forwarded_to: Torradu a imbiare a %{domain}
       mark_as_resolved: Marca comente a isòrvidu
       mark_as_unresolved: Marcare comente a non isòrvidu
       notes:
@@ -524,8 +543,8 @@ sc:
         placeholder: Descrie is atziones chi as pigadu o cale si siat àtera atualizatzione de importu...
       reopen: Torra a abèrrere s'informe
       report: 'Informe #%{id}'
-      reported_account: Contu signaladu
-      reported_by: Signaladu dae
+      reported_account: Contu sinnaladu
+      reported_by: Sinnaladu dae
       resolved: Isòrvidu
       resolved_msg: Informe isòrvidu.
       status: Istadu
@@ -533,13 +552,20 @@ sc:
       unassign: Boga s'assignatzione
       unresolved: No isòrvidu
       updated_at: Atualizadu
+    rules:
+      add_new: Agiunghe règula
+      delete: Cantzella
+      description_html: Mancari su prus nàrgiant chi ant letu e atzetadu is cunditziones de su servìtziu, a su sòlitu is persones non ddu leghent fintzas a cando no essint a campu problemas. <strong>Faghe chi siat prus simpre a lèghere is règulas de su serbidore cun un'ograda disponende·ddas isceti in un'elencu puntadu. </strong> Chirca de mantènnere onni règula curtza e simpre, ma chirca fintzas de non ddas partzire in medas elementos ispartzinados.
+      edit: Modìfica sa règula
+      empty: Peruna règula de serbidore definida ancora.
+      title: Règulas de su serbidore
     settings:
       activity_api_enabled:
         desc_html: Nùmeru de tuts publicados in locale, utentes ativos e registros noos in perìodos chidajolos
         title: Pùblica istatìsticas agregadas subra s'atividade de s'utente
       bootstrap_timeline_accounts:
-        desc_html: Imprea vìrgulas intre is nòmines de utente. Isceti is contos locales e isblocados ant a funtzionare. Su valore predefinidu cando est bòidu est totu is admins locales.
-        title: Sighidura predefinida pro persones noas
+        desc_html: Imprea vìrgulas intre is nòmines de utente. Isceti is contos locales e isblocados ant a funtzionare. Su valore predefinidu cando est bòidu est totu is admins locales
+        title: Cussìgia custos contos a is persones noas
       contact_information:
         email: Indiritzu eletrònicu de impresa
         username: Nòmine de utente de su cuntatu
@@ -556,8 +582,6 @@ sc:
         users: Pro utentes locales in lìnia
       domain_blocks_rationale:
         title: Ammustra sa resone
-      enable_bootstrap_timeline_accounts:
-        title: Ativa s sighiduras predefinidas pro is persones noas
       hero:
         desc_html: Ammustradu in sa pàgina printzipale. Cussigiadu a su mancu 600x100px. Si no est cunfiguradu, at a èssere ammustradu cussu de su serbidore
         title: Immàgine de eroe
@@ -566,12 +590,12 @@ sc:
         title: Immàgine de su personàgiu
       peers_api_enabled:
         desc_html: Is nòmines de domìniu chi custu serbidore at agatadu in su fediversu
-        title: Pùblica sa lista de serbidores iscobertos
+        title: Pùblica sa lista de serbidores iscobertos in s'API
       preview_sensitive_media:
-        desc_html: Is antiprimas de ligòngios de àteros sitos web ant a ammustrare una miniadura mancari is mèdios de comunicatzione siant marcados comente a sensìbiles
-        title: Ammustra mèdios sensìbiles in sas previsualizatziones de OpenGraph
+        desc_html: Is previsualizatziones de ligòngios de àteros sitos web ant a ammustrare una miniadura fintzas cando is elementos multimediales siant marcados comente a sensìbiles
+        title: Ammustra elementos multimediales sensìbiles in is previsualizatziones de OpenGraph
       profile_directory:
-        desc_html: Permite a is persone de èssere iscobertas
+        desc_html: Permite a is persones de èssere iscobertas
         title: Ativa diretòriu de profilos
       registrations:
         closed_message:
@@ -581,8 +605,11 @@ sc:
           desc_html: Permite a chie si siat de cantzellare su contu suo
           title: Aberi s'eliminatzione de su contu
         min_invite_role:
-          disabled: Perunu
+          disabled: Nemos
           title: Permite invitos de
+        require_invite_text:
+          desc_html: Cando is registratziones rechedent s'aprovatzione manuale, faghe chi a incarcare su butone "Pro ite ti boles iscrìere?" siat obligatòriu e no a praghere
+          title: Rechede a is persones noas chi iscriant una resone prima de aderire
       registrations_mode:
         modes:
           approved: Aprovatzione rechesta pro si registrare
@@ -596,7 +623,7 @@ sc:
         desc_html: Ammustra un'insigna de personale in sa pàgina de utente
         title: Ammustra insigna de personale
       site_description:
-        desc_html: Paràgrafu de introdutzione a s'API. Descrie ite rendet ispatziale custu serbidore de Mastodon e cale si siat àtera cosa de importu. Podes impreare etichetas HTML, mescamente <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
+        desc_html: Paràgrafu de introdutzione a s'API. Descrie pro ite custu serbidore de Mastodon siat ispetziale e cale si siat àtera cosa de importu. Podes impreare etichetas HTML, mescamente <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
         title: Descritzione de su serbidore
       site_description_extended:
         desc_html: Unu logu adatu pro publicare su còdighe de cumportamentu, règulas, diretivas e àteras caraterìsticas ispetzìficas de su serbidore tuo. Podes impreare etichetas HTML
@@ -605,12 +632,9 @@ sc:
         desc_html: Ammustradu in sa barra laterale e in is meta-etichetas. Descrie ite est Mastodon e pro ite custu serbidore est ispetziale in unu paràgrafu.
         title: Descritzione curtza de su serbidore
       site_terms:
-        desc_html: Podes iscriere sa tua normativa de riservadesa pròpia, cunditziones de servìtziu e àteras normas legales. Podes impreare etichetas HTML
-        title: Termes de su servìtziu personalizados
+        desc_html: Podes iscrìere sa normativa de riservadesa tua, cunditziones de servìtziu e àteras normas legales. Podes impreare etichetas HTML
+        title: Cunditziones de su servìtziu personalizadas
       site_title: Nòmine de su serbidore
-      spam_check_enabled:
-        desc_html: Mastodon podet signalare in automàticu contos chi imbiant messàgios non rechestos in manera repetitiva. Bi podent èssere falsos positivos.
-        title: Automatzione anti-spam
       thumbnail:
         desc_html: Impreadu pro otènnere pre-visualizatziones pro mèdiu de OpenGraph e API. Cussigiadu 1200x630px
         title: Miniadura de su serbidore
@@ -641,13 +665,18 @@ sc:
       no_status_selected: Perunu istadu est istadu mudadu dae chi non nd'as seletzionadu
       title: Istados de su contu
       with_media: Cun elementos multimediales
+    system_checks:
+      database_schema_check:
+        message_html: Ddoe at tràmudas de base de datos in suspesu. Pone·ddas in esecutzione pro ti assegurare chi s'aplicatzione funtzionet comente si tocat
+      rules_check:
+        action: Gesti is règulas de su serbidore
+        message_html: No as cunfiguradu peruna règula de su serbidore.
+      sidekiq_process_check:
+        message_html: Perunu protzessu Sidekiq est in esecutzione pro sa coa(s) %{value}. Revisiona is cunfiguratziones de Sidekiq
     tags:
       accounts_today: Impreos ùnicos atuales
       accounts_week: Impreos ùnicos de custa chida
       breakdown: Detàllios de s'impreu atuale pro orìgine
-      context: Cuntestu
-      directory: In su diretòriu
-      in_directory: "%{count} in su diretòriu"
       last_active: Ùrtima atividade
       most_popular: Prus populares
       most_recent: Prus reghentes
@@ -664,17 +693,18 @@ sc:
       add_new: Agiunghe noa
       delete: Cantzella
       edit_preset: Modìfica s'avisu predefinidu
+      empty: No as cunfiguradu ancora perunu avisu predefinidu.
       title: Gesti is cunfiguratziones predefinidas de is avisos
   admin_mailer:
     new_pending_account:
       body: Is detàllios de su contu nou sunt a suta. Podes aprovare o refudare custa rechesta.
       subject: Contu nou de revisionare in %{instance} (%{username})
     new_report:
-      body: "%{reporter} at signaladu %{target}"
-      body_remote: Calicunu de su domìniu %{domain} at signaladu %{target}
+      body: "%{reporter} at sinnaladu %{target}"
+      body_remote: Una persone de su domìniu %{domain} at sinnaladu %{target}
       subject: Informe nou pro %{instance} (#%{id})
     new_trending_tag:
-      body: 'S''eticheta #%{name} est in tendèntzia oe, ma non est istada revisionada in passadu. No at a èssere ammustrada in pùblicu francu chi ddu permitas; si sarvas formulàriu sena ddu modificare no ddu as a bìdere mai prus.'
+      body: 'S''eticheta #%{name} est in tendèntzia oe, ma no est istada revisionada in passadu. No at a èssere ammustrada in pùblicu francu chi ddu permitas; si sarvas su formulàriu sena ddu modificare, no ddu as a bìdere mai prus.'
       subject: Eticheta noa de revisionare in %{instance} (#%{name})
   aliases:
     add_new: Crea unu nomìngiu
@@ -685,7 +715,7 @@ sc:
     remove: Disconnete su nomìngiu
   appearance:
     advanced_web_interface: Interfache web avantzada
-    advanced_web_interface_hint: 'Si impreare totu sa largària de s''ischermu, s''interfache web avantzada ti permitit de cunfigurare diversas colunnas pro bìdere meda prus informatzione in contemporànea: printzipale, notìficas, lìnia de tempus federada e cale si siat nùmeru de listas e etichetas.'
+    advanced_web_interface_hint: 'Si boles impreare totu sa largària de s''ischermu, s''interfache web avantzada ti permitit de cunfigurare diversas colunnas pro bìdere meda prus informatzione in contemporànea: printzipale, notìficas, lìnia de tempus federada e cale si siat nùmeru de listas e etichetas.'
     animations_and_accessibility: Animatziones e atzessibilidade
     confirmation_dialogs: Diàlogos de cunfirmatzione
     discovery: Iscoberta
@@ -750,8 +780,8 @@ sc:
       confirming: Isetende chi sa posta eletrònica siat cumpletada.
       functional: Su contu tuo est operativu.
       pending: Sa dimanda tua est in protzessu de revisione dae su personale nostru. Podet serbire unu pagu de tempus. As a retzire unu messàgiu eletrònicu si sa dimanda est aprovada.
-      redirecting_to: Su contu tuo est inativu ca in die de oe est torrende a indiritzare a %{acct}.
-    too_fast: Mòdulu imbiadu tropu a lestru, torra a proare.
+      redirecting_to: Su contu tuo est inativu pro ite in die de oe est torrende a indiritzare a %{acct}.
+    too_fast: Formulàriu imbiadu tropu a lestru, torra a proare.
     trouble_logging_in: Tenes problemas de atzessu?
     use_security_key: Imprea una crae de seguresa
   authorize_follow:
@@ -760,12 +790,12 @@ sc:
     error: Faddina in sa chirca de su contu remotu
     follow: Sighi
     follow_request: 'As imbiadu una dimanda de sighidura a:'
-    following: 'Fatu! Immoe ses sighende:'
+    following: 'Fatu! Immoe ses sighende a:'
     post_follow:
       close: O, podes serrare custa ventana.
       return: Ammustra su profilu de custa persone
       web: Bae a su situ web
-    title: Sighi %{acct}
+    title: Sighi a %{acct}
   challenge:
     confirm: Sighi
     hint_html: "<strong>Cussìgiu:</strong> No t'amus a torrare a dimandare sa crae in s'ora imbeniente."
@@ -777,8 +807,8 @@ sc:
       invalid_signature: no est una firma Ed25519 vàlida
   date:
     formats:
-      default: "%d %b %Y"
-      with_month_name: "%d %B %Y"
+      default: "%d %b, %Y"
+      with_month_name: "%d %B, %Y"
   datetime:
     distance_in_words:
       about_x_hours: "%{count} o"
@@ -823,7 +853,7 @@ sc:
     '406': Custa pàgina no est a disponimentu in su formadu chi as pregontadu.
     '410': Sa pàgina chi ses chirchende no esistet prus.
     '422':
-      content: Faddina in sa verìfica de seguresa. Ses blochende is boboettos?
+      content: Faddina in sa verìfica de seguresa. Ses blochende is testimòngios?
       title: Faddina in sa verìfica de seguresa
     '429': Tropu rechestas
     '500':
@@ -853,7 +883,7 @@ sc:
     add_new: Agiunghe noa
     errors:
       limit: As giai evidentziadu sa cantidade màssima de etichetas
-    hint_html: "<strong>Ite sunt is etichetas in evidèntzia?</strong> Sunt ammustradas in evidèntzia in su profilu pùblicu tuo e permitint a sa gente de navigare is messàgios pùblicos tuos in cussas etichetas ispetzìficas. Sunt un'aina perfeta pro tènnere unu registru de òperas creativas o progetos longos."
+    hint_html: "<strong>Ite sunt is etichetas in evidèntzia?</strong> Sunt ammustradas in evidèntzia in su profilu pùblicu tuo e permitint a sa gente de navigare is messàgios pùblicos tuos in cussas etichetas ispetzìficas. Sunt unu traste perfetu pro tènnere unu registru de òperas creativas o progetos longos."
   filters:
     contexts:
       account: Profilos
@@ -900,26 +930,28 @@ sc:
         invalid_token: Is còdighes de autorizatzione de Keybase sunt hash de firmas e depent tènnere 66 caràteres esadetzimales
         verification_failed: Keybase non reconnoschet custu còdighe de autorizatzione che a firma de s'utente de Keybase %{kb_username}. Torra·bi a proare dae Keybase.
       wrong_user: Impossìbile creare una proa pro %{proving} cando as fatu s'atzessu che a %{current}. Intra che a %{proving} e torra·bi a proare.
-    explanation_html: Inoghe podes collegare critograficamente is àteras identidades tuas dae àteras prataformas, che a Keybase. Custu permitit a àteras persones de t'imbiare messàgios tzifrados in cussas prataformas e de tènnere sa seguresa chi sos cuntenutos chi lis mandas benit dae tene.
+    explanation_html: Inoghe podes collegare critograficamente is àteras identidades tuas dae àteras prataformas, che a Keybase. Custu permitit a àteras persones de t'imbiare messàgios tzifrados in cussas prataformas e de tènnere sa seguresa chi is cuntenutos chi ddis ses imbiende benint dae tene.
     i_am_html: So %{username} in %{service}.
     identity: Identidade
     inactive: Inativu
-    publicize_checkbox: 'E imbiat custu tut:'
+    publicize_checkbox: 'E imbia custu tut:'
     publicize_toot: 'Verificadu! So %{username} in %{service}: %{url}'
     remove: Boga sa proa dae su contu
     removed: Proa bogada dae su contu
     status: Istadu de verìfica
-    view_proof: Bìdere sa proa
+    view_proof: Ammustra sa proa
   imports:
+    errors:
+      over_rows_processing_limit: cuntenet prus de %{count} filas
     modes:
       merge: Uni
       merge_long: Mantene is registros chi esistint e agiunghe·nde àteros
-      overwrite: Subraiscrie
+      overwrite: Subrascrie
       overwrite_long: Sostitui is registros atuales cun cussos noos
     preface: Podes importare datos chi as esportadu dae unu àteru serbidore, che a sa lista de sa gente chi ses sighende o blochende.
     success: Datos carrigados; ant a èssere protzessados luego
     types:
-      blocking: Lista de blocados
+      blocking: Lista de blocos
       bookmarks: Sinnalibros
       domain_blocking: Lista domìnios blocados
       following: Lista de sighiduras
@@ -943,7 +975,7 @@ sc:
       one: 1 impreu
       other: "%{count} impreos"
     max_uses_prompt: Sena lìmite
-    prompt: Gènera e cumpartzi ligàmenes cun àteras persones pro dare atzessu a custu serbidore
+    prompt: Gènera e cumpartzi ligàmenes cun àteras persones pro donare atzessu a custu serbidore
     table:
       expires_at: Iscadit
       uses: Impreos
@@ -963,7 +995,7 @@ sc:
     cancelled_msg: Indiritzamentu annulladu.
     errors:
       already_moved: est su pròpiu contu a su chi as giai tramudadu
-      missing_also_known_as: no est unu nomìngiu de custu countu
+      missing_also_known_as: no est unu nomìngiu de custu contu
       move_to_self: non podet èssere su contu atuale
       not_found: no agatadu
       on_cooldown: Ses in perìodu de pàusa intre una tràmuda e s'àtera
@@ -990,9 +1022,9 @@ sc:
   moderation:
     title: Moderatzione
   move_handler:
-    carry_blocks_over_text: Custu utente s'est tramudadu dae %{acct}, chi as blocadu.
-    carry_mutes_over_text: Custu utente s'est tramudadu dae %{acct}, chi as impostadu a sa muda.
-    copy_account_note_text: 'Custu utente s''est tramudadu dae %{acct}, custas sunt sas notas antepostas tuas chi li pertocant:'
+    carry_blocks_over_text: Custa persone s'est tramudada dae %{acct}, chi as blocadu.
+    carry_mutes_over_text: Custa persone s'est tramudada dae %{acct}, chi as postu a sa muda.
+    copy_account_note_text: 'Custa persone s''est tramudada dae %{acct}, custas sunt is notas antepostas tuas chi ddi pertocant:'
   notification_mailer:
     digest:
       action: Ammustra totu is notìficas
@@ -1022,11 +1054,15 @@ sc:
       action: Risponde
       body: "%{name} t'at mentovadu in:"
       subject: "%{name} t'at mentovadu"
-      title: Mentovu nou
+      title: Mèntovu nou
+    poll:
+      subject: Su sondàgiu de %{name} est acabadu
     reblog:
       body: "%{name} at cumpartzidu s'istadu tuo:"
       subject: "%{name} at cumpartzidu s'istadu tuo"
       title: Cumpartzidura noa
+    status:
+      subject: "%{name} at publicadu cosa"
   notifications:
     email_events: Eventos pro notìficas cun posta eletrònica
     email_events_hint: 'Seletziona eventos pro is chi boles retzire notìficas:'
@@ -1042,13 +1078,13 @@ sc:
           thousand: m
           trillion: Bln
   otp_authentication:
-    code_hint: Inserta·nche su còdighe generadu dae s'aplicatzione di autenticatzione pro cunfirmare
+    code_hint: Inserta·nche su còdighe generadu dae s'aplicatzione de autenticatzione pro cunfirmare
     description_html: Si as a abilitare <strong>s'autenticatzione in duas fases</strong> impreende un'aplicatzione de autenticatzione, pro s'intrada as a dèpere tènnere in fatu su telèfonu tuo, chi at a ingendrare getones pro ti fàghere intrare.
     enable: Ativa
-    instructions_html: "<strong>Iscansi custu còdighe QR in s'autenticadore de Google o in un'aplicatzione TOTP simigiante in su telèfonu tuo</strong>. Dae como a in antis, cuss'aplicatzione at a ingendrare getones chi as a dèpere insertare pro pòdere fàghere s'atzessu."
-    manual_instructions: 'Si non podet iscansire su còdighe QR e tenes bisòngiu de dd''insertare manualmente, inoghe ddoe est su còdighe segretu in testu craru:'
+    instructions_html: "<strong>Iscansiona custu còdighe QR in s'autenticadore de Google o in un'àtera aplicatzione TOTP in su telèfonu tuo</strong>. Dae immoe, cussa aplicatzione at a ingendrare getones chi as a dèpere insertare pro pòdere fàghere s'atzessu."
+    manual_instructions: 'Si non podes iscansionare su còdighe QR e tenes bisòngiu de ddu insertare a manu, inoghe ddoe est su còdighe segretu in testu craru:'
     setup: Cunfigura
-    wrong_code: Su còdighe insertadu no est vàlidu! S'ora de su serbidore e de su dispositivu sunt curretas?
+    wrong_code: Su còdighe insertadu no est vàlidu. S'ora de su serbidore e de su dispositivu sunt curretas?
   pagination:
     newer: Prus reghente
     next: Sighi
@@ -1172,11 +1208,9 @@ sc:
     notifications: Notìficas
     preferences: Preferèntzias
     profile: Profilu
-    relationships: Persones chi sighis e chi ti sighint
+    relationships: Gente chi sighis e sighiduras
     two_factor_authentication: Autenticatzione de duos fatores
     webauthn_authentication: Craes de seguresa
-  spam_check:
-    spam_detected: Custu est un'informe automàticu. Àliga rilevada.
   statuses:
     attached:
       audio:
@@ -1196,7 +1230,7 @@ sc:
       other: 'cuntenet is etichetas non permìtidas: %{tags}'
     errors:
       in_reply_not_found: Ses chirchende de rispòndere a unu tut chi no esistit prus.
-    language_detection: Rileva sa limba in automàticu
+    language_detection: Rileva s'idioma in automàticu
     open_in_web: Aberi in sa web
     over_character_limit: lìmite de caràteres de %{max} superadu
     pin_errors:
@@ -1216,9 +1250,10 @@ sc:
     show_newer: Ammustra is prus noos
     show_older: Ammustra is prus betzos
     show_thread: Ammustra su tema
-    sign_in_to_participate: Cumintzat sa sessione pro partetzipare in s'arresonada
+    sign_in_to_participate: Identìfica·ti pro partetzipare in s'arresonada
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Deretu
       private: Isceti pro chie ti sighit
       private_long: Ammustra isceti a chie ti sighit
       public: Pùblicu
@@ -1238,20 +1273,20 @@ sc:
 
       <ul>
       <li><em>Informatziones de base de su contu</em>: Si t'as a registrare in custu serbidore, ti diant pòdere pedire de insertare unu nòmine utente, un'indiritzu de posta eletrònica e una crae de intrada. Dias pòdere insertare fintzas àteras informatziones de profilu, che a unu nòmine de ammustrare e una biografia, e carrigare un'immàgine de profilu e una de cobertedda. Su nòmine utente, cussu ammustradu, sa biografia, s'immàgine de profilu e de cobertedda sunt semper allistados in pùblicu.</li>
-      <li><em>Publicatziones, sighidores e àteras informatziones pùblicas</em>: Sa lista de is persones chi sighis est allistada in pùblicu, e sa matessi cosa balet pro is chi ti sighint. Cando imbias unu messàgiu sa data e s'ora benint sarbadas, gasi comente s'aplicatzione dae sa cale as imbiadu su messàgiu. Is messàgios diant pòdere cuntènnere cuntenutos multimediales allongiados, che a immàgines e vìdeos. Is publicatziones pùblicas e no allistadas sunt a disponimentu in abertu. Cando ammustras una publicatzione in su profilu tuo, fintzas cussa est un'informatzione a disponimentu pùblicu. Is publicatziones tuas benint imbiadas a is sighidores tuos, cosa chi a bortas bolet nàrrere chi benint intregadas a serbidores diferentes chi nde sarbant còpias in cue. Cando cantzellas publicatziones, custu acontessimentu benit imbiadu fintzas issu a is sighidores tuos. S'atzione de torrare a cumpartzire o de pònnere in is preferidos un'àtera publicatzione est semper pùblica.</li>
-      <li><em>Publicatziones diretas e pro is sighidores ebbia</em>: Totu is publicatziones benint archiviadas e protzessadas in su serbidore. Is publicatziones pro is sighidores ebbia benint intregadas a is sighidores tuos e a is utentes chi ddoe sunt mentovados in intro, e is publicatziones diretas benint intregadas isceti a is sighidores chi ddoe sunt mentovados in intro. In unos cantos casos bolet nàrrere chi benint intregados a serbidores diferentes e chi còpias issoro benint sarvadas in cue. Nois chircamus de limitare s'atzessu a custas publicatziones a is persones autorizadas ebbia, ma àteros serbidores bi diant pòdere non resessere. Pro custa resone est de importu mannu su de revisionare is serbidores a is cales faghent parte is sighidores tuos. Podes impreare un'optzione pro aprovare o refudare in manera automàtica sighidores noos in is cunfiguratziones. <em>Ammenta·ti chi is operadores de su serbidore e cale si siat serbidore chi ddos retzit podent castiare custos messàgios</em>, e chi is retzidores ddos diant pòdere sarvare faghende caturas, copiende·los o torrende·los a cumpartzire in àteras maneras. <em>Non cumpartzas peruna informatzione perigulosa impreende Mastodon.</em></li>
-      <li><em>IP e àteros metadatos</em>: Cando intras in su contu tuo sarvamus s'indiritzu IP dae su cale lu ses faghende, e fintzas su nòmine de s'aplicatzione chi impreas comente navigadore. Totu is sessiones de atzessu abertas sunt a disponimentu pro sa revisione e sa rèvoca in is cunfiguratziones tuas. S'ùrtimu indiritzu IP impreadu benit sarvadu finas a 12 meses. Diamus pòdere archiviare fintzas raportos chi includent is indiritzos IP de totu is rechestas a su serbidore nostru.</li>
+      <li><em>Publicatziones, sighidores e àteras informatziones pùblicas</em>: Sa lista de is persones chi sighis est allistada in pùblicu, e sa matessi cosa balet pro is chi ti sighint. Cando imbias unu messàgiu sa data e s'ora benint sarvadas, aici comente s'aplicatzione dae sa cale as imbiadu su messàgiu. Is messàgios diant pòdere cuntènnere cuntenutos multimediales allongiados, che a immàgines e vìdeos. Is publicatziones pùblicas e no allistadas sunt a disponimentu in abertu. Cando ammustras una publicatzione in su profilu tuo, fintzas cussa est un'informatzione a disponimentu pùblicu. Is publicatziones tuas benint imbiadas a is sighidores tuos, cosa chi a bortas bolet nàrrere chi benint intregadas a serbidores diferentes chi nde sarvant còpias in cue. Cando cantzellas publicatziones, custu acuntessimentu benit imbiadu fintzas issu a is persones chi ti sighint. S'atzione de torrare a cumpartzire o de pònnere in is preferidos un'àtera publicatzione est semper pùblica.</li>
+      <li><em>Publicatziones diretas e pro chie ti sighit ebbia</em>: Totu is publicatziones benint archiviadas e protzessadas in su serbidore. Is publicatziones pro is sighidores ebbia benint intregadas a chie ti sighit e a is utentes mentovados in intro, e is publicatziones diretas benint intregadas isceti a chie sighit a chi ddoe sunt mentovados in intro. In unos cantos casos bolet nàrrere chi benint intregados a serbidores diferentes e chi còpias issoro benint sarvadas in cue. Nois chircamus de limitare s'atzessu a custas publicatziones a is persones autorizadas ebbia, ma àteros serbidores bi diant pòdere non resessere. Pro custa resone est de importu mannu su de revisionare is serbidores a is cales faghent parte is sighiduras tuas. Podes impreare un'optzione pro aprovare o refudare in manera automàtica sighiduras noas in is cunfiguratziones. <em>Regorda·ti chi is operadores de su serbidore e cale si siat serbidore chi ddos retzit podent castiare custos messàgios</em>, e chi is retzidores ddos diant pòdere sarvare faghende caturas, copiende·los o torrende·los a cumpartzire in àteras maneras. <em>Non cumpartzas peruna informatzione perigulosa impreende Mastodon.</em></li>
+      <li><em>IP e àteros metadatos</em>: Cando intras in su contu tuo sarvamus s'indiritzu IP dae ue ses intrende, e fintzas su nòmine de s'aplicatzione chi impreas comente navigadore. Totu is sessiones de atzessu abertas sunt a disponimentu pro sa revisione e sa rèvoca in is cunfiguratziones tuas. S'ùrtimu indiritzu IP impreadu benit sarvadu finas a 12 meses. Diamus pòdere archiviare fintzas raportos chi includent is indiritzos IP de totu is rechestas a su serbidore nostru.</li>
       </ul>
 
       <hr class="spacer" />
 
       <h3 id="use">Pro ite cosas impreamus is informatziones tuas?</h3>
 
-      <p>Totu is informatziones chi collimus dae tene diat pòdere èssere impreadas in is maneras chi sighint:</p>
+      <p>Totu is informatziones chi collimus dae tene diant pòdere èssere impreadas in is maneras chi sighint:</p>
 
       <ul>
-      <li>Pro frunire sa funtzionalidade de base de Mastodon. Podes interagire cun is cuntenutos de is àteras persones, e cumpartzire is tuos, isceti cando ses intradu in su contu tuo. A esèmpiu, podes sighire àteras persones pro castiare is publicatziones cumbinadas issoro in sa lìnia de tempus personalizada printzipale tua.</li>
-      <li>Pro agiudare sa moderatzione de sa comunidade, a esèmpiu cunfrontende s'indiritzu IP tuo cun àteros giai connotos pro verificare evasiones de blocos o àteras violatziones.</li>
+      <li>Pro frunire sa funtzionalidade de base de Mastodon. Podes interagire cun is cuntenutos de is àteras persones, e cumpartzire is tuos, isceti cando as fatu s'atzessu in su contu tuo. Pro esèmpiu, podes sighire àteras persones pro castiare is publicatziones cumbinadas issoro in sa lìnia de tempus personalizada printzipale tua.</li>
+      <li>Pro agiudare sa moderatzione de sa comunidade, pro esèmpiu cunfrontende s'indiritzu IP tuo cun àteros giai connotos pro verificare evasiones de blocos o àteras violatziones.</li>
       <li>S'indiritzu de posta eletrònica chi as a frunire diat pòdere èssere impreadu pro t'imbiare informatziones, notìficas a pitzu de àteras persones chi ant a interagire cun is cuntenutos tuos o chi t'ant a imbiare messàgios, e pro rispòndere a interrogativos e/o àteras rechestas o preguntas.</li>
       </ul>
 
@@ -1259,7 +1294,7 @@ sc:
 
       <h3 id="protect">Comente amparamus is informatziones tuas?</h3>
 
-      <p>Impreamus medidas de seguresa vàrias pro amparare sa seguresa de is informatziones personales tuas cando insertas o imbias is informatziones personales tuas, o cando b'atzedes. In paris a àteras cosas, sa sessione de su navigadore tuo, e fintzas su tràficu intre s'aplicatzione tua e s'API, benint amparados cun SSL, e sa crae tua benit tzifrada impreende un'algoritmu forte a una diretzione. Pro afortiare sa seguresa de s'atzessu a su contu tuo galu de prus podes abilitare s'autenticatzione in duos fatores.</p>
+      <p>Impreamus medidas de seguresa vàrias pro amparare sa seguresa de is informatziones personales tuas cando insertas o imbias is informatziones personales tuas, o cando bi atzedes. In paris a àteras cosas, sa sessione de su navigadore tuo, e fintzas su tràficu intre s'aplicatzione tua e s'API, benint amparados cun SSL, e sa crae tua benit tzifrada impreende un'algoritmu forte a una diretzione. Pro afortiare sa seguresa de s'atzessu a su contu tuo ancora de prus podes abilitare s'autenticatzione in duos fatores.</p>
 
       <hr class="spacer" />
 
@@ -1280,35 +1315,35 @@ sc:
 
       <h3 id="cookies">Impreamus is testimòngios?</h3>
 
-      <p>Eja. Is testimòngios ("cookies") sunt documentos minores chi unu situ o su frunidore de servìtzios suos tramudant a su discu tèteru de s'elaboradore tuo pro mèdiu de su navigadore web tuo (si bi lu permitis). Custos testimòngios permitint a su situ de reconnòschere su navigadore tuo e, si tenes unu contu registradu, de dd'assotziare cun su contu tuo.</p>
+      <p>Eja. Is testimòngios ("cookies") sunt documentos minores chi unu situ o su frunidore de servìtzios suos tramudant a su discu tèteru de s'elaboradore tuo pro mèdiu de su navigadore web tuo (si si ddu permitis). Custos testimòngios permitint a su situ de reconnòschere su navigadore tuo e, si tenes unu contu registradu, de ddu assotziare cun su contu tuo.</p>
 
-      <p>Impreamus is testimòngios pro cumprèndere e sarvare is preferèntzias tuas pro is bìsitas imbenientes.</p>
+      <p>Impreamus is testimòngios pro cumprèndere e sarvare is preferèntzias tuas pro is visitas imbenientes.</p>
 
       <hr class="spacer" />
 
-      <h3 id="disclose">Rivelamus carchi informatzione a tertzas partes?</h3>
+      <h3 id="disclose">Rivelamus calicuna informatzione a tertzas partes?</h3>
 
       <p>Non bendimus, cuncambiamus, o tramudamus in àteras maneras is informatziones tuas chi ti diant pòdere individuare in manera personale. Custu no incluit sugetos de tertzas partes fidados chi nos agiudant a amministrare su situ, fàghere is fainas nostras, o a t'agiudare, finas a cando cussos sugetos atzetant de mantènnere cunfidentziales cussas informatziones. Diamus fintzas pòdere frunire is informatziones tuas si amus a èssere cumbintos chi siat apropriadu pro sighire is leges, aplicare is polìticas de su situ nostru, e amparare is deretos, propiedades o seguresas nostros o de àteros.</p>
 
-      <p>Is cuntenutos pùblicos tuos diant pòdere èssere iscarrigados dae àteros serbidores in sa retza. Is publicatziones pùblicas e pro is sighidores ebbia benint intregadas a is serbidores in ue istant is retzidores, si istant in unu serbidore chi no est custu.</p>
+      <p>Is cuntenutos pùblicos tuos diant pòdere èssere iscarrigados dae àteros serbidores in sa rete. Is publicatziones pùblicas e pro is sighiduras ebbia benint intregadas a is serbidores in ue istant is retzidores, si istant in unu serbidore chi no est custu.</p>
 
       <p>Cando autorizas un'aplicatzione a impreare su contu tuo, a segunda de sa mannària de is permissos chi frunis, cussa diat pòdere atzèdere a is informatziones pùblicas de profilu tuas, a sa lista de is persones chi sighis e chi ti sighint, a is listas tuas, a totu is publicatziones tuas e a is referidos tuos. Is aplicatziones non podent mai tènnere atzessu a s'indiritzu de posta eletrònica tuo e a sa crae de intrada tua.</p>
 
       <hr class="spacer" />
 
-      <h3 id="children">Impreu de custu situ dae arte de pitzinnos</h3>
+      <h3 id="children">Impreu de custu situ dae parte de minores</h3>
 
       <p>Si custu serbidore est in s'UE o in s'ÀEE: Su situ nostru, is produtos nostros e is servìtzios nostros sunt totu cantos pensados pro persones chi tenent a su mancu 16 annos de edade. Si tenes de mancu de 16 annos, in aplicatzione de is rechisitos de su GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) no imprees custu situ.</p>
 
-      <p>Si custu serbidore est in sos IUA: Su situ nostru, is produtos e is servìtzios suos sunt totu cantos pensados pro persones chi tenent a su mancu 13 annos de edade. Si tenes de mancu de 13 annos, in aplicatzione de su COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) no imprees custu situ.</p>
+      <p>Si custu serbidore est in is IUA: Su situ nostru, is produtos e is servìtzios suos sunt totu cantos pensados pro persones chi tenent a su mancu 13 annos de edade. Si tenes de mancu de 13 annos, in aplicatzione de su COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) no imprees custu situ.</p>
 
-      <p>Is rechisidos de sa lege diant pòdere èssere diferentes si custu serbidore est in suta de un'àtera giurisditzione.</p>
+      <p>Is rechisitos de sa lege diant pòdere èssere diferentes si custu serbidore est in suta de un'àtera giurisditzione.</p>
 
       <hr class="spacer" />
 
       <h3 id="changes">Modìficas a sa polìtica de riservadesa nostra</h3>
 
-      <p>Si amus a isseberare de cambiare sa polìtica de riservadesa nostra amus a publicare is modìficas in custa pàgina.</p>
+      <p>Si amus a seberare de cambiare sa polìtica de riservadesa nostra amus a publicare is modìficas in custa pàgina.</p>
 
       <p>Custu documentu tenet una litzèntzia CC-BY-SA. Est istadu agiornadu s'ùrtima borta su 7 de martzu de su 2018.</p>
 
@@ -1335,27 +1370,27 @@ sc:
     otp: Aplicatzione de autenticatzione
     recovery_codes: Còdighes de recùperu de còpia de seguridade
     recovery_codes_regenerated: Còdighes de recùperu torrados a generare
-    recovery_instructions_html: Si una die as a pèrdere s'atzessu a su telèfonu tuo, as a pòdere impreare unu de is còdighes de recùperu inoghe in suta pro recuperare s'atzessu a su contu tuo. <strong>Cunserva is còdighes in manera segura</strong>. A esèmpiu, ddos dias pòdere imprentare e archiviare in paris a àteros documentos de importu.
+    recovery_instructions_html: Si una die as a pèrdere s'atzessu a su telèfonu tuo, as a pòdere impreare unu de is còdighes de recùperu inoghe in suta pro recuperare s'atzessu a su contu tuo. <strong>Cunserva is còdighes in manera segura</strong>. Pro esèmpiu, ddos dias pòdere imprentare e archiviare in paris a àteros documentos de importu.
     webauthn: Craes de seguresa
   user_mailer:
     backup_ready:
-      explanation: As pedidu una còpia de seguresa totale de su contu de Mastodon tuo. Como est pronta pro s'iscarrigamentu!
+      explanation: As pedidu una còpia de seguresa totale de su contu de Mastodon tuo. Immoe est pronta pro s'iscarrigamentu!
       subject: S'archìviu tuo est prontu pro èssere iscarrigadu
       title: Collida dae s'archìviu
     sign_in_token:
       details: 'Custos sunt is detàllios de su tentativu:'
-      explanation: 'Amus rilevadu unu tentativu de identificatzione in su contu tuo dae un''indiritzu IP non reconnotu. Si fias tue, inserta su còdighe de seguresa in bàsciu in sa pàgina disafiu de identificatzione:'
-      further_actions: 'Si no fias tue, càmbia sa crae tua e ativa s''autenticatzione in duos passos in su contu tuo. Ddu podes fàghere inoghe:'
+      explanation: 'Amus rilevadu unu tentativu de identificatzione in su contu tuo dae un''indiritzu IP non reconnotu. Si fias tue, inserta su còdighe de seguresa in bàsciu in sa pàgina de disafiu de identificatzione:'
+      further_actions: 'Si non fias tue, càmbia sa crae tua e ativa s''autenticatzione in duos passos in su contu tuo. Ddu podes fàghere inoghe:'
       subject: Cunfirma su tentativu de identificatzione
       title: Tentativu de identificatzione
     warning:
       explanation:
         disable: Non podes prus intrare in su contu tuo o dd'impreare in cale si siat àtera manera, ma su profilu e is àteros datos tuos abarrant intatos.
         sensitive: Is elementos e documentos multimediales carrigados e ligados tuos ant a èssere tratados che a sensìbiles.
-        silence: Podes ancora impreare so contu tuo, ma isceti is persones chi ti sunt giai sighende ant a bìdere is tuts tuos in custu serbidore, e dias pòdere èssere esclùdidu dae unas cantas listas pùblicas. Nointames custu, is àteros ti diant pòdere galu sighire in manera manuale.
-        suspend: Non podes prus impreare su contu tuo, e su profilu e àteros datos non sunt prus atzessìbiles. Bi podes galu intrare pro pedire una còpia de seguresa de is datos tuos finas a cando no ant a èssere cantzellados de su totu, ma nd'amus a mantènnere unos cantos pro non ti permìtere de evàdere sa suspensione.
+        silence: Podes ancora impreare su contu tuo, ma isceti is persones chi ti sunt giai sighende ant a bìdere is tuts tuos in custu serbidore, e dias pòdere èssere esclùdidu dae unas cantas listas pùblicas. Nointames custu, is àteros ti diant pòdere galu sighire in manera manuale.
+        suspend: Non podes prus impreare su contu tuo, e su profilu e àteros datos non sunt prus atzessìbiles. Bi podes ancora intrare pro pedire una còpia de seguresa de is datos tuos finas a cando no ant a èssere cantzellados de su totu, ma nd'amus a mantènnere unos cantos pro non ti permìtere de evàdere sa suspensione.
       get_in_touch: Podes rispòndere a custu indiritzu de posta eletrònica pro cuntatare cun su personale de %{instance}.
-      review_server_policies: Revisionat sas polìticas de su serbidore
+      review_server_policies: Revisiona sas polìticas de su serbidore
       statuses: 'In manera cuncreta, pro:'
       subject:
         disable: Su contu tuo %{acct} est istadu cungeladu
@@ -1371,46 +1406,43 @@ sc:
         suspend: Contu suspèndidu
     welcome:
       edit_profile_action: Cunfigura su profilu
-      edit_profile_step: Podes personalizare su profilu tuo carrighende un'àvatar o un'intestatzione, cambiende su nòmine visìbile tuo e faghende fintzas àteru. Si boles revisionare is sighidores noos in antis chi tèngiant su permissu de ti sighire podes blocare su contu tuo.
-      explanation: Inoghe b'ant una paja de impòsitos pro cumintzare
+      edit_profile_step: Podes personalizare su profilu tuo carrighende un'immàgine de profilu o un'intestatzione, cambiende su nòmine de utente tuo e àteru. Si boles revisionare is sighidores noos in antis chi tèngiant su permissu de ti sighire podes blocare su contu tuo.
+      explanation: Inoghe ddoe at una paja de impòsitos pro cumintzare
       final_action: Cumintza a publicare
-      final_step: 'Cumintza a publicare! Fintzas si no ti sighit nemos is àteros podent bìdere is messàgios pùblicos tuos, pro esèmpiu in sa lìnia de tempus locale e in is etichetas ("hashtags"). Ti dias pòdere bòlere introduire a sa comunidade cun s''eticheta #introductions.'
+      final_step: 'Cumintza a publicare! Fintzas si no ti sighit nemos àtera gente podet bìdere is messàgios pùblicos tuos, pro esèmpiu in sa lìnia de tempus locale e in is etichetas ("hashtags"). Ti dias pòdere bòlere introduire a sa comunidade cun s''eticheta #introductions.'
       full_handle: Su nòmine utente intreu tuo
-      full_handle_hint: Custu est su chi dias nàrrere a is amigos tuos pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore.
+      full_handle_hint: Custu est su chi dias nàrrere a is amistades tuas pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore.
       review_preferences_action: Muda is preferèntzias
-      review_preferences_step: Ammenta·ti de impostare is preferèntzias tuas, che a is lìteras de posta eletrònicas chi boles retzire, o ite livellu de riservadesa dias bòlere chi siat predefinidu pro is messàgios tuos. Si is immàgines in movimentu non ti infadant podes isseberare de abilitare sa riprodutzione automàtica de is GIF.
+      review_preferences_step: Regorda·ti de cunfigurare is preferèntzias tuas, comente a cale messàgios de posta eletrònicas boles retzire, o ite livellu de riservadesa dias bòlere chi siat predefinidu pro is messàgios tuos. Si is immàgines in movimentu non ti infadant podes seberare de abilitare sa riprodutzione automàtica de is GIF.
       subject: Ti donamus su benebènnidu a Mastodon
-      tip_federated_timeline: Sa lìnia de tempus federada est una vista globale de sa retza de Mastodon. Ma incluit isceti is persones sighidas dae is bighinos tuos, duncas no est totale.
+      tip_federated_timeline: Sa lìnia de tempus federada est una vista globale de sa retza de Mastodon. Ma includet isceti is persones sighidas dae is bighinos tuos, duncas no est totale.
       tip_following: Pro more de is cunfiguratziones predefinidas sighis s'amministratzione de su serbidore tuo. Pro agatare àteras persones de interessu, càstia is lìnias de su tempus locale e federada.
       tip_local_timeline: Sa lìnia de tempus locale est una vista globale de is persones in %{instance}. Custos sunt is bighinos tuos!
       tip_mobile_webapp: Si su navigadore mòbile tuo t'oferit de agiùnghere Mastodon a s'ischermada printzipale tua podes retzire notìficas push. Funtzionat che a un'aplicatzione nativa in maneras medas!
       tips: Impòsitos
-      title: Bene bènnidu a bordu, %{name}!
+      title: Ti donamus su benebènnidu, %{name}!
   users:
-    blocked_email_provider: Custu frunidore de posta eletrònica no est permìtidu
     follow_limit_reached: Non podes sighire prus de %{limit} persones
     generic_access_help_html: Tenes problemas a intrare in su contu tuo? Podes cuntatare a %{email} pro retzire agiudu
-    invalid_email: Custu indiritzu de posta eletrònica no est vàlidu
-    invalid_email_mx: Custu indiritzu de posta eletrònica paret chi no esistat
     invalid_otp_token: Còdighe a duas fases non vàlidu
     invalid_sign_in_token: Còdighe de seguresa non vàlidu
     otp_lost_help_html: Si as pèrdidu s'atzessu a ambos, podes cuntatare a %{email}
-    seamless_external_login: Ses intradu pro mèdiu de unu servìtziu esternu, e pro custa resone is impostatziones de sa crae de intrada e de posta eletrònica non sunt a disponimentu.
+    seamless_external_login: As abertu sa sessione pro mèdiu de unu servìtziu esternu, e pro custa resone is cunfiguratziones de sa crae de intrada e de posta eletrònica non sunt a disponimentu.
     signed_in_as: 'Sessione aberta comente:'
-    suspicious_sign_in_confirmation: Paret chi tue non sias giai intradu dae custu dispositivu e non ses intradu dae unu pagu de tempus, duncas ti semus mandende unu còdighe de seguresa a s'indiritzu de posta eletrònica tuo pro cunfirmare chi ses tue.
+    suspicious_sign_in_confirmation: Paret chi no as mai abertu sa sessione dae custu dispositivu e est dae unu pagu de tempus chi no intras in Mastodon, duncas ti semus imbiende unu còdighe de seguresa a s'indiritzu de posta eletrònica tuo pro cunfirmare chi ses tue.
   verification:
     explanation_html: 'Ti podes <strong>verificare a sa sola comente mere de is ligòngios in is metadatos de su profilu tuo</strong>. Pro ddu fàghere su situ ligadu depet cuntènnere unu ligòngiu chi torret a su profilu de Mastodon tuo. Su ligòngiu in su situ <strong>depet</strong> tènnere un''atributu <code>rel="me"</code>. Su testu cuntenutu in su ligòngiu no est de importu. Custu est un''esèmpiu:'
     verification: Verìfica
   webauthn_credentials:
     add: Agiunghe una crae de seguresa noa
     create:
-      error: Ddoe est istadu unu problema cun s'agiunta de sa crae de seguresa tua. Torra a proare.
+      error: Ddoe at àpidu unu problema cun s'agiunta de sa crae de seguresa tua. Torra a proare.
       success: Sa crae de seguresa tua est istada agiunta.
     delete: Cantzella
     delete_confirmation: Seguru chi boles cantzellare custa crae de seguresa?
     description_html: Si permites s'<strong>autenticatzione cun crae de seguresa</strong>, as a tènnere bisòngiu de impreare una de is craes de seguresa tuas pro ti identificare.
     destroy:
-      error: Ddoe est istadu unu problema cun sa cantzelladura de sa crae de seguresa tua. Torra a proare.
+      error: Ddoe at àpidu unu problema cun sa cantzelladura de sa crae de seguresa tua. Torra a proare.
       success: Sa crae de seguresa tua est istada cantzellada.
     invalid_credential: Crae de seguresa non vàlida
     nickname_hint: Inserta su nomìngiu de sa crae de seguresa tua noa
diff --git a/config/locales/si.yml b/config/locales/si.yml
new file mode 100644
index 000000000..568a148dd
--- /dev/null
+++ b/config/locales/si.yml
@@ -0,0 +1,235 @@
+---
+si:
+  about:
+    about_this: පිලිබඳව
+    active_count_after: සක්‍රීයයි
+    api: යෙ.ක්‍ර. මු. (API)
+    apps: ජංගම යෙදුම්
+    learn_more: තව දැනගන්න
+    privacy_policy: රහස්‍යතා ප්‍රතිපත්තිය
+    rules: සේවාදායකයේ නීති
+    status_count_after:
+      one: තත්වය
+      other: තත්වයන්
+    terms: සේවාවේ කොන්දේසි
+    unavailable_content_description:
+      domain: සේවාදායකය
+      reason: හේතුව
+      suspended_title: අත්හිටවූ සේවාදායකයන්
+    user_count_after:
+      one: පරිශීලක
+      other: පරිශීලකයින්
+  accounts:
+    media: මාධ්‍යය
+    roles:
+      admin: පරිපාලක
+      bot: ස්වයං ක්‍රමලේඛය
+      group: සමූහය
+  admin:
+    accounts:
+      are_you_sure: ඔබට විශ්වාසද?
+      by_domain: වසම
+      change_email:
+        current_email: වත්මන් වි-තැපෑල
+        label: වි-තැපෑල වෙනස් කරන්න
+        new_email: නව විද්‍යුත් තැපෑල
+        submit: වි-තැපෑල වෙනස් කරන්න
+        title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න"
+      confirm: සනාථ කරන්න
+      confirmed: සනාථ කර ඇත
+      confirming: සනාථ කරමින්
+      domain: වසම
+      edit: සංස්කරණය
+      email: විද්‍යුත් තැපෑල
+      email_status: වි-තැපෑලෙහි තත්වය
+      enabled: සබල කර ඇත
+      ip: අ.ජා. කෙ. (IP)
+      location:
+        all: සියල්ල
+        local: ස්ථානීය
+        remote: දුරස්ථ
+        title: ස්ථානය
+      login_status: පිවිසීමේ තත්වය
+      media_attachments: මාධ්‍ය ඇමුණුම්
+      moderation:
+        active: සක්‍රීයයි
+        all: සියල්ල
+        suspended: අත්හිටුවන ලදි
+      perform_full_suspension: අත්හිටුවන්න
+      protocol: කෙටුම්පත
+      reject: ප්‍රතික්ෂේප
+      role: අවසරයන්
+      roles:
+        admin: පරිපාලක
+        staff: කාර්ය මණ්ඩලය
+        user: පරිශීලක
+      search: සොයන්න
+      sensitive: සංවේදී
+      silence: සීමාව
+      statuses: තත්වයන්
+      suspended: අත්හිටුවන ලදි
+      title: ගිණුම්
+      web: වියමන
+    action_logs:
+      action_types:
+        create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න
+        enable_user: පරිශීලක සබල කරන්න
+    announcements:
+      live: සජීවී
+      new:
+        create: නිවේදනය සාදන්න
+        title: නව නිවේදනය
+      published_msg: නිවේදනය සාර්ථකව ප්‍රකාශයට පත් කරන ලදි!
+      title: නිවේදන
+    custom_emojis:
+      by_domain: වසම
+      copy: පිටපත්
+      create_new_category: නව ප්‍රවර්ගයක් සාදන්න
+      list: ලැයිස්තුව
+      upload: උඩුගත කරන්න
+    dashboard:
+      features: විශේෂාංග
+      open_reports: වාර්තා විවෘත කරන්න
+      software: මෘදුකාංගය
+      title: උපකරණ පුවරුව
+    domain_blocks:
+      domain: වසම
+      new:
+        severity:
+          suspend: අත්හිටුවන්න
+      private_comment: පුද්ගලික අදහස
+      public_comment: ප්‍රසිද්ධ අදහස
+      reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න
+      rejecting_media: මාධ්‍ය වාර්තා ප්‍රතික්ෂේප කරමින්
+      rejecting_reports: වාර්තා ප්‍රතික්ෂේප කරමින්
+      severity:
+        suspend: අත්හිටුවන ලදි
+      show:
+        undo: පෙරසේ
+    email_domain_blocks:
+      domain: වසම
+      new:
+        create: වසම එකතු කරන්න
+      title: අවහිර කළ වි-තැපැල් වසම්
+    instances:
+      by_domain: වසම
+      moderation:
+        all: සියල්ල
+      private_comment: පුද්ගලික අදහස
+      public_comment: ප්‍රසිද්ධ අදහස
+    ip_blocks:
+      title: අ.ජා. කෙ. (IP) නීති
+    relays:
+      disable: අබල කරන්න
+      enable: සබල කරන්න
+      enabled: සබල කර ඇත
+      status: තත්වය
+    reports:
+      are_you_sure: ඔබට විශ්වාසද?
+      by_target_domain: වාර්තා කළ ගිණුමෙහි වසම
+      notes:
+        create: සටහන එකතු කරන්න
+      report: "@%{id} වාර්තා කරන්න"
+      reported_account: වාර්තා කළ ගිණුම
+      status: තත්වය
+      title: වාර්තා
+    settings:
+      site_title: සේවාදායකයේ නම
+    statuses:
+      media:
+        title: මාධ්‍යය
+  application_mailer:
+    salutation: "%{name},"
+  auth:
+    change_password: මුර පදය
+    login: පිවිසෙන්න
+    logout: නික්මෙන්න
+    status:
+      account_status: ගිණුමේ තත්වය
+  authorize_follow:
+    post_follow:
+      web: වියමන ට යන්න
+  date:
+    formats:
+      default: "%b %d, %Y"
+      with_month_name: "%B %d, %Y"
+  datetime:
+    distance_in_words:
+      less_than_x_seconds: මේ දැන්
+  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.
+    '422': 
+    '429': Too many requests
+    '500': 
+    '503': The page could not be served due to a temporary server failure.
+  exports:
+    archive_takeout:
+      date: දිනය
+      size: ප්‍රමාණය
+    lists: ලැයිස්තු
+    storage: මාධ්‍ය ගබඩාව
+  filters:
+    contexts:
+      account: පැතිකඩයන්
+      notifications: දැනුම්දීම්
+    edit:
+      title: පෙරහන සංස්කරණය
+    index:
+      title: පෙරහන්
+    new:
+      title: නව පෙරහනක් එකතු කරන්න
+  footer:
+    developers: සංවර්ධකයින්
+    more: තව…
+    resources: සම්පත්
+  identity_proofs:
+    identity: අනන්‍යතාව
+  imports:
+    upload: උඩුගත කරන්න
+  invites:
+    expires_in:
+      '1800': විනාඩි 30
+      '21600': හෝරා 6
+      '3600': හෝරා 1
+      '43200': හෝරා 12
+      '604800': සති 1
+      '86400': දින 1
+  sessions:
+    browser: අතිරික්සුව
+    browsers:
+      alipay: අලිපේ
+      blackberry: බ්ලැක්බෙරි
+      chrome: ක්‍රෝම්
+      edge: මයික්‍රොසොෆ්ට් එඩ්ගේ
+      electron: ඉලෙක්ට්‍රෝන්
+      firefox: ෆයර්ෆොක්ස්
+      generic: නොදන්නා අතිරික්සුවකි
+      ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර්
+      micro_messenger: මයික්‍රොමැසෙන්ජර්
+      opera: ඔපෙරා
+      otter: ඔටර්
+      safari: සෆාරි
+      weibo: වෙයිබො
+    ip: අ.ජා. කෙ. (IP)
+    platforms:
+      adobe_air: ඇඩෝබි එයාර්
+      android: ඇන්ඩ්‍රොයිඩ්
+      blackberry: බ්ලැක්බෙරි
+      chrome_os: ක්‍රෝම් ඕඑස්
+      firefox_os: ෆයර්ෆොක්ස් ඕඑස්
+      ios: අයිඕඑස්
+      linux: ලිනක්ස්
+      mac: මැක්ඕඑස්
+      windows: වින්ඩෝස්
+      windows_mobile: වින්ඩෝස් මොබයිල්
+      windows_phone: වින්ඩෝස් පෝන්
+  settings:
+    account: ගිණුම
+    account_settings: ගිණුමේ සැකසුම්
+  two_factor_authentication:
+    edit: සංස්කරණය
+    webauthn: ආරක්ෂිත යතුරු
diff --git a/config/locales/simple_form.af.yml b/config/locales/simple_form.af.yml
new file mode 100644
index 000000000..252f9fd5a
--- /dev/null
+++ b/config/locales/simple_form.af.yml
@@ -0,0 +1 @@
+af:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 0663c65b4..47ad19a6d 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -12,7 +12,14 @@ ar:
       admin_account_action:
         include_statuses: سيرى المستخدم أي مِن التبويقات تسببت في إجراء الإشراف أو التحذير
         send_email_notification: سوف يتلقى المستخدم رسالة تُفسِّر ما حدث على حسابه
+        text_html: اختياري، يمكنك استخدام بناء التبويق. يمكنك <a href="%{path}">إضافة إعدادات تحذير مسبقة</a> لتوفير الوقت
         type_html: اختر ما تود إجراؤه على <strong>%{acct}</strong>
+        types:
+          disable: منع المستخدم من استخدام حسابه، ولكن لا تَقم بحذف أو إخفاء محتواه.
+          none: استخدم هذه لإرسال تحذير للمستخدم، دون تشغيل أو إثارة أي إجراء آخر.
+          sensitive: إجبار جميع مرفقات الوسائط لهذا المستخدم على أن تكون حساسة.
+          silence: منع المستخدم من أن يكون قادراً على النشر للعامة، وإخفاء مشاركاته وإشعاراته من الذين لا يُتابعِونه.
+          suspend: منع أي تفاعل من أو إلى هذا الحساب، وحذف محتوياته، يمكن الرجوع عن هذا القرار في غضون 30 يوماً.
         warning_preset_id: اختياري. يمكنك إضافة نص مخصص إلى نهاية النموذج
       announcement:
         all_day: إن أختير، سيتم عرض تواريخ النطاق الزمني فقط
@@ -53,6 +60,9 @@ ar:
         whole_word: إذا كانت الكلمة أو العبارة مكونة من أرقام وحروف فقط سوف يتم تطبيقها فقط عند مطابقة الكلمة ككل
       domain_allow:
         domain: سيكون بإمكان هذا النطاق جلب البيانات من هذا الخادم ومعالجة وتخزين البيانات الواردة منه
+      email_domain_block:
+        domain: يمكن لهذا أن يكون اسم النطاق الذي يظهر في عنوان البريد الإلكتروني، سجل MX الذي يُقرر هذا النطاق إليه، أو IP الخادم الذي يقرره سجل MX. وسيتم التحقق من ذلك عند تسجيل المستخدم وسيتم رفض التسجيل.
+        with_dns_records: سوف تُبذل محاولة لحل سجلات DNS الخاصة بالنطاق المعني، كما ستُمنع النتائج
       featured_tag:
         name: 'رُبَّما تريد·ين استخدام واحد مِن بين هذه:'
       form_challenge:
@@ -61,8 +71,19 @@ ar:
         data: ملف CSV تم تصديره مِن خادوم ماستدون آخر
       invite_request:
         text: هذا سوف يساعدنا في مراجعة تطبيقك
+      ip_block:
+        comment: اختياري. تذكر لماذا قمت بإضافة هذا القانون.
+        expires_in: عناوين الـIP هي مَورد محدود، يتم في بعض الأحيان مشاركتها وغالباً ما يتم تغير ملكيتها، لهذا السبب، لا يُنصح بحظر الـIP إلى أجل غير مسمى.
+        ip: أدخل عنوان IPv4 أو IPv6. يمكنك حظر نطاقات كاملة باستخدام بناء الـCIDR. كن حذراً على أن لا تَحظر نفسك!
+        severities:
+          no_access: حظر الوصول إلى جميع المصادر
+          sign_up_requires_approval: التسجيلات الجديدة سوف تتطلب موافقتك
+        severity: اختر ما سيحدث مع الطلبات من هذا الـIP
+      rule:
+        text: صِف قانون أو شرط للمستخدمين على هذا الخادم. حاول أن تُبقيه قصير وبسيط
       sessions:
         otp: 'قم بإدخال رمز المصادقة بخطوتين الذي قام بتوليده تطبيق جهازك أو استخدم أحد رموز النفاذ الاحتياطية:'
+        webauthn: إذا كان مفتاح USB فتأكد من إدخاله، وإذا لزم الأمر، اضعط عليه.
       tag:
         name: يمكنك فقط تغيير غلاف الحروف ، على سبيل المثال ، لجعلها أكثر قابلية للقراءة
       user:
@@ -87,6 +108,7 @@ ar:
         types:
           disable: تعطيل
           none: لا تفعل شيئا
+          sensitive: حساس
           silence: كتم
           suspend: علِق
         warning_preset_id: استخدم نموذج تنبيه
@@ -112,6 +134,7 @@ ar:
         expires_in: تنتهي مدة صلاحيته بعد
         fields: البيانات الوصفية للصفحة التعريفية
         header: الرأسية
+        honeypot: "%{label} (لا تملئ)"
         inbox_url: عنوان رابط صندوق المُرَحِّل
         irreversible: إسقاط بدلا من إخفائها
         locale: لغة الواجهة
@@ -131,6 +154,7 @@ ar:
         setting_default_privacy: خصوصية المنشور
         setting_default_sensitive: اعتبر الوسائط دائما كمحتوى حساس
         setting_delete_modal: إظهار مربع حوار للتأكيد قبل حذف أي تبويق
+        setting_disable_swiping: تعطيل حركات التمرير
         setting_display_media: عرض الوسائط
         setting_display_media_default: افتراضي
         setting_display_media_hide_all: إخفاء الكل
@@ -152,6 +176,8 @@ ar:
         username: اسم المستخدم
         username_or_email: اسم المستخدم أو كلمة السر
         whole_word: الكلمة كاملة
+      email_domain_block:
+        with_dns_records: تضمين سجلات MX و عناوين IP للنطاق
       featured_tag:
         name: الوسم
       interactions:
@@ -163,7 +189,12 @@ ar:
       invite_request:
         text: لماذا ترغب في الانضمام؟
       ip_block:
+        comment: تعليق
         ip: عنوان IP
+        severities:
+          no_access: حظر الوصول
+          sign_up_requires_approval: حد التسجيلات
+        severity: قانون
       notification_emails:
         digest: إرسال ملخصات عبر البريد الإلكتروني
         favourite: ابعث بريداً إلكترونيًا عندما يُعجَب أحدهم بمنشورك
@@ -174,6 +205,8 @@ ar:
         reblog: ابعث بريداً إلكترونيًا عندما يقوم أحدهم بترقية منشورك
         report: إرسال رسالة إلكترونية عند تلقّي إبلاغ جديد
         trending_tag: ابعث رسالة إلكترونية إن كان هناك وسم متداوَل بحاجة إلى مراجعة
+      rule:
+        text: قانون
       tag:
         listable: اسمح لهذا الوسم بالظهور في البحث وفي دليل الصفحات التعريفية
         name: الوسم
@@ -183,4 +216,7 @@ ar:
     required:
       mark: "*"
       text: مطلوب
+    title:
+      sessions:
+        webauthn: استخدم أحد مفاتيح الأمان الخاصة بك لتسجيل الدخول
     'yes': نعم
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 1fe5fa798..2b960fb31 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -37,7 +37,6 @@ ast:
       announcement:
         text: Anunciu
       defaults:
-        avatar: Avatar
         bot: Esta cuenta ye d'un robó
         chosen_languages: Peñera de llingües
         confirm_new_password: Confirmación de la contraseña nueva
@@ -95,6 +94,5 @@ ast:
         name: Etiqueta
     'no': Non
     required:
-      mark: "*"
       text: ríquese
     'yes': Sí
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 9991bed3d..2a23ea057 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -9,6 +9,18 @@ bg:
       imports:
         data: CSV файл, експортиран от друга инстанция на Mastodon
     labels:
+      account:
+        fields:
+          value: Съдържание
+      account_warning_preset:
+        title: Заглавие
+      admin_account_action:
+        type: Действие
+        types:
+          disable: Замразяване
+          sensitive: Деликатно
+          silence: Ограничение
+          suspend: Спиране
       defaults:
         avatar: Аватар
         confirm_new_password: Потвърди новата парола
diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml
index 4cbc173bd..8dd933869 100644
--- a/config/locales/simple_form.br.yml
+++ b/config/locales/simple_form.br.yml
@@ -29,6 +29,4 @@ br:
       tag:
         name: Ger-klik
     'no': Ket
-    required:
-      mark: "*"
     'yes': Ya
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index 181f7d504..9e647dafe 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -14,6 +14,12 @@ ca:
         send_email_notification: L'usuari rebrà una explicació del que ha passat amb el seu compte
         text_html: Opcional. Pots utilitzar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per a estalviar temps
         type_html: Tria què fer amb <strong>%{acct}</strong>
+        types:
+          disable: Evita que l'usuari faci ús del seu compte però no li esborra o amaga els seus continguts.
+          none: Fes servir això per a enviar un avís al usuari sense desencadenar cap altre acció.
+          sensitive: Obliga a marcar tots els fitxers multi mèdia adjunts com a sensibles.
+          silence: Evita que l'usuari sigui capaç de publicar amb visibilitat publica, amaga els tuts i notificacions de usuaris que no el segueixen.
+          suspend: Evita qualsevol interacció de o a aquest compte i esborra els seus continguts. Reversible en un termini de 30 dies.
         warning_preset_id: Opcional. Encara pots afegir text personalitzat al final de la configuració predefinida
       announcement:
         all_day: Si es marca, només es mostraran les dates de l'interval de temps
@@ -73,6 +79,8 @@ ca:
           no_access: Bloqueja l’accés a tots els recursos
           sign_up_requires_approval: Els nous registres requeriran la teva aprovació
         severity: Tria què passarà amb les sol·licituds des d’aquesta IP
+      rule:
+        text: Descriu una norma o requeriment pels usuaris d'aquest servidor. Intenta fer-la curta i senzilla
       sessions:
         otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:'
         webauthn: Si és una clau USB assegurat de que està inserida i, si és necessari, toca-ho.
@@ -112,7 +120,6 @@ ca:
         text: Anunci
       defaults:
         autofollow: Convida a seguir el teu compte
-        avatar: Avatar
         bot: Aquest compte és un bot
         chosen_languages: Filtrar llengües
         confirm_new_password: Confirma la contrasenya nova
@@ -182,7 +189,6 @@ ca:
         text: Per què vols unir-te?
       ip_block:
         comment: Comentari
-        ip: IP
         severities:
           no_access: Bloquejar l’accés
           sign_up_requires_approval: Limitar els registres
@@ -197,14 +203,15 @@ ca:
         reblog: Envia un correu electrònic si algú comparteix el teu estat
         report: Envia un correu electrònic quan s'enviï un nou informe
         trending_tag: Envia un correu quan una etiqueta sense revisar està en tendència
+      rule:
+        text: Norma
       tag:
         listable: Permet que aquesta etiqueta aparegui en les cerques i en el directori de perfils
         name: Etiqueta
         trendable: Permet que aquesta etiqueta aparegui en les tendències
         usable: Permet als tuts emprar aquesta etiqueta
-    'no': 'No'
+    recommended: Recomanat
     required:
-      mark: "*"
       text: necessari
     title:
       sessions:
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index a36ad17c6..c1ccd950b 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -73,6 +73,8 @@ co:
           no_access: Bluccà l'accessu à tutte e risorse
           sign_up_requires_approval: E nove dumande d'arregistramente necessitaranu a vostr'appruvazione
         severity: Sceglie ciò chì si passerà cù e richieste di quest'IP
+      rule:
+        text: Discrizzione di una regula o esigenza per l'utilizatori di stu servore. Pruvate di guardalla corta è simplice
       sessions:
         otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:'
         webauthn: S'ella hè una chjave USB assicuratevi di brancalla è, s'ellu c'hè unu, appughjà nant'à u buttone.
@@ -197,6 +199,8 @@ co:
         reblog: Mandà un’e-mail quandu qualch’unu sparte i mo statuti
         report: Mandà un'e-mail quandu c'hè un novu signalamentu
         trending_tag: Mandà un'e-mail quandu un hashtag micca verificatu hè in e tendenze
+      rule:
+        text: Regula
       tag:
         listable: Auturizà stu hashtag à esse vistu nant'à l'annuariu di i prufili
         name: Hashtag
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 9f3f36b1e..8beb11497 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -14,6 +14,12 @@ cs:
         send_email_notification: Uživatel obdrží vysvětlení toho, co se stalo s jeho účtem
         text_html: Volitelné. Můžete používat syntaxi tootů. Pro ušetření času si můžete <a href="%{path}">přidat předlohy pro varování</a>
         type_html: Vyberte, co chcete s účtem <strong>%{acct}</strong> udělat
+        types:
+          disable: Zabránit uživateli používat svůj účet, ale nemazat ani neskrývat jejich obsah.
+          none: Toto použijte pro zaslání varování uživateli, bez vyvolání jakékoliv další akce.
+          sensitive: Vynutit označení všech mediálních příloh tohoto uživatele jako citlivých.
+          silence: Zamezit uživateli odesílat příspěvky s veřejnou viditelností, schovat jejich příspěvky a notifikace před lidmi, kteří je nesledují.
+          suspend: Zamezit jakékoliv interakci z nebo do tohoto účtu a smazat jeho obsah. Vratné do 30 dnů.
         warning_preset_id: Volitelné. Na konec předlohy můžete stále vložit vlastní text
       announcement:
         all_day: Po vybrání budou zobrazeny jenom dny z časového období
@@ -65,8 +71,19 @@ cs:
         data: Soubor CSV exportovaný z jiného serveru Mastodon
       invite_request:
         text: To nám pomůže posoudit vaši žádost
+      ip_block:
+        comment: Nepovinné. Poznamenejte si, proč jste přidali toto pravidlo.
+        expires_in: IP adresy jsou omezeným zdrojem, občas jsou sdílené a často mění majitele. Proto se jejich časově neomezené blokování nedoporučuje.
+        ip: Zadejte IPv4 nebo IPv6 adresu. Můžete blokovat celé rozsahy použitím CIDR notace. Dejte pozor, ať neodříznete přístup sami sobě!
+        severities:
+          no_access: Blokovat přístup ke všem zdrojům
+          sign_up_requires_approval: Nové registrace budou vyžadovat schválení
+        severity: Zvolte, jak naložit s požadavky z dané IP
+      rule:
+        text: Popište pravidlo nebo požadavek uživatelům tohoto serveru. Snažte se ho držet krátký a jednoduchý
       sessions:
         otp: 'Zadejte kód pro dvoufázové ověření vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
+        webauthn: Pokud jde o USB klíč, vložte jej a případně se dotkněte jeho tlačítka.
       tag:
         name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti
       user:
@@ -91,6 +108,7 @@ cs:
         types:
           disable: Deaktivovat přihlašování
           none: Nic nedělat
+          sensitive: Citlivý
           silence: Ztišit
           suspend: Pozastavit účet a nenávratně smazat jeho data
         warning_preset_id: Použít předlohu pro varování
@@ -116,6 +134,7 @@ cs:
         expires_in: Vypršet za
         fields: Metadata profilu
         header: Záhlaví
+        honeypot: "%{label} (nevyplňovat)"
         inbox_url: URL příchozí schránky mostu
         irreversible: Zahodit místo skrytí
         locale: Jazyk rozhraní
@@ -135,6 +154,7 @@ cs:
         setting_default_privacy: Soukromí příspěvků
         setting_default_sensitive: Vždy označovat média jako citlivá
         setting_delete_modal: Před smazáním tootu zobrazovat potvrzovací okno
+        setting_disable_swiping: Vypnout gesta přejetí prsty
         setting_display_media: Zobrazování médií
         setting_display_media_default: Výchozí
         setting_display_media_hide_all: Skrýt vše
@@ -168,6 +188,13 @@ cs:
         comment: Komentář
       invite_request:
         text: Proč se chcete připojit?
+      ip_block:
+        comment: Komentář
+        ip: IP
+        severities:
+          no_access: Blokovat přístup
+          sign_up_requires_approval: Omezit registrace
+        severity: Pravidlo
       notification_emails:
         digest: Posílat e-maily s přehledem
         favourite: Poslat e-mail, když si někdo oblíbí váš toot
@@ -178,6 +205,8 @@ cs:
         reblog: Poslat e-mail, když někdo boostne váš toot
         report: Poslat e-mail, je-li nahlášeno něco nového
         trending_tag: Poslat e-mail, když se neschválený hashtag stane populárním
+      rule:
+        text: Pravidlo
       tag:
         listable: Povolit tento hashtag ve výsledcích vyhledávání a v adresáři profilů
         name: Hashtag
@@ -187,4 +216,7 @@ cs:
     required:
       mark: "*"
       text: vyžadováno
+    title:
+      sessions:
+        webauthn: K přihlášení použijte jeden z Vašich bezpečnostních klíčů
     'yes': Ano
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 1b4250c0c..231b46765 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -74,7 +74,6 @@ cy:
     labels:
       account:
         fields:
-          name: Label
           value: Cynnwys
       account_alias:
         acct: Enw'r hen gyfrif
@@ -109,7 +108,6 @@ cy:
         confirm_password: Cadarnhau cyfrinair
         context: Hidlo cyd-destunau
         current_password: Cyfrinair presennol
-        data: Data
         discoverable: Rhestrwch y cyfrif hwn ar y cyfeiriadur
         display_name: Enw arddangos
         email: Cyfeiriad e-bost
@@ -185,6 +183,5 @@ cy:
         usable: Caniatáu i tŵtiau ddefnyddio'r hashnod hwn
     'no': Na
     required:
-      mark: "*"
       text: gofynnol
     'yes': Ie
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index fb011f573..976bd0696 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -2,132 +2,186 @@
 da:
   simple_form:
     hints:
+      account_alias:
+        acct: Angiv brugernavn@domain for den konto, hvorfra du vil flytte
+      account_migration:
+        acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte
       account_warning_preset:
+        text: Du kan bruge indlægssyntaks, såsom URL'er, hashtags og omtaler
         title: Valgfri. Ikke synlig for modtageren
       admin_account_action:
-        type_html: Vælg hvad du vil gøre med <strong>%{acct}</strong>
+        include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen
+        send_email_notification: Brugeren modtager en forklaring på, hvad der skete med deres konto
+        text_html: Valgfri. Du kan bruge indlægssyntaks. Du kan <a href="%{path}">tilføje advarsler</a> for a spare tid
+        type_html: Vælg, hvad du vil gøre med <strong>%{acct}</strong>
+        types:
+          disable: Forhindre brugeren i at bruge sin konto, men slet eller skjul ikke vedkommendes indhold.
+          none: Brug dette til at sende en advarsel til brugeren uden at udløse nogen anden handling.
+          sensitive: Gennemtving sensitivmarkering af alle denne brugers medievedhæftninger.
+          silence: Forhindre brugeren i at kunne skrive offentligt synlige indlæg, skjule deres indlæg og notifikationer fra personer, som ikke følger dem.
+          suspend: Forhindre enhver interaktion fra eller til denne konto og slet dens indhold. Reversibelt inden for 30 dage.
+        warning_preset_id: Valgfri. Du kan stadig tilføje tilpasset tekst til slutningen af forvalgene
+      announcement:
+        all_day: Hvis markeret, vil kun datoerne for tidsintervallet blive vist
+        ends_at: Valgfri. En bekendtgørelse vil automatisk blive afpubliceret på dette tidspunkt
+        scheduled_at: Lad stå tomt for straks at publicere bekendtgørelsen
+        starts_at: Valgfri. Såfremt din bekendtgørelse er knyttet til et bestemt tidsinterval
+        text: Du kan bruge markup-formattering i indlæg. Vær opmærksom på den plads, som en bekendtgørelse vil fylde på brugerens skærm
       defaults:
-        autofollow: Folk der har oprettet sig gennem invitationen vil automatisk følge dig
-        avatar: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px
-        bot: Denne konto udfører hovedsageligt automatiserede handlinger og bliver muligvis ikke overvåget
-        context: En eller flere sammenhænge hvor filteret skal være gældende
-        current_username: For at bekræfte, angiv venligst brugernavnet på den aktuelle konto
-        digest: Sendes kun efter en lang periode med inaktivitet og kun hvis du har modtaget nogle personlige beskeder i dit fravær
-        email: Du vil få tilsendt en bekræftelses e-mail
-        fields: Du kan have op til 4 ting vist som en tabel på din profil
-        header: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px
-        inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge
-        irreversible: Filtrerede trut vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet
-        locale: Sproget på interfacet, emails og push beskeder
-        locked: Kræver, at du godkender følgere manuelt
+        autofollow: Personer, som har tilmeldt sig via invitationen, vil automatisk følge dig
+        avatar: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px
+        bot: Signalér til andre, at denne konto primært udfører automatiserede handlinger og muligvis ikke monitoreres
+        context: En eller flere kontekster, hvor filteret skal være gældende
+        current_password: Angiv af sikkerhedsårsager adgangskoden til den aktuelle konto
+        current_username: For at bekræfte, angiv brugernavnet for den aktuelle konto
+        digest: Sendes kun efter en lang inaktivitetsperiode, og kun hvis du har modtaget personlige beskeder i dit fravær
+        discoverable: Tillad din konto at blive fundet af fremmede via anbefalinger og øvrige funktioner
+        email: Du tilsendes en bekræftelsese-mail
+        fields: Du kan have op til 4 elementer vist som en tabel på din profil
+        header: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px
+        inbox_url: Kopiér URL'en fra forsiden af den videreformidler, du ønsker at bruge
+        irreversible: Filtrerede indlæg forsvinder helt, selv hvis filteret senere fjernes
+        locale: Brugerfladesprog, e-mails og push-notifikationer
+        locked: Godkend manuelt følgeanmodninger for at styre, hvem der følger dig
         password: Brug mindst 8 tegn
-        phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om et trut
-        scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående.
-        setting_display_media_default: Skjul medier markeret som følsomt
-        setting_display_media_hide_all: Skjul altid alle medier
+        phrase: Matches uanset majuskel-/minuskel-brug i teksten eller indholdsadvarsel på et indlæg
+        scopes: Hvilke API'er applikationen vil få adgang til. Vælges en højniveaudstrækning, vil granuleringsvalg være unødvendige.
+        setting_aggregate_reblogs: Vis ikke nye boosts for indlæg boostet for nylig (påvirker kun nyligt modtagne boosts)
+        setting_default_sensitive: Sensitive medier er som standard skjult og kan afsløres med et klik
+        setting_display_media_default: Skjul medier markeret som sensitive
+        setting_display_media_hide_all: Skjul altid medier
         setting_display_media_show_all: Vis altid medier
-        setting_hide_network: Hvem du følger og hvem der følger dig vil ikke blive vist på din profil
-        setting_noindex: Påvirker din offentlige profil og status sider
+        setting_hide_network: Hvem du følger, og hvem som følger dig, skjules på din profil
+        setting_noindex: Påvirker din offentlige profil og statussider
+        setting_show_application: Applikation, hvormed du skrive indlæg, vil fremgå i den detaljerede visning af dine indlæg
+        setting_use_blurhash: Gradienter er baseret på de skjulte grafikelementers farver, men slører alle detaljer
+        setting_use_pending_items: Klik for at vise tidslinjeopdateringer i stedet auto-feedrulning
         username: Dit brugernavn vil være unikt på %{domain}
-        whole_word: Når nøgle ordet eller udtrykket kun er alfanumerisk, vil det kun blive brugt hvis det passer hele ordet
+        whole_word: Når nøgleordet/-udtrykket er rent alfanumerisk, bruges det kun, såfremt det matcher hele ordet
+      domain_allow:
+        domain: Dette domæne vil kunne hente data, og dermed behandle og gemme indgående data, fra denne server
+      email_domain_block:
+        domain: Dette kan være det domænenavn, der vises i e-mailadressen, MX-posten domænet opløser til eller IP'en på den server, som MX-posten opløser til. Disse tjekkes ved brugertilmelding, og tilmeldingen afvises.
+        with_dns_records: Et forsøg på at løse det givne domænes DNS-poster foretages og resultaterne blokeres ligeledes
       featured_tag:
-        name: 'Du kunne måske tænke dig at bruge en af følgende:'
+        name: 'Du vil formentlig ønske at bruge en af flg.:'
       form_challenge:
-        current_password: Du indtræder et sikkert område
+        current_password: Du bevæger dig ind på et sikkert område
       imports:
-        data: CSV fil eksporteret fra en anden Mastodon server
+        data: CSV-fil eksporteret fra anden Mastodon-server
       invite_request:
         text: Dette vil hjælpe os med at gennemgå din ansøgning
       ip_block:
-        comment: Valgfri. Husk hvorfor du har tilføjet denne regel.
+        comment: Valgfri. Husk, hvorfor du tilføjede denne regel.
+        expires_in: IP-adresser er en begrænset ressource, de deles undertiden og skifter ofte hænder. Af denne grund anbefales ubegrænsede IP-blokke ikke.
+        ip: Angiv en IPv4- eller IPv6-adresse. Du kan blokere hele intervaller vha. CIDR-syntaksen. Vær forsigtig med ikke at låse dig ude!
         severities:
-          no_access: Bloker for adgangen til alle ressourcer
+          no_access: Blokér adgang til alle ressourcer
           sign_up_requires_approval: Nye tilmeldinger kræver din godkendelse
+        severity: Vælg, hvad der vil ske med anmodninger fra denne IP
+      rule:
+        text: Beskriv på en kort og enkel form en regel/krav for brugere på denne server
       sessions:
-        otp: 'Indtast to-faktor koden der generes af appen af appen på din telefon eller brug en af din genoprettelses koder:'
+        otp: 'Angiv tofaktorkoden generet af appen på din mobil eller brug en af dine genoprettelses koder:'
+        webauthn: Er det en USB-nøgle, så sørg for at isætte den og, om nødvendigt, åbne den manuelt.
+      tag:
+        name: Du kan kun ændre bogstavtyperne for eksempelvis at gøre det mere læsbart
       user:
-        chosen_languages: Når markeret, vil kun trut i de valgte sprog blive vist på offentlige tidslinjer
+        chosen_languages: Når markeret, vil kun indlæg på de valgte sprog fremgå på offentlige tidslinjer
     labels:
       account:
         fields:
           name: Etiket
           value: Indhold
+      account_alias:
+        acct: Kaldenavn på den gamle konto
+      account_migration:
+        acct: Kaldenavn på den nye konto
       account_warning_preset:
+        text: Tilpasset tekst
         title: Titel
       admin_account_action:
-        include_statuses: Inkluder rapporteret toot i email
-        send_email_notification: Underret brugeren per email
+        include_statuses: Inkludér anmeldte indlæg i e-mailen
+        send_email_notification: Advisér brugeren pr. e-mail
         text: Tilpasset advarsel
         type: Handling
         types:
-          disable: Deaktiver
-          none: Gør intet
-          silence: Silence
-          suspend: Suspendér og slet kontodata uopretteligt
-        warning_preset_id: Brug en forudindstillet advarsel
+          disable: Frys
+          none: Send en advarsel
+          sensitive: Sensitive
+          silence: Begrænsning
+          suspend: Suspendér
+        warning_preset_id: Brug en forvalgsadvarsel
       announcement:
-        all_day: Heldags begivenhed
+        all_day: Heldagsbegivenhed
+        ends_at: Slut på begivenhed
         scheduled_at: Planlæg offentliggørelse
+        starts_at: Start af begivenhed
         text: Bekendtgørelse
       defaults:
-        autofollow: Inviter til at følge din konto
+        autofollow: Invitér til at følge din konto
         avatar: Profilbillede
-        bot: Dette er en robot konto
-        chosen_languages: Filtrer sprog
-        confirm_new_password: Bekræft din nye adgangskode
+        bot: Dette er en bot-konto
+        chosen_languages: Filtrér sprog
+        confirm_new_password: Bekræft ny adgangskode
         confirm_password: Bekræft adgangskode
-        context: Filtrer sammenhænge
-        current_password: Nuværende adgangskode
+        context: Filtrér kontekster
+        current_password: Aktuel adgangskode
         data: Data
-        discoverable: Vis denne konto i oversigten
+        discoverable: Foreslå konto til andre
         display_name: Visningsnavn
-        email: E-mail adresse
-        expires_in: Udløber efter
-        fields: Profil metadata
+        email: E-mailadresse
+        expires_in: Udløb efter
+        fields: Profilmetadata
         header: Overskrift
-        inbox_url: Link til relay indbakken
-        irreversible: Ignorer istedet for at skjule
-        locale: Sprog på interface
-        locked: Lås konto
-        max_uses: Højeste antal benyttelser
+        honeypot: "%{label} (udfyld ikke)"
+        inbox_url: URL til videreformidlingsindbakken
+        irreversible: Fjern istedet for skjul
+        locale: Grænsefladesprog
+        locked: Kræv følgeanmodninger
+        max_uses: Maks. antal afbenyttelser
         new_password: Ny adgangskode
         note: Biografi
-        otp_attempt: To-faktor kode
+        otp_attempt: Tofaktorkode
         password: Adgangskode
-        phrase: Nøgleord eller sætning
+        phrase: Nøgleord/-sætning
         setting_advanced_layout: Aktivér avanceret webgrænseflade
-        setting_auto_play_gif: Afspil automatisk animerede GIFs
-        setting_boost_modal: Vis bekræftelses dialog før du fremhæver
+        setting_aggregate_reblogs: Gruppér boosts på tidslinjer
+        setting_auto_play_gif: Autoafspil animerede GIF'er
+        setting_boost_modal: Vis bekræftelsesdialog inden boosting
+        setting_crop_images: Beskær billeder i ikke-ekspanderede indlæg til 16x9
         setting_default_language: Sprog for opslag
-        setting_default_privacy: Privatliv
-        setting_default_sensitive: Marker altid medier som værende følsomt
-        setting_delete_modal: Vis bekræftelses dialog før du sletter et trut
-        setting_display_media: Visning af medier
+        setting_default_privacy: Fortrolighed for opslag
+        setting_default_sensitive: Markér altid medier som sensitive
+        setting_delete_modal: Vis bekræftelsesdialog før et indlæg slettes
+        setting_disable_swiping: Deaktivér strygebevægelser
+        setting_display_media: Medivisning
         setting_display_media_default: Standard
         setting_display_media_hide_all: Skjul alle
         setting_display_media_show_all: Vis alle
-        setting_expand_spoilers: Udvid altid trut der er markeret med indholdsadvarsler
-        setting_hide_network: Skjul dit netværk
-        setting_noindex: Frameld dig søgemaskiners indeksering
-        setting_reduce_motion: Reducer animationers bevægelse
-        setting_system_font_ui: Brug systemets standard font
-        setting_theme: Tema for side
+        setting_expand_spoilers: Ekspandér altid indlæg markeret med indholdsadvarsler
+        setting_hide_network: Skjul din sociale graf
+        setting_noindex: Fravælg søgemaskineindeksering
+        setting_reduce_motion: Reducér animationsbevægelse
+        setting_system_font_ui: Brug systemets standardskrifttype
+        setting_theme: Webstedstema
         setting_trends: Vis dagens tendenser
-        setting_unfollow_modal: Vis bekræftelses dialog før du stopper med at følge nogen
+        setting_unfollow_modal: Vis bekræftelsesdialog før ophør med at følge nogen
+        setting_use_blurhash: Vis farverige gradienter for skjulte medier
         setting_use_pending_items: Langsom tilstand
-        severity: Omfang
+        severity: Alvorlighed
         sign_in_token_attempt: Sikkerhedskode
         type: Importtype
         username: Brugernavn
-        username_or_email: Brugernavn eller Email
+        username_or_email: Brugernavn eller e-mail
         whole_word: Helt ord
       email_domain_block:
-        with_dns_records: Inkluder MX-optegnelser og IP'er for domænet
+        with_dns_records: Inkludér domænets MX-poster og IP'er
       featured_tag:
         name: Hashtag
       interactions:
-        must_be_follower: Bloker notifikationer fra folk der ikke følger dig
-        must_be_following: Bloker notifikationer fra folk du ikke følger
+        must_be_follower: Blokér notifikationer fra ikke-følgere
+        must_be_following: Blokér notifikationer fra folk du ikke følger
         must_be_following_dm: Bloker direkte beskeder fra folk du ikke følger
       invite:
         comment: Kommentar
@@ -137,29 +191,31 @@ da:
         comment: Kommentar
         ip: IP
         severities:
-          no_access: Bloker adgang
+          no_access: Blokér adgang
           sign_up_requires_approval: Begræns tilmeldinger
         severity: Regel
       notification_emails:
-        digest: Send sammendrag via emails
-        favourite: Send email når nogen favoriserer din status
-        follow: Send e-mail når nogen følger dig
-        follow_request: Send email når nogen anmoder om at følge dig
-        mention: Send e-mail når nogen nævner dig
-        pending_account: Send en email når en ny konto skal gennemgås
-        reblog: Send e-mail når nogen fremhæver din status
-        report: Send email når en ny anmeldelse bliver indsendt
-        trending_tag: Send en email når et ikke-gennemset hashtag trender
+        digest: Send resumé e-mails
+        favourite: Nogen gav dig favoritstatus
+        follow: Nogen begyndte at følge dig
+        follow_request: Nogen anmodede om at følge dig
+        mention: Nogen nævnte dig
+        pending_account: Ny konto kræver gennemgang
+        reblog: Nogen boostede din status
+        report: Ny anmeldelse er indsendt
+        trending_tag: Et ikke-gennemgået hashtag trender
+      rule:
+        text: Regel
       tag:
-        listable: Tillad at dette hashtag vises i søgninger og i bruger oversigten
+        listable: Tillad visning af dette hashtag i søgninger og på profilmappen
         name: Hashtag
-        trendable: Tillad at dette hashtag vises under trends
-        usable: Tillad toots at benytte dette hashtag
+        trendable: Tillad visning af dette hashtag under trends
+        usable: Tillad indlæg at benytte dette hashtag
     'no': Nej
     required:
       mark: "*"
-      text: påkrævet
+      text: krævet
     title:
       sessions:
-        webauthn: Log på ved brug af en af dine sikkerhedskoder
+        webauthn: Brug en af dine sikkerhedskoder til indlogning
     'yes': Ja
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 48c2b08f8..381acc3be 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -14,6 +14,12 @@ de:
         send_email_notification: Benutzer_in wird Bescheid gegeben, was mit dem Konto geschehen ist
         text_html: Optional. Du kannst Beitragssyntax nutzen. Du kannst <a href="%{path}">Warnungsvorlagen</a> benutzen um Zeit zu sparen
         type_html: Wähle aus, was du mit <strong>%{acct}</strong> machen möchtest
+        types:
+          disable: Den Benutzer daran hindern, sein Konto zu verwenden, aber seinen Inhalt nicht löschen oder ausblenden.
+          none: Verwende dies, um eine Warnung an den Benutzer zu senden, ohne eine andere Aktion auszulösen.
+          sensitive: Erzwinge, dass alle Medienanhänge des Benutzers als NSFW markiert werden.
+          silence: Verhindern, dass der Benutzer in der Lage ist, mit der öffentlichen Sichtbarkeit zu posten und seine Beiträge und Benachrichtigungen von Personen zu verstecken, die ihm nicht folgen.
+          suspend: Verhindert jegliche Interaktion von oder zu diesem Konto und löscht dessen Inhalt. Kann innerhalb von 30 Tagen rückgängig gemacht werden.
         warning_preset_id: Optional. Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen
       announcement:
         all_day: Wenn aktiviert werden nur die Daten des Zeitraums angezeigt
@@ -73,6 +79,8 @@ de:
           no_access: Zugriff auf alle Ressourcen blockieren
           sign_up_requires_approval: Neue Anmeldungen erfordern deine Zustimmung
         severity: Wähle aus, was mit Anfragen aus dieser IP passiert
+      rule:
+        text: Beschreibe eine Regel oder Anforderung für Benutzer auf diesem Server. Versuche es kurz und einfach zu halten
       sessions:
         otp: 'Gib die Zwei-Faktor-Authentifizierung von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:'
         webauthn: Wenn es sich um einen USB-Schlüssel handelt, stelle sicher, dass du ihn einsteckst und ihn antippst.
@@ -197,6 +205,8 @@ de:
         reblog: E-Mail senden, wenn jemand meinen Beitrag teilt
         report: E-Mail senden, wenn ein neuer Bericht vorliegt
         trending_tag: E-Mail senden, wenn ein ausstehender Hashtag angesagt ist
+      rule:
+        text: Regel
       tag:
         listable: Erlaube diesem Hashtag im Profilverzeichnis zu erscheinen
         name: Hashtag
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 9cb84bddd..0213b7884 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -14,6 +14,12 @@ el:
         send_email_notification: Ο χρήστης θα λάβει μια εξήγηση του τι συνέβη με τον λογαριασμό του
         text_html: Προαιρετικό. Μπορείς να χρησιμοποιήσεις συντακτικό ενός τουτ. Μπορείς να <a href="%{path}">ορίσεις προκαθορισμένες προειδοποιήσεις</a> για να γλυτώσεις χρόνο
         type_html: Διάλεξε τι θα κανείς με τον  <strong>%{acct}</strong>
+        types:
+          disable: Αποτρέψτε το χρήστη από τη χρήση του λογαριασμού του, αλλά όχι διαγραφή ή απόκρυψη των περιεχομένων του.
+          none: Χρησιμοποιήστε αυτό για να στείλετε μια προειδοποίηση στον χρήστη, χωρίς να ενεργοποιήσετε οποιαδήποτε άλλη ενέργεια.
+          sensitive: Εξαναγκάστε όλα τα συνημμένα πολυμέσα αυτού του χρήστη να επισημαίνονται ως ευαίσθητα.
+          silence: Αποτρέψτε στο χρήστη να μπορεί να δημοσιεύει δημόσια, να αποκρύπτει τις δημοσιεύσεις και τις ειδοποιήσεις του από άτομα που δεν τις ακολουθούν.
+          suspend: Αποτρέψτε οποιαδήποτε αλληλεπίδραση από ή προς αυτόν τον λογαριασμό και διαγράψτε τα περιεχόμενά του. Αναστρέψιμη εντός 30 ημερών.
         warning_preset_id: Προαιρετικό. Μπορείς να προσθέσεις επιπλέον κείμενο μετά το προκαθορισμένο κείμενο
       announcement:
         all_day: Όταν είναι επιλεγμένο, θα εμφανίζονται μόνο οι ημερομηνίες εντός της χρονικής διάρκειας
@@ -67,10 +73,14 @@ el:
         text: Αυτό θα μας βοηθήσει να επιθεωρήσουμε την αίτησή σου
       ip_block:
         comment: Προαιρετικό. Θυμηθείτε γιατί προσθέσατε αυτόν τον κανόνα.
+        expires_in: Οι διευθύνσεις IP είναι ένας πεπερασμένος πόρος, μερικές φορές μοιράζονται και συχνά αλλάζουν χέρια. Για το λόγο αυτό, δεν συνιστώνται αόριστοι αποκλεισμοί διευθύνσεων IP.
+        ip: Εισάγετε μια διεύθυνση IPv4 ή IPv6. Μπορείτε να αποκλείσετε ολόκληρο το εύρος χρησιμοποιώντας τη σύνταξη CIDR. Προσέξτε να μην κλειδώσετε τον εαυτό σας!
         severities:
           no_access: Αποκλεισμός πρόσβασης σε όλους τους πόρους
           sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας
         severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP
+      rule:
+        text: Περιγράψτε έναν κανόνα ή μια απαίτηση για τους χρήστες σε αυτόν τον διακομιστή. Προσπαθήστε να τον κρατήσετε σύντομο και απλό
       sessions:
         otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:'
         webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά.
@@ -180,7 +190,7 @@ el:
         text: Γιατί θέλεις να συμμετάσχεις;
       ip_block:
         comment: Σχόλιο
-        ip: IP
+        ip: Διεύθυνση IP
         severities:
           no_access: Αποκλεισμός πρόσβασης
           sign_up_requires_approval: Περιορισμός εγγραφών
@@ -195,6 +205,8 @@ el:
         reblog: Αποστολή email όταν κάποιος προωθεί τη δημοσίευση σου
         report: Αποστολή email όταν υποβάλλεται νέα καταγγελία
         trending_tag: Αποστολή email όταν μια μη-εγκεκριμένη ετικέτα γίνεται δημοφιλής
+      rule:
+        text: Κανόνας
       tag:
         listable: Εμφάνιση αυτής της ετικέτας στο δημόσιο κατάλογο
         name: Ετικέτα
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index a7aa2631b..008c43b97 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -7,12 +7,12 @@ en:
       account_migration:
         acct: Specify the username@domain of the account you want to move to
       account_warning_preset:
-        text: You can use toot syntax, such as URLs, hashtags and mentions
+        text: You can use post syntax, such as URLs, hashtags and mentions
         title: Optional. Not visible to the recipient
       admin_account_action:
-        include_statuses: The user will see which toots have caused the moderation action or warning
+        include_statuses: The user will see which posts have caused the moderation action or warning
         send_email_notification: The user will receive an explanation of what happened with their account
-        text_html: Optional. You can use toot syntax. You can <a href="%{path}">add warning presets</a> to save time
+        text_html: Optional. You can use post syntax. You can <a href="%{path}">add warning presets</a> to save time
         type_html: Choose what to do with <strong>%{acct}</strong>
         types:
           disable: Prevent the user from using their account, but do not delete or hide their contents.
@@ -26,34 +26,34 @@ en:
         ends_at: Optional. Announcement will be automatically unpublished at this time
         scheduled_at: Leave blank to publish the announcement immediately
         starts_at: Optional. In case your announcement is bound to a specific time range
-        text: You can use toot syntax. Please be mindful of the space the announcement will take up on the user's screen
+        text: You can use post syntax. Please be mindful of the space the announcement will take up on the user's screen
       defaults:
         autofollow: People who sign up through the invite will automatically follow you
         avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
-        bot: This account mainly performs automated actions and might not be monitored
+        bot: Signal to others that the account mainly performs automated actions and might not be monitored
         context: One or multiple contexts where the filter should apply
         current_password: For security purposes please enter the password of the current account
         current_username: To confirm, please enter the username of the current account
         digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
-        discoverable: The profile directory is another way by which your account can reach a wider audience
+        discoverable: Allow your account to be discovered by strangers through recommendations and other features
         email: You will be sent a confirmation e-mail
         fields: You can have up to 4 items displayed as a table on your profile
         header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
         inbox_url: Copy the URL from the frontpage of the relay you want to use
-        irreversible: Filtered toots will disappear irreversibly, even if filter is later removed
+        irreversible: Filtered posts will disappear irreversibly, even if filter is later removed
         locale: The language of the user interface, e-mails and push notifications
-        locked: Requires you to manually approve followers
+        locked: Manually control who can follow you by approving follow requests
         password: Use at least 8 characters
-        phrase: Will be matched regardless of casing in text or content warning of a toot
+        phrase: Will be matched regardless of casing in text or content warning of a post
         scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones.
-        setting_aggregate_reblogs: Do not show new boosts for toots that have been recently boosted (only affects newly-received boosts)
+        setting_aggregate_reblogs: Do not show new boosts for posts that have been recently boosted (only affects newly-received boosts)
         setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click
         setting_display_media_default: Hide media marked as sensitive
         setting_display_media_hide_all: Always hide media
         setting_display_media_show_all: Always show media
-        setting_hide_network: Who you follow and who follows you will not be shown on your profile
+        setting_hide_network: Who you follow and who follows you will be hidden on your profile
         setting_noindex: Affects your public profile and status pages
-        setting_show_application: The application you use to toot will be displayed in the detailed view of your toots
+        setting_show_application: The application you use to post will be displayed in the detailed view of your posts
         setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details
         setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed
         username: Your username will be unique on %{domain}
@@ -87,7 +87,7 @@ en:
       tag:
         name: You can only change the casing of the letters, for example, to make it more readable
       user:
-        chosen_languages: When checked, only toots in selected languages will be displayed in public timelines
+        chosen_languages: When checked, only posts in selected languages will be displayed in public timelines
     labels:
       account:
         fields:
@@ -101,7 +101,7 @@ en:
         text: Preset text
         title: Title
       admin_account_action:
-        include_statuses: Include reported toots in the e-mail
+        include_statuses: Include reported posts in the e-mail
         send_email_notification: Notify the user per e-mail
         text: Custom warning
         type: Action
@@ -128,7 +128,7 @@ en:
         context: Filter contexts
         current_password: Current password
         data: Data
-        discoverable: List this account on the directory
+        discoverable: Suggest account to others
         display_name: Display name
         email: E-mail address
         expires_in: Expire after
@@ -138,7 +138,7 @@ en:
         inbox_url: URL of the relay inbox
         irreversible: Drop instead of hide
         locale: Interface language
-        locked: Lock account
+        locked: Require follow requests
         max_uses: Max number of uses
         new_password: New password
         note: Bio
@@ -149,21 +149,21 @@ en:
         setting_aggregate_reblogs: Group boosts in timelines
         setting_auto_play_gif: Auto-play animated GIFs
         setting_boost_modal: Show confirmation dialog before boosting
-        setting_crop_images: Crop images in non-expanded toots to 16x9
+        setting_crop_images: Crop images in non-expanded posts to 16x9
         setting_default_language: Posting language
         setting_default_privacy: Posting privacy
         setting_default_sensitive: Always mark media as sensitive
-        setting_delete_modal: Show confirmation dialog before deleting a toot
+        setting_delete_modal: Show confirmation dialog before deleting a post
         setting_disable_swiping: Disable swiping motions
         setting_display_media: Media display
         setting_display_media_default: Default
         setting_display_media_hide_all: Hide all
         setting_display_media_show_all: Show all
-        setting_expand_spoilers: Always expand toots marked with content warnings
-        setting_hide_network: Hide your network
+        setting_expand_spoilers: Always expand posts marked with content warnings
+        setting_hide_network: Hide your social graph
         setting_noindex: Opt-out of search engine indexing
         setting_reduce_motion: Reduce motion in animations
-        setting_show_application: Disclose application used to send toots
+        setting_show_application: Disclose application used to send posts
         setting_system_font_ui: Use system's default font
         setting_theme: Site theme
         setting_trends: Show today's trends
@@ -208,10 +208,10 @@ en:
       rule:
         text: Rule
       tag:
-        listable: Allow this hashtag to appear in searches and on the profile directory
+        listable: Allow this hashtag to appear in searches and suggestions
         name: Hashtag
         trendable: Allow this hashtag to appear under trends
-        usable: Allow toots to use this hashtag
+        usable: Allow posts to use this hashtag
     'no': 'No'
     required:
       mark: "*"
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 16b3f7d18..1b884d2f9 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -8,6 +8,9 @@ eo:
         send_email_notification: La uzanto ricevos klarigon pri tio, kio okazis al ties konto
         text_html: Malnepra. Vi povas uzi skribmanierojn de mesaĝoj. Vi povas <a href="%{path}">aldoni avertajn antaŭagordojn</a> por ŝpari tempon
         type_html: Elektu kion fari kun <strong>%{acct}</strong>
+        types:
+          none: Uzu ĉi tion por sendi averton al la uzanto, sen ekigi alian agon.
+          suspend: Malhelpu ajnan interagon de aŭ al ĉi tiu konto kaj forigu ĝian enhavon. Returnebla ene de 30 tagoj.
         warning_preset_id: Malnepra. Vi povas ankoraŭ aldoni propran tekston al la fino de la antaŭagordo
       defaults:
         autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin
@@ -167,6 +170,8 @@ eo:
         reblog: Sendi retmesaĝon kiam iu diskonigas vian mesaĝon
         report: Nova signalo estas sendita
         trending_tag: Nekontrolita kradvorto furoras
+      rule:
+        text: Regulo
       tag:
         name: Kradvorto
         trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj
@@ -175,4 +180,7 @@ eo:
     required:
       mark: "*"
       text: bezonata
+    title:
+      sessions:
+        webauthn: Uzi unu el viaj sekurecaj ŝlosiloj por ensaluti
     'yes': Jes
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index 64bf8c799..a539749c4 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -7,20 +7,26 @@ es-AR:
       account_migration:
         acct: Especificá el nombredeusuario@dominio de la cuenta a la que querés mudarte
       account_warning_preset:
-        text: Podés usar sintaxis de toots, como direcciones web, etiquetas y menciones
+        text: Podés usar sintaxis de mensajes, como direcciones web, etiquetas y menciones
         title: Opcional. No visible para el destinatario
       admin_account_action:
-        include_statuses: El usuario verá qué toots causaron la acción de moderación o advertencia
+        include_statuses: El usuario verá qué mensajes causaron la acción de moderación o advertencia
         send_email_notification: El usuario recibirá una explicación de lo que sucedió con su cuenta
-        text_html: Opcional. Podés usar sintaxis de toots. Podés <a href="%{path}">agregar preajustes de advertencia</a> para ahorrar tiempo
+        text_html: Opcional. Podés usar sintaxis de mensajes. Podés <a href="%{path}">agregar preajustes de advertencia</a> para ahorrar tiempo
         type_html: Elegí qué hacer con <strong>%{acct}</strong>
+        types:
+          disable: Evitar que el usuario use su cuenta, pero no elimina ni oculta sus contenidos.
+          none: Usá esto para enviarle una advertencia al usuario, sin ejecutar ninguna otra acción.
+          sensitive: Forzar a que todos los adjuntos de medios de este usuario sean marcados como sensibles.
+          silence: Evitar que el usuario pueda publicar mensajes, ocultando sus publicaciones y notificaciones a cuentas que no lo siguen.
+          suspend: Evitar cualquier interacción desde o hacia esta cuenta, y eliminar su contenido. Reversible en un plazo de 30 días.
         warning_preset_id: Opcional. Todavía podés agregar texto personalizado al final del preajuste
       announcement:
         all_day: Cuando esté seleccionado, sólo se mostrarán las fechas del rango de tiempo
         ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
         scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente
         starts_at: Opcional. En caso de que tu anuncio esté vinculado a un rango de tiempo específico
-        text: Podés usar sintaxis de toots. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
+        text: Podés usar sintaxis de mensajes. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
       defaults:
         autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
         avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles'
@@ -29,25 +35,25 @@ es-AR:
         current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual
         current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual
         digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia
-        discoverable: El directorio del perfil es otra forma en la que tu cuenta puede llegar a un público más amplio
+        discoverable: Permití que tu cuenta sea descubierta por extraños a través de recomendaciones y otras funciones
         email: Se te enviará un correo electrónico de confirmación
         fields: Podés tener hasta 4 elementos mostrados en una tabla en tu perfil
         header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles'
         inbox_url: Copiá la dirección web desde la página principal del relé que querés usar
-        irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después
+        irreversible: Los mensajes filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después
         locale: El idioma de la interface de usuario, correos electrónicos y notificaciones push
-        locked: Requiere que manualmente aprobés seguidores
+        locked: Controlá manualmente quién puede seguirte al aprobar solicitudes de seguimiento
         password: Usá al menos 8 caracteres
-        phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un toot
+        phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un mensaje
         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionás el alcance de nivel más alto, no necesitás seleccionar las individuales.
-        setting_aggregate_reblogs: No mostrar nuevos retoots de los toots que fueron recientemente retooteados (sólo afecta a los retoots recibidos recientemente)
+        setting_aggregate_reblogs: No mostrar nuevas adhesiones de los mensajes que fueron recientemente adheridos (sólo afecta a las adhesiones recibidas recientemente)
         setting_default_sensitive: El contenido de medios sensibles está oculto predeterminadamente y puede ser mostrado con un clic
         setting_display_media_default: Ocultar medios marcados como sensibles
         setting_display_media_hide_all: Siempre ocultar todos los medios
         setting_display_media_show_all: Siempre mostrar todos los medios
-        setting_hide_network: A quiénes seguís y tus seguidores no serán mostrados en tu perfil
+        setting_hide_network: Las cuentas que seguís y tus seguidores serán ocultados en tu perfil
         setting_noindex: Afecta a tu perfil público y páginas de estado
-        setting_show_application: La aplicación que usás para tootear se mostrará en la vista detallada de tus toots
+        setting_show_application: La aplicación que usás para enviar mensajes se mostrará en la vista detallada de tus mensajes
         setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
         setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo
         username: Tu nombre de usuario será único en %{domain}
@@ -73,13 +79,15 @@ es-AR:
           no_access: Bloquear acceso a todos los recursos
           sign_up_requires_approval: Los nuevos registros requerirán tu aprobación
         severity: Elegí lo que pasará con las solicitudes desde esta dirección IP
+      rule:
+        text: Describí una regla o requisito para los usuarios de este servidor. Intentá hacerla corta y sencilla
       sessions:
         otp: 'Ingresá el código de autenticación de dos factores generado por la aplicación en tu dispositivo, o usá uno de tus códigos de recuperación:'
         webauthn: Si es una llave USB, asegurate de insertarla y, de ser necesario, tocarla.
       tag:
         name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible
       user:
-        chosen_languages: Cuando esté marcado, sólo se mostrarán los toots en los idiomas seleccionados en las líneas temporales públicas
+        chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas
     labels:
       account:
         fields:
@@ -93,7 +101,7 @@ es-AR:
         text: Texto predefinido
         title: Título
       admin_account_action:
-        include_statuses: Incluir en el correo electrónico a los toots denunciados
+        include_statuses: Incluir en el correo electrónico los mensajes denunciados
         send_email_notification: Notificar al usuario por correo electrónico
         text: Advertencia personalizada
         type: Acción
@@ -120,7 +128,7 @@ es-AR:
         context: Filtrar contextos
         current_password: Contraseña actual
         data: Datos
-        discoverable: Listar esta cuenta en el directorio
+        discoverable: Sugerir cuenta a otros
         display_name: Nombre para mostrar
         email: Dirección de correo electrónico
         expires_in: Vence después de
@@ -130,7 +138,7 @@ es-AR:
         inbox_url: Dirección web de la bandeja de entrada del relé
         irreversible: Dejar en lugar de ocultar
         locale: Idioma de la interface
-        locked: Hacer privada esta cuenta
+        locked: Requerir solicitudes de seguimiento
         max_uses: Número máximo de usos
         new_password: Nueva contraseña
         note: Biografía
@@ -138,24 +146,24 @@ es-AR:
         password: Contraseña
         phrase: Palabra clave o frase
         setting_advanced_layout: Habilitar interface web avanzada
-        setting_aggregate_reblogs: Agrupar retoots en las líneas temporales
+        setting_aggregate_reblogs: Agrupar adhesiones en las líneas temporales
         setting_auto_play_gif: Reproducir automáticamente los GIFs animados
-        setting_boost_modal: Mostrar diálogo de confirmación antes de retootear
-        setting_crop_images: Recortar imágenes en toots no expandidos a 16x9
-        setting_default_language: Idioma de tus toots
-        setting_default_privacy: Privacidad de toots
+        setting_boost_modal: Mostrar diálogo de confirmación antes de adherir
+        setting_crop_images: Recortar imágenes en mensajes no expandidos a 16x9
+        setting_default_language: Idioma de tus mensajes
+        setting_default_privacy: Privacidad de mensajes
         setting_default_sensitive: Siempre marcar medios como sensibles
-        setting_delete_modal: Mostrar diálogo de confirmación antes de eliminar un toot
+        setting_delete_modal: Mostrar diálogo de confirmación antes de eliminar un mensaje
         setting_disable_swiping: Deshabilitar movimientos de deslizamiento
         setting_display_media: Visualización de medios
         setting_display_media_default: Predeterminada
         setting_display_media_hide_all: Ocultar todo
         setting_display_media_show_all: Mostrar todo
-        setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido
-        setting_hide_network: Ocultar tu red
+        setting_expand_spoilers: Siempre expandir los mensajes marcados con advertencias de contenido
+        setting_hide_network: Ocultá tu gráfica social
         setting_noindex: Excluirse del indexado de motores de búsqueda
         setting_reduce_motion: Reducir el movimiento de las animaciones
-        setting_show_application: Mostrar aplicación usada para tootear
+        setting_show_application: Mostrar aplicación usada para enviar mensajes
         setting_system_font_ui: Utilizar la tipografía predeterminada del sistema
         setting_theme: Tema del sitio
         setting_trends: Mostrar las tendencias de hoy
@@ -189,19 +197,21 @@ es-AR:
         severity: Regla
       notification_emails:
         digest: Enviar correos electrónicos compilatorios
-        favourite: Una cuenta marca tu toot como favorito
+        favourite: Una cuenta marca tu mensaje como favorito
         follow: Una cuenta te sigue
         follow_request: Una cuenta solicita seguirte
         mention: Una cuenta te menciona
         pending_account: Una nueva cuenta necesita revisión
-        reblog: Una cuenta retootea tu toot
+        reblog: Una cuenta adhiere a tu mensaje
         report: Se envía una nueva denuncia
         trending_tag: Una etiqueta no revisada está en tendencia
+      rule:
+        text: Regla
       tag:
-        listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio de perfiles
+        listable: Permitir que esta etiqueta aparezca en las búsquedas y en las sugerencias
         name: Etiqueta
         trendable: Permitir que esta etiqueta aparezca bajo tendencias
-        usable: Permitir a los toots usar esta etiqueta
+        usable: Permitir a los mensajes usar esta etiqueta
     'no': 'No'
     required:
       mark: "*"
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
new file mode 100644
index 000000000..3ced0e244
--- /dev/null
+++ b/config/locales/simple_form.es-MX.yml
@@ -0,0 +1,219 @@
+---
+es-MX:
+  simple_form:
+    hints:
+      account_alias:
+        acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar
+      account_migration:
+        acct: Especifique el nombre de usuario@dominio de la cuenta a la cual se desea migrar
+      account_warning_preset:
+        text: Puede usar sintaxis de toots, como URLs, hashtags y menciones
+        title: Opcional. No visible para el destinatario
+      admin_account_action:
+        include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia
+        send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta
+        text_html: Opcional. Puede usar sintaxis de toots. Puede añadir <a href="%{path}">configuraciones predefinidas de advertencia</a> para ahorrar tiempo
+        type_html: Elige qué hacer con <strong>%{acct}</strong>
+        types:
+          disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos.
+          none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción.
+          sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles.
+          silence: Evitar que el usuario pueda tootear con visibilidad pública, ocultar sus publicaciones y notificaciones a personas que no lo siguen.
+          suspend: Evitar cualquier interacción desde o hacia esta cuenta y eliminar su contenido. Reversible en un plazo de 30 días.
+        warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida
+      announcement:
+        all_day: Cuando está seleccionado solo se mostrarán las fechas del rango de tiempo
+        ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
+        scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente
+        starts_at: Opcional. En caso de que su anuncio esté vinculado a un intervalo de tiempo específico
+        text: Puedes usar la sintaxis toot. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
+      defaults:
+        autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
+        avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+        bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada
+        context: Uno o múltiples contextos en los que debe aplicarse el filtro
+        current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual
+        current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual
+        digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
+        discoverable: El directorio del perfil es otra forma en la que su cuenta puede llegar a un público más amplio
+        email: Se le enviará un correo de confirmación
+        fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil
+        header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+        inbox_url: Copia la URL de la página principal del relés que quieres utilizar
+        irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
+        locale: El idioma de la interfaz de usuario, correos y notificaciones push
+        locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores
+        password: Utilice al menos 8 caracteres
+        phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot
+        scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
+        setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente)
+        setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click
+        setting_display_media_default: Ocultar contenido multimedia marcado como sensible
+        setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
+        setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
+        setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil
+        setting_noindex: Afecta a tu perfil público y páginas de estado
+        setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots
+        setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
+        setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed
+        username: Tu nombre de usuario será único en %{domain}
+        whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra
+      domain_allow:
+        domain: Este dominio podrá obtener datos de este servidor y los datos entrantes serán procesados y archivados
+      email_domain_block:
+        domain: Puede ser el nombre de dominio que aparece en la dirección de correo, el registro MX hacia el cual resuelve el dominio, o la IP del servidor hacia el cual resuelve ese registro MX. Esto se comprobará en el momento del alta del usuario y el alta se rechazará.
+        with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también puestos en lista negra
+      featured_tag:
+        name: 'Puede que quieras usar uno de estos:'
+      form_challenge:
+        current_password: Estás entrando en un área segura
+      imports:
+        data: Archivo CSV exportado desde otra instancia de Mastodon
+      invite_request:
+        text: Esto nos ayudará a revisar su aplicación
+      ip_block:
+        comment: Opcional. Recuerda por qué has añadido esta regla.
+        expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida.
+        ip: Introduzca una dirección IPv4 o IPv6. Puede bloquear rangos completos usando la sintaxis CIDR. ¡Tenga cuidado de no quedarse fuera!
+        severities:
+          no_access: Bloquear acceso a todos los recursos
+          sign_up_requires_approval: Nuevos registros requerirán su aprobación
+        severity: Elegir lo que pasará con las peticiones desde esta IP
+      rule:
+        text: Describe una norma o requisito para los usuarios de este servidor. Intenta hacerla corta y sencilla
+      sessions:
+        otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:'
+        webauthn: Si es una tecla USB, asegúrese de insertarla y, si es necesario, púlsela.
+      tag:
+        name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
+      user:
+        chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos
+    labels:
+      account:
+        fields:
+          name: Etiqueta
+          value: Contenido
+      account_alias:
+        acct: Maneja la cuenta antigua
+      account_migration:
+        acct: Maneja la cuenta nueva
+      account_warning_preset:
+        text: Texto predefinido
+        title: Título
+      admin_account_action:
+        include_statuses: Incluir en el correo electrónico a los toots denunciados
+        send_email_notification: Notificar al usuario por correo electrónico
+        text: Aviso personalizado
+        type: Acción
+        types:
+          disable: Deshabilitar
+          none: No hacer nada
+          sensitive: Sensible
+          silence: Silenciar
+          suspend: Suspender y eliminar de forma irreversible la información de la cuenta
+        warning_preset_id: Usar un aviso predeterminado
+      announcement:
+        all_day: Evento de todo el día
+        ends_at: Fin del evento
+        scheduled_at: Programar publicación
+        starts_at: Comienzo del evento
+        text: Anuncio
+      defaults:
+        autofollow: Invitar a seguir tu cuenta
+        bot: Esta es una cuenta bot
+        chosen_languages: Filtrar idiomas
+        confirm_new_password: Confirmar nueva contraseña
+        confirm_password: Confirmar contraseña
+        context: Filtrar contextos
+        current_password: Contraseña actual
+        data: Información
+        discoverable: Listar esta cuenta en el directorio
+        display_name: Nombre para mostrar
+        email: Dirección de correo electrónico
+        expires_in: Expirar tras
+        fields: Metadatos de perfil
+        header: Img. cabecera
+        honeypot: "%{label} (no rellenar)"
+        inbox_url: URL de la entrada de relés
+        irreversible: Dejar en lugar de ocultar
+        locale: Idioma
+        locked: Hacer privada esta cuenta
+        max_uses: Máx. número de usos
+        new_password: Nueva contraseña
+        note: Biografía
+        otp_attempt: Código de dos factores
+        password: Contraseña
+        phrase: Palabra clave o frase
+        setting_advanced_layout: Habilitar interfaz web avanzada
+        setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo
+        setting_auto_play_gif: Reproducir automáticamente los GIFs animados
+        setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot
+        setting_crop_images: Recortar a 16x9 las imágenes de los toots no expandidos
+        setting_default_language: Idioma de publicación
+        setting_default_privacy: Privacidad de publicaciones
+        setting_default_sensitive: Marcar siempre imágenes como sensibles
+        setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot
+        setting_disable_swiping: Deshabilitar movimientos de deslizamiento
+        setting_display_media: Visualización multimedia
+        setting_display_media_default: Por defecto
+        setting_display_media_hide_all: Ocultar todo
+        setting_display_media_show_all: Mostrar todo
+        setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido
+        setting_hide_network: Ocultar tu red
+        setting_noindex: Excluirse del indexado de motores de búsqueda
+        setting_reduce_motion: Reducir el movimiento de las animaciones
+        setting_show_application: Mostrar aplicación usada para publicar toots
+        setting_system_font_ui: Utilizar la tipografía por defecto del sistema
+        setting_theme: Tema del sitio
+        setting_trends: Mostrar las tendencias de hoy
+        setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien
+        setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto
+        setting_use_pending_items: Modo lento
+        severity: Severidad
+        sign_in_token_attempt: Código de seguridad
+        type: Importar tipo
+        username: Nombre de usuario
+        username_or_email: Usuario o Email
+        whole_word: Toda la palabra
+      email_domain_block:
+        with_dns_records: Incluye los registros MX y las IP del dominio
+      featured_tag:
+        name: Etiqueta
+      interactions:
+        must_be_follower: Bloquear notificaciones de personas que no te siguen
+        must_be_following: Bloquear notificaciones de personas que no sigues
+        must_be_following_dm: Bloquear mensajes directos de la gente que no sigues
+      invite:
+        comment: Comentar
+      invite_request:
+        text: "¿Por qué quiere unirse usted?"
+      ip_block:
+        comment: Comentario
+        severities:
+          no_access: Bloquear acceso
+          sign_up_requires_approval: Limitar registros
+        severity: Regla
+      notification_emails:
+        digest: Enviar resumen de correos electrónicos
+        favourite: Enviar correo electrónico cuando alguien de a favorito en su publicación
+        follow: Enviar correo electrónico cuando alguien te siga
+        follow_request: Enviar correo electrónico cuando alguien solicita seguirte
+        mention: Enviar correo electrónico cuando alguien te mencione
+        pending_account: Enviar correo electrónico cuando una nueva cuenta necesita revisión
+        reblog: Enviar correo electrónico cuando alguien comparta su publicación
+        report: Enviar un correo cuando se envía un nuevo informe
+        trending_tag: Enviar correo electrónico cuando una etiqueta no revisada está de tendencia
+      rule:
+        text: Norma
+      tag:
+        listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
+        name: Etiqueta
+        trendable: Permitir que esta etiqueta aparezca bajo tendencias
+        usable: Permitir a los toots usar esta etiqueta
+    recommended: Recomendado
+    required:
+      text: necesario
+    title:
+      sessions:
+        webauthn: Utilice una de sus claves de seguridad para iniciar sesión
+    'yes': Sí
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 5608b529c..c6291abdf 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -7,20 +7,26 @@ es:
       account_migration:
         acct: Especifique el nombre de usuario@dominio de la cuenta a la cual se desea migrar
       account_warning_preset:
-        text: Puede usar sintaxis de toots, como URLs, hashtags y menciones
+        text: Puede usar sintaxis de publicaciones, como URLs, hashtags y menciones
         title: Opcional. No visible para el destinatario
       admin_account_action:
-        include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia
+        include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia
         send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta
-        text_html: Opcional. Puede usar sintaxis de toots. Puede añadir <a href="%{path}">configuraciones predefinidas de advertencia</a> para ahorrar tiempo
+        text_html: Opcional. Puede usar sintaxis de publicaciones. Puede añadir <a href="%{path}">configuraciones predefinidas de advertencia</a> para ahorrar tiempo
         type_html: Elige qué hacer con <strong>%{acct}</strong>
+        types:
+          disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos.
+          none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción.
+          sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles.
+          silence: Evitar que el usuario pueda publicar con visibilidad pública, oculta sus mensajes y notificaciones a personas que no lo siguen.
+          suspend: Evitar cualquier interacción desde o hacia esta cuenta y eliminar su contenido. Reversible en un plazo de 30 días.
         warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida
       announcement:
         all_day: Cuando está seleccionado solo se mostrarán las fechas del rango de tiempo
         ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
         scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente
         starts_at: Opcional. En caso de que su anuncio esté vinculado a un intervalo de tiempo específico
-        text: Puedes usar la sintaxis toot. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
+        text: Puedes usar la sintaxis de publicaciones. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
       defaults:
         autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
         avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
@@ -34,20 +40,20 @@ es:
         fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil
         header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
         inbox_url: Copia la URL de la página principal del relés que quieres utilizar
-        irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
+        irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
         locale: El idioma de la interfaz de usuario, correos y notificaciones push
         locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores
         password: Utilice al menos 8 caracteres
-        phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot
+        phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación
         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
-        setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente)
+        setting_aggregate_reblogs: No mostrar nuevos retoots para las publicaciones que han sido recientemente retooteadas (sólo afecta a los retoots recibidos recientemente)
         setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click
         setting_display_media_default: Ocultar contenido multimedia marcado como sensible
         setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
         setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
         setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil
         setting_noindex: Afecta a tu perfil público y páginas de estado
-        setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots
+        setting_show_application: La aplicación que utiliza usted para publicar publicaciones se mostrará en la vista detallada de sus publicaciones
         setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
         setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed
         username: Tu nombre de usuario será único en %{domain}
@@ -73,13 +79,15 @@ es:
           no_access: Bloquear acceso a todos los recursos
           sign_up_requires_approval: Nuevos registros requerirán su aprobación
         severity: Elegir lo que pasará con las peticiones desde esta IP
+      rule:
+        text: Describe una norma o requisito para los usuarios de este servidor. Intenta hacerla corta y sencilla
       sessions:
         otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:'
         webauthn: Si es una tecla USB, asegúrese de insertarla y, si es necesario, púlsela.
       tag:
         name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
       user:
-        chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos
+        chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas
     labels:
       account:
         fields:
@@ -93,7 +101,7 @@ es:
         text: Texto predefinido
         title: Título
       admin_account_action:
-        include_statuses: Incluir en el correo electrónico a los toots denunciados
+        include_statuses: Incluir en el correo electrónico a las publicaciones denunciadas
         send_email_notification: Notificar al usuario por correo electrónico
         text: Aviso personalizado
         type: Acción
@@ -112,7 +120,6 @@ es:
         text: Anuncio
       defaults:
         autofollow: Invitar a seguir tu cuenta
-        avatar: Avatar
         bot: Esta es una cuenta bot
         chosen_languages: Filtrar idiomas
         confirm_new_password: Confirmar nueva contraseña
@@ -140,22 +147,22 @@ es:
         setting_advanced_layout: Habilitar interfaz web avanzada
         setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo
         setting_auto_play_gif: Reproducir automáticamente los GIFs animados
-        setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot
-        setting_crop_images: Recortar a 16x9 las imágenes de los toots no expandidos
+        setting_boost_modal: Mostrar ventana de confirmación antes de retootear
+        setting_crop_images: Recortar a 16x9 las imágenes de las publicaciones no expandidas
         setting_default_language: Idioma de publicación
         setting_default_privacy: Privacidad de publicaciones
         setting_default_sensitive: Marcar siempre imágenes como sensibles
-        setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot
+        setting_delete_modal: Mostrar diálogo de confirmación antes de borrar una publicación
         setting_disable_swiping: Deshabilitar movimientos de deslizamiento
         setting_display_media: Visualización multimedia
         setting_display_media_default: Por defecto
         setting_display_media_hide_all: Ocultar todo
         setting_display_media_show_all: Mostrar todo
-        setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido
+        setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido
         setting_hide_network: Ocultar tu red
         setting_noindex: Excluirse del indexado de motores de búsqueda
         setting_reduce_motion: Reducir el movimiento de las animaciones
-        setting_show_application: Mostrar aplicación usada para publicar toots
+        setting_show_application: Mostrar aplicación usada para publicar publicaciones
         setting_system_font_ui: Utilizar la tipografía por defecto del sistema
         setting_theme: Tema del sitio
         setting_trends: Mostrar las tendencias de hoy
@@ -182,7 +189,6 @@ es:
         text: "¿Por qué quiere unirse usted?"
       ip_block:
         comment: Comentario
-        ip: IP
         severities:
           no_access: Bloquear acceso
           sign_up_requires_approval: Limitar registros
@@ -197,14 +203,15 @@ es:
         reblog: Enviar correo electrónico cuando alguien comparta su publicación
         report: Enviar un correo cuando se envía un nuevo informe
         trending_tag: Enviar correo electrónico cuando una etiqueta no revisada está de tendencia
+      rule:
+        text: Norma
       tag:
         listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
         name: Etiqueta
         trendable: Permitir que esta etiqueta aparezca bajo tendencias
-        usable: Permitir a los toots usar esta etiqueta
-    'no': 'No'
+        usable: Permitir a las publicaciones usar esta etiqueta
+    recommended: Recomendado
     required:
-      mark: "*"
       text: necesario
     title:
       sessions:
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
index 93154745d..e3c1a0b98 100644
--- a/config/locales/simple_form.et.yml
+++ b/config/locales/simple_form.et.yml
@@ -184,6 +184,5 @@ et:
         usable: Luba tuututustel seda silti kasutada
     'no': Ei
     required:
-      mark: "*"
       text: kohustuslik
     'yes': Jah
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 41eded347..d1301c66f 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -14,6 +14,12 @@ eu:
         send_email_notification: Erabiltzaileak bere kontuarekin gertatutakoaren azalpen bat jasoko du
         text_html: Aukerakoa. Toot sintaxia erabili dezakezu. <a href="%{path}">Abisu aurre-ezarpenak</a> gehitu ditzakezu denbora aurrezteko
         type_html: Erabaki zer egin <strong>%{acct}</strong> kontuarekin
+        types:
+          disable: Erabiltzaileari bere kontua erabiltzea eragotzi, baina ez ezabatu edo ezkutatu bere edukiak.
+          none: Erabili hau erabiltzaileari abisu bat bidaltzeko, beste ekintzarik abiarazi gabe.
+          sensitive: Behartu erabiltzaile honen multimedia eranskin guztiak hunkigarri gisa markatzea.
+          silence: Eragotzi erabiltzaileak ikusgaitasun publikoarekin argitaratzea, ezkutatu bere bidalketa eta jakinarazpenak jarraitzen ez duten pertsonei.
+          suspend: Eragotzi kontu honek inolako interakziorik izatea eta ezabatu bere edukiak. Atzera bota daiteke 30 egun igaro aurretik.
         warning_preset_id: Aukerakoa. Zure testua gehitu dezakezu aurre-ezarpenaren ostean
       announcement:
         all_day: Markatutakoan soilik denbora barrutiko datak erakutsiko dira
@@ -65,8 +71,19 @@ eu:
         data: Beste Mastodon zerbitzari batetik esportatutako CSV fitxategia
       invite_request:
         text: Honek zure eskaera berrikustean lagunduko digu
+      ip_block:
+        comment: Hautazkoa. Gogoratu zergatik gehitu duzun arau hau.
+        expires_in: IP helbideak baliabide mugatua dira, batzuetan partekatuak dira eta maiz aldatzen dira jabez. Horregatik, ez da gomendatzen IPak mugagabe blokeatzea.
+        ip: Sartu IPv4 edo IPv6 helbide bat. Tarte osoak blokeatu ditzakezu CIDR sintaxia erabiliz. Kontuz zure burua blokeatu gabe!
+        severities:
+          no_access: Blokeatu baliabide guztietarako sarbidea
+          sign_up_requires_approval: Izen emate berriek zure onarpena beharko dute
+        severity: Aukeratu zer gertatuko den IP honetatik datozen eskaerekin
+      rule:
+        text: Deskribatu zerbitzari honetako erabiltzaileentzako arau edo betekizun bat. Saiatu labur eta sinple idazten
       sessions:
         otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:'
+        webauthn: USB gako bat bada, ziurtatu sartu duzula, eta behar izanez gero ukitu ezazu.
       tag:
         name: Letrak maiuskula/minuskulara aldatu ditzakezu besterik ez, adibidez irakurterrazago egiteko
       user:
@@ -91,6 +108,7 @@ eu:
         types:
           disable: Desaktibatu
           none: Ez egin ezer
+          sensitive: Hunkigarria
           silence: Isiltarazi
           suspend: Kanporatu eta behin betiko ezabatu kontuko datuak
         warning_preset_id: Erabili aurre-ezarritako abisu bat
@@ -116,6 +134,7 @@ eu:
         expires_in: Iraungitzea
         fields: Profilaren metadatuak
         header: Goiburua
+        honeypot: "%{label} (ez bete)"
         inbox_url: Errelearen sarrera ontziaren URLa
         irreversible: Baztertu ezkutatu ordez
         locale: Interfazearen hizkuntza
@@ -135,6 +154,7 @@ eu:
         setting_default_privacy: Mezuen pribatutasuna
         setting_default_sensitive: Beti markatu edukiak hunkigarri gisa
         setting_delete_modal: Erakutsi baieztapen elkarrizketa-koadroa toot bat ezabatu aurretik
+        setting_disable_swiping: Desgaitu hatza pasatzeko mugimenduak
         setting_display_media: Multimedia bistaratzea
         setting_display_media_default: Lehenetsia
         setting_display_media_hide_all: Ezkutatu guztia
@@ -151,6 +171,7 @@ eu:
         setting_use_blurhash: Erakutsi gradiente koloretsuak ezkutatutako multimediaren ordez
         setting_use_pending_items: Modu geldoa
         severity: Larritasuna
+        sign_in_token_attempt: Segurtasun kodea
         type: Inportazio mota
         username: Erabiltzaile-izena
         username_or_email: Erabiltzaile-izena edo e-mail helbidea
@@ -167,6 +188,13 @@ eu:
         comment: Iruzkina
       invite_request:
         text: Zergatik elkartu nahi duzu?
+      ip_block:
+        comment: Iruzkina
+        ip: IP-a
+        severities:
+          no_access: Blokeatu sarbidea
+          sign_up_requires_approval: Mugatu izen emateak
+        severity: Araua
       notification_emails:
         digest: Bidali laburpenak e-mail bidez
         favourite: Bidali e-mail bat norbaitek zure mezua gogoko duenean
@@ -177,6 +205,8 @@ eu:
         reblog: Bidali e-mail bat norbaitek zure mezuari bultzada ematen badio
         report: Bidali e-maila txosten berri bat aurkezten denean
         trending_tag: Bidali e-mail bat errebisatu gabeko traola bat joeran dagoenean
+      rule:
+        text: Araua
       tag:
         listable: Baimendu traola hau bilaketetan agertzea eta profilen direktorioan
         name: Traola
@@ -186,4 +216,7 @@ eu:
     required:
       mark: "*"
       text: beharrezkoa
+    title:
+      sessions:
+        webauthn: Erabili zure segurtasun gakoetako bat saioa hasteko
     'yes': Bai
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index a081f81e5..ed69f5fe4 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -14,6 +14,12 @@ fa:
         send_email_notification: توضیحی که کاربر می‌بینید که برای حسابش چه رخ داده است
         text_html: اختیاری. می‌توانید مثل بوق‌های معمولی بنویسید. می‌توانید برای صرفه‌جویی در زمان <a href="%{path}">هشدارهای ازپیش‌آماده بیفزایید</a>
         type_html: با حساب <strong>%{acct}</strong> می‌خواهید چه کار کنید؟‌
+        types:
+          disable: از استفادهٔ کاربر از حسابش جلوگیری می‌کند، ولی محتوایش را حذف یا پنهان نمی‌کند.
+          none: برای فرستادن هشداری به کاربر، بدون هیچ کنش دیگری استفاده کنید.
+          sensitive: اجبار همهٔ پیوست‌های رسانه‌ای این کاربر برای نشانه‌گذاری به عنوان حساس.
+          silence: جلوگیری از توانایی کاربر برای فرستادن با نمایانی عمومی، نهفتن فرسته‌ها و آگاهی‌هایش از افرادی که دنبالش نمی‌کنند.
+          suspend: جلوگیری از هر برهم‌کنشی از یا به این حساب و حذف محتواهایش. قابل بازگشت در عرض ۳۰ روز.
         warning_preset_id: اختیاری. همچنان می‌توانید در پایان متن آماده چیزی بیفزایید
       announcement:
         all_day: هنگام گزینش، تنها تاریخ‌های بازهٔ زمانی نمایش داده خواهند شد
@@ -182,7 +188,7 @@ fa:
         text: چرا می‌خواهید عضو شوید؟
       ip_block:
         comment: توضیح
-        ip: IP
+        ip: آی‌پی
         severities:
           no_access: بن کردن دسترسی
           sign_up_requires_approval: محدود کردن ثبت نام‌ها
@@ -197,6 +203,8 @@ fa:
         reblog: وقتی کسی نوشتهٔ شما را بازبوقید ایمیل بفرست
         report: وقتی گزارش تازه‌ای فرستاده شد ایمیل بفرست
         trending_tag: وقتی یک برچسب بازبینی‌نشده پرطرفدار شد ایمیل بفرست
+      rule:
+        text: قانون
       tag:
         listable: بگذارید که این برچسب در جستجوها و در فهرست گزیدهٔ کاربران نمایش داده شود
         name: برچسب
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index 74eda70fc..31227fac8 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -129,6 +129,5 @@ fi:
         usable: Salli tuuttauksien käyttää tätä aihetunnistetta
     'no': Ei
     required:
-      mark: "*"
       text: pakollinen tieto
     'yes': Kyllä
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index fa90dfe55..1690e11bc 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -7,20 +7,26 @@ fr:
       account_migration:
         acct: Spécifiez l’identifiant@domaine du compte vers lequel vous souhaitez déménager
       account_warning_preset:
-        text: Vous pouvez utiliser la syntaxe des pouets, comme les URLs, les hashtags et les mentions
+        text: Vous pouvez utiliser la syntaxe des messages, comme les URL, les hashtags et les mentions
         title: Facultatif. Invisible pour le destinataire
       admin_account_action:
-        include_statuses: L’utilisateur·rice verra quels sont les pouets qui ont provoqué l’action de modération ou l’avertissement
+        include_statuses: L’utilisateur·rice verra quels messages sont la source de l’action de modération ou de l’avertissement
         send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte
-        text_html: Optionnel. Vous pouvez utilisez la syntaxe des pouets. Vous pouvez <a href="%{path}">ajouter des présélections d’attention</a> pour économiser du temps
+        text_html: Optionnel. Vous pouvez utilisez la syntaxe des messages. Vous pouvez <a href="%{path}">ajouter des modèles d’avertissement</a> pour économiser du temps
         type_html: Choisir que faire avec <strong>%{acct}</strong>
+        types:
+          disable: Empêcher l’utilisateur·rice d’utiliser son compte, mais ne pas supprimer ou masquer son contenu.
+          none: Utilisez ceci pour envoyer un avertissement à l’utilisateur·rice, sans déclencher aucune autre action.
+          sensitive: Forcer toutes les pièces jointes de cet·te utilisateur·rice à être signalées comme sensibles.
+          silence: Empêcher l’utilisateur·rice de poster avec une visibilité publique, cacher ses messages et ses notifications aux personnes qui ne les suivent pas.
+          suspend: Empêcher toute interaction depuis ou vers ce compte et supprimer son contenu. Réversible dans les 30 jours.
         warning_preset_id: Optionnel. Vous pouvez toujours ajouter un texte personnalisé à la fin de la présélection
       announcement:
         all_day: Si coché, seules les dates de l’intervalle de temps seront affichées
         ends_at: Optionnel. L’annonce sera automatiquement dépubliée à ce moment
         scheduled_at: Laisser vide pour publier l’annonce immédiatement
         starts_at: Optionnel. Si votre annonce est liée à une période spécifique
-        text: Vous pouvez utiliser la syntaxe d’un pouet. Veuillez prendre en compte l’espace que l'annonce prendra sur l’écran de l'utilisateur
+        text: Vous pouvez utiliser la syntaxe des messages. Veuillez prendre en compte l’espace que l'annonce prendra sur l’écran de l'utilisateur·rice
       defaults:
         autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement
         avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
@@ -34,20 +40,20 @@ fr:
         fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil
         header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
         inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser
-        irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard
+        irreversible: Les messages filtrés disparaîtront pour toujours, même si le filtre est supprimé plus tard
         locale: La langue de l’interface, des courriels et des notifications
         locked: Nécessite que vous approuviez manuellement chaque abonné·e
         password: Utilisez au moins 8 caractères
-        phrase: Sera filtré sans que la casse ou l’avertissement sur le contenu du pouet soit pris en compte
+        phrase: Sera filtré peu importe la casse ou l’avertissement de contenu du message
         scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez une permission générale, vous n’avez pas besoin de sélectionner les permissions plus précises.
-        setting_aggregate_reblogs: Ne pas afficher de nouveaux partages pour les pouets qui ont été récemment partagés (n’affecte que les partages nouvellement reçus)
+        setting_aggregate_reblogs: Ne pas afficher les nouveaux partages pour les messages déjà récemment partagés (n’affecte que les partages futurs)
         setting_default_sensitive: Les médias sensibles sont cachés par défaut et peuvent être révélés d’un simple clic
         setting_display_media_default: Masquer les médias marqués comme sensibles
         setting_display_media_hide_all: Toujours masquer les médias
         setting_display_media_show_all: Toujours montrer les médias
         setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil
         setting_noindex: Affecte votre profil public ainsi que vos statuts
-        setting_show_application: Le nom de l’application que vous utilisez afin d’envoyer des pouets sera affiché dans la vue détaillée de ceux-ci
+        setting_show_application: Le nom de l’application que vous utilisez pour publier sera affichée dans la vue détaillée de vos messages
         setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails
         setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement
         username: Votre nom d’utilisateur sera unique sur %{domain}
@@ -73,13 +79,15 @@ fr:
           no_access: Bloquer l’accès à toutes les ressources
           sign_up_requires_approval: Les nouvelles inscriptions nécessiteront votre approbation
         severity: Choisir ce qui se passera avec les requêtes de cette adresse IP
+      rule:
+        text: Décrivez une règle ou une exigence pour les utilisateurs sur ce serveur. Essayez de la garder courte et simple
       sessions:
         otp: 'Entrez le code d’authentification à deux facteurs généré par l’application de votre téléphone ou utilisez un de vos codes de récupération :'
         webauthn: Si c'est une clé USB, assurez-vous de l'insérer et, si nécessaire, de la tapoter.
       tag:
         name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible
       user:
-        chosen_languages: Lorsque coché, seuls les pouets dans les langues sélectionnées seront affichés sur les fils publics
+        chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics
     labels:
       account:
         fields:
@@ -93,7 +101,7 @@ fr:
         text: Texte de présélection
         title: Titre
       admin_account_action:
-        include_statuses: Inclure les pouets signalés dans le courriel
+        include_statuses: Inclure les messages signalés dans le courriel
         send_email_notification: Notifier l’utilisateur par courriel
         text: Attention personnalisée
         type: Action
@@ -140,22 +148,22 @@ fr:
         setting_advanced_layout: Activer l’interface Web avancée
         setting_aggregate_reblogs: Grouper les partages dans les fils d’actualités
         setting_auto_play_gif: Lire automatiquement les GIFs animés
-        setting_boost_modal: Afficher une fenêtre de confirmation avant de partager un pouet
-        setting_crop_images: Recadrer les images des pouets non-dépliés en 16x9
+        setting_boost_modal: Demander confirmation avant de partager un message
+        setting_crop_images: Recadrer en 16x9 les images des messages qui ne sont pas ouvert en vue détaillée
         setting_default_language: Langue de publication
-        setting_default_privacy: Confidentialité des statuts
+        setting_default_privacy: Confidentialité des messages
         setting_default_sensitive: Toujours marquer les médias comme sensibles
-        setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet
+        setting_delete_modal: Demander confirmation avant de supprimer un message
         setting_disable_swiping: Désactiver les actions par glissement
         setting_display_media: Affichage des médias
         setting_display_media_default: Défaut
         setting_display_media_hide_all: Masquer tout
         setting_display_media_show_all: Montrer tout
-        setting_expand_spoilers: Toujours déplier les pouets marqués d’un avertissement sur le contenu
+        setting_expand_spoilers: Toujours déplier les messages marqués d’un avertissement de contenu
         setting_hide_network: Cacher votre réseau
         setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles
         setting_reduce_motion: Réduire la vitesse des animations
-        setting_show_application: Dévoiler le nom de l’application utilisée pour envoyer des pouets
+        setting_show_application: Dévoiler l’application utilisée pour envoyer les messages
         setting_system_font_ui: Utiliser la police par défaut du système
         setting_theme: Thème du site
         setting_trends: Afficher les tendances du jour
@@ -189,19 +197,21 @@ fr:
         severity: Règle
       notification_emails:
         digest: Envoyer des courriels récapitulatifs
-        favourite: Quelqu’un ajoute mon pouet à ses favoris
+        favourite: Quelqu’un a ajouté mon message à ses favoris
         follow: Quelqu’un vient de me suivre
         follow_request: Quelqu’un demande à me suivre
         mention: Quelqu’un me mentionne
         pending_account: Nouveau compte en attente d’approbation
-        reblog: Quelqu’un partage mon pouet
+        reblog: Quelqu’un a partagé mon message
         report: Un nouveau rapport est envoyé
         trending_tag: Un hashtag non approuvé est dans les tendances
+      rule:
+        text: Règle
       tag:
         listable: Autoriser ce hashtag à apparaître dans les recherches et dans l’annuaire des profils
         name: Hashtag
         trendable: Autoriser ce hashtag à apparaitre dans les tendances
-        usable: Autoriser les pouets à utiliser ce hashtag
+        usable: Autoriser les messages à utiliser ce hashtag
     'no': Non
     required:
       mark: "*"
diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml
new file mode 100644
index 000000000..b7502a192
--- /dev/null
+++ b/config/locales/simple_form.gd.yml
@@ -0,0 +1,223 @@
+---
+gd:
+  simple_form:
+    hints:
+      account_alias:
+        acct: Sònraich ainm-cleachdaiche@àrainn dhen chunntas a tha thu airson imrich uaithe
+      account_migration:
+        acct: Sònraich ainm-cleachdaiche@àrainn dhen chunntas dhan a tha thu airson imrich
+      account_warning_preset:
+        text: "’S urrainn dhut co-chàradh puist a chleachdadh, can URLaichean, tagaichean hais is iomraidhean"
+        title: Roghainneil. Chan fhaic am faightear seo
+      admin_account_action:
+        include_statuses: Chì an cleachdaiche dè na postaichean a dh’adhbharaich gnìomh na maorsainneachd no an rabhadh
+        send_email_notification: Ghaibh am faightear mìneachadh air dè thachair leis a’ chunntas aca
+        text_html: Roghainneil. Faodaidh tu co-chàradh puist a chleachdadh. ’S urrainn dhut <a href="%{path}">rabhaidhean ro-shuidhichte a chur ris</a> airson ùine a chaomhnadh
+        type_html: Tagh dè nì thu le <strong>%{acct}</strong>
+        types:
+          disable: Bac an cleachdaiche o chleachdadh a’ chunntais aca ach na sguab às no falaich an t-susbaint aca.
+          none: Cleachd seo airson rabhadh a chur dhan chleachdaiche gun ghnìomh eile a ghabhail.
+          sensitive: Èignich comharra gu bheil e frionasach air a h-uile ceanglachan meadhain a’ chleachdaiche seo.
+          silence: Bac an cleachdaiche o phostadh le faicsinneachd poblach, falaich na postaichean is brathan aca o na daoine nach eil a’ leantainn air.
+          suspend: Bac eadar-ghnìomh sam bith leis a’ chunntas seo agus sguab às an t-susbaint aige. Gabhaidh seo a neo-dhèanamh am broinn 30 latha.
+        warning_preset_id: Roghainneil. ’S urrainn dhut teacsa gnàthaichte a chur ri deireadh an ro-sheata fhathast
+      announcement:
+        all_day: Nuair a bhios cromag ris, cha nochd ach cinn-latha na rainse-ama
+        ends_at: Roghainneil. Thèid am brath-fios a neo-fhoillseachadh gu fèin-obrachail aig an àm ud
+        scheduled_at: Fàg seo bàn airson am brath-fios fhoillseachadh sa bhad
+        starts_at: Roghainnean. Cleachd seo airson am brath-fios a chuingeachadh rè ama shònraichte
+        text: "’S urrainn dhut co-chàradh puist a chleachdadh. Thoir an aire air am meud a chaitheas am brath-fios air sgrìn an luchd-chleachdaidh"
+      defaults:
+        autofollow: Leanaidh na daoine a chlàraicheas leis a cuireadh ort gu fèin-obrachail
+        avatar: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px
+        bot: Tha an cunntas seo ri gnìomhan fèin-obrachail gu h-àraidh is dh’fhaoidte nach doir duine sam bith sùil air idir
+        context: Na co-theacsaichean air am bi a’ chriathrag an sàs
+        current_password: A chùm tèarainteachd, cuir a-steach facal-faire a’ chunntais làithrich
+        current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich
+        digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh
+        discoverable: "’S e dòigh eile a th’ ann an eòlaire nam pròifil leis an ruig an cunntas agad èisteachd nas fharsainge"
+        email: Thèid post-d dearbhaidh a chur thugad
+        fields: Faodaidh tu suas ri 4 nithean a shealltainn mar chlàr air a’ phròifil agad
+        header: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px
+        inbox_url: Dèan lethbhreac dhen URL o phrìomh-dhuilleag an ath-sheachadain a bu mhiann leat cleachdadh
+        irreversible: Thèid postaichean criathraichte a-mach à sealladh gu buan fiù ’s ma bheir thu a’ chriathrag air falbh uaireigin eile
+        locale: Cànan eadar-aghaidh a’ chleachdaiche, nam post-d ’s nam brathan putaidh
+        locked: Feumaidh tu gabhail ri luchd-leantainn ùr a làimh
+        password: Cleachd co-dhiù 8 caractaran
+        phrase: Thèid a mhaidseadh gun aire air litrichean mòra ’s beaga no air rabhadh susbainte puist
+        scopes: Na APIan a dh’fhaodas an aplacaid inntrigeadh. Ma thaghas tu sgòp air ìre as àirde, cha leig thu leas sgòpaichean fa leth a thaghadh.
+        setting_aggregate_reblogs: Na seall brosnachaidhean ùra do dhùdan a chaidh a bhrosnachadh o chionn ghoirid (cha doir seo buaidh ach air brosnachaidhean ùra o seo a-mach)
+        setting_default_sensitive: Thèid meadhanan frionasach fhalach o thùs is gabhaidh an nochdadh le briogadh orra
+        setting_display_media_default: Falaich meadhanan ris a bheil comharra gu bheil iad frionasach
+        setting_display_media_hide_all: Falaich na meadhanan an-còmhnaidh
+        setting_display_media_show_all: Seall na meadhanan an-còmhnaidh
+        setting_hide_network: Cha nochd cò a tha thu a’ leantainn orra no an luchd-leantainn agad fhèin air a’ phròifil agad
+        setting_noindex: Bheir seo buaidh air a’ phròifil phoblach ’s air duilleagan nan staidean agad
+        setting_show_application: Chithear cò an aplacaid a chleachd thu airson post a sgrìobhadh ann an seallaidhean mionaideach nam postaichean agad
+        setting_use_blurhash: Tha caiseadan stèidhichte air dathan nan nithean lèirsinneach a chaidh fhalach ach chan fhaicear am mion-fhiosrachadh
+        setting_use_pending_items: Falaich ùrachaidhean na loidhne-ama air cùlaibh briogaidh seach a bhith a’ sgroladh an inbhir gu fèin-obrachail
+        username: Bidh ainm-cleachdaiche àraidh agad air %{domain}
+        whole_word: Mur eil ach litrichean is àireamhan san fhacal-luirg, cha dèid a chur an sàs ach ma bhios e a’ maidseadh an fhacail shlàin
+      domain_allow:
+        domain: "’S urrainn dhan àrainn seo dàta fhaighinn on fhrithealaiche seo agus thèid an dàta a thig a-steach uaithe a phròiseasadh ’s a stòradh"
+      email_domain_block:
+        domain: Gabhaidh an t-ainm àrainne a nochdas san t-seòladh puist-d a chleachdadh no an clàr MX dhan dèid an àrainn fhuasgladh no IP an fhrithealaiche dhan dèid an clàr MX fuasgladh. Thèid an dearbhadh nuair a chlàraicheas cleachdaiche ùr leinn is thèid an clàradh a dhiùltadh.
+        with_dns_records: Thèid oidhirp a dhèanamh air fuasgladh clàran DNS na h-àrainne a chaidh a thoirt seachad agus thèid na toraidhean a bhacadh cuideachd
+      featured_tag:
+        name: 'Mholamaid fear dhe na tagaichean seo:'
+      form_challenge:
+        current_password: Tha thu a’ tighinn a-steach gu raon tèarainte
+      imports:
+        data: Chaidh am faidhle CSV às-phortadh o fhrithealaiche Mastodon eile
+      invite_request:
+        text: Bidh e nas fhasa dhuinn lèirmheas a dhèanamh air d’ iarrtas
+      ip_block:
+        comment: Roghainneil. Cùm an cuimhne carson an do chuir thu an riaghailt seo ris.
+        expires_in: Tha an uiread de sheòlaidhean IP cuingichte is thèid an co-roinneadh aig amannan agus an gluasad do chuideigin eile gu tric. Air an adhbhar seo, cha mholamaid bacadh IP gun chrìoch.
+        ip: Cuir a-steach seòladh IPv4 no IPv6. ’S urrainn dhut rainsean gu lèir a bhacadh le co-chàradh CIDR. Thoir an aire nach gluais thu thu fhèin a-mach!
+        severities:
+          no_access: Bac inntrigeadh dha na goireasan uile
+          sign_up_requires_approval: Bidh cleachdaichean air an ùr-chlàradh feumach air d’ aonta
+        severity: Tagh na thachras le iarrtasan on IP seo
+      rule:
+        text: Mìnich riaghailt no riatanas do chleachdaichean an fhrithealaiche seo. Feuch an cùm thu sìmplidh goirid e
+      sessions:
+        otp: 'Cuir a-steach an còd dà-cheumnach a ghin aplacaid an fhòn agad no cleachd fear dhe na còdan aisig agad:'
+        webauthn: Mas e iuchair USB a th’ ann, dèan cinnteach gun cuir thu a-steach e is gun doir thu gnogag air ma bhios feum air sin.
+      tag:
+        name: Mar eisimpleir, ’s urrainn dhut measgachadh de litrichean mòra ’s beaga a chleachdadh ach an gabh a leughadh nas fhasa
+      user:
+        chosen_languages: Nuair a bhios cromag ris, cha nochd ach postaichean sna cànain a thagh thu air loidhnichean-ama poblach
+    labels:
+      account:
+        fields:
+          name: Leubail
+          value: Susbaint
+      account_alias:
+        acct: Ainm-cleachdaiche an t-seann-chunntais
+      account_migration:
+        acct: Ainm-cleachdaiche a’ chunntais ùir
+      account_warning_preset:
+        text: Teacsa ro-shocraichte
+        title: Tiotal
+      admin_account_action:
+        include_statuses: Gabh a-steach na postaichean a chaidh gearan a dhèanamh mun dèidhinn sa phost-d
+        send_email_notification: Cuir fios gun chleachdaiche air a’ phost-d
+        text: Rabhadh gnàthaichte
+        type: Gnìomh
+        types:
+          disable: Reòth
+          none: Cuir rabhadh
+          sensitive: Frionasach
+          silence: Crìoch
+          suspend: Cuir à rèim
+        warning_preset_id: Cleachd rabhadh ro-shuidhichte
+      announcement:
+        all_day: Tachartas fad an latha
+        ends_at: Deireadh an tachartais
+        scheduled_at: Cuir foillseachadh air an sgeideal
+        starts_at: Toiseach an tachartais
+        text: Brath-fios
+      defaults:
+        autofollow: Thoir cuireadh dhaibh airson leantainn air a’ chunntas agad
+        avatar: Avatar
+        bot: Seo cunntas bot
+        chosen_languages: Criathraich na cànain
+        confirm_new_password: Dearbh am facal-faire ùr
+        confirm_password: Dearbh am facal-faire
+        context: Co-theacsaichean na criathraige
+        current_password: Am facal-faire làithreach
+        data: Dàta
+        discoverable: Seall an cunntas seo san eòlaire
+        display_name: Ainm-taisbeanaidh
+        email: Seòladh puist-d
+        expires_in: Falbhaidh an ùine air às dèidh
+        fields: Meata-dàta na pròifile
+        header: Bann-cinn
+        honeypot: "%{label} (na lìon seo)"
+        inbox_url: URL bogsa a-steach an ath-sheachadain
+        irreversible: Leig seachad seach falach
+        locale: Cànan na h-eadar-aghaidh
+        locked: Glais an cunntas
+        max_uses: An àireamh as motha de chleachdaidhean
+        new_password: Facal-faire ùr
+        note: Mu mo dhèidhinn
+        otp_attempt: Còd dà-cheumnach
+        password: Facal-faire
+        phrase: Facal no abairt-luirg
+        setting_advanced_layout: Cuir an comas an eadar-aghaidh-lìn adhartach
+        setting_aggregate_reblogs: Buidhnich na brosnachaidhean air an loidhne-ama
+        setting_auto_play_gif: Cluich GIFs beòthaichte gu fèin-obrachail
+        setting_boost_modal: Seall còmhradh dearbhaidh mus dèan thu brosnachadh
+        setting_crop_images: Beàrr na dealbhan sna postaichean gun leudachadh air 16x9
+        setting_default_language: Cànan postaidh
+        setting_default_privacy: Prìobhaideachd postaidh
+        setting_default_sensitive: Cuir comharra ri meadhanan an-còmhnaidh gu bheil iad frionasach
+        setting_delete_modal: Seall còmhradh dearbhaidh mus sguab thu às post
+        setting_disable_swiping: Cuir gluasadan grad-shlaighdidh à comas
+        setting_display_media: Sealltainn nam meadhanan
+        setting_display_media_default: Tùsail
+        setting_display_media_hide_all: Falaich na h-uile
+        setting_display_media_show_all: Seall na h-uile
+        setting_expand_spoilers: Leudaich postaichean ris a bheil rabhadh susbainte an-còmhnaidh
+        setting_hide_network: Falaich an lìonra agad
+        setting_noindex: Thoir air falbh an ro-aonta air inneacsadh le einnseanan-luirg
+        setting_reduce_motion: Ìslich an gluasad sna beòthachaidhean
+        setting_show_application: Foillsich dè an aplacaid a chleachdas tu airson postaichean a chur
+        setting_system_font_ui: Cleachd cruth-clò tùsail an t-siostaim
+        setting_theme: Ùrlar na làraich
+        setting_trends: Seall na treandaichean an-diugh
+        setting_unfollow_modal: Seall còmhradh dearbhaidh mus sguir thu de leantainn air cuideigin
+        setting_use_blurhash: Seall caiseadan dathte an àite meadhanan falaichte
+        setting_use_pending_items: Am modh slaodach
+        severity: Donad
+        sign_in_token_attempt: Còd-tèarainteachd
+        type: Seòrsa an ion-phortaidh
+        username: Ainm-cleachdaiche
+        username_or_email: Ainm-cleachdaiche no post-d
+        whole_word: Facal slàn
+      email_domain_block:
+        with_dns_records: Gabh a-steach clàran MX agus IPan na h-àrainne
+      featured_tag:
+        name: Taga hais
+      interactions:
+        must_be_follower: Mùch na brathan nach eil o luchd-leantainn
+        must_be_following: Mùch na brathan o dhaoine air nach lean thu
+        must_be_following_dm: Bac teachdaireachdan dìreach o dhaoine air nach lean thu
+      invite:
+        comment: Beachd
+      invite_request:
+        text: Carson a bu mhiann leat ballrachd fhaighinn?
+      ip_block:
+        comment: Beachd
+        ip: IP
+        severities:
+          no_access: Bac inntrigeadh
+          sign_up_requires_approval: Cuingich clàraidhean ùra
+        severity: Riaghailt
+      notification_emails:
+        digest: Cuir puist-d le geàrr-chunntas
+        favourite: Is annsa le cuideigin am post agad
+        follow: Lean cuideigin ort
+        follow_request: Dh’iarr cuideigin leantainn ort
+        mention: Thug cuideigin iomradh ort
+        pending_account: Tha cunntas ùr feumach air lèirmheas
+        reblog: Bhrosnaich cuideigin am post agad
+        report: Chaidh gearan ùr a chur a-null
+        trending_tag: Tha taga hais gun lèirmheas a’ treandadh
+      rule:
+        text: Riaghailt
+      tag:
+        listable: Leig leis an taga hais seo gun nochd e ann an toraidhean luirg ’s air eòlaire nam pròifil
+        name: Taga hais
+        trendable: Leig leis an taga hais seo gun nochd e am measg nan treandaichean
+        usable: Leig le postaichean an taga hais seo a chleachdadh
+    'no': Chan eil
+    recommended: Molta
+    required:
+      mark: "*"
+      text: riatanach
+    title:
+      sessions:
+        webauthn: Cleachd tè dhe na h-iuchraichean tèarainteachd agad airson clàradh a-steach
+    'yes': Tha
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index e9a33cd0d..82308bbd9 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -7,47 +7,53 @@ gl:
       account_migration:
         acct: Indica o usuaria@servidor da conta a cal queres migrar
       account_warning_preset:
-        text: Pódeslle dar formato ao toot, como URLs, cancelos e mencións
+        text: Pódeslle dar formato á publicación, como URLs, cancelos e mencións
         title: Optativo. Non visible para a correspondente
       admin_account_action:
-        include_statuses: A usuaria verá que toots causaron a acción da moderación ou aviso
+        include_statuses: A usuaria verá que publicacións causaron a acción da moderación ou aviso
         send_email_notification: A usuaria recibirá unha explicación sobre o que lle aconteceu a súa conta
-        text_html: Optativo. Podes utilizar formato no toot. Podes <a href="%{path}">engadir avisos preestablecidos</a> para aforrar tempo
+        text_html: Optativo. Podes utilizar formato na publicación. Podes <a href="%{path}">engadir avisos preestablecidos</a> para aforrar tempo
         type_html: Escolle que facer con <strong>%{acct}</strong>
+        types:
+          disable: Evitar que a usuaria utilice a súa conta, mais non eliminala ou agochar o seu contido.
+          none: Utiliza esto para darlle un aviso á usuaria, se activar ningunha outra acción.
+          sensitive: Forzar que tódolos ficheiros multimedia das usuarias sexan marcadas como sensibles.
+          silence: Evitar que a usuaria poida publicar toots públicos, agocha os seus toots e notificacións para a xente que non a segue.
+          suspend: Evita calquera interacción con ou desta conta e elimina os seus contidos. Reversible durante 30 días.
         warning_preset_id: Optativo. Poderás engadir texto personalizado ao final do preestablecido
       announcement:
         all_day: Cando se marca, só serán amosadas as datas do intre de tempo
         ends_at: Opcional. O anuncio non se publicará de xeito automático neste intre
         scheduled_at: Déixao baleiro para publicar o anuncio de xeito inmediato
         starts_at: Opcional. No caso de que o teu anuncio estea vinculado a un intre de tempo específico
-        text: Podes empregar a sintaxe do toot. Ten en conta o espazo que ocupará o anuncio na pantalla do usuario
+        text: Podes empregar a sintaxe na publicación. Ten en conta o espazo que ocupará o anuncio na pantalla da usuaria
       defaults:
         autofollow: As persoas que se conectaron a través dun convite seguirante automáticamente
-        avatar: PNG, GIF ou JPG.  Máximo %{size}. Será reducida a %{dimensions}px
-        bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada
+        avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
+        bot: Advirte ás usuarias de que esta conta realiza principalmente accións automatizadas e podería non estar monitorizada
         context: Un ou varios contextos onde se debería aplicar o filtro
         current_password: Por razóns de seguridade, introduce o contrasinal da conta actual
         current_username: Para confirmar, introduce o nome de usuaria da conta actual
         digest: Enviar só tras un longo período de inactividade e só se recibiches algunha mensaxe directa na tua ausencia
-        discoverable: O directorio de perfil é outro xeito de que a túa conta alcance unha maior audiencia
+        discoverable: Permite que a túa conta poida ser descuberta por persoas descoñecidas a través de recomendacións e outras ferramentas
         email: Ímosche enviar un correo de confirmación
         fields: Podes ter ate 4 elementos no teu perfil mostrados como unha táboa
         header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
         inbox_url: Copiar o URL desde a páxina de inicio do repetidor que queres utilizar
-        irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso se despois se elimina o filtro
+        irreversible: As publicacións filtradas desaparecerán de xeito irreversible, incluso se despois se elimina o filtro
         locale: O idioma da interface de usuaria, correos e notificacións
-        locked: Require que ti aceptes as seguidoras de xeito manual
+        locked: Xestionar manualmente quen pode seguirte aprobando as solicitudes de seguimento
         password: Utiliza 8 caracteres ao menos
-        phrase: Concordará independentemente das maiúsculas ou avisos de contido no toot
+        phrase: Concordará independentemente das maiúsculas ou avisos de contido na publicación
         scopes: A que APIs terá acceso a aplicación. Se escolles un ámbito de alto nivel, non precisas seleccionar elementos individuais.
-        setting_aggregate_reblogs: Non mostrar novas promocións de toots que foron promocionados recentemente (só afecta a promocións recén recibidas)
+        setting_aggregate_reblogs: Non mostrar novas promocións de publicacións que foron promovidas recentemente (só afecta a promocións recén recibidas)
         setting_default_sensitive: Medios sensibles marcados como ocultos por defecto e móstranse cun click
         setting_display_media_default: Ocultar medios marcados como sensibles
         setting_display_media_hide_all: Ocultar sempre os medios
         setting_display_media_show_all: Mostrar sempre os medios marcados como sensibles
         setting_hide_network: Non se mostrará no teu perfil quen te segue e a quen estás a seguir
         setting_noindex: Afecta ao teu perfil público e páxinas de estado
-        setting_show_application: A aplicación que estás a utilizar para enviar toots mostrarase na vista detallada do toot
+        setting_show_application: A aplicación que estás a utilizar para enviar publicacións mostrarase na vista detallada da publicación
         setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esborranchando todos os detalles
         setting_use_pending_items: Ocultar as actualizacións da liña temporal tras un click no lugar de desprazar automáticamente os comentarios
         username: O teu nome de usuaria será único en %{domain}
@@ -73,13 +79,15 @@ gl:
           no_access: Bloquear acceso a tódolos recursos
           sign_up_requires_approval: Os novos rexistros requerirán a túa aprobación
         severity: Escolle que acontecerá coas peticións desde este IP
+      rule:
+        text: Describe unha regra ou requerimento para as usuarias deste servidor. Intenta que sexa curta e simple
       sessions:
         otp: 'Introduce o código do segundo factor creado pola aplicación do teu móbil ou usa un dos códigos de recuperación:'
         webauthn: Se é unha chave USB asegúrate de que está conectada e preme o botón.
       tag:
         name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade
       user:
-        chosen_languages: Se ten marca, só os toots nos idiomas seleccionados serán mostrados en liñas temporais públicas
+        chosen_languages: Se ten marca, só as publicacións nos idiomas seleccionados serán mostrados en cronoloxías públicas
     labels:
       account:
         fields:
@@ -93,7 +101,7 @@ gl:
         text: Texto preestablecido
         title: Título
       admin_account_action:
-        include_statuses: Incluír toots denunciados no correo
+        include_statuses: Incluír no correo as publicacións denunciadas
         send_email_notification: Notificar a usuaria por correo-e
         text: Aviso personalizado
         type: Acción
@@ -120,7 +128,7 @@ gl:
         context: Contextos do filtro
         current_password: Contrasinal actual
         data: Datos
-        discoverable: Incluír esta conta no directorio
+        discoverable: Suxerir esta conta a outras persoas
         display_name: Nome mostrado
         email: Enderezo de email
         expires_in: Caduca tras
@@ -130,7 +138,7 @@ gl:
         inbox_url: URL da caixa de entrada do repetidor
         irreversible: Soltar en lugar de agochar
         locale: Idioma da interface
-        locked: Protexer conta
+        locked: Requerir aprobar seguimento
         max_uses: Número máximo de usos
         new_password: Novo contrasinal
         note: Acerca de ti
@@ -141,21 +149,21 @@ gl:
         setting_aggregate_reblogs: Agrupar promocións nas liñas temporais
         setting_auto_play_gif: Reprodución automática de GIFs animados
         setting_boost_modal: Pedir confirmación antes de promocionar
-        setting_crop_images: Recortar imaxes a 16x9 en toots non despregados
+        setting_crop_images: Recortar imaxes a 16x9 en publicacións non despregadas
         setting_default_language: Idioma de publicación
         setting_default_privacy: Privacidade da publicación
         setting_default_sensitive: Marcar sempre multimedia como sensible
-        setting_delete_modal: Solicitar confirmación antes de eliminar unha mensaxe
+        setting_delete_modal: Solicitar confirmación antes de eliminar unha publicación
         setting_disable_swiping: Desactivar opcións de desprazamento
         setting_display_media: Mostrar multimedia
         setting_display_media_default: Por omisión
         setting_display_media_hide_all: Ocultar todo
         setting_display_media_show_all: Mostrar todo
-        setting_expand_spoilers: Despregar sempre as mensaxes marcadas con avisos de contido
+        setting_expand_spoilers: Despregar sempre as publicacións marcadas con avisos de contido
         setting_hide_network: Non mostrar contactos
         setting_noindex: Pedir non aparecer nas buscas dos motores de busca
         setting_reduce_motion: Reducir o movemento nas animacións
-        setting_show_application: Mostrar a aplicación utilizada para tootear
+        setting_show_application: Mostrar a aplicación utilizada para publicar
         setting_system_font_ui: Utilizar a tipografía por defecto do sistema
         setting_theme: Decorado da instancia
         setting_trends: Mostrar as tendencias de hoxe
@@ -197,11 +205,13 @@ gl:
         reblog: Enviar un correo cando alguén promociona a tua mensaxe
         report: Enviar un correo cando se envíe unha denuncia
         trending_tag: Un cancelo ser revisar está sendo tendencia
+      rule:
+        text: Regra
       tag:
         listable: Permitir que este cancelo apareza en buscas e no directorio de perfil
         name: Cancelo
         trendable: Permitir que este cancelo apareza en tendencias
-        usable: Permitir que os toots utilicen este cancelo
+        usable: Permitir que as publicacións utilicen este cancelo
     'no': Non
     required:
       mark: "*"
diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml
index e8ef7bfbb..b45c2f357 100644
--- a/config/locales/simple_form.hr.yml
+++ b/config/locales/simple_form.hr.yml
@@ -48,10 +48,7 @@ hr:
         follow_request: Netko zatraži da Vas prati
         mention: Netko Vas spomene
         reblog: Netko boosta Vaš status
-      tag:
-        name: Hashtag
     'no': Ne
     required:
-      mark: "*"
       text: obavezno
     'yes': Da
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 276a3a1b4..d0b952c2a 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -14,6 +14,12 @@ hu:
         send_email_notification: A felhasználó magyarázatot kap arra, mi történt a fiókjával
         text_html: Opcionális. A tülk szintaxis használható. Egyszerűsítés végett létre is hozhatsz <a href="%{path}">figyelmeztetéseket</a>
         type_html: Megmondhatod, mi legyen vele <strong>%{acct}</strong>
+        types:
+          disable: A felhasználó nem fogja tudni használni a fiókját, de ettől még nem töröljük azt vagy rejtjük el a tartalmait.
+          none: Ezt használd ahhoz, hogy a felhasználónak figyelmeztetést küldj bármilyen más következmény nélkül.
+          sensitive: Ennek a felhasználónak minden médiatartalmát jelöljük meg szenzitívként.
+          silence: Megakadályozzuk, hogy ez a felhasználó nyilvános láthatóságú tülköt tegyen közzé, elrejtjük a tülkjeit és értesítéseit azok elől, akik nem közvetlen követői.
+          suspend: Minden interakciót megakadályozunk ezzel a fiókkal és töröljük a tartalmát. 30 napon belül még visszacsinálható.
         warning_preset_id: Opcionális. A figyelmeztetés végére saját szöveget is írhatsz
       announcement:
         all_day: Bejelölve csak a dátumok számítanak majd a megadott intervallumból
@@ -73,6 +79,8 @@ hu:
           no_access: Elérés tiltása minden erőforráshoz
           sign_up_requires_approval: Új regisztrációk csak a jóváhagyásoddal történhetnek majd meg
         severity: Válaszd ki, mi történjen a kérésekkel erről az IP-ről
+      rule:
+        text: Írd le, mi a szabály vagy elvárás ezen a szerveren a felhasználók felé. Próbálj röviden, egyszerűen fogalmazni
       sessions:
         otp: 'Add meg a telefonodon generált kétlépcsős azonosító kódodat vagy használd az egyik tartalék bejelentkező kódot:'
         webauthn: Ha ez egy USB kulcs, ellenőrizd, hogy csatlakoztattad és ha szükséges, aktiváltad is.
@@ -197,6 +205,8 @@ hu:
         reblog: E-mail küldése, amikor valaki megtolja a tülködet
         report: E-mail küldése, ha új bejelentés érkezett
         trending_tag: E-mail küldése, ha egy még nem látott hashtag trendi lett
+      rule:
+        text: Szabály
       tag:
         listable: A hashtag megjelenhet a profiladatbázisban
         name: Hashtag
diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml
index b7b4f2d30..042aed9c3 100644
--- a/config/locales/simple_form.hy.yml
+++ b/config/locales/simple_form.hy.yml
@@ -182,7 +182,6 @@ hy:
         text: Ինչո՞ւ ես ցանկանում միանալ
       ip_block:
         comment: Մեկնաբանություն
-        ip: IP
         severities:
           no_access: Մուտքը արգելել
           sign_up_requires_approval: Սահմանափակել գրանցումները
@@ -204,7 +203,6 @@ hy:
         usable: Թոյլատրել թթերին օգտագործել այս պիտակը
     'no': Ոչ
     required:
-      mark: "*"
       text: պարտադիր
     title:
       sessions:
diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml
index 0ae63f356..efed6cc98 100644
--- a/config/locales/simple_form.id.yml
+++ b/config/locales/simple_form.id.yml
@@ -14,6 +14,12 @@ id:
         send_email_notification: Pengguna akan menerima penjelasan tentang apa yang terjadi pada akun mereka
         text_html: Opsional. Anda dapat memakai sintaks toot. Anda dapat <a href="%{path}">menambahkan preset peringatan</a> untuk hemat waktu
         type_html: Pilih apa yang perlu dilakukan dengan <strong>%{acct}</strong>
+        types:
+          disable: Cegah pengguna menggunakan akun mereka, tetapi jangan menghapus atau menyembunyikan konten mereka.
+          none: Gunakan ini untuk mengirim peringatan kepada pengguna, tanpa memicu tindakan lainnya.
+          sensitive: Paksa semua lampiran media pengguna sebagai sensitif.
+          silence: Cegah pengguna agar tidak dapat memposting dengan visibilitas publik, sembunyikan postingan dan notifikasi mereka dari orang yang tidak mengikuti mereka.
+          suspend: Cegah interaksi apapun dari/ke akun ini dan hapus kontennya. Dapat dikembalikan selama 30 hari.
         warning_preset_id: Opsional. Anda tetap dapat menambahkan teks kustom pada akhir preset
       announcement:
         all_day: Saat dicentang, hanya tanggal dalam rentang waktu tertentu yang akan ditampilkan
@@ -30,12 +36,12 @@ id:
         current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini
         digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda
         discoverable: Direktori profil adalah cara lain agar akun Anda menyentuh audiens yang lebih luas
-        email: Anda akan dikirimi surel konfirmasi
+        email: Anda akan dikirimi email konfirmasi
         fields: Anda bisa memiliki hingga 4 item utk ditampilkan sebagai tabel di profil Anda
         header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px
         inbox_url: Salin URL dari halaman depan relai yang ingin Anda pakai
         irreversible: Toot tersaring akan hilang permanen bahkan jika saringan dihapus kemudian
-        locale: Bahasa antar muka pengguna, surel, dan notifikasi dorong
+        locale: Bahasa antar muka pengguna, email, dan notifikasi dorong
         locked: Anda harus menerima permintaan pengikut secara manual dan setting privasi postingan akan diubah khusus untuk pengikut
         password: Gunakan minimal 8 karakter
         phrase: Akan dicocokkan terlepas dari luaran dalam teks atau peringatan konten dari toot
@@ -55,7 +61,7 @@ id:
       domain_allow:
         domain: Domain ini dapat mengambil data dari server ini dan data yang diterima akan diproses dan disimpan
       email_domain_block:
-        domain: Ini bisa nama domain yang muncul di alamat surel, data MX yang sedang diselesaikan oleh domain, atau IP server yang dipecahkan oleh data MX. Mereka akan dicek saat pendaftaran pengguna dan pendaftaran akan ditolak.
+        domain: Ini bisa nama domain yang muncul di alamat email, data MX yang sedang diselesaikan oleh domain, atau IP server yang dipecahkan oleh data MX. Mereka akan dicek saat pendaftaran pengguna dan pendaftaran akan ditolak.
         with_dns_records: Usaha untuk menyelesaikan data DNS domain yang diberikan akan dilakukan dan hasilnya akan masuk daftar hitam
       featured_tag:
         name: 'Anda mungkin ingin pakai salah satu dari ini:'
@@ -73,6 +79,8 @@ id:
           no_access: Blokir akses ke seluruh sumber daya
           sign_up_requires_approval: Pendaftaran baru memerlukan persetujuan Anda
         severity: Pilih apa yang akan dilakukan dengan permintaan dari IP ini
+      rule:
+        text: Jelaskan aturan atau persyaratan untuk pengguna di server ini. Buatlah pendek dan sederhana
       sessions:
         otp: Masukkan kode dua-faktor dari handphone atau gunakan kode pemulihan anda.
         webauthn: Jika ini kunci USB pastikan dalam keadaan tercolok dan, jika perlu, ketuk.
@@ -93,8 +101,8 @@ id:
         text: Teks preset
         title: Judul
       admin_account_action:
-        include_statuses: Sertakan toot terlapor pada surel
-        send_email_notification: Beritahu pengguna per surel
+        include_statuses: Sertakan kiriman yang dilaporkan pada email
+        send_email_notification: Beri tahu pengguna per email
         text: Peringatan kustom
         type: Aksi
         types:
@@ -166,7 +174,7 @@ id:
         sign_in_token_attempt: Kode keamanan
         type: Tipe impor
         username: Nama pengguna
-        username_or_email: Nama pengguna atau Surel
+        username_or_email: Nama pengguna atau Email
         whole_word: Seluruh kata
       email_domain_block:
         with_dns_records: Termasuk data MX dan IP domain
@@ -193,10 +201,12 @@ id:
         follow: Kirim email saat seseorang mengikuti anda
         follow_request: Kirim email saat seseorang meminta untuk mengikuti anda
         mention: Kirim email saat seseorang menyebut anda
-        pending_account: Kirim surel ketika akun baru perlu ditinjau
+        pending_account: Kirim email ketika akun baru perlu ditinjau
         reblog: Kirim email saat seseorang mem-boost status anda
-        report: Kirim surel ketika laporan baru dikirim
-        trending_tag: Kirim surel ketika tagar tak tertinjau jadi tren
+        report: Kirim email ketika laporan baru dikirim
+        trending_tag: Kirim email ketika tagar tak tertinjau jadi tren
+      rule:
+        text: Aturan
       tag:
         listable: Izinkan tagar ini muncul di penelusuran dan di direktori profil
         name: Tagar
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 6e64f0478..963a4101a 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -14,6 +14,12 @@ is:
         send_email_notification: Notandinn mun fá útskýringar á því hvað gerðist með notandaaðganginn hans
         text_html: Valfrjálst. Þú getur notað sömu skilgreiningar og fyrir tíst. Þú getur <a href="%{path}">bætt inn forstilltum aðvörunum</a> til að spara tíma
         type_html: Veldu hvað eigi að gera við <strong>%{acct}</strong>
+        types:
+          disable: Koma í veg fyrir að notandinn noti aðganginn sinn, en ekki eyða eða fela efnið þeirra.
+          none: Nota þetta til að senda aðvörun til notandans, án þess að setja neina aðra aðgerð í gang.
+          sensitive: Þvinga fram að öll myndefnisviðhengi þessa notanda verði flögguð sem viðkvæmt efni.
+          silence: Koma í veg fyrir að notandinn geti birt færslur opinberlega, fela færslur þeirra og tilkynningar fyrir fólki sem ekki er að fylgjast með notandanum.
+          suspend: Koma í veg fyrir öll samskipti til eða frá þessum aðgangi og eyða öllu efni hans. Afturkallanlegt innan 30 daga.
         warning_preset_id: Valkvætt. Þú getur ennþá bætt sérsniðnum texta við enda forstillinga
       announcement:
         all_day: Þegar merkt er við þetta, munu einungis birtast dagsetningar tímarammans
@@ -73,6 +79,8 @@ is:
           no_access: Loka á aðgang að öllum tilföngum
           sign_up_requires_approval: Nýskráningar munu þurfa samþykki þitt
         severity: Veldu hvað munir gerast við beiðnir frá þessu IP-vistfangi
+      rule:
+        text: Lýstu reglum eða kröfum sem gerðar eru til notenda á þessum netþjóni. Reyndu að hafa þetta skýrt og skorinort
       sessions:
         otp: 'Settu inn tveggja-þátta kóðann sem farsímaforritið útbjó eða notaðu einn af endurheimtukóðunum þínum:'
         webauthn: Ef þetta er USB-lykill, gakktu úr skugga um að honum sé stungið í samband og ef þörf þykir að ýta á hann.
@@ -197,6 +205,8 @@ is:
         reblog: Einhver endurbirti stöðufærslu þína
         report: Ný kæra hefur verið send inn
         trending_tag: Óyfirfarið myllumerki er í umræðunni
+      rule:
+        text: Regla
       tag:
         listable: Leyfa þessu myllumerki að birtast í leitum og í persónusniðamöppunni
         name: Myllumerki
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index cc660fd8d..8515da934 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -14,6 +14,12 @@ it:
         send_email_notification: L'utente riceverà una spiegazione di ciò che è successo con suo account
         text_html: Opzionale. Puoi usare la sintassi dei toot. Puoi <a href="%{path}">aggiungere avvisi preimpostati</a> per risparmiare tempo
         type_html: Decidi cosa fare con <strong>%{acct}</strong>
+        types:
+          disable: Impedisce all'utente di utilizzare il suo account, ma non elimina o nasconde i suoi contenuti.
+          none: Usa questo per inviare un avviso all'utente, senza eseguire altre azioni.
+          sensitive: Forza tutti gli allegati multimediali di questo utente ad essere contrassegnati come sensibili.
+          silence: Impedisce all'utente di poter pubblicare con visibilità pubblica, nasconde i suoi post e notifiche a persone che non lo seguono.
+          suspend: Impedisce qualsiasi interazione da o per questo account ed elimina i suoi contenuti. Annullabile entro 30 giorni.
         warning_preset_id: Opzionale. Puoi aggiungere un testo personalizzato alla fine di quello preimpostato
       announcement:
         all_day: Se selezionato, verranno visualizzate solo le date dell'intervallo di tempo
@@ -73,6 +79,8 @@ it:
           no_access: Blocca l'accesso a tutte le risorse
           sign_up_requires_approval: Le nuove iscrizioni richiederanno la tua approvazione
         severity: Scegli cosa accadrà con le richieste da questo IP
+      rule:
+        text: Descrivi una regola o un requisito per gli utenti su questo server. Prova a mantenerla breve e semplice
       sessions:
         otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:'
         webauthn: Se si tratta di una chiavetta USB assicurati di inserirla e, se necessario, toccarla.
@@ -119,7 +127,7 @@ it:
         confirm_password: Conferma password
         context: Contesti del filtro
         current_password: Password corrente
-        data: Data
+        data: Dati
         discoverable: Inserisci questo account nella directory
         display_name: Nome visualizzato
         email: Indirizzo email
@@ -197,6 +205,8 @@ it:
         reblog: Invia email quando qualcuno condivide un tuo toot
         report: Manda una mail quando viene inviato un nuovo rapporto
         trending_tag: Invia e-mail quando un hashtag non controllato è in tendenza
+      rule:
+        text: Regola
       tag:
         listable: Permetti a questo hashtag di apparire nella directory dei profili
         name: Hashtag
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index b6df486bc..9f7f01148 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -14,6 +14,12 @@ ja:
         send_email_notification: ユーザーは自分のアカウントに何が起こったのか説明を受け取ります
         text_html: オプションです。投稿に用いる構文を使うことができます。簡略化のため<a href="%{path}">プリセット警告文を追加</a>することができます
         type_html: "<strong>%{acct}</strong>さんに対し、何を行うか選択してください"
+        types:
+          disable: ユーザーが自分のアカウントを使用できないようにします。コンテンツを削除したり非表示にすることはありません。
+          none: これを使用すると、他の操作をせずにユーザーに警告を送信できます。
+          sensitive: このユーザーが添付したメディアを強制的に閲覧注意にする
+          silence: ユーザーが公開投稿できないようにし、フォローしていない人に投稿や通知が表示されないようにする。
+          suspend: このアカウントとのやりとりを止め、コンテンツを削除します。30日以内は取消可能です。
         warning_preset_id: オプションです。プリセット警告文の末尾に任意の文字列を追加することができます
       announcement:
         all_day: 有効化すると、対象期間の箇所に日付だけが表示されます
@@ -73,6 +79,8 @@ ja:
           no_access: すべてのリソースへのアクセスをブロックします
           sign_up_requires_approval: 承認するまで新規登録が完了しなくなります
         severity: このIPに対する措置を選択してください
+      rule:
+        text: ユーザーのためのルールや要件を記述してください。短くシンプルにしてください。
       sessions:
         otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:'
         webauthn: USBキーの場合は、必ず挿入し、必要に応じてタップしてください。
@@ -197,6 +205,8 @@ ja:
         reblog: トゥートがブーストされた時
         report: 通報を受けた時
         trending_tag: 未審査のハッシュタグが人気の時
+      rule:
+        text: ルール
       tag:
         listable: 検索とディレクトリへの使用を許可する
         name: ハッシュタグ
diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml
index 2e7f93a34..cd9ca2514 100644
--- a/config/locales/simple_form.kab.yml
+++ b/config/locales/simple_form.kab.yml
@@ -89,7 +89,6 @@ kab:
         text: Acimi tebγiḍ ad ternuḍ iman-ik?
       ip_block:
         comment: Awennit
-        ip: IP
         severities:
           no_access: Sewḥel anekcum
         severity: Alugen
@@ -100,6 +99,5 @@ kab:
         name: Ahacṭag
     'no': Ala
     required:
-      mark: "*"
       text: ilaq
     'yes': Ih
diff --git a/config/locales/simple_form.kk.yml b/config/locales/simple_form.kk.yml
index 859c70418..882454d78 100644
--- a/config/locales/simple_form.kk.yml
+++ b/config/locales/simple_form.kk.yml
@@ -2,79 +2,16 @@
 kk:
   simple_form:
     hints:
-      account_alias:
-        acct: Specify the username@domain of the account you want to move from
-      account_migration:
-        acct: Specify the username@domain of the account you want to move to
-      account_warning_preset:
-        text: You can use toot syntax, such as URLs, hashtags and mentions
-      admin_account_action:
-        include_statuses: The user will see which toots have caused the moderation action or warning
-        send_email_notification: The user will receive an explanation of what happened with their account
-        text_html: Optional. You can use toot syntax. You can <a href="%{path}">add warning presets</a> to save time
-        type_html: Choose what to do with <strong>%{acct}</strong>
-        warning_preset_id: Optional. You can still add custom text to end of the preset
       defaults:
-        autofollow: People who sign up through the invite will automatically follow you
-        avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
-        bot: This account mainly performs automated actions and might not be monitored
-        context: One or multiple contexts where the filter should apply
-        current_password: For security purposes please enter the password of the current account
-        current_username: To confirm, please enter the username of the current account
-        digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
-        discoverable: The profile directory is another way by which your account can reach a wider audience
-        email: You will be sent a confirmation e-mail
-        fields: You can have up to 4 items displayed as a table on your profile
-        header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
-        inbox_url: Copy the URL from the frontpage of the relay you want to use
-        irreversible: Filtered toots will disappear irreversibly, even if filter is later removed
-        locale: The language of the user interface, e-mails and push notifications
-        locked: Requires you to manually approve followers
-        password: Use at least 8 characters
-        phrase: Will be matched regardless of casing in text or content warning of a toot
-        scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones.
-        setting_aggregate_reblogs: Do not show new boosts for toots that have been recently boosted (only affects newly-received boosts)
-        setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click
-        setting_display_media_default: Hide media marked as sensitive
         setting_display_media_hide_all: Always hide all media
         setting_display_media_show_all: Always show media marked as sensitive
-        setting_hide_network: Who you follow and who follows you will not be shown on your profile
-        setting_noindex: Affects your public profile and status pages
-        setting_show_application: The application you use to toot will be displayed in the detailed view of your toots
-        setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details
-        setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed
-        username: Your username will be unique on %{domain}
-        whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word
-      domain_allow:
-        domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored
-      featured_tag:
-        name: 'You might want to use one of these:'
-      form_challenge:
-        current_password: You are entering a secure area
-      imports:
-        data: CSV file exported from another Mastodon server
-      invite_request:
-        text: This will help us review your application
-      sessions:
-        otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:'
-      tag:
-        name: You can only change the casing of the letters, for example, to make it more readable
-      user:
-        chosen_languages: When checked, only toots in selected languages will be displayed in public timelines
     labels:
       account:
         fields:
-          name: Label
           value: Мазмұн
-      account_alias:
-        acct: Handle of the old account
-      account_migration:
-        acct: Handle of the new account
       account_warning_preset:
         text: Алдын ала белгіленген мәтін
       admin_account_action:
-        include_statuses: Include reported toots in the e-mail
-        send_email_notification: Notify the user per e-mail
         text: Жеке ескерту
         type: Әрекет
         types:
@@ -82,7 +19,6 @@ kk:
           none: Ештеңе істемеу
           silence: Үнсіз
           suspend: Suspend and irreversibly delete account data
-        warning_preset_id: Use a warning preset
       defaults:
         autofollow: Жазылуға шақыру
         avatar: Аватар
@@ -99,8 +35,6 @@ kk:
         expires_in: Аяқталу мерзімі
         fields: Профиль метадатасы
         header: Басы
-        inbox_url: URL of the relay inbox
-        irreversible: Drop instead of hide
         locale: Интерфейс тілі
         locked: Аккаунтты құлыптау
         max_uses: Максимум қолданушы саны
@@ -110,7 +44,6 @@ kk:
         password: Құпиясөз
         phrase: Кілтсөз немесе фраза
         setting_advanced_layout: Кеңейтілген веб-интерфейс қосу
-        setting_aggregate_reblogs: Group boosts in timelines
         setting_auto_play_gif: GIF анимацияларды бірден қосу
         setting_boost_modal: Бөлісу алдында растау диалогын көрсету
         setting_crop_images: Кеңейтілмеген жазбаларда суреттерді 16х9 көлеміне кес
@@ -124,12 +57,8 @@ kk:
         setting_display_media_show_all: Бәрін көрсет
         setting_expand_spoilers: Мазмұн ескертуімен белгіленген жазбаларды кеңейту
         setting_hide_network: Желіні жасыру
-        setting_noindex: Opt-out of search engine indexing
-        setting_reduce_motion: Reduce motion in animations
-        setting_show_application: Disclose application used to send toots
         setting_system_font_ui: Жүйенің әдепкі қарпі
         setting_theme: Сайт темасы
-        setting_trends: Show today's trends
         setting_unfollow_modal: Анфоллоудан бұрын растау диалогын көрсету
         setting_use_blurhash: Жасырын медиаға арналған түрлі-түсті градиенттерді көрсетіңіз
         setting_use_pending_items: Баяу режим
@@ -165,6 +94,5 @@ kk:
         usable: Бұл хештегті қолдануға рұқсат бер
     'no': Жоқ
     required:
-      mark: "*"
       text: міндетті
     'yes': Иә
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 18f60dd9e..6a4eb3259 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -14,6 +14,12 @@ ko:
         send_email_notification: 유저는 어떤 일이 일어났는 지에 대한 설명을 받게 됩니다
         text_html: 선택사항. 툿 문법을 사용할 수 있습니다. <a href="%{path}">경고 틀을 추가</a>하여 시간을 절약할 수 있습니다
         type_html: "<strong>%{acct}</strong>에 대해 취할 행동 선택"
+        types:
+          disable: 사용자가 계정을 사용하는 것을 막지만, 그들의 게시물을 삭제하거나 숨기지는 않습니다.
+          none: 이것을 사용해서 어떤 동작도 하지 않고, 사용자에게 경고를 보냅니다.
+          sensitive: 이 사용자의 모든 미디어 첨부를 민감함으로 강제 설정합니다.
+          silence: 이 사용자가 공개 설정으로 게시물을 작성할 수 없도록 하고, 그를 팔로우 하지 않는 사람에게는 이 사용자의 게시물과 알림을 숨깁니다.
+          suspend: 이 계정과의 모든 상호작용을 막고 모든 내용을 삭제합니다. 30일 이내에 되돌리기가 가능합니다.
         warning_preset_id: 선택사항. 틀의 마지막에 임의의 텍스트를 추가 할 수 있습니다
       announcement:
         all_day: 체크 되었을 경우, 그 시간에 속한 날짜들에만 표시됩니다
@@ -24,19 +30,19 @@ ko:
       defaults:
         autofollow: 이 초대를 통해 가입하는 사람은 당신을 자동으로 팔로우 하게 됩니다
         avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨
-        bot: 사람들에게 계정이 사람이 아님을 알립니다
+        bot: 이 계정이 대부분 자동으로 작업을 수행하고 잘 확인하지 않는다는 것을 알립니다.
         context: 필터를 적용 할 한 개 이상의 컨텍스트
         current_password: 보안을 위해 현재 계정의 암호를 입력해주세요
         current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요
         digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기
-        discoverable: 프로필 책자는 내 계정이 더 많은 관심을 갖게 할 수 있는 다른 방법입니다
+        discoverable: 당신의 계정을 추천과 기타 기능들에 의해 다른 사람들이 발견할 수 있게 허용합니다
         email: 당신은 확인 메일을 받게 됩니다
         fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다
         header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨
         inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다
         irreversible: 필터링 된 툿은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
         locale: 유저 인터페이스, 이메일, 푸시 알림 언어
-        locked: 수동으로 팔로워를 승인하고, 기본 툿 프라이버시 설정을 팔로워 전용으로 변경
+        locked: 팔로우 요청을 승인함으로써 누가 당신을 팔로우 할 수 있는지를 수동으로 제어합니다.
         password: 최소 8글자
         phrase: 툿 내용이나 CW 내용 안에서 대소문자 구분 없이 매칭 됩니다
         scopes: 애플리케이션에 허용할 API들입니다. 최상위 스코프를 선택하면 개별적인 것은 선택하지 않아도 됩니다.
@@ -45,7 +51,7 @@ ko:
         setting_display_media_default: 민감함으로 설정 된 미디어 가리기
         setting_display_media_hide_all: 항상 모든 미디어를 가리기
         setting_display_media_show_all: 민감함으로 설정 된 미디어를 항상 보이기
-        setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들이 내 프로필에 표시되지 않게 합니다
+        setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들을 내 프로필에서 숨깁니다
         setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다
         setting_show_application: 당신이 툿을 작성하는데에 사용한 앱이 툿의 상세정보에 표시 됩니다
         setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다
@@ -73,6 +79,8 @@ ko:
           no_access: 모든 자원에 대한 접근 차단
           sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다
         severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요
+      rule:
+        text: 이 서버 사용자들이 지켜야 할 규칙과 요구사항을 설명해주세요. 짧고 간단하게 작성해주세요
       sessions:
         otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:'
         webauthn: USB 키라면 삽입했는지 확인하고, 필요하다면 누르세요.
@@ -120,7 +128,7 @@ ko:
         context: 필터 컨텍스트
         current_password: 현재 암호 입력
         data: 데이터
-        discoverable: 이 계정을 책자에서 찾을 수 있도록 합니다
+        discoverable: 계정을 다른 사람들에게 추천하기
         display_name: 표시되는 이름
         email: 이메일 주소
         expires_in: 만료시각
@@ -130,7 +138,7 @@ ko:
         inbox_url: 릴레이 서버의 inbox URL
         irreversible: 숨기는 대신 삭제
         locale: 인터페이스 언어
-        locked: 계정 잠금
+        locked: 팔로우 요청 필요
         max_uses: 사용 횟수 제한
         new_password: 새로운 암호 입력
         note: 자기소개
@@ -152,7 +160,7 @@ ko:
         setting_display_media_hide_all: 모두 가리기
         setting_display_media_show_all: 모두 보이기
         setting_expand_spoilers: 열람주의 툿을 항상 펼치기
-        setting_hide_network: 내 네트워크 숨기기
+        setting_hide_network: 내 인맥 숨기기
         setting_noindex: 검색엔진의 인덱싱을 거절
         setting_reduce_motion: 애니메이션 줄이기
         setting_show_application: 툿 작성에 사용한 앱을 공개
@@ -197,8 +205,10 @@ ko:
         reblog: 누군가 내 툿을 부스트 했을 때 이메일 보내기
         report: 새 신고 등록시 이메일로 알리기
         trending_tag: 리뷰 되지 않은 해시태그가 유행할 때 이메일 보내기
+      rule:
+        text: 규칙
       tag:
-        listable: 이 해시태그가 프로필 책자에 보여지도록 허용
+        listable: 이 해시태그가 검색과 추천에 보여지도록 허용
         name: 해시태그
         trendable: 이 해시태그가 유행에 보여지도록 허용
         usable: 이 해시태그를 툿에 사용 가능하도록 허용
diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml
index 8ff8a5a46..0a6cbc703 100644
--- a/config/locales/simple_form.ku.yml
+++ b/config/locales/simple_form.ku.yml
@@ -181,7 +181,6 @@ ku:
         text: بۆچی دەتەوێت بەشدار بیت?
       ip_block:
         comment: بۆچوون
-        ip: IP
         severities:
           no_access: بلۆککردنی ده‌ستپێگه‌یشتن
           sign_up_requires_approval: سنووردارکردنی چوونەناو
@@ -204,7 +203,6 @@ ku:
     'no': نە
     recommended: پێشنیارکراوە
     required:
-      mark: "*"
       text: پێویستە
     title:
       sessions:
diff --git a/config/locales/simple_form.kw.yml b/config/locales/simple_form.kw.yml
new file mode 100644
index 000000000..b2cfc12ff
--- /dev/null
+++ b/config/locales/simple_form.kw.yml
@@ -0,0 +1 @@
+kw:
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index 41dc2f28b..d8ce979d5 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -12,8 +12,14 @@ nl:
       admin_account_action:
         include_statuses: De gebruiker ziet welke toots verantwoordelijk zijn voor de moderatieactie of waarschuwing
         send_email_notification: De gebruiker ontvangt een uitleg over wat er met hun account is gebeurd
-        text_html: Optioneel. Je kunt voor toots specifieke tekst gebruiken. Om tijd te besparen kun je <a href="%{path}">voorinstellingen van waarschuwingen toevoegen</a>
+        text_html: Optioneel. Je kunt voor toots specifieke tekst gebruiken. Om tijd te besparen kun je <a href="%{path}">presets voor waarschuwingen toevoegen</a>
         type_html: Kies wat er met <strong>%{acct}</strong> moet gebeuren
+        types:
+          disable: Voorkom dat de gebruiker hun account gebruikt, maar verwijder of verberg de inhoud niet.
+          none: Gebruik dit om een waarschuwing naar de gebruiker te sturen, zonder dat nog een andere actie wordt uitgevoerd.
+          sensitive: Forceer dat alle mediabijlagen van deze gebruiker als gevoelig worden gemarkeerd.
+          silence: Voorkom dat de gebruiker openbare toots kan versturen, verberg hun toots en meldingen voor mensen die hen niet volgen.
+          suspend: Alle interacties van en met dit account blokkeren en de inhoud verwijderen. Dit kan binnen dertig dagen worden teruggedraaid.
         warning_preset_id: Optioneel. Je kunt nog steeds handmatig tekst toevoegen aan het eind van de voorinstelling
       announcement:
         all_day: Wanneer dit is aangevinkt worden alleen de datums binnen het tijdvak getoond
@@ -24,7 +30,7 @@ nl:
       defaults:
         autofollow: Mensen die zich via de uitnodiging hebben geregistreerd, volgen jou automatisch
         avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px
-        bot: Dit is een geautomatiseerd account en wordt mogelijk niet gemonitord
+        bot: Signaal naar andere gebruikers toe dat dit account hoofdzakelijk geautomatiseerde berichten stuurt en mogelijk niet wordt gemonitord
         context: Een of meerdere locaties waar de filter actief moet zijn
         current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in
         current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in
@@ -36,9 +42,9 @@ nl:
         inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken
         irreversible: Gefilterde toots verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd
         locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen
-        locked: Vereist dat je handmatig volgers moet accepteren
+        locked: Door het goedkeuren van volgers handmatig bepalen wie jou mag volgen
         password: Gebruik tenminste 8 tekens
-        phrase: Komt overeen ongeacht hoofd-/kleine letters of tekstwaarschuwingen
+        phrase: Komt overeen ongeacht hoofd-/kleine letters of een inhoudswaarschuwing
         scopes: Tot welke API's heeft de toepassing toegang. Wanneer je een toestemming van het bovenste niveau kiest, hoef je geen individuele toestemmingen meer te kiezen.
         setting_aggregate_reblogs: Geen nieuwe boosts tonen voor toots die recentelijk nog zijn geboost (heeft alleen effect op nieuw ontvangen boosts)
         setting_default_sensitive: Gevoelige media wordt standaard verborgen en kan met één klik worden getoond
@@ -67,10 +73,17 @@ nl:
         text: Dit helpt ons om jouw aanvraag te beoordelen
       ip_block:
         comment: Optioneel. Vergeet niet te onthouden waarom je deze regel hebt toegevoegd.
+        expires_in: Het aantal IP-adressen zijn beperkt. Ze worden soms gedeeld en wisselen vaak van eigenaar. Om deze reden worden onbeperkte IP-blokkades niet aanbevolen.
+        ip: Voer een IPv4- of IPv6-adres in. Je kunt hele reeksen blokkeren met de CIDR-methode. Pas op dat je jezelf niet buitensluit!
         severities:
+          no_access: Toegang tot de hele server blokkeren
           sign_up_requires_approval: Nieuwe registraties vereisen jouw goedkeuring
+        severity: Kies wat er moet gebeuren met aanvragen van dit IP-adres
+      rule:
+        text: Omschrijf een regel of vereiste voor gebruikers op deze server. Probeer het kort en simpel te houden
       sessions:
-        otp: 'Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:'
+        otp: 'Voer de tweestaps-toegangscode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:'
+        webauthn: Wanneer het een USB-sleutel is, zorg er dan voor dat je deze in de computer steekt en, wanneer nodig, activeert.
       tag:
         name: Je kunt elk woord met een hoofdletter beginnen, om zo bijvoorbeeld de tekst leesbaarder te maken
       user:
@@ -85,7 +98,7 @@ nl:
       account_migration:
         acct: Mastodonadres van het nieuwe account
       account_warning_preset:
-        text: Tekst van voorinstelling
+        text: Tekst van preset
         title: Titel
       admin_account_action:
         include_statuses: Gerapporteerde toots aan de e-mail toevoegen
@@ -115,7 +128,7 @@ nl:
         context: Filterlocaties
         current_password: Huidig wachtwoord
         data: Gegevens
-        discoverable: Dit account in de gebruikersgids tonen
+        discoverable: Dit account laten aanbevelen en in de gebruikersgids tonen
         display_name: Weergavenaam
         email: E-mailadres
         expires_in: Vervalt na
@@ -125,18 +138,18 @@ nl:
         inbox_url: Inbox-URL van de relayserver
         irreversible: Verwijderen in plaats van verbergen
         locale: Taal van de gebruikersomgeving
-        locked: Maak account besloten
+        locked: Volgverzoek vereisen
         max_uses: Max. aantal keer te gebruiken
         new_password: Nieuwe wachtwoord
         note: Bio
-        otp_attempt: Tweestaps-aanmeldcode
+        otp_attempt: Tweestaps-toegangscode
         password: Wachtwoord
         phrase: Trefwoord of zinsdeel
         setting_advanced_layout: Geavanceerde webomgeving inschakelen
         setting_aggregate_reblogs: Boosts in tijdlijnen groeperen
         setting_auto_play_gif: Speel geanimeerde GIF's automatisch af
         setting_boost_modal: Vraag voor het boosten van een toot een bevestiging
-        setting_crop_images: Afbeeldingen tot 16x9 besnijden in niet uitgebreide toots
+        setting_crop_images: Afbeeldingen bijsnijden tot 16x9 in toots op tijdlijnen
         setting_default_language: Taal van jouw toots
         setting_default_privacy: Standaardzichtbaarheid van jouw toots
         setting_default_sensitive: Media altijd als gevoelig markeren
@@ -146,7 +159,7 @@ nl:
         setting_display_media_default: Standaard
         setting_display_media_hide_all: Alles verbergen
         setting_display_media_show_all: Alles tonen
-        setting_expand_spoilers: Altijd toots met tekstwaarschuwingen uitklappen
+        setting_expand_spoilers: Altijd toots met inhoudswaarschuwingen uitklappen
         setting_hide_network: Jouw volgers en wie je volgt verbergen
         setting_noindex: Jouw toots niet door zoekmachines laten indexeren
         setting_reduce_motion: Langzamere animaties
@@ -192,8 +205,10 @@ nl:
         reblog: Wanneer iemand jouw toot heeft geboost
         report: Bij het indienen van een nieuwe rapportage
         trending_tag: Wanneer een nog niet beoordeelde hashtag trending is
+      rule:
+        text: Regel
       tag:
-        listable: Toestaan dat deze hashtag in zoekopdrachten en in de gebruikersgids te zien valt
+        listable: Toestaan dat deze hashtag in zoekopdrachten en aanbevelingen te zien valt
         name: Hashtag
         trendable: Toestaan dat deze hashtag onder trends te zien valt
         usable: Toestaan dat deze hashtag in toots gebruikt mag worden
diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml
index a28bcaef8..4f75701a7 100644
--- a/config/locales/simple_form.nn.yml
+++ b/config/locales/simple_form.nn.yml
@@ -119,6 +119,7 @@ nn:
         expires_in: Vert ugyldig etter
         fields: Profilmetadata
         header: Overskrift
+        honeypot: "%{label} (ikke fyll ut)"
         inbox_url: URL-addressen til overgangsinnboksen
         irreversible: Forkast i staden for å gøyma
         locale: Språk
@@ -189,6 +190,8 @@ nn:
         reblog: Send e-post når nokon framhevar statusen din
         report: Send e-post når nokon rapporterer noko
         trending_tag: Ein emneknagg som ikkje er sett igjennom er på veg opp
+      rule:
+        text: Regler
       tag:
         listable: Tillat denne emneknaggen å synast i søk og i profilmappa
         name: Emneknagg
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index 65eb6fba8..37863d9e8 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -119,6 +119,7 @@
         expires_in: Utløper etter
         fields: Profilmetadata
         header: Overskrift
+        honeypot: "%{label} (ikke fyll ut)"
         inbox_url: URL til overgangsinnboksen
         irreversible: Forkast i stedet for å skjule
         locale: Språk
@@ -189,6 +190,8 @@
         reblog: Send e-post når noen fremhever din status
         report: Ny rapport er sendt inn
         trending_tag: En ugjennomgått emneknagg trender
+      rule:
+        text: Regler
       tag:
         listable: Tillat denne emneknaggen å vises i søk og på profilmappen
         name: Emneknagg
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 28dfd05d8..b66aeec1c 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -133,7 +133,7 @@ oc:
         locked: Far venir lo compte privat
         max_uses: Limit d’utilizacions
         new_password: Nòu senhal
-        note: Bio
+        note: Biografia
         otp_attempt: Còdi Two-factor
         password: Senhal
         phrase: Senhal o frasa
@@ -197,6 +197,8 @@ oc:
         reblog: Enviar un corrièl quand qualqu’un tòrna partejar vòstre estatut
         report: Enviar un corrièl pels nòus senhalaments
         trending_tag: Enviar un corrièl quand una etiqueta pas repassada es en tendéncia
+      rule:
+        text: Règla
       tag:
         listable: Permetre a aquesta etiqueta d’aparéisser a las recèrcas e a l’annuari de perfils
         name: Etiqueta
diff --git a/config/locales/simple_form.pa.yml b/config/locales/simple_form.pa.yml
new file mode 100644
index 000000000..bb8a6c834
--- /dev/null
+++ b/config/locales/simple_form.pa.yml
@@ -0,0 +1 @@
+pa:
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index 865b26d91..0c371f4f1 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -14,6 +14,12 @@ pl:
         send_email_notification: Użytkownik otrzyma informację, co stało się z jego kontem
         text_html: Możesz używać składni której używasz we wpisach. Możesz <a href="%{path}">dodać szablon ostrzeżenia</a> aby zaoszczędzić czas
         type_html: Wybierz co chcesz zrobić z <strong>%{acct}</strong>
+        types:
+          disable: Nie pozwalaj użytkownikowi na korzystanie ze swojego konta, ale nie usuwaj ani nie ukrywaj jego zawartości.
+          none: Użyj tego, aby wysłać użytkownikowi ostrzeżenie, nie wywołując żadnego innego działania.
+          sensitive: Wymuś oznaczanie wszystkich załączników multimedialnych tego użytkownika jako wrażliwe.
+          silence: Zablokuj użytkownikowi możliwość publikowania z widocznością publiczną, ukrywaj jego wpisy i powiadomienia przed osobami, które go nie obserwują.
+          suspend: Zapobiegaj wszelkim interakcjom z tym kontem i usuń jego zawartość. Odwracalne w ciągu 30 dni.
         warning_preset_id: Nieobowiązkowe. Możesz dodać niestandardowy tekst do końcowki szablonu
       announcement:
         all_day: Jeżeli zaznaczone, tylko daty z przedziału czasu będą wyświetlane
@@ -73,6 +79,8 @@ pl:
           no_access: Zablokuj dostęp do wszystkich zasobów
           sign_up_requires_approval: Nowe rejestracje będą wymagać twojej zgody
         severity: Wybierz co ma się stać z żadaniami z tego adresu IP
+      rule:
+        text: Opisz wymóg lub regułę dla użytkowników na tym serwerze. Postaraj się, aby była krótka i prosta
       sessions:
         otp: 'Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych:'
         webauthn: Jeżeli jest to klucz USB, upewnij się, że go włożyłeś i, jeśli to konieczne, naciśnij go.
@@ -197,6 +205,8 @@ pl:
         reblog: Powiadamiaj mnie e-mailem, gdy ktoś podbije mój wpis
         report: Powiadamiaj mnie e-mailem, gdy zostanie utworzone nowe zgłoszenie
         trending_tag: Nieprzejrzany hashtag jest na czasie
+      rule:
+        text: Zasada
       tag:
         listable: Pozwól, aby ten hashtag pojawiał się w wynikach wyszukiwania i katalogu profilów
         name: Hashtag
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index bc1dc0d12..c9f3a3b1a 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -14,6 +14,9 @@ pt-BR:
         send_email_notification: O usuário receberá uma explicação do que aconteceu com a própria conta
         text_html: Opcional. Você pode usar a sintaxe do toot e também pode <a href="%{path}">adicionar avisos pré-definidos</a> para poupar tempo
         type_html: Decida o que fazer com <strong>%{acct}</strong>
+        types:
+          disable: Impedir o usuário de usar sua conta, porém sem deletá-la ou escondê-la.
+          none: Use isto para enviar uma advertência ao usuário, sem nenhuma outra ação.
         warning_preset_id: Opcional. Você ainda pode adicionar texto personalizado no final do aviso pré-definido
       announcement:
         all_day: Quando marcada, apenas as datas do período serão mostradas
@@ -73,6 +76,8 @@ pt-BR:
           no_access: Bloquear o acesso a todos os recursos
           sign_up_requires_approval: Novos registros exigirão sua aprovação
         severity: Escolha o que acontecerá com as solicitações deste IP
+      rule:
+        text: Descreva uma regra ou requisito para os usuários neste servidor. Tente mantê-la curta e simples.
       sessions:
         otp: 'Digite o código de dois fatores gerado pelo aplicativo no seu celular ou use um dos códigos de recuperação:'
         webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, tocar nela.
@@ -170,8 +175,6 @@ pt-BR:
         whole_word: Palavra inteira
       email_domain_block:
         with_dns_records: Incluir registros MX e IPs do domínio
-      featured_tag:
-        name: Hashtag
       interactions:
         must_be_follower: Bloquear notificações de não-seguidores
         must_be_following: Bloquear notificações de pessoas que você não segue
@@ -182,7 +185,6 @@ pt-BR:
         text: Por que você deseja criar uma conta aqui?
       ip_block:
         comment: Comentário
-        ip: IP
         severities:
           no_access: Bloquear acesso
           sign_up_requires_approval: Limitar registros
@@ -197,14 +199,14 @@ pt-BR:
         reblog: Enviar e-mail quando alguém der boost nos seus toots
         report: Enviar e-mail quando uma nova denúncia for enviada
         trending_tag: Uma hashtag não-revisada está em alta
+      rule:
+        text: Regra
       tag:
         listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis
-        name: Hashtag
         trendable: Permitir que esta hashtag fique em alta
         usable: Permitir que toots usem esta hashtag
     'no': Não
     required:
-      mark: "*"
       text: obrigatório
     title:
       sessions:
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 6cd5511eb..768c1abe7 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -12,8 +12,14 @@ pt-PT:
       admin_account_action:
         include_statuses: O utilizador verá quais toots causaram a ação de moderação ou aviso
         send_email_notification: O utilizador receberá uma explicação sobre o que aconteceu com a sua conta
-        text_html: Opcional. Tu podes usar sintaxe de escrita. Tu podes <a href="%{path}"> adicionar predefinições de aviso</a> para poupar tempo
+        text_html: Opcional. Pode utilizar sintaxe de escrita. Pode <a href="%{path}">adicionar avisos predefinidos</a> para poupar tempo
         type_html: Escolhe o que fazer com <strong>%{acct}</strong>
+        types:
+          disable: Impede o utilizador de usar a sua conta, mas não elimina ou oculta o seu conteúdo.
+          none: Use isto para enviar um aviso ao utilizador, sem acionar nenhuma outra ação.
+          sensitive: Força todos os anexos de media deste utilizador a serem sinalizados como sensíveis.
+          silence: Impede que o utilizador seja capaz de publicar com visibilidade pública, ocultando as suas publicações e notificações de pessoas que não o seguem.
+          suspend: Evita qualquer interação de ou para esta conta e elimina o seu conteúdo. Reversível num período de 30 dias.
         warning_preset_id: Opcional. Tu ainda podes adicionar texto personalizado no fim do predefinido
       announcement:
         all_day: Quando marcado, apenas as datas do intervalo de tempo serão exibidas
@@ -24,14 +30,14 @@ pt-PT:
       defaults:
         autofollow: As pessoas que aderem através do convite seguir-te-ão automaticamente
         avatar: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px
-        bot: Esta conta executa essencialmente acções automáticas e pode não poder ser monitorizada
+        bot: Esta conta executa essencialmente ações automatizadas e pode não ser monitorizada
         context: Um ou múltiplos contextos nos quais o filtro deve ser aplicado
         current_password: Para fins de segurança, por favor, digite a senha da conta atual
         current_username: Para confirmar, por favor, introduza o nome de utilizador da conta atual
         digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência
         discoverable: O diretório de perfis é outra maneira da sua conta alcançar um público mais vasto
         email: Será enviado um e-mail de confirmação
-        fields: Podes ter até 4 itens expostos, em forma de tabela, no teu perfil
+        fields: Pode ter até 4 itens expostos, em forma de tabela, no seu perfil
         header: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px
         inbox_url: Copia a URL da página inicial do repetidor que queres usar
         irreversible: Publicações filtradas irão desaparecer irremediavelmente, mesmo que o filtro seja removido posteriormente
@@ -73,6 +79,8 @@ pt-PT:
           no_access: Bloquear o acesso a todos os recursos
           sign_up_requires_approval: Novas inscrições requererão a sua aprovação
         severity: Escolha o que acontecerá com as solicitações deste IP
+      rule:
+        text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples
       sessions:
         otp: 'Insere o código de autenticação em dois passos gerado pelo teu telemóvel ou usa um dos teus códigos de recuperação:'
         webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela.
@@ -120,11 +128,11 @@ pt-PT:
         context: Filtrar contextos
         current_password: Palavra-passe actual
         data: Dados
-        discoverable: Listar esta conta no directório
+        discoverable: Permitir sugerir esta conta a outros
         display_name: Nome Público
         email: Endereço de e-mail
         expires_in: Expira em
-        fields: Meta-dados de perfil
+        fields: Metadados de perfil
         header: Cabeçalho
         honeypot: "%{label} (não preencher)"
         inbox_url: URL da caixa de entrada do repetidor
@@ -175,7 +183,7 @@ pt-PT:
       interactions:
         must_be_follower: Bloquear notificações de não-seguidores
         must_be_following: Bloquear notificações de pessoas que não segues
-        must_be_following_dm: Bloquear mensagens directas de pessoas que tu não segues
+        must_be_following_dm: Bloquear mensagens diretas de pessoas que não segue
       invite:
         comment: Comentário
       invite_request:
@@ -197,6 +205,8 @@ pt-PT:
         reblog: Enviar e-mail quando alguém partilha uma publicação tua
         report: Enviar um e-mail quando um novo relatório é submetido
         trending_tag: Enviar e-mail quando uma hashtag não aprovada anteriormente estiver em destaque
+      rule:
+        text: Regra
       tag:
         listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis
         name: Hashtag
diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml
index 36ac81b65..8138f1859 100644
--- a/config/locales/simple_form.ro.yml
+++ b/config/locales/simple_form.ro.yml
@@ -157,8 +157,6 @@ ro:
         whole_word: Cuvânt întreg
       email_domain_block:
         with_dns_records: Include înregistrările MX și IP-urile domeniului
-      featured_tag:
-        name: Hashtag
       interactions:
         must_be_follower: Blochează notificările de la persoane care nu te urmăresc
         must_be_following: Blochează notificările de la persoane pe care nu le urmărești
@@ -179,11 +177,9 @@ ro:
         trending_tag: Un hashtag nerevizuit este în tendință
       tag:
         listable: Permite acestui hashtag să apară în căutări și în directorul de profil
-        name: Hashtag
         trendable: Permite acestui hashtag să apară sub tendințe
         usable: Permite postărilor să folosească acest hashtag
     'no': Nu
     required:
-      mark: "*"
       text: obligatoriu
     'yes': Da
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index ad9fc3323..44d84faf5 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -14,6 +14,12 @@ ru:
         send_email_notification: Пользователь получит сообщение о том, что случилось с его/её учётной записью
         text_html: Необязательно. Вы можете использовать синтаксис постов. Для экономии времени, <a href="%{path}">добавьте шаблоны предупреждений</a>
         type_html: Выберите применяемое к <strong>%{acct}</strong> действие
+        types:
+          disable: Запретить пользователю использование своей учётной записи, без удаления или скрытия контента.
+          none: Отправить пользователю предупреждение, не принимая иных действий.
+          sensitive: Принудительно отметить опубликованное пользователем содержимое как «деликатного характера».
+          silence: Запретить пользователю публиковать посты с открытой видимостью, а также скрыть все прошлые посты и уведомления от людей, не читающих этого пользователя.
+          suspend: Предотвратить любое взаимодействие с этой учётной записью, удалив всё содержимое опубликованное с неё. Это действие можно отменить в течение 30 дней.
         warning_preset_id: Необязательно. Вы можете добавить собственный текст в конце шаблона
       announcement:
         all_day: Если выбрано, часы начала и завершения будут скрыты
@@ -41,10 +47,10 @@ ru:
         phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании поста
         scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически.
         setting_aggregate_reblogs: Не показывать новые продвижения постов, которые уже были недавно продвинуты (относится только к новым продвижениям).
-        setting_default_sensitive: Деликатные медиафайлы скрыты по умолчанию и могут быть показаны по нажатию на них.
-        setting_display_media_default: Скрывать деликатные медиафайлы
+        setting_default_sensitive: Медиафайлы «деликатного характера» скрыты по умолчанию и могут быть показаны по нажатию на них.
+        setting_display_media_default: Скрывать файлы «деликатного характера»
         setting_display_media_hide_all: Всегда скрывать любые медиафайлы
-        setting_display_media_show_all: Всегда показывать деликатные медиафайлы
+        setting_display_media_show_all: Всегда показывать любые медиафайлы
         setting_hide_network: Другие не смогут видеть ни ваши подписки, ни ваших подписчиков.
         setting_noindex: Ваш публичный профиль и страницы постов будут скрыты из поисковых движков.
         setting_show_application: При просмотре поста будет видно из какого приложения он отправлен.
@@ -60,7 +66,7 @@ ru:
       featured_tag:
         name: 'Возможно, вы захотите добавить что-то из этого:'
       form_challenge:
-        current_password: Вы входите в зону безопасности
+        current_password: Вы переходите к настройкам безопасности
       imports:
         data: Файл CSV, экспортированный с другого узла Mastodon.
       invite_request:
@@ -73,6 +79,8 @@ ru:
           no_access: Заблокировать доступ ко всем ресурсам
           sign_up_requires_approval: Новые регистрации потребуют вашего одобрения
         severity: Выберите, что будет происходить с запросами с этого IP
+      rule:
+        text: Опишите правило или требование для пользователей на этом сервере. Постарайтесь сделать его коротким и простым
       sessions:
         otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:'
         webauthn: Если это ключ USB, не забудьте его вставить и, при необходимости, нажмите на него.
@@ -100,7 +108,7 @@ ru:
         types:
           disable: Заморозить
           none: Ничего не делать
-          sensitive: Деликатный
+          sensitive: Отметить как «деликатного характера»
           silence: Скрыть
           suspend: Заблокировать и безвозвратно удалить все данные учётной записи
         warning_preset_id: Использовать шаблон
@@ -124,7 +132,7 @@ ru:
         display_name: Отображаемое имя
         email: Адрес e-mail
         expires_in: Истекает через
-        fields: Метаданные профиля
+        fields: Таблица деталей
         header: Шапка
         honeypot: "%{label} (не заполнять)"
         inbox_url: URL для входящих от ретрансляторов
@@ -144,7 +152,7 @@ ru:
         setting_crop_images: Кадрировать изображения в нераскрытых постах до 16:9
         setting_default_language: Язык отправляемых постов
         setting_default_privacy: Видимость постов
-        setting_default_sensitive: Всегда отмечать медиафайлы как деликатные
+        setting_default_sensitive: Всегда отмечать медиафайлы как «деликатного характера»
         setting_delete_modal: Всегда спрашивать перед удалении поста
         setting_disable_swiping: Отключить анимацию смахивания
         setting_display_media: Отображение медиафайлов
@@ -160,7 +168,7 @@ ru:
         setting_theme: Тема сайта
         setting_trends: Показывать сегодняшние тренды
         setting_unfollow_modal: Всегда спрашивать перед отпиской от учётной записи
-        setting_use_blurhash: Показать цветные градиенты для скрытых медиа
+        setting_use_blurhash: Показать цветные градиенты для скрытых медиафайлов
         setting_use_pending_items: Медленный режим
         severity: Накладываемые ограничения
         sign_in_token_attempt: Код безопасности
@@ -197,6 +205,8 @@ ru:
         reblog: Ваш пост продвинули
         report: Поступила новая жалоба
         trending_tag: Актуальный хэштег требует проверки
+      rule:
+        text: Правило
       tag:
         listable: Разрешить показ хэштега в поиске или в каталоге профилей
         name: Хэштег
diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml
index 99d5ab429..f24193347 100644
--- a/config/locales/simple_form.sc.yml
+++ b/config/locales/simple_form.sc.yml
@@ -5,41 +5,47 @@ sc:
       account_alias:
         acct: Dislinda su nòmineutente@domìniu de su contu dae su cale ti boles mòere
       account_migration:
-        acct: Dislinda su nòmineutente@domìniu de su contu cara a su cale ti boles mòere
+        acct: Dislinda su nòmineutente@domìniu de su contu conca a su cale ti boles mòere
       account_warning_preset:
-        text: Podes impreare sa sintassi de is tuts, che a is URL, is etichetas e is mentovos
+        text: Podes impreare sintassi in is tuts, che a URL, etichetas e mentovos
         title: Optzionale. Invisìbile a s'àtera persone
       admin_account_action:
         include_statuses: S'utente at a bìdere is tuts chi ant causadu s'atzione o s'avisu de moderatzione
         send_email_notification: S'utente at a retzire un'ispiegatzione de su chi siat sutzèdidu in su contu suo
-        text_html: Optzionale. Podes impreare sa sintassi de is tuts. Podes <a href="%{path}">agiùnghere avisos pre-impostados</a> pro risparmiare tempus
-        type_html: Sèbera ite fàghere cun <strong>%{acct}</strong>
+        text_html: Optzionale. Podes impreare sintassi in is tuts. Podes <a href="%{path}">agiùnghere avisos predefinidos</a> pro istraviare tempus
+        type_html: Sèbera ite si depet fàghere cun <strong>%{acct}</strong>
+        types:
+          disable: Impedi a s'utente de impreare su contu suo, ma non de cantzellare o cuare is cuntenutos.
+          none: Imprea custu pro imbiare un'avisu a s'utente, sena pedire peruna àtera atzione.
+          sensitive: Custringhe totu is alligongiados multimediales de custu utente a èssere marcados comente sensìbiles.
+          silence: Impedi a s'utente de publicare messàgios cun visibilidade pùblica, e de cuare messàgios e notìficas a persones chi non ddos sighint.
+          suspend: Impedi cale si siat cuntatu dae o cun custu contu e cantzella is cuntenutos. Si podet annullare intro de 30 dies.
         warning_preset_id: Optzionale. Podes ancora agiùnghere testu personalizadu a s'acabu de cussu predefinidu
       announcement:
         all_day: Si est marcadu, ant a èssere ammustradas isceti is datas de s'intervallu de tempus
         ends_at: Optzionale. S'annùntziu at a acabbare de abarrare publicadu in custu momentu
         scheduled_at: Lassa bòidu pro publicare s'annùntziu immediatamente
         starts_at: Optzionale. S'in casu chi s'annùntziu tuo siat ligadu a un'intervallu de tempus ispetzìficu
-        text: Podes impreare sa sintassi de is tuts. Dae cara a su tretu chi s'annùntziu at a pigare in s'ischermu de s'utente
+        text: Podes impreare sintassi in is tuts. Dae cara a su tretu chi s'annùntziu at a pigare in s'ischermu de s'utente
       defaults:
         autofollow: Is persones chi s'ant a registrare pro mèdiu de s'invitu t'ant a sighire in manera automàtica
         avatar: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px
-        bot: Custu contu faghet pro su prus atziones automatizadas e diat pòdere no èssere monitoradu
+        bot: Sinnala a àtere chi custu contu faghet pro su prus atziones automatizadas e diat pòdere no èssere monitoradu
         context: Unu o prus cuntestos in ue su filtru si diat dèpere aplicare
         current_password: Pro chistiones de seguresa inserta sa crae de intrada de su contu atuale
         current_username: Pro cunfirmare inserta su nòmine utente de su contu atuale
-        digest: Imbiadu isceti a pustis de unu perìodu longu de inatividade, e isceti si as retzidu carchi messàgiu personale cando non bi fias
-        discoverable: Sa cartella de is profilos est un'àtera manera pro fàghere otènnere unu pùblicu prus mannu a su contu tuo
-        email: T'amus a mandare unu messàgiu eletrònicu de cunfirma
+        digest: Imbiadu isceti a pustis de unu perìodu longu de inatividade, e isceti si as retzidu calicunu messàgiu personale cando non bi fias
+        discoverable: Permite chi su contu tuo potzat èssere iscobertu dae persones disconnotas pro mèdiu de cussìgios e àteras optziones
+        email: As a retzire unu messàgiu eletrònicu de cunfirma
         fields: Podes tènnere finas a 4 elementos ammustrados in una tabella in su profilu tuo
         header: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px
         inbox_url: Còpia s'URL dae sa pàgina printzipale de su ripetidore chi boles impreare
         irreversible: Is tuts filtrados ant a isparèssere in manera irreversìbile, fintzas si prus a tardu s'at a bogare su filtru
-        locale: Sa limba de s'interfache de s'utente, de is lìteras de posta eletrònica e de is notìficas push
-        locked: Tenet bisòngiu chi aproves a manu is sighiduras
+        locale: S'idioma de s'interfache de s'utente, de is messàgios de posta eletrònica e de is notìficas push
+        locked: Gesti a manu chie ti podet sighire aprovende a manu is sighiduras
         password: Imprea a su mancu 8 caràteres
-        phrase: Su cunfrontu s'at a fàghere chena pigare in cunsideru si su testu de sa publicatzione est minùsculu o majùsculu o si tenet un'avisu de cuntenutu
-        scopes: A ite API s'aplicatzione at a pòdere atzèdere. Si seletziones un'àmbitu de livellu artu no tenes bisòngiu de nde seletzionare de sìngulos.
+        phrase: At a cuncordare sena cunsiderare is minùsculas e is majùsculas o is avisos de cuntenutu
+        scopes: A ite API s'aplicatzione at a pòdere atzèdere. Si seletzionas un'àmbitu de su livellu prus artu, non serbit a nde seletzionare de sìngulos.
         setting_aggregate_reblogs: No ammustres cumpartziduras noas pro tuts chi sunt istados cumpartzidos dae pagu (tenet efetu isceti pro is cumpartziduras retzidas noas)
         setting_default_sensitive: Is elementos multimediales sensìbiles benint cuados dae is cunfiguratziones predefinidas e si podent rivelare cun un'incarcu
         setting_display_media_default: Cua elementos multimediales marcados comente sensìbiles
@@ -48,14 +54,14 @@ sc:
         setting_hide_network: Sa gente chi sighis o chi ti sighit no at a èssere ammustrada in su profilu tuo
         setting_noindex: Tenet efetu in su profilu pùblicu tuo e in is pàginas de is istados
         setting_show_application: S'aplicatzione chi impreas pro publicare tuts at a èssere ammustrada in sa visualizatzione de detàlliu de is tuts
-        setting_use_blurhash: Is gradientes sunt basados in subra de is colores de is immàgines cuadas ma imbelant totu is minujas
+        setting_use_blurhash: Is gradientes sunt basados in subra de is colores de is immàgines cuadas ma imbelant totu is detàllios
         setting_use_pending_items: Cua is atualizatziones in segus de un'incarcu imbetzes de iscùrrere in automàticu su flussu de publicatziones
         username: Su nòmine de utente tuo at a èssere ùnicu in %{domain}
-        whole_word: Cando sa paràula o sa fràsia crae est alfanumèrica ebbia s'at a aplicare isceti si currispondet a sa paràula intrea
+        whole_word: Cando sa crae (faeddu o fràsia) siat isceti alfanumèrica, s'at a aplicare isceti si currispondet a su faeddu intreu
       domain_allow:
         domain: Custu domìniu at a pòdere recuperare datos dae custu serbidore e is datos in intrada dae cue ant a èssere protzessados e archiviados
       email_domain_block:
-        domain: Custu podet èssere su nòmine de domìniu chi benit ammustradu in s'indiritzu de posta eletrònica, in su registru MX in ue si risolvet su domìniu o s'IP de su serbidore in ue si risolvet su registru MX. Custos ant a èssere verificados a pustis de sa registratzione e sa registratzione at a èssere refudada.
+        domain: Custu podet èssere su nòmine de domìniu chi benit ammustradu in s'indiritzu de posta eletrònica, in su registru MX in ue si risolvet su domìniu o s'IP de su serbidore in ue si risolvet su registru MX. Ant a èssere verificados cun sa registratzione de s'utente e sa registratzione at a èssere refudada.
         with_dns_records: S'at a fàghere unu tentativu de risòlvere is registros DNS de su domìniu e fintzas is risultados ant a èssere blocados
       featured_tag:
         name: 'Forsis boles impreare unu de custos:'
@@ -64,22 +70,24 @@ sc:
       imports:
         data: Archìviu CSV esportadu dae un'àteru serbidore de Mastodon
       invite_request:
-        text: Custu si at a agiudare a revisionare sa dimanda tua
+        text: Custu at a agiudare a revisionare sa dimanda tua
       ip_block:
         comment: Optzionale. Regorda pro ite as agiuntu custa règula.
-        expires_in: Is indiritzos IP sunt una risursa limitada, fatu-fatu benint cumpartzidos e podent mudare de mere. Pro custa resone is blocos indefinidos de indiritzos IP non sunt racumandados.
+        expires_in: Is indiritzos IP sunt una risursa limitada, fatu-fatu benint cumpartzidos e podent mudare de mere. Pro custa resone is blocos indefinidos de indiritzos IP non sunt cussigiados.
         ip: Inserta un'indiritzu IPv4 o IPv6. Podes blocare intervallos intreos impreende sa sintassi CIDR. Dae cara e non ti bloches a sa sola!
         severities:
           no_access: Bloca s'atzessu a totu is resursas
           sign_up_requires_approval: As a dèpere aprovare is iscritziones noas
         severity: Sèbera ite at a sutzèdere cun is rechestas de custa IP
+      rule:
+        text: Descrie una règula o unu rechisitu pro utentes de custu serbidore. Chirca de dda fàghere curtza e simpre
       sessions:
         otp: 'Inserta su còdighe de atzessu in duos passos generadu dae s''aplicatzione mòbile tua o imprea unu de custos còdighes de recùperu:'
-        webauthn: Si est una crae USB assegura·ti de l'insertare e, si serbit, de la tocare.
+        webauthn: Si est unu dispositivu USB, assegura·ti de ddu insertare e, si serbit, toca inoghe.
       tag:
-        name: Podes isceti cambiare su minùsculu/maiùsculu de is lìteras, a esèmpiu, pro fàghere in manera chi siant prus fàtziles de lèghere
+        name: Podes isceti cambiare sa minùscula/maiùscula de is lìteras, pro esèmpiu, pro fàghere in manera chi siant prus fàtziles de lèghere
       user:
-        chosen_languages: Cando est incarcadu, isceti is tuts in is limbas ischertadas ant a èssere ammustrados in is lìnias de tempus pùblicas
+        chosen_languages: Cando est ativadu, isceti is tuts in is idiomas seberados ant a èssere ammustrados in is lìnias de tempus pùblicas
     labels:
       account:
         fields:
@@ -98,7 +106,7 @@ sc:
         text: Avisu personalizadu
         type: Atzione
         types:
-          disable: Disativa
+          disable: Cungela
           none: Imbia un'avisu
           sensitive: Sensìbile
           silence: A sa muda
@@ -114,13 +122,13 @@ sc:
         autofollow: Invita a sighire su contu tuo
         avatar: Immàgine de profilu
         bot: Custu contu est unu bot
-        chosen_languages: Filtra limbas
+        chosen_languages: Filtra idiomas
         confirm_new_password: Cunfirma sa crae noa
         confirm_password: Cunfirma sa crae
         context: Filtra cuntestos
         current_password: Crae atuale
         data: Data
-        discoverable: Ammustra custu contu in su diretòriu
+        discoverable: Cussìgia custu contu a àtere
         display_name: Nòmine visìbile
         email: Indiritzu de posta eletrònica
         expires_in: Iscadit a pustis de
@@ -129,24 +137,24 @@ sc:
         honeypot: "%{label} (non compiles)"
         inbox_url: URL de sa cartella de intrada de su ripetidore
         irreversible: Cantzella imbetzes de cuare
-        locale: Limba de s'interfache
-        locked: Bloca su contu
+        locale: Idioma de s'interfache
+        locked: Rechede rechestas de sighidura
         max_uses: Nùmeru màssimu de impreos
         new_password: Crae noa
         note: Biografia
         otp_attempt: Còdighe in duos fatores
         password: Crae
-        phrase: Paràula o fràsia crae
-        setting_advanced_layout: Abìlita s'interfache web avantzada
+        phrase: Crae (faeddu o fràsia)
+        setting_advanced_layout: Ativa s'interfache web avantzada
         setting_aggregate_reblogs: Agrupa is cumpartziduras in is lìnias de tempus
-        setting_auto_play_gif: Riprodui is GIFs animadas in manera automàtica
-        setting_boost_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de cumpartzire
-        setting_crop_images: Retàllia is immàgines in is tuts no ismanniados a 16x9
-        setting_default_language: Limba de publicatzione
-        setting_default_privacy: Riservadesa de publicatzione
+        setting_auto_play_gif: Riprodui is GIF animadas in automàticu
+        setting_boost_modal: Ammustra unu diàlogu de cunfirma in antis de cumpartzire
+        setting_crop_images: Retàllia a 16x9 is immàgines de is tuts no ismanniados
+        setting_default_language: Idioma de publicatzione
+        setting_default_privacy: Riservadesa de is publicatziones
         setting_default_sensitive: Marca semper is elementos multimediales comente sensìbiles
-        setting_delete_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de cantzellare unu tut
-        setting_disable_swiping: Disabìlita is movimentos de trisinadura
+        setting_delete_modal: Ammustra unu diàlogu de cunfirma in antis de cantzellare unu tut
+        setting_disable_swiping: Disativa animatziones
         setting_display_media: Visualizatzione de is elementos multimediales
         setting_display_media_default: Predefinida
         setting_display_media_hide_all: Cua totu
@@ -156,10 +164,10 @@ sc:
         setting_noindex: Pedi de non ti fàghere inditzizare dae is motores de chirca
         setting_reduce_motion: Mìnima su movimentu in is animatziones
         setting_show_application: Rivela s'aplicatzione impreada pro imbiare tuts
-        setting_system_font_ui: Imprea su caràtere predefinidu de su sistema
+        setting_system_font_ui: Imprea sa tipografia predefinida de su sistema
         setting_theme: Tema de su situ
         setting_trends: Ammustra is tendèntzias de oe
-        setting_unfollow_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de acabbare de sighire a calicunu
+        setting_unfollow_modal: Ammustra unu diàlogu de cunfirma in antis de acabbare de sighire una persone
         setting_use_blurhash: Ammustra gradientes colorados pro is elementos multimediales cuados
         setting_use_pending_items: Modalidade lenta
         severity: Severidade
@@ -167,19 +175,19 @@ sc:
         type: Casta de importatzione
         username: Nòmine utente
         username_or_email: Nòmine utente o indiritzu de posta eletrònica
-        whole_word: Paràula intrea
+        whole_word: Faeddu intreu
       email_domain_block:
         with_dns_records: Include registros MX e indiritzos IP de su domìniu
       featured_tag:
         name: Eticheta
       interactions:
         must_be_follower: Bloca is notìficas dae chie non ti sighit
-        must_be_following: Bloca is notìficas dae persones chi non sighis
-        must_be_following_dm: Bloca is messàgios diretos dae persones chi non sighis
+        must_be_following: Bloca is notìficas dae gente chi non sighis
+        must_be_following_dm: Bloca is messàgios diretos dae gente chi non sighis
       invite:
         comment: Cummenta
       invite_request:
-        text: Proite ti cheres iscrìere?
+        text: Pro ite boles aderire?
       ip_block:
         comment: Cummentu
         ip: IP
@@ -189,24 +197,26 @@ sc:
         severity: Règula
       notification_emails:
         digest: Imbia lìteras eletrònicas de resumu
-        favourite: Calicunu at postu s'istadu tuo in is preferidos suos
-        follow: Calicunu at incumentzadu a ti sighire
-        follow_request: Calicunu at pedidu de ti sighire
-        mention: Calicunu t'at mentovadu
-        pending_account: Unu contu nou bisòngiat de una revisione
-        reblog: Calicunu at cumpartzidu s'istadu tuo
-        report: Est istadu imbiadu unu raportu nou
+        favourite: Una persone at postu s'istadu tuo in is preferidos suos
+        follow: Una persone t'at incumentzadu a sighire
+        follow_request: Una persone at pedidu de ti sighire
+        mention: Una persone t'at mentovadu
+        pending_account: Unu contu nou tenet bisòngiu de una revisione
+        reblog: Una persone at cumpartzidu s'istadu tuo
+        report: Imbiu de un'informe nou
         trending_tag: Un'eticheta non revisionada est in tendèntzia
+      rule:
+        text: Règula
       tag:
-        listable: Permite a cust'eticheta de apàrrere in is chircas e in sa cartella de is profilos
+        listable: Permite a custa eticheta de apàrrere in is chircas e in sa cartella de is profilos
         name: Eticheta
-        trendable: Permite a cust'eticheta de apàrrere in is tendèntzias
-        usable: Permite a is tuts de impreare cust'eticheta
+        trendable: Permite a custa eticheta de apàrrere in is tendèntzias
+        usable: Permite a is tuts de impreare custa eticheta
     'no': Nono
-    recommended: Racumandadu
+    recommended: Cussigiadu
     required:
       mark: "*"
-      text: netzessàriu
+      text: obligatòriu
     title:
       sessions:
         webauthn: Imprea una de is craes de seguresa tuas pro intrare
diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml
new file mode 100644
index 000000000..7235ac0fb
--- /dev/null
+++ b/config/locales/simple_form.si.yml
@@ -0,0 +1,37 @@
+---
+si:
+  simple_form:
+    labels:
+      admin_account_action:
+        type: ක්‍රියාමාර්ගය
+        types:
+          sensitive: සංවේදීතාව
+          suspend: අත්හිටුවන්න
+      defaults:
+        bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි
+        confirm_new_password: නව මුර පදය තහවුරු කරන්න
+        confirm_password: මුරපදය තහවුරු කරන්න
+        data: දත්ත
+        email: වි-තැපැල් ලිපිනය
+        new_password: නව මුරපදය
+        password: මුර පදය
+        setting_display_media_hide_all: සියල්ල සඟවන්න
+        setting_display_media_show_all: සියල්ල පෙන්වන්න
+        setting_hide_network: ඔබගේ ජාලය සඟවන්න
+        setting_theme: අඩවියේ තේමාව
+        username: පරිශීලක නාමය
+        username_or_email: පරිශීලක නාමය හෝ වි-තැපෑල
+        whole_word: සමස්ත වචනය
+      invite:
+        comment: අදහස
+      ip_block:
+        comment: අදහස
+        ip: අ.ජා. කෙ. (IP)
+        severities:
+          no_access: ප්‍රවේශය අවහිර කරන්න
+        severity: නීතිය
+    recommended: නිර්දේශිත
+    required:
+      mark: "*"
+      text: අවශ්‍යයි
+    'yes': ඔව්
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index a5fdc2a69..dbf69cce7 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -171,6 +171,5 @@ sk:
         usable: Povoľ používanie tohto haštagu v príspevkoch
     'no': Nie
     required:
-      mark: "*"
       text: povinné
     'yes': Áno
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index 31648b119..f0bf1e6c9 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -88,7 +88,6 @@ sl:
         locked: Zaklenjen račun
         max_uses: Največje število uporabnikov
         new_password: Novo geslo
-        note: Bio
         otp_attempt: Dvofaktorska koda
         password: Geslo
         phrase: Ključna beseda ali fraza
@@ -138,6 +137,5 @@ sl:
         report: Pošlji e-pošto, ko je oddana nova prijava
     'no': Ne
     required:
-      mark: "*"
       text: zahtevano
     'yes': Da
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index f00030ccf..995f4babd 100644
--- a/config/locales/simple_form.sq.yml
+++ b/config/locales/simple_form.sq.yml
@@ -8,17 +8,23 @@ sq:
         acct: Specifikoni emrinepërdoruesit@përkatësi të llogarisë ku doni të lëvizet
       account_warning_preset:
         text: Mund të përdorni elementë sintakse mesazhesh, bie fjala, URL, hashtagë dhe përmendje
-        title: Opsionale. Jo i dukshëm për marrësin
+        title: Opsional. Jo i dukshëm për marrësin
       admin_account_action:
         include_statuses: Përdoruesi do të shohë cilët mesazhe kanë shkaktuar veprimin e moderimit ose sinjalizimin
         send_email_notification: Përdoruesi do të marrë një shpjegim mbi çfarë ndodhi me llogarinë e tij
         text_html: Opsionale. Mund të përdorni sintaksë mesazhesh. Për të kursyer kohë, mund të <a href="%{path}">shtoni paracaktime sinjalizimesh</a>
         type_html: Zgjidhni ç’të bëhet me <strong>%{acct}</strong>
+        types:
+          disable: Pengoji përdoruesit përdorimin e llogarisë së tij, por mos fshi apo fshih lëndën e tij.
+          none: Përdoreni këtë për t’i dërguar përdoruesit një sinjalizim, pa u kryer ndonjë veprim tjetër.
+          sensitive: Vëru krejt bashkëngjitjeve media të këtij përdoruesi shenjë si rezervat.
+          silence: Pengoji përdoruesit të qenët i aftë të postojë publikisht, fshihja postimet dhe njoftimet e tij personave që nuk i ndjekin ato.
+          suspend: Pengo çfarëdo ndërveprimi nga ose për te kjo llogari dhe fshi lëndën e saj. E prapësueshme brenda 30 ditësh.
         warning_preset_id: Opsionale. Mundeni sërish të shtoni tekst vetjak në fund të paracaktimit
       announcement:
         all_day: Nëse i vihet shenjë, do të shfaqen vetëm datat e intervalit kohor
         ends_at: Opsionale. Lajmërimi do të hiqet nga botimi në këtë kohë
-        scheduled_at: Lëreni të zbrazët që lajmërimi të botohet menjëherë
+        scheduled_at: Që lajmërimi të botohet menjëherë, lëreni të zbrazët
         starts_at: Opsionale. Në rast se lajmërimi juaj është i lidhur me një interval kohor të caktuar
         text: Mund të përdorni sintaksë mesazhesh. Ju lutemi, mos harroni që hapësira e lajmërimit do të hajë vend në ekranin e përdoruesit
       defaults:
@@ -28,7 +34,7 @@ sq:
         context: Një ose disa kontekste kur duhet të zbatohet filtri
         current_password: Për qëllime sigurie, ju lutemi, jepni fjalëkalimin e llogarisë së tanishme
         current_username: Që ta ripohoni, ju lutemi, jepni emrin e përdoruesit të llogarisë së tanishme
-        digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës suaj
+        digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës tuaj
         discoverable: Drejtoria e profileve është një rrugë tjetër përmes së cilës llogaria juaj mund të mbërrijë te një publik më i gjerë
         email: Do t’ju dërgohet një email ripohimi
         fields: Te profili juaj mund të keni deri në 4 objekte të shfaqur si tabelë
@@ -39,7 +45,7 @@ sq:
         locked: Lyp që ju të miratoni dorazi ndjekësit
         password: Përdorni të paktën 8 shenja
         phrase: Do të kërkohet përputhje pavarësish se teksti ose sinjalizimi mbi lëndën e një mesazhi është shkruar me të mëdha apo me të vogla
-        scopes: Cilat API do të lejohet të përdorë aplikacioni. Nëse përzgjidhni një shkallë të epërme, nuk ju duhet të përzgjidhni individualet një nga një.
+        scopes: Cilat API do të lejohen të përdorin aplikacioni. Nëse përzgjidhni një shkallë të epërme, nuk ju duhet të përzgjidhni individualet një nga një.
         setting_aggregate_reblogs: Mos shfaq përforcime të reja për mesazhe që janë përforcuar tani së fundi (prek vetëm përforcime të marra rishtas)
         setting_default_sensitive: Media rezervat fshihet, si parazgjedhje, dhe mund të shfaqet me një klikim
         setting_display_media_default: Fshih media me shenjën rezervat
@@ -48,7 +54,7 @@ sq:
         setting_hide_network: Cilët ndiqni dhe cilët ju ndjekin nuk do të shfaqen në profilin tuaj
         setting_noindex: Prek faqet e profilit tuaj publik dhe gjendjeve
         setting_show_application: Aplikacioni që përdorni për mesazhe do të shfaqet te pamja e hollësishme për mesazhet tuaj
-        setting_use_blurhash: Gradientët bazohen në ngjyrat e elementëve pamorë të fshehur, por fshehin çfarëdo hollësie
+        setting_use_blurhash: Gradientët bazohen në ngjyrat e elementëve pamorë të fshehur, por eerësojnë çfarëdo hollësie
         setting_use_pending_items: Fshihi përditësimet e rrjedhës kohore pas një klikimi, në vend të rrëshqitjes automatike nëpër prurje
         username: Emri juaj i përdoruesit do të jetë unik në %{domain}
         whole_word: Kur fjalëkyçi ose fraza është vetëm numerike, do të aplikohet vetëm nëse përputhet me krejt fjalën
@@ -67,12 +73,14 @@ sq:
         text: Kjo do të na ndihmojë të shqyrtojmë aplikimin tuaj
       ip_block:
         comment: Opsionale. Mbani mend pse e shtuat këtë rregull.
-        expires_in: Adresat IP janë një burim i kufizuar, shpesh janë të përbashkëta dh ndryshojnë zot shpesh. Për këtë arsye, nuk rekomandohem blloqe IP të pafund.
+        expires_in: Adresat IP janë një burim i kufizuar, shpesh janë të përbashkëta dhe ndryshojnë zot shpesh. Për këtë arsye, nuk rekomandohen blloqe IP të pafund.
         ip: Jepni një adresë IPv4 ose IPv6. Duke përdorur sintaksën CIDR, mund të bllokoni intervale të tëra. Hapni sytë mos lini veten jashtë!
         severities:
           no_access: Blloko hyrje në krejt burimet
           sign_up_requires_approval: Regjistrime të reja do të duan miratimin tuaj
         severity: Zgjidhni ç’do të ndodhë me kërkesa nga kjo IP
+      rule:
+        text: Përshkruani një rregull ose një domosdoshmëri për përdoruesit në këtë shërbyes. Përpiquni të jetë i shkurtër dhe i thjeshtë
       sessions:
         otp: 'Jepni kodin dyfaktorësh të prodhuar nga aplikacioni i telefonit tuaj ose përdorni një nga kodet tuaj të rikthimeve:'
         webauthn: Nëse është një diskth USB, sigurohuni se e keni futur dhe, në qoftë e nevojshme, prekeni.
@@ -98,11 +106,11 @@ sq:
         text: Sinjalizim vetjak
         type: Veprim
         types:
-          disable: Çaktivizo hyrjen
-          none: Mos bëj gjë
+          disable: Ngrije
+          none: Dërgo një sinjalizim
           sensitive: Rezervat
-          silence: Heshtje
-          suspend: Pezulloje dhe fshi në mënyrë të pakthyeshme të dhënat e llogarisë
+          silence: Kufizoje
+          suspend: Pezulloje
         warning_preset_id: Përdor një sinjalizim të paracaktuar
       announcement:
         all_day: Akt gjatë gjithë ditës
@@ -120,7 +128,7 @@ sq:
         context: Filtroni kontekste
         current_password: Fjalëkalimi i tanishëm
         data: Të dhëna
-        discoverable: Shfaqe këtë llogari te drejtoria
+        discoverable: Sugjerojuni llogari të tjerëve
         display_name: Emër në ekran
         email: Adresë email
         expires_in: Skadon pas
@@ -134,7 +142,7 @@ sq:
         max_uses: Numër maksimum përdorimesh
         new_password: Fjalëkalim i ri
         note: Jetëshkrim
-        otp_attempt: Kod mirëfilltësimi dyfaktorësh
+        otp_attempt: Kod dyfaktorëshi
         password: Fjalëkalim
         phrase: Fjalëkyç ose frazë
         setting_advanced_layout: Aktivizo ndërfaqe web të thelluar
@@ -153,7 +161,7 @@ sq:
         setting_display_media_show_all: Shfaqi krejt
         setting_expand_spoilers: Mesazhet me sinjalizime mbi lëndën, zgjeroji përherë
         setting_hide_network: Fshiheni rrjetin tuaj
-        setting_noindex: Përfundim i indeksimit nga motor kërkimesh
+        setting_noindex: Zgjidhni lënien jashtë nga indeksim prej motorësh kërkimi
         setting_reduce_motion: Zvogëlo lëvizjen në animacione
         setting_show_application: Tregoje aplikacionin e përdorur për të dërguar mesazhe
         setting_system_font_ui: Përdor shkronja parazgjedhje të sistemit
@@ -162,7 +170,7 @@ sq:
         setting_unfollow_modal: Shfaq dialog ripohimi përpara heqjes së ndjekjes për dikë
         setting_use_blurhash: Shfaq gradientë ngjyrash për media të fshehura
         setting_use_pending_items: Mënyra ngadalë
-        severity: Rreptësi
+        severity: Rëndësi
         sign_in_token_attempt: Kod sigurie
         type: Lloj importimi
         username: Emër përdoruesi
@@ -174,8 +182,8 @@ sq:
         name: Hashtag
       interactions:
         must_be_follower: Blloko njoftime nga jo-ndjekës
-        must_be_following: Blloko njoftime nga persona që nuk i ndiqni
-        must_be_following_dm: Blloko mesazhe të drejtpërdrejtë nga persona që nuk i ndiqni
+        must_be_following: Blloko njoftime nga persona që s’i ndiqni
+        must_be_following_dm: Blloko mesazhe të drejtpërdrejtë nga persona që s’i ndiqni
       invite:
         comment: Komentoni
       invite_request:
@@ -197,6 +205,8 @@ sq:
         reblog: Dikush përforcoi gjendjen tuaj
         report: Parashtrohet raportim i ri
         trending_tag: Një hashtag i pashqyrtuar zë e bëhet popullor
+      rule:
+        text: Rregull
       tag:
         listable: Lejoje këtë hashtag të shfaqet në kërkime dhe në drejtori profilesh
         name: Hashtag
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index 0bfcd8fca..2a9063f78 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -14,11 +14,14 @@ sv:
         send_email_notification: Användaren kommer att få en förklaring av vad som hände med sitt konto
         text_html: Extra. Du kan använda toot syntax. Du kan <a href="%{path}">lägga till förvalda varningar</a> för att spara tid
         type_html: Välj vad du vill göra med <strong>%{acct}</strong>
+        types:
+          disable: Förhindra användaren från att använda sitt konto, men ta inte bort eller dölj innehållet.
         warning_preset_id: Extra. Du kan lägga till valfri text i slutet av förinställningen
       announcement:
         all_day: När det är markerat visas endast datum för tidsintervallet
         ends_at: Frivillig. Meddelandet kommer automatiskt att publiceras just nu
         scheduled_at: Lämna tomt för att publicera meddelandet omedelbart
+        starts_at: Valfritt. Om ditt meddelande är bundet till ett visst tidsintervall
       defaults:
         autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig
         avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px
@@ -41,6 +44,8 @@ sv:
         name: 'Du kan vilja använda en av dessa:'
       imports:
         data: CSV-fil som exporteras från en annan Mastodon-instans
+      rule:
+        text: Beskriv en kort och enkel regel för användare på denna server
       sessions:
         otp: 'Ange tvåfaktorkoden genererad från din telefonapp eller använd någon av dina återställningskoder:'
       user:
@@ -50,16 +55,31 @@ sv:
         fields:
           name: Etikett
           value: Innehåll
+      account_alias:
+        acct: Namnet på det gamla kontot
+      account_migration:
+        acct: Namnet på det nya kontot
       account_warning_preset:
         title: Rubrik
       admin_account_action:
+        send_email_notification: Meddela användaren via e-post
         text: Anpassad varning
+        type: Åtgärd
         types:
           disable: Inaktivera inloggning
           none: Gör ingenting
+          sensitive: Känslig
           silence: Tysta
+          suspend: Stäng av
+      announcement:
+        all_day: Heldagsevenemang
+        ends_at: Evenemangets slut
+        scheduled_at: Schemalägg publicering
+        starts_at: Evenemangets början
+        text: Kungörelse
       defaults:
         autofollow: Bjud in till att följa ditt konto
+        avatar: Profilbild
         bot: Detta är ett botkonto
         chosen_languages: Filtrera språk
         confirm_new_password: Bekräfta nytt lösenord
@@ -74,6 +94,8 @@ sv:
         fields: Profil-metadata
         header: Bakgrundsbild
         honeypot: "%{label} (fyll inte i)"
+        inbox_url: URL för reläinkorg
+        irreversible: Släng istället för att dölja
         locale: Språk
         locked: Lås konto
         max_uses: Högst antal  användningar
@@ -83,8 +105,10 @@ sv:
         password: Lösenord
         phrase: Nyckelord eller fras
         setting_advanced_layout: Aktivera avancerat webbgränssnitt
+        setting_aggregate_reblogs: Gruppera knuffar i tidslinjer
         setting_auto_play_gif: Spela upp animerade GIF-bilder automatiskt
         setting_boost_modal: Visa bekräftelsedialog innan du knuffar
+        setting_crop_images: Beskär bilder i icke-utökade tutningar till 16x9
         setting_default_language: Språk
         setting_default_privacy: Postintegritet
         setting_default_sensitive: Markera alltid media som känsligt
@@ -94,17 +118,27 @@ sv:
         setting_display_media_default: Standard
         setting_display_media_hide_all: Dölj alla
         setting_display_media_show_all: Visa alla
+        setting_expand_spoilers: Utöka alltid tutningar markerade med innehållsvarningar
         setting_hide_network: Göm ditt nätverk
         setting_noindex: Uteslutning av sökmotorindexering
         setting_reduce_motion: Minska rörelser i animationer
+        setting_show_application: Visa programmet som används för att skicka tutningar
         setting_system_font_ui: Använd systemets standardfont
         setting_theme: Sidans tema
         setting_trends: Visa dagens trender
         setting_unfollow_modal: Visa bekräftelse innan du slutar följa någon
+        setting_use_blurhash: Visa färgglada gradienter för dold media
+        setting_use_pending_items: Långsamt läge
         severity: Strikthet
+        sign_in_token_attempt: Säkerhetskod
         type: Importtyp
         username: Användarnamn
         username_or_email: Användarnamn eller e-mail
+        whole_word: Hela ord
+      email_domain_block:
+        with_dns_records: Inkludera MX-poster och IP-adresser för domänen
+      featured_tag:
+        name: Hashtag
       interactions:
         must_be_follower: Blockera aviseringar från icke-följare
         must_be_following: Blockera aviseringar från personer du inte följer
@@ -113,15 +147,35 @@ sv:
         comment: Kommentar
       invite_request:
         text: Varför vill du gå med?
+      ip_block:
+        comment: Kommentar
+        ip: IP
+        severities:
+          no_access: Blockera åtkomst
+          sign_up_requires_approval: Begränsa registreringar
+        severity: Regel
       notification_emails:
         digest: Skicka sammandrag via e-post
         favourite: Skicka e-post när någon favoriserar din status
         follow: Skicka e-post när någon följer dig
         follow_request: Skicka e-post när någon begär att följa dig
         mention: Skicka e-post när någon nämner dig
+        pending_account: Nytt konto behöver granskas
         reblog: Skicka e-post när någon knuffar din status
+        report: Ny rapport har skickats
+        trending_tag: En ogranskad hashtag trendar
+      rule:
+        text: Regel
+      tag:
+        listable: Tillåt att denna hashtag visas i sökningar och förslag
+        name: Hashtag
+        trendable: Tillåt att denna hashtag visas under trender
+        usable: Tillåt tutningar att använda denna hashtag
     'no': Nej
     required:
       mark: "*"
       text: obligatorisk
+    title:
+      sessions:
+        webauthn: Använd en av dina säkerhetsnycklar för att logga in
     'yes': Ja
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 0e2187c5a..108dfb7eb 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -8,46 +8,46 @@ th:
         acct: ระบุ username@domain ของบัญชีที่คุณต้องการย้ายไป
       account_warning_preset:
         text: คุณสามารถใช้ไวยากรณ์โพสต์ เช่น URL, แฮชแท็ก และการกล่าวถึง
-        title: ตัวเลือกเพิ่มเติม ไม่ปรากฏแก่ผู้รับ
+        title: ไม่จำเป็น ไม่ปรากฏแก่ผู้รับ
       admin_account_action:
         include_statuses: ผู้ใช้จะเห็นว่าโพสต์ใดก่อให้เกิดการกระทำการควบคุมหรือคำเตือน
         send_email_notification: ผู้ใช้จะได้รับคำอธิบายว่าเกิดอะไรขึ้นกับบัญชีของเขา
-        text_html: ตัวเลือกเพิ่มเติม คุณสามารถใช้ไวยากรณ์โพสต์ คุณสามารถ <a href="%{path}">เพิ่มคำเตือนที่ตั้งไว้ล่วงหน้า</a> เพื่อประหยัดเวลา
+        text_html: ไม่จำเป็น คุณสามารถใช้ไวยากรณ์โพสต์ คุณสามารถ <a href="%{path}">เพิ่มคำเตือนที่ตั้งไว้ล่วงหน้า</a> เพื่อประหยัดเวลา
         type_html: เลือกสิ่งที่จะทำกับ <strong>%{acct}</strong>
-        warning_preset_id: ตัวเลือกเพิ่มเติม คุณยังสามารถเพิ่มข้อความที่กำหนดเองที่จุดสิ้นสุดของค่าที่ตั้งไว้ล่วงหน้า
+        warning_preset_id: ไม่จำเป็น คุณยังสามารถเพิ่มข้อความที่กำหนดเองที่จุดสิ้นสุดของค่าที่ตั้งไว้ล่วงหน้า
       announcement:
         all_day: เมื่อกาเครื่องหมาย จะแสดงเฉพาะวันที่ของช่วงเวลาเท่านั้น
-        ends_at: ตัวเลือกเพิ่มเติม จะเลิกเผยแพร่ประกาศที่เวลานี้โดยอัตโนมัติ
+        ends_at: ไม่จำเป็น จะเลิกเผยแพร่ประกาศที่เวลานี้โดยอัตโนมัติ
         scheduled_at: เว้นว่างไว้เพื่อเผยแพร่ประกาศทันที
-        starts_at: ตัวเลือกเพิ่มเติม ในกรณีที่ประกาศของคุณผูกไว้กับช่วงเวลาที่เจาะจง
+        starts_at: ไม่จำเป็น ในกรณีที่ประกาศของคุณผูกไว้กับช่วงเวลาที่เจาะจง
         text: คุณสามารถใช้ไวยากรณ์โพสต์ โปรดระวังพื้นที่ที่ประกาศจะใช้ในหน้าจอของผู้ใช้
       defaults:
         autofollow: ผู้คนที่ลงทะเบียนผ่านคำเชิญจะติดตามคุณโดยอัตโนมัติ
         avatar: PNG, GIF หรือ JPG สูงสุด %{size} จะถูกย่อขนาดเป็น %{dimensions}px
-        bot: บัญชีนี้ทำการกระทำแบบอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์
+        bot: ส่งสัญญาณให้ผู้อื่นว่าบัญชีทำการกระทำแบบอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์
         context: บริบทจำนวนหนึ่งหรือมากกว่าที่ตัวกรองควรใช้
         current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน
         current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน
         digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น
-        discoverable: ไดเรกทอรีโปรไฟล์เป็นอีกวิธีหนึ่งที่ทำให้บัญชีของคุณสามารถเข้าถึงผู้ชมได้กว้างขึ้น
+        discoverable: อนุญาตให้คนแปลกหน้าค้นพบบัญชีของคุณผ่านคำแนะนำและคุณลักษณะอื่น ๆ
         email: คุณจะได้รับอีเมลยืนยัน
         fields: คุณสามารถมีได้มากถึง 4 รายการแสดงเป็นตารางในโปรไฟล์ของคุณ
         header: PNG, GIF หรือ JPG สูงสุด %{size} จะถูกย่อขนาดเป็น %{dimensions}px
         inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้
         irreversible: โพสต์ที่กรองจะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลัง
         locale: ภาษาของส่วนติดต่อผู้ใช้, อีเมล และการแจ้งเตือนแบบผลัก
-        locked: คุณต้องอนุมัติผู้ติดตามด้วยตนเอง
+        locked: ควบคุมผู้ที่สามารถติดตามคุณด้วยตนเองโดยอนุมัติคำขอติดตาม
         password: ใช้อย่างน้อย 8 ตัวอักษร
         phrase: จะถูกจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กในข้อความหรือคำเตือนเนื้อหาของโพสต์
         scopes: API ใดที่แอปพลิเคชันจะได้รับอนุญาตให้เข้าถึง หากคุณเลือกขอบเขตระดับบนสุด คุณไม่จำเป็นต้องเลือกแต่ละขอบเขต
         setting_aggregate_reblogs: ไม่แสดงการดันใหม่สำหรับโพสต์ที่เพิ่งดัน (มีผลต่อการดันที่ได้รับใหม่เท่านั้น)
-        setting_default_sensitive: ซ่อนสื่อที่ละเอียดอ่อนโดยค่าเริ่มต้นและสามารถเปิดเผยได้ด้วยการคลิก
+        setting_default_sensitive: ซ่อนสื่อที่ละเอียดอ่อนเป็นค่าเริ่มต้นและสามารถเปิดเผยได้ด้วยการคลิก
         setting_display_media_default: ซ่อนสื่อที่ถูกทำเครื่องหมายว่าละเอียดอ่อน
         setting_display_media_hide_all: ซ่อนสื่อเสมอ
         setting_display_media_show_all: แสดงสื่อเสมอ
-        setting_hide_network: จะไม่แสดงผู้ที่คุณติดตามและผู้ที่ติดตามคุณในโปรไฟล์ของคุณ
+        setting_hide_network: จะซ่อนผู้ที่คุณติดตามและผู้ที่ติดตามคุณในโปรไฟล์ของคุณ
         setting_noindex: มีผลต่อโปรไฟล์สาธารณะและหน้าสถานะของคุณ
-        setting_show_application: จะแสดงแอปพลิเคชันที่คุณใช้เพื่อโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ
+        setting_show_application: จะแสดงแอปพลิเคชันที่คุณใช้ในการโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ
         setting_use_blurhash: การไล่ระดับสีอิงตามสีของภาพที่ซ่อนอยู่แต่ทำให้รายละเอียดใด ๆ คลุมเครือ
         setting_use_pending_items: ซ่อนการอัปเดตเส้นเวลาไว้หลังการคลิกแทนที่จะเลื่อนฟีดโดยอัตโนมัติ
         username: ชื่อผู้ใช้ของคุณจะไม่ซ้ำกันใน %{domain}
@@ -65,8 +65,11 @@ th:
       invite_request:
         text: นี่จะช่วยให้เราตรวจทานใบสมัครของคุณ
       ip_block:
+        comment: ไม่จำเป็น จดจำเหตุผลที่คุณเพิ่มกฎนี้
         severities:
           no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด
+          sign_up_requires_approval: การลงทะเบียนใหม่จะต้องมีการอนุมัติของคุณ
+        severity: เลือกสิ่งที่จะเกิดขึ้นกับคำขอจาก IP นี้
       sessions:
         otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:'
       tag:
@@ -113,7 +116,7 @@ th:
         context: บริบทตัวกรอง
         current_password: รหัสผ่านปัจจุบัน
         data: ข้อมูล
-        discoverable: แสดงรายการบัญชีนี้ในไดเรกทอรี
+        discoverable: แนะนำบัญชีให้ผู้อื่น
         display_name: ชื่อที่แสดง
         email: ที่อยู่อีเมล
         expires_in: หมดอายุหลังจาก
@@ -122,7 +125,7 @@ th:
         inbox_url: URL กล่องขาเข้าแบบรีเลย์
         irreversible: ลบแทนที่จะซ่อน
         locale: ภาษาส่วนติดต่อ
-        locked: ล็อคบัญชี
+        locked: ต้องมีคำขอติดตาม
         max_uses: จำนวนการใช้งานสูงสุด
         new_password: รหัสผ่านใหม่
         note: ชีวประวัติ
@@ -144,7 +147,7 @@ th:
         setting_display_media_hide_all: ซ่อนทั้งหมด
         setting_display_media_show_all: แสดงทั้งหมด
         setting_expand_spoilers: ขยายโพสต์ที่ทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ
-        setting_hide_network: ซ่อนเครือข่ายของคุณ
+        setting_hide_network: ซ่อนกราฟทางสังคมของคุณ
         setting_noindex: เลือกไม่รับการทำดัชนีโดยเครื่องมือค้นหา
         setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว
         setting_show_application: เปิดเผยแอปพลิเคชันที่ใช้ในการส่งโพสต์
@@ -189,6 +192,8 @@ th:
         reblog: ใครสักคนได้ดันสถานะของคุณ
         report: มีการส่งรายงานใหม่
         trending_tag: แฮชแท็กที่ยังไม่ได้ตรวจทานกำลังนิยม
+      rule:
+        text: กฎ
       tag:
         listable: อนุญาตให้แฮชแท็กนี้ปรากฏในการค้นหาและในไดเรกทอรีโปรไฟล์
         name: แฮชแท็ก
@@ -197,5 +202,8 @@ th:
     'no': ไม่
     required:
       mark: "*"
-      text: ต้องระบุ
+      text: จำเป็น
+    title:
+      sessions:
+        webauthn: ใช้หนึ่งในกุญแจความปลอดภัยของคุณเพื่อลงชื่อเข้า
     'yes': ใช่
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index 834a22207..d299ddd86 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -14,6 +14,12 @@ tr:
         send_email_notification: Kullanıcı, hesabına ne olduğuna dair bir açıklama alacak
         text_html: İsteğe bağlı. Toot sözdizimleri kullanabilirsiniz. Zamandan kazanmak için <a href="%{path}">uyarı ön-ayarları ekleyebilirsiniz</a>
         type_html: "<strong>%{acct}</strong> ile ne yapılacağını seçin"
+        types:
+          disable: Kullanıcının hesabını kullanmasını engelle ama içeriklerini silme veya gizleme.
+          none: Bunu, başka bir eylem tetiklemeden kullanıcıya bir uyarı göndermek için kullan.
+          sensitive: Bu kullanıcının tüm medya eklerini hassas olarak işaretlemeye zorla.
+          silence: Kullanıcının herkese açık şekilde gönderimde bulunmasını engelle, gönderilerini ve bildirimlerini onları takip etmeyen kişilerden gizle.
+          suspend: Bu hesaptan herhangi bir etkileşimi engelle ve içeriğini sil. 30 gün içerisinde geri alınabilir.
         warning_preset_id: İsteğe bağlı. Hazır ayarın sonuna hala özel metin ekleyebilirsiniz
       announcement:
         all_day: İşaretlendiğinde, yalnızca zaman aralığındaki tarihler görüntülenir
@@ -73,6 +79,8 @@ tr:
           no_access: Tüm kaynaklara erişimi engelle
           sign_up_requires_approval: Yeni kayıt onayınızı gerektirir
         severity: Bu IP'den gelen isteklere ne olacağını seçin
+      rule:
+        text: Bu sunucu üzerindeki kullanıcılar için bir kural veya gereksinimi tanımlayın. Kuralı kısa ve yalın tutmaya çalışın
       sessions:
         otp: Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz.
         webauthn: Bir USB anahtarıysa, taktığınızdan ve gerekirse üzerine tıkladığınızdan emin olun.
@@ -101,7 +109,7 @@ tr:
           disable: Dondur
           none: Hiç birşey
           sensitive: Hassas
-          silence: Limit
+          silence: Sınırla
           suspend: Hesap verilerini askıya alın ve geri alınamaz şekilde silin
         warning_preset_id: Bir uyarı ön ayarı kullan
       announcement:
@@ -197,6 +205,8 @@ tr:
         reblog: Biri durumunuzu boostladı
         report: Yeni rapor gönderildi
         trending_tag: İncelenmemiş bir etiket gündem oluyor
+      rule:
+        text: Kural
       tag:
         listable: Bu etiketin aramalarda ve profil dizininde görünmesine izin ver
         name: Etiket
diff --git a/config/locales/simple_form.tt.yml b/config/locales/simple_form.tt.yml
index 5eab4abff..1b1d034b3 100644
--- a/config/locales/simple_form.tt.yml
+++ b/config/locales/simple_form.tt.yml
@@ -1 +1,28 @@
+---
 tt:
+  simple_form:
+    labels:
+      account_warning_preset:
+        title: Исем
+      admin_account_action:
+        type: Ğämäl
+        types:
+          sensitive: Sizmäle
+          suspend: Искә алмау
+      defaults:
+        avatar: Аватар
+        data: Мәгълүмат
+        email: Почта адресы
+        header: Башлам
+        password: Парол
+        setting_display_media_default: Töpcay
+        username: Кулланучы исеме
+      invite:
+        comment: Аңлатма
+      ip_block:
+        comment: Аңлатма
+        ip: ІР
+    'no': Юк
+    required:
+      mark: "*"
+    'yes': Әйе
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 7580ef0c1..2ada78ca1 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -3,17 +3,23 @@ uk:
   simple_form:
     hints:
       account_alias:
-        acct: Вкажіть ім'я користувача@домен облікового запису, з якої ви хочете переміститися
+        acct: Вкажіть ім'я користувача@домен облікового запису, з якого ви хочете здійснити перенесення
       account_migration:
-        acct: Вкажіть ім'я користувача@домен облікового запису, на яку ви хочете переміститися
+        acct: Вкажіть ім'я користувача@домен облікового запису, на який ви хочете здійснити перенесення
       account_warning_preset:
         text: Ви можете використовувати синтаксис дмухів, наприклад URLи, хештеґи та згадки
         title: Необов'язково. Не відображається отримувачу
       admin_account_action:
         include_statuses: Користувач побачить, які дмухи призвели до адміністративних дій або попереджень
         send_email_notification: Користувач отримає роз'яснення, що сталося з його обліковим записом
-        text_html: Необов'язково. Ви можете використовувати синтакс дмухів. Ви можете <a href="%{path}">додати шаблони попереджень</a>, щоб заощадити час
+        text_html: Необов'язково. Ви можете використовувати синтаксис дмухів. Ви можете <a href="%{path}">додати шаблони попереджень</a>, щоб заощадити час
         type_html: Оберіть, що робити з <strong>%{acct}</strong>
+        types:
+          disable: Не давати користувачеві можливість використовувати свій обліковий запис, але не видаляти і не приховувати його вміст.
+          none: Використовуйте це, щоб надіслати попередження користувачеві без подальших дій.
+          sensitive: Примусово позначати всі медіа файли цього користувача делікатними.
+          silence: Заборонити користувачеві розміщувати загальнодоступні повідомлення, приховувати їхні повідомлення та повідомлення від людей, які не слідкують за ними.
+          suspend: Заборонити взаємодію з цим обліковим записом та видалити його вміст. Можна скасувати впродовж 30 днів.
         warning_preset_id: Необов'язково. Ви можете ще додати будь-який текст до кінця шаблону
       announcement:
         all_day: Якщо вибрано, відображаються лише дати діапазону часу
@@ -51,7 +57,7 @@ uk:
         setting_use_blurhash: Градієнти, що базуються на кольорах прихованих медіа, але роблять нерозрізненними будь-які деталі
         setting_use_pending_items: Не додавати нові повідомлення до стрічок миттєво. Показувати їх тільки після додаткового клацання.
         username: Ваше ім'я користувача буде унікальним у %{domain}
-        whole_word: Якщо пошукове слово або фраза містить тільки літери та цифри, воно має співпадати цілком
+        whole_word: Якщо пошукове слово або фраза містить лише літери та цифри, воно має збігатися цілком
       domain_allow:
         domain: Цей домен зможе отримувати дані з цього серверу. Вхідні дані будуть оброблені та збережені
       email_domain_block:
@@ -65,6 +71,16 @@ uk:
         data: Файл CSV, експортований з іншого сервера Mastodon
       invite_request:
         text: Це допоможе нам розглянути вашу заяву
+      ip_block:
+        comment: Необов'язково. Нагадування, чому ви додали це правило.
+        expires_in: IP-адреси є вичерпним ресурсом, іноді ними користуються спільно й вони часто змінюють власників. Тому безтермінові блокування IP не рекомендовані.
+        ip: Введіть адресу IPv4 або IPv6. Ви можете блокувати цілі діапазони, використовуючи синтаксис CIDR. Будьте обережні, щоб не заблокувати себе!
+        severities:
+          no_access: Заблокувати доступ до всіх ресурсів
+          sign_up_requires_approval: Нові реєстрації потребуватимуть затвердження вами
+        severity: Виберіть, що буде відбуватися з запитами з цієї IP
+      rule:
+        text: Опис правила або вимоги для користувачів на цьому сервері. Спробуйте зробити його коротким і простим
       sessions:
         otp: Введите код двухфакторной аутентификации или используйте один из Ваших кодов восстановления.
         webauthn: Якщо це USB ключ, вставте його і, якщо необхідно, натисніть на нього.
@@ -92,6 +108,7 @@ uk:
         types:
           disable: Вимкнути
           none: Нічого не робити
+          sensitive: Делікатне
           silence: Глушення
           suspend: Призупинити та незворотньо видалити дані облікового запису
         warning_preset_id: Використати шаблон попередження
@@ -117,6 +134,7 @@ uk:
         expires_in: Закінчується після
         fields: Метадані профіля
         header: Заголовок
+        honeypot: "%{label} (не заповнюйте)"
         inbox_url: URL поштової скриньки ретранслятора
         irreversible: Видалити назавжди, а не просто сховати
         locale: Мова
@@ -136,6 +154,7 @@ uk:
         setting_default_privacy: Видимість постів
         setting_default_sensitive: Позначити медіа як дражливе
         setting_delete_modal: Показувати діалог підтвердження під час видалення дмуху
+        setting_disable_swiping: Вимкнути рух проведення
         setting_display_media: Відображення медіа
         setting_display_media_default: За промовчанням
         setting_display_media_hide_all: Сховати всі
@@ -169,6 +188,13 @@ uk:
         comment: Коментар
       invite_request:
         text: Чому ви хочете приєднатися?
+      ip_block:
+        comment: Коментар
+        ip: IP
+        severities:
+          no_access: Заборонити доступ
+          sign_up_requires_approval: Обмеження реєстрації
+        severity: Правило
       notification_emails:
         digest: Надсилати дайджест електронною поштою
         favourite: Надсилати листа, коли комусь подобається Ваш статус
@@ -179,6 +205,8 @@ uk:
         reblog: Надсилати листа, коли хтось передмухує Ваш статус
         report: Надсилати електронного листа, коли з'являється нова скарга
         trending_tag: Надсилати електронного листа, коли нерозглянутий хештеґ стає популярним
+      rule:
+        text: Правило
       tag:
         listable: Дозволити появу цього хештеґа у каталозі профілів
         name: Хештеґ
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index b9b15cc0e..a07595c6a 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -14,6 +14,12 @@ vi:
         send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ
         text_html: Tùy chọn. Bạn nên dùng <a href="%{path}">cảnh cáo cài sẵn</a> để tiết kiệm thời gian
         type_html: Chọn làm gì với <strong>%{acct}</strong>
+        types:
+          disable: Cấm người này tiếp tục đăng nhập, nhưng không xóa hoặc ẩn tút của họ.
+          none: Sử dụng để gửi cảnh cáo tới tài khoản này, không áp đặt trừng phạt.
+          sensitive: Mọi tập tin của tài khoản này tải lên đều sẽ bị gắn nhãn nhạy cảm.
+          silence: Cấm tài khoản này đăng tút công khai, ẩn tút của họ hiện ra với những người chưa theo dõi họ.
+          suspend: Vô hiệu hóa mọi hoạt động của tài khoản này và xóa sạch dữ liệu. Có thể mở lại trong vòng 30 ngày.
         warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm ghi chú riêng
       announcement:
         all_day: Chỉ có khoảng thời gian được đánh dấu mới hiển thị
@@ -24,12 +30,12 @@ vi:
       defaults:
         autofollow: Những người đăng ký sẽ tự động theo dõi bạn
         avatar: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
-        bot: Tài khoản này tự động thực hiện các hành động và không cần thiết theo dõi
+        bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật
         context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng
         current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
         current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại
         digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt)
-        discoverable: Mọi người sẽ có thể tìm thấy bạn dễ dàng hơn
+        discoverable: Cho phép tài khoản của bạn xuất hiện trong gợi ý theo dõi và những tính năng khác
         email: Bạn sẽ được gửi một email xác nhận
         fields: Được phép tạo tối đa 4 mục trên trang cá nhân của bạn
         header: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
@@ -73,6 +79,8 @@ vi:
           no_access: Chặn truy cập từ tất cả IP này
           sign_up_requires_approval: Bạn sẽ phê duyệt những đăng ký mới từ IP này
         severity: Chọn hành động nếu nhận được yêu cầu từ IP này
+      rule:
+        text: Mô tả một quy tắc bắt buộc trên máy chủ này. Nên để ngắn và đơn giản.
       sessions:
         otp: 'Nhập mã xác thực hai bước được tạo bởi ứng dụng điện thoại của bạn hoặc dùng một trong các mã khôi phục của bạn:'
         webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều.
@@ -99,11 +107,11 @@ vi:
         type: Hành động
         types:
           disable: Tạm khóa
-          none: Cấm upload
+          none: Gửi cảnh cáo
           sensitive: Nhạy cảm
           silence: Tạm ẩn
           suspend: Vô hiệu hóa
-        warning_preset_id: Dùng cảnh cáo cài sẵn
+        warning_preset_id: Dùng mẫu có sẵn
       announcement:
         all_day: Sự kiện diễn ra hằng ngày
         ends_at: Kết thúc sự kiện
@@ -197,8 +205,10 @@ vi:
         reblog: Ai đó chia sẻ tút của bạn
         report: Ai đó gửi báo cáo kiểm duyệt
         trending_tag: Một hashtag chưa được phê duyệt đang là xu hướng
+      rule:
+        text: Quy tắc
       tag:
-        listable: Cho phép hashtag này xuất hiện trong tìm kiếm và trên tiểu sử cá nhân
+        listable: Cho phép hashtag này xuất hiện trong tìm kiếm và đề xuất
         name: Hashtag
         trendable: Cho phép hashtag này xuất hiện trong xu hướng
         usable: Cho phép dùng hashtag này trong tút
diff --git a/config/locales/simple_form.zgh.yml b/config/locales/simple_form.zgh.yml
index ed9ea90f8..1d55f34b5 100644
--- a/config/locales/simple_form.zgh.yml
+++ b/config/locales/simple_form.zgh.yml
@@ -36,6 +36,4 @@ zgh:
       tag:
         name: ⵀⴰⵛⵟⴰⴳ
     'no': ⵓⵀⵓ
-    required:
-      mark: "*"
     'yes': ⵢⴰⵀ
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 0e7b1e665..43f85ce22 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -3,24 +3,30 @@ zh-CN:
   simple_form:
     hints:
       account_alias:
-        acct: 指定您想要迁移过来的帐号的 用户名@站点域名
+        acct: 指定您想要迁移过来的原帐号:用户名@站点域名
       account_migration:
-        acct: 指定你想迁移过去的帐号的 用户名@站点域名
+        acct: 指定你想迁移过去的目标帐号:用户名@站点域名
       account_warning_preset:
         text: 你可以使用嘟文格式,例如加入 URL、话题标签和“@”
         title: 可选。对接收者不可见
       admin_account_action:
         include_statuses: 用户将会看到哪些嘟文导致了审核行为或警告
-        send_email_notification: 用户将收到对其账号上发生的事的解释
+        send_email_notification: 用户将收到关于其账号异动的解释
         text_html: 可选。你可以使用嘟文格式。你可以<a href="%{path}">预置警告</a>以节省时间
         type_html: 用<strong>%{acct}</strong>选择做什么
+        types:
+          disable: 禁止用户使用账户,但不会删除或隐藏账户内容。
+          none: 用它来向用户发送警告,不会触发其他操作。
+          sensitive: 强制将此用户的所有媒体文件标记为敏感内容。
+          silence: 阻止用户发送公开嘟文,除了关注者以外,其他人都无法看到他的嘟文和通知。
+          suspend: 阻止此账户的任何交互并删除其内容。30天内可以撤销操作。
         warning_preset_id: 可选。你可以在预置文本末尾添加自定义文本
       announcement:
         all_day: 如果选中,只有该时间段内的日期会显示。
         ends_at: 可选。公告会在该时间点自动取消发布
         scheduled_at: 留空的话,公告会立即发布。
         starts_at: 可选。你可以让你的公告只在特定时间段显示。
-        text: 你可以使用嘟文格式。但是请注意不要让公告占据太多用户屏幕上的空间。
+        text: 你可以使用嘟文格式。但请注意不要让公告占据用户太多屏幕空间。
       defaults:
         autofollow: 通过邀请链接注册的用户将会自动关注你
         avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px
@@ -38,22 +44,22 @@ zh-CN:
         locale: 用户界面、电子邮件和推送通知中使用的语言
         locked: 你需要手动审核所有关注请求
         password: 至少需要8个字符
-        phrase: 匹配将无视大小写和嘟文的内容警告
-        scopes: 哪些 API 被允许使用。如果你选中了更高一级的范围,就不能单个选中了。
-        setting_aggregate_reblogs: 请不要显示最近已经被转嘟过的转嘟(只会影响新收到的转嘟)
+        phrase: 匹配将忽略嘟文或内容警告里的字母大小写
+        scopes: 哪些 API 被允许使用。如果你勾选了更高一级的范围,就不用单独选中子项目了。
+        setting_aggregate_reblogs: 不显示最近已经被转嘟过的嘟文(只会影响新收到的转嘟)
         setting_default_sensitive: 敏感内容默认隐藏,并在点击后显示
         setting_display_media_default: 隐藏被标记为敏感内容的媒体
-        setting_display_media_hide_all: 总是隐藏所有媒体
-        setting_display_media_show_all: 总是显示被标记为敏感内容的媒体
-        setting_hide_network: 你关注的人和关注你的人将不会在你的个人资料页上展示
+        setting_display_media_hide_all: 隐藏所有媒体
+        setting_display_media_show_all: 显示所有的媒体
+        setting_hide_network: 你的关注者和你关注的人将不会在你的个人资料页上展示
         setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面
         setting_show_application: 你用来发表嘟文的应用程序将会在你嘟文的详细内容中显示
         setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的
         setting_use_pending_items: 关闭自动滚动更新,时间轴会在点击后更新
-        username: 你的用户名在 %{domain} 上是独特的
-        whole_word: 如果关键词只包含字母和数字,就只会在整个词被匹配时才会套用
+        username: 你的用户名在 %{domain} 上是唯一的
+        whole_word: 如果关键词只包含字母和数字,将只在词语完全匹配时才会应用
       domain_allow:
-        domain: 该站点将能够从该服务器上拉取数据,并且从那里发过来的数据也会被处理和存储。
+        domain: 该站点将能够从该服务器上拉取数据,并处理和存储收到的数据。
       email_domain_block:
         domain: 这里可以是邮箱地址中的域名部分、域名解析到的 MX 记录,或者 MX 记录解析到的域名。这些检查会在用户注册时进行,如果邮箱域名被封禁,那么注册会被拒绝。
         with_dns_records: Mastodon 会尝试解析所给域名的 DNS 记录,然后把解析结果一并封禁
@@ -73,6 +79,8 @@ zh-CN:
           no_access: 阻止访问所有资源
           sign_up_requires_approval: 新的注册需要您的批准
         severity: 选择如何处理来自此 IP 的请求。
+      rule:
+        text: 描述这个服务器上的用户规则或要求。尽量确保简洁、清晰易懂
       sessions:
         otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码:
         webauthn: 如果是 USB 密钥,请确保将其插入,如有必要,请点击它。
@@ -93,12 +101,12 @@ zh-CN:
         text: 预置文本
         title: 标题
       admin_account_action:
-        include_statuses: 在电子邮件中包括已举报的嘟文
+        include_statuses: 在电子邮件中包括已报告的嘟文
         send_email_notification: 通过邮件提醒此用户
         text: 内容警告
         type: 动作
         types:
-          disable: 禁用
+          disable: 冻结
           none: 忽略
           sensitive: 敏感内容
           silence: 静音
@@ -195,8 +203,10 @@ zh-CN:
         mention: 当有用户在嘟文中提及我时,发送电子邮件提醒我
         pending_account: 在有帐号需要审核时,发送电子邮件提醒我
         reblog: 当有用户转嘟了我的嘟文时,发送电子邮件提醒我
-        report: 在提交新举报时,发送电子邮件提醒我
+        report: 在提交新报告时,发送电子邮件提醒我
         trending_tag: 当未经审核的话题成为当前热门时发邮件提醒
+      rule:
+        text: 规则
       tag:
         listable: 允许这个话题标签在用户目录中显示
         name: 话题标签
diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml
index ffa2fcde5..27a99da4c 100644
--- a/config/locales/simple_form.zh-HK.yml
+++ b/config/locales/simple_form.zh-HK.yml
@@ -14,6 +14,12 @@ zh-HK:
         send_email_notification: 使用者將收到帳戶發生之事情的解釋
         text_html: 選用。你能使用 toot 語法。你可 <a href="%{path}">新增警告預設</a> 來節省時間
         type_html: 設定要使用 <strong>%{acct}</strong> 做的事
+        types:
+          disable: 禁止該使用者使用他們的帳號,但是不刪除或隱藏他們的內容。
+          none: 用這個來警告該使用者,而不進行其他操作。
+          sensitive: 強制標記此用戶的所有媒體附件為敏感內容。
+          silence: 禁止該使用者發表公開嘟文,沒有跟隨他們的帳號不會看到來自該用戶的嘟文和通知。
+          suspend: 禁止該帳號的所有互動並刪除其內容。此操作在三十日內可以被復原。
         warning_preset_id: 選用。你仍可在預設訊息的結尾加入自訂文字
       announcement:
         all_day: 勾選後,只會顯示出時間範圍中的日期部分
@@ -73,6 +79,8 @@ zh-HK:
           no_access: 封鎖所有資源存取
           sign_up_requires_approval: 新登記申請正等候你審批
         severity: 請設定伺服器將如何處理來自這個 IP 位址的請求
+      rule:
+        text: 請描述在此伺服器上用戶需要遵守的規則或要求。請盡量保持簡短易明。
       sessions:
         otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼:
         webauthn: 如果它是 USB 安全鑰匙的話,請先插入電腦。如鑰匙設計有需要,請按鍵啟用。
@@ -197,6 +205,8 @@ zh-HK:
         reblog: 當有人轉推你的文章時
         report: 收到新檢舉時
         trending_tag: 當未審核的標籤成為當前熱門時
+      rule:
+        text: 規則
       tag:
         listable: 允許此主題標籤在搜尋及個人檔案目錄中顯示
         name: 主題標籤
diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml
index fbc2ff98b..ce255ec36 100644
--- a/config/locales/simple_form.zh-TW.yml
+++ b/config/locales/simple_form.zh-TW.yml
@@ -12,6 +12,12 @@ zh-TW:
         send_email_notification: 使用者將收到帳戶發生之事情的解釋
         text_html: 選用。您能使用嘟文語法。您可 <a href="%{path}">新增警告預設</a> 來節省時間
         type_html: 設定要使用 <strong>%{acct}</strong> 做的事
+        types:
+          disable: 禁止該使用者使用他們的帳號,但是不刪除或隱藏他們的內容。
+          none: 使用這個寄送警告給該使用者,而不進行其他動作。
+          sensitive: 強制標記此使用者所有媒體為敏感內容。
+          silence: 禁止該使用者發公開嘟文,從無跟隨他們的帳號中隱藏嘟文和通知。
+          suspend: 禁止所有對該帳號任何互動,並且刪除其內容。三十日內可以撤回。
         warning_preset_id: 選用。您仍可在預設的結尾新增自訂文字
       announcement:
         all_day: 核取後,只會顯示出時間範圍中的日期部分
@@ -53,6 +59,8 @@ zh-TW:
         data: 從其他 Mastodon 伺服器匯出的 CSV 檔案
       invite_request:
         text: 這會協助我們審核您的應用程式
+      rule:
+        text: 說明使用者在此伺服器上需遵守的規則或條款。試著維持各項條款簡短而明瞭。
       sessions:
         otp: 請輸入產生自您手機 App 的兩步驟驗證碼,或輸入其中一個復原代碼:
       tag:
@@ -164,6 +172,8 @@ zh-TW:
         pending_account: 需要審核的新帳戶
         reblog: 當有使用者轉嘟你的嘟文時,傳送電子信件通知
         report: 當提交新檢舉時傳送電子郵件
+      rule:
+        text: 規則
       tag:
         listable: 允許此主題標籤在搜尋及個人檔案目錄中顯示
         name: 主題標籤
@@ -171,7 +181,6 @@ zh-TW:
         usable: 允許嘟文使用此主題標籤
     'no': 否
     required:
-      mark: "*"
       text: 必須填寫
     title:
       sessions:
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index bc214a444..51c856b4d 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -7,7 +7,6 @@ sk:
     active_count_after: aktívni
     active_footnote: Mesačne aktívnych užívateľov (MAU)
     administered_by: 'Správcom je:'
-    api: API
     apps: Aplikácie
     apps_platforms: Užívaj Mastodon z iOSu, Androidu, a iných platforiem
     browse_directory: Prehľadávaj databázu profilov, a filtruj podľa záujmov
@@ -39,7 +38,6 @@ sk:
     terms: Podmienky užitia
     unavailable_content: Nedostupný obsah
     unavailable_content_description:
-      domain: Server
       reason: 'Dôvod:'
       rejecting_media: 'Mediálne súbory z týchto serverov nebudú spracované, alebo ukladané, a nebudú z nich zobrazované žiadne náhľady, vyžadujúc ručné prekliknutie priamo až k pôvodnému súboru:'
       rejecting_media_title: Triedené médiá
@@ -83,10 +81,8 @@ sk:
       other: Príspevkov
     posts_tab_heading: Príspevky
     posts_with_replies: Príspevky s odpoveďami
-    reserved_username: Prihlasovacie meno je vyhradené
     roles:
       admin: Správca
-      bot: Bot
       group: Skupina
       moderator: Moderátor
     unavailable: Profil nieje dostupný
@@ -125,7 +121,6 @@ sk:
       display_name: Ukáž meno
       domain: Doména
       edit: Uprav
-      email: Email
       email_status: Stav emailu
       enable: Povoľ
       enabled: Povolený
@@ -201,7 +196,6 @@ sk:
       unsubscribe: Prestaň odoberať
       username: Prezývka
       warn: Varuj
-      web: Web
       whitelisted: Na bielej listine
     action_logs:
       action_types:
@@ -226,39 +220,6 @@ sk:
         silence_account: Utíš účet
         suspend_account: Vylúč účet
         update_status: Aktualizuj stav
-      actions:
-        assigned_to_self_report: "%{name} pridelil/a hlásenie užívateľa %{target} sebe"
-        change_email_user: "%{name} zmenil/a emailovú adresu užívateľa %{target}"
-        confirm_user: "%{name} potvrdil emailovú adresu používateľa %{target}"
-        create_account_warning: "%{name} poslal/a varovanie užívateľovi %{target}"
-        create_custom_emoji: "%{name} nahral nový emoji %{target}"
-        create_domain_allow: "%{name} pridal/a doménu %{target} na zoznam povolených"
-        create_domain_block: "%{name} zablokoval doménu %{target}"
-        create_email_domain_block: "%{name} pridal e-mailovú doménu %{target} na zoznam zakázaných"
-        demote_user: "%{name} degradoval používateľa %{target}"
-        destroy_custom_emoji: "%{name} zničil/a %{target} emoji"
-        destroy_domain_allow: "%{name} odstránil/a doménu %{target} zo zoznamu povolených"
-        destroy_domain_block: "%{name} povolil doménu %{target}"
-        destroy_email_domain_block: "%{name} pridal e-mailovú doménu %{target} na zoznam povolených"
-        destroy_status: "%{name} zmazal status %{target}"
-        disable_2fa_user: "%{name} vypol požiadavku 2FA pre používateľa %{target}"
-        disable_custom_emoji: "%{name} zakázal emoji %{target}"
-        disable_user: "%{name} zakázal prihlásenie pre používateľa %{target}"
-        enable_custom_emoji: "%{name} povolil emoji %{target}"
-        enable_user: "%{name} povolil prihlásenie pre používateľa %{target}"
-        memorialize_account: "%{name} zmenil účet %{target} na pamätnú stránku"
-        promote_user: "%{name} vyzdvihli užívateľa %{target}"
-        remove_avatar_user: "%{name} odstránil/a %{target}ov avatár"
-        reopen_report: "%{name} znovu otvoril/a hlásenie užívateľa %{target}"
-        reset_password_user: "%{name} resetoval/a heslo pre používateľa %{target}"
-        resolve_report: "%{name} vyriešili nahlásenie užívateľa %{target}"
-        silence_account: "%{name} utíšil/a účet %{target}"
-        suspend_account: "%{name} zablokoval/a účet používateľa %{target}"
-        unassigned_report: "%{name} odobral/a report od %{target}"
-        unsilence_account: "%{name} zrušil/a stíšenie účtu používateľa %{target}"
-        unsuspend_account: "%{name} zrušil/a blokovanie účtu používateľa %{target}"
-        update_custom_emoji: "%{name} aktualizoval/a emoji %{target}"
-        update_status: "%{name} aktualizoval/a status pre %{target}"
       deleted_status: "(zmazaný príspevok)"
       filter_by_action: Filtruj podľa úkonu
       filter_by_user: Trieď podľa užívateľa
@@ -317,7 +278,6 @@ sk:
       feature_profile_directory: Katalóg profilov
       feature_registrations: Registrácie
       feature_relay: Federovací mostík
-      feature_spam_check: Proti spamu
       feature_timeline_preview: Náhľad časovej osi
       features: Vymoženosti
       hidden_service: Federácia so skrytými službami
@@ -502,8 +462,6 @@ sk:
         users: Prihláseným, miestnym užívateľom
       domain_blocks_rationale:
         title: Ukáž zdôvodnenie
-      enable_bootstrap_timeline_accounts:
-        title: Novým užívateľom povoľ východiskové následovania
       hero:
         desc_html: Zobrazuje sa na hlavnej stránke. Doporučené je rozlišenie aspoň 600x100px. Pokiaľ nič nieje dodané, bude nastavený základný orázok serveru.
         title: Obrázok hrdinu
@@ -554,9 +512,6 @@ sk:
         desc_html: Môžeš si napísať svoje vlastné pravidla o súkromí, prevádzke, alebo aj iné legality. Môžeš tu používať HTML kód
         title: Vlastné pravidlá prevádzky
       site_title: Názov servera
-      spam_check_enabled:
-        desc_html: Mastodon môže sám stíšiť, a nahlásiť účty v závislosti od rozpoznania parametrov ako napríklad opakované rozosielanie nevyžiadanej komunikácie. Môže dôjsť aj k nesprávnej identifikácii.
-        title: Proti spamu
       thumbnail:
         desc_html: Používané pre náhľady cez OpenGraph a API. Doporučuje sa rozlišenie 1200x630px
         title: Miniatúra servera
@@ -591,9 +546,6 @@ sk:
       accounts_today: Jedinečných užívateľov za dnešok
       accounts_week: Jedinečných užívateľov tento týždeň
       breakdown: Rozpis dnešného využitia podľa zdroja
-      context: Súvis
-      directory: V zozname
-      in_directory: "%{count} v zozname"
       last_active: Naposledy aktívny
       most_popular: Najpopulárnejšie
       most_recent: Najnovšie
@@ -639,7 +591,6 @@ sk:
     toot_layout: Rozloženie príspevkov
   application_mailer:
     notification_preferences: Zmeň emailové voľby
-    salutation: "%{name},"
     settings: 'Zmeň emailové voľby: %{link}'
     view: 'Zobraziť:'
     view_profile: Zobraz profil
@@ -768,7 +719,6 @@ sk:
       request: Vyžiadaj si tvoj archív
       size: Veľkosť
     blocks: Blokujete
-    csv: CSV
     domain_blocks: Blokované domény
     lists: Zoznamy
     mutes: Stíšil/a si
@@ -1064,8 +1014,6 @@ sk:
     profile: Profil
     relationships: Sledovania a následovatelia
     two_factor_authentication: Dvojfázové overenie
-  spam_check:
-    spam_detected: Toto je automatizované hlásenie. Bol odhalený spam.
   statuses:
     attached:
       description: 'Priložené: %{attached}'
@@ -1074,11 +1022,6 @@ sk:
         many: "%{count} obrázkov"
         one: "%{count} obrázok"
         other: "%{count} obrázky"
-      video:
-        few: "%{count} videí"
-        many: "%{count} videí"
-        one: "%{count} video"
-        other: "%{count} videá"
     boosted_from_html: Vyzdvihnuté od %{acct_link}
     content_warning: 'Varovanie o obsahu: %{warning}'
     disallowed_hashtags:
@@ -1214,7 +1157,6 @@ sk:
       title: Vitaj na palube, %{name}!
   users:
     follow_limit_reached: Nemôžeš následovať viac ako %{limit} ľudí
-    invalid_email: Emailová adresa je neplatná
     invalid_otp_token: Neplatný kód pre dvojfaktorovú autentikáciu
     otp_lost_help_html: Pokiaľ si stratil/a prístup k obom, môžeš dať vedieť %{email}
     seamless_external_login: Si prihlásená/ý cez externú službu, takže nastavenia hesla a emailu ti niesú prístupné.
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 91466c9c2..8d9e6d8e5 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -7,7 +7,6 @@ sl:
     active_count_after: dejaven
     active_footnote: Aktivni mesečni uporabniki (AMU)
     administered_by: 'Upravlja:'
-    api: API
     apps: Mobilne aplikacije
     apps_platforms: Uporabljajte Mastodon iz iOS, Android ali iz drugih platform
     browse_directory: Brskajte po imeniku profilov in filtriranje po interesih
@@ -71,11 +70,9 @@ sl:
       two: Tuta
     posts_tab_heading: Tuti
     posts_with_replies: Tuti in odgovori
-    reserved_username: Uporabniško ime je zasedeno
     roles:
       admin: Skrbnik
       bot: Robot
-      moderator: Mod
     unavailable: Profil ni na voljo
     unfollow: Prenehaj slediti
   admin:
@@ -120,7 +117,6 @@ sl:
       header: Glava
       inbox_url: URL mape "Prejeto"
       invited_by: Povabljen od
-      ip: IP
       joined: Pridružil
       location:
         all: Vse
@@ -164,7 +160,6 @@ sl:
       role: Dovoljenja
       roles:
         admin: Skrbnik
-        moderator: Moderator
         staff: Osebje
         user: Uporabnik
       search: Iskanje
@@ -188,37 +183,6 @@ sl:
       web: Splet
       whitelisted: Na belem seznamu
     action_logs:
-      actions:
-        assigned_to_self_report: "%{name} je prijavil %{target} sebi"
-        change_email_user: "%{name} je spremenil naslov e-pošte uporabnika %{target}"
-        confirm_user: "%{name} je potrdil naslov e-pošte uporabnika %{target}"
-        create_account_warning: "%{name} je poslal opozorilo %{target}"
-        create_custom_emoji: "%{name} je posodobil emotikone %{target}"
-        create_domain_block: "%{name} je blokiral domeno %{target}"
-        create_email_domain_block: "%{name} je dal na črni seznam e-pošto domene %{target}"
-        demote_user: "%{name} je degradiral uporabnika %{target}"
-        destroy_custom_emoji: "%{name} je uničil emotikone %{target}"
-        destroy_domain_block: "%{name} je odblokiral domeno %{target}"
-        destroy_email_domain_block: "%{name} je dal na beli seznam e-pošto domene %{target}"
-        destroy_status: "%{name} je odstranil stanje od %{target}"
-        disable_2fa_user: "%{name} je onemogočil dvofaktorsko zahtevo za uporabnika %{target}"
-        disable_custom_emoji: "%{name} je onemogočil emotikone %{target}"
-        disable_user: "%{name} je onemogočil prijavo za uporabnika %{target}"
-        enable_custom_emoji: "%{name} je omogočil emotikone %{target}"
-        enable_user: "%{name} je omogočil prijavo za uporabnika %{target}"
-        memorialize_account: "%{name} je spremenil račun od %{target} v stran spominov"
-        promote_user: "%{name} je promoviral uporabnika %{target}"
-        remove_avatar_user: "%{name} je odstranil podobo od %{target}"
-        reopen_report: "%{name} je ponovno odprl prijavo %{target}"
-        reset_password_user: "%{name} je ponastavil geslo od uporabnika %{target}"
-        resolve_report: "%{name} je razrešil prijavo %{target}"
-        silence_account: "%{name} je utišal račun od %{target}"
-        suspend_account: "%{name} je suspendiral račun od %{target}"
-        unassigned_report: "%{name} je nedodeljeno prijavil %{target}"
-        unsilence_account: "%{name} je preklical utišanje računa od %{target}"
-        unsuspend_account: "%{name} je aktiviral račun od %{target}"
-        update_custom_emoji: "%{name} je posodobil emotikone %{target}"
-        update_status: "%{name} je posodobil stanje od %{target}"
       deleted_status: "(izbrisano stanje)"
       title: Dnevnik revizije
     custom_emojis:
@@ -254,7 +218,6 @@ sl:
       feature_profile_directory: Imenik profilov
       feature_registrations: Registracije
       feature_relay: Rele federacije
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Predogled časovnice
       features: Zmožnosti
       hidden_service: Federacija s skritimi storitvami
@@ -345,7 +308,6 @@ sl:
         all: Vse
         available: Razpoložljivo
         expired: Potekel
-        title: Filter
       title: Povabila
     pending_accounts:
       title: "(%{count}) računov na čakanju"
@@ -457,9 +419,6 @@ sl:
         desc_html: Lahko napišete svojo pravilnik o zasebnosti, pogoje storitve ali druge pravne dokumente. Lahko uporabite oznake HTML
         title: Pogoji storitve po meri
       site_title: Ime strežnika
-      spam_check_enabled:
-        desc_html: Mastodon lahko samodejno utiša in samodejno prijavi račune, ki temeljijo na ukrepih, kot je odkrivanje računov, ki pošiljajo ponavljajoča se neželena sporočila. Lahko pride do zmot.
-        title: Anti-spam
       thumbnail:
         desc_html: Uporablja se za predogled prek OpenGrapha in API-ja. Priporočamo 1200x630px
         title: Sličica strežnika
@@ -504,7 +463,6 @@ sl:
     sensitive_content: Občutljiva vsebina
   application_mailer:
     notification_preferences: Spremenite e-poštne nastavitve
-    salutation: "%{name},"
     settings: 'Spremenite e-poštne nastavitve: %{link}'
     view: 'Pogled:'
     view_profile: Ogled profila
@@ -532,9 +490,6 @@ sl:
     migrate_account: Premakni se na drug račun
     migrate_account_html: Če želite ta račun preusmeriti na drugega, ga lahko <a href="%{path}">nastavite tukaj</a>.
     or_log_in_with: Ali se prijavite z
-    providers:
-      cas: CAS
-      saml: SAML
     register: Vpis
     registration_closed: "%{instance} ne sprejema novih članov"
     resend_confirmation: Ponovno pošlji navodila za potrditev
@@ -563,18 +518,8 @@ sl:
     title: Sledi %{acct}
   datetime:
     distance_in_words:
-      about_x_hours: "%{count}h"
-      about_x_months: "%{count}mo"
-      about_x_years: "%{count}y"
-      almost_x_years: "%{count}y"
       half_a_minute: Pravkar
-      less_than_x_minutes: "%{count}m"
       less_than_x_seconds: Pravkar
-      over_x_years: "%{count}y"
-      x_days: "%{count}d"
-      x_minutes: "%{count}m"
-      x_months: "%{count}mo"
-      x_seconds: "%{count}s"
   deletes:
     confirm_password: Vnesite svoje trenutno geslo, da potrdite svojo identiteto
     proceed: Izbriši račun
@@ -610,7 +555,6 @@ sl:
       request: Zahtevajte svoj arhiv
       size: Velikost
     blocks: Blokirate
-    csv: CSV
     domain_blocks: Bloki domene
     lists: Seznami
     mutes: Utišate
@@ -758,22 +702,11 @@ sl:
       body: "%{name} je spodbudil/a vaše stanje:"
       subject: "%{name} je spodbudil/a vaše stanje"
       title: Nova spodbuda
-  number:
-    human:
-      decimal_units:
-        format: "%n%u"
-        units:
-          billion: B
-          million: M
-          quadrillion: Q
-          thousand: K
-          trillion: T
   pagination:
     newer: Novejše
     next: Naprej
     older: Starejše
     prev: Nazaj
-    truncate: "&hellip;"
   polls:
     errors:
       already_voted: Na tej anketi ste že glasovali
@@ -826,40 +759,16 @@ sl:
     activity: Zadnja dejavnost
     browser: Brskalnik
     browsers:
-      alipay: Alipay
       blackberry: BlackBerry
-      chrome: Chrome
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Neznan brskalnik
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
-      safari: Safari
       uc_browser: UC Browser
-      weibo: Weibo
     current_session: Trenutna seja
     description: "%{browser} na %{platform}"
     explanation: To so spletni brskalniki, ki so trenutno prijavljeni v vaš Mastodon račun.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
       blackberry: BlackBerry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: neznana platforma
-      windows: Windows
-      windows_mobile: Windows Mobile
-      windows_phone: Windows Phone
     revoke: Prekliči
     revoke_success: Seja je bila uspešno preklicana
     title: Seje
@@ -920,7 +829,6 @@ sl:
       vote: Glasuj
     show_more: Pokaži več
     sign_in_to_participate: Prijavite se, če želite sodelovati v pogovoru
-    title: '%{name}: "%{quote}"'
     visibilities:
       private: Samo sledilci
       private_long: Prikaži samo sledilcem
@@ -1019,10 +927,6 @@ sl:
     contrast: Mastodon (Visok kontrast)
     default: Mastodon (Temna)
     mastodon-light: Mastodon (Svetla)
-  time:
-    formats:
-      default: "%b %d, %Y, %H:%M"
-      month: "%b %Y"
   two_factor_authentication:
     disable: Onemogoči
     enabled: Dvofaktorsko preverjanje pristnosti je omogočeno
@@ -1072,7 +976,6 @@ sl:
       title: Dobrodošli, %{name}!
   users:
     follow_limit_reached: Ne morete spremljati več kot %{limit} ljudi
-    invalid_email: E-poštni naslov je napačen
     invalid_otp_token: Neveljavna dvofaktorska koda
     otp_lost_help_html: Če ste izgubili dostop do obeh, stopite v stik z %{email}
     seamless_external_login: Prijavljeni ste prek zunanje storitve, tako da nastavitve gesla in e-pošte niso na voljo.
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index e841ab690..76e3a1d30 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -1,11 +1,11 @@
 ---
 sq:
   about:
-    about_hashtag_html: Këto janë mesazhe publike të etiketuar me <strong>#%{hashtag}</strong>. Mundeni të ndërveproni me ta, nëse keni një llogari kudo qoftë në fedivers.
+    about_hashtag_html: Këto janë mesazhe publike të etiketuara me <strong>#%{hashtag}</strong>. Mundeni të ndërveproni me ta, nëse keni një llogari kudo qoftë në fedivers.
     about_mastodon_html: 'Rrjeti shoqëror i së ardhmes: Pa reklama, pa survejim nga korporata, konceptim etik dhe decentralizim! Jini zot i të dhënave tuaja, me Mastodon-in!'
     about_this: Mbi
     active_count_after: aktive
-    active_footnote: Përdorues Aktivë Mujor (PAM)
+    active_footnote: Përdorues Aktivë Mujorë (PAM)
     administered_by: 'Administruar nga:'
     api: API
     apps: Aplikacione për celular
@@ -26,12 +26,14 @@ sq:
       Përdoret për qëllime federimi dhe s’duhet bllokuar, veç në daçi të bllokoni krejt instancën, me ç’rast do të duhej të përdornit bllokim përkatësie.
     learn_more: Mësoni më tepër
     privacy_policy: Rregulla privatësie
+    rules: Rregulla shërbyesi
+    rules_html: 'Më poshtë keni një përmbledhje të rregullave që duhet të ndiqni, nëse doni të keni një llogari në këtë shërbyes Mastodon:'
     see_whats_happening: Shihni ç'ndodh
     server_stats: 'Statistika shërbyesi:'
     source_code: Kod burim
     status_count_after:
-      one: gjendje
-      other: gjendje
+      one: mesazh
+      other: mesazhe
     status_count_before: Që kanë krijuar
     tagline: Ndiqni shokë dhe zbuloni të rinj
     terms: Kushte shërbimi
@@ -41,7 +43,7 @@ sq:
       reason: Arsye
       rejecting_media: 'Kartelat media prej këtyre shërbyesve s’do të përpunohen apo depozitohen, dhe s’do të shfaqet ndonjë miniaturë, duke kërkuar kështu doemos klikim dorazi te kartela origjinale:'
       rejecting_media_title: Media e filtruar
-      silenced: 'Postimet prej këtyre shërbyesve do të fshihen në rrjedha kohore dhe biseda publike, dhe prej ndërveprimeve të përdoruesve të tyre s’do të prodhohen njoftime, veç në i ndjekshi:'
+      silenced: 'Postimet prej këtyre shërbyesve do të jenë të fshehura në rrjedha kohore dhe biseda publike, dhe prej ndërveprimeve të përdoruesve të tyre s’do të prodhohen njoftime, veç në i ndjekshi:'
       silenced_title: Shërbyes të heshtuar
       suspended: 'S’do të përpunohen, depozitohen apo shkëmbehen të dhëna prej këtyre shërbyesve, duke e bërë të pamundur çfarëdo ndërveprimi apo komunikimi me përdorues prej këtyre shërbyesve:'
       suspended_title: Shërbyes të pezulluar
@@ -78,7 +80,6 @@ sq:
       other: Mesazhe
     posts_tab_heading: Mesazhe
     posts_with_replies: Mesazhe dhe përgjigje
-    reserved_username: Emri i përdoruesit është i ruajtur për dikë
     roles:
       admin: Përgjegjës
       bot: Robot
@@ -96,7 +97,7 @@ sq:
       delete: Fshije
       destroyed_msg: Shënimi i moderimit u asgjësua me sukses!
     accounts:
-      add_email_domain_block: Vëre përkatësinë email në listë bllokimesh
+      add_email_domain_block: Blloko përkatësi email
       approve: Miratojeni
       approve_all: Miratojini krejt
       approved_msg: U miratua me sukses aplikimi për regjistrim të %{username}
@@ -125,7 +126,7 @@ sq:
       edit: Përpunojeni
       email: Email
       email_status: Gjendje email-i
-      enable: Aktivizoje
+      enable: Shkrije
       enabled: E aktivizuar
       enabled_msg: U hoq me sukses ngrirja për llogarinë e %{username}
       followers: Ndjekës
@@ -173,7 +174,7 @@ sq:
       remove_avatar: Hiqe avatarin
       remove_header: Hiqe kryen
       removed_avatar_msg: U hoq me sukses figura e avatarit të %{username}
-      removed_header_msg: U hoq me sukses figura e kreut për %{username}
+      removed_header_msg: U hoq me sukses figura e kryes për %{username}
       resend_confirmation:
         already_confirmed: Ky përdorues është i ripohuar tashmë
         send: Ridërgo email ripohimi
@@ -223,7 +224,7 @@ sq:
         change_email_user: Ndrysho Email për Përdoruesin
         confirm_user: Ripohoje Përdoruesin
         create_account_warning: Krijo Sinjalizim
-        create_announcement: Krijo Lajmërim
+        create_announcement: Krijoni Lajmërim
         create_custom_emoji: Krijo Emotikon Vetjak
         create_domain_allow: Krijo Lejim Përkatësie
         create_domain_block: Krijo Bllokim Përkatësie
@@ -256,50 +257,52 @@ sq:
         unsilence_account: Hiqe Heshtimin e Llogarisë
         unsuspend_account: Hiqe Pezullimin e Llogarisë
         update_announcement: Përditëso Lajmërimin
-        update_custom_emoji: Përditëso Emotikon Vetjak
+        update_custom_emoji: Përditëso Emoxhi Vetjake
         update_domain_block: Përditëso Bllok Përkatësish
         update_status: Përditëso Gjendjen
       actions:
-        assigned_to_self_report: "%{name} ia kaloi raportimin %{target} në ngarkim vetvetes"
-        change_email_user: "%{name} ndryshoi adresën email të përdoruesit %{target}"
-        confirm_user: "%{name} ripohoi adresën email të përdoruesit %{target}"
-        create_account_warning: "%{name} dërgoi një sinjalizim për %{target}"
-        create_announcement: "%{name} krijoi lajmërim të ri për %{target}"
-        create_custom_emoji: "%{name} ngarkoi emotikon të ri %{target}"
-        create_domain_allow: "%{name} kaloi në listë lejimesh përkatësinë %{target}"
-        create_domain_block: "%{name} bllokoi përkatësinë %{target}"
-        create_email_domain_block: "%{name} shtoi në listë bllokimesh përkatësinë %{target}"
-        create_ip_block: "%{name} krijoi rregull për IP-në %{target}"
-        demote_user: "%{name} zhgradoi përdoruesin %{target}"
-        destroy_announcement: "%{name} fshiu lajmërimin për %{target}"
-        destroy_custom_emoji: "%{name} asgjësoi emotikonin %{target}"
-        destroy_domain_allow: "%{name} hoqi përkatësinë %{target} nga listë lejimesh"
-        destroy_domain_block: "%{name} zhbllokoi përkatësinë %{target}"
-        destroy_email_domain_block: "%{name} e shtoi në listë lejimesh përkatësinë %{target}"
-        destroy_ip_block: "%{name} fshiu rregull për IP-në %{target}"
-        destroy_status: "%{name} hoqi gjendje nga %{target}"
-        disable_2fa_user: "%{name} çaktivizoi domosdoshmëritë për dyfaktorësh për përdoruesin %{target}"
-        disable_custom_emoji: "%{name} çaktivizoi emotikonin %{target}"
-        disable_user: "%{name} çaktivizoi hyrje për përdoruesin %{target}"
-        enable_custom_emoji: "%{name} aktivizoi emotikonin %{target}"
-        enable_user: "%{name} aktivizoi hyrje për përdoruesin %{target}"
-        memorialize_account: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore"
-        promote_user: "%{name} gradoi përdoruesin %{target}"
-        remove_avatar_user: "%{name} hoqi avatarin e %{target}"
-        reopen_report: "%{name} rihapi raportimin %{target}"
-        reset_password_user: "%{name} ricaktoi fjalëkalimi për përdoruesin %{target}"
-        resolve_report: "%{name} zgjidhi raportimin %{target}"
-        sensitive_account: "%{name} i vuri shenjë si rezervat medias në %{target}"
-        silence_account: "%{name} heshtoi llogarinë e %{target}"
-        suspend_account: "%{name} pezulloi llogarinë e %{target}"
-        unassigned_report: "%{name} rihapi raportimin %{target}"
-        unsensitive_account: "%{name} ia hoqi shenjën si rezervat medias në %{target}"
-        unsilence_account: "%{name} hoqi heshtimin për llogarinë %{target}"
-        unsuspend_account: "%{name} hoqi pezullimin për llogarinë e %{target}"
-        update_announcement: "%{name} përditësoi lajmërimin %{target}"
-        update_custom_emoji: "%{name} përditësoi emotikonin %{target}"
-        update_domain_block: "%{name} përditësoi bllok përkatësish për %{target}"
-        update_status: "%{name} përditësoi gjendjen me %{target}"
+        assigned_to_self_report_html: "%{name} ia kaloi raportimin %{target} në ngarkim vetvetes"
+        change_email_user_html: "%{name} ndryshoi adresën email të përdoruesit %{target}"
+        confirm_user_html: "%{name} ripohoi adresën email të përdoruesit %{target}"
+        create_account_warning_html: "%{name} dërgoi një sinjalizim për %{target}"
+        create_announcement_html: "%{name} krijoi lajmërim të ri për %{target}"
+        create_custom_emoji_html: "%{name} ngarkoi emoxhi të ri %{target}"
+        create_domain_allow_html: "%{name} lejoi federim me përkatësinë %{target}"
+        create_domain_block_html: "%{name} bllokoi përkatësinë %{target}"
+        create_email_domain_block_html: "%{name} bllokoi përkatësinë email %{target}"
+        create_ip_block_html: "%{name} krijoi rregull për IP-në %{target}"
+        create_unavailable_domain_html: "%{name} ndali dërgimin drejt përkatësisë %{target}"
+        demote_user_html: "%{name} zhgradoi përdoruesin %{target}"
+        destroy_announcement_html: "%{name} fshiu lajmërimin për %{target}"
+        destroy_custom_emoji_html: "%{name} asgjësoi emoxhin %{target}"
+        destroy_domain_allow_html: "%{name} hoqi lejimin për federim me %{target}"
+        destroy_domain_block_html: "%{name} zhbllokoi përkatësinë %{target}"
+        destroy_email_domain_block_html: "%{name} hoqi bllokimin për përkatësinë email %{target}"
+        destroy_ip_block_html: "%{name} fshiu rregull për IP-në %{target}"
+        destroy_status_html: "%{name} hoqi gjendje nga %{target}"
+        destroy_unavailable_domain_html: "%{name} rinisi dërgimin drejt përkatësisë %{target}"
+        disable_2fa_user_html: "%{name} çaktivizoi domosdoshmërinë për dyfaktorësh për përdoruesin %{target}"
+        disable_custom_emoji_html: "%{name} çaktivizoi emoxhin %{target}"
+        disable_user_html: "%{name} çaktivizoi hyrje për përdoruesin %{target}"
+        enable_custom_emoji_html: "%{name} aktivizoi emoxhin %{target}"
+        enable_user_html: "%{name} aktivizoi hyrje për përdoruesin %{target}"
+        memorialize_account_html: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore"
+        promote_user_html: "%{name} gradoi përdoruesin %{target}"
+        remove_avatar_user_html: "%{name} hoqi avatarin e %{target}"
+        reopen_report_html: "%{name} rihapi raportimin %{target}"
+        reset_password_user_html: "%{name} ricaktoi fjalëkalimi për përdoruesin %{target}"
+        resolve_report_html: "%{name} zgjidhi raportimin %{target}"
+        sensitive_account_html: "%{name} i vuri shenjë si rezervat medias në %{target}"
+        silence_account_html: "%{name} heshtoi llogarinë e %{target}"
+        suspend_account_html: "%{name} pezulloi llogarinë e %{target}"
+        unassigned_report_html: "%{name} rihapi raportimin %{target}"
+        unsensitive_account_html: "%{name} ia hoqi shenjën si rezervat medias në %{target}"
+        unsilence_account_html: "%{name} hoqi heshtimin për llogarinë %{target}"
+        unsuspend_account_html: "%{name} hoqi pezullimin për llogarinë e %{target}"
+        update_announcement_html: "%{name} përditësoi lajmërimin %{target}"
+        update_custom_emoji_html: "%{name} përditësoi emoxhin %{target}"
+        update_domain_block_html: "%{name} përditësoi bllokimin e përkatësish për %{target}"
+        update_status_html: "%{name} përditësoi gjendjen me %{target}"
       deleted_status: "(fshiu gjendjen)"
       empty: S’u gjetën regjistra.
       filter_by_action: Filtroji sipas veprimit
@@ -314,44 +317,46 @@ sq:
       new:
         create: Krijoni lajmërim
         title: Lajmërim i ri
+      publish: Publikoje
       published_msg: Lajmërimi u botua me sukses!
       scheduled_for: Vënë në plan për më %{time}
       scheduled_msg: Lajmërimi u vu në plan për botim!
       title: Lajmërime
+      unpublish: Hiqi publikimin
       unpublished_msg: Lajmërimi u botua me sukses!
       updated_msg: Lajmërimi u përditësua me sukses!
     custom_emojis:
       assign_category: Caktojini kategori
       by_domain: Përkatësi
-      copied_msg: Kopja vendore e emotikonëve u krijua me sukses
+      copied_msg: Kopja vendore e emoji-ve u krijua me sukses
       copy: Kopjoje
-      copy_failed_msg: S’u bë dot një kopje vendore e emotikonëve
+      copy_failed_msg: S’u bë dot një kopje vendore e emoji-ve
       create_new_category: Krijo kategori të re
-      created_msg: Emotikoni u krijua me sukses!
+      created_msg: Emoji u krijua me sukses!
       delete: Fshije
-      destroyed_msg: Emotikoni u asgjësua me sukses!
+      destroyed_msg: Emojo u asgjësuan me sukses!
       disable: Çaktivizoje
       disabled: I çaktivizuar
-      disabled_msg: Ai emotikon u çaktivizua me sukses
+      disabled_msg: Ai emoxhi u çaktivizua me sukses
       emoji: Emotikon
       enable: Aktivizoje
       enabled: I aktivizuar
-      enabled_msg: Ai emotikon u aktivizua me sukses
+      enabled_msg: Ai emoxhi u aktivizua me sukses
       image_hint: PNG deri 50KB
       list: Vëre në listë
       listed: Në listë
       new:
-        title: Shtoni emotikon të ri vetjak
+        title: Shtoni emoxhi të ri vetjak
       not_permitted: S’keni leje të kryeni këtë veprim
       overwrite: Mbishkruaje
       shortcode: Kod i shkurtër
       shortcode_hint: Të paktën 2 shenja, vetëm shenja alfanumerike dhe nënvija
-      title: Emotikone vetjake
+      title: Emoxhi vetjake
       uncategorized: I pakategorizuar
       unlist: Hiqe nga lista
       unlisted: Hequr prej liste
-      update_failed_msg: S’u përditësua dot ai emotikon
-      updated_msg: Emotikoni u përditësua me sukses!
+      update_failed_msg: S’u përditësua dot ai emoxhi
+      updated_msg: Emoji u përditësua me sukses!
       upload: Ngarkoje
     dashboard:
       authorized_fetch_mode: Mënyrë e sigurt
@@ -362,7 +367,6 @@ sq:
       feature_profile_directory: Drejtori profilesh
       feature_registrations: Regjistrime
       feature_relay: Rele federimi
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Paraparje rrjedhjeje kohore
       features: Veçori
       hidden_service: Federim me shërbime të fshehura
@@ -440,9 +444,32 @@ sq:
         create: Shtoni përkatësi
         title: Zë i ri email në listë bllokimesh
       title: Listë bllokimesh email-esh
+    follow_recommendations:
+      description_html: "<strong>Rekomandimet për ndjekje ndihmojnë përdoruesit e rinj të gjejnë shpejt lëndë me interes</strong>. Kur një përdorues nuk ka ndërvepruar mjaftueshëm me të tjerët, që të formohen rekomandime të personalizuara ndjekjeje, rekomandohen këto llogari. Ato përzgjidhen çdo ditë, prej një përzierje llogarish me shkallën më të lartë të angazhimit dhe numrin më të lartë të ndjekësve vendorë për një gjuhë të dhënë."
+      language: Për gjuhën
+      status: Gjendje
+      suppress: Mos shfaq rekomandime ndjekjeje
+      suppressed: Të heshtuara
+      title: Rekomandime ndjekjeje
+      unsuppress: Rikthe rekomandime ndjekjeje
     instances:
+      back_to_all: Krejt
+      back_to_limited: E kufizuar
+      back_to_warning: Kujdes
       by_domain: Përkatësi
+      delivery:
+        all: Krejt
+        clear: Spastro gabime dërgimi
+        restart: Rinis dërgimin
+        stop: Ndale dërgimin
+        title: Dërgim
+        warning: Kujdes
+        warning_message:
+          one: Dështim dërgimi %{count} ditë
+          other: Dështim dërgimi %{count} ditë
       delivery_available: Ka shpërndarje të mundshme
+      delivery_error_days: Ditë gabimi dështimi
+      delivery_error_hint: Nëse dërgimi s’është i mundshëm për %{count} ditë, do t’i vihet shenjë automatikisht si i padërgueshëm.
       empty: S’u gjetën përkatësi.
       known_accounts:
         one: "%{count} llogari e njohur"
@@ -542,13 +569,20 @@ sq:
       unassign: Hiqja
       unresolved: Të pazgjidhur
       updated_at: U përditësua më
+    rules:
+      add_new: Shtoni rregull
+      delete: Fshije
+      description_html: Edhe pse shumica pretendon se kanë lexuar dhe pajtohen me kushtet e shërbimit, zakonisht njerëzit nuk e lexojnë nga fillimi në fund, deri kur del një problem. <strong>Bëjeni më të lehtë parjen e rregullave të shërbyesit tuaj me një vështim, duke i dhënë në një listë të thjeshtë me pika.</strong> Përpiquni që rregullat të jenë secili të shkurtër dhe të thjeshtë, por as mos u përpiqni t’i ndani në shumë zëra të veçantë.
+      edit: Përpunoni rregull
+      empty: S’janë përcaktuar ende rregulla shërbyesi.
+      title: Rregulla shërbyesi
     settings:
       activity_api_enabled:
-        desc_html: Numër gjendjesh të postuara lokalisht, përdorues aktivë, dhe regjistrime të reja në kosha javorë
-        title: Botoni statistika përmbledhëse mbi veprimtarinë e përdoruesve
+        desc_html: Numër postimesh të postuara lokalisht, përdorues aktivë, dhe regjistrime të reja në kosha javorë
+        title: Botoni statistika përmbledhëse mbi veprimtarinë e përdoruesve te API
       bootstrap_timeline_accounts:
-        desc_html: Emrat e përdoruesve ndajini prej njëri-tjetrit me presje. Do të funksionojë vetëm për llogari vendore dhe të pakyçura. Si parazgjedhje, kur lihet e zbrazët, është krejt përgjegjësit vendorë.
-        title: Ndjekje parazgjedhje për përdorues të rinj
+        desc_html: Emrat e përdoruesve ndajini prej njëri-tjetrit me presje. Për këto llogari do të garantohet shfaqja te rekomandime ndjekjeje
+        title: Rekomandoji këto llogari për përdorues të rinj
       contact_information:
         email: Email biznesi
         username: Emër përdoruesi kontakti
@@ -565,9 +599,6 @@ sq:
         users: Për përdorues vendorë që kanë bërë hyrjen
       domain_blocks_rationale:
         title: Shfaq arsye
-      enable_bootstrap_timeline_accounts:
-        desc_html: Bëj që përdoruesit e rinj automatikisht të ndjekin llogaritë e formësuara, që prurja e tyre bazë të mos nisë e zbrazët
-        title: Aktivizo ndjekje parazgjedhje për përdorues të rinj
       hero:
         desc_html: E shfaqur në faqen ballore. Këshillohet të paktën 600x100px. Kur nuk caktohet gjë, përdoret miniaturë e shërbyesit
         title: Figurë heroi
@@ -603,7 +634,7 @@ sq:
           open: Mund të regjistrohet gjithkush
         title: Mënyrë regjistrimi
       show_known_fediverse_at_about_page:
-        desc_html: Kur përdoret, do të shfaqë mesazhe prej krejt fediversit të njohur, si paraparje. Përndryshe do të shfaqë vetëm mesazhe vendore.
+        desc_html: Kur përdoret, do të shfaqë mesazhe prej krejt fediversit të njohur, si paraparje. Përndryshe do të shfaqë vetëm mesazhe vendore
         title: Përfshi lëndë të federuar në faqe rrjedhe publike kohore të pamirëfilltësuar
       show_staff_badge:
         desc_html: Shfaq një stemë stafi në faqen e një përdoruesi
@@ -621,9 +652,6 @@ sq:
         desc_html: Mund të shkruani rregullat tuaja të privatësisë, kushtet e shërbimit ose gjëra të tjera ligjore. Mund të përdorni etiketa HTML
         title: Kushte vetjake shërbimi
       site_title: Emër shërbyesi
-      spam_check_enabled:
-        desc_html: Mastodon-i mund të bëjë raportime automatike për llogari që dërgojnë në mënyrë të përsëritur mesazhe të padëshiruar. Në to mund të ketë edhe alarme të rremë.
-        title: Automatizim anti-spami
       thumbnail:
         desc_html: I përdorur për paraparje përmes OpenGraph-it dhe API-t. Këshillohet 1200x630px
         title: Miniaturë shërbyesi
@@ -654,18 +682,23 @@ sq:
       no_status_selected: S’u ndryshua ndonjë gjendje, ngaqë s’u përzgjodh ndonjë e tillë
       title: Gjendje llogarish
       with_media: Me media
+    system_checks:
+      database_schema_check:
+        message_html: Ka migrime bazash të dhënash pezull. Ju lutemi, kryejini, për të qenë të sigurt se aplikacioni sillet siç priteet
+      rules_check:
+        action: Administroni rregulla shërbyesi
+        message_html: S’keni përcaktuar ndonjë rregull shërbyesi.
+      sidekiq_process_check:
+        message_html: S’ka proces Sidekiq në punë për %{value} radhë. Ju lutemi, shqyrtoni formësimin tuaj për Sidekiq-un
     tags:
       accounts_today: Përdorime unike sot
       accounts_week: Përdorime unike këtë javë
       breakdown: Përdorimi sot, analizuar sipas burimesh
-      context: Kontekst
-      directory: Në drejtori
-      in_directory: "%{count} në drejtori"
       last_active: Aktive së fundi më
       most_popular: Më populloret
       most_recent: Më të rejat
       name: Hashtag
-      review: Gjendja e rishikimit
+      review: Gjendje rishikimi
       reviewed: E shqyrtuar
       title: Hashtag-ë
       trending_right_now: Popullore mu tani
@@ -677,6 +710,7 @@ sq:
       add_new: Shtoni të ri
       delete: Fshije
       edit_preset: Përpunoni sinjalizim të paracaktuar
+      empty: S’keni përcaktuar ende sinjalizime të gatshme.
       title: Administroni sinjalizime të paracaktuara
   admin_mailer:
     new_pending_account:
@@ -790,7 +824,7 @@ sq:
       invalid_signature: s’është nënshkrim Ed25519 i vlefshëm
   date:
     formats:
-      default: "%b %d, %Y"
+      default: "%d %b, %Y"
       with_month_name: "%d %B, %Y"
   datetime:
     distance_in_words:
@@ -861,7 +895,7 @@ sq:
     domain_blocks: Bllokime përkatësish
     lists: Lista
     mutes: Heshtoni
-    storage: Depozitim për media
+    storage: Depozitë media
   featured_tags:
     add_new: Shtoni të re
     errors:
@@ -1038,10 +1072,14 @@ sq:
       body: 'U përmendët nga %{name} në:'
       subject: U përmendët nga %{name}
       title: Përmendje e re
+    poll:
+      subject: Përfundoi një pyetësor nga %{name}
     reblog:
       body: 'Gjendja juaj u përforcua nga %{name}:'
       subject: "%{name} përforcoi gjendjen tuaj"
       title: Përforcim i ri
+    status:
+      subject: "%{name} sapo postoi"
   notifications:
     email_events: Akte për njoftim me email
     email_events_hint: 'Përzgjidhni akte për të cilët doni të merrni njoftime:'
@@ -1150,7 +1188,7 @@ sq:
       weibo: Weibo
     current_session: Sesioni i tanishëm
     description: "%{browser} në %{platform}"
-    explanation: Këta janë shfletuesit e futur në këtë çast te llogaria juaj Mastodon.
+    explanation: Këta janë shfletuesit e përdorur tani për hyrje te llogaria juaj Mastodon.
     ip: IP
     platforms:
       adobe_air: Adobe Air
@@ -1190,8 +1228,6 @@ sq:
     relationships: Ndjekje dhe ndjekës
     two_factor_authentication: Mirëfilltësim Dyfaktorësh
     webauthn_authentication: Kyçe sigurie
-  spam_check:
-    spam_detected: Ky është një raportim i automatizuar. Është pikasur mesazh i padëshiruar.
   statuses:
     attached:
       audio:
@@ -1234,6 +1270,7 @@ sq:
     sign_in_to_participate: Bëni hyrjen, që të merrni pjesë te biseda
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: I drejtpërdrejtë
       private: Vetëm ndjekësve
       private_long: Shfaqua vetëm ndjekësve
       public: Publike
@@ -1385,7 +1422,7 @@ sq:
         silence: Llogari e kufizuar
         suspend: Llogari e pezulluar
     welcome:
-      edit_profile_action: Rregullim profili
+      edit_profile_action: Ujdisje profili
       edit_profile_step: Profilin mund ta personalizoni duke ngarkuar një avatar, figurë kryesh, duke ndryshuar emrin tuaj në ekran, etj. Nëse dëshironi të shqyrtoni ndjekës të rinj, përpara se të jenë lejuar t’ju ndjekin, mund të kyçni llogarinë tuaj.
       explanation: Ja disa ndihmëza, sa për t’ia filluar
       final_action: Filloni të postoni
@@ -1402,14 +1439,11 @@ sq:
       tips: Ndihmëza
       title: Mirë se vini, %{name}!
   users:
-    blocked_email_provider: Ky furnizues shërbimi email nuk lejohet
     follow_limit_reached: S’mund të ndiqni më tepër se %{limit} persona
     generic_access_help_html: Problem me hyrjen në llogarinë tuaj? Për asistencë mund të lidheni me %{email}
-    invalid_email: Adresa email është e pavlefshme
-    invalid_email_mx: Adresa email s’duket se ekziston
     invalid_otp_token: Kod dyfaktorësh i pavlefshëm
     invalid_sign_in_token: Kod sigurie i pavlefshëm
-    otp_lost_help_html: Nëse humbi hyrjen te të dy, mund të lidheni me %{email}
+    otp_lost_help_html: Nëse humbët hyrjen te të dy, mund të lidheni me %{email}
     seamless_external_login: Jeni futur përmes një shërbimi të jashtëm, ndaj s’ka rregullime fjalëkalimi dhe email.
     signed_in_as: 'I futur si:'
     suspicious_sign_in_confirmation: Duket se s’keni hyrë më parë nga kjo pajisje, dhe se keni kohë pa bërë hyrje, ndaj po ju dërgojmë një kod sigurie te adresa juaj email, që të ripohoni se jeni ju.
@@ -1417,7 +1451,7 @@ sq:
     explanation_html: 'Mundeni <strong>të verifikoni veten si i zoti i lidhjeve te tejtëdhënat e profilit tuaj</strong>. Për këtë, sajti i lidhur duhet të përmbajë një lidhje për te profili juaj Mastodon. Lidhje për te ajo <strong>duhet</strong> të ketë një atribut <code>rel="me"</code>. Lënda tekst e lidhjes nuk ngre peshë. Ja një shembull:'
     verification: Verifikim
   webauthn_credentials:
-    add: Shton kyç të ri sigurie
+    add: Shtoni kyç të ri sigurie
     create:
       error: Pati një problem me shtimin e kyçeve tuaj të sigurisë. Ju lutemi, riprovoni.
       success: Kyçi juaj i sigurisë u shtua me sukses.
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index da8eda86f..e762126ad 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -19,7 +19,6 @@ sr-Latn:
     people_followed_by: Ljudi koje %{name} prati
     people_who_follow: Ljudi koji prate %{name}
     posts_with_replies: Tutovi i odgovori
-    reserved_username: Korisničko ime je rezervisano
     roles:
       admin: Administrator
       moderator: Moderator
@@ -98,30 +97,6 @@ sr-Latn:
       username: Korisničko ime
       web: Veb
     action_logs:
-      actions:
-        confirm_user: "%{name} je potvrdio adresu e-pošte korisnika %{target}"
-        create_custom_emoji: "%{name} je otpremio novi emotikon %{target}"
-        create_domain_block: "%{name} je blokirao domen %{target}"
-        create_email_domain_block: "%{name} je stavio na crnu listu domen e-pošte %{target}"
-        demote_user: "%{name} je ražalovao korisnika %{target}"
-        destroy_domain_block: "%{name} je odblokirao domen %{target}"
-        destroy_email_domain_block: "%{name} je stavio na belu listu domen e-pošte %{target}"
-        destroy_status: "%{name} je uklonio status korisnika %{target}"
-        disable_2fa_user: "%{name} je isključio obaveznu dvofaktorsku identifikaciju za korisnika %{target}"
-        disable_custom_emoji: "%{name} je onemogućio emotikon %{target}"
-        disable_user: "%{name} je onemogućio prijavljivanje korisniku %{target}"
-        enable_custom_emoji: "%{name} je omogućio emotikon %{target}"
-        enable_user: "%{name} je omogućio prijavljivanje za korisnika %{target}"
-        memorialize_account: "%{name} je pretvorio stranu naloga %{target} kao in memoriam stranu"
-        promote_user: "%{name} je unapredio korisnika %{target}"
-        reset_password_user: "%{name} je resetovao lozinku korisniku %{target}"
-        resolve_report: "%{name} je odbacio prijavu %{target}"
-        silence_account: "%{name} je ućutkao nalog %{target}"
-        suspend_account: "%{name} je suspendovao nalog %{target}"
-        unsilence_account: "%{name} je ukinuo ćutanje nalogu %{target}"
-        unsuspend_account: "%{name} je ukinuo suspenziju nalogu %{target}"
-        update_custom_emoji: "%{name} je izmenio emotikon %{target}"
-        update_status: "%{name} je izmenio status korisnika %{target}"
       title: Zapisnik
     custom_emojis:
       by_domain: Domen
@@ -481,6 +456,5 @@ sr-Latn:
     recovery_codes_regenerated: Kodovi za oporavak uspešno regenerisani
     recovery_instructions_html: Ako ikada izgubite pristup telefonu, možete iskoristiti kodove za oporavak date ispod da povratite pristup nalogu. <strong>Držite kodove za oporavak na sigurnom</strong>. Na primer, odštampajte ih i čuvajte ih sa ostalim važnim dokumentima.
   users:
-    invalid_email: Adresa e-pošte nije ispravna
     invalid_otp_token: Neispravni dvofaktorski kod
     signed_in_as: 'Prijavljen kao:'
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index e26682891..8f7639cda 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -50,7 +50,6 @@ sr:
       other: Трубе
     posts_tab_heading: Трубе
     posts_with_replies: Трубе и одговори
-    reserved_username: Корисничко име је резервисано
     roles:
       admin: Администратор
       bot: Бот
@@ -156,37 +155,6 @@ sr:
       warn: Упозори
       web: Веб
     action_logs:
-      actions:
-        assigned_to_self_report: "%{name} је доделио/ла извештај %{target} себи"
-        change_email_user: "%{name} је променио/ла адресу Е-поште коисника/це %{target}"
-        confirm_user: "%{name} је потврдио адресу е-поште корисника %{target}"
-        create_account_warning: "%{name} је послао пријаву %{target}"
-        create_custom_emoji: "%{name} је отпремио нови емоџи %{target}"
-        create_domain_block: "%{name} је блокирао домен %{target}"
-        create_email_domain_block: "%{name} је ставио на црну листу домен е-поште %{target}"
-        demote_user: "%{name} је ражаловао корисника %{target}"
-        destroy_custom_emoji: "%{name} је уништио емоџи %{target}"
-        destroy_domain_block: "%{name} је одблокирао домен %{target}"
-        destroy_email_domain_block: "%{name} је ставио на белу листу домен е-поште %{target}"
-        destroy_status: "%{name} је уклонио статус корисника %{target}"
-        disable_2fa_user: "%{name} је искључио обавезну двофакторску идентификацију за корисника %{target}"
-        disable_custom_emoji: "%{name} је онемогућио емотикон %{target}"
-        disable_user: "%{name} је онемогућио пријављивање кориснику %{target}"
-        enable_custom_emoji: "%{name} је омогућио емотикон %{target}"
-        enable_user: "%{name} је омогућио пријављивање за корисника %{target}"
-        memorialize_account: "%{name} је претворио страну налога %{target} као in memoriam страну"
-        promote_user: "%{name} је унапредио корисника %{target}"
-        remove_avatar_user: "%{name} је уклонио/ла %{target}'s аватар"
-        reopen_report: "%{name} је поново отворио/ла извештај %{target}"
-        reset_password_user: "%{name} је ресетовао лозинку кориснику %{target}"
-        resolve_report: "%{name} је одбацио пријаву %{target}"
-        silence_account: "%{name} је ућуткао налог %{target}"
-        suspend_account: "%{name} је суспендовао налог %{target}"
-        unassigned_report: "%{name} недодељен извештај %{target}"
-        unsilence_account: "%{name} је укинуо ћутање налогу %{target}"
-        unsuspend_account: "%{name} је укинуо суспензију налогу %{target}"
-        update_custom_emoji: "%{name} је изменио емотикон %{target}"
-        update_status: "%{name} је изменио статус корисника %{target}"
       deleted_status: "(обрисан статус)"
       title: Записник
     custom_emojis:
@@ -805,7 +773,6 @@ sr:
       title: Добродошли, %{name}!
   users:
     follow_limit_reached: Не можете пратити више од %{limit} људи
-    invalid_email: Адреса Е-поште није исправна
     invalid_otp_token: Неисправни двофакторски код
     otp_lost_help_html: Ако изгубите приступ за оба, можете ступити у контакт са %{email}
     seamless_external_login: Пријављени сте путем спољашње услуге, тако да лозинка и подешавања Е-поште нису доступни.
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 36154b49b..27e2ecfe1 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -21,14 +21,17 @@ sv:
     federation_hint_html: Med ett konto på %{instance} kommer du att kunna följa personer på alla Mastodon-servers och mer än så.
     get_apps: Prova en mobilapp
     hosted_on: Mastodon-värd på %{domain}
-    instance_actor_flash: 'Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas.
-
-'
+    instance_actor_flash: "Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. \n"
     learn_more: Lär dig mer
     privacy_policy: Integritetspolicy
+    rules: Serverns regler
+    rules_html: 'Nedan en sammanfattning av kontoreglerna för denna Mastodonserver:'
     see_whats_happening: Se vad som händer
     server_stats: 'Serverstatistik:'
     source_code: Källkod
+    status_count_after:
+      one: status
+      other: statusar
     status_count_before: Som skapat
     tagline: Följ vänner och upptäck nya
     terms: Användarvillkor
@@ -69,9 +72,11 @@ sv:
     people_who_follow: Personer som följer %{name}
     pin_errors:
       following: Du måste vara följare av den person du vill godkänna
-    posts_tab_heading: Toots
+    posts:
+      one: Tuta
+      other: Tutor
+    posts_tab_heading: Tutor
     posts_with_replies: Toots med svar
-    reserved_username: Användarnamnet är reserverat
     roles:
       admin: Administratör
       bot: Robot
@@ -86,7 +91,7 @@ sv:
     account_moderation_notes:
       create: Lämna kommentar
       created_msg: Modereringsnotering skapad utan problem!
-      delete: Ta bort
+      delete: Radera
       destroyed_msg: Modereringsnotering borttagen utan problem!
     accounts:
       add_email_domain_block: Blockera e-postdomän
@@ -105,6 +110,7 @@ sv:
       confirm: Bekräfta
       confirmed: Bekräftad
       confirming: Bekräftande
+      delete: Radera data
       deleted: Raderad
       demote: Degradera
       disable: inaktivera
@@ -121,6 +127,7 @@ sv:
       follows: Följs
       header: Rubrik
       inbox_url: Inkorgs URL
+      invite_request_text: Anledningar att gå med
       invited_by: Inbjuden av
       ip: IP-adress
       joined: Gick med
@@ -166,12 +173,13 @@ sv:
       role: Behörigheter
       roles:
         admin: Administratör
-        moderator: Moderator
         staff: Personal
         user: Användare
       search: Sök
       search_same_email_domain: Andra användare med samma e-postdomän
       search_same_ip: Annan användare med samma IP-adress
+      sensitive: Känsligt
+      sensitized: markerad som känsligt
       shared_inbox_url: Delad inkorg URL
       show:
         created_reports: Anmälningar som skapats av det här kontot
@@ -201,10 +209,13 @@ sv:
         create_custom_emoji: Skapa egen emoji
         create_domain_allow: Skapa tillåten domän
         create_domain_block: Skapa blockerad domän
+        create_ip_block: Skapa IP-regel
+        demote_user: Degradera användare
         destroy_announcement: Ta bort anslag
-        destroy_custom_emoji: Ta bort egen emoji
+        destroy_custom_emoji: Radera egen emoji
         destroy_domain_allow: Ta bort tillåten domän
         destroy_domain_block: Ta bort blockerad domän
+        destroy_ip_block: Ta bort IP-regel
         destroy_status: Ta bort status
         disable_2fa_user: Inaktivera 2FA
         disable_custom_emoji: Inaktivera egna emojis
@@ -214,8 +225,10 @@ sv:
         memorialize_account: Minnesmärk konto
         promote_user: Befordra användare
         remove_avatar_user: Ta bort avatar
+        reopen_report: Öppna rapporten igen
         reset_password_user: Återställ lösenord
         resolve_report: Lös rapport
+        sensitive_account: Markera mediet i ditt konto som känsligt
         silence_account: Tysta konto
         suspend_account: Stäng av konto
         unsuspend_account: Återaktivera konto
@@ -223,46 +236,11 @@ sv:
         update_custom_emoji: Uppdatera egna emojis
         update_domain_block: Uppdatera blockerad domän
         update_status: Uppdatera status
-      actions:
-        assigned_to_self_report: "%{name} tilldelade anmälan %{target} till sig själv"
-        change_email_user: "%{name} bytte e-postadress för användare %{target}"
-        confirm_user: "%{name} bekräftade e-postadress för användare %{target}"
-        create_account_warning: "%{name} sände en varning till %{target}"
-        create_announcement: "%{name} skapade nytt meddelande %{target}"
-        create_custom_emoji: "%{name} laddade upp ny emoji %{target}"
-        create_domain_allow: "%{name} vitlistade domän %{target}"
-        create_domain_block: "%{name} blockerade domän %{target}"
-        create_email_domain_block: "%{name} svartlistade e-postdomän %{target}"
-        demote_user: "%{name} degraderade användare %{target}"
-        destroy_announcement: "%{name} raderade meddelanden %{target}"
-        destroy_custom_emoji: "%{name} förstörde emoji %{target}"
-        destroy_domain_allow: "%{name} raderade domän %{target} från vitlistan"
-        destroy_domain_block: "%{name} avblockerade domän %{target}"
-        destroy_email_domain_block: "%{name} vitlistade e-postdomän %{target}"
-        destroy_status: "%{name} tog bort status av %{target}"
-        disable_2fa_user: "%{name} inaktiverade tvåfaktorsautentiseringskrav för användare %{target}"
-        disable_custom_emoji: "%{name} inaktiverade emoji %{target}"
-        disable_user: "%{name} inaktiverade inloggning för användare %{target}"
-        enable_custom_emoji: "%{name} aktiverade emoji %{target}"
-        enable_user: "%{name} aktiverade inloggning för användare %{target}"
-        memorialize_account: "%{name} omvandlade %{target}s konto till en memoriam-sida"
-        promote_user: "%{name} flyttade upp användare %{target}"
-        remove_avatar_user: "%{name} tog bort %{target}s avatar"
-        reopen_report: "%{name} återupptog anmälan %{target}"
-        reset_password_user: "%{name} återställde lösenord för användaren %{target}"
-        resolve_report: "%{name} löste anmälan %{target}"
-        silence_account: "%{name} tystade ner %{target}s konto"
-        suspend_account: "%{name} suspenderade %{target}s konto"
-        unassigned_report: "%{name} otilldelade anmälan %{target}"
-        unsilence_account: "%{name} återljudade %{target}s konto"
-        unsuspend_account: "%{name} aktiverade %{target}s konto"
-        update_custom_emoji: "%{name} uppdaterade emoji %{target}"
-        update_domain_block: "%{name} uppdaterade blockerad domän för %{target}"
-        update_status: "%{name} uppdaterade status för %{target}"
       deleted_status: "(raderad status)"
       empty: Inga loggar hittades.
       title: Revisionslogg
     announcements:
+      live: Direkt
       scheduled_for: Schemalagd för %{time}
     custom_emojis:
       assign_category: Ange kategori
@@ -277,7 +255,6 @@ sv:
       disable: Inaktivera
       disabled: Inaktiverad
       disabled_msg: Inaktiverade emoji utan problem
-      emoji: Emoji
       enable: Aktivera
       enabled: Aktiverad
       enabled_msg: Aktiverade den emoji utan problem
@@ -306,7 +283,6 @@ sv:
       feature_profile_directory: Profilkatalog
       feature_registrations: Registreringar
       feature_relay: Förbundsmöte
-      feature_spam_check: Anti-skräp
       feature_timeline_preview: Förhandsgranskning av tidslinje
       features: Funktioner
       hidden_service: Sammanslutning med gömda tjänster
@@ -378,8 +354,16 @@ sv:
         create: Skapa domän
         title: Ny E-postdomänblocklistningsinmatning
       title: E-postdomänblock
+    follow_recommendations:
+      status: Status
     instances:
+      back_to_all: Alla
+      back_to_warning: Varning
       by_domain: Domän
+      delivery:
+        all: Alla
+        unavailable: Ej tillgänglig
+        warning: Varning
       empty: Inga domäner hittades.
       moderation:
         all: Alla
@@ -399,6 +383,18 @@ sv:
         expired: Utgångna
         title: Filtrera
       title: Inbjudningar
+    ip_blocks:
+      delete: Ta bort
+      expires_in:
+        '1209600': 2 veckor
+        '15778476': 6 månader
+        '2629746': 1 månad
+        '31556952': 1 år
+        '86400': 1 dag
+        '94670856': 3 år
+      new:
+        title: Skapa ny IP-regel
+      title: IP-regler
     pending_accounts:
       title: Väntande konton (%{count})
     relays:
@@ -438,11 +434,15 @@ sv:
       reported_by: Anmäld av
       resolved: Löst
       resolved_msg: Anmälan har lösts framgångsrikt!
-      status: Status
       title: Anmälningar
       unassign: Otilldela
       unresolved: Olösta
       updated_at: Uppdaterad
+    rules:
+      add_new: Lägg till regel
+      delete: Ta bort
+      edit: Ändra regel
+      title: Serverns regler
     settings:
       activity_api_enabled:
         desc_html: Räkning av lokalt postade statusar, aktiva användare och nyregistreringar per vecka
@@ -466,8 +466,6 @@ sv:
         users: För inloggade lokala användare
       domain_blocks_rationale:
         title: Visa motiv
-      enable_bootstrap_timeline_accounts:
-        title: Aktivera standard följer för nya användare
       hero:
         desc_html: Visas på framsidan. Minst 600x100px rekommenderas. Om inte angiven faller den tillbaka på instansens miniatyrbild
         title: Hjältebild
@@ -512,6 +510,8 @@ sv:
         desc_html: Visa offentlig tidslinje på landingsidan
         title: Förhandsgranska tidslinje
       title: Sidans inställningar
+      trends:
+        title: Trendande hashtaggar
     site_uploads:
       delete: Radera uppladdad fil
     statuses:
@@ -529,6 +529,10 @@ sv:
       accounts_today: Unika användare idag
       accounts_week: Unika användare den här veckan
       last_active: Senast aktiv
+      name: Hashtag
+      title: Hashtaggar
+      unreviewed: Ej granskad
+    title: Administration
     warning_presets:
       add_new: Lägg till ny
       delete: Radera
@@ -550,6 +554,7 @@ sv:
     sensitive_content: Känsligt innehåll
   application_mailer:
     notification_preferences: Ändra e-postinställningar
+    salutation: "%{name},"
     settings: 'Ändra e-postinställningar: %{link}'
     view: 'Granska:'
     view_profile: Visa profil
@@ -563,9 +568,12 @@ sv:
     warning: Var mycket försiktig med denna data. Dela aldrig den med någon!
     your_token: Din access token
   auth:
+    apply_for_account: Be om en inbjudan
     change_password: Lösenord
     delete_account: Ta bort konto
     delete_account_html: Om du vill radera ditt konto kan du <a href="%{path}">fortsätta här</a>. Du kommer att bli ombedd att bekräfta.
+    description:
+      prefix_invited_by_user: "@%{name} bjuder in dig att gå med i en Mastodon-server!"
     didnt_get_confirmation: Fick du inte instruktioner om bekräftelse?
     forgot_password: Glömt ditt lösenord?
     invalid_reset_password_token: Lösenordsåterställningstoken är ogiltig eller utgått. Vänligen be om en ny.
@@ -662,6 +670,7 @@ sv:
     add_new: Lägg till ny
   filters:
     contexts:
+      account: Profiler
       notifications: Aviseringar
       thread: Konversationer
     edit:
@@ -678,12 +687,17 @@ sv:
   generic:
     all: Alla
     changes_saved_msg: Ändringar sparades framgångsrikt!
+    copy: Kopiera
+    delete: Ta bort
+    order_by: Sortera efter
     save_changes: Spara ändringar
     validation_errors:
       one: Något är inte riktigt rätt ännu! Kontrollera felet nedan
       other: Något är inte riktigt rätt ännu! Kontrollera dom %{count} felen nedan
   identity_proofs:
     active: Aktiv
+    i_am_html: Jag är %{username} på %{service}.
+    identity: Identitet
     inactive: Inaktiv
   imports:
     errors:
@@ -767,6 +781,8 @@ sv:
       body: 'Din status knuffades av %{name}:'
       subject: "%{name} knuffade din status"
       title: Ny knuff
+    status:
+      subject: "%{name} publicerade nyss"
   notifications:
     other_settings: Andra aviseringsinställningar
   pagination:
@@ -784,6 +800,7 @@ sv:
     follow_selected_followers: Följ valda personer
     followers: Följare
     following: Följer
+    invited: Inbjuden
     last_active: Senast aktiv
     status: Kontostatus
   remote_follow:
@@ -796,31 +813,13 @@ sv:
     activity: Senaste aktivitet
     browser: Webbläsare
     browsers:
-      edge: Microsoft Edge
-      electron: Electron
-      firefox: Firefox
       generic: Okänd browser
-      ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      safari: Safari
     current_session: Nuvarande session
     description: "%{browser} på %{platform}"
     explanation: Detta är inloggade webbläsare på Mastodon just nu.
-    ip: IP
     platforms:
-      adobe_air: Adobe Air
-      android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
-      firefox_os: Firefox OS
-      ios: iOS
-      linux: Linux
       mac: Mac
       other: okänd plattform
-      windows: Windows
     revoke: Återkalla
     revoke_success: Sessionen återkallas framgångsrikt
     title: Sessioner
@@ -842,8 +841,6 @@ sv:
     profile: Profil
     relationships: Följer och följare
     two_factor_authentication: Tvåfaktorsautentisering
-  spam_check:
-    spam_detected: Det här är en automatisk rapport. Spam har upptäckts.
   statuses:
     attached:
       description: 'Bifogad: %{attached}'
@@ -996,10 +993,12 @@ sv:
       tip_mobile_webapp: Om din mobila webbläsare erbjuder dig att lägga till Mastodon på din hemskärm kan du få push-aviseringar. Det fungerar som en inbyggd app på många sätt!
       title: Välkommen ombord, %{name}!
   users:
-    blocked_email_provider: Denna e-postleverantör är inte tillåten
-    invalid_email: E-postadressen är ogiltig
-    invalid_email_mx: E-postadressen verkar inte finnas
     invalid_otp_token: Ogiltig tvåfaktorskod
     otp_lost_help_html: Om du förlorat åtkomst till båda kan du komma i kontakt med %{email}
     seamless_external_login: Du är inloggad via en extern tjänst, så lösenord och e-postinställningar är inte tillgängliga.
     signed_in_as: 'Inloggad som:'
+  webauthn_credentials:
+    delete: Ta bort
+    delete_confirmation: Är du säker på att du vill ta bort denna säkerhetsnyckel?
+    destroy:
+      success: Din säkerhetsnyckel har tagits bort.
diff --git a/config/locales/ta.yml b/config/locales/ta.yml
index 18a207715..cfa138304 100644
--- a/config/locales/ta.yml
+++ b/config/locales/ta.yml
@@ -63,7 +63,6 @@ ta:
       following: தாங்கள் அங்கீகரிக்க விரும்பும் நபரை தாங்கள் ஏற்கனவே பின்தொடரந்து கொண்டு இருக்க வேண்டும்
     posts_tab_heading: பிளிறல்கள்
     posts_with_replies: பிளிறல்கள் மற்றும் மறுமொழிகள்
-    reserved_username: பயனர்பெயர் முன்பதிவு செய்யப்பட்டுள்ளது
     roles:
       admin: நிர்வாகி
       bot: பொறி
@@ -202,10 +201,6 @@ ta:
         update_announcement: அறிவிப்பைப் புதுப்பி
         update_custom_emoji: தனிப்பயனான எமோஜியைப் புதுப்பி
         update_status: பதிவைப் புதுப்பி
-      actions:
-        create_announcement: "%{name} %{target} என்றொரு புதிய அறிவிப்பை உருவாக்கியிருக்கிறார்"
-        destroy_announcement: "%{name} %{target} அறிவிப்பை நீக்கிவிட்டார்"
-        update_announcement: "%{name} %{target} அறிவிப்பைப் புதுப்பித்துள்ளார்"
       empty: குறிப்புகள் எவையும் காணப்படவில்லை.
       filter_by_action: செயலின் அடிப்படையில் வடிகட்டு
       filter_by_user: பயனரின் அடிப்படையில் வடிகட்டு
@@ -280,9 +275,6 @@ ta:
     errors:
       invalid_key: ஒரு முறையான Ed25519 அல்லது Curve25519 key அல்ல
       invalid_signature: ஒரு முறையான Ed25519 அடையாளம் அல்ல
-  date:
-    formats:
-      default: "%b %d, %Y"
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
diff --git a/config/locales/tai.yml b/config/locales/tai.yml
index 3b22e9999..f7451a906 100644
--- a/config/locales/tai.yml
+++ b/config/locales/tai.yml
@@ -1,5 +1,10 @@
 ---
 tai:
+  about:
+    see_whats_happening: Khòaⁿ hoat-seng siáⁿ-mih tāi-chì
+    unavailable_content_description:
+      reason: Lí-iû
+    what_is_mastodon: Siáⁿ-mih sī Mastodon?
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
diff --git a/config/locales/te.yml b/config/locales/te.yml
index 0028ac325..2030f02b7 100644
--- a/config/locales/te.yml
+++ b/config/locales/te.yml
@@ -47,7 +47,6 @@ te:
       other: టూట్లు
     posts_tab_heading: టూట్లు
     posts_with_replies: టూట్లు మరియు ప్రత్యుత్తరాలు
-    reserved_username: ఈ username రిజర్వ్ చేయబడింది
     roles:
       admin: నిర్వాహకులు
       bot: బోట్
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 63ce98d4b..5a3ae4988 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -23,12 +23,13 @@ th:
     hosted_on: Mastodon ที่โฮสต์ที่ %{domain}
     learn_more: เรียนรู้เพิ่มเติม
     privacy_policy: นโยบายความเป็นส่วนตัว
+    rules: กฎของเซิร์ฟเวอร์
     see_whats_happening: ดูสิ่งที่กำลังเกิดขึ้น
     server_stats: 'สถิติเซิร์ฟเวอร์:'
     source_code: โค้ดต้นฉบับ
     status_count_after:
-      other: สถานะ
-    status_count_before: ผู้สร้าง
+      other: โพสต์
+    status_count_before: ผู้เผยแพร่
     tagline: ติดตามเพื่อน ๆ และค้นพบเพื่อนใหม่ ๆ
     terms: เงื่อนไขการให้บริการ
     unavailable_content: เซิร์ฟเวอร์ที่มีการควบคุม
@@ -65,7 +66,6 @@ th:
       other: โพสต์
     posts_tab_heading: โพสต์
     posts_with_replies: โพสต์และการตอบกลับ
-    reserved_username: ชื่อผู้ใช้ถูกสงวนไว้
     roles:
       admin: ผู้ดูแล
       bot: บอต
@@ -86,6 +86,7 @@ th:
       add_email_domain_block: ปิดกั้นโดเมนอีเมล
       approve: อนุมัติ
       approve_all: อนุมัติทั้งหมด
+      approved_msg: อนุมัติใบสมัครลงทะเบียนของ %{username} สำเร็จ
       are_you_sure: คุณแน่ใจหรือไม่?
       avatar: ภาพประจำตัว
       by_domain: โดเมน
@@ -112,6 +113,7 @@ th:
       email_status: สถานะอีเมล
       enable: เลิกอายัด
       enabled: เปิดใช้งานอยู่
+      enabled_msg: เลิกอายัดบัญชีของ %{username} สำเร็จ
       followers: ผู้ติดตาม
       follows: การติดตาม
       header: ส่วนหัว
@@ -128,6 +130,7 @@ th:
       login_status: สถานะการเข้าสู่ระบบ
       media_attachments: ไฟล์แนบสื่อ
       memorialize: เปลี่ยนเป็นอนุสรณ์
+      memorialized: เป็นอนุสรณ์แล้ว
       memorialized_msg: เปลี่ยน %{username} เป็นบัญชีอนุสรณ์สำเร็จ
       moderation:
         active: ใช้งานอยู่
@@ -150,6 +153,7 @@ th:
       redownload: รีเฟรชโปรไฟล์
       reject: ปฏิเสธ
       reject_all: ปฏิเสธทั้งหมด
+      rejected_msg: ปฏิเสธใบสมัครลงทะเบียนของ %{username} สำเร็จ
       remove_avatar: เอาภาพประจำตัวออก
       remove_header: เอาส่วนหัวออก
       removed_avatar_msg: เอาภาพประจำตัวของ %{username} ออกสำเร็จ
@@ -169,20 +173,24 @@ th:
       search: ค้นหา
       search_same_email_domain: ผู้ใช้อื่น ๆ ที่มีโดเมนอีเมลเดียวกัน
       search_same_ip: ผู้ใช้อื่น ๆ ที่มี IP เดียวกัน
+      sensitive: ละเอียดอ่อน
+      sensitized: ทำเครื่องหมายว่าละเอียดอ่อนแล้ว
       shared_inbox_url: URL กล่องขาเข้าที่แบ่งปัน
       show:
         created_reports: รายงานที่สร้าง
         targeted_reports: รายงานโดยผู้อื่น
       silence: จำกัด
       silenced: จำกัดอยู่
-      statuses: สถานะ
+      statuses: โพสต์
       subscribe: บอกรับ
       suspended: ระงับอยู่
       time_in_queue: กำลังรออยู่ในคิว %{time}
       title: บัญชี
       unconfirmed_email: อีเมลที่ยังไม่ได้ยืนยัน
+      undo_sensitized: เลิกทำการละเอียดอ่อน
       undo_silenced: เลิกทำการทำให้เงียบ
       undo_suspension: เลิกทำการระงับ
+      unsilenced_msg: เลิกจำกัดบัญชีของ %{username} สำเร็จ
       unsubscribe: เลิกบอกรับ
       unsuspended_msg: เลิกระงับบัญชีของ %{username} สำเร็จ
       username: ชื่อผู้ใช้
@@ -208,7 +216,7 @@ th:
         destroy_domain_block: ลบการปิดกั้นโดเมน
         destroy_email_domain_block: ลบการปิดกั้นโดเมนอีเมล
         destroy_ip_block: ลบกฎ IP
-        destroy_status: ลบสถานะ
+        destroy_status: ลบโพสต์
         disable_2fa_user: ปิดใช้งาน 2FA
         disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง
         disable_user: ปิดใช้งานผู้ใช้
@@ -230,49 +238,49 @@ th:
         update_announcement: อัปเดตประกาศ
         update_custom_emoji: อัปเดตอีโมจิที่กำหนดเอง
         update_domain_block: อัปเดตการปิดกั้นโดเมน
-        update_status: อัปเดตสถานะ
+        update_status: อัปเดตโพสต์
       actions:
-        assigned_to_self_report: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง"
-        change_email_user: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}"
-        confirm_user: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}"
-        create_account_warning: "%{name} ได้ส่งคำเตือนไปยัง %{target}"
-        create_announcement: "%{name} ได้สร้างประกาศใหม่ %{target}"
-        create_custom_emoji: "%{name} ได้อัปโหลดอีโมจิใหม่ %{target}"
-        create_domain_allow: "%{name} ได้อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}"
-        create_domain_block: "%{name} ได้ปิดกั้นโดเมน %{target}"
-        create_email_domain_block: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}"
-        create_ip_block: "%{name} ได้สร้างกฎสำหรับ IP %{target}"
-        demote_user: "%{name} ได้ลดขั้นผู้ใช้ %{target}"
-        destroy_announcement: "%{name} ได้ลบประกาศ %{target}"
-        destroy_custom_emoji: "%{name} ได้ทำลายอีโมจิ %{target}"
-        destroy_domain_allow: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}"
-        destroy_domain_block: "%{name} ได้เลิกปิดกั้นโดเมน %{target}"
-        destroy_email_domain_block: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}"
-        destroy_ip_block: "%{name} ได้ลบกฎสำหรับ IP %{target}"
-        destroy_status: "%{name} ได้เอาสถานะโดย %{target} ออก"
-        disable_2fa_user: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}"
-        disable_custom_emoji: "%{name} ได้ปิดใช้งานอีโมจิ %{target}"
-        disable_user: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
-        enable_custom_emoji: "%{name} ได้เปิดใช้งานอีโมจิ %{target}"
-        enable_user: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
-        memorialize_account: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์"
-        promote_user: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}"
-        remove_avatar_user: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก"
-        reopen_report: "%{name} ได้เปิดรายงาน %{target} ใหม่"
-        reset_password_user: "%{name} ได้ตั้งรหัสผ่านของผู้ใช้ %{target} ใหม่"
-        resolve_report: "%{name} ได้แก้ปัญหารายงาน %{target}"
-        sensitive_account: "%{name} ได้ทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน"
-        silence_account: "%{name} ได้ทำให้บัญชีของ %{target} เงียบ"
-        suspend_account: "%{name} ได้ระงับบัญชีของ %{target}"
-        unassigned_report: "%{name} ได้เลิกมอบหมายรายงาน %{target}"
-        unsensitive_account: "%{name} ได้เลิกทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน"
-        unsilence_account: "%{name} ได้เลิกทำให้บัญชีของ %{target} เงียบ"
-        unsuspend_account: "%{name} ได้เลิกระงับบัญชีของ %{target}"
-        update_announcement: "%{name} ได้อัปเดตประกาศ %{target}"
-        update_custom_emoji: "%{name} ได้อัปเดตอีโมจิ %{target}"
-        update_domain_block: "%{name} ได้อัปเดตการปิดกั้นโดเมนสำหรับ %{target}"
-        update_status: "%{name} ได้อัปเดตสถานะโดย %{target}"
-      deleted_status: "(สถานะที่ลบแล้ว)"
+        assigned_to_self_report_html: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง"
+        change_email_user_html: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}"
+        confirm_user_html: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}"
+        create_account_warning_html: "%{name} ได้ส่งคำเตือนไปยัง %{target}"
+        create_announcement_html: "%{name} ได้สร้างประกาศใหม่ %{target}"
+        create_custom_emoji_html: "%{name} ได้อัปโหลดอีโมจิใหม่ %{target}"
+        create_domain_allow_html: "%{name} ได้อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}"
+        create_domain_block_html: "%{name} ได้ปิดกั้นโดเมน %{target}"
+        create_email_domain_block_html: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}"
+        create_ip_block_html: "%{name} ได้สร้างกฎสำหรับ IP %{target}"
+        demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}"
+        destroy_announcement_html: "%{name} ได้ลบประกาศ %{target}"
+        destroy_custom_emoji_html: "%{name} ได้ทำลายอีโมจิ %{target}"
+        destroy_domain_allow_html: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}"
+        destroy_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมน %{target}"
+        destroy_email_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}"
+        destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}"
+        destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก"
+        disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}"
+        disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}"
+        disable_user_html: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
+        enable_custom_emoji_html: "%{name} ได้เปิดใช้งานอีโมจิ %{target}"
+        enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
+        memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์"
+        promote_user_html: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}"
+        remove_avatar_user_html: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก"
+        reopen_report_html: "%{name} ได้เปิดรายงาน %{target} ใหม่"
+        reset_password_user_html: "%{name} ได้ตั้งรหัสผ่านของผู้ใช้ %{target} ใหม่"
+        resolve_report_html: "%{name} ได้แก้ปัญหารายงาน %{target}"
+        sensitive_account_html: "%{name} ได้ทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน"
+        silence_account_html: "%{name} ได้ทำให้บัญชีของ %{target} เงียบ"
+        suspend_account_html: "%{name} ได้ระงับบัญชีของ %{target}"
+        unassigned_report_html: "%{name} ได้เลิกมอบหมายรายงาน %{target}"
+        unsensitive_account_html: "%{name} ได้เลิกทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน"
+        unsilence_account_html: "%{name} ได้เลิกทำให้บัญชีของ %{target} เงียบ"
+        unsuspend_account_html: "%{name} ได้เลิกระงับบัญชีของ %{target}"
+        update_announcement_html: "%{name} ได้อัปเดตประกาศ %{target}"
+        update_custom_emoji_html: "%{name} ได้อัปเดตอีโมจิ %{target}"
+        update_domain_block_html: "%{name} ได้อัปเดตการปิดกั้นโดเมนสำหรับ %{target}"
+        update_status_html: "%{name} ได้อัปเดตโพสต์โดย %{target}"
+      deleted_status: "(โพสต์ที่ลบแล้ว)"
       empty: ไม่พบรายการบันทึก
       filter_by_action: กรองตามการกระทำ
       filter_by_user: กรองตามผู้ใช้
@@ -286,10 +294,12 @@ th:
       new:
         create: สร้างประกาศ
         title: ประกาศใหม่
+      publish: เผยแพร่
       published_msg: เผยแพร่ประกาศสำเร็จ!
       scheduled_for: จัดกำหนดไว้สำหรับ %{time}
       scheduled_msg: จัดกำหนดการเผยแพร่ประกาศแล้ว!
       title: ประกาศ
+      unpublish: เลิกเผยแพร่
       unpublished_msg: เลิกเผยแพร่ประกาศสำเร็จ!
       updated_msg: อัปเดตประกาศสำเร็จ!
     custom_emojis:
@@ -333,7 +343,6 @@ th:
       feature_profile_directory: ไดเรกทอรีโปรไฟล์
       feature_registrations: การลงทะเบียน
       feature_relay: รีเลย์การติดต่อกับภายนอก
-      feature_spam_check: การป้องกันสแปม
       feature_timeline_preview: ตัวอย่างเส้นเวลา
       features: คุณลักษณะ
       hidden_service: การติดต่อกับภายนอกกับบริการที่ซ่อนอยู่
@@ -377,6 +386,7 @@ th:
       reject_media: ปฏิเสธไฟล์สื่อ
       reject_media_hint: เอาไฟล์สื่อที่จัดเก็บไว้ในเซิร์ฟเวอร์ออกและปฏิเสธที่จะดาวน์โหลดไฟล์ใด ๆ ในอนาคต ไม่เกี่ยวข้องกับการระงับ
       reject_reports: ปฏิเสธรายงาน
+      reject_reports_hint: เพิกเฉยรายงานทั้งหมดที่มาจากโดเมนนี้ ไม่เกี่ยวข้องกับการระงับ
       rejecting_media: กำลังปฏิเสธไฟล์สื่อ
       rejecting_reports: กำลังปฏิเสธรายงาน
       severity:
@@ -404,6 +414,13 @@ th:
         create: เพิ่มโดเมน
         title: ปิดกั้นโดเมนอีเมลใหม่
       title: โดเมนอีเมลที่ปิดกั้นอยู่
+    follow_recommendations:
+      language: สำหรับภาษา
+      status: สถานะ
+      suppress: ระงับคำแนะนำการติดตาม
+      suppressed: ระงับอยู่
+      title: คำแนะนำการติดตาม
+      unsuppress: คืนค่าคำแนะนำการติดตาม
     instances:
       by_domain: โดเมน
       empty: ไม่พบโดเมน
@@ -457,6 +474,7 @@ th:
       inbox_url: URL รีเลย์
       pending: กำลังรอการอนุมัติของรีเลย์
       save_and_enable: บันทึกแล้วเปิดใช้งาน
+      setup: ตั้งค่าการเชื่อมต่อแบบรีเลย์
       status: สถานะ
       title: รีเลย์
     report_notes:
@@ -495,9 +513,14 @@ th:
       unassign: เลิกมอบหมาย
       unresolved: ยังไม่ได้แก้ปัญหา
       updated_at: อัปเดตเมื่อ
+    rules:
+      add_new: เพิ่มกฎ
+      delete: ลบ
+      edit: แก้ไขกฎ
+      title: กฎของเซิร์ฟเวอร์
     settings:
       bootstrap_timeline_accounts:
-        title: การติดตามเริ่มต้นสำหรับผู้ใช้ใหม่
+        title: แนะนำบัญชีเหล่านี้ให้กับผู้ใช้ใหม่
       contact_information:
         email: อีเมลธุรกิจ
         username: ชื่อผู้ใช้ในการติดต่อ
@@ -513,8 +536,6 @@ th:
         users: ให้กับผู้ใช้ในเซิร์ฟเวอร์ที่เข้าสู่ระบบ
       domain_blocks_rationale:
         title: แสดงคำชี้แจงเหตุผล
-      enable_bootstrap_timeline_accounts:
-        title: เปิดใช้งานการติดตามเริ่มต้นสำหรับผู้ใช้ใหม่
       hero:
         desc_html: แสดงในหน้าแรก อย่างน้อย 600x100px ที่แนะนำ เมื่อไม่ได้ตั้ง กลับไปใช้ภาพขนาดย่อเซิร์ฟเวอร์
         title: ภาพแบนเนอร์หลัก
@@ -523,7 +544,7 @@ th:
         title: ภาพมาสคอต
       peers_api_enabled:
         desc_html: ชื่อโดเมนที่เซิร์ฟเวอร์นี้ได้พบในเฟดิเวิร์ส
-        title: เผยแพร่รายการเซิร์ฟเวอร์ที่ค้นพบ
+        title: เผยแพร่รายการเซิร์ฟเวอร์ที่ค้นพบใน API
       preview_sensitive_media:
         title: แสดงสื่อที่ละเอียดอ่อนในตัวอย่าง OpenGraph
       profile_directory:
@@ -545,6 +566,8 @@ th:
           none: ไม่มีใครสามารถลงทะเบียน
           open: ใครก็ตามสามารถลงทะเบียน
         title: โหมดการลงทะเบียน
+      show_known_fediverse_at_about_page:
+        title: รวมเนื้อหาที่ติดต่อกับภายนอกไว้ในหน้าเส้นเวลาสาธารณะที่ไม่ได้รับรองความถูกต้อง
       show_staff_badge:
         desc_html: แสดงป้ายพนักงานในหน้าผู้ใช้
         title: แสดงป้ายพนักงาน
@@ -555,6 +578,7 @@ th:
         desc_html: สถานที่ที่ดีสำหรับแนวทางปฏิบัติ, กฎ, หลักเกณฑ์ และสิ่งอื่น ๆ ของคุณที่ทำให้เซิร์ฟเวอร์ของคุณแตกต่าง คุณสามารถใช้แท็ก HTML
         title: ข้อมูลแบบขยายที่กำหนดเอง
       site_short_description:
+        desc_html: แสดงในแถบข้างและแท็กเมตา อธิบายว่า Mastodon คืออะไรและสิ่งที่ทำให้เซิร์ฟเวอร์นี้พิเศษในย่อหน้าเดียว
         title: คำอธิบายเซิร์ฟเวอร์แบบสั้น
       site_terms:
         desc_html: คุณสามารถเขียนนโยบายความเป็นส่วนตัว, เงื่อนไขการให้บริการ หรือภาษากฎหมายอื่น ๆ ของคุณเอง คุณสามารถใช้แท็ก HTML
@@ -581,15 +605,19 @@ th:
         nsfw_off: ทำเครื่องหมายว่าไม่ละเอียดอ่อน
         nsfw_on: ทำเครื่องหมายว่าละเอียดอ่อน
       deleted: ลบแล้ว
+      failed_to_execute: ไม่สามารถปฏิบัติการ
       media:
         title: สื่อ
       no_media: ไม่มีสื่อ
-      title: สถานะบัญชี
+      title: โพสต์ของบัญชี
       with_media: มีสื่อ
+    system_checks:
+      rules_check:
+        action: จัดการกฎของเซิร์ฟเวอร์
+        message_html: คุณไม่ได้กำหนดกฎของเซิร์ฟเวอร์ใด ๆ
     tags:
-      context: บริบท
-      directory: ในไดเรกทอรี
-      in_directory: "%{count} ในไดเรกทอรี"
+      accounts_today: การใช้งานที่ไม่ซ้ำกันในวันนี้
+      accounts_week: การใช้งานที่ไม่ซ้ำกันในสัปดาห์นี้
       last_active: ใช้งานล่าสุด
       most_popular: ยอดนิยม
       most_recent: ล่าสุด
@@ -635,7 +663,7 @@ th:
     settings: 'เปลี่ยนการกำหนดลักษณะอีเมล: %{link}'
     view: 'มุมมอง:'
     view_profile: ดูโปรไฟล์
-    view_status: ดูสถานะ
+    view_status: ดูโพสต์
   applications:
     created: สร้างแอปพลิเคชันสำเร็จ
     destroyed: ลบแอปพลิเคชันสำเร็จ
@@ -653,6 +681,7 @@ th:
     description:
       prefix_invited_by_user: "@%{name} เชิญคุณเข้าร่วมเซิร์ฟเวอร์ Mastodon นี้!"
       prefix_sign_up: ลงทะเบียนใน Mastodon วันนี้!
+      suffix: เมื่อมีบัญชี คุณจะสามารถติดตามผู้คน โพสต์การอัปเดต และแลกเปลี่ยนข้อความกับผู้ใช้จากเซิร์ฟเวอร์ Mastodon และอื่น ๆ!
     didnt_get_confirmation: ไม่ได้รับคำแนะนำการยืนยัน?
     dont_have_your_security_key: ไม่มีกุญแจความปลอดภัยของคุณ?
     forgot_password: ลืมรหัสผ่านของคุณ?
@@ -680,6 +709,7 @@ th:
       account_status: สถานะบัญชี
       confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์
       functional: บัญชีของคุณทำงานได้อย่างเต็มที่
+    too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง
     trouble_logging_in: มีปัญหาในการเข้าสู่ระบบ?
     use_security_key: ใช้กุญแจความปลอดภัย
   authorize_follow:
@@ -726,9 +756,11 @@ th:
     proceed: ลบบัญชี
     success_msg: ลบบัญชีของคุณสำเร็จ
     warning:
+      caches: เนื้อหาที่ได้รับการแคชโดยเซิร์ฟเวอร์อื่น ๆ อาจยังคงอยู่
       data_removal: จะเอาโพสต์และข้อมูลอื่น ๆ ของคุณออกโดยถาวร
       email_change_html: คุณสามารถ <a href="%{path}">เปลี่ยนที่อยู่อีเมลของคุณ</a> โดยไม่ต้องลบบัญชีของคุณ
       email_reconfirmation_html: หากคุณไม่ได้รับอีเมลยืนยัน คุณสามารถ <a href="%{path}">ขออีเมลอีกครั้ง</a>
+      irreversible: คุณจะไม่สามารถคืนค่าหรือเปิดใช้งานบัญชีของคุณใหม่
       more_details_html: สำหรับรายละเอียดเพิ่มเติม ดู <a href="%{terms_path}">นโยบายความเป็นส่วนตัว</a>
       username_available: ชื่อผู้ใช้ของคุณจะพร้อมใช้งานอีกครั้ง
       username_unavailable: ชื่อผู้ใช้ของคุณจะยังคงไม่พร้อมใช้งาน
@@ -759,6 +791,7 @@ th:
     archive_takeout:
       date: วันที่
       download: ดาวน์โหลดการเก็บถาวรของคุณ
+      in_progress: กำลังคอมไพล์การเก็บถาวรของคุณ...
       request: ขอการเก็บถาวรของคุณ
       size: ขนาด
     blocks: คุณปิดกั้น
@@ -850,7 +883,7 @@ th:
     title: เชิญผู้คน
   media_attachments:
     validations:
-      images_and_video: ไม่สามารถแนบวิดีโอกับสถานะที่มีภาพอยู่แล้ว
+      images_and_video: ไม่สามารถแนบวิดีโอกับโพสต์ที่มีภาพอยู่แล้ว
       too_many: ไม่สามารถแนบมากกว่า 4 ไฟล์
   migrations:
     acct: ย้ายไปยัง
@@ -884,8 +917,8 @@ th:
         other: "%{count} การแจ้งเตือนใหม่นับตั้งแต่การเยี่ยมชมล่าสุดของคุณ \U0001F418"
       title: เมื่อคุณไม่อยู่...
     favourite:
-      body: 'สถานะของคุณได้รับการชื่นชอบโดย %{name}:'
-      subject: "%{name} ได้ชื่นชอบสถานะของคุณ"
+      body: 'โพสต์ของคุณได้รับการชื่นชอบโดย %{name}:'
+      subject: "%{name} ได้ชื่นชอบโพสต์ของคุณ"
       title: รายการโปรดใหม่
     follow:
       body: "%{name} กำลังติดตามคุณ!"
@@ -902,9 +935,11 @@ th:
       subject: คุณได้รับการกล่าวถึงโดย %{name}
       title: การกล่าวถึงใหม่
     reblog:
-      body: 'สถานะของคุณได้รับการดันโดย %{name}:'
-      subject: "%{name} ได้ดันสถานะของคุณ"
+      body: 'โพสต์ของคุณได้รับการดันโดย %{name}:'
+      subject: "%{name} ได้ดันโพสต์ของคุณ"
       title: การดันใหม่
+    status:
+      subject: "%{name} เพิ่งโพสต์"
   notifications:
     email_events: เหตุการณ์สำหรับการแจ้งเตือนอีเมล
     email_events_hint: 'เลือกเหตุการณ์ที่คุณต้องการรับการแจ้งเตือน:'
@@ -973,29 +1008,21 @@ th:
     browser: เบราว์เซอร์
     browsers:
       alipay: Alipay
-      blackberry: Blackberry
       chrome: Chrome
       edge: Microsoft Edge
       electron: Electron
       firefox: Firefox
       generic: เบราว์เซอร์ที่ไม่รู้จัก
       ie: Internet Explorer
-      micro_messenger: MicroMessenger
-      nokia: Nokia S40 Ovi Browser
       opera: Opera
-      otter: Otter
-      phantom_js: PhantomJS
-      qq: QQ Browser
       safari: Safari
-      uc_browser: UCBrowser
       weibo: Weibo
     current_session: เซสชันปัจจุบัน
+    description: "%{browser} ใน %{platform}"
     ip: IP
     platforms:
       adobe_air: Adobe Air
       android: Android
-      blackberry: Blackberry
-      chrome_os: ChromeOS
       firefox_os: Firefox OS
       ios: iOS
       linux: Linux
@@ -1029,8 +1056,6 @@ th:
     relationships: การติดตามและผู้ติดตาม
     two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย
     webauthn_authentication: กุญแจความปลอดภัย
-  spam_check:
-    spam_detected: นี่คือรายงานแบบอัตโนมัติ ตรวจพบสแปม
   statuses:
     attached:
       audio:
@@ -1063,6 +1088,7 @@ th:
     sign_in_to_participate: ลงชื่อเข้าเพื่อเข้าร่วมการสนทนา
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: โดยตรง
       private: ผู้ติดตามเท่านั้น
       private_long: แสดงแก่ผู้ติดตามเท่านั้น
       public: สาธารณะ
@@ -1098,6 +1124,8 @@ th:
     recovery_codes_regenerated: สร้างรหัสกู้คืนใหม่สำเร็จ
     webauthn: กุญแจความปลอดภัย
   user_mailer:
+    backup_ready:
+      subject: การเก็บถาวรของคุณพร้อมสำหรับการดาวน์โหลดแล้ว
     sign_in_token:
       details: 'นี่คือรายละเอียดของความพยายาม:'
       explanation: 'เราตรวจพบความพยายามลงชื่อเข้าบัญชีของคุณจากที่อยู่ IP ที่ไม่รู้จัก หากนี่คือคุณ โปรดป้อนรหัสความปลอดภัยด้านล่างในหน้าตรวจสอบการลงชื่อเข้า:'
@@ -1109,21 +1137,23 @@ th:
       subject:
         none: คำเตือนสำหรับ %{acct}
       title:
+        disable: อายัดบัญชีอยู่
         none: คำเตือน
         silence: จำกัดบัญชีอยู่
         suspend: ระงับบัญชีอยู่
     welcome:
+      edit_profile_action: ตั้งค่าโปรไฟล์
       review_preferences_action: เปลี่ยนการกำหนดลักษณะ
       subject: ยินดีต้อนรับสู่ Mastodon
+      tip_following: คุณติดตามผู้ดูแลเซิร์ฟเวอร์ของคุณเป็นค่าเริ่มต้น เพื่อค้นหาผู้คนที่น่าสนใจเพิ่มเติม ตรวจสอบเส้นเวลาในเซิร์ฟเวอร์และที่ติดต่อกับภายนอก
       tips: เคล็ดลับ
       title: ยินดีต้อนรับ %{name}!
   users:
-    blocked_email_provider: ไม่อนุญาตผู้ให้บริการอีเมลนี้
     follow_limit_reached: คุณไม่สามารถติดตามมากกว่า %{limit} คน
-    invalid_email: ที่อยู่อีเมลไม่ถูกต้อง
-    invalid_email_mx: ดูเหมือนว่าไม่มีที่อยู่อีเมลอยู่
+    generic_access_help_html: มีปัญหาในการเข้าถึงบัญชีของคุณ? คุณสามารถติดต่อ %{email} สำหรับความช่วยเหลือ
     invalid_otp_token: รหัสสองปัจจัยไม่ถูกต้อง
     invalid_sign_in_token: รหัสความปลอดภัยไม่ถูกต้อง
+    otp_lost_help_html: หากคุณสูญเสียการเข้าถึงทั้งสองอย่าง คุณสามารถติดต่อ %{email}
     seamless_external_login: คุณได้เข้าสู่ระบบผ่านบริการภายนอก ดังนั้นจึงไม่มีการตั้งค่ารหัสผ่านและอีเมล
     signed_in_as: 'ลงชื่อเข้าเป็น:'
   verification:
@@ -1139,6 +1169,7 @@ th:
       error: มีปัญหาในการลบกุญแจความปลอดภัยของคุณ โปรดลองอีกครั้ง
       success: ลบกุญแจความปลอดภัยของคุณสำเร็จ
     invalid_credential: กุญแจความปลอดภัยไม่ถูกต้อง
+    nickname_hint: ป้อนชื่อเล่นของกุญแจความปลอดภัยใหม่ของคุณ
     not_enabled: คุณยังไม่ได้เปิดใช้งาน WebAuthn
     not_supported: เบราว์เซอร์นี้ไม่รองรับกุญแจความปลอดภัย
     otp_required: เพื่อใช้กุญแจความปลอดภัย โปรดเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยก่อน
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 62247bf56..9e65a7c62 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -26,6 +26,8 @@ tr:
       Federasyon amaçlı kullanılır ve tüm yansıyı engellemek istemediğiniz sürece engellenmemelidir; bu durumda bir etki alanı bloğu kullanmanız gerekir.
     learn_more: Daha fazla bilgi edinin
     privacy_policy: Gizlilik politikası
+    rules: Sunucu kuralları
+    rules_html: 'Aşağıda, bu Mastodon sunucusu üzerinde bir hesap açmak istiyorsanız uymanız gereken kuralların bir özeti var:'
     see_whats_happening: Neler olduğunu görün
     server_stats: 'Sunucu istatistikleri:'
     source_code: Kaynak kodu
@@ -60,6 +62,7 @@ tr:
       one: Takipçi
       other: Takipçi
     following: Takip edilenler
+    instance_actor_flash: Bu hesap, herhangi bir bireysel kullanıcı değil, sunucunun kendisini temsil etmek için kullanılan sanal bir aktördür. Birleştirme amacıyla kullanılmaktadır ve askıya alınmamalıdır.
     joined: "%{date} tarihinde katıldı"
     last_active: son etkinlik
     link_verified_on: Bu bağlantının mülkiyeti %{date} tarihinde kontrol edildi
@@ -77,7 +80,6 @@ tr:
       other: Toot
     posts_tab_heading: Tootlar
     posts_with_replies: Tootlar ve yanıtlar
-    reserved_username: Kullanıcı adı rezerve edildi
     roles:
       admin: Yönetici
       bot: Bot
@@ -131,6 +133,7 @@ tr:
       follows: Takip edilen
       header: Üstbilgi
       inbox_url: Gelen kutusu bağlantısı
+      invite_request_text: Katılma gerekçeleri
       invited_by: Tarafından davet edildi
       ip: IP
       joined: Katıldı
@@ -227,6 +230,7 @@ tr:
         create_domain_block: Engellenen Alan Adı Oluştur
         create_email_domain_block: E-Posta Alan Adı Engeli Oluştur
         create_ip_block: IP kuralı oluştur
+        create_unavailable_domain: Mevcut Olmayan Alan Adı Oluştur
         demote_user: Kullanıcıyı Düşür
         destroy_announcement: Duyuru Sil
         destroy_custom_emoji: Özel İfadeyi Sil
@@ -235,6 +239,7 @@ tr:
         destroy_email_domain_block: E-posta alan adı engelini sil
         destroy_ip_block: IP kuralını sil
         destroy_status: Durumu Sil
+        destroy_unavailable_domain: Mevcut Olmayan Alan Adı Sil
         disable_2fa_user: 2AD Kapat
         disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak
         disable_user: Kullanıcıyı Devre Dışı Bırak
@@ -258,46 +263,48 @@ tr:
         update_domain_block: Engellenen Alan Adını Güncelle
         update_status: Durumu Güncelle
       actions:
-        assigned_to_self_report: "%{name} kendilerine %{target} adlı raporu verdi"
-        change_email_user: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi"
-        confirm_user: "%{name} %{target} kullanıcısının e-posta adresini onayladı"
-        create_account_warning: "%{name} %{target} 'a bir uyarı gönderdi"
-        create_announcement: "%{name}, yeni %{target} duyurusunu oluşturdu"
-        create_custom_emoji: "%{name} yeni ifade yükledi %{target}"
-        create_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeye alındı"
-        create_domain_block: "%{target} alanı, %{name} tarafından engellendi"
-        create_email_domain_block: "%{target} e-posta alanı, %{name} tarafından kara listeye alınmış"
-        create_ip_block: "%{name}, IP %{target} için kural oluşturdu"
-        demote_user: "%{name} %{target} kullanıcısını düşürdü"
-        destroy_announcement: "%{name}, %{target} duyurusunu sildi"
-        destroy_custom_emoji: "%{target} emoji, %{name} tarafından kaldırıldı"
-        destroy_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeden çıkartıldı"
-        destroy_domain_block: "%{target} alan adının engeli %{name} tarafından kaldırıldı"
-        destroy_email_domain_block: "%{target} e-posta sunucusu, %{name} tarafından beyaz listeye alındı"
-        destroy_ip_block: "%{name}, IP %{target} için kuralı sildi"
-        destroy_status: "%{name}, %{target} kullanıcısının durumunu kaldırdı"
-        disable_2fa_user: "%{name}, %{target} kullanıcısı için iki adım gereksinimini kapattı"
-        disable_custom_emoji: "%{target} emoji, %{name} tarafından devre dışı bırakıldı"
-        disable_user: "%{name} %{target} kullanıcısı için oturum açmayı devre dışı bıraktı"
-        enable_custom_emoji: "%{name} %{target} için emojiyi etkinleştirdi"
-        enable_user: "%{name} %{target} için oturum açmayı etkinleştirdi"
-        memorialize_account: "%{name}, %{target} kişisinin hesabını anıt sayfasına dönüştürdü"
-        promote_user: "%{name} %{target} kullanıcısını yükseltti"
-        remove_avatar_user: "%{name} %{target}'in avatarını kaldırdı"
-        reopen_report: "%{name} %{target} şikayetini yeniden açtı"
-        reset_password_user: "%{name} %{target} kullanıcısının parolasını resetledi"
-        resolve_report: "%{name} %{target} şikayetini çözdü"
-        sensitive_account: "%{name}, %{target} kişisinin medyasını hassas olarak işaretledi"
-        silence_account: "%{name} %{target}'in hesabını susturdu"
-        suspend_account: "%{name} %{target}'in hesabını uzaklaştırdı"
-        unassigned_report: "%{name} %{target} şikayetinin atamasını geri aldı"
-        unsensitive_account: "%{name}, %{target} kişisinin medyasını hassas olarak işaretlemedi"
-        unsilence_account: "%{name} %{target}'in hesabının susturmasını kaldırdı"
-        unsuspend_account: "%{name} %{target}'in hesabının uzaklaştırmasını kaldırdı"
-        update_announcement: "%{name}, %{target} duyurusunu güncelledi"
-        update_custom_emoji: "%{name} %{target} emojiyi güncelledi"
-        update_domain_block: "%{name}, %{target} için alan adı engelini güncelledi"
-        update_status: "%{name}, %{target} kullanıcısının durumunu güncelledi"
+        assigned_to_self_report_html: "%{name} kendilerine %{target} adlı raporu verdi"
+        change_email_user_html: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi"
+        confirm_user_html: "%{name} %{target} kullanıcısının e-posta adresini onayladı"
+        create_account_warning_html: "%{name} %{target} 'a bir uyarı gönderdi"
+        create_announcement_html: "%{name}, yeni %{target} duyurusunu oluşturdu"
+        create_custom_emoji_html: "%{name} yeni %{target} ifadesini yükledi"
+        create_domain_allow_html: "%{name}, %{target} alan adıyla birliğe izin verdi"
+        create_domain_block_html: "%{name}, %{target} alan adını engelledi"
+        create_email_domain_block_html: "%{name}, %{target} e-posta alan adını engelledi"
+        create_ip_block_html: "%{name}, %{target} IP adresi için kural oluşturdu"
+        create_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı durdurdu"
+        demote_user_html: "%{name}, %{target} kullanıcısını düşürdü"
+        destroy_announcement_html: "%{name}, %{target} duyurusunu sildi"
+        destroy_custom_emoji_html: "%{name}, %{target} emojisini yok etti"
+        destroy_domain_allow_html: "%{name}, %{target} alan adıyla birlik iznini kaldırdı"
+        destroy_domain_block_html: "%{name}, %{target} alan adı engelini kaldırdı"
+        destroy_email_domain_block_html: "%{name}, %{target} e-posta alan adı engelini kaldırdı"
+        destroy_ip_block_html: "%{name}, %{target} IP adresi kuralını sildi"
+        destroy_status_html: "%{name}, %{target} kullanıcısının gönderisini kaldırdı"
+        destroy_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı sürdürdü"
+        disable_2fa_user_html: "%{name}, %{target} kullanıcısının iki aşamalı doğrulama gereksinimini kapattı"
+        disable_custom_emoji_html: "%{name}, %{target} emojisini devre dışı bıraktı"
+        disable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı devre dışı bıraktı"
+        enable_custom_emoji_html: "%{name}, %{target} emojisini etkinleştirdi"
+        enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi"
+        memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü"
+        promote_user_html: "%{name}, %{target} kullanıcısını yükseltti"
+        remove_avatar_user_html: "%{name}, %{target} kullanıcısının avatarını kaldırdı"
+        reopen_report_html: "%{name}, %{target} şikayetini yeniden açtı"
+        reset_password_user_html: "%{name}, %{target} kullanıcısının parolasını sıfırladı"
+        resolve_report_html: "%{name}, %{target} şikayetini çözdü"
+        sensitive_account_html: "%{name}, %{target} kullanıcısının medyasını hassas olarak işaretledi"
+        silence_account_html: "%{name}, %{target} kullanıcısının hesabını sessize aldı"
+        suspend_account_html: "%{name}, %{target} kullanıcısının hesabını askıya aldı"
+        unassigned_report_html: "%{name}, %{target} şikayetinin atamasını kaldırdı"
+        unsensitive_account_html: "%{name}, %{target} kullanıcısının medyasının hassas işaretini kaldırdı"
+        unsilence_account_html: "%{name}, %{target} kullanıcısının hesabının sessizliğini kaldırdı"
+        unsuspend_account_html: "%{name}, %{target} kullanıcısının hesabının askı durumunu kaldırdı"
+        update_announcement_html: "%{name}, %{target} duyurusunu güncelledi"
+        update_custom_emoji_html: "%{name}, %{target} emojisini güncelledi"
+        update_domain_block_html: "%{name}, %{target} alan adının engelini güncelledi"
+        update_status_html: "%{name}, %{target} kullanıcısının gönderisini güncelledi"
       deleted_status: "(silinmiş durum)"
       empty: Kayıt bulunamadı.
       filter_by_action: Eyleme göre filtre
@@ -312,10 +319,12 @@ tr:
       new:
         create: Duyuru oluştur
         title: Yeni duyuru
+      publish: Yayınla
       published_msg: Duyuru başarıyla yayınlandı!
       scheduled_for: "%{time} için zamanlandı"
       scheduled_msg: Duyuru yayınlanmak üzere zamanlandı!
       title: Duyurular
+      unpublish: Yayından kaldır
       unpublished_msg: Duyuru başarıyla yayından kaldırıldı!
       updated_msg: Duyuru başarıyla güncellendi!
     custom_emojis:
@@ -360,7 +369,6 @@ tr:
       feature_profile_directory: Profil Dizini
       feature_registrations: Kayıtlar
       feature_relay: Federasyon aktarıcısı
-      feature_spam_check: Anti-spam
       feature_timeline_preview: Zaman çizelgesi önizlemesi
       features: Özellikler
       hidden_service: Gizli servislere sahip federasyon
@@ -400,6 +408,8 @@ tr:
           silence: Sustur
           suspend: Uzaklaştır
         title: Yeni domain bloğu
+      obfuscate: Alan adını gizle
+      obfuscate_hint: Alan adı kısıtlamaları listelerinin duyurulması etkinleştirilmişse alan adını listede kısmen gizle
       private_comment: Özel yorum
       private_comment_hint: Denetleyiciler tarafından dahili kullanım için bu alan adı sınırlaması hakkında yorum.
       public_comment: Genel yorum
@@ -436,9 +446,34 @@ tr:
         create: Alan adı ekle
         title: Yeni e-posta kara liste girişi
       title: E-posta kara listesi
+    follow_recommendations:
+      description_html: "<strong>Takip önerileri yeni kullanıcıların hızlı bir şekilde ilginç içerik bulmalarını sağlar</strong>. Eğer bir kullanıcı, kişisel takip önerileri almaya yetecek kadar başkalarıyla etkileşime girmediğinde, onun yerine bu hesaplar önerilir. Bu öneriler, verili bir dil için en yüksek takipçi sayısına ve en yüksek güncel meşguliyete sahip hesapların bir karışımdan günlük olarak hesaplanıyorlar."
+      language: Dil için
+      status: Durum
+      suppress: Takip önerisini baskıla
+      suppressed: Baskılandı
+      title: Takip önerileri
+      unsuppress: Takip önerisini geri getir
     instances:
+      back_to_all: Tümü
+      back_to_limited: Sınırlı
+      back_to_warning: Uyarı
       by_domain: Alan adı
+      delivery:
+        all: Tümü
+        clear: Teslimat hatalarını temizle
+        restart: Teslimatı yeniden başlat
+        stop: Teslimatı durdur
+        title: Teslimat
+        unavailable: Mevcut Değil
+        unavailable_message: Teslimat mevcut değil
+        warning: Uyarı
+        warning_message:
+          one: Teslimat %{count} gündür başarısız
+          other: Teslimat %{count} gündür başarısız
       delivery_available: Teslimat mevcut
+      delivery_error_days: Teslimat hatası günleri
+      delivery_error_hint: Eğer teslimat %{count} gün boyunca mümkün olmazsa, otomatik olarak teslim edilemiyor olarak işaretlenecek.
       empty: Alan adı bulunamadı.
       known_accounts:
         one: "%{count} bilinen hesap"
@@ -517,6 +552,8 @@ tr:
       comment:
         none: Yok
       created_at: Şikayet edildi
+      forwarded: İletildi
+      forwarded_to: "%{domain}'e iletildi"
       mark_as_resolved: Giderildi olarak işaretle
       mark_as_unresolved: Çözümlenmemiş olarak işaretle
       notes:
@@ -536,6 +573,13 @@ tr:
       unassign: Atamayı geri al
       unresolved: Giderilmedi
       updated_at: Güncellendi
+    rules:
+      add_new: Kural ekle
+      delete: Sil
+      description_html: Her ne kadar çoğu hizmet kullanım şartlarını okuyup kabul ettiğini söylese de, insanlar onu ancak bir sorun çıktığında gözden geçiriyorlar. <strong>Sunucunuzun kurallarını bir bakışta kolayca görülecek şekilde düz bir madde listesi şeklinde sunun</strong>. Tekil kuralları kısa ve yalın tutmaya çalışan ama onları çok sayıda maddeye bölmemeye de çalışın.
+      edit: Kuralı düzenle
+      empty: Henüz bir sunucu kuralı tanımlanmadı.
+      title: Sunucu kuralları
     settings:
       activity_api_enabled:
         desc_html: Yerel olarak yayınlanan durumların, aktif kullanıcıların, ve haftalık kovalardaki yeni kayıtların sayısı
@@ -559,8 +603,6 @@ tr:
         users: Oturum açan yerel kullanıcılara
       domain_blocks_rationale:
         title: Gerekçeyi göster
-      enable_bootstrap_timeline_accounts:
-        title: Yeni kullanıcılar için varsayılan takipleri etkinleştir
       hero:
         desc_html: Önsayfada görüntülenir. En az 600x100px önerilir. Ayarlanmadığında, sunucu küçük resmi kullanılır
         title: Kahraman görseli
@@ -586,6 +628,9 @@ tr:
         min_invite_role:
           disabled: Hiç kimse
           title: tarafından yapılan davetlere izin ver
+        require_invite_text:
+          desc_html: Kayıtlar elle doğrulama gerektiriyorsa, "Neden katılmak istiyorsunuz?" metin girdisini isteğe bağlı yerine zorunlu yapın
+          title: Yeni kullanıcıların katılmak için bir gerekçe sunmasını gerektir
       registrations_mode:
         modes:
           approved: Kayıt için onay gerekli
@@ -611,9 +656,6 @@ tr:
         desc_html: Kendi gizlilik politikanızı, hizmet şartlarınızı ya da diğer hukuki metinlerinizi yazabilirsiniz. HTML etiketleri kullanabilirsiniz
         title: Özel hizmet şartları
       site_title: Site başlığı
-      spam_check_enabled:
-        desc_html: Mastodon, tekrar eden istenmeyen mesajlar gönderen hesapları otomatik olarak susturabilir ve şikayet edebilir. Yanlışlar olabilir.
-        title: Anti-spam otomasyonu
       thumbnail:
         desc_html: OpenGraph ve API ile ön izlemeler için kullanılır. 1200x630px tavsiye edilir
         title: Sunucu küçük resmi
@@ -644,13 +686,18 @@ tr:
       no_status_selected: Hiçbiri seçilmediğinden hiçbir durum değiştirilmedi
       title: Hesap durumları
       with_media: Medya ile
+    system_checks:
+      database_schema_check:
+        message_html: Beklemede olan veritabanı güncellemeleri mevcut. Uygulamanın beklenildiği gibi çalışması için lütfen onları çalıştırın
+      rules_check:
+        action: Sunucu kurallarını yönet
+        message_html: Herhangi bir sunucu kuralı belirlemediniz.
+      sidekiq_process_check:
+        message_html: "%{value} kuyruk(lar)ı için herhangi bir Sidekiq süreci çalışmıyor. Lütfen Sidekiq yapılandırmanızı gözden geçirin"
     tags:
       accounts_today: Bugünkü eşsiz kullanımlar
       accounts_week: Bu haftaki eşsiz kullanımlar
       breakdown: Bugünkü kullanımın kaynağa göre dağılımı
-      context: İçerik
-      directory: Dizinde
-      in_directory: Dizinde %{count}
       last_active: Son etkinlik
       most_popular: En popüler
       most_recent: En yeni
@@ -667,6 +714,7 @@ tr:
       add_new: Yeni ekle
       delete: Sil
       edit_preset: Uyarı ön-ayarını düzenle
+      empty: Henüz önceden ayarlanmış bir uyarı tanımlanmadı.
       title: Uyarı ön-ayarlarını yönet
   admin_mailer:
     new_pending_account:
@@ -914,6 +962,8 @@ tr:
     status: Doğrulama durumu
     view_proof: Kanıtı görüntüle
   imports:
+    errors:
+      over_rows_processing_limit: "%{count} satırdan fazlasını içeriyor"
     modes:
       merge: Birleştir
       merge_long: Mevcut kayıtları sakla ve yenileri ekle
@@ -1026,10 +1076,14 @@ tr:
       body: "%{name} senden bahsetti:"
       subject: "%{name} senden bahsetti"
       title: Yeni bahsetme
+    poll:
+      subject: Anket %{name} tarafından sonlandırıldı
     reblog:
       body: "%{name} durumunuzu boostladı:"
       subject: "%{name} durumunuzu boostladı"
       title: Yeni boost
+    status:
+      subject: "%{name} az önce gönderdi"
   notifications:
     email_events: E-posta bildirimi gönderilecek etkinlikler
     email_events_hint: 'Bildirim almak istediğiniz olayları seçin:'
@@ -1178,8 +1232,6 @@ tr:
     relationships: Takip edilenler ve takipçiler
     two_factor_authentication: İki adımlı doğrulama
     webauthn_authentication: Güvenlik anahtarları
-  spam_check:
-    spam_detected: Bu otomatik bir şikayettir. Spam tespit edildi.
   statuses:
     attached:
       audio:
@@ -1222,6 +1274,7 @@ tr:
     sign_in_to_participate: Sohbete katılmak için oturum açın
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Doğrudan
       private: Sadece takipçiler
       private_long: Sadece takipçilerime gönder
       public: Herkese açık
@@ -1390,11 +1443,8 @@ tr:
       tips: İpuçları
       title: Gemiye hoşgeldin, %{name}!
   users:
-    blocked_email_provider: Bu e-posta sağlayıcısına izin verilmiyor
     follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz"
     generic_access_help_html: Hesabınıza erişirken sorun mu yaşıyorsunuz? Yardım için %{email} ile iletişime geçebilirsiniz
-    invalid_email: E-posta adresi geçersiz
-    invalid_email_mx: E-posta adresi mevcut görünmüyor
     invalid_otp_token: Geçersiz iki adımlı doğrulama kodu
     invalid_sign_in_token: Geçersiz güvenlik kodu
     otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz
diff --git a/config/locales/tt.yml b/config/locales/tt.yml
index e35b5da21..d9f99a9b2 100644
--- a/config/locales/tt.yml
+++ b/config/locales/tt.yml
@@ -1,5 +1,146 @@
 ---
 tt:
+  about:
+    about_this: Хакында
+    api: API
+    contact_unavailable: Юк
+    privacy_policy: Хосусыйлык сәясәте
+    unavailable_content_description:
+      domain: Сервер
+    user_count_after:
+      other: кулланучы
+  accounts:
+    follow: Языл
+    following: Язылгансыз
+    media: Медиа
+    never_active: Беркайчан да
+    roles:
+      admin: Админ
+      bot: Бот
+      group: Törkem
+    unfollow: Язылынмау
+  admin:
+    account_moderation_notes:
+      delete: Бетерү
+    accounts:
+      avatar: Аватар
+      by_domain: Домен
+      change_email:
+        label: Emailны үзгәртү
+        submit: Emailны үзгәртү
+      confirm: Раслау
+      deleted: Бетерелде
+      domain: Домен
+      edit: Үзгәртү
+      email: Эл. почта
+      header: Башлам
+      ip: ІР
+      location:
+        all: Бөтенесе
+        local: Җирле
+        title: Урын
+      moderation:
+        all: Бөтенесе
+      perform_full_suspension: Искә алмау
+      reset: Ташлату
+      role: Рөхсәтләр
+      roles:
+        user: Кулланучы
+      search: Эзләү
+      sensitive: Sizmäle
+      username: Кулланучы исеме
+      web: Веб
+    custom_emojis:
+      by_domain: Домен
+      copy: Күчереп алу
+      delete: Бетерү
+      disable: Cүндерү
+      disabled: Cүндерелгән
+      enable: Кабызу
+      list: Исемлек
+      upload: Йөкләү
+    dashboard:
+      features: Үзенчәлекләр
+    domain_blocks:
+      domain: Домен
+      new:
+        severity:
+          noop: Бернинди дә
+          suspend: Искә алмау
+      show:
+        undo: Кире алу
+    email_domain_blocks:
+      delete: Бетерү
+      domain: Домен
+    instances:
+      by_domain: Домен
+      moderation:
+        all: Бөтенесе
+    invites:
+      filter:
+        all: Бөтенесе
+        expired: Гамәлдән чыкты
+        title: Sözgeç
+    ip_blocks:
+      delete: Бетерү
+      expires_in:
+        '1209600': 2 атна
+        '15778476': 6 months
+        '2629746': 1 ай
+        '31556952': 1 ел
+        '86400': 1 көн
+        '94670856': 3 ел
+    relays:
+      delete: Бетерү
+      disable: Cүндерү
+      disabled: Cүндерелгән
+      enable: Кабызу
+      status: Халәт
+    reports:
+      comment:
+        none: Бернинди дә
+      notes:
+        create: Язу кушу
+        delete: Бетерү
+      status: Халәт
+      updated_at: Яңартылды
+    statuses:
+      batch:
+        delete: Бетерү
+      deleted: Бетерелде
+      media:
+        title: Медиа
+    warning_presets:
+      delete: Бетерү
+  application_mailer:
+    salutation: "%{name},"
+  auth:
+    change_password: Парол
+    login: Керү
+    providers:
+      cas: САS
+      saml: SАML
+    register: Теркәлү
+    security: Хәвефсезлек
+  authorize_follow:
+    follow: Язылу
+  challenge:
+    confirm: Дәвам итү
+  date:
+    formats:
+      default: "%d %b %Y"
+      with_month_name: "%d %B %Y"
+  datetime:
+    distance_in_words:
+      about_x_hours: "%{count}сәг"
+      about_x_months: "%{count}ай"
+      half_a_minute: Хәзер генә
+      less_than_x_minutes: "%{count}м"
+      less_than_x_seconds: Хәзер генә
+      x_days: "%{count}к"
+      x_minutes: "%{count}м"
+      x_months: "%{count}ай"
+      x_seconds: "%{count}сек"
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
@@ -10,3 +151,107 @@ tt:
     '429': Too many requests
     '500': 
     '503': The page could not be served due to a temporary server failure.
+  exports:
+    archive_takeout:
+      date: Көне
+      size: Olılıq
+    bookmarks: Кыстыргычлар
+    csv: СSV
+  filters:
+    contexts:
+      thread: Әңгәмәләр
+    index:
+      delete: Бетерү
+      title: Сөзгечләр
+  footer:
+    more: Тагы…
+  generic:
+    all: Бөтенесе
+    copy: Күчереп алу
+    delete: Бетерү
+  imports:
+    types:
+      bookmarks: Кыстыргычлар
+    upload: Йөкләү
+  invites:
+    expired: Гамәлдән чыкты
+    expires_in:
+      '1800': 30 минут
+      '21600': 6 сәгать
+      '3600': 1 сәгать
+      '43200': 12 сәгать
+      '604800': 1 атна
+      '86400': 1 көн
+    expires_in_prompt: Беркайчан да
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+  otp_authentication:
+    enable: Кабызу
+  pagination:
+    next: Киләсе
+    prev: Алдыгы
+    truncate: "&hellip;"
+  preferences:
+    other: Башка
+  relationships:
+    following: Язылгансыз
+  sessions:
+    browser: Браузер
+    browsers:
+      alipay: Аlipay
+      blackberry: Blаckberry
+      chrome: Chrоme
+      edge: Microsоft Edge
+      electron: Electrоn
+      firefox: Firеfox
+      ie: Internet Explоrer
+      micro_messenger: MicroMеssenger
+      nokia: Nokia S40 Ovi Brоwser
+      opera: Opеra
+      otter: Ottеr
+      phantom_js: PhаntomJS
+      qq: QQ Brоwser
+      safari: Safаri
+      uc_browser: UCBrоwser
+      weibo: Weibо
+    description: "%{browser} - %{platform}"
+    ip: ІР
+    platforms:
+      adobe_air: Adobе Air
+      android: Andrоid
+      chrome_os: ChromеOS
+      firefox_os: Firеfox OS
+      ios: iОS
+      linux: Lіnux
+      mac: macOS
+      windows: Windоws
+      windows_mobile: Windows Mоbile
+      windows_phone: Windоws Phone
+  settings:
+    account: Хисап язмасы
+    appearance: Küreneş
+    development: Эшләнмә
+    edit_profile: Профильны үзгәртү
+    import: Импортлау
+    preferences: Caylaw
+    profile: Профиль
+  statuses:
+    attached:
+      video:
+        other: "%{count} видео"
+    title: '%{name}: "%{quote}"'
+  time:
+    formats:
+      default: "%d %b %Y, %H:%M"
+      month: "%b %Y"
+  two_factor_authentication:
+    add: Өстәү
+    edit: Үзгәртү
+  user_mailer:
+    warning:
+      title:
+        none: Игътибар
+  webauthn_credentials:
+    delete: Бетерү
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index dee947dc6..6bbd67621 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -21,11 +21,11 @@ uk:
     federation_hint_html: З обліковим записом на %{instance} ви зможете слідкувати за людьми на будь-якому сервері Mastodon та поза ним.
     get_apps: Спробуйте мобільний додаток
     hosted_on: Mastodon розміщено на %{domain}
-    instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену.
-
-'
+    instance_actor_flash: "Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. \n"
     learn_more: Дізнатися більше
     privacy_policy: Політика приватності
+    rules: Правила сервера
+    rules_html: 'Внизу наведено підсумок правил, яких ви повинні дотримуватися, якщо хочете мати обліковий запис на цьому сервері Mastodon:'
     see_whats_happening: Погляньте, що відбувається
     server_stats: 'Статистика серверу:'
     source_code: Вихідний код
@@ -66,6 +66,7 @@ uk:
       one: Підписник
       other: Підписників
     following: Підписаний(-а)
+    instance_actor_flash: Цей обліковий запис є віртуальним персонажем, який використовується для показу самого сервера, а не будь-якого окремого користувача. Він використовується з метою федералізації і не повинен бути зупинений.
     joined: Приєднався %{date}
     last_active: остання активність
     link_verified_on: Права власності на це посилання були перевірені %{date}
@@ -85,7 +86,6 @@ uk:
       other: Дмухів
     posts_tab_heading: Дмухи
     posts_with_replies: Дмухи та відповіді
-    reserved_username: Це ім'я користувача зарезервоване
     roles:
       admin: Адміністратор
       bot: Бот
@@ -106,6 +106,7 @@ uk:
       add_email_domain_block: Додати поштовий домен до чорного списку
       approve: Схвалити
       approve_all: Схвалити всіх
+      approved_msg: Заявку на реєстрацію %{username} затверджено
       are_you_sure: Ви впевнені?
       avatar: Аватар
       by_domain: Домен
@@ -119,8 +120,10 @@ uk:
       confirm: Зберегти
       confirmed: Збережено
       confirming: Зберігається
+      delete: Видалити дані
       deleted: Видалено
       demote: Усунути
+      destroyed_msg: Дані %{username} тепер в черзі на негайне видалення
       disable: Вимкнути
       disable_two_factor_authentication: Вимкнути двофакторну авторизацію
       disabled: Вимкнено
@@ -131,10 +134,12 @@ uk:
       email_status: Статус електронної пошти
       enable: Увімкнути
       enabled: Увімкнено
+      enabled_msg: Обліковий запис %{username} успішно розморожено
       followers: Підписники
       follows: Підписки
       header: Заголовок
       inbox_url: URL вхідних повідомлень
+      invite_request_text: Причини приєднатися
       invited_by: 'Запросив:'
       ip: IP
       joined: Приєднався
@@ -146,6 +151,8 @@ uk:
       login_status: Статус авторизації
       media_attachments: Мультимедійні вкладення
       memorialize: Зробити пам'ятником
+      memorialized: Перетворено на пам'ятник
+      memorialized_msg: "%{username} успішно перетворено на пам'ятний обліковий запис"
       moderation:
         active: Активний
         all: Усі
@@ -166,10 +173,14 @@ uk:
       public: Публічний
       push_subscription_expires: Підписка PuSH спливає
       redownload: Оновити аватар
+      redownloaded_msg: Профіль %{username} оновлено з джерела походження
       reject: Відхилити
       reject_all: Відхилити усе
+      rejected_msg: Заявку на реєстрацію %{username} відхилено
       remove_avatar: Видалити аватар
       remove_header: Видалити заголовок
+      removed_avatar_msg: Зображення користувача %{username} вилучено
+      removed_header_msg: Зображення обкладинки %{username} вилучено
       resend_confirmation:
         already_confirmed: Цей користувач уже підтверджений
         send: Надіслати електронний лист-підтвердження ще раз
@@ -186,6 +197,8 @@ uk:
       search: Пошук
       search_same_email_domain: Інші користувачі з тим самим поштовим доменом
       search_same_ip: Інші користувачі з тим самим IP
+      sensitive: Делікатне
+      sensitized: позначено делікатним
       shared_inbox_url: URL спільного вхідного кошика
       show:
         created_reports: Скарги, створені цим акаунтом
@@ -195,13 +208,19 @@ uk:
       statuses: Статуси
       subscribe: Підписатися
       suspended: Призупинені
+      suspension_irreversible: Дані цього облікового запису безповоротно видалено. Ви можете розблокувати обліковий запис, щоб могти ним користуватися, але будь-які його дані не відновляться.
+      suspension_reversible_hint_html: Обліковий запис заблоковано, а дані буде повністю вилучено %{date}. До цього часу обліковий запис можна відновити без будь-яких негативних наслідків. Якщо ви бажаєте вилучити всі дані облікового запису негайно, ви можете зробити це внизу.
       time_in_queue: Очікує в черзі %{time}
       title: Облікові записи
       unconfirmed_email: Непідтверджена адреса електронної пошти
+      undo_sensitized: Скасувати позначення делікатним
       undo_silenced: Зняти глушення
       undo_suspension: Зняти призупинення
+      unsilenced_msg: Успішно знято обмеження з облікового запису %{username}
       unsubscribe: Відписатися
+      unsuspended_msg: Обліковий запис %{username} успішно розблоковано
       username: Ім'я користувача
+      view_domain: Переглянути резюме для домену
       warn: Попередження
       web: Веб
       whitelisted: У білому списку
@@ -216,13 +235,17 @@ uk:
         create_domain_allow: Створити дозвіл на домен
         create_domain_block: Створити блокування домену
         create_email_domain_block: Створити блокування поштового домену
+        create_ip_block: Створити правило IP
+        create_unavailable_domain: Створити недоступний домен
         demote_user: Понизити користувача
         destroy_announcement: Видалити оголошення
         destroy_custom_emoji: Видалити користувацьке емодзі
         destroy_domain_allow: Видалити дозвіл на домен
         destroy_domain_block: Видалити блокування домену
         destroy_email_domain_block: Видалити блокування поштового домену
+        destroy_ip_block: Видалити правило IP
         destroy_status: Видалити пост
+        destroy_unavailable_domain: Видалити недоступний домен
         disable_2fa_user: Вимкнути 2FA
         disable_custom_emoji: Вимкнути користувацькі емодзі
         disable_user: Відключити користувача
@@ -234,50 +257,60 @@ uk:
         reopen_report: Перевідкрити скаргу
         reset_password_user: Скинути пароль
         resolve_report: Розв'язати скаргу
+        sensitive_account: Позначити делікатним медіа вашого облікового запису
         silence_account: Заглушити обліковий запис
         suspend_account: Призупинити обліковий запис
         unassigned_report: Видалити скаргу
+        unsensitive_account: Прибрати позначку "делікатне" з медіа вашого облікового запису
         unsilence_account: Розглушити обліковий запис
         unsuspend_account: Розморозити обліковий запис
         update_announcement: Оновити оголошення
         update_custom_emoji: Оновити користувацькі емодзі
+        update_domain_block: Оновити блокування домену
         update_status: Оновити статус
       actions:
-        assigned_to_self_report: "%{name} призначив(-ла) скаргу %{target} на себе"
-        change_email_user: "%{name} змінив(-ла) поштову адресу користувача %{target}"
-        confirm_user: "%{name} підтвердив(-ла) статус поштової адреси користувача %{target}"
-        create_account_warning: "%{name} надіслав попередження до %{target}"
-        create_announcement: "%{name} створив нове оголошення %{target}"
-        create_custom_emoji: "%{name} вивантажив(-ла) нове емодзі %{target}"
-        create_domain_allow: "%{name} додав(-ла) домен %{target} до білого списку"
-        create_domain_block: "%{name} заблокував(-ла) домен %{target}"
-        create_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до чорного списку"
-        demote_user: "%{name} понизив(-ла) %{target}"
-        destroy_announcement: "%{name} видалив оголошення %{target}"
-        destroy_custom_emoji: "%{name} знищив(-ла) емодзі %{target}"
-        destroy_domain_allow: "%{name} видалив(-ла) домен %{target} з білого списку"
-        destroy_domain_block: "%{name} розблокував(-ла) домен %{target}"
-        destroy_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до білого списку"
-        destroy_status: "%{name} видалив(-ла) статус користувача %{target}"
-        disable_2fa_user: "%{name} вимкнув(-ла) двофакторну авторизацію для користувача %{target}"
-        disable_custom_emoji: "%{name} вимкнув(-ла) емодзі %{target}"
-        disable_user: "%{name} заборонив(-ла) авторизацію користувачу %{target}"
-        enable_custom_emoji: "%{name} увімкнув(-ла) емодзі %{target}"
-        enable_user: "%{name} увімкнув(-ла) авторизацію користувачу %{target}"
-        memorialize_account: "%{name} перетворив(-ла) обліковий запис %{target} на сторінку пам'яті"
-        promote_user: "%{name} підвищив(-ла) користувача %{target}"
-        remove_avatar_user: "%{name} прибрав(-ла) аватар користувача %{target}"
-        reopen_report: "%{name} перевідкрив(-ла) скаргу %{target}"
-        reset_password_user: "%{name} скинув(-ла) пароль користувача %{target}"
-        resolve_report: "%{name} розв'язав(-ла) скаргу %{target}"
-        silence_account: "%{name} заглушив(-ла) обліковий запис %{target}"
-        suspend_account: "%{name} заморозив(-ла) обліковий запис %{target}"
-        unassigned_report: "%{name} зняв(-ла) призначення скарги %{target}"
-        unsilence_account: "%{name} розглушив(-ла) обліковий запис %{target}"
-        unsuspend_account: "%{name} розморозив(-ла) обліковий запис %{target}"
-        update_announcement: "%{name} оновив оголошення %{target}"
-        update_custom_emoji: "%{name} оновив(-ла) емодзі %{target}"
-        update_status: "%{name} змінив(-ла) статус користуача %{target}"
+        assigned_to_self_report_html: "%{name} створює скаргу %{target} на себе"
+        change_email_user_html: "%{name} змінює поштову адресу користувача %{target}"
+        confirm_user_html: "%{name} підтверджує стан поштової адреси користувача %{target}"
+        create_account_warning_html: "%{name} надсилає попередження до %{target}"
+        create_announcement_html: "%{name} створює нове оголошення %{target}"
+        create_custom_emoji_html: "%{name} завантажує нові емодзі %{target}"
+        create_domain_allow_html: "%{name} дозволяє федерацію з доменом %{target}"
+        create_domain_block_html: "%{name} блокує домен %{target}"
+        create_email_domain_block_html: "%{name} блокує домен електронної пошти %{target}"
+        create_ip_block_html: "%{name} створює правило для IP %{target}"
+        create_unavailable_domain_html: "%{name} зупиняє доставляння на домен %{target}"
+        demote_user_html: "%{name} понижує користувача %{target}"
+        destroy_announcement_html: "%{name} видаляє оголошення %{target}"
+        destroy_custom_emoji_html: "%{name} знищує емодзі %{target}"
+        destroy_domain_allow_html: "%{name} скасовує федерацію з доменом %{target}"
+        destroy_domain_block_html: "%{name} розблокує домен %{target}"
+        destroy_email_domain_block_html: "%{name} розблоковує домен електронної пошти %{target}"
+        destroy_ip_block_html: "%{name} видаляє правило для IP %{target}"
+        destroy_status_html: "%{name} видаляє статус %{target}"
+        destroy_unavailable_domain_html: "%{name} відновлює доставляння на домен %{target}"
+        disable_2fa_user_html: "%{name} вимикає двоетапну перевірку для користувача %{target}"
+        disable_custom_emoji_html: "%{name} вимикає емодзі %{target}"
+        disable_user_html: "%{name} вимикає вхід для користувача %{target}"
+        enable_custom_emoji_html: "%{name} вмикає емодзі %{target}"
+        enable_user_html: "%{name} вмикає вхід для користувача %{target}"
+        memorialize_account_html: "%{name} перетворює обліковий запис %{target} на сторінку пам'яті"
+        promote_user_html: "%{name} підвищує користувача %{target}"
+        remove_avatar_user_html: "%{name} прибирає аватар %{target}"
+        reopen_report_html: "%{name} знову відкриває звіт %{target}"
+        reset_password_user_html: "%{name} скидає пароль користувача %{target}"
+        resolve_report_html: "%{name} розв'язує скаргу %{target}"
+        sensitive_account_html: "%{name} позначає медіа від %{target} делікатним"
+        silence_account_html: "%{name} приглушує обліковий запис %{target}"
+        suspend_account_html: "%{name} заморожує обліковий запис %{target}"
+        unassigned_report_html: "%{name} прибирає призначення скарги %{target}"
+        unsensitive_account_html: '%{name} прибирає позначку "делікатне" з медіа від %{target}'
+        unsilence_account_html: "%{name} розглушує обліковий запис %{target}"
+        unsuspend_account_html: "%{name} розморожує обліковий запис %{target}"
+        update_announcement_html: "%{name} оновлює оголошення %{target}"
+        update_custom_emoji_html: "%{name} оновлює емодзі %{target}"
+        update_domain_block_html: "%{name} оновлює блокування домену для %{target}"
+        update_status_html: "%{name} змінює статус користувача %{target}"
       deleted_status: "(видалений статус)"
       empty: Не знайдено жодного журналу.
       filter_by_action: Фільтрувати за дією
@@ -292,10 +325,12 @@ uk:
       new:
         create: Створити оголошення
         title: Нове оголошення
+      publish: Опублікувати
       published_msg: Оголошення успішно опубліковано!
       scheduled_for: Заплановано на %{time}
       scheduled_msg: Оголошення додано в чергу публікації!
       title: Оголошення
+      unpublish: Скасувати публікацію
       unpublished_msg: Оголошення успішно приховано!
       updated_msg: Оголошення успішно оновлено!
     custom_emojis:
@@ -340,7 +375,6 @@ uk:
       feature_profile_directory: Каталог профілів
       feature_registrations: Реєстрації
       feature_relay: Ретранслятор дмухів між серверами
-      feature_spam_check: Анти-спам
       feature_timeline_preview: Передпоказ стрічки
       features: Можливості
       hidden_service: Федерація з прихованими сервісами
@@ -380,6 +414,8 @@ uk:
           silence: Глушення
           suspend: Блокування
         title: Нове блокування домену
+      obfuscate: Сховати назву домена
+      obfuscate_hint: Частково приховувати доменне ім'я в списку, якщо ввімкнено показ списку обмежень домену
       private_comment: Приватний коментар
       private_comment_hint: Прокоментуйте обмеження для цього домену, а модератори прочитають.
       public_comment: Публічний коментар
@@ -418,9 +454,37 @@ uk:
         create: Додати домен
         title: Нове блокування поштового домену
       title: Чорний список поштових доменів
+    follow_recommendations:
+      description_html: "<strong>Слідувати рекомендаціям та допомогти новим користувачам швидко знайти цікавий вміст</strong>. Коли користувачі не взаємодіяли з іншими людьми достатньо, щоб сформувати персоналізовані рекомендації, радимо замість цього вказувати ці облікові записи. Вони щоденно переобчислюються з масиву облікових записів з найбільшою кількістю недавніх взаємодій і найбільшою кількістю місцевих підписників розраховується для цієї мови."
+      language: Для мови
+      status: Стан
+      suppress: Приховати поради щодо підписок
+      suppressed: Приховати
+      title: Поради щодо підписок
+      unsuppress: Відновити поради щодо підписок
     instances:
+      back_to_all: Усі
+      back_to_limited: Обмежені
+      back_to_warning: Попередження
       by_domain: Домен
+      delivery:
+        all: Усі
+        clear: Очистити помилки доставляння
+        restart: Перезапустити доставляння
+        stop: Припинити доставляння
+        title: Доставляння
+        unavailable: Недоступно
+        unavailable_message: Доставлення недоступне
+        warning: Попередження
+        warning_message:
+          few: Збій доставляння %{count} дні
+          many: Збій доставляння %{count} днів
+          one: Збій доставляння %{count} день
+          other: Збій доставляння %{count} днів
       delivery_available: Доставлення доступне
+      delivery_error_days: Днів помилок доставляння
+      delivery_error_hint: Якщо доставляння неможливе впродовж %{count} днів, воно автоматично позначиться недоставленим.
+      empty: Доменів не знайдено.
       known_accounts:
         few: "%{count} відомих облікових записів"
         many: "%{count} відомих облікових записів"
@@ -446,6 +510,21 @@ uk:
         expired: Просрочено
         title: Фільтр
       title: Запрошення
+    ip_blocks:
+      add_new: Створити правило
+      created_msg: Нове правило IP успішно додано
+      delete: Видалити
+      expires_in:
+        '1209600': 2 тижні
+        '15778476': 6 місяців
+        '2629746': 1 місяць
+        '31556952': 1 рік
+        '86400': 1 день
+        '94670856': 3 роки
+      new:
+        title: Створити нове правило IP
+      no_ip_block_selected: Жодних правил IP не було змінено, оскільки жодного не було вибрано
+      title: Правила IP
     pending_accounts:
       title: Облікові записи у черзі (%{count})
     relationships:
@@ -489,6 +568,8 @@ uk:
       comment:
         none: Немає
       created_at: Створено
+      forwarded: Переслано
+      forwarded_to: Переслано до %{domain}
       mark_as_resolved: Відмітити як вирішену
       mark_as_unresolved: Відмітити як невирішену
       notes:
@@ -508,6 +589,13 @@ uk:
       unassign: Зняти призначення
       unresolved: Невирішені
       updated_at: Оновлені
+    rules:
+      add_new: Додати правило
+      delete: Видалити
+      description_html: Хоча більшість заявляє про прочитання та погодження з умовами обслуговування, як правило, люди не читають їх до появи проблеми. <strong>Спростіть перегляд правил вашого сервера, зробивши їх у вигляді маркованого списку.</strong> Спробуйте створити короткі та просі правила, але не розділяйте їх на багато окремих частин.
+      edit: Змінити правило
+      empty: Жодних правил сервера ще не визначено.
+      title: Правила сервера
     settings:
       activity_api_enabled:
         desc_html: Кількість локальних постів, активних та нових користувачів у тижневих розрізах
@@ -531,8 +619,6 @@ uk:
         users: Для авторизованих локальних користувачів
       domain_blocks_rationale:
         title: Обґрунтування
-      enable_bootstrap_timeline_accounts:
-        title: Увімкнути підписки за замовчуванням для нових користувачів
       hero:
         desc_html: Відображається на головній сторінці. Рекомендовано як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції
         title: Банер інстанції
@@ -558,6 +644,9 @@ uk:
         min_invite_role:
           disabled: Ніхто
           title: Дозволити запрошення від
+        require_invite_text:
+          desc_html: Якщо реєстрація вимагає власноручного затвердження, зробіть текстове поле «Чому ви хочете приєднатися?» обов'язковим, а не додатковим
+          title: Вимагати повідомлення причини приєднання від нових користувачів
       registrations_mode:
         modes:
           approved: Для входу потрібне схвалення
@@ -585,9 +674,6 @@ uk:
           Можете використовувати HTML теги
         title: Особливі умови використання
       site_title: Назва сайту
-      spam_check_enabled:
-        desc_html: Mastodon може автоматично глушити та автоматично звітувати про облікові записи, які надсилають повторні небажані повідомлення. Можливі хибно-позитивні спрацьовування.
-        title: Автоматизація антиспаму
       thumbnail:
         desc_html: Використовується для передпоказів через OpenGraph та API. Бажано розміром 1200х640 пікселів
         title: Мініатюра інстанції
@@ -618,13 +704,18 @@ uk:
       no_status_selected: Жодного статуса не було змінено, оскільки жодного не було вибрано
       title: Статуси облікових записів
       with_media: З медіа
+    system_checks:
+      database_schema_check:
+        message_html: Існують відкладені перенесення бази даних. Запустіть їх, щоб забезпечити очікувану роботу програми
+      rules_check:
+        action: Керування правилами сервера
+        message_html: Ви не визначили будь-які правила сервера.
+      sidekiq_process_check:
+        message_html: Не працює процес Sidekiq для %{value} черги. Перегляньте конфігурації вашого Sidekiq
     tags:
       accounts_today: Унікальних використань за сьогодні
       accounts_week: Унікальних використань за тиждень
       breakdown: Аналіз використання за сьогодні за джерелом
-      context: Контекст
-      directory: У каталозі
-      in_directory: "%{count} у каталозі"
       last_active: За активністю
       most_popular: За популярністю
       most_recent: За часом створення
@@ -641,6 +732,7 @@ uk:
       add_new: Додати новий
       delete: Видалити
       edit_preset: Редагувати шаблон попередження
+      empty: Ви ще не визначили жодних попереджень.
       title: Управління шаблонами попереджень
   admin_mailer:
     new_pending_account:
@@ -728,6 +820,7 @@ uk:
       functional: Ваш обліковий запис повністю робочій.
       pending: Ваша заява очікує на розгляд нашим персоналом. Це може зайняти деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена.
       redirecting_to: Ваш обліковий запис наразі неактивний, тому що він перенаправлений до %{acct}.
+    too_fast: Форму подано занадто швидко, спробуйте ще раз.
     trouble_logging_in: Проблема під час входу?
     use_security_key: Використовувати ключ безпеки
   authorize_follow:
@@ -819,6 +912,7 @@ uk:
       request: Зробити запит на архів
       size: Розмір
     blocks: Список блокувань
+    bookmarks: Закладки
     csv: CSV
     domain_blocks: Блокування доменів
     lists: Списки
@@ -888,6 +982,8 @@ uk:
     status: Стан перевірки
     view_proof: Переглянути доказ
   imports:
+    errors:
+      over_rows_processing_limit: містить більше ніж %{count} рядків
     modes:
       merge: Злиття
       merge_long: Зберегти існуючі записи та додати нові
@@ -897,6 +993,7 @@ uk:
     success: Ваші дані були успішно загружені та будуть оброблені в найближчий момент
     types:
       blocking: Список блокувань
+      bookmarks: Закладки
       domain_blocking: Список заблокованих сайтів
       following: Підписки
       muting: Список глушення
@@ -1005,10 +1102,14 @@ uk:
       body: 'Вас згадав(-ла) %{name} в:'
       subject: Вас згадав(-ла) %{name}
       title: Нова згадка
+    poll:
+      subject: Опитування від %{name} завершено
     reblog:
       body: 'Ваш статус було передмухнуто %{name}:'
       subject: "%{name} передмухнув(-ла) ваш статус"
       title: Нове передмухування
+    status:
+      subject: "%{name} щойно опубліковано"
   notifications:
     email_events: Події, про які сповіщати електронною поштою
     email_events_hint: 'Оберіть події, про які ви хочете отримувати сповіщення:'
@@ -1059,6 +1160,7 @@ uk:
   relationships:
     activity: Діяльність облікового запису
     dormant: Неактивні
+    follow_selected_followers: Стежити за вибраними підписниками
     followers: Підписники
     following: Підписник(-ця)
     invited: Запрошені
@@ -1156,8 +1258,6 @@ uk:
     relationships: Підписки та підписники
     two_factor_authentication: Двофакторна авторизація
     webauthn_authentication: Ключі безпеки
-  spam_check:
-    spam_detected: Це автоматична скарга. Було виявлено спам.
   statuses:
     attached:
       audio:
@@ -1206,10 +1306,13 @@ uk:
         other: "%{count} голоси"
       vote: Проголосувати
     show_more: Розгорнути
+    show_newer: Показати новіші
+    show_older: Показати давніші
     show_thread: Відкрити обговорення
     sign_in_to_participate: Увійдіть, щоб брати участь у бесіді
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Особисто
       private: Для підписників
       private_long: Показувати тільки підписникам
       public: Для всіх
@@ -1262,6 +1365,7 @@ uk:
     warning:
       explanation:
         disable: Поки ваш обліковий запис заморожений, його дані залишаються незмінними. Проте ви не зможете виконувати будь-які дії над обліковим записом, доки його не буде розблоковано.
+        sensitive: Ваші завантажені медіа-файли та пов'язані медіа вважатимуться делікатними.
         silence: Поки ваш обліковий запис обмежено, ваші дмухи на цьому сервері бачитимуть лише ті люди, які вже слідкують за вами, а вас може бути виключено з різних публічних списків. Тим не менш, інші можуть слідкувати за вами вручну.
         suspend: Ваш обліковий запис було призупинено, а всі ваші дмухи і вивантажені медіафайли - безповоротно видалено з цього сервера та серверів, де ви мали послідовників.
       get_in_touch: Ви можете відповісти на цей електронний лист, щоб зконтактувати з працівниками %{instance}.
@@ -1270,11 +1374,13 @@ uk:
       subject:
         disable: Ваш обліковий запис %{acct} було заморожено
         none: Попередження для %{acct}
+        sensitive: Ваш обліковий запис %{acct} надсилав медіа позначені делікатними
         silence: Ваш обліковий запис %{acct} було обмежено
         suspend: Ваш обліковий запис %{acct} було призупинено
       title:
         disable: Обліковий запис заморожено
         none: Попередження
+        sensitive: Ваші медіа позначено делікатними
         silence: Ообліковий запис обмежено
         suspend: Обліковий запис призупинено
     welcome:
@@ -1295,11 +1401,8 @@ uk:
       tips: Поради
       title: Ласкаво просимо, %{name}!
   users:
-    blocked_email_provider: Цей поштовий провайдер не дозволений
     follow_limit_reached: Не можна слідкувати більш ніж за %{limit} людей
     generic_access_help_html: Не вдається отримати доступ до облікового запису? Ви можете зв'язатися з %{email} для допомоги
-    invalid_email: Введена адреса e-mail неправильна
-    invalid_email_mx: Вказана електронна адреса не існує
     invalid_otp_token: Введено неправильний код
     invalid_sign_in_token: Хибний код безпеки
     otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email}
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index e11c9f308..6a1d24c5c 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -10,24 +10,24 @@ vi:
     api: API
     apps: Ứng dụng di động
     apps_platforms: Lướt Mastodon trên iOS, Android và các nền tảng khác
-    browse_directory: Tìm những người cùng chung sở thích
+    browse_directory: Bạn bè từ khắp mọi nơi trên thế giới
     browse_local_posts: Xem những gì đang xảy ra
-    browse_public_posts: Xem thử những tút công khai trên mạng Mastodon
+    browse_public_posts: Đọc thử những tút công khai trên Mastodon
     contact: Liên lạc
     contact_missing: Chưa thiết lập
     contact_unavailable: N/A
     discover_users: Thành viên
     documentation: Tài liệu
-    federation_hint_html: Đăng ký tài khoản %{instance} là bạn có thể giao tiếp với mọi người trên bất kỳ máy chủ Mastodon nào và còn hơn thế nữa.
+    federation_hint_html: Đăng ký tài khoản %{instance} là bạn có thể giao tiếp với bất cứ ai trên bất kỳ máy chủ Mastodon nào và còn hơn thế nữa.
     get_apps: Ứng dụng di động
     hosted_on: "%{domain} vận hành nhờ Mastodon"
-    instance_actor_flash: 'Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ.
-
-'
+    instance_actor_flash: "Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. \n"
     learn_more: Tìm hiểu
     privacy_policy: Chính sách bảo mật
+    rules: Quy tắc máy chủ
+    rules_html: 'Bên dưới là mô tả những quy tắc trên máy chủ Mastodon này, bạn phải đọc kỹ trước khi đăng ký:'
     see_whats_happening: Dòng thời gian
-    server_stats: 'Cộng đồng:'
+    server_stats: 'Thống kê:'
     source_code: Mã nguồn
     status_count_after:
       other: tút
@@ -50,8 +50,8 @@ vi:
     user_count_before: Nhà của
     what_is_mastodon: Mastodon là gì?
   accounts:
-    choices_html: "%{name} vinh danh:"
-    endorsements_hint: Bạn có thể vinh danh những người bạn theo dõi và họ sẽ hiển thị ở giao diện web.
+    choices_html: "%{name} tôn vinh:"
+    endorsements_hint: Bạn có thể tôn vinh những người bạn theo dõi và họ sẽ hiển thị ở giao diện web.
     featured_tags_hint: Bạn có thể cho biết những hashtag thường dùng ở đây.
     follow: Theo dõi
     followers:
@@ -61,7 +61,7 @@ vi:
     joined: Đã tham gia %{date}
     last_active: online
     link_verified_on: Liên kết này đã được xác thực quyền sở hữu vào %{date}
-    media: Bộ sưu tập
+    media: Media
     moved_html: "%{name} đã dời sang %{new_profile_link}:"
     network_hidden: Dữ liệu đã bị ẩn
     never_active: Chưa có
@@ -69,12 +69,11 @@ vi:
     people_followed_by: Những người %{name} theo dõi
     people_who_follow: Những người theo dõi %{name}
     pin_errors:
-      following: Để vinh danh người nào đó, bạn phải theo dõi họ trước
+      following: Để tôn vinh người nào đó, bạn phải theo dõi họ trước
     posts:
       other: Tút
     posts_tab_heading: Tút
-    posts_with_replies: Tương tác
-    reserved_username: Tên này đã sử dụng rồi
+    posts_with_replies: Trả lời
     roles:
       admin: Quản trị viên
       bot: Tài khoản Bot
@@ -90,7 +89,7 @@ vi:
       create: Gửi tin nhắn kiểm duyệt
       created_msg: Gửi tin nhắn kiểm duyệt thành công!
       delete: Xóa bỏ
-      destroyed_msg: Đã ghi chú kiểm duyệt xong!
+      destroyed_msg: Đã xóa ghi chú kiểm duyệt!
     accounts:
       add_email_domain_block: Chặn tên miền email
       approve: Phê duyệt
@@ -181,7 +180,7 @@ vi:
       roles:
         admin: Quản trị viên
         moderator: Kiểm duyệt viên
-        staff: Đội ngũ quản lý
+        staff: Nhân viên
         user: Người dùng
       search: Tìm kiếm
       search_same_email_domain: Tra cứu email
@@ -210,7 +209,7 @@ vi:
       unsuspended_msg: Đã kích hoạt lại %{username} thành công
       username: Tài khoản
       view_domain: Xem mô tả tài khoản này
-      warn: Cấm upload
+      warn: Cảnh cáo
       web: Web
       whitelisted: Danh sách trắng
     action_logs:
@@ -225,6 +224,7 @@ vi:
         create_domain_block: Chặn máy chủ
         create_email_domain_block: Chặn tên miền email
         create_ip_block: Chặn IP
+        create_unavailable_domain: Tạo máy chủ không khả dụng
         demote_user: Xóa chức vụ
         destroy_announcement: Xóa thông báo
         destroy_custom_emoji: Xóa Emoji
@@ -233,6 +233,7 @@ vi:
         destroy_email_domain_block: Bỏ chặn email
         destroy_ip_block: Bỏ chặn IP
         destroy_status: Xóa tút
+        destroy_unavailable_domain: Xóa máy chủ không khả dụng
         disable_2fa_user: Xóa xác thực hai bước
         disable_custom_emoji: Vô hiệu hóa Emoji
         disable_user: Tạm khóa người dùng
@@ -256,46 +257,48 @@ vi:
         update_domain_block: Cập nhật máy chủ chặn
         update_status: Cập nhật tút
       actions:
-        assigned_to_self_report: "%{name} tự xử lý báo cáo %{target}"
-        change_email_user: "%{name} đã thay đổi địa chỉ email cho %{target}"
-        confirm_user: "%{name} xác nhận địa chỉ email của người dùng %{target}"
-        create_account_warning: "%{name} đã gửi cảnh cáo %{target}"
-        create_announcement: "%{name} tạo thông báo mới %{target}"
-        create_custom_emoji: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
-        create_domain_allow: "%{name} kích hoạt liên hợp với %{target}"
-        create_domain_block: "%{name} chặn máy chủ %{target}"
-        create_email_domain_block: "%{name} chặn tên miền email %{target}"
-        create_ip_block: "%{name} đã chặn IP %{target}"
-        demote_user: "%{name} đã xóa chức vụ %{target}"
-        destroy_announcement: "%{name} xóa thông báo %{target}"
-        destroy_custom_emoji: "%{name} đã xóa emoji %{target}"
-        destroy_domain_allow: "%{name} đã xóa tên miền %{target} khỏi danh sách trắng"
-        destroy_domain_block: "%{name} bỏ chặn máy chủ %{target}"
-        destroy_email_domain_block: "%{name} bỏ chặn tên miền email %{target}"
-        destroy_ip_block: "%{name} bỏ chặn IP %{target}"
-        destroy_status: "%{name} đã xóa tút của %{target}"
-        disable_2fa_user: "%{name} đã vô hiệu hóa xác thực hai bước của %{target}"
-        disable_custom_emoji: "%{name} đã ẩn emoji %{target}"
-        disable_user: "%{name} vô hiệu hóa đăng nhập %{target}"
-        enable_custom_emoji: "%{name} cho phép Emoji %{target}"
-        enable_user: "%{name} mở khóa cho người dùng %{target}"
-        memorialize_account: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
-        promote_user: "%{name} đã chỉ định chức vụ cho %{target}"
-        remove_avatar_user: "%{name} đã xóa ảnh đại diện của %{target}"
-        reopen_report: "%{name} mở lại báo cáo %{target}"
-        reset_password_user: "%{name} đặt lại mật khẩu của người dùng %{target}"
-        resolve_report: "%{name} đã giải quyết báo cáo %{target}"
-        sensitive_account: "%{name} đánh dấu nội dung của %{target} là nhạy cảm"
-        silence_account: "%{name} đã ẩn %{target}"
-        suspend_account: "%{name} đã vô hiệu hóa %{target}"
-        unassigned_report: "%{name} báo cáo chưa được chỉ định %{target}"
-        unsensitive_account: "%{name} đánh dấu nội dung của %{target} là bình thường"
-        unsilence_account: "%{name} đã bỏ ẩn %{target}"
-        unsuspend_account: "%{name} đã ngừng vô hiệu hóa %{target}"
-        update_announcement: "%{name} cập nhật thông báo cho %{target}"
-        update_custom_emoji: "%{name} đã cập nhật biểu tượng cảm xúc %{target}"
-        update_domain_block: "%{name} cập nhật chặn máy chủ %{target}"
-        update_status: "%{name} cập nhật tút của %{target}"
+        assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}"
+        change_email_user_html: "%{name} đã thay đổi địa chỉ email cho %{target}"
+        confirm_user_html: "%{name} xác nhận địa chỉ email của người dùng %{target}"
+        create_account_warning_html: "%{name} đã gửi cảnh cáo %{target}"
+        create_announcement_html: "%{name} tạo thông báo mới %{target}"
+        create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
+        create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}"
+        create_domain_block_html: "%{name} chặn máy chủ %{target}"
+        create_email_domain_block_html: "%{name} chặn tên miền email %{target}"
+        create_ip_block_html: "%{name} đã chặn IP %{target}"
+        create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}"
+        demote_user_html: "%{name} đã xóa chức vụ %{target}"
+        destroy_announcement_html: "%{name} xóa thông báo %{target}"
+        destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}"
+        destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}"
+        destroy_domain_block_html: "%{name} bỏ chặn tên miền email %{target}"
+        destroy_email_domain_block_html: "%{name} bỏ chặn tên miền email %{target}"
+        destroy_ip_block_html: "%{name} bỏ chặn IP %{target}"
+        destroy_status_html: "%{name} đã xóa tút của %{target}"
+        destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}"
+        disable_2fa_user_html: "%{name} đã vô hiệu hóa xác thực hai bước của %{target}"
+        disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}"
+        disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}"
+        enable_custom_emoji_html: "%{name} cho phép Emoji %{target}"
+        enable_user_html: "%{name} mở khóa cho người dùng %{target}"
+        memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
+        promote_user_html: "%{name} đã chỉ định chức vụ cho %{target}"
+        remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}"
+        reopen_report_html: "%{name} mở lại báo cáo %{target}"
+        reset_password_user_html: "%{name} đặt lại mật khẩu của người dùng %{target}"
+        resolve_report_html: "%{name} đã xử lý báo cáo %{target}"
+        sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm"
+        silence_account_html: "%{name} đã ẩn %{target}"
+        suspend_account_html: "%{name} đã vô hiệu hóa %{target}"
+        unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí"
+        unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường"
+        unsilence_account_html: "%{name} đã bỏ ẩn %{target}"
+        unsuspend_account_html: "%{name} đã ngừng vô hiệu hóa %{target}"
+        update_announcement_html: "%{name} cập nhật thông báo %{target}"
+        update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}"
+        update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}"
+        update_status_html: "%{name} cập nhật tút của %{target}"
       deleted_status: "(tút đã xóa)"
       empty: Không tìm thấy bản ghi.
       filter_by_action: Lọc theo hành động
@@ -310,10 +313,12 @@ vi:
       new:
         create: Tạo thông báo
         title: Tạo thông báo mới
+      publish: Đăng
       published_msg: Truyền đi thông báo thành công!
       scheduled_for: Đã lên lịch %{time}
       scheduled_msg: Thông báo đã lên lịch!
       title: Thông báo
+      unpublish: Hủy đăng
       unpublished_msg: Xóa bỏ thông báo thành xong!
       updated_msg: Cập nhật thông báo thành công!
     custom_emojis:
@@ -358,7 +363,6 @@ vi:
       feature_profile_directory: Danh sách thành viên
       feature_registrations: Đăng ký
       feature_relay: Mạng liên hợp
-      feature_spam_check: Chống thư rác
       feature_timeline_preview: Xem trước bảng tin
       features: Tính năng
       hidden_service: Liên kết với các dịch vụ ẩn
@@ -393,7 +397,7 @@ vi:
         create: Tạo chặn
         hint: Chặn máy chủ sẽ không ngăn việc hiển thị tút của máy chủ đó trong cơ sở dữ liệu, nhưng sẽ khiến tự động áp dụng các phương pháp kiểm duyệt cụ thể trên các tài khoản đó.
         severity:
-          desc_html: "<strong>Ẩn</strong> sẽ làm cho bài đăng của tài khoản trở nên vô hình đối với bất kỳ ai không theo dõi họ. <strong>Vô hiệu hóa</strong> sẽ xóa tất cả nội dung, phương tiện và dữ liệu khác của tài khoản. Dùng <strong>Cấm upload</strong> nếu bạn chỉ muốn cấm tải lên ảnh và video."
+          desc_html: "<strong>Ẩn</strong> sẽ làm cho bài đăng của tài khoản trở nên vô hình đối với bất kỳ ai không theo dõi họ. <strong>Vô hiệu hóa</strong> sẽ xóa tất cả nội dung, phương tiện và dữ liệu khác của tài khoản. Dùng <strong>Cảnh cáo</strong> nếu bạn chỉ muốn cấm tải lên ảnh và video."
           noop: Không hoạt động
           silence: Ẩn
           suspend: Vô hiệu hóa
@@ -435,9 +439,33 @@ vi:
         create: Thêm địa chỉ
         title: Chặn tên miền email mới
       title: Tên miền email đã chặn
+    follow_recommendations:
+      description_html: "<strong>Gợi ý theo dõi là cách giúp những người dùng mới nhanh chóng tìm thấy những nội dung thú vị</strong>. Khi một người dùng chưa tương tác đủ với những người khác để hình thành các đề xuất theo dõi được cá nhân hóa, thì những tài khoản này sẽ được đề xuất. Nó bao gồm các tài khoản có số lượt tương tác gần đây cao nhất và số lượng người theo dõi cao nhất cho một ngôn ngữ nhất định trong máy chủ."
+      language: Theo ngôn ngữ
+      status: Trạng thái
+      suppress: Tắt gợi ý theo dõi
+      suppressed: Đã tắt
+      title: Gợi ý theo dõi
+      unsuppress: Mở lại gợi ý theo dõi
     instances:
+      back_to_all: Toàn bộ
+      back_to_limited: Hạn chế
+      back_to_warning: Cảnh báo
       by_domain: Máy chủ
+      delivery:
+        all: Toàn bộ
+        clear: Xóa phân phối lỗi
+        restart: Khởi động lại phân phối
+        stop: Ngưng phân phối
+        title: Phân phối
+        unavailable: Không khả dụng
+        unavailable_message: Không thể phân phối
+        warning: Cảnh báo
+        warning_message:
+          other: Phân phối thất bại %{count} ngày
       delivery_available: Cho phép liên kết
+      delivery_error_days: Ngày lỗi phân phối
+      delivery_error_hint: Nếu không thể phân phối sau %{count} ngày, nó sẽ tự dộng đánh dấu là không thể phân phối.
       empty: Không có máy chủ nào.
       known_accounts:
         other: "%{count} tài khoản đã biết"
@@ -452,7 +480,7 @@ vi:
       total_followed_by_them: Được họ theo dõi
       total_followed_by_us: Được quản trị viên theo dõi
       total_reported: Toàn bộ báo cáo
-      total_storage: Ảnh và video
+      total_storage: Media
     invites:
       deactivate_all: Vô hiệu hóa tất cả
       filter:
@@ -497,8 +525,8 @@ vi:
       status: Trạng thái hiện tại
       title: Mạng liên hợp
     report_notes:
-      created_msg: Ghi chú kiểm duyệt đã tạo xong!
-      destroyed_msg: Đã xóa báo cáo kiểm duyệt!
+      created_msg: Đã thêm ghi chú kiểm duyệt!
+      destroyed_msg: Đã xóa ghi chú kiểm duyệt!
     reports:
       account:
         notes:
@@ -515,11 +543,11 @@ vi:
       created_at: Báo cáo lúc
       forwarded: Chuyển tiếp
       forwarded_to: Chuyển tiếp tới %{domain}
-      mark_as_resolved: Đánh dấu là đã giải quyết
-      mark_as_unresolved: Đánh dấu là chưa giải quyết
+      mark_as_resolved: Đã xử lý xong!
+      mark_as_unresolved: Mở lại
       notes:
-        create: Bổ sung ghi chú
-        create_and_resolve: Xử lý kiểm duyệt
+        create: Ghi chú
+        create_and_resolve: Xử lý
         create_and_unresolve: Mở lại kèm ghi chú mới
         delete: Xóa bỏ
         placeholder: Mô tả vi phạm của người này, mức độ xử lý và những cập nhật liên quan khác...
@@ -528,18 +556,25 @@ vi:
       reported_account: Tài khoản bị báo cáo
       reported_by: Báo cáo bởi
       resolved: Đã xử lý xong
-      resolved_msg: Đã giải quyết báo cáo xong!
+      resolved_msg: Đã xử lý báo cáo xong!
       status: Trạng thái
       title: Báo cáo
       unassign: Bỏ qua
       unresolved: Chờ xử lý
       updated_at: Cập nhật lúc
+    rules:
+      add_new: Thêm quy tắc
+      delete: Xóa bỏ
+      description_html: Mặc dù được yêu cầu chấp nhận điều khoản dịch vụ khi đăng ký, nhưng người dùng thường không đọc cho đến khi vấn đề gì đó xảy ra. <strong>Hãy làm điều này rõ ràng hơn bằng cách liệt kê quy tắc máy chủ theo gạch đầu dòng.</strong> Cố gắng viết ngắn và đơn giản, nhưng đừng tách ra quá nhiều mục.
+      edit: Sửa quy tắc
+      empty: Chưa có quy tắc máy chủ.
+      title: Quy tắc máy chủ
     settings:
       activity_api_enabled:
         desc_html: Thu thập số lượng tút được đăng, người dùng hoạt động và người dùng đăng ký mới hàng tuần
-        title: Công khai số liệu thống kê về hoạt động người dùng
+        title: Công khai số liệu thống kê về hoạt động người dùng trong API
       bootstrap_timeline_accounts:
-        desc_html: Tách tên người dùng bằng dấu phẩy. Chỉ có hiệu lực với các tài khoản công khai thuộc máy chủ. Mặc định khi trống là tất cả quản trị viên.
+        desc_html: Tách tên người dùng bằng dấu phẩy. Những người dùng này sẽ xuất hiện trong mục gợi ý theo dõi
         title: Gợi ý theo dõi cho người dùng mới
       contact_information:
         email: Email liên hệ
@@ -557,9 +592,6 @@ vi:
         users: Để đăng nhập người dùng cục bộ
       domain_blocks_rationale:
         title: Hiển thị lý do
-      enable_bootstrap_timeline_accounts:
-        desc_html: Thiết lập người mới đăng ký sẽ tự động theo dõi những tài khoản cho trước nhằm tránh việc bảng tin trống
-        title: Gợi ý theo dõi cho người dùng mới
       hero:
         desc_html: Hiển thị trên trang chủ. Kích cỡ tối thiểu 600x100px. Mặc định dùng hình thu nhỏ của máy chủ
         title: Hình ảnh giới thiệu
@@ -568,7 +600,7 @@ vi:
         title: Logo máy chủ
       peers_api_enabled:
         desc_html: Tên miền mà máy chủ này đã kết giao trong mạng liên hợp
-        title: Danh sách công khai các máy chủ được phát hiện
+        title: Công khai danh sách những máy chủ đã khám phá trong API
       preview_sensitive_media:
         desc_html: Liên kết xem trước trên các trang web khác sẽ hiển thị hình thu nhỏ ngay cả khi phương tiện được đánh dấu là nhạy cảm
         title: Hiển thị phương tiện nhạy cảm trong bản xem trước OpenGraph
@@ -613,9 +645,6 @@ vi:
         desc_html: Bạn có thể viết điều khoản dịch vụ, quyền riêng tư hoặc các vấn đề pháp lý khác. Dùng thẻ HTML
         title: Điều khoản dịch vụ tùy chỉnh
       site_title: Tên máy chủ
-      spam_check_enabled:
-        desc_html: Mastodon có thể tự động báo cáo các tài khoản gửi tin nhắn không mong muốn lặp đi lặp lại. Có thể có dương tính giả.
-        title: Tự động chống thư rác
       thumbnail:
         desc_html: Bản xem trước thông qua OpenGraph và API. Khuyến nghị 1200x630px
         title: Hình thu nhỏ của máy chủ
@@ -641,18 +670,23 @@ vi:
       deleted: Đã xóa
       failed_to_execute: Không thể thực thi
       media:
-        title: Bộ sưu tập
+        title: Media
       no_media: Toàn bộ
       no_status_selected: Bạn chưa chọn bất kỳ tút nào
       title: Toàn bộ tút
-      with_media: Có ảnh hoặc video
+      with_media: Có media
+    system_checks:
+      database_schema_check:
+        message_html: Có cơ sở dữ liệu đang chờ xử lý. Xin khởi động nó để ứng dụng có thể hoạt động một cách ổn định nhất
+      rules_check:
+        action: Sửa quy tắc máy chủ
+        message_html: Bạn chưa cập nhật quy tắc máy chủ.
+      sidekiq_process_check:
+        message_html: Sidekiq không hoạt động khi truy vấn %{value}. Hãy kiểm tra lại cấu hình Sidekiq
     tags:
       accounts_today: Sử dụng hôm nay
       accounts_week: Sử dụng trong tuần
       breakdown: Thống kê số lượt dùng hôm nay
-      context: Bối cảnh
-      directory: Có trên tiểu sử
-      in_directory: "%{count} có trên tiểu sử"
       last_active: Hôm nay
       most_popular: Phổ biến nhất
       most_recent: Gần đây
@@ -668,8 +702,9 @@ vi:
     warning_presets:
       add_new: Thêm mới
       delete: Xóa bỏ
-      edit_preset: Chỉnh sửa cảnh báo cài sẵn
-      title: Quản lý cảnh báo cài sẵn
+      edit_preset: Sửa mẫu có sẵn
+      empty: Bạn chưa thêm mẫu có sẵn nào cả.
+      title: Quản lý mẫu cảnh cáo
   admin_mailer:
     new_pending_account:
       body: Thông tin chi tiết của tài khoản mới ở phía dưới. Bạn có thể phê duyệt hoặc từ chối người này.
@@ -817,7 +852,7 @@ vi:
       username_unavailable: Tên người dùng của bạn sẽ không thể đăng ký mới
   directories:
     directory: Khám phá
-    explanation: Tìm và theo dõi những người cùng sở thích
+    explanation: Tìm những người chung sở thích
     explore_mastodon: Thành viên %{title}
   domain_validator:
     invalid_domain: không phải là một tên miền hợp lệ
@@ -848,7 +883,7 @@ vi:
       request: Tải về dữ liệu của bạn
       size: Dung lượng
     blocks: Người bạn chặn
-    bookmarks: Đã lưu
+    bookmarks: Tút đã lưu
     csv: CSV
     domain_blocks: Máy chủ bạn chặn
     lists: Danh sách
@@ -926,7 +961,7 @@ vi:
     success: Dữ liệu của bạn đã được tải lên thành công và hiện đang xử lý
     types:
       blocking: Danh sách chặn
-      bookmarks: Đã lưu
+      bookmarks: Tút đã lưu
       domain_blocking: Danh sách máy chủ đã chặn
       following: Danh sách người theo dõi
       muting: Danh sách người đã ẩn
@@ -1026,10 +1061,14 @@ vi:
       body: 'Bạn vừa được nhắc đến bởi %{name} trong:'
       subject: Bạn vừa được nhắc đến bởi %{name}
       title: Lượt nhắc mới
+    poll:
+      subject: Cuộc bình chọn của %{name} kết thúc
     reblog:
       body: Tút của bạn vừa được chia sẻ bởi %{name}
       subject: "%{name} vừa chia sẻ tút của bạn"
       title: Lượt chia sẻ mới
+    status:
+      subject: Bài đăng mới từ %{name}
   notifications:
     email_events: Email
     email_events_hint: 'Chọn những hoạt động sẽ gửi thông báo qua email:'
@@ -1089,7 +1128,7 @@ vi:
     moved: Đã xóa
     mutual: Đồng thời
     primary: Bình thường
-    relationship: Mối quan hệ
+    relationship: Quan hệ
     remove_selected_domains: Xóa hết người theo dõi từ các máy chủ đã chọn
     remove_selected_followers: Xóa những người theo dõi đã chọn
     remove_selected_follows: Ngưng theo dõi những người đã chọn
@@ -1122,7 +1161,7 @@ vi:
       alipay: Alipay
       blackberry: Blackberry
       chrome: Chrome
-      edge: Microsoft Edge
+      edge: Edge
       electron: Electron
       firefox: Firefox
       generic: Trình duyệt khác
@@ -1165,7 +1204,7 @@ vi:
     back: Quay lại Mastodon
     delete: Xóa tài khoản
     development: Lập trình
-    edit_profile: Cá nhân hóa
+    edit_profile: Trang cá nhân
     export: Xuất dữ liệu
     featured_tags: Hashtags thường dùng
     identity_proofs: Bằng chứng nhận dạng
@@ -1175,11 +1214,9 @@ vi:
     notifications: Thông báo
     preferences: Chung
     profile: Trang cá nhân
-    relationships: Lượt theo dõi
+    relationships: Quan hệ
     two_factor_authentication: Xác thực hai bước
     webauthn_authentication: Khóa bảo mật
-  spam_check:
-    spam_detected: Đây là một báo cáo tự động. Đã phát hiện thư rác.
   statuses:
     attached:
       audio:
@@ -1196,7 +1233,7 @@ vi:
     errors:
       in_reply_not_found: Bạn đang trả lời một tút không còn tồn tại.
     language_detection: Tự động phát hiện ngôn ngữ
-    open_in_web: Xem trong Mastodon
+    open_in_web: Xem trong web
     over_character_limit: vượt quá giới hạn %{max} ký tự
     pin_errors:
       limit: Bạn đã ghim quá số lượng tút cho phép
@@ -1205,17 +1242,18 @@ vi:
       reblog: Không thể ghim chia sẻ
     poll:
       total_people:
-        other: "%{count} người"
+        other: "%{count} người bình chọn"
       total_votes:
-        other: "%{count} người"
+        other: "%{count} người bình chọn"
       vote: Bình chọn
     show_more: Đọc thêm
     show_newer: Mới hơn
     show_older: Cũ hơn
-    show_thread: Toàn bộ chủ đề
-    sign_in_to_participate: Đăng nhập để trả lời chủ đề này
+    show_thread: Toàn chủ đề
+    sign_in_to_participate: Đăng nhập để trả lời tút này
     title: '%{name}: "%{quote}"'
     visibilities:
+      direct: Nhắn tin
       private: Người theo dõi
       private_long: Chỉ người theo dõi mới xem được tút
       public: Công khai
@@ -1351,11 +1389,8 @@ vi:
       tips: Mẹo
       title: Xin chào %{name}!
   users:
-    blocked_email_provider: Dịch vụ email này đã bị cấm
     follow_limit_reached: Bạn chỉ có thể theo dõi tối đa %{limit} người
     generic_access_help_html: Gặp trục trặc với tài khoản? Liên hệ %{email} để được trợ giúp
-    invalid_email: Địa chỉ email không hợp lệ
-    invalid_email_mx: Địa chỉ email không tồn tại
     invalid_otp_token: Mã xác thực hai bước không hợp lệ
     invalid_sign_in_token: Mã an toàn không hợp lệ
     otp_lost_help_html: Nếu bạn mất quyền truy cập vào cả hai, bạn có thể đăng nhập bằng %{email}
diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml
index 0123836ec..5893d0c8a 100644
--- a/config/locales/zgh.yml
+++ b/config/locales/zgh.yml
@@ -2,7 +2,6 @@
 zgh:
   about:
     about_this: ⵖⴼ
-    api: API
     contact: ⴰⵎⵢⴰⵡⴰⴹ
     learn_more: ⵙⵙⵏ ⵓⴳⴳⴰⵔ
     status_count_after:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 25e686955..add1b6632 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -21,11 +21,11 @@ zh-CN:
     federation_hint_html: 在%{instance} 上拥有账号后,你可以关注任何 Mastodon 服务器或其他服务器上的人。
     get_apps: 尝试移动应用
     hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例
-    instance_actor_flash: '这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。
-
-'
+    instance_actor_flash: "这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 \n"
     learn_more: 了解详情
     privacy_policy: 隐私政策
+    rules: 服务器规则
+    rules_html: 如果您想要在此Mastodon服务器上拥有一个账户,您必须遵守相应的规则,摘要如下:
     see_whats_happening: 看一看现在在发生什么
     server_stats: 服务器统计数据:
     source_code: 源代码
@@ -74,7 +74,6 @@ zh-CN:
       other: 嘟文
     posts_tab_heading: 嘟文
     posts_with_replies: 嘟文和回复
-    reserved_username: 此用户名已被保留
     roles:
       admin: 管理员
       bot: 机器人
@@ -113,17 +112,17 @@ zh-CN:
       deleted: 已删除
       demote: 降任
       destroyed_msg: "%{username} 的数据已进入等待队列,即将被删除"
-      disable: 停用
+      disable: 冻结
       disable_two_factor_authentication: 停用双重认证
-      disabled: 已停用
+      disabled: 已冻结
       display_name: 昵称
       domain: 域名
       edit: 编辑
       email: 电子邮件地址
       email_status: 电子邮件地址状态
-      enable: 启用
+      enable: 解冻
       enabled: 已启用
-      enabled_msg: 成功启用 %{username} 的帐号
+      enabled_msg: 成功解冻 %{username} 的帐号
       followers: 关注者
       follows: 正在关注
       header: 个人资料页横幅图片
@@ -190,8 +189,8 @@ zh-CN:
       sensitized: 已标记为敏感内容
       shared_inbox_url: 公用收件箱(Shared Inbox)URL
       show:
-        created_reports: 这个帐户提交的举报
-        targeted_reports: 针对这个帐户的举报
+        created_reports: 这个帐户提交的报告
+        targeted_reports: 针对这个帐户的报告
       silence: 隐藏
       silenced: 已隐藏
       statuses: 嘟文
@@ -215,7 +214,7 @@ zh-CN:
       whitelisted: 允许跨站交互
     action_logs:
       action_types:
-        assigned_to_self_report: 指派举报
+        assigned_to_self_report: 指派报告
         change_email_user: 为用户修改邮箱地址
         confirm_user: 确认用户
         create_account_warning: 创建警告
@@ -225,6 +224,7 @@ zh-CN:
         create_domain_block: 封禁新域名
         create_email_domain_block: 封禁电子邮箱域名
         create_ip_block: 新建 IP 规则
+        create_unavailable_domain: 创建不可用域名
         demote_user: 给用户降职
         destroy_announcement: 删除公告
         destroy_custom_emoji: 删除自定义表情符号
@@ -233,6 +233,7 @@ zh-CN:
         destroy_email_domain_block: 解除电子邮箱域名封禁
         destroy_ip_block: 删除 IP 规则
         destroy_status: 删除嘟文
+        destroy_unavailable_domain: 删除不可用域名
         disable_2fa_user: 禁用双重认证
         disable_custom_emoji: 禁用自定义表情符号
         disable_user: 禁用用户
@@ -241,13 +242,13 @@ zh-CN:
         memorialize_account: 将账户设为追悼模式
         promote_user: 给用户升任
         remove_avatar_user: 移除头像
-        reopen_report: 重开举报
+        reopen_report: 重开报告
         reset_password_user: 重置密码
-        resolve_report: 处理举报
+        resolve_report: 处理报告
         sensitive_account: 将你帐号中的媒体标记为敏感内容
         silence_account: 隐藏用户
         suspend_account: 封禁用户
-        unassigned_report: 取消举报的指派
+        unassigned_report: 取消举报的报告
         unsensitive_account: 去除你帐号中媒体的敏感内容标记
         unsilence_account: 解除账号隐藏
         unsuspend_account: 解除账号封禁
@@ -256,46 +257,48 @@ zh-CN:
         update_domain_block: 更新域名屏蔽
         update_status: 更新嘟文
       actions:
-        assigned_to_self_report: "%{name} 接管了举报 %{target}"
-        change_email_user: "%{name} 更改了用户 %{target} 的电子邮件地址"
-        confirm_user: "%{name} 确认了用户 %{target} 的电子邮件地址"
-        create_account_warning: "%{name} 向 %{target} 发送了警告"
-        create_announcement: "%{name} 创建了新公告 %{target}"
-        create_custom_emoji: "%{name} 添加了新的自定义表情 %{target}"
-        create_domain_allow: "%{name} 允许了和域名 %{target} 的跨站交互"
-        create_domain_block: "%{name} 屏蔽了域名 %{target}"
-        create_email_domain_block: "%{name} 屏蔽了电子邮件域名 %{target}"
-        create_ip_block: "%{name} 为 IP %{target} 创建了规则"
-        demote_user: "%{name} 对用户 %{target} 进行了降任操作"
-        destroy_announcement: "%{name} 删除了公告 %{target}"
-        destroy_custom_emoji: "%{name} 销毁了自定义表情 %{target}"
-        destroy_domain_allow: "%{name} 拒绝了和 %{target} 跨站交互"
-        destroy_domain_block: "%{name} 解除了对域名 %{target} 的屏蔽"
-        destroy_email_domain_block: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽"
-        destroy_ip_block: "%{name} 删除了 IP %{target} 的规则"
-        destroy_status: "%{name} 删除了 %{target} 的嘟文"
-        disable_2fa_user: "%{name} 停用了用户 %{target} 的双重认证"
-        disable_custom_emoji: "%{name} 停用了自定义表情 %{target}"
-        disable_user: "%{name} 将用户 %{target} 设置为禁止登录"
-        enable_custom_emoji: "%{name} 启用了自定义表情 %{target}"
-        enable_user: "%{name} 将用户 %{target} 设置为允许登录"
-        memorialize_account: "%{name} 将 %{target} 设置为追悼帐户"
-        promote_user: "%{name} 对用户 %{target} 进行了升任操作"
-        remove_avatar_user: "%{name} 删除了 %{target} 的头像"
-        reopen_report: "%{name} 重开了举报 %{target}"
-        reset_password_user: "%{name} 重置了用户 %{target} 的密码"
-        resolve_report: "%{name} 处理了举报 %{target}"
-        sensitive_account: "%{name} 将 %{target} 的媒体标记为敏感内容"
-        silence_account: "%{name} 隐藏了用户 %{target}"
-        suspend_account: "%{name} 封禁了用户 %{target}"
-        unassigned_report: "%{name} 放弃了举报 %{target} 的接管"
-        unsensitive_account: "%{name} 去除了 %{target} 媒体的敏感内容标记"
-        unsilence_account: "%{name} 解除了用户 %{target} 的隐藏状态"
-        unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态"
-        update_announcement: "%{name} 更新了公告 %{target}"
-        update_custom_emoji: "%{name} 更新了自定义表情 %{target}"
-        update_domain_block: "%{name} 更新了对 %{target} 的域名屏蔽"
-        update_status: "%{name} 刷新了 %{target} 的嘟文"
+        assigned_to_self_report_html: "%{name} 接管了报告 %{target}"
+        change_email_user_html: "%{name} 更改了用户 %{target} 的电子邮件地址"
+        confirm_user_html: "%{name} 确认了用户 %{target} 的电子邮件地址"
+        create_account_warning_html: "%{name} 向 %{target} 发送了警告"
+        create_announcement_html: "%{name} 创建了新公告 %{target}"
+        create_custom_emoji_html: "%{name} 添加了新的自定义表情 %{target}"
+        create_domain_allow_html: "%{name} 允许了和域名 %{target} 的跨站交互"
+        create_domain_block_html: "%{name} 屏蔽了域名 %{target}"
+        create_email_domain_block_html: "%{name} 屏蔽了电子邮件域名 %{target}"
+        create_ip_block_html: "%{name} 为 IP %{target} 创建了规则"
+        create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
+        demote_user_html: "%{name} 对用户 %{target} 进行了降任操作"
+        destroy_announcement_html: "%{name} 删除了公告 %{target}"
+        destroy_custom_emoji_html: "%{name} 销毁了自定义表情 %{target}"
+        destroy_domain_allow_html: "%{name} 拒绝了和 %{target} 跨站交互"
+        destroy_domain_block_html: "%{name} 解除了对域名 %{target} 的屏蔽"
+        destroy_email_domain_block_html: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽"
+        destroy_ip_block_html: "%{name} 删除了 IP %{target} 的规则"
+        destroy_status_html: "%{name} 删除了 %{target} 的嘟文"
+        destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递"
+        disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双重认证"
+        disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}"
+        disable_user_html: "%{name} 将用户 %{target} 设置为禁止登录"
+        enable_custom_emoji_html: "%{name} 启用了自定义表情 %{target}"
+        enable_user_html: "%{name} 将用户 %{target} 设置为允许登录"
+        memorialize_account_html: "%{name} 将 %{target} 设置为追悼帐户"
+        promote_user_html: "%{name} 对用户 %{target} 进行了升任操作"
+        remove_avatar_user_html: "%{name} 删除了 %{target} 的头像"
+        reopen_report_html: "%{name} 重开了报告 %{target}"
+        reset_password_user_html: "%{name} 重置了用户 %{target} 的密码"
+        resolve_report_html: "%{name} 处理了报告 %{target}"
+        sensitive_account_html: "%{name} 将 %{target} 的媒体标记为敏感内容"
+        silence_account_html: "%{name} 隐藏了用户 %{target}"
+        suspend_account_html: "%{name} 封禁了用户 %{target}"
+        unassigned_report_html: "%{name} 放弃接管报告 %{target}"
+        unsensitive_account_html: "%{name} 去除了 %{target} 的媒体的敏感内容标记"
+        unsilence_account_html: "%{name} 解除了用户 %{target} 的隐藏状态"
+        unsuspend_account_html: "%{name} 解除了用户 %{target} 的封禁状态"
+        update_announcement_html: "%{name} 更新了公告 %{target}"
+        update_custom_emoji_html: "%{name} 更新了自定义表情 %{target}"
+        update_domain_block_html: "%{name} 更新了对 %{target} 的域名屏蔽"
+        update_status_html: "%{name} 刷新了 %{target} 的嘟文"
       deleted_status: "(嘟文已删除)"
       empty: 没有找到日志
       filter_by_action: 根据行为过滤
@@ -310,10 +313,12 @@ zh-CN:
       new:
         create: 创建公告
         title: 新公告
+      publish: 发布
       published_msg: 公告已发布!
       scheduled_for: 定时在 %{time}
       scheduled_msg: 定时公告已创建!
       title: 公告
+      unpublish: 取消发布
       unpublished_msg: 公告已取消发布!
       updated_msg: 公告已成功更新!
     custom_emojis:
@@ -358,11 +363,10 @@ zh-CN:
       feature_profile_directory: 用户目录
       feature_registrations: 公开注册
       feature_relay: 联邦中继站
-      feature_spam_check: 反垃圾
       feature_timeline_preview: 时间轴预览
       features: 功能
       hidden_service: 匿名服务连通性
-      open_reports: 待处理举报数
+      open_reports: 待处理报告数
       pending_tags: 等待审核的标签
       pending_users: 等待审核的用户
       recent_users: 新用户
@@ -406,10 +410,10 @@ zh-CN:
       public_comment_hint: 给这一域名限制添加公开的评论,如果你推广你的域名限制列表的话,这些评论就会显示出来。
       reject_media: 拒绝接收媒体文件
       reject_media_hint: 删除本站已缓存的媒体文件,并且不再接收来自该域名的任何媒体文件。此选项不影响封禁
-      reject_reports: 拒绝接收举报
-      reject_reports_hint: 忽略来自此域名的所有举报。这和封禁无关。
+      reject_reports: 拒绝接收报告
+      reject_reports_hint: 忽略来自此域名的所有报告。这和封禁无关。
       rejecting_media: 拒绝接收媒体文件
-      rejecting_reports: 拒绝接收举报
+      rejecting_reports: 拒绝接收报告
       severity:
         silence: 已隐藏
         suspend: 已封禁
@@ -435,9 +439,33 @@ zh-CN:
         create: 添加域名
         title: 添加电子邮件域名屏蔽
       title: 电子邮件域名屏蔽
+    follow_recommendations:
+      description_html: "<strong>“关注推荐”帮助新用户快速找到有趣的内容</strong>。 当用户与他人的互动不足以形成个性化的建议时,就会推荐关注这些账户。每日都会更新推荐,基于选定语言的近期最高互动数和最多本站关注者数综合评估得出。"
+      language: 选择语言
+      status: 嘟文
+      suppress: 禁用推荐关注
+      suppressed: 已禁用
+      title: 推荐关注
+      unsuppress: 恢复推荐关注
     instances:
+      back_to_all: 全部
+      back_to_limited: 隐藏
+      back_to_warning: 警告
       by_domain: 域名
+      delivery:
+        all: 全部
+        clear: 清除投递错误
+        restart: 重新投递
+        stop: 停止投递
+        title: 投递
+        unavailable: 不可用
+        unavailable_message: 投递不可用
+        warning: 警告
+        warning_message:
+          other: 投递已失败 %{count} 天
       delivery_available: 可投递
+      delivery_error_days: 投递错误天数
+      delivery_error_hint: 如果投递已不可用 %{count} 天,它将被自动标记为无法投递。
       empty: 暂无域名。
       known_accounts:
         other: "%{count} 个已知帐户"
@@ -451,7 +479,7 @@ zh-CN:
       total_blocked_by_us: 被我站屏蔽的
       total_followed_by_them: 被对方关注的
       total_followed_by_us: 被我站关注的
-      total_reported: 关于对方的举报
+      total_reported: 关于对方的报告
       total_storage: 媒体文件
     invites:
       deactivate_all: 撤销所有邀请链接
@@ -497,8 +525,8 @@ zh-CN:
       status: 状态
       title: 中继站
     report_notes:
-      created_msg: 举报记录建立成功!
-      destroyed_msg: 举报记录删除成功!
+      created_msg: 报告记录建立成功!
+      destroyed_msg: 报告记录删除成功!
     reports:
       account:
         notes:
@@ -509,10 +537,10 @@ zh-CN:
       are_you_sure: 你确定吗?
       assign_to_self: 接管
       assigned: 已接管的监察员
-      by_target_domain: 被举报账户的域名
+      by_target_domain: 被报告账户的域名
       comment:
         none: 没有
-      created_at: 举报时间
+      created_at: 报告时间
       forwarded: 已转发
       forwarded_to: 转发举报至 %{domain}
       mark_as_resolved: 标记为“已处理”
@@ -523,17 +551,24 @@ zh-CN:
         create_and_unresolve: 添加记录并重开
         delete: 删除
         placeholder: 描述已经执行的操作,或其他任何相关的跟进情况…
-      reopen: 重开举报
-      report: '举报 #%{id}'
-      reported_account: 举报用户
-      reported_by: 举报人
+      reopen: 重开报告
+      report: '报告 #%{id}'
+      reported_account: 报告用户
+      reported_by: 报告人
       resolved: 已处理
-      resolved_msg: 举报处理成功!
+      resolved_msg: 报告处理成功!
       status: 状态
-      title: 举报
+      title: 报告
       unassign: 取消接管
       unresolved: 未处理
       updated_at: 更新时间
+    rules:
+      add_new: 添加规则
+      delete: 删除
+      description_html: 虽然大多数人都声称已经阅读并同意服务条款,但通常人们只有在出现问题后才会阅读。所以写一个简单的要点列表吧,能让大家一目了然。每条规则要尽量简单明了,但也别分出太多条目来。
+      edit: 编辑规则
+      empty: 尚未定义提供商。
+      title: 实例规则
     settings:
       activity_api_enabled:
         desc_html: 本站一周内的嘟文数、活跃用户数以及新用户数
@@ -557,9 +592,6 @@ zh-CN:
         users: 对本地已登录用户
       domain_blocks_rationale:
         title: 显示理由
-      enable_bootstrap_timeline_accounts:
-        desc_html: 让新用户自动关注指定用户,这样,他们的主页时间线就不会在一开始的时候空空荡荡
-        title: 开启新用户默认关注功能
       hero:
         desc_html: 将用于在首页展示。推荐使用分辨率 600×100px 以上的图片。如未设置,将默认使用本站缩略图。
         title: 主题图片
@@ -613,9 +645,6 @@ zh-CN:
         desc_html: 可以填写自己的隐私权政策、使用条款或其他法律文本。可以使用 HTML 标签
         title: 自定义使用条款
       site_title: 本站名称
-      spam_check_enabled:
-        desc_html: Mastodon可以自动隐藏和举报重复发送垃圾消息的帐号。但是本功能有可能误伤无辜。
-        title: 自动反垃圾
       thumbnail:
         desc_html: 用于在 OpenGraph 和 API 中显示预览图。推荐分辨率 1200×630px
         title: 本站缩略图
@@ -646,13 +675,18 @@ zh-CN:
       no_status_selected: 因为没有嘟文被选中,所以没有更改
       title: 帐户嘟文
       with_media: 含有媒体文件
+    system_checks:
+      database_schema_check:
+        message_html: 有待处理的数据库迁移。请运行它们以确保应用程序正常运行。
+      rules_check:
+        action: 管理服务器规则
+        message_html: 你没有定义任何服务器规则。
+      sidekiq_process_check:
+        message_html: 没有运行 %{value} 队列的 Sidekiq 进程。请检查您的 Sidekiq 配置
     tags:
       accounts_today: 今日活跃用户
       accounts_week: 本周活跃用户
       breakdown: 按来源分类今天的使用情况
-      context: 上下文
-      directory: 在目录中
-      in_directory: 目录中 %{count} 条
       last_active: 最近活动
       most_popular: 最热门的
       most_recent: 最近的
@@ -669,15 +703,16 @@ zh-CN:
       add_new: 添加新条目
       delete: 删除
       edit_preset: 编辑预置警告
+      empty: 您还没有添加任何兴趣。
       title: 管理预设警告
   admin_mailer:
     new_pending_account:
       body: 新帐户的详细信息如下。您可以批准或拒绝此申请。
       subject: 在 %{instance} 上有新帐号 ( %{username}) 需要审核
     new_report:
-      body: "%{reporter} 举报了用户 %{target}"
-      body_remote: 来自 %{domain} 的用户举报了用户 %{target}
-      subject: 来自 %{instance} 的用户举报(#%{id})
+      body: "%{reporter} 报告了用户 %{target}"
+      body_remote: 来自 %{domain} 的用户报告了用户 %{target}
+      subject: 来自 %{instance} 的用户报告(#%{id})
     new_trending_tag:
       body: '今日的热门话题 #%{name} 之前未经审核。直到你允许之前这个话题将不会公开显示,或者就保持原样让它石沉大海。'
       subject: 在 %{instance} 有新话题 (#%{name}) 待审核
@@ -1026,10 +1061,14 @@ zh-CN:
       body: "%{name} 在嘟文中提到了你:"
       subject: "%{name} 提到了你"
       title: 新的提及
+    poll:
+      subject: "%{name} 创建的一个投票已经结束"
     reblog:
       body: 你的嘟文被 %{name} 转嘟了:
       subject: "%{name} 转嘟了你的嘟文"
       title: 新的转嘟
+    status:
+      subject: "%{name} 刚刚发嘟"
   notifications:
     email_events: 电子邮件通知事件
     email_events_hint: 选择你想要收到通知的事件:
@@ -1144,7 +1183,7 @@ zh-CN:
       adobe_air: Adobe Air
       android: Android
       blackberry: 黑莓
-      chrome_os: ChromeOS
+      chrome_os: Chrome OS
       firefox_os: Firefox OS
       ios: iOS
       linux: Linux
@@ -1178,8 +1217,6 @@ zh-CN:
     relationships: 关注管理
     two_factor_authentication: 双重认证
     webauthn_authentication: 安全密钥
-  spam_check:
-    spam_detected: 这是一个自动报告。已检测到垃圾信息。
   statuses:
     attached:
       audio:
@@ -1216,6 +1253,7 @@ zh-CN:
     sign_in_to_participate: 登录以加入对话
     title: "%{name}:“%{quote}”"
     visibilities:
+      direct: 私信
       private: 仅关注者
       private_long: 只有关注你的用户能看到
       public: 公开
@@ -1384,11 +1422,8 @@ zh-CN:
       tips: 小贴士
       title: "%{name},欢迎你的加入!"
   users:
-    blocked_email_provider: 您不能使用来自此提供商的邮箱
     follow_limit_reached: 您不能关注超过 %{limit} 个人
     generic_access_help_html: 登录账号出现问题?你可以向 %{email} 寻求帮助
-    invalid_email: 输入的电子邮件地址无效
-    invalid_email_mx: 用戶邮箱似乎不存在
     invalid_otp_token: 输入的双重认证代码无效
     invalid_sign_in_token: 无效安全码
     otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 9fcee79f1..ad9bc2ceb 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -26,6 +26,8 @@ zh-HK:
       此帳戶是為聯盟協定而設。除非你想封鎖整個伺服器的話,否則請不要封鎖這個帳戶。如果你想封鎖伺服器,請使用網域封鎖以達到相同效果。
     learn_more: 了解更多
     privacy_policy: 隱私權政策
+    rules: 系統規則
+    rules_html: 如果你想要在本站開一個新帳戶,以下是你需要遵守的規則:
     see_whats_happening: 看看發生什麼事
     server_stats: 伺服器統計:
     source_code: 源代碼
@@ -74,7 +76,6 @@ zh-HK:
       other: 文章
     posts_tab_heading: 文章
     posts_with_replies: 包含回覆的文章
-    reserved_username: 這個使用者名稱已被保留
     roles:
       admin: 管理員
       bot: 機械人
@@ -255,47 +256,6 @@ zh-HK:
         update_custom_emoji: 更新自定的 Emoji 表情符號
         update_domain_block: 更新域名阻隔
         update_status: 更新文章
-      actions:
-        assigned_to_self_report: "%{name} 指派了 %{target} 的舉報給自己"
-        change_email_user: "%{name} 改變了使用者 %{target} 的電郵地址"
-        confirm_user: "%{name} 確認了使用者 %{target} 的電郵地址"
-        create_account_warning: "%{name} 已警告了 %{target}"
-        create_announcement: "%{name} 新增了公告 %{target}"
-        create_custom_emoji: "%{name} 加入了新的 Emoji %{target}"
-        create_domain_allow: "%{name} 和 %{target} 網域結盟了"
-        create_domain_block: "%{name} 封鎖了網域 %{target}"
-        create_email_domain_block: "%{name} 封鎖了電郵網域 %{target}"
-        create_ip_block: "%{name} 已經設定了針對 IP %{target} 的規則"
-        demote_user: "%{name} 把使用者 %{target} 降權"
-        destroy_announcement: "%{name} 刪除了公告 %{target}"
-        destroy_custom_emoji: "%{name} 刪除了 Emoji %{target}"
-        destroy_domain_allow: "%{name} 禁止了與 %{target} 網域進行訊息聯網"
-        destroy_domain_block: "%{name} 取消了對網域 %{target} 的封鎖"
-        destroy_email_domain_block: "%{name} 取消了對電郵網域 %{target} 的封鎖"
-        destroy_ip_block: "%{name} 已經刪除了 IP %{target} 的規則"
-        destroy_status: "%{name} 刪除了 %{target} 的文章"
-        disable_2fa_user: "%{name} 停用了使用者 %{target} 的雙重認證"
-        disable_custom_emoji: "%{name} 停用了 Emoji %{target}"
-        disable_user: "%{name} 把使用者 %{target} 設定為禁止登入"
-        enable_custom_emoji: "%{name} 啟用了 Emoji %{target}"
-        enable_user: "%{name} 把使用者 %{target} 設定為允許登入"
-        memorialize_account: "%{name} 把 %{target} 設定為追悼帳戶"
-        promote_user: "%{name} 對提升了使用者 %{target} 的權限"
-        remove_avatar_user: "%{name} 取消了 %{target} 的頭像"
-        reopen_report: "%{name} 重開 %{target} 的舉報個案"
-        reset_password_user: "%{name} 重設了使用者 %{target} 的密碼"
-        resolve_report: "%{name} 處理了 %{target} 的舉報個案"
-        sensitive_account: "%{name} 將 %{target} 的媒體檔案列為敏感"
-        silence_account: "%{name} 靜音了帳號 %{target}"
-        suspend_account: "%{name} 將帳號 %{target} 停權"
-        unassigned_report: "%{name} 取消指派 %{target} 的舉報"
-        unsensitive_account: "%{name} 取消將 %{target} 的媒體檔案的設為敏感"
-        unsilence_account: "%{name} 取消了用戶 %{target} 的靜音狀態"
-        unsuspend_account: "%{name} 取消了帳號 %{target} 的停權狀態"
-        update_announcement: "%{name} 更新了公告 %{target}"
-        update_custom_emoji: "%{name} 更新了 Emoji 表情符號 %{target}"
-        update_domain_block: "%{name} 更新了對 %{target} 的域名阻隔"
-        update_status: "%{name} 更新了 %{target} 的文章"
       deleted_status: "(已刪除文章)"
       empty: 找不到任何日誌。
       filter_by_action: 按動作篩選
@@ -358,7 +318,6 @@ zh-HK:
       feature_profile_directory: 個人資料目錄
       feature_registrations: 註冊
       feature_relay: 聯網中繼站
-      feature_spam_check: 防垃圾訊息
       feature_timeline_preview: 時間軸預覽
       features: 功能
       hidden_service: 與隱密服務互連
@@ -534,6 +493,10 @@ zh-HK:
       unassign: 取消指派
       unresolved: 未處理
       updated_at: 更新
+    rules:
+      add_new: 新增規則
+      edit: 編輯規則
+      title: 伺服器守則
     settings:
       activity_api_enabled:
         desc_html: 本站的文章數量、活躍使用者數量、及每週新註冊使用者數量
@@ -557,9 +520,6 @@ zh-HK:
         users: 所有已登入的帳號
       domain_blocks_rationale:
         title: 顯示原因予
-      enable_bootstrap_timeline_accounts:
-        desc_html: 自動為新用戶追隨預設的帳號,為他們的首頁動態增加一點色彩
-        title: 啟用「新使用者預設關注」功能
       hero:
         desc_html: 在首頁顯示。推薦最小 600x100px。如果留空,就會默認為服務站縮圖
         title: 主題圖片
@@ -607,15 +567,12 @@ zh-HK:
         desc_html: 本站詳細資訊頁的內文<br/>你可以在此使用 HTML
         title: 本站詳細資訊
       site_short_description:
-        desc_html: "顯示在側邊欄和網頁標籤(meta tags)。以一句話描述Mastodon是甚麼,有甚麼令這個伺服器脫\U000294D9而出。"
+        desc_html: 顯示在側邊欄和網頁標籤(meta tags)。以一句話描述Mastodon是甚麼,有甚麼令這個伺服器脫\U000294D9而出。
         title: 伺服器短描述
       site_terms:
         desc_html: 可以填寫自己的隱私權政策、使用條款或其他法律文本。可以使用 HTML 標籤
         title: 自訂使用條款
       site_title: 本站名稱
-      spam_check_enabled:
-        desc_html: Mastodon可以自動舉報產生重複的垃圾內容的帳號,不過未必準確。
-        title: 自動防廣告訊息
       thumbnail:
         desc_html: 用於在 OpenGraph 和 API 中顯示預覽圖。推薦大小 1200×630px
         title: 本站縮圖
@@ -650,9 +607,6 @@ zh-HK:
       accounts_today: 今日特殊使用
       accounts_week: 今週特殊使用
       breakdown: 根據來源剖析是日用量
-      context: 上下文
-      directory: 在目錄中
-      in_directory: 目錄中有 %{count} 個
       last_active: 上次活躍
       most_popular: 最熱門
       most_recent: 最近
@@ -783,7 +737,7 @@ zh-HK:
   date:
     formats:
       default: "%Y年%b月%d日"
-      with_month_name: "%B %d, %Y"
+      with_month_name: "%Y年%B月%d日"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}小時前"
@@ -1178,8 +1132,6 @@ zh-HK:
     relationships: 關注及追隨者
     two_factor_authentication: 雙重認證
     webauthn_authentication: 安全鑰匙
-  spam_check:
-    spam_detected: 此為系統的自動報告:已發現垃圾訊息。
   statuses:
     attached:
       audio:
@@ -1384,11 +1336,8 @@ zh-HK:
       tips: 小貼士
       title: 歡迎 %{name} 加入!
   users:
-    blocked_email_provider: 此電郵提供商並不被允許
     follow_limit_reached: 你不能關注多於%{limit} 人
     generic_access_help_html: 不能登入?你可以寄電郵至 %{email} 尋求協助
-    invalid_email: 電郵地址格式不正確
-    invalid_email_mx: 此電郵地址不存在
     invalid_otp_token: 雙重認證碼不正確
     invalid_sign_in_token: 無效的安全碼
     otp_lost_help_html: 如果這兩者你均無法登入,你可以聯繫 %{email}
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index da340a1bc..c01d566b7 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -21,11 +21,11 @@ zh-TW:
     federation_hint_html: 你只需要擁有 %{instance} 的帳戶,就可以追蹤隨便一台 Mastodon 伺服器上的人等等。
     get_apps: 嘗試行動應用程式
     hosted_on: 在 %{domain} 運作的 Mastodon 站點
-    instance_actor_flash: '這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。
-
-'
+    instance_actor_flash: "這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 \n"
     learn_more: 了解詳細
     privacy_policy: 隱私權政策
+    rules: 伺服器規則
+    rules_html: 以下是您若想在此 Mastodon 伺服器建立帳號必須遵守的規則總結:
     see_whats_happening: 看看發生什麼事
     server_stats: 伺服器統計:
     source_code: 原始碼
@@ -74,7 +74,6 @@ zh-TW:
       other: 嘟文
     posts_tab_heading: 嘟文
     posts_with_replies: 嘟文與回覆
-    reserved_username: 此使用者名稱已被保留
     roles:
       admin: 管理員
       bot: 機器人
@@ -255,47 +254,6 @@ zh-TW:
         update_custom_emoji: 更新自訂顏文字
         update_domain_block: 更新封鎖網域
         update_status: 更新狀態
-      actions:
-        assigned_to_self_report: "%{name} 接受了檢舉 %{target}"
-        change_email_user: "%{name} 變更了使用者 %{target} 的電子信箱位址"
-        confirm_user: "%{name} 確認了使用者 %{target} 的電子信箱位址"
-        create_account_warning: "%{name} 已對 %{target} 送出警告"
-        create_announcement: "%{name} 建立了新公告 %{target}"
-        create_custom_emoji: "%{name} 加入自訂表情符號 %{target}"
-        create_domain_allow: "%{name} 將 %{target} 網域加入黑名單了"
-        create_domain_block: "%{name} 封鎖了站點 %{target}"
-        create_email_domain_block: "%{name} 封鎖了電子信箱網域 %{target}"
-        create_ip_block: "%{name} 已經設定了IP %{target} 的規則"
-        demote_user: "%{name} 把使用者 %{target} 降級"
-        destroy_announcement: "%{name} 刪除了公告 %{target}"
-        destroy_custom_emoji: "%{name} 破壞了 %{target} 表情符號"
-        destroy_domain_allow: "%{name} 從白名單中移除了 %{target} 網域"
-        destroy_domain_block: "%{name} 取消了對站點 %{target} 的封鎖"
-        destroy_email_domain_block: "%{name} 取消了對電子信箱網域 %{target} 的封鎖"
-        destroy_ip_block: "%{name} 已經刪除了 IP %{target} 的規則"
-        destroy_status: "%{name} 刪除了 %{target} 的嘟文"
-        disable_2fa_user: "%{name} 停用了使用者 %{target} 的兩階段認證"
-        disable_custom_emoji: "%{name} 停用了自訂表情符號 %{target}"
-        disable_user: "%{name} 將使用者 %{target} 設定為禁止登入"
-        enable_custom_emoji: "%{name} 啟用了自訂表情符號 %{target}"
-        enable_user: "%{name} 將使用者 %{target} 設定為允許登入"
-        memorialize_account: "%{name} 將 %{target} 設定為追悼帳戶"
-        promote_user: "%{name} 對使用者 %{target} 進行了晉級操作"
-        remove_avatar_user: "%{name} 移除了 %{target} 的頭像"
-        reopen_report: "%{name} 重新開啟 %{target} 的檢舉"
-        reset_password_user: "%{name} 重新設定了使用者 %{target} 的密碼"
-        resolve_report: "%{name} 處理了 %{target} 的檢舉"
-        sensitive_account: "%{name} 將 %{target} 的媒體檔案標記為敏感內容"
-        silence_account: "%{name} 靜音了使用者 %{target}"
-        suspend_account: "%{name} 停權了使用者 %{target}"
-        unassigned_report: "%{name} 取消指派 %{target} 的檢舉"
-        unsensitive_account: "%{name} 將 %{target} 的媒體檔案的敏感狀態取消"
-        unsilence_account: "%{name} 取消了使用者 %{target} 的靜音狀態"
-        unsuspend_account: "%{name} 取消了使用者 %{target} 的停權狀態"
-        update_announcement: "%{name} 更新了公告 %{target}"
-        update_custom_emoji: "%{name} 更新了自訂表情符號 %{target}"
-        update_domain_block: "%{name} 更新封鎖網域 %{target}"
-        update_status: "%{name} 重整了 %{target} 的嘟文"
       deleted_status: "(已刪除嘟文)"
       empty: 找不到 log
       filter_by_action: 按動作篩選
@@ -358,7 +316,6 @@ zh-TW:
       feature_profile_directory: 個人資料目錄
       feature_registrations: 註冊
       feature_relay: 聯邦中繼站
-      feature_spam_check: 防垃圾訊息
       feature_timeline_preview: 時間軸預覽
       features: 功能
       hidden_service: 與隱密服務互連
@@ -534,6 +491,10 @@ zh-TW:
       unassign: 取消指派
       unresolved: 未解決
       updated_at: 更新
+    rules:
+      add_new: 新增規則
+      edit: 編輯規則
+      title: 伺服器規則
     settings:
       activity_api_enabled:
         desc_html: 本站使用者發佈的嘟文數量,以及本站的活躍使用者與一週內新使用者數量
@@ -557,9 +518,6 @@ zh-TW:
         users: 套用至所有登入的本機使用者
       domain_blocks_rationale:
         title: 顯示解釋原因
-      enable_bootstrap_timeline_accounts:
-        desc_html: 使新使用者自動跟隨設定之帳號,所以他們的首頁動態一開始不會空白
-        title: 啟用新使用者的預設追蹤
       hero:
         desc_html: 在首頁顯示。推薦最小 600x100px。如果留空,就會重設回伺服器預覽圖
         title: 主題圖片
@@ -586,6 +544,7 @@ zh-TW:
           disabled: 沒有人
           title: 允許發送邀請的身份
         require_invite_text:
+          desc_html: 如果已設定為手動審核註冊,請將「加入原因」設定為必填項目。
           title: 要求新使用者填申請書以索取邀請
       registrations_mode:
         modes:
@@ -606,13 +565,12 @@ zh-TW:
         desc_html: 可放置行為準則、規定以及其他此伺服器特有的內容。可使用 HTML 標籤
         title: 本站詳細資訊
       site_short_description:
+        desc_html: 顯示在側邊欄和網頁標籤 (meta tags)。以一段話描述 Mastodon 是甚麼,以及這個伺服器的特色。
         title: 伺服器短描述
       site_terms:
         desc_html: 可以填寫自己的隱私權政策、使用條款或其他法律文本。可以使用 HTML 標籤
         title: 自訂使用條款
       site_title: 伺服器名稱
-      spam_check_enabled:
-        title: 自動防廣告訊息
       thumbnail:
         desc_html: 用於在 OpenGraph 和 API 中顯示預覽圖。推薦大小 1200×630px
         title: 伺服器縮圖
@@ -621,8 +579,10 @@ zh-TW:
         title: 時間軸預覽
       title: 網站設定
       trendable_by_default:
+        desc_html: 影響此前並未被禁用的標籤
         title: 允許熱門的主題標籤直接顯示於趨勢區,不需經過審核
       trends:
+        desc_html: 公開目前炎上的已審核標籤
         title: 趨勢主題標籤
     site_uploads:
       delete: 刪除上傳的檔案
@@ -641,16 +601,22 @@ zh-TW:
       no_status_selected: 因未選擇嘟文而未變更。
       title: 帳戶嘟文
       with_media: 含有媒體檔案
+    system_checks:
+      database_schema_check:
+        message_html: 有挂起的数据库迁移,请运行它们以确保应用程序按照预期运行。
+      rules_check:
+        action: 管理服务器规则
+        message_html: 你没有定义任何服务器规则。
+      sidekiq_process_check:
+        message_html: 没有队列 %{value} 的Sidekiq进程,请检查你的Sidekiq配置
     tags:
       accounts_today: 本日不重複使用者數
       accounts_week: 本週不重複使用者數
-      context: 上下文
-      directory: 在目錄中
-      in_directory: 目錄中有 %{count} 個
+      breakdown: 根據來源分類本日使用情況
       last_active: 上次活躍
       most_popular: 最熱門
       most_recent: 最近
-      name: Hashtag
+      name: 主題標籤
       review: 審核嘟文
       reviewed: 已審核
       title: 主題標籤
@@ -662,15 +628,31 @@ zh-TW:
     warning_presets:
       add_new: 新增
       delete: 刪除
+      edit_preset: 編輯預設警告
+      title: 管理預設警告
   admin_mailer:
+    new_pending_account:
+      body: 以下是新帳號的詳細資訊。您可以同意或拒絕這項申請。
+      subject: "%{instance} 上有新帳號 (%{username}) 待審核"
     new_report:
       body: "%{reporter} 檢舉了使用者 %{target}"
       body_remote: 來自 %{domain} 的使用者檢舉了使用者 %{target}
       subject: 來自 %{instance} 的使用者檢舉(#%{id})
+    new_trending_tag:
+      body: '尚未通過審核的主題標籤 #%{name} 今天有炎上趨勢。這個標籤在你開綠燈之前不會公開顯示,你也可以選擇無視它以遭蒙蔽雙眼。'
+      subject: "%{instance} 上有待審核的主題標籤 (#%{name})"
+  aliases:
+    add_new: 建立別名
+    created_msg: 成功建立別名。您可以自舊帳號開始轉移。
+    deleted_msg: 成功移除別名。您將無法再由舊帳號轉移到當前帳號。
+    empty: 您目前沒有任何別名。
+    hint_html: 如果想由其他帳號轉移到此帳號,您可以在此處創建別名,稍後系統將容許您把關注者由舊帳號轉移至此。此項作業是<strong>無害且可復原的</strong>。 <strong>帳號的遷移程序需要在舊帳號啟動</strong>。
+    remove: 取消連結別名
   appearance:
     advanced_web_interface: 進階網頁介面
     advanced_web_interface_hint: 進階網頁界面可讓您配置許多不同的欄位來善用多餘的螢幕空間,依需要同時查看盡可能多的資訊如:首頁、通知、站點聯邦時間軸、任意數量的列表和主題標籤。
     animations_and_accessibility: 動畫與可用性
+    confirmation_dialogs: 確認對話框
     discovery: 探索
     localization:
       body: Mastodon 是由志願者翻譯的。
@@ -696,13 +678,19 @@ zh-TW:
   auth:
     apply_for_account: 索取註冊邀請
     change_password: 密碼
+    checkbox_agreement_html: 我同意 <a href="%{rules_path}" target="_blank">之伺服器規則</a> 以及 <a href="%{terms_path}" target="_blank">服務條款</a>
+    checkbox_agreement_without_rules_html: 我同意 <a href="%{terms_path}" target="_blank">服務條款</a>
     delete_account: 刪除帳戶
     delete_account_html: 如果你想刪除你的帳戶,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。
     description:
+      prefix_invited_by_user: "@%{name} 邀請您加入這個 Mastodon 伺服器!"
       prefix_sign_up: 現在就註冊 Mastodon 帳號吧!
+      suffix: 有了帳號,就可以從任何 Mastodon 伺服器關注任何人、發發廢嘟,並且與任何 Mastodon 伺服器的使用者交♂流?!
     didnt_get_confirmation: 沒有收到驗證信?
+    dont_have_your_security_key: 找不到您的安全金鑰?
     forgot_password: 忘記密碼?
     invalid_reset_password_token: 密碼重設 token 無效或已過期。請重新設定密碼。
+    link_to_otp: 請從您手機輸入雙重驗證 (2FA) 或還原碼
     link_to_webauth: 使用您的安全金鑰
     login: 登入
     logout: 登出
@@ -710,6 +698,7 @@ zh-TW:
     migrate_account_html: 如果你希望引導他人關注另一個帳戶,請<a href="%{path}">到這裡設定</a>。
     or_log_in_with: 或透過其他方式登入
     providers:
+      cas: CAS
       saml: SAML
     register: 註冊
     registration_closed: "%{instance} 現在不開放新成員"
@@ -718,8 +707,18 @@ zh-TW:
     security: 登入資訊
     set_new_password: 設定新密碼
     setup:
+      email_below_hint_html: 如果此電子郵件地址不正確,您可於此修改並接收郵件進行認證。
       email_settings_hint_html: 請確認 e-mail 是否傳送到 %{email} 。如果不對的話,可以從帳號設定修改。
       title: 設定
+    status:
+      account_status: 帳號狀態
+      confirming: 等待電子郵件確認完成。
+      functional: 您的帳號可以正常使用了。
+      pending: 管管們正在處理您的申請,這可能需要一點時間處理。我們將在申請通過後以電子郵件方式通知您。
+      redirecting_to: 您的帳號因目前重定向至 %{acct} 而被停用。
+    too_fast: 送出表單的速度太快跟不上,請稍後再試。
+    trouble_logging_in: 登錄時遇到困難?
+    use_security_key: 使用安全金鑰
   authorize_follow:
     already_following: 你已經關注了這個使用者
     already_requested: 您早已向該帳戶寄送追蹤請求
@@ -732,6 +731,19 @@ zh-TW:
       return: 顯示個人資料頁
       web: 返回本站
     title: 關注 %{acct}
+  challenge:
+    confirm: 繼續
+    hint_html: "<strong>温馨小提醒:</strong> 我們在接下來一小時內不會再要求您輸入密碼。"
+    invalid_password: 密碼錯誤
+    prompt: 輸入密碼以繼續
+  crypto:
+    errors:
+      invalid_key: 這不是一把有效的 Ed25519 或 Curve25519 金鑰
+      invalid_signature: 這不是有效的 Ed25519 簽章
+  date:
+    formats:
+      default: "%Y年%b月%d日"
+      with_month_name: "%Y年%B月%d日"
   datetime:
     distance_in_words:
       about_x_hours: "%{count}小時前"
@@ -747,14 +759,33 @@ zh-TW:
       x_months: "%{count}個月"
       x_seconds: "%{count}秒"
   deletes:
+    challenge_not_passed: 您所輸入的資料不正確
     confirm_password: 輸入你現在的密碼來驗證身份
+    confirm_username: 請輸入您的使用者名稱以作確認
     proceed: 刪除帳戶
     success_msg: 你的帳戶已經成功刪除
+    warning:
+      before: 在進行下一步驟之前,請詳細閱讀以下説明:
+      caches: 已被其他節點快取的內容可能會殘留其中
+      data_removal: 您的嘟文和其他資料將會被永久刪除
+      email_change_html: 你可以在不刪除帳號的情況下<a href="%{path}">變更你的電子郵件地址</a>
+      email_contact_html: 如果你仍然沒有收到郵件,請寄信到 <a href="mailto:%{email}">%{email}</a> 以獲得協助
+      email_reconfirmation_html: 如果你沒有收到確認郵件,你可以<a href="%{path}">請求再次發送</a>
+      irreversible: 你將無法復原或重新啟用你的帳號
+      more_details_html: 更多詳細資訊,請參閲<a href="%{terms_path}">隱私政策</a>。
+      username_available: 你的使用者名稱將會釋出供他人使用
+      username_unavailable: 你的使用者名稱將會保留並不予他人使用
+  directories:
+    directory: 個人資料目錄
+    explanation: 根據興趣去發現新朋友
+    explore_mastodon: 探索%{title}
+  domain_validator:
+    invalid_domain: 並非一個有效域名
   errors:
-    '400': The request you submitted was invalid or malformed.
+    '400': 你所送出的請求無效或格式不正確。
     '403': 你沒有觀看這個頁面的權限。
     '404': 您所尋找的網頁不存在。
-    '406': This page is not available in the requested format.
+    '406': 此頁面無法以請求的格式顯示。
     '410': 您所尋找的網頁此處已不存在。
     '422':
       content: 安全驗證失敗。請確定有開啟瀏覽器 Cookies 功能?
@@ -763,8 +794,11 @@ zh-TW:
     '500':
       content: 抱歉,我們的後台出現問題了。
       title: 這個頁面有問題
-    '503': The page could not be served due to a temporary server failure.
+    '503': 此頁面因伺服器暫時發生錯誤而無法提供。
     noscript_html: 使用 Mastodon 網頁版應用需要啟用 JavaScript。你也可以選擇適用於你的平台的 <a href="%{apps_path}">Mastodon 應用</a>。
+  existing_username_validator:
+    not_found: 無法在本站找到這個名稱的使用者
+    not_found_multiple: 揣嘸 %{usernames}
   exports:
     archive_takeout:
       date: 日期
@@ -774,30 +808,86 @@ zh-TW:
       request: 下載存檔
       size: 大小
     blocks: 您封鎖的使用者
+    bookmarks: 書籤
     csv: CSV
+    domain_blocks: 域名封鎖
     lists: 列表
     mutes: 您靜音的使用者
     storage: 儲存空間大小
   featured_tags:
+    add_new: 追加
+    errors:
+      limit: 你所推薦的標籤數量已經達到上限
     hint_html: "<strong>推薦標籤是什麼?</strong> 這些標籤將顯示於您的公開個人檔案頁,訪客可以藉此閱覽您標示了這些標籤的嘟文,拿來展示創意作品或者長期更新的專案很好用唷!"
   filters:
+    contexts:
+      account: 個人資料
+      home: 首頁時間軸
+      notifications: 通知
+      public: 公開時間軸
+      thread: 會話
+    edit:
+      title: 編輯篩選條件
+    errors:
+      invalid_context: 沒有提供內文或內文無效
+      invalid_irreversible: 此功能僅適用於首頁或通知頁面
     index:
+      delete: 刪除
       empty: 您沒有過濾器。
       title: 過濾器
+    new:
+      title: 新增篩選器
   footer:
+    developers: 開發者
     more: 更多......
+    resources: 資源
     trending_now: 現正熱門
   generic:
     all: 全部
     changes_saved_msg: 已成功儲存修改!
     copy: 複製
     delete: 刪除
+    no_batch_actions_available: 此頁面目前沒有可用的批次作業
+    order_by: 排序
     save_changes: 儲存修改
+    validation_errors:
+      other: 唔…這是什麼鳥?請檢查以下 %{count} 項錯誤
+  html_validator:
+    invalid_markup: 含有無效的 HTML 語法:%{error}
+  identity_proofs:
+    active: 有效
+    authorize: 是的,請授權
+    authorize_connection_prompt: 授權此加密連接?
+    errors:
+      failed: 加密連接失敗。請於 %{provider} 重試。
+      keybase:
+        invalid_token: Keybase 標記必須為雜湊加密簽章並且由66個十六進位字符組成。
+        verification_failed: Keybase 無法確認此標記為 Keybase 使用者 %{kb_username} 的簽章。請在 Keybase 再試一次。
+      wrong_user: 未能為%{current} 以 %{proving} 建立身分驗證。請登入為 %{proving} 再試一次。
+    explanation_html: 在此你連結其他網路平台(如 Keybase)上的加密身分。讓其他人可以在那些平台上,傳送加密訊息給你,並驗證你的身分。
+    i_am_html: 我是 %{service} 上的 %{username}
+    identity: 身份
+    inactive: 非活躍
+    publicize_checkbox: 並發嘟:
+    publicize_toot: 驗證成功!我在是住在 %{service} 的 %{username} : %{url}
+    remove: 移除帳號證明
+    removed: 成功移除帳號證明
+    status: 驗證狀態
+    view_proof: 檢視證明
   imports:
+    errors:
+      over_rows_processing_limit: 含有超過 %{count} 行
+    modes:
+      merge: 合併
+      merge_long: 保留現有記錄並新增紀錄
+      overwrite: 覆蓋
+      overwrite_long: 以新的紀錄覆蓋目前紀錄
     preface: 您可以在此匯入您在其他伺服器所匯出的資料檔,包括關注的使用者、封鎖的使用者名單。
     success: 資料檔上傳成功,正在匯入,請稍候
     types:
       blocking: 您封鎖的使用者名單
+      bookmarks: 我的最愛
+      domain_blocking: 域名封鎖名單
       following: 您關注的使用者名單
       muting: 您靜音的使用者名單
     upload: 上傳
@@ -815,6 +905,8 @@ zh-TW:
     expires_in_prompt: 永不過期
     generate: 建立邀請連結
     invited_by: 你的邀請人是:
+    max_uses:
+      other: "%{count} 則"
     max_uses_prompt: 無限制
     prompt: 建立分享連結,邀請他人在本伺服器註冊
     table:
@@ -827,9 +919,21 @@ zh-TW:
   media_attachments:
     validations:
       images_and_video: 無法在已有圖片的文章上加入影片
+      not_ready: 修但幾勒!不能附加未完成處理的檔案欸,咁按呢?
       too_many: 無法加入超過 4 個檔案
   migrations:
     acct: 新帳戶的 使用者名稱@站點網域
+    cancel: 取消重導向
+    cancel_explanation: 取消重導向將會重新啓用目前帳號,但不會還原已移至該帳號的關注者。
+    cancelled_msg: 成功取消重導向。
+    errors:
+      already_moved: 與已經重導向的帳戶相同
+      missing_also_known_as: 不是這個帳號的別名
+      move_to_self: 不能是目前帳號
+      not_found: 找不到
+      on_cooldown: 你正在處於冷卻(CD)狀態
+    followers_count: 轉移時的追隨者
+    incoming_migrations: 自另一個帳號轉移
     proceed_with_move: 移動關注者
     redirected_msg: 您的帳號現在指向 %{acct}
   moderation:
@@ -866,23 +970,11 @@ zh-TW:
     email_events: 電子郵件通知設定
     email_events_hint: 選取你想接收通知的事件:
     other_settings: 其他通知設定
-  number:
-    human:
-      decimal_units:
-        format: "%n%u"
-        units:
-          billion: B
-          million: M
-          quadrillion: Q
-          thousand: K
-          trillion: T
   pagination:
     newer: 較新
     next: 下一頁
     older: 較舊
     prev: 上一頁
-  preferences:
-    other: 其他設定
   remote_follow:
     acct: 請輸入您的使用者名稱@站點網域
     missing_resource: 無法找到資源
@@ -914,7 +1006,6 @@ zh-TW:
     explanation: 這些是現在正登入於你的 Mastodon 帳戶的瀏覽器。
     ip: IP 位址
     platforms:
-      ios: iOS
       mac: Mac
     revoke: 取消
     revoke_success: Session 取消成功
@@ -1003,9 +1094,6 @@ zh-TW:
       tips: 小幫手
       title: "%{name} 歡迎你的加入!"
   users:
-    blocked_email_provider: 不允許使用這個電子信箱提供者
-    invalid_email: 電子信箱位址不正確
-    invalid_email_mx: 似乎沒有這個電子信箱地址
     invalid_otp_token: 兩階段認證碼不正確
     otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫
     seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。
diff --git a/config/navigation.rb b/config/navigation.rb
index 0bb3189c1..c626b09ee 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -45,6 +45,7 @@ SimpleNavigation::Configuration.run do |navigation|
       s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts}
       s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path
       s.item :tags, safe_join([fa_icon('hashtag fw'), t('admin.tags.title')]), admin_tags_path, highlights_on: %r{/admin/tags}
+      s.item :follow_recommendations, safe_join([fa_icon('user-plus fw'), t('admin.follow_recommendations.title')]), admin_follow_recommendations_path, highlights_on: %r{/admin/follow_recommendations}
       s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: whitelist_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.admin? }
       s.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? }
       s.item :ip_blocks, safe_join([fa_icon('ban fw'), t('admin.ip_blocks.title')]), admin_ip_blocks_url, highlights_on: %r{/admin/ip_blocks}, if: -> { current_user.admin? }
diff --git a/config/routes.rb b/config/routes.rb
index 8ec67113b..cabc0f0a0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -3,8 +3,6 @@
 require 'sidekiq_unique_jobs/web'
 require 'sidekiq-scheduler/web'
 
-Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base]
-
 Rails.application.routes.draw do
   root 'home#index'
 
@@ -99,8 +97,6 @@ Rails.application.routes.draw do
   post '/interact/:id', to: 'remote_interaction#create'
 
   get '/explore', to: 'directories#index', as: :explore
-  get '/explore/:id', to: 'directories#show', as: :explore_hashtag
-
   get '/settings', to: redirect('/settings/profile')
 
   namespace :settings do
@@ -221,7 +217,14 @@ Rails.application.routes.draw do
       end
     end
 
-    resources :instances, only: [:index, :show], constraints: { id: /[^\/]+/ }
+    resources :instances, only: [:index, :show], constraints: { id: /[^\/]+/ } do
+      member do
+        post :clear_delivery_errors
+        post :restart_delivery
+        post :stop_delivery
+      end
+    end
+  
     resources :rules
 
     resources :reports, only: [:index, :show] do
@@ -296,6 +299,7 @@ Rails.application.routes.draw do
     end
 
     resources :account_moderation_notes, only: [:create, :destroy]
+    resource :follow_recommendations, only: [:show, :update]
 
     resources :tags, only: [:index, :show, :update] do
       collection do
@@ -513,6 +517,7 @@ Rails.application.routes.draw do
     namespace :v2 do
       resources :media, only: [:create]
       get '/search', to: 'search#index', as: :search
+      resources :suggestions, only: [:index]
     end
 
     namespace :web do
diff --git a/config/settings.yml b/config/settings.yml
index 1d9488052..953e7b3eb 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -67,7 +67,6 @@ defaults: &defaults
     - mod
     - moderator
   disallowed_hashtags: # space separated string or list of hashtags without the hash
-  enable_bootstrap_timeline_accounts: true
   bootstrap_timeline_accounts: ''
   activity_api_enabled: true
   peers_api_enabled: true
@@ -75,7 +74,6 @@ defaults: &defaults
   show_reblogs_in_public_timelines: false
   show_replies_in_public_timelines: false
   default_content_type: 'text/plain'
-  spam_check_enabled: true
   show_domain_blocks: 'disabled'
   show_domain_blocks_rationale: 'disabled'
   outgoing_spoilers: ''
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 010923717..a8e4c7feb 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -25,6 +25,10 @@
     cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * *'
     class: Scheduler::FeedCleanupScheduler
     queue: scheduler
+  follow_recommendations_scheduler:
+    cron: '<%= Random.rand(0..59) %> <%= Random.rand(6..9) %> * * *'
+    class: Scheduler::FollowRecommendationsScheduler
+    queue: scheduler
   doorkeeper_cleanup_scheduler:
     cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * 0'
     class: Scheduler::DoorkeeperCleanupScheduler
diff --git a/db/migrate/20210306164523_account_ids_to_timestamp_ids.rb b/db/migrate/20210306164523_account_ids_to_timestamp_ids.rb
new file mode 100644
index 000000000..39cd4cdea
--- /dev/null
+++ b/db/migrate/20210306164523_account_ids_to_timestamp_ids.rb
@@ -0,0 +1,17 @@
+class AccountIdsToTimestampIds < ActiveRecord::Migration[5.1]
+  def up
+    # Set up the accounts.id column to use our timestamp-based IDs.
+    safety_assured do
+      execute("ALTER TABLE accounts ALTER COLUMN id SET DEFAULT timestamp_id('accounts')")
+    end
+
+    # Make sure we have a sequence to use.
+    Mastodon::Snowflake.ensure_id_sequences_exist
+  end
+
+  def down
+    execute("LOCK accounts")
+    execute("SELECT setval('accounts_id_seq', (SELECT MAX(id) FROM accounts))")
+    execute("ALTER TABLE accounts ALTER COLUMN id SET DEFAULT nextval('accounts_id_seq')")
+  end
+end
diff --git a/db/migrate/20210322164601_create_account_summaries.rb b/db/migrate/20210322164601_create_account_summaries.rb
new file mode 100644
index 000000000..bc9011113
--- /dev/null
+++ b/db/migrate/20210322164601_create_account_summaries.rb
@@ -0,0 +1,9 @@
+class CreateAccountSummaries < ActiveRecord::Migration[5.2]
+  def change
+    create_view :account_summaries, materialized: { no_data: true }
+
+    # To be able to refresh the view concurrently,
+    # at least one unique index is required
+    safety_assured { add_index :account_summaries, :account_id, unique: true }
+  end
+end
diff --git a/db/migrate/20210323114347_create_follow_recommendations.rb b/db/migrate/20210323114347_create_follow_recommendations.rb
new file mode 100644
index 000000000..77e729032
--- /dev/null
+++ b/db/migrate/20210323114347_create_follow_recommendations.rb
@@ -0,0 +1,5 @@
+class CreateFollowRecommendations < ActiveRecord::Migration[5.2]
+  def change
+    create_view :follow_recommendations
+  end
+end
diff --git a/db/migrate/20210324171613_create_follow_recommendation_suppressions.rb b/db/migrate/20210324171613_create_follow_recommendation_suppressions.rb
new file mode 100644
index 000000000..c17a0be63
--- /dev/null
+++ b/db/migrate/20210324171613_create_follow_recommendation_suppressions.rb
@@ -0,0 +1,9 @@
+class CreateFollowRecommendationSuppressions < ActiveRecord::Migration[6.1]
+  def change
+    create_table :follow_recommendation_suppressions do |t|
+      t.references :account, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true }
+
+      t.timestamps
+    end
+  end
+end
diff --git a/db/migrate/20210416200740_create_canonical_email_blocks.rb b/db/migrate/20210416200740_create_canonical_email_blocks.rb
new file mode 100644
index 000000000..a1f1660bf
--- /dev/null
+++ b/db/migrate/20210416200740_create_canonical_email_blocks.rb
@@ -0,0 +1,10 @@
+class CreateCanonicalEmailBlocks < ActiveRecord::Migration[6.1]
+  def change
+    create_table :canonical_email_blocks do |t|
+      t.string :canonical_email_hash, null: false, default: '', index: { unique: true }
+      t.belongs_to :reference_account, null: false, foreign_key: { on_cascade: :delete, to_table: 'accounts' }
+
+      t.timestamps
+    end
+  end
+end
diff --git a/db/migrate/20210421121431_add_case_insensitive_btree_index_to_tags.rb b/db/migrate/20210421121431_add_case_insensitive_btree_index_to_tags.rb
new file mode 100644
index 000000000..ed359e8cd
--- /dev/null
+++ b/db/migrate/20210421121431_add_case_insensitive_btree_index_to_tags.rb
@@ -0,0 +1,13 @@
+class AddCaseInsensitiveBtreeIndexToTags < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    safety_assured { execute 'CREATE UNIQUE INDEX CONCURRENTLY index_tags_on_name_lower_btree ON tags (lower(name) text_pattern_ops)' }
+    remove_index :tags, name: 'index_tags_on_name_lower'
+  end
+
+  def down
+    safety_assured { execute 'CREATE UNIQUE INDEX CONCURRENTLY index_tags_on_name_lower ON tags (lower(name))' }
+    remove_index :tags, name: 'index_tags_on_name_lower_btree'
+  end
+end
diff --git a/db/migrate/20210425135952_add_index_on_media_attachments_account_id_status_id.rb b/db/migrate/20210425135952_add_index_on_media_attachments_account_id_status_id.rb
new file mode 100644
index 000000000..5ef2d3c39
--- /dev/null
+++ b/db/migrate/20210425135952_add_index_on_media_attachments_account_id_status_id.rb
@@ -0,0 +1,13 @@
+class AddIndexOnMediaAttachmentsAccountIdStatusId < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    add_index :media_attachments, [:account_id, :status_id], order: { status_id: :desc }, algorithm: :concurrently
+    remove_index :media_attachments, :account_id, algorithm: :concurrently
+  end
+
+  def down
+    add_index :media_attachments, :account_id, algorithm: :concurrently
+    remove_index :media_attachments, [:account_id, :status_id], order: { status_id: :desc }, algorithm: :concurrently
+  end
+end
diff --git a/db/migrate/20210505174616_update_follow_recommendations_to_version_2.rb b/db/migrate/20210505174616_update_follow_recommendations_to_version_2.rb
new file mode 100644
index 000000000..56c0b4cb0
--- /dev/null
+++ b/db/migrate/20210505174616_update_follow_recommendations_to_version_2.rb
@@ -0,0 +1,18 @@
+class UpdateFollowRecommendationsToVersion2 < ActiveRecord::Migration[6.1]
+  # We're switching from a normal to a materialized view so we need
+  # custom `up` and `down` paths.
+
+  def up
+    drop_view :follow_recommendations
+    create_view :follow_recommendations, version: 2, materialized: { no_data: true }
+
+    # To be able to refresh the view concurrently,
+    # at least one unique index is required
+    safety_assured { add_index :follow_recommendations, :account_id, unique: true }
+  end
+
+  def down
+    drop_view :follow_recommendations, materialized: true
+    create_view :follow_recommendations, version: 1
+  end
+end
diff --git a/db/post_migrate/20210502233513_drop_account_tag_stats.rb b/db/post_migrate/20210502233513_drop_account_tag_stats.rb
new file mode 100644
index 000000000..80adadcab
--- /dev/null
+++ b/db/post_migrate/20210502233513_drop_account_tag_stats.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class DropAccountTagStats < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    drop_table :account_tag_stats
+  end
+
+  def down
+    raise ActiveRecord::IrreversibleMigration
+  end
+end
diff --git a/db/post_migrate/20210507001928_remove_hub_url_from_accounts.rb b/db/post_migrate/20210507001928_remove_hub_url_from_accounts.rb
new file mode 100644
index 000000000..83a1f5fcf
--- /dev/null
+++ b/db/post_migrate/20210507001928_remove_hub_url_from_accounts.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+class RemoveHubURLFromAccounts < ActiveRecord::Migration[5.2]
+  def change
+    safety_assured do
+      remove_column :accounts, :secret, :string, null: false, default: ''
+      remove_column :accounts, :remote_url, :string, null: false, default: ''
+      remove_column :accounts, :salmon_url, :string, null: false, default: ''
+      remove_column :accounts, :hub_url, :string, null: false, default: ''
+    end
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4c67353fb..5cf5f665d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -2,15 +2,15 @@
 # of editing this file, please use the migrations feature of Active Record to
 # incrementally modify your database, and then regenerate this schema definition.
 #
-# Note that this schema.rb definition is the authoritative source for your
-# database schema. If you need to create the application database on another
-# system, you should be using db:schema:load, not running all the migrations
-# from scratch. The latter is a flawed and unsustainable approach (the more migrations
-# you'll amass, the slower it'll run and the greater likelihood for issues).
+# This file is the source Rails uses to define your schema when running `bin/rails
+# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
+# be faster and is potentially less error prone than running all of your
+# migrations from scratch. Old migrations may fail to apply correctly if those
+# migrations use external dependencies or application code.
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2021_03_08_133107) do
+ActiveRecord::Schema.define(version: 2021_05_07_001928) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -115,15 +115,6 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true
   end
 
-  create_table "account_tag_stats", force: :cascade do |t|
-    t.bigint "tag_id", null: false
-    t.bigint "accounts_count", default: 0, null: false
-    t.boolean "hidden", default: false, null: false
-    t.datetime "created_at", null: false
-    t.datetime "updated_at", null: false
-    t.index ["tag_id"], name: "index_account_tag_stats_on_tag_id", unique: true
-  end
-
   create_table "account_warning_presets", force: :cascade do |t|
     t.text "text", default: "", null: false
     t.datetime "created_at", null: false
@@ -142,15 +133,11 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.index ["target_account_id"], name: "index_account_warnings_on_target_account_id"
   end
 
-  create_table "accounts", force: :cascade do |t|
+  create_table "accounts", id: :bigint, default: -> { "timestamp_id('accounts'::text)" }, force: :cascade do |t|
     t.string "username", default: "", null: false
     t.string "domain"
-    t.string "secret", default: "", null: false
     t.text "private_key"
     t.text "public_key", default: "", null: false
-    t.string "remote_url", default: "", null: false
-    t.string "salmon_url", default: "", null: false
-    t.string "hub_url", default: "", null: false
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
     t.text "note", default: "", null: false
@@ -280,6 +267,15 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.index ["status_id"], name: "index_bookmarks_on_status_id"
   end
 
+  create_table "canonical_email_blocks", force: :cascade do |t|
+    t.string "canonical_email_hash", default: "", null: false
+    t.bigint "reference_account_id", null: false
+    t.datetime "created_at", precision: 6, null: false
+    t.datetime "updated_at", precision: 6, null: false
+    t.index ["canonical_email_hash"], name: "index_canonical_email_blocks_on_canonical_email_hash", unique: true
+    t.index ["reference_account_id"], name: "index_canonical_email_blocks_on_reference_account_id"
+  end
+
   create_table "conversation_mutes", force: :cascade do |t|
     t.bigint "conversation_id", null: false
     t.bigint "account_id", null: false
@@ -406,6 +402,13 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.index ["tag_id"], name: "index_featured_tags_on_tag_id"
   end
 
+  create_table "follow_recommendation_suppressions", force: :cascade do |t|
+    t.bigint "account_id", null: false
+    t.datetime "created_at", precision: 6, null: false
+    t.datetime "updated_at", precision: 6, null: false
+    t.index ["account_id"], name: "index_follow_recommendation_suppressions_on_account_id", unique: true
+  end
+
   create_table "follow_requests", force: :cascade do |t|
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
@@ -525,7 +528,7 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.integer "thumbnail_file_size"
     t.datetime "thumbnail_updated_at"
     t.string "thumbnail_remote_url"
-    t.index ["account_id"], name: "index_media_attachments_on_account_id"
+    t.index ["account_id", "status_id"], name: "index_media_attachments_on_account_id_and_status_id", order: { status_id: :desc }
     t.index ["scheduled_status_id"], name: "index_media_attachments_on_scheduled_status_id"
     t.index ["shortcode"], name: "index_media_attachments_on_shortcode", unique: true
     t.index ["status_id"], name: "index_media_attachments_on_status_id"
@@ -848,7 +851,7 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
     t.datetime "last_status_at"
     t.float "max_score"
     t.datetime "max_score_at"
-    t.index "lower((name)::text)", name: "index_tags_on_name_lower", unique: true
+    t.index "lower((name)::text) text_pattern_ops", name: "index_tags_on_name_lower_btree", unique: true
   end
 
   create_table "tombstones", force: :cascade do |t|
@@ -971,7 +974,6 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
   add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade
   add_foreign_key "account_pins", "accounts", on_delete: :cascade
   add_foreign_key "account_stats", "accounts", on_delete: :cascade
-  add_foreign_key "account_tag_stats", "tags", on_delete: :cascade
   add_foreign_key "account_warnings", "accounts", column: "target_account_id", on_delete: :cascade
   add_foreign_key "account_warnings", "accounts", on_delete: :nullify
   add_foreign_key "accounts", "accounts", column: "moved_to_account_id", on_delete: :nullify
@@ -986,6 +988,7 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
   add_foreign_key "blocks", "accounts", name: "fk_4269e03e65", on_delete: :cascade
   add_foreign_key "bookmarks", "accounts", on_delete: :cascade
   add_foreign_key "bookmarks", "statuses", on_delete: :cascade
+  add_foreign_key "canonical_email_blocks", "accounts", column: "reference_account_id"
   add_foreign_key "conversation_mutes", "accounts", name: "fk_225b4212bb", on_delete: :cascade
   add_foreign_key "conversation_mutes", "conversations", on_delete: :cascade
   add_foreign_key "custom_filters", "accounts", on_delete: :cascade
@@ -998,6 +1001,7 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
   add_foreign_key "favourites", "statuses", name: "fk_b0e856845e", on_delete: :cascade
   add_foreign_key "featured_tags", "accounts", on_delete: :cascade
   add_foreign_key "featured_tags", "tags", on_delete: :cascade
+  add_foreign_key "follow_recommendation_suppressions", "accounts", on_delete: :cascade
   add_foreign_key "follow_requests", "accounts", column: "target_account_id", name: "fk_9291ec025d", on_delete: :cascade
   add_foreign_key "follow_requests", "accounts", name: "fk_76d644b0e7", on_delete: :cascade
   add_foreign_key "follows", "accounts", column: "target_account_id", name: "fk_745ca29eac", on_delete: :cascade
@@ -1081,4 +1085,51 @@ ActiveRecord::Schema.define(version: 2021_03_08_133107) do
   SQL
   add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true
 
+  create_view "account_summaries", materialized: true, sql_definition: <<-SQL
+      SELECT accounts.id AS account_id,
+      mode() WITHIN GROUP (ORDER BY t0.language) AS language,
+      mode() WITHIN GROUP (ORDER BY t0.sensitive) AS sensitive
+     FROM (accounts
+       CROSS JOIN LATERAL ( SELECT statuses.account_id,
+              statuses.language,
+              statuses.sensitive
+             FROM statuses
+            WHERE ((statuses.account_id = accounts.id) AND (statuses.deleted_at IS NULL))
+            ORDER BY statuses.id DESC
+           LIMIT 20) t0)
+    WHERE ((accounts.suspended_at IS NULL) AND (accounts.silenced_at IS NULL) AND (accounts.moved_to_account_id IS NULL) AND (accounts.discoverable = true) AND (accounts.locked = false))
+    GROUP BY accounts.id;
+  SQL
+  add_index "account_summaries", ["account_id"], name: "index_account_summaries_on_account_id", unique: true
+
+  create_view "follow_recommendations", materialized: true, sql_definition: <<-SQL
+      SELECT t0.account_id,
+      sum(t0.rank) AS rank,
+      array_agg(t0.reason) AS reason
+     FROM ( SELECT account_summaries.account_id,
+              ((count(follows.id))::numeric / (1.0 + (count(follows.id))::numeric)) AS rank,
+              'most_followed'::text AS reason
+             FROM (((follows
+               JOIN account_summaries ON ((account_summaries.account_id = follows.target_account_id)))
+               JOIN users ON ((users.account_id = follows.account_id)))
+               LEFT JOIN follow_recommendation_suppressions ON ((follow_recommendation_suppressions.account_id = follows.target_account_id)))
+            WHERE ((users.current_sign_in_at >= (now() - 'P30D'::interval)) AND (account_summaries.sensitive = false) AND (follow_recommendation_suppressions.id IS NULL))
+            GROUP BY account_summaries.account_id
+           HAVING (count(follows.id) >= 5)
+          UNION ALL
+           SELECT account_summaries.account_id,
+              (sum((status_stats.reblogs_count + status_stats.favourites_count)) / (1.0 + sum((status_stats.reblogs_count + status_stats.favourites_count)))) AS rank,
+              'most_interactions'::text AS reason
+             FROM (((status_stats
+               JOIN statuses ON ((statuses.id = status_stats.status_id)))
+               JOIN account_summaries ON ((account_summaries.account_id = statuses.account_id)))
+               LEFT JOIN follow_recommendation_suppressions ON ((follow_recommendation_suppressions.account_id = statuses.account_id)))
+            WHERE ((statuses.id >= (((date_part('epoch'::text, (now() - 'P30D'::interval)) * (1000)::double precision))::bigint << 16)) AND (account_summaries.sensitive = false) AND (follow_recommendation_suppressions.id IS NULL))
+            GROUP BY account_summaries.account_id
+           HAVING (sum((status_stats.reblogs_count + status_stats.favourites_count)) >= (5)::numeric)) t0
+    GROUP BY t0.account_id
+    ORDER BY (sum(t0.rank)) DESC;
+  SQL
+  add_index "follow_recommendations", ["account_id"], name: "index_follow_recommendations_on_account_id", unique: true
+
 end
diff --git a/db/views/account_summaries_v01.sql b/db/views/account_summaries_v01.sql
new file mode 100644
index 000000000..5a632b622
--- /dev/null
+++ b/db/views/account_summaries_v01.sql
@@ -0,0 +1,22 @@
+SELECT
+  accounts.id AS account_id,
+  mode() WITHIN GROUP (ORDER BY language ASC) AS language,
+  mode() WITHIN GROUP (ORDER BY sensitive ASC) AS sensitive
+FROM accounts
+CROSS JOIN LATERAL (
+  SELECT
+    statuses.account_id,
+    statuses.language,
+    statuses.sensitive
+  FROM statuses
+  WHERE statuses.account_id = accounts.id
+    AND statuses.deleted_at IS NULL
+  ORDER BY statuses.id DESC
+  LIMIT 20
+) t0
+WHERE accounts.suspended_at IS NULL
+  AND accounts.silenced_at IS NULL
+  AND accounts.moved_to_account_id IS NULL
+  AND accounts.discoverable = 't'
+  AND accounts.locked = 'f'
+GROUP BY accounts.id
diff --git a/db/views/follow_recommendations_v01.sql b/db/views/follow_recommendations_v01.sql
new file mode 100644
index 000000000..799abeaee
--- /dev/null
+++ b/db/views/follow_recommendations_v01.sql
@@ -0,0 +1,38 @@
+SELECT
+  account_id,
+  sum(rank) AS rank,
+  array_agg(reason) AS reason
+FROM (
+  SELECT
+    accounts.id AS account_id,
+    count(follows.id) / (1.0 + count(follows.id)) AS rank,
+    'most_followed' AS reason
+  FROM follows
+  INNER JOIN accounts ON accounts.id = follows.target_account_id
+  INNER JOIN users ON users.account_id = follows.account_id
+  WHERE users.current_sign_in_at >= (now() - interval '30 days')
+    AND accounts.suspended_at IS NULL
+    AND accounts.moved_to_account_id IS NULL
+    AND accounts.silenced_at IS NULL
+    AND accounts.locked = 'f'
+    AND accounts.discoverable = 't'
+  GROUP BY accounts.id
+  HAVING count(follows.id) >= 5
+  UNION ALL
+  SELECT accounts.id AS account_id,
+         sum(reblogs_count + favourites_count) / (1.0 + sum(reblogs_count + favourites_count)) AS rank,
+         'most_interactions' AS reason
+  FROM status_stats
+  INNER JOIN statuses ON statuses.id = status_stats.status_id
+  INNER JOIN accounts ON accounts.id = statuses.account_id
+  WHERE statuses.id >= ((date_part('epoch', now() - interval '30 days') * 1000)::bigint << 16)
+    AND accounts.suspended_at IS NULL
+    AND accounts.moved_to_account_id IS NULL
+    AND accounts.silenced_at IS NULL
+    AND accounts.locked = 'f'
+    AND accounts.discoverable = 't'
+  GROUP BY accounts.id
+  HAVING sum(reblogs_count + favourites_count) >= 5
+) t0
+GROUP BY account_id
+ORDER BY rank DESC
diff --git a/db/views/follow_recommendations_v02.sql b/db/views/follow_recommendations_v02.sql
new file mode 100644
index 000000000..673c5cc85
--- /dev/null
+++ b/db/views/follow_recommendations_v02.sql
@@ -0,0 +1,34 @@
+SELECT
+  account_id,
+  sum(rank) AS rank,
+  array_agg(reason) AS reason
+FROM (
+  SELECT
+    account_summaries.account_id AS account_id,
+    count(follows.id) / (1.0 + count(follows.id)) AS rank,
+    'most_followed' AS reason
+  FROM follows
+  INNER JOIN account_summaries ON account_summaries.account_id = follows.target_account_id
+  INNER JOIN users ON users.account_id = follows.account_id
+  LEFT OUTER JOIN follow_recommendation_suppressions ON follow_recommendation_suppressions.account_id = follows.target_account_id
+  WHERE users.current_sign_in_at >= (now() - interval '30 days')
+    AND account_summaries.sensitive = 'f'
+    AND follow_recommendation_suppressions.id IS NULL
+  GROUP BY account_summaries.account_id
+  HAVING count(follows.id) >= 5
+  UNION ALL
+  SELECT account_summaries.account_id AS account_id,
+         sum(reblogs_count + favourites_count) / (1.0 + sum(reblogs_count + favourites_count)) AS rank,
+         'most_interactions' AS reason
+  FROM status_stats
+  INNER JOIN statuses ON statuses.id = status_stats.status_id
+  INNER JOIN account_summaries ON account_summaries.account_id = statuses.account_id
+  LEFT OUTER JOIN follow_recommendation_suppressions ON follow_recommendation_suppressions.account_id = statuses.account_id
+  WHERE statuses.id >= ((date_part('epoch', now() - interval '30 days') * 1000)::bigint << 16)
+    AND account_summaries.sensitive = 'f'
+    AND follow_recommendation_suppressions.id IS NULL
+  GROUP BY account_summaries.account_id
+  HAVING sum(reblogs_count + favourites_count) >= 5
+) t0
+GROUP BY account_id
+ORDER BY rank DESC
diff --git a/dist/mastodon-sidekiq.service b/dist/mastodon-sidekiq.service
index 0bb0a800f..9dd21b8a0 100644
--- a/dist/mastodon-sidekiq.service
+++ b/dist/mastodon-sidekiq.service
@@ -38,7 +38,7 @@ PrivateMounts=true
 ProtectClock=true
 # System Call Filtering
 SystemCallArchitectures=native
-SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @reboot @resources @setuid @swap
+SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @reboot @setuid @swap
 
 [Install]
 WantedBy=multi-user.target
diff --git a/dist/mastodon-streaming.service b/dist/mastodon-streaming.service
index 1443ca1c8..0befc529a 100644
--- a/dist/mastodon-streaming.service
+++ b/dist/mastodon-streaming.service
@@ -38,7 +38,7 @@ PrivateMounts=true
 ProtectClock=true
 # System Call Filtering
 SystemCallArchitectures=native
-SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @reboot @resources @setuid @swap
+SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @privileged @raw-io @reboot @resources @setuid @swap
 
 [Install]
 WantedBy=multi-user.target
diff --git a/dist/mastodon-web.service b/dist/mastodon-web.service
index 3383f33e3..c106a4860 100644
--- a/dist/mastodon-web.service
+++ b/dist/mastodon-web.service
@@ -38,7 +38,7 @@ PrivateMounts=true
 ProtectClock=true
 # System Call Filtering
 SystemCallArchitectures=native
-SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @reboot @resources @setuid @swap
+SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @reboot @resources @setuid @swap
 
 [Install]
 WantedBy=multi-user.target
diff --git a/lib/active_record/batches.rb b/lib/active_record/batches.rb
new file mode 100644
index 000000000..55d29e52e
--- /dev/null
+++ b/lib/active_record/batches.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module ActiveRecord
+  module Batches
+    def pluck_each(*column_names)
+      relation = self
+
+      options = column_names.extract_options!
+
+      flatten     = column_names.size == 1
+      batch_limit = options[:batch_limit] || 1_000
+      order       = options[:order] || :asc
+
+      column_names.unshift(primary_key)
+
+      relation = relation.reorder(batch_order(order)).limit(batch_limit)
+      relation.skip_query_cache!
+
+      batch_relation = relation
+
+      loop do
+        batch = batch_relation.pluck(*column_names)
+
+        break if batch.empty?
+
+        primary_key_offset = batch.last[0]
+
+        batch.each do |record|
+          if flatten
+            yield record[1]
+          else
+            yield record[1..-1]
+          end
+        end
+
+        break if batch.size < batch_limit
+
+        batch_relation = relation.where(
+          predicate_builder[primary_key, primary_key_offset, order == :desc ? :lt : :gt]
+        )
+      end
+    end
+  end
+end
diff --git a/lib/exceptions.rb b/lib/exceptions.rb
index 7c8e77871..eb472abaa 100644
--- a/lib/exceptions.rb
+++ b/lib/exceptions.rb
@@ -12,7 +12,11 @@ module Mastodon
   class RateLimitExceededError < Error; end
 
   class UnexpectedResponseError < Error
+    attr_reader :response
+
     def initialize(response = nil)
+      @response = response
+
       if response.respond_to? :uri
         super("#{response.uri} returned code #{response.code}")
       else
diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb
index 147642a1c..521d903bf 100644
--- a/lib/mastodon/migration_helpers.rb
+++ b/lib/mastodon/migration_helpers.rb
@@ -95,7 +95,7 @@ module Mastodon
             allow_null: options[:null]
           )
         else
-          add_column(table_name, column_name, :datetime_with_timezone, options)
+          add_column(table_name, column_name, :datetime_with_timezone, **options)
         end
       end
     end
@@ -120,7 +120,7 @@ module Mastodon
       options = options.merge({ algorithm: :concurrently })
       disable_statement_timeout
 
-      add_index(table_name, column_name, options)
+      add_index(table_name, column_name, **options)
     end
 
     # Removes an existed index, concurrently when supported
@@ -144,7 +144,7 @@ module Mastodon
         disable_statement_timeout
       end
 
-      remove_index(table_name, options.merge({ column: column_name }))
+      remove_index(table_name, **options.merge({ column: column_name }))
     end
 
     # Removes an existing index, concurrently when supported
@@ -168,7 +168,7 @@ module Mastodon
         disable_statement_timeout
       end
 
-      remove_index(table_name, options.merge({ name: index_name }))
+      remove_index(table_name, **options.merge({ name: index_name }))
     end
 
     # Only available on Postgresql >= 9.2
@@ -472,7 +472,7 @@ module Mastodon
         col_opts[:limit] = old_col.limit
       end
 
-      add_column(table, new, new_type, col_opts)
+      add_column(table, new, new_type, **col_opts)
 
       # We set the default value _after_ adding the column so we don't end up
       # updating any existing data with the default value. This isn't
@@ -510,10 +510,10 @@ module Mastodon
         new_pk_index_name = "index_#{table}_on_#{column}_cm"
 
         unless indexes_for(table, column).find{|i| i.name == old_pk_index_name}
-          add_concurrent_index(table, [temp_column], {
+          add_concurrent_index(table, [temp_column],
             unique: true,
             name: new_pk_index_name
-          })
+          )
         end
       end
     end
@@ -763,7 +763,7 @@ module Mastodon
         options[:using] = index.using if index.using
         options[:where] = index.where if index.where
 
-        add_concurrent_index(table, new_columns, options)
+        add_concurrent_index(table, new_columns, **options)
       end
     end
 
diff --git a/lib/mastodon/redis_config.rb b/lib/mastodon/redis_config.rb
index 3f2a8f7c2..5bfd26e34 100644
--- a/lib/mastodon/redis_config.rb
+++ b/lib/mastodon/redis_config.rb
@@ -22,13 +22,21 @@ end
 
 setup_redis_env_url
 setup_redis_env_url(:cache, false)
+setup_redis_env_url(:sidekiq, false)
 
-namespace       = ENV.fetch('REDIS_NAMESPACE', nil)
-cache_namespace = namespace ? namespace + '_cache' : 'cache'
+namespace         = ENV.fetch('REDIS_NAMESPACE', nil)
+cache_namespace   = namespace ? namespace + '_cache' : 'cache'
+sidekiq_namespace = namespace
 
 REDIS_CACHE_PARAMS = {
   driver: :hiredis,
-  url: ENV['REDIS_URL'],
+  url: ENV['CACHE_REDIS_URL'],
   expires_in: 10.minutes,
   namespace: cache_namespace,
 }.freeze
+
+REDIS_SIDEKIQ_PARAMS = {
+  driver: :hiredis,
+  url: ENV['SIDEKIQ_REDIS_URL'],
+  namespace: sidekiq_namespace,
+}.freeze
diff --git a/lib/mastodon/search_cli.rb b/lib/mastodon/search_cli.rb
index 22a0acec8..c0491744b 100644
--- a/lib/mastodon/search_cli.rb
+++ b/lib/mastodon/search_cli.rb
@@ -53,7 +53,9 @@ module Mastodon
         index.specification.lock!
       end
 
-      ActiveRecord::Base.configurations[Rails.env]['pool'] = options[:concurrency] + 1
+      db_config = ActiveRecord::Base.configurations[Rails.env].dup
+      db_config['pool'] = options[:concurrency] + 1
+      ActiveRecord::Base.establish_connection(db_config)
 
       pool    = Concurrent::FixedThreadPool.new(options[:concurrency])
       added   = Concurrent::AtomicFixnum.new(0)
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 970ee4fb2..255b369fb 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -9,7 +9,7 @@ module Mastodon
     end
 
     def minor
-      3
+      4
     end
 
     def patch
@@ -17,7 +17,7 @@ module Mastodon
     end
 
     def flags
-      ''
+      'rc1'
     end
 
     def suffix
diff --git a/lib/paperclip/attachment_extensions.rb b/lib/paperclip/attachment_extensions.rb
index e25a34213..271f8b603 100644
--- a/lib/paperclip/attachment_extensions.rb
+++ b/lib/paperclip/attachment_extensions.rb
@@ -2,6 +2,10 @@
 
 module Paperclip
   module AttachmentExtensions
+    def meta
+      instance_read(:meta)
+    end
+
     # We overwrite this method to support delayed processing in
     # Sidekiq. Since we process the original file to reduce disk
     # usage, and we still want to generate thumbnails straight
diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb
index 9f3c8e8be..74aa1a0b2 100644
--- a/lib/paperclip/gif_transcoder.rb
+++ b/lib/paperclip/gif_transcoder.rb
@@ -100,7 +100,8 @@ end
 
 module Paperclip
   # This transcoder is only to be used for the MediaAttachment model
-  # to convert animated gifs to webm
+  # to convert animated GIFs to videos
+
   class GifTranscoder < Paperclip::Processor
     def make
       return File.open(@file.path) unless needs_convert?
diff --git a/lib/paperclip/image_extractor.rb b/lib/paperclip/image_extractor.rb
index aab675a06..17fe4326f 100644
--- a/lib/paperclip/image_extractor.rb
+++ b/lib/paperclip/image_extractor.rb
@@ -31,21 +31,17 @@ module Paperclip
     private
 
     def extract_image_from_file!
-      ::Av.logger = Paperclip.logger
-
-      cli = ::Av.cli
       dst = Tempfile.new([File.basename(@file.path, '.*'), '.png'])
       dst.binmode
 
-      cli.add_source(@file.path)
-      cli.add_destination(dst.path)
-      cli.add_output_param loglevel: 'fatal'
-
       begin
-        cli.run
-      rescue Cocaine::ExitStatusError, ::Av::CommandError
+        command = Terrapin::CommandLine.new('ffmpeg', '-i :source -loglevel :loglevel -y :destination', logger: Paperclip.logger)
+        command.run(source: @file.path, destination: dst.path, loglevel: 'fatal')
+      rescue Terrapin::ExitStatusError
         dst.close(true)
         return nil
+      rescue Terrapin::CommandNotFoundError
+        raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffmpeg` command. Please install ffmpeg.'
       end
 
       dst
diff --git a/lib/paperclip/schema_extensions.rb b/lib/paperclip/schema_extensions.rb
new file mode 100644
index 000000000..8d065676a
--- /dev/null
+++ b/lib/paperclip/schema_extensions.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+# Monkey-patch various Paperclip methods for Ruby 3.0 compatibility
+
+module Paperclip
+  module Schema
+    module StatementsExtensions
+      def add_attachment(table_name, *attachment_names)
+        raise ArgumentError, 'Please specify attachment name in your add_attachment call in your migration.' if attachment_names.empty?
+
+        options = attachment_names.extract_options!
+
+        attachment_names.each do |attachment_name|
+          COLUMNS.each_pair do |column_name, column_type|
+            column_options = options.merge(options[column_name.to_sym] || {})
+            add_column(table_name, "#{attachment_name}_#{column_name}", column_type, **column_options)
+          end
+        end
+      end
+    end
+
+    module TableDefinitionExtensions
+      def attachment(*attachment_names)
+        options = attachment_names.extract_options!
+        attachment_names.each do |attachment_name|
+          COLUMNS.each_pair do |column_name, column_type|
+            column_options = options.merge(options[column_name.to_sym] || {})
+            column("#{attachment_name}_#{column_name}", column_type, **column_options)
+          end
+        end
+      end
+    end
+  end
+end
+
+Paperclip::Schema::Statements.prepend(Paperclip::Schema::StatementsExtensions)
+Paperclip::Schema::TableDefinition.prepend(Paperclip::Schema::TableDefinitionExtensions)
diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb
new file mode 100644
index 000000000..e99704086
--- /dev/null
+++ b/lib/paperclip/transcoder.rb
@@ -0,0 +1,102 @@
+# frozen_string_literal: true
+
+module Paperclip
+  # This transcoder is only to be used for the MediaAttachment model
+  # to check when uploaded videos are actually gifv's
+  class Transcoder < Paperclip::Processor
+    def initialize(file, options = {}, attachment = nil)
+      super
+
+      @current_format      = File.extname(@file.path)
+      @basename            = File.basename(@file.path, @current_format)
+      @format              = options[:format]
+      @time                = options[:time] || 3
+      @passthrough_options = options[:passthrough_options]
+      @convert_options     = options[:convert_options].dup
+    end
+
+    def make
+      metadata = VideoMetadataExtractor.new(@file.path)
+
+      unless metadata.valid?
+        log("Unsupported file #{@file.path}")
+        return File.open(@file.path)
+      end
+
+      update_attachment_type(metadata)
+      update_options_from_metadata(metadata)
+
+      destination = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
+      destination.binmode
+
+      @output_options = @convert_options[:output]&.dup || {}
+      @input_options  = @convert_options[:input]&.dup  || {}
+
+      case @format.to_s
+      when /jpg$/, /jpeg$/, /png$/, /gif$/
+        @input_options['ss'] = @time
+
+        @output_options['f']       = 'image2'
+        @output_options['vframes'] = 1
+      when 'mp4'
+        @output_options['acodec'] = 'aac'
+        @output_options['strict'] = 'experimental'
+      end
+
+      command_arguments, interpolations = prepare_command(destination)
+
+      begin
+        command = Terrapin::CommandLine.new('ffmpeg', command_arguments.join(' '), logger: Paperclip.logger)
+        command.run(interpolations)
+      rescue Terrapin::ExitStatusError => e
+        raise Paperclip::Error, "Error while transcoding #{@basename}: #{e}"
+      rescue Terrapin::CommandNotFoundError
+        raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffmpeg` command. Please install ffmpeg.'
+      end
+
+      destination
+    end
+
+    private
+
+    def prepare_command(destination)
+      command_arguments  = ['-nostdin']
+      interpolations     = {}
+      interpolation_keys = 0
+
+      @input_options.each_pair do |key, value|
+        interpolation_key = interpolation_keys
+        command_arguments << "-#{key} :#{interpolation_key}"
+        interpolations[interpolation_key] = value
+        interpolation_keys += 1
+      end
+
+      command_arguments << '-i :source'
+      interpolations[:source] = @file.path
+
+      @output_options.each_pair do |key, value|
+        interpolation_key = interpolation_keys
+        command_arguments << "-#{key} :#{interpolation_key}"
+        interpolations[interpolation_key] = value
+        interpolation_keys += 1
+      end
+
+      command_arguments << '-y :destination'
+      interpolations[:destination] = destination.path
+
+      [command_arguments, interpolations]
+    end
+
+    def update_options_from_metadata(metadata)
+      return unless @passthrough_options && @passthrough_options[:video_codecs].include?(metadata.video_codec) && @passthrough_options[:audio_codecs].include?(metadata.audio_codec) && @passthrough_options[:colorspaces].include?(metadata.colorspace)
+
+      @format          = @passthrough_options[:options][:format] || @format
+      @time            = @passthrough_options[:options][:time]   || @time
+      @convert_options = @passthrough_options[:options][:convert_options].dup
+    end
+
+    def update_attachment_type(metadata)
+      @attachment.instance.type = MediaAttachment.types[:gifv] unless metadata.audio_codec
+    end
+  end
+end
diff --git a/lib/paperclip/transcoder_extensions.rb b/lib/paperclip/transcoder_extensions.rb
deleted file mode 100644
index c0b2447f3..000000000
--- a/lib/paperclip/transcoder_extensions.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-module Paperclip
-  module TranscoderExtensions
-    # Prevent the transcoder from modifying our meta hash
-    def initialize(file, options = {}, attachment = nil)
-      meta_value = attachment&.instance_read(:meta)
-      super
-      attachment&.instance_write(:meta, meta_value)
-    end
-  end
-end
-
-Paperclip::Transcoder.prepend(Paperclip::TranscoderExtensions)
diff --git a/lib/paperclip/validation_extensions.rb b/lib/paperclip/validation_extensions.rb
new file mode 100644
index 000000000..0df0434f6
--- /dev/null
+++ b/lib/paperclip/validation_extensions.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+# Monkey-patch various Paperclip validators for Ruby 3.0 compatibility
+
+module Paperclip
+  module Validators
+    module AttachmentSizeValidatorExtensions
+      def validate_each(record, attr_name, _value)
+        base_attr_name = attr_name
+        attr_name = "#{attr_name}_file_size".to_sym
+        value = record.send(:read_attribute_for_validation, attr_name)
+
+        if value.present?
+          options.slice(*Paperclip::Validators::AttachmentSizeValidator::AVAILABLE_CHECKS).each do |option, option_value|
+            option_value = option_value.call(record) if option_value.is_a?(Proc)
+            option_value = extract_option_value(option, option_value)
+
+            next if value.send(Paperclip::Validators::AttachmentSizeValidator::CHECKS[option], option_value)
+
+            error_message_key = options[:in] ? :in_between : option
+            [attr_name, base_attr_name].each do |error_attr_name|
+              record.errors.add(error_attr_name, error_message_key, **filtered_options(value).merge(
+                min: min_value_in_human_size(record),
+                max: max_value_in_human_size(record),
+                count: human_size(option_value)
+              ))
+            end
+          end
+        end
+      end
+    end
+
+    module AttachmentContentTypeValidatorExtensions
+      def mark_invalid(record, attribute, types)
+        record.errors.add attribute, :invalid, **options.merge({ types: types.join(', ') })
+      end
+    end
+
+    module AttachmentPresenceValidatorExtensions
+      def validate_each(record, attribute, _value)
+        if record.send("#{attribute}_file_name").blank?
+          record.errors.add(attribute, :blank, **options)
+        end
+      end
+    end
+
+    module AttachmentFileNameValidatorExtensions
+      def mark_invalid(record, attribute, patterns)
+        record.errors.add attribute, :invalid, options.merge({ names: patterns.join(', ') })
+      end
+    end
+  end
+end
+
+Paperclip::Validators::AttachmentSizeValidator.prepend(Paperclip::Validators::AttachmentSizeValidatorExtensions)
+Paperclip::Validators::AttachmentContentTypeValidator.prepend(Paperclip::Validators::AttachmentContentTypeValidatorExtensions)
+Paperclip::Validators::AttachmentPresenceValidator.prepend(Paperclip::Validators::AttachmentPresenceValidatorExtensions)
+Paperclip::Validators::AttachmentFileNameValidator.prepend(Paperclip::Validators::AttachmentFileNameValidatorExtensions)
diff --git a/lib/paperclip/video_transcoder.rb b/lib/paperclip/video_transcoder.rb
deleted file mode 100644
index 4d9544231..000000000
--- a/lib/paperclip/video_transcoder.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-module Paperclip
-  # This transcoder is only to be used for the MediaAttachment model
-  # to check when uploaded videos are actually gifv's
-  class VideoTranscoder < Paperclip::Processor
-    def make
-      movie = FFMPEG::Movie.new(@file.path)
-
-      attachment.instance.type = MediaAttachment.types[:gifv] unless movie.audio_codec
-
-      Paperclip::Transcoder.make(file, actual_options(movie), attachment)
-    end
-
-    private
-
-    def actual_options(movie)
-      opts = options[:passthrough_options]
-      if opts && opts[:video_codecs].include?(movie.video_codec) && opts[:audio_codecs].include?(movie.audio_codec) && opts[:colorspaces].include?(movie.colorspace)
-        opts[:options]
-      else
-        options
-      end
-    end
-  end
-end
diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake
index 7e6c1c8fc..b2a0d61de 100644
--- a/lib/tasks/db.rake
+++ b/lib/tasks/db.rake
@@ -22,7 +22,7 @@ namespace :db do
       unless %w(C POSIX).include?(ActiveRecord::Base.connection.select_one('SELECT datcollate FROM pg_database WHERE datname = current_database();')['datcollate'])
         warn <<~WARNING
           Your database collation is susceptible to index corruption.
-            (This warning does not indicate that index corruption has occured and can be ignored)
+            (This warning does not indicate that index corruption has occurred and can be ignored)
             (To learn more, visit: https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/)
         WARNING
       end
diff --git a/lib/tasks/emojis.rake b/lib/tasks/emojis.rake
index c8655cc47..a373e7652 100644
--- a/lib/tasks/emojis.rake
+++ b/lib/tasks/emojis.rake
@@ -91,7 +91,7 @@ namespace :emojis do
   desc 'Generate emoji variants with white borders'
   task :generate_borders do
     src = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json')
-    emojis = '🎱🐜⚫🖤⬛◼️◾◼️✒️▪️💣🎳📷📸♣️🕶️✴️🔌💂‍♀️📽️🍳🦍💂🔪🕳️🕹️🕋🖊️🖋️💂‍♂️🎤🎓🎥🎼♠️🎩🦃📼📹🎮🐃🏴🐞🕺📱📲👽⚾🐔☁️💨🕊️👀🍥👻🐐❕❔⛸️🌩️🔊🔇📃🌧️🐏🍚🍙🐓🐑💀☠️🌨️🔉🔈💬💭🏐🏳️⚪⬜◽◻️▫️'
+    emojis = '🎱🐜⚫🖤⬛◼️◾◼️✒️▪️💣🎳📷📸♣️🕶️✴️🔌💂‍♀️📽️🍳🦍💂🔪🕳️🕹️🕋🖊️🖋️💂‍♂️🎤🎓🎥🎼♠️🎩🦃📼📹🎮🐃🏴🐞🕺📱📲🚲👽⚾🐔☁️💨🕊️👀🍥👻🐐❕❔⛸️🌩️🔊🔇📃🌧️🐏🍚🍙🐓🐑💀☠️🌨️🔉🔈💬💭🏐🏳️⚪⬜◽◻️▫️'
 
     map = Oj.load(File.read(src))
 
diff --git a/lib/terrapin/multi_pipe_extensions.rb b/lib/terrapin/multi_pipe_extensions.rb
new file mode 100644
index 000000000..209f4ad6c
--- /dev/null
+++ b/lib/terrapin/multi_pipe_extensions.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: false
+
+require 'fcntl'
+
+module Terrapin
+  module MultiPipeExtensions
+    def initialize
+      @stdout_in, @stdout_out = IO.pipe
+      @stderr_in, @stderr_out = IO.pipe
+
+      clear_nonblocking_flags!
+    end
+
+    def pipe_options
+      # Add some flags to explicitly close the other end of the pipes
+      { out: @stdout_out, err: @stderr_out, @stdout_in => :close, @stderr_in => :close }
+    end
+
+    def read
+      # While we are patching Terrapin, fix child process potentially getting stuck on writing
+      # to stderr.
+
+      @stdout_output = +''
+      @stderr_output = +''
+
+      fds_to_read = [@stdout_in, @stderr_in]
+      until fds_to_read.empty?
+        rs, = IO.select(fds_to_read)
+
+        read_nonblocking!(@stdout_in, @stdout_output, fds_to_read) if rs.include?(@stdout_in)
+        read_nonblocking!(@stderr_in, @stderr_output, fds_to_read) if rs.include?(@stderr_in)
+      end
+    end
+
+    private
+
+    # @param [IO] io IO Stream to read until there is nothing to read
+    # @param [String] result Mutable string to which read values will be appended to
+    # @param [Array<IO>] fds_to_read Mutable array from which `io` should be removed on EOF
+    def read_nonblocking!(io, result, fds_to_read)
+      while (partial_result = io.read_nonblock(8192))
+        result << partial_result
+      end
+    rescue IO::WaitReadable
+      # Do nothing
+    rescue EOFError
+      fds_to_read.delete(io)
+    end
+
+    def clear_nonblocking_flags!
+      # Ruby 3.0 sets pipes to non-blocking mode, and resets the flags as
+      # needed when calling fork/exec-related syscalls, but posix-spawn does
+      # not currently do that, so we need to do it manually for the time being
+      # so that the child process do not error out when the buffers are full.
+      stdout_flags = @stdout_out.fcntl(Fcntl::F_GETFL)
+      @stdout_out.fcntl(Fcntl::F_SETFL, stdout_flags & ~Fcntl::O_NONBLOCK) if stdout_flags & Fcntl::O_NONBLOCK
+
+      stderr_flags = @stderr_out.fcntl(Fcntl::F_GETFL)
+      @stderr_out.fcntl(Fcntl::F_SETFL, stderr_flags & ~Fcntl::O_NONBLOCK) if stderr_flags & Fcntl::O_NONBLOCK
+    rescue NameError, NotImplementedError, Errno::EINVAL
+      # Probably on windows, where pipes are blocking by default
+    end
+  end
+end
+
+Terrapin::CommandLine::MultiPipe.prepend(Terrapin::MultiPipeExtensions)
diff --git a/package.json b/package.json
index 964e87d37..7ce0e233b 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "@tootsuite/mastodon",
   "license": "AGPL-3.0-or-later",
   "engines": {
-    "node": ">=10.13"
+    "node": ">=12"
   },
   "scripts": {
     "postversion": "git push --tags",
@@ -60,14 +60,13 @@
   },
   "private": true,
   "dependencies": {
-    "@babel/core": "^7.13.14",
-    "@babel/plugin-proposal-class-properties": "^7.8.3",
-    "@babel/plugin-proposal-decorators": "^7.13.5",
+    "@babel/core": "^7.14.0",
+    "@babel/plugin-proposal-decorators": "^7.13.15",
     "@babel/plugin-transform-react-inline-elements": "^7.12.13",
-    "@babel/plugin-transform-runtime": "^7.13.10",
-    "@babel/preset-env": "^7.13.12",
+    "@babel/plugin-transform-runtime": "^7.13.15",
+    "@babel/preset-env": "^7.14.1",
     "@babel/preset-react": "^7.13.13",
-    "@babel/runtime": "^7.13.10",
+    "@babel/runtime": "^7.14.0",
     "@gamestdio/websocket": "^0.3.2",
     "@github/webauthn-json": "^0.5.7",
     "@rails/ujs": "^6.1.3",
@@ -84,14 +83,14 @@
     "babel-runtime": "^6.26.0",
     "blurhash": "^1.1.3",
     "caniuse-lite": "^1.0.30001208",
-    "classnames": "^2.2.5",
+    "classnames": "^2.3.1",
     "color-blend": "^3.0.1",
     "compression-webpack-plugin": "^6.1.1",
     "cross-env": "^7.0.3",
-    "css-loader": "^5.2.0",
-    "cssnano": "^4.1.10",
+    "css-loader": "^5.2.4",
+    "cssnano": "^4.1.11",
     "detect-passive-events": "^2.0.3",
-    "dotenv": "^8.2.0",
+    "dotenv": "^9.0.1",
     "emoji-mart": "Gargron/emoji-mart#build",
     "es6-symbol": "^3.1.3",
     "escape-html": "^1.0.3",
@@ -100,7 +99,7 @@
     "favico.js": "^0.3.10",
     "file-loader": "^6.2.0",
     "font-awesome": "^4.7.0",
-    "glob": "^7.1.6",
+    "glob": "^7.1.7",
     "history": "^4.10.1",
     "http-link-header": "^1.0.3",
     "immutable": "^3.8.2",
@@ -110,11 +109,11 @@
     "intl-messageformat": "^2.2.0",
     "intl-relativeformat": "^6.4.3",
     "is-nan": "^1.3.2",
-    "js-yaml": "^4.0.0",
+    "js-yaml": "^4.1.0",
     "lodash": "^4.17.21",
     "mark-loader": "^0.1.6",
-    "marky": "^1.2.1",
-    "mini-css-extract-plugin": "^1.4.0",
+    "marky": "^1.2.2",
+    "mini-css-extract-plugin": "^1.6.0",
     "mkdirp": "^1.0.4",
     "npmlog": "^4.1.2",
     "object-assign": "^4.1.1",
@@ -138,7 +137,7 @@
     "react-motion": "^0.5.2",
     "react-notification": "^6.8.5",
     "react-overlays": "^0.9.3",
-    "react-redux": "^7.2.3",
+    "react-redux": "^7.2.4",
     "react-redux-loading-bar": "^4.0.8",
     "react-router-dom": "^4.1.1",
     "react-router-scroll-4": "^1.0.0-beta.1",
@@ -147,8 +146,8 @@
     "react-swipeable-views": "^0.13.9",
     "react-textarea-autosize": "^8.3.2",
     "react-toggle": "^4.1.2",
-    "redis": "^3.0.2",
-    "redux": "^4.0.5",
+    "redis": "^3.1.2",
+    "redux": "^4.1.0",
     "redux-immutable": "^4.0.0",
     "redux-thunk": "^2.2.0",
     "regenerator-runtime": "^0.13.7",
@@ -156,7 +155,7 @@
     "requestidlecallback": "^0.3.0",
     "reselect": "^4.0.0",
     "rimraf": "^3.0.2",
-    "sass": "^1.32.8",
+    "sass": "^1.32.12",
     "sass-loader": "^10.1.1",
     "stacktrace-js": "^2.0.2",
     "stringz": "^2.1.0",
@@ -168,36 +167,36 @@
     "twitter-text": "3.1.0",
     "uuid": "^8.3.1",
     "webpack": "^4.46.0",
-    "webpack-assets-manifest": "^4.0.2",
-    "webpack-bundle-analyzer": "^4.4.0",
+    "webpack-assets-manifest": "^4.0.6",
+    "webpack-bundle-analyzer": "^4.4.1",
     "webpack-cli": "^3.3.12",
     "webpack-merge": "^5.7.3",
     "wicg-inert": "^3.1.1",
-    "ws": "^7.4.4"
+    "ws": "^7.4.5"
   },
   "devDependencies": {
-    "@testing-library/jest-dom": "^5.11.10",
+    "@testing-library/jest-dom": "^5.12.0",
     "@testing-library/react": "^11.2.6",
     "babel-eslint": "^10.1.0",
     "babel-jest": "^26.6.3",
-    "eslint": "^7.23.0",
+    "eslint": "^7.26.0",
     "eslint-plugin-import": "~2.22.1",
     "eslint-plugin-jsx-a11y": "~6.4.1",
-    "eslint-plugin-promise": "~4.3.1",
-    "eslint-plugin-react": "~7.23.1",
+    "eslint-plugin-promise": "~5.1.0",
+    "eslint-plugin-react": "~7.23.2",
     "jest": "^26.6.3",
     "raf": "^3.4.1",
     "react-intl-translations-manager": "^5.0.3",
     "react-test-renderer": "^16.14.0",
     "sass-lint": "^1.13.1",
     "webpack-dev-server": "^3.11.2",
-    "yargs": "^16.2.0"
+    "yargs": "^17.0.1"
   },
   "resolutions": {
     "kind-of": "^6.0.3"
   },
   "optionalDependencies": {
     "bufferutil": "^4.0.3",
-    "utf-8-validate": "^5.0.4"
+    "utf-8-validate": "^5.0.5"
   }
 }
diff --git a/public/emoji/1f6b2_border.svg b/public/emoji/1f6b2_border.svg
new file mode 100644
index 000000000..0219841a1
--- /dev/null
+++ b/public/emoji/1f6b2_border.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40">
+  <g>
+    <path d="M7 24c1.957 0 3.633 1.135 4.455 2.772l3.477-1.739C13.488 22.058 10.446 20 6.916 20c-1.301 0-2.534.285-3.649.787l1.668 3.67C5.566 24.17 6.262 24 7 24zm22 0c1.467 0 2.772.643 3.688 1.648l2.897-2.635C33.952 21.169 31.573 20 28.916 20c-3.576 0-6.652 2.111-8.073 5.15l3.648 1.722C25.293 25.18 27.003 24 29 24z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M7 22c-3.866 0-7 3.134-7 7s3.134 7 7 7 7-3.134 7-7-3.133-7-7-7zm0 12c-2.761 0-5-2.238-5-5s2.239-5 5-5 5 2.238 5 5-2.238 5-5 5zm22-12c-3.865 0-7 3.134-7 7s3.135 7 7 7c3.867 0 7-3.134 7-7s-3.133-7-7-7zm0 12c-2.761 0-5-2.238-5-5s2.239-5 5-5c2.762 0 5 2.238 5 5s-2.238 5-5 5z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M29.984 28.922c-.005-.067-.021-.132-.04-.198-.019-.065-.04-.126-.071-.186-.013-.024-.015-.052-.029-.075l-7-11c-.297-.466-.914-.604-1.381-.307-.299.19-.444.513-.445.843H12c-.552 0-1 .447-1 1 0 .553.448 1 1 1h10c.027 0 .05-.014.077-.016L27.178 28H18c-.552 0-1 .447-1 1s.448 1 1 1h11.001c.116 0 .23-.028.343-.069.034-.013.064-.027.097-.043.031-.017.066-.024.097-.044.03-.02.048-.051.075-.072.055-.044.103-.089.147-.143.041-.049.074-.099.104-.154.03-.056.055-.11.075-.172.021-.066.033-.132.04-.201.004-.036.021-.066.021-.102 0-.027-.014-.051-.016-.078z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M21.581 16l-2.899 8.117-5.929-6.775c-.364-.415-.996-.459-1.411-.094-.415.364-.457.995-.094 1.411l6.664 7.615-.854 2.39c-.185.519.086 1.092.606 1.277.111.04.224.059.336.059.411 0 .796-.255.942-.664L23.705 16h-2.124z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M7 30c-.15 0-.303-.034-.446-.105-.494-.247-.694-.848-.447-1.342l3.062-6.106C9.186 22.419 11 19.651 11 17c0-3.242-2.293-4.043-2.316-4.051-.524-.175-.807-.741-.632-1.265.174-.524.739-.81 1.265-.632C9.467 11.102 13 12.333 13 17c0 3.068-1.836 6.042-2.131 6.497l-2.974 5.949C7.72 29.798 7.367 30 7 30z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M14.612 13.663c-.054 0-.11-.004-.165-.014l-6-1c-.544-.091-.913-.606-.822-1.151.091-.544.601-.913 1.151-.822l6 1c.544.091.913.606.822 1.151-.082.489-.506.836-.986.836zM26.383 17c-.03 0-.059-.002-.089-.006l-5.672-.708c-.372-.046-.644-.374-.62-.748.023-.374.333-.665.707-.665.041 0 4.067-.018 5.989-1.299.25-.167.582-.157.824.026.239.185.337.501.241.788l-.709 2.127c-.096.293-.369.485-.671.485z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+    <path d="M20 29c0 1.104-.895 2-2 2-1.104 0-2-.896-2-2s.896-2 2-2c1.105 0 2 .896 2 2z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
+  </g>
+  <path fill="#EA596E" d="M7 24c1.957 0 3.633 1.135 4.455 2.772l3.477-1.739C13.488 22.058 10.446 20 6.916 20c-1.301 0-2.534.285-3.649.787l1.668 3.67C5.566 24.17 6.262 24 7 24zm22 0c1.467 0 2.772.643 3.688 1.648l2.897-2.635C33.952 21.169 31.573 20 28.916 20c-3.576 0-6.652 2.111-8.073 5.15l3.648 1.722C25.293 25.18 27.003 24 29 24z"/>
+  <path fill="#292F33" d="M7 22c-3.866 0-7 3.134-7 7s3.134 7 7 7 7-3.134 7-7-3.133-7-7-7zm0 12c-2.761 0-5-2.238-5-5s2.239-5 5-5 5 2.238 5 5-2.238 5-5 5zm22-12c-3.865 0-7 3.134-7 7s3.135 7 7 7c3.867 0 7-3.134 7-7s-3.133-7-7-7zm0 12c-2.761 0-5-2.238-5-5s2.239-5 5-5c2.762 0 5 2.238 5 5s-2.238 5-5 5z"/>
+  <path fill="#DD2E44" d="M29.984 28.922c-.005-.067-.021-.132-.04-.198-.019-.065-.04-.126-.071-.186-.013-.024-.015-.052-.029-.075l-7-11c-.297-.466-.914-.604-1.381-.307-.299.19-.444.513-.445.843H12c-.552 0-1 .447-1 1 0 .553.448 1 1 1h10c.027 0 .05-.014.077-.016L27.178 28H18c-.552 0-1 .447-1 1s.448 1 1 1h11.001c.116 0 .23-.028.343-.069.034-.013.064-.027.097-.043.031-.017.066-.024.097-.044.03-.02.048-.051.075-.072.055-.044.103-.089.147-.143.041-.049.074-.099.104-.154.03-.056.055-.11.075-.172.021-.066.033-.132.04-.201.004-.036.021-.066.021-.102 0-.027-.014-.051-.016-.078z"/>
+  <path fill="#DD2E44" d="M21.581 16l-2.899 8.117-5.929-6.775c-.364-.415-.996-.459-1.411-.094-.415.364-.457.995-.094 1.411l6.664 7.615-.854 2.39c-.185.519.086 1.092.606 1.277.111.04.224.059.336.059.411 0 .796-.255.942-.664L23.705 16h-2.124z"/>
+  <path fill="#DD2E44" d="M7 30c-.15 0-.303-.034-.446-.105-.494-.247-.694-.848-.447-1.342l3.062-6.106C9.186 22.419 11 19.651 11 17c0-3.242-2.293-4.043-2.316-4.051-.524-.175-.807-.741-.632-1.265.174-.524.739-.81 1.265-.632C9.467 11.102 13 12.333 13 17c0 3.068-1.836 6.042-2.131 6.497l-2.974 5.949C7.72 29.798 7.367 30 7 30z"/>
+  <path fill="#292F33" d="M14.612 13.663c-.054 0-.11-.004-.165-.014l-6-1c-.544-.091-.913-.606-.822-1.151.091-.544.601-.913 1.151-.822l6 1c.544.091.913.606.822 1.151-.082.489-.506.836-.986.836zM26.383 17c-.03 0-.059-.002-.089-.006l-5.672-.708c-.372-.046-.644-.374-.62-.748.023-.374.333-.665.707-.665.041 0 4.067-.018 5.989-1.299.25-.167.582-.157.824.026.239.185.337.501.241.788l-.709 2.127c-.096.293-.369.485-.671.485z"/>
+  <path fill="#66757F" d="M20 29c0 1.104-.895 2-2 2-1.104 0-2-.896-2-2s.896-2 2-2c1.105 0 2 .896 2 2z"/>
+</svg>
diff --git a/spec/controllers/admin/dashboard_controller_spec.rb b/spec/controllers/admin/dashboard_controller_spec.rb
index 73b50e721..7824854f9 100644
--- a/spec/controllers/admin/dashboard_controller_spec.rb
+++ b/spec/controllers/admin/dashboard_controller_spec.rb
@@ -3,9 +3,19 @@
 require 'rails_helper'
 
 describe Admin::DashboardController, type: :controller do
+  render_views
+
   describe 'GET #index' do
-    it 'returns 200' do
+    before do
+      allow(Admin::SystemCheck).to receive(:perform).and_return([
+        Admin::SystemCheck::Message.new(:database_schema_check),
+        Admin::SystemCheck::Message.new(:rules_check, nil, admin_rules_path),
+        Admin::SystemCheck::Message.new(:sidekiq_process_check, 'foo, bar'),
+      ])
       sign_in Fabricate(:user, admin: true)
+    end
+
+    it 'returns 200' do
       get :index
 
       expect(response).to have_http_status(200)
diff --git a/spec/controllers/api/v1/apps_controller_spec.rb b/spec/controllers/api/v1/apps_controller_spec.rb
index 60a4c3b41..70cd62d48 100644
--- a/spec/controllers/api/v1/apps_controller_spec.rb
+++ b/spec/controllers/api/v1/apps_controller_spec.rb
@@ -4,23 +4,83 @@ RSpec.describe Api::V1::AppsController, type: :controller do
   render_views
 
   describe 'POST #create' do
+    let(:client_name) { 'Test app' }
+    let(:scopes) { nil }
+    let(:redirect_uris) { 'urn:ietf:wg:oauth:2.0:oob' }
+    let(:website) { nil }
+
+    let(:app_params) do
+      {
+        client_name: client_name,
+        redirect_uris: redirect_uris,
+        scopes: scopes,
+        website: website,
+      }
+    end
+
     before do
-      post :create, params: { client_name: 'Test app', redirect_uris: 'urn:ietf:wg:oauth:2.0:oob' }
+      post :create, params: app_params
     end
 
-    it 'returns http success' do
-      expect(response).to have_http_status(200)
+    context 'with valid params' do
+      it 'returns http success' do
+        expect(response).to have_http_status(200)
+      end
+
+      it 'creates an OAuth app' do
+        expect(Doorkeeper::Application.find_by(name: client_name)).to_not be nil
+      end
+
+      it 'returns client ID and client secret' do
+        json = body_as_json
+
+        expect(json[:client_id]).to_not be_blank
+        expect(json[:client_secret]).to_not be_blank
+      end
+    end
+
+    context 'with an unsupported scope' do
+      let(:scopes) { 'hoge' }
+
+      it 'returns http unprocessable entity' do
+        expect(response).to have_http_status(422)
+      end
     end
 
-    it 'creates an OAuth app' do
-      expect(Doorkeeper::Application.find_by(name: 'Test app')).to_not be nil
+    context 'with many duplicate scopes' do
+      let(:scopes) { (%w(read) * 40).join(' ') }
+
+      it 'returns http success' do
+        expect(response).to have_http_status(200)
+      end
+
+      it 'only saves the scope once' do
+        expect(Doorkeeper::Application.find_by(name: client_name).scopes.to_s).to eq 'read'
+      end
+    end
+
+    context 'with a too-long name' do
+      let(:client_name) { 'hoge' * 20 }
+
+      it 'returns http unprocessable entity' do
+        expect(response).to have_http_status(422)
+      end
+    end
+
+    context 'with a too-long website' do
+      let(:website) { 'https://foo.bar/' + ('hoge' * 2_000) }
+
+      it 'returns http unprocessable entity' do
+        expect(response).to have_http_status(422)
+      end
     end
 
-    it 'returns client ID and client secret' do
-      json = body_as_json
+    context 'with a too-long redirect_uris' do
+      let(:redirect_uris) { 'https://foo.bar/' + ('hoge' * 2_000) }
 
-      expect(json[:client_id]).to_not be_blank
-      expect(json[:client_secret]).to_not be_blank
+      it 'returns http unprocessable entity' do
+        expect(response).to have_http_status(422)
+      end
     end
   end
 end
diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb
index 01146294f..534d02879 100644
--- a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb
+++ b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb
@@ -27,20 +27,27 @@ describe Api::V1::Push::SubscriptionsController do
   let(:alerts_payload) do
     {
       data: {
+        policy: 'all',
+
         alerts: {
           follow: true,
+          follow_request: true,
           favourite: false,
           reblog: true,
           mention: false,
+          poll: true,
+          status: false,
         }
       }
     }.with_indifferent_access
   end
 
   describe 'POST #create' do
-    it 'saves push subscriptions' do
+    before do
       post :create, params: create_payload
+    end
 
+    it 'saves push subscriptions' do
       push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])
 
       expect(push_subscription.endpoint).to eq(create_payload[:subscription][:endpoint])
@@ -52,31 +59,34 @@ describe Api::V1::Push::SubscriptionsController do
 
     it 'replaces old subscription on repeat calls' do
       post :create, params: create_payload
-      post :create, params: create_payload
-
       expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1
     end
   end
 
   describe 'PUT #update' do
-    it 'changes alert settings' do
+    before do
       post :create, params: create_payload
       put :update, params: alerts_payload
+    end
 
+    it 'changes alert settings' do
       push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])
 
-      expect(push_subscription.data.dig('alerts', 'follow')).to eq(alerts_payload[:data][:alerts][:follow].to_s)
-      expect(push_subscription.data.dig('alerts', 'favourite')).to eq(alerts_payload[:data][:alerts][:favourite].to_s)
-      expect(push_subscription.data.dig('alerts', 'reblog')).to eq(alerts_payload[:data][:alerts][:reblog].to_s)
-      expect(push_subscription.data.dig('alerts', 'mention')).to eq(alerts_payload[:data][:alerts][:mention].to_s)
+      expect(push_subscription.data['policy']).to eq(alerts_payload[:data][:policy])
+
+      %w(follow follow_request favourite reblog mention poll status).each do |type|
+        expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s)
+      end
     end
   end
 
   describe 'DELETE #destroy' do
-    it 'removes the subscription' do
+    before do
       post :create, params: create_payload
       delete :destroy
+    end
 
+    it 'removes the subscription' do
       expect(Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])).to be_nil
     end
   end
diff --git a/spec/controllers/api/web/push_subscriptions_controller_spec.rb b/spec/controllers/api/web/push_subscriptions_controller_spec.rb
index 381cdeab9..bda4a7661 100644
--- a/spec/controllers/api/web/push_subscriptions_controller_spec.rb
+++ b/spec/controllers/api/web/push_subscriptions_controller_spec.rb
@@ -22,11 +22,16 @@ describe Api::Web::PushSubscriptionsController do
   let(:alerts_payload) do
     {
       data: {
+        policy: 'all',
+
         alerts: {
           follow: true,
+          follow_request: false,
           favourite: false,
           reblog: true,
           mention: false,
+          poll: true,
+          status: false,
         }
       }
     }
@@ -59,10 +64,11 @@ describe Api::Web::PushSubscriptionsController do
 
         push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])
 
-        expect(push_subscription.data['alerts']['follow']).to eq(alerts_payload[:data][:alerts][:follow].to_s)
-        expect(push_subscription.data['alerts']['favourite']).to eq(alerts_payload[:data][:alerts][:favourite].to_s)
-        expect(push_subscription.data['alerts']['reblog']).to eq(alerts_payload[:data][:alerts][:reblog].to_s)
-        expect(push_subscription.data['alerts']['mention']).to eq(alerts_payload[:data][:alerts][:mention].to_s)
+        expect(push_subscription.data['policy']).to eq 'all'
+
+        %w(follow follow_request favourite reblog mention poll status).each do |type|
+          expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s)
+        end
       end
     end
   end
@@ -81,10 +87,11 @@ describe Api::Web::PushSubscriptionsController do
 
       push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])
 
-      expect(push_subscription.data['alerts']['follow']).to eq(alerts_payload[:data][:alerts][:follow].to_s)
-      expect(push_subscription.data['alerts']['favourite']).to eq(alerts_payload[:data][:alerts][:favourite].to_s)
-      expect(push_subscription.data['alerts']['reblog']).to eq(alerts_payload[:data][:alerts][:reblog].to_s)
-      expect(push_subscription.data['alerts']['mention']).to eq(alerts_payload[:data][:alerts][:mention].to_s)
+      expect(push_subscription.data['policy']).to eq 'all'
+
+      %w(follow follow_request favourite reblog mention poll status).each do |type|
+        expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s)
+      end
     end
   end
 end
diff --git a/spec/controllers/auth/confirmations_controller_spec.rb b/spec/controllers/auth/confirmations_controller_spec.rb
index 0b6b74ff9..8469119d2 100644
--- a/spec/controllers/auth/confirmations_controller_spec.rb
+++ b/spec/controllers/auth/confirmations_controller_spec.rb
@@ -32,6 +32,52 @@ describe Auth::ConfirmationsController, type: :controller do
       end
     end
 
+    context 'when user is unconfirmed and unapproved' do
+      let!(:user) { Fabricate(:user, confirmation_token: 'foobar', confirmed_at: nil, approved: false) }
+
+      before do
+        allow(BootstrapTimelineWorker).to receive(:perform_async)
+        @request.env['devise.mapping'] = Devise.mappings[:user]
+        get :show, params: { confirmation_token: 'foobar' }
+      end
+
+      it 'redirects to login' do
+        expect(response).to redirect_to(new_user_session_path)
+      end
+    end
+
+    context 'when user is already confirmed' do
+      let!(:user) { Fabricate(:user) }
+
+      before do
+        allow(BootstrapTimelineWorker).to receive(:perform_async)
+        @request.env['devise.mapping'] = Devise.mappings[:user]
+        sign_in(user, scope: :user)
+        get :show, params: { confirmation_token: 'foobar' }
+      end
+
+      it 'redirects to root path' do
+        expect(response).to redirect_to(root_path)
+      end
+    end
+
+    context 'when user is already confirmed but unapproved' do
+      let!(:user) { Fabricate(:user, approved: false) }
+
+      before do
+        allow(BootstrapTimelineWorker).to receive(:perform_async)
+        @request.env['devise.mapping'] = Devise.mappings[:user]
+        user.approved = false
+        user.save!
+        sign_in(user, scope: :user)
+        get :show, params: { confirmation_token: 'foobar' }
+      end
+
+      it 'redirects to settings' do
+        expect(response).to redirect_to(edit_user_registration_path)
+      end
+    end
+
     context 'when user is updating email' do
       let!(:user) { Fabricate(:user, confirmation_token: 'foobar', unconfirmed_email: 'new-email@example.com') }
 
diff --git a/spec/controllers/relationships_controller_spec.rb b/spec/controllers/relationships_controller_spec.rb
index 16e255afe..2056a2ac2 100644
--- a/spec/controllers/relationships_controller_spec.rb
+++ b/spec/controllers/relationships_controller_spec.rb
@@ -36,11 +36,7 @@ describe RelationshipsController do
   end
 
   describe 'PATCH #update' do
-    let(:poopfeast) { Fabricate(:account, username: 'poopfeast', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
-
-    before do
-      stub_request(:post, 'http://example.com/salmon').to_return(status: 200)
-    end
+    let(:poopfeast) { Fabricate(:account, username: 'poopfeast', domain: 'example.com') }
 
     shared_examples 'redirects back to followers page' do
       it 'redirects back to followers page' do
diff --git a/spec/fabricators/canonical_email_block_fabricator.rb b/spec/fabricators/canonical_email_block_fabricator.rb
new file mode 100644
index 000000000..a0b6e0d22
--- /dev/null
+++ b/spec/fabricators/canonical_email_block_fabricator.rb
@@ -0,0 +1,4 @@
+Fabricator(:canonical_email_block) do
+  email "test@example.com"
+  reference_account { Fabricate(:account) }
+end
diff --git a/spec/fabricators/follow_recommendation_suppression_fabricator.rb b/spec/fabricators/follow_recommendation_suppression_fabricator.rb
new file mode 100644
index 000000000..4a6a07a66
--- /dev/null
+++ b/spec/fabricators/follow_recommendation_suppression_fabricator.rb
@@ -0,0 +1,3 @@
+Fabricator(:follow_recommendation_suppression) do
+  account
+end
diff --git a/spec/lib/activitypub/activity/delete_spec.rb b/spec/lib/activitypub/activity/delete_spec.rb
index 37b93ecf7..9dfb8a61b 100644
--- a/spec/lib/activitypub/activity/delete_spec.rb
+++ b/spec/lib/activitypub/activity/delete_spec.rb
@@ -49,4 +49,24 @@ RSpec.describe ActivityPub::Activity::Delete do
       end
     end
   end
+
+  context 'when the status has been reported' do
+    describe '#perform' do
+      subject { described_class.new(json, sender) }
+      let!(:reporter) { Fabricate(:account) }
+
+      before do
+        reporter.reports.create!(target_account: status.account, status_ids: [status.id], forwarded: false)
+        subject.perform
+      end
+
+      it 'marks the status as deleted' do
+        expect(Status.find_by(id: status.id)).to be_nil
+      end
+
+      it 'actually keeps a copy for inspection' do
+        expect(Status.with_discarded.find_by(id: status.id)).to_not be_nil
+      end
+    end
+  end
 end
diff --git a/spec/lib/activitypub/activity/update_spec.rb b/spec/lib/activitypub/activity/update_spec.rb
index 42da29860..1c9bcf43b 100644
--- a/spec/lib/activitypub/activity/update_spec.rb
+++ b/spec/lib/activitypub/activity/update_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe ActivityPub::Activity::Update do
   end
 
   let(:modified_sender) do
-    sender.dup.tap do |modified_sender|
+    sender.tap do |modified_sender|
       modified_sender.display_name = 'Totally modified now'
     end
   end
diff --git a/spec/lib/spam_check_spec.rb b/spec/lib/spam_check_spec.rb
deleted file mode 100644
index 159d83257..000000000
--- a/spec/lib/spam_check_spec.rb
+++ /dev/null
@@ -1,192 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe SpamCheck do
-  let!(:sender) { Fabricate(:account) }
-  let!(:alice) { Fabricate(:account, username: 'alice') }
-  let!(:bob) { Fabricate(:account, username: 'bob') }
-
-  def status_with_html(text, options = {})
-    status = PostStatusService.new.call(sender, { text: text }.merge(options))
-    status.update_columns(text: Formatter.instance.format(status), local: false)
-    status
-  end
-
-  describe '#hashable_text' do
-    it 'removes mentions from HTML for remote statuses' do
-      status = status_with_html('@alice Hello')
-      expect(described_class.new(status).hashable_text).to eq 'hello'
-    end
-
-    it 'removes mentions from text for local statuses' do
-      status = PostStatusService.new.call(alice, text: "Hey @#{sender.username}, how are you?")
-      expect(described_class.new(status).hashable_text).to eq 'hey , how are you?'
-    end
-  end
-
-  describe '#insufficient_data?' do
-    it 'returns true when there is no text' do
-      status = status_with_html('@alice')
-      expect(described_class.new(status).insufficient_data?).to be true
-    end
-
-    it 'returns false when there is text' do
-      status = status_with_html('@alice h')
-      expect(described_class.new(status).insufficient_data?).to be false
-    end
-  end
-
-  describe '#digest' do
-    it 'returns a string' do
-      status = status_with_html('@alice Hello world')
-      expect(described_class.new(status).digest).to be_a String
-    end
-  end
-
-  describe '#spam?' do
-    it 'returns false for a unique status' do
-      status = status_with_html('@alice Hello')
-      expect(described_class.new(status).spam?).to be false
-    end
-
-    it 'returns false for different statuses to the same recipient' do
-      status1 = status_with_html('@alice Hello')
-      described_class.new(status1).remember!
-      status2 = status_with_html('@alice Are you available to talk?')
-      expect(described_class.new(status2).spam?).to be false
-    end
-
-    it 'returns false for statuses with different content warnings' do
-      status1 = status_with_html('@alice Are you available to talk?')
-      described_class.new(status1).remember!
-      status2 = status_with_html('@alice Are you available to talk?', spoiler_text: 'This is a completely different matter than what I was talking about previously, I swear!')
-      expect(described_class.new(status2).spam?).to be false
-    end
-
-    it 'returns false for different statuses to different recipients' do
-      status1 = status_with_html('@alice How is it going?')
-      described_class.new(status1).remember!
-      status2 = status_with_html('@bob Are you okay?')
-      expect(described_class.new(status2).spam?).to be false
-    end
-
-    it 'returns false for very short different statuses to different recipients' do
-      status1 = status_with_html('@alice 🙄')
-      described_class.new(status1).remember!
-      status2 = status_with_html('@bob Huh?')
-      expect(described_class.new(status2).spam?).to be false
-    end
-
-    it 'returns false for statuses with no text' do
-      status1 = status_with_html('@alice')
-      described_class.new(status1).remember!
-      status2 = status_with_html('@bob')
-      expect(described_class.new(status2).spam?).to be false
-    end
-
-    it 'returns true for duplicate statuses to the same recipient' do
-      described_class::THRESHOLD.times do
-        status1 = status_with_html('@alice Hello')
-        described_class.new(status1).remember!
-      end
-
-      status2 = status_with_html('@alice Hello')
-      expect(described_class.new(status2).spam?).to be true
-    end
-
-    it 'returns true for duplicate statuses to different recipients' do
-      described_class::THRESHOLD.times do
-        status1 = status_with_html('@alice Hello')
-        described_class.new(status1).remember!
-      end
-
-      status2 = status_with_html('@bob Hello')
-      expect(described_class.new(status2).spam?).to be true
-    end
-
-    it 'returns true for nearly identical statuses with random numbers' do
-      source_text = 'Sodium, atomic number 11, was first isolated by Humphry Davy in 1807. A chemical component of salt, he named it Na in honor of the saltiest region on earth, North America.'
-
-      described_class::THRESHOLD.times do
-        status1 = status_with_html('@alice ' + source_text + ' 1234')
-        described_class.new(status1).remember!
-      end
-
-      status2 = status_with_html('@bob ' + source_text + ' 9568')
-      expect(described_class.new(status2).spam?).to be true
-    end
-  end
-
-  describe '#skip?' do
-    it 'returns true when the sender is already silenced' do
-      status = status_with_html('@alice Hello')
-      sender.silence!
-      expect(described_class.new(status).skip?).to be true
-    end
-
-    it 'returns true when the mentioned person follows the sender' do
-      status = status_with_html('@alice Hello')
-      alice.follow!(sender)
-      expect(described_class.new(status).skip?).to be true
-    end
-
-    it 'returns false when even one mentioned person doesn\'t follow the sender' do
-      status = status_with_html('@alice @bob Hello')
-      alice.follow!(sender)
-      expect(described_class.new(status).skip?).to be false
-    end
-
-    it 'returns true when the sender is replying to a status that mentions the sender' do
-      parent = PostStatusService.new.call(alice, text: "Hey @#{sender.username}, how are you?")
-      status = status_with_html('@alice @bob Hello', thread: parent)
-      expect(described_class.new(status).skip?).to be true
-    end
-  end
-
-  describe '#remember!' do
-    let(:status) { status_with_html('@alice') }
-    let(:spam_check) { described_class.new(status) }
-    let(:redis_key) { spam_check.send(:redis_key) }
-
-    it 'remembers' do
-      expect(Redis.current.exists?(redis_key)).to be true
-      spam_check.remember!
-      expect(Redis.current.exists?(redis_key)).to be true
-    end
-  end
-
-  describe '#reset!' do
-    let(:status) { status_with_html('@alice') }
-    let(:spam_check) { described_class.new(status) }
-    let(:redis_key) { spam_check.send(:redis_key) }
-
-    before do
-      spam_check.remember!
-    end
-
-    it 'resets' do
-      expect(Redis.current.exists?(redis_key)).to be true
-      spam_check.reset!
-      expect(Redis.current.exists?(redis_key)).to be false
-    end
-  end
-
-  describe '#flag!' do
-    let!(:status1) { status_with_html('@alice General Kenobi you are a bold one') }
-    let!(:status2) { status_with_html('@alice @bob General Kenobi, you are a bold one') }
-
-    before do
-      described_class.new(status1).remember!
-      described_class.new(status2).flag!
-    end
-
-    it 'creates a report about the account' do
-      expect(sender.targeted_reports.unresolved.count).to eq 1
-    end
-
-    it 'attaches both matching statuses to the report' do
-      expect(sender.targeted_reports.first.status_ids).to include(status1.id, status2.id)
-    end
-  end
-end
diff --git a/spec/lib/tag_manager_spec.rb b/spec/lib/tag_manager_spec.rb
index e9a7aa934..2230f9710 100644
--- a/spec/lib/tag_manager_spec.rb
+++ b/spec/lib/tag_manager_spec.rb
@@ -83,40 +83,4 @@ RSpec.describe TagManager do
       expect(TagManager.instance.local_url?('https://domainn.test/')).to eq false
     end
   end
-
-  describe '#same_acct?' do
-    # The following comparisons MUST be case-insensitive.
-
-    it 'returns true if the needle has a correct username and domain for remote user' do
-      expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe@DoMaIn.Test')).to eq true
-    end
-
-    it 'returns false if the needle is missing a domain for remote user' do
-      expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe')).to eq false
-    end
-
-    it 'returns false if the needle has an incorrect domain for remote user' do
-      expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe@incorrect.test')).to eq false
-    end
-
-    it 'returns false if the needle has an incorrect username for remote user' do
-      expect(TagManager.instance.same_acct?('username@domain.test', 'incorrect@DoMaIn.test')).to eq false
-    end
-
-    it 'returns true if the needle has a correct username and domain for local user' do
-      expect(TagManager.instance.same_acct?('username', 'UsErNaMe@Cb6E6126.nGrOk.Io')).to eq true
-    end
-
-    it 'returns true if the needle is missing a domain for local user' do
-      expect(TagManager.instance.same_acct?('username', 'UsErNaMe')).to eq true
-    end
-
-    it 'returns false if the needle has an incorrect username for local user' do
-      expect(TagManager.instance.same_acct?('username', 'UsErNaM@Cb6E6126.nGrOk.Io')).to eq false
-    end
-
-    it 'returns false if the needle has an incorrect domain for local user' do
-      expect(TagManager.instance.same_acct?('username', 'incorrect@Cb6E6126.nGrOk.Io')).to eq false
-    end
-  end
 end
diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb
index 38916b54f..9b645bad8 100644
--- a/spec/mailers/notification_mailer_spec.rb
+++ b/spec/mailers/notification_mailer_spec.rb
@@ -10,12 +10,12 @@ RSpec.describe NotificationMailer, type: :mailer do
     it 'renders subject localized for the locale of the receiver' do
       locale = %i(de en).sample
       receiver.update!(locale: locale)
-      expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: locale))
+      expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: locale))
     end
 
     it 'renders subject localized for the default locale if the locale of the receiver is unavailable' do
       receiver.update!(locale: nil)
-      expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: I18n.default_locale))
+      expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: I18n.default_locale))
     end
   end
 
@@ -59,12 +59,12 @@ RSpec.describe NotificationMailer, type: :mailer do
     include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob'
 
     it "renders the headers" do
-      expect(mail.subject).to eq("bob favourited your status")
+      expect(mail.subject).to eq("bob favourited your post")
       expect(mail.to).to eq([receiver.email])
     end
 
     it "renders the body" do
-      expect(mail.body.encoded).to match("Your status was favourited by bob")
+      expect(mail.body.encoded).to match("Your post was favourited by bob")
       expect(mail.body.encoded).to include 'The body of the own status'
     end
   end
@@ -76,12 +76,12 @@ RSpec.describe NotificationMailer, type: :mailer do
     include_examples 'localized subject', 'notification_mailer.reblog.subject', name: 'bob'
 
     it "renders the headers" do
-      expect(mail.subject).to eq("bob boosted your status")
+      expect(mail.subject).to eq("bob boosted your post")
       expect(mail.to).to eq([receiver.email])
     end
 
     it "renders the body" do
-      expect(mail.body.encoded).to match("Your status was boosted by bob")
+      expect(mail.body.encoded).to match("Your post was boosted by bob")
       expect(mail.body.encoded).to include 'The body of the own status'
     end
   end
diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb
index 6b430b505..9c866788f 100644
--- a/spec/mailers/user_mailer_spec.rb
+++ b/spec/mailers/user_mailer_spec.rb
@@ -9,12 +9,12 @@ describe UserMailer, type: :mailer do
     it 'renders subject localized for the locale of the receiver' do
       locale = I18n.available_locales.sample
       receiver.update!(locale: locale)
-      expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: locale))
+      expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: locale))
     end
 
     it 'renders subject localized for the default locale if the locale of the receiver is unavailable' do
       receiver.update!(locale: nil)
-      expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: I18n.default_locale))
+      expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: I18n.default_locale))
     end
   end
 
diff --git a/spec/models/account_tag_stat_spec.rb b/spec/models/account_tag_stat_spec.rb
deleted file mode 100644
index 6d3057f35..000000000
--- a/spec/models/account_tag_stat_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe AccountTagStat, type: :model do
-  key = 'accounts_count'
-  let(:account_tag_stat) { Fabricate(:tag).account_tag_stat }
-
-  describe '#increment_count!' do
-    it 'calls #update' do
-      args = { key => account_tag_stat.public_send(key) + 1 }
-      expect(account_tag_stat).to receive(:update).with(args)
-      account_tag_stat.increment_count!(key)
-    end
-
-    it 'increments value by 1' do
-      expect do
-        account_tag_stat.increment_count!(key)
-      end.to change { account_tag_stat.accounts_count }.by(1)
-    end
-  end
-
-  describe '#decrement_count!' do
-    it 'calls #update' do
-      args = { key => [account_tag_stat.public_send(key) - 1, 0].max }
-      expect(account_tag_stat).to receive(:update).with(args)
-      account_tag_stat.decrement_count!(key)
-    end
-
-    it 'decrements value by 1' do
-      account_tag_stat.update(key => 1)
-
-      expect do
-        account_tag_stat.decrement_count!(key)
-      end.to change { account_tag_stat.accounts_count }.by(-1)
-    end
-  end
-end
diff --git a/spec/models/canonical_email_block_spec.rb b/spec/models/canonical_email_block_spec.rb
new file mode 100644
index 000000000..8e0050d65
--- /dev/null
+++ b/spec/models/canonical_email_block_spec.rb
@@ -0,0 +1,47 @@
+require 'rails_helper'
+
+RSpec.describe CanonicalEmailBlock, type: :model do
+  describe '#email=' do
+    let(:target_hash) { '973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b' }
+
+    it 'sets canonical_email_hash' do
+      subject.email = 'test@example.com'
+      expect(subject.canonical_email_hash).to eq target_hash
+    end
+
+    it 'sets the same hash even with dot permutations' do
+      subject.email = 't.e.s.t@example.com'
+      expect(subject.canonical_email_hash).to eq target_hash
+    end
+
+    it 'sets the same hash even with extensions' do
+      subject.email = 'test+mastodon1@example.com'
+      expect(subject.canonical_email_hash).to eq target_hash
+    end
+
+    it 'sets the same hash with different casing' do
+      subject.email = 'Test@EXAMPLE.com'
+      expect(subject.canonical_email_hash).to eq target_hash
+    end
+  end
+
+  describe '.block?' do
+    let!(:canonical_email_block) { Fabricate(:canonical_email_block, email: 'foo@bar.com') }
+
+    it 'returns true for the same email' do
+      expect(described_class.block?('foo@bar.com')).to be true
+    end
+
+    it 'returns true for the same email with dots' do
+      expect(described_class.block?('f.oo@bar.com')).to be true
+    end
+
+    it 'returns true for the same email with extensions' do
+      expect(described_class.block?('foo+spam@bar.com')).to be true
+    end
+
+    it 'returns false for different email' do
+      expect(described_class.block?('hoge@bar.com')).to be false
+    end
+  end
+end
diff --git a/spec/models/follow_recommendation_suppression_spec.rb b/spec/models/follow_recommendation_suppression_spec.rb
new file mode 100644
index 000000000..39107a2b0
--- /dev/null
+++ b/spec/models/follow_recommendation_suppression_spec.rb
@@ -0,0 +1,4 @@
+require 'rails_helper'
+
+RSpec.describe FollowRecommendationSuppression, type: :model do
+end
diff --git a/spec/models/follow_request_spec.rb b/spec/models/follow_request_spec.rb
index 7c8e121d9..b0e854f09 100644
--- a/spec/models/follow_request_spec.rb
+++ b/spec/models/follow_request_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe FollowRequest, type: :model do
     let(:target_account) { Fabricate(:account) }
 
     it 'calls Account#follow!, MergeWorker.perform_async, and #destroy!' do
-      expect(account).to        receive(:follow!).with(target_account, reblogs: true, notify: false, uri: follow_request.uri)
+      expect(account).to        receive(:follow!).with(target_account, reblogs: true, notify: false, uri: follow_request.uri, bypass_limit: true)
       expect(MergeWorker).to    receive(:perform_async).with(target_account.id, account.id)
       expect(follow_request).to receive(:destroy!)
       follow_request.authorize!
diff --git a/spec/models/session_activation_spec.rb b/spec/models/session_activation_spec.rb
index 2aa695037..450dc1399 100644
--- a/spec/models/session_activation_spec.rb
+++ b/spec/models/session_activation_spec.rb
@@ -74,13 +74,13 @@ RSpec.describe SessionActivation, type: :model do
     let(:options) { { user: Fabricate(:user), session_id: '1' } }
 
     it 'calls create! and purge_old' do
-      expect(described_class).to receive(:create!).with(options)
+      expect(described_class).to receive(:create!).with(**options)
       expect(described_class).to receive(:purge_old)
-      described_class.activate(options)
+      described_class.activate(**options)
     end
 
     it 'returns an instance of SessionActivation' do
-      expect(described_class.activate(options)).to be_kind_of SessionActivation
+      expect(described_class.activate(**options)).to be_kind_of SessionActivation
     end
   end
 
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
index df876593c..3949dbce5 100644
--- a/spec/models/tag_spec.rb
+++ b/spec/models/tag_spec.rb
@@ -96,6 +96,20 @@ RSpec.describe Tag, type: :model do
     end
   end
 
+  describe '.matches_name' do
+    it 'returns tags for multibyte case-insensitive names' do
+      upcase_string   = 'abcABCabcABCやゆよ'
+      downcase_string = 'abcabcabcabcやゆよ';
+
+      tag = Fabricate(:tag, name: downcase_string)
+      expect(Tag.matches_name(upcase_string)).to eq [tag]
+    end
+
+    it 'uses the LIKE operator' do
+      expect(Tag.matches_name('100%abc').to_sql).to eq %q[SELECT "tags".* FROM "tags" WHERE LOWER("tags"."name") LIKE LOWER('100\\%abc%')]
+    end
+  end
+
   describe '.matching_name' do
     it 'returns tags for multibyte case-insensitive names' do
       upcase_string   = 'abcABCabcABCやゆよ'
diff --git a/spec/models/trending_tags_spec.rb b/spec/models/trending_tags_spec.rb
index b6122c994..dfbc7d6f8 100644
--- a/spec/models/trending_tags_spec.rb
+++ b/spec/models/trending_tags_spec.rb
@@ -7,9 +7,9 @@ RSpec.describe TrendingTags do
 
   describe '.update!' do
     let!(:at_time) { Time.now.utc }
-    let!(:tag1) { Fabricate(:tag, name: 'Catstodon') }
-    let!(:tag2) { Fabricate(:tag, name: 'DogsOfMastodon') }
-    let!(:tag3) { Fabricate(:tag, name: 'OCs') }
+    let!(:tag1) { Fabricate(:tag, name: 'Catstodon', trendable: true) }
+    let!(:tag2) { Fabricate(:tag, name: 'DogsOfMastodon', trendable: true) }
+    let!(:tag3) { Fabricate(:tag, name: 'OCs', trendable: true) }
 
     before do
       allow(Redis.current).to receive(:pfcount) do |key|
diff --git a/spec/models/web/push_subscription_spec.rb b/spec/models/web/push_subscription_spec.rb
index c6665611c..b44904369 100644
--- a/spec/models/web/push_subscription_spec.rb
+++ b/spec/models/web/push_subscription_spec.rb
@@ -1,16 +1,94 @@
 require 'rails_helper'
 
 RSpec.describe Web::PushSubscription, type: :model do
-  let(:alerts) { { mention: true, reblog: false, follow: true, follow_request: false, favourite: true } }
-  let(:push_subscription) { Web::PushSubscription.new(data: { alerts: alerts }) }
+  let(:account) { Fabricate(:account) }
+
+  let(:policy) { 'all' }
+
+  let(:data) do
+    {
+      policy: policy,
+
+      alerts: {
+        mention: true,
+        reblog: false,
+        follow: true,
+        follow_request: false,
+        favourite: true,
+      },
+    }
+  end
+
+  subject { described_class.new(data: data) }
 
   describe '#pushable?' do
-    it 'obeys alert settings' do
-      expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'Mention'))).to eq true
-      expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'Status'))).to eq false
-      expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'Follow'))).to eq true
-      expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'FollowRequest'))).to eq false
-      expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'Favourite'))).to eq true
+    let(:notification_type) { :mention }
+    let(:notification) { Fabricate(:notification, account: account, type: notification_type) }
+
+    %i(mention reblog follow follow_request favourite).each do |type|
+      context "when notification is a #{type}" do
+        let(:notification_type) { type }
+
+        it "returns boolean corresonding to alert setting" do
+          expect(subject.pushable?(notification)).to eq data[:alerts][type]
+        end
+      end
+    end
+
+    context 'when policy is all' do
+      let(:policy) { 'all' }
+
+      it 'returns true' do
+        expect(subject.pushable?(notification)).to eq true
+      end
+    end
+
+    context 'when policy is none' do
+      let(:policy) { 'none' }
+
+      it 'returns false' do
+        expect(subject.pushable?(notification)).to eq false
+      end
+    end
+
+    context 'when policy is followed' do
+      let(:policy) { 'followed' }
+
+      context 'and notification is from someone you follow' do
+        before do
+          account.follow!(notification.from_account)
+        end
+
+        it 'returns true' do
+          expect(subject.pushable?(notification)).to eq true
+        end
+      end
+
+      context 'and notification is not from someone you follow' do
+        it 'returns false' do
+          expect(subject.pushable?(notification)).to eq false
+        end
+      end
+    end
+
+    context 'when policy is follower' do
+      let(:policy) { 'follower' }
+
+      context 'and notification is from someone who follows you' do
+        before do
+          notification.from_account.follow!(account)
+        end
+
+        it 'returns true' do
+          expect(subject.pushable?(notification)).to eq true
+        end
+      end
+
+      context 'and notification is not from someone who follows you' do
+        it 'returns false' do
+          expect(subject.pushable?(notification)).to eq false
+        end
+      end
     end
   end
 end
diff --git a/spec/presenters/account_relationships_presenter_spec.rb b/spec/presenters/account_relationships_presenter_spec.rb
index f8b048d38..edfbbb354 100644
--- a/spec/presenters/account_relationships_presenter_spec.rb
+++ b/spec/presenters/account_relationships_presenter_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe AccountRelationshipsPresenter do
       allow(Account).to receive(:domain_blocking_map).with(account_ids, current_account_id).and_return(default_map)
     end
 
-    let(:presenter)          { AccountRelationshipsPresenter.new(account_ids, current_account_id, options) }
+    let(:presenter)          { AccountRelationshipsPresenter.new(account_ids, current_account_id, **options) }
     let(:current_account_id) { Fabricate(:account).id }
     let(:account_ids)        { [Fabricate(:account).id] }
     let(:default_map)        { { 1 => true } }
diff --git a/spec/services/after_block_service_spec.rb b/spec/services/after_block_service_spec.rb
index f63b2045a..fe5b26b2b 100644
--- a/spec/services/after_block_service_spec.rb
+++ b/spec/services/after_block_service_spec.rb
@@ -5,12 +5,14 @@ RSpec.describe AfterBlockService, type: :service do
     -> { described_class.new.call(account, target_account) }
   end
 
-  let(:account) { Fabricate(:account) }
-  let(:target_account) { Fabricate(:account) }
+  let(:account)              { Fabricate(:account) }
+  let(:target_account)       { Fabricate(:account) }
+  let(:status)               { Fabricate(:status, account: target_account) }
+  let(:other_status)         { Fabricate(:status, account: target_account) }
+  let(:other_account_status) { Fabricate(:status) }
+  let(:other_account_reblog) { Fabricate(:status, reblog_of_id: other_status.id) }
 
   describe 'home timeline' do
-    let(:status) { Fabricate(:status, account: target_account) }
-    let(:other_account_status) { Fabricate(:status) }
     let(:home_timeline_key) { FeedManager.instance.key(:home, account.id) }
 
     before do
@@ -20,10 +22,30 @@ RSpec.describe AfterBlockService, type: :service do
     it "clears account's statuses" do
       FeedManager.instance.push_to_home(account, status)
       FeedManager.instance.push_to_home(account, other_account_status)
+      FeedManager.instance.push_to_home(account, other_account_reblog)
 
       is_expected.to change {
         Redis.current.zrange(home_timeline_key, 0, -1)
-      }.from([status.id.to_s, other_account_status.id.to_s]).to([other_account_status.id.to_s])
+      }.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
+    end
+  end
+
+  describe 'lists' do
+    let(:list)              { Fabricate(:list, account: account) }
+    let(:list_timeline_key) { FeedManager.instance.key(:list, list.id) }
+
+    before do
+      Redis.current.del(list_timeline_key)
+    end
+
+    it "clears account's statuses" do
+      FeedManager.instance.push_to_list(list, status)
+      FeedManager.instance.push_to_list(list, other_account_status)
+      FeedManager.instance.push_to_list(list, other_account_reblog)
+
+      is_expected.to change {
+        Redis.current.zrange(list_timeline_key, 0, -1)
+      }.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
     end
   end
 end
diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb
index ce56d57a6..8e5d8fb03 100644
--- a/spec/services/authorize_follow_service_spec.rb
+++ b/spec/services/authorize_follow_service_spec.rb
@@ -22,24 +22,6 @@ RSpec.describe AuthorizeFollowService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-
-    before do
-      FollowRequest.create(account: bob, target_account: sender)
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(bob, sender)
-    end
-
-    it 'removes follow request' do
-      expect(bob.requested?(sender)).to be false
-    end
-
-    it 'creates follow relation' do
-      expect(bob.following?(sender)).to be true
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 
diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb
index c1f54a6fd..4203952c6 100644
--- a/spec/services/batched_remove_status_service_spec.rb
+++ b/spec/services/batched_remove_status_service_spec.rb
@@ -4,7 +4,7 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
   subject { BatchedRemoveStatusService.new }
 
   let!(:alice)  { Fabricate(:account) }
-  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
+  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') }
   let!(:jeff)   { Fabricate(:user).account }
   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 
diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb
index de20dd026..3714f09e9 100644
--- a/spec/services/block_service_spec.rb
+++ b/spec/services/block_service_spec.rb
@@ -17,19 +17,6 @@ RSpec.describe BlockService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-
-    before do
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(sender, bob)
-    end
-
-    it 'creates a blocking relation' do
-      expect(sender.blocking?(bob)).to be true
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 
diff --git a/spec/services/bootstrap_timeline_service_spec.rb b/spec/services/bootstrap_timeline_service_spec.rb
index a28d2407c..880ca4f0d 100644
--- a/spec/services/bootstrap_timeline_service_spec.rb
+++ b/spec/services/bootstrap_timeline_service_spec.rb
@@ -1,42 +1,4 @@
 require 'rails_helper'
 
 RSpec.describe BootstrapTimelineService, type: :service do
-  subject { described_class.new }
-
-  describe '#call' do
-    let(:source_account) { Fabricate(:account) }
-
-    context 'when setting is empty' do
-      let!(:admin) { Fabricate(:user, admin: true) }
-
-      before do
-        Setting.bootstrap_timeline_accounts = nil
-        subject.call(source_account)
-      end
-
-      it 'follows admin accounts from account' do
-        expect(source_account.following?(admin.account)).to be true
-      end
-    end
-
-    context 'when setting is set' do
-      let!(:alice) { Fabricate(:account, username: 'alice') }
-      let!(:bob)   { Fabricate(:account, username: 'bob') }
-      let!(:eve)   { Fabricate(:account, username: 'eve', suspended: true) }
-
-      before do
-        Setting.bootstrap_timeline_accounts = 'alice, @bob, eve, unknown'
-        subject.call(source_account)
-      end
-
-      it 'follows found accounts from account' do
-        expect(source_account.following?(alice)).to be true
-        expect(source_account.following?(bob)).to be true
-      end
-
-      it 'does not follow suspended account' do
-        expect(source_account.following?(eve)).to be false
-      end
-    end
-  end
 end
diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb
index 4c29ea77b..fc7f58eb4 100644
--- a/spec/services/favourite_service_spec.rb
+++ b/spec/services/favourite_service_spec.rb
@@ -18,20 +18,6 @@ RSpec.describe FavouriteService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-    let(:status) { Fabricate(:status, account: bob, uri: 'tag:example.com:blahblah') }
-
-    before do
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(sender, status)
-    end
-
-    it 'creates a favourite' do
-      expect(status.favourites.first).to_not be_nil
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :activitypub, username: 'bob', domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
     let(:status) { Fabricate(:status, account: bob) }
diff --git a/spec/services/fetch_remote_status_service_spec.rb b/spec/services/fetch_remote_status_service_spec.rb
index 1c4b4fee2..0e63cc9eb 100644
--- a/spec/services/fetch_remote_status_service_spec.rb
+++ b/spec/services/fetch_remote_status_service_spec.rb
@@ -31,56 +31,4 @@ RSpec.describe FetchRemoteStatusService, type: :service do
       expect(status.text).to eq 'Lorem ipsum'
     end
   end
-
-  context 'protocol is :ostatus' do
-    subject { described_class.new }
-
-    before do
-      Fabricate(:account, username: 'tracer', domain: 'real.domain', remote_url: 'https://real.domain/users/tracer')
-    end
-
-    it 'does not create status with author at different domain' do
-      status_body = <<-XML.squish
-        <?xml version="1.0"?>
-        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0">
-          <id>tag:real.domain,2017-04-27:objectId=4487555:objectType=Status</id>
-          <published>2017-04-27T13:49:25Z</published>
-          <updated>2017-04-27T13:49:25Z</updated>
-          <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
-          <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
-          <author>
-            <id>https://real.domain/users/tracer</id>
-            <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
-            <uri>https://real.domain/users/tracer</uri>
-            <name>tracer</name>
-          </author>
-          <content type="html">Overwatch rocks</content>
-        </entry>
-      XML
-
-      expect(subject.call('https://fake.domain/foo', status_body)).to be_nil
-    end
-
-    it 'does not create status with wrong id when id uses http format' do
-      status_body = <<-XML.squish
-        <?xml version="1.0"?>
-        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0">
-          <id>https://other-real.domain/statuses/123</id>
-          <published>2017-04-27T13:49:25Z</published>
-          <updated>2017-04-27T13:49:25Z</updated>
-          <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
-          <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
-          <author>
-            <id>https://real.domain/users/tracer</id>
-            <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
-            <uri>https://real.domain/users/tracer</uri>
-            <name>tracer</name>
-          </author>
-          <content type="html">Overwatch rocks</content>
-        </entry>
-      XML
-
-      expect(subject.call('https://real.domain/statuses/456', status_body)).to be_nil
-    end
-  end
 end
diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb
index c30de8eeb..3b2f9d698 100644
--- a/spec/services/process_mentions_service_spec.rb
+++ b/spec/services/process_mentions_service_spec.rb
@@ -7,37 +7,6 @@ RSpec.describe ProcessMentionsService, type: :service do
 
   subject { ProcessMentionsService.new }
 
-  context 'OStatus with public toot' do
-    let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com') }
-
-    before do
-      stub_request(:post, remote_user.salmon_url)
-      subject.call(status)
-    end
-
-    it 'does not create a mention' do
-      expect(remote_user.mentions.where(status: status).count).to eq 0
-    end
-  end
-
-  context 'OStatus with private toot' do
-    let(:visibility)  { :private }
-    let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com') }
-
-    before do
-      stub_request(:post, remote_user.salmon_url)
-      subject.call(status)
-    end
-
-    it 'does not create a mention' do
-      expect(remote_user.mentions.where(status: status).count).to eq 0
-    end
-
-    it 'does not post to remote user\'s Salmon end point' do
-      expect(a_request(:post, remote_user.salmon_url)).to_not have_been_made
-    end
-  end
-
   context 'ActivityPub' do
     context do
       let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb
index 58fb46f0f..e2077f282 100644
--- a/spec/services/reblog_service_spec.rb
+++ b/spec/services/reblog_service_spec.rb
@@ -32,22 +32,6 @@ RSpec.describe ReblogService, type: :service do
     end
   end
 
-  context 'OStatus' do
-    let(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com') }
-    let(:status) { Fabricate(:status, account: bob, uri: 'tag:example.com;something:something') }
-
-    subject { ReblogService.new }
-
-    before do
-      stub_request(:post, 'http://salmon.example.com')
-      subject.call(alice, status)
-    end
-
-    it 'creates a reblog' do
-      expect(status.reblogs.count).to eq 1
-    end
-  end
-
   context 'ActivityPub' do
     let(:bob)    { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
     let(:status) { Fabricate(:status, account: bob) }
diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb
index 1aec060db..732cb07f7 100644
--- a/spec/services/reject_follow_service_spec.rb
+++ b/spec/services/reject_follow_service_spec.rb
@@ -22,24 +22,6 @@ RSpec.describe RejectFollowService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-
-    before do
-      FollowRequest.create(account: bob, target_account: sender)
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(bob, sender)
-    end
-
-    it 'removes follow request' do
-      expect(bob.requested?(sender)).to be false
-    end
-
-    it 'does not create follow relation' do
-      expect(bob.following?(sender)).to be false
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 
diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb
index 7ce75b2c7..21fb0cd35 100644
--- a/spec/services/remove_status_service_spec.rb
+++ b/spec/services/remove_status_service_spec.rb
@@ -4,7 +4,7 @@ RSpec.describe RemoveStatusService, type: :service do
   subject { RemoveStatusService.new }
 
   let!(:alice)  { Fabricate(:account, user: Fabricate(:user)) }
-  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
+  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') }
   let!(:jeff)   { Fabricate(:account) }
   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
   let!(:bill)   { Fabricate(:account, username: 'bill', protocol: :activitypub, domain: 'example2.com', inbox_url: 'http://example2.com/inbox') }
diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb
index 6350c6834..c43ab24b0 100644
--- a/spec/services/unblock_service_spec.rb
+++ b/spec/services/unblock_service_spec.rb
@@ -18,20 +18,6 @@ RSpec.describe UnblockService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-
-    before do
-      sender.block!(bob)
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(sender, bob)
-    end
-
-    it 'destroys the blocking relation' do
-      expect(sender.blocking?(bob)).to be false
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 
diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb
index 84b5dafbc..7f0b575e4 100644
--- a/spec/services/unfollow_service_spec.rb
+++ b/spec/services/unfollow_service_spec.rb
@@ -18,20 +18,6 @@ RSpec.describe UnfollowService, type: :service do
     end
   end
 
-  describe 'remote OStatus' do
-    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
-
-    before do
-      sender.follow!(bob)
-      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
-      subject.call(sender, bob)
-    end
-
-    it 'destroys the following relation' do
-      expect(sender.following?(bob)).to be false
-    end
-  end
-
   describe 'remote ActivityPub' do
     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 
diff --git a/spec/validators/blacklisted_email_validator_spec.rb b/spec/validators/blacklisted_email_validator_spec.rb
index 53b355a57..f7d5e01bc 100644
--- a/spec/validators/blacklisted_email_validator_spec.rb
+++ b/spec/validators/blacklisted_email_validator_spec.rb
@@ -9,23 +9,36 @@ RSpec.describe BlacklistedEmailValidator, type: :validator do
 
     before do
       allow(user).to receive(:valid_invitation?) { false }
-      allow_any_instance_of(described_class).to receive(:blocked_email?) { blocked_email }
-      described_class.new.validate(user)
+      allow_any_instance_of(described_class).to receive(:blocked_email_provider?) { blocked_email }
     end
 
-    context 'blocked_email?' do
+    subject { described_class.new.validate(user); errors }
+
+    context 'when e-mail provider is blocked' do
       let(:blocked_email) { true }
 
-      it 'calls errors.add' do
-        expect(errors).to have_received(:add).with(:email, :blocked)
+      it 'adds error' do
+        expect(subject).to have_received(:add).with(:email, :blocked)
       end
     end
 
-    context '!blocked_email?' do
+    context 'when e-mail provider is not blocked' do
       let(:blocked_email) { false }
 
-      it 'not calls errors.add' do
-        expect(errors).not_to have_received(:add).with(:email, :blocked)
+      it 'does not add errors' do
+        expect(subject).not_to have_received(:add).with(:email, :blocked)
+      end
+
+      context 'when canonical e-mail is blocked' do
+        let(:other_user) { Fabricate(:user, email: 'i.n.f.o@mail.com') }
+
+        before do
+          other_user.account.suspend!
+        end
+
+        it 'adds error' do
+          expect(subject).to have_received(:add).with(:email, :taken)
+        end
       end
     end
   end
diff --git a/spec/workers/web/push_notification_worker_spec.rb b/spec/workers/web/push_notification_worker_spec.rb
new file mode 100644
index 000000000..5bc24f888
--- /dev/null
+++ b/spec/workers/web/push_notification_worker_spec.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Web::PushNotificationWorker do
+  subject { described_class.new }
+
+  let(:p256dh) { 'BN4GvZtEZiZuqFxSKVZfSfluwKBD7UxHNBmWkfiZfCtgDE8Bwh-_MtLXbBxTBAWH9r7IPKL0lhdcaqtL1dfxU5E=' }
+  let(:auth) { 'Q2BoAjC09xH3ywDLNJr-dA==' }
+  let(:endpoint) { 'https://updates.push.services.mozilla.com/push/v1/subscription-id' }
+  let(:user) { Fabricate(:user) }
+  let(:notification) { Fabricate(:notification) }
+  let(:subscription) { Fabricate(:web_push_subscription, user_id: user.id, key_p256dh: p256dh, key_auth: auth, endpoint: endpoint, data: { alerts: { notification.type => true } }) }
+  let(:vapid_public_key) { 'BB37UCyc8LLX4PNQSe-04vSFvpUWGrENubUaslVFM_l5TxcGVMY0C3RXPeUJAQHKYlcOM2P4vTYmkoo0VZGZTM4=' }
+  let(:vapid_private_key) { 'OPrw1Sum3gRoL4-DXfSCC266r-qfFSRZrnj8MgIhRHg=' }
+  let(:vapid_key) { Webpush::VapidKey.from_keys(vapid_public_key, vapid_private_key) }
+  let(:contact_email) { 'sender@example.com' }
+  let(:ciphertext) { "+\xB8\xDBT}\x13\xB6\xDD.\xF9\xB0\xA7\xC8\xD2\x80\xFD\x99#\xF7\xAC\x83\xA4\xDB,\x1F\xB5\xB9w\x85>\xF7\xADr" }
+  let(:salt) { "X\x97\x953\xE4X\xF8_w\xE7T\x95\xC51q\xFE" }
+  let(:server_public_key) { "\x04\b-RK9w\xDD$\x16lFz\xF9=\xB4~\xC6\x12k\xF3\xF40t\xA9\xC1\fR\xC3\x81\x80\xAC\f\x7F\xE4\xCC\x8E\xC2\x88 n\x8BB\xF1\x9C\x14\a\xFA\x8D\xC9\x80\xA1\xDDyU\\&c\x01\x88#\x118Ua" }
+  let(:shared_secret) { "\t\xA7&\x85\t\xC5m\b\xA8\xA7\xF8B{1\xADk\xE1y'm\xEDE\xEC\xDD\xEDj\xB3$s\xA9\xDA\xF0" }
+  let(:payload) { { ciphertext: ciphertext, salt: salt, server_public_key: server_public_key, shared_secret: shared_secret } }
+
+  describe 'perform' do
+    before do
+      allow_any_instance_of(subscription.class).to receive(:contact_email).and_return(contact_email)
+      allow_any_instance_of(subscription.class).to receive(:vapid_key).and_return(vapid_key)
+      allow(Webpush::Encryption).to receive(:encrypt).and_return(payload)
+      allow(JWT).to receive(:encode).and_return('jwt.encoded.payload')
+
+      stub_request(:post, endpoint).to_return(status: 201, body: '')
+
+      subject.perform(subscription.id, notification.id)
+    end
+
+    it 'calls the relevant service with the correct headers' do
+      expect(a_request(:post, endpoint).with(headers: {
+        'Content-Encoding' => 'aesgcm',
+        'Content-Type' => 'application/octet-stream',
+        'Crypto-Key' => 'dh=BAgtUks5d90kFmxGevk9tH7GEmvz9DB0qcEMUsOBgKwMf-TMjsKIIG6LQvGcFAf6jcmAod15VVwmYwGIIxE4VWE;p256ecdsa=' + vapid_public_key.delete('='),
+        'Encryption' => 'salt=WJeVM-RY-F9351SVxTFx_g',
+        'Ttl' => '172800',
+        'Urgency' => 'normal',
+        'Authorization' => 'WebPush jwt.encoded.payload',
+      }, body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr")).to have_been_made
+    end
+  end
+end
diff --git a/streaming/index.js b/streaming/index.js
index 724235712..ac8e80fb9 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -99,11 +99,11 @@ const startMaster = () => {
     log.warn('UNIX domain socket is now supported by using SOCKET. Please migrate from PORT hack.');
   }
 
-  log.info(`Starting streaming API server master with ${numWorkers} workers`);
+  log.warn(`Starting streaming API server master with ${numWorkers} workers`);
 };
 
 const startWorker = (workerId) => {
-  log.info(`Starting worker ${workerId}`);
+  log.warn(`Starting worker ${workerId}`);
 
   const pgConfigs = {
     development: {
@@ -1084,16 +1084,16 @@ const startWorker = (workerId) => {
       }
 
       ws.isAlive = false;
-      ws.ping('', false, true);
+      ws.ping('', false);
     });
   }, 30000);
 
   attachServerWithConfig(server, address => {
-    log.info(`Worker ${workerId} now listening on ${address}`);
+    log.warn(`Worker ${workerId} now listening on ${address}`);
   });
 
   const onExit = () => {
-    log.info(`Worker ${workerId} exiting, bye bye`);
+    log.warn(`Worker ${workerId} exiting`);
     server.close();
     process.exit(0);
   };
diff --git a/yarn.lock b/yarn.lock
index 7e90653ae..11f999089 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,25 +16,25 @@
   dependencies:
     "@babel/highlight" "^7.12.13"
 
-"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8":
-  version "7.13.12"
-  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1"
-  integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8", "@babel/compat-data@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919"
+  integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==
 
-"@babel/core@^7.1.0", "@babel/core@^7.13.14", "@babel/core@^7.7.2", "@babel/core@^7.7.5":
-  version "7.13.14"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06"
-  integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==
+"@babel/core@^7.1.0", "@babel/core@^7.14.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.0.tgz#47299ff3ec8d111b493f1a9d04bf88c04e728d88"
+  integrity sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==
   dependencies:
     "@babel/code-frame" "^7.12.13"
-    "@babel/generator" "^7.13.9"
-    "@babel/helper-compilation-targets" "^7.13.13"
-    "@babel/helper-module-transforms" "^7.13.14"
-    "@babel/helpers" "^7.13.10"
-    "@babel/parser" "^7.13.13"
+    "@babel/generator" "^7.14.0"
+    "@babel/helper-compilation-targets" "^7.13.16"
+    "@babel/helper-module-transforms" "^7.14.0"
+    "@babel/helpers" "^7.14.0"
+    "@babel/parser" "^7.14.0"
     "@babel/template" "^7.12.13"
-    "@babel/traverse" "^7.13.13"
-    "@babel/types" "^7.13.14"
+    "@babel/traverse" "^7.14.0"
+    "@babel/types" "^7.14.0"
     convert-source-map "^1.7.0"
     debug "^4.1.0"
     gensync "^1.0.0-beta.2"
@@ -42,12 +42,12 @@
     semver "^6.3.0"
     source-map "^0.5.0"
 
-"@babel/generator@^7.13.9":
-  version "7.13.9"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39"
-  integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==
+"@babel/generator@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.0.tgz#0f35d663506c43e4f10898fbda0d752ec75494be"
+  integrity sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==
   dependencies:
-    "@babel/types" "^7.13.0"
+    "@babel/types" "^7.14.0"
     jsesc "^2.5.1"
     source-map "^0.5.0"
 
@@ -81,20 +81,20 @@
     "@babel/helper-annotate-as-pure" "^7.12.13"
     "@babel/types" "^7.12.13"
 
-"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8":
-  version "7.13.13"
-  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5"
-  integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8":
+  version "7.13.16"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c"
+  integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==
   dependencies:
-    "@babel/compat-data" "^7.13.12"
+    "@babel/compat-data" "^7.13.15"
     "@babel/helper-validator-option" "^7.12.17"
     browserslist "^4.14.5"
     semver "^6.3.0"
 
-"@babel/helper-create-class-features-plugin@^7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.0.tgz#28d04ad9cfbd1ed1d8b988c9ea7b945263365846"
-  integrity sha512-twwzhthM4/+6o9766AW2ZBHpIHPSGrPGk1+WfHiu13u/lBnggXGNYCpeAyVfNwGDKfkhEDp+WOD/xafoJ2iLjA==
+"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.13.11":
+  version "7.13.11"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6"
+  integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==
   dependencies:
     "@babel/helper-function-name" "^7.12.13"
     "@babel/helper-member-expression-to-functions" "^7.13.0"
@@ -102,6 +102,18 @@
     "@babel/helper-replace-supers" "^7.13.0"
     "@babel/helper-split-export-declaration" "^7.12.13"
 
+"@babel/helper-create-class-features-plugin@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz#38367d3dab125b12f94273de418f4df23a11a15e"
+  integrity sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.12.13"
+    "@babel/helper-function-name" "^7.12.13"
+    "@babel/helper-member-expression-to-functions" "^7.13.12"
+    "@babel/helper-optimise-call-expression" "^7.12.13"
+    "@babel/helper-replace-supers" "^7.13.12"
+    "@babel/helper-split-export-declaration" "^7.12.13"
+
 "@babel/helper-create-regexp-features-plugin@^7.12.13":
   version "7.12.13"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz#0996d370a92896c612ae41a4215544bd152579c0"
@@ -110,10 +122,10 @@
     "@babel/helper-annotate-as-pure" "^7.12.13"
     regexpu-core "^4.7.1"
 
-"@babel/helper-define-polyfill-provider@^0.1.2":
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.2.tgz#619f01afe1deda460676c25c463b42eaefdb71a2"
-  integrity sha512-hWeolZJivTNGHXHzJjQz/NwDaG4mGXf22ZroOP8bQYgvHNzaQ5tylsVbAcAS2oDjXBwpu8qH2I/654QFS2rDpw==
+"@babel/helper-define-polyfill-provider@^0.2.0":
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1"
+  integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==
   dependencies:
     "@babel/helper-compilation-targets" "^7.13.0"
     "@babel/helper-module-imports" "^7.12.13"
@@ -176,40 +188,26 @@
   dependencies:
     "@babel/types" "^7.13.12"
 
-"@babel/helper-module-imports@^7.0.0-beta.49":
-  version "7.12.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb"
-  integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==
-  dependencies:
-    "@babel/types" "^7.12.5"
-
-"@babel/helper-module-imports@^7.12.13":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"
-  integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==
-  dependencies:
-    "@babel/types" "^7.12.13"
-
-"@babel/helper-module-imports@^7.13.12":
+"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12":
   version "7.13.12"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
   integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==
   dependencies:
     "@babel/types" "^7.13.12"
 
-"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14":
-  version "7.13.14"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef"
-  integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==
+"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz#8fcf78be220156f22633ee204ea81f73f826a8ad"
+  integrity sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==
   dependencies:
     "@babel/helper-module-imports" "^7.13.12"
     "@babel/helper-replace-supers" "^7.13.12"
     "@babel/helper-simple-access" "^7.13.12"
     "@babel/helper-split-export-declaration" "^7.12.13"
-    "@babel/helper-validator-identifier" "^7.12.11"
+    "@babel/helper-validator-identifier" "^7.14.0"
     "@babel/template" "^7.12.13"
-    "@babel/traverse" "^7.13.13"
-    "@babel/types" "^7.13.14"
+    "@babel/traverse" "^7.14.0"
+    "@babel/types" "^7.14.0"
 
 "@babel/helper-optimise-call-expression@^7.12.13":
   version "7.12.13"
@@ -262,13 +260,6 @@
     "@babel/traverse" "^7.13.0"
     "@babel/types" "^7.13.12"
 
-"@babel/helper-simple-access@^7.12.13":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4"
-  integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==
-  dependencies:
-    "@babel/types" "^7.12.13"
-
 "@babel/helper-simple-access@^7.13.12":
   version "7.13.12"
   resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
@@ -295,6 +286,11 @@
   resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
   integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
 
+"@babel/helper-validator-identifier@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
+  integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
+
 "@babel/helper-validator-option@^7.12.17":
   version "7.12.17"
   resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
@@ -310,14 +306,14 @@
     "@babel/traverse" "^7.13.0"
     "@babel/types" "^7.13.0"
 
-"@babel/helpers@^7.13.10":
-  version "7.13.10"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8"
-  integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==
+"@babel/helpers@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62"
+  integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==
   dependencies:
     "@babel/template" "^7.12.13"
-    "@babel/traverse" "^7.13.0"
-    "@babel/types" "^7.13.0"
+    "@babel/traverse" "^7.14.0"
+    "@babel/types" "^7.14.0"
 
 "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
   version "7.12.13"
@@ -328,10 +324,10 @@
     chalk "^2.0.0"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.13", "@babel/parser@^7.7.0":
-  version "7.13.13"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df"
-  integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==
+"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.0", "@babel/parser@^7.7.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.0.tgz#2f0ebfed92bcddcc8395b91f1895191ce2760380"
+  integrity sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==
 
 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12":
   version "7.13.12"
@@ -342,16 +338,16 @@
     "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
     "@babel/plugin-proposal-optional-chaining" "^7.13.12"
 
-"@babel/plugin-proposal-async-generator-functions@^7.13.8":
-  version "7.13.8"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1"
-  integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==
+"@babel/plugin-proposal-async-generator-functions@^7.13.15":
+  version "7.13.15"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b"
+  integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.13.0"
     "@babel/helper-remap-async-to-generator" "^7.13.0"
     "@babel/plugin-syntax-async-generators" "^7.8.4"
 
-"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.8.3":
+"@babel/plugin-proposal-class-properties@^7.13.0":
   version "7.13.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37"
   integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==
@@ -359,12 +355,20 @@
     "@babel/helper-create-class-features-plugin" "^7.13.0"
     "@babel/helper-plugin-utils" "^7.13.0"
 
-"@babel/plugin-proposal-decorators@^7.13.5":
-  version "7.13.5"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.5.tgz#d28071457a5ba8ee1394b23e38d5dcf32ea20ef7"
-  integrity sha512-i0GDfVNuoapwiheevUOuSW67mInqJ8qw7uWfpjNVeHMn143kXblEy/bmL9AdZ/0yf/4BMQeWXezK0tQIvNPqag==
+"@babel/plugin-proposal-class-static-block@^7.13.11":
+  version "7.13.11"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz#6fcbba4a962702c17e5371a0c7b39afde186d703"
+  integrity sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==
   dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.13.0"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/plugin-syntax-class-static-block" "^7.12.13"
+
+"@babel/plugin-proposal-decorators@^7.13.15":
+  version "7.13.15"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz#e91ccfef2dc24dd5bd5dcc9fc9e2557c684ecfb8"
+  integrity sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.13.11"
     "@babel/helper-plugin-utils" "^7.13.0"
     "@babel/plugin-syntax-decorators" "^7.12.13"
 
@@ -452,6 +456,16 @@
     "@babel/helper-create-class-features-plugin" "^7.13.0"
     "@babel/helper-plugin-utils" "^7.13.0"
 
+"@babel/plugin-proposal-private-property-in-object@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636"
+  integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.12.13"
+    "@babel/helper-create-class-features-plugin" "^7.14.0"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.0"
+
 "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
   version "7.12.13"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba"
@@ -481,6 +495,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.12.13"
 
+"@babel/plugin-syntax-class-static-block@^7.12.13":
+  version "7.12.13"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c"
+  integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
 "@babel/plugin-syntax-decorators@^7.12.13":
   version "7.12.13"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648"
@@ -565,6 +586,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.8.0"
 
+"@babel/plugin-syntax-private-property-in-object@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b"
+  integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.13.0"
+
 "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3":
   version "7.12.13"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178"
@@ -595,12 +623,12 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.12.13"
 
-"@babel/plugin-transform-block-scoping@^7.12.13":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61"
-  integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==
+"@babel/plugin-transform-block-scoping@^7.14.1":
+  version "7.14.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz#ac1b3a8e3d8cbb31efc6b9be2f74eb9823b74ab2"
+  integrity sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
 
 "@babel/plugin-transform-classes@^7.13.0":
   version "7.13.0"
@@ -622,10 +650,10 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.13.0"
 
-"@babel/plugin-transform-destructuring@^7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963"
-  integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==
+"@babel/plugin-transform-destructuring@^7.13.17":
+  version "7.13.17"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27"
+  integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.13.0"
 
@@ -681,23 +709,23 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.12.13"
 
-"@babel/plugin-transform-modules-amd@^7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3"
-  integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==
+"@babel/plugin-transform-modules-amd@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz#589494b5b290ff76cf7f59c798011f6d77026553"
+  integrity sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==
   dependencies:
-    "@babel/helper-module-transforms" "^7.13.0"
+    "@babel/helper-module-transforms" "^7.14.0"
     "@babel/helper-plugin-utils" "^7.13.0"
     babel-plugin-dynamic-import-node "^2.3.3"
 
-"@babel/plugin-transform-modules-commonjs@^7.13.8":
-  version "7.13.8"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b"
-  integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==
+"@babel/plugin-transform-modules-commonjs@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161"
+  integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==
   dependencies:
-    "@babel/helper-module-transforms" "^7.13.0"
+    "@babel/helper-module-transforms" "^7.14.0"
     "@babel/helper-plugin-utils" "^7.13.0"
-    "@babel/helper-simple-access" "^7.12.13"
+    "@babel/helper-simple-access" "^7.13.12"
     babel-plugin-dynamic-import-node "^2.3.3"
 
 "@babel/plugin-transform-modules-systemjs@^7.13.8":
@@ -711,12 +739,12 @@
     "@babel/helper-validator-identifier" "^7.12.11"
     babel-plugin-dynamic-import-node "^2.3.3"
 
-"@babel/plugin-transform-modules-umd@^7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b"
-  integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==
+"@babel/plugin-transform-modules-umd@^7.14.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34"
+  integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==
   dependencies:
-    "@babel/helper-module-transforms" "^7.13.0"
+    "@babel/helper-module-transforms" "^7.14.0"
     "@babel/helper-plugin-utils" "^7.13.0"
 
 "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13":
@@ -796,10 +824,10 @@
     "@babel/helper-annotate-as-pure" "^7.10.4"
     "@babel/helper-plugin-utils" "^7.10.4"
 
-"@babel/plugin-transform-regenerator@^7.12.13":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5"
-  integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==
+"@babel/plugin-transform-regenerator@^7.13.15":
+  version "7.13.15"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39"
+  integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==
   dependencies:
     regenerator-transform "^0.14.2"
 
@@ -810,16 +838,16 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.12.13"
 
-"@babel/plugin-transform-runtime@^7.13.10":
-  version "7.13.10"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz#a1e40d22e2bf570c591c9c7e5ab42d6bf1e419e1"
-  integrity sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==
+"@babel/plugin-transform-runtime@^7.13.15":
+  version "7.13.15"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7"
+  integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==
   dependencies:
-    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-module-imports" "^7.13.12"
     "@babel/helper-plugin-utils" "^7.13.0"
-    babel-plugin-polyfill-corejs2 "^0.1.4"
-    babel-plugin-polyfill-corejs3 "^0.1.3"
-    babel-plugin-polyfill-regenerator "^0.1.2"
+    babel-plugin-polyfill-corejs2 "^0.2.0"
+    babel-plugin-polyfill-corejs3 "^0.2.0"
+    babel-plugin-polyfill-regenerator "^0.2.0"
     semver "^6.3.0"
 
 "@babel/plugin-transform-shorthand-properties@^7.12.13":
@@ -873,18 +901,19 @@
     "@babel/helper-create-regexp-features-plugin" "^7.12.13"
     "@babel/helper-plugin-utils" "^7.12.13"
 
-"@babel/preset-env@^7.13.12":
-  version "7.13.12"
-  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237"
-  integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==
+"@babel/preset-env@^7.14.1":
+  version "7.14.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.1.tgz#b55914e2e68885ea03f69600b2d3537e54574a93"
+  integrity sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==
   dependencies:
-    "@babel/compat-data" "^7.13.12"
-    "@babel/helper-compilation-targets" "^7.13.10"
+    "@babel/compat-data" "^7.14.0"
+    "@babel/helper-compilation-targets" "^7.13.16"
     "@babel/helper-plugin-utils" "^7.13.0"
     "@babel/helper-validator-option" "^7.12.17"
     "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12"
-    "@babel/plugin-proposal-async-generator-functions" "^7.13.8"
+    "@babel/plugin-proposal-async-generator-functions" "^7.13.15"
     "@babel/plugin-proposal-class-properties" "^7.13.0"
+    "@babel/plugin-proposal-class-static-block" "^7.13.11"
     "@babel/plugin-proposal-dynamic-import" "^7.13.8"
     "@babel/plugin-proposal-export-namespace-from" "^7.12.13"
     "@babel/plugin-proposal-json-strings" "^7.13.8"
@@ -895,9 +924,11 @@
     "@babel/plugin-proposal-optional-catch-binding" "^7.13.8"
     "@babel/plugin-proposal-optional-chaining" "^7.13.12"
     "@babel/plugin-proposal-private-methods" "^7.13.0"
+    "@babel/plugin-proposal-private-property-in-object" "^7.14.0"
     "@babel/plugin-proposal-unicode-property-regex" "^7.12.13"
     "@babel/plugin-syntax-async-generators" "^7.8.4"
     "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.12.13"
     "@babel/plugin-syntax-dynamic-import" "^7.8.3"
     "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
     "@babel/plugin-syntax-json-strings" "^7.8.3"
@@ -907,14 +938,15 @@
     "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
     "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
     "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.0"
     "@babel/plugin-syntax-top-level-await" "^7.12.13"
     "@babel/plugin-transform-arrow-functions" "^7.13.0"
     "@babel/plugin-transform-async-to-generator" "^7.13.0"
     "@babel/plugin-transform-block-scoped-functions" "^7.12.13"
-    "@babel/plugin-transform-block-scoping" "^7.12.13"
+    "@babel/plugin-transform-block-scoping" "^7.14.1"
     "@babel/plugin-transform-classes" "^7.13.0"
     "@babel/plugin-transform-computed-properties" "^7.13.0"
-    "@babel/plugin-transform-destructuring" "^7.13.0"
+    "@babel/plugin-transform-destructuring" "^7.13.17"
     "@babel/plugin-transform-dotall-regex" "^7.12.13"
     "@babel/plugin-transform-duplicate-keys" "^7.12.13"
     "@babel/plugin-transform-exponentiation-operator" "^7.12.13"
@@ -922,16 +954,16 @@
     "@babel/plugin-transform-function-name" "^7.12.13"
     "@babel/plugin-transform-literals" "^7.12.13"
     "@babel/plugin-transform-member-expression-literals" "^7.12.13"
-    "@babel/plugin-transform-modules-amd" "^7.13.0"
-    "@babel/plugin-transform-modules-commonjs" "^7.13.8"
+    "@babel/plugin-transform-modules-amd" "^7.14.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.14.0"
     "@babel/plugin-transform-modules-systemjs" "^7.13.8"
-    "@babel/plugin-transform-modules-umd" "^7.13.0"
+    "@babel/plugin-transform-modules-umd" "^7.14.0"
     "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13"
     "@babel/plugin-transform-new-target" "^7.12.13"
     "@babel/plugin-transform-object-super" "^7.12.13"
     "@babel/plugin-transform-parameters" "^7.13.0"
     "@babel/plugin-transform-property-literals" "^7.12.13"
-    "@babel/plugin-transform-regenerator" "^7.12.13"
+    "@babel/plugin-transform-regenerator" "^7.13.15"
     "@babel/plugin-transform-reserved-words" "^7.12.13"
     "@babel/plugin-transform-shorthand-properties" "^7.12.13"
     "@babel/plugin-transform-spread" "^7.13.0"
@@ -941,10 +973,10 @@
     "@babel/plugin-transform-unicode-escapes" "^7.12.13"
     "@babel/plugin-transform-unicode-regex" "^7.12.13"
     "@babel/preset-modules" "^0.1.4"
-    "@babel/types" "^7.13.12"
-    babel-plugin-polyfill-corejs2 "^0.1.4"
-    babel-plugin-polyfill-corejs3 "^0.1.3"
-    babel-plugin-polyfill-regenerator "^0.1.2"
+    "@babel/types" "^7.14.1"
+    babel-plugin-polyfill-corejs2 "^0.2.0"
+    babel-plugin-polyfill-corejs3 "^0.2.0"
+    babel-plugin-polyfill-regenerator "^0.2.0"
     core-js-compat "^3.9.0"
     semver "^6.3.0"
 
@@ -986,10 +1018,10 @@
   dependencies:
     regenerator-runtime "^0.12.0"
 
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
-  version "7.13.10"
-  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d"
-  integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6"
+  integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==
   dependencies:
     regenerator-runtime "^0.13.4"
 
@@ -1002,36 +1034,26 @@
     "@babel/parser" "^7.12.13"
     "@babel/types" "^7.12.13"
 
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.7.0":
-  version "7.13.13"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d"
-  integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.7.0":
+  version "7.14.0"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.0.tgz#cea0dc8ae7e2b1dec65f512f39f3483e8cc95aef"
+  integrity sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==
   dependencies:
     "@babel/code-frame" "^7.12.13"
-    "@babel/generator" "^7.13.9"
+    "@babel/generator" "^7.14.0"
     "@babel/helper-function-name" "^7.12.13"
     "@babel/helper-split-export-declaration" "^7.12.13"
-    "@babel/parser" "^7.13.13"
-    "@babel/types" "^7.13.13"
+    "@babel/parser" "^7.14.0"
+    "@babel/types" "^7.14.0"
     debug "^4.1.0"
     globals "^11.1.0"
 
-"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.4", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
-  version "7.13.14"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d"
-  integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==
+"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.4", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.1", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+  version "7.14.1"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.1.tgz#095bd12f1c08ab63eff6e8f7745fa7c9cc15a9db"
+  integrity sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==
   dependencies:
-    "@babel/helper-validator-identifier" "^7.12.11"
-    lodash "^4.17.19"
-    to-fast-properties "^2.0.0"
-
-"@babel/types@^7.12.5":
-  version "7.13.13"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.13.tgz#dcd8b815b38f537a3697ce84c8e3cc62197df96f"
-  integrity sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.12.11"
-    lodash "^4.17.19"
+    "@babel/helper-validator-identifier" "^7.14.0"
     to-fast-properties "^2.0.0"
 
 "@bcoe/v8-coverage@^0.2.3":
@@ -1112,10 +1134,10 @@
   resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
   integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
 
-"@eslint/eslintrc@^0.4.0":
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
-  integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
+"@eslint/eslintrc@^0.4.1":
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14"
+  integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==
   dependencies:
     ajv "^6.12.4"
     debug "^4.1.1"
@@ -1391,10 +1413,10 @@
     lz-string "^1.4.4"
     pretty-format "^26.6.2"
 
-"@testing-library/jest-dom@^5.11.10":
-  version "5.11.10"
-  resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz#1cd90715023e1627f5ed26ab3b38e6f22d77046c"
-  integrity sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ==
+"@testing-library/jest-dom@^5.12.0":
+  version "5.12.0"
+  resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz#6a5d340b092c44b7bce17a4791b47d9bc2c61443"
+  integrity sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==
   dependencies:
     "@babel/runtime" "^7.9.2"
     "@types/testing-library__jest-dom" "^5.9.1"
@@ -2287,29 +2309,29 @@ babel-plugin-macros@^2.8.0:
     cosmiconfig "^6.0.0"
     resolve "^1.12.0"
 
-babel-plugin-polyfill-corejs2@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.5.tgz#8fc4779965311393594a1b9ad3adefab3860c8fe"
-  integrity sha512-5IzdFIjYWqlOFVr/hMYUpc+5fbfuvJTAISwIY58jhH++ZtawtNlcJnxAixlk8ahVwHCz1ipW/kpXYliEBp66wg==
+babel-plugin-polyfill-corejs2@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4"
+  integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==
   dependencies:
-    "@babel/compat-data" "^7.13.0"
-    "@babel/helper-define-polyfill-provider" "^0.1.2"
+    "@babel/compat-data" "^7.13.11"
+    "@babel/helper-define-polyfill-provider" "^0.2.0"
     semver "^6.1.1"
 
-babel-plugin-polyfill-corejs3@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.4.tgz#2ae290200e953bade30907b7a3bebcb696e6c59d"
-  integrity sha512-ysSzFn/qM8bvcDAn4mC7pKk85Y5dVaoa9h4u0mHxOEpDzabsseONhUpR7kHxpUinfj1bjU7mUZqD23rMZBoeSg==
+babel-plugin-polyfill-corejs3@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2"
+  integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.1.2"
-    core-js-compat "^3.8.1"
+    "@babel/helper-define-polyfill-provider" "^0.2.0"
+    core-js-compat "^3.9.1"
 
-babel-plugin-polyfill-regenerator@^0.1.2:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.3.tgz#350f857225fc640ae1ec78d1536afcbb457db841"
-  integrity sha512-hRjTJQiOYt/wBKEc+8V8p9OJ9799blAJcuKzn1JXh3pApHoWl1Emxh2BHc6MC7Qt6bbr3uDpNxaYQnATLIudEg==
+babel-plugin-polyfill-regenerator@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8"
+  integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.1.2"
+    "@babel/helper-define-polyfill-provider" "^0.2.0"
 
 babel-plugin-preval@^5.0.0:
   version "5.0.0"
@@ -2877,10 +2899,10 @@ char-regex@^1.0.2:
   resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
   integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
 
-"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1:
-  version "3.4.1"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1"
-  integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
+  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
   dependencies:
     anymatch "~3.1.1"
     braces "~3.0.2"
@@ -2888,9 +2910,9 @@ char-regex@^1.0.2:
     is-binary-path "~2.1.0"
     is-glob "~4.0.1"
     normalize-path "~3.0.0"
-    readdirp "~3.4.0"
+    readdirp "~3.5.0"
   optionalDependencies:
-    fsevents "~2.1.2"
+    fsevents "~2.3.1"
 
 chokidar@^2.1.8:
   version "2.1.8"
@@ -2961,10 +2983,10 @@ class-utils@^0.3.5:
     isobject "^3.0.0"
     static-extend "^0.1.1"
 
-classnames@^2.2.5:
-  version "2.2.6"
-  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
-  integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+classnames@^2.2.5, classnames@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
+  integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
 
 clean-stack@^2.0.0:
   version "2.2.0"
@@ -3250,10 +3272,10 @@ copy-descriptor@^0.1.0:
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
   integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
 
-core-js-compat@^3.8.1, core-js-compat@^3.9.0:
-  version "3.9.0"
-  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.0.tgz#29da39385f16b71e1915565aa0385c4e0963ad56"
-  integrity sha512-YK6fwFjCOKWwGnjFUR3c544YsnA/7DoLL0ysncuOJ4pwbriAtOpvM2bygdlcXbvQCQZ7bBU9CL4t7tGl7ETRpQ==
+core-js-compat@^3.9.0, core-js-compat@^3.9.1:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.10.1.tgz#62183a3a77ceeffcc420d907a3e6fc67d9b27f1c"
+  integrity sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==
   dependencies:
     browserslist "^4.16.3"
     semver "7.0.0"
@@ -3419,23 +3441,22 @@ css-list-helpers@^1.0.1:
   dependencies:
     tcomb "^2.5.0"
 
-css-loader@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00"
-  integrity sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw==
+css-loader@^5.2.4:
+  version "5.2.4"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.4.tgz#e985dcbce339812cb6104ef3670f08f9893a1536"
+  integrity sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==
   dependencies:
     camelcase "^6.2.0"
-    cssesc "^3.0.0"
     icss-utils "^5.1.0"
     loader-utils "^2.0.0"
-    postcss "^8.2.8"
+    postcss "^8.2.10"
     postcss-modules-extract-imports "^3.0.0"
     postcss-modules-local-by-default "^4.0.0"
     postcss-modules-scope "^3.0.0"
     postcss-modules-values "^4.0.0"
     postcss-value-parser "^4.1.0"
     schema-utils "^3.0.0"
-    semver "^7.3.4"
+    semver "^7.3.5"
 
 css-select-base-adapter@^0.1.1:
   version "0.1.1"
@@ -3497,10 +3518,10 @@ cssesc@^3.0.0:
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
   integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
 
-cssnano-preset-default@^4.0.7:
-  version "4.0.7"
-  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
-  integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+cssnano-preset-default@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff"
+  integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==
   dependencies:
     css-declaration-sorter "^4.0.1"
     cssnano-util-raw-cache "^4.0.1"
@@ -3530,7 +3551,7 @@ cssnano-preset-default@^4.0.7:
     postcss-ordered-values "^4.1.2"
     postcss-reduce-initial "^4.0.3"
     postcss-reduce-transforms "^4.0.2"
-    postcss-svgo "^4.0.2"
+    postcss-svgo "^4.0.3"
     postcss-unique-selectors "^4.0.1"
 
 cssnano-util-get-arguments@^4.0.0:
@@ -3555,13 +3576,13 @@ cssnano-util-same-parent@^4.0.0:
   resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
   integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
 
-cssnano@^4.1.10:
-  version "4.1.10"
-  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
-  integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+cssnano@^4.1.11:
+  version "4.1.11"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99"
+  integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==
   dependencies:
     cosmiconfig "^5.0.0"
-    cssnano-preset-default "^4.0.7"
+    cssnano-preset-default "^4.0.8"
     is-resolvable "^1.0.0"
     postcss "^7.0.0"
 
@@ -3756,10 +3777,10 @@ delegates@^1.0.0:
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
   integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
 
-denque@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
-  integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
+denque@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de"
+  integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==
 
 depd@~1.1.2:
   version "1.1.2"
@@ -3932,10 +3953,10 @@ dot-prop@^5.2.0:
   dependencies:
     is-obj "^2.0.0"
 
-dotenv@^8.2.0:
-  version "8.2.0"
-  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
-  integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
+dotenv@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.1.tgz#a889a28a3a515812dde1e7f8183ef5cdf3186b97"
+  integrity sha512-W8FNeNnnvJoYfgkFRKzp8kTgz0T2YY4TJ9xy1Ma0hSebPTK8iquRtpG12TUrSTX5zIN9D/wSLEEuI+Ad35tlyw==
 
 duplexer@^0.1.2:
   version "0.1.2"
@@ -4293,15 +4314,15 @@ eslint-plugin-jsx-a11y@~6.4.1:
     jsx-ast-utils "^3.1.0"
     language-tags "^1.0.5"
 
-eslint-plugin-promise@~4.3.1:
-  version "4.3.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
-  integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
+eslint-plugin-promise@~5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24"
+  integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==
 
-eslint-plugin-react@~7.23.1:
-  version "7.23.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz#f1a2e844c0d1967c822388204a8bc4dee8415b11"
-  integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==
+eslint-plugin-react@~7.23.2:
+  version "7.23.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494"
+  integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==
   dependencies:
     array-includes "^3.1.3"
     array.prototype.flatmap "^1.2.4"
@@ -4388,13 +4409,13 @@ eslint@^2.7.0:
     text-table "~0.2.0"
     user-home "^2.0.0"
 
-eslint@^7.23.0:
-  version "7.23.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325"
-  integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==
+eslint@^7.26.0:
+  version "7.26.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.26.0.tgz#d416fdcdcb3236cd8f282065312813f8c13982f6"
+  integrity sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==
   dependencies:
     "@babel/code-frame" "7.12.11"
-    "@eslint/eslintrc" "^0.4.0"
+    "@eslint/eslintrc" "^0.4.1"
     ajv "^6.10.0"
     chalk "^4.0.0"
     cross-spawn "^7.0.2"
@@ -4987,11 +5008,16 @@ fsevents@^1.2.7:
     bindings "^1.5.0"
     nan "^2.12.1"
 
-fsevents@^2.1.2, fsevents@~2.1.2:
+fsevents@^2.1.2:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
   integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
 
+fsevents@~2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
 function-bind@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -5095,10 +5121,10 @@ glob-parent@^5.0.0, glob-parent@~5.1.0:
   dependencies:
     is-glob "^4.0.1"
 
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1:
-  version "7.1.6"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
-  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@~7.1.1:
+  version "7.1.7"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -5373,9 +5399,9 @@ homedir-polyfill@^1.0.1:
     parse-passwd "^1.0.0"
 
 hosted-git-info@^2.1.4:
-  version "2.8.8"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
-  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+  version "2.8.9"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
 
 hpack.js@^2.1.6:
   version "2.1.6"
@@ -5397,11 +5423,6 @@ hsla-regex@^1.0.0:
   resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
   integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
 
-html-comment-regex@^1.1.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
-  integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
-
 html-encoding-sniffer@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
@@ -6069,13 +6090,6 @@ is-string@^1.0.5:
   resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
   integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
 
-is-svg@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
-  integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
-  dependencies:
-    html-comment-regex "^1.1.0"
-
 is-symbol@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
@@ -6598,10 +6612,10 @@ js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4:
     argparse "^1.0.7"
     esprima "^4.0.0"
 
-js-yaml@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
-  integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
   dependencies:
     argparse "^2.0.1"
 
@@ -6911,11 +6925,6 @@ lodash.defaults@^4.0.1:
   resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
   integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
 
-lodash.escaperegexp@^4.0:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
-  integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=
-
 lodash.get@^4.0:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
@@ -7036,10 +7045,10 @@ mark-loader@^0.1.6:
   resolved "https://registry.yarnpkg.com/mark-loader/-/mark-loader-0.1.6.tgz#0abb477dca7421d70e20128ff6489f5cae8676d5"
   integrity sha1-CrtHfcp0IdcOIBKP9kifXK6GdtU=
 
-marky@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.1.tgz#a3fcf82ffd357756b8b8affec9fdbf3a30dc1b02"
-  integrity sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==
+marky@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.2.tgz#4456765b4de307a13d263a69b0c79bf226e68323"
+  integrity sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==
 
 md5.js@^1.3.4:
   version "1.3.5"
@@ -7178,10 +7187,10 @@ min-indent@^1.0.0:
   resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
   integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
 
-mini-css-extract-plugin@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.0.tgz#c8e571c4b6d63afa56c47260343adf623349c473"
-  integrity sha512-DyQr5DhXXARKZoc4kwvCvD95kh69dUupfuKOmBUqZ4kBTmRaRZcU32lYu3cLd6nEGXhQ1l7LzZ3F/CjItaY6VQ==
+mini-css-extract-plugin@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz#b4db2525af2624899ed64a23b0016e0036411893"
+  integrity sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==
   dependencies:
     loader-utils "^2.0.0"
     schema-utils "^3.0.0"
@@ -7341,10 +7350,10 @@ nan@^2.12.1:
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
   integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
 
-nanoid@^3.1.20:
-  version "3.1.20"
-  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
-  integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
+nanoid@^3.1.22:
+  version "3.1.22"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
+  integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
 
 nanomatch@^1.2.9:
   version "1.2.13"
@@ -8480,12 +8489,11 @@ postcss-selector-parser@^6.0.4:
     uniq "^1.0.1"
     util-deprecate "^1.0.2"
 
-postcss-svgo@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
-  integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+postcss-svgo@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
+  integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==
   dependencies:
-    is-svg "^3.0.0"
     postcss "^7.0.0"
     postcss-value-parser "^3.0.0"
     svgo "^1.0.0"
@@ -8528,13 +8536,13 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32:
     source-map "^0.6.1"
     supports-color "^6.1.0"
 
-postcss@^8.2.8:
-  version "8.2.8"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece"
-  integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==
+postcss@^8.2.10:
+  version "8.2.10"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b"
+  integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==
   dependencies:
     colorette "^1.2.2"
-    nanoid "^3.1.20"
+    nanoid "^3.1.22"
     source-map "^0.6.1"
 
 postgres-array@~2.0.0:
@@ -8927,10 +8935,10 @@ react-redux-loading-bar@^4.0.8:
     prop-types "^15.6.2"
     react-lifecycles-compat "^3.0.2"
 
-react-redux@^7.2.3:
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.3.tgz#4c084618600bb199012687da9e42123cca3f0be9"
-  integrity sha512-ZhAmQ1lrK+Pyi0ZXNMUZuYxYAZd59wFuVDGUt536kSGdD0ya9Q7BfsE95E3TsFLE3kOSFp5m6G5qbatE+Ic1+w==
+react-redux@^7.2.4:
+  version "7.2.4"
+  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225"
+  integrity sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==
   dependencies:
     "@babel/runtime" "^7.12.1"
     "@types/react-redux" "^7.1.16"
@@ -9145,10 +9153,10 @@ readdirp@^2.2.1:
     micromatch "^3.1.10"
     readable-stream "^2.0.2"
 
-readdirp@~3.4.0:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
-  integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
+readdirp@~3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+  integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
   dependencies:
     picomatch "^2.2.1"
 
@@ -9169,10 +9177,10 @@ redent@^3.0.0:
     indent-string "^4.0.0"
     strip-indent "^3.0.0"
 
-redis-commands@^1.5.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23"
-  integrity sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==
+redis-commands@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89"
+  integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==
 
 redis-errors@^1.0.0, redis-errors@^1.2.0:
   version "1.2.0"
@@ -9186,13 +9194,13 @@ redis-parser@^3.0.0:
   dependencies:
     redis-errors "^1.0.0"
 
-redis@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/redis/-/redis-3.0.2.tgz#bd47067b8a4a3e6a2e556e57f71cc82c7360150a"
-  integrity sha512-PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ==
+redis@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/redis/-/redis-3.1.2.tgz#766851117e80653d23e0ed536254677ab647638c"
+  integrity sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==
   dependencies:
-    denque "^1.4.1"
-    redis-commands "^1.5.0"
+    denque "^1.5.0"
+    redis-commands "^1.7.0"
     redis-errors "^1.2.0"
     redis-parser "^3.0.0"
 
@@ -9206,13 +9214,12 @@ redux-thunk@^2.2.0:
   resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
   integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
 
-redux@^4.0.0, redux@^4.0.5:
-  version "4.0.5"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
-  integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
+redux@^4.0.0, redux@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4"
+  integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==
   dependencies:
-    loose-envify "^1.4.0"
-    symbol-observable "^1.2.0"
+    "@babel/runtime" "^7.9.2"
 
 regenerate-unicode-properties@^8.2.0:
   version "8.2.0"
@@ -9628,12 +9635,12 @@ sass-loader@^10.1.1:
     schema-utils "^3.0.0"
     semver "^7.3.2"
 
-sass@^1.32.8:
-  version "1.32.8"
-  resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc"
-  integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==
+sass@^1.32.12:
+  version "1.32.12"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.12.tgz#a2a47ad0f1c168222db5206444a30c12457abb9f"
+  integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==
   dependencies:
-    chokidar ">=2.0.0 <4.0.0"
+    chokidar ">=3.0.0 <4.0.0"
 
 sax@~1.2.4:
   version "1.2.4"
@@ -9717,10 +9724,10 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
-  integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
+  version "7.3.5"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
   dependencies:
     lru-cache "^6.0.0"
 
@@ -10113,9 +10120,9 @@ sshpk@^1.7.0:
     tweetnacl "~0.14.0"
 
 ssri@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
-  integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+  integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
   dependencies:
     figgy-pudding "^3.5.1"
 
@@ -10475,11 +10482,6 @@ svgo@^1.0.0:
     unquote "~1.1.1"
     util.promisify "~1.0.0"
 
-symbol-observable@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
-  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-
 symbol-tree@^3.2.4:
   version "3.2.4"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -10978,9 +10980,9 @@ urix@^0.1.0:
   integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
 
 url-parse@^1.4.3, url-parse@^1.4.7:
-  version "1.4.7"
-  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
-  integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b"
+  integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==
   dependencies:
     querystringify "^2.1.1"
     requires-port "^1.0.0"
@@ -11024,10 +11026,10 @@ user-home@^2.0.0:
   dependencies:
     os-homedir "^1.0.0"
 
-utf-8-validate@^5.0.4:
-  version "5.0.4"
-  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8"
-  integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==
+utf-8-validate@^5.0.5:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1"
+  integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==
   dependencies:
     node-gyp-build "^4.2.0"
 
@@ -11208,15 +11210,14 @@ webidl-conversions@^6.1.0:
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
   integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
 
-webpack-assets-manifest@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-4.0.2.tgz#ead6e6dbdcd1c2af45d11a382246fcc79a286372"
-  integrity sha512-bBb9PvEGDOCFvW5/t6Yp9MEE0fymNJ0OvEud9nPvQegDbQEUZ/2WTeHnNoALwWMu1x3JHPyqHVYh8SwtYZ/dww==
+webpack-assets-manifest@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-4.0.6.tgz#cb8cfd2d2d8d129228cea645c832448380c21ae0"
+  integrity sha512-9MsBOINUoGcj3D7XHQOOuQri7VEDArkhn5gqnpCqPungLj8Vy3utlVZ6vddAVU5feYroj+DEncktbaZhnBxdeQ==
   dependencies:
     chalk "^4.0"
     deepmerge "^4.0"
     lockfile "^1.0"
-    lodash.escaperegexp "^4.0"
     lodash.get "^4.0"
     lodash.has "^4.0"
     mkdirp "^1.0"
@@ -11224,10 +11225,10 @@ webpack-assets-manifest@^4.0.2:
     tapable "^1.0"
     webpack-sources "^1.0"
 
-webpack-bundle-analyzer@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.0.tgz#74013106e7e2b07cbd64f3a5ae847f7e814802c7"
-  integrity sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g==
+webpack-bundle-analyzer@^4.4.1:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz#c71fb2eaffc10a4754d7303b224adb2342069da1"
+  integrity sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw==
   dependencies:
     acorn "^8.0.4"
     acorn-walk "^8.0.0"
@@ -11507,15 +11508,10 @@ ws@^6.2.1:
   dependencies:
     async-limiter "~1.0.0"
 
-ws@^7.2.3, ws@^7.3.1:
-  version "7.4.0"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7"
-  integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==
-
-ws@^7.4.4:
-  version "7.4.4"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59"
-  integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==
+ws@^7.2.3, ws@^7.3.1, ws@^7.4.5:
+  version "7.4.5"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"
+  integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==
 
 xml-name-validator@^3.0.0:
   version "3.0.0"
@@ -11611,10 +11607,10 @@ yargs@^15.4.1:
     y18n "^4.0.0"
     yargs-parser "^18.1.2"
 
-yargs@^16.2.0:
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
-  integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+yargs@^17.0.1:
+  version "17.0.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb"
+  integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==
   dependencies:
     cliui "^7.0.2"
     escalade "^3.1.1"