about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Gemfile10
-rw-r--r--Gemfile.lock24
-rw-r--r--app/chewy/accounts_index.rb43
-rw-r--r--app/chewy/tags_index.rb37
-rw-r--r--app/controllers/about_controller.rb34
-rw-r--r--app/controllers/accounts_controller.rb17
-rw-r--r--app/controllers/activitypub/replies_controller.rb11
-rw-r--r--app/controllers/application_controller.rb7
-rw-r--r--app/controllers/concerns/signature_verification.rb15
-rw-r--r--app/controllers/follower_accounts_controller.rb2
-rw-r--r--app/controllers/following_accounts_controller.rb2
-rw-r--r--app/controllers/home_controller.rb16
-rw-r--r--app/controllers/instance_actors_controller.rb2
-rw-r--r--app/controllers/invites_controller.rb2
-rw-r--r--app/controllers/media_proxy_controller.rb2
-rw-r--r--app/controllers/public_timelines_controller.rb7
-rw-r--r--app/controllers/shares_controller.rb18
-rw-r--r--app/controllers/tags_controller.rb5
-rw-r--r--app/helpers/application_helper.rb21
-rw-r--r--app/javascript/mastodon/actions/app.js10
-rw-r--r--app/javascript/mastodon/components/status.js36
-rw-r--r--app/javascript/mastodon/containers/media_container.js13
-rw-r--r--app/javascript/mastodon/features/compose/components/upload.js85
-rw-r--r--app/javascript/mastodon/features/compose/components/upload_form.js3
-rw-r--r--app/javascript/mastodon/features/compose/components/upload_progress.js9
-rw-r--r--app/javascript/mastodon/features/compose/containers/upload_container.js6
-rw-r--r--app/javascript/mastodon/features/ui/components/document_title.js41
-rw-r--r--app/javascript/mastodon/features/ui/components/focal_point_modal.js184
-rw-r--r--app/javascript/mastodon/features/ui/index.js18
-rw-r--r--app/javascript/mastodon/features/ui/util/async-components.js4
-rw-r--r--app/javascript/mastodon/features/video/index.js11
-rw-r--r--app/javascript/mastodon/initial_state.js1
-rw-r--r--app/javascript/mastodon/locales/ar.json19
-rw-r--r--app/javascript/mastodon/locales/ast.json13
-rw-r--r--app/javascript/mastodon/locales/bg.json13
-rw-r--r--app/javascript/mastodon/locales/bn.json13
-rw-r--r--app/javascript/mastodon/locales/ca.json19
-rw-r--r--app/javascript/mastodon/locales/co.json31
-rw-r--r--app/javascript/mastodon/locales/cs.json19
-rw-r--r--app/javascript/mastodon/locales/cy.json13
-rw-r--r--app/javascript/mastodon/locales/da.json13
-rw-r--r--app/javascript/mastodon/locales/de.json19
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json88
-rw-r--r--app/javascript/mastodon/locales/el.json19
-rw-r--r--app/javascript/mastodon/locales/en.json13
-rw-r--r--app/javascript/mastodon/locales/eo.json41
-rw-r--r--app/javascript/mastodon/locales/es.json39
-rw-r--r--app/javascript/mastodon/locales/et.json402
-rw-r--r--app/javascript/mastodon/locales/eu.json19
-rw-r--r--app/javascript/mastodon/locales/fa.json21
-rw-r--r--app/javascript/mastodon/locales/fi.json13
-rw-r--r--app/javascript/mastodon/locales/fr.json19
-rw-r--r--app/javascript/mastodon/locales/gl.json19
-rw-r--r--app/javascript/mastodon/locales/he.json13
-rw-r--r--app/javascript/mastodon/locales/hi.json13
-rw-r--r--app/javascript/mastodon/locales/hr.json13
-rw-r--r--app/javascript/mastodon/locales/hu.json19
-rw-r--r--app/javascript/mastodon/locales/hy.json23
-rw-r--r--app/javascript/mastodon/locales/id.json13
-rw-r--r--app/javascript/mastodon/locales/io.json13
-rw-r--r--app/javascript/mastodon/locales/it.json25
-rw-r--r--app/javascript/mastodon/locales/ja.json19
-rw-r--r--app/javascript/mastodon/locales/ka.json13
-rw-r--r--app/javascript/mastodon/locales/kk.json13
-rw-r--r--app/javascript/mastodon/locales/ko.json19
-rw-r--r--app/javascript/mastodon/locales/lt.json13
-rw-r--r--app/javascript/mastodon/locales/lv.json13
-rw-r--r--app/javascript/mastodon/locales/ms.json13
-rw-r--r--app/javascript/mastodon/locales/nl.json13
-rw-r--r--app/javascript/mastodon/locales/no.json13
-rw-r--r--app/javascript/mastodon/locales/oc.json19
-rw-r--r--app/javascript/mastodon/locales/pl.json13
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json13
-rw-r--r--app/javascript/mastodon/locales/pt.json13
-rw-r--r--app/javascript/mastodon/locales/ro.json13
-rw-r--r--app/javascript/mastodon/locales/ru.json25
-rw-r--r--app/javascript/mastodon/locales/sk.json39
-rw-r--r--app/javascript/mastodon/locales/sl.json21
-rw-r--r--app/javascript/mastodon/locales/sq.json13
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json13
-rw-r--r--app/javascript/mastodon/locales/sr.json13
-rw-r--r--app/javascript/mastodon/locales/sv.json201
-rw-r--r--app/javascript/mastodon/locales/ta.json13
-rw-r--r--app/javascript/mastodon/locales/te.json13
-rw-r--r--app/javascript/mastodon/locales/th.json31
-rw-r--r--app/javascript/mastodon/locales/tr.json13
-rw-r--r--app/javascript/mastodon/locales/uk.json329
-rw-r--r--app/javascript/mastodon/locales/whitelist_et.json2
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json17
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json13
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json139
-rw-r--r--app/javascript/mastodon/reducers/index.js2
-rw-r--r--app/javascript/mastodon/reducers/missed_updates.js21
-rw-r--r--app/javascript/mastodon/utils/numbers.js4
-rw-r--r--app/javascript/mastodon/utils/resize_image.js4
-rw-r--r--app/javascript/packs/public.js9
-rw-r--r--app/javascript/styles/mastodon/basics.scss2
-rw-r--r--app/javascript/styles/mastodon/components.scss186
-rw-r--r--app/javascript/styles/mastodon/tables.scss67
-rw-r--r--app/javascript/styles/mastodon/widgets.scss25
-rw-r--r--app/lib/search_query_parser.rb19
-rw-r--r--app/lib/search_query_transformer.rb2
-rw-r--r--app/models/account.rb6
-rw-r--r--app/models/account_stat.rb2
-rw-r--r--app/models/concerns/account_avatar.rb2
-rw-r--r--app/models/concerns/account_counters.rb3
-rw-r--r--app/models/concerns/account_header.rb2
-rw-r--r--app/models/concerns/attachmentable.rb2
-rw-r--r--app/models/custom_emoji.rb2
-rw-r--r--app/models/domain_block.rb1
-rw-r--r--app/models/form/admin_settings.rb4
-rw-r--r--app/models/invite.rb3
-rw-r--r--app/models/media_attachment.rb4
-rw-r--r--app/models/preview_card.rb2
-rw-r--r--app/models/status.rb7
-rw-r--r--app/models/tag.rb14
-rw-r--r--app/models/trending_tags.rb3
-rw-r--r--app/serializers/activitypub/note_serializer.rb2
-rw-r--r--app/serializers/initial_state_serializer.rb6
-rw-r--r--app/serializers/rss/account_serializer.rb8
-rw-r--r--app/services/account_search_service.rb189
-rw-r--r--app/services/search_service.rb10
-rw-r--r--app/services/tag_search_service.rb82
-rw-r--r--app/views/about/blocks.html.haml48
-rw-r--r--app/views/accounts/show.html.haml37
-rw-r--r--app/views/admin/settings/edit.html.haml6
-rw-r--r--app/views/application/_sidebar.html.haml10
-rw-r--r--app/views/home/index.html.haml2
-rw-r--r--app/views/invites/_form.html.haml3
-rw-r--r--app/views/invites/_invite.html.haml3
-rw-r--r--app/views/invites/index.html.haml1
-rw-r--r--app/views/layouts/public.html.haml3
-rw-r--r--app/views/public_timelines/show.html.haml1
-rw-r--r--app/views/settings/featured_tags/index.html.haml4
-rw-r--r--app/views/shares/show.html.haml2
-rw-r--r--app/views/tags/show.html.haml1
-rw-r--r--babel.config.js6
-rw-r--r--config/environments/production.rb6
-rw-r--r--config/initializers/content_security_policy.rb2
-rw-r--r--config/locales/activerecord.et.yml17
-rw-r--r--config/locales/activerecord.hu.yml4
-rw-r--r--config/locales/activerecord.uk.yml6
-rw-r--r--config/locales/ar.yml24
-rw-r--r--config/locales/ca.yml24
-rw-r--r--config/locales/co.yml115
-rw-r--r--config/locales/cs.yml24
-rw-r--r--config/locales/cy.yml7
-rw-r--r--config/locales/da.yml4
-rw-r--r--config/locales/de.yml99
-rw-r--r--config/locales/devise.et.yml86
-rw-r--r--config/locales/devise.th.yml3
-rw-r--r--config/locales/devise.uk.yml52
-rw-r--r--config/locales/doorkeeper.eo.yml4
-rw-r--r--config/locales/doorkeeper.et.yml148
-rw-r--r--config/locales/doorkeeper.ko.yml17
-rw-r--r--config/locales/doorkeeper.ru.yml6
-rw-r--r--config/locales/doorkeeper.sk.yml1
-rw-r--r--config/locales/doorkeeper.uk.yml52
-rw-r--r--config/locales/el.yml55
-rw-r--r--config/locales/en.yml28
-rw-r--r--config/locales/eo.yml30
-rw-r--r--config/locales/es.yml71
-rw-r--r--config/locales/et.yml1016
-rw-r--r--config/locales/eu.yml62
-rw-r--r--config/locales/fa.yml16
-rw-r--r--config/locales/fi.yml1
-rw-r--r--config/locales/fr.yml34
-rw-r--r--config/locales/gl.yml61
-rw-r--r--config/locales/hu.yml67
-rw-r--r--config/locales/hy.yml15
-rw-r--r--config/locales/it.yml50
-rw-r--r--config/locales/ja.yml63
-rw-r--r--config/locales/ka.yml1
-rw-r--r--config/locales/kk.yml7
-rw-r--r--config/locales/ko.yml95
-rw-r--r--config/locales/lt.yml7
-rw-r--r--config/locales/nl.yml7
-rw-r--r--config/locales/oc.yml34
-rw-r--r--config/locales/pl.yml7
-rw-r--r--config/locales/pt-BR.yml7
-rw-r--r--config/locales/pt.yml7
-rw-r--r--config/locales/ro.yml1
-rw-r--r--config/locales/ru.yml27
-rw-r--r--config/locales/simple_form.ar.yml1
-rw-r--r--config/locales/simple_form.ca.yml4
-rw-r--r--config/locales/simple_form.co.yml12
-rw-r--r--config/locales/simple_form.cs.yml2
-rw-r--r--config/locales/simple_form.de.yml14
-rw-r--r--config/locales/simple_form.el.yml12
-rw-r--r--config/locales/simple_form.en.yml2
-rw-r--r--config/locales/simple_form.eo.yml4
-rw-r--r--config/locales/simple_form.es.yml4
-rw-r--r--config/locales/simple_form.et.yml153
-rw-r--r--config/locales/simple_form.eu.yml5
-rw-r--r--config/locales/simple_form.fa.yml4
-rw-r--r--config/locales/simple_form.gl.yml16
-rw-r--r--config/locales/simple_form.hu.yml14
-rw-r--r--config/locales/simple_form.it.yml13
-rw-r--r--config/locales/simple_form.ja.yml10
-rw-r--r--config/locales/simple_form.ko.yml15
-rw-r--r--config/locales/simple_form.oc.yml3
-rw-r--r--config/locales/simple_form.ru.yml24
-rw-r--r--config/locales/simple_form.sk.yml12
-rw-r--r--config/locales/simple_form.sl.yml45
-rw-r--r--config/locales/simple_form.th.yml2
-rw-r--r--config/locales/simple_form.uk.yml111
-rw-r--r--config/locales/simple_form.zh-CN.yml2
-rw-r--r--config/locales/sk.yml117
-rw-r--r--config/locales/sl.yml338
-rw-r--r--config/locales/sq.yml6
-rw-r--r--config/locales/sr.yml7
-rw-r--r--config/locales/sv.yml1
-rw-r--r--config/locales/th.yml45
-rw-r--r--config/locales/tr.yml2
-rw-r--r--config/locales/uk.yml597
-rw-r--r--config/locales/zh-CN.yml41
-rw-r--r--config/locales/zh-HK.yml1
-rw-r--r--config/locales/zh-TW.yml1
-rw-r--r--config/routes.rb7
-rw-r--r--config/settings.yml2
-rw-r--r--config/webpack/development.js1
-rw-r--r--config/webpack/shared.js5
-rw-r--r--db/migrate/20190403141604_add_comment_to_invites.rb5
-rw-r--r--db/migrate/20190815225426_add_last_status_at_to_tags.rb6
-rw-r--r--db/schema.rb5
-rw-r--r--lib/mastodon/accounts_cli.rb10
-rw-r--r--lib/mastodon/cache_cli.rb45
-rw-r--r--package.json10
-rw-r--r--public/ocr/lang-data/eng.traineddata.gzbin0 -> 10923060 bytes
-rw-r--r--spec/controllers/home_controller_spec.rb10
-rw-r--r--spec/controllers/shares_controller_spec.rb5
-rw-r--r--spec/models/tag_spec.rb4
-rw-r--r--spec/services/account_search_service_spec.rb122
-rw-r--r--yarn.lock171
234 files changed, 6720 insertions, 1408 deletions
diff --git a/Gemfile b/Gemfile
index 991ef0861..ace4b58e6 100644
--- a/Gemfile
+++ b/Gemfile
@@ -12,7 +12,7 @@ gem 'thor', '~> 0.20'
 gem 'hamlit-rails', '~> 0.2'
 gem 'pg', '~> 1.1'
 gem 'makara', '~> 0.4'
-gem 'pghero', '~> 2.2'
+gem 'pghero', '~> 2.3'
 gem 'dotenv-rails', '~> 2.7'
 
 gem 'aws-sdk-s3', '~> 1.46', require: false
@@ -62,12 +62,12 @@ gem 'mime-types', '~> 3.2', require: 'mime/types/columnar'
 gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
 gem 'nokogiri', '~> 1.10'
 gem 'nsa', '~> 0.2'
-gem 'oj', '~> 3.8'
+gem 'oj', '~> 3.9'
 gem 'ostatus2', '~> 2.0'
 gem 'ox', '~> 2.11'
 gem 'parslet'
 gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
-gem 'pundit', '~> 2.0'
+gem 'pundit', '~> 2.1'
 gem 'premailer-rails'
 gem 'rack-attack', '~> 6.1'
 gem 'rack-cors', '~> 1.0', require: 'rack/cors'
@@ -81,7 +81,7 @@ gem 'sidekiq', '~> 5.2'
 gem 'sidekiq-scheduler', '~> 3.0'
 gem 'sidekiq-unique-jobs', '~> 6.0'
 gem 'sidekiq-bulk', '~>0.2.0'
-gem 'simple-navigation', '~> 4.0'
+gem 'simple-navigation', '~> 4.1'
 gem 'simple_form', '~> 4.1'
 gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
 gem 'stoplight', '~> 2.1.3'
@@ -134,7 +134,7 @@ group :development do
   gem 'letter_opener_web', '~> 1.3'
   gem 'memory_profiler'
   gem 'rubocop', '~> 0.74', require: false
-  gem 'rubocop-rails', '~> 2.2', require: false
+  gem 'rubocop-rails', '~> 2.3', require: false
   gem 'brakeman', '~> 4.6', require: false
   gem 'bundler-audit', '~> 0.6', require: false
 
diff --git a/Gemfile.lock b/Gemfile.lock
index b99330a25..0af2b2a89 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -387,7 +387,7 @@ GEM
       concurrent-ruby (~> 1.0, >= 1.0.2)
       sidekiq (>= 3.5)
       statsd-ruby (~> 1.4, >= 1.4.0)
-    oj (3.8.1)
+    oj (3.9.0)
     omniauth (1.9.0)
       hashie (>= 3.4.6, < 3.7.0)
       rack (>= 1.6.2, < 3)
@@ -423,9 +423,9 @@ GEM
       equatable (~> 0.5.0)
       tty-color (~> 0.4.0)
     pg (1.1.4)
-    pghero (2.2.1)
-      activerecord
-    pkg-config (1.3.7)
+    pghero (2.3.0)
+      activerecord (>= 5)
+    pkg-config (1.3.8)
     premailer (1.11.1)
       addressable
       css_parser (>= 1.6.0)
@@ -445,7 +445,7 @@ GEM
     public_suffix (3.1.1)
     puma (4.1.0)
       nio4r (~> 2.0)
-    pundit (2.0.1)
+    pundit (2.1.0)
       activesupport (>= 3.0.0)
     raabro (1.1.6)
     rack (2.0.7)
@@ -555,7 +555,7 @@ GEM
       rainbow (>= 2.2.2, < 4.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 1.4.0, < 1.7)
-    rubocop-rails (2.2.1)
+    rubocop-rails (2.3.0)
       rack (>= 1.1)
       rubocop (>= 0.72.0)
     ruby-progressbar (1.10.1)
@@ -584,7 +584,7 @@ GEM
       concurrent-ruby (~> 1.0, >= 1.0.5)
       sidekiq (>= 4.0, < 7.0)
       thor (~> 0)
-    simple-navigation (4.0.5)
+    simple-navigation (4.1.0)
       activesupport (>= 2.3.2)
     simple_form (4.1.0)
       actionpack (>= 5.0)
@@ -732,7 +732,7 @@ DEPENDENCIES
   nilsimsa!
   nokogiri (~> 1.10)
   nsa (~> 0.2)
-  oj (~> 3.8)
+  oj (~> 3.9)
   omniauth (~> 1.9)
   omniauth-cas (~> 1.1)
   omniauth-saml (~> 1.10)
@@ -743,7 +743,7 @@ DEPENDENCIES
   parallel_tests (~> 2.29)
   parslet
   pg (~> 1.1)
-  pghero (~> 2.2)
+  pghero (~> 2.3)
   pkg-config (~> 1.3)
   posix-spawn!
   premailer-rails
@@ -751,7 +751,7 @@ DEPENDENCIES
   pry-byebug (~> 3.7)
   pry-rails (~> 0.3)
   puma (~> 4.1)
-  pundit (~> 2.0)
+  pundit (~> 2.1)
   rack-attack (~> 6.1)
   rack-cors (~> 1.0)
   rails (~> 5.2.3)
@@ -767,13 +767,13 @@ DEPENDENCIES
   rspec-rails (~> 3.8)
   rspec-sidekiq (~> 3.0)
   rubocop (~> 0.74)
-  rubocop-rails (~> 2.2)
+  rubocop-rails (~> 2.3)
   sanitize (~> 5.0)
   sidekiq (~> 5.2)
   sidekiq-bulk (~> 0.2.0)
   sidekiq-scheduler (~> 3.0)
   sidekiq-unique-jobs (~> 6.0)
-  simple-navigation (~> 4.0)
+  simple-navigation (~> 4.1)
   simple_form (~> 4.1)
   simplecov (~> 0.17)
   sprockets-rails (~> 3.2)
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
new file mode 100644
index 000000000..b814e009e
--- /dev/null
+++ b/app/chewy/accounts_index.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+class AccountsIndex < Chewy::Index
+  settings index: { refresh_interval: '5m' }, analysis: {
+    analyzer: {
+      content: {
+        tokenizer: 'whitespace',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+
+      edge_ngram: {
+        tokenizer: 'edge_ngram',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+    },
+
+    tokenizer: {
+      edge_ngram: {
+        type: 'edge_ngram',
+        min_gram: 1,
+        max_gram: 15,
+      },
+    },
+  }
+
+  define_type ::Account.searchable.includes(:account_stat), delete_if: ->(account) { account.destroyed? || !account.searchable? } do
+    root date_detection: false do
+      field :id, type: 'long'
+
+      field :display_name, type: 'text', analyzer: 'content' do
+        field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
+      end
+
+      field :acct, type: 'text', analyzer: 'content', value: ->(account) { [account.username, account.domain].compact.join('@') } do
+        field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
+      end
+
+      field :following_count, type: 'long', value: ->(account) { account.following.local.count }
+      field :followers_count, type: 'long', value: ->(account) { account.followers.local.count }
+      field :last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at }
+    end
+  end
+end
diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb
new file mode 100644
index 000000000..300fc128f
--- /dev/null
+++ b/app/chewy/tags_index.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class TagsIndex < Chewy::Index
+  settings index: { refresh_interval: '15m' }, analysis: {
+    analyzer: {
+      content: {
+        tokenizer: 'keyword',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+
+      edge_ngram: {
+        tokenizer: 'edge_ngram',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+    },
+
+    tokenizer: {
+      edge_ngram: {
+        type: 'edge_ngram',
+        min_gram: 2,
+        max_gram: 15,
+      },
+    },
+  }
+
+  define_type ::Tag.listable, delete_if: ->(tag) { tag.destroyed? || !tag.listable? } do
+    root date_detection: false do
+      field :name, type: 'text', analyzer: 'content' do
+        field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
+      end
+
+      field :reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? }
+      field :usage, type: 'long', value: ->(tag) { tag.history.reduce(0) { |total, day| total + day[:accounts].to_i } }
+      field :last_status_at, type: 'date', value: ->(tag) { tag.last_status_at || tag.created_at }
+    end
+  end
+end
diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb
index f41e52aae..5003ae61c 100644
--- a/app/controllers/about_controller.rb
+++ b/app/controllers/about_controller.rb
@@ -4,10 +4,12 @@ class AboutController < ApplicationController
   before_action :set_pack
   layout 'public'
 
-  before_action :require_open_federation!, only: [:show, :more]
+  before_action :require_open_federation!, only: [:show, :more, :blocks]
+  before_action :check_blocklist_enabled, only: [:blocks]
+  before_action :authenticate_user!, only: [:blocks], if: :blocklist_account_required?
   before_action :set_body_classes, only: :show
   before_action :set_instance_presenter
-  before_action :set_expires_in
+  before_action :set_expires_in, only: [:show, :more, :terms]
 
   skip_before_action :require_functional!, only: [:more, :terms]
 
@@ -19,12 +21,40 @@ class AboutController < ApplicationController
 
   def terms; end
 
+  def blocks
+    @show_rationale = Setting.show_domain_blocks_rationale == 'all'
+    @show_rationale |= Setting.show_domain_blocks_rationale == 'users' && !current_user.nil? && current_user.functional?
+    @blocks = DomainBlock.with_user_facing_limitations.order('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), reject_media, domain').to_a
+  end
+
   private
 
   def require_open_federation!
     not_found if whitelist_mode?
   end
 
+  def check_blocklist_enabled
+    not_found if Setting.show_domain_blocks == 'disabled'
+  end
+
+  def blocklist_account_required?
+    Setting.show_domain_blocks == 'users'
+  end
+
+  def block_severity_text(block)
+    if block.severity == 'suspend'
+      I18n.t('domain_blocks.suspension')
+    else
+      limitations = []
+      limitations << I18n.t('domain_blocks.media_block') if block.reject_media?
+      limitations << I18n.t('domain_blocks.silence') if block.severity == 'silence'
+      limitations.join(', ')
+    end
+  end
+
+  helper_method :block_severity_text
+  helper_method :public_fetch_mode?
+
   def new_user
     User.new.tap do |user|
       user.build_account
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 1a876b831..817e5e832 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -19,6 +19,7 @@ class AccountsController < ApplicationController
 
         @pinned_statuses   = []
         @endorsed_accounts = @account.endorsed_accounts.to_a.sample(4)
+        @featured_hashtags = @account.featured_tags.order(statuses_count: :desc)
 
         if current_account && @account.blocking?(current_account)
           @statuses = []
@@ -28,6 +29,7 @@ class AccountsController < ApplicationController
         @pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
         @statuses        = filtered_status_page(params)
         @statuses        = cache_collection(@statuses, Status)
+        @rss_url         = rss_url
 
         unless @statuses.empty?
           @older_url = older_url if @statuses.last.id > filtered_statuses.last.id
@@ -38,8 +40,9 @@ class AccountsController < ApplicationController
       format.rss do
         expires_in 0, public: true
 
-        @statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status)
-        render xml: RSS::AccountSerializer.render(@account, @statuses)
+        @statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE)
+        @statuses = cache_collection(@statuses, Status)
+        render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag])
       end
 
       format.json do
@@ -97,6 +100,14 @@ class AccountsController < ApplicationController
     params[:username]
   end
 
+  def rss_url
+    if tag_requested?
+      short_account_tag_url(@account, params[:tag], format: 'rss')
+    else
+      short_account_url(@account, format: 'rss')
+    end
+  end
+
   def older_url
     pagination_url(max_id: @statuses.last.id)
   end
@@ -126,7 +137,7 @@ class AccountsController < ApplicationController
   end
 
   def tag_requested?
-    request.path.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize)
+    request.path.split('.').first.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize)
   end
 
   def filtered_status_page(params)
diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb
index ab755ed4e..c62061555 100644
--- a/app/controllers/activitypub/replies_controller.rb
+++ b/app/controllers/activitypub/replies_controller.rb
@@ -27,7 +27,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
   end
 
   def set_replies
-    @replies = page_params[:other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses
+    @replies = page_params[:only_other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses
     @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted])
     @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
   end
@@ -38,7 +38,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
       type: :unordered,
       part_of: account_status_replies_url(@account, @status),
       next: next_page,
-      items: @replies.map { |status| status.local ? status : status.id }
+      items: @replies.map { |status| status.local ? status : status.uri }
     )
 
     return page if page_requested?
@@ -55,16 +55,17 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
   end
 
   def next_page
+    only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
     account_status_replies_url(
       @account,
       @status,
       page: true,
-      min_id: @replies&.last&.id,
-      other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
+      min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id,
+      only_other_accounts: only_other_accounts
     )
   end
 
   def page_params
-    params_slice(:other_accounts, :min_id).merge(page: true)
+    params_slice(:only_other_accounts, :min_id).merge(page: true)
   end
 end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 19efc8838..5f88838e4 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -26,10 +26,13 @@ class ApplicationController < ActionController::Base
   rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
   rescue_from ActionController::UnknownFormat, with: :not_acceptable
   rescue_from Mastodon::NotPermittedError, with: :forbidden
+  rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
 
   before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
   before_action :require_functional!, if: :user_signed_in?
 
+  skip_before_action :verify_authenticity_token, only: :raise_not_found
+
   def raise_not_found
     raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}"
   end
@@ -163,6 +166,10 @@ class ApplicationController < ActionController::Base
     respond_with_error(406)
   end
 
+  def internal_server_error
+    respond_with_error(500)
+  end
+
   def single_user_mode?
     @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists?
   end
diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb
index 7b251cf80..ce353f1de 100644
--- a/app/controllers/concerns/signature_verification.rb
+++ b/app/controllers/concerns/signature_verification.rb
@@ -23,6 +23,19 @@ module SignatureVerification
     @signature_verification_failure_code || 401
   end
 
+  def signature_key_id
+    raw_signature    = request.headers['Signature']
+    signature_params = {}
+
+    raw_signature.split(',').each do |part|
+      parsed_parts = part.match(/([a-z]+)="([^"]+)"/i)
+      next if parsed_parts.nil? || parsed_parts.size != 3
+      signature_params[parsed_parts[1]] = parsed_parts[2]
+    end
+
+    signature_params['keyId']
+  end
+
   def signed_request_account
     return @signed_request_account if defined?(@signed_request_account)
 
@@ -154,7 +167,7 @@ module SignatureVerification
       .with_fallback { nil }
       .with_threshold(1)
       .with_cool_off_time(5.minutes.seconds)
-      .with_error_handler { |error, handle| error.is_a?(HTTP::Error) ? handle.call(error) : raise(error) }
+      .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
       .run
   end
 
diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb
index e2ba9bf00..4641a8bb9 100644
--- a/app/controllers/follower_accounts_controller.rb
+++ b/app/controllers/follower_accounts_controller.rb
@@ -7,6 +7,8 @@ class FollowerAccountsController < ApplicationController
   before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
   before_action :set_cache_headers
 
+  skip_around_action :set_locale, if: -> { request.format == :json }
+
   def index
     respond_to do |format|
       format.html do
diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb
index 49f1f3218..6e80554fb 100644
--- a/app/controllers/following_accounts_controller.rb
+++ b/app/controllers/following_accounts_controller.rb
@@ -7,6 +7,8 @@ class FollowingAccountsController < ApplicationController
   before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
   before_action :set_cache_headers
 
+  skip_around_action :set_locale, if: -> { request.format == :json }
+
   def index
     respond_to do |format|
       format.html do
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index a09aed801..efdb1d226 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -5,7 +5,6 @@ class HomeController < ApplicationController
 
   before_action :set_pack
   before_action :set_referrer_policy_header
-  before_action :set_initial_state_json
 
   def index
     @body_classes = 'app-body'
@@ -45,21 +44,6 @@ class HomeController < ApplicationController
     use_pack 'home'
   end
 
-  def set_initial_state_json
-    serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
-    @initial_state_json   = serializable_resource.to_json
-  end
-
-  def initial_state_params
-    {
-      settings: Web::Setting.find_by(user: current_user)&.data || {},
-      push_subscription: current_account.user.web_push_subscription(current_session),
-      current_account: current_account,
-      token: current_session.token,
-      admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
-    }
-  end
-
   def default_redirect_path
     if request.path.start_with?('/web') || whitelist_mode?
       new_user_session_path
diff --git a/app/controllers/instance_actors_controller.rb b/app/controllers/instance_actors_controller.rb
index 41f33602e..6f02d6a35 100644
--- a/app/controllers/instance_actors_controller.rb
+++ b/app/controllers/instance_actors_controller.rb
@@ -3,6 +3,8 @@
 class InstanceActorsController < ApplicationController
   include AccountControllerConcern
 
+  skip_around_action :set_locale
+
   def show
     expires_in 10.minutes, public: true
     render json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb
index 639002964..0b3c082dc 100644
--- a/app/controllers/invites_controller.rb
+++ b/app/controllers/invites_controller.rb
@@ -48,7 +48,7 @@ class InvitesController < ApplicationController
   end
 
   def resource_params
-    params.require(:invite).permit(:max_uses, :expires_in, :autofollow)
+    params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
   end
 
   def set_body_classes
diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb
index 8da6c6fe0..558cd6e30 100644
--- a/app/controllers/media_proxy_controller.rb
+++ b/app/controllers/media_proxy_controller.rb
@@ -7,6 +7,8 @@ class MediaProxyController < ApplicationController
 
   before_action :authenticate_user!, if: :whitelist_mode?
 
+  rescue_from ActiveRecord::RecordInvalid, with: :not_found
+
   def show
     RedisLock.acquire(lock_options) do |lock|
       if lock.acquired?
diff --git a/app/controllers/public_timelines_controller.rb b/app/controllers/public_timelines_controller.rb
index 940b2f7cd..eb5bb191b 100644
--- a/app/controllers/public_timelines_controller.rb
+++ b/app/controllers/public_timelines_controller.rb
@@ -9,12 +9,7 @@ class PublicTimelinesController < ApplicationController
   before_action :set_body_classes
   before_action :set_instance_presenter
 
-  def show
-    @initial_state_json = ActiveModelSerializers::SerializableResource.new(
-      InitialStatePresenter.new(settings: { known_fediverse: Setting.show_known_fediverse_at_about_page }, token: current_session&.token),
-      serializer: InitialStateSerializer
-    ).to_json
-  end
+  def show; end
 
   private
 
diff --git a/app/controllers/shares_controller.rb b/app/controllers/shares_controller.rb
index ada4eec54..e13e7e8b6 100644
--- a/app/controllers/shares_controller.rb
+++ b/app/controllers/shares_controller.rb
@@ -7,26 +7,10 @@ class SharesController < ApplicationController
   before_action :set_pack
   before_action :set_body_classes
 
-  def show
-    serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
-    @initial_state_json   = serializable_resource.to_json
-  end
+  def show; end
 
   private
 
-  def initial_state_params
-    text = [params[:title], params[:text], params[:url]].compact.join(' ')
-
-    {
-      settings: Web::Setting.find_by(user: current_user)&.data || {},
-      push_subscription: current_account.user.web_push_subscription(current_session),
-      current_account: current_account,
-      token: current_session.token,
-      admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
-      text: text,
-    }
-  end
-
   def set_pack
     use_pack 'share'
   end
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index d6bb28eb5..c447a3a2b 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -18,11 +18,6 @@ class TagsController < ApplicationController
       format.html do
         use_pack 'about'
         expires_in 0, public: true
-
-        @initial_state_json = ActiveModelSerializers::SerializableResource.new(
-          InitialStatePresenter.new(settings: {}, token: current_session&.token),
-          serializer: InitialStateSerializer
-        ).to_json
       end
 
       format.rss do
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 7ae1e5d0b..6940c8535 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -123,4 +123,25 @@ module ApplicationHelper
     text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence)
     text.split("\n").map { |line| '> ' + line }.join("\n")
   end
+
+  def render_initial_state
+    state_params = {
+      settings: {
+        known_fediverse: Setting.show_known_fediverse_at_about_page,
+      },
+
+      text: [params[:title], params[:text], params[:url]].compact.join(' '),
+    }
+
+    if user_signed_in?
+      state_params[:settings]          = state_params[:settings].merge(Web::Setting.find_by(user: current_user)&.data || {})
+      state_params[:push_subscription] = current_account.user.web_push_subscription(current_session)
+      state_params[:current_account]   = current_account
+      state_params[:token]             = current_session.token
+      state_params[:admin]             = Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, ''))
+    end
+
+    json = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(state_params), serializer: InitialStateSerializer).to_json
+    content_tag(:script, json_escape(json).html_safe, id: 'initial-state', type: 'application/json')
+  end
 end
diff --git a/app/javascript/mastodon/actions/app.js b/app/javascript/mastodon/actions/app.js
new file mode 100644
index 000000000..414968f7d
--- /dev/null
+++ b/app/javascript/mastodon/actions/app.js
@@ -0,0 +1,10 @@
+export const APP_FOCUS   = 'APP_FOCUS';
+export const APP_UNFOCUS = 'APP_UNFOCUS';
+
+export const focusApp = () => ({
+  type: APP_FOCUS,
+});
+
+export const unfocusApp = () => ({
+  type: APP_UNFOCUS,
+});
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index 9b1035649..735cab007 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -278,12 +278,27 @@ class Status extends ImmutablePureComponent {
       return null;
     }
 
+    const handlers = this.props.muted ? {} : {
+      reply: this.handleHotkeyReply,
+      favourite: this.handleHotkeyFavourite,
+      boost: this.handleHotkeyBoost,
+      mention: this.handleHotkeyMention,
+      open: this.handleHotkeyOpen,
+      openProfile: this.handleHotkeyOpenProfile,
+      moveUp: this.handleHotkeyMoveUp,
+      moveDown: this.handleHotkeyMoveDown,
+      toggleHidden: this.handleHotkeyToggleHidden,
+      toggleSensitive: this.handleHotkeyToggleSensitive,
+    };
+
     if (hidden) {
       return (
-        <div ref={this.handleRef}>
-          {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}
-          {status.get('content')}
-        </div>
+        <HotKeys handlers={handlers}>
+          <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>
+            {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}
+            {status.get('content')}
+          </div>
+        </HotKeys>
       );
     }
 
@@ -394,19 +409,6 @@ class Status extends ImmutablePureComponent {
       statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />;
     }
 
-    const handlers = this.props.muted ? {} : {
-      reply: this.handleHotkeyReply,
-      favourite: this.handleHotkeyFavourite,
-      boost: this.handleHotkeyBoost,
-      mention: this.handleHotkeyMention,
-      open: this.handleHotkeyOpen,
-      openProfile: this.handleHotkeyOpenProfile,
-      moveUp: this.handleHotkeyMoveUp,
-      moveDown: this.handleHotkeyMoveDown,
-      toggleHidden: this.handleHotkeyToggleHidden,
-      toggleSensitive: this.handleHotkeyToggleSensitive,
-    };
-
     return (
       <HotKeys handlers={handlers}>
         <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>
diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js
index 48492f43d..8fddb6f54 100644
--- a/app/javascript/mastodon/containers/media_container.js
+++ b/app/javascript/mastodon/containers/media_container.js
@@ -7,6 +7,7 @@ import MediaGallery from '../components/media_gallery';
 import Video from '../features/video';
 import Card from '../features/status/components/card';
 import Poll from 'mastodon/components/poll';
+import Hashtag from 'mastodon/components/hashtag';
 import ModalRoot from '../components/modal_root';
 import { getScrollbarWidth } from '../features/ui/components/modal_root';
 import MediaModal from '../features/ui/components/media_modal';
@@ -15,7 +16,7 @@ import { List as ImmutableList, fromJS } from 'immutable';
 const { localeData, messages } = getLocale();
 addLocaleData(localeData);
 
-const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll };
+const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag };
 
 export default class MediaContainer extends PureComponent {
 
@@ -62,12 +63,13 @@ export default class MediaContainer extends PureComponent {
           {[].map.call(components, (component, i) => {
             const componentName = component.getAttribute('data-component');
             const Component = MEDIA_COMPONENTS[componentName];
-            const { media, card, poll, ...props } = JSON.parse(component.getAttribute('data-props'));
+            const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props'));
 
             Object.assign(props, {
-              ...(media ? { media: fromJS(media) } : {}),
-              ...(card  ? { card:  fromJS(card)  } : {}),
-              ...(poll  ? { poll:  fromJS(poll)  } : {}),
+              ...(media   ? { media:   fromJS(media)   } : {}),
+              ...(card    ? { card:    fromJS(card)    } : {}),
+              ...(poll    ? { poll:    fromJS(poll)    } : {}),
+              ...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
 
               ...(componentName === 'Video' ? {
                 onOpenVideo: this.handleOpenVideo,
@@ -81,6 +83,7 @@ export default class MediaContainer extends PureComponent {
               component,
             );
           })}
+
           <ModalRoot onClose={this.handleCloseMedia}>
             {this.state.media && (
               <MediaModal
diff --git a/app/javascript/mastodon/features/compose/components/upload.js b/app/javascript/mastodon/features/compose/components/upload.js
index 629cbc36a..b9f0fbe3a 100644
--- a/app/javascript/mastodon/features/compose/components/upload.js
+++ b/app/javascript/mastodon/features/compose/components/upload.js
@@ -4,16 +4,11 @@ import PropTypes from 'prop-types';
 import Motion from '../../ui/util/optional_motion';
 import spring from 'react-motion/lib/spring';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
+import { FormattedMessage } from 'react-intl';
 import classNames from 'classnames';
 import Icon from 'mastodon/components/icon';
 
-const messages = defineMessages({
-  description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
-});
-
-export default @injectIntl
-class Upload extends ImmutablePureComponent {
+export default class Upload extends ImmutablePureComponent {
 
   static contextTypes = {
     router: PropTypes.object,
@@ -21,30 +16,10 @@ class Upload extends ImmutablePureComponent {
 
   static propTypes = {
     media: ImmutablePropTypes.map.isRequired,
-    intl: PropTypes.object.isRequired,
     onUndo: PropTypes.func.isRequired,
-    onDescriptionChange: PropTypes.func.isRequired,
     onOpenFocalPoint: PropTypes.func.isRequired,
-    onSubmit: PropTypes.func.isRequired,
-  };
-
-  state = {
-    hovered: false,
-    focused: false,
-    dirtyDescription: null,
   };
 
-  handleKeyDown = (e) => {
-    if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
-      this.handleSubmit();
-    }
-  }
-
-  handleSubmit = () => {
-    this.handleInputBlur();
-    this.props.onSubmit(this.context.router.history);
-  }
-
   handleUndoClick = e => {
     e.stopPropagation();
     this.props.onUndo(this.props.media.get('id'));
@@ -55,69 +30,21 @@ class Upload extends ImmutablePureComponent {
     this.props.onOpenFocalPoint(this.props.media.get('id'));
   }
 
-  handleInputChange = e => {
-    this.setState({ dirtyDescription: e.target.value });
-  }
-
-  handleMouseEnter = () => {
-    this.setState({ hovered: true });
-  }
-
-  handleMouseLeave = () => {
-    this.setState({ hovered: false });
-  }
-
-  handleInputFocus = () => {
-    this.setState({ focused: true });
-  }
-
-  handleClick = () => {
-    this.setState({ focused: true });
-  }
-
-  handleInputBlur = () => {
-    const { dirtyDescription } = this.state;
-
-    this.setState({ focused: false, dirtyDescription: null });
-
-    if (dirtyDescription !== null) {
-      this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription);
-    }
-  }
-
   render () {
-    const { intl, media } = this.props;
-    const active          = this.state.hovered || this.state.focused;
-    const description     = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || '';
+    const { media } = this.props;
     const focusX = media.getIn(['meta', 'focus', 'x']);
     const focusY = media.getIn(['meta', 'focus', 'y']);
     const x = ((focusX /  2) + .5) * 100;
     const y = ((focusY / -2) + .5) * 100;
 
     return (
-      <div className='compose-form__upload' tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'>
+      <div className='compose-form__upload' tabIndex='0' role='button'>
         <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
           {({ scale }) => (
             <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>
-              <div className={classNames('compose-form__upload__actions', { active })}>
+              <div className={classNames('compose-form__upload__actions', { active: true })}>
                 <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>
-                {media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>}
-              </div>
-
-              <div className={classNames('compose-form__upload-description', { active })}>
-                <label>
-                  <span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span>
-
-                  <textarea
-                    placeholder={intl.formatMessage(messages.description)}
-                    value={description}
-                    maxLength={420}
-                    onFocus={this.handleInputFocus}
-                    onChange={this.handleInputChange}
-                    onBlur={this.handleInputBlur}
-                    onKeyDown={this.handleKeyDown}
-                  />
-                </label>
+                <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
               </div>
             </div>
           )}
diff --git a/app/javascript/mastodon/features/compose/components/upload_form.js b/app/javascript/mastodon/features/compose/components/upload_form.js
index 9ff2aa0fa..c6eac554e 100644
--- a/app/javascript/mastodon/features/compose/components/upload_form.js
+++ b/app/javascript/mastodon/features/compose/components/upload_form.js
@@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import UploadContainer from '../containers/upload_container';
 import SensitiveButtonContainer from '../containers/sensitive_button_container';
+import { FormattedMessage } from 'react-intl';
 
 export default class UploadForm extends ImmutablePureComponent {
 
@@ -16,7 +17,7 @@ export default class UploadForm extends ImmutablePureComponent {
 
     return (
       <div className='compose-form__upload-wrapper'>
-        <UploadProgressContainer />
+        <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />
 
         <div className='compose-form__uploads-wrapper'>
           {mediaIds.map(id => (
diff --git a/app/javascript/mastodon/features/compose/components/upload_progress.js b/app/javascript/mastodon/features/compose/components/upload_progress.js
index cbe58f573..b0bfe0c9a 100644
--- a/app/javascript/mastodon/features/compose/components/upload_progress.js
+++ b/app/javascript/mastodon/features/compose/components/upload_progress.js
@@ -2,7 +2,6 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import Motion from '../../ui/util/optional_motion';
 import spring from 'react-motion/lib/spring';
-import { FormattedMessage } from 'react-intl';
 import Icon from 'mastodon/components/icon';
 
 export default class UploadProgress extends React.PureComponent {
@@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent {
   static propTypes = {
     active: PropTypes.bool,
     progress: PropTypes.number,
+    icon: PropTypes.string.isRequired,
+    message: PropTypes.node.isRequired,
   };
 
   render () {
-    const { active, progress } = this.props;
+    const { active, progress, icon, message } = this.props;
 
     if (!active) {
       return null;
@@ -22,11 +23,11 @@ export default class UploadProgress extends React.PureComponent {
     return (
       <div className='upload-progress'>
         <div className='upload-progress__icon'>
-          <Icon id='upload' />
+          <Icon id={icon} />
         </div>
 
         <div className='upload-progress__message'>
-          <FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' />
+          {message}
 
           <div className='upload-progress__backdrop'>
             <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>
diff --git a/app/javascript/mastodon/features/compose/containers/upload_container.js b/app/javascript/mastodon/features/compose/containers/upload_container.js
index b6d81f03a..342b0c2a9 100644
--- a/app/javascript/mastodon/features/compose/containers/upload_container.js
+++ b/app/javascript/mastodon/features/compose/containers/upload_container.js
@@ -1,6 +1,6 @@
 import { connect } from 'react-redux';
 import Upload from '../components/upload';
-import { undoUploadCompose, changeUploadCompose } from '../../../actions/compose';
+import { undoUploadCompose } from '../../../actions/compose';
 import { openModal } from '../../../actions/modal';
 import { submitCompose } from '../../../actions/compose';
 
@@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({
     dispatch(undoUploadCompose(id));
   },
 
-  onDescriptionChange: (id, description) => {
-    dispatch(changeUploadCompose(id, { description }));
-  },
-
   onOpenFocalPoint: id => {
     dispatch(openModal('FOCAL_POINT', { id }));
   },
diff --git a/app/javascript/mastodon/features/ui/components/document_title.js b/app/javascript/mastodon/features/ui/components/document_title.js
new file mode 100644
index 000000000..cd081b20c
--- /dev/null
+++ b/app/javascript/mastodon/features/ui/components/document_title.js
@@ -0,0 +1,41 @@
+import { PureComponent } from 'react';
+import { connect } from 'react-redux';
+import PropTypes from 'prop-types';
+import { title } from 'mastodon/initial_state';
+
+const mapStateToProps = state => ({
+  unread: state.getIn(['missed_updates', 'unread']),
+});
+
+export default @connect(mapStateToProps)
+class DocumentTitle extends PureComponent {
+
+  static propTypes = {
+    unread: PropTypes.number.isRequired,
+  };
+
+  componentDidMount () {
+    this._sideEffects();
+  }
+
+  componentDidUpdate() {
+    this._sideEffects();
+  }
+
+  _sideEffects () {
+    const { unread } = this.props;
+
+    if (unread > 99) {
+      document.title = `(*) ${title}`;
+    } else if (unread > 0) {
+      document.title = `(${unread}) ${title}`;
+    } else {
+      document.title = title;
+    }
+  }
+
+  render () {
+    return null;
+  }
+
+}
diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
index 7488a3598..e0ef1a066 100644
--- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js
+++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
@@ -1,11 +1,26 @@
 import React from 'react';
 import ImmutablePropTypes from 'react-immutable-proptypes';
+import PropTypes from 'prop-types';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import { connect } from 'react-redux';
-import ImageLoader from './image_loader';
 import classNames from 'classnames';
 import { changeUploadCompose } from '../../../actions/compose';
 import { getPointerPosition } from '../../video';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
+import IconButton from 'mastodon/components/icon_button';
+import Button from 'mastodon/components/button';
+import Video from 'mastodon/features/video';
+import Textarea from 'react-textarea-autosize';
+import UploadProgress from 'mastodon/features/compose/components/upload_progress';
+import CharacterCounter from 'mastodon/features/compose/components/character_counter';
+import { length } from 'stringz';
+import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
+
+const messages = defineMessages({
+  close: { id: 'lightbox.close', defaultMessage: 'Close' },
+  apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' },
+  placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' },
+});
 
 const mapStateToProps = (state, { id }) => ({
   media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
@@ -13,17 +28,26 @@ const mapStateToProps = (state, { id }) => ({
 
 const mapDispatchToProps = (dispatch, { id }) => ({
 
-  onSave: (x, y) => {
-    dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
+  onSave: (description, x, y) => {
+    dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
   },
 
 });
 
+const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
+  .replace(/\n/g, ' ')
+  .replace(/\*\*\*\*\*\*/g, '\n\n');
+
+const assetHost = process.env.CDN_HOST || '';
+
 export default @connect(mapStateToProps, mapDispatchToProps)
+@injectIntl
 class FocalPointModal extends ImmutablePureComponent {
 
   static propTypes = {
     media: ImmutablePropTypes.map.isRequired,
+    onClose: PropTypes.func.isRequired,
+    intl: PropTypes.object.isRequired,
   };
 
   state = {
@@ -32,6 +56,9 @@ class FocalPointModal extends ImmutablePureComponent {
     focusX: 0,
     focusY: 0,
     dragging: false,
+    description: '',
+    dirty: false,
+    progress: 0,
   };
 
   componentWillMount () {
@@ -57,6 +84,14 @@ class FocalPointModal extends ImmutablePureComponent {
     this.setState({ dragging: true });
   }
 
+  handleTouchStart = e => {
+    document.addEventListener('touchmove', this.handleMouseMove);
+    document.addEventListener('touchend', this.handleTouchEnd);
+
+    this.updatePosition(e);
+    this.setState({ dragging: true });
+  }
+
   handleMouseMove = e => {
     this.updatePosition(e);
   }
@@ -66,7 +101,13 @@ class FocalPointModal extends ImmutablePureComponent {
     document.removeEventListener('mouseup', this.handleMouseUp);
 
     this.setState({ dragging: false });
-    this.props.onSave(this.state.focusX, this.state.focusY);
+  }
+
+  handleTouchEnd = () => {
+    document.removeEventListener('touchmove', this.handleMouseMove);
+    document.removeEventListener('touchend', this.handleTouchEnd);
+
+    this.setState({ dragging: false });
   }
 
   updatePosition = e => {
@@ -74,46 +115,145 @@ class FocalPointModal extends ImmutablePureComponent {
     const focusX   = (x - .5) *  2;
     const focusY   = (y - .5) * -2;
 
-    this.setState({ x, y, focusX, focusY });
+    this.setState({ x, y, focusX, focusY, dirty: true });
   }
 
   updatePositionFromMedia = media => {
-    const focusX = media.getIn(['meta', 'focus', 'x']);
-    const focusY = media.getIn(['meta', 'focus', 'y']);
+    const focusX      = media.getIn(['meta', 'focus', 'x']);
+    const focusY      = media.getIn(['meta', 'focus', 'y']);
+    const description = media.get('description') || '';
 
     if (focusX && focusY) {
       const x = (focusX /  2) + .5;
       const y = (focusY / -2) + .5;
 
-      this.setState({ x, y, focusX, focusY });
+      this.setState({
+        x,
+        y,
+        focusX,
+        focusY,
+        description,
+        dirty: false,
+      });
     } else {
-      this.setState({ x: 0.5, y: 0.5, focusX: 0, focusY: 0 });
+      this.setState({
+        x: 0.5,
+        y: 0.5,
+        focusX: 0,
+        focusY: 0,
+        description,
+        dirty: false,
+      });
     }
   }
 
+  handleChange = e => {
+    this.setState({ description: e.target.value, dirty: true });
+  }
+
+  handleSubmit = () => {
+    this.props.onSave(this.state.description, this.state.focusX, this.state.focusY);
+    this.props.onClose();
+  }
+
   setRef = c => {
     this.node = c;
   }
 
-  render () {
+  handleTextDetection = () => {
     const { media } = this.props;
-    const { x, y, dragging } = this.state;
+
+    this.setState({ detecting: true });
+
+    fetchTesseract().then(({ TesseractWorker }) => {
+      const worker = new TesseractWorker({
+        workerPath: `${assetHost}/packs/ocr/worker.min.js`,
+        corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`,
+        langPath: `${assetHost}/ocr/lang-data`,
+      });
+
+      worker.recognize(media.get('url'))
+        .progress(({ progress }) => this.setState({ progress }))
+        .finally(() => worker.terminate())
+        .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }))
+        .catch(() => this.setState({ detecting: false }));
+    }).catch(() => this.setState({ detecting: false }));
+  }
+
+  render () {
+    const { media, intl, onClose } = this.props;
+    const { x, y, dragging, description, dirty, detecting, progress } = this.state;
 
     const width  = media.getIn(['meta', 'original', 'width']) || null;
     const height = media.getIn(['meta', 'original', 'height']) || null;
+    const focals = ['image', 'gifv'].includes(media.get('type'));
+
+    const previewRatio  = 16/9;
+    const previewWidth  = 200;
+    const previewHeight = previewWidth / previewRatio;
 
     return (
-      <div className='modal-root__modal video-modal focal-point-modal'>
-        <div className={classNames('focal-point', { dragging })} ref={this.setRef}>
-          <ImageLoader
-            previewSrc={media.get('preview_url')}
-            src={media.get('url')}
-            width={width}
-            height={height}
-          />
-
-          <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} />
-          <div className='focal-point__overlay' onMouseDown={this.handleMouseDown} />
+      <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
+        <div className='report-modal__target'>
+          <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
+          <FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
+        </div>
+
+        <div className='report-modal__container'>
+          <div className='report-modal__comment'>
+            {focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>}
+
+            <label className='setting-text-label' htmlFor='upload-modal__description'><FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' /></label>
+
+            <div className='setting-text__wrapper'>
+              <Textarea
+                id='upload-modal__description'
+                className='setting-text light'
+                value={detecting ? '…' : description}
+                onChange={this.handleChange}
+                disabled={detecting}
+                autoFocus
+              />
+
+              <div className='setting-text__modifiers'>
+                <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} />
+              </div>
+            </div>
+
+            <div className='setting-text__toolbar'>
+              <button disabled={detecting || media.get('type') !== 'image'} className='link-button' onClick={this.handleTextDetection}><FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' /></button>
+              <CharacterCounter max={420} text={detecting ? '' : description} />
+            </div>
+
+            <Button disabled={!dirty || detecting || length(description) > 420} text={intl.formatMessage(messages.apply)} onClick={this.handleSubmit} />
+          </div>
+
+          <div className='focal-point-modal__content'>
+            {focals && (
+              <div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
+                {media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
+                {media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
+
+                <div className='focal-point__preview'>
+                  <strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
+                  <div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} />
+                </div>
+
+                <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} />
+                <div className='focal-point__overlay' />
+              </div>
+            )}
+
+            {['audio', 'video'].includes(media.get('type')) && (
+              <Video
+                preview={media.get('preview_url')}
+                blurhash={media.get('blurhash')}
+                src={media.get('url')}
+                detailed
+                editable
+              />
+            )}
+          </div>
         </div>
       </div>
     );
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index d1a3dc949..f0c3eff83 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -15,9 +15,11 @@ import { expandHomeTimeline } from '../../actions/timelines';
 import { expandNotifications } from '../../actions/notifications';
 import { fetchFilters } from '../../actions/filters';
 import { clearHeight } from '../../actions/height_cache';
+import { focusApp, unfocusApp } from 'mastodon/actions/app';
 import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';
 import UploadArea from './components/upload_area';
 import ColumnsAreaContainer from './containers/columns_area_container';
+import DocumentTitle from './components/document_title';
 import {
   Compose,
   Status,
@@ -226,7 +228,7 @@ class UI extends React.PureComponent {
     draggingOver: false,
   };
 
-  handleBeforeUnload = (e) => {
+  handleBeforeUnload = e => {
     const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props;
 
     if (isComposing && (hasComposingText || hasMediaAttachments)) {
@@ -237,6 +239,14 @@ class UI extends React.PureComponent {
     }
   }
 
+  handleWindowFocus = () => {
+    this.props.dispatch(focusApp());
+  }
+
+  handleWindowBlur = () => {
+    this.props.dispatch(unfocusApp());
+  }
+
   handleLayoutChange = () => {
     // The cached heights are no longer accurate, invalidate
     this.props.dispatch(clearHeight());
@@ -314,6 +324,8 @@ class UI extends React.PureComponent {
   }
 
   componentWillMount () {
+    window.addEventListener('focus', this.handleWindowFocus, false);
+    window.addEventListener('blur', this.handleWindowBlur, false);
     window.addEventListener('beforeunload', this.handleBeforeUnload, false);
 
     document.addEventListener('dragenter', this.handleDragEnter, false);
@@ -343,7 +355,10 @@ class UI extends React.PureComponent {
   }
 
   componentWillUnmount () {
+    window.removeEventListener('focus', this.handleWindowFocus);
+    window.removeEventListener('blur', this.handleWindowBlur);
     window.removeEventListener('beforeunload', this.handleBeforeUnload);
+
     document.removeEventListener('dragenter', this.handleDragEnter);
     document.removeEventListener('dragover', this.handleDragOver);
     document.removeEventListener('drop', this.handleDrop);
@@ -502,6 +517,7 @@ class UI extends React.PureComponent {
           <LoadingBarContainer className='loading-bar' />
           <ModalContainer />
           <UploadArea active={draggingOver} onClose={this.closeUploadModal} />
+          <DocumentTitle />
         </div>
       </HotKeys>
     );
diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js
index 6e8ed163a..0a07aa75e 100644
--- a/app/javascript/mastodon/features/ui/util/async-components.js
+++ b/app/javascript/mastodon/features/ui/util/async-components.js
@@ -133,3 +133,7 @@ export function ListAdder () {
 export function Search () {
   return import(/*webpackChunkName: "features/search" */'../../search');
 }
+
+export function Tesseract () {
+  return import(/*webpackChunkName: "tesseract" */'tesseract.js');
+}
diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js
index 0acdd198d..da48c165e 100644
--- a/app/javascript/mastodon/features/video/index.js
+++ b/app/javascript/mastodon/features/video/index.js
@@ -101,6 +101,7 @@ class Video extends React.PureComponent {
     onCloseVideo: PropTypes.func,
     detailed: PropTypes.bool,
     inline: PropTypes.bool,
+    editable: PropTypes.bool,
     cacheWidth: PropTypes.func,
     visible: PropTypes.bool,
     onToggleVisibility: PropTypes.func,
@@ -375,7 +376,7 @@ class Video extends React.PureComponent {
   }
 
   render () {
-    const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link } = this.props;
+    const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable } = this.props;
     const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
     const progress = (currentTime / duration) * 100;
 
@@ -413,7 +414,7 @@ class Video extends React.PureComponent {
     return (
       <div
         role='menuitem'
-        className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen })}
+        className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, editable })}
         style={playerStyle}
         ref={this.setPlayerRef}
         onMouseEnter={this.handleMouseEnter}
@@ -423,7 +424,7 @@ class Video extends React.PureComponent {
       >
         <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} />
 
-        {revealed && <video
+        {(revealed || editable) && <video
           ref={this.setVideoRef}
           src={src}
           poster={preview}
@@ -445,7 +446,7 @@ class Video extends React.PureComponent {
           onVolumeChange={this.handleVolumeChange}
         />}
 
-        <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed })}>
+        <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed || editable })}>
           <button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}>
             <span className='spoiler-button__overlay__label'>{warning}</span>
           </button>
@@ -489,7 +490,7 @@ class Video extends React.PureComponent {
             </div>
 
             <div className='video-player__buttons right'>
-              {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
+              {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
               {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>}
               {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>}
               <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button>
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js
index 8db5f59af..deebe1815 100644
--- a/app/javascript/mastodon/initial_state.js
+++ b/app/javascript/mastodon/initial_state.js
@@ -24,5 +24,6 @@ export const forceSingleColumn = !getMeta('advanced_layout');
 export const useBlurhash = getMeta('use_blurhash');
 export const usePendingItems = getMeta('use_pending_items');
 export const showTrends = getMeta('trends');
+export const title = getMeta('title');
 
 export default initialState;
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index d62ee90c2..e7a21523a 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -4,6 +4,7 @@
   "account.block": "حظر @{name}",
   "account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}",
   "account.blocked": "محظور",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "رسالة خاصة إلى @{name}",
   "account.domain_blocked": "النطاق مخفي",
   "account.edit_profile": "تعديل الملف الشخصي",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
   "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
   "alert.unexpected.title": "المعذرة!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة",
   "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
   "bundle_column_error.retry": "إعادة المحاولة",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "أساسية",
   "home.column_settings.show_reblogs": "عرض الترقيات",
   "home.column_settings.show_replies": "عرض الردود",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "تحديث في الوقت الحالي",
   "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
   "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
   "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
@@ -251,10 +253,11 @@
   "navigation_bar.profile_directory": "دليل المستخدِمين",
   "navigation_bar.public_timeline": "الخيط العام الموحد",
   "navigation_bar.security": "الأمان",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "أُعجِب {name} بمنشورك",
   "notification.follow": "{name} يتابعك",
   "notification.mention": "{name} ذكرك",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.poll": "لقد إنتها تصويت شاركت فيه",
   "notification.reblog": "{name} قام بترقية تبويقك",
   "notifications.clear": "امسح الإخطارات",
   "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟",
@@ -316,7 +319,7 @@
   "search_results.accounts": "أشخاص",
   "search_results.hashtags": "الوُسوم",
   "search_results.statuses": "التبويقات",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "البحث في التبويقات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.",
   "search_results.total": "{count, number} {count, plural, one {result} و {results}}",
   "status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
   "status.admin_status": "افتح هذا المنشور على واجهة الإشراف",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "لحظات متبقية",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
   "upload_area.title": "اسحب ثم أفلت للرفع",
   "upload_button.label": "إضافة وسائط ({formats})",
   "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
   "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
   "upload_form.description": "وصف للمعاقين بصريا",
-  "upload_form.focus": "قص",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "حذف",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "يرفع...",
   "video.close": "إغلاق الفيديو",
   "video.exit_fullscreen": "الخروج من وضع الشاشة المليئة",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 3ae4e5e5e..c9b5d6061 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -4,6 +4,7 @@
   "account.block": "Bloquiar a @{name}",
   "account.block_domain": "Anubrir tolo de {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Unviar un mensaxe direutu a @{name}",
   "account.domain_blocked": "Dominiu anubríu",
   "account.edit_profile": "Editar el perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "Asocedió un fallu inesperáu.",
   "alert.unexpected.title": "¡Ups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada",
   "bundle_column_error.body": "Something went wrong while loading this component.",
   "bundle_column_error.retry": "Try again",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Llinia temporal federada",
   "navigation_bar.security": "Seguranza",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} siguióte",
   "notification.mention": "{name} mentóte",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "El borrador va perdese si coles de Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Descripción pa discapacitaos visuales",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Desaniciar",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Xubiendo...",
   "video.close": "Zarrar el videu",
   "video.exit_fullscreen": "Colar de la pantalla completa",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 4c97fe1fc..3cb5900f4 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -4,6 +4,7 @@
   "account.block": "Блокирай",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Редактирай профила си",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Публичен канал",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} хареса твоята публикация",
   "notification.follow": "{name} те последва",
   "notification.mention": "{name} те спомена",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Добави медия",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Отмяна",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 358f994f3..ee79b0edd 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -4,6 +4,7 @@
   "account.block": "@{name} কে বন্ধ করুন",
   "account.block_domain": "{domain} থেকে সব সরিয়ে ফেলুন",
   "account.blocked": "বন্ধ করা হয়েছে",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "@{name} এর কাছে সরকারি লেখা পাঠাতে",
   "account.domain_blocked": "ওয়েবসাইট সরিয়ে ফেলা হয়েছে",
   "account.edit_profile": "নিজের পাতা সম্পাদনা করতে",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন",
   "alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।",
   "alert.unexpected.title": "ওহো!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন",
   "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।",
   "bundle_column_error.retry": "আবার চেষ্টা করুন",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "নিজস্ব পাতার তালিকা",
   "navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
   "navigation_bar.security": "নিরাপত্তা",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
   "notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
   "notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "সময় বাকি আছে",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} কথা বলছে",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
   "upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে",
   "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
   "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
   "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
-  "upload_form.focus": "সাধারণ দেখাটি পরিবর্তন করতে",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "মুছে ফেলতে",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...",
   "video.close": "ভিডিওটি বন্ধ করতে",
   "video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 09f8838e9..4554ff04e 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -4,6 +4,7 @@
   "account.block": "Bloqueja @{name}",
   "account.block_domain": "Amaga-ho tot de {domain}",
   "account.blocked": "Bloquejat",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Missatge directe @{name}",
   "account.domain_blocked": "Domini ocult",
   "account.edit_profile": "Editar el perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Activar notificacions de @{name}",
   "alert.unexpected.message": "S'ha produït un error inesperat.",
   "alert.unexpected.title": "Vaja!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
   "bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
   "bundle_column_error.retry": "Torna-ho a provar",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Bàsic",
   "home.column_settings.show_reblogs": "Mostrar impulsos",
   "home.column_settings.show_replies": "Mostrar respostes",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Actualització en temps real",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Nova llista",
   "lists.search": "Cercar entre les persones que segueixes",
   "lists.subheading": "Les teves llistes",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
   "loading_indicator.label": "Carregant...",
   "media_gallery.toggle_visible": "Alternar visibilitat",
   "missing_indicator.label": "No trobat",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Directori de perfils",
   "navigation_bar.public_timeline": "Línia de temps federada",
   "navigation_bar.security": "Seguretat",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ha afavorit el teu estat",
   "notification.follow": "{name} et segueix",
   "notification.mention": "{name} t'ha esmentat",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Gent",
   "search_results.hashtags": "Etiquetes",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "La cerca de toots pel seu contingut no està habilitada en aquest servidor Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
   "status.admin_account": "Obre l'interfície de moderació per a @{name}",
   "status.admin_status": "Obre aquest toot a la interfície de moderació",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments restants",
   "time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
   "upload_area.title": "Arrossega i deixa anar per a carregar",
   "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
   "upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.",
   "upload_form.description": "Descriure els problemes visuals",
-  "upload_form.focus": "Modificar la previsualització",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Esborra",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Pujant...",
   "video.close": "Tancar el vídeo",
   "video.exit_fullscreen": "Sortir de pantalla completa",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 7a1ff863b..428c993a6 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -1,9 +1,10 @@
 {
-  "account.add_or_remove_from_list": "Aghjustà o toglie da e liste",
+  "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste",
   "account.badges.bot": "Bot",
   "account.block": "Bluccà @{name}",
   "account.block_domain": "Piattà tuttu da {domain}",
   "account.blocked": "Bluccatu",
+  "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu",
   "account.direct": "Missaghju direttu @{name}",
   "account.domain_blocked": "Duminiu piattatu",
   "account.edit_profile": "Mudificà u prufile",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}",
   "alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.",
   "alert.unexpected.title": "Uups!",
+  "autosuggest_hashtag.per_week": "{count} per settimana",
   "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta",
   "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.",
   "bundle_column_error.retry": "Pruvà torna",
@@ -71,7 +73,7 @@
   "compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.",
   "compose_form.lock_disclaimer.lock": "privatu",
   "compose_form.placeholder": "À chè pensate?",
-  "compose_form.poll.add_option": "Aghjustà una scelta",
+  "compose_form.poll.add_option": "Aghjunghje scelta",
   "compose_form.poll.duration": "Durata di u scandagliu",
   "compose_form.poll.option_placeholder": "Scelta {number}",
   "compose_form.poll.remove_option": "Toglie sta scelta",
@@ -123,8 +125,8 @@
   "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!",
   "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.",
   "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.",
-  "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjusterate unu à i vostri favuriti, sarà mustratu quì.",
-  "empty_column.favourites": "Nisunu hà aghjustatu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.",
+  "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_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à.",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Bàsichi",
   "home.column_settings.show_reblogs": "Vede e spartere",
   "home.column_settings.show_replies": "Vede e risposte",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Mette à ghjornu in tempu reale",
   "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}}",
@@ -218,11 +220,11 @@
   "lists.delete": "Supprime a lista",
   "lists.edit": "Mudificà a lista",
   "lists.edit.submit": "Cambià u titulu",
-  "lists.new.create": "Aghjustà una lista",
+  "lists.new.create": "Aghjunghje",
   "lists.new.title_placeholder": "Titulu di a lista",
   "lists.search": "Circà indè i vostr'abbunamenti",
   "lists.subheading": "E vo liste",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}",
   "loading_indicator.label": "Caricamentu...",
   "media_gallery.toggle_visible": "Cambià a visibilità",
   "missing_indicator.label": "Micca trovu",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Annuariu di i prufili",
   "navigation_bar.public_timeline": "Linea pubblica glubale",
   "navigation_bar.security": "Sicurità",
+  "notification.and_n_others": "è {count, plural, one {# altru} other {# altri}}",
   "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
   "notification.follow": "{name} v'hà seguitatu",
   "notification.mention": "{name} v'hà mintuvatu",
@@ -281,7 +284,7 @@
   "poll.refresh": "Attualizà",
   "poll.total_votes": "{count, plural, one {# votu} other {# voti}}",
   "poll.vote": "Vutà",
-  "poll_button.add_poll": "Aghjustà un scandagliu",
+  "poll_button.add_poll": "Aghjunghje",
   "poll_button.remove_poll": "Toglie u scandagliu",
   "privacy.change": "Mudificà a cunfidenzialità di u statutu",
   "privacy.direct.long": "Mandà solu à quelli chì so mintuvati",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Ghjente",
   "search_results.hashtags": "Hashtag",
   "search_results.statuses": "Statuti",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}",
   "status.admin_account": "Apre l'interfaccia di muderazione per @{name}",
   "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Ci fermanu qualchi mumentu",
   "time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu",
+  "trends.refresh": "Attualizà",
   "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
   "upload_area.title": "Drag & drop per caricà un fugliale",
   "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
   "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
   "upload_form.description": "Discrive per i malvistosi",
-  "upload_form.focus": "Cambià a vista",
+  "upload_form.edit": "Mudificà",
   "upload_form.undo": "Sguassà",
+  "upload_modal.analyzing_picture": "Analisi di u ritrattu…",
+  "upload_modal.apply": "Affettà",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "Ditettà testu da u ritrattu",
+  "upload_modal.edit_media": "Cambià media",
+  "upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.",
+  "upload_modal.preview_label": "Vista ({ratio})",
   "upload_progress.label": "Caricamentu...",
   "video.close": "Chjudà a video",
   "video.exit_fullscreen": "Caccià u pienu screnu",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 020fd35b0..46a57b3b8 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -4,6 +4,7 @@
   "account.block": "Zablokovat uživatele @{name}",
   "account.block_domain": "Skrýt vše z {domain}",
   "account.blocked": "Blokován/a",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Poslat přímou zprávu uživateli @{name}",
   "account.domain_blocked": "Doména skryta",
   "account.edit_profile": "Upravit profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}",
   "alert.unexpected.message": "Objevila se neočekávaná chyba.",
   "alert.unexpected.title": "Jejda!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}",
   "bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
   "bundle_column_error.retry": "Zkuste to znovu",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Základní",
   "home.column_settings.show_reblogs": "Zobrazit boosty",
   "home.column_settings.show_replies": "Zobrazit odpovědi",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Aktualizovat v reálném čase",
   "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}",
   "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Název nového seznamu",
   "lists.search": "Hledejte mezi lidmi, které sledujete",
   "lists.subheading": "Vaše seznamy",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
   "loading_indicator.label": "Načítám…",
   "media_gallery.toggle_visible": "Přepínat viditelnost",
   "missing_indicator.label": "Nenalezeno",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Adresář profilů",
   "navigation_bar.public_timeline": "Federovaná časová osa",
   "navigation_bar.security": "Zabezpečení",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} si oblíbil/a váš toot",
   "notification.follow": "{name} vás začal/a sledovat",
   "notification.mention": "{name} vás zmínil/a",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Lidé",
   "search_results.hashtags": "Hashtagy",
   "search_results.statuses": "Tooty",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.",
   "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}",
   "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}",
   "status.admin_status": "Otevřít tento toot v moderátorském rozhraní",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Zbývá několik sekund",
   "time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.",
   "upload_area.title": "Přetažením nahrajete",
   "upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Byl překročen limit nahraných souborů.",
   "upload_error.poll": "Nahrávání souborů není povoleno u anket.",
   "upload_form.description": "Popis pro zrakově postižené",
-  "upload_form.focus": "Změnit náhled",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Smazat",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Nahrávám…",
   "video.close": "Zavřít video",
   "video.exit_fullscreen": "Ukončit celou obrazovku",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 9de3efda8..0bd6f19d2 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -4,6 +4,7 @@
   "account.block": "Blocio @{name}",
   "account.block_domain": "Cuddio popeth rhag {domain}",
   "account.blocked": "Blociwyd",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Neges breifat @{name}",
   "account.domain_blocked": "Parth wedi ei guddio",
   "account.edit_profile": "Golygu proffil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
   "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
   "alert.unexpected.title": "Wps!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa",
   "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
   "bundle_column_error.retry": "Ceisiwch eto",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Cyfeiriadur Proffil",
   "navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
   "navigation_bar.security": "Diogelwch",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "hoffodd {name} eich tŵt",
   "notification.follow": "dilynodd {name} chi",
   "notification.mention": "Soniodd {name} amdanoch chi",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Munudau ar ôl",
   "time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} yn siarad",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
   "upload_area.title": "Llusgwch & gollwing i uwchlwytho",
   "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
   "upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.",
   "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
-  "upload_form.focus": "Newid rhagolwg",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Dileu",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uwchlwytho...",
   "video.close": "Cau fideo",
   "video.exit_fullscreen": "Gadael sgrîn llawn",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 17080c41e..b021f9aa1 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -4,6 +4,7 @@
   "account.block": "Bloker @{name}",
   "account.block_domain": "Skjul alt fra {domain}",
   "account.blocked": "Blokeret",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Send en direkte besked til @{name}",
   "account.domain_blocked": "Domænet er blevet skjult",
   "account.edit_profile": "Rediger profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
   "alert.unexpected.message": "Der opstod en uventet fejl.",
   "alert.unexpected.title": "Ups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Fælles tidslinje",
   "navigation_bar.security": "Sikkerhed",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favoriserede din status",
   "notification.follow": "{name} fulgte dig",
   "notification.mention": "{name} nævnte dig",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} snakker",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
   "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": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Beskriv for de svagtseende",
-  "upload_form.focus": "Beskær",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Slet",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploader...",
   "video.close": "Luk video",
   "video.exit_fullscreen": "Gå ud af fuldskærm",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 4ae785270..28b41baf7 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -4,6 +4,7 @@
   "account.block": "@{name} blockieren",
   "account.block_domain": "Alles von {domain} verstecken",
   "account.blocked": "Blockiert",
+  "account.cancel_follow_request": "Folgeanfrage abbrechen",
   "account.direct": "Direktnachricht an @{name}",
   "account.domain_blocked": "Domain versteckt",
   "account.edit_profile": "Profil bearbeiten",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
   "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
   "alert.unexpected.title": "Hoppla!",
+  "autosuggest_hashtag.per_week": "{count} pro Woche",
   "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen",
   "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
   "bundle_column_error.retry": "Erneut versuchen",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Einfach",
   "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
   "home.column_settings.show_replies": "Antworten anzeigen",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "In Echtzeit aktualisieren",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Neuer Titel der Liste",
   "lists.search": "Suche nach Leuten denen du folgst",
   "lists.subheading": "Deine Listen",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}",
   "loading_indicator.label": "Wird geladen …",
   "media_gallery.toggle_visible": "Sichtbarkeit umschalten",
   "missing_indicator.label": "Nicht gefunden",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profilverzeichnis",
   "navigation_bar.public_timeline": "Föderierte Zeitleiste",
   "navigation_bar.security": "Sicherheit",
+  "notification.and_n_others": "und {count, plural, one {# andere Person} other {# andere Personen}}",
   "notification.favourite": "{name} hat deinen Beitrag favorisiert",
   "notification.follow": "{name} folgt dir",
   "notification.mention": "{name} hat dich erwähnt",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Personen",
   "search_results.hashtags": "Hashtags",
   "search_results.statuses": "Beiträge",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.",
   "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}",
   "status.admin_account": "Öffne Moderationsoberfläche für @{name}",
   "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Schließt in Kürze",
   "time_remaining.seconds": "{number, plural, one {# Sekunde} other {# Sekunden}} verbleibend",
   "trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber",
+  "trends.refresh": "Aktualisieren",
   "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
   "upload_area.title": "Zum Hochladen hereinziehen",
   "upload_button.label": "Mediendatei hinzufügen ({formats})",
   "upload_error.limit": "Dateiupload-Limit erreicht.",
   "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
   "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
-  "upload_form.focus": "Vorschaubild bearbeiten",
+  "upload_form.edit": "Bearbeiten",
   "upload_form.undo": "Löschen",
+  "upload_modal.analyzing_picture": "Analysiere Bild…",
+  "upload_modal.apply": "Übernehmen",
+  "upload_modal.description_placeholder": "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern",
+  "upload_modal.detect_text": "Text aus Bild erkennen",
+  "upload_modal.edit_media": "Medien bearbeiten",
+  "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.",
+  "upload_modal.preview_label": "Vorschau ({ratio})",
   "upload_progress.label": "Wird hochgeladen …",
   "video.close": "Video schließen",
   "video.exit_fullscreen": "Vollbild verlassen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 8c8c89115..246c9bd0e 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -74,6 +74,15 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "{count} per week",
+        "id": "autosuggest_hashtag.per_week"
+      }
+    ],
+    "path": "app/javascript/mastodon/components/autosuggest_hashtag.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Back",
         "id": "column_back_button.label"
       }
@@ -578,6 +587,10 @@
         "id": "account.follow"
       },
       {
+        "defaultMessage": "Cancel follow request",
+        "id": "account.cancel_follow_request"
+      },
+      {
         "defaultMessage": "Awaiting approval. Click to cancel follow request",
         "id": "account.requested"
       },
@@ -804,6 +817,10 @@
       {
         "defaultMessage": "Muted words",
         "id": "navigation_bar.filters"
+      },
+      {
+        "defaultMessage": "Logout",
+        "id": "navigation_bar.logout"
       }
     ],
     "path": "app/javascript/mastodon/features/compose/components/action_bar.json"
@@ -1073,6 +1090,15 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Uploading…",
+        "id": "upload_progress.label"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/compose/components/upload_form.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Uploading...",
         "id": "upload_progress.label"
       }
@@ -1082,16 +1108,12 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Describe for the visually impaired",
-        "id": "upload_form.description"
-      },
-      {
         "defaultMessage": "Delete",
         "id": "upload_form.undo"
       },
       {
-        "defaultMessage": "Crop",
-        "id": "upload_form.focus"
+        "defaultMessage": "Edit",
+        "id": "upload_form.edit"
       }
     ],
     "path": "app/javascript/mastodon/features/compose/components/upload.json"
@@ -1295,6 +1317,15 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Refresh",
+        "id": "trends.refresh"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/getting_started/components/trends.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Home",
         "id": "tabs_bar.home"
       },
@@ -1873,6 +1904,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "and {count, plural, one {# other} other {# others}}",
+        "id": "notification.and_n_others"
+      },
+      {
         "defaultMessage": "{name} followed you",
         "id": "notification.follow"
       },
@@ -2237,6 +2272,47 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Close",
+        "id": "lightbox.close"
+      },
+      {
+        "defaultMessage": "Apply",
+        "id": "upload_modal.apply"
+      },
+      {
+        "defaultMessage": "A quick brown fox jumps over the lazy dog",
+        "id": "upload_modal.description_placeholder"
+      },
+      {
+        "defaultMessage": "Edit media",
+        "id": "upload_modal.edit_media"
+      },
+      {
+        "defaultMessage": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+        "id": "upload_modal.hint"
+      },
+      {
+        "defaultMessage": "Describe for the visually impaired",
+        "id": "upload_form.description"
+      },
+      {
+        "defaultMessage": "Analyzing picture…",
+        "id": "upload_modal.analyzing_picture"
+      },
+      {
+        "defaultMessage": "Detect text from picture",
+        "id": "upload_modal.detect_text"
+      },
+      {
+        "defaultMessage": "Preview ({ratio})",
+        "id": "upload_modal.preview_label"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/ui/components/focal_point_modal.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Follow requests",
         "id": "navigation_bar.follow_requests"
       }
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index df85c025f..68c59817f 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -4,6 +4,7 @@
   "account.block": "Αποκλισμός @{name}",
   "account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
   "account.blocked": "Αποκλεισμένος/η",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Προσωπικό μήνυμα προς @{name}",
   "account.domain_blocked": "Κρυμμένος τομέας",
   "account.edit_profile": "Επεξεργασία προφίλ",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
   "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
   "alert.unexpected.title": "Εεπ!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά",
   "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
   "bundle_column_error.retry": "Δοκίμασε ξανά",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Βασικά",
   "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
   "home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Ζωντανή ενημέρωση",
   "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
   "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
   "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Τίτλος νέας λίστα",
   "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
   "lists.subheading": "Οι λίστες σου",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# νέο} other {# νέα}}",
   "loading_indicator.label": "Φορτώνει...",
   "media_gallery.toggle_visible": "Εναλλαγή ορατότητας",
   "missing_indicator.label": "Δε βρέθηκε",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Κατάλογος λογαριασμών",
   "navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
   "navigation_bar.security": "Ασφάλεια",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
   "notification.follow": "Ο/Η {name} σε ακολούθησε",
   "notification.mention": "Ο/Η {name} σε ανέφερε",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Άνθρωποι",
   "search_results.hashtags": "Ταμπέλες",
   "search_results.statuses": "Τουτ",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.",
   "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}",
   "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
   "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Απομένουν στιγμές",
   "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
   "upload_area.title": "Drag & drop για να ανεβάσεις",
   "upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
   "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
   "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
-  "upload_form.focus": "Αλλαγή προεπισκόπησης",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Διαγραφή",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Ανεβαίνει...",
   "video.close": "Κλείσε το βίντεο",
   "video.exit_fullscreen": "Έξοδος από πλήρη οθόνη",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 7bed98530..628ede3e3 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -4,6 +4,7 @@
   "account.block": "Block @{name}",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Edit profile",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "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",
@@ -256,6 +258,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -375,14 +378,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media ({formats})",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Change preview",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index ddc694252..763c31bb8 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -4,6 +4,7 @@
   "account.block": "Bloki @{name}",
   "account.block_domain": "Kaŝi ĉion de {domain}",
   "account.blocked": "Blokita",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Rekte mesaĝi @{name}",
   "account.domain_blocked": "Domajno kaŝita",
   "account.edit_profile": "Redakti profilon",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
   "alert.unexpected.message": "Neatendita eraro okazis.",
   "alert.unexpected.title": "Ups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
   "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
   "bundle_column_error.retry": "Bonvolu reprovi",
@@ -72,12 +74,12 @@
   "compose_form.lock_disclaimer.lock": "ŝlosita",
   "compose_form.placeholder": "Pri kio vi pensas?",
   "compose_form.poll.add_option": "Aldoni elekto",
-  "compose_form.poll.duration": "Balotenketo daŭro",
+  "compose_form.poll.duration": "Balotenketa daŭro",
   "compose_form.poll.option_placeholder": "elekto {number}",
   "compose_form.poll.remove_option": "Forigi ĉi tiu elekton",
   "compose_form.publish": "Hup",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Marki aŭdovidaĵojn kiel tiklaj",
+  "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj",
   "compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla",
   "compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla",
   "compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Bazaj agordoj",
   "home.column_settings.show_reblogs": "Montri diskonigojn",
   "home.column_settings.show_replies": "Montri respondojn",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Ĝisdatigo en realtempa",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Titolo de la nova listo",
   "lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
   "lists.subheading": "Viaj listoj",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count,plural, one {# nova ero} other {# novaj eroj}}",
   "loading_indicator.label": "Ŝargado…",
   "media_gallery.toggle_visible": "Baskuligi videblecon",
   "missing_indicator.label": "Ne trovita",
@@ -251,10 +253,11 @@
   "navigation_bar.profile_directory": "Profilujo",
   "navigation_bar.public_timeline": "Fratara tempolinio",
   "navigation_bar.security": "Sekureco",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} stelumis vian mesaĝon",
   "notification.follow": "{name} eksekvis vin",
   "notification.mention": "{name} menciis vin",
-  "notification.poll": "Balotenketo ke vi balotis estas finita",
+  "notification.poll": "Partoprenita balotenketo finiĝis",
   "notification.reblog": "{name} diskonigis vian mesaĝon",
   "notifications.clear": "Forviŝi sciigojn",
   "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?",
@@ -265,7 +268,7 @@
   "notifications.column_settings.filter_bar.show": "Montri",
   "notifications.column_settings.follow": "Novaj sekvantoj:",
   "notifications.column_settings.mention": "Mencioj:",
-  "notifications.column_settings.poll": "Balotenketo rezulto:",
+  "notifications.column_settings.poll": "Balotenketaj rezultoj:",
   "notifications.column_settings.push": "Puŝsciigoj",
   "notifications.column_settings.reblog": "Diskonigoj:",
   "notifications.column_settings.show": "Montri en kolumno",
@@ -275,7 +278,7 @@
   "notifications.filter.favourites": "Stelumoj",
   "notifications.filter.follows": "Sekvoj",
   "notifications.filter.mentions": "Mencioj",
-  "notifications.filter.polls": "Balotenketoj rezultoj",
+  "notifications.filter.polls": "Balotenketaj rezultoj",
   "notifications.group": "{count} sciigoj",
   "poll.closed": "Finita",
   "poll.refresh": "Aktualigi",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Homoj",
   "search_results.hashtags": "Kradvortoj",
   "search_results.statuses": "Mesaĝoj",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.",
   "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}",
   "status.admin_account": "Malfermi la kontrolan interfacon por @{name}",
   "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",
@@ -364,20 +367,28 @@
   "tabs_bar.local_timeline": "Loka tempolinio",
   "tabs_bar.notifications": "Sciigoj",
   "tabs_bar.search": "Serĉi",
-  "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restanta",
-  "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restanta",
-  "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restanta",
-  "time_remaining.moments": "Momento restanta",
-  "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restanta",
+  "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas",
+  "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restas",
+  "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",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persono} other {personoj}} parolas",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
   "upload_area.title": "Altreni kaj lasi por alŝuti",
   "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Limo de dosiera alŝutado transpasita.",
-  "upload_error.poll": "Alŝuto de dosiero ne permisita kun balotenketo",
+  "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.",
   "upload_form.description": "Priskribi por misvidantaj homoj",
-  "upload_form.focus": "Antaŭvido de ŝanĝo",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Forigi",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Alŝutado…",
   "video.close": "Fermi videon",
   "video.exit_fullscreen": "Eksigi plenekrana",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index dc42bc7ef..415faf509 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -1,21 +1,22 @@
 {
-  "account.add_or_remove_from_list": "Agregar o eliminar de las listas",
+  "account.add_or_remove_from_list": "Agregar o eliminar de listas",
   "account.badges.bot": "Bot",
-  "account.block": "Bloquear",
+  "account.block": "Bloquear a @{name}",
   "account.block_domain": "Ocultar todo de {domain}",
   "account.blocked": "Bloqueado",
-  "account.direct": "Direct Message @{name}",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Mensaje directo a @{name}",
   "account.domain_blocked": "Dominio oculto",
   "account.edit_profile": "Editar perfil",
   "account.endorse": "Mostrar en perfil",
   "account.follow": "Seguir",
   "account.followers": "Seguidores",
-  "account.followers.empty": "Nadie sigue a este usuario todavía.",
+  "account.followers.empty": "Todavía nadie sigue a este usuario.",
   "account.follows": "Sigue",
   "account.follows.empty": "Este usuario todavía no sigue a nadie.",
   "account.follows_you": "Te sigue",
   "account.hide_reblogs": "Ocultar retoots de @{name}",
-  "account.link_verified_on": "El proprietario de este link fue verificado el {date}",
+  "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}",
@@ -37,7 +38,8 @@
   "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
   "alert.unexpected.message": "Hubo un error inesperado.",
   "alert.unexpected.title": "¡Ups!",
-  "boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "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",
@@ -47,17 +49,17 @@
   "column.blocks": "Usuarios bloqueados",
   "column.community": "Línea de tiempo local",
   "column.direct": "Mensajes directos",
-  "column.domain_blocks": "Dominios ocultos",
+  "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": "Toot fijado",
-  "column.public": "Historia federada",
+  "column.pins": "Toots fijados",
+  "column.public": "Línea de tiempo federada",
   "column_back_button.label": "Atrás",
-  "column_header.hide_settings": "Ocultar ajustes",
+  "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",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar retoots",
   "home.column_settings.show_replies": "Mostrar respuestas",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Actualizar en tiempo real",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Título de la nueva lista",
   "lists.search": "Buscar entre la gente a la que sigues",
   "lists.subheading": "Tus listas",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Directorio de perfiles",
   "navigation_bar.public_timeline": "Historia federada",
   "navigation_bar.security": "Seguridad",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te ha mencionado",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Etiquetas",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "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",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Momentos restantes",
   "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
   "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.description": "Describir para los usuarios con dificultad visual",
-  "upload_form.focus": "Recortar",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Borrar",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Subiendo…",
   "video.close": "Cerrar video",
   "video.exit_fullscreen": "Salir de pantalla completa",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
new file mode 100644
index 000000000..0d708eac2
--- /dev/null
+++ b/app/javascript/mastodon/locales/et.json
@@ -0,0 +1,402 @@
+{
+  "account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest",
+  "account.badges.bot": "Robot",
+  "account.block": "Blokeeri @{name}",
+  "account.block_domain": "Peida kõik domeenist {domain}",
+  "account.blocked": "Blokeeritud",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Otsesõnum @{name}",
+  "account.domain_blocked": "Domeen peidetud",
+  "account.edit_profile": "Muuda profiili",
+  "account.endorse": "Too profiilil esile",
+  "account.follow": "Jälgi",
+  "account.followers": "Jälgijad",
+  "account.followers.empty": "Keegi ei jälgi seda kasutajat veel.",
+  "account.follows": "Jälgib",
+  "account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
+  "account.follows_you": "Jälgib sind",
+  "account.hide_reblogs": "Peida upitused kasutajalt @{name}",
+  "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}",
+  "account.locked_info": "Selle konto privaatsus on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.",
+  "account.media": "Meedia",
+  "account.mention": "Maini @{name}",
+  "account.moved_to": "{name} on kolinud:",
+  "account.mute": "Vaigista @{name}",
+  "account.mute_notifications": "Vaigista teated kasutajalt @{name}",
+  "account.muted": "Vaigistatud",
+  "account.posts": "Tuututused",
+  "account.posts_with_replies": "Tuututused ja vastused",
+  "account.report": "Raporteeri @{name}",
+  "account.requested": "Ootab kinnitust. Klõpsa jälgimise soovi tühistamiseks",
+  "account.share": "Jaga @{name} profiili",
+  "account.show_reblogs": "Näita kasutaja @{name} upitusi",
+  "account.unblock": "Eemalda blokeering @{name}",
+  "account.unblock_domain": "Tee {domain} nähtavaks",
+  "account.unendorse": "Ära kuva profiilil",
+  "account.unfollow": "Ära jälgi",
+  "account.unmute": "Ära vaigista @{name}",
+  "account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}",
+  "alert.unexpected.message": "Tekkis ootamatu viga.",
+  "alert.unexpected.title": "Oih!",
+  "autosuggest_hashtag.per_week": "{count} per week",
+  "boost_modal.combo": "Saad vajutada {combo}, et see järgmine kord vahele jätta",
+  "bundle_column_error.body": "Mindagi läks valesti selle komponendi laadimisel.",
+  "bundle_column_error.retry": "Proovi uuesti",
+  "bundle_column_error.title": "Võrgu viga",
+  "bundle_modal_error.close": "Sulge",
+  "bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.",
+  "bundle_modal_error.retry": "Proovi uuesti",
+  "column.blocks": "Blokeeritud kasutajad",
+  "column.community": "Kohalik ajajoon",
+  "column.direct": "Otsesõnumid",
+  "column.domain_blocks": "Peidetud domeenid",
+  "column.favourites": "Lemmikud",
+  "column.follow_requests": "Jälgimistaotlused",
+  "column.home": "Kodu",
+  "column.lists": "Nimekirjad",
+  "column.mutes": "Vaigistatud kasutajad",
+  "column.notifications": "Teated",
+  "column.pins": "Kinnitatud upitused",
+  "column.public": "Föderatiivne ajajoon",
+  "column_back_button.label": "Tagasi",
+  "column_header.hide_settings": "Peida sätted",
+  "column_header.moveLeft_settings": "Liiguta tulp vasakule",
+  "column_header.moveRight_settings": "Liiguta tulp paremale",
+  "column_header.pin": "Kinnita",
+  "column_header.show_settings": "Näita sätteid",
+  "column_header.unpin": "Eemalda kinnitus",
+  "column_subheading.settings": "Sätted",
+  "community.column_settings.media_only": "Ainult meedia",
+  "compose_form.direct_message_warning": "See tuut saadetakse ainult mainitud kasutajatele.",
+  "compose_form.direct_message_warning_learn_more": "Vaata veel",
+  "compose_form.hashtag_warning": "Seda tuuti ei kuvata ühegi sildi all, sest see on kirjendamata. Ainult avalikud tuutid on sildi järgi otsitavad.",
+  "compose_form.lock_disclaimer": "Sinu konto ei ole {locked}. Igaüks saab sind jälgida ja näha su ainult-jälgijatele postitusi.",
+  "compose_form.lock_disclaimer.lock": "lukus",
+  "compose_form.placeholder": "Millest mõtled?",
+  "compose_form.poll.add_option": "Lisa valik",
+  "compose_form.poll.duration": "Küsitluse kestus",
+  "compose_form.poll.option_placeholder": "Valik {number}",
+  "compose_form.poll.remove_option": "Eemalda see valik",
+  "compose_form.publish": "Tuut",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "Märgista meedia tundlikuks",
+  "compose_form.sensitive.marked": "Meedia on sensitiivseks märgitud",
+  "compose_form.sensitive.unmarked": "Meedia ei ole sensitiivseks märgitud",
+  "compose_form.spoiler.marked": "Tekst on hoiatuse taha peidetud",
+  "compose_form.spoiler.unmarked": "Tekst ei ole peidetud",
+  "compose_form.spoiler_placeholder": "Kirjuta oma hoiatus siia",
+  "confirmation_modal.cancel": "Katkesta",
+  "confirmations.block.block_and_report": "Blokeeri & Teata",
+  "confirmations.block.confirm": "Blokeeri",
+  "confirmations.block.message": "Oled kindel, et soovid blokkida {name}?",
+  "confirmations.delete.confirm": "Kustuta",
+  "confirmations.delete.message": "Oled kindel, et soovid selle staatuse kustutada?",
+  "confirmations.delete_list.confirm": "Kustuta",
+  "confirmations.delete_list.message": "Oled kindel, et soovid selle nimekirja püsivalt kustutada?",
+  "confirmations.domain_block.confirm": "Peida terve domeen",
+  "confirmations.domain_block.message": "Oled ikka päris kindel, et soovid blokeerida terve  {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Sa ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Sinu jälgijad sellest domeenist eemaldatakse.",
+  "confirmations.mute.confirm": "Vaigista",
+  "confirmations.mute.message": "Oled kindel, et soovid {name} vaigistada?",
+  "confirmations.redraft.confirm": "Kustuta & taasalusta",
+  "confirmations.redraft.message": "Oled kindel, et soovid selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.",
+  "confirmations.reply.confirm": "Vasta",
+  "confirmations.reply.message": "Kohene vastamine kirjutab üle sõnumi, mida hetkel koostad. Oled kindel, et soovid jätkata?",
+  "confirmations.unfollow.confirm": "Ära jälgi",
+  "confirmations.unfollow.message": "Oled kindel, et ei soovi jälgida {name}?",
+  "embed.instructions": "Manusta see staatus oma veebilehele, kopeerides alloleva koodi.",
+  "embed.preview": "Nii näeb see välja:",
+  "emoji_button.activity": "Tegevus",
+  "emoji_button.custom": "Mugandatud",
+  "emoji_button.flags": "Lipud",
+  "emoji_button.food": "Toit & Jook",
+  "emoji_button.label": "Sisesta emoji",
+  "emoji_button.nature": "Loodus",
+  "emoji_button.not_found": "Ei ole emojosi!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objektid",
+  "emoji_button.people": "Inimesed",
+  "emoji_button.recent": "Tihti kasutatud",
+  "emoji_button.search": "Otsi...",
+  "emoji_button.search_results": "Otsitulemused",
+  "emoji_button.symbols": "Sümbolid",
+  "emoji_button.travel": "Reisimine & Kohad",
+  "empty_column.account_timeline": "Siin tuute ei ole!",
+  "empty_column.account_unavailable": "Profiil pole saadaval",
+  "empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.",
+  "empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema saada!",
+  "empty_column.direct": "Sul ei veel otsesõnumeid. Kui saadad või võtad mõne vastu, ilmuvad nad siia.",
+  "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
+  "empty_column.favourited_statuses": "Sul pole veel lemmikuid tuute. Kui märgid mõne, näed neid siin.",
+  "empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.",
+  "empty_column.follow_requests": "Sul pole veel ühtegi jälgimise taotlust. Kui saad mõne, näed seda siin.",
+  "empty_column.hashtag": "Selle sildiga pole veel midagi.",
+  "empty_column.home": "Sinu kodu ajajoon on tühi! Külasta {public} või kasuta otsingut alustamaks ja kohtamaks teisi kasutajaid.",
+  "empty_column.home.public_timeline": "avalik ajajoon",
+  "empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.",
+  "empty_column.lists": "Sul ei ole veel ühtegi nimekirja. Kui lood mõne, näed seda siin.",
+  "empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.",
+  "empty_column.notifications": "Sul ei ole veel teateid. Suhtle teistega alustamaks vestlust.",
+  "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
+  "follow_request.authorize": "Autoriseeri",
+  "follow_request.reject": "Hülga",
+  "getting_started.developers": "Arendajad",
+  "getting_started.directory": "Profiili kataloog",
+  "getting_started.documentation": "Dokumentatsioon",
+  "getting_started.heading": "Alustamine",
+  "getting_started.invite": "Kutsu inimesi",
+  "getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saad panustada või teatada probleemidest GitHubis {github}.",
+  "getting_started.security": "Turvalisus",
+  "getting_started.terms": "Kasutustingimused",
+  "hashtag.column_header.tag_mode.all": "ja {additional}",
+  "hashtag.column_header.tag_mode.any": "või {additional}",
+  "hashtag.column_header.tag_mode.none": "ilma {additional}",
+  "hashtag.column_settings.select.no_options_message": "Soovitusi ei leitud",
+  "hashtag.column_settings.select.placeholder": "Sisesta sildid…",
+  "hashtag.column_settings.tag_mode.all": "Kõik need",
+  "hashtag.column_settings.tag_mode.any": "Mõni neist",
+  "hashtag.column_settings.tag_mode.none": "Mitte ükski neist",
+  "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks",
+  "home.column_settings.basic": "Peamine",
+  "home.column_settings.show_reblogs": "Näita upitusi",
+  "home.column_settings.show_replies": "Näita vastuseid",
+  "home.column_settings.update_live": "Uuenda reaalajas",
+  "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": "Inimest postitused keda jälgid kuvatakse sinu koduajajoonel. Saad 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": "Saad tuuti salvestada ja anda autorile teada, et meeldis märkides selle lemmikuks.",
+  "introduction.interactions.reblog.headline": "Upita",
+  "introduction.interactions.reblog.text": "Saad jagada teiste inimeste tuute oma jälgijatega upitades neid.",
+  "introduction.interactions.reply.headline": "Vasta",
+  "introduction.interactions.reply.text": "Saad 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 saad avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—ta majutab sinu profiili. Seega jäta ta nimi meelde.",
+  "keyboard_shortcuts.back": "tagasiminekuks",
+  "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut",
+  "keyboard_shortcuts.boost": "upitamiseks",
+  "keyboard_shortcuts.column": "fokuseerimaks staatust ühele tulpadest",
+  "keyboard_shortcuts.compose": "fokuseerimaks tekstikoostamise alale",
+  "keyboard_shortcuts.description": "Kirjeldus",
+  "keyboard_shortcuts.direct": "avamaks otsesõnumite tulpa",
+  "keyboard_shortcuts.down": "liikumaks nimstus alla",
+  "keyboard_shortcuts.enter": "staatuse avamiseks",
+  "keyboard_shortcuts.favourite": "lemmikuks märkimiseks",
+  "keyboard_shortcuts.favourites": "avamaks lemmikute nimistut",
+  "keyboard_shortcuts.federated": "avamaks föderatsiooni ajajoont",
+  "keyboard_shortcuts.heading": "Klaviatuuri kiirkäsud",
+  "keyboard_shortcuts.home": "avamaks kodu ajajoont",
+  "keyboard_shortcuts.hotkey": "Kiirklahv",
+  "keyboard_shortcuts.legend": "selle legendi kuvamiseks",
+  "keyboard_shortcuts.local": "avamaks kohalikku ajajoont",
+  "keyboard_shortcuts.mention": "autori mainimiseks",
+  "keyboard_shortcuts.muted": "avamaks vaigistatud kasutajate nimistut",
+  "keyboard_shortcuts.my_profile": "avamaks profiili",
+  "keyboard_shortcuts.notifications": "avamaks teadete tulpa",
+  "keyboard_shortcuts.pinned": "avamaks kinnitatud tuutide nimistut",
+  "keyboard_shortcuts.profile": "avamaks autori profiili",
+  "keyboard_shortcuts.reply": "vastamiseks",
+  "keyboard_shortcuts.requests": "avamaks jälgimistaotluste nimistut",
+  "keyboard_shortcuts.search": "otsingu fokuseerimiseks",
+  "keyboard_shortcuts.start": "avamaks \"Alusta\" tulpa",
+  "keyboard_shortcuts.toggle_hidden": "näitamaks/peitmaks teksti CW taga",
+  "keyboard_shortcuts.toggle_sensitivity": "et peita/näidata meediat",
+  "keyboard_shortcuts.toot": "alustamaks täiesti uut tuuti",
+  "keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks",
+  "keyboard_shortcuts.up": "liikumaks nimistus üles",
+  "lightbox.close": "Sulge",
+  "lightbox.next": "Järgmine",
+  "lightbox.previous": "Eelmine",
+  "lightbox.view_context": "Vaata konteksti",
+  "lists.account.add": "Lisa nimistusse",
+  "lists.account.remove": "Eemalda nimistust",
+  "lists.delete": "Kustuta nimistu",
+  "lists.edit": "Muuda nimistut",
+  "lists.edit.submit": "Muuda pealkiri",
+  "lists.new.create": "Lisa nimistu",
+  "lists.new.title_placeholder": "Uus nimistu pealkiri",
+  "lists.search": "Otsi sinu poolt jälgitavate inimese hulgast",
+  "lists.subheading": "Sinu nimistud",
+  "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
+  "loading_indicator.label": "Laeb..",
+  "media_gallery.toggle_visible": "Lülita nähtavus",
+  "missing_indicator.label": "Ei leitud",
+  "missing_indicator.sublabel": "Seda ressurssi ei leitud",
+  "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
+  "navigation_bar.apps": "Mobiilrakendused",
+  "navigation_bar.blocks": "Blokeeritud kasutajad",
+  "navigation_bar.community_timeline": "Kohalik ajajoon",
+  "navigation_bar.compose": "Koosta uus tuut",
+  "navigation_bar.direct": "Otsesõnumid",
+  "navigation_bar.discover": "Avasta",
+  "navigation_bar.domain_blocks": "Peidetud domeenid",
+  "navigation_bar.edit_profile": "Muuda profiili",
+  "navigation_bar.favourites": "Lemmikud",
+  "navigation_bar.filters": "Vaigistatud sõnad",
+  "navigation_bar.follow_requests": "Jälgimistaotlused",
+  "navigation_bar.follows_and_followers": "Jälgitud ja jälgijad",
+  "navigation_bar.info": "Selle serveri kohta",
+  "navigation_bar.keyboard_shortcuts": "Kiirklahvid",
+  "navigation_bar.lists": "Nimistud",
+  "navigation_bar.logout": "Logi välja",
+  "navigation_bar.mutes": "Vaigistatud kasutajad",
+  "navigation_bar.personal": "Isiklik",
+  "navigation_bar.pins": "Kinnitatud tuutid",
+  "navigation_bar.preferences": "Eelistused",
+  "navigation_bar.profile_directory": "Profiilikataloog",
+  "navigation_bar.public_timeline": "Föderatiivne ajajoon",
+  "navigation_bar.security": "Turvalisus",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
+  "notification.favourite": "{name} märkis su staatuse lemmikuks",
+  "notification.follow": "{name} jälgib sind",
+  "notification.mention": "{name} mainis sind",
+  "notification.poll": "Küsitlus, milles osalesid, on lõppenud",
+  "notification.reblog": "{name} upitas su staatust",
+  "notifications.clear": "Puhasta teated",
+  "notifications.clear_confirmation": "Oled kindel, et soovid püsivalt kõik oma teated puhastada?",
+  "notifications.column_settings.alert": "Töölauateated",
+  "notifications.column_settings.favourite": "Lemmikud:",
+  "notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad",
+  "notifications.column_settings.filter_bar.category": "Kiirfiltri riba",
+  "notifications.column_settings.filter_bar.show": "Kuva",
+  "notifications.column_settings.follow": "Uued jälgijad:",
+  "notifications.column_settings.mention": "Mainimised:",
+  "notifications.column_settings.poll": "Küsitluse tulemused:",
+  "notifications.column_settings.push": "Push teated",
+  "notifications.column_settings.reblog": "Upitused:",
+  "notifications.column_settings.show": "Kuva tulbas",
+  "notifications.column_settings.sound": "Mängi heli",
+  "notifications.filter.all": "Kõik",
+  "notifications.filter.boosts": "Upitused",
+  "notifications.filter.favourites": "Lemmikud",
+  "notifications.filter.follows": "Jälgib",
+  "notifications.filter.mentions": "Mainimised",
+  "notifications.filter.polls": "Küsitluse tulemused",
+  "notifications.group": "{count} teated",
+  "poll.closed": "Suletud",
+  "poll.refresh": "Värskenda",
+  "poll.total_votes": "{count, plural, one {# hääl} other {# hääli}}",
+  "poll.vote": "Hääleta",
+  "poll_button.add_poll": "Lisa küsitlus",
+  "poll_button.remove_poll": "Eemalda küsitlus",
+  "privacy.change": "Muuda staatuse privaatsust",
+  "privacy.direct.long": "Postita ainult mainitud kasutajatele",
+  "privacy.direct.short": "Otsene",
+  "privacy.private.long": "Postita ainult jälgijatele",
+  "privacy.private.short": "Ainult jälgijatele",
+  "privacy.public.long": "Postita avalikele ajajoontele",
+  "privacy.public.short": "Avalik",
+  "privacy.unlisted.long": "Ära postita avalikele ajajoontele",
+  "privacy.unlisted.short": "Määramata",
+  "regeneration_indicator.label": "Laeb…",
+  "regeneration_indicator.sublabel": "Sinu kodu voog on ettevalmistamisel!",
+  "relative_time.days": "{number}p",
+  "relative_time.hours": "{number}t",
+  "relative_time.just_now": "nüüd",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "reply_indicator.cancel": "Tühista",
+  "report.forward": "Edasta kasutajale {target}",
+  "report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?",
+  "report.hint": "See teade saadetakse sinu serveri moderaatoritele. Te saate lisada selgituse selle kohta, miks selle kasutaja kohta teate esitasite, siin:",
+  "report.placeholder": "Lisaks kommentaarid",
+  "report.submit": "Saada",
+  "report.target": "Teatamine {target} kohta",
+  "search.placeholder": "Otsi",
+  "search_popout.search_format": "Täiustatud otsiformaat",
+  "search_popout.tips.full_text": "Lihtne tekst toob esile staatused mida olete kirjutanud, lisanud lemmikuks, upitanud või olete seal mainitud, ning lisaks veel kattuvad kasutajanimed, kuvanimed ja sildid.",
+  "search_popout.tips.hashtag": "silt",
+  "search_popout.tips.status": "staatus",
+  "search_popout.tips.text": "Lihtne tekst toob esile kattuvad kuvanimed, kasutajanimed ning sildid",
+  "search_popout.tips.user": "kasutaja",
+  "search_results.accounts": "Inimesed",
+  "search_results.hashtags": "Sildid",
+  "search_results.statuses": "Tuudid",
+  "search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.",
+  "search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}",
+  "status.admin_account": "Ava moderaatoriliides kasutajale @{name}",
+  "status.admin_status": "Ava see staatus moderaatoriliites",
+  "status.block": "Blokeeri @{name}",
+  "status.cancel_reblog_private": "Äraupita",
+  "status.cannot_reblog": "Seda postitust ei saa upitada",
+  "status.copy": "Kopeeri link staatusesse",
+  "status.delete": "Kustuta",
+  "status.detailed_status": "Detailne vestluskuva",
+  "status.direct": "Otsesõnum @{name}",
+  "status.embed": "Sängita",
+  "status.favourite": "Lemmik",
+  "status.filtered": "Filtreeritud",
+  "status.load_more": "Lae veel",
+  "status.media_hidden": "Meedia peidetud",
+  "status.mention": "Mainimine @{name}",
+  "status.more": "Veel",
+  "status.mute": "Vaigista @{name}",
+  "status.mute_conversation": "Vaigista vestlus",
+  "status.open": "Laienda see staatus",
+  "status.pin": "Kinnita profiilile",
+  "status.pinned": "Kinnitatud tuut",
+  "status.read_more": "Loe veel",
+  "status.reblog": "Upita",
+  "status.reblog_private": "Upita algsele publikule",
+  "status.reblogged_by": "{name} upitatud",
+  "status.reblogs.empty": "Keegi pole seda tuuti veel upitanud. Kui keegi upitab, näed seda siin.",
+  "status.redraft": "Kustuta & alga uuesti",
+  "status.reply": "Vasta",
+  "status.replyAll": "Vasta lõimele",
+  "status.report": "Raport @{name}",
+  "status.sensitive_warning": "Tundlik sisu",
+  "status.share": "Jaga",
+  "status.show_less": "Näita vähem",
+  "status.show_less_all": "Näita vähem kõigile",
+  "status.show_more": "Näita veel",
+  "status.show_more_all": "Näita enam kõigile",
+  "status.show_thread": "Kuva lõim",
+  "status.unmute_conversation": "Ära vaigista vestlust",
+  "status.unpin": "Kinnita profiililt lahti",
+  "suggestions.dismiss": "Eira soovitust",
+  "suggestions.header": "Sind võib huvitada…",
+  "tabs_bar.federated_timeline": "Föderatiivne",
+  "tabs_bar.home": "Kodu",
+  "tabs_bar.local_timeline": "Kohalik",
+  "tabs_bar.notifications": "Teated",
+  "tabs_bar.search": "Otsi",
+  "time_remaining.days": "{number, plural, one {# päev} other {# päeva}} left",
+  "time_remaining.hours": "{number, plural, one {# tund} other {# tundi}} left",
+  "time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} left",
+  "time_remaining.moments": "Hetked jäänud",
+  "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} left",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {inimene} other {inimesed}} talking",
+  "trends.refresh": "Refresh",
+  "ui.beforeunload": "Sinu mustand läheb kaotsi, kui lahkud Mastodonist.",
+  "upload_area.title": "Lohista & aseta üleslaadimiseks",
+  "upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "Faili üleslaadimise limiit ületatud.",
+  "upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.",
+  "upload_form.description": "Kirjelda vaegnägijatele",
+  "upload_form.edit": "Edit",
+  "upload_form.undo": "Kustuta",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
+  "upload_progress.label": "Laeb üles....",
+  "video.close": "Sulge video",
+  "video.exit_fullscreen": "Välju täisekraanist",
+  "video.expand": "Suurenda video",
+  "video.fullscreen": "Täisekraan",
+  "video.hide": "Peida video",
+  "video.mute": "Vaigista heli",
+  "video.pause": "Paus",
+  "video.play": "Mängi",
+  "video.unmute": "Taasta heli"
+}
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 0c078840a..da16bf669 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -4,6 +4,7 @@
   "account.block": "Blokeatu @{name}",
   "account.block_domain": "Ezkutatu {domain} domeinuko guztia",
   "account.blocked": "Blokeatuta",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mezu zuzena @{name}(r)i",
   "account.domain_blocked": "Ezkutatutako domeinua",
   "account.edit_profile": "Aldatu profila",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
   "alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
   "alert.unexpected.title": "Ene!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko",
   "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.",
   "bundle_column_error.retry": "Saiatu berriro",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Oinarrizkoa",
   "home.column_settings.show_reblogs": "Erakutsi bultzadak",
   "home.column_settings.show_replies": "Erakutsi erantzunak",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Eguneratu denbora errealean",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Zerrenda berriaren izena",
   "lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
   "lists.subheading": "Zure zerrendak",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}",
   "loading_indicator.label": "Kargatzen...",
   "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna",
   "missing_indicator.label": "Ez aurkitua",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profilen direktorioa",
   "navigation_bar.public_timeline": "Federatutako denbora-lerroa",
   "navigation_bar.security": "Segurtasuna",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}(e)k zure mezua gogoko du",
   "notification.follow": "{name}(e)k jarraitzen zaitu",
   "notification.mention": "{name}(e)k aipatu zaitu",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Jendea",
   "search_results.hashtags": "Traolak",
   "search_results.statuses": "Toot-ak",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du Toot-en edukiaren bilaketa gaitu.",
   "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitzak}}",
   "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
   "status.admin_status": "Ireki mezu hau moderazio interfazean",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Amaitzekotan",
   "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
   "upload_area.title": "Arrastatu eta jaregin igotzeko",
   "upload_button.label": "Gehitu multimedia  (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Fitxategi igoera muga gaindituta.",
   "upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.",
   "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
-  "upload_form.focus": "Aldatu aurrebista",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Ezabatu",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Igotzen...",
   "video.close": "Itxi bideoa",
   "video.exit_fullscreen": "Irten pantaila osotik",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 41143bcc8..9804cd4c8 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -1,9 +1,10 @@
 {
-  "account.add_or_remove_from_list": "افزودن یا حذف از فهرست‌ها",
+  "account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست",
   "account.badges.bot": "ربات",
   "account.block": "مسدودسازی @{name}",
   "account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}",
   "account.blocked": "مسدودشده",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "پیغام خصوصی به @{name}",
   "account.domain_blocked": "دامین پنهان‌شده",
   "account.edit_profile": "ویرایش نمایه",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "باصداکردن اعلان‌ها از طرف @{name}",
   "alert.unexpected.message": "خطای پیش‌بینی‌نشده‌ای رخ داد.",
   "alert.unexpected.title": "ای وای!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
   "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
   "bundle_column_error.retry": "تلاش دوباره",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "اصلی",
   "home.column_settings.show_reblogs": "نمایش بازبوق‌ها",
   "home.column_settings.show_replies": "نمایش پاسخ‌ها",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "به‌روزرسانی لحظه‌ای",
   "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
   "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
   "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "نام فهرست تازه",
   "lists.search": "بین کسانی که پی می‌گیرید بگردید",
   "lists.subheading": "فهرست‌های شما",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}",
   "loading_indicator.label": "بارگیری...",
   "media_gallery.toggle_visible": "تغییر پیدایی",
   "missing_indicator.label": "پیدا نشد",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران",
   "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
   "navigation_bar.security": "امنیت",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "‫{name}‬ نوشتهٔ شما را پسندید",
   "notification.follow": "‫{name}‬ پیگیر شما شد",
   "notification.mention": "‫{name}‬ از شما نام برد",
@@ -316,7 +319,7 @@
   "search_results.accounts": "افراد",
   "search_results.hashtags": "هشتگ‌ها",
   "search_results.statuses": "بوق‌ها",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این سرور ماستدون ممکن نیست.",
   "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
   "status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن",
   "status.admin_status": "این نوشته را در محیط مدیریت باز کن",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "زمان باقی‌مانده",
   "time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.",
   "upload_area.title": "برای بارگذاری به این‌جا بکشید",
   "upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.",
   "upload_error.poll": "باگذاری پرونده در نظرسنجی‌ها ممکن نیست.",
   "upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان",
-  "upload_form.focus": "تغییر پیش‌نمایش",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "حذف",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "بارگذاری...",
   "video.close": "بستن ویدیو",
   "video.exit_fullscreen": "خروج از حالت تمام صفحه",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 05495d5d7..baed4f0a5 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -4,6 +4,7 @@
   "account.block": "Estä @{name}",
   "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
   "account.blocked": "Estetty",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Viesti käyttäjälle @{name}",
   "account.domain_blocked": "Verkko-osoite piilotettu",
   "account.edit_profile": "Muokkaa",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta",
   "alert.unexpected.message": "Tapahtui odottamaton virhe.",
   "alert.unexpected.title": "Hups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
   "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.",
   "bundle_column_error.retry": "Yritä uudestaan",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Yleinen aikajana",
   "navigation_bar.security": "Tunnukset",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} tykkäsi tilastasi",
   "notification.follow": "{name} seurasi sinua",
   "notification.mention": "{name} mainitsi sinut",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
   "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
   "upload_button.label": "Lisää mediaa",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Anna kuvaus näkörajoitteisia varten",
-  "upload_form.focus": "Rajaa",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Peru",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Ladataan...",
   "video.close": "Sulje video",
   "video.exit_fullscreen": "Poistu koko näytön tilasta",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index f4db2e7a1..12025baff 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -4,6 +4,7 @@
   "account.block": "Bloquer @{name}",
   "account.block_domain": "Tout masquer venant de {domain}",
   "account.blocked": "Bloqué",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Envoyer un message direct à @{name}",
   "account.domain_blocked": "Domaine caché",
   "account.edit_profile": "Modifier le profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Réactiver les notifications de @{name}",
   "alert.unexpected.message": "Une erreur inattendue s’est produite.",
   "alert.unexpected.title": "Oups !",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
   "bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.",
   "bundle_column_error.retry": "Réessayer",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Basique",
   "home.column_settings.show_reblogs": "Afficher les partages",
   "home.column_settings.show_replies": "Afficher les réponses",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Mettre à jour en temps réel",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Titre de la nouvelle liste",
   "lists.search": "Rechercher parmi les gens que vous suivez",
   "lists.subheading": "Vos listes",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nouvel item} other {# nouveaux items}}",
   "loading_indicator.label": "Chargement…",
   "media_gallery.toggle_visible": "Modifier la visibilité",
   "missing_indicator.label": "Non trouvé",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Annuaire des profils",
   "navigation_bar.public_timeline": "Fil public global",
   "navigation_bar.security": "Sécurité",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a ajouté à ses favoris :",
   "notification.follow": "{name} vous suit",
   "notification.mention": "{name} vous a mentionné :",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Comptes",
   "search_results.hashtags": "Hashtags",
   "search_results.statuses": "Pouets",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "La recherche de pouets 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",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Encore quelques instants",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {personne} other {personnes}} discutent",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
   "upload_area.title": "Glissez et déposez pour envoyer",
   "upload_button.label": "Joindre un média (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
   "upload_error.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.",
   "upload_form.description": "Décrire pour les malvoyant·e·s",
-  "upload_form.focus": "Modifier l’aperçu",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Supprimer",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Envoi en cours…",
   "video.close": "Fermer la vidéo",
   "video.exit_fullscreen": "Quitter le plein écran",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 2605f61f8..fcbc16017 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -4,6 +4,7 @@
   "account.block": "Bloquear @{name}",
   "account.block_domain": "Ocultar calquer contido de {domain}",
   "account.blocked": "Bloqueada",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mensaxe directa @{name}",
   "account.domain_blocked": "Dominio agochado",
   "account.edit_profile": "Editar perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Desbloquear as notificacións de @{name}",
   "alert.unexpected.message": "Aconteceu un fallo non agardado.",
   "alert.unexpected.title": "Vaia!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Pulse {combo} para saltar esto a próxima vez",
   "bundle_column_error.body": "Houbo un fallo mentras se cargaba este compoñente.",
   "bundle_column_error.retry": "Inténteo de novo",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar repeticións",
   "home.column_settings.show_replies": "Mostrar respostas",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Actualizar en tempo real",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Novo título da lista",
   "lists.search": "Procurar entre a xente que segues",
   "lists.subheading": "As túas listas",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}",
   "loading_indicator.label": "Cargando...",
   "media_gallery.toggle_visible": "Ocultar",
   "missing_indicator.label": "Non atopado",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Directorio de perfil",
   "navigation_bar.public_timeline": "Liña temporal federada",
   "navigation_bar.security": "Seguridade",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcou como favorito o seu estado",
   "notification.follow": "{name} está a seguila",
   "notification.mention": "{name} mencionoute",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Xente",
   "search_results.hashtags": "Etiquetas",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Non está activada neste servidor Mastodon a busca de toots polo seu contido.",
   "search_results.total": "{count, number} {count,plural,one {result} outros {results}}",
   "status.admin_account": "Abrir interface de moderación para @{name}",
   "status.admin_status": "Abrir este estado na interface de moderación",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Está rematando",
   "time_remaining.seconds": "{number, plural, one {# segundo} other {# segundos}} restantes",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} outras {people}} conversando",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "O borrador perderase se sae de Mastodon.",
   "upload_area.title": "Arrastre e solte para subir",
   "upload_button.label": "Engadir medios ({formats})",
   "upload_error.limit": "Excedeu o límite de subida de ficheiros.",
   "upload_error.poll": "Non se poden subir ficheiros nas sondaxes.",
   "upload_form.description": "Describa para deficientes visuais",
-  "upload_form.focus": "Cambiar vista previa",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Eliminar",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Subindo...",
   "video.close": "Pechar video",
   "video.exit_fullscreen": "Saír da pantalla completa",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 99bb87a5f..e17d451ca 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -4,6 +4,7 @@
   "account.block": "חסימת @{name}",
   "account.block_domain": "להסתיר הכל מהקהילה {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "עריכת פרופיל",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}",
   "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
   "alert.unexpected.title": "אופס!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
   "bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.",
   "bundle_column_error.retry": "לנסות שוב",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "חצרוצך חובב על ידי {name}",
   "notification.follow": "{name} במעקב אחרייך",
   "notification.mention": "אוזכרת על ידי {name}",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
   "upload_area.title": "ניתן להעלות על ידי Drag & drop",
   "upload_button.label": "הוספת מדיה",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "תיאור לכבדי ראיה",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "ביטול",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "עולה...",
   "video.close": "סגירת וידאו",
   "video.exit_fullscreen": "יציאה ממסך מלא",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index d4d9e5f64..980b4e457 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -4,6 +4,7 @@
   "account.block": "Block @{name}",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Edit profile",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 273b70d07..d718915c8 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -4,6 +4,7 @@
   "account.block": "Blokiraj @{name}",
   "account.block_domain": "Sakrij sve sa {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Uredi profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put",
   "bundle_column_error.body": "Something went wrong while loading this component.",
   "bundle_column_error.retry": "Try again",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federalni timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je lajkao tvoj status",
   "notification.follow": "{name} te sada slijedi",
   "notification.mention": "{name} te je spomenuo",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Povuci i spusti kako bi uploadao",
   "upload_button.label": "Dodaj media",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Poništi",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploadam...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 38d30efe4..f06e748a8 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -4,6 +4,7 @@
   "account.block": "@{name} letiltása",
   "account.block_domain": "Minden elrejtése innen: {domain}",
   "account.blocked": "Letiltva",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Közvetlen üzenet @{name} számára",
   "account.domain_blocked": "Rejtett domain",
   "account.edit_profile": "Profil szerkesztése",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
   "alert.unexpected.message": "Váratlan hiba történt.",
   "alert.unexpected.title": "Hoppá!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}",
   "bundle_column_error.body": "Hiba történt a komponens betöltése közben.",
   "bundle_column_error.retry": "Próbáld újra",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Alapértelmezések",
   "home.column_settings.show_reblogs": "Megtolások mutatása",
   "home.column_settings.show_replies": "Válaszok mutatása",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Frissítés valós időben",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Új lista címe",
   "lists.search": "Keresés a követett személyek között",
   "lists.subheading": "Listáid",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# új elem} other {# új elem}}",
   "loading_indicator.label": "Betöltés...",
   "media_gallery.toggle_visible": "Láthatóság állítása",
   "missing_indicator.label": "Nincs találat",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profilok",
   "navigation_bar.public_timeline": "Föderációs idővonal",
   "navigation_bar.security": "Biztonság",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} kedvencnek jelölte egy tülködet",
   "notification.follow": "{name} követ téged",
   "notification.mention": "{name} megemlített",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Emberek",
   "search_results.hashtags": "Hashtagek",
   "search_results.statuses": "Tülkök",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Ezen a szerveren nem engedélyezett a tülkök tartalom szerinti keresése.",
   "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}",
   "status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz",
   "status.admin_status": "Tülk megnyitása moderációra",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Pillanatok vannak hátra",
   "time_remaining.seconds": "{number, plural, one {# másodperc} other {# másodperc}} van hátra",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {résztvevő} other {résztvevő}} beszélget",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodon-t.",
   "upload_area.title": "Húzd ide a feltöltéshez",
   "upload_button.label": "Média hozzáadása (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Túllépted a fájl feltöltési limitet.",
   "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
   "upload_form.description": "Leírás látáskorlátozottak számára",
-  "upload_form.focus": "Előnézet megváltoztatása",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Mégsem",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Feltöltés...",
   "video.close": "Videó bezárása",
   "video.exit_fullscreen": "Kilépés teljes képernyőből",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 801d34380..47e9ee68b 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -1,15 +1,16 @@
 {
   "account.add_or_remove_from_list": "Add or Remove from lists",
-  "account.badges.bot": "Bot",
+  "account.badges.bot": "Բոտ",
   "account.block": "Արգելափակել @{name}֊ին",
   "account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Խմբագրել անձնական էջը",
   "account.endorse": "Feature on profile",
   "account.follow": "Հետեւել",
-  "account.followers": "Հետեւվողներ",
+  "account.followers": "Հետեւողներ",
   "account.followers.empty": "No one follows this user yet.",
   "account.follows": "Հետեւում է",
   "account.follows.empty": "This user doesn't follow anyone yet.",
@@ -36,7 +37,8 @@
   "account.unmute": "Ապալռեցնել @{name}֊ին",
   "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
   "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
+  "alert.unexpected.title": "Վա՜յ",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա հաջորդ անգամ բաց թողնելու համար",
   "bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։",
   "bundle_column_error.retry": "Կրկին փորձել",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Դաշնային հոսք",
   "navigation_bar.security": "Անվտանգություն",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} հավանեց թութդ",
   "notification.follow": "{name} սկսեց հետեւել քեզ",
   "notification.mention": "{name} նշեց քեզ",
@@ -313,7 +316,7 @@
   "search_popout.tips.status": "թութ",
   "search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
   "search_popout.tips.user": "օգտատեր",
-  "search_results.accounts": "People",
+  "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.",
@@ -363,21 +366,29 @@
   "tabs_bar.home": "Հիմնական",
   "tabs_bar.local_timeline": "Տեղական",
   "tabs_bar.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",
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
   "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
   "upload_button.label": "Ավելացնել մեդիա",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Հետարկել",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Վերբեռնվում է…",
   "video.close": "Փակել  տեսագրությունը",
   "video.exit_fullscreen": "Անջատել լիաէկրան դիտումը",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index daa87f955..0757e8ff3 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -4,6 +4,7 @@
   "account.block": "Blokir @{name}",
   "account.block_domain": "Sembunyikan segalanya dari {domain}",
   "account.blocked": "Terblokir",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain disembunyikan",
   "account.edit_profile": "Ubah profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Munculkan notifikasi dari @{name}",
   "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
   "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.",
   "bundle_column_error.retry": "Coba lagi",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Linimasa gabungan",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} menyukai status anda",
   "notification.follow": "{name} mengikuti anda",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
   "upload_area.title": "Seret & lepaskan untuk mengunggah",
   "upload_button.label": "Tambahkan media",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
-  "upload_form.focus": "Potong",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Undo",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Mengunggah...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Keluar dari layar penuh",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 864d49995..ff096f5cf 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -4,6 +4,7 @@
   "account.block": "Blokusar @{name}",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Modifikar profilo",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo",
   "bundle_column_error.body": "Something went wrong while loading this component.",
   "bundle_column_error.retry": "Try again",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federata tempolineo",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favorizis tua mesajo",
   "notification.follow": "{name} sequeskis tu",
   "notification.mention": "{name} mencionis tu",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Tranar faligar por kargar",
   "upload_button.label": "Adjuntar kontenajo",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Desfacar",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Kargante...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 7925cef8c..0e791e13d 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -4,6 +4,7 @@
   "account.block": "Blocca @{name}",
   "account.block_domain": "Nascondi tutto da {domain}",
   "account.blocked": "Bloccato",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Invia messaggio privato a @{name}",
   "account.domain_blocked": "Dominio nascosto",
   "account.edit_profile": "Modifica profilo",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Non silenziare più le notifiche da @{name}",
   "alert.unexpected.message": "Si è verificato un errore inatteso.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per settimana",
   "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta",
   "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.",
   "bundle_column_error.retry": "Riprova",
@@ -66,7 +68,7 @@
   "column_subheading.settings": "Impostazioni",
   "community.column_settings.media_only": "Solo media",
   "compose_form.direct_message_warning": "Questo toot sarà mandato solo a tutti gli utenti menzionati.",
-  "compose_form.direct_message_warning_learn_more": "Per saperne di piu'",
+  "compose_form.direct_message_warning_learn_more": "Per saperne di più",
   "compose_form.hashtag_warning": "Questo toot non è listato, quindi non sarà trovato nelle ricerche per hashtag. Solo i toot pubblici possono essere cercati per hashtag.",
   "compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.",
   "compose_form.lock_disclaimer.lock": "bloccato",
@@ -137,7 +139,7 @@
   "follow_request.authorize": "Autorizza",
   "follow_request.reject": "Rifiuta",
   "getting_started.developers": "Sviluppatori",
-  "getting_started.directory": "Directory del profilo",
+  "getting_started.directory": "Directory dei profili",
   "getting_started.documentation": "Documentazione",
   "getting_started.heading": "Come iniziare",
   "getting_started.invite": "Invita qualcuno",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Semplice",
   "home.column_settings.show_reblogs": "Mostra post condivisi",
   "home.column_settings.show_replies": "Mostra risposte",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Aggiornama in tempo reale",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Titolo della nuova lista",
   "lists.search": "Cerca tra le persone che segui",
   "lists.subheading": "Le tue liste",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}",
   "loading_indicator.label": "Caricamento...",
   "media_gallery.toggle_visible": "Imposta visibilità",
   "missing_indicator.label": "Non trovato",
@@ -239,7 +241,7 @@
   "navigation_bar.favourites": "Apprezzati",
   "navigation_bar.filters": "Parole silenziate",
   "navigation_bar.follow_requests": "Richieste di amicizia",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "Seguiti e seguaci",
   "navigation_bar.info": "Informazioni su questo server",
   "navigation_bar.keyboard_shortcuts": "Tasti di scelta rapida",
   "navigation_bar.lists": "Liste",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Directory dei profili",
   "navigation_bar.public_timeline": "Timeline federata",
   "navigation_bar.security": "Sicurezza",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ha apprezzato il tuo post",
   "notification.follow": "{name} ha iniziato a seguirti",
   "notification.mention": "{name} ti ha menzionato",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Hashtag",
   "search_results.statuses": "Toot",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "La ricerca di toot per il loro contenuto non è abilitata su questo server Mastodon.",
   "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}",
   "status.admin_account": "Apri interfaccia di moderazione per @{name}",
   "status.admin_status": "Apri questo status nell'interfaccia di moderazione",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Restano pochi istanti",
   "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persona ne sta} other {persone ne stanno}} parlando",
+  "trends.refresh": "Aggiorna",
   "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
   "upload_area.title": "Trascina per caricare",
   "upload_button.label": "Aggiungi file multimediale",
   "upload_error.limit": "Limite al caricamento di file superato.",
   "upload_error.poll": "Caricamento file non consentito nei sondaggi.",
   "upload_form.description": "Descrizione per utenti con disabilità visive",
-  "upload_form.focus": "Modifica anteprima",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Cancella",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.",
+  "upload_modal.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Sto caricando...",
   "video.close": "Chiudi video",
   "video.exit_fullscreen": "Esci da modalità a schermo intero",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 3c6d71835..d28fe4247 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -4,6 +4,7 @@
   "account.block": "@{name}さんをブロック",
   "account.block_domain": "{domain}全体を非表示",
   "account.blocked": "ブロック済み",
+  "account.cancel_follow_request": "フォローリクエストを取り消す",
   "account.direct": "@{name}さんにダイレクトメッセージ",
   "account.domain_blocked": "ドメイン非表示中",
   "account.edit_profile": "プロフィール編集",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
   "alert.unexpected.message": "不明なエラーが発生しました。",
   "alert.unexpected.title": "エラー!",
+  "autosuggest_hashtag.per_week": "{count} 回 / 週",
   "boost_modal.combo": "次からは{combo}を押せばスキップできます",
   "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
   "bundle_column_error.retry": "再試行",
@@ -160,7 +162,7 @@
   "home.column_settings.basic": "基本設定",
   "home.column_settings.show_reblogs": "ブースト表示",
   "home.column_settings.show_replies": "返信表示",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "リアルタイムで更新",
   "intervals.full.days": "{number}日",
   "intervals.full.hours": "{number}時間",
   "intervals.full.minutes": "{number}分",
@@ -226,7 +228,7 @@
   "lists.new.title_placeholder": "新規リスト名",
   "lists.search": "フォローしている人の中から検索",
   "lists.subheading": "あなたのリスト",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count} 件の新着",
   "loading_indicator.label": "読み込み中...",
   "media_gallery.toggle_visible": "表示切り替え",
   "missing_indicator.label": "見つかりません",
@@ -256,6 +258,7 @@
   "navigation_bar.public_timeline": "連合タイムライン",
   "navigation_bar.misc": "その他",
   "navigation_bar.security": "セキュリティ",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
   "notification.follow": "{name}さんにフォローされました",
   "notification.mention": "{name}さんがあなたに返信しました",
@@ -321,7 +324,7 @@
   "search_results.accounts": "人々",
   "search_results.hashtags": "ハッシュタグ",
   "search_results.statuses": "トゥート",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "このサーバーではトゥート本文での検索は利用できません。",
   "search_results.total": "{count, number}件の結果",
   "status.admin_account": "@{name} のモデレーション画面を開く",
   "status.admin_status": "このトゥートをモデレーション画面で開く",
@@ -375,14 +378,22 @@
   "time_remaining.moments": "まもなく終了",
   "time_remaining.seconds": "残り{number}秒",
   "trends.count_by_accounts": "{count}人がトゥート",
+  "trends.refresh": "更新",
   "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
   "upload_area.title": "ドラッグ&ドロップでアップロード",
   "upload_button.label": "メディアを追加 ({formats})",
   "upload_error.limit": "アップロードできる上限を超えています。",
   "upload_error.poll": "アンケートではファイルをアップロードできません。",
   "upload_form.description": "視覚障害者のための説明",
-  "upload_form.focus": "プレビューを変更",
+  "upload_form.edit": "編集",
   "upload_form.undo": "削除",
+  "upload_modal.analyzing_picture": "画像を解析中…",
+  "upload_modal.apply": "適用",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "画像からテキストを検出",
+  "upload_modal.edit_media": "メディアを編集",
+  "upload_modal.hint": "画像をクリックするか円をドラッグすると全てのサムネイルで注目する場所を選ぶことができます",
+  "upload_modal.preview_label": "プレビュー ({ratio})",
   "upload_progress.label": "アップロード中...",
   "video.close": "動画を閉じる",
   "video.exit_fullscreen": "全画面を終了する",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index a78543476..fecfb519c 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -4,6 +4,7 @@
   "account.block": "დაბლოკე @{name}",
   "account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}",
   "account.blocked": "დაიბლოკა",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "პირდაპირი წერილი @{name}-ს",
   "account.domain_blocked": "დომენი დამალულია",
   "account.edit_profile": "პროფილის ცვლილება",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან",
   "alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.",
   "alert.unexpected.title": "უპს!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს",
   "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
   "bundle_column_error.retry": "სცადეთ კიდევ ერთხელ",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
   "navigation_bar.security": "უსაფრთხოება",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
   "notification.follow": "{name} გამოგყვათ",
   "notification.mention": "{name}-მა გასახელათ",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
   "upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
   "upload_button.label": "მედიის დამატება",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
-  "upload_form.focus": "კროპი",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "გაუქმება",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "იტვირთება...",
   "video.close": "ვიდეოს დახურვა",
   "video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 9514d68a9..8710ae90b 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -4,6 +4,7 @@
   "account.block": "Бұғаттау @{name}",
   "account.block_domain": "Домендегі барлығын бұғатта {domain}",
   "account.blocked": "Бұғатталды",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Жеке хат @{name}",
   "account.domain_blocked": "Домен жабық",
   "account.edit_profile": "Профильді өңдеу",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name} ескертпелерін көрсету",
   "alert.unexpected.message": "Бір нәрсе дұрыс болмады.",
   "alert.unexpected.title": "Өй!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}",
   "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.",
   "bundle_column_error.retry": "Қайтадан көріңіз",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Жаһандық желі",
   "navigation_bar.security": "Қауіпсіздік",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} жазбаңызды таңдаулыға қосты",
   "notification.follow": "{name} сізге жазылды",
   "notification.mention": "{name} сізді атап өтті",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Қалған уақыт",
   "time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} жазған екен",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.",
   "upload_area.title": "Жүктеу үшін сүйреп әкеліңіз",
   "upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.",
   "upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.",
   "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз",
-  "upload_form.focus": "Превьюді өзгерту",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Өшіру",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Жүктеп жатыр...",
   "video.close": "Видеоны жабу",
   "video.exit_fullscreen": "Толық экраннан шық",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index e71631938..ac6a3ca91 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -4,6 +4,7 @@
   "account.block": "@{name}을 차단",
   "account.block_domain": "{domain} 전체를 숨김",
   "account.blocked": "차단 됨",
+  "account.cancel_follow_request": "팔로우 요청 취소",
   "account.direct": "@{name}으로부터의 다이렉트 메시지",
   "account.domain_blocked": "도메인 숨겨짐",
   "account.edit_profile": "프로필 편집",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name}의 알림 뮤트 해제",
   "alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.",
   "alert.unexpected.title": "앗!",
+  "autosuggest_hashtag.per_week": "주간 {count}회",
   "boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다",
   "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.",
   "bundle_column_error.retry": "다시 시도",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "기본 설정",
   "home.column_settings.show_reblogs": "부스트 표시",
   "home.column_settings.show_replies": "답글 표시",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "실시간 업데이트",
   "intervals.full.days": "{number} 일",
   "intervals.full.hours": "{number} 시간",
   "intervals.full.minutes": "{number} 분",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "새 리스트의 이름",
   "lists.search": "팔로우 중인 사람들 중에서 찾기",
   "lists.subheading": "당신의 리스트",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count}개의 새 항목",
   "loading_indicator.label": "불러오는 중...",
   "media_gallery.toggle_visible": "표시 전환",
   "missing_indicator.label": "찾을 수 없습니다",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "프로필 디렉토리",
   "navigation_bar.public_timeline": "연합 타임라인",
   "navigation_bar.security": "보안",
+  "notification.and_n_others": "그리고 {count}개의 기타 항목",
   "notification.favourite": "{name}님이 즐겨찾기 했습니다",
   "notification.follow": "{name}님이 나를 팔로우 했습니다",
   "notification.mention": "{name}님이 답글을 보냈습니다",
@@ -316,7 +319,7 @@
   "search_results.accounts": "사람",
   "search_results.hashtags": "해시태그",
   "search_results.statuses": "툿",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 툿의 내용을 통한 검색이 활성화 되어 있지 않습니다.",
   "search_results.total": "{count, number}건의 결과",
   "status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기",
   "status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "남은 시간",
   "time_remaining.seconds": "{number} 초 남음",
   "trends.count_by_accounts": "{count} 명의 사람들이 말하고 있습니다",
+  "trends.refresh": "새로고침",
   "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
   "upload_area.title": "드래그 & 드롭으로 업로드",
   "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "파일 업로드 제한에 도달했습니다.",
   "upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.",
   "upload_form.description": "시각장애인을 위한 설명",
-  "upload_form.focus": "미리보기 변경",
+  "upload_form.edit": "편집",
   "upload_form.undo": "삭제",
+  "upload_modal.analyzing_picture": "이미지 분석 중…",
+  "upload_modal.apply": "적용",
+  "upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파",
+  "upload_modal.detect_text": "이미지에서 텍스트 추출",
+  "upload_modal.edit_media": "미디어 편집",
+  "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.",
+  "upload_modal.preview_label": "미리보기 ({ratio})",
   "upload_progress.label": "업로드 중...",
   "video.close": "동영상 닫기",
   "video.exit_fullscreen": "전체화면 나가기",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 919129cc5..b844e2898 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -4,6 +4,7 @@
   "account.block": "Block @{name}",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Edit profile",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media ({formats})",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index 5328f15c5..b4e45a854 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -4,6 +4,7 @@
   "account.block": "Bloķēt @{name}",
   "account.block_domain": "Slēpt visu no {domain}",
   "account.blocked": "Bloķēts",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Privātā ziņa @{name}",
   "account.domain_blocked": "Domēns ir paslēpts",
   "account.edit_profile": "Labot profilu",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}",
   "alert.unexpected.message": "Negaidīta kļūda.",
   "alert.unexpected.title": "Ups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media ({formats})",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index ad72b3233..556204753 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -4,6 +4,7 @@
   "account.block": "Block @{name}",
   "account.block_domain": "Hide everything from {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Edit profile",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Unmute notifications from @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "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",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media ({formats})",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploading...",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index d7f428193..6cfcf6bd6 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -4,6 +4,7 @@
   "account.block": "Blokkeer @{name}",
   "account.block_domain": "Verberg alles van {domain}",
   "account.blocked": "Geblokkeerd",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domein verborgen",
   "account.edit_profile": "Profiel bewerken",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name} meldingen niet langer negeren",
   "alert.unexpected.message": "Er deed zich een onverwachte fout voor",
   "alert.unexpected.title": "Oeps!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
   "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
   "bundle_column_error.retry": "Opnieuw proberen",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Gebruikersgids",
   "navigation_bar.public_timeline": "Globale tijdlijn",
   "navigation_bar.security": "Beveiliging",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} voegde jouw toot als favoriet toe",
   "notification.follow": "{name} volgt jou nu",
   "notification.mention": "{name} vermeldde jou",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Nog enkele ogenblikken resterend",
   "time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} te gaan",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
   "upload_area.title": "Hiernaar toe slepen om te uploaden",
   "upload_button.label": "Media toevoegen ({formats})",
   "upload_error.limit": "Uploadlimiet van bestand overschreden.",
   "upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.",
   "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",
-  "upload_form.focus": "Voorvertoning aanpassen",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Verwijderen",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Uploaden...",
   "video.close": "Video sluiten",
   "video.exit_fullscreen": "Volledig scherm sluiten",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index ea722a01e..b310efd69 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -4,6 +4,7 @@
   "account.block": "Blokkér @{name}",
   "account.block_domain": "Skjul alt fra {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Rediger profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Vis varsler fra @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang",
   "bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.",
   "bundle_column_error.retry": "Prøv igjen",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Felles tidslinje",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} likte din status",
   "notification.follow": "{name} fulgte deg",
   "notification.mention": "{name} nevnte deg",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
   "upload_area.title": "Dra og slipp for å laste opp",
   "upload_button.label": "Legg til media",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Beskriv for synshemmede",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Angre",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Laster opp...",
   "video.close": "Lukk video",
   "video.exit_fullscreen": "Lukk fullskjerm",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 34804da20..76b578021 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -4,6 +4,7 @@
   "account.block": "Blocar @{name}",
   "account.block_domain": "Tot amagar del domeni {domain}",
   "account.blocked": "Blocat",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Escriure un MP a @{name}",
   "account.domain_blocked": "Domeni amagat",
   "account.edit_profile": "Modificar lo perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Mostrar las notificacions de @{name}",
   "alert.unexpected.message": "Una error s’es producha.",
   "alert.unexpected.title": "Ops !",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven",
   "bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.",
   "bundle_column_error.retry": "Tornar ensajar",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Mostrar los partatges",
   "home.column_settings.show_replies": "Mostrar las responsas",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Actualizacion en dirècte",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Títol de la nòva lista",
   "lists.search": "Cercar demest lo monde que seguètz",
   "lists.subheading": "Vòstras listas",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}",
   "loading_indicator.label": "Cargament…",
   "media_gallery.toggle_visible": "Modificar la visibilitat",
   "missing_indicator.label": "Pas trobat",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Annuari de perfils",
   "navigation_bar.public_timeline": "Flux public global",
   "navigation_bar.security": "Seguretat",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a ajustat a sos favorits",
   "notification.follow": "{name} vos sèc",
   "notification.mention": "{name} vos a mencionat",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Gents",
   "search_results.hashtags": "Etiquetas",
   "search_results.statuses": "Tuts",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
   "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}",
   "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments restants",
   "time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
   "upload_area.title": "Lisatz e depausatz per mandar",
   "upload_button.label": "Ajustar un mèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Talha maximum pels mandadís subrepassada.",
   "upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.",
   "upload_form.description": "Descripcion pels mal vesents",
-  "upload_form.focus": "Modificar l’apercebut",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Suprimir",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Mandadís…",
   "video.close": "Tampar la vidèo",
   "video.exit_fullscreen": "Sortir plen ecran",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index d96ceb064..0793dbe01 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -4,6 +4,7 @@
   "account.block": "Blokuj @{name}",
   "account.block_domain": "Blokuj wszystko z {domain}",
   "account.blocked": "Zablokowany(-a)",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Wyślij wiadomość bezpośrednią do @{name}",
   "account.domain_blocked": "Ukryto domenę",
   "account.edit_profile": "Edytuj profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}",
   "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.",
   "alert.unexpected.title": "O nie!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
   "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.",
   "bundle_column_error.retry": "Spróbuj ponownie",
@@ -256,6 +258,7 @@
   "navigation_bar.profile_directory": "Katalog profilów",
   "navigation_bar.public_timeline": "Globalna oś czasu",
   "navigation_bar.security": "Bezpieczeństwo",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych",
   "notification.follow": "{name} zaczął(-ęła) Cię śledzić",
   "notification.mention": "{name} wspomniał(a) o tobie",
@@ -375,14 +378,22 @@
   "time_remaining.moments": "Pozostała chwila",
   "time_remaining.seconds": "{number, plural, one {Pozostała # sekunda} few {Pozostały # sekundy} many {Pozostało # sekund} other {Pozostało # sekund}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
   "upload_area.title": "Przeciągnij i upuść aby wysłać",
   "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Przekroczono limit plików do wysłania.",
   "upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.",
   "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących",
-  "upload_form.focus": "Dopasuj podgląd",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Usuń",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Wysyłanie…",
   "video.close": "Zamknij film",
   "video.exit_fullscreen": "Opuść tryb pełnoekranowy",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 1fb700874..523378276 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -4,6 +4,7 @@
   "account.block": "Bloquear @{name}",
   "account.block_domain": "Esconder tudo de {domain}",
   "account.blocked": "Bloqueado",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domínio escondido",
   "account.edit_profile": "Editar perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
   "alert.unexpected.message": "Um erro inesperado ocorreu.",
   "alert.unexpected.title": "Eita!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez",
   "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
   "bundle_column_error.retry": "Tente novamente",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Diretório de perfis",
   "navigation_bar.public_timeline": "Global",
   "navigation_bar.security": "Segurança",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} adicionou a sua postagem aos favoritos",
   "notification.follow": "{name} te seguiu",
   "notification.mention": "{name} te mencionou",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Momentos restantes",
   "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
   "upload_area.title": "Arraste e solte para enviar",
   "upload_button.label": "Adicionar mídia (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Limite de envio de arquivos excedido.",
   "upload_error.poll": "Envio de arquivos não é permitido com enquetes.",
   "upload_form.description": "Descreva a imagem para deficientes visuais",
-  "upload_form.focus": "Ajustar foco",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Remover",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Salvando...",
   "video.close": "Fechar vídeo",
   "video.exit_fullscreen": "Sair da tela cheia",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index c6ea3f847..7ce628422 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -4,6 +4,7 @@
   "account.block": "Bloquear @{name}",
   "account.block_domain": "Esconder tudo do domínio {domain}",
   "account.blocked": "Bloqueado",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mensagem directa @{name}",
   "account.domain_blocked": "Domínio escondido",
   "account.edit_profile": "Editar perfil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Deixar de silenciar @{name}",
   "alert.unexpected.message": "Ocorreu um erro inesperado.",
   "alert.unexpected.title": "Bolas!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
   "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
   "bundle_column_error.retry": "Tente de novo",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Directório de perfis",
   "navigation_bar.public_timeline": "Cronologia federada",
   "navigation_bar.security": "Segurança",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} adicionou o teu estado aos favoritos",
   "notification.follow": "{name} começou a seguir-te",
   "notification.mention": "{name} mencionou-te",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Momentos restantes",
   "time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam",
   "trends.count_by_accounts": "{count} {rawCount, plural, uma {person} outra {people}} a falar",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
   "upload_area.title": "Arraste e solte para enviar",
   "upload_button.label": "Adicionar media",
   "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.",
   "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.",
   "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais",
-  "upload_form.focus": "Alterar previsualização",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Apagar",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "A enviar...",
   "video.close": "Fechar vídeo",
   "video.exit_fullscreen": "Sair de full screen",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index ac10d4678..141ccd5ab 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -4,6 +4,7 @@
   "account.block": "Blochează @{name}",
   "account.block_domain": "Ascunde tot de la {domain}",
   "account.blocked": "Blocat",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mesaj direct @{name}",
   "account.domain_blocked": "Domeniu ascuns",
   "account.edit_profile": "Editează profilul",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Activează notificările de la @{name}",
   "alert.unexpected.message": "A apărut o eroare neașteptată.",
   "alert.unexpected.title": "Hopa!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Poți apăsa {combo} pentru a omite asta data viitoare",
   "bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.",
   "bundle_column_error.retry": "Încearcă din nou",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Flux global",
   "navigation_bar.security": "Securitate",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a adăugat statusul tău la favorite",
   "notification.follow": "{name} te urmărește",
   "notification.mention": "{name} te-a menționat",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} vorbesc",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.",
   "upload_area.title": "Trage și eliberează pentru a încărca",
   "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere",
-  "upload_form.focus": "Schimbă previzualizarea",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Șterge",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Se Încarcă...",
   "video.close": "Închide video",
   "video.exit_fullscreen": "Închide",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 8a7a39a06..afc064a6b 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -4,6 +4,7 @@
   "account.block": "Блокировать",
   "account.block_domain": "Блокировать все с {domain}",
   "account.blocked": "Заблокирован(а)",
+  "account.cancel_follow_request": "Отменить запрос",
   "account.direct": "Написать @{name}",
   "account.domain_blocked": "Домен скрыт",
   "account.edit_profile": "Изменить профиль",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Показывать уведомления от @{name}",
   "alert.unexpected.message": "Что-то пошло не так.",
   "alert.unexpected.title": "Ой!",
+  "autosuggest_hashtag.per_week": "{count} / неделю",
   "boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз",
   "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.",
   "bundle_column_error.retry": "Попробовать снова",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Основные",
   "home.column_settings.show_reblogs": "Показывать продвижения",
   "home.column_settings.show_replies": "Показывать ответы",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Обновлять в реальном времени",
   "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
   "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
   "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Заголовок списка",
   "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": "Не найдено",
@@ -251,9 +253,10 @@
   "navigation_bar.profile_directory": "Каталог профилей",
   "navigation_bar.public_timeline": "Глобальная лента",
   "navigation_bar.security": "Безопасность",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} понравился Ваш статус",
-  "notification.follow": "{name} подписался(-лась) на Вас",
-  "notification.mention": "{name} упомянул(а) Вас",
+  "notification.follow": "{name} подписался (-лась) на вас",
+  "notification.mention": "{name} упомянул(а) вас",
   "notification.poll": "Опрос, в котором вы приняли участие, завершился",
   "notification.reblog": "{name} продвинул(а) Ваш статус",
   "notifications.clear": "Очистить уведомления",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Люди",
   "search_results.hashtags": "Хэштеги",
   "search_results.statuses": "Посты",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Поиск постов по их контенту не поддерживается на этом сервере Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}",
   "status.admin_account": "Открыть интерфейс модератора для @{name}",
   "status.admin_status": "Открыть этот статус в интерфейсе модератора",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "остались считанные мгновения",
   "time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}",
   "trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}",
+  "trends.refresh": "Обновить",
   "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
   "upload_area.title": "Перетащите сюда, чтобы загрузить",
   "upload_button.label": "Добавить медиаконтент",
   "upload_error.limit": "Достигнут лимит загруженных файлов.",
   "upload_error.poll": "К опросам нельзя прикреплять файлы.",
-  "upload_form.description": "Описать для людей с нарушениями зрения",
-  "upload_form.focus": "Обрезать",
+  "upload_form.description": "Добавьте описание для людей с нарушениями зрения:",
+  "upload_form.edit": "Изменить",
   "upload_form.undo": "Отменить",
+  "upload_modal.analyzing_picture": "Обработка изображения…",
+  "upload_modal.apply": "Применить",
+  "upload_modal.description_placeholder": "На дворе трава, на траве дрова",
+  "upload_modal.detect_text": "Найти текст на картинке",
+  "upload_modal.edit_media": "Изменение медиа",
+  "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.",
+  "upload_modal.preview_label": "Предпросмотр ({ratio})",
   "upload_progress.label": "Загрузка...",
   "video.close": "Закрыть видео",
   "video.exit_fullscreen": "Покинуть полноэкранный режим",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 3cc2cbaa7..4a7625aae 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -4,6 +4,7 @@
   "account.block": "Blokuj @{name}",
   "account.block_domain": "Ukry všetko z {domain}",
   "account.blocked": "Blokovaný/á",
+  "account.cancel_follow_request": "Zruš požiadanie o sledovanie",
   "account.direct": "Súkromná správa pre @{name}",
   "account.domain_blocked": "Doména ukrytá",
   "account.edit_profile": "Uprav profil",
@@ -23,7 +24,7 @@
   "account.mute": "Ignorovať @{name}",
   "account.mute_notifications": "Stĺm oboznámenia od @{name}",
   "account.muted": "Utíšený/á",
-  "account.posts": "Príspevky",
+  "account.posts": "Príspevkov",
   "account.posts_with_replies": "Príspevky aj s odpoveďami",
   "account.report": "Nahlás @{name}",
   "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}",
   "alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
   "alert.unexpected.title": "Ups!",
+  "autosuggest_hashtag.per_week": "{count} týždenne",
   "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie",
   "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.",
   "bundle_column_error.retry": "Skús to znova",
@@ -137,10 +139,10 @@
   "follow_request.authorize": "Povoľ prístup",
   "follow_request.reject": "Odmietni",
   "getting_started.developers": "Vývojári",
-  "getting_started.directory": "Databáza profilov",
+  "getting_started.directory": "Zoznam profilov",
   "getting_started.documentation": "Dokumentácia",
   "getting_started.heading": "Začni tu",
-  "getting_started.invite": "Pozvať ľudí",
+  "getting_started.invite": "Pozvi ľudí",
   "getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.",
   "getting_started.security": "Zabezpečenie",
   "getting_started.terms": "Podmienky prevozu",
@@ -156,10 +158,10 @@
   "home.column_settings.basic": "Základné",
   "home.column_settings.show_reblogs": "Zobraziť povýšené",
   "home.column_settings.show_replies": "Ukázať odpovede",
-  "home.column_settings.update_live": "Update in real-time",
-  "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}",
-  "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
-  "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
+  "home.column_settings.update_live": "Aktualizuj v reálnom čase",
+  "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.",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Názov nového zoznamu",
   "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ",
   "lists.subheading": "Tvoje zoznamy",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}",
   "loading_indicator.label": "Načítam...",
   "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť",
   "missing_indicator.label": "Nenájdené",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Katalóg profilov",
   "navigation_bar.public_timeline": "Federovaná časová os",
   "navigation_bar.security": "Zabezbečenie",
+  "notification.and_n_others": "a {count, plural,one {# ostatní} other {# ostatných}}",
   "notification.favourite": "{name} si obľúbil/a tvoj príspevok",
   "notification.follow": "{name} ťa začal/a následovať",
   "notification.mention": "{name} ťa spomenul/a",
@@ -278,8 +281,8 @@
   "notifications.filter.polls": "Výsledky ankiet",
   "notifications.group": "{count} oboznámení",
   "poll.closed": "Uzatvorená",
-  "poll.refresh": "Aktualizuj",
-  "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasy}}",
+  "poll.refresh": "Obnov",
+  "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}",
   "poll.vote": "Hlasuj",
   "poll_button.add_poll": "Pridaj anketu",
   "poll_button.remove_poll": "Odstráň anketu",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Ľudia",
   "search_results.hashtags": "Haštagy",
   "search_results.statuses": "Príspevky",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.",
   "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}",
   "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}",
   "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní",
@@ -364,20 +367,28 @@
   "tabs_bar.local_timeline": "Miestna",
   "tabs_bar.notifications": "Oboznámenia",
   "tabs_bar.search": "Hľadaj",
-  "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}",
+  "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
   "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
   "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
   "time_remaining.moments": "Ostáva už iba chviľka",
-  "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}",
+  "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}",
+  "trends.refresh": "Obnov",
   "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
   "upload_area.title": "Pretiahni a pusť pre nahratie",
   "upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.",
   "upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.",
   "upload_form.description": "Opis pre slabo vidiacich",
-  "upload_form.focus": "Pozmeň náhľad",
+  "upload_form.edit": "Uprav",
   "upload_form.undo": "Vymaž",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Použi",
+  "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": "Uprav médiá",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Nahráva sa...",
   "video.close": "Zavri video",
   "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index f79a7051a..8a5a0d4bb 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -4,6 +4,7 @@
   "account.block": "Blokiraj @{name}",
   "account.block_domain": "Skrij vse iz {domain}",
   "account.blocked": "Blokirano",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Neposredno sporočilo @{name}",
   "account.domain_blocked": "Skrita domena",
   "account.edit_profile": "Uredi profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Vklopi obvestila od @{name}",
   "alert.unexpected.message": "Zgodila se je nepričakovana napaka.",
   "alert.unexpected.title": "Uups!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}",
   "bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.",
   "bundle_column_error.retry": "Poskusi ponovno",
@@ -132,7 +134,7 @@
   "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.",
-  "empty_column.notifications": "Nimate še nobenih obvestil. Poveži se z drugimi, da začnete pogovor.",
+  "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.",
   "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov",
   "follow_request.authorize": "Overi",
   "follow_request.reject": "Zavrni",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.show_reblogs": "Pokaži spodbude",
   "home.column_settings.show_replies": "Pokaži odgovore",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Posodabljaj v realnem času",
   "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}}",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Nov naslov seznama",
   "lists.search": "Išči med ljudmi, katerim sledite",
   "lists.subheading": "Vaši seznami",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nov element} other {# novih elementov}}",
   "loading_indicator.label": "Nalaganje...",
   "media_gallery.toggle_visible": "Preklopi vidljivost",
   "missing_indicator.label": "Ni najdeno",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Imenik profilov",
   "navigation_bar.public_timeline": "Združena časovnica",
   "navigation_bar.security": "Varnost",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je vzljubil/a vaš status",
   "notification.follow": "{name} vam sledi",
   "notification.mention": "{name} vas je omenil/a",
@@ -316,7 +319,7 @@
   "search_results.accounts": "Ljudje",
   "search_results.hashtags": "Ključniki",
   "search_results.statuses": "Tuti",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Iskanje tutov po njihovi vsebini ni omogočeno na tem strežniku Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultatov}}",
   "status.admin_account": "Odpri vmesnik za moderiranje za @{name}",
   "status.admin_status": "Odpri status v vmesniku za moderiranje",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Preostali trenutki",
   "time_remaining.seconds": "{number, plural, one {# sekunda} other {# sekund}} je ostalo",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {oseba} other {ljudi}} govori",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.",
   "upload_area.title": "Za pošiljanje povlecite in spustite",
   "upload_button.label": "Dodaj medije ({formats})",
   "upload_error.limit": "Omejitev prenosa datoteke je presežena.",
   "upload_error.poll": "Prenos datoteke z anketami ni dovoljen.",
   "upload_form.description": "Opišite za slabovidne",
-  "upload_form.focus": "Spremeni predogled",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Izbriši",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Pošiljanje...",
   "video.close": "Zapri video",
   "video.exit_fullscreen": "Izhod iz celozaslonskega načina",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 21d45f2e8..9877ca93f 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -4,6 +4,7 @@
   "account.block": "Blloko @{name}",
   "account.block_domain": "Fshih gjithçka prej {domain}",
   "account.blocked": "E bllokuar",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mesazh i drejtpërdrejt për @{name}",
   "account.domain_blocked": "Përkatësi e fshehur",
   "account.edit_profile": "Përpunoni profilin",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}",
   "alert.unexpected.message": "Ndodhi një gabim të papritur.",
   "alert.unexpected.title": "Hëm!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Mund të shtypni {combo}, që të anashkalohet kjo herës tjetër",
   "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.",
   "bundle_column_error.retry": "Riprovoni",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Rrjedhë kohore të federuarish",
   "navigation_bar.security": "Siguri",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} parapëlqeu gjendjen tuaj",
   "notification.follow": "{name} zuri t’ju ndjekë",
   "notification.mention": "{name} ju ka përmendur",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, një {person} {people} të tjerë} po flasin",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Skica juaj do të humbë nëse dilni nga Mastodon-i.",
   "upload_area.title": "Merreni & vëreni që të ngarkohet",
   "upload_button.label": "Shtoni media (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "U tejkalua kufi ngarkimi kartelash.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Përshkruajeni për persona me probleme shikimi",
-  "upload_form.focus": "Ndryshoni parapamjen",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Fshije",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Po ngarkohet…",
   "video.close": "Mbylle videon",
   "video.exit_fullscreen": "Dil nga mënyra Sa Krejt Ekrani",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 55bae4cdd..e60e2c7e8 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -4,6 +4,7 @@
   "account.block": "Blokiraj korisnika @{name}",
   "account.block_domain": "Sakrij sve sa domena {domain}",
   "account.blocked": "Blocked",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain hidden",
   "account.edit_profile": "Izmeni profil",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}",
   "alert.unexpected.message": "An unexpected error occurred.",
   "alert.unexpected.title": "Oops!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put",
   "bundle_column_error.body": "Nešto je pošlo po zlu prilikom učitavanja ove komponente.",
   "bundle_column_error.retry": "Pokušajte ponovo",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federisana lajna",
   "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je stavio Vaš status kao omiljeni",
   "notification.follow": "{name} Vas je zapratio",
   "notification.mention": "{name} Vas je pomenuo",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.",
   "upload_area.title": "Prevucite ovde da otpremite",
   "upload_button.label": "Dodaj multimediju",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Opiši za slabovide osobe",
-  "upload_form.focus": "Crop",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Opozovi",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Otpremam...",
   "video.close": "Zatvori video",
   "video.exit_fullscreen": "Napusti ceo ekran",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index a4ae9fcaa..82833630c 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -4,6 +4,7 @@
   "account.block": "Блокирај @{name}",
   "account.block_domain": "Сакриј све са домена {domain}",
   "account.blocked": "Блокиран",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Директна порука @{name}",
   "account.domain_blocked": "Домен сакривен",
   "account.edit_profile": "Измени профил",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}",
   "alert.unexpected.message": "Појавила се неочекивана грешка.",
   "alert.unexpected.title": "Упс!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Можете притиснути {combo} да прескочите ово следећи пут",
   "bundle_column_error.body": "Нешто је пошло по злу приликом учитавања ове компоненте.",
   "bundle_column_error.retry": "Покушајте поново",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Здружена временска линија",
   "navigation_bar.security": "Безбедност",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени",
   "notification.follow": "{name} Вас је запратио/ла",
   "notification.mention": "{name} Вас је поменуо/ла",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {човек} other {људи}} прича",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
   "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.description": "Опишите за особе са оштећеним видом",
-  "upload_form.focus": "Подесите",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Обриши",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Отпремам...",
   "video.close": "Затвори видео",
   "video.exit_fullscreen": "Напусти цео екран",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index fda5c4d57..db28900ba 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -4,52 +4,54 @@
   "account.block": "Blockera @{name}",
   "account.block_domain": "Dölj allt från {domain}",
   "account.blocked": "Blockerad",
-  "account.direct": "Direktmeddelande @{name}",
+  "account.cancel_follow_request": "Cancel follow request",
+  "account.direct": "Skicka ett direktmeddelande till @{name}",
   "account.domain_blocked": "Domän dold",
   "account.edit_profile": "Redigera profil",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "Visa upp på profil",
   "account.follow": "Följ",
   "account.followers": "Följare",
   "account.followers.empty": "Ingen följer denna användaren än.",
   "account.follows": "Följer",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Den här användaren följer inte någon ännu.",
   "account.follows_you": "Följer dig",
   "account.hide_reblogs": "Dölj knuffar från @{name}",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.link_verified_on": "Ägarskapet för det här kontot kontrollerades den {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": "Nämna @{name}",
   "account.moved_to": "{name} har flyttat till:",
   "account.mute": "Tysta @{name}",
   "account.mute_notifications": "Stäng av notifieringar från @{name}",
-  "account.muted": "Nertystad",
+  "account.muted": "Tystad",
   "account.posts": "Inlägg",
   "account.posts_with_replies": "Toots och svar",
   "account.report": "Rapportera @{name}",
   "account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan",
-  "account.share": "Dela @{name}'s profil",
+  "account.share": "Dela @{name}s profil",
   "account.show_reblogs": "Visa knuffar från @{name}",
   "account.unblock": "Avblockera @{name}",
-  "account.unblock_domain": "Ta fram {domain}",
-  "account.unendorse": "Don't feature on profile",
+  "account.unblock_domain": "Sluta dölja {domain}",
+  "account.unendorse": "Visa inte upp på profil",
   "account.unfollow": "Sluta följa",
-  "account.unmute": "Ta bort tystad @{name}",
+  "account.unmute": "Sluta tysta @{name}",
   "account.unmute_notifications": "Återaktivera notifikationer från @{name}",
   "alert.unexpected.message": "Ett oväntat fel uppstod.",
-  "alert.unexpected.title": "Whups!",
+  "alert.unexpected.title": "Hoppsan!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång",
   "bundle_column_error.body": "Något gick fel när du laddade denna komponent.",
   "bundle_column_error.retry": "Försök igen",
   "bundle_column_error.title": "Nätverksfel",
   "bundle_modal_error.close": "Stäng",
-  "bundle_modal_error.message": "Något gick fel när du laddade denna komponent.",
+  "bundle_modal_error.message": "Något gick fel när denna komponent laddades.",
   "bundle_modal_error.retry": "Försök igen",
   "column.blocks": "Blockerade användare",
   "column.community": "Lokal tidslinje",
-  "column.direct": "Direktmeddelande",
+  "column.direct": "Direktmeddelanden",
   "column.domain_blocks": "Dolda domäner",
   "column.favourites": "Favoriter",
-  "column.follow_requests": "Följ förfrågningar",
+  "column.follow_requests": "Följförfrågningar",
   "column.home": "Hem",
   "column.lists": "Listor",
   "column.mutes": "Tystade användare",
@@ -65,64 +67,64 @@
   "column_header.unpin": "Ångra fäst",
   "column_subheading.settings": "Inställningar",
   "community.column_settings.media_only": "Enbart media",
-  "compose_form.direct_message_warning": "Denna toot kommer endast att skickas nämnda nämnda användare.",
+  "compose_form.direct_message_warning": "Denna toot kommer endast att skickas till nämnda användare.",
   "compose_form.direct_message_warning_learn_more": "Visa mer",
   "compose_form.hashtag_warning": "Denna toot kommer inte att listas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.",
-  "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vemsomhelst kan följa dig och även se dina inlägg skrivna för endast dina följare.",
+  "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vem som helst kan följa dig och även se dina inlägg som bara är för följare.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Vad funderar du på?",
-  "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.publish": "Toot",
+  "compose_form.poll.add_option": "Nytt alternativ",
+  "compose_form.poll.duration": "Varaktighet för omröstning",
+  "compose_form.poll.option_placeholder": "Alternativ {number}",
+  "compose_form.poll.remove_option": "Ta bort alternativ",
+  "compose_form.publish": "Tut",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.hide": "Markera media som känsligt",
   "compose_form.sensitive.marked": "Media har markerats som känsligt",
   "compose_form.sensitive.unmarked": "Media har inte markerats som känsligt",
   "compose_form.spoiler.marked": "Texten har dolts bakom en varning",
   "compose_form.spoiler.unmarked": "Texten är inte dold",
   "compose_form.spoiler_placeholder": "Skriv din varning här",
   "confirmation_modal.cancel": "Ångra",
-  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.block_and_report": "Blockera & rapportera",
   "confirmations.block.confirm": "Blockera",
   "confirmations.block.message": "Är du säker att du vill blockera {name}?",
   "confirmations.delete.confirm": "Ta bort",
   "confirmations.delete.message": "Är du säker att du vill ta bort denna status?",
-  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.confirm": "Ta bort",
   "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
-  "confirmations.domain_block.confirm": "Blockera hela domänen",
+  "confirmations.domain_block.confirm": "Dölj hela domänen",
   "confirmations.domain_block.message": "Är du 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 sluta se innehåll från {domain}-domänen i den allmänna tidslinjen och i dina egna notifieringar. Du kommer även sluta följa alla eventuella följare du har från {domain}.",
   "confirmations.mute.confirm": "Tysta",
   "confirmations.mute.message": "Är du säker du vill tysta ner {name}?",
   "confirmations.redraft.confirm": "Radera och gör om",
   "confirmations.redraft.message": "Är du säker på att du vill radera meddelandet och göra om det? Du kommer förlora alla svar, knuffar och favoriter som hänvisar till meddelandet.",
-  "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.reply.confirm": "Svara",
+  "confirmations.reply.message": "Om du svarar nu kommer det att ersätta meddelandet du håller på att skriva. Är du säker på att du vill fortsätta?",
   "confirmations.unfollow.confirm": "Sluta följa",
   "confirmations.unfollow.message": "Är du säker på att du vill sluta följa {name}?",
   "embed.instructions": "Bädda in den här statusen på din webbplats genom att kopiera koden nedan.",
-  "embed.preview": "Här ser du hur det kommer att se ut:",
+  "embed.preview": "Så här kommer det att se ut:",
   "emoji_button.activity": "Aktivitet",
-  "emoji_button.custom": "Specialgjord",
+  "emoji_button.custom": "Anpassad",
   "emoji_button.flags": "Flaggor",
-  "emoji_button.food": "Mat & Dryck",
+  "emoji_button.food": "Mat & dryck",
   "emoji_button.label": "Lägg till emoji",
   "emoji_button.nature": "Natur",
   "emoji_button.not_found": "Inga emojos!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objekt",
-  "emoji_button.people": "Människor",
+  "emoji_button.people": "Personer",
   "emoji_button.recent": "Ofta använda",
   "emoji_button.search": "Sök...",
   "emoji_button.search_results": "Sökresultat",
   "emoji_button.symbols": "Symboler",
-  "emoji_button.travel": "Resor & Platser",
-  "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.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!",
-  "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
+  "emoji_button.travel": "Resor & platser",
+  "empty_column.account_timeline": "Inga inlägg här!",
+  "empty_column.account_unavailable": "Profilen är inte tillgänglig",
+  "empty_column.blocks": "Du har ännu inte blockerat några användare.",
+  "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!",
+  "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot ett kommer det att dyka upp här.",
+  "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.",
   "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.",
@@ -131,84 +133,84 @@
   "empty_column.home.public_timeline": "den publika tidslinjen",
   "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": "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.mutes": "Du har ännu inte tystat några användare.",
   "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.",
   "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det",
   "follow_request.authorize": "Godkänn",
   "follow_request.reject": "Avvisa",
   "getting_started.developers": "Utvecklare",
-  "getting_started.directory": "Profile directory",
-  "getting_started.documentation": "Documentation",
+  "getting_started.directory": "Profilkatalog",
+  "getting_started.documentation": "Dokumentation",
   "getting_started.heading": "Kom igång",
   "getting_started.invite": "Skicka inbjudningar",
   "getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.",
   "getting_started.security": "Säkerhet",
   "getting_started.terms": "Användarvillkor",
-  "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_header.tag_mode.all": "och {additional}",
+  "hashtag.column_header.tag_mode.any": "eller {additional}",
+  "hashtag.column_header.tag_mode.none": "utan {additional}",
+  "hashtag.column_settings.select.no_options_message": "Inga förslag hittades",
+  "hashtag.column_settings.select.placeholder": "Ange hashtags …",
+  "hashtag.column_settings.tag_mode.all": "Alla dessa",
+  "hashtag.column_settings.tag_mode.any": "Någon av dessa",
   "hashtag.column_settings.tag_mode.none": "Ingen av dessa",
   "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
   "home.column_settings.basic": "Grundläggande",
   "home.column_settings.show_reblogs": "Visa knuffar",
   "home.column_settings.show_replies": "Visa svar",
-  "home.column_settings.update_live": "Update in real-time",
-  "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}}",
+  "home.column_settings.update_live": "Uppdatera i realtid",
+  "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}",
+  "intervals.full.hours": "{hours, plural, one {# timme} other {# timmar}}",
+  "intervals.full.minutes": "{minutes, plural, one {1 minut} other {# minuter}}",
   "introduction.federation.action": "Nästa",
   "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.headline": "Hem",
   "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.action": "Slutför introduktionsguide!",
   "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.action": "Sätt igång!",
   "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": "att navigera tillbaka",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
-  "keyboard_shortcuts.boost": "att knuffa",
-  "keyboard_shortcuts.column": "att fokusera en status i en av kolumnerna",
-  "keyboard_shortcuts.compose": "att fokusera komponera text fältet",
-  "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.direct": "to open direct messages column",
-  "keyboard_shortcuts.down": "att flytta ner i listan",
-  "keyboard_shortcuts.enter": "to open status",
-  "keyboard_shortcuts.favourite": "att favorisera",
-  "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": "Snabbvalstangent",
-  "keyboard_shortcuts.legend": "att visa denna översikt",
-  "keyboard_shortcuts.local": "to open local timeline",
-  "keyboard_shortcuts.mention": "att nämna författaren",
-  "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.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
-  "keyboard_shortcuts.reply": "att svara",
-  "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "att fokusera sökfältet",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "att visa/gömma text bakom CW",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
-  "keyboard_shortcuts.toot": "att börja en helt ny toot",
-  "keyboard_shortcuts.unfocus": "att avfokusera komponera text fält / sökfält",
-  "keyboard_shortcuts.up": "att flytta upp i listan",
+  "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",
+  "keyboard_shortcuts.column": "för att fokusera en status i en av kolumnerna",
+  "keyboard_shortcuts.compose": "för att fokusera skrivfältet",
+  "keyboard_shortcuts.description": "Beskrivning",
+  "keyboard_shortcuts.direct": "för att öppna Direktmeddelanden",
+  "keyboard_shortcuts.down": "för att flytta nedåt i listan",
+  "keyboard_shortcuts.enter": "för att öppna en status",
+  "keyboard_shortcuts.favourite": "för att sätta som favorit",
+  "keyboard_shortcuts.favourites": "för att öppna Favoriter",
+  "keyboard_shortcuts.federated": "för att öppna Förenad tidslinje",
+  "keyboard_shortcuts.heading": "Tangentbordsgenvägar",
+  "keyboard_shortcuts.home": "för att öppna Hem-tidslinjen",
+  "keyboard_shortcuts.hotkey": "Kommando",
+  "keyboard_shortcuts.legend": "för att visa denna översikt",
+  "keyboard_shortcuts.local": "för att öppna Lokal tidslinje",
+  "keyboard_shortcuts.mention": "för att nämna skaparen",
+  "keyboard_shortcuts.muted": "för att öppna listan över tystade användare",
+  "keyboard_shortcuts.my_profile": "för att öppna din profil",
+  "keyboard_shortcuts.notifications": "för att öppna Meddelanden",
+  "keyboard_shortcuts.pinned": "för att öppna Nålade toots",
+  "keyboard_shortcuts.profile": "för att öppna skaparens profil",
+  "keyboard_shortcuts.reply": "för att svara",
+  "keyboard_shortcuts.requests": "för att öppna Följförfrågningar",
+  "keyboard_shortcuts.search": "för att fokusera sökfältet",
+  "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen",
+  "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW",
+  "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media",
+  "keyboard_shortcuts.toot": "för att påbörja en helt ny toot",
+  "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält",
+  "keyboard_shortcuts.up": "för att flytta uppåt i listan",
   "lightbox.close": "Stäng",
   "lightbox.next": "Nästa",
   "lightbox.previous": "Tidigare",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "Ny listrubrik",
   "lists.search": "Sök bland personer du följer",
   "lists.subheading": "Dina listor",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, other {# objekt}}",
   "loading_indicator.label": "Laddar...",
   "media_gallery.toggle_visible": "Växla synlighet",
   "missing_indicator.label": "Hittades inte",
@@ -241,7 +243,7 @@
   "navigation_bar.follow_requests": "Följförfrågningar",
   "navigation_bar.follows_and_followers": "Follows and followers",
   "navigation_bar.info": "Om denna instans",
-  "navigation_bar.keyboard_shortcuts": "Tangentbordsgenvägar",
+  "navigation_bar.keyboard_shortcuts": "Kortkommandon",
   "navigation_bar.lists": "Listor",
   "navigation_bar.logout": "Logga ut",
   "navigation_bar.mutes": "Tystade användare",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Förenad tidslinje",
   "navigation_bar.security": "Säkerhet",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favoriserade din status",
   "notification.follow": "{name} följer dig",
   "notification.mention": "{name} nämnde dig",
@@ -340,7 +343,7 @@
   "status.pin": "Fäst i profil",
   "status.pinned": "Fäst toot",
   "status.read_more": "Läs mer",
-  "status.reblog": "Knuff",
+  "status.reblog": "Knuffa",
   "status.reblog_private": "Knuffa till de ursprungliga åhörarna",
   "status.reblogged_by": "{name} knuffade",
   "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
@@ -364,20 +367,28 @@
   "tabs_bar.local_timeline": "Lokal",
   "tabs_bar.notifications": "Meddelanden",
   "tabs_bar.search": "Sök",
-  "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 {# dag} other {# dagar}} kvar",
+  "time_remaining.hours": "{hours, plural, one {# timme} other {# timmar}} kvar",
+  "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar",
   "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar",
   "trends.count_by_accounts": "{count} {rawCount, plural, en {person} andra {people}} pratar",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.",
   "upload_area.title": "Dra & släpp för att ladda upp",
   "upload_button.label": "Lägg till media",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Beskriv för synskadade",
-  "upload_form.focus": "Beskär",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Ta bort",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Laddar upp...",
   "video.close": "Stäng video",
   "video.exit_fullscreen": "Stäng helskärm",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 87163e660..7fa7db98b 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -4,6 +4,7 @@
   "account.block": "Block @{name}",
   "account.block_domain": "எல்லாவற்றையும் மறைக்க {domain}",
   "account.blocked": "தடைமுட்டுகள்",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "நேரடி செய்தி @{name}",
   "account.domain_blocked": "டொமைன் மறைக்கப்பட்டது",
   "account.edit_profile": "சுயவிவரத்தைத் திருத்தவும்",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "அறிவிப்புகளை அகற்றவும் @{name}",
   "alert.unexpected.message": "எதிர் பாராத பிழை ஏற்பட்டு விட்டது.",
   "alert.unexpected.title": "அச்சச்சோ!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "நீங்கள் அழுத்தவும் {combo} அடுத்த முறை தவிர்க்கவும்",
   "bundle_column_error.body": "இந்த கூறுகளை ஏற்றும்போது ஏதோ தவறு ஏற்பட்டது.",
   "bundle_column_error.retry": "மீண்டும் முயற்சி செய்",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "கூட்டாட்சி காலக்கெடு",
   "navigation_bar.security": "பத்திரம்",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ஆர்வம் கொண்டவர், உங்கள் நிலை",
   "notification.follow": "{name} நீங்கள் தொடர்ந்து வந்தீர்கள்",
   "notification.mention": "{name} நீங்கள் குறிப்பிட்டுள்ளீர்கள்",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "தருணங்கள் மீதமுள்ளன",
   "time_remaining.seconds": "{number, plural, one {# second} மற்ற {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} மற்ற {people}} உரையாடு",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "நீங்கள் வெளியே சென்றால் உங்கள் வரைவு இழக்கப்படும் மஸ்தோடோன்.",
   "upload_area.title": "பதிவேற்ற & இழுக்கவும்",
   "upload_button.label": "மீடியாவைச் சேர்க்கவும் (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "கோப்பு பதிவேற்ற வரம்பு மீறப்பட்டது.",
   "upload_error.poll": "கோப்பு பதிவேற்றம் அனுமதிக்கப்படவில்லை.",
   "upload_form.description": "பார்வையற்ற விவரிக்கவும்",
-  "upload_form.focus": "மாற்றம் முன்னோட்டம்",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "ஏற்றுகிறது ...",
   "video.close": "வீடியோவை மூடு",
   "video.exit_fullscreen": "முழு திரையில் இருந்து வெளியேறவும்",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index ccb608812..0f7a617bb 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -4,6 +4,7 @@
   "account.block": "@{name} ను బ్లాక్ చేయి",
   "account.block_domain": "{domain} నుంచి అన్నీ దాచిపెట్టు",
   "account.blocked": "బ్లాక్ అయినవి",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "@{name}కు నేరుగా సందేశం పంపు",
   "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది",
   "account.edit_profile": "ప్రొఫైల్ని సవరించండి",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు",
   "alert.unexpected.message": "అనుకోని తప్పు జరిగినది.",
   "alert.unexpected.title": "అయ్యో!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "మీరు తదుపరిసారి దీనిని దాటవేయడానికి {combo} నొక్కవచ్చు",
   "bundle_column_error.body": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.",
   "bundle_column_error.retry": "మళ్ళీ ప్రయత్నించండి",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "సమాఖ్య కాలక్రమం",
   "navigation_bar.security": "భద్రత",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} మీ స్టేటస్ ను ఇష్టపడ్డారు",
   "notification.follow": "{name} మిమ్మల్ని అనుసరిస్తున్నారు",
   "notification.mention": "{name} మిమ్మల్ని ప్రస్తావించారు",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "కొన్ని క్షణాలు మాత్రమే మిగిలి ఉన్నాయి",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} మాట్లాడుతున్నారు",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "మీరు మాస్టొడొన్ను వదిలివేస్తే మీ డ్రాఫ్ట్లు పోతాయి.",
   "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.description": "దృష్టి లోపమున్న వారి కోసం వివరించండి",
-  "upload_form.focus": "ప్రివ్యూను మార్చు",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "తొలగించు",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "అప్లోడ్ అవుతోంది...",
   "video.close": "వీడియోని మూసివేయి",
   "video.exit_fullscreen": "పూర్తి స్క్రీన్ నుండి నిష్క్రమించు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index e8d7a27ed..5bf79ded8 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -4,6 +4,7 @@
   "account.block": "ปิดกั้น @{name}",
   "account.block_domain": "ซ่อนทุกอย่างจาก {domain}",
   "account.blocked": "ปิดกั้นอยู่",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "ส่งข้อความโดยตรงถึง @{name}",
   "account.domain_blocked": "ซ่อนโดเมนอยู่",
   "account.edit_profile": "แก้ไขโปรไฟล์",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "เลิกปิดเสียงการแจ้งเตือนจาก @{name}",
   "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด",
   "alert.unexpected.title": "อุปส์!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป",
   "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้",
   "bundle_column_error.retry": "ลองอีกครั้ง",
@@ -72,7 +74,7 @@
   "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.publish": "โพสต์",
@@ -156,13 +158,13 @@
   "home.column_settings.basic": "พื้นฐาน",
   "home.column_settings.show_reblogs": "แสดงการดัน",
   "home.column_settings.show_replies": "แสดงการตอบกลับ",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "อัปเดตตามเวลาจริง",
   "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": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของ Fediverse จะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก",
+  "introduction.federation.federated.text": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของเฟดิเวิร์สจะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก",
   "introduction.federation.home.headline": "หน้าแรก",
   "introduction.federation.home.text": "โพสต์จากผู้คนที่คุณติดตามจะปรากฏในฟีดหน้าแรกของคุณ คุณสามารถติดตามใครก็ตามในเซิร์ฟเวอร์ใดก็ตาม!",
   "introduction.federation.local.headline": "ในเว็บ",
@@ -222,7 +224,7 @@
   "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่",
   "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม",
   "lists.subheading": "รายการของคุณ",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, other {# รายการใหม่}}",
   "loading_indicator.label": "กำลังโหลด...",
   "media_gallery.toggle_visible": "เปิด/ปิดการมองเห็น",
   "missing_indicator.label": "ไม่พบ",
@@ -251,10 +253,11 @@
   "navigation_bar.profile_directory": "ไดเรกทอรีโปรไฟล์",
   "navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก",
   "navigation_bar.security": "ความปลอดภัย",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ได้ชื่นชอบสถานะของคุณ",
   "notification.follow": "{name} ได้ติดตามคุณ",
   "notification.mention": "{name} ได้กล่าวถึงคุณ",
-  "notification.poll": "การหยั่งเสียงที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว",
+  "notification.poll": "โพลที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว",
   "notification.reblog": "{name} ได้ดันสถานะของคุณ",
   "notifications.clear": "ล้างการแจ้งเตือน",
   "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?",
@@ -265,7 +268,7 @@
   "notifications.column_settings.filter_bar.show": "แสดง",
   "notifications.column_settings.follow": "ผู้ติดตามใหม่:",
   "notifications.column_settings.mention": "การกล่าวถึง:",
-  "notifications.column_settings.poll": "ผลลัพธ์การหยั่งเสียง:",
+  "notifications.column_settings.poll": "ผลลัพธ์โพล:",
   "notifications.column_settings.push": "การแจ้งเตือนแบบผลัก",
   "notifications.column_settings.reblog": "การดัน:",
   "notifications.column_settings.show": "แสดงในคอลัมน์",
@@ -275,14 +278,14 @@
   "notifications.filter.favourites": "รายการโปรด",
   "notifications.filter.follows": "การติดตาม",
   "notifications.filter.mentions": "การกล่าวถึง",
-  "notifications.filter.polls": "ผลลัพธ์การหยั่งเสียง",
+  "notifications.filter.polls": "ผลลัพธ์โพล",
   "notifications.group": "{count} การแจ้งเตือน",
   "poll.closed": "ปิดแล้ว",
   "poll.refresh": "รีเฟรช",
   "poll.total_votes": "{count, plural, other {# การลงคะแนน}}",
   "poll.vote": "ลงคะแนน",
-  "poll_button.add_poll": "เพิ่มการหยั่งเสียง",
-  "poll_button.remove_poll": "เอาการหยั่งเสียงออก",
+  "poll_button.add_poll": "เพิ่มโพล",
+  "poll_button.remove_poll": "เอาโพลออก",
   "privacy.change": "ปรับเปลี่ยนความเป็นส่วนตัวของสถานะ",
   "privacy.direct.long": "โพสต์ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น",
   "privacy.direct.short": "โดยตรง",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "ช่วงเวลาที่เหลือ",
   "time_remaining.seconds": "เหลืออีก {number, plural, other {# วินาที}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon",
   "upload_area.title": "ลากแล้วปล่อยเพื่ออัปโหลด",
   "upload_button.label": "เพิ่มสื่อ (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "เกินขีดจำกัดการอัปโหลดไฟล์",
   "upload_error.poll": "ไม่อนุญาตให้อัปโหลดไฟล์กับการลงคะแนน",
   "upload_form.description": "อธิบายสำหรับผู้บกพร่องทางการมองเห็น",
-  "upload_form.focus": "ตัวอย่างการเปลี่ยนแปลง",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "ลบ",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "กำลังอัปโหลด...",
   "video.close": "ปิดวิดีโอ",
   "video.exit_fullscreen": "ออกจากเต็มหน้าจอ",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 0ea015cc6..3638b0582 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -4,6 +4,7 @@
   "account.block": "Engelle @{name}",
   "account.block_domain": "{domain} alanından her şeyi gizle",
   "account.blocked": "Engellenmiş",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Mesaj gönder : @{name}",
   "account.domain_blocked": "Alan adı gizlendi",
   "account.edit_profile": "Profili düzenle",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "@{name} kullanıcısından bildirimleri aç",
   "alert.unexpected.message": "Beklenmedik bir hata oluştu.",
   "alert.unexpected.title": "Hay aksi!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz",
   "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.",
   "bundle_column_error.retry": "Tekrar deneyin",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "Federe zaman tüneli",
   "navigation_bar.security": "Güvenlik",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} senin durumunu favorilere ekledi",
   "notification.follow": "{name} seni takip ediyor",
   "notification.mention": "{name} mentioned you",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.",
   "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız",
   "upload_button.label": "Görsel ekle",
   "upload_error.limit": "Dosya yükleme sınırı aşıldı.",
   "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.",
   "upload_form.description": "Describe for the visually impaired",
-  "upload_form.focus": "Kırp",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Geri al",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Yükleniyor...",
   "video.close": "Videoyu kapat",
   "video.exit_fullscreen": "Tam ekrandan çık",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 17e8cb49f..69bf016f9 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -1,22 +1,23 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.add_or_remove_from_list": "Додати або видалити зі списків",
   "account.badges.bot": "Бот",
   "account.block": "Заблокувати @{name}",
   "account.block_domain": "Заглушити {domain}",
   "account.blocked": "Заблоковані",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "Пряме повідомлення @{name}",
   "account.domain_blocked": "Домен приховано",
   "account.edit_profile": "Редагувати профіль",
   "account.endorse": "Feature on profile",
   "account.follow": "Підписатися",
   "account.followers": "Підписники",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Ніхто ще не підписався на цього користувача.",
   "account.follows": "Підписки",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Цей користувач ще ні на кого не підписався.",
   "account.follows_you": "Підписаний(-а) на Вас",
   "account.hide_reblogs": "Сховати передмухи від @{name}",
-  "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.link_verified_on": "Права власності на це посилання були перевірені {date}",
+  "account.locked_info": "Статус конфіденційності цього облікового запису встановлено у заблокований. Власник вручну переглядає, хто може за ним стежити.",
   "account.media": "Медіа",
   "account.mention": "Згадати @{name}",
   "account.moved_to": "{name} переїхав на:",
@@ -29,21 +30,22 @@
   "account.requested": "Очікує підтвердження. Натисніть щоб відмінити запит",
   "account.share": "Поширити профіль @{name}",
   "account.show_reblogs": "Показати передмухи від @{name}",
-  "account.unblock": "Розблокувати",
+  "account.unblock": "Розблокувати @{name}",
   "account.unblock_domain": "Розблокувати {domain}",
   "account.unendorse": "Don't feature on profile",
   "account.unfollow": "Відписатися",
-  "account.unmute": "Зняти глушення @{name}",
+  "account.unmute": "Зняти глушення з @{name}",
   "account.unmute_notifications": "Показувати сповіщення від @{name}",
   "alert.unexpected.message": "Трапилась неочікувана помилка.",
   "alert.unexpected.title": "Ой!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу",
-  "bundle_column_error.body": "Щось пішло не так при завантаженні компоненту.",
-  "bundle_column_error.retry": "Спробуйте ще",
+  "bundle_column_error.body": "Щось пішло не так під час завантаження компоненту.",
+  "bundle_column_error.retry": "Спробуйте ще раз",
   "bundle_column_error.title": "Помилка мережі",
   "bundle_modal_error.close": "Закрити",
-  "bundle_modal_error.message": "Щось пішло не так при завантаженні компоненту.",
-  "bundle_modal_error.retry": "Спробувати ще",
+  "bundle_modal_error.message": "Щось пішло не так під час завантаження компоненту.",
+  "bundle_modal_error.retry": "Спробувати ще раз",
   "column.blocks": "Заблоковані користувачі",
   "column.community": "Локальна стрічка",
   "column.direct": "Прямі повідомлення",
@@ -58,7 +60,7 @@
   "column.public": "Глобальна стрічка",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Приховати налаштування",
-  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveLeft_settings": "Змістити колонку вліво",
   "column_header.moveRight_settings": "Змістити колонку вправо",
   "column_header.pin": "Закріпити",
   "column_header.show_settings": "Показати налаштування",
@@ -66,25 +68,25 @@
   "column_subheading.settings": "Налаштування",
   "community.column_settings.media_only": "Тільки медіа",
   "compose_form.direct_message_warning": "Цей дмух буде видимий тільки згаданим користувачам.",
-  "compose_form.direct_message_warning_learn_more": "Дізнатись більше",
-  "compose_form.hashtag_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": "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.add_option": "Додати варіант",
+  "compose_form.poll.duration": "Тривалість опитування",
+  "compose_form.poll.option_placeholder": "Варіант {number}",
+  "compose_form.poll.remove_option": "Видалити цей варіант",
   "compose_form.publish": "Дмухнути",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
-  "compose_form.sensitive.marked": "Медіа відмічене <b>несприйнятливим</b>",
-  "compose_form.sensitive.unmarked": "Медіа відмічене сприйнятливим",
-  "compose_form.spoiler.marked": "Текст приховано за попередженням",
+  "compose_form.sensitive.hide": "Позначити медіа як дражливе",
+  "compose_form.sensitive.marked": "Медіа відмічене як дражливе",
+  "compose_form.sensitive.unmarked": "Медіа не відмічене як дражливе",
+  "compose_form.spoiler.marked": "Текст приховано під попередженням",
   "compose_form.spoiler.unmarked": "Текст видимий",
-  "compose_form.spoiler_placeholder": "Попередження щодо прихованого тексту",
+  "compose_form.spoiler_placeholder": "Напишіть своє попередження тут",
   "confirmation_modal.cancel": "Відмінити",
-  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.block_and_report": "Заблокувати та поскаржитися",
   "confirmations.block.confirm": "Заблокувати",
   "confirmations.block.message": "Ви впевнені, що хочете заблокувати {name}?",
   "confirmations.delete.confirm": "Видалити",
@@ -95,13 +97,13 @@
   "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.",
   "confirmations.mute.confirm": "Заглушити",
   "confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?",
-  "confirmations.redraft.confirm": "Видалити і перестворити",
+  "confirmations.redraft.confirm": "Видалити та перестворити",
   "confirmations.redraft.message": "Ви впевнені, що хочете видалити допис і перестворити його? Ви втратите всі відповіді, передмухи та вподобайки допису.",
-  "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.reply.confirm": "Відповісти",
+  "confirmations.reply.message": "Поточна відповідь перезапише повідомлення, яке ви зараз пишете. Ви впевнені, що хочете продовжити?",
   "confirmations.unfollow.confirm": "Відписатися",
   "confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?",
-  "embed.instructions": "Інтегруйте цей статус на вашому вебсайті, скопіювавши код нижче.",
+  "embed.instructions": "Вбудуйте цей статус до вашого вебсайту, скопіювавши код нижче.",
   "embed.preview": "Ось як він виглядатиме:",
   "emoji_button.activity": "Заняття",
   "emoji_button.custom": "Особливі",
@@ -113,125 +115,125 @@
   "emoji_button.objects": "Предмети",
   "emoji_button.people": "Люди",
   "emoji_button.recent": "Часто використовувані",
-  "emoji_button.search": "Знайти...",
+  "emoji_button.search": "Шукати...",
   "emoji_button.search_results": "Результати пошуку",
   "emoji_button.symbols": "Символи",
   "emoji_button.travel": "Подорожі",
-  "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_timeline": "Тут дмухалок немає!",
+  "empty_column.account_unavailable": "Профіль недоступний",
+  "empty_column.blocks": "Ви ще не заблокували жодного користувача.",
   "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.domain_blocks": "Тут поки немає прихованих доменів.",
+  "empty_column.favourited_statuses": "У вас ще немає вподобаних дмухів. Коли ви щось вподобаєте, воно з'явиться тут.",
+  "empty_column.favourites": "Ніхто ще не вподобав цього дмуху. Коли хтось це зробить, вони з'являться тут.",
+  "empty_column.follow_requests": "У вас ще немає запитів на підписку. Коли ви їх отримаєте, вони з'являться тут.",
   "empty_column.hashtag": "Дописів з цим хештегом поки не існує.",
   "empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.",
   "empty_column.home.public_timeline": "публічні стрічки",
   "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.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.",
+  "empty_column.mutes": "Ви ще не заглушили жодного користувача.",
   "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
   "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку",
   "follow_request.authorize": "Авторизувати",
   "follow_request.reject": "Відмовити",
   "getting_started.developers": "Розробникам",
-  "getting_started.directory": "Profile directory",
+  "getting_started.directory": "Каталог профілів",
   "getting_started.documentation": "Документація",
   "getting_started.heading": "Ласкаво просимо",
   "getting_started.invite": "Запросіть людей",
-  "getting_started.open_source_notice": "Mastodon - програма з відкритим вихідним кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.",
+  "getting_started.open_source_notice": "Mastodon — програма з відкритим сирцевим кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.",
   "getting_started.security": "Безпека",
   "getting_started.terms": "Умови використання",
-  "hashtag.column_header.tag_mode.all": "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",
+  "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": "Додайте додаткові теґи до цього стовпчика",
   "home.column_settings.basic": "Основні",
   "home.column_settings.show_reblogs": "Показувати передмухи",
   "home.column_settings.show_replies": "Показувати відповіді",
-  "home.column_settings.update_live": "Update in real-time",
-  "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.",
+  "home.column_settings.update_live": "Оновлювати в реальному часі",
+  "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": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "відкрити список заблокованих користувачів",
   "keyboard_shortcuts.boost": "передмухувати",
   "keyboard_shortcuts.column": "фокусуватися на одній з колонок",
   "keyboard_shortcuts.compose": "фокусуватися на полі введення",
   "keyboard_shortcuts.description": "Опис",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "відкрити колонку прямих повідомлень",
   "keyboard_shortcuts.down": "рухатися вниз стрічкою",
   "keyboard_shortcuts.enter": "відкрити статус",
   "keyboard_shortcuts.favourite": "вподобати",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "відкрити список улюбленого",
+  "keyboard_shortcuts.federated": "відкрити глобальну стрічку",
   "keyboard_shortcuts.heading": "Гарячі клавіші",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "відкрити домашню стрічку",
   "keyboard_shortcuts.hotkey": "Гаряча клавіша",
   "keyboard_shortcuts.legend": "показати підказку",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "відкрити локальну стрічку",
   "keyboard_shortcuts.mention": "згадати автора",
-  "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.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.muted": "відкрити список заглушених користувачів",
+  "keyboard_shortcuts.my_profile": "відкрити ваш профіль",
+  "keyboard_shortcuts.notifications": "відкрити колонку сповіщень",
+  "keyboard_shortcuts.pinned": "відкрити список закріплених дмухів",
   "keyboard_shortcuts.profile": "відкрити профіль автора",
   "keyboard_shortcuts.reply": "відповісти",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "відкрити список бажаючих підписатися",
   "keyboard_shortcuts.search": "сфокусуватися на пошуку",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "показати/приховати прихований текст",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.start": "відкрити колонку \"Початок\"",
+  "keyboard_shortcuts.toggle_hidden": "показати/приховати текст під попередженням",
+  "keyboard_shortcuts.toggle_sensitivity": "показати/приховати медіа",
   "keyboard_shortcuts.toot": "почати писати новий дмух",
   "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку",
   "keyboard_shortcuts.up": "рухатися вверх списком",
   "lightbox.close": "Закрити",
   "lightbox.next": "Далі",
   "lightbox.previous": "Назад",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "Переглянути контекст",
   "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.search": "Шукати серед людей, на яких ви підписані",
   "lists.subheading": "Ваші списки",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}",
   "loading_indicator.label": "Завантаження...",
   "media_gallery.toggle_visible": "Показати/приховати",
   "missing_indicator.label": "Не знайдено",
   "missing_indicator.sublabel": "Ресурс не знайдений",
   "mute_modal.hide_notifications": "Приховати сповіщення від користувача?",
-  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.apps": "Мобільні додатки",
   "navigation_bar.blocks": "Заблоковані користувачі",
   "navigation_bar.community_timeline": "Локальна стрічка",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Написати новий дмух",
   "navigation_bar.direct": "Прямі повідомлення",
   "navigation_bar.discover": "Знайти",
   "navigation_bar.domain_blocks": "Приховані домени",
@@ -239,61 +241,62 @@
   "navigation_bar.favourites": "Вподобане",
   "navigation_bar.filters": "Приховані слова",
   "navigation_bar.follow_requests": "Запити на підписку",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "Підписки і підписники",
   "navigation_bar.info": "Про сайт",
-  "navigation_bar.keyboard_shortcuts": "Гарячі клавіши",
+  "navigation_bar.keyboard_shortcuts": "Гарячі клавіші",
   "navigation_bar.lists": "Списки",
   "navigation_bar.logout": "Вийти",
   "navigation_bar.mutes": "Заглушені користувачі",
   "navigation_bar.personal": "Особисте",
   "navigation_bar.pins": "Закріплені дмухи",
   "navigation_bar.preferences": "Налаштування",
-  "navigation_bar.profile_directory": "Profile directory",
+  "navigation_bar.profile_directory": "Каталог профілів",
   "navigation_bar.public_timeline": "Глобальна стрічка",
   "navigation_bar.security": "Безпека",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} вподобав(-ла) ваш допис",
   "notification.follow": "{name} підписався(-лась) на Вас",
   "notification.mention": "{name} згадав(-ла) Вас",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.poll": "Опитування, у якому ви голосували, закінчилося",
   "notification.reblog": "{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.mention": "Згадки:",
-  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.poll": "Результати опитування:",
   "notifications.column_settings.push": "Push-сповіщення",
   "notifications.column_settings.reblog": "Передмухи:",
   "notifications.column_settings.show": "Показати в колонці",
   "notifications.column_settings.sound": "Відтворювати звуки",
-  "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.all": "Усі",
+  "notifications.filter.boosts": "Передмухи",
+  "notifications.filter.favourites": "Улюблені",
+  "notifications.filter.follows": "Підписки",
+  "notifications.filter.mentions": "Згадки",
+  "notifications.filter.polls": "Результати опитування",
   "notifications.group": "{count} сповіщень",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "poll.closed": "Закрито",
+  "poll.refresh": "Оновити",
+  "poll.total_votes": "{count, plural, one {# голос} few {# голоси} many {# голосів} other {# голосів}}",
+  "poll.vote": "Проголосувати",
+  "poll_button.add_poll": "Додати опитування",
+  "poll_button.remove_poll": "Видалити опитування",
   "privacy.change": "Змінити видимість допису",
   "privacy.direct.long": "Показати тільки згаданим користувачам",
-  "privacy.direct.short": "Направлений",
+  "privacy.direct.short": "Особисто",
   "privacy.private.long": "Показати тільки підписникам",
   "privacy.private.short": "Тільки для підписників",
   "privacy.public.long": "Показувати у публічних стрічках",
-  "privacy.public.short": "Публічний",
+  "privacy.public.short": "Публічно",
   "privacy.unlisted.long": "Не показувати у публічних стрічках",
   "privacy.unlisted.short": "Прихований",
   "regeneration_indicator.label": "Завантаження…",
-  "regeneration_indicator.sublabel": "Ваша домашня стрічка готова!",
+  "regeneration_indicator.sublabel": "Ваша домашня стрічка готується!",
   "relative_time.days": "{number}д",
   "relative_time.hours": "{number}г",
   "relative_time.just_now": "щойно",
@@ -305,82 +308,90 @@
   "report.hint": "Скаргу буде відправлено модераторам Вашого сайту. Ви можете надати їм пояснення, чому ви скаржитесь на аккаунт нижче:",
   "report.placeholder": "Додаткові коментарі",
   "report.submit": "Відправити",
-  "report.target": "Скаржимося на",
+  "report.target": "Скаржимося на {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": "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_popout.search_format": "Розширений формат пошуку",
+  "search_popout.tips.full_text": "Пошук за текстом знаходить статуси, які ви написали, вподобали, передмухнули, або в яких вас згадували. Також він знаходить імена користувачів, реальні імена та хештеґи.",
+  "search_popout.tips.hashtag": "хештеґ",
+  "search_popout.tips.status": "статус",
+  "search_popout.tips.text": "Пошук за текстом знаходить імена користувачів, реальні імена та хештеґи",
+  "search_popout.tips.user": "користувач",
+  "search_results.accounts": "Люди",
+  "search_results.hashtags": "Хештеґи",
+  "search_results.statuses": "Дмухів",
+  "search_results.statuses_fts_disabled": "Пошук дмухів за вмістом недоступний на цьому сервері Mastodon.",
   "search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
-  "status.block": "Block @{name}",
-  "status.cancel_reblog_private": "Unboost",
+  "status.admin_account": "Відкрити інтерфейс модерації для @{name}",
+  "status.admin_status": "Відкрити цей статус в інтерфейсі модерації",
+  "status.block": "Заблокувати @{name}",
+  "status.cancel_reblog_private": "Відмінити передмухання",
   "status.cannot_reblog": "Цей допис не може бути передмухнутий",
-  "status.copy": "Copy link to status",
+  "status.copy": "Копіювати посилання до статусу",
   "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.filtered": "Відфільтровано",
   "status.load_more": "Завантажити більше",
   "status.media_hidden": "Медіаконтент приховано",
-  "status.mention": "Згадати",
-  "status.more": "More",
-  "status.mute": "Mute @{name}",
+  "status.mention": "Згадати @{name}",
+  "status.more": "Більше",
+  "status.mute": "Заглушити @{name}",
   "status.mute_conversation": "Заглушити діалог",
   "status.open": "Розгорнути допис",
-  "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 to original audience",
+  "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.reblogs.empty": "Ніхто ще не передмухнув цього дмуху. Коли якісь користувачі це зроблять, вони будуть відображені тут.",
+  "status.redraft": "Видалити та перестворити",
   "status.reply": "Відповісти",
-  "status.replyAll": "Відповісти на тред",
-  "status.report": "Поскаржитися",
-  "status.sensitive_warning": "Непристойний зміст",
-  "status.share": "Share",
+  "status.replyAll": "Відповісти на ланцюжок",
+  "status.report": "Поскаржитися на @{name}",
+  "status.sensitive_warning": "Дражливий зміст",
+  "status.share": "Поділитися",
   "status.show_less": "Згорнути",
   "status.show_less_all": "Show less for all",
   "status.show_more": "Розгорнути",
   "status.show_more_all": "Show more for all",
-  "status.show_thread": "Show thread",
+  "status.show_thread": "Показати ланцюжок",
   "status.unmute_conversation": "Зняти глушення з діалогу",
-  "status.unpin": "Unpin from profile",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
+  "status.unpin": "Відкріпити від профілю",
+  "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.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",
-  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "time_remaining.seconds": "{number, plural, one {# секунда} few {# секунди} other {# секунд}}",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {людина} few {людини} many {людей} other {людей}} talking",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.",
   "upload_area.title": "Перетягніть сюди, щоб завантажити",
-  "upload_button.label": "Додати медіаконтент",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_button.label": "Додати медіаконтент ({formats})",
+  "upload_error.limit": "Ліміт завантаження файлів перевищено.",
+  "upload_error.poll": "Не можна завантажувати файли до опитувань.",
   "upload_form.description": "Опишіть для людей з вадами зору",
-  "upload_form.focus": "Обрізати",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "Видалити",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "Завантаження...",
   "video.close": "Закрити відео",
-  "video.exit_fullscreen": "Вийти з повного екрану",
+  "video.exit_fullscreen": "Вийти з повноекранного режиму",
   "video.expand": "Розширити відео",
   "video.fullscreen": "На весь екран",
   "video.hide": "Приховати відео",
diff --git a/app/javascript/mastodon/locales/whitelist_et.json b/app/javascript/mastodon/locales/whitelist_et.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_et.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index bb774f1aa..16848831c 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -4,6 +4,7 @@
   "account.block": "屏蔽 @{name}",
   "account.block_domain": "隐藏来自 {domain} 的内容",
   "account.blocked": "已屏蔽",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "发送私信给 @{name}",
   "account.domain_blocked": "网站已屏蔽",
   "account.edit_profile": "修改个人资料",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
   "alert.unexpected.message": "发生了意外错误。",
   "alert.unexpected.title": "哎呀!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
   "bundle_column_error.body": "载入这个组件时发生了错误。",
   "bundle_column_error.retry": "重试",
@@ -156,7 +158,7 @@
   "home.column_settings.basic": "基本设置",
   "home.column_settings.show_reblogs": "显示转嘟",
   "home.column_settings.show_replies": "显示回复",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "实时更新",
   "intervals.full.days": "{number} 天",
   "intervals.full.hours": "{number} 小时",
   "intervals.full.minutes": "{number} 分钟",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "用户目录",
   "navigation_bar.public_timeline": "跨站公共时间轴",
   "navigation_bar.security": "安全",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 收藏了你的嘟文",
   "notification.follow": "{name} 开始关注你",
   "notification.mention": "{name} 提及了你",
@@ -316,7 +319,7 @@
   "search_results.accounts": "用户",
   "search_results.hashtags": "话题标签",
   "search_results.statuses": "嘟文",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "此Mastodon服务器未启用嘟文内容搜索。",
   "search_results.total": "共 {count, number} 个结果",
   "status.admin_account": "打开 @{name} 的管理界面",
   "status.admin_status": "打开这条嘟文的管理界面",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "即将结束",
   "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
   "trends.count_by_accounts": "{count} 人正在讨论",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。",
   "upload_area.title": "将文件拖放到此处开始上传",
   "upload_button.label": "上传媒体文件 (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "文件大小超过限制。",
   "upload_error.poll": "投票中不允许上传文件。",
   "upload_form.description": "为视觉障碍人士添加文字说明",
-  "upload_form.focus": "设置缩略图",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "删除",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "上传中……",
   "video.close": "关闭视频",
   "video.exit_fullscreen": "退出全屏",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index b4c8b874a..f09ceffb3 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -4,6 +4,7 @@
   "account.block": "封鎖 @{name}",
   "account.block_domain": "隱藏來自 {domain} 的一切文章",
   "account.blocked": "封鎖",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "私訊 @{name}",
   "account.domain_blocked": "服務站被隱藏",
   "account.edit_profile": "修改個人資料",
@@ -37,6 +38,7 @@
   "account.unmute_notifications": "取消來自 @{name} 通知的靜音",
   "alert.unexpected.message": "發生不可預期的錯誤。",
   "alert.unexpected.title": "噢!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "如你想在下次路過這顯示,請按{combo},",
   "bundle_column_error.body": "加載本組件出錯。",
   "bundle_column_error.retry": "重試",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "跨站時間軸",
   "navigation_bar.security": "安全",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 收藏了你的文章",
   "notification.follow": "{name} 開始關注你",
   "notification.mention": "{name} 提及你",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "Moments remaining",
   "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
   "trends.count_by_accounts": "{count} 位用戶在討論",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
   "upload_area.title": "將檔案拖放至此上載",
   "upload_button.label": "上載媒體檔案",
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "為視覺障礙人士添加文字說明",
-  "upload_form.focus": "裁切",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "刪除",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "上載中……",
   "video.close": "關閉影片",
   "video.exit_fullscreen": "退出全熒幕",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 5f75b38d6..af988b320 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -1,22 +1,23 @@
 {
-  "account.add_or_remove_from_list": "從名單中新增或移除",
+  "account.add_or_remove_from_list": "從列表新增或移除",
   "account.badges.bot": "機器人",
   "account.block": "封鎖 @{name}",
-  "account.block_domain": "隱藏來自 {domain} 的所有嘟文",
+  "account.block_domain": "隱藏來自 {domain} 的所有內容",
   "account.blocked": "已封鎖",
+  "account.cancel_follow_request": "Cancel follow request",
   "account.direct": "傳私訊給 @{name}",
   "account.domain_blocked": "已隱藏網域",
   "account.edit_profile": "編輯個人資料",
   "account.endorse": "在個人資料推薦對方",
   "account.follow": "關注",
   "account.followers": "關注者",
-  "account.followers.empty": "還沒有人關注這位使用者。",
+  "account.followers.empty": "尚沒有人關注這位使用者。",
   "account.follows": "正在關注",
-  "account.follows.empty": "這個使用者尚未關注任何使用者。",
+  "account.follows.empty": "這位使用者尚未關注任何使用者。",
   "account.follows_you": "關注了你",
   "account.hide_reblogs": "隱藏來自 @{name} 的轉推",
-  "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} 已遷移至:",
@@ -33,22 +34,23 @@
   "account.unblock_domain": "取消隱藏 {domain}",
   "account.unendorse": "不再於個人資料頁面推薦對方",
   "account.unfollow": "取消關注",
-  "account.unmute": "不再靜音 @{name}",
-  "account.unmute_notifications": "不再靜音來自 @{name} 的通知",
+  "account.unmute": "取消靜音 @{name}",
+  "account.unmute_notifications": "重新接收來自 @{name} 的通知",
   "alert.unexpected.message": "發生了非預期的錯誤。",
   "alert.unexpected.title": "哎呀!",
+  "autosuggest_hashtag.per_week": "{count} per week",
   "boost_modal.combo": "下次您可以按 {combo} 跳過",
-  "bundle_column_error.body": "載入此組件時發生錯誤。",
+  "bundle_column_error.body": "載入此元件時發生錯誤。",
   "bundle_column_error.retry": "重試",
   "bundle_column_error.title": "網路錯誤",
   "bundle_modal_error.close": "關閉",
-  "bundle_modal_error.message": "載入此組件時發生錯誤。",
+  "bundle_modal_error.message": "載入此元件時發生錯誤。",
   "bundle_modal_error.retry": "重試",
   "column.blocks": "封鎖的使用者",
-  "column.community": "本地時間軸",
+  "column.community": "本機時間軸",
   "column.direct": "私訊",
   "column.domain_blocks": "隱藏的網域",
-  "column.favourites": "最愛",
+  "column.favourites": "收藏",
   "column.follow_requests": "關注請求",
   "column.home": "主頁",
   "column.lists": "名單",
@@ -64,44 +66,44 @@
   "column_header.show_settings": "顯示設定",
   "column_header.unpin": "取消釘選",
   "column_subheading.settings": "設定",
-  "community.column_settings.media_only": "僅媒體",
-  "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才能看到。",
+  "community.column_settings.media_only": "只有媒體",
+  "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。",
   "compose_form.direct_message_warning_learn_more": "了解更多",
-  "compose_form.hashtag_warning": "因這則嘟文設成「不公開」,因此它不會列在任何「#」標籤下。只有公開嘟文才能用「#」標籤找到。",
-  "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成僅關注者能看的嘟文。",
+  "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.option_placeholder": "第 {number} 個選擇",
   "compose_form.poll.remove_option": "移除此選擇",
-  "compose_form.publish": "嘟掉",
+  "compose_form.publish": "嘟出去",
   "compose_form.publish_loud": "{publish}!",
   "compose_form.sensitive.hide": "Mark media as sensitive",
   "compose_form.sensitive.marked": "此媒體被標記為敏感內容",
-  "compose_form.sensitive.unmarked": "此媒體未被標記為敏感內容",
-  "compose_form.spoiler.marked": "正文已隱藏在警告之後",
+  "compose_form.sensitive.unmarked": "此媒體未標記為敏感內容",
+  "compose_form.spoiler.marked": "正文已隱藏到警告之後",
   "compose_form.spoiler.unmarked": "正文未被隱藏",
   "compose_form.spoiler_placeholder": "請在此處寫入警告訊息",
   "confirmation_modal.cancel": "取消",
   "confirmations.block.block_and_report": "Block & Report",
   "confirmations.block.confirm": "封鎖",
-  "confirmations.block.message": "你確定要封鎖 {name} ?",
+  "confirmations.block.message": "確定封鎖 {name} ?",
   "confirmations.delete.confirm": "刪除",
   "confirmations.delete.message": "你確定要刪除這條嘟文?",
   "confirmations.delete_list.confirm": "刪除",
-  "confirmations.delete_list.message": "確定要永久刪除此名單?",
+  "confirmations.delete_list.message": "確定永久刪除此名單?",
   "confirmations.domain_block.confirm": "隱藏整個網域",
-  "confirmations.domain_block.message": "確定封鎖整個 {domain} 嗎?多數情況下,封鎖或靜音幾個特定使用者應該就能滿足你的需求了。您將不能在任何公開時間軸或通知中看到來自該網域的內容。來自該網域的關注者將被移除。",
+  "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。",
   "confirmations.mute.confirm": "靜音",
   "confirmations.mute.message": "確定靜音 {name} ?",
   "confirmations.redraft.confirm": "刪除並重新編輯",
-  "confirmations.redraft.message": "你確定要刪除這條嘟文並重新編輯它嗎?這麼做將失去轉嘟和最愛,而對原始嘟文的回覆將被孤立。",
+  "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。",
   "confirmations.reply.confirm": "回覆",
   "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?",
   "confirmations.unfollow.confirm": "取消關注",
   "confirmations.unfollow.message": "真的要取消關注 {name} 嗎?",
-  "embed.instructions": "要嵌入此嘟文,請將以下代碼貼進你的網站。",
+  "embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。",
   "embed.preview": "他會顯示成這樣:",
   "emoji_button.activity": "活動",
   "emoji_button.custom": "自訂",
@@ -109,7 +111,7 @@
   "emoji_button.food": "飲食",
   "emoji_button.label": "插入表情符號",
   "emoji_button.nature": "大自然",
-  "emoji_button.not_found": "就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "物件",
   "emoji_button.people": "使用者",
   "emoji_button.recent": "最常使用",
@@ -123,15 +125,15 @@
   "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!",
   "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
   "empty_column.domain_blocks": "尚未隱藏任何網域。",
-  "empty_column.favourited_statuses": "你還沒有將任何嘟文標為最愛。最愛的嘟文將顯示於此。",
-  "empty_column.favourites": "還沒有人將此嘟文標為最愛。如果有人標成最愛,則會顯示在這裡。",
-  "empty_column.follow_requests": "您尚未收到任何關注請求。收到時會顯示於此。",
-  "empty_column.hashtag": "這個「#」標籤下什麼都沒有。",
+  "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。",
+  "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。",
+  "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。",
+  "empty_column.hashtag": "這個主題標籤下什麼也沒有。",
   "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。",
   "empty_column.home.public_timeline": "公開時間軸",
-  "empty_column.list": "此份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會出現在這裡。",
-  "empty_column.lists": "你還沒有建立任何名單。你建立的名單將會顯示在這裡。",
-  "empty_column.mutes": "你還沒有靜音任何使用者。",
+  "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。",
+  "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。",
+  "empty_column.mutes": "你尚未靜音任何使用者。",
   "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。",
   "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了",
   "follow_request.authorize": "授權",
@@ -146,61 +148,61 @@
   "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_header.tag_mode.none": "而無需{additional}",
   "hashtag.column_settings.select.no_options_message": "找不到建議",
-  "hashtag.column_settings.select.placeholder": "輸入「#」標籤…",
+  "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": "對此欄位加入額外標籤",
+  "hashtag.column_settings.tag_mode.none": "全不",
+  "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位",
   "home.column_settings.basic": "基本",
-  "home.column_settings.show_reblogs": "顯示轉推",
+  "home.column_settings.show_reblogs": "顯示轉嘟",
   "home.column_settings.show_replies": "顯示回覆",
   "home.column_settings.update_live": "Update in real-time",
   "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.federated.headline": "站台聯盟",
+  "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。",
   "introduction.federation.home.headline": "首頁",
-  "introduction.federation.home.text": "您所關注使用者所發的嘟文將顯示在首頁的訊息來源。您能關注任何伺服器上的任何人!",
-  "introduction.federation.local.headline": "本地",
-  "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本地時間軸中。",
+  "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.favourite.headline": "關注",
+  "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。",
   "introduction.interactions.reblog.headline": "轉嘟",
-  "introduction.interactions.reblog.text": "您能透過轉嘟他人嘟文來分享給您的關注者。",
+  "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。",
   "introduction.interactions.reply.headline": "回覆",
-  "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文。將會把這些回覆串成一串對話。",
-  "introduction.welcome.action": "開始!",
+  "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。",
+  "introduction.welcome.action": "開始旅程吧!",
   "introduction.welcome.headline": "第一步",
-  "introduction.welcome.text": "歡迎來到聯邦!稍候您將可以廣播訊息並跨各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},十分特殊 -- 它寄管了您的個人資料,所以請記住這台伺服器的名稱。",
+  "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。",
   "keyboard_shortcuts.back": "返回上一頁",
-  "keyboard_shortcuts.blocked": "開啟「封鎖的使用者」名單",
+  "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單",
   "keyboard_shortcuts.boost": "轉嘟",
   "keyboard_shortcuts.column": "將焦點放在其中一欄的嘟文",
   "keyboard_shortcuts.compose": "將焦點移至撰寫文字區塊",
   "keyboard_shortcuts.description": "描述",
   "keyboard_shortcuts.direct": "開啟私訊欄",
-  "keyboard_shortcuts.down": "在名單中往下移動",
+  "keyboard_shortcuts.down": "往下移動名單項目",
   "keyboard_shortcuts.enter": "檢視嘟文",
-  "keyboard_shortcuts.favourite": "加入最愛",
-  "keyboard_shortcuts.favourites": "開啟最愛名單",
-  "keyboard_shortcuts.federated": "開啟聯邦時間軸",
+  "keyboard_shortcuts.favourite": "收藏",
+  "keyboard_shortcuts.favourites": "開啟收藏名單",
+  "keyboard_shortcuts.federated": "開啟站點聯盟時間軸",
   "keyboard_shortcuts.heading": "鍵盤快速鍵",
   "keyboard_shortcuts.home": "開啟首頁時間軸",
   "keyboard_shortcuts.hotkey": "快速鍵",
-  "keyboard_shortcuts.legend": "顯示此說明",
-  "keyboard_shortcuts.local": "開啟本地時間軸",
+  "keyboard_shortcuts.legend": "顯示此列表",
+  "keyboard_shortcuts.local": "開啟本機時間軸",
   "keyboard_shortcuts.mention": "提及作者",
   "keyboard_shortcuts.muted": "開啟靜音使用者名單",
   "keyboard_shortcuts.my_profile": "開啟個人資料頁面",
   "keyboard_shortcuts.notifications": "開啟通知欄",
   "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單",
-  "keyboard_shortcuts.profile": "開啟作者的個人資料頁",
-  "keyboard_shortcuts.reply": "回應嘟文",
+  "keyboard_shortcuts.profile": "開啟作者的個人資料頁面",
+  "keyboard_shortcuts.reply": "回覆",
   "keyboard_shortcuts.requests": "開啟關注請求名單",
   "keyboard_shortcuts.search": "將焦點移至搜尋框",
   "keyboard_shortcuts.start": "開啟「開始使用」欄位",
@@ -208,7 +210,7 @@
   "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
   "keyboard_shortcuts.toot": "開始發出新嘟文",
   "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點",
-  "keyboard_shortcuts.up": "在名單中往上移動",
+  "keyboard_shortcuts.up": "往上移動名單項目",
   "lightbox.close": "關閉",
   "lightbox.next": "下一步",
   "lightbox.previous": "上一步",
@@ -227,16 +229,16 @@
   "media_gallery.toggle_visible": "切換可見性",
   "missing_indicator.label": "找不到",
   "missing_indicator.sublabel": "找不到此資源",
-  "mute_modal.hide_notifications": "隱藏來自這個使用者的通知?",
-  "navigation_bar.apps": "行動應用程式",
-  "navigation_bar.blocks": "封鎖的使用者",
-  "navigation_bar.community_timeline": "本地時間軸",
+  "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?",
+  "navigation_bar.apps": "封鎖的使用者",
+  "navigation_bar.blocks": "封鎖使用者",
+  "navigation_bar.community_timeline": "本機時間軸",
   "navigation_bar.compose": "撰寫新嘟文",
   "navigation_bar.direct": "私訊",
   "navigation_bar.discover": "探索",
   "navigation_bar.domain_blocks": "隱藏的網域",
   "navigation_bar.edit_profile": "編輯個人資料",
-  "navigation_bar.favourites": "最愛內容",
+  "navigation_bar.favourites": "收藏",
   "navigation_bar.filters": "靜音詞彙",
   "navigation_bar.follow_requests": "關注請求",
   "navigation_bar.follows_and_followers": "Follows and followers",
@@ -251,6 +253,7 @@
   "navigation_bar.profile_directory": "Profile directory",
   "navigation_bar.public_timeline": "聯邦時間軸",
   "navigation_bar.security": "安全性",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 把你的嘟文加入了最愛",
   "notification.follow": "{name} 關注了你",
   "notification.mention": "{name} 提到了你",
@@ -370,14 +373,22 @@
   "time_remaining.moments": "剩餘時間",
   "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}",
   "trends.count_by_accounts": "{count} 位使用者在討論",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
   "upload_area.title": "拖放來上傳",
   "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "已達到檔案上傳限制。",
   "upload_error.poll": "不允許在投票上傳檔案。",
   "upload_form.description": "為視障人士增加文字說明",
-  "upload_form.focus": "變更預覽",
+  "upload_form.edit": "Edit",
   "upload_form.undo": "刪除",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "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.preview_label": "Preview ({ratio})",
   "upload_progress.label": "上傳中...",
   "video.close": "關閉影片",
   "video.exit_fullscreen": "退出全螢幕",
diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js
index 3b60878eb..0f4b209d4 100644
--- a/app/javascript/mastodon/reducers/index.js
+++ b/app/javascript/mastodon/reducers/index.js
@@ -32,6 +32,7 @@ import suggestions from './suggestions';
 import polls from './polls';
 import identity_proofs from './identity_proofs';
 import trends from './trends';
+import missed_updates from './missed_updates';
 
 const reducers = {
   dropdown_menu,
@@ -67,6 +68,7 @@ const reducers = {
   suggestions,
   polls,
   trends,
+  missed_updates,
 };
 
 export default combineReducers(reducers);
diff --git a/app/javascript/mastodon/reducers/missed_updates.js b/app/javascript/mastodon/reducers/missed_updates.js
new file mode 100644
index 000000000..b71d62d82
--- /dev/null
+++ b/app/javascript/mastodon/reducers/missed_updates.js
@@ -0,0 +1,21 @@
+import { Map as ImmutableMap } from 'immutable';
+import { NOTIFICATIONS_UPDATE } from 'mastodon/actions/notifications';
+import { APP_FOCUS, APP_UNFOCUS } from 'mastodon/actions/app';
+
+const initialState = ImmutableMap({
+  focused: true,
+  unread: 0,
+});
+
+export default function missed_updates(state = initialState, action) {
+  switch(action.type) {
+  case APP_FOCUS:
+    return state.set('focused', true).set('unread', 0);
+  case APP_UNFOCUS:
+    return state.set('focused', false);
+  case NOTIFICATIONS_UPDATE:
+    return state.get('focused') ? state : state.update('unread', x => x + 1);
+  default:
+    return state;
+  }
+};
diff --git a/app/javascript/mastodon/utils/numbers.js b/app/javascript/mastodon/utils/numbers.js
index fdd8269ae..f7e4ceb93 100644
--- a/app/javascript/mastodon/utils/numbers.js
+++ b/app/javascript/mastodon/utils/numbers.js
@@ -4,7 +4,9 @@ import { FormattedNumber } from 'react-intl';
 export const shortNumberFormat = number => {
   if (number < 1000) {
     return <FormattedNumber value={number} />;
-  } else {
+  } else if (number < 1000000) {
     return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>;
+  } else {
+    return <Fragment><FormattedNumber value={number / 1000000} maximumFractionDigits={1} />M</Fragment>;
   }
 };
diff --git a/app/javascript/mastodon/utils/resize_image.js b/app/javascript/mastodon/utils/resize_image.js
index a8ec5f3fa..7196dc96b 100644
--- a/app/javascript/mastodon/utils/resize_image.js
+++ b/app/javascript/mastodon/utils/resize_image.js
@@ -31,7 +31,7 @@ const loadImage = inputFile => new Promise((resolve, reject) => {
 });
 
 const getOrientation = (img, type = 'image/png') => new Promise(resolve => {
-  if (!['image/jpeg', 'image/webp'].includes(type)) {
+  if (type !== 'image/jpeg') {
     resolve(1);
     return;
   }
@@ -71,7 +71,7 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) =
   // and return an all-white image instead. Assume reading failed if the resized
   // image is perfectly white.
   const imageData = context.getImageData(0, 0, width, height);
-  if (imageData.every(value => value === 255)) {
+  if (imageData.data.every(value => value === 255)) {
     throw 'Failed to read from canvas';
   }
 
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index 6aea119e3..e49dcaadb 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -100,6 +100,15 @@ function main() {
 
     delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original'));
     delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static'));
+
+    delegate(document, '.blocks-table button.icon-button', 'click', function(e) {
+      e.preventDefault();
+
+      const classList = this.firstElementChild.classList;
+      classList.toggle('fa-chevron-down');
+      classList.toggle('fa-chevron-up');
+      this.parentElement.parentElement.nextElementSibling.classList.toggle('hidden');
+    });
   });
 }
 
diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss
index 7b983efab..f9332caa3 100644
--- a/app/javascript/styles/mastodon/basics.scss
+++ b/app/javascript/styles/mastodon/basics.scss
@@ -150,7 +150,7 @@ button {
 .layout-single-column .app-holder {
   &,
   & > div {
-    min-height: 100%;
+    min-height: 100vh;
   }
 }
 
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 2d04aeca7..5c30c1295 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -3,6 +3,27 @@
   -ms-overflow-style: -ms-autohiding-scrollbar;
 }
 
+.link-button {
+  display: block;
+  font-size: 15px;
+  line-height: 20px;
+  color: $ui-highlight-color;
+  border: 0;
+  background: transparent;
+  padding: 0;
+  cursor: pointer;
+
+  &:hover,
+  &:active {
+    text-decoration: underline;
+  }
+
+  &:disabled {
+    color: $ui-primary-color;
+    cursor: default;
+  }
+}
+
 .button {
   background-color: $ui-highlight-color;
   border: 10px none;
@@ -482,9 +503,21 @@
   .autosuggest-hashtag {
     justify-content: space-between;
 
+    &__name {
+      flex: 1 1 auto;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
     strong {
       font-weight: 500;
     }
+
+    &__uses {
+      flex: 0 0 auto;
+      width: 80px;
+      text-align: right;
+    }
   }
 
   .autosuggest-account-icon,
@@ -637,18 +670,6 @@
     .character-counter__wrapper {
       align-self: center;
       margin-right: 4px;
-
-      .character-counter {
-        cursor: default;
-        font-family: $font-sans-serif, sans-serif;
-        font-size: 14px;
-        font-weight: 600;
-        color: $lighter-text-color;
-
-        &.character-counter--over {
-          color: $warning-red;
-        }
-      }
     }
   }
 
@@ -665,6 +686,18 @@
   }
 }
 
+.character-counter {
+  cursor: default;
+  font-family: $font-sans-serif, sans-serif;
+  font-size: 14px;
+  font-weight: 600;
+  color: $lighter-text-color;
+
+  &.character-counter--over {
+    color: $warning-red;
+  }
+}
+
 .no-reduce-motion .spoiler-input {
   transition: height 0.4s ease, opacity 0.4s ease;
 }
@@ -4513,7 +4546,8 @@ a.status-card.compact:hover {
   }
 }
 
-.report-modal__statuses {
+.report-modal__statuses,
+.focal-point-modal__content {
   flex: 1 1 auto;
   min-height: 20vh;
   max-height: 80vh;
@@ -4534,6 +4568,12 @@ a.status-card.compact:hover {
   }
 }
 
+.focal-point-modal__content {
+  @media screen and (max-width: 480px) {
+    max-height: 40vh;
+  }
+}
+
 .report-modal__comment {
   padding: 20px;
   border-right: 1px solid $ui-secondary-color;
@@ -4555,16 +4595,56 @@ a.status-card.compact:hover {
     padding: 10px;
     font-family: inherit;
     font-size: 14px;
-    resize: vertical;
+    resize: none;
     border: 0;
     outline: 0;
     border-radius: 4px;
     border: 1px solid $ui-secondary-color;
-    margin-bottom: 20px;
+    min-height: 100px;
+    max-height: 50vh;
+    margin-bottom: 10px;
 
     &:focus {
       border: 1px solid darken($ui-secondary-color, 8%);
     }
+
+    &__wrapper {
+      background: $white;
+      border: 1px solid $ui-secondary-color;
+      margin-bottom: 10px;
+      border-radius: 4px;
+
+      .setting-text {
+        border: 0;
+        margin-bottom: 0;
+        border-radius: 0;
+
+        &:focus {
+          border: 0;
+        }
+      }
+
+      &__modifiers {
+        color: $inverted-text-color;
+        font-family: inherit;
+        font-size: 14px;
+        background: $white;
+      }
+    }
+
+    &__toolbar {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 20px;
+    }
+  }
+
+  .setting-text-label {
+    display: block;
+    color: $inverted-text-color;
+    font-size: 14px;
+    font-weight: 500;
+    margin-bottom: 10px;
   }
 
   .setting-toggle {
@@ -4688,10 +4768,10 @@ a.status-card.compact:hover {
 }
 
 .report-modal__target {
-  padding: 20px;
+  padding: 15px;
 
   .media-modal__close {
-    top: 19px;
+    top: 14px;
     right: 15px;
   }
 }
@@ -4702,6 +4782,7 @@ a.status-card.compact:hover {
   position: absolute;
   top: 0;
   left: 0;
+  z-index: 9999;
 }
 
 .media-gallery__gifv__label {
@@ -4960,6 +5041,10 @@ a.status-card.compact:hover {
   max-width: 100%;
   border-radius: 4px;
 
+  &.editable {
+    border-radius: 0;
+  }
+
   &:focus {
     outline: 0;
   }
@@ -5688,27 +5773,25 @@ noscript {
   }
 }
 
-.focal-point-modal {
-  max-width: 80vw;
-  max-height: 80vh;
-  position: relative;
-}
-
 .focal-point {
   position: relative;
-  cursor: pointer;
+  cursor: move;
   overflow: hidden;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: $base-shadow-color;
 
-  &.dragging {
-    cursor: move;
-  }
-
-  img {
-    max-width: 80vw;
+  img,
+  video {
+    display: block;
     max-height: 80vh;
-    width: auto;
+    width: 100%;
     height: auto;
-    margin: auto;
+    margin: 0;
+    object-fit: contain;
+    background: $base-shadow-color;
   }
 
   &__reticle {
@@ -5728,6 +5811,43 @@ noscript {
     top: 0;
     left: 0;
   }
+
+  &__preview {
+    position: absolute;
+    bottom: 10px;
+    right: 10px;
+    z-index: 2;
+    cursor: move;
+    transition: opacity 0.1s ease;
+
+    &:hover {
+      opacity: 0.5;
+    }
+
+    strong {
+      color: $primary-text-color;
+      font-size: 14px;
+      font-weight: 500;
+      display: block;
+      margin-bottom: 5px;
+    }
+
+    div {
+      border-radius: 4px;
+      box-shadow: 0 0 14px rgba($base-shadow-color, 0.2);
+    }
+  }
+
+  @media screen and (max-width: 480px) {
+    img,
+    video {
+      max-height: 100%;
+    }
+
+    &__preview {
+      display: none;
+    }
+  }
 }
 
 .account__header__content {
@@ -5980,12 +6100,12 @@ noscript {
 
     &__current {
       flex: 0 0 auto;
-      width: 100px;
       font-size: 24px;
       line-height: 36px;
       font-weight: 500;
       text-align: right;
       padding-right: 15px;
+      margin-left: 5px;
       color: $secondary-text-color;
     }
 
diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss
index 11ac6dfeb..fe6beba5d 100644
--- a/app/javascript/styles/mastodon/tables.scss
+++ b/app/javascript/styles/mastodon/tables.scss
@@ -241,3 +241,70 @@ a.table-action-link {
     }
   }
 }
+
+.blocks-table {
+  width: 100%;
+  max-width: 100%;
+  border-spacing: 0;
+  border-collapse: collapse;
+  table-layout: fixed;
+  border: 1px solid darken($ui-base-color, 8%);
+
+  thead {
+    border: 1px solid darken($ui-base-color, 8%);
+    background: darken($ui-base-color, 4%);
+    font-weight: 500;
+
+    th.severity-column {
+      width: 120px;
+    }
+
+    th.button-column {
+      width: 23px;
+    }
+  }
+
+  tbody > tr {
+    border: 1px solid darken($ui-base-color, 8%);
+    border-bottom: 0;
+    background: darken($ui-base-color, 4%);
+
+    &:hover {
+      background: darken($ui-base-color, 2%);
+    }
+
+    &.even {
+      background: $ui-base-color;
+
+      &:hover {
+        background: lighten($ui-base-color, 2%);
+      }
+    }
+
+    &.rationale {
+      background: lighten($ui-base-color, 4%);
+      border-top: 0;
+
+      &:hover {
+        background: lighten($ui-base-color, 6%);
+      }
+
+      &.hidden {
+        display: none;
+      }
+    }
+
+    td:first-child {
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+  }
+
+  th,
+  td {
+    padding: 8px;
+    line-height: 18px;
+    vertical-align: top;
+    text-align: left;
+  }
+}
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index 8c30bc57c..04beb869c 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -100,6 +100,16 @@
       background-size: 44px 44px;
     }
   }
+
+  .trends__item {
+    padding: 10px;
+  }
+}
+
+.trends-widget {
+  h4 {
+    color: $darker-text-color;
+  }
 }
 
 .box-widget {
@@ -109,6 +119,15 @@
   box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
 }
 
+.placeholder-widget {
+  padding: 16px;
+  border-radius: 4px;
+  border: 2px dashed $dark-text-color;
+  text-align: center;
+  color: $darker-text-color;
+  margin-bottom: 10px;
+}
+
 .contact-widget,
 .landing-page__information.contact-widget {
   box-sizing: border-box;
@@ -526,6 +545,12 @@ $fluid-breakpoint: $maximum-width + 20px;
   a {
     font-size: 14px;
     line-height: 20px;
+  }
+}
+
+.notice-widget,
+.placeholder-widget {
+  a {
     text-decoration: none;
     font-weight: 500;
     color: $ui-highlight-color;
diff --git a/app/lib/search_query_parser.rb b/app/lib/search_query_parser.rb
index 405ad15b8..15956d4cf 100644
--- a/app/lib/search_query_parser.rb
+++ b/app/lib/search_query_parser.rb
@@ -1,14 +1,15 @@
 # frozen_string_literal: true
 
 class SearchQueryParser < Parslet::Parser
-  rule(:term)     { match('[^\s":]').repeat(1).as(:term) }
-  rule(:quote)    { str('"') }
-  rule(:colon)    { str(':') }
-  rule(:space)    { match('\s').repeat(1) }
-  rule(:operator) { (str('+') | str('-')).as(:operator) }
-  rule(:prefix)   { (term >> colon).as(:prefix) }
-  rule(:phrase)   { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) }
-  rule(:clause)   { (prefix.maybe >> operator.maybe >> (phrase | term)).as(:clause) }
-  rule(:query)    { (clause >> space.maybe).repeat.as(:query) }
+  rule(:term)      { match('[^\s":]').repeat(1).as(:term) }
+  rule(:quote)     { str('"') }
+  rule(:colon)     { str(':') }
+  rule(:space)     { match('\s').repeat(1) }
+  rule(:operator)  { (str('+') | str('-')).as(:operator) }
+  rule(:prefix)    { (term >> colon).as(:prefix) }
+  rule(:shortcode) { (colon >> term >> colon.maybe).as(:shortcode) }
+  rule(:phrase)    { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) }
+  rule(:clause)    { (prefix.maybe >> operator.maybe >> (phrase | term | shortcode)).as(:clause) }
+  rule(:query)     { (clause >> space.maybe).repeat.as(:query) }
   root(:query)
 end
diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb
index 2c4144790..6a299f59d 100644
--- a/app/lib/search_query_transformer.rb
+++ b/app/lib/search_query_transformer.rb
@@ -75,6 +75,8 @@ class SearchQueryTransformer < Parslet::Transform
 
     if clause[:term]
       TermClause.new(prefix, operator, clause[:term].to_s)
+    elsif clause[:shortcode]
+      TermClause.new(prefix, operator, ":#{clause[:term]}:")
     elsif clause[:phrase]
       PhraseClause.new(prefix, operator, clause[:phrase].map { |p| p[:term].to_s }.join(' '))
     else
diff --git a/app/models/account.rb b/app/models/account.rb
index 38379d20e..9d938c55d 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -131,6 +131,8 @@ class Account < ApplicationRecord
 
   delegate :chosen_languages, to: :user, prefix: false, allow_nil: true
 
+  update_index('accounts#account', :self) if Chewy.enabled?
+
   def local?
     domain.nil?
   end
@@ -173,6 +175,10 @@ class Account < ApplicationRecord
     subscription_expires_at.present?
   end
 
+  def searchable?
+    !(suspended? || moved?)
+  end
+
   def possibly_stale?
     last_webfingered_at.nil? || last_webfingered_at <= 1.day.ago
   end
diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb
index 9813aa84f..6d1097cec 100644
--- a/app/models/account_stat.rb
+++ b/app/models/account_stat.rb
@@ -16,6 +16,8 @@
 class AccountStat < ApplicationRecord
   belongs_to :account, inverse_of: :account_stat
 
+  update_index('accounts#account', :account) if Chewy.enabled?
+
   def increment_count!(key)
     update(attributes_for_increment(key))
   end
diff --git a/app/models/concerns/account_avatar.rb b/app/models/concerns/account_avatar.rb
index 5fff3ef5d..2d5ebfca3 100644
--- a/app/models/concerns/account_avatar.rb
+++ b/app/models/concerns/account_avatar.rb
@@ -3,7 +3,7 @@
 module AccountAvatar
   extend ActiveSupport::Concern
 
-  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
+  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
   LIMIT = 2.megabytes
 
   class_methods do
diff --git a/app/models/concerns/account_counters.rb b/app/models/concerns/account_counters.rb
index 3581df8dd..6e25e1905 100644
--- a/app/models/concerns/account_counters.rb
+++ b/app/models/concerns/account_counters.rb
@@ -26,7 +26,8 @@ module AccountCounters
   private
 
   def save_account_stat
-    return unless account_stat&.changed?
+    return unless association(:account_stat).loaded? && account_stat&.changed?
+
     account_stat.save
   end
 end
diff --git a/app/models/concerns/account_header.rb b/app/models/concerns/account_header.rb
index a748fdff7..067e166eb 100644
--- a/app/models/concerns/account_header.rb
+++ b/app/models/concerns/account_header.rb
@@ -3,7 +3,7 @@
 module AccountHeader
   extend ActiveSupport::Concern
 
-  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
+  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
   LIMIT = 2.megabytes
   MAX_PIXELS = 750_000 # 1500x500px
 
diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb
index 7c78bb456..246c2c27c 100644
--- a/app/models/concerns/attachmentable.rb
+++ b/app/models/concerns/attachmentable.rb
@@ -43,7 +43,7 @@ module Attachmentable
 
       width, height = FastImage.size(attachment.queued_for_write[:original].path)
 
-      raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height >= MAX_MATRIX_LIMIT)
+      raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported, must be below #{MAX_MATRIX_LIMIT} sqpx" if width.present? && height.present? && (width * height >= MAX_MATRIX_LIMIT)
     end
   end
 
diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb
index 643a7e46a..b21ad9042 100644
--- a/app/models/custom_emoji.rb
+++ b/app/models/custom_emoji.rb
@@ -28,7 +28,7 @@ class CustomEmoji < ApplicationRecord
     :(#{SHORTCODE_RE_FRAGMENT}):
     (?=[^[:alnum:]:]|$)/x
 
-  IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze
+  IMAGE_MIME_TYPES = %w(image/png image/gif).freeze
 
   belongs_to :category, class_name: 'CustomEmojiCategory', optional: true
   has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode
diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb
index 37b8d98c6..4383cbd05 100644
--- a/app/models/domain_block.rb
+++ b/app/models/domain_block.rb
@@ -25,6 +25,7 @@ class DomainBlock < ApplicationRecord
   delegate :count, to: :accounts, prefix: true
 
   scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
+  scope :with_user_facing_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)) }
 
   class << self
     def suspend?(domain)
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index 2c3a7f13b..57dd3edd9 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -36,6 +36,8 @@ class Form::AdminSettings
     show_replies_in_public_timelines
     spam_check_enabled
     trends
+    show_domain_blocks
+    show_domain_blocks_rationale
   ).freeze
 
   BOOLEAN_KEYS = %i(
@@ -74,6 +76,8 @@ class Form::AdminSettings
   validates :site_contact_email, :site_contact_username, presence: true
   validates :site_contact_username, existing_username: true
   validates :bootstrap_timeline_accounts, existing_username: { multiple: true }
+  validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }
+  validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }
 
   def initialize(_attributes = {})
     super
diff --git a/app/models/invite.rb b/app/models/invite.rb
index 02ab8e0b2..29d25eae8 100644
--- a/app/models/invite.rb
+++ b/app/models/invite.rb
@@ -12,6 +12,7 @@
 #  created_at :datetime         not null
 #  updated_at :datetime         not null
 #  autofollow :boolean          default(FALSE), not null
+#  comment    :text
 #
 
 class Invite < ApplicationRecord
@@ -22,6 +23,8 @@ class Invite < ApplicationRecord
 
   scope :available, -> { where(expires_at: nil).or(where('expires_at >= ?', Time.now.utc)) }
 
+  validates :comment, length: { maximum: 420 }
+
   before_validation :set_code
 
   def valid_for_use?
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index be762889c..d03751fd3 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -26,11 +26,11 @@ class MediaAttachment < ApplicationRecord
 
   enum type: [:image, :gifv, :video, :unknown, :audio]
 
-  IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif .webp).freeze
+  IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze
   VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze
   AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp).freeze
 
-  IMAGE_MIME_TYPES             = %w(image/jpeg image/png image/gif image/webp).freeze
+  IMAGE_MIME_TYPES             = %w(image/jpeg image/png image/gif).freeze
   VIDEO_MIME_TYPES             = %w(video/webm video/mp4 video/quicktime video/ogg).freeze
   VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze
   AUDIO_MIME_TYPES             = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/ogg audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/3gpp).freeze
diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb
index f26ea0c74..a792b352b 100644
--- a/app/models/preview_card.rb
+++ b/app/models/preview_card.rb
@@ -25,7 +25,7 @@
 #
 
 class PreviewCard < ApplicationRecord
-  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
+  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
   LIMIT = 1.megabytes
 
   self.inheritance_column = false
diff --git a/app/models/status.rb b/app/models/status.rb
index 642d3cf5e..de790027d 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -455,13 +455,16 @@ class Status < ApplicationRecord
     '👁'
   end
 
+  def status_stat
+    super || build_status_stat
+  end
+
   private
 
   def update_status_stat!(attrs)
     return if marked_for_destruction? || destroyed?
 
-    record = status_stat || build_status_stat
-    record.update(attrs)
+    status_stat.update(attrs)
   end
 
   def store_uri
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 1364d1dba..5094d973d 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -13,6 +13,8 @@
 #  listable            :boolean
 #  reviewed_at         :datetime
 #  requested_review_at :datetime
+#  last_status_at      :datetime
+#  last_trend_at       :datetime
 #
 
 class Tag < ApplicationRecord
@@ -33,7 +35,8 @@ class Tag < ApplicationRecord
   scope :unreviewed, -> { where(reviewed_at: nil) }
   scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
   scope :usable, -> { where(usable: [true, nil]) }
-  scope :discoverable, -> { where(listable: [true, nil]).joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
+  scope :listable, -> { where(listable: [true, nil]) }
+  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 :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) }
 
   delegate :accounts_count,
@@ -44,6 +47,8 @@ class Tag < ApplicationRecord
 
   after_save :save_account_tag_stat
 
+  update_index('tags#tag', :self) if Chewy.enabled?
+
   def account_tag_stat
     super || build_account_tag_stat
   end
@@ -121,9 +126,10 @@ class Tag < ApplicationRecord
       normalized_term = normalize(term.strip).mb_chars.downcase.to_s
       pattern         = sanitize_sql_like(normalized_term) + '%'
 
-      Tag.where(arel_table[:name].lower.matches(pattern))
-         .where(arel_table[:score].gt(0).or(arel_table[:name].lower.eq(normalized_term)))
-         .order(Arel.sql('length(name) ASC, score DESC, name ASC'))
+      Tag.listable
+         .where(arel_table[:name].lower.matches(pattern))
+         .where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil)))
+         .order(Arel.sql('length(name) ASC, name ASC'))
          .limit(limit)
          .offset(offset)
     end
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index 3d60a7fea..e4ce988c1 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -17,6 +17,9 @@ class TrendingTags
       increment_historical_use!(tag.id, at_time)
       increment_unique_use!(tag.id, account.id, at_time)
       increment_vote!(tag, at_time)
+
+      tag.update(last_status_at: Time.now.utc) if tag.last_status_at.nil? || tag.last_status_at < 12.hours.ago
+      tag.update(last_trend_at: Time.now.utc)  if trending?(tag) && (tag.last_trend_at.nil? || tag.last_trend_at < 12.hours.ago)
     end
 
     def get(limit, filtered: true)
diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb
index 61fa77852..067ba5c32 100644
--- a/app/serializers/activitypub/note_serializer.rb
+++ b/app/serializers/activitypub/note_serializer.rb
@@ -56,7 +56,7 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
         type: :unordered,
         part_of: ActivityPub::TagManager.instance.replies_uri_for(object),
         items: replies.map(&:second),
-        next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : nil
+        next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : ActivityPub::TagManager.instance.replies_uri_for(object, page: true, only_other_accounts: true)
       )
     )
   end
diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb
index c8f6bec7a..d40fe3380 100644
--- a/app/serializers/initial_state_serializer.rb
+++ b/app/serializers/initial_state_serializer.rb
@@ -26,6 +26,7 @@ class InitialStateSerializer < ActiveModel::Serializer
       access_token: object.token,
       locale: I18n.locale,
       domain: Rails.configuration.x.local_domain,
+      title: instance_presenter.site_title,
       admin: object.admin&.id&.to_s,
       search_enabled: Chewy.enabled?,
       repository: Mastodon::Version.repository,
@@ -54,6 +55,11 @@ class InitialStateSerializer < ActiveModel::Serializer
       store[:trends]            = Setting.trends && object.current_account.user.setting_trends
       store[:default_content_type] = object.current_account.user.setting_default_content_type
       store[:system_emoji_font] = object.current_account.user.setting_system_emoji_font
+    else
+      store[:auto_play_gif] = Setting.auto_play_gif
+      store[:display_media] = Setting.display_media
+      store[:reduce_motion] = Setting.reduce_motion
+      store[:use_blurhash]  = Setting.use_blurhash
     end
 
     store
diff --git a/app/serializers/rss/account_serializer.rb b/app/serializers/rss/account_serializer.rb
index 278affe13..680d9de6f 100644
--- a/app/serializers/rss/account_serializer.rb
+++ b/app/serializers/rss/account_serializer.rb
@@ -5,12 +5,12 @@ class RSS::AccountSerializer
   include StatusesHelper
   include RoutingHelper
 
-  def render(account, statuses)
+  def render(account, statuses, tag)
     builder = RSSBuilder.new
 
     builder.title("#{display_name(account)} (@#{account.local_username_and_domain})")
            .description(account_description(account))
-           .link(ActivityPub::TagManager.instance.url_for(account))
+           .link(tag.present? ? short_account_tag_url(account, tag) : short_account_url(account))
            .logo(full_pack_url('media/images/logo.svg'))
            .accent_color('2b90d9')
 
@@ -33,7 +33,7 @@ class RSS::AccountSerializer
     builder.to_xml
   end
 
-  def self.render(account, statuses)
-    new.render(account, statuses)
+  def self.render(account, statuses, tag)
+    new.render(account, statuses, tag)
   end
 end
diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb
index e1874d045..01caaefa9 100644
--- a/app/services/account_search_service.rb
+++ b/app/services/account_search_service.rb
@@ -4,105 +4,134 @@ class AccountSearchService < BaseService
   attr_reader :query, :limit, :offset, :options, :account
 
   def call(query, account = nil, options = {})
-    @query   = query.strip
-    @limit   = options[:limit].to_i
-    @offset  = options[:offset].to_i
-    @options = options
-    @account = account
+    @acct_hint = query.start_with?('@')
+    @query     = query.strip.gsub(/\A@/, '')
+    @limit     = options[:limit].to_i
+    @offset    = options[:offset].to_i
+    @options   = options
+    @account   = account
 
-    search_service_results
+    search_service_results.compact.uniq
   end
 
   private
 
   def search_service_results
-    return [] if query_blank_or_hashtag? || limit < 1
+    return [] if query.blank? || limit < 1
 
-    if resolving_non_matching_remote_account?
-      [ResolveAccountService.new.call("#{query_username}@#{query_domain}")].compact
-    else
-      search_results_and_exact_match.compact.uniq
-    end
+    [exact_match] + search_results
   end
 
-  def resolving_non_matching_remote_account?
-    offset.zero? && options[:resolve] && !exact_match? && !domain_is_local?
-  end
+  def exact_match
+    return unless offset.zero? && username_complete?
 
-  def search_results_and_exact_match
-    return search_results.to_a unless offset.zero?
+    return @exact_match if defined?(@exact_match)
 
-    results = [exact_match]
+    @exact_match = begin
+      if options[:resolve]
+        ResolveAccountService.new.call(query)
+      elsif domain_is_local?
+        Account.find_local(query_username)
+      else
+        Account.find_remote(query_username, query_domain)
+      end
+    end
+  end
 
-    return results if exact_match? && limit == 1
+  def search_results
+    return [] if limit_for_non_exact_results.zero?
 
-    results + search_results.to_a
+    @search_results ||= begin
+      if Chewy.enabled?
+        from_elasticsearch
+      else
+        from_database
+      end
+    end
   end
 
-  def query_blank_or_hashtag?
-    query.blank? || query.start_with?('#')
+  def from_database
+    if account
+      advanced_search_results
+    else
+      simple_search_results
+    end
   end
 
-  def split_query_string
-    @split_query_string ||= query.gsub(/\A@/, '').split('@')
+  def advanced_search_results
+    Account.advanced_search_for(terms_for_query, account, limit_for_non_exact_results, options[:following], offset)
   end
 
-  def query_username
-    @query_username ||= split_query_string.first || ''
+  def simple_search_results
+    Account.search_for(terms_for_query, limit_for_non_exact_results, offset)
   end
 
-  def query_domain
-    @query_domain ||= query_without_split? ? nil : split_query_string.last
-  end
+  def from_elasticsearch
+    must_clauses   = [{ multi_match: { query: terms_for_query, fields: likely_acct? ? %w(acct.edge_ngram acct) : %w(acct.edge_ngram acct display_name.edge_ngram display_name), type: 'most_fields', operator: 'and' } }]
+    should_clauses = []
 
-  def query_without_split?
-    split_query_string.size == 1
-  end
+    if account
+      return [] if options[:following] && following_ids.empty?
 
-  def domain_is_local?
-    @domain_is_local ||= TagManager.instance.local_domain?(query_domain)
-  end
+      if options[:following]
+        must_clauses << { terms: { id: following_ids } }
+      elsif following_ids.any?
+        should_clauses << { terms: { id: following_ids, boost: 100 } }
+      end
+    end
 
-  def search_from
-    options[:following] && account ? account.following : Account
-  end
+    query     = { bool: { must: must_clauses, should: should_clauses } }
+    functions = [reputation_score_function, followers_score_function, time_distance_function]
 
-  def exact_match?
-    exact_match.present?
-  end
+    records = AccountsIndex.query(function_score: { query: query, functions: functions, boost_mode: 'multiply', score_mode: 'avg' })
+                           .limit(limit_for_non_exact_results)
+                           .offset(offset)
+                           .objects
+                           .compact
 
-  def exact_match
-    return @exact_match if defined?(@exact_match)
+    ActiveRecord::Associations::Preloader.new.preload(records, :account_stat)
 
-    @exact_match = begin
-      if domain_is_local?
-        search_from.without_suspended.find_local(query_username)
-      else
-        search_from.without_suspended.find_remote(query_username, query_domain)
-      end
-    end
+    records
   end
 
-  def search_results
-    @search_results ||= begin
-      if account
-        advanced_search_results
-      else
-        simple_search_results
-      end
-    end
+  def reputation_score_function
+    {
+      script_score: {
+        script: {
+          source: "(doc['followers_count'].value + 0.0) / (doc['followers_count'].value + doc['following_count'].value + 1)",
+        },
+      },
+    }
   end
 
-  def advanced_search_results
-    Account.advanced_search_for(terms_for_query, account, limit_for_non_exact_results, options[:following], offset)
+  def followers_score_function
+    {
+      field_value_factor: {
+        field: 'followers_count',
+        modifier: 'log2p',
+        missing: 0,
+      },
+    }
   end
 
-  def simple_search_results
-    Account.search_for(terms_for_query, limit_for_non_exact_results, offset)
+  def time_distance_function
+    {
+      gauss: {
+        last_status_at: {
+          scale: '30d',
+          offset: '30d',
+          decay: 0.3,
+        },
+      },
+    }
+  end
+
+  def following_ids
+    @following_ids ||= account.active_relationships.pluck(:target_account_id)
   end
 
   def limit_for_non_exact_results
-    if offset.zero? && exact_match?
+    if exact_match?
       limit - 1
     else
       limit
@@ -113,7 +142,39 @@ class AccountSearchService < BaseService
     if domain_is_local?
       query_username
     else
-      "#{query_username} #{query_domain}"
+      query
     end
   end
+
+  def split_query_string
+    @split_query_string ||= query.split('@')
+  end
+
+  def query_username
+    @query_username ||= split_query_string.first || ''
+  end
+
+  def query_domain
+    @query_domain ||= query_without_split? ? nil : split_query_string.last
+  end
+
+  def query_without_split?
+    split_query_string.size == 1
+  end
+
+  def domain_is_local?
+    @domain_is_local ||= TagManager.instance.local_domain?(query_domain)
+  end
+
+  def exact_match?
+    exact_match.present?
+  end
+
+  def username_complete?
+    query.include?('@') && "@#{query}" =~ Account::MENTION_RE
+  end
+
+  def likely_acct?
+    @acct_hint || username_complete?
+  end
 end
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index 769d1ac7a..fe601bbf4 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -52,15 +52,15 @@ class SearchService < BaseService
     preloaded_relations = relations_map_for_account(@account, account_ids, account_domains)
 
     results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? }
-  rescue Faraday::ConnectionFailed
+  rescue Faraday::ConnectionFailed, Parslet::ParseFailed
     []
   end
 
   def perform_hashtags_search!
-    Tag.search_for(
-      @query.gsub(/\A#/, ''),
-      @limit,
-      @offset
+    TagSearchService.new.call(
+      @query,
+      limit: @limit,
+      offset: @offset
     )
   end
 
diff --git a/app/services/tag_search_service.rb b/app/services/tag_search_service.rb
new file mode 100644
index 000000000..64dd76bb7
--- /dev/null
+++ b/app/services/tag_search_service.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+class TagSearchService < BaseService
+  def call(query, options = {})
+    @query  = query.strip.gsub(/\A#/, '')
+    @offset = options[:offset].to_i
+    @limit  = options[:limit].to_i
+
+    if Chewy.enabled?
+      from_elasticsearch
+    else
+      from_database
+    end
+  end
+
+  private
+
+  def from_elasticsearch
+    query = {
+      function_score: {
+        query: {
+          multi_match: {
+            query: @query,
+            fields: %w(name.edge_ngram name),
+            type: 'most_fields',
+            operator: 'and',
+          },
+        },
+
+        functions: [
+          {
+            field_value_factor: {
+              field: 'usage',
+              modifier: 'log2p',
+              missing: 0,
+            },
+          },
+
+          {
+            gauss: {
+              last_status_at: {
+                scale: '7d',
+                offset: '14d',
+                decay: 0.5,
+              },
+            },
+          },
+        ],
+
+        boost_mode: 'multiply',
+      },
+    }
+
+    filter = {
+      bool: {
+        should: [
+          {
+            term: {
+              reviewed: {
+                value: true,
+              },
+            },
+          },
+
+          {
+            term: {
+              name: {
+                value: @query,
+              },
+            },
+          },
+        ],
+      },
+    }
+
+    TagsIndex.query(query).filter(filter).limit(@limit).offset(@offset).objects.compact
+  end
+
+  def from_database
+    Tag.search_for(@query, @limit, @offset)
+  end
+end
diff --git a/app/views/about/blocks.html.haml b/app/views/about/blocks.html.haml
new file mode 100644
index 000000000..a81a4d1eb
--- /dev/null
+++ b/app/views/about/blocks.html.haml
@@ -0,0 +1,48 @@
+- content_for :page_title do
+  = t('domain_blocks.title', instance: site_hostname)
+
+.grid
+  .column-0
+    .box-widget.rich-formatting
+      %h2= t('domain_blocks.blocked_domains')
+      %p= t('domain_blocks.description', instance: site_hostname)
+      .table-wrapper
+        %table.blocks-table
+          %thead
+            %tr
+              %th= t('domain_blocks.domain')
+              %th.severity-column= t('domain_blocks.severity')
+              - if @show_rationale
+                %th.button-column
+          %tbody
+            - if @blocks.empty?
+              %tr
+                %td{ colspan: @show_rationale ? 3 : 2 }= t('domain_blocks.no_domain_blocks')
+            - else
+              - @blocks.each_with_index do |block, i|
+                %tr{ class: i % 2 == 0 ? 'even': nil }
+                  %td{ title: block.domain }= block.domain
+                  %td= block_severity_text(block)
+                  - if @show_rationale
+                    %td
+                      - if block.public_comment.present?
+                        %button.icon-button{ title: t('domain_blocks.show_rationale'), 'aria-label' => t('domain_blocks.show_rationale') }
+                          = fa_icon 'chevron-down fw', 'aria-hidden' => true
+                - if @show_rationale
+                  - if block.public_comment.present?
+                    %tr.rationale.hidden
+                      %td{ colspan: 3 }= block.public_comment.presence
+      %h2= t('domain_blocks.severity_legend.title')
+      - if @blocks.any? { |block| block.reject_media? }
+        %h3= t('domain_blocks.media_block')
+        %p= t('domain_blocks.severity_legend.media_block')
+      - if @blocks.any? { |block| block.severity == 'silence' }
+        %h3= t('domain_blocks.silence')
+        %p= t('domain_blocks.severity_legend.silence')
+      - if @blocks.any? { |block| block.severity == 'suspend' }
+        %h3= t('domain_blocks.suspension')
+        %p= t('domain_blocks.severity_legend.suspension')
+        - if public_fetch_mode?
+          %p= t('domain_blocks.severity_legend.suspension_disclaimer')
+  .column-1
+    = render 'application/sidebar'
diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml
index 034304936..9c26dbabc 100644
--- a/app/views/accounts/show.html.haml
+++ b/app/views/accounts/show.html.haml
@@ -7,7 +7,7 @@
   - if @account.user&.setting_noindex
     %meta{ name: 'robots', content: 'noindex, noarchive' }/
 
-  %link{ rel: 'alternate', type: 'application/rss+xml', href: account_url(@account, format: 'rss') }/
+  %link{ rel: 'alternate', type: 'application/rss+xml', href: @rss_url }/
   %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
 
   - if @older_url
@@ -56,24 +56,33 @@
 
     = render 'bio', account: @account
 
-    - unless @endorsed_accounts.empty?
+    - if @endorsed_accounts.empty? && @account.id == current_account&.id
+      .placeholder-widget= t('accounts.endorsements_hint')
+    - elsif !@endorsed_accounts.empty?
       .endorsements-widget
         %h4= t 'accounts.choices_html', name: content_tag(:bdi, display_name(@account, custom_emojify: true))
 
         - @endorsed_accounts.each do |account|
           = account_link_to account
 
-    - @account.featured_tags.order(statuses_count: :desc).each do |featured_tag|
-      .directory__tag{ class: params[:tag] == featured_tag.name ? 'active' : nil }
-        = link_to short_account_tag_path(@account, featured_tag.tag) do
-          %h4
-            = fa_icon 'hashtag'
-            = featured_tag.name
-            %small
-              - if featured_tag.last_status_at.nil?
-                = t('accounts.nothing_here')
-              - else
-                %time.formatted{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at
-          .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true
+    - if @featured_hashtags.empty? && @account.id == current_account&.id
+      .placeholder-widget
+        = t('accounts.featured_tags_hint')
+        = link_to settings_featured_tags_path do
+          = t('featured_tags.add_new')
+          = fa_icon 'chevron-right fw'
+    - else
+      - @featured_hashtags.each do |featured_tag|
+        .directory__tag{ class: params[:tag] == featured_tag.name ? 'active' : nil }
+          = link_to short_account_tag_path(@account, featured_tag.tag) do
+            %h4
+              = fa_icon 'hashtag'
+              = featured_tag.name
+              %small
+                - if featured_tag.last_status_at.nil?
+                  = t('accounts.nothing_here')
+                - else
+                  %time.formatted{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at
+            .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true
 
     = render 'application/sidebar'
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index b0ab394d6..5a9b33f04 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -91,6 +91,12 @@
   .fields-group
     = f.input :min_invite_role, wrapper: :with_label, collection: %i(disabled user moderator admin), label: t('admin.settings.registrations.min_invite_role.title'), label_method: lambda { |role| role == :disabled ? t('admin.settings.registrations.min_invite_role.disabled') : t("admin.accounts.roles.#{role}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
 
+  .fields-row
+    .fields-row__column.fields-row__column-6.fields-group
+      = f.input :show_domain_blocks, wrapper: :with_label, collection: %i(disabled users all), label: t('admin.settings.domain_blocks.title'), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
+    .fields-row__column.fields-row__column-6.fields-group
+      = f.input :show_domain_blocks_rationale, wrapper: :with_label, collection: %i(disabled users all), label: t('admin.settings.domain_blocks_rationale.title'), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
+
   .fields-group
     = f.input :closed_registrations_message, as: :text, wrapper: :with_block_label, label: t('admin.settings.registrations.closed_message.title'), hint: t('admin.settings.registrations.closed_message.desc_html'), input_html: { rows: 8 }
     = f.input :site_extended_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description_extended.title'), hint: t('admin.settings.site_description_extended.desc_html'), input_html: { rows: 8 } unless whitelist_mode?
diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml
index b5ce5845e..90c8f9dd1 100644
--- a/app/views/application/_sidebar.html.haml
+++ b/app/views/application/_sidebar.html.haml
@@ -4,3 +4,13 @@
 
   .hero-widget__text
     %p= @instance_presenter.site_short_description.html_safe.presence || @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
+
+- if Setting.trends
+  - trends = TrendingTags.get(3)
+
+  - unless trends.empty?
+    .endorsements-widget.trends-widget
+      %h4.emojify= t('footer.trending_now')
+
+      - trends.each do |tag|
+        = react_component :hashtag, hashtag: ActiveModelSerializers::SerializableResource.new(tag, serializer: REST::TagSerializer).as_json
diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml
index 6c5268b61..9530e612a 100644
--- a/app/views/home/index.html.haml
+++ b/app/views/home/index.html.haml
@@ -5,7 +5,7 @@
   = preload_link_tag asset_pack_path('features/notifications.js'), crossorigin: 'anonymous'
 
   %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key}
-  %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
+  = render_initial_state
 
 .app-holder#mastodon{ data: { props: Oj.dump(default_props) } }
   %noscript
diff --git a/app/views/invites/_form.html.haml b/app/views/invites/_form.html.haml
index 3a2a5ef0e..b19f70539 100644
--- a/app/views/invites/_form.html.haml
+++ b/app/views/invites/_form.html.haml
@@ -10,5 +10,8 @@
   .fields-group
     = f.input :autofollow, wrapper: :with_label
 
+  .fields-group
+    = f.input :comment, wrapper: :with_label, input_html: { maxlength: 420 }
+
   .actions
     = f.button :button, t('invites.generate'), type: :submit
diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml
index 62799ca5b..03050c868 100644
--- a/app/views/invites/_invite.html.haml
+++ b/app/views/invites/_invite.html.haml
@@ -21,5 +21,8 @@
       = t('invites.expired')
 
   %td
+    = invite.comment
+
+  %td
     - if invite.valid_for_use? && policy(invite).destroy?
       = table_link_to 'times', t('invites.delete'), invite_path(invite), method: :delete
diff --git a/app/views/invites/index.html.haml b/app/views/invites/index.html.haml
index 61420ab1e..62065d6ae 100644
--- a/app/views/invites/index.html.haml
+++ b/app/views/invites/index.html.haml
@@ -15,6 +15,7 @@
         %th
         %th= t('invites.table.uses')
         %th= t('invites.table.expires_at')
+        %th= t('invites.table.comment')
         %th
     %tbody
       = render @invites
diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml
index da510fa7a..fb9ac5cec 100644
--- a/app/views/layouts/public.html.haml
+++ b/app/views/layouts/public.html.haml
@@ -1,3 +1,6 @@
+- content_for :header_tags do
+  = render_initial_state
+
 - content_for :content do
   .public-layout
     - unless @hide_navbar
diff --git a/app/views/public_timelines/show.html.haml b/app/views/public_timelines/show.html.haml
index f80157c67..591620f64 100644
--- a/app/views/public_timelines/show.html.haml
+++ b/app/views/public_timelines/show.html.haml
@@ -3,7 +3,6 @@
 
 - content_for :header_tags do
   %meta{ name: 'robots', content: 'noindex' }/
-  %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
 
 .page-header
   %h1= t('about.see_whats_happening')
diff --git a/app/views/settings/featured_tags/index.html.haml b/app/views/settings/featured_tags/index.html.haml
index 5f69517f3..6734d027c 100644
--- a/app/views/settings/featured_tags/index.html.haml
+++ b/app/views/settings/featured_tags/index.html.haml
@@ -1,6 +1,10 @@
 - content_for :page_title do
   = t('settings.featured_tags')
 
+%p= t('featured_tags.hint_html')
+
+%hr.spacer/
+
 = simple_form_for @featured_tag, url: settings_featured_tags_path do |f|
   = render 'shared/error_messages', object: @featured_tag
 
diff --git a/app/views/shares/show.html.haml b/app/views/shares/show.html.haml
index 4c0390c42..28910d3ab 100644
--- a/app/views/shares/show.html.haml
+++ b/app/views/shares/show.html.haml
@@ -1,4 +1,4 @@
 - content_for :header_tags do
-  %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
+  = render_initial_state
 
 #mastodon-compose{ data: { props: Oj.dump(default_props) } }
diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml
index 1a9c58983..74d44bd7b 100644
--- a/app/views/tags/show.html.haml
+++ b/app/views/tags/show.html.haml
@@ -5,7 +5,6 @@
   %meta{ name: 'robots', content: 'noindex' }/
   %link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/
 
-  %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
   = render 'og'
 
 .page-header
diff --git a/babel.config.js b/babel.config.js
index a506ad8ce..3f7ff84db 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -20,6 +20,12 @@ module.exports = (api) => {
       ['react-intl', { messagesDir: './build/messages' }],
       'preval',
     ],
+    overrides: [{
+      test: /tesseract\.js/,
+      presets: [
+        ['@babel/env', { ...envOptions, modules: 'commonjs' }],
+      ],
+    }],
   };
 
   switch (env) {
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 7a07a8eb0..ccf325bf2 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -71,6 +71,12 @@ Rails.application.configure do
   # Better log formatting
   config.lograge.enabled = true
 
+  config.lograge.custom_payload do |controller|
+    if controller.respond_to?(:signed_request?) && controller.signed_request?
+      { key: controller.signature_key_id }
+    end
+  end
+
   # Do not dump schema after migrations.
   config.active_record.dump_schema_after_migration = false
 
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 2fe1a33fa..c8396c773 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -35,7 +35,7 @@ if Rails.env.production?
     p.style_src       :self, :unsafe_inline, assets_host
     p.media_src       :self, :data, *data_hosts
     p.frame_src       :self, :https
-    p.worker_src      :self, assets_host
+    p.worker_src      :self, :blob, assets_host
     p.connect_src     :self, :blob, Rails.configuration.x.streaming_api_base_url, *data_hosts
     p.manifest_src    :self, assets_host
   end
diff --git a/config/locales/activerecord.et.yml b/config/locales/activerecord.et.yml
new file mode 100644
index 000000000..5679a91fe
--- /dev/null
+++ b/config/locales/activerecord.et.yml
@@ -0,0 +1,17 @@
+---
+et:
+  activerecord:
+    attributes:
+      poll:
+        expires_at: Tähtaeg
+        options: Valikud
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: ainult tähtmärgid, numbrid ja alakriipsud
+        status:
+          attributes:
+            reblog:
+              taken: staatusel juba eksisteerib
diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml
index bbc18bc33..ca5fbacb4 100644
--- a/config/locales/activerecord.hu.yml
+++ b/config/locales/activerecord.hu.yml
@@ -11,3 +11,7 @@ hu:
           attributes:
             username:
               invalid: csak betűk, számok vagy alávonás
+        status:
+          attributes:
+            reblog:
+              taken: már létezik ehhez a bejegyzéshez
diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml
index 00b2b8d8b..ffbf59346 100644
--- a/config/locales/activerecord.uk.yml
+++ b/config/locales/activerecord.uk.yml
@@ -1,12 +1,16 @@
 ---
 uk:
   activerecord:
+    attributes:
+      poll:
+        expires_at: Кінцевий термін
+        options: Варіанти вибору
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: тільки букви, цифри та нижні підкреслювання
+              invalid: тільки літери, цифри та підкреслення
         status:
           attributes:
             reblog:
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index e48ee89c5..14562db03 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -5,9 +5,13 @@ ar:
     about_mastodon_html: ماستدون شبكة اجتماعية مبنية على أسُس بروتوكولات برمجيات الويب الحرة و مفتوحة المصدر. و هو لامركزي تمامًا كالبريد الإلكتروني.
     about_this: عن مثيل الخادوم هذا
     active_count_after: نشط
+    active_footnote: مستخدم نشيط شهريا (MAU)
     administered_by: 'يُديره:'
     api: واجهة برمجة التطبيقات
     apps: تطبيقات الأجهزة المحمولة
+    apps_platforms: إستخدم ماستودون في iOS، أندرويد وأنظمة أخرى
+    browse_directory: تصفح دليل المستخدمين وافرز بالمصالح
+    browse_public_posts: تصفح تيار مباشر من منشورات عامة على ماستدون
     contact: للتواصل معنا
     contact_missing: لم يتم تعيينه
     contact_unavailable: غير متوفر
@@ -16,6 +20,7 @@ ar:
     extended_description_html: |
       <h3>مكان جيد للقواعد</h3>
       <p>لم يتم بعد إدخال الوصف الطويل.</p>
+    federation_hint_html: بواسطة حساب في %{instance} ستتمكن من تتبع أناس في أي خادم ماستدون وأكثر.
     generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة"
     get_apps: جرّب تطبيقا على الموبايل
     hosted_on: ماستدون مُستضاف على %{domain}
@@ -194,6 +199,7 @@ ar:
       username: اسم المستخدم
       warn: تحذير
       web: الويب
+      whitelisted: في القائمة البيضاء
     action_logs:
       actions:
         assigned_to_self_report: قام %{name} بتعيين التقرير %{target} لأنفسهم
@@ -290,6 +296,7 @@ ar:
           silence: كتم
           suspend: تعليق
         title: حجب نطاق جديد
+      private_comment: تعليق خاص
       reject_media: رفض ملفات الوسائط
       reject_media_hint: يزيل ملفات الوسائط المخزنة محليًا ويرفض تنزيل أي ملفات في المستقبل. غير ذي صلة للتعليق
       reject_reports: رفض التقارير
@@ -337,6 +344,7 @@ ar:
         all: كافتها
         limited: محدود
         title: الإشراف
+      private_comment: تعليق خاص
       title: الفديرالية
       total_blocked_by_us: المحجوبة مِن طرفنا
       total_followed_by_them: يُتابِعونها
@@ -479,13 +487,8 @@ ar:
       title: منشورات الحساب
       with_media: تحتوي على وسائط
     tags:
-      accounts: الحسابات
-      hidden: المخفية
-      hide: الإخفاء عن سجل الحسابات
-      name: الوسم
+      context: السياق
       title: الوسوم
-      unhide: إظهاره في سجل حسابات المستخدمين
-      visible: ظاهر
     title: الإدارة
     warning_presets:
       add_new: إضافة واحد جديد
@@ -503,6 +506,7 @@ ar:
   appearance:
     advanced_web_interface: واجهة الويب المتقدمة
     confirmation_dialogs: نوافذ التأكيد
+    discovery: استكشاف
     sensitive_content: محتوى حساس
   application_mailer:
     notification_preferences: تعديل خيارات البريد الإلكتروني
@@ -522,7 +526,7 @@ ar:
     apply_for_account: اطلب دعوة
     change_password: الكلمة السرية
     checkbox_agreement_html: أوافق على <a href="%{rules_path}" target="_blank">قواعد الخادم</a> و <a href="%{terms_path}" target="_blank">شروط الخدمة</a>
-    confirm_email: تأكيد عنوان البريد الإلكتروني
+    checkbox_agreement_without_rules_html: أوافق على <a href="%{terms_path}" target="_blank">شروط الخدمة</a>
     delete_account: حذف حساب
     delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك <a href="%{path}">المواصلة هنا</a>. سوف يُطلَبُ منك التأكيد قبل الحذف.
     didnt_get_confirmation: لم تتلق تعليمات التأكيد ؟
@@ -542,6 +546,9 @@ ar:
     reset_password: إعادة تعيين كلمة المرور
     security: الأمان
     set_new_password: إدخال كلمة مرور جديدة
+    status:
+      account_status: حالة الحساب
+      functional: حسابك جاهز.
     trouble_logging_in: هل صادفتكم مشكلة في الولوج؟
   authorize_follow:
     already_following: أنت تتابع بالفعل هذا الحساب
@@ -586,6 +593,8 @@ ar:
       other: "%{count} شخص"
       two: "%{count} شخص"
       zero: "%{count} شخص"
+  domain_validator:
+    invalid_domain: ليس بإسم نطاق صالح
   errors:
     '403': ليس لك الصلاحيات الكافية لعرض هذه الصفحة.
     '404': إنّ الصفحة التي تبحث عنها لا وجود لها أصلا.
@@ -958,6 +967,7 @@ ar:
       title:
         disable: الحساب مُجمَّد
         none: تحذير
+        silence: الحساب محدود
         suspend: الحساب مُعلَّق
     welcome:
       edit_profile_action: تهيئة الملف الشخصي
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index d05406ebb..64bd68e54 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -24,6 +24,9 @@ ca:
     generic_description: "%{domain} és un servidor a la xarxa"
     get_apps: Prova una aplicació mòbil
     hosted_on: Mastodon allotjat a %{domain}
+    instance_actor_flash: |
+      Aquest compte és un actor virtual utilitzat per a representar al propi servidor i no cap usuari individual.
+      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 privacitat
     see_whats_happening: Mira què està passant
@@ -250,6 +253,7 @@ 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 previa de línia de temps
       features: Característiques
       hidden_service: Federació amb serveis ocults
@@ -449,6 +453,9 @@ 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 auto-silenciar i informar automàticament de comptes basat en mesures com ara la detecció de comptes que envien missatges repetits 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
@@ -470,13 +477,7 @@ ca:
       title: Estats del compte
       with_media: Amb contingut multimèdia
     tags:
-      accounts: Comptes
-      hidden: Amagat
-      hide: Ocult del directori
-      name: Etiqueta
       title: Etiquetes
-      unhide: Mostra en el directori
-      visible: Visible
     title: Administració
     warning_presets:
       add_new: Afegir nou
@@ -517,7 +518,6 @@ ca:
     apply_for_account: Demana una invitació
     change_password: Contrasenya
     checkbox_agreement_html: Estic d'acord amb les <a href="%{rules_path}" target="_blank">normes del servidor</a> i <a href="%{terms_path}" target="_blank"> els termes del servei</a>
-    confirm_email: Confirmar correu electrònic
     delete_account: Suprimeix el compte
     delete_account_html: Si vols suprimir el compte pots <a href="%{path}">fer-ho aquí</a>. Se't demanarà confirmació.
     didnt_get_confirmation: No has rebut el correu de confirmació?
@@ -537,6 +537,14 @@ ca:
     reset_password: Restableix la contrasenya
     security: Seguretat
     set_new_password: Estableix una contrasenya nova
+    setup:
+      email_below_hint_html: Si l’adreça de correu electrònic següent és incorrecta, podeu canviar-la aquí i rebre un nou correu electrònic de confirmació.
+      email_settings_hint_html: El correu electrònic de confirmació es va enviar a %{email}. Si aquesta adreça de correu electrònic no és correcta, la podeu canviar a la configuració del compte.
+      title: Configuració
+    status:
+      account_status: Estat del compte
+      confirming: Esperant que es completi la confirmació del correu electrònic.
+      pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan sigui aprovada.
     trouble_logging_in: Problemes per iniciar la sessió?
   authorize_follow:
     already_following: Ja estàs seguint aquest compte
@@ -874,6 +882,8 @@ ca:
     profile: Perfil
     relationships: Seguits i seguidors
     two_factor_authentication: Autenticació de dos factors
+  spam_check:
+    spam_detected_and_silenced: Aquest és un informe automatitzat. S'ha detectat correu brossa i el remitent s'ha silenciat automàticament. Si es tracta d’un error, si us plau, trèieu el silenci del compte.
   statuses:
     attached:
       description: 'Adjunt: %{attached}'
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 4e2ceda22..94c363511 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -24,6 +24,9 @@ co:
     generic_description: "%{domain} hè un servore di a rete"
     get_apps: Pruvà un'applicazione di telefuninu
     hosted_on: Mastodon allughjatu nant’à %{domain}
+    instance_actor_flash: |
+      Stu contu ghjè un'attore virtuale chì ghjove à riprisentà u servore sanu è micca un veru utilizatore.
+      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
     see_whats_happening: Vede cio chì si passa
@@ -42,6 +45,8 @@ co:
     what_is_mastodon: Quale hè Mastodon?
   accounts:
     choices_html: "%{name} ricumanda:"
+    endorsements_hint: Pudete appughjà i conti chì siguitate dapoi l'interfaccia web, è saranu mustrati quì.
+    featured_tags_hint: Pudete mette in mostra qualchì hashtag chì saranu affissatu quì.
     follow: Siguità
     followers:
       one: Abbunatu·a
@@ -183,6 +188,7 @@ co:
       username: Cugnome
       warn: Averte
       web: Web
+      whitelisted: In a lista bianca
     action_logs:
       actions:
         assigned_to_self_report: "%{name} s’hè assignatu u signalamentu %{target}"
@@ -233,7 +239,7 @@ co:
       image_hint: PNG di 50Ko o menu
       listed: Listata
       new:
-        title: Aghjustà una nov’emoji
+        title: Aghjunghje una nov’emoji
       overwrite: Soprascrive
       shortcode: Accorta
       shortcode_hint: 2 caratteri o più, solu lettere, numeri è liniette basse
@@ -243,6 +249,7 @@ co:
       updated_msg: L’emoji hè stata messa à ghjornu!
       upload: Caricà
     dashboard:
+      authorized_fetch_mode: Modu ricuperazione auturizata
       backlog: travagli in attesa
       config: Cunfigurazione
       feature_deletions: Sguassamenti di conti
@@ -250,10 +257,13 @@ 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
       open_reports: signalamenti aperti
+      pending_tags: hashtag in attesa di verificazione
+      pending_users: utilizatori in attesa di rivista
       recent_users: Utilizatori ricenti
       search: Ricerca di testu sanu
       single_user_mode: Modu utilizatore unicu
@@ -265,11 +275,18 @@ co:
       week_interactions: interazzione sta settimana
       week_users_active: attivi sta settimana
       week_users_new: utilizatori sta settimana
+      whitelist_mode: Modu lista bianca
+    domain_allows:
+      add_new: Aghjunghje à a lista bianca
+      created_msg: U duminiu hè statu aghjuntu à a lista bianca
+      destroyed_msg: U duminiu hè statu sguassatu da a lista bianca
+      undo: Toglie di a lista bianca
     domain_blocks:
-      add_new: Aghjustà novu blucchime di duminiu
+      add_new: Aghjunghje novu blucchime di duminiu
       created_msg: U blucchime di u duminiu hè attivu
       destroyed_msg: U blucchime di u duminiu ùn hè più attivu
       domain: Duminiu
+      edit: Mudificà u blucchime di duminiu
       existing_domain_block_html: Avete digià impostu limite più strette nant'à %{name}, duvete <a href="%{unblock_url}">sbluccallu</a> primu.
       new:
         create: Creà un blucchime
@@ -280,6 +297,10 @@ co:
           silence: Silenzà
           suspend: Suspende
         title: Novu blucchime 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
+      public_comment_hint: Cummentariu nant'à a limitazione di stu duminiu per u pubblicu generale, s'ella hè attivata a rivelazione di a lista di limitazione di duminiu.
       reject_media: Righjittà i fugliali media
       reject_media_hint: Sguassa tutti i media caricati è ricusa caricamenti futuri. Inutile per una suspensione
       reject_reports: Righjittà i rapporti
@@ -299,8 +320,9 @@ co:
         title: Ùn bluccà più u duminiu %{domain}
         undo: Annullà
       undo: Annullà u blucchime di duminiu
+      view: Vede blucchime di duminiu
     email_domain_blocks:
-      add_new: Aghjustà
+      add_new: Aghjunghje
       created_msg: U blucchime di u duminiu d’e-mail hè attivu
       delete: Toglie
       destroyed_msg: U blucchime di u duminiu d’e-mail ùn hè più attivu
@@ -322,6 +344,8 @@ co:
         all: Tuttu
         limited: Limitatu
         title: Muderazione
+      private_comment: Cummentariu privatu
+      public_comment: Cummentariu pubblicu
       title: Federazione
       total_blocked_by_us: Bluccati da noi
       total_followed_by_them: Siguitati da elli
@@ -339,7 +363,7 @@ co:
     pending_accounts:
       title: Conti in attesa (%{count})
     relays:
-      add_new: Aghjustà un ripetitore
+      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.
       disable: Disattivà
@@ -399,6 +423,13 @@ co:
       custom_css:
         desc_html: Mudificà l'apparenza cù CSS caricatu nant'à ogni pagina
         title: CSS persunalizatu
+      domain_blocks:
+        all: À tutti
+        disabled: À nimu
+        title: Mustrà blucchime di duminiu
+        users: À l'utilizatori lucali cunnettati
+      domain_blocks_rationale:
+        title: Vede ragiò
       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
@@ -449,6 +480,9 @@ 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
@@ -456,6 +490,9 @@ co:
         desc_html: Vede a linea pubblica nant’a pagina d’accolta
         title: Vista di e linee
       title: Parametri di u situ
+      trends:
+        desc_html: Mustrà à u pubblicu i hashtag chì sò stati digià verificati è chì sò in e tendenze avà
+        title: Tendenze di hashtag
     statuses:
       back_to_account: Ritornu à a pagina di u contu
       batch:
@@ -467,19 +504,25 @@ co:
         title: Media
       no_media: Nisun media
       no_status_selected: I statuti ùn sò micca stati mudificati perchè manc'unu era selezziunatu
-      title: Statutu di u contu
+      title: Statuti di u contu
       with_media: Cù media
     tags:
-      accounts: Conti
-      hidden: Piattatu
-      hide: Piattà di l'annuariu
-      name: Hashtag
+      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"
+      review: Statutu di verificazione
+      reviewed: Verificatu
       title: Hashtag
-      unhide: Mustrà in l'annuariu
-      visible: Visibile
+      trending_right_now: Tendenze avà
+      unique_uses_today: "%{count} pustendu oghji"
+      unreviewed: Micca verificatu
+      updated_msg: Parametri di i hashtag messi à ghjornu
     title: Amministrazione
     warning_presets:
-      add_new: Aghjustà nova
+      add_new: Aghjunghje
       delete: Sguassà
       edit: Cambià
       edit_preset: Cambià a preselezzione d'avertimentu
@@ -492,11 +535,15 @@ co:
       body: "%{reporter} hà palisatu %{target}"
       body_remote: Qualch’unu da %{domain} hà palisatu %{target}
       subject: Novu signalamentu nant’à %{instance} (#%{id})
+    new_trending_tag:
+      body: 'U hashtag #%{name} hè in e tendenze oghji, mà ùn hè micca verificatu. Ùn sarà micca mustratu à u pubblicu eccettu s''ellu hè auturizatu, o pudete ancu salvà u furmulariu cusì per ùn mai più avè à ne sente parlà.'
+      subject: Novu hashtag in attesa di rivista nant'à %{instance} (#%{name})
   appearance:
     advanced_web_interface: Interfaccia web avanzata
     advanced_web_interface_hint: 'S''è voi vulete fà usu di a larghezza sana di u vostru screnu, l''interfaccia web avanzata vi permette di cunfigurà parechje culonne sfarente per vede tutta l''infurmazione chì vulete vede in listessu tempu: Accolta, nutificazione, linea pubblica, è tutti l''hashtag è liste chì vulete.'
     animations_and_accessibility: Animazione è accessibilità
     confirmation_dialogs: Pop-up di cunfirmazione
+    discovery: Scuperta
     sensitive_content: Cuntinutu sensibile
   application_mailer:
     notification_preferences: Cambià e priferenze e-mail
@@ -517,7 +564,7 @@ co:
     apply_for_account: Dumandà un'invitazione
     change_password: Chjave d’accessu
     checkbox_agreement_html: Sò d'accunsentu cù e <a href="%{rules_path}" target="_blank">regule di u servore</a> è i <a href="%{terms_path}" target="_blank">termini di u serviziu</a>
-    confirm_email: Cunfirmà l’e-mail
+    checkbox_agreement_without_rules_html: Accettu i <a href="%{terms_path}" target="_blank">termini di u serviziu</a>
     delete_account: Sguassà u contu
     delete_account_html: S’è voi vulete toglie u vostru contu <a href="%{path}">ghjè quì</a>. Duverete cunfirmà a vostra scelta.
     didnt_get_confirmation: Ùn avete micca ricevutu l’istruzione di cunfirmazione?
@@ -537,6 +584,15 @@ co:
     reset_password: Cambià a chjave d’accessu
     security: Sicurità
     set_new_password: Creà una nova chjave d’accessu
+    setup:
+      email_below_hint_html: S'è l'indirizzu e-mail quì sottu ùn hè micca currettu, pudete cambiallu quì è riceve un novu e-mail di cunfirmazione.
+      email_settings_hint_html: L'e-mail di cunfirmazione hè statu mandatu à l'indirizzu %{email}. S'ellu ùn hè micca currettu, pudete cambiallu in i parametri di u contu.
+      title: Stallazione
+    status:
+      account_status: Statutu di u contu
+      confirming: In attesa di a cumplezzione di a cunfirmazione di l'e-mail.
+      functional: U vostru contu hè uperaziunale.
+      pending: A vostra dumanda hè in attesa di rivista da a squadra di muderazione. Quessa pò piglià un certu tempu. Avete da riceve un'e-mail s'ella hè appruvata.
     trouble_logging_in: Difficultà per cunnettavi?
   authorize_follow:
     already_following: Site digià abbunatu·a à stu contu
@@ -581,6 +637,25 @@ co:
     people:
       one: "%{count} persona"
       other: "%{count} persone"
+  domain_blocks:
+    blocked_domains: Lista di dumini bluccati è limitati
+    description: Quessa ghjè a lista di i servori limitati da o cù quelli %{instance} righjetta a federazione.
+    domain: Duminiu
+    media_block: Blucchime di media
+    no_domain_blocks: "(Nisun blucchime di duminiu)"
+    severity: Severità
+    severity_legend:
+      media_block: I fugliali media chì venenu sa stu servore ùn saranu mai ricuperati, cunservati, o affissati à l'utilizatore.
+      silence: I conti nant'à i servori silenzati ponu esse trovi, siguitati è spartuti/favurizati, mà i statuti ùn saranu micca in e linee pubbliche, è l'utilizatori lucali ch'ùn sò micca abbunati à sti conti ùn anu micca da riceve e so nutificazione.
+      suspension: U cuntinutu da i servori suspesi ùn hè mai cunservatu o affissatu, è u cuntinutu di stu servore ùn li hè micca mandatu. L'interazzione da sti servori suspesi sò ignurate.
+      suspension_disclaimer: I servori suspesi ponu ognitantu ricuperà i cuntinuti pubblichi da stu servore.
+      title: Severità
+    show_rationale: Vede ragiò
+    silence: Silenziu
+    suspension: Suspensione
+    title: Lista di servori bluccati da %{instance}
+  domain_validator:
+    invalid_domain: ùn hè micca un nome di duminiu currettu
   errors:
     '403': Ùn site micca auturizatu·a à vede sta pagina.
     '404': Sta pagina ùn esiste micca quì.
@@ -612,9 +687,10 @@ co:
     mutes: Piattate
     storage: I vostri media
   featured_tags:
-    add_new: Aghjustà novu
+    add_new: Aghjunghje
     errors:
       limit: Avete digià messu in mostra u numeru massimale di hashtag
+    hint_html: "<strong>Quale sò i hashtag in mostra?</strong> Sò messi in vista nant'à u vostru prufile pubblicu è permettenu à a ghjente di vede i vostri statuti ch'annu stu hashtag. Sò una bona manere di mustrà e vostre opere creative o i prughjetti à longu termine."
   filters:
     contexts:
       home: Accolta
@@ -630,11 +706,12 @@ co:
       delete: Toglie
       title: Filtri
     new:
-      title: Aghjustà un novu filtru
+      title: Aghjunghje un novu filtru
   footer:
     developers: Sviluppatori
     more: Di più…
     resources: Risorze
+    trending_now: Tindenze d'avà
   generic:
     all: Tuttu
     changes_saved_msg: Cambiamenti salvati!
@@ -667,7 +744,7 @@ co:
   imports:
     modes:
       merge: Unisce
-      merge_long: Cunservà i dati esistenti è aghjustà i novi
+      merge_long: Cunservà i dati esistenti è aghjunghje i novi
       overwrite: Soprascrive
       overwrite_long: Rimpiazzà i dati esistenti cù i novi
     preface: Pudete impurtà certi dati, cumu e persone chì seguitate o bluccate nant’à u vostru contu, nant’à stu servore à partesi di fugliali creati nant’à un’altru.
@@ -802,7 +879,7 @@ co:
   remote_interaction:
     favourite:
       proceed: Cuntinuà per favurisce
-      prompt: 'Vulete aghjustà stu statutu à i vostri favuriti:'
+      prompt: 'Vulete aghjunghje stu statutu à i vostri favuriti:'
     reblog:
       proceed: Cuntinuà per sparte
       prompt: 'Vulete sparte stu statutu:'
@@ -874,6 +951,8 @@ co:
     profile: Prufile
     relationships: Abbunamenti è abbunati
     two_factor_authentication: Identificazione à dui fattori
+  spam_check:
+    spam_detected_and_silenced: Quessu ghjè un signalamente autumaticu. Un spam hè statu ditettatu è u speditore hè statu silenzatu. S'ellu era un sbagliu, pudete annullà l'azzione.
   statuses:
     attached:
       description: 'Aghjuntu: %{attached}'
@@ -915,6 +994,8 @@ co:
     pinned: Statutu puntarulatu
     reblogged: hà spartutu
     sensitive_content: Cuntenutu sensibile
+  tags:
+    does_not_match_previous_name: ùn currisponde micca à l'anzianu nome
   terms:
     body_html: |
       <h2>Politique de confidentialité</h2>
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 3518b3b91..c07da5245 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -24,6 +24,9 @@ cs:
     generic_description: "%{domain} je jedním ze serverů v síti"
     get_apps: Vyzkoušejte mobilní aplikaci
     hosted_on: Mastodon na adrese %{domain}
+    instance_actor_flash: |
+      Tento účet je virtuální aktér, který představuje server samotný a ne jedotlivého uživatele.
+      Používá se pro účely federace a nesmí být blokován, pokud nechcete blokovat celý server. V tomto případě použijte doménovou blokaci.
     learn_more: Zjistit více
     privacy_policy: Zásady soukromí
     see_whats_happening: Podívejte se, co se děje
@@ -258,6 +261,7 @@ 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
@@ -461,6 +465,9 @@ cs:
         desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. 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 utišovat a nahlašovat účty podle opatření, jako například detekování účtů, které odesílají opakované nevyžadované zprávy. Mohou se najít špatné shody.
+        title: Antispam
       thumbnail:
         desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučuje se rozlišení 1200x630px
         title: Miniatura serveru
@@ -482,13 +489,7 @@ cs:
       title: Tooty účtu
       with_media: S médii
     tags:
-      accounts: Účty
-      hidden: Skryté
-      hide: Skrýt z adresáře
-      name: Hashtag
       title: Hashtagy
-      unhide: Zobrazit v adresáři
-      visible: Viditelné
     title: Administrace
     warning_presets:
       add_new: Přidat nové
@@ -529,7 +530,6 @@ cs:
     apply_for_account: Vyžádat si pozvánku
     change_password: Heslo
     checkbox_agreement_html: Souhlasím s <a href="%{rules_path}" target="_blank">pravidly serveru</a> a <a href="%{terms_path}" target="_blank">podmínkami používání</a>
-    confirm_email: Potvrdit e-mail
     delete_account: Odstranit účet
     delete_account_html: Chcete-li odstranit svůj účet, <a href="%{path}">pokračujte zde</a>. Budete požádán/a o potvrzení.
     didnt_get_confirmation: Neobdržel/a jste pokyny pro potvrzení?
@@ -549,6 +549,14 @@ cs:
     reset_password: Obnovit heslo
     security: Zabezpečení
     set_new_password: Nastavit nové heslo
+    setup:
+      email_below_hint_html: Pokud je níže uvedená e-mailová adresa nesprávná, můžete ji změnit zde a obdržet nový potvrzovací e-mail.
+      email_settings_hint_html: Potvrzovací e-mail byl odeslán na %{email}. Pokud je tato adresa nesprávná, můžete ji změnit v nastavení účtu.
+      title: Nastavení
+    status:
+      account_status: Stav účtu
+      confirming: Čekám na dokončení potvrzení e-mailu.
+      pending: Váš požadavek č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.
     trouble_logging_in: Problémy s přihlašováním?
   authorize_follow:
     already_following: Tento účet již sledujete
@@ -896,6 +904,8 @@ cs:
     profile: Profil
     relationships: Sledovaní a sledující
     two_factor_authentication: Dvoufázové ověřování
+  spam_check:
+    spam_detected_and_silenced: Tohle je automtické nahlášení. Byl detekován spam a jeho odesílatel byl automaticky utišen. Pokud je tohle chyba, prosím odtište tento účet.
   statuses:
     attached:
       description: 'Přiloženo: %{attached}'
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index fbeaa22b1..0763341a3 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -494,13 +494,7 @@ cy:
       title: Statysau cyfrif
       with_media: A chyfryngau
     tags:
-      accounts: Cyfrifon
-      hidden: Cudd
-      hide: Cuddio o gyfeiriadur
-      name: Hashnod
       title: Hashnodau
-      unhide: Dangoswch yn y cyfeiriadur
-      visible: Gweladwy
     title: Gweinyddiaeth
     warning_presets:
       add_new: Ychwanegu newydd
@@ -541,7 +535,6 @@ cy:
     apply_for_account: Gofyn am wahoddiad
     change_password: Cyfrinair
     checkbox_agreement_html: Rydw i'n cytuno i'r <a href="%{rules_path}" target="_blank">rheolau'r gweinydd</a> a'r <a href="%{terms_path}" target="_blank">telerau gwasanaeth</a>
-    confirm_email: Cadarnhau e-bost
     delete_account: Dileu cyfrif
     delete_account_html: Os hoffech chi ddileu eich cyfrif, mae modd <a href="%{path}">parhau yma</a>. Bydd gofyn i chi gadarnhau.
     didnt_get_confirmation: Heb dderbyn cyfarwyddiadau cadarnhau?
diff --git a/config/locales/da.yml b/config/locales/da.yml
index b24c9475c..160460cc2 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -390,9 +390,6 @@ da:
       no_status_selected: Ingen statusser blev ændret eller ingen blev valgt
       title: Konto statusser
       with_media: Med multimedier
-    tags:
-      accounts: Kontoer
-      hidden: Skjult
   admin_mailer:
     new_report:
       body: "%{reporter} har anmeldt %{target}"
@@ -414,7 +411,6 @@ da:
     your_token: Din adgangs token
   auth:
     change_password: Kodeord
-    confirm_email: Bekræft email
     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.
     didnt_get_confirmation: Har du endnu ikke modtaget instrukser for bekræftelse?
diff --git a/config/locales/de.yml b/config/locales/de.yml
index b9b8c02df..1e3e78878 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -24,6 +24,9 @@ de:
     generic_description: "%{domain} ist ein Server im Fediversum"
     get_apps: Versuche eine mobile App
     hosted_on: Mastodon, gehostet auf %{domain}
+    instance_actor_flash: |
+      Dieses Konto ist ein virtueller Akteur, der den Server selbst und nicht einen einzelnen Benutzer repräsentiert.
+      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
     see_whats_happening: Finde heraus, was gerade in der Welt los ist
@@ -42,6 +45,8 @@ de:
     what_is_mastodon: Was ist Mastodon?
   accounts:
     choices_html: "%{name} empfiehlt:"
+    endorsements_hint: Du kannst Personen unterstützen, die du von der Web-Schnittstelle folgen kannst, und sie werden hier angezeigt.
+    featured_tags_hint: Du kannst spezifische Hashtags, die hier angezeigt werden, angeben.
     follow: Folgen
     followers:
       one: Folger_innen
@@ -183,6 +188,7 @@ de:
       username: Profilname
       warn: Warnen
       web: Web
+      whitelisted: Auf der Whitelist
     action_logs:
       actions:
         assigned_to_self_report: "%{name} hat sich die Meldung %{target} selbst zugewiesen"
@@ -243,6 +249,7 @@ de:
       updated_msg: Emoji erfolgreich aktualisiert!
       upload: Hochladen
     dashboard:
+      authorized_fetch_mode: Autorisierter Abruf-Modus
       backlog: Rückständige Jobs
       config: Konfiguration
       feature_deletions: Kontolöschung
@@ -250,10 +257,13 @@ 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
       open_reports: Ausstehende Meldungen
+      pending_tags: Hashtags, die auf eine Überprüfung warten
+      pending_users: Benutzer, die auf eine Überprüfung warten
       recent_users: Neueste Nutzer
       search: Volltextsuche
       single_user_mode: Einzelnutzermodus
@@ -265,11 +275,18 @@ de:
       week_interactions: Interaktionen diese Woche
       week_users_active: Aktiv diese Woche
       week_users_new: Benutzer_innen diese Woche
+      whitelist_mode: Whitelist-Modus
+    domain_allows:
+      add_new: Whitelist-Domain
+      created_msg: Domain wurde erfolgreich zur Whitelist hinzugefügt
+      destroyed_msg: Domain wurde von der Whitelist entfernt
+      undo: Von der Whitelist entfernen
     domain_blocks:
       add_new: Neue Domainblockade hinzufügen
       created_msg: Die Domain-Blockade wird nun durchgeführt
       destroyed_msg: Die Domain-Blockade wurde rückgängig gemacht
       domain: Domain
+      edit: Domainblockade bearbeiten
       existing_domain_block_html: Es gibt schon eine Blockade für %{name}, diese muss erst <a href="%{unblock_url}">aufgehoben</a> werden.
       new:
         create: Blockade einrichten
@@ -280,6 +297,10 @@ de:
           silence: Stummschaltung
           suspend: Sperre
         title: Neue Domain-Blockade
+      private_comment: Privater Kommentar
+      private_comment_hint: Kommentar zu dieser Domain-Beschränkung für die interne Nutzung durch die Moderatoren.
+      public_comment: Öffentlicher Kommentar
+      public_comment_hint: Kommentar zu dieser Domain-Beschränkung für die allgemeine Öffentlichkeit, wenn das Veröffentlichen der Blockliste aktiviert ist.
       reject_media: Mediendateien ablehnen
       reject_media_hint: Entfernt lokal gespeicherte Mediendateien und verhindert deren künftiges Herunterladen. Für Sperren irrelevant
       reject_reports: Meldungen ablehnen
@@ -299,6 +320,7 @@ de:
         title: Domain-Blockade für %{domain} zurücknehmen
         undo: Zurücknehmen
       undo: Domainblockade zurücknehmen
+      view: Zeige Domain-Blockade
     email_domain_blocks:
       add_new: Neue hinzufügen
       created_msg: E-Mail-Domain-Blockade erfolgreich erstellt
@@ -322,6 +344,8 @@ de:
         all: Alle
         limited: Beschränkt
         title: Moderation
+      private_comment: Privater Kommentar
+      public_comment: Öffentlicher Kommentar
       title: Föderation
       total_blocked_by_us: Von uns blockiert
       total_followed_by_them: Gefolgt von denen
@@ -399,6 +423,13 @@ de:
       custom_css:
         desc_html: Verändere das Aussehen mit CSS, dass auf jeder Seite geladen wird
         title: Benutzerdefiniertes CSS
+      domain_blocks:
+        all: An alle
+        disabled: An niemanden
+        title: Zeige Domain-Blockaden
+        users: Für angemeldete lokale Benutzer
+      domain_blocks_rationale:
+        title: Rationale anzeigen
       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
@@ -449,6 +480,9 @@ 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
@@ -456,6 +490,9 @@ de:
         desc_html: Auf der Einstiegsseite die öffentliche Zeitleiste anzeigen
         title: Zeitleisten-Vorschau
       title: Server-Einstellungen
+      trends:
+        desc_html: Zuvor überprüfte Hashtags öffentlich anzeigen, die derzeit angesagt sind
+        title: Trendende Hashtags
     statuses:
       back_to_account: Zurück zum Konto
       batch:
@@ -470,13 +507,19 @@ de:
       title: Beiträge des Kontos
       with_media: Mit Medien
     tags:
-      accounts: Konten
-      hidden: Versteckt
-      hide: Vom Profilverzeichnis verstecken
-      name: Hashtag
+      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"
+      review: Prüfstatus
+      reviewed: Überprüft
       title: Hashtags
-      unhide: Zeige in Verzeichnis
-      visible: Sichtbar
+      trending_right_now: Aktuell in den Trends
+      unique_uses_today: "%{count} Beiträge heute"
+      unreviewed: Nicht überprüft
+      updated_msg: Hashtageinstellungen wurden erfolgreich aktualisiert
     title: Administration
     warning_presets:
       add_new: Neu hinzufügen
@@ -492,11 +535,15 @@ de:
       body: "%{reporter} hat %{target} gemeldet"
       body_remote: Jemand von %{domain} hat %{target} gemeldet
       subject: Neue Meldung auf %{instance} (#%{id})
+    new_trending_tag:
+      body: 'Der Hashtag #%{name} ist heute am trenden, aber wurde vorher noch nicht überprüft. Er wird nicht öffentlich angezeigt, es sei denn du erlaubst es oder speicherst das Formular ab und vergisst es.'
+      subject: Neuer Hashtag zur Überprüfung auf %{instance} verfügbar (#%{name})
   appearance:
     advanced_web_interface: Fortgeschrittene Benutzeroberfläche
     advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, erlaubt dir die fortgeschrittene Benutzeroberfläche viele unterschiedliche Spalten auf einmal zu sehen, wie z.B. deine Startseite, Benachrichtigungen, das gesamte bekannte Netz, deine Listen und beliebige Hashtags.
     animations_and_accessibility: Animationen und Barrierefreiheit
     confirmation_dialogs: Bestätigungsfenster
+    discovery: Erkennung
     sensitive_content: Heikle Inhalte
   application_mailer:
     notification_preferences: Ändere E-Mail-Einstellungen
@@ -517,7 +564,7 @@ de:
     apply_for_account: Eine Einladung anfragen
     change_password: Passwort
     checkbox_agreement_html: Ich akzeptiere die <a href="%{rules_path}" target="_blank">Server-Regeln</a> und die <a href="%{terms_path}" target="_blank">Nutzungsbedingungen</a>
-    confirm_email: E-Mail bestätigen
+    checkbox_agreement_without_rules_html: Ich stimme den <a href="%{terms_path}" target="_blank">Nutzungsbedingungen</a> zu
     delete_account: Konto löschen
     delete_account_html: Falls du dein Konto löschen willst, kannst du <a href="%{path}">hier damit fortfahren</a>. Du wirst um Bestätigung gebeten werden.
     didnt_get_confirmation: Keine Bestätigungs-Mail erhalten?
@@ -537,6 +584,15 @@ de:
     reset_password: Passwort zurücksetzen
     security: Sicherheit
     set_new_password: Neues Passwort setzen
+    setup:
+      email_below_hint_html: Wenn die unten stehende E-Mail-Adresse falsch ist, kannst du sie hier ändern und eine neue Bestätigungs-E-Mail erhalten.
+      email_settings_hint_html: Die Bestätigungs-E-Mail wurde an %{email} gesendet. Wenn diese E-Mail-Adresse nicht korrekt ist, kannst du sie in den Einstellungen ändern.
+      title: Konfiguration
+    status:
+      account_status: Kontostatus
+      confirming: Warte auf die Bestätigung der E-Mail.
+      functional: Dein Konto ist voll funktionsfähig.
+      pending: Deine Bewerbung wird von unseren Mitarbeitern noch nicht überprüft. Dies kann einige Zeit dauern. Du erhälst eine E-Mail, wenn deine Bewerbung genehmigt ist.
     trouble_logging_in: Schwierigkeiten beim Anmelden?
   authorize_follow:
     already_following: Du folgst diesem Konto bereits
@@ -581,6 +637,25 @@ de:
     people:
       one: "%{count} Person"
       other: "%{count} Leute"
+  domain_blocks:
+    blocked_domains: Liste der begrenzten und blockierten Domains
+    description: Dies ist die Liste der Server, die %{instance} limitiert oder dessen Föderation ablehnt.
+    domain: Domain
+    media_block: Medienblockade
+    no_domain_blocks: "(Keine Domain-Blockaden)"
+    severity: Schweregrad
+    severity_legend:
+      media_block: Mediendateien, die vom Server stammen, werden weder vom Benutzer abgerufen, gespeichert noch angezeigt.
+      silence: Konten von stummgeschalteten Servern können gefunden und gefolgt werden und man kann mit ihnen interagieren, aber ihre Beiträge werden nicht in der öffentlichen Zeitleiste erscheinen und Benachrichtigungen von ihnen werden nicht zu lokalen Benutzern gesendet, die sie nicht folgen.
+      suspension: Keine Inhalte von gesperrten Servern werden gespeichert oder angezeigt, und es werden auch keine Inhalte an sie gesendet. Die Interaktionen von gesperrten Servern werden ignoriert.
+      suspension_disclaimer: Gesperrte Server können gelegentlich öffentliche Inhalte von diesem Server abrufen.
+      title: Schweregrade
+    show_rationale: Rationale anzeigen
+    silence: Stummschalten
+    suspension: Sperre
+    title: "%{instance} Liste der blockierten Instanzen"
+  domain_validator:
+    invalid_domain: ist kein gültiger Domain-Name
   errors:
     '403': Dir fehlt die Befugnis, diese Seite sehen zu können.
     '404': Die Seite nach der du gesucht hast wurde nicht gefunden.
@@ -615,6 +690,7 @@ de:
     add_new: Neu hinzufügen
     errors:
       limit: Du hast bereits die maximale Anzahl an empfohlenen Hashtags erreicht
+    hint_html: "<strong>Was sind empfohlene Hashtags?</strong> Sie werden in deinem öffentlichen Profil deutlich angezeigt und ermöglichen es den Menschen, deine öffentlichen Beiträge speziell unter diesen Hashtags zu durchsuchen. Sie sind ein großartiges Werkzeug, um kreative Werke oder langfristige Projekte zu verfolgen."
   filters:
     contexts:
       home: Startseite
@@ -635,6 +711,7 @@ de:
     developers: Entwickler
     more: Mehr…
     resources: Ressourcen
+    trending_now: In den Trends
   generic:
     all: Alle
     changes_saved_msg: Änderungen gespeichert!
@@ -874,6 +951,8 @@ de:
     profile: Profil
     relationships: Folger_innen und Gefolgte
     two_factor_authentication: Zwei-Faktor-Auth
+  spam_check:
+    spam_detected_and_silenced: Dies ist ein automatisierter Bericht. Spam wurde erkannt und der Absender wurde automatisch stummgeschaltet. Wenn dies ein Fehler ist, schalte dieses Konto bitte wieder frei.
   statuses:
     attached:
       description: 'Angehängt: %{attached}'
@@ -905,8 +984,8 @@ de:
     sign_in_to_participate: Melde dich an, um an der Konversation teilzuhaben
     title: '%{name}: "%{quote}"'
     visibilities:
-      private: Nur Folgende
-      private_long: Nur für Folgende sichtbar
+      private: Nur für Folger_innen
+      private_long: Nur für Folger_innen sichtbar
       public: Öffentlich
       public_long: Für alle sichtbar
       unlisted: Nicht gelistet
@@ -915,6 +994,8 @@ de:
     pinned: Angehefteter Beitrag
     reblogged: teilte
     sensitive_content: Heikle Inhalte
+  tags:
+    does_not_match_previous_name: entspricht nicht dem vorherigen Namen
   terms:
     body_html: |
       <h2>Datenschutzerklärung</h2>
diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml
new file mode 100644
index 000000000..3c1b75f6c
--- /dev/null
+++ b/config/locales/devise.et.yml
@@ -0,0 +1,86 @@
+---
+et:
+  devise:
+    confirmations:
+      confirmed: Sinu e-postiaadress on edukalt kinnitatud.
+      send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+      send_paranoid_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+    failure:
+      already_authenticated: Te olete juba sisse loginud.
+      inactive: Teie konto pole veel aktiveeritud.
+      invalid: Valed %{authentication_keys} või parool.
+      last_attempt: Teil on veel üks katse kuni teie konto on lukustatud.
+      locked: Sinu konto on lukustatud.
+      not_found_in_database: Valed %{authentication_keys} või parool.
+      pending: Teie konto on siiani läbivaatlusel.
+      timeout: Teie sessioon on aegunud. Jätkamiseks palun sisenege uuesti.
+      unauthenticated: Te peate sisenema või looma konto enne jätkamist.
+      unconfirmed: Te peate kinnitama oma e-postiaadressi enne jätkamist.
+    mailer:
+      confirmation_instructions:
+        action: Kinnita e-postiaadress
+        action_with_app: Kinnita ja naase %{app}
+        explanation: Te olete loonud konto %{host}'il selle e-postiaadressiga. Te olete ühe kliki kaugusel selle aktiveerimisest. Kui see polnud Teie, palun eirake seda kirja.
+        explanation_when_pending: Te esitasite soovi liituda %{host}-iga selle e-postiaadressiga. Siis, kui Te kinnitate oma e-posti aadressi, vaatame me Teie soovi üle. Te ei saa siseneda kuni selleni. Kui teie soov on tagasi lükatud, Teie andmed kustutatakse ning Te ei pea rohkem midagi tegema. Kui see ei olnud Teie, palun eirake seda kirja.
+        extra_html: Palun tutvu <a href="%{terms_path}">meie serveri reeglitega</a> ning <a href="%{policy_path}">meie kasutustingimustega</a>.
+        subject: 'Mastodon: %{instance} Kinnitamisjuhised'
+        title: Kinnita e-postiaadress
+      email_changed:
+        explanation: 'Teie konto e-postiaadress muudetakse:'
+        extra: Kui Te ei muutnud oma e-posti, on tõenäoline, et kellelgi on ligipääs Teie kontole. Palun muutke oma salasõna koheselt või võtke ühendust oma serveri administraatoriga, kui olete oma kontost välja lukustatud.
+        subject: 'Mastodon: E-post muudetud'
+        title: Uus e-postiaadress
+      password_change:
+        explanation: Teie konto parool on muudetud.
+        extra: Kui Te ei muutnud oma salasõna, on tõenäoline, et kellelgi on ligipääs Teie kontole. Palun muutke oma salasõna koheselt või võtke ühendust oma serveri administraatoriga, kui olete oma kontost välja lukustatud.
+        subject: 'Mastodon: Salasõna muudetud'
+        title: Salasõna muudetud
+      reconfirmation_instructions:
+        explanation: Kinnita oma uus aadress, et muuta oma e-posti.
+        extra: Kui see muudatus pole Teie poolt alustatud, palun eirake seda kirja. E-postiaadress sellele Mastodoni kontole ei muutu, kuni Te vajutate üleval asuvale lingile.
+        subject: 'Mastodon: Kinnitake e-post - %{instance}'
+        title: Kinnita e-postiaadress
+      reset_password_instructions:
+        action: Muuda salasõna
+        explanation: Te taotlesite oma kontole uut salasõna.
+        extra: Kui Te ei soovinud seda, palun eirake seda kirja. Teie salasõna ei muutu, kuni Te vajutate üleval olevale lingile ning loote uue.
+        subject: 'Mastodon: Salasõna lähtestamisjuhendid'
+        title: Salasõna lähtestamine
+      unlock_instructions:
+        subject: 'Mastodon: Lahti lukustamis juhendid'
+    omniauth_callbacks:
+      failure: Ei saanud Teid tuvastada %{kind} kaudu, kuna "%{reason}".
+      success: Tuvastamine %{kind} konto järgi õnnestus.
+    passwords:
+      no_token: Te ei saa sellele leheküljele ligi ilma tulemata salasõna lähtestamis e-kirjast. Kui Te tulete salasõna lähtestamis e-kirjast, palun olge kindel, et kasutasite tervet Teile antud URL-i.
+      send_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+      send_paranoid_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+      updated: Teie salasõna muutmine õnnestus. Te olete nüüd sisse loginud.
+      updated_not_active: Teie salasõna muutmine õnnestus.
+    registrations:
+      destroyed: Nägemist! Teie konto sulgemine õnnestus. Me loodame Teid varsti taas näha.
+      signed_up: Tere tulemast! Teie konto loomine õnnestus.
+      signed_up_but_inactive: Teie konto loodi edukalt, kuid me ei saanud Teid sisse logida, kuna teie konto pole veel aktiveeritud.
+      signed_up_but_locked: Teie konto loodi edukalt, kuid me ei saanud Teid sisse logida, kuna teie konto on lukustatud.
+      signed_up_but_pending: Kiri kinnituslingiga saadeti Teie e-postile. Pärast seda, kui te vajutate lingile, vaatame me Teie taotluse üle. Teid teavitatakse, kui see on vastu võetud.
+      signed_up_but_unconfirmed: Kiri kinnituslingiga saadeti Teie e-postile. Palun järgige linki, et aktiveerida oma konto. Palun kontrollige oma rämpsposti, kui Te ei saanud seda e-kirja.
+      update_needs_confirmation: Teie konto uuendamine õnnestus, kuid me peame Teie e-postiaadressit kinnitama. Palun kontrollige oma e-posti ning järgige linki, et kinnitada oma e-postiaadress. Palun kontrollige oma rämpsposti, kui Te ei saanud seda e-kirja.
+      updated: Teie konto uuendamine õnnestus.
+    sessions:
+      already_signed_out: Väljumine õnnestus.
+      signed_in: Sisenemine õnnestus.
+      signed_out: Väljumine õnnestus.
+    unlocks:
+      send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma konto lukust lahti teha. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+      send_paranoid_instructions: Kui Teie konto eksisteerib, saate Te paari minuti pärast e-kirja juhistega, kuidas see lukust lahti teha. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja.
+      unlocked: Teie konto lukust lahti võtmine õnnestus. Jätkamiseks, palun logige sisse.
+  errors:
+    messages:
+      already_confirmed: oli juba kinnitatud, palun proovige sisse logida
+      confirmation_period_expired: peab olema kinnitatud ajavahemikus %{period} - palun taotlege uus
+      expired: on aegunud, palun taotlege uus
+      not_found: ei leitud
+      not_locked: ei olnud lukustatud
+      not_saved:
+        one: '1 viga takistas seda %{resource} salvestamast:'
+        other: "%{count} viga takistas seda %{resource} salvestamast:"
diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml
index 8a9a65465..dd18229df 100644
--- a/config/locales/devise.th.yml
+++ b/config/locales/devise.th.yml
@@ -9,7 +9,9 @@ th:
       already_authenticated: คุณได้ลงชื่อเข้าอยู่แล้ว
       inactive: ยังไม่ได้เปิดใช้งานบัญชีของคุณ
       invalid: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง"
+      locked: บัญชีของคุณถูกล็อก
       not_found_in_database: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง"
+      pending: บัญชีของคุณกำลังถูกตรวจสอบ
       timeout: เซสชันของคุณหมดอายุแล้ว โปรดลงชื่อเข้าอีกครั้งเพื่อดำเนินการต่อ
     mailer:
       email_changed:
@@ -23,6 +25,7 @@ th:
       send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.
       send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.
     registrations:
+      signed_up_but_pending: ข้อความที่ได้รับการยืนยันจะถูกส่งไปยังอีเมลของคุณ หลังจากนั้นให้ทำการคลิกลิงก์ เพื่อให้พวกเราตรวจสอบข้อมูลเสร็จเรียบร้อย และหลังจากนั้นคุณจะได้รับการยืนยัน
       signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account.
       update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address.
     sessions:
diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml
index 6ec01b3d7..c44bda5ea 100644
--- a/config/locales/devise.uk.yml
+++ b/config/locales/devise.uk.yml
@@ -7,26 +7,49 @@ uk:
       send_paranoid_instructions: Якщо Ваша поштова скринька існує в нашій базі даних, то Ви отримаєте листа з інструкціями щодо підтвердження Вашої адреси через декілька хвилин.
     failure:
       already_authenticated: Ви вже увійшли.
-      inactive: Ваш акаунт ще не активований.
+      inactive: Ваш обліковий запис ще не активований.
       invalid: Неправильний %{authentication_keys} або пароль.
-      last_attempt: У вас є остання спроба, після якої вхід буде заблокований.
-      locked: Ваш акаунт заблокований.
+      last_attempt: У вас залишилась ще одна спроба, після якої ваш обліковий запис буде заблоковано.
+      locked: Ваш обліковий запис заблоковано.
       not_found_in_database: Неправильний %{authentication_keys} або пароль.
+      pending: Ваш обліковий запис ще перебуває на розгляді.
       timeout: Ваша сесія вичерпана. Будь ласка, зайдіть знову, щоб продовжити.
       unauthenticated: Для продовження Вам потрібно увійти або зареєструватися.
       unconfirmed: Для продовження Вам потрібно підтвердити Вашу поштову скриньку.
     mailer:
       confirmation_instructions:
+        action: Підтвердити адресу електронної пошти
+        action_with_app: Підтвердити та повернутися до %{app}
+        explanation: Ви створили обліковий запис на %{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: 'Mastodon: Інструкції для скидання паролю'
+        title: Скидання пароля
       unlock_instructions:
         subject: 'Mastodon: Інструкції для розблокування'
     omniauth_callbacks:
       failure: Нам не вдалося аутентифікувати Вас з %{kind} через те, що "%{reason}".
-      success: Успішно аутентифіковано з акаунту %{kind}.
+      success: Успішно аутентифіковано з облікового запису %{kind}.
     passwords:
       no_token: Ви не можете отримати доступ до цієї сторінки без переходу за посиланням з листа з інструкціями. Якщо ви дійсно перейшли з цього листа, переконайтеся, що ви перейшли за повним посиланням.
       send_instructions: Ви отримаєте листа з інструкціями щодо зміни паролю через декілька хвилин.
@@ -34,21 +57,22 @@ uk:
       updated: Ваш пароль було успішно змінено. Вхід виконано.
       updated_not_active: Ваш пароль було успішно змінено.
     registrations:
-      destroyed: До побачення! Ваш акаунт було успішно видалено. Сподіваємось, що Ви скоро повернетеся.
+      destroyed: До побачення! Ваш обліковий запис було успішно видалено. Сподіваємось, Ви скоро повернетеся.
       signed_up: Ласкаво просимо! Ви були успішно зареєстровані.
-      signed_up_but_inactive: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки Ваш акаунт ще не активовано.
-      signed_up_but_locked: Ви були успішно зареєстровані, аале ми не можемо авторизувати вас, оскільки Ваш акаунт заблокований.
-      signed_up_but_unconfirmed: Повідомлення з посиланням на підтвердження будо відправлено на Вашу поштову скриньку. Будь ласка, перейдіть за посиланням, щоб активувати Ваш акаунт.
-      update_needs_confirmation: Ви успішно оновили Ваш акаунт, але нам потрібно підтвердити Вашу нову поштову адресу. Будь ласка, перевірте Вашу скриньку та перейдіть за посиланням, щоб активувати Вашу нову адресу.
-      updated: Ваш акаунт було успішно оновлено.
+      signed_up_but_inactive: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис ще не активовано.
+      signed_up_but_locked: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис заблокований.
+      signed_up_but_pending: Лист з посиланням для підтвердження було надіслано на вашу електронну пошту. Коли ви перейдете за цим посиланням, ми розглянемо ваш запит. Вас буде проінформовано, якщо запит буде схвалено.
+      signed_up_but_unconfirmed: Повідомлення з посиланням на підтвердження будо відправлено на вашу адресу електронної пошти. Будь ласка, перейдіть за посиланням, щоб активувати ваш обліковий запис. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці.
+      update_needs_confirmation: Ваш обліковий запис оновлено, але необхідно підтвердити нову адресу електронної пошти. Будь ласка, перевірте свою електронну скриньку і перейдіть за посиланням "Підтвердити", шоб завершити оновлення адреси електронної пошти. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці.
+      updated: Ваш обліковий запис було успішно оновлено.
     sessions:
       already_signed_out: Ви вже вийшли з акаунту.
       signed_in: Ви успішно увійшли в акаунт.
       signed_out: Ви успішно вийшли з акаунту.
     unlocks:
-      send_instructions: Ви отримаєте листа з інструкціями щодо розблокування Вашого акаунту через декілька хвилин.
-      send_paranoid_instructions: Якщо Ваш акаунт існує, Ви отримаєте листа з інструкціями щодо розблокування Вашого акаунту через декілька хвилин.
-      unlocked: Ваш акаунт було успішно активовано. Будь ласка, увійдіть, щоб продовжити.
+      send_instructions: За кілька хвилин ви отримаєте електронного листа з інструкціями щодо розблокування вашого облікового запису. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці.
+      send_paranoid_instructions: Якщо ваш обліковий запис існує, за декілька хвилин ви отримаєте електронного листа з інструкціями щодо його розблокування. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці.
+      unlocked: Ваш обліковий запис було успішно розблоковано. Будь ласка, увійдіть для продовження.
   errors:
     messages:
       already_confirmed: вже був підтверджений, будь ласка, спробуйте увійти
@@ -57,7 +81,7 @@ uk:
       not_found: не знайдено
       not_locked: не був заблокований
       not_saved:
-        few: "%{count} помилок не дало цьому %{resource} зберегтися:"
+        few: "%{count} помилки не дали цьому %{resource} зберегтися:"
         many: "%{count} помилок не дало цьому %{resource} зберегтися:"
         one: '1 помилка не дала цьому %{resource} зберегтися:'
         other: "%{count} помилок не дало цьому %{resource} зберегтися:"
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index e80ba3236..171e7d404 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -114,6 +114,10 @@ eo:
       application:
         title: OAuth-a rajtigo bezonata
     scopes:
+      admin:read: legu ĉiujn datumojn en la servilo
+      admin:read:accounts: legas senteman informacion de ĉiuj kontoj
+      admin:read:reports: legas senteman informacion de ĉiuj raportoj kun raportis kontojn
+      admin:write: modifu ĉiujn datumojn en la servilo
       follow: ŝanĝi rilatojn al aliaj kontoj
       push: ricevi viajn puŝ-sciigojn
       read: legi ĉiujn datumojn de via konto
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
new file mode 100644
index 000000000..f2a33ad0a
--- /dev/null
+++ b/config/locales/doorkeeper.et.yml
@@ -0,0 +1,148 @@
+---
+et:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Rakenduse nimi
+        redirect_uri: Suunamise URL
+        scopes: Ulatused
+        website: Rakenduse veebileht
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: ei tohi sisaldada fragmenti.
+              invalid_uri: peab olema õige URI.
+              relative_uri: peab olema absoluutne URI.
+              secured_uri: peab olema HTTPS/SSL URI.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Autoriseeri
+        cancel: Katkesta
+        destroy: Hävita
+        edit: Redigeeri
+        submit: Saada
+      confirmations:
+        destroy: Olete kindel?
+      edit:
+        title: Redigeeri rakendust
+      form:
+        error: Oih! Kontrollige oma vormi võimalikest vigadest
+      help:
+        native_redirect_uri: Kasutage %{native_redirect_uri} kohalikeks testideks
+        redirect_uri: Kasuta ühte rida iga URI jaoks
+        scopes: Eralda ulatused tühikutega. Jäta tühjaks, et kasutada vaikimisi ulatusi.
+      index:
+        application: Rakendus
+        callback_url: Ümbersuunamise URL
+        delete: Kustuta
+        name: Nimi
+        new: Uus rakendus
+        scopes: Ulatused
+        show: Kuva
+        title: Teie rakendused
+      new:
+        title: Uus rakendus
+      show:
+        actions: Tegevused
+        application_id: Kliendi võti
+        callback_urls: Ümbersuunamise URLid
+        scopes: Ulatused
+        secret: Kliendi salasõna
+        title: 'Rakendus: %{name}'
+    authorizations:
+      buttons:
+        authorize: Autoriseeri
+        deny: Keeldu
+      error:
+        title: Ilmnes viga
+      new:
+        able_to: Sellel on võimalik
+        prompt: Rakendus %{client_name} soovib ligipääsu Teie kontole
+        title: Autoriseerimine vajalik
+      show:
+        title: Kopeeri see autoriseerimisvõti ja kleebi see rakendusse.
+    authorized_applications:
+      buttons:
+        revoke: Tühista
+      confirmations:
+        revoke: Olete kindel?
+      index:
+        application: Rakendus
+        created_at: Autoriseeritud
+        date_format: "%Y-%m-%d %H:%M:%S"
+        scopes: Ulatused
+        title: Autoriseeritud rakendused
+    errors:
+      messages:
+        access_denied: Ressursi omanik või autoriseerimisserver lükkas taotluse tagasi.
+        credential_flow_not_configured: Resource Owner Password Credentials vool ebaõnnestus, kuna Doorkeeper.configure.resource_owner_from_credentials ei ole seadistatud.
+        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:
+          expired: Ligipääsuvõti on aegunud
+          revoked: Ligipääsuvõti on tagasi võetud
+          unknown: Ligipääsuvõti on vale
+        resource_owner_authenticator_not_configured: Ressursi omaniku leidmine ebaõnnestus, kuna Doorkeeper.configure.resource_owner_authenticator pole seadistatud.
+        server_error: Autoriseerimisserveril toimus ootamatu viga ning selle tulemusena ei läinud taotlus läbi.
+        temporarily_unavailable: Autoriseerimisserver ei ole hetkel võimeline taotlust vastu võtma, mis võib olla tingitud serveri ülekoormusest või hooldustöödest.
+        unauthorized_client: Klient ei ole lubatud seda taotlust vastu võtma kasutades seda meetodit.
+        unsupported_grant_type: Autoriseerimisloa tüüp ei ole toetatud antud serveri poolt.
+        unsupported_response_type: Autoriseerimisserver ei toeta seda vastuse tüüpi.
+    flash:
+      applications:
+        create:
+          notice: Rakendus loodud.
+        destroy:
+          notice: Rakendus kustutatud.
+        update:
+          notice: Rakendus uuendatud.
+      authorized_applications:
+        destroy:
+          notice: Rakendus tagasi lükatud.
+    layouts:
+      admin:
+        nav:
+          applications: Rakendused
+          oauth2_provider: OAuth2 pakkuja
+      application:
+        title: OAuth autoriseerimine vajalik
+    scopes:
+      admin:read: lugeda kõiki andmeid serveril
+      admin:read:accounts: lugeda privaatset informatsiooni kõikidel kontodel
+      admin:read:reports: lugeda privaatset informatsiooni kõikide teavituste ja teavitatud kasutajate kohta
+      admin:write: muuta kõiki andmeid serveril
+      admin:write:accounts: teostada moderaatori tegevusi kontodel
+      admin:write:reports: teostada moderaatori tegevusi teavitustel
+      follow: muuta kontode suhteid
+      push: saada Teie teateid
+      read: lugeda kogu Teie konto andmeid
+      read:accounts: näha konto informatsiooni
+      read:blocks: näha Teie blokeeringuid
+      read:favourites: näha Teie lemmikuid
+      read:filters: näha Teie filtreid
+      read:follows: näha Teie jälgimisi
+      read:lists: näha Teie nimekirju
+      read:mutes: näha Teie vaigistusi
+      read:notifications: näha Teie teateid
+      read:reports: näha Teie teavitusi
+      read:search: otsida Teie nimel
+      read:statuses: näha kõiki staatuseid
+      write: redigeerida kogu Teie konto andmeid
+      write:accounts: redigeerida Teie profiili
+      write:blocks: blokeerida kontosid ja domeene
+      write:favourites: lisada staatuseid lemmikuks
+      write:filters: luua filtreid
+      write:follows: jälgida inimesi
+      write:lists: luua nimekirju
+      write:media: üles laadida meediafaile
+      write:mutes: vaigista inimesi ja vestluseid
+      write:notifications: puhasta Teie teateid
+      write:reports: teavitada teistest inimestest
+      write:statuses: avaldada staatuseid
diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml
index 76e725deb..8337325e2 100644
--- a/config/locales/doorkeeper.ko.yml
+++ b/config/locales/doorkeeper.ko.yml
@@ -78,12 +78,23 @@ ko:
     errors:
       messages:
         access_denied: 리소스 소유자 또는 권한 부여 서버가 요청을 거부했습니다.
+        credential_flow_not_configured: Doorkeeper.configure.resource_owner_from_credentials의 설정이 되어있지 않아 리소스 소유자 패스워드 자격증명이 실패하였습니다.
+        invalid_client: 알 수 없는 클라이언트이기 때문에 클라이언트 인증이 실패하였습니다, 클라이언트 자격증명이 포함되지 않았거나, 지원 되지 않는 메소드입니다.
+        invalid_grant: 제공된 권한 부여가 잘못되거나, 만료되었거나, 취소되었거나, 권한 부여 요청에 사용된 리디렉션 URI가 일치하지 않거나, 다른 클라이언트에 지정되었습니다.
         invalid_redirect_uri: 리디렉션 URI가 올바르지 않습니다
         invalid_request: 요청에 필요한 매개변수가 없거나, 지원 되지 않는 매개변수가 있거나, 형식이 잘못되었습니다.
+        invalid_resource_owner: 제공 된 리소스 소유자 자격증명이 올바르지 않거나 리소스 소유자를 찾을 수 없습니다
+        invalid_scope: 요청한 범위가 올바르지 않거나, 알 수 없거나, 잘못 된 형식입니다.
         invalid_token:
           expired: 액세스 토큰이 만료되었습니다.
           revoked: 액세스 토큰이 취소되었습니다.
           unknown: 액세스 토큰이 잘못되었습니다.
+        resource_owner_authenticator_not_configured: Doorkeeper.configure.resource_owner_authenticator가 설정되지 않아 리소스 소유자 찾기가 실패하였습니다.
+        server_error: 권한 부여 서버에 예기치 않은 상태가 발생하여, 요청을 수행할 수 없습니다.
+        temporarily_unavailable: 권한 부여 서버가 일시적인 과부하 또는 유지 관리로 인해 요청을 현재 처리할 수 없습니다.
+        unauthorized_client: 클라이언트가 이 방법을 사용하여 해당 요청을 실행하도록 허용되지 않았습니다.
+        unsupported_grant_type: 권한 부여 유형이 권한 부여 서버에 의해 지원되지 않습니다.
+        unsupported_response_type: 권한 부여 서버가 이 응답 유형을 지원하지 않습니다.
     flash:
       applications:
         create:
@@ -103,6 +114,12 @@ ko:
       application:
         title: OAuth 인증이 필요합니다
     scopes:
+      admin:read: 서버의 모든 데이터 읽기
+      admin:read:accounts: 모든 계정의 민감한 정보 읽기
+      admin:read:reports: 신고와 신고 된 계정의 민감한 정보 읽기
+      admin:write: 서버의 모든 데이터 수정
+      admin:write:accounts: 계정에 모더레이션 조치 취하기
+      admin:write:reports: 신고에 모더레이션 조치 취하기
       follow: 계정의 관계를 수정
       push: 푸시 알림을 받기
       read: 계정의 모든 데이터를 읽기
diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml
index ebe90a189..bd493f793 100644
--- a/config/locales/doorkeeper.ru.yml
+++ b/config/locales/doorkeeper.ru.yml
@@ -114,6 +114,12 @@ ru:
       application:
         title: Требуется авторизация OAuth
     scopes:
+      admin:read: читать все данные на сервере
+      admin:read:accounts: читать конфиденциальную информацию всех аккаунтов
+      admin:read:reports: читать конфиденциальную информацию о всех жалобах и аккаунтах с жалобами
+      admin:write: модифицировать все данные на сервере
+      admin:write:accounts: производить модерацию аккаунтов
+      admin:write:reports: производить модерацию жалоб
       follow: подписываться, отписываться, блокировать и разблокировать аккаунты
       push: принимать push-уведомления для Вашего аккаунта
       read: читать данные Вашего аккаунта
diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml
index 9eaef177f..a08a386f2 100644
--- a/config/locales/doorkeeper.sk.yml
+++ b/config/locales/doorkeeper.sk.yml
@@ -115,6 +115,7 @@ sk:
     scopes:
       admin:read: prezeraj všetky dáta na serveri
       admin:read:accounts: prezeraj chúlostivé informácie na všetkých účtoch
+      admin:read:reports: čítaj chulostivé informácie o všetkých hláseniach a nahlásených účtoch
       admin:write: uprav všetky dáta na serveri
       admin:write:accounts: urob moderovacie úkony na účtoch
       admin:write:reports: urob moderovacie úkony voči hláseniam
diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml
index 305a5c1d6..6e5dc1e42 100644
--- a/config/locales/doorkeeper.uk.yml
+++ b/config/locales/doorkeeper.uk.yml
@@ -3,7 +3,7 @@ uk:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Ім'я
+        name: Назва додатку
         redirect_uri: URI перенаправлення
         scopes: Рамки
         website: Веб-сайт додатку
@@ -13,9 +13,9 @@ uk:
           attributes:
             redirect_uri:
               fragment_present: не може містити фрагмент.
-              invalid_uri: повинен бути дійсним URI.
-              relative_uri: повинен бути абсолютним URI.
-              secured_uri: повинен бути HTTPS/SSL URI.
+              invalid_uri: має бути дійсним URI.
+              relative_uri: має бути абсолютним URI.
+              secured_uri: має бути URI HTTPS/SSL.
   doorkeeper:
     applications:
       buttons:
@@ -35,9 +35,13 @@ uk:
         redirect_uri: Використовуйте одну стрічку на URI
         scopes: Відділяйте області видимості пробілами. Залишайте порожніми, щоб використовувати області видимості за промовчуванням.
       index:
+        application: Додаток
         callback_url: URL зворотнього виклику
+        delete: Видалити
         name: Назва
         new: Новий додаток
+        scopes: Області видимості
+        show: Показати
         title: Ваші додатки
       new:
         title: Новий додаток
@@ -56,8 +60,10 @@ uk:
         title: Сталася помилка
       new:
         able_to: Він зможе
-        prompt: Податок %{client_name} просить доступу до вашого акаунту
+        prompt: Додаток %{client_name} запитує доступ до вашого облікового запису
         title: Необхідна авторизація
+      show:
+        title: Скопіюйте цей код авторизації та вставте його у додаток.
     authorized_applications:
       buttons:
         revoke: Відкликати авторизацію
@@ -78,7 +84,7 @@ uk:
         invalid_redirect_uri: Включений URI перенаправлення не є дійсним.
         invalid_request: У запиті відсутній обов'язковий параметр, міститься непідтримуване значення параметра, або він сформований неправильно.
         invalid_resource_owner: Надані дані власника ресурсу не є дійсними, або власника ресурсу неможливо знайти
-        invalid_scope: Запитуваний дозвыд недійсний, невідомий, або неправильно сформований.
+        invalid_scope: Запитуваний дозвіл недійсний, невідомий, або неправильно сформований.
         invalid_token:
           expired: Токен доступу прострочено
           revoked: Токен доступу було відкликано
@@ -108,6 +114,34 @@ uk:
       application:
         title: Необхідна авторизація OAuth
     scopes:
-      follow: підписуватися, відписуватися, блокувати та розблоковувати акаунти
-      read: Читати дані Вашого акаунта
-      write: Публікувати від Вашого імені
+      admin:read: читати всі дані на сервері
+      admin:read:accounts: читати конфіденційну інформацію усіх акаунтів
+      admin:read:reports: читати дражливу інформацію усіх скарг та облікових записів зі скаргами
+      admin:write: модифікувати всі дані на сервері
+      admin:write:accounts: модерувати облікові записи
+      admin:write:reports: модерувати скарги
+      follow: змінювати стосунки облікового запису
+      push: отримувати Ваші Push-повідомлення
+      read: читати усі дані вашого облікового запису
+      read:accounts: бачити інформацію про облікові записи
+      read:blocks: бачити Ваші блокування
+      read:favourites: бачити Ваші вподобані пости
+      read:filters: бачити Ваші фільтри
+      read:follows: бачити Ваші підписки
+      read:lists: бачити Ваші списки
+      read:mutes: бачити ваші заглушення
+      read:notifications: бачити Ваші сповіщення
+      read:reports: бачити Ваші скарги
+      read:statuses: бачити всі статуси
+      write: змінювати усі дані вашого облікового запису
+      write:accounts: змінювати ваш профіль
+      write:blocks: блокувати облікові записи і домени
+      write:favourites: вподобані статуси
+      write:filters: створювати фільтри
+      write:follows: підписуйтесь на людей
+      write:lists: створювайте списки
+      write:media: завантажити медіафайли
+      write:mutes: заглушити людей або бесіди
+      write:notifications: очищувати Ваші сповіщення
+      write:reports: надіслати скаргу про людей
+      write:statuses: публікувати статуси
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 21b0da25c..af7d3cc9d 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -10,8 +10,8 @@ el:
     api: API
     apps: Εφαρμογές κινητών
     apps_platforms: Χρησιμοποίησε το Mastodon από το iOS, το Android και αλλού
-    browse_directory: Ξεφύλλισε ένα κατάλογο χρηστών και φίλτραρε ανά ενδιαφέροντα
-    browse_public_posts: Κοίταξε μια ζωντανή ροή δημοσιεύσεων στο Mastodon
+    browse_directory: Ξεφύλλισε τον κατάλογο χρηστών και ψάξε ανά ενδιαφέροντα
+    browse_public_posts: Ξεφύλλισε τη ζωντανή ροή του Mastodon
     contact: Επικοινωνία
     contact_missing: Δεν έχει οριστεί
     contact_unavailable: Μ/Δ
@@ -24,6 +24,9 @@ el:
     generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο"
     get_apps: Δοκίμασε μια εφαρμογή κινητού
     hosted_on: Το Mastodon φιλοξενείται στο %{domain}
+    instance_actor_flash: |
+      Αυτός ο λογαριασμός είναι εικονικός και απεικονίζει τον κόμβο, όχι κάποιο συγκεκριμένο χρήστη.
+      Χρησιμεύει στη λειτουργία της ομοσπονδίας και δε θα πρέπει να αποκλειστεί, εκτός κι αν είναι επιθυμητός ο αποκλεισμός ολόκληρου του κόμβου. Σε αυτή την περίπτωση θα πρέπει να χρησιμοποιηθεί η λειτουργία αποκλεισμού τομέα.
     learn_more: Μάθε περισσότερα
     privacy_policy: Πολιτική απορρήτου
     see_whats_happening: Μάθε τι συμβαίνει
@@ -183,6 +186,7 @@ el:
       username: Όνομα χρήστη
       warn: Προειδοποίηση
       web: Διαδίκτυο
+      whitelisted: Εγκεκριμένοι
     action_logs:
       actions:
         assigned_to_self_report: Ο/Η %{name} ανάθεσε την καταγγελία %{target} στον εαυτό του/της
@@ -243,6 +247,7 @@ el:
       updated_msg: Επιτυχής ενημέρωση του emoji!
       upload: Ανέβασμα
     dashboard:
+      authorized_fetch_mode: Λειτουργία εγκεκριμένης ανάκτησης
       backlog: χρονοκαθυστερημένες εργασίες
       config: Διαμόρφωση
       feature_deletions: Διαγραφή λογαριασμών
@@ -250,6 +255,7 @@ el:
       feature_profile_directory: Κατάλογος χρηστών
       feature_registrations: Εγγραφές
       feature_relay: Ανταποκριτής ομοσπονδίας
+      feature_spam_check: Καταπολέμηση ανεπιθύμητης επικοινωνίας
       feature_timeline_preview: Προεπισκόπιση ροής
       features: Λειτουργίες
       hidden_service: Ομοσπονδία με κρυμμένες υπηρεσίες
@@ -265,6 +271,12 @@ el:
       week_interactions: αλληλεπιδράσεις αυτή την εβδομάδα
       week_users_active: ενεργοί αυτή την εβδομάδα
       week_users_new: χρήστες αυτή την εβδομάδα
+      whitelist_mode: Λειτουργία εγκρίσεων
+    domain_allows:
+      add_new: Έγκριση τομέα
+      created_msg: Ο τομέας εγκρίθηκε με επιτυχία
+      destroyed_msg: Ο τομέας δεν είναι πια εγκεκριμένος
+      undo: Αφαίρεση έγκρισης
     domain_blocks:
       add_new: Προσθήκη νέου
       created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία
@@ -449,6 +461,9 @@ el:
         desc_html: Μπορείς να γράψεις τη δική σου πολιτική απορρήτου, όρους χρήσης ή άλλους νομικούς όρους. Μπορείς να χρησιμοποιήσεις HTML tags
         title: Προσαρμοσμένοι όροι χρήσης της υπηρεσίας
       site_title: Όνομα κόμβου
+      spam_check_enabled:
+        desc_html: Το Mastodon μπορεί να αποσιωπεί και να καταγγέλει αυτόματα λογαριασμούς βάσει της συμπεριφοράς τους όπως για παράδειγμα επαναλαμβανόμενη αποστολή ανεπιθύμητων μηνυμάτων. Μπορεί να υπάρξουν και λανθασμένες ανιχνεύσεις.
+        title: Καταπολέμηση ανεπιθύμητης επικοινωνίας
       thumbnail:
         desc_html: Χρησιμοποιείται για προεπισκοπήσεις μέσω του OpenGraph και του API. Συστήνεται 1200x630px
         title: Μικρογραφία κόμβου
@@ -456,6 +471,9 @@ el:
         desc_html: Εμφάνισε τη δημόσια ροή στην αρχική σελίδα
         title: Προεπισκόπιση ροής
       title: Ρυθμίσεις ιστότοπου
+      trends:
+        desc_html: Δημόσια εμφάνιση ταμπελών που έχουν ήδη εγκριθεί και είναι δημοφιλείς
+        title: Δημοφιλείς ταμπέλες
     statuses:
       back_to_account: Επιστροφή στη σελίδα λογαριασμού
       batch:
@@ -470,13 +488,15 @@ el:
       title: Καταστάσεις λογαριασμού
       with_media: Με πολυμέσα
     tags:
-      accounts: Λογαριασμοί
-      hidden: Κρυμμένες
-      hide: Απόκρυψη από κατάλογο
-      name: Ταμπέλα
+      context: Συνάφεια
+      directory: Στον κατάλογο
+      in_directory: "%{count} στον κατάλογο"
+      review: Κατάσταση έγκρισης
+      reviewed: Εγκεκριμένες
       title: Ταμπέλες
-      unhide: Εμφάνιση σε κατάλογο
-      visible: Εμφανείς
+      trending_right_now: Δημοφιλείς αυτή τη στιγμή
+      unique_uses_today: "%{count} σημερινές δημοσιεύσεις"
+      updated_msg: Οι ρυθμίσεις των ταμπελών ενημερώθηκαν επιτυχώς
     title: Διαχείριση
     warning_presets:
       add_new: Πρόσθεση νέου
@@ -492,11 +512,15 @@ el:
       body: Ο/Η %{reporter} κατήγγειλε τον/την %{target}
       body_remote: Κάποιος/α από τον τομέα %{domain} κατήγγειλε τον/την %{target}
       subject: Νέα καταγγελία για %{instance} (#%{id})
+    new_trending_tag:
+      body: 'Η ταμπέλα #%{name} είναι δημοφιλής σήμερα, αλλά δεν έχει εγκριθεί μέχρι τώρα. Δεν θα εμφανίζεται δημοσίως μέχρι να δοθεί έγκρισή, αλλιώς αποθηκεύστε τη φόρμα ως έχει για να μην την δείτε ξανά.'
+      subject: Νέα ταμπέλα προς έγκριση στο %{instance} (#%{name})
   appearance:
     advanced_web_interface: Προηγμένη λειτουργία χρήσης
     advanced_web_interface_hint: 'Αν θέλεις να χρησιμοποιήσεις ολόκληρο το πλάτος της οθόνης σου, η προηγμένη λειτουργία χρήσης σου επιτρέπει να ορίσεις πολλαπλές κολώνες ώστε να βλέπεις ταυτόχρονα όση πληροφορία θέλεις: Την αρχική ροή, τις ειδοποιήσεις, την ομοσπονδιακή ροή και όσες λίστες και ταμπέλες θέλεις.'
     animations_and_accessibility: Κίνηση και προσβασιμότητα
     confirmation_dialogs: Ερωτήσεις επιβεβαίωσης
+    discovery: Εξερεύνηση
     sensitive_content: Ευαίσθητο περιεχόμενο
   application_mailer:
     notification_preferences: Αλλαγή προτιμήσεων email
@@ -517,7 +541,7 @@ el:
     apply_for_account: Αίτηση πρόσκλησης
     change_password: Συνθηματικό
     checkbox_agreement_html: Συμφωνώ με τους <a href="%{rules_path}" target="_blank">κανονισμούς του κόμβου</a> και <a href="%{terms_path}" target="_blank">τους όρους χρήσης</a>
-    confirm_email: Επιβεβαίωση email
+    checkbox_agreement_without_rules_html: Συμφωνώ με τους <a href="%{terms_path}" target="_blank">όρους χρήσης</a>
     delete_account: Διαγραφή email
     delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς <a href="%{path}">να συνεχίσεις εδώ</a>. Θα σου ζητηθεί επιβεβαίωση.
     didnt_get_confirmation: Δεν έλαβες τις οδηγίες επιβεβαίωσης;
@@ -537,6 +561,15 @@ el:
     reset_password: Επαναφορά συνθηματικού
     security: Ασφάλεια
     set_new_password: Ορισμός νέου συνθηματικού
+    setup:
+      email_below_hint_html: Αν η παρακάτω διεύθυνση email είναι λανθασμένη, μπορείτε να την ενημερώσετε και να λάβετε νέο email επιβεβαίωσης.
+      email_settings_hint_html: Το email επιβεβαίωσης στάλθηκε στο %{email}. Αν η διεύθυνση αυτή δεν είναι σωστή, μπορείτε να την ενημερώσετε στις ρυθμίσεις λογαριασμού.
+      title: Ρυθμίσεις
+    status:
+      account_status: Κατάσταση λογαριασμού
+      confirming: Αναμονή για ολοκλήρωση επιβεβαίωσης του email.
+      functional: Ο λογαριασμός σου είναι πανέτοιμος.
+      pending: Η εφαρμογή σας εκκρεμεί έγκρισης, πιθανόν θα διαρκέσει κάποιο χρόνο. Θα λάβετε email αν εγκριθεί.
     trouble_logging_in: Πρόβλημα σύνδεσης;
   authorize_follow:
     already_following: Ήδη ακολουθείς αυτό το λογαριασμό
@@ -874,6 +907,8 @@ el:
     profile: Προφίλ
     relationships: Ακολουθεί και ακολουθείται
     two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA)
+  spam_check:
+    spam_detected_and_silenced: 'Αυτόματο μήνυμα: Ανιχνεύθηκε ανεπιθύμητο περιεχόμενο (σπαμ) και ο αποστολέας αποσιωπήθηκε αυτόματα. Αν έγινε λάθος, παρακαλώ διακόψτε την αποσιώπηση του λογαριασμού.'
   statuses:
     attached:
       description: 'Συνημμένα: %{attached}'
@@ -915,6 +950,8 @@ el:
     pinned: Καρφιτσωμένο τουτ
     reblogged: προωθημένο
     sensitive_content: Ευαίσθητο περιεχόμενο
+  tags:
+    does_not_match_previous_name: δεν ταιριάζει με το προηγούμενο όνομα
   terms:
     body_html: |
       <h2>Πολιτική Απορρήτου</h2>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 79b8e02bd..be190f0f1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -45,6 +45,8 @@ en:
     what_is_mastodon: What is Mastodon?
   accounts:
     choices_html: "%{name}'s choices:"
+    endorsements_hint: You can endorse people you follow from the web interface, and they will show up here.
+    featured_tags_hint: You can feature specific hashtags that will be displayed here.
     follow: Follow
     followers:
       one: Follower
@@ -422,6 +424,13 @@ en:
       custom_css:
         desc_html: Modify the look with CSS loaded on every page
         title: Custom CSS
+      domain_blocks:
+        all: To everyone
+        disabled: To no one
+        title: Show domain blocks
+        users: To logged-in local users
+      domain_blocks_rationale:
+        title: Show rationale
       enable_keybase:
         desc_html: Allow your users to prove their identity via keybase
         title: Enable keybase integration
@@ -641,6 +650,23 @@ en:
     people:
       one: "%{count} person"
       other: "%{count} people"
+  domain_blocks:
+    blocked_domains: List of limited and blocked domains
+    description: This is the list of servers that %{instance} limits or reject federation with.
+    domain: Domain
+    media_block: Media block
+    no_domain_blocks: "(No domain blocks)"
+    severity: Severity
+    severity_legend:
+      media_block: Media files coming from the server are neither fetched, stored, or displayed to the user.
+      silence: Accounts from silenced servers can be found, followed and interacted with, but their toots will not appear in the public timelines, and notifications from them will not reach local users who are not following them.
+      suspension: No content from suspended servers is stored or displayed, nor is any content sent to them. Interactions from suspended servers are ignored.
+      suspension_disclaimer: Suspended servers may occasionally retrieve public content from this server.
+      title: Severities
+    show_rationale: Show rationale
+    silence: Silence
+    suspension: Suspension
+    title: "%{instance} List of blocked instances"
   domain_validator:
     invalid_domain: is not a valid domain name
   errors:
@@ -677,6 +703,7 @@ en:
     add_new: Add new
     errors:
       limit: You have already featured the maximum amount of hashtags
+    hint_html: "<strong>What are featured hashtags?</strong> They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects."
   filters:
     contexts:
       home: Home timeline
@@ -697,6 +724,7 @@ en:
     developers: Developers
     more: More…
     resources: Resources
+    trending_now: Trending now
   generic:
     all: All
     changes_saved_msg: Changes successfully saved!
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index de28be010..edab60586 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -183,6 +183,7 @@ eo:
       username: Uzantnomo
       warn: Averti
       web: Reto
+      whitelisted: En la blanka listo
     action_logs:
       actions:
         assigned_to_self_report: "%{name} asignis signalon %{target} al si mem"
@@ -250,6 +251,7 @@ 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
@@ -265,11 +267,15 @@ eo:
       week_interactions: interagoj tiusemajne
       week_users_active: aktivaj tiusemajne
       week_users_new: uzantoj tiusemajne
+      whitelist_mode: En la blanka listo
+    domain_allows:
+      add_new: En la blanka listo domajno
     domain_blocks:
       add_new: Aldoni novan
       created_msg: Domajna blokado en traktado
       destroyed_msg: Domajna blokado malfarita
       domain: Domajno
+      existing_domain_block_html: Vi jam trudis pli striktajn limojn al %{name}, vi devas <a href="%{unblock_url}">malbloki ĝin</a> unue.
       new:
         create: Krei blokadon
         hint: La domajna blokado ne evitigos kreadon de novaj kontoj en la datumbazo, sed aplikos specifajn kontrolajn agojn sur ĉi tiujn kontojn aŭtomate kaj retroaktive.
@@ -279,6 +285,8 @@ eo:
           silence: Kaŝi
           suspend: Haltigi
         title: Nova domajna blokado
+      private_comment: Privata komento
+      public_comment: Publika komento
       reject_media: Malakcepti aŭdovidajn dosierojn
       reject_media_hint: Forigas aŭdovidaĵojn loke konservitajn kaj rifuzas alŝuti ajnan estonte. Senzorge pri haltigoj
       reject_reports: Malakcepti raportojn
@@ -321,6 +329,8 @@ eo:
         all: Ĉiuj
         limited: Limigita
         title: Kontrolo
+      private_comment: Privata komento
+      public_comment: Publika komento
       title: Federacio
       total_blocked_by_us: Blokitaj de ni
       total_followed_by_them: Sekvataj de ili
@@ -448,6 +458,8 @@ 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
@@ -469,13 +481,12 @@ eo:
       title: Mesaĝoj de la konto
       with_media: Kun aŭdovidaĵoj
     tags:
-      accounts: Kontoj
-      hidden: Kaŝitaj
-      hide: Kaŝi de la profilujo
-      name: Kradvorto
+      context: Kunteksto
+      directory: En la adresaro
+      review: La statuso de la recenzo
+      reviewed: Recenzis
       title: Kradvortoj
-      unhide: Montri en la profilujo
-      visible: Videblaj
+      unreviewed: Ne recenzis
     title: Administrado
     warning_presets:
       add_new: Aldoni novan
@@ -493,6 +504,7 @@ eo:
       subject: Nova signalo por %{instance} (#%{id})
   appearance:
     advanced_web_interface: Altnivela retpaĝa interfaco
+    animations_and_accessibility: Animacioj kaj alirebleco
     confirmation_dialogs: Konfirmaj dialogoj
     sensitive_content: Tikla enhavo
   application_mailer:
@@ -514,7 +526,6 @@ eo:
     apply_for_account: Peti inviton
     change_password: Pasvorto
     checkbox_agreement_html: Mi samopinii al la <a href="%{rules_path}" target="_blank">Servo reguloj</a> kaj <a href="%{terms_path}" target="_blank">kondiĉo al servadon</a>
-    confirm_email: Konfirmi retadreson
     delete_account: Forigi konton
     delete_account_html: Se vi deziras forigi vian konton, vi povas <a href="%{path}">fari tion ĉi tie</a>. Vi bezonos konfirmi vian peton.
     didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi?
@@ -534,6 +545,11 @@ eo:
     reset_password: Ŝanĝi pasvorton
     security: Sekureco
     set_new_password: Elekti novan pasvorton
+    setup:
+      title: Agordi
+    status:
+      account_status: Statuso de la konto
+      functional: Via konto estas plene funkcianta.
     trouble_logging_in: Ĝeni ensaluti?
   authorize_follow:
     already_following: Vi jam sekvas tiun konton
diff --git a/config/locales/es.yml b/config/locales/es.yml
index d6adf4062..2d3e321e4 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -1,9 +1,9 @@
 ---
 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_mastodon_html: Mastodon es un servidor de red social <em>libre y de código abierto</em>. Una alternativa <em>descentralizada</em> a plataformas comerciales, que evita el riesgo de que una única compañía monopolice tu comunicación. Cualquiera puede ejecutar Mastodon y participar sin problemas en la <em>red social</em>.
-    about_this: Acerca de esta instancia
+    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en el fediverso.
+    about_mastodon_html: Mastodon es una red social basada en protocolos web abiertos y software libre y de código abierto. Está descentralizado como correo electrónico.
+    about_this: Información
     active_count_after: activo
     active_footnote: Usuarios Activos Mensuales (UAM)
     administered_by: 'Administrado por:'
@@ -24,6 +24,9 @@ es:
     generic_description: "%{domain} es un servidor en la red"
     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
     see_whats_happening: Ver lo que está pasando
@@ -183,6 +186,7 @@ es:
       username: Nombre de usuario
       warn: Adevertir
       web: Web
+      whitelisted: Añadido a la lista blanca
     action_logs:
       actions:
         assigned_to_self_report: "%{name} se ha asignado la denuncia %{target} a sí mismo"
@@ -250,10 +254,13 @@ 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
       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
@@ -265,11 +272,18 @@ es:
       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
@@ -280,6 +294,10 @@ es:
           silence: Silenciar
           suspend: Suspender
         title: Nuevo bloque de dominio
+      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
@@ -299,6 +317,7 @@ es:
         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
@@ -322,6 +341,8 @@ es:
         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
@@ -449,6 +470,9 @@ 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
@@ -456,6 +480,9 @@ es:
         desc_html: Mostrar línea de tiempo pública en la portada
         title: Previsualización
       title: Ajustes del sitio
+      trends:
+        desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia
+        title: Hashtags de tendencia
     statuses:
       back_to_account: Volver a la cuenta
       batch:
@@ -470,13 +497,18 @@ es:
       title: Estado de las cuentas
       with_media: Con multimedia
     tags:
-      accounts: Cuentas
-      hidden: Oculto
-      hide: Ocultar del directorio
-      name: Etiqueta
+      accounts_today: Usos únicos de hoy
+      accounts_week: Usos únicos esta semana
+      context: Contexto
+      directory: En el directorio
+      in_directory: "%{count} en el directorio"
+      review: Estado de revisión
+      reviewed: Revisado
       title: Etiquetas
-      unhide: Mostrar en el directorio
-      visible: Visible
+      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
@@ -492,11 +524,15 @@ es:
       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})
   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
     sensitive_content: Contenido sensible
   application_mailer:
     notification_preferences: Cambiar preferencias de correo electrónico
@@ -517,7 +553,7 @@ es:
     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>
-    confirm_email: Confirmar email
+    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.
     didnt_get_confirmation: "¿No recibió el correo de confirmación?"
@@ -537,6 +573,15 @@ es:
     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.
     trouble_logging_in: "¿Problemas para iniciar sesión?"
   authorize_follow:
     already_following: Ya estás siguiendo a esta cuenta
@@ -581,6 +626,8 @@ es:
     people:
       one: "%{count} persona"
       other: "%{count} personas"
+  domain_validator:
+    invalid_domain: no es un nombre de dominio válido
   errors:
     '403': No tienes permiso para acceder a esta página.
     '404': La página que estabas buscando no existe.
@@ -874,6 +921,8 @@ es:
     profile: Perfil
     relationships: Siguiendo y seguidores
     two_factor_authentication: Autenticación de dos factores
+  spam_check:
+    spam_detected_and_silenced: Este es un informe automatizado. Se ha detectado spam y el remitente ha sido silenciado automáticamente. Si esto es un error, por favor, deja de silenciar la cuenta.
   statuses:
     attached:
       description: 'Adjunto: %{attached}'
@@ -915,6 +964,8 @@ es:
     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>
diff --git a/config/locales/et.yml b/config/locales/et.yml
new file mode 100644
index 000000000..fdb743273
--- /dev/null
+++ b/config/locales/et.yml
@@ -0,0 +1,1016 @@
+---
+et:
+  about:
+    about_hashtag_html: Need on avalikud tuututused sildistatud sildiga <strong>#%{hashtag}</strong>. Te saate suhelda nendega, kui Teil on konto üks kõik kus terves fediversumis.
+    about_mastodon_html: Mastodon on sotsiaalvõrgustik, mis põhineb avatud protokollidel ja avatud lähtekoodiga tarkvaral. See on detsentraliseeritud nagu e-post.
+    about_this: Meist
+    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
+    browse_public_posts: Sirvi reaalajas voogu avalikest postitustest Mastodonis
+    contact: Kontakt
+    contact_missing: Määramata
+    contact_unavailable: Pole saadaval
+    discover_users: Avasta kasutajaid
+    documentation: Dokumentatsioon
+    extended_description_html: |
+      <h3>Hea koht reeglite jaoks</h3>
+      <p>Laiendatud kirjeldus pole veel üles seadistatud.</p>
+    federation_hint_html: Kui Teil on kasutaja %{instance}-is, saate Te jälgida inimesi üks kõik millisel Mastodoni serveril ja kaugemalgi.
+    generic_description: "%{domain} on ainult üks server terves võrgus"
+    get_apps: Proovi mobiilirakendusi
+    hosted_on: Mastodon majutatud %{domain}-is
+    instance_actor_flash: |
+      See konto on virtuaalne näitleja, mis esindab tervet serverit ning mitte ühtegi kindlat isikut.
+      Seda kasutatakse föderatiivsetel põhjustel ning seda ei tohiks blokeerida, välja arvatud juhul, kui soovite blokeerida tervet serverit, kuid sellel juhul soovitame hoopis kasutada domeeni blokeerimist.
+    learn_more: Lisateave
+    privacy_policy: Privaatsuspoliitika
+    see_whats_happening: Vaata, mis toimub
+    server_stats: 'Serveri statistika:'
+    source_code: Lähtekood
+    status_count_after:
+      one: staatust
+      other: staatuseid
+    status_count_before: Kes omavad
+    tagline: Jälgi sõpru ja leia uusi
+    terms: Kasutustingimused
+    user_count_after:
+      one: kasutajale
+      other: kasutajale
+    user_count_before: Koduks
+    what_is_mastodon: Mis on Mastodon?
+  accounts:
+    choices_html: "%{name}-i valikud:"
+    follow: Jälgi
+    followers:
+      one: Jälgija
+      other: Jälgijaid
+    following: Jälgib
+    joined: Liitus %{date}
+    last_active: viimati aktiivne
+    link_verified_on: Selle lingi autorsust kontrolliti %{date}
+    media: Meedia
+    moved_html: "%{name} kolis %{new_profile_link}:"
+    network_hidden: Neid andmeid pole saadaval
+    nothing_here: Siin pole midagi!
+    people_followed_by: Inimesed, keda %{name} jälgib
+    people_who_follow: Inimesed, kes jälgivad kasutajat %{name}
+    pin_errors:
+      following: Te peate juba olema selle kasutaja jälgija, keda te heaks kiidate
+    posts:
+      one: Tuut
+      other: Tuututused
+    posts_tab_heading: Tuututused
+    posts_with_replies: Tuututused ja vastused
+    reserved_username: Kasutajanimi on reserveeritud
+    roles:
+      admin: Administraator
+      bot: Robot
+      moderator: Moderaator
+    unavailable: Profiil pole saadaval
+    unfollow: Lõpeta jälgimine
+  admin:
+    account_actions:
+      action: Täida tegevus
+      title: Rakenda moderaatori tegevus kasutajale %{acct}
+    account_moderation_notes:
+      create: Jäta teade
+      created_msg: Moderatsiooniteade edukalt koostatud!
+      delete: Kustuta
+      destroyed_msg: Moderatsiooniteade edukalt kustutatud!
+    accounts:
+      approve: Kinnita
+      approve_all: Kinnita kõik
+      are_you_sure: Olete kindel?
+      avatar: Profiilipilt
+      by_domain: Domeen
+      change_email:
+        changed_msg: Konto e-postiaadress edukalt muudetud!
+        current_email: Praegune e-postiaadress
+        label: Muuda e-posti aadressi
+        new_email: Uus е-posti aadress
+        submit: Muuda e-posti aadressi
+        title: Muuda e-postiaadressi kasutajale %{username}
+      confirm: Kinnita
+      confirmed: Kinnitatud
+      confirming: Kinnitamine
+      deleted: Kustutatud
+      demote: Alanda
+      disable: Keela
+      disable_two_factor_authentication: Keela 2FA
+      disabled: Keelatud
+      display_name: Kuvanimi
+      domain: Domeen
+      edit: Redigeeri
+      email: E-post
+      email_status: E-posti staatus
+      enable: Luba
+      enabled: Lubatud
+      feed_url: Voogu URL
+      followers: Jälgijad
+      followers_url: Jälgijate URL
+      follows: Jälgib
+      header: Päis
+      inbox_url: Sisendkausta URL
+      invited_by: Kutsuja
+      ip: IP
+      joined: Liitus
+      location:
+        all: Kõik
+        local: Kohalik
+        remote: Kaug
+        title: Asukoht
+      login_status: Sisselogimise olek
+      media_attachments: Lisatud meedia
+      memorialize: Tee memoriaaliks
+      moderation:
+        active: Aktiivne
+        all: Kõik
+        pending: Ootel
+        silenced: Vaigistatud
+        suspended: Peatatud
+        title: Moderatsioon
+      moderation_notes: Moderatsiooniteated
+      most_recent_activity: Kõige hiljutisem aktiivsus
+      most_recent_ip: Kõige hiljutisem IP
+      no_account_selected: Mitte ühtegi kontot muudeti sest midagi polnud valitud
+      no_limits_imposed: Mitte ühtegi limiiti kehtestatud
+      not_subscribed: Ei ole tellitud
+      outbox_url: Väljundkausta URL
+      pending: Ootab ülevaatamist
+      perform_full_suspension: Peata
+      profile_url: Profiili URL
+      promote: Edenda
+      protocol: Protokoll
+      public: Avalik
+      push_subscription_expires: PuSH tellimus aegub
+      redownload: Värskenda profiili
+      reject: Hülga
+      reject_all: Hülga kõik
+      remove_avatar: Kustuta profiilipilt
+      remove_header: Kustuta päis
+      resend_confirmation:
+        already_confirmed: See kasutaja on juba kinnitatud
+        send: Saada kinnituskiri uuesti
+        success: Kinnituskiri saadetud edukalt!
+      reset: Lähtesta
+      reset_password: Lähtesta salasõna
+      resubscribe: Telli taas
+      role: Õigused
+      roles:
+        admin: Administraator
+        moderator: Moderaator
+        staff: Personal
+        user: Kasutaja
+      salmon_url: Salmoni URL
+      search: Otsi
+      shared_inbox_url: Jagatud sisendkausta URL
+      show:
+        created_reports: Loodud teated
+        targeted_reports: Teiste poolt teatatud
+      silence: Vaigista
+      silenced: Vaigistatud
+      statuses: Staatuseid
+      subscribe: Telli
+      suspended: Peatatud
+      time_in_queue: Ootab järjekorras %{time}
+      title: Kontod
+      unconfirmed_email: Kinnitamata e-post
+      undo_silenced: Võta vaigistus tagasi
+      undo_suspension: Võta peatamine tagasi
+      unsubscribe: Tühista tellimus
+      username: Kasutajanimi
+      warn: Hoiata
+      web: Veeb
+      whitelisted: Lubatud
+    action_logs:
+      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_custom_emoji: "%{name} laadis üles uue emotikooni %{target}"
+        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_custom_emoji: "%{name} kustutas emotikooni %{target}"
+        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_custom_emoji: "%{name} uuendas emotikooni %{target}"
+        update_status: "%{name} uuendas kasutaja %{target} staatust"
+      deleted_status: "(kustutatud staatus)"
+      title: Auditilogi
+    custom_emojis:
+      by_domain: Domeen
+      copied_msg: Kohaliku koopia loomine emotikonist õnnestus
+      copy: Kopeeri
+      copy_failed_msg: Kohaliku koopia loomine sellest emotikonist ebaõnnestus
+      created_msg: Emotikoni loomine õnnestus!
+      delete: Kustuta
+      destroyed_msg: Emotikoni kustutamine õnnestus!
+      disable: Keela
+      disabled_msg: Selle emotikoni keelamine õnnestus
+      emoji: Emotikonid
+      enable: Luba
+      enabled_msg: Selle emotikoni lubamine õnnestus
+      image_hint: PNG kuni 50KB
+      listed: Nimekirjastatud
+      new:
+        title: Lisa uus emotikon
+      overwrite: Kirjuta üle
+      shortcode: Lühikood
+      shortcode_hint: Vähemalt 2 tähemärki, ainult tähted, numbrid ja alakriipsud
+      title: Emotikonid
+      unlisted: Kirjendamata
+      update_failed_msg: Ei saanud seda emotikoni uuendada
+      updated_msg: Emotikoni uuendamine õnnestus!
+      upload: Lae üles
+    dashboard:
+      authorized_fetch_mode: Autoriseeritud tõmberežiim
+      backlog: mahajäänud tööd
+      config: Konfiguratsioon
+      feature_deletions: Kontode kustutamised
+      feature_invites: Kutselingid
+      feature_profile_directory: Profiilikataloog
+      feature_registrations: Registreerimised
+      feature_relay: Föderatsiooni relee
+      feature_spam_check: Rämpsposti filter
+      feature_timeline_preview: Ajajoone eelvaade
+      features: Omadused
+      hidden_service: Föderatsioon peidetud teenustega
+      open_reports: ava teavitused
+      pending_tags: sildid ootamas ülevaadet
+      pending_users: kasutajad ootamas ülevaadet
+      recent_users: Hiljutised kasutajad
+      search: Täis teksti otsing
+      single_user_mode: Üksiku kasutaja režiim
+      software: Tarkvara
+      space: Kettakasutus
+      title: Töölaud
+      total_users: kokku kasutajaid
+      trends: Trendid
+      week_interactions: interaktsioone see nädal
+      week_users_active: aktiivne see nädal
+      week_users_new: kasutajaid see nädal
+    domain_allows:
+      add_new: Luba domeen
+      created_msg: Domeeni lubamine õnnestus
+      destroyed_msg: Domeen eemaldati lubatute nimekirjast
+      undo: Eemalda lubatute nimekirjast
+    domain_blocks:
+      add_new: Lisa uus domeeniblokeering
+      created_msg: Domeeni blokeeringut töödeldakse
+      destroyed_msg: Domeeniblokeering on tagasi võetud
+      domain: Domeen
+      existing_domain_block_html: Te olete juba lisanud domeenile %{name} piiranguid, palun <a href="%{unblock_url}">eemaldage blokeering</a> enne jätkamist.
+      new:
+        create: Loo blokeering
+        hint: Domeeniblokeering ei takista kontode lisamist andmebaasi, aga lisab nendele kontodele tagasiulatuvalt ja automaatselt erinevaid moderatsioonimeetodeid.
+        severity:
+          desc_html: |-
+            <strong>Vaigista</strong> teeb konto postitused nähtamatuks kõigile, kes teda ei jälgi.
+            <strong>Peata</strong> eemaldab kogu konto sisu, meedia ja profiiliandmed.
+            <strong>Ei midagi</strong> kui Te soovite lihtsalt keelata meediafailid.
+          noop: Ei midagi
+          silence: Vaigista
+          suspend: Peata
+        title: Uus domeeniblokeering
+      reject_media: Keela meediafailid
+      reject_media_hint: Kustutab kohalikult salvestatud meediafailid ja keeldub tulevikus rohkem allalaadimast. Ei puuduta peatamisi
+      reject_reports: Lükka teavitused tagasi
+      reject_reports_hint: Eira kõik teavitused sellelt domeenilt. Ei puuduta peatamisi
+      rejecting_media: keelan meediafaile
+      rejecting_reports: keelan teavitusi
+      severity:
+        silence: vaigistatud
+        suspend: peatatud
+      show:
+        affected_accounts:
+          one: Üks kasutaja andmebaasis mõjutatud
+          other: "%{count} kasutajat andmebaasis mõjutatud"
+        retroactive:
+          silence: Eemalda vaigistus mõjutatud kasutajatelt sellel domeenil
+          suspend: Lõpeta mõjutatud kasutajate peatamine sellel domeenil
+        title: Eemalda domeeniblokeering %{domain}
+        undo: Võta tagasi
+      undo: Võta tagasi domeeniblokeering
+    email_domain_blocks:
+      add_new: Lisa uus
+      created_msg: E-posti aadressi keelunimekirja lisamine õnnestus
+      delete: Kustuta
+      destroyed_msg: E-posti aadressi keelunimekirjast kustutamine õnnestus
+      domain: Domeen
+      new:
+        create: Lisa domeen
+        title: Uus e-posti keelunimekirja sisend
+      title: E-posti keelunimekiri
+    followers:
+      back_to_account: Tagasi minu kontole
+      title: "%{acct}-i jälgijad"
+    instances:
+      by_domain: Domeen
+      delivery_available: Üleandmine on saadaval
+      known_accounts:
+        one: "%{count} teadaolev kasutaja"
+        other: "%{count} teadaolevat kasutajat"
+      moderation:
+        all: Kõik
+        limited: Piiratud
+        title: Moderatsioon
+      title: Föderatsioon
+      total_blocked_by_us: Meie poolt blokeeritud
+      total_followed_by_them: Nende poolt jälgitud
+      total_followed_by_us: Meie poolt jälgitud
+      total_reported: Nende kohta teateid
+      total_storage: Lisatud meedia
+    invites:
+      deactivate_all: Peata kõik
+      filter:
+        all: Kõik
+        available: Saadaval
+        expired: Aegunud
+        title: Filter
+      title: Kutsed
+    pending_accounts:
+      title: Ootel olevad kasutajad (%{count})
+    relays:
+      add_new: Lisa uus relee
+      delete: Kustuta
+      description_html: "<strong>Föderatsiooni relee</strong> on vahepealne server, mis vahetab suures koguses tuututusi serverite vahel, mis on selle tellijad ning mis sellele saadavad. <strong>See aitab väikestel ja keskmistel serveritel avastada sisu fediversumist</strong>, mis tavaliselt nõuab teisel serveril olevate inimeste jälgimist."
+      disable: Keela
+      disabled: Keelatud
+      enable: Luba
+      enable_hint: Kui lubatud, siis sinu server tellib kõik avalikud tuututused sellelt releelt, ning hakkab ka enda avalikke tuututusi sellele saatma.
+      enabled: Lubatud
+      inbox_url: Relee URL
+      pending: Ootab relee nõusolekut
+      save_and_enable: Salvesta ja luba
+      setup: Sea üles releeühendus
+      status: Staatus
+      title: Releed
+    report_notes:
+      created_msg: Teade edukalt koostatud!
+      destroyed_msg: Teade edukalt kustutatud!
+    reports:
+      account:
+        note: märkus
+        report: teavita
+      action_taken_by: Meetmeid kasutanud
+      are_you_sure: Olete kindel?
+      assign_to_self: Määra mulle
+      assigned: Määratud moderaator
+      comment:
+        none: Pole
+      created_at: Teavitatud
+      mark_as_resolved: Märgi lahendatuks
+      mark_as_unresolved: Märgi lahendamata
+      notes:
+        create: Lisa märkus
+        create_and_resolve: Lahenda märkusega
+        create_and_unresolve: Taasava märkusega
+        delete: Kustuta
+        placeholder: Kirjelda, mis on ette võetud või muid seotud uuendusi...
+      reopen: Taasava teavitus
+      report: 'Teavitus #%{id}'
+      reported_account: Teavitatud kontost
+      reported_by: Teavitatud
+      resolved: Lahendatud
+      resolved_msg: Teavituse lahendamine õnnestus!
+      status: Staatus
+      title: Teavitused
+      unassign: Eemalda määramine
+      unresolved: Lahendamata
+      updated_at: Uuendatud
+    settings:
+      activity_api_enabled:
+        desc_html: Kohalike postituste, aktiivsete kasutajate ja uute registreerimiste numbrid iganädalaste "ämbritena"
+        title: Avalda koondstatistikat selle kasutaja aktiivsusest
+      bootstrap_timeline_accounts:
+        desc_html: Eralda mitut kasutajanime komadega. Ainult kohalikud ja lukustamata kasutajate nimed töötavad. Kui tühi, on vaikesätteks kõik kohalikud administraatorid.
+        title: Vaikimisi jälgimised uutele kasutajatele
+      contact_information:
+        email: Äri e-post
+        username: Kontakt kasutajanimi
+      custom_css:
+        desc_html: Muuda kujundust CSSi abil, mis laetakse igal lehel
+        title: Kohandatud CSS
+      hero:
+        desc_html: Kuvatud kodulehel. Vähemalt 600x100px soovitatud. Kui pole seadistatud, kuvatakse serveri pisililt
+        title: Maskotipilt
+      mascot:
+        desc_html: Kuvatakse mitmel lehel. Vähemalt 293x205px soovitatud. Kui pole seadistatud, kuvatakse vaikimisi maskott
+        title: Maskotipilt
+      peers_api_enabled:
+        desc_html: Domeenid, mida see server on kohanud fediversumis
+        title: Avalda nimekiri avastatud serveritest
+      preview_sensitive_media:
+        desc_html: Lingi eelvaated teistel veebisaitidel kuvab pisipilti, isegi kui meedia on märgitud tundlikuks
+        title: Kuva tundlikku meediat OpenGraphi eelvaadetes
+      profile_directory:
+        desc_html: Luba kasutajate avastamine
+        title: Luba profiilikataloog
+      registrations:
+        closed_message:
+          desc_html: Kuvatud esilehel kui registreerimised on suletud. Te võite kasutada HTMLi silte
+          title: Suletud registreerimiste sõnum
+        deletion:
+          desc_html: Luba kasutajatel oma konto kustutada
+          title: Ava kontode kustutamine
+        min_invite_role:
+          disabled: Mitte keegi
+          title: Luba kutseid
+      registrations_mode:
+        modes:
+          approved: Kinnitus vajalik konto loomisel
+          none: Keegi ei saa kontoid luua
+          open: Kõik võivad kontoid luua
+        title: Registreerimisrežiim
+      show_known_fediverse_at_about_page:
+        desc_html: Kui lubatud, näitab kõiki teatud fediversumi tuututusi. Vastasel juhul näidatakse ainult kohalike tuututusi.
+        title: Näita teatud fediversumit ajajoone eelvaates
+      show_staff_badge:
+        desc_html: Näita personalimärki kasutaja profiilil
+        title: Näita personalimärki
+      site_description:
+        desc_html: Sissejuhatuslik lõik API kohta. Kirjelda, mis teeb selle Mastodoni serveri eriliseks ja ka muud tähtsat. Te saate kasutada HTMLi silte, peamiselt <code>&lt;a&gt;</code> ja <code>&lt;em&gt;</code>.
+        title: Serveri kirjeldus
+      site_description_extended:
+        desc_html: Hea koht käitumisreegliteks, reegliteks, suunisteks ja muuks, mis teevad Teie serveri eriliseks. Te saate kasutada HTML silte
+        title: Lisa informatsioon
+      site_short_description:
+        desc_html: Kuvatud küljeribal ja metasiltides. Kirjelda, mis on Mastodon ja mis on selles serveris erilist ühes lõigus.
+        title: Serveri lühikirjeldus
+      site_terms:
+        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
+      timeline_preview:
+        desc_html: Kuva avalikku ajajoont esilehel
+        title: Ajajoone eelvaade
+      title: Lehe seaded
+    statuses:
+      back_to_account: Tagasi konto lehele
+      batch:
+        delete: Kustuta
+        nsfw_off: Märgi kui mitte tundlik
+        nsfw_on: Märgi kui tundlik
+      failed_to_execute: Täitmine ebaõnnestus
+      media:
+        title: Meedia
+      no_media: Meedia puudub
+      no_status_selected: Mitte ühtegi staatust muudeti sest midagi polnud valitud
+      title: Konto staatused
+      with_media: Meediaga
+    tags:
+      title: Sildid
+    title: Administreerimine
+    warning_presets:
+      add_new: Lisa uus
+      delete: Kustuta
+      edit: Redigeeri
+      edit_preset: Redigeeri hoiatuse eelseadistust
+      title: Halda hoiatuste eelseadistusi
+  admin_mailer:
+    new_pending_account:
+      body: Uue konto üksikasjad on allpool. Te saate vastu võtta või tagasi lükata seda taotlust.
+      subject: Uus konto valmis ülevaatluseks serveril %{instance} (%{username})
+    new_report:
+      body: "%{reporter} teavitas kasutajast %{target}"
+      body_remote: Keegi domeenist %{domain} teavitas kasutajast %{target}
+      subject: Uus teavitus %{instance}-ile (#%{id})
+  appearance:
+    advanced_web_interface: Arenenud veebiliides
+    advanced_web_interface_hint: 'Kui soovite kasutada terve ekraani laiust, lubab arenenud veebiliides seadistada mitut erinevat veergu, et näha nii palju informatsiooni samal ajal kui võimalik: Kodu, teavitused, föderatsiooni ajajoon ning mis iganes arv nimekirju ja silte.'
+    animations_and_accessibility: Animatsioonid ja ligipääs
+    confirmation_dialogs: Kinnitusdialoogid
+    sensitive_content: Tundlik sisu
+  application_mailer:
+    notification_preferences: Muuda e-kirjade eelistusi
+    salutation: "%{name},"
+    settings: 'Muuda e-kirjade eelistusi: %{link}'
+    view: 'Vaade:'
+    view_profile: Vaata profiili
+    view_status: Vaata staatust
+  applications:
+    created: Rakenduse loomine õnnestus
+    destroyed: Rakenduse kustutamine õnnestus
+    invalid_url: Antud URL on vale
+    regenerate_token: Loo uus access token
+    token_regenerated: Access tokeni loomine õnnestus
+    warning: Olge nende andmetega ettevaatlikud. Ärge jagage neid kellegagi!
+    your_token: Sinu access token
+  auth:
+    apply_for_account: Taotle kutse
+    change_password: Salasõna
+    checkbox_agreement_html: Ma nõustun <a href="%{rules_path}" target="_blank">serveri reeglitega</a> ja <a href="%{terms_path}" target="_blank">kasutustingimustega</a>
+    checkbox_agreement_without_rules_html: Ma nõustun <a href="%{terms_path}" target="_blank">kasutustingimustega</a>
+    delete_account: Kustuta konto
+    delete_account_html: Kui Te soovite oma kontot kustutada, võite <a href="%{path}">jätkata siit</a>. Teilt küsitakse kinnitust.
+    didnt_get_confirmation: Ei saanud kinnituse juhendeid?
+    forgot_password: Unustasid oma salasõna?
+    invalid_reset_password_token: Salasõna lähtestusvõti on vale või aegunud. Palun taotle uus.
+    login: Logi sisse
+    logout: Logi välja
+    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
+    reset_password: Lähtesta salasõna
+    security: Turvalisus
+    set_new_password: Määra uus salasõna
+    setup:
+      email_below_hint_html: Kui allolev e-posti aadress on vale, saate Te muuta seda siin ning Teile saadetakse uus kinnituskiri.
+      email_settings_hint_html: Kinnituskiri saadeti e-posti aadressile %{email}. Kui see aadress pole õige, saate Te muuta seda oma konto sätetest.
+      title: Seadistamine
+    status:
+      account_status: Konto olek
+      confirming: Ootan e-posti kinnitust.
+      pending: Teie taotlus ootab ülevaadet meie personali poolt. See võib võtta mõnda aega. Kui Teie taotlus on vastu võetud, saadetakse Teile e-kiri.
+    trouble_logging_in: Probleeme sisselogimisega?
+  authorize_follow:
+    already_following: Te juba jälgite seda kontot
+    error: Kahjuks ilmus viga kasutaja kaugserverist otsimisel
+    follow: Jälgi
+    follow_request: 'Te olete saatnud jälgimistaotluse kasutajale:'
+    following: 'Õnnestus! Te nüüd jälgite kasutajat:'
+    post_follow:
+      close: Või Te saate lihtsalt sulgeda seda akent.
+      return: Näita kasutaja profiili
+      web: Mine veebi
+    title: Jälgi %{acct}
+  datetime:
+    distance_in_words:
+      about_x_hours: "%{count}t"
+      about_x_months: "%{count}k"
+      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:
+    bad_password_msg: Hea proov, häkkerid! Vale salasõna
+    confirm_password: Sisesta oma praegune salasõna, et kinnitada oma identiteet
+    description_html: Seda tehes kustutatakse <strong>igaveseks ja taastamatult</strong> kogu konto andmed ja sisselogimine keelatakse. Sinu kasutajanimi jääb reserveerituks, et vältida tulevikus kehastamist.
+    proceed: Kustuta konto
+    success_msg: Konto kustutamine õnnestus
+    warning_html: Ainult sellel serveril oleva sisu kustutamine on garanteeritud. Sisu, mis on laialdaselt jagatud, jätab tõenäoliselt jälgi. Serverid, mis on välja lülitatud, ning serverid, mis on sinu uuendustest loobunud, ei uuenda oma andmebaase.
+    warning_title: Levitatud sisu kättesaadavus
+  directories:
+    directory: Profiilikataloog
+    enabled: Te olete praegu nimekirjastatud kataloogis.
+    enabled_but_waiting: Te olete ennast lubanud kataloogi kanda, kuid teil ei ole miinimum kohustuslik jälgijate arv (%{min_followers}), et teid nimekirjastada.
+    explanation: Avasta kasutajaid nende huvide põhjal
+    explore_mastodon: Avasta %{title}
+    how_to_enable: Te ei ole hetkel kataloogis. Te saate end lisada allpool. Kasutage silte oma eluloos, et saaksite ilmuda kindlate siltide all!
+    people:
+      one: "%{count} inimene"
+      other: "%{count} inimest"
+  errors:
+    '403': Sul puudub õigus seda lehte vaadata.
+    '404': Soovitud lehte ei leitud.
+    '410': Soovitud lehekülge pole enam siin.
+    '422':
+      content: Turvalisuse kontroll ebaõnnestus. Kas Te blokeerite küpsiseid?
+      title: Turvalisuse kontroll ebaõnnestus
+    '429': Aeglustatud
+    '500':
+      content: Palume vabandust, midagi läks valesti meie pool.
+      title: See lehekülg pole õige
+    noscript_html: Et kasutada Mastodoni veebirakendust, palun lubage JavaScript. Alternatiivselt, proovige mõnda <a href="%{apps_path}">rakendust</a> Teie platvormile.
+  existing_username_validator:
+    not_found: ei suutnud leida kohalikku kasutajat selle kasutajanimega
+    not_found_multiple: ei suutnud leida %{usernames}
+  exports:
+    archive_takeout:
+      date: Kuupäev
+      download: Lae alla oma arhiiv
+      hint_html: Te saate taotleda arhiivi oma <strong>tuututustest ja üleslaetud meediast</strong>. Eksporditud andmed on ActivityPub-i formaadis, loetav vastava tarkvara poolt. Te saate taotleda arhiivi iga 7 päeva tagant.
+      in_progress: Loome Teie arhiivi...
+      request: Taotle oma arhiivi
+      size: Suurus
+    blocks: Teie blokeerite
+    csv: CSV
+    domain_blocks: Domeeni blokeeringud
+    follows: Teie jälgite
+    lists: Nimistud
+    mutes: Teie vaigistate
+    storage: Meedia hoidla
+  featured_tags:
+    add_new: Lisa uus
+    errors:
+      limit: Olete jõudnud maksimum lubatud siltide arvuni
+  filters:
+    contexts:
+      home: Kodu ajajoon
+      notifications: Teated
+      public: Avalikud ajajooned
+      thread: Vestlused
+    edit:
+      title: Muuda filtrit
+    errors:
+      invalid_context: Puudulik või vale kontekst
+      invalid_irreversible: Taastamatu filter töötab ainult kodu või teavituste kontekstis
+    index:
+      delete: Kustuta
+      title: Filterid
+    new:
+      title: Lisa uus filter
+  footer:
+    developers: Arendajad
+    more: Rohkem…
+    resources: Materjalid
+  generic:
+    all: Kõik
+    changes_saved_msg: Muudatuste salvestamine õnnestus!
+    copy: Kopeeri
+    order_by: Järjesta
+    save_changes: Salvesta muudatused
+    validation_errors:
+      one: Midagi pole ikka õigesti! Palun vaadake allolev veateade üle
+      other: Midagi pole ikka õigesti! Palun vaadake all olevad %{count} veateadet üle
+  html_validator:
+    invalid_markup: 'sisaldab valet HTMLi süntaksi: %{error}'
+  identity_proofs:
+    active: Aktiivne
+    authorize: Jah, luba
+    authorize_connection_prompt: Luba see krüptograafiline ühendus?
+    errors:
+      failed: Krüptograafiline ühendus ebaõnnestus. Palun proovi uuesti %{provider}-ist.
+      keybase:
+        invalid_token: Keybase võtmed on allkirjade hashid ja peavad olema 66 hex tähemärki
+        verification_failed: Keybase ei tunnista seda võtit kui kasutaja %{kb_username} omand. Palun proovige uuesti Keybasest.
+      wrong_user: Ei saa luua tõendit kontole %{proving} kui olete sisseloginud kui %{current}. Logige sisse kui %{proving} ja proovige uuesti.
+    explanation_html: Siin saate luua krüptograafilisi ühendusi oma teiste identiteetidega, nagu näiteks Keybase profiiliga. See võimaldab teistel kasutajatel saata Teile krüptitud sõnumeid ja usaldada sisu, mis Teie saadate neile.
+    i_am_html: Ma olen %{username} teenusel %{service}.
+    identity: Identiteet
+    inactive: Passiivne
+    publicize_checkbox: 'Ja tuututa seda:'
+    publicize_toot: 'See on tõestatud! Ma olen %{username} teenusel %{service}: %{url}'
+    status: Kinnituse staatus
+    view_proof: Vaata tõendit
+  imports:
+    modes:
+      merge: Lõimi
+      merge_long: Hoia olemasolevad andmed ja lisa uusi
+      overwrite: Kirjuta üle
+      overwrite_long: Vaheta praegused andmed uute vastu
+    preface: Te saate importida mis tahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekiri inimestest, keda jälgid ja keda blokeerid.
+    success: Teie andmete üleslaadimine õnnestus ning neid töödeldakse
+    types:
+      blocking: Blokeeringute nimekiri
+      domain_blocking: Domeeniblokeeringute nimekiri
+      following: Jälgimiste nimekiri
+      muting: Vaigistuse nimekiri
+    upload: Lae üles
+  in_memoriam_html: Mälestamaks.
+  invites:
+    delete: Peata
+    expired: Aegunud
+    expires_in:
+      '1800': 30 minutit
+      '21600': 6 tundi
+      '3600': 1 tund
+      '43200': 12 tundi
+      '604800': 1 nädal
+      '86400': 1 päev
+    expires_in_prompt: Mitte kunagi
+    generate: Loo
+    invited_by: 'Teid kutsus:'
+    max_uses:
+      one: 1 kasutus
+      other: "%{count} kasutust"
+    max_uses_prompt: Piiranguteta
+    prompt: Loo ja jaga linke teistega, et lubada neil liituda selle serveriga
+    table:
+      expires_at: Aegub
+      uses: Kasutust
+    title: Kutsu inimesi
+  lists:
+    errors:
+      limit: Olete jõudnud maksimum lubatud nimekirjade arvuni
+  media_attachments:
+    validations:
+      images_and_video: Ei saa lisada video staatusele, millel on juba pildid
+      too_many: Ei saa lisada rohkem, kui 4 faili
+  migrations:
+    acct: uue konto kasutajanimi@domeen
+    currently_redirecting: 'Teie profiil on sätestatud suunama ümber:'
+    proceed: Salvesta
+    updated_msg: Teie konto migreerumissätete uuendamine õnnestus!
+  moderation:
+    title: Moderatsioon
+  notification_mailer:
+    digest:
+      action: Vaata kõiki teateid
+      body: Siin on kiire ülevaade sellest, mis sõnumeid Te ei näinud pärast Teie viimast külastust %{since}
+      mention: "%{name} mainis sind postituses:"
+      new_followers_summary:
+        one: Ja veel, Te saite ühe uue jälgija kui Te olite eemal! Jee!
+        other: Ja veel, Te saite %{count} uut jälgijat kui Te olite eemal! Hämmastav!
+      subject:
+        one: "1 uus teavitus peale Teie eelmist külastust \U0001F418"
+        other: "%{count} uut teavitust peale Teie eelmist külastust \U0001F418"
+      title: Teie puudumisel...
+    favourite:
+      body: "%{name} lisas Teie staatuse lemmikutesse:"
+      subject: "%{name} märkis su staatuse lemmikuks"
+      title: Uus lemmik
+    follow:
+      body: "%{name} nüüd jälgib teid!"
+      subject: "%{name} nüüd jälgib teid"
+      title: Uus jälgija
+    follow_request:
+      action: Halda jälgimistaotlusi
+      body: "%{name} soovib Teid jälgida"
+      subject: 'Ootav jälgija: %{name}'
+      title: Uus jälgimistaotlus
+    mention:
+      action: Vasta
+      body: "%{name} mainis Teid:"
+      subject: "%{name} mainis Teid"
+      title: Uus mainimine
+    reblog:
+      body: "%{name} upitas Teie staatust:"
+      subject: "%{name} upitas su staatust"
+      title: Uus upitus
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: B
+          million: M
+          quadrillion: Q
+          thousand: T
+          trillion: Tr
+  pagination:
+    newer: Uuemad
+    next: Järgmine
+    older: Vanemad
+    prev: Eelm
+    truncate: "&hellip;"
+  polls:
+    errors:
+      already_voted: Olete siin juba hääletanud
+      duplicate_options: sisaldab samu asju mitu korda
+      duration_too_long: kestab liiga kaua
+      duration_too_short: on liiga vara
+      expired: See küsitlus on juba lõppenud
+      over_character_limit: igaüks ei saa olla rohkem kui %{max} tähemärki
+      too_few_options: peab olema rohkem kui üks vastus
+      too_many_options: ei saa sisaldada rohkem kui %{max} vastust
+  preferences:
+    other: Muu
+    posting_defaults: Postitamise vaikesätted
+    public_timelines: Avalikud ajajooned
+  relationships:
+    activity: Konto tegevus
+    dormant: Seisev
+    last_active: Viimati aktiivne
+    most_recent: Viimased
+    moved: Kolinud
+    mutual: Ühine
+    primary: Peamine
+    relationship: Seos
+    remove_selected_domains: Eemalda kõik jälgijad valitud domeenidelt
+    remove_selected_followers: Eemalda valitud jälgijad
+    remove_selected_follows: Lõpeta valitud kasutajate jälgimine
+    status: Konto olek
+  remote_follow:
+    acct: Sisestage oma kasutajanimi@domeen, kust te soovite jälgida
+    missing_resource: Ei suutnud leida vajalikku suunamise URLi Teie konto jaoks
+    no_account_html: Teil pole veel kontot? Saate <a href='%{sign_up_path}' target='_blank'>luua ühe siit</a>
+    proceed: Jätka jälgimiseks
+    prompt: 'Te hakkate jälgima:'
+    reason_html: |-
+      <strong>Miks on see samm vajalik?</strong>
+      <code>%{instance}</code> ei pruugi olla server, kus asub Teie konto, nii et me peame Teid suunama oma kodu serverile.
+  remote_interaction:
+    favourite:
+      proceed: Jätka lemmikuks lisamiseks
+      prompt: 'Te soovite lisada seda tuututust lemmikutesse:'
+    reblog:
+      proceed: Jätka upitamiseks
+      prompt: 'Te soovite seda tuututust upitada:'
+    reply:
+      proceed: Jätka vastamiseks
+      prompt: 'Te soovite vastata sellele tuututusele:'
+  scheduled_statuses:
+    over_daily_limit: Te olete jõudnud maksimum lubatud ajastatud tuututuste arvuni %{limit} selle päeva kohta
+    over_total_limit: Te olete jõudnud maksimum lubatud ajastatud tuututuste arvuni %{limit}
+    too_soon: Ajastatud tuututuse kuupäev peab olema tukevikus
+  sessions:
+    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 sinu 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
+  settings:
+    account: Konto
+    account_settings: Kontosätted
+    appearance: Välimus
+    authorized_apps: Lubatud rakendused
+    back: Tagasi Mastodoni
+    delete: Konto kustutamine
+    development: Arendus
+    edit_profile: Muuda profiili
+    export: Andmete eksportimine
+    featured_tags: Esile toodud sildid
+    identity_proofs: Isikutõendid
+    import: Impordi
+    import_and_export: Import / eksport
+    migrate: Konto migreerumine
+    notifications: Teated
+    preferences: Eelistused
+    profile: Profiil
+    relationships: Jälgitud ja jälgijad
+    two_factor_authentication: Kahesammuline autentimine
+  spam_check:
+    spam_detected_and_silenced: See on automatiseeritud teavitus. Rämpspost on tuvastatud ja nende autor on automaatselt vaigistatud. Kui see on viga, palun eemaldage vaigistus.
+  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:
+      one: 'sisaldab ebasobivat silti: %{tags}'
+      other: 'sisaldab ebasobivaid silte: %{tags}'
+    language_detection: Automaatselt tuvasta keel
+    open_in_web: Ava veebis
+    over_character_limit: tähtmärkide limiit %{max} ületatud
+    pin_errors:
+      limit: Te olete juba maksimum arvu lubatud tuututusi kinnitanud
+      ownership: Kellegi teise tuututust ei saa kinnitada
+      private: Privaatset tuututust ei saa kinnitada
+      reblog: Upitust ei saa kinnitada
+    poll:
+      total_votes:
+        one: "%{count} hääl"
+        other: "%{count} häält"
+      vote: Hääleta
+    show_more: Näita rohkem
+    sign_in_to_participate: Logi sisse, et liituda vestlusega
+    title: '%{name}: "%{quote}"'
+    visibilities:
+      private: Ainult jälgijatele
+      private_long: Näita ainult jälgijatele
+      public: Avalik
+      public_long: Kõik saavad näha
+      unlisted: Kirjendamata
+      unlisted_long: Kõik saavad näha, aga ei ole saadaval avalikes ajajoontes
+  stream_entries:
+    pinned: Kinnitatud tuut
+    reblogged: upitatud
+    sensitive_content: Tundlik sisu
+  terms:
+    title: "%{instance} Kasutustingimused ja Privaatsuspoliitika"
+  themes:
+    contrast: Mastodon (Kõrge kontrast)
+    default: Mastodon (Tume)
+    mastodon-light: Mastodon (Hele)
+  time:
+    formats:
+      default: "%d. %B, %Y. aastal, kell %H:%M"
+      month: "%B %Y"
+  two_factor_authentication:
+    code_hint: Sisesta kaheastmelise autentimise kood, mille lõi Teie autentimisrakendus, et jätkata
+    description_html: Kui Te aktiveerite <strong>kaheastmelise autentimise</strong>, siis sisselogimisel peab teil olema telefon, mis loob Teile koode sisenemiseks.
+    disable: Lülita välja
+    enable: Lülita sisse
+    enabled: Kaheastmeline autentimine on sisse lülitatud
+    enabled_success: Kaheastmeline autentimine on edukalt sisse lülitatud
+    generate_recovery_codes: Loo taastuskoodid
+    instructions_html: "<strong>Skaneeri see QR kood kasutades rakendust Google Authenticator või muu TOTP rakendus Teie telefonis</strong>. Nüüdsest alates loob see rakendus Teile koode, mida peate sisestama sisselogimisel."
+    lost_recovery_codes: Taastuskoodide abil on Teil võimalik sisse logida kontosse, kui Te kaotate oma telefoni. Kui Te kaotate oma taastuskoodid, saate need uuesti luua siin. Teie vanad taastuskoodid tehakse kehtetuks.
+    manual_instructions: 'Kui Te ei saa seda QR koodi skaneerida ning peate sisestama selle käsitsi, on siin tekstiline salavõti:'
+    recovery_codes: Tagavara taastuskoodid
+    recovery_codes_regenerated: Taastuskoodid edukalt taasloodud
+    recovery_instructions_html: Kui Te juhtute kunagi kaotama oma telefoni, saate kasutada ühte allpool olevatest taastuskoodidest, et saada ligipääsu oma kontole. <strong>Hoidke taastuskoodid turvaliselt</strong>. Näiteks võite Te need välja printida ning hoida need koos teiste tähtsate dokumentidega.
+    setup: Sätesta
+    wrong_code: Sisestatud kood on vale! Kas serveri aeg ja seadme aeg on õiged?
+  user_mailer:
+    backup_ready:
+      explanation: Te taotlesite varukoopia oma Mastodoni kontost. See on nüüd valmis allalaadimiseks!
+      subject: Teie arhiiv on allalaadimiseks valmis
+      title: Arhiivi väljavõte
+    warning:
+      explanation:
+        disable: Kuniks Teie konto on lukus, ei saa Te teha sellega ühtegi tegevust kuni see on lukust lahti tehtud.
+        silence: Kuniks Teie konto on limiteeritud, ainult need inimesed, kes Teid juba jälgivad, näevad Teie tuututusi sellel serveril ning Teid jäetakse välja avalikest nimekirjadest. Sellest hoolimata võivad inimesed Teid siiski jälgida.
+        suspend: Teie konto on peatatud ning kõik Teie tuututused ja üleslaetud meediafailid on jäädavalt kustutatud sellelt serverilt ning serveritelt, kus Teil oli jälgijad.
+      review_server_policies: Vaadake üle serveri eeskirju
+      subject:
+        disable: Teie konto %{acct} on lukustatud
+        none: Hoiatus kasutajale %{acct}
+        silence: Teie kontole %{acct} on kehtestatud limiidid
+        suspend: Teie konto %{acct} on peatatud
+      title:
+        disable: Konto lukustatud
+        none: Hoiatus
+        silence: Konto limiteeritud
+        suspend: Konto peatatud
+    welcome:
+      edit_profile_action: Sea üles profiil
+      edit_profile_step: Te saate oma profiili isikupärastada näiteks lisades profiilipildi, päise, muutes oma kuvanime ja muud. Kui Te soovite üle vaadata inimesi, kes Teid jälgida soovivad, saate lukustada oma konto.
+      explanation: Siin on mõned nõuanded, mis aitavad sul alustada
+      final_action: Alusa postitamist
+      final_step: 'Alusta postitamist! Isegi ilma jälgijateta näevad teised Teie avalikke postitusi, näiteks kohalikul ajajoonel ning siltidest. Te võite ennast tutvustada kasutades silti #introductions.'
+      full_handle: Sinu täisnimi
+      full_handle_hint: See on mida oma sõpradega jagada, et nad saaksid Teile sõnumeid saata ning Teid jälgida teiselt serverilt.
+      review_preferences_action: Muuda eelistusi
+      review_preferences_step: Kindlasti seadistage oma sätted Teie maitse järgi, näiteks e-kirju, mida soovite saada, või millist privaatsustaset Te soovite vaikimisi. Kui Teil pole merehaigust, võite Te näiteks lubada GIFide automaatse mängimise.
+      subject: Tere tulemast Mastodoni
+      tip_federated_timeline: Föderatiivne ajajoon on reaalajas voogvaade tervest Mastodoni võrgust. Aga see sisaldab ainult inimesi, keda su naabrid tellivad, niiet see pole täiuslik.
+      tip_following: Vaikimisi, Te jälgite ainult oma serveri administraator(eid). Et leida rohkem huvitavamaid inimesi, vaadake kohalikke ja föderatiivseid ajajooni.
+      tip_local_timeline: Kohalik ajajoon on reaalajas voogvaade inimestest, kes on serveris %{instance}. Need on Teie lähimad naabrid!
+      tip_mobile_webapp: Kui Teie mobiilne veebilehitseja pakub Teile lisada meid Teie avaekraanile, saate Te reaalajas teateid. See töötab nagu tavaline mobiilirakendus mitmel moel!
+      tips: Nõuanded
+      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.
+    signed_in_as: 'Sisse logitud kasutajana:'
+  verification:
+    explanation_html: 'Te saate <strong>kinnitada ennast oma linkide omanikena oma profiili metaandmetes</strong>. Et seda teha, peab Teie lingitud veebilehel olema link tagasi Teie Mastodoni profiilile. Tagasi saatval lingil <strong>peab</strong> olema <code>rel="me"</code> atribuut. Tekstisisu lingil ei loe. Siin on üks näide:'
+    verification: Kinnitamine
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index d3299d775..8000f931e 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -24,6 +24,9 @@ eu:
     generic_description: "%{domain} sareko zerbitzari bat da"
     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.
+
+'
     learn_more: Ikasi gehiago
     privacy_policy: Pribatutasun politika
     see_whats_happening: Ikusi zer gertatzen ari den
@@ -183,6 +186,7 @@ eu:
       username: Erabiltzaile-izena
       warn: Abisatu
       web: Weba
+      whitelisted: Zerrenda zurian
     action_logs:
       actions:
         assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio"
@@ -243,6 +247,7 @@ eu:
       updated_msg: Emoji-a ongi eguneratu da!
       upload: Igo
     dashboard:
+      authorized_fetch_mode: Baimendutako eskuratze modua
       backlog: aurreikusitako lanak
       config: Konfigurazioa
       feature_deletions: Kontu ezabaketak
@@ -250,10 +255,13 @@ eu:
       feature_profile_directory: Profil-direktorioa
       feature_registrations: Izen emateak
       feature_relay: Federazio haria
+      feature_spam_check: Anti-spam
       feature_timeline_preview: Denbora-lerroaren aurrebista
       features: Ezaugarriak
       hidden_service: Federazioa ezkutuko zerbitzuekin
       open_reports: salaketa irekiak
+      pending_tags: berrikusketaren zain dauden etiketak
+      pending_users: berrikusketaren zain dauden erabiltzaileak
       recent_users: Azken erabiltzaileak
       search: Testu osoko bilaketa
       single_user_mode: Erabiltzaile bakarreko modua
@@ -265,11 +273,18 @@ eu:
       week_interactions: interakzio aste honetan
       week_users_active: aktibo aste honetan
       week_users_new: erabiltzaile aste honetan
+      whitelist_mode: Zerrenda zuria modua
+    domain_allows:
+      add_new: Sartu domeinua zerrenda zurian
+      created_msg: Domeinua ongi sartu da zerrenda zurian
+      destroyed_msg: Domeinua zerrenda zuritik kendu da
+      undo: Kendu zerrenda zuritik
     domain_blocks:
       add_new: Gehitu domeinuaren blokeo berria
       created_msg: Domeinuaren blokeoa orain prozesatzen ari da
       destroyed_msg: Domeinuaren blokeoa desegin da
       domain: Domeinua
+      edit: Editatu domeinu-blokeoa
       existing_domain_block_html: '%{name} domeinuan muga zorrotzagoak ezarri dituzu jada, aurretik <a href="%{unblock_url}">desblokeatu</a> beharko duzu.'
       new:
         create: Sortu blokeoa
@@ -280,6 +295,10 @@ eu:
           silence: Isilarazi
           suspend: Kanporatu
         title: Domeinuaren blokeo berria
+      private_comment: Iruzkin pribatua
+      private_comment_hint: Domeinu hau mugatzeari buruzko iruzkina moderatzaileen barne erabilerarako.
+      public_comment: Iruzkin publikoa
+      public_comment_hint: Domeinu hau mugatzeari buruzko iruzkina publiko orokorrarentzat, domeinuak mugatzea iragartzea gaituta badago.
       reject_media: Ukatu multimedia fitxategiak
       reject_media_hint: Lokalki gordetako multimedia fitxategiak ezabatzen ditu eta etorkizunean fitxategi berriak deskargatzeari uko egingo dio. Ez du garrantzirik kanporaketetan
       reject_reports: Errefusatu salaketak
@@ -299,6 +318,7 @@ eu:
         title: Desegin %{domain} domeinuko blokeoa
         undo: Desegin
       undo: Desegin domeinuaren blokeoa
+      view: Ikusi domeinuaren blokeoa
     email_domain_blocks:
       add_new: Gehitu berria
       created_msg: Ongi gehitu da e-mail helbidea domeinuen zerrenda beltzera
@@ -322,6 +342,8 @@ eu:
         all: Denak
         limited: Mugatua
         title: Moderazioa
+      private_comment: Iruzkin pribatua
+      public_comment: Iruzkin publikoa
       title: Federazioa
       total_blocked_by_us: Guk blokeatuta
       total_followed_by_them: Haiek jarraitua
@@ -449,6 +471,9 @@ 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
@@ -456,6 +481,8 @@ eu:
         desc_html: Bistaratu denbora-lerro publikoa hasiera orrian
         title: Denbora-lerroaren aurrebista
       title: Gunearen ezarpenak
+      trends:
+        title: Traolak joeran
     statuses:
       back_to_account: Atzera kontuaren orrira
       batch:
@@ -470,13 +497,18 @@ eu:
       title: Kontuaren mezuak
       with_media: Multimediarekin
     tags:
-      accounts: Kontuak
-      hidden: Ezkutatuta
-      hide: Ezkutatu direktoriotik
-      name: Traola
+      accounts_today: Erabilera bakanak gaur
+      accounts_week: Erabilera bakanak aste honetan
+      context: Testuingurua
+      directory: Direktorioan
+      in_directory: "%{count} direktorioan"
+      review: Berrikusketaren egoera
+      reviewed: Berrikusita
       title: Traolak
-      unhide: Erakutsi direktorioan
-      visible: Ikusgai
+      trending_right_now: Joera orain
+      unique_uses_today: "%{count} idazten gaur"
+      unreviewed: Berrikusi gabe
+      updated_msg: Traola-ezarpenak ongi eguneratu dira
     title: Administrazioa
     warning_presets:
       add_new: Gehitu berria
@@ -497,6 +529,7 @@ eu:
     advanced_web_interface_hint: 'Pantaila bere zabalera osoan erabili nahi baduzu, web interfaze aurreratuak hainbat zutabe desberdin konfiguratzea ahalbidetzen dizu, aldi berean nahi beste informazio ikusteko: Hasiera, jakinarazpenak, federatutako denbora-lerroa, edo nahi beste zerrenda eta traola.'
     animations_and_accessibility: Animazioak eta irisgarritasuna
     confirmation_dialogs: Berrespen dialogoak
+    discovery: Aurkitzea
     sensitive_content: Eduki hunkigarria
   application_mailer:
     notification_preferences: Aldatu e-mail hobespenak
@@ -517,7 +550,7 @@ eu:
     apply_for_account: Eskatu gonbidapen bat
     change_password: Pasahitza
     checkbox_agreement_html: <a href="%{rules_path}" target="_blank">Zerbitzariaren arauak</a> eta <a href="%{terms_path}" target="_blank">erabilera baldintzak</a> onartzen ditut
-    confirm_email: Berretsi e-mail helbidea
+    checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">Erabilera baldintzak</a> onartzen ditut
     delete_account: Ezabatu kontua
     delete_account_html: Kontua ezabatu nahi baduzu, <a href="%{path}">jarraitu hemen</a>. Berrestea eskatuko zaizu.
     didnt_get_confirmation: Ez dituzu berresteko argibideak jaso?
@@ -537,6 +570,15 @@ eu:
     reset_password: Berrezarri pasahitza
     security: Segurtasuna
     set_new_password: Ezarri pasahitza berria
+    setup:
+      email_below_hint_html: Beheko e-mail helbidea okerra bada, hemen aldatu dezakezu eta baieztapen e-mail berria jaso.
+      email_settings_hint_html: Baieztamen e-maila %{email} helbidera bidali da. E-mail helbide hori zuzena ez bada, kontuaren ezarpenetan aldatu dezakezu.
+      title: Ezarpena
+    status:
+      account_status: Kontuaren egoera
+      confirming: E-mail baieztapena osatu bitartean zain.
+      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.
     trouble_logging_in: Arazoak saioa hasteko?
   authorize_follow:
     already_following: Kontu hau aurretik jarraitzen duzu
@@ -581,6 +623,8 @@ eu:
     people:
       one: pertsona %{count}
       other: "%{count} pertsona"
+  domain_validator:
+    invalid_domain: ez da domeinu izen baliogarria
   errors:
     '403': Ez duzu orri hau ikusteko baimenik.
     '404': Bilatu duzun orria ez dago hemen.
@@ -874,6 +918,8 @@ eu:
     profile: Profila
     relationships: Jarraitutakoak eta jarraitzaileak
     two_factor_authentication: Bi faktoreetako autentifikazioa
+  spam_check:
+    spam_detected_and_silenced: Hau salaketa automatiko bat da. Spam-a antzeman da eta igorlea automatikoki isilarazi da. Hau akats bat bada, utzi kontua isilarazteari.
   statuses:
     attached:
       description: 'Erantsita: %{attached}'
@@ -915,6 +961,8 @@ eu:
     pinned: Finkatutako toot-a
     reblogged: "(r)en bultzada"
     sensitive_content: 'Kontuz: Eduki hunkigarria'
+  tags:
+    does_not_match_previous_name: ez dator aurreko izenarekin bat
   terms:
     body_html: |
       <h2>Pribatutasun politika</h2>
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index f6b6c8758..8a58ad686 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -24,6 +24,9 @@ fa:
     generic_description: "%{domain} یک سرور روی شبکه است"
     get_apps: یک اپ موبایل را امتحان کنید
     hosted_on: ماستدون، میزبانی‌شده روی %{domain}
+    instance_actor_flash: |
+      این حساب یک بازیگر مجازی برای نمایندگی از این سرور است و متعلق به هیچ کاربری نیست.
+      این حساب برای ارتباط میان‌سروری به کار می‌رود و نباید مسدود شود، مگر این که شما بخواهید کل سرور را مسدود کنید، که در آن صورت باید از راه مسدودسازی دامین پیش بروید.
     learn_more: بیشتر بدانید
     privacy_policy: سیاست رازداری
     see_whats_happening: ببینید چه خبر است
@@ -250,6 +253,7 @@ fa:
       feature_profile_directory: فهرست گزیدهٔ کاربران
       feature_registrations: ثبت‌نام‌ها
       feature_relay: رله
+      feature_spam_check: ضدهرزنامه
       feature_timeline_preview: پیش‌نمایش نوشته‌ها
       features: ویژگی‌ها
       hidden_service: ارتباط میان‌سروری با سرویس‌های نهفته
@@ -449,6 +453,9 @@ fa:
         desc_html: می‌توانید سیاست رازداری، شرایط استفاده، یا سایر مسائل قانونی را به دلخواه خود بنویسید. تگ‌های HTML هم مجاز است
         title: شرایط استفادهٔ سفارشی
       site_title: نام سرور
+      spam_check_enabled:
+        desc_html: ماستدون می‌تواند حساب‌ها را به طور خودکار بی‌صدا کند یا گزارش دهد. این کار بر اساس سنجه‌هایی از قبیل شناسایی پیغام‌های ناخواستهٔ تکراری انجام می‌شود و ممکن است گاهی اشتباه باشد.
+        title: ضدهرزنامه
       thumbnail:
         desc_html: برای دیدن با OpenGraph و رابط برنامه‌نویسی. وضوح پیشنهادی ۱۲۰۰×۶۳۰ پیکسل
         title: تصویر کوچک سرور
@@ -470,13 +477,7 @@ fa:
       title: نوشته‌های حساب
       with_media: دارای عکس یا ویدیو
     tags:
-      accounts: حساب‌ها
-      hidden: پنهان‌شده
-      hide: در فهرست گزیدهٔ کاربران نشان نده
-      name: برچسب
       title: برچسب‌ها
-      unhide: نمایش در فهرست گزیدهٔ کاربران
-      visible: نمایان
     title: مدیریت سرور
     warning_presets:
       add_new: افزودن تازه
@@ -517,7 +518,6 @@ fa:
     apply_for_account: درخواست دعوت‌نامه
     change_password: رمز
     checkbox_agreement_html: من <a href="%{rules_path}" target="_blank">قانون‌های این سرور</a> و <a href="%{terms_path}" target="_blank">شرایط کاربری</a> را می‌پذیرم
-    confirm_email: تأیید ایمیل
     delete_account: پاک‌کردن حساب
     delete_account_html: اگر می‌خواهید حساب خود را پاک کنید، از <a href="%{path}">این‌جا</a> پیش بروید. از شما درخواست تأیید خواهد شد.
     didnt_get_confirmation: راهنمایی برای تأیید را دریافت نکردید؟
@@ -874,6 +874,8 @@ fa:
     profile: نمایه
     relationships: پیگیری‌ها و پیگیران
     two_factor_authentication: ورود دومرحله‌ای
+  spam_check:
+    spam_detected_and_silenced: این یک گزارش خودکار است. هرزنامه به طور خودکار تشخیص داده شده و کاربر بی‌صدا شده است. اگر اشتباهی رخ داده لطفاً حساب را باصدا کنید.
   statuses:
     attached:
       description: 'پیوست‌شده: %{attached}'
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 07a8e367b..beecdecb0 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -352,7 +352,6 @@ fi:
     your_token: Pääsytunnus
   auth:
     change_password: Salasana
-    confirm_email: Vahvista sähköpostiosoite
     delete_account: Poista tili
     delete_account_html: Jos haluat poistaa tilisi, <a href="%{path}">paina tästä</a>. Poisto on vahvistettava.
     didnt_get_confirmation: Etkö saanut vahvistusohjeita?
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index b3ee1d3bd..277d2f10a 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -183,6 +183,7 @@ fr:
       username: Nom d’utilisateur⋅ice
       warn: Avertissement
       web: Web
+      whitelisted: Sur liste blanche
     action_logs:
       actions:
         assigned_to_self_report: "%{name} s’est assigné·e le signalement de %{target}"
@@ -250,10 +251,13 @@ 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
       open_reports: signalements non résolus
+      pending_tags: hashtags en attente d’approbation
+      pending_users: utilisateur·rice·s en attente d’approbation
       recent_users: Utilisateur·rice·s récent·e·s
       search: Recherche plein texte
       single_user_mode: Mode utilisateur·ice unique
@@ -265,6 +269,10 @@ fr:
       week_interactions: interactions cette semaine
       week_users_active: actif·ve·s cette semaine
       week_users_new: utilisateur·rice·s cette semaine
+      whitelist_mode: Mode liste blanche
+    domain_allows:
+      add_new: Mettre le domaine sur liste sur blanche
+      created_msg: Ce domaine a été ajouté à la liste blanche avec succès
     domain_blocks:
       add_new: Ajouter un nouveau bloqueur de domaine
       created_msg: Le blocage de domaine est désormais activé
@@ -322,6 +330,8 @@ fr:
         all: Tout
         limited: Limité
         title: Modération
+      private_comment: Commentaire privé
+      public_comment: Commentaire public
       title: Fédération
       total_blocked_by_us: Bloqués par nous
       total_followed_by_them: Suivi par eux
@@ -456,6 +466,9 @@ fr:
         desc_html: Afficher le fil public sur la page d’accueil
         title: Prévisualisation du fil global
       title: Paramètres du serveur
+      trends:
+        desc_html: Afficher publiquement les hashtags approuvés qui sont populaires en ce moment
+        title: Hashtags populaires
     statuses:
       back_to_account: Retour à la page du compte
       batch:
@@ -470,13 +483,11 @@ fr:
       title: État du compte
       with_media: avec médias
     tags:
-      accounts: Comptes
-      hidden: Masqué
-      hide: Masquer dans l’annuaire
-      name: Hashtag
+      review: État de traitement
+      reviewed: Traité
       title: Hashtags
-      unhide: Afficher dans l’annuaire
-      visible: Visible
+      trending_right_now: Populaire en ce moment
+      unreviewed: Non traité
     title: Administration
     warning_presets:
       add_new: Ajouter un nouveau
@@ -492,6 +503,9 @@ fr:
       body: "%{reporter} a signalé %{target}"
       body_remote: Quelqu’un de %{domain} a signalé %{target}
       subject: Nouveau signalement sur %{instance} (#%{id})
+    new_trending_tag:
+      body: 'Le hashtag #%{name} est populaire aujourd’hui, mais il n’a pas été approuvé. Il ne sera pas affiché publiquement à moins que l’autorisiez, ou sauvegardez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.'
+      subject: Nouveau hashtag en attente de traitement sur %{instance} (#%{name})
   appearance:
     advanced_web_interface: Interface web avancée
     advanced_web_interface_hint: 'Si vous voulez utiliser toute la largeur de votre écran, l’interface web avancée vous permet de configurer plusieurs colonnes différentes pour voir autant d’informations que vous le souhaitez en même temps : Accueil, notifications, fil public fédéré, un nombre illimité de listes et hashtags.'
@@ -517,7 +531,7 @@ fr:
     apply_for_account: Demander une invitation
     change_password: Mot de passe
     checkbox_agreement_html: J’accepte les <a href="%{rules_path}" target="_blank">règles du serveur</a> et les <a href="%{terms_path}" target="_blank">conditions de service</a>
-    confirm_email: Confirmer mon adresse mail
+    checkbox_agreement_without_rules_html: J’accepte les <a href="%{terms_path}" target="_blank">conditions d’utilisation</a>
     delete_account: Supprimer le compte
     delete_account_html: Si vous désirez supprimer votre compte, vous pouvez <a href="%{path}">cliquer ici</a>. Il vous sera demandé de confirmer cette action.
     didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ?
@@ -537,6 +551,8 @@ fr:
     reset_password: Réinitialiser le mot de passe
     security: Sécurité
     set_new_password: Définir le nouveau mot de passe
+    status:
+      functional: Votre compte est entièrement opérationnel.
     trouble_logging_in: Vous avez un problème pour vous connecter ?
   authorize_follow:
     already_following: Vous suivez déjà ce compte
@@ -581,6 +597,8 @@ fr:
     people:
       one: "%{count} personne"
       other: "%{count} personne"
+  domain_validator:
+    invalid_domain: n’est pas un nom de domaine valide
   errors:
     '403': Vous n’avez pas accès à cette page.
     '404': La page que vous recherchez n’existe pas.
@@ -915,6 +933,8 @@ fr:
     pinned: Pouet épinglé
     reblogged: a partagé
     sensitive_content: Contenu sensible
+  tags:
+    does_not_match_previous_name: ne correspond pas au nom précédent
   terms:
     body_html: |
       <h2>Politique de confidentialité</h2>
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 7ecb50e40..ec412dd8f 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -24,6 +24,9 @@ gl:
     generic_description: "%{domain} é un servidor na rede"
     get_apps: Probe cunha app móbil
     hosted_on: Mastodon aloxado en %{domain}
+    instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queira bloquear a toda a instancia, en tal caso debería utilizar o bloqueo do dominio.
+
+'
     learn_more: Coñeza máis
     privacy_policy: Política de intimidade
     see_whats_happening: Mire o que acontece
@@ -183,6 +186,7 @@ gl:
       username: Nome de usuaria
       warn: Aviso
       web: Web
+      whitelisted: Lista branca
     action_logs:
       actions:
         assigned_to_self_report: "%{name} asignou o informe %{target} a ela misma"
@@ -243,6 +247,7 @@ gl:
       updated_msg: Actualizouse correctamente o emoji!
       upload: Subir
     dashboard:
+      authorized_fetch_mode: Modo de obtención autorizado
       backlog: traballos respaldados
       config: Axustes
       feature_deletions: Borrado de contas
@@ -250,6 +255,7 @@ gl:
       feature_profile_directory: Directorio do perfil
       feature_registrations: Rexistros
       feature_relay: Repetidores de federación
+      feature_spam_check: Anti-spam
       feature_timeline_preview: Vista previa da TL
       features: Características
       hidden_service: Federación con servizos ocultos
@@ -265,6 +271,12 @@ gl:
       week_interactions: interaccións en esta semana
       week_users_active: activas estas semana
       week_users_new: usuarias esta semana
+      whitelist_mode: Modo de lista branca
+    domain_allows:
+      add_new: Dominio en lista branca
+      created_msg: Engadeu o dominio a lista branca
+      destroyed_msg: Quitou o dominio da lista branca
+      undo: Eliminar da lista branca
     domain_blocks:
       add_new: Engadir novo bloqueo de dominio
       created_msg: Estase a procesar o bloqueo do dominio
@@ -449,6 +461,9 @@ gl:
         desc_html: Pode escribir a súa propia política de intimidade, termos de servizo ou aclaracións legais. Pode utilizar etiquetas HTML
         title: Termos de servizo persoalizados
       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
@@ -456,6 +471,9 @@ gl:
         desc_html: Mostrar liña de tempo pública na páxina de inicio
         title: vista previa da liña temporal
       title: Axustes do sitio
+      trends:
+        desc_html: Mostrar públicamente etiquetas previamente revisadas que actualmente son tendencia
+        title: Etiquetas Tendencia
     statuses:
       back_to_account: Voltar a páxina da conta
       batch:
@@ -470,13 +488,15 @@ gl:
       title: Estados da conta
       with_media: con medios
     tags:
-      accounts: Contas
-      hidden: Ocultas
-      hide: Ocultar do directorio
-      name: Etiqueta
+      context: Contexto
+      directory: No directorio
+      in_directory: "%{count} no directorio"
+      review: Estado de revisión
+      reviewed: Revisado
       title: Etiquetas
-      unhide: Mostrar en directorio
-      visible: Visible
+      trending_right_now: Agora como Tendencia
+      unique_uses_today: "%{count} publicando hoxe"
+      updated_msg: Actualizaronse os axustes das etiquetas
     title: Administración
     warning_presets:
       add_new: Engadir novo
@@ -492,11 +512,15 @@ gl:
       body: "%{reporter} informou sobre %{target}"
       body_remote: Alguén desde %{domain} informou sobre %{target}
       subject: Novo informe sobre %{instance} (#%{id})
+    new_trending_tag:
+      body: 'A etiqueta #%{name} é tendencia hoxe, pero non foi previamente revisada. Non se mostrará publicamente a menos que vostede o permita, ou garde o formulario para facer que non se lle consulte de novo.'
+      subject: Unha nova etiqueta que revisar en %{instance} (#%{name})
   appearance:
     advanced_web_interface: Interface web avanzada
     advanced_web_interface_hint: Se quere utilizar todo o ancho da súa pantalla, a interface web avanzada permítelle configurar diferentes columnas para ver tanta información como desexe. Inicio, notificacións, liña temporal federada, calquera número de listas e etiquetas.
     animations_and_accessibility: Animacións e accesibilidade
     confirmation_dialogs: Diálogos de confirmación
+    discovery: Descubrir
     sensitive_content: Contido sensible
   application_mailer:
     notification_preferences: Cambiar os axustes de correo-e
@@ -517,7 +541,7 @@ gl:
     apply_for_account: Solicite un convite
     change_password: Contrasinal
     checkbox_agreement_html: Acepto as <a href="%{rules_path}" target="_blank">regras do servidor</a> e os <a href="%{terms_path}" target="_blank">termos do servizo</a>
-    confirm_email: Confirmar correo-e
+    checkbox_agreement_without_rules_html: Acepto os <a href="%{terms_path}" target="_blank">termos do servizo</a>
     delete_account: Eliminar conta
     delete_account_html: Se desexa eliminar a súa conta, pode <a href="%{path}">facelo aquí</a>. Pediráselle confirmación.
     didnt_get_confirmation: Non recibeu as instruccións de confirmación?
@@ -537,6 +561,15 @@ gl:
     reset_password: Restablecer contrasinal
     security: Seguridade
     set_new_password: Establecer novo contrasinal
+    setup:
+      email_below_hint_html: Se o enderezo inferior non é correcto, pode cambialo aquí e recibir un correo de confirmación.
+      email_settings_hint_html: Enviouse un correo de confirmación a %{email}. Se o enderezo non é correcto pode cambialo nos axustes da conta.
+      title: Axustes
+    status:
+      account_status: Estado da conta
+      confirming: Agardando a confirmación do correo enviado.
+      functional: A súa conta está totalmente operativa.
+      pending: A súa aplicación está pendente de revisión. Poderíanos levar algún tempo. Recibirá un correo se a aplicación está aprobada.
     trouble_logging_in: Problemas para conectar?
   authorize_follow:
     already_following: Xa está a seguir esta conta
@@ -873,7 +906,9 @@ gl:
     preferences: Preferencias
     profile: Perfil
     relationships: Seguindo e seguidoras
-    two_factor_authentication: Validar Doble Factor
+    two_factor_authentication: Validar Dobre Factor
+  spam_check:
+    spam_detected_and_silenced: Esto é un informe automático. Detectouse spam e o remitente foi bloqueado automáticamente. Se o considera un fallo, por favor desbloquee a conta.
   statuses:
     attached:
       description: 'Axenado: %{attached}'
@@ -915,6 +950,8 @@ gl:
     pinned: Mensaxe fixada
     reblogged: promovida
     sensitive_content: Contido sensible
+  tags:
+    does_not_match_previous_name: non concorda co nome anterior
   terms:
     body_html: |
       <h2>Intimidade</h2>
@@ -1008,11 +1045,11 @@ gl:
       month: "%b %Y"
   two_factor_authentication:
     code_hint: Introducir o código xerado polo seu aplicativo de autenticación para confirmar
-    description_html: Si habilita a <strong>autenticación de doble factor</strong>, a conexión pediralle estar en posesión do seu teléfono, que xerará testemuños para poder entrar.
+    description_html: Se activa a <strong>autenticación de dobre factor</strong>, a conexión pediralle estar en posesión do seu teléfono, que creará testemuños para poder entrar.
     disable: Deshabilitar
     enable: Habilitar
-    enabled: A autenticación de doble-factor está habilitada
-    enabled_success: Habilitouse con éxito a autenticación de doble-factor
+    enabled: A autenticación de dobre-factor está activada
+    enabled_success: Activouse con éxito a autenticación de dobre-factor
     generate_recovery_codes: Xerar códigos de recuperación
     instructions_html: "<strong>Escanee este código QR en Google Authenticator ou aplicativo TOTP similar no seu teléfono</strong>. Desde agora, este aplicativo xerará testemuños que vostede deberá introducir ao conectarse."
     lost_recovery_codes: Os códigos de recuperación permítenlle recuperar o acceso a súa conta si perde o teléfono. Si perde os códigos de recuperación, pode restauralos aquí. Os seus códigos de recuperación anteriores serán invalidados.
@@ -1063,7 +1100,7 @@ gl:
   users:
     follow_limit_reached: Non pode seguir a máis de %{limit} persoas
     invalid_email: O enderezo de correo non é válido
-    invalid_otp_token: Código de doble-factor non válido
+    invalid_otp_token: O código do segundo factor non é válido
     otp_lost_help_html: Si perde o acceso a ambos, pode contactar con %{email}
     seamless_external_login: Está conectado a través de un servizo externo, polo que os axustes de contrasinal e correo-e non están dispoñibles.
     signed_in_as: 'Rexistrada como:'
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 948f0db13..e8534a992 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -24,6 +24,9 @@ hu:
     generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban"
     get_apps: Próbálj ki egy mobil appot
     hosted_on: "%{domain} Mastodon szerver"
+    instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás.
+
+'
     learn_more: Tudj meg többet
     privacy_policy: Adatvédelmi szabályzat
     see_whats_happening: Nézd, mi történik
@@ -183,6 +186,7 @@ hu:
       username: Felhasználónév
       warn: Figyelmeztetés
       web: Web
+      whitelisted: Engedélyező-listán
     action_logs:
       actions:
         assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte"
@@ -243,6 +247,7 @@ hu:
       updated_msg: Emoji sikeresen frissítve!
       upload: Feltöltés
     dashboard:
+      authorized_fetch_mode: Áttöltő üzemmód engedélyezve
       backlog: hátralévő feladatok
       config: Beállítások
       feature_deletions: Fióktörlések
@@ -250,10 +255,13 @@ 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
       open_reports: nyitott bejelentések
+      pending_tags: hashtag engedélyezésre vár
+      pending_users: felhasználó engedélyezésre vár
       recent_users: Legutóbbi felhasználók
       search: Keresés teljes szövegben
       single_user_mode: Egyfelhasználós mód
@@ -265,11 +273,18 @@ hu:
       week_interactions: interakció ezen a héten
       week_users_active: aktív ezen a héten
       week_users_new: felhasználó ezen a héten
+      whitelist_mode: Engedélyező-lista mód
+    domain_allows:
+      add_new: Domain engedélyezése
+      created_msg: A domain rákerült az engedélyező-listára
+      destroyed_msg: A domain lekerült az engedélyező-listáról
+      undo: Eltávolítás az engedélyező-listáról
     domain_blocks:
       add_new: Új tiltott domain hozzáadása
       created_msg: A domain-tiltás feldolgozása folyamatban
       destroyed_msg: A domain tiltása feloldva
       domain: Domain
+      edit: Domain tiltás szerkesztése
       existing_domain_block_html: A %{name} domainen már szorosabb korlátokat állítottál be, először <a href="%{unblock_url}">oldd fel a tiltást</a>.
       new:
         create: Tiltás létrehozása
@@ -280,6 +295,10 @@ hu:
           silence: Némítás
           suspend: Felfüggesztés
         title: Új domain tiltása
+      private_comment: Privát megjegyzés
+      private_comment_hint: Megjegyzés domain tiltásával kapcsolatban belső használatra, a többi moderátor részére.
+      public_comment: Nyilvános megjegyzés
+      public_comment_hint: Megjegyzés domain tiltásával kapcsolatban a nyilvánosság számára, ha a domainek tiltólistája egyébként látható.
       reject_media: Médiafájlok elutasítása
       reject_media_hint: Eltávolítja a helyben tárolt médiafájlokat és a továbbiakban letiltja az új médiafájlok letöltését. Felfüggesztett fiókok esetében irreleváns opció
       reject_reports: Bejelentések elutasítása
@@ -299,6 +318,7 @@ hu:
         title: "%{domain} domain tiltásának feloldása"
         undo: Visszavonás
       undo: Domain tiltásának visszavonása
+      view: Domain tiltásának megtekintése
     email_domain_blocks:
       add_new: Új hozzáadása
       created_msg: E-mail domain sikeresen hozzáadva a feketelistához
@@ -322,6 +342,8 @@ hu:
         all: Mind
         limited: Korlátozott
         title: Moderáció
+      private_comment: Privát megjegyzés
+      public_comment: Nyilvános megjegyzés
       title: Föderáció
       total_blocked_by_us: Általunk letiltott
       total_followed_by_them: Általuk követett
@@ -449,6 +471,9 @@ 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
@@ -456,6 +481,9 @@ hu:
         desc_html: Nyilvános idővonal megjelenítése a főoldalon
         title: Idővonal előnézete
       title: Webhely beállításai
+      trends:
+        desc_html: Előzetesen engedélyezett és most trendi hashtagek nyilvános mutatása
+        title: Trendi hashtagek
     statuses:
       back_to_account: Vissza a fiók oldalára
       batch:
@@ -470,13 +498,19 @@ hu:
       title: Felhasználó tülkjei
       with_media: Médiafájlokkal
     tags:
-      accounts: Fiókok
-      hidden: Rejtett
-      hide: Ne jelenjen meg a profilok adatbázisában
-      name: Hashtag
+      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"
+      review: Engedélyezés állapota
+      reviewed: Engedélyezett
       title: Hashtagek
-      unhide: Jelenjen meg a profilok adatbázisában
-      visible: Látható
+      trending_right_now: Most trendi
+      unique_uses_today: "%{count} mai tülkölés"
+      unreviewed: Még nem engedélyezett
+      updated_msg: A hashtag beállításokat sikeresen frissítettük
     title: Karbantartás
     warning_presets:
       add_new: Új hozzáadása
@@ -492,11 +526,15 @@ hu:
       body: "%{reporter} jelentette: %{target}"
       body_remote: Valaki a %{domain} domainről jelentette %{target}
       subject: 'Új jelentés az alábbi szerveren: %{instance} (#%{id})'
+    new_trending_tag:
+      body: 'A #%{name} hashtag trendi a mai napon, de még nem engedélyeztük eddig. Nem mutatjuk meg nyilvánosan, hacsak nem engedélyezed. Csak simán mentsd az űrlapot, ha soha többé nem akarsz erről a hashtagről hallani.'
+      subject: Új hashtag (#%{name}) engedélyezésre vár a %{instance} szerveren
   appearance:
     advanced_web_interface: Haladó webes felület
     advanced_web_interface_hint: 'Ha szeretnéd, a teljes képernyőszélességet felhasználhatod. A haladó webes felülettel különböző oszlopokat állíthatsz be, hogy egyszerre annyi infót láthass, amennyit csak akarsz: Saját idővonal, értesítések, föderációs idővonal, bármennyi lista vagy hashtag.'
     animations_and_accessibility: Animáció és akadálymentesítés
     confirmation_dialogs: Megerősítő párbeszédablakok
+    discovery: Felfedezés
     sensitive_content: Szenzitív tartalom
   application_mailer:
     notification_preferences: E-mail beállítások módosítása
@@ -517,7 +555,7 @@ hu:
     apply_for_account: Meghívó kérése
     change_password: Jelszó
     checkbox_agreement_html: Egyetértek a <a href="%{rules_path}" target="_blank">szerver szabályaival</a> és a <a href="%{terms_path}" target="_blank">felhasználási feltételekkel</a>
-    confirm_email: E-mail megerősítése
+    checkbox_agreement_without_rules_html: Egyetértek a <a href="%{terms_path}" target="_blank">felhasználási feltételekkel</a>
     delete_account: Felhasználói fiók törlése
     delete_account_html: Felhasználói fiókod törléséhez <a href="%{path}">kattints ide</a>. A rendszer újbóli megerősítést fog kérni.
     didnt_get_confirmation: Nem kaptad meg a megerősítési lépéseket?
@@ -537,6 +575,15 @@ hu:
     reset_password: Jelszó visszaállítása
     security: Biztonság
     set_new_password: Új jelszó beállítása
+    setup:
+      email_below_hint_html: Ha az alábbi e-mail cím nem megfelelő, itt megváltoztathatod és kaphatsz egy új igazoló e-mailt.
+      email_settings_hint_html: A visszaigazoló e-mailt elküldtük ide %{email}. Ha az e-mail cím nem megfelelő, megváltoztathatod a fiókod beállításainál.
+      title: Beállítás
+    status:
+      account_status: Fiók állapota
+      confirming: Várakozás a visszaigazolásra.
+      functional: A fiókod teljesen működőképes.
+      pending: A jelentkezésed engedélyezésre vár. Ez eltarthat egy ideig. Kapsz egy e-mailt, ha az elbírálás megtörtént.
     trouble_logging_in: Problémád van a bejelentkezéssel?
   authorize_follow:
     already_following: Már követed ezt a felhasználót
@@ -581,6 +628,8 @@ hu:
     people:
       one: "%{count} ember"
       other: "%{count} ember"
+  domain_validator:
+    invalid_domain: nem egy valódi domain név
   errors:
     '403': Nincs jogosultságod az oldal megtekintéséhez.
     '404': Az általad keresett oldal nem található.
@@ -874,6 +923,8 @@ hu:
     profile: Profil
     relationships: Követések és követők
     two_factor_authentication: Kétlépcsős azonosítás
+  spam_check:
+    spam_detected_and_silenced: Ez egy automatikus bejelentés. Spamet érzékeltünk, így a küldőt automatikusan elnémítottuk. Ha ez hiba, oldd fel a némítást.
   statuses:
     attached:
       description: 'Csatolva: %{attached}'
@@ -915,6 +966,8 @@ hu:
     pinned: Kitűzött tülk
     reblogged: megtolta
     sensitive_content: Szenzitív tartalom
+  tags:
+    does_not_match_previous_name: nem illeszkedik az előző névvel
   terms:
     body_html: |
       <h2>Adatvédelmi nyilatkozat</h2>
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index 86645a574..197ddae79 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -1,5 +1,16 @@
 ---
 hy:
+  about:
+    active_count_after: ակտիվ
+    see_whats_happening: Տես ինչ ա կատարվում
+    status_count_after:
+      one: ստատուս
+      other: ստատուս
+    what_is_mastodon: Ի՞նչ է Մաստոդոնը
+  accounts:
+    media: Մեդիա
+  auth:
+    login: Մտնել
   errors:
     '403': You don't have permission to view this page.
     '404': The page you are looking for isn't here.
@@ -15,3 +26,7 @@ hy:
       '43200': 12 hours
       '604800': 1 week
       '86400': 1 day
+  sessions:
+    platforms:
+      android: Անդրոիդ
+      linux: Լինուքս
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 1df321752..781d99919 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -42,6 +42,7 @@ it:
     what_is_mastodon: Che cos'è Mastodon?
   accounts:
     choices_html: 'Suggerimenti da %{name}:'
+    featured_tags_hint: Puoi mettere in evidenza determinati hashtag che verranno visualizzati qui.
     follow: Segui
     followers:
       one: Seguace
@@ -183,6 +184,7 @@ it:
       username: Nome utente
       warn: Avverti
       web: Web
+      whitelisted: Nella whitelist
     action_logs:
       actions:
         assigned_to_self_report: "%{name} ha assegnato il rapporto %{target} a se stesso"
@@ -250,10 +252,13 @@ 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
       open_reports: apri report
+      pending_tags: hashtag in attesa di essere esaminati
+      pending_users: utenti in attesa di essere esaminati
       recent_users: Utenti Recenti
       search: Ricerca testo intero
       single_user_mode: Modalita utente singolo
@@ -265,6 +270,12 @@ it:
       week_interactions: interazioni per questa settimana
       week_users_active: attivi questa settimana
       week_users_new: utenti questa settimana
+      whitelist_mode: Modalità whitelist
+    domain_allows:
+      add_new: Dominio nella whitelist
+      created_msg: Il dominio è stato inserito nella whitelist
+      destroyed_msg: Il dominio è stato eliminato dalla whitelist
+      undo: Elimina dalla whitelist
     domain_blocks:
       add_new: Aggiungi nuovo
       created_msg: Il blocco del dominio sta venendo processato
@@ -280,6 +291,8 @@ it:
           silence: Silenzia
           suspend: Sospendi
         title: Nuovo blocco dominio
+      private_comment: Commento privato
+      public_comment: Commento pubblico
       reject_media: Rifiuta file media
       reject_media_hint: Rimuovi i file media salvati in locale e blocca i download futuri. Irrilevante per le sospensioni
       reject_reports: Respingi rapporti
@@ -322,6 +335,8 @@ it:
         all: Tutto
         limited: Limitato
         title: Moderazione
+      private_comment: Commento privato
+      public_comment: Commento pubblico
       title: Istanze conosciute
       total_blocked_by_us: Bloccato da noi
       total_followed_by_them: Seguito da loro
@@ -449,6 +464,9 @@ 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
@@ -456,6 +474,9 @@ it:
         desc_html: Mostra la timeline pubblica sulla pagina iniziale
         title: Anteprima timeline
       title: Impostazioni sito
+      trends:
+        desc_html: Visualizza pubblicamente gli hashtag precedentemente esaminati che sono attualmente in tendenza
+        title: Hashtag di tendenza
     statuses:
       back_to_account: Torna alla pagina dell'account
       batch:
@@ -470,13 +491,13 @@ it:
       title: Gli status dell'account
       with_media: con media
     tags:
-      accounts: Account
-      hidden: Nascosto
-      hide: Nascondi dalla directory
-      name: Etichetta
+      accounts_today: Usi unici oggi
+      accounts_week: Usi unici questa settimana
+      breakdown: Suddivisione dell'utilizzo di oggi per fonte
+      context: Contesto
+      directory: Nella directory
       title: Hashtag
-      unhide: Mostra nella directory
-      visible: Visibile
+      updated_msg: Impostazioni degli hashtag aggiornate
     title: Amministrazione
     warning_presets:
       add_new: Aggiungi nuovo
@@ -519,7 +540,7 @@ it:
     apply_for_account: Richiedi un invito
     change_password: Password
     checkbox_agreement_html: Sono d'accordo con le <a href="%{rules_path}" target="_blank">regole del server</a> ed i <a href="%{terms_path}" target="_blank">termini di servizio</a>
-    confirm_email: Conferma email
+    checkbox_agreement_without_rules_html: Accetto i <a href="%{terms_path}" target="_blank">termini di servizio</a>
     delete_account: Elimina account
     delete_account_html: Se desideri cancellare il tuo account, puoi <a href="%{path}">farlo qui</a>. Ti sarà chiesta conferma.
     didnt_get_confirmation: Non hai ricevuto le istruzioni di conferma?
@@ -539,6 +560,14 @@ it:
     reset_password: Resetta la password
     security: Credenziali
     set_new_password: Imposta una nuova password
+    setup:
+      email_below_hint_html: Se l'indirizzo e-mail sottostante non è corretto, puoi cambiarlo qui e ricevere una nuova e-mail di conferma.
+      email_settings_hint_html: L'email di conferma è stata inviata a %{email}. Se l'indirizzo e-mail non è corretto, puoi modificarlo nelle impostazioni dell'account.
+    status:
+      account_status: Stato dell'account
+      confirming: In attesa che la conferma e-mail sia completata.
+      functional: Il tuo account è pienamente operativo.
+      pending: La tua richiesta è in attesa di esame da parte del nostro staff. Potrebbe richiedere un po' di tempo. Riceverai una e-mail se la richiesta è approvata.
     trouble_logging_in: Problemi di accesso?
   authorize_follow:
     already_following: Stai già seguendo questo account
@@ -583,6 +612,8 @@ it:
     people:
       one: "%{count} persona"
       other: "%{count} persone"
+  domain_validator:
+    invalid_domain: non è un nome di dominio valido
   errors:
     '403': Non sei autorizzato a visualizzare questa pagina.
     '404': La pagina che stavi cercando non esiste.
@@ -617,6 +648,7 @@ it:
     add_new: Aggiungi nuovo
     errors:
       limit: Hai già messo in evidenza il numero massimo di hashtag
+    hint_html: "<strong>Cosa sono gli hashtag in evidenza?</strong> Sono visualizzati in evidenza sul tuo profilo pubblico e permettono alle persone di visualizzare i tuoi post pubblici marcati con questi hashtag. Sono un grande strumento per tenere traccia di opere creative o progetti a lungo termine."
   filters:
     contexts:
       home: Timeline home
@@ -876,6 +908,8 @@ it:
     profile: Profilo
     relationships: Follows e followers
     two_factor_authentication: Autenticazione a due fattori
+  spam_check:
+    spam_detected_and_silenced: Questa è una segnalazione automatica. É stato rilevato dello spam e il mittente è stato automaticamente silenziato. Se fosse un errore, per favore annulla questa operazione sull'account.
   statuses:
     attached:
       description: 'Allegato: %{attached}'
@@ -917,6 +951,8 @@ it:
     pinned: Toot fissato in cima
     reblogged: condiviso
     sensitive_content: Materiale sensibile
+  tags:
+    does_not_match_previous_name: non corrisponde al nome precedente
   terms:
     title: "%{instance} Termini di servizio e politica della privacy"
   themes:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index d70bc0365..289d937c8 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -24,6 +24,9 @@ ja:
     generic_description: "%{domain} は、Mastodon サーバーの一つです"
     get_apps: モバイルアプリを試す
     hosted_on: Mastodon hosted on %{domain}
+    instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、個人のアカウントではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックする以外の目的でブロックしないでください。サーバー全体をブロックする場合、ドメインブロックを使用してください。
+
+'
     learn_more: もっと詳しく
     privacy_policy: プライバシーポリシー
     see_whats_happening: やりとりを見てみる
@@ -239,6 +242,7 @@ ja:
       updated_msg: 絵文字の更新に成功しました!
       upload: アップロード
     dashboard:
+      authorized_fetch_mode: セキュアモード
       backlog: 未処理のジョブ
       config: 構成
       feature_deletions: アカウント削除
@@ -246,10 +250,13 @@ ja:
       feature_profile_directory: ディレクトリ
       feature_registrations: 新規登録
       feature_relay: 連合リレー
+      feature_spam_check: スパム対策
       feature_timeline_preview: タイムラインプレビュー
       features: 機能
       hidden_service: 秘匿サービスとの連合
       open_reports: 未解決の通報
+      pending_tags: 審査待ちのハッシュタグ
+      pending_users: 承認待ちの人数
       recent_users: 最近登録したユーザー
       search: 全文検索
       single_user_mode: シングルユーザーモード
@@ -261,11 +268,17 @@ ja:
       week_interactions: 今週交流のあった回数
       week_users_active: 今週活動した人数
       week_users_new: 今週登録した人数
+      whitelist_mode: ホワイトリストモード
+    domain_allows:
+      created_msg: ドメインのホワイトリストへの登録が正常に完了しました
+      destroyed_msg: ドメインがホワイトリストから削除されました
+      undo: ホワイトリストから削除
     domain_blocks:
       add_new: ドメインブロックを追加
       created_msg: ドメインブロック処理を完了しました
       destroyed_msg: ドメインブロックを外しました
       domain: ドメイン
+      edit: ドメインブロックを編集
       existing_domain_block_html: 既に%{name}に対して、より厳しい制限を課しています。先に<a href="%{unblock_url}">その制限を解除</a>する必要があります。
       new:
         create: ブロックを作成
@@ -276,6 +289,10 @@ ja:
           silence: サイレンス
           suspend: 停止
         title: 新規ドメインブロック
+      private_comment: コメント (非公開)
+      private_comment_hint: このコメントは同じサーバーのモデレーターも閲覧できます。
+      public_comment: コメント (公開)
+      public_comment_hint: ドメインブロックの公開を有効にしている場合、このコメントも一般に公開されます。
       reject_media: メディアファイルを拒否
       reject_media_hint: ローカルに保存されたメディアファイルを削除し、今後のダウンロードを拒否します。停止とは無関係です
       reject_reports: 通報を拒否
@@ -294,6 +311,7 @@ ja:
         title: "%{domain}のドメインブロックを戻す"
         undo: 元に戻す
       undo: ドメインブロックを戻す
+      view: ドメインブロックを表示
     email_domain_blocks:
       add_new: 新規追加
       created_msg: ブラックリストに追加しました
@@ -316,6 +334,8 @@ ja:
         all: すべて
         limited: 制限あり
         title: モデレーション
+      private_comment: コメント (非公開)
+      public_comment: コメント (公開)
       title: 既知のサーバー
       total_blocked_by_us: ブロック合計
       total_followed_by_them: 被フォロー合計
@@ -443,6 +463,9 @@ ja:
         desc_html: 独自のプライバシーポリシーや利用規約、その他の法的根拠を記述できます。HTMLタグが使えます
         title: カスタム利用規約
       site_title: サーバーの名前
+      spam_check_enabled:
+        desc_html: 求められていないメッセージを繰り返し送信するアカウントを自動でサイレンスにし通報することができます。誤検知を含む可能性もあります。
+        title: スパム対策を有効にする
       thumbnail:
         desc_html: OpenGraphとAPIによるプレビューに使用されます。サイズは1200×630px推奨です
         title: サーバーのサムネイル
@@ -450,6 +473,9 @@ ja:
         desc_html: ランディングページに公開タイムラインを表示します
         title: タイムラインプレビュー
       title: サイト設定
+      trends:
+        desc_html: 現在トレンドになっている承認済みのハッシュタグを公開します
+        title: トレンドタグを有効にする
     statuses:
       back_to_account: アカウントページに戻る
       batch:
@@ -464,13 +490,19 @@ ja:
       title: トゥート一覧
       with_media: メディアあり
     tags:
-      accounts: アカウント
-      hidden: 非表示
-      hide: ディレクトリから隠す
-      name: ハッシュタグ
+      accounts_today: 本日使用した人数
+      accounts_week: 今週使用した人数
+      breakdown: 直近のサーバー別使用状況
+      context: 表示先
+      directory: ディレクトリに使用
+      in_directory: "%{count} 人がディレクトリに使用"
+      review: 審査状況
+      reviewed: 審査済み
       title: ハッシュタグ
-      unhide: ディレクトリに表示する
-      visible: 表示
+      trending_right_now: 現在のトレンド
+      unique_uses_today: 本日 %{count} 人がトゥートに使用
+      unreviewed: 未審査
+      updated_msg: ハッシュタグ設定の更新に成功しました
     title: 管理
     warning_presets:
       add_new: 追加
@@ -486,11 +518,15 @@ ja:
       body: "%{reporter} が %{target} を通報しました"
       body_remote: "%{domain} の誰かが %{target} を通報しました"
       subject: "%{instance} の新しい通報 (#%{id})"
+    new_trending_tag:
+      body: 'ハッシュタグ #%{name} が本日のトレンドになっていますが、審査がまだ行われていないためトレンドタグには表示されていません。一度許可すれば次回からこの操作は不要です。'
+      subject: "%{instance} で新しいハッシュタグ (#%{name}) が審査待ちです"
   appearance:
     advanced_web_interface: 上級者向け UI
     advanced_web_interface_hint: ディスプレイを幅いっぱいまで活用したい場合、上級者向け UI をおすすめします。ホーム、通知、連合タイムライン、更にはリストやハッシュタグなど、様々な異なるカラムから望む限りの情報を一度に受け取れるような設定が可能になります。
     animations_and_accessibility: アニメーションとアクセシビリティー
     confirmation_dialogs: 確認ダイアログ
+    discovery: 見つける
     sensitive_content: 閲覧注意コンテンツ
   application_mailer:
     notification_preferences: メール設定の変更
@@ -511,7 +547,7 @@ ja:
     apply_for_account: 登録を申請する
     change_password: パスワード
     checkbox_agreement_html: <a href="%{rules_path}" target="_blank">サーバーのルール</a> と <a href="%{terms_path}" target="_blank">プライバシーポリシー</a> に同意します
-    confirm_email: メールアドレスの確認
+    checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">利用規約</a> に同意します
     delete_account: アカウントの削除
     delete_account_html: アカウントを削除したい場合、<a href="%{path}">こちら</a> から手続きが行えます。削除する前に、確認画面があります。
     didnt_get_confirmation: 確認メールを受信できませんか?
@@ -531,6 +567,14 @@ ja:
     reset_password: パスワードを再発行
     security: セキュリティ
     set_new_password: 新しいパスワード
+    setup:
+      email_below_hint_html: 下記のメールアドレスが間違っている場合、ここで変更することで新たに確認メールを受信できます。
+      email_settings_hint_html: 確認用のメールを %{email} に送信しました。メールアドレスが正しくない場合、以下より変更することができます。
+    status:
+      account_status: アカウントの状態
+      confirming: メールアドレスの確認が完了するのを待っています。
+      functional: アカウントは完全に機能しています。
+      pending: あなたの申請は現在サーバー管理者による審査待ちです。これにはしばらくかかります。申請が承認されるとメールが届きます。
     trouble_logging_in: ログインできませんか?
   authorize_follow:
     already_following: あなたは既にこのアカウントをフォローしています
@@ -574,6 +618,8 @@ ja:
     how_to_enable: あなたはディレクトリへの掲載を選択していません。下記から選択できます。ハッシュタグカラムに掲載するにはプロフィール文にハッシュタグを使用してください。
     people:
       other: "%{count} 人"
+  domain_validator:
+    invalid_domain: は無効なドメイン名です
   errors:
     '403': このページを表示する権限がありません。
     '404': お探しのページは見つかりませんでした。
@@ -628,6 +674,7 @@ ja:
     developers: 開発者向け
     more: さらに…
     resources: リソース
+    trending_now: トレンドタグ
   generic:
     all: すべて
     changes_saved_msg: 正常に変更されました!
@@ -865,6 +912,8 @@ ja:
     profile: プロフィール
     relationships: フォロー・フォロワー
     two_factor_authentication: 二段階認証
+  spam_check:
+    spam_detected_and_silenced: これは自動通報です。スパムが検出されたため、当該送信者は自動的にサイレンスに設定されました。もしこれが誤りである場合、アカウントのサイレンスを解除してください。
   statuses:
     attached:
       description: '添付: %{attached}'
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 57dd0f5c0..ba114e7c0 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -390,7 +390,6 @@ ka:
     your_token: თქვენი წვდომის ტოკენი
   auth:
     change_password: პაროლი
-    confirm_email: ელ-ფოსტის დამოწმება
     delete_account: ანგარიშის გაუქმება
     delete_account_html: თუ გსურთ გააუქმოთ თქვენი ანგარიში, შეგიძლიათ <a href="%{path}">გააგრძელოთ აქ</a>. საჭირო იქნება დამოწმება.
     didnt_get_confirmation: არ მოგსვლიათ დამოწმების ინსტრუქციები?
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index a3651b1d3..8ee043930 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -437,13 +437,7 @@ kk:
       title: Аккаунт статустары
       with_media: Медиамен
     tags:
-      accounts: Accоunts
-      hidden: Hiddеn
-      hide: Hidе from directory
-      name: Hаshtag
       title: Hashtаgs
-      unhide: Shоw in directory
-      visible: Visiblе
     title: Administrаtion
     warning_presets:
       add_new: Add nеw
@@ -472,7 +466,6 @@ kk:
     your_token: Your access tokеn
   auth:
     change_password: Құпиясөз
-    confirm_email: Еmаil құптау
     delete_account: Аккаунт өшіру
     delete_account_html: Аккаунтыңызды жойғыңыз келсе, <a href="%{path}">мына жерді</a> басыңыз. Сізден растау сұралатын болады.
     didnt_get_confirmation: Растау хаты келмеді ме?
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index ec64972ed..a2b98ebe2 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -24,6 +24,9 @@ ko:
     generic_description: "%{domain} 은 네트워크에 있는 한 서버입니다"
     get_apps: 모바일 앱 사용해 보기
     hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
+    instance_actor_flash: |
+      이 계정은 가상의 actor로서 개인 유저가 아닌 서버 자체를 나타냅니다.
+      이것은 페더레이션을 목적으로 사용 되며 인스턴스 전체를 차단하려 하지 않는 이상 차단하지 않아야 합니다, 그 경우에는 도메인 차단을 사용하세요.
     learn_more: 자세히
     privacy_policy: 개인정보 정책
     see_whats_happening: 무슨 일이 일어나는 지 보기
@@ -40,6 +43,8 @@ ko:
     what_is_mastodon: 마스토돈이란?
   accounts:
     choices_html: "%{name}의 추천:"
+    endorsements_hint: 내가 팔로우 하고 있는 사람들을 여기에 추천 할 수 있습니다.
+    featured_tags_hint: 특정한 해시태그들을 여기에 표시되도록 할 수 있습니다.
     follow: 팔로우
     followers:
       other: 팔로워
@@ -179,6 +184,7 @@ ko:
       username: 아이디
       warn: 경고
       web: 웹
+      whitelisted: 허용 목록
     action_logs:
       actions:
         assigned_to_self_report: "%{name}이 리포트 %{target}을 자신에게 할당했습니다"
@@ -239,6 +245,7 @@ ko:
       updated_msg: 에모지가 성공적으로 업데이트 되었습니다!
       upload: 업로드
     dashboard:
+      authorized_fetch_mode: 인증 된 페치 모드
       backlog: 미처리 된 작업
       config: 설정
       feature_deletions: 계정 삭제
@@ -246,10 +253,13 @@ ko:
       feature_profile_directory: 프로필 디렉토리
       feature_registrations: 가입
       feature_relay: 연합 릴레이
+      feature_spam_check: 안티 스팸
       feature_timeline_preview: 타임라인 미리보기
       features: 기능
       hidden_service: 히든 서비스와의 연합
       open_reports: 미해결 신고
+      pending_tags: 심사를 기다리는 해시태그
+      pending_users: 심사를 기다리는 유저
       recent_users: 최근 가입 한 유저
       search: 전문 검색
       single_user_mode: 싱글 유저 모드
@@ -261,11 +271,18 @@ ko:
       week_interactions: 이번 주의 상호작용
       week_users_active: 이번 주의 활성 사용자
       week_users_new: 이번 주의 신규 유저
+      whitelist_mode: 화이트리스트 모드
+    domain_allows:
+      add_new: 허용 된 도메인
+      created_msg: 도메인이 성공적으로 허용 목록에 추가되었습니다
+      destroyed_msg: 도메인이 허용 목록에서 제거되었습니다
+      undo: 허용 목록에서 제외
     domain_blocks:
       add_new: 도메인 차단 추가하기
       created_msg: 도메인 차단 처리를 완료했습니다
       destroyed_msg: 도메인 차단이 해제되었습니다
       domain: 도메인
+      edit: 도메인 차단 수정
       existing_domain_block_html: 이미 %{name}에 대한 더 강력한 제한이 걸려 있습니다, <a href="%{unblock_url}">차단 해제</a>를 먼저 해야 합니다.
       new:
         create: 차단 추가
@@ -278,6 +295,10 @@ ko:
           silence: 침묵
           suspend: 정지
         title: 새로운 도메인 차단
+      private_comment: 비공개 주석
+      private_comment_hint: 이 도메인 제한에 대한 주석은 모더레이터를 위해 내부적으로 사용 됩니다.
+      public_comment: 공개 주석
+      public_comment_hint: 이 도메인 제한에 대한 공개적인 주석, 도메인 제한 공개를 활성화 한 경우 보여집니다.
       reject_media: 미디어 파일 거부하기
       reject_media_hint: 로컬에 저장된 미디어 파일을 삭제하고, 이후로도 다운로드를 거부합니다. 정지와는 관계 없습니다
       reject_reports: 신고 거부
@@ -296,6 +317,7 @@ ko:
         title: "%{domain}의 도메인 차단을 해제"
         undo: 실행 취소
       undo: 도메인 차단 취소
+      view: 도메인 차단 보기
     email_domain_blocks:
       add_new: 새로 추가
       created_msg: 이메일 도메인 차단 규칙을 생성했습니다
@@ -318,6 +340,8 @@ ko:
         all: 모두
         limited: 제한됨
         title: 모더레이션
+      private_comment: 비공개 주석
+      public_comment: 공개 주석
       title: 연합
       total_blocked_by_us: 우리에게 차단 됨
       total_followed_by_them: 우리를 팔로우
@@ -395,6 +419,13 @@ ko:
       custom_css:
         desc_html: 모든 페이지에 적용할 CSS
         title: 커스텀 CSS
+      domain_blocks:
+        all: 모두에게
+        disabled: 아무에게도 안 함
+        title: 도메인 차단 보여주기
+        users: 로그인 한 유저에게
+      domain_blocks_rationale:
+        title: 사유 보여주기
       hero:
         desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 서버의 썸네일이 사용 됩니다
         title: 히어로 이미지
@@ -445,6 +476,9 @@ ko:
         desc_html: 당신은 독자적인 개인정보 취급 방침이나 이용약관, 그 외의 법적 근거를 작성할 수 있습니다. HTML태그를 사용할 수 있습니다
         title: 커스텀 서비스 이용 약관
       site_title: 서버 이름
+      spam_check_enabled:
+        desc_html: 마스토돈은 반복된 메시지 등의 측정값에 따라 자동으로 계정을 침묵, 신고할 수 있습니다. 위양성(False-positive)이 존재할 수 있습니다.
+        title: 안티 스팸
       thumbnail:
         desc_html: OpenGraph와 API의 미리보기로 사용 됩니다. 1200x630px을 권장합니다
         title: 서버 썸네일
@@ -452,6 +486,9 @@ ko:
         desc_html: 랜딩 페이지에 공개 타임라인을 표시합니다
         title: 타임라인 프리뷰
       title: 사이트 설정
+      trends:
+        desc_html: 리뷰를 거친 해시태그를 유행하는 해시태그에 공개적으로 보여줍니다
+        title: 유행하는 해시태그
     statuses:
       back_to_account: 계정으로 돌아가기
       batch:
@@ -466,13 +503,19 @@ ko:
       title: 계정 툿
       with_media: 미디어 있음
     tags:
-      accounts: 계정들
-      hidden: 숨겨짐
-      hide: 디렉토리에서 숨기기
-      name: 해시태그
+      accounts_today: 오늘의 순 사용자
+      accounts_week: 금주의 순 사용자
+      breakdown: 소스별 오늘의 사용량 분석
+      context: 문맥
+      directory: 디렉토리에 있음
+      in_directory: 디렉토리에 %{count}개 있음
+      review: 심사 상태
+      reviewed: 심사 됨
       title: 해시태그
-      unhide: 디렉토리에 표시
-      visible: 보여짐
+      trending_right_now: 지금 유행 중
+      unique_uses_today: 오늘 %{count}개의 포스팅
+      unreviewed: 심사 되지 않음
+      updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다
     title: 관리
     warning_presets:
       add_new: 새로 추가
@@ -488,11 +531,15 @@ ko:
       body: "%{reporter} 가 %{target} 를 신고했습니다"
       body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다"
       subject: "%{instance} 에 새 신고 등록됨 (#%{id})"
+    new_trending_tag:
+      body: "#%{name}가 오늘 유행하고 있습니다, 하지만 심사 된 적이 없습니다. 허용하지 않는 한 공개적으로 나타나지 않습니다. 또는 그냥 저장을 눌러 더이상 나타나지 않게 할 수 있습니다."
+      subject: 새 해시태그가 %{instance}에서 심사 대기 중입니다(#%{name})
   appearance:
     advanced_web_interface: 고급 웹 인터페이스
     advanced_web_interface_hint: '화면의 가로폭을 가득 채우고 싶다면, 고급 웹 인터페이스는 한 번에 여러 정보를 볼 수 있도록 여러 컬럼을 설정할 수 있도록 합니다: 홈, 알림, 연합타임라인, 리스트, 해시태그 등'
     animations_and_accessibility: 애니메이션과 접근성
     confirmation_dialogs: 확인 대화상자
+    discovery: 발견하기
     sensitive_content: 민감한 내용
   application_mailer:
     notification_preferences: 메일 설정 변경
@@ -513,7 +560,7 @@ ko:
     apply_for_account: 가입 요청하기
     change_password: 패스워드
     checkbox_agreement_html: <a href="%{rules_path}" target="_blank">서버 규칙</a>과 <a href="%{terms_path}" target="_blank">이용약관</a>에 동의합니다
-    confirm_email: 확인 메일 승인
+    checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">이용 약관</a>에 동의합니다
     delete_account: 계정 삭제
     delete_account_html: 계정을 삭제하고 싶은 경우, <a href="%{path}">여기서</a> 삭제할 수 있습니다. 삭제 전 확인 화면이 표시됩니다.
     didnt_get_confirmation: 확인 메일을 받지 못하셨습니까?
@@ -533,6 +580,15 @@ ko:
     reset_password: 암호 재설정
     security: 보안
     set_new_password: 새 암호
+    setup:
+      email_below_hint_html: 아래의 이메일 계정이 올바르지 않을 경우, 여기서 변경하고 새 확인 메일을 받을 수 있습니다.
+      email_settings_hint_html: 확인 메일이 %{email}로 보내졌습니다. 이메일 주소가 올바르지 않은 경우, 계정 설정에서 변경하세요.
+      title: 설정
+    status:
+      account_status: 계정 상태
+      confirming: 이메일 확인 과정이 완료되기를 기다리는 중.
+      functional: 계정이 완벽이 작동합니다.
+      pending: 당신의 가입 신청은 스태프의 검사를 위해 대기중입니다. 이것은 시간이 다소 소요됩니다. 가입 신청이 승인 될 경우 이메일을 받게 됩니다.
     trouble_logging_in: 로그인 하는데 문제가 있나요?
   authorize_follow:
     already_following: 이미 이 계정을 팔로우 하고 있습니다
@@ -576,6 +632,25 @@ ko:
     how_to_enable: 아직 디렉터리에 참여하지 않았습니다. 아래에서 참여할 수 있습니다. 바이오 텍스트에 해시태그를 사용해 특정 해시태그 디렉터리에 표시 될 수 있습니다!
     people:
       other: "%{count}명"
+  domain_blocks:
+    blocked_domains: 제한 되거나 차단 된 도메인 목록
+    description: 이것은 %{instance}가 제한하거나 연합을 거부한 서버들의 목록입니다.
+    domain: 도메인
+    media_block: 미디어 차단
+    no_domain_blocks: "(도메인 차단 없음)"
+    severity: 심각도
+    severity_legend:
+      media_block: 이 서버의 미디어는 불러오거나, 저장 되거나, 유저에게 보여지지 않습니다.
+      silence: 침묵 된 서버의 계정은 발견 되고, 팔로우 하고, 그들과 상호작용 할 수 있습니다, 그러나 그들의 툿은 툿 공개 타임라인에 나타나지 않으며 그들에게서 오는 알림은 그들을 팔로우 하지 않는 로컬 유저에게는 전달되지 않습니다.
+      suspension: 정지 된 서버의 어떤 콘텐츠도 저장 되거나 보여지거나 하지 않고 어떤 콘텐츠도 그 서버로 전달 되지 않습니다. 정지 된 서버에서의 상호작용은 무시됩니다.
+      suspension_disclaimer: 정지 된 서버는 때때로 이 서버의 공개 콘텐츠를 받아 갈 수도 잇습니다.
+      title: 심각도
+    show_rationale: 사유 보여주기
+    silence: 침묵
+    suspension: 정지
+    title: "%{instance}의 차단한 인스턴스 목록"
+  domain_validator:
+    invalid_domain: 올바른 도메인 네임이 아닙니다
   errors:
     '403': 이 페이지를 표시할 권한이 없습니다.
     '404': 당신이 찾으려는 페이지는 존재하지 않습니다.
@@ -610,6 +685,7 @@ ko:
     add_new: 추가
     errors:
       limit: 이미 추천 해시태그의 개수가 최대입니다
+    hint_html: "<strong>추천 해시태그가 무엇이죠?</strong> 당신의 공개 프로필 페이지에 눈에 띄게 표현 되며 사람들이 그 해시태그를 포함한 당신의 글을 찾아 볼 수 있도록 합니다. 창작활동이나 긴 기간을 가지는 프로젝트를 쭉 따라가기에 좋은 도구입니다."
   filters:
     contexts:
       home: 홈 타임라인
@@ -630,6 +706,7 @@ ko:
     developers: 개발자
     more: 더 보기…
     resources: 리소스
+    trending_now: 지금 유행중
   generic:
     all: 모두
     changes_saved_msg: 정상적으로 변경되었습니다!
@@ -865,6 +942,8 @@ ko:
     profile: 프로필
     relationships: 팔로잉과 팔로워
     two_factor_authentication: 2단계 인증
+  spam_check:
+    spam_detected_and_silenced: 이것은 자동화 된 보고입니다. 스팸이 감지 되어 작성자를 자동으로 침묵 처리하였습니다. 만약 실수였다면 계정을 침묵 해제하세요.
   statuses:
     attached:
       description: '첨부: %{attached}'
@@ -902,6 +981,8 @@ ko:
     pinned: 고정된 툿
     reblogged: 님이 부스트 했습니다
     sensitive_content: 민감한 컨텐츠
+  tags:
+    does_not_match_previous_name: 이전 이름과 맞지 않습니다
   terms:
     body_html: |
       <h2>개인정보 정책</h2>
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 087cbb582..cf1ae2709 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -420,13 +420,7 @@ lt:
       title: Paskyros statusai
       with_media: Su medija
     tags:
-      accounts: Paskyros
-      hidden: Paslėpti
-      hide: Paslėpti iš direktorijos
-      name: Saitažodis(#)
       title: Saitažodžiai(#)
-      unhide: Rodyti direktorijoje
-      visible: Matomas
     title: Administracija
     warning_presets:
       add_new: Pridėti naują
@@ -455,7 +449,6 @@ lt:
     your_token: Jūsų prieigos žetonas
   auth:
     change_password: Slaptažodis
-    confirm_email: Patvirtinti el paštą
     delete_account: Ištrinti paskyrą
     delete_account_html: Jeigu norite ištrinti savo paskyrą, galite eiti <a href="%{path}">čia</a>. Jūsų prašys patvirtinti pasirinkimą.
     didnt_get_confirmation: Negavote patvirtinimo instrukcijų?
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 52c23de8f..9ef60b701 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -470,13 +470,7 @@ nl:
       title: Toots van account
       with_media: Met media
     tags:
-      accounts: Accounts
-      hidden: Verborgen
-      hide: Niet in gebruikersgids tonen
-      name: Hashtag
       title: Hashtags
-      unhide: In gebruikersgids tonen
-      visible: Zichtbaar
     title: Beheer
     warning_presets:
       add_new: Nieuwe toevoegen
@@ -517,7 +511,6 @@ nl:
     apply_for_account: Een uitnodiging aanvragen
     change_password: Wachtwoord
     checkbox_agreement_html: Ik ga akkoord met de <a href="%{rules_path}" target="_blank">regels van deze server</a> en de <a href="%{terms_path}" target="_blank">gebruiksvoorwaarden</a>
-    confirm_email: E-mail bevestigen
     delete_account: Account verwijderen
     delete_account_html: Wanneer je jouw account graag wilt verwijderen, kun je dat <a href="%{path}">hier doen</a>. We vragen jou daar om een bevestiging.
     didnt_get_confirmation: Geen bevestigingsinstructies ontvangen?
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 067c343b8..aac54639c 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -183,6 +183,7 @@ oc:
       username: Nom d’utilizaire
       warn: Avisar
       web: Web
+      whitelisted: Mes en lista blanca
     action_logs:
       actions:
         assigned_to_self_report: "%{name} s’assignèt lo rapòrt %{target}"
@@ -250,6 +251,7 @@ 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
@@ -265,11 +267,18 @@ oc:
       week_interactions: interaccions aquesta setmana
       week_users_active: actius aquesta setmana
       week_users_new: utilizaires aquesta setmana
+      whitelist_mode: Mòde lista blanca
+    domain_allows:
+      add_new: Plaçar en lista blanca
+      created_msg: Lo domeni es corrèctament estat plaçat en lista blanca
+      destroyed_msg: Lo domeni es corrèctament estat levat de la lista blanca
+      undo: Levar de la lista blanca
     domain_blocks:
       add_new: Ajustar un novèl blocatge de domeni
       created_msg: Domeni blocat es a èsser tractat
       destroyed_msg: Lo blocatge del domeni es estat levat
       domain: Domeni
+      edit: Modificar lo blocatge de domeni
       existing_domain_block_html: Impausèretz ja de limitas mai estrictas per %{name}, vos cal lo <a href="%{unblock_url}">desblocar</a>d’en primièr.
       new:
         create: Crear blocatge
@@ -280,6 +289,8 @@ oc:
           silence: Silenci
           suspend: Suspendre
         title: Nòu blocatge domeni
+      private_comment: Comentari privat
+      public_comment: Comentari public
       reject_media: Regetar los fichièrs mèdias
       reject_media_hint: Lèva los fichièrs gardats localament e regèta las demandas de telecargament dins lo futur. Servís pas a res per las suspensions
       reject_reports: Regetar los senhalaments
@@ -299,6 +310,7 @@ oc:
         title: Restablir lo blocatge de domeni de %{domain}
         undo: Restablir
       undo: Restablir
+      view: Veire lo blocatge de domeni
     email_domain_blocks:
       add_new: Ajustar
       created_msg: Blocatge del domeni de corrièl ben plaçat
@@ -322,6 +334,8 @@ oc:
         all: Totas
         limited: Limitat
         title: Moderacion
+      private_comment: Comentari privat
+      public_comment: Comentari public
       title: Federacion
       total_blocked_by_us: Avèm blocat
       total_followed_by_them: Sègon
@@ -449,6 +463,8 @@ 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
@@ -470,13 +486,10 @@ oc:
       title: Estatuts del compte
       with_media: Amb mèdia
     tags:
-      accounts: Comptes
-      hidden: Amagat
-      hide: Amagar dins l’annuari
-      name: Etiqueta
+      context: Contèxt
+      directory: A l’annuari
+      in_directory: "%{count} a l’annuari"
       title: Etiquetas
-      unhide: Aparéisser dins l’annuari
-      visible: Visible
     title: Administracion
     warning_presets:
       add_new: N’ajustar un nòu
@@ -517,7 +530,6 @@ oc:
     apply_for_account: Demandar una invitacion
     change_password: Senhal
     checkbox_agreement_html: Accepti las <a href="%{rules_path}" target="_blank">règlas del servidor</a> e <a href="%{terms_path}" target="_blank">los tèrmes del servici</a>
-    confirm_email: Confirmar lo corrièl
     delete_account: Suprimir lo compte
     delete_account_html: Se volètz suprimir vòstre compte, podètz <a href="%{path}">o far aquí</a>. Vos demandarem que confirmetz.
     didnt_get_confirmation: Avètz pas recebut las instruccions de confirmacion ?
@@ -537,6 +549,10 @@ oc:
     reset_password: Reïnicializar lo senhal
     security: Seguretat
     set_new_password: Picar un nòu senhal
+    setup:
+      title: Configuracion
+    status:
+      account_status: Estat del compte
     trouble_logging_in: Problèmas de connexion ?
   authorize_follow:
     already_following: Seguètz ja aqueste compte
@@ -600,8 +616,8 @@ oc:
     archive_takeout:
       date: Data
       download: Telecargar vòstre archiu
-      hint_html: Podètz demandar un archiu de vòstres <strong>tuts e mèdias enviats</strong>. Las donadas exportadas seràn al format ActivityPub, ligible pels logicials compatibles. Podètz demandar un archiu cada 7 jorns.
-      in_progress: Complilacion de vòstre archiu...
+      hint_html: Podètz demandar un archiu de vòstres <strong>tuts e mèdias enviats</strong>. Las donadas exportadas seràn al format ActivityPub, legible pels logicials compatibles. Podètz demandar un archiu cada 7 jorns.
+      in_progress: Compilacion de vòstre archiu...
       request: Demandar vòstre archiu
       size: Talha
     blocks: Personas que blocatz
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 9932f1c62..d370b6c97 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -482,13 +482,7 @@ pl:
       title: Wpisy konta
       with_media: Z zawartością multimedialną
     tags:
-      accounts: Konta
-      hidden: Ukryte
-      hide: Ukryj w katalogu
-      name: Hasztag
       title: Hashtagi
-      unhide: Pokazuj w katalogu
-      visible: Widoczne
     title: Administracja
     warning_presets:
       add_new: Dodaj nowy
@@ -529,7 +523,6 @@ pl:
     apply_for_account: Poproś o zaproszenie
     change_password: Hasło
     checkbox_agreement_html: Zgadzam się z <a href="%{rules_path}" target="_blank">regułami serwera</a> i <a href="%{terms_path}" target="_blank">zasadami korzystania z usługi</a>
-    confirm_email: Potwierdź adres e-mail
     delete_account: Usunięcie konta
     delete_account_html: Jeżeli chcesz usunąć konto, <a href="%{path}">przejdź tutaj</a>. Otrzymasz prośbę o potwierdzenie.
     didnt_get_confirmation: Nie otrzymałeś(-aś) instrukcji weryfikacji?
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index e29191871..d65367183 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -451,12 +451,6 @@ pt-BR:
       no_status_selected: Nenhum status foi modificado porque nenhum estava selecionado
       title: Postagens da conta
       with_media: Com mídia
-    tags:
-      accounts: Contas
-      hidden: Escondido
-      hide: Esconder do diretório
-      unhide: Mostrar no diretório
-      visible: Visível
     title: Administração
     warning_presets:
       add_new: Adicionar um novo
@@ -490,7 +484,6 @@ pt-BR:
     apply_for_account: Pedir um convite
     change_password: Senha
     checkbox_agreement_html: Eu concordo com <a href="%{rules_path}" target="_blank">as regras do servidor</a> e com <a href="%{terms_path}" target="_blank">os termos de serviço</a>
-    confirm_email: Confirmar e-mail
     delete_account: Excluir conta
     delete_account_html: Se você deseja excluir a sua conta, você pode <a href="%{path}">prosseguir para cá</a>. Uma confirmação será requisitada.
     didnt_get_confirmation: Não recebeu instruções de confirmação?
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 41c399b7d..4f0441991 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -431,12 +431,6 @@ pt:
       no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado
       title: Estado das contas
       with_media: Com media
-    tags:
-      accounts: Contas
-      hidden: Escondidas
-      hide: Esconder no diretório
-      unhide: Mostrar no diretório
-      visible: Visível
     title: Administração
     warning_presets:
       add_new: Adicionar novo
@@ -465,7 +459,6 @@ pt:
     your_token: O teu token de acesso
   auth:
     change_password: Palavra-passe
-    confirm_email: Confirmar e-mail
     delete_account: Eliminar conta
     delete_account_html: Se desejas eliminar a conta, podes <a href="%{path}">continua aqui</a>. Uma confirmação será pedida.
     didnt_get_confirmation: Não recebeu o email de confirmação?
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 6e6c6f403..0f0d6b892 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -4,7 +4,6 @@ ro:
     hosted_on: Mastodon găzduit de %{domain}
   auth:
     change_password: Parolă
-    confirm_email: Confirmă email
     delete_account: Șterge contul
     delete_account_html: Dacă vrei să ștergi acest cont <a href="%{path}">poți începe aici</a>. Va trebui să confirmi această acțiune.
     didnt_get_confirmation: Nu ai primit instrucțiunile de confirmare?
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 83eb3089f..ec639c7a9 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -119,7 +119,7 @@ ru:
       followers: Подписчики
       followers_url: URL подписчиков
       follows: Подписки
-      header: Заголовок
+      header: Шапка
       inbox_url: URL входящих
       invited_by: Приглашение выдал(а)
       ip: IP
@@ -171,6 +171,7 @@ ru:
         moderator: Модератор
         staff: Персонал
         user: Пользователь
+      salmon_url: Страница Salmon
       search: Поиск
       shared_inbox_url: URL общих входящих
       show:
@@ -181,6 +182,7 @@ ru:
       statuses: Статусы
       subscribe: Подписаться
       suspended: Заморожен
+      time_in_queue: Ожидание в очереди %{time}
       title: Аккаунты
       unconfirmed_email: Неподтверждённый e-mail
       undo_silenced: Снять глушение
@@ -189,6 +191,7 @@ ru:
       username: Имя пользователя
       warn: Предупредить
       web: Веб
+      whitelisted: В белом списке
     action_logs:
       actions:
         assigned_to_self_report: "%{name} назначил(а) жалобу %{target} на себя"
@@ -256,10 +259,13 @@ ru:
       feature_profile_directory: Каталог профилей
       feature_registrations: Регистрация
       feature_relay: Ретрансляторы
+      feature_spam_check: Анти-спам
       feature_timeline_preview: Предпросмотр ленты
       features: Возможности
       hidden_service: Федерация со скрытыми сервисами
       open_reports: открытых жалоб
+      pending_tags: хэштеги, ожидающие проверки
+      pending_users: пользователи, ожидающие проверки
       recent_users: Недавние пользователи
       search: Полнотекстовый поиск
       single_user_mode: Однопользовательский режим
@@ -271,11 +277,17 @@ ru:
       week_interactions: взаимодействий на этой неделе
       week_users_active: активно на этой неделе
       week_users_new: пользователей на этой неделе
+      whitelist_mode: Белый список
+    domain_allows:
+      created_msg: Домен добавлен в белый список
+      destroyed_msg: Домен убран из белого списка
+      undo: Убрать из белого списка
     domain_blocks:
       add_new: Заблокировать домен
       created_msg: Блокировка домена обрабатывается
       destroyed_msg: Блокировка домена снята
       domain: Домен
+      edit: Редактировать блокировку
       new:
         create: Создать блокировку
         hint: Блокировка домена не предотвратит создание новых аккаунтов в базе данных, но ретроактивно и автоматически применит указанные методы модерации для этих аккаунтов.
@@ -285,6 +297,8 @@ ru:
           silence: Глушение
           suspend: Блокировка
         title: Новая доменная блокировка
+      private_comment: Приватный комментарий
+      public_comment: Публичный комментарий
       reject_media: Запретить медиаконтент
       reject_media_hint: Удаляет локально хранимый медиаконтент и запрещает его загрузку в будущем. Не имеет значения в случае блокировки.
       reject_reports: Отклонять жалобы
@@ -458,6 +472,8 @@ ru:
         desc_html: Вы можете добавить сюда собственную политику конфиденциальности, пользовательское соглашение и другие документы. Можно использовать теги HTML
         title: Условия использования
       site_title: Название сайта
+      spam_check_enabled:
+        title: Анти-спам
       thumbnail:
         desc_html: Используется для предпросмотра с помощью OpenGraph и API. Рекомендуется разрешение 1200x630px
         title: Картинка узла
@@ -479,13 +495,7 @@ ru:
       title: Статусы аккаунта
       with_media: С медиаконтентом
     tags:
-      accounts: Аккаунты
-      hidden: Скрыты
-      hide: Скрыть из каталога
-      name: Хэштег
       title: Хэштеги
-      unhide: Показывать в каталоге
-      visible: Видны
     title: Администрирование
     warning_presets:
       add_new: Добавить
@@ -523,7 +533,6 @@ ru:
     apply_for_account: Запросить приглашение
     change_password: Пароль
     checkbox_agreement_html: Я соглашаюсь с <a href="%{rules_path}" target="_blank">правилами сервера</a> и <a href="%{terms_path}" target="_blank">Условиями использования</a>
-    confirm_email: Подтвердите email
     delete_account: Удалить аккаунт
     delete_account_html: Если Вы хотите удалить свой аккаунт, вы можете <a href="%{path}">перейти сюда</a>. У Вас будет запрошено подтверждение.
     didnt_get_confirmation: Не получили инструкцию для подтверждения?
@@ -532,7 +541,7 @@ ru:
     login: Войти
     logout: Выйти
     migrate_account: Перенести аккаунт
-    migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
+    migrate_account_html: Если вы хотите перенаправить подписчиков на другой аккаунт, это можно <a href="%{path}">настроить здесь</a>.
     or_log_in_with: Или войти с помощью
     providers:
       cas: CAS
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index b948a5c50..963693d02 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -104,6 +104,7 @@ ar:
         setting_system_font_ui: استخدم الخطوط الافتراضية للنظام
         setting_theme: سمة الموقع
         setting_unfollow_modal: إظهار مربع حوار للتأكيد قبل إلغاء متابعة أي حساب
+        setting_use_pending_items: الوضع البطيء
         severity: القوّة
         type: صيغة الاستيراد
         username: اسم المستخدم
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index d8713e4ca..33d5a8493 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -34,6 +34,8 @@ ca:
         setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil
         setting_noindex: Afecta el teu perfil públic i les pàgines d'estat
         setting_show_application: L'aplicació que fas servir per a publicar es mostrarà a la vista detallada dels teus toots
+        setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però enfosqueixen els detalls
+        setting_use_pending_items: Amaga les actualitzacions de la línia de temps després d'un clic en comptes de desplaçar-se automàticament
         username: El teu nom d'usuari serà únic a %{domain}
         whole_word: Quan la paraula clau o la frase sigui només alfanumèrica, s'aplicarà si coincideix amb la paraula sencera
       featured_tag:
@@ -109,6 +111,8 @@ ca:
         setting_system_font_ui: Utilitza el tipus de lletra predeterminat del sistema
         setting_theme: Tema del lloc
         setting_unfollow_modal: Mostra el diàleg de confirmació abans de deixar de seguir a algú
+        setting_use_blurhash: Mostra degradats de colors per als Mèdia amagats
+        setting_use_pending_items: Mode lent
         severity: Severitat
         type: Importa el tipus
         username: Nom d'usuari
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index d58e77528..636d5f7aa 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -35,8 +35,11 @@ co:
         setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti
         setting_show_application: L'applicazione chì voi utilizate per mandà statuti sarà affissata indè a vista ditagliata di quelli
         setting_use_blurhash: I digradati blurhash sò basati nant'à i culori di u ritrattu piattatu ma senza i ditagli
+        setting_use_pending_items: Clicchi per messe à ghjornu i statuti invece di fà sfilà a linea autumaticamente
         username: U vostru cugnome sarà unicu nant'à %{domain}
         whole_word: Quandu a parolla o a frasa sana hè alfanumerica, sarà applicata solu s'ella currisponde à a parolla sana
+      domain_allow:
+        domain: Stu duminiu puderà ricuperà i dati di stu servore è i dati ch'affaccanu da quallà saranu trattati è cunservati
       featured_tag:
         name: 'Pudete vulè utilizà unu di quelli:'
       imports:
@@ -45,6 +48,8 @@ co:
         text: Quessu ci aiutarà à valutà a vostra dumanda
       sessions:
         otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:'
+      tag:
+        name: Pudete solu cambià a cassa di i caratteri, per esempiu per u rende più lighjevule
       user:
         chosen_languages: Soli i statuti scritti in e lingue selezziunate saranu mustrati indè e linee pubbliche
     labels:
@@ -109,8 +114,10 @@ co:
         setting_show_application: Indicà u nome di l'applicazione utilizata per mandà statuti
         setting_system_font_ui: Pulizza di caratteri di u sistemu
         setting_theme: Tema di u situ
+        setting_trends: Vede e tendenze per oghji
         setting_unfollow_modal: Mustrà una cunfirmazione per siguità qualch’unu
         setting_use_blurhash: Vede digradati di culori per i media piattati
+        setting_use_pending_items: Modu lentu
         severity: Severità
         type: Tippu d’impurtazione
         username: Cugnome
@@ -133,6 +140,11 @@ co:
         pending_account: Mandà un'e-mail quandu un novu contu hà bisognu d'esse valutatu
         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
+      tag:
+        listable: Auturizà stu hashtag à esse vistu nant'à l'annuariu di i prufili
+        trendable: Auturizà stu hashtag à esse vistu in e tendenze
+        usable: Auturizà i statuti à utilizà stu hashtag
     'no': Nò
     recommended: Ricumandati
     required:
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 5191d77fe..beabcd087 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -35,6 +35,7 @@ cs:
         setting_noindex: Ovlivňuje váš veřejný profil a stránky tootů
         setting_show_application: Aplikace, kterou používáte k psaní tootů, bude zobrazena v detailním zobrazení vašich tootů
         setting_use_blurhash: Gradienty jsou založeny na barvách skryté grafiky, ale zakrývají jakékoliv detaily
+        setting_use_pending_items: Skrýt aktualizace časový osy a načíst je kliknutím namísto automatického rolování proudu
         username: Vaše uživatelské jméno bude na %{domain} unikátní
         whole_word: Je-li klíčové slovo či fráze pouze alfanumerická, bude aplikována pouze, pokud se shoduje s celým slovem
       featured_tag:
@@ -111,6 +112,7 @@ cs:
         setting_theme: Motiv stránky
         setting_unfollow_modal: Zobrazovat před zrušením sledování potvrzovací okno
         setting_use_blurhash: Zobrazit pro skrytá média barevné gradienty
+        setting_use_pending_items: Pomalý režim
         severity: Přísnost
         type: Typ importu
         username: Uživatelské jméno
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index d07079642..b9e7c01d3 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -34,9 +34,12 @@ de:
         setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt
         setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge
         setting_show_application: Die Anwendung die du nutzst wird in der detaillierten Ansicht deiner Beiträge angezeigt
-        setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken irgendwelche Details, die Reize auslösen könnten
+        setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken irgendwelche Details
+        setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken anstatt automatisch zu scrollen
         username: Dein Profilname wird auf %{domain} einzigartig sein
         whole_word: Wenn das Schlagwort nur aus Buchstaben und Zahlen besteht, wird es nur angewendet, wenn es dem ganzen Wort entspricht
+      domain_allow:
+        domain: Diese Domain kann Daten von diesem Server abrufen und eingehende Daten werden verarbeitet und gespeichert
       featured_tag:
         name: 'Du möchtest vielleicht einen von diesen benutzen:'
       imports:
@@ -45,6 +48,8 @@ de:
         text: Dies wird uns helfen deine Anmeldungsanfrage besser zu verarbeiten
       sessions:
         otp: 'Gib die Zwei-Faktor-Authentifizierung von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:'
+      tag:
+        name: Du kannst zum Beispiel nur die Groß- und Kleinschreibung der Buchstaben ändern, um es lesbarer zu machen
       user:
         chosen_languages: Wenn aktiviert, werden nur Beiträge in den ausgewählten Sprachen auf den öffentlichen Zeitleisten angezeigt
     labels:
@@ -109,8 +114,10 @@ de:
         setting_show_application: Anwendung preisgeben, die benutzt wurde um Beiträge zu versenden
         setting_system_font_ui: Standardschriftart des Systems verwenden
         setting_theme: Theme
+        setting_trends: Heutige Trends anzeigen
         setting_unfollow_modal: Bestätigungsdialog anzeigen, bevor jemandem entfolgt wird
         setting_use_blurhash: Farbverlauf für versteckte Medien anzeigen
+        setting_use_pending_items: Langsamer Modus
         severity: Schweregrad
         type: Art des Imports
         username: Profilname
@@ -133,6 +140,11 @@ de:
         pending_account: E-Mail senden, wenn ein neues Benutzerkonto zur Überprüfung aussteht
         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
+      tag:
+        listable: Erlaube diesem Hashtag im Profilverzeichnis zu erscheinen
+        trendable: Erlaube es diesen Hashtag in den Trends erscheinen zu lassen
+        usable: Beiträge erlauben, diesen Hashtag zu verwenden
     'no': Nein
     recommended: Empfohlen
     required:
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 099c900a5..30252458c 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -35,8 +35,11 @@ el:
         setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις δημοσιεύσεις σου
         setting_show_application: Η εφαρμογή που χρησιμοποιείς για να στέλνεις τα τουτ σου θα εμφανίζεται στις αναλυτικές λεπτομέρειες τους
         setting_use_blurhash: Οι χρωματισμοί βασίζονται στα χρώματα του κρυμμένου πολυμέσου αλλά θολώνουν τις λεπτομέρειες
+        setting_use_pending_items: Εμφάνιση ενημερώσεων ροής μετά από κλικ αντί για αυτόματη κύλισή τους
         username: Το όνομα χρήστη σου θα είναι μοναδικό στο %{domain}
         whole_word: Όταν η λέξη ή η φράση κλειδί είναι μόνο αλφαριθμητική, θα εφαρμοστεί μόνο αν ταιριάζει με ολόκληρη τη λέξη
+      domain_allow:
+        domain: Ο τομέας αυτός θα επιτρέπεται να ανακτά δεδομένα από αυτό τον διακομιστή και τα εισερχόμενα δεδομένα θα επεξεργάζονται και θα αποθηκεύονται
       featured_tag:
         name: 'Ίσως να θες να χρησιμοποιήσεις μια από αυτές:'
       imports:
@@ -45,6 +48,8 @@ el:
         text: Αυτό θα μας βοηθήσει να επιθεωρήσουμε την αίτησή σου
       sessions:
         otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:'
+      tag:
+        name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο
       user:
         chosen_languages: Όταν ενεργοποιηθεί, στη δημόσια ροή θα εμφανίζονται τουτ μόνο από τις επιλεγμένες γλώσσες
     labels:
@@ -109,8 +114,10 @@ el:
         setting_show_application: Αποκάλυψη εφαρμογής που χρησιμοποιήθηκε για την αποστολή των τουτ
         setting_system_font_ui: Χρησιμοποίησε την προεπιλεγμένη γραμματοσειρά του συστήματος
         setting_theme: Θέμα ιστότοπου
+        setting_trends: Εμφάνιση σημερινών τάσεων
         setting_unfollow_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν διακόψεις την παρακολούθηση κάποιου
         setting_use_blurhash: Εμφάνιση χρωματισμών για τα κρυμμένα πολυμέσα
+        setting_use_pending_items: Αργή λειτουργία
         severity: Αυστηρότητα
         type: Τύπος εισαγωγής
         username: Όνομα χρηστη
@@ -133,6 +140,11 @@ el:
         pending_account: Αποστολή email όταν υπάρχει νέος λογαριασμός για επιθεώρηση
         reblog: Στέλνε email όταν κάποιος προωθεί τη δημοσίευση σου
         report: Αποστολή email όταν υποβάλλεται νέα καταγγελία
+        trending_tag: Αποστολή email όταν μια μη-εγκεκριμένη ταμπέλα γίνεται δημοφιλής
+      tag:
+        listable: Εμφάνιση αυτής της ταμπέλας στο δημόσιο κατάλογο
+        trendable: Εμφάνιση της ταμπέλας στις τάσεις
+        usable: Χρήση της ταμπέλας σε τουτ
     'no': Όχι
     recommended: Προτείνεται
     required:
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 8f63df013..df898c621 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -155,7 +155,7 @@ en:
         report: Send e-mail when a new report is submitted
         trending_tag: Send e-mail when an unreviewed hashtag is trending
       tag:
-        listable: Allow this hashtag to appear on the profile directory
+        listable: Allow this hashtag to appear in searches and on the profile directory
         trendable: Allow this hashtag to appear under trends
         usable: Allow toots to use this hashtag
     'no': 'No'
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 1b63b27a8..f8c213858 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -108,7 +108,9 @@ eo:
         setting_show_application: Publikigi la aplikaĵon uzatan por sendi mesaĝojn
         setting_system_font_ui: Uzi la dekomencan tiparon de la sistemo
         setting_theme: Reteja etoso
+        setting_trends: Montru Hodiaujn tendencojn
         setting_unfollow_modal: Montri fenestron por konfirmi antaŭ ol ĉesi sekvi iun
+        setting_use_pending_items: Malrapida reĝimo
         severity: Graveco
         type: Importa tipo
         username: Uzantnomo
@@ -131,6 +133,8 @@ eo:
         pending_account: Sendi retmesaĝon kiam nova konto bezonas kontrolon
         reblog: Sendi retmesaĝon kiam iu diskonigas vian mesaĝon
         report: Sendi retmesaĝon kiam nova signalo estas sendita
+      tag:
+        usable: Permesi tootojn uzi ĉiun tiun haketon
     'no': Ne
     recommended: Rekomendita
     required:
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 2986cf091..4f227dd9d 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -35,8 +35,11 @@ es:
         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
       featured_tag:
         name: 'Puede que quieras usar uno de estos:'
       imports:
@@ -111,6 +114,7 @@ es:
         setting_theme: Tema del sitio
         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
         type: Importar tipo
         username: Nombre de usuario
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
new file mode 100644
index 000000000..c87db1042
--- /dev/null
+++ b/config/locales/simple_form.et.yml
@@ -0,0 +1,153 @@
+---
+et:
+  simple_form:
+    hints:
+      account_warning_preset:
+        text: Te saate kasutada tuututuse süntaksi, näiteks URLe, silte ja mainimisi
+      admin_account_action:
+        send_email_notification: Konto omanik saab selgituse selle kohta, mis juhtus nende kontoga
+        text_html: Valikuline. Te saate kasutada tuututuse süntaksi. Te saate <a href="%{path}">lisada hoiatuste eelseadistusi</a> aega säästmiseks
+        type_html: Vali, mida teha kasutajaga <strong>%{acct}</strong>
+        warning_preset_id: Valikuline. Te saate ikka lisada mis tahes teksti eelseadistuse lõppu
+      defaults:
+        autofollow: Inimesed, kes loovad konto selle kutse läbi, automaatselt jälgivad Teid
+        avatar: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini
+        bot: See konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all
+        context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma
+        digest: Saadetakse ainult pärast pikka perioodi tegevusetust ja ainult siis, kui Teile on saadetud privaatseid sõnumeid
+        discoverable_html: <a href="%{path}" target="_blank">Kataloog</a> aitab inimestel leida kontosi sarnaste huvide ja aktiivsuse alusel. Nõuab vähemalt %{min_followers} jälgijat
+        email: Teile saadetakse kinnituskiri e-posti teel
+        fields: Te saate oma profiilil tabelina kuvada kuni 4 asja
+        header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini
+        inbox_url: Kopeerige soovitud relee avalehe URL
+        irreversible: Filtreeritud tuututused kaovad taastamatult, isegi kui filter on hiljem eemaldatud
+        locale: Kasutajaliidese, e-kirjade ja push-teadete keel
+        locked: Nõuab käsitsi jälgijate kinnitamist
+        password: Sisestage vähemalt 8 tähemärki
+        phrase: Kattub olenemata tuututuse teksti suurtähtedest või sisuhoiatusest
+        scopes: Milliseid API-sid see rakendus tohib kasutada. Kui Te valite kõrgeima taseme, ei pea Te valima individuaalseid.
+        setting_aggregate_reblogs: Ära näita uusi upitusi tuututustele, mis on just hiljuti upitatud (ainult kehtib uutele upitusele)
+        setting_default_sensitive: Tundlik meedia on vaikimisi peidetud ning seda saab avada sellele klikkides
+        setting_display_media_default: Peida tundlikuks märgitud meedia
+        setting_display_media_hide_all: Alati peida kõik meedia
+        setting_display_media_show_all: Alati näita tundlikuks märgistatud meedia
+        setting_hide_network: Keda Te jälgite ja kes jägib Teid ei kuvata Teie profiilil
+        setting_noindex: Mõjutab Teie avalikku profiili ja staatuse lehekülgi
+        setting_show_application: Rakendus, mida kasutate tuututamiseks, kuvatakse tuututuste üksikasjade vaates
+        setting_use_blurhash: Värvid põhinevad peidetud visuaalidel, kuid hägustavad igasuguseid detaile
+        setting_use_pending_items: Peida ajajoone uuendused kliki taga selle asemel, et automaatselt kerida voogu
+        username: Teie kasutajanimi on %{domain}-il unikaalne
+        whole_word: Kui võtmesõna või fraas on ainult tähtnumbriline, rakendub see ainult siis, kui see kattub terve sõnaga
+      domain_allow:
+        domain: See domeen saab tõmmata andmeid sellelt serverilt ning sissetulevad andmed sellelt domeenilt töödeldakse ning salvestatakse
+      featured_tag:
+        name: 'Äkki soovite kasutada mõnda neist:'
+      imports:
+        data: CSV fail eksporditi teisest Mastodoni serverist
+      invite_request:
+        text: See aitab meil üle vaadata Teie taotlust
+      sessions:
+        otp: 'Sisesta kahesammulise autentimise kood loodud Teie mobiilirakenduse poolt või sisesta mõni taastuskood:'
+      tag:
+        name: Te saate ainult muuta tähtede tõstetust, näiteks selleks, et muuta seda rohkem loetavaks
+      user:
+        chosen_languages: Kui valitud, ainult valitud keeltes tuututused näidatakse avalikes ajajoontes
+    labels:
+      account:
+        fields:
+          name: Nimetus
+          value: Sisu
+      account_warning_preset:
+        text: Eelseadistatud tekst
+      admin_account_action:
+        send_email_notification: Teavita kasutajat e-posti teel
+        text: Hoiatus
+        type: Tegevus
+        types:
+          disable: Keela
+          none: Ära tee midagi
+          silence: Vaigista
+          suspend: Peata ja taastamatult kustuta konto andmed
+        warning_preset_id: Kasuta hoiatuse eelseadistust
+      defaults:
+        autofollow: Kutsu oma kontot jälgima
+        avatar: Profiilipilt
+        bot: See konto on robot
+        chosen_languages: Filtreeri keeli
+        confirm_new_password: Kinnita uus salasõna
+        confirm_password: Kinnita salasõna
+        context: Filtreeri kontekste
+        current_password: Kehtiv salasõna
+        data: Andmed
+        discoverable: Lisage see konto kataloogi
+        display_name: Kuvanimi
+        email: E-posti aadress
+        expires_in: Aegu pärast
+        fields: Profiili metaandmed
+        header: Päis
+        inbox_url: Relee sisendkausta URL
+        irreversible: Kustuta selle asemel, et peita
+        locale: Kasutajaliidese keel
+        locked: Lukusta konto
+        max_uses: Maksimum kasutajate arv
+        new_password: Uus salasõna
+        note: Elulugu
+        otp_attempt: Kahesammulise autentimise kood
+        password: Salasõna
+        phrase: Võtmesõna või fraas
+        setting_advanced_layout: Aktiveeri arenenud veebiliides
+        setting_aggregate_reblogs: Grupita upitused ajajoontes
+        setting_auto_play_gif: Mängi GIF-e automaatselt
+        setting_boost_modal: Näita kinnitusdialoogi enne upitamist
+        setting_default_language: Postituse keel
+        setting_default_privacy: Postituse privaatsus
+        setting_default_sensitive: Alati märgista meedia tundlikuks
+        setting_delete_modal: Näita kinnitusdialoogi enne tuututuse kustutamist
+        setting_display_media: Meedia kuvarežiim
+        setting_display_media_default: Vaikimisi
+        setting_display_media_hide_all: Peida kõik
+        setting_display_media_show_all: Kuva kõik
+        setting_expand_spoilers: Alati laienda sisuhoiatustega tuututused
+        setting_hide_network: Peida oma võrk
+        setting_noindex: Keeldu otsingumootorite indekseerimistest
+        setting_reduce_motion: Vähenda liikumist animatsioonides
+        setting_show_application: Avalikusta tuututuste saatmisel kasutatud rakendused
+        setting_system_font_ui: Kasuta süsteemi vaikefonti
+        setting_theme: Saidi teema
+        setting_trends: Näita tänaseid trende
+        setting_unfollow_modal: Näita kinnitusdialoogi enne jälgimise eemaldamist
+        setting_use_blurhash: Näita peidetud meedia asemel värvilist pilti
+        setting_use_pending_items: Aeglane režiim
+        severity: Tõsidus
+        type: Impordi tüüp
+        username: Kasutajanimi
+        username_or_email: Kasutajanimi või e-post
+        whole_word: Terve sõna
+      featured_tag:
+        name: Silt
+      interactions:
+        must_be_follower: Keela teavitused mittejälgijatelt
+        must_be_following: Keela teavitused kasutajatelt, keda sa ei jälgi
+        must_be_following_dm: Keela privaatsõnumid kasutajatelt, keda sa ei jälgi
+      invite_request:
+        text: Miks Te soovite liituda?
+      notification_emails:
+        digest: Saada ülevaatlike e-kirju
+        favourite: Saada e-kiri, kui keegi lisab teie staatuse lemmikuks
+        follow: Saada e-kiri, kui keegi alustab Teie jälgimist
+        follow_request: Saada e-kiri, kui keegi soovib Teid jälgida
+        mention: Saada e-kiri, kui keegi mainib Teid
+        pending_account: Saada e-kiri, kui uus konto vajab ülevaatlust
+        reblog: Saada e-kiri, kui keegi upitab Teie staatust
+        report: Saada e-kiri, kui esitatud on uus teavitus
+        trending_tag: Saada e-kiri, kui ülevaatamata silt trendib
+      tag:
+        listable: Luba sellel sildil ilmuda profiilide kataloogis
+        trendable: Luba sellel sildil trendida
+        usable: Luba tuututustel seda silti kasutada
+    'no': Ei
+    recommended: Soovituslik
+    required:
+      mark: "*"
+      text: kohustuslik
+    'yes': Jah
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index be3883fb0..0a88116f1 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -109,8 +109,10 @@ eu:
         setting_show_application: Utzi agerian tootak bidaltzeko erabilitako aplikazioa
         setting_system_font_ui: Erabili sistemako tipografia lehenetsia
         setting_theme: Gunearen gaia
+        setting_trends: Erakutsi gaurko joerak
         setting_unfollow_modal: Erakutsi baieztapen elkarrizketa-koadroa inor jarraitzeari utzi aurretik
         setting_use_blurhash: Erakutsi gradiente koloretsuak ezkutatutako multimediaren ordez
+        setting_use_pending_items: Modu geldoa
         severity: Larritasuna
         type: Inportazio mota
         username: Erabiltzaile-izena
@@ -133,6 +135,9 @@ eu:
         pending_account: Bidali e-mail bat kontu bat berrikusi behar denean
         reblog: Bidali e-mail bat norbaitek zure mezuari bultzada ematen badio
         report: Bidali e-maila txosten berri bat aurkezten denean
+      tag:
+        trendable: Baimendu traola hau joeretan agertzea
+        usable: Baimendu toot-ek traola hau erabiltzea
     'no': Ez
     recommended: Aholkatua
     required:
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index 7d2dbd8a9..655c57bc3 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -34,6 +34,8 @@ fa:
         setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی می‌گیرید روی نمایهٔ شما دیده نخواهد شد
         setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشته‌های شما تأثیر می‌گذارد
         setting_show_application: برنامه‌ای که به کمک آن بوق می‌زنید، در جزئیات بوق شما نمایش خواهد یافت
+        setting_use_blurhash: سایه‌ها بر اساس رنگ‌های به‌کاررفته در تصویر پنهان‌شده ساخته می‌شوند ولی جزئیات تصویر در آن‌ها آشکار نیست
+        setting_use_pending_items: به جای پیش‌رفتن خودکار در فهرست، به‌روزرسانی فهرست نوشته‌ها را پشت یک کلیک پنهان کن
         username: نام کاربری شما روی %{domain} یکتا خواهد بود
         whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا می‌شود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه
       featured_tag:
@@ -109,6 +111,8 @@ fa:
         setting_system_font_ui: به‌کاربردن قلم پیش‌فرض سیستم
         setting_theme: تم سایت
         setting_unfollow_modal: نمایش پیغام تأیید پیش از لغو پیگیری دیگران
+        setting_use_blurhash: به جای تصویرهای پنهان‌شده، سایه‌های رنگی نشان بده
+        setting_use_pending_items: حالت آهسته
         severity: شدت
         type: نوع درون‌ریزی
         username: نام کاربری (لاتین)
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 122481dcf..f4966a030 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -3,7 +3,7 @@ gl:
   simple_form:
     hints:
       account_warning_preset:
-        text: Vostede pode utilizar dar formato ao toot, como URLs, etiquetas e mencións
+        text: Vostede pode darlle formato ao toot, como URLs, etiquetas e mencións
       admin_account_action:
         send_email_notification: A usuaria recibirá unha explicación sobre o que lle aconteceu a súa conta
         text_html: Optativo. Pode utilizar formato no toot. Pode <a href="%{path}">engadir avisos preestablecidos</a> para aforrar tempo
@@ -35,8 +35,11 @@ gl:
         setting_noindex: Afecta ao seu perfil público e páxinas de estado
         setting_show_application: A aplicación que está a utilizar para enviar toots mostrarase na vista detallada do toot
         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 seu nome de usuaria será único en %{domain}
         whole_word: Se a chave ou frase de paso é só alfanumérica, só se aplicará se concorda a palabra completa
+      domain_allow:
+        domain: Este dominio estará en disposición de obter datos desde este servidor e datos de entrada a el poderán ser procesados e gardados
       featured_tag:
         name: 'Podería utilizar algunha de estas:'
       imports:
@@ -44,7 +47,7 @@ gl:
       invite_request:
         text: Esto axudaranos a revisar a súa aplicación
       sessions:
-        otp: 'Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación:'
+        otp: 'Introduza o código de dobre-factor creado pola aplicación do seu móbil ou utilice un dos seus códigos de recuperación:'
       user:
         chosen_languages: Se ten marca, só os toots nos idiomas seleccionados serán mostrados en liñas temporais públicas
     labels:
@@ -87,7 +90,7 @@ gl:
         max_uses: Número máximo de usos
         new_password: Novo contrasinal
         note: Sobre vostede
-        otp_attempt: Código de Doble-Factor
+        otp_attempt: Código de Dobre-Factor
         password: Contrasinal
         phrase: Palabra chave ou frase
         setting_advanced_layout: Activar interface web avanzada
@@ -109,8 +112,10 @@ gl:
         setting_show_application: Mostrar a aplicación utilizada para tootear
         setting_system_font_ui: Utilizar a tipografía por defecto do sistema
         setting_theme: Decorado da instancia
+        setting_trends: Mostrar as tendencias de hoxe
         setting_unfollow_modal: Solicitar confirmación antes de deixar de seguir alguén
         setting_use_blurhash: Mostrar gradientes coloridos para medios ocultos
+        setting_use_pending_items: Modo lento
         severity: Severidade
         type: Tipo de importación
         username: Nome de usuaria
@@ -133,6 +138,11 @@ gl:
         pending_account: Enviar correo-e cando unha nova conta precisa revisión
         reblog: Enviar un correo cando alguén promociona a súa mensaxe
         report: Enviar un correo cando se envíe un novo informe
+        trending_tag: Enviar correo cando unha etiqueta non revisada é tendencia
+      tag:
+        listable: Permitir a esta etiqueta aparecer no directorio de perfil
+        trendable: Permitir a esta etiqueta aparecer baixo Tendencias
+        usable: Permitir que os toots utilicen esta etiqueta
     'no': Non
     recommended: Recomendado
     required:
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 7e5e4e79d..fe7556bc3 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -34,8 +34,12 @@ hu:
         setting_hide_network: Nem látszik majd a profilodon, kik követnek és te kiket követsz
         setting_noindex: A nyilvános profilodra és a tülkjeidre vonatkozik
         setting_show_application: A tülkök részletes nézetében látszani fog, milyen alkalmazást használtál a tülköléshez
+        setting_use_blurhash: A kihomályosítás az eredeti képből történik, de minden részletet elrejt
+        setting_use_pending_items: Idővonal frissítése csak kattintásra automatikus görgetés helyett
         username: A felhasználói neved egyedi lesz a %{domain} domainen
         whole_word: Ha a kulcsszó alfanumerikus, csak akkor minősül majd találatnak, ha teljes szóra illeszkedik
+      domain_allow:
+        domain: Ez a domain adatot kérhet le a szerverünkről és az ettől érkező adatokat feldolgozzuk és mentjük
       featured_tag:
         name: 'Ezeket esetleg használhatod:'
       imports:
@@ -44,6 +48,8 @@ hu:
         text: Ez segít nekünk átnézni a jelentkezésedet
       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:'
+      tag:
+        name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen
       user:
         chosen_languages: Ha aktív, csak a kiválasztott nyelvű tülkök jelennek majd meg a nyilvános idővonalon
     labels:
@@ -108,7 +114,10 @@ hu:
         setting_show_application: A tülkölésre használt alkalmazás feltüntetése
         setting_system_font_ui: Rendszer betűtípusának használata
         setting_theme: Megjelenítési sablon
+        setting_trends: Mai trend mutatása
         setting_unfollow_modal: Megerősítés kérése mielőtt abbahagyod valaki követését
+        setting_use_blurhash: Rejtett média helyett homály mutatása
+        setting_use_pending_items: Lassú mód
         severity: Súlyosság
         type: Importálás típusa
         username: Felhasználónév
@@ -131,6 +140,11 @@ hu:
         pending_account: E-mail küldése, ha új fiókot kell engedélyezni
         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
+      tag:
+        listable: A hashtag megjelenhet a profiladatbázisban
+        trendable: A hashtag megjelenhet a trendek között
+        usable: Tülkök használhatják ezt a hashtaget
     'no': Nem
     recommended: Ajánlott
     required:
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 377a55293..1778d7ece 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -34,8 +34,12 @@ it:
         setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo
         setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status
         setting_show_application: L'applicazione che usi per pubblicare i toot sarà mostrata nella vista di dettaglio dei tuoi toot
+        setting_use_blurhash: I gradienti sono basati sui colori delle immagini nascoste ma offuscano tutti i dettagli
+        setting_use_pending_items: Fare clic per mostrare i nuovi messaggi invece di aggiornare la timeline automaticamente
         username: Il tuo nome utente sarà unico su %{domain}
         whole_word: Quando la parola chiave o la frase è solo alfanumerica, si applica solo se corrisponde alla parola intera
+      domain_allow:
+        domain: Questo dominio potrà recuperare i dati da questo server e i dati in arrivo da esso verranno elaborati e memorizzati
       featured_tag:
         name: 'Eccone alcuni che potresti usare:'
       imports:
@@ -44,6 +48,8 @@ it:
         text: Questo ci aiuterà ad esaminare la tua richiesta
       sessions:
         otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:'
+      tag:
+        name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile
       user:
         chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate
     labels:
@@ -108,7 +114,10 @@ it:
         setting_show_application: Rendi pubblica l'applicazione usata per inviare i toot
         setting_system_font_ui: Usa il carattere predefinito del sistema
         setting_theme: Tema sito
+        setting_trends: Mostra tendenze di oggi
         setting_unfollow_modal: Chiedi conferma prima di smettere di seguire qualcuno
+        setting_use_blurhash: Mostra i gradienti colorati per i media nascosti
+        setting_use_pending_items: Modalità lenta
         severity: Severità
         type: Tipo importazione
         username: Nome utente
@@ -131,6 +140,10 @@ it:
         pending_account: Invia e-mail quando un nuovo account richiede l'approvazione
         reblog: Invia email quando qualcuno da un boost al tuo stato
         report: Manda una mail quando viene inviato un nuovo rapporto
+      tag:
+        listable: Permetti a questo hashtag di apparire nella directory dei profili
+        trendable: Permetti a questo hashtag di apparire nelle tendenze
+        usable: Permetti ai toot di utilizzare questo hashtag
     'no': 'No'
     recommended: Consigliato
     required:
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 5d14fa4bf..927d3eb8c 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -35,6 +35,7 @@ ja:
         setting_noindex: 公開プロフィールおよび各投稿ページに影響します
         setting_show_application: トゥートするのに使用したアプリがトゥートの詳細ビューに表示されるようになります
         setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています
+        setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします
         username: あなたのユーザー名は %{domain} の中で重複していない必要があります
         whole_word: キーワードまたはフレーズが英数字のみの場合、単語全体と一致する場合のみ適用されるようになります
       featured_tag:
@@ -45,6 +46,8 @@ ja:
         text: このサーバーは現在承認制です。申請を承認する際に役立つメッセージを添えてください
       sessions:
         otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:'
+      tag:
+        name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます
       user:
         chosen_languages: 選択すると、選択した言語のトゥートのみが公開タイムラインに表示されるようになります
     labels:
@@ -110,8 +113,10 @@ ja:
         setting_show_application: 送信したアプリを開示する
         setting_system_font_ui: システムのデフォルトフォントを使う
         setting_theme: サイトテーマ
+        setting_trends: 本日のトレンドタグを表示する
         setting_unfollow_modal: フォローを解除する前に確認ダイアログを表示する
         setting_use_blurhash: 非表示のメディアを色付きのぼかしで表示する
+        setting_use_pending_items: 手動更新モード
         severity: 重大性
         type: インポートする項目
         username: ユーザー名
@@ -134,6 +139,11 @@ ja:
         pending_account: 新しいアカウントの承認が必要な時にメールで通知する
         reblog: トゥートがブーストされた時にメールで通知する
         report: 通報を受けた時にメールで通知する
+        trending_tag: 未審査のハッシュタグが人気の時にメールで通知する
+      tag:
+        listable: 検索とディレクトリへの使用を許可する
+        trendable: トレンドへの表示を許可する
+        usable: トゥートへの使用を許可する
     'no': いいえ
     recommended: おすすめ
     required:
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 8147cde5d..2baf72e87 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -34,8 +34,12 @@ ko:
         setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들이 내 프로필에 표시되지 않게 합니다
         setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다
         setting_show_application: 당신이 툿을 작성하는데에 사용한 앱이 툿의 상세정보에 표시 됩니다
+        setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다
+        setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다
         username: 당신의 유저네임은 %{domain} 안에서 유일해야 합니다
         whole_word: 키워드가 영문과 숫자로만 이루어 진 경우, 단어 전체에 매칭 되었을 때에만 작동하게 합니다
+      domain_allow:
+        domain: 이 도메인은 이 서버에서 데이터를 가져갈 수 있고 이 도메인에서 보내진 데이터는 처리되고 저장 됩니다
       featured_tag:
         name: '이것들을 사용하면 좋을 것 같습니다:'
       imports:
@@ -44,6 +48,8 @@ ko:
         text: 이 정보는 우리가 심사를 하는 데에 참고할 수 있습니다
       sessions:
         otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:'
+      tag:
+        name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다.
       user:
         chosen_languages: 체크하면, 선택 된 언어들만 공개 타임라인에 보여집니다
     labels:
@@ -108,7 +114,10 @@ ko:
         setting_show_application: 툿 작성에 사용한 앱을 공개
         setting_system_font_ui: 시스템의 초기 설정 폰트를 사용
         setting_theme: 사이트 테마
+        setting_trends: 오늘의 유행 보이기
         setting_unfollow_modal: 언팔로우 전 언팔로우 확인 표시
+        setting_use_blurhash: 숨겨진 미디어에 대해 그라디언트 표시
+        setting_use_pending_items: 느린 모드
         severity: 심각도
         type: 불러오기 종류
         username: 유저 이름
@@ -131,8 +140,14 @@ ko:
         pending_account: 새 계정이 심사가 필요할 때 이메일 보내기
         reblog: 누군가 내 툿을 부스트 했을 때 이메일 보내기
         report: 새 신고 등록시 이메일로 알리기
+        trending_tag: 리뷰 되지 않은 해시태그가 유행할 때 이메일 보내기
+      tag:
+        listable: 이 해시태그가 프로필 디렉토리에 보여지도록 허용
+        trendable: 이 해시태그가 유행에 보여지도록 허용
+        usable: 이 해시태그를 툿에 사용 가능하도록 허용
     'no': 아니오
     recommended: 추천함
     required:
+      mark: "*"
       text: 필수 항목
     'yes': 네
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 9453375b1..9ebd64a90 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -35,6 +35,7 @@ oc:
         setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts
         setting_show_application: Lo nom de l’aplicacion qu’utilizatz per publicar serà mostrat dins la vista detalhada de vòstres tuts
         setting_use_blurhash: Los degradats venon de las colors de l’imatge rescondut en enfoscar los detalhs
+        setting_use_pending_items: Rescondre las actualizacions del flux d’actualitat aprèp un clic allòc de desfilar lo flux automaticament
         username: Vòstre nom d’utilizaire serà unic sus %{domain}
         whole_word: Quand lo mot-clau o frasa es solament alfranumeric, serà pas qu’aplicat se correspond al mot complèt
       featured_tag:
@@ -109,8 +110,10 @@ oc:
         setting_show_application: Revelar lo nom de l’aplicacion utilizada per enviar de tuts
         setting_system_font_ui: Utilizar la polissa del sistèma
         setting_theme: Tèma del site
+        setting_trends: Veire las tendéncias d’uèi
         setting_unfollow_modal: Mostrar una confirmacion abans de quitar de sègre qualqu’un
         setting_use_blurhash: Mostrar los degradats colorats pels mèdias resconduts
+        setting_use_pending_items: Mòde lent
         severity: Severitat
         type: Tipe d’impòrt
         username: Nom d’utilizaire
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index fcc1c2827..2835cdb30 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -11,18 +11,18 @@ ru:
         warning_preset_id: Необязательно. Вы можете добавить собственный текст в конце шаблона
       defaults:
         autofollow: Люди, пришедшие по этому приглашению, автоматически будут подписаны на вас
-        avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
+        avatar: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшен до %{dimensions}px
         bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем
         context: Один или несколько контекстов, к которым должны быть применены фильтры
         digest: Отсылается лишь после длительной неактивности, если вы в это время получали личные сообщения
         discoverable_html: <a href="%{path}" target="_blank">Каталог</a> позволяет пользователям искать людей по интересам и активности. Необходимо наличие не менее %{min_followers} подписчиков
         email: Вам будет отправлено электронное письмо с подтверждением
         fields: В профиле можно отобразить до 4 пунктов как таблицу
-        header: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
+        header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px
         inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать
         irreversible: Отфильтрованные статусы будут утеряны навсегда, даже если в будущем фильтр будет убран
         locale: Язык интерфейса, e-mail писем и push-уведомлений
-        locked: Потребует от вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков"
+        locked: Подписчиков нужно будет подтверждать самостоятельно
         password: Укажите не менее 8 символов
         phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании статуса
         scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически.
@@ -34,8 +34,12 @@ ru:
         setting_hide_network: Те, на кого вы подписаны и кто подписан на Вас, не будут отображены в вашем профиле
         setting_noindex: Относится к вашему публичному профилю и страницам статусов
         setting_show_application: В окне просмотра вашего статуса будет видно, с какого приложения он был отправлен
+        setting_use_blurhash: Градиенты основаны на цветах скрытых медиа, но скрывают любые детали
+        setting_use_pending_items: Показывать обновления в ленте только после клика вместо автоматической прокрутки
         username: Ваш юзернейм будет уникальным на %{domain}
         whole_word: Если слово или фраза состоит только из букв и цифр, сопоставление произойдёт только по полному совпадению
+      domain_allow:
+        domain: Этот домен сможет получать данные с этого сервера и его входящие данные будут обрабатываться и сохранены
       featured_tag:
         name: 'Возможно, вы захотите выбрать из них:'
       imports:
@@ -44,6 +48,8 @@ ru:
         text: Это поможет нам рассмотреть вашу заявку
       sessions:
         otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:'
+      tag:
+        name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым
       user:
         chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках
     labels:
@@ -74,7 +80,7 @@ ru:
         current_password: Текущий пароль
         data: Данные
         discoverable: Показывать этот аккаунт в каталоге
-        display_name: Показываемое имя
+        display_name: Отображаемое имя
         email: Адрес e-mail
         expires_in: Истекает через
         fields: Метаданные профиля
@@ -85,7 +91,7 @@ ru:
         locked: Сделать аккаунт закрытым
         max_uses: Максимальное число использований
         new_password: Новый пароль
-        note: О Вас
+        note: О себе
         otp_attempt: Двухфакторный код
         password: Пароль
         phrase: Слово или фраза
@@ -108,7 +114,10 @@ ru:
         setting_show_application: Раскрывать приложение, с которого отправляются статусы
         setting_system_font_ui: Использовать шрифт системы по умолчанию
         setting_theme: Тема сайта
+        setting_trends: Показывать сегодняшние тренды
         setting_unfollow_modal: Показывать диалог подтверждения перед тем, как отписаться от аккаунта
+        setting_use_blurhash: Показать цветные градиенты для скрытых медиа
+        setting_use_pending_items: Медленный режим
         severity: Строгость
         type: Тип импорта
         username: Имя пользователя
@@ -131,6 +140,11 @@ ru:
         pending_account: Отправлять e-mail при наличии новых заявок на присоединение
         reblog: Уведомлять по e-mail, когда кто-то продвинул ваш статус
         report: Уведомлять по e-mail при создании жалобы
+        trending_tag: Отправлять e-mail при непроверенных хэштегах в трендах
+      tag:
+        listable: Разрешить показ хэштега в поиске или в каталоге профилей
+        trendable: Разрешить показ хэштега в трендах
+        usable: Разрешить использовать этот хэштег в постах
     'no': Нет
     recommended: Рекомендуется
     required:
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 4ee251b26..c30785612 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -34,8 +34,11 @@ sk:
         setting_hide_network: Koho následuješ, a kto následuje teba, nebude zobrazené na tvojom profile
         setting_noindex: Ovplyvňuje verejný profil a stránky s príspevkami
         setting_show_application: Aplikácia, ktorú používaš na písanie príspevkov, bude zobrazená v podrobnom náhľade jednotlivých tvojích príspevkov
+        setting_use_pending_items: Skry aktualizovanie časovej osi tak, aby bola načitávaná iba po kliknutí, namiesto samostatného posúvania
         username: Tvoja prezývka bude unikátna pre server %{domain}
         whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom
+      domain_allow:
+        domain: Táto doména bude schopná získavať dáta z tohto servera, a prichádzajúce dáta ním budú spracovávané a uložené
       featured_tag:
         name: 'Možno by si chcel/a použiť niektoré z týchto:'
       imports:
@@ -101,15 +104,17 @@ sk:
         setting_display_media_default: Štandard
         setting_display_media_hide_all: Ukry všetky
         setting_display_media_show_all: Ukáž všetky
-        setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o obsahu
+        setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o chúlostivom obsahu
         setting_hide_network: Ukry svoju sieť kontaktov
         setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče
         setting_reduce_motion: Mierni pohyb pri animáciách
         setting_show_application: Zverejni akú aplikáciu používaš na posielanie príspevkov
         setting_system_font_ui: Použi základné systémové písmo
         setting_theme: Vzhľad webu
+        setting_trends: Ukáž dnešné trendy
         setting_unfollow_modal: Vyžaduj potvrdenie pred skončením sledovania iného užívateľa
         setting_use_blurhash: Ukáž farebné prechody pre skryté médiá
+        setting_use_pending_items: Pomalý režim
         severity: Závažnosť
         type: Typ importu
         username: Prezývka
@@ -132,6 +137,11 @@ sk:
         pending_account: Zaslať email, ak treba prehodnotiť nový účet
         reblog: Zaslať email, ak niekto re-tootne tvoj príspevok
         report: Zaslať email, ak niekto podá nové nahlásenie
+        trending_tag: Pošli email, ak sa neoverený haštag stane populárnym
+      tag:
+        listable: Povoľ zobrazovanie tohto haštagu v zozname profilov
+        trendable: Povoľ zobrazovanie tohto haštagu medzi trendujúcimi
+        usable: Povoľ používanie tohto haštagu v príspevkoch
     'no': Nie
     recommended: Odporúčané
     required:
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index 2e0495551..405af24c6 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -2,12 +2,20 @@
 sl:
   simple_form:
     hints:
+      account_warning_preset:
+        text: Lahko uporabite skladnjo tuta, kot so URL-ji, ključniki in omembe
+      admin_account_action:
+        send_email_notification: Uporabnik bo prejel razlago, kaj se je zgodilo z njihovim računom
+        text_html: Neobvezno. Lahko uporabite skladnjo tuta. <a href="%{path}">Prednastavite opozorila</a>, da prihranite čas
+        type_html: Izberite, kaj boste storili z <strong>%{acct}</strong>
+        warning_preset_id: Neobvezno. Še vedno lahko dodate besedilo po meri na konec prednastavitve
       defaults:
         autofollow: Osebe, ki se prijavijo prek povabila, vas bodo samodejno sledile
         avatar: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
         bot: Ta račun v glavnem opravlja samodejna dejanja in morda ni pod nadzorom
         context: En ali več kontekstov, kjer naj se uporabi filter
         digest: Pošlje se le po dolgem obdobju nedejavnosti in samo, če ste prejeli osebna sporočila v vaši odsotnosti
+        discoverable_html: <a href="%{path}" target="_blank">Imenik</a> ljudem omogoča iskanje računov na podlagi interesov in dejavnosti. Potrebuje najmanj %{min_followers} sledilcev
         email: Poslali vam bomo potrditveno e-pošto
         fields: Na svojem profilu lahko imate do 4 predmete prikazane kot tabelo.
         header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
@@ -18,15 +26,26 @@ sl:
         password: Uporabite najmanj 8 znakov
         phrase: Se bo ujemal, ne glede na začetnice v tekstu ali opozorilo o vsebini troba
         scopes: Do katerih API-jev bo imel program dostop. Če izberete obseg najvišje ravni, vam ni treba izbrati posameznih.
+        setting_aggregate_reblogs: Ne prikažite novih spodbud za tute, ki so bili nedavno spodbujeni (vpliva samo na novo prejete spodbude)
+        setting_default_sensitive: Občutljivi mediji so privzeto skriti in jih je mogoče razkriti s klikom
         setting_display_media_default: Skrij medij, ki je označen kot občutljiv
         setting_display_media_hide_all: Vedno skrij vse medije
         setting_display_media_show_all: Vedno pokaži medij, ki je označen kot občutljiv
         setting_hide_network: Kogar spremljate in kdo vas spremlja ne bo prikazano na vašem profilu
         setting_noindex: Vpliva na vaš javni profil in na strani s stanjem
+        setting_show_application: Aplikacija, ki jo uporabljate za tutanje, bo prikazana v podrobnem pogledu vaših tutov
+        setting_use_blurhash: Gradienti temeljijo na barvah skrite vizualne slike, vendar zakrivajo vse podrobnosti
+        setting_use_pending_items: Skrij posodobitev časovnice za klikom namesto samodejnega posodabljanja
         username: Vaše uporabniško ime bo edinstveno na %{domain}
         whole_word: Ko je ključna beseda ali fraza samo alfanumerična, se bo uporabljala le, če se bo ujemala s celotno besedo
+      domain_allow:
+        domain: Ta domena bo lahko prejela podatke s tega strežnika, dohodni podatki z nje pa bodo obdelani in shranjeni
+      featured_tag:
+        name: 'Morda boste želeli uporabiti eno od teh:'
       imports:
         data: Izvožena CSV datoteka iz drugega Mastodon vozlišča
+      invite_request:
+        text: To nam bo pomagalo pregledati vašo prijavo
       sessions:
         otp: 'Vnesite dvomestno kodo, ki je ustvarjena z aplikacijo na telefonu, ali uporabite eno od vaših obnovitvenih kod:'
       user:
@@ -36,6 +55,18 @@ sl:
         fields:
           name: Oznaka
           value: Vsebina
+      account_warning_preset:
+        text: Prednastavljeno besedilo
+      admin_account_action:
+        send_email_notification: Obvesti uporabnika po e-pošti
+        text: Opozorilo po meri
+        type: Dejanje
+        types:
+          disable: Onemogoči
+          none: Ne naredi ničesar
+          silence: Utišaj
+          suspend: Suspendiraj in nepovratno izbriši podatke računa
+        warning_preset_id: Uporabi prednastavljeno opozorilo
       defaults:
         autofollow: Povabite, da sledi vašemu računu
         avatar: Podoba
@@ -46,6 +77,7 @@ sl:
         context: Filtriraj vsebino
         current_password: Trenutno geslo
         data: Podatki
+        discoverable: Dodaj ta račun v imenik
         display_name: Prikazno ime
         email: E-poštni naslov
         expires_in: Preteče po
@@ -57,9 +89,12 @@ 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
+        setting_advanced_layout: Omogoči napredni spletni vmesnik
+        setting_aggregate_reblogs: Skupinske spodbude na časovnicah
         setting_auto_play_gif: Samodejno predvajanje animiranih GIF-ov
         setting_boost_modal: Pred sunkom pokaži potrditveno okno
         setting_default_language: Jezik objavljanja
@@ -74,27 +109,37 @@ sl:
         setting_hide_network: Skrij svoje omrežje
         setting_noindex: Odsotnost indeksiranja iskalnikov
         setting_reduce_motion: Zmanjšanje premikanja v animacijah
+        setting_show_application: Razkrij aplikacijo za pošiljanje tutov
         setting_system_font_ui: Uporabi privzeto pisavo sistema
         setting_theme: Tema strani
         setting_unfollow_modal: Pokaži potrditveno okno, preden nekoga prenehamo slediti
+        setting_use_blurhash: Pokaži barvite gradiente za skrite medije
+        setting_use_pending_items: Počasen način
         severity: Strogost
         type: Vrsta uvoza
         username: Uporabniško ime
         username_or_email: Uporabniško ime ali E-pošta
         whole_word: Celotna beseda
+      featured_tag:
+        name: Ključnik
       interactions:
         must_be_follower: Blokiraj obvestila nesledilcev
         must_be_following: Blokiraj obvestila oseb, ki jim ne sledite
         must_be_following_dm: Blokiraj neposredna sporočila oseb, ki jim ne sledite
+      invite_request:
+        text: Zakaj se želite pridružiti?
       notification_emails:
         digest: Pošlji izvlečke e-pošt
         favourite: Pošlji e-pošto, ko nekdo doda vaše stanje med priljubljene
         follow: Pošlji e-pošto, ko vas nekdo sledi
         follow_request: Pošlji e-pošto, ko vam nekdo želi slediti
         mention: Pošlji e-pošto, ko vas nekdo omeni
+        pending_account: Pošlji e-pošto, ko je potreben pregled novega računa
         reblog: Pošlji e-pošto, ko nekdo sune vaše stanje
         report: Pošlji e-pošto, ko je oddana nova prijava
     'no': Ne
+    recommended: Priporočeno
     required:
+      mark: "*"
       text: zahtevano
     'yes': Da
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 33a3c5a3a..655483569 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -35,6 +35,7 @@ th:
         setting_noindex: มีผลต่อโปรไฟล์สาธารณะและหน้าสถานะของคุณ
         setting_show_application: จะแสดงแอปพลิเคชันที่คุณใช้เพื่อโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ
         setting_use_blurhash: การไล่ระดับสีอิงตามสีของภาพที่ซ่อนอยู่แต่ทำให้รายละเอียดใด ๆ คลุมเครือ
+        setting_use_pending_items: ซ่อนการอัปเดตเส้นเวลาไว้หลังการคลิกแทนที่จะเลื่อนฟีดโดยอัตโนมัติ
         username: ชื่อผู้ใช้ของคุณจะไม่ซ้ำกันบน %{domain}
         whole_word: เมื่อคำสำคัญหรือวลีมีแค่ตัวอักษรและตัวเลข จะถูกใช้หากตรงกันทั้งคำเท่านั้น
       featured_tag:
@@ -111,6 +112,7 @@ th:
         setting_theme: ชุดรูปแบบไซต์
         setting_unfollow_modal: แสดงกล่องโต้ตอบการยืนยันก่อนเลิกติดตามใครสักคน
         setting_use_blurhash: แสดงการไล่ระดับสีที่มีสีสันสำหรับสื่อที่ซ่อนอยู่
+        setting_use_pending_items: โหมดช้า
         severity: ความรุนแรง
         type: ชนิดการนำเข้า
         username: ชื่อผู้ใช้
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 35b20d8a9..825abf7a9 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -2,48 +2,145 @@
 uk:
   simple_form:
     hints:
+      account_warning_preset:
+        text: Ви можете використовувати синтаксис дмухів, наприклад URLи, хештеґи та згадки
+      admin_account_action:
+        send_email_notification: Користувач отримає роз'яснення, що сталося з його обліковим записом
+        text_html: Необов'язково. Ви можете використовувати синтакс дмухів. Ви можете <a href="%{path}">додати шаблони попереджень</a>, щоб заощадити час
+        type_html: Оберіть, що робити з <strong>%{acct}</strong>
+        warning_preset_id: Необов'язково. Ви можете ще додати будь-який текст до кінця шаблону
       defaults:
+        autofollow: Люди, що зареєструвалися за вашим запрошенням, автоматично підпишуться на вас
         avatar: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px
         bot: Цей аккаунт в основному виконує автоматичні дії та може не відстежуватіся
+        digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період
+        discoverable_html: <a href="%{path}" target="_blank">каталог</a> дає змогу шукати облікові записи за інтересами та активністю. Вимагає щонайменше %{min_followers} підписників
+        email: Вам надійде електронний лист з підтвердженням
+        fields: До 4 елементів може бути відображено як таблиця у вашому профілі
         header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px
+        inbox_url: Скопіюйте інтернет-адресу з титульної сторінки ретранслятора
+        irreversible: Відсіяні дмухи зникнуть назавжди, навіть якщо фільтр потім буде знято
+        locale: Мова інтерфейсу, електронних листів та push-сповіщень
         locked: Буде вимагати від Вас самостійного підтверждення підписників, змінить приватність постів за замовчуванням на "тільки для підписників"
+        password: Не менше 8 символів
+        phrase: Шукає без врахування регістру у тексті дмуха або у його попередженні про вміст
+        setting_default_sensitive: Дражливі медіа приховані за промовчанням та можуть бути розкрити кліком
+        setting_display_media_default: Приховувати медіа, помічені як дражливі
+        setting_display_media_hide_all: Приховувати будь-які медіа
+        setting_display_media_show_all: Завжди відображати медіа, помічені як дражливі
+        setting_hide_network: У вашому профілі не буде відображено підписки та підписників
+        setting_noindex: Впливає на ваш публічний профіль та сторінки статусу
+        setting_show_application: Застосунок, за допомогою якого ви дмухнули, буде відображено серед деталей дмуху
+        setting_use_blurhash: Градієнти, що базуються на кольорах прихованих медіа, але роблять нерозрізненними будь-які деталі
+        username: Ваше ім'я користувача буде унікальним у %{domain}
+        whole_word: Якщо пошукове слово або фраза містить тільки літери та цифри, воно має співпадати цілком
+      domain_allow:
+        domain: Цей домен зможе отримувати дані з цього серверу. Вхідні дані будуть оброблені та збережені
+      featured_tag:
+        name: 'Можливо, ви захочете використовувати один з цих:'
       imports:
-        data: Файл CSV, экспортированный с другого узла Mastodon
+        data: Файл CSV, експортований з іншого сервера Mastodon
+      invite_request:
+        text: Це допоможе нам розглянути вашу заяву
       sessions:
         otp: Введите код двухфакторной аутентификации или используйте один из Ваших кодов восстановления.
+      tag:
+        name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність
+      user:
+        chosen_languages: У глобальних стрічках будуть відображатися дмухи тільки обраними мовами
     labels:
+      account:
+        fields:
+          name: Позначка
+          value: Вміст
+      account_warning_preset:
+        text: Текст шаблону
+      admin_account_action:
+        send_email_notification: Сповістити користувача електронною поштою
+        text: Користувацьке попередження
+        type: Дія
+        types:
+          disable: Вимкнути
+          none: Нічого не робити
+          silence: Глушення
+          suspend: Призупинити та незворотньо видалити дані облікового запису
+        warning_preset_id: Використати шаблон попередження
       defaults:
+        autofollow: Запросити слідкувати за вашим обліковим записом
         avatar: Аватар
+        bot: Це обліковий запис бота
+        chosen_languages: Фільтрувати мови
         confirm_new_password: Підтвердіть новий пароль
         confirm_password: Підтвердіть пароль
+        context: Фільтр контексту
         current_password: Поточний пароль
         data: Дані
+        discoverable: Оприлюднити обліковий запис у каталозі
         display_name: Ім'я
         email: Email адреса
         header: Заголовок
+        inbox_url: URL поштової скриньки ретранслятора
+        irreversible: Видалити назавжди, а не просто сховати
         locale: Мова
         locked: Зробити акаунт приватним
+        max_uses: Максимальна кількість використань
         new_password: Новий пароль
         note: Про Вас
         otp_attempt: Двофакторний код
         password: Пароль
+        phrase: Ключове слово або фраза
+        setting_advanced_layout: Увімкнути розширений web-інтерфейс
         setting_auto_play_gif: Автоматично відтворювати анімовані GIF
-        setting_boost_modal: Показывать диалог подтверждения перед продвижением
-        setting_default_privacy: Видимость постов
-        severity: Строгость
-        type: Тип импорта
-        username: Имя пользователя
+        setting_boost_modal: Відображати діалог підтвердження під час передмухування
+        setting_default_language: Мова дмухів
+        setting_default_privacy: Видимість постів
+        setting_default_sensitive: Позначити медіа як дражливе
+        setting_delete_modal: Показувати діалог підтвердження під час видалення дмуху
+        setting_display_media: Відображення медіа
+        setting_display_media_default: За промовчанням
+        setting_display_media_hide_all: Сховати всі
+        setting_display_media_show_all: Показати всі
+        setting_expand_spoilers: Завжди розгортати дмухи з попередженнями про вміст
+        setting_hide_network: Сховати вашу мережу
+        setting_noindex: Відмовитися від індексування пошуковими системами
+        setting_reduce_motion: Менше руху в анімаціях
+        setting_show_application: Відображати застосунки, використані для дмухання
+        setting_system_font_ui: Використовувати типовий системний шрифт
+        setting_theme: Тема сайту
+        setting_trends: Показати сьогоднішні тренди
+        setting_unfollow_modal: Відображати діалог підтвердження під час відписки від когось
+        setting_use_blurhash: Відображати барвисті градієнти замість прихованих медіа
+        setting_use_pending_items: Повільний режим
+        severity: Серйозність
+        type: Тип імпорту
+        username: Ім'я користувача
+        username_or_email: Ім'я користувача або електронна пошта
+        whole_word: Ціле слово
+      featured_tag:
+        name: Хештеґ
       interactions:
         must_be_follower: Блокувати сповіщення від непідписаних людей
         must_be_following: Блокувати сповіщення від людей, на яких ви не підписані
+        must_be_following_dm: Заблокувати прямі сповіщення від людей, на яких ви не підписані
+      invite_request:
+        text: Чому ви хочете приєднатися?
       notification_emails:
-        digest: Присылать дайджест по e-mail
+        digest: Надсилати дайджест електронною поштою
         favourite: Надсилати листа, коли комусь подобається Ваш статус
         follow: Надсилати листа, коли хтось підписується на Вас
         follow_request: Надсилати листа, коли хтось запитує дозволу на підписку
         mention: Надсилати листа, коли хтось згадує Вас
+        pending_account: Надсилати електронного листа, коли новий обліковий запис потребує розгляду
         reblog: Надсилати листа, коли хтось передмухує Ваш статус
+        report: Надсилати електронного листа, коли з'являється нова скарга
+        trending_tag: Надсилати електронного листа, коли нерозглянутий хештеґ стає популярним
+      tag:
+        listable: Дозволити появу цього хештеґа у каталозі профілів
+        trendable: Дозволити появу цього хештеґа у списку популярних хештеґів
+        usable: Дозволити дмухам використовувати цей хештеґ
     'no': Ні
+    recommended: Рекомендовано
     required:
+      mark: "*"
       text: обов'язкове
     'yes': Так
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index c62e57a51..04ae16ecd 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -133,6 +133,8 @@ zh-CN:
         pending_account: 在有账户需要审核时,发送电子邮件提醒我
         reblog: 当有用户转嘟了我的嘟文时,发送电子邮件提醒我
         report: 在提交新举报时,发送电子邮件提醒我
+      tag:
+        listable: 允许这个话题标签在用户目录中显示
     'no': 否
     recommended: 推荐
     required:
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 5b0bbdef4..dc75706b1 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -11,7 +11,7 @@ sk:
     apps: Aplikácie
     apps_platforms: Uživaj Mastodon z iOSu, Androidu a iných platforiem
     browse_directory: Prehľadávaj databázu profilov, filtruj podľa záujmov
-    browse_public_posts: Prebádaj naživo prúd verejných príspevkov na Mastodone
+    browse_public_posts: Sleduj naživo prúd verejných príspevkov na Mastodone
     contact: Kontakt
     contact_missing: Nezadaný
     contact_unavailable: Neuvedený/á
@@ -24,6 +24,9 @@ sk:
     generic_description: "%{domain} je jeden server v sieti"
     get_apps: Vyskúšaj aplikácie
     hosted_on: Mastodon hostovaný na %{domain}
+    instance_actor_flash: |
+      Tento účet je virtuálnym aktérom, ktorý predstavuje samotný server a nie žiadného jedného užívateľa.
+      Je využívaný pre potreby federovania a nemal by byť blokovaný, pokiaľ nechceš zablokovať celý server, čo ide lepšie dosiahnúť cez blokovanie domény.
     learn_more: Zisti viac
     privacy_policy: Ustanovenia o súkromí
     see_whats_happening: Pozoruj, čo sa deje
@@ -191,11 +194,12 @@ sk:
       username: Prezývka
       warn: Varuj
       web: Web
+      whitelisted: Na bielej listine
     action_logs:
       actions:
-        assigned_to_self_report: "%{name}pridelil/a hlásenie užívateľa %{target}sebe"
+        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 e-mailovú adresu použí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_block: "%{name} zablokoval doménu %{target}"
@@ -210,7 +214,7 @@ sk:
         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 stránku "Navždy budeme spomínať"'
+        memorialize_account: "%{name} zmenil účet %{target} na pamätnú stránku"
         promote_user: "%{name} povýšil/a použí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}"
@@ -258,10 +262,13 @@ 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
       open_reports: otvorené hlásenia
+      pending_tags: haštagy čakajúce na posúdenie
+      pending_users: užívatelia čakajúci na posúdenie
       recent_users: Nedávni užívatelia
       search: Celofrázové vyhľadávanie
       single_user_mode: Jednouživateľské rozhranie
@@ -273,11 +280,18 @@ sk:
       week_interactions: Tohto-týždňové interakcie
       week_users_active: aktívni tento týždeň
       week_users_new: užívateľov počas tohto týždňa
+      whitelist_mode: Režim povolených
+    domain_allows:
+      add_new: Povolená doména
+      created_msg: Doména bola úspešne povolená
+      destroyed_msg: Doména bola odstránená zo zoznamu povolených
+      undo: Odober zo zoznamu povolených
     domain_blocks:
       add_new: Blokuj novú doménu
       created_msg: Doména je v štádiu blokovania
       destroyed_msg: Blokovanie domény bolo zrušené
       domain: Doména
+      edit: Uprav blokovanie domény
       existing_domain_block_html: Pre účet %{name} si už nahodil/a přísnejšie obmedzenie, najskôr ho teda musíš <a href="%{unblock_url}">odblokovať</a>.
       new:
         create: Vytvor blokovanie domény
@@ -288,6 +302,8 @@ sk:
           silence: Stíš
           suspend: Vylúč
         title: Nové blokovanie domény
+      private_comment: Súkromný komentár
+      public_comment: Verejný komentár
       reject_media: Odmietaj súbory s obrázkami, alebo videami
       reject_media_hint: Vymaže miestne uložené súbory médií a odmietne ich sťahovanie v budúcnosti. Nepodstatné pri vylúčení
       reject_reports: Zamietni hlásenia
@@ -301,7 +317,7 @@ sk:
         affected_accounts:
           few: "%{count} účtov v databázi ovplyvnených"
           many: "%{count} účtov v databázi ovplyvnených"
-          one: 1 účet v databázi ovplyvnený
+          one: Jeden účet v databázi ovplyvnený
           other: "%{count} účty v databázi ovplyvnené"
         retroactive:
           silence: Zruš stíšenie všetkých momentálne utíšených účtov z tejto domény
@@ -309,6 +325,7 @@ sk:
         title: Zruš blokovanie domény %{domain}
         undo: Vráť späť
       undo: Odvolaj blokovanie domény
+      view: Ukáž blokovanie domén
     email_domain_blocks:
       add_new: Pridaj nový
       created_msg: Emailová doména bola úspešne pridaná do zoznamu zakázaných
@@ -334,6 +351,8 @@ sk:
         all: Všetky
         limited: Obmedzené
         title: Moderácia
+      private_comment: Súkromný komentár
+      public_comment: Verejný komentár
       title: Federácia
       total_blocked_by_us: Nami blokované
       total_followed_by_them: Nimi sledované
@@ -411,6 +430,12 @@ sk:
       custom_css:
         desc_html: Uprav vzhľad pomocou CSS, ktoré je načítané na každej stránke
         title: Vlastné CSS
+      domain_blocks:
+        all: Všetkým
+        disabled: Nikomu
+        title: Ukáž blokované domény
+      domain_blocks_rationale:
+        title: Ukáž zdôvodnenie
       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
@@ -461,6 +486,9 @@ 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
@@ -468,6 +496,9 @@ sk:
         desc_html: Zobraziť verejnú nástenku na hlavnej stránke
         title: Náhľad nástenky
       title: Nastavenia stránky
+      trends:
+        desc_html: Verejne zobraz už schválené haštagy, ktoré práve trendujú
+        title: Populárne haštagy
     statuses:
       back_to_account: Späť na účet
       batch:
@@ -482,13 +513,19 @@ sk:
       title: Príspevky na účte
       with_media: S médiami
     tags:
-      accounts: Účty
-      hidden: Skryté
-      hide: Ukri od databázy
-      name: Haštag
+      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"
+      review: Prehodnoť stav
+      reviewed: Zhodnotené
       title: Haštagy
-      unhide: Ukáž v databázi
-      visible: Viditeľné
+      trending_right_now: Práve populárne
+      unique_uses_today: "%{count} dnes prispievajú"
+      unreviewed: Neposúdené
+      updated_msg: Nastavenia haštagov boli úspešne aktualizované
     title: Spravovanie
     warning_presets:
       add_new: Pridaj nové
@@ -504,14 +541,18 @@ sk:
       body: "%{reporter} nahlásil/a %{target}"
       body_remote: Niekto z %{domain} nahlásil/a %{target}
       subject: Nové hlásenie pre %{instance} (#%{id})
+    new_trending_tag:
+      subject: Nový haštag očakáva preverenie na %{instance} (#%{name})
   appearance:
     advanced_web_interface: Pokročilé webové rozhranie
     advanced_web_interface_hint: 'Ak chceš využiť celkovú šírku tvojej obrazovky, pokročilé webové rozhranie ti umožňuje nastaviť mnoho rôznych stĺpcov, aby si videl/a toľko informácií naraz, koľko chceš: Domov, oboznámenia, federovanú časovú os, a ľubovolný počet zoznamov, či haštagov.'
     animations_and_accessibility: Animácie a prístupnosť
     confirmation_dialogs: Potvrdzovacie dialógy
+    discovery: Nájdenie
     sensitive_content: Chúlostivý obsah
   application_mailer:
     notification_preferences: Zmeň emailové voľby
+    salutation: "%{name},"
     settings: 'Zmeň emailové voľby: %{link}'
     view: 'Zobraziť:'
     view_profile: Zobraz profil
@@ -528,7 +569,7 @@ sk:
     apply_for_account: Vyžiadaj si pozvánku
     change_password: Heslo
     checkbox_agreement_html: Súhlasím s <a href="%{rules_path}" target="_blank">pravidlami servera</a>, aj s <a href="%{terms_path}" target="_blank">prevoznými podmienkami</a>
-    confirm_email: Potvrď email
+    checkbox_agreement_without_rules_html: Súhlasím s <a href="%{terms_path}" target="_blank">podmienkami užívania</a>
     delete_account: Vymaž účet
     delete_account_html: Pokiaľ chceš svoj účet odtiaľto vymazať, môžeš tak <a href="%{path}">urobiť tu</a>. Budeš požiadaný/á o potvrdenie tohto kroku.
     didnt_get_confirmation: Neobdržal/a si kroky na potvrdenie?
@@ -545,6 +586,15 @@ sk:
     reset_password: Obnov heslo
     security: Zabezpečenie
     set_new_password: Nastav nové heslo
+    setup:
+      email_below_hint_html: Ak je nižšie uvedená emailová adresa nesprávna, môžeš ju zmeniť a dostať nový potvrdzovací email.
+      email_settings_hint_html: Potvrdzovací email bol odoslaný na %{email}. Ak táto emailová adresa nieje správna, môžeš si ju zmeniť v nastaveniach účtu.
+      title: Nastavenie
+    status:
+      account_status: Stav účtu
+      confirming: Čaká sa na dokončenie potvrdenia emailom.
+      functional: Tvoj účet je plne funkčný.
+      pending: Tvoja žiadosť čaká na schvílenie od nášho týmu. Môže to chviľu potrvať. Ak bude tvoja žiadosť schválená, dostaneš o tom email.
     trouble_logging_in: Problém s prihlásením?
   authorize_follow:
     already_following: Tento účet už následuješ
@@ -591,6 +641,8 @@ sk:
       many: "%{count} ľudí"
       one: "%{count} človek"
       other: "%{count} ľudia"
+  domain_validator:
+    invalid_domain: nieje správny tvar domény
   errors:
     '403': Nemáš povolenie pre zobrazenie tejto stránky.
     '404': Stránka ktorú hľadáš nieje tu.
@@ -656,6 +708,8 @@ sk:
       many: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie
       one: Niečo ešte nieje celkom v poriadku! Prosím skontroluj chybu uvedenú nižšie
       other: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chyby uvedené nižšie
+  html_validator:
+    invalid_markup: 'obsahuje neplatný HTML kód: %{error}'
   identity_proofs:
     active: Aktívne
     authorize: Áno, povoľ
@@ -663,7 +717,12 @@ sk:
     errors:
       failed: Kryptografické prepojenie sa nepodarilo. Prosím skús to znova z %{provider}.
       keybase:
+        invalid_token: Keybase tokeny sú hašovaniami podpisov a musia mať 66 znakov
         verification_failed: Keybase nerozpoznáva tento token ako podpis od Keybase užívateľa menom %{kb_username}. Prosím skús to znova cez Keybase.
+      wrong_user: Nemožno vytvoriť overenie pre %{proving}, pokiaľ si prihlásený/á ako %{current}. Prihlás sa za %{proving} a skús to znova.
+    explanation_html: |-
+      Tu si môžeš kryptograficky prepojiť svoje iné identity, ako napríklad tvoj profil na Keybase.
+      Umožňuje to ostatním ľudom posielať ti enkryptované správy a veriť obsahu ktorý im pošleš ty.
     i_am_html: Na %{service} som %{username}.
     identity: Identita
     inactive: Neaktívne
@@ -729,6 +788,16 @@ sk:
       action: Zobraziť všetky notifikácie
       body: Tu nájdete krátky súhrn správ ktoré ste zmeškali od svojej poslednj návštevi od %{since}
       mention: "%{name} ťa spomenul/a v:"
+      new_followers_summary:
+        few: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá!
+        many: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá!
+        one: A ešte, kým si bol/a preč, si získal/a jedného nového následovateľa! Hurá!
+        other: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá!
+      subject:
+        few: "%{count} nových oboznámení od tvojej poslednej návštevy \U0001F418"
+        many: "%{count} nových oboznámení od tvojej poslednej návštevy \U0001F418"
+        one: "Jedno nové oboznámenie od tvojej poslednej návštevy \U0001F418"
+        other: "%{count} nové oboznámenia od tvojej poslednej návštevy \U0001F418"
       title: Zatiaľ čo si bol/a preč…
     favourite:
       body: 'Tvoj príspevok bol uložený medzi obľúbené užívateľa %{name}:'
@@ -855,17 +924,37 @@ sk:
   statuses:
     attached:
       description: 'Priložené: %{attached}'
+      image:
+        few: "%{count} obrázkov"
+        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:
+      few: 'obsah nepovolených haštagov: %{tags}'
+      many: 'obsah nepovolených haštagov: %{tags}'
+      one: 'obsahoval nepovolený haštag: %{tags}'
+      other: 'obsahoval nepovolené haštagy: %{tags}'
     language_detection: Zisti automaticky
     open_in_web: Otvor v okne na webe
     over_character_limit: limit %{max} znakov bol presiahnutý
     pin_errors:
       limit: Už si si pripol ten najvyšší možný počet hlášok
       ownership: Nieje možné pripnúť hlášku od niekoho iného
-      private: Neverejné príspevky nemôžu byť pripnuté
+      private: Neverejný príspevok nemôže byť pripnutý
       reblog: Vyzdvihnutie sa nedá pripnúť
     poll:
+      total_votes:
+        few: "%{count} hlasov"
+        many: "%{count} hlasov"
+        one: "%{count} hlas"
+        other: "%{count} hlasy"
       vote: Hlasuj
     show_more: Ukáž viac
     sign_in_to_participate: Prihlás sa pre zapojenie do diskusie
@@ -881,6 +970,8 @@ sk:
     pinned: Pripnutý príspevok
     reblogged: vyzdvihnutý
     sensitive_content: Senzitívny obsah
+  tags:
+    does_not_match_previous_name: nezhoduje sa s predošlým názvom
   terms:
     body_html: |
       <h2>Podmienky súkromia</h2>
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index ff6c5851a..3cab1313b 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -24,6 +24,9 @@ sl:
     generic_description: "%{domain} je en strežnik v omrežju"
     get_apps: Poskusite mobilno aplikacijo
     hosted_on: Mastodon gostuje na %{domain}
+    instance_actor_flash: |
+      Ta račun je navidezni igralec, ki predstavlja strežnik in ne posameznega uporabnika.
+      Uporablja se za namene federacije in se ne blokira, če ne želite blokirati celotne instance. V tem primeru blokirajte domeno.
     learn_more: Nauči se več
     privacy_policy: Pravilnik o zasebnosti
     see_whats_happening: Poglejte, kaj se dogaja
@@ -191,6 +194,7 @@ sl:
       username: Uporabniško ime
       warn: Opozori
       web: Splet
+      whitelisted: Na belem seznamu
     action_logs:
       actions:
         assigned_to_self_report: "%{name} je prijavil %{target} sebi"
@@ -258,6 +262,7 @@ 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
@@ -273,6 +278,11 @@ sl:
       week_interactions: interakcije ta teden
       week_users_active: aktivni ta teden
       week_users_new: uporabniki ta teden
+    domain_allows:
+      add_new: Dodaj domeno na beli seznam
+      created_msg: Domena je bila uspešno dodana na beli seznam
+      destroyed_msg: Domena je bila odstranjena iz belega seznama
+      undo: Odstrani iz belega seznama
     domain_blocks:
       add_new: Dodaj nov domenski blok
       created_msg: Domenski blok se sedaj obdeluje
@@ -461,6 +471,9 @@ 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
@@ -482,13 +495,7 @@ sl:
       title: Stanja računa
       with_media: Z mediji
     tags:
-      accounts: Računi
-      hidden: Skriti
-      hide: Skrij iz imenika
-      name: Ključnik
       title: Ključniki
-      unhide: Prikaži v imeniku
-      visible: Vidni
     title: Upravljanje
     warning_presets:
       add_new: Dodaj novo
@@ -529,7 +536,7 @@ sl:
     apply_for_account: Zahtevajte povabilo
     change_password: Geslo
     checkbox_agreement_html: Strinjam se s <a href="%{rules_path}" target="_blank">pravili strežnika</a> in <a href="%{terms_path}" target="_blank">pogoji storitve</a>
-    confirm_email: Potrdi e-pošto
+    checkbox_agreement_without_rules_html: Strinjam se s <a href="%{terms_path}" target="_blank">pogoji storitve</a>
     delete_account: Izbriši račun
     delete_account_html: Če želite izbrisati svoj račun, lahko nadaljujete <a href="%{path}">tukaj</a>. Prosili vas bomo za potrditev.
     didnt_get_confirmation: Niste prejeli navodil za potrditev?
@@ -549,6 +556,14 @@ sl:
     reset_password: Ponastavi geslo
     security: Varnost
     set_new_password: Nastavi novo geslo
+    setup:
+      email_below_hint_html: Če spodnji e-poštni naslov ni pravilen, ga lahko spremenite tukaj in prejmete novo potrditveno e-pošto.
+      email_settings_hint_html: Potrditvena e-pošta je bila poslana na %{email}. Če ta e-poštni naslov ni pravilen, ga lahko spremenite v nastavitvah računa.
+      title: Nastavitev
+    status:
+      account_status: Stanje računa
+      confirming: Čakanje na potrditev e-pošte.
+      pending: Naše osebje preverja vašo prijavo. To lahko traja nekaj časa. Če bo vaša prijava odobrena, boste prejeli e-pošto.
     trouble_logging_in: Težave pri prijavi?
   authorize_follow:
     already_following: Temu računu že sledite
@@ -787,9 +802,318 @@ sl:
     older: Starejše
     prev: Nazaj
     truncate: "&hellip;"
+  polls:
+    errors:
+      already_voted: Na tej anketi ste že glasovali
+      duplicate_options: vsebuje podvojene elemente
+      duration_too_long: je predaleč v prihodnosti
+      duration_too_short: je prezgodaj
+      expired: Glasovanje se je že zaključilo
+      over_character_limit: ne more biti daljše od %{max} znakov
+      too_few_options: mora imeti več kot en element
+      too_many_options: ne more vsebovati več kot %{max} elementov
+  preferences:
+    other: Ostalo
+    posting_defaults: Privzete nastavitev objavljanja
+    public_timelines: Javne časovnice
+  relationships:
+    activity: Dejavnost računa
+    dormant: Skrit
+    last_active: Zadnja dejavnost
+    most_recent: Najnovejša
+    moved: Prestavljeno
+    mutual: Vzajemna
+    primary: Primarna
+    relationship: Razmerje
+    remove_selected_domains: Odstrani vse sledilce iz izbranih domen
+    remove_selected_followers: Odstrani izbrane sledilce
+    remove_selected_follows: Prenehaj slediti izbranim uporabnikom
+    status: Stanje računa
+  remote_follow:
+    acct: Vnesite uporabniško_ime@domena, iz katerega želite delovati
+    missing_resource: Za vaš račun ni bilo mogoče najti zahtevanega URL-ja za preusmeritev
+    no_account_html: Še nimate računa? Tukaj se lahko <a href='%{sign_up_path}' target='_blank'>prijavite</a>
+    proceed: Nadaljujte
+    prompt: 'Sledili boste:'
+    reason_html: "<strong>Zakaj je ta korak potreben?</strong> <code>%{instance}</code> morda ni strežnik, kjer ste registrirani, zato vas moramo najprej preusmeriti na domači strežnik."
+  remote_interaction:
+    favourite:
+      proceed: Nadaljuj s priljubljenim
+      prompt: 'Ali želite vzljubiti ta tut:'
+    reblog:
+      proceed: Nadaljuj s spodbudo
+      prompt: 'Ali želite spodbuditi ta tut:'
+    reply:
+      proceed: Nadaljuj z odgovorom
+      prompt: 'Ali želite odgovoriti na ta tut:'
+  scheduled_statuses:
+    over_daily_limit: Za ta dan ste presegli omejitev %{limit} načrtovanih tutov
+    over_total_limit: Presegli ste omejitev %{limit} načrtovanih tutov
+    too_soon: Načrtovani datum mora biti v prihodnosti
+  sessions:
+    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
+  settings:
+    account: Račun
+    account_settings: Nastavitve računa
+    appearance: Videz
+    authorized_apps: Pooblaščene aplikacije
+    back: Nazaj na Mastodon
+    delete: Brisanje računa
+    development: Razvoj
+    edit_profile: Uredi profil
+    export: Izvoz podatkov
+    featured_tags: Vključeni ključniki
+    identity_proofs: Dokazi o identiteti
+    import: Uvozi
+    import_and_export: Uvoz in izvoz
+    migrate: Selitev računa
+    notifications: Obvestila
+    preferences: Nastavitve
+    profile: Profil
+    relationships: Sledenja in sledilci
+    two_factor_authentication: Dvofaktorsko overjanje
+  spam_check:
+    spam_detected_and_silenced: To je samodejno poročilo. Zaznana je bila neželena pošta in pošiljatelj je bil samodejno utišan. Če je prišlo do napake, prekličite utišanje računa.
   statuses:
+    attached:
+      description: 'Priloženo: %{attached}'
+      image:
+        few: "%{count} slike"
+        one: "%{count} slika"
+        other: "%{count} slik"
+        two: "%{count} sliki"
+      video:
+        few: "%{count} video posnetki"
+        one: "%{count} video posnetek"
+        other: "%{count} video posnetkov"
+        two: "%{count} video posnetka"
+    boosted_from_html: Spodbujeno iz %{acct_link}
+    content_warning: 'Opozorilo o vsebini: %{warning}'
+    disallowed_hashtags:
+      few: 'vsebuje nedovoljene ključnike: %{tags}'
+      one: 'vsebuje nedovoljeni ključnik: %{tags}'
+      other: 'vsebuje nedovoljenih ključnikov: %{tags}'
+      two: 'vsebuje nedovoljena ključnika: %{tags}'
+    language_detection: Samodejno zaznaj jezik
+    open_in_web: Odpri na spletu
+    over_character_limit: omejitev %{max} znakov je presežena
     pin_errors:
+      limit: Pripeli ste največje število tutov
       ownership: Trob nekoga drugega ne more biti pripet
       private: Nejavnega troba ni mogoče pripeti
+      reblog: Spodbuda ne more biti pripeta
+    poll:
+      total_votes:
+        few: "%{count} glasovi"
+        one: "%{count} glas"
+        other: "%{count} glasov"
+        two: "%{count} glasova"
+      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
+      public: Javno
+      public_long: Vsi lahko vidijo
+      unlisted: Ni prikazano
+      unlisted_long: Vsi lahko vidijo, vendar ni objavljeno na javnih časovnicah
   stream_entries:
     pinned: Pripet trob
+    reblogged: spodbujen
+    sensitive_content: Občutljiva vsebina
+  terms:
+    body_html: |
+      <h2>Pravilnik o zasebnosti</h2>
+      <h3 id="collect">Katere informacije zbiramo?</h3>
+
+      <ul>
+      <li><em>Osnovni podatki o računu</em>: Če se registrirate na tem strežniku, boste morda morali vnesti uporabniško ime, e-poštni naslov in geslo. Vnesete lahko tudi dodatne informacije o profilu, na primer prikazno ime in biografijo, ter naložite sliko profila in sliko glave. Uporabniško ime, prikazno ime, biografija, slika profila in slika glave so vedno javno dostopni.</li>
+      <li><em>Objave, sledenja in druge javne informacije</em>: Seznam oseb, ki jim sledite, je javno dostopen, enako velja za vaše sledilce. Ko pošljete sporočilo, sta datum in čas shranjena, kot tudi aplikacija, iz katere ste poslali sporočilo. Sporočila lahko vsebujejo medijske priloge, kot so slike in video posnetki. Javne in neprikazane objave so javno dostopne. Ko v profilu vključite objavo, je to tudi javno dostopna informacija. Vaše objave, ki so dostavljene vašim sledilcem, so včasih dostavljeni na različne strežnike, kjer se kopije objav tudi shranijo. Ko izbrišete objave, se to prav tako dostavi vašim sledilcem. Spodbujanje in vzljubitev drugih objav sta veno javni.</li>
+      <li><em>Neposredne objave in objave samo za sledilce</em>: Vse objave so shranjene in obdelane na strežniku. Objave samo za sledilce se dostavijo vašim sledilcem in uporabnikom, ki so v njih omenjeni. Neposredne objave se posredujejo samo uporabnikom, ki so v njih omenjeni. V nekaterih primerih so dostavljeni na različne strežnike, kopije pa se shranijo tam. V dobri veri si prizadevamo omejiti dostop do teh objav samo pooblaščenim osebam, vendar drugi strežniki to morda ne bodo storili. Zato je pomembno, da pregledate strežnike, na katerih so sledilci. V nastavitvah lahko preklapljate med možnostmi za odobritev in zavrnitev novih sledilcev. <em> Ne pozabite, da lahko operaterji strežnika in kateri koli prejemni strežnik takšna sporočila pregledajo </em> in da jih lahko prejemniki posnamejo, kopirajo ali drugače ponovno delijo. <em> Ne pošiljajte nevarnih informacij skozi Mastodon. </em> </li>
+      <li><em>IP-ji in drugi metapodatki</em>: Ko se prijavite, zabeležimo naslov IP, s katerega se prijavljate, in ime aplikacije brskalnika. V nastavitvah so za pregled in preklic na voljo vse prijavljene seje. Zadnji uporabljeni IP naslov je shranjen do 12 mesecev. Prav tako lahko obdržimo dnevnike strežnikov, ki vsebujejo IP naslov vsake zahteve na naš strežnik. </li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">Za kaj uporabljamo vaše podatke?</h3>
+
+      <p>Vse informacije, ki jih zbiramo od vas, so lahko uporabljene na naslednje načine:</p>
+
+      <ul>
+      <li>Za zagotavljanje osrednje funkcionalnosti Mastodona. Komunicirate lahko z vsebino drugih oseb in objavljate lastno vsebino, ko ste prijavljeni. Na primer, lahko spremljate druge osebe in si ogledate njihove kombinirane objave v svoji prilagojeni domači časovnici.</li>
+      <li>Za pomoč pri moderiranju skupnosti, na primer primerjavo vašega naslova IP naslova z drugimi znanimi, za izobčitev izmikanja ali drugih kršitev.</li>
+      <li>E-poštni naslov, ki ga navedete, se lahko uporabi za pošiljanje informacij, obvestil o drugih osebah, ki komunicirajo z vašo vsebino ali pošiljanju sporočil, ter za odzivanje na poizvedbe in/ali druge zahteve ali vprašanja.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">Kako zaščitimo vaše podatke?</h3>
+
+      <p>Za ohranitev varnosti vaših osebnih podatkov izvajamo različne varnostne ukrepe, ko vnašate, pošiljate ali dostopate do vaših osebnih podatkov. Med drugim je seja brskalnika, pa tudi promet med vašimi aplikacijami in API-jem zaščitena s SSL-jem, geslo pa je zgoščeno z uporabo močnega enosmernega algoritma. Če želite omogočiti varen dostop do računa, lahko omogočite dvofaktorsko preverjanje pristnosti.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">Kakšna je naša politika hrambe podatkov?</h3>
+
+      <p>Prizadevali si bomo za:</p>
+
+      <ul>
+      <li>Shranjevanje dnevnike strežnikov, ki vsebujejo naslov IP vseh zahtev za ta strežnik, če so hranjeni, največ 90 dni.</li>
+      <li>Obdržiitev naslovov IP, povezane z registriranimi uporabniki, ne več kot 12 mesecev.</li>
+      </ul>
+
+      <p>Lahko zahtevate in prenesete arhiv vaše vsebine, vključno z objavami, predstavnostnimi prilogami, sliko profila in sliko glave.</p>
+
+      <p>Račun lahko kadar koli nepovratno izbrišete.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">Ali uporabljamo piškotke?</h3>
+
+      <p>Da. Piškotki so majhne datoteke, ki jih spletno mesto ali njegov ponudnik storitev prenese na trdi disk vašega računalnika prek spletnega brskalnika (če dovolite). Ti piškotki omogočajo, da spletno mesto prepozna vaš brskalnik in ga, če imate registriran račun, povežete z vašim registriranim računom.</p>
+
+      <p>Piškotke uporabljamo za razumevanje in shranjevanje vaših nastavitev za prihodnje obiske.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">Ali razkrivamo informacije zunanjim strankam?</h3>
+
+      <p>Vaših osebnih podatkov ne prodajamo, preprodajamo ali kako drugače posredujemo zunanjim osebam. To ne vključuje zaupanja vrednih tretjih oseb, ki nam pomagajo pri upravljanju naše spletne strani, vodenju našega poslovanja ali storitev, če se te strani strinjajo, da bodo te informacije zaupne. Vaše podatke lahko tudi objavimo, če menimo, da je objava ustrezna in v skladu z zakonom, uveljavlja pravilnike o spletnih mestih ali ščiti naše ali druge pravice, lastnino ali varnost.</p>
+
+      <p>Vaše javne vsebine lahko prenesejo drugi strežniki v omrežju. Vaše objave in objave samo za sledilce so dostavljene na strežnike, na katerih prebivajo vaši sledilci, in neposredna sporočila so dostavljena na strežnike prejemnikov, če so ti sledilci ali prejemniki na drugem strežniku.</p>
+
+      <p>Ko odobrite aplikacijo za uporabo vašega računa, lahko glede na obseg dovoljenj, ki jih odobravate, dostopa do vaših javnih podatkov o profilu, seznama osebam, ki jim sledite, vaših sledilcev, seznamov, vseh vaših objav in priljubljenih. Aplikacije ne morejo nikoli dostopati do vašega e-poštnega naslova ali gesla.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">Uporaba strani s strani otrok</h3>
+
+      <p>Če je ta strežnik v EU ali EEA: Naše spletno mesto, izdelki in storitve so namenjeni ljudem, ki so stari vsaj 16 let. Če ste mlajši od 16 let, po zahtevah GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) ne uporabljajte tega spletnega mesta.</p>
+
+      <p>Če je ta strežnik v ZDA Naše spletno mesto, izdelki in storitve so namenjeni ljudem, ki so stari vsaj 13 let. Če ste mlajši od 13 let, po zahtevah COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) ne uporabljajte tega spletnega mesta.</p>
+
+      <p>Če je ta strežnik v drugi jurisdikciji, so lahko zakonske zahteve drugačne.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">Spremembe našega pravilnika o zasebnosti</h3>
+
+      <p>Če se odločimo za spremembo našega pravilnika o zasebnosti, bomo te spremembe objavili na tej strani.</p>
+
+      <p>Ta dokument je CC-BY-SA. Zadnja posodobitev je bila 7. marca 2018.</p>
+
+      <p>Prvotno je bila prilagojena v skladu s <a href="https://github.com/discourse/discourse">pravilnikom o zasebnosti diskurza</a>.</p>
+    title: "%{instance} Pogoji storitve in pravilnik o zasebnosti"
+  themes:
+    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:
+    code_hint: Za potrditev vnesite kodo, ki jo je ustvarila aplikacija za preverjanje pristnosti
+    description_html: Če omogočite <strong>dvofaktorsko preverjanje pristnosti</strong>, boste za prijavo morali imeti svoj telefon, s katerim boste ustvarili žetone za vstop.
+    disable: Onemogoči
+    enable: Omogoči
+    enabled: Dvofaktorsko preverjanje pristnosti je omogočeno
+    enabled_success: Dvofaktorsko preverjanje pristnosti je uspešno omogočeno
+    generate_recovery_codes: Ustvari kode za obnovitev
+    instructions_html: "<strong>Skenirajte QR kodo z Google Authenticator ali s podobno aplikacijo TOTP</strong>. Od zdaj naprej bo ta aplikacija ustvarjala žetone, ki jih boste morali vnesti ob prijavi."
+    lost_recovery_codes: Obnovitvene kode vam omogočajo, da ponovno pridobite dostop do svojega računa, če izgubite telefon. Če ste izgubili obnovitvene kode, jih lahko obnovite tukaj. Vaše stare obnovitvene kode bodo neveljavne.
+    manual_instructions: 'Če ne morete skenirati QR kode in jo morate vnesti ročno, je tu skrivnost v tekstovni obliki:'
+    recovery_codes: Varnostna kopija obnovitvenih kod
+    recovery_codes_regenerated: Obnovitvene kode so bile uspešno regenerirane
+    recovery_instructions_html: Če kdaj izgubite dostop do telefona, lahko uporabite eno od spodnjih obnovitvenih kod, da ponovno pridobite dostop do svojega računa. <strong>Shranite obnovitvene kode</strong>. Lahko jih natisnete in shranite z drugimi pomembnimi dokumenti.
+    setup: Nastavi
+    wrong_code: Vnesena koda je bila neveljavna! Ali sta čas strežnika in čas naprave pravilna?
+  user_mailer:
+    backup_ready:
+      explanation: Zahtevali ste popolno varnostno kopijo računa Mastodon. Zdaj je pripravljen za prenos!
+      subject: Vaš arhiv je pripravljen za prenos
+      title: Prevzem arhiva
+    warning:
+      explanation:
+        disable: Medtem ko je vaš račun zamrznjen, podatki vašega računa ostanejo nedotaknjeni, vendar ne morete izvajati nobenih dejanj, dokler ga ne odklenete.
+        silence: Medtem ko je vaš račun omejen, bodo na tem strežniku videli vaše tute samo osebe, ki vam že sledijo in morda boste izključeni iz različnih javnih seznamov. Vendar vam lahko še vedno ročno sledijo drugi.
+        suspend: Vaš račun je bil začasno ukinjen, vsi vaši tuti in naložene predstavnostne datoteke so bili nepovratno odstranjeni s tega strežnika in strežnikov, kjer ste imeli sledilce.
+      review_server_policies: Preglejte pravilnike strežnika
+      subject:
+        disable: Vaš račun %{acct} je zamrznjen
+        none: Opozorila za %{acct}
+        silence: Vaš račun %{acct} je omejen
+        suspend: Vaš račun %{acct} je suspendiran
+      title:
+        disable: Račun je zamrznjen
+        none: Opozorilo
+        silence: Račun je omejen
+        suspend: Račun je suspendiran
+    welcome:
+      edit_profile_action: Nastavitve profila
+      edit_profile_step: Profil lahko prilagodite tako, da naložite podobo, glavo, spremenite prikazno ime in drugo. Če želite pregledati nove sledilce, preden jim dovolite sledenje, lahko zaklenete svoj račun.
+      explanation: Tu je nekaj nasvetov za začetek
+      final_action: Začnite objavljati
+      final_step: 'Začnite objavljati! Tudi brez sledilcev bodo vaša javna sporočila videli drugi, na primer na lokalni časovnici in v ključnikih. Morda se želite predstaviti s ključnikom #introductions.'
+      full_handle: Vaša polna ročica
+      full_handle_hint: To bi povedali svojim prijateljem, da vam lahko pošljejo sporočila ali vam sledijo iz drugega strežnika.
+      review_preferences_action: Spremenite nastavitve
+      review_preferences_step: Poskrbite, da določite svoje nastavitve, na primer, katera e-poštna sporočila želite prejemati ali katere privzete ravni zasebnosti bodo imele vaše objave. Če nimate potovalne slabosti, lahko omogočite samodejno predvajanje GIF-ov.
+      subject: Dobrodošli na Mastodon
+      tip_federated_timeline: Združena časovnica je pogled na mrežo Mastodona. Vključuje pa samo ljudi, na katere so naročeni vaši sosedje, zato ni popolna.
+      tip_following: Privzeto sledite skrbnikom strežnika. Če želite najti več zanimivih ljudi, preverite lokalne in združene časovnice.
+      tip_local_timeline: Lokalna časovnica je strežniški pogled ljudi na %{instance}. To so vaši neposredni sosedje!
+      tip_mobile_webapp: Če vam mobilni brskalnik ponuja, da dodate Mastodon na domači zaslon, lahko prejmete potisna obvestila. Deluje kot lastna aplikacija na več načinov!
+      tips: Nasveti
+      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.
+    signed_in_as: 'Vpisani kot:'
+  verification:
+    explanation_html: '<strong>V metapodatkih svojega profila se lahko potrdite kot lastnik povezav</strong>. Za to mora povezano spletno mesto vsebovati povezavo do vašega Mastodon profila. Povezava <strong>mora</strong> imeti atribut <code>el="me"</code>. Vsebina besedila povezave ni pomembna. Tukaj je primer:'
+    verification: Potrditev
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index cbe225646..3373b6771 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -424,12 +424,7 @@ sq:
       title: Gjendje llogarish
       with_media: Me media
     tags:
-      accounts: Llogari
-      hidden: Fshehur
-      hide: Fshihe prej drejtorie
       title: Hashtage
-      unhide: Shfaqe në drejtori
-      visible: E dukshme
     title: Administrim
     warning_presets:
       add_new: Shtoni të ri
@@ -458,7 +453,6 @@ sq:
     your_token: Token-i juaj për hyrje
   auth:
     change_password: Fjalëkalim
-    confirm_email: Ripohoni email-in
     delete_account: Fshije llogarinë
     delete_account_html: Nëse dëshironi të fshihni llogarinë tuaj, mund <a href="%{path}">ta bëni që këtu</a>. Do t’ju kërkohet ta ripohoni.
     didnt_get_confirmation: S’morët udhëzime ripohimi?
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 88db0c4f4..ba83f0378 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -441,13 +441,7 @@ sr:
       title: Статуси налога
       with_media: Са мултимедијом
     tags:
-      accounts: Налози
-      hidden: Скривено
-      hide: Сакриј од фасцикле
-      name: Тараба
       title: Тараба
-      unhide: Прикажи у фасцикли
-      visible: Видљиво
     title: Администрација
     warning_presets:
       add_new: Додај нови
@@ -476,7 +470,6 @@ sr:
     your_token: Ваш приступни токен
   auth:
     change_password: Лозинка
-    confirm_email: Потврдите адресу е-поште
     delete_account: Обриши налог
     delete_account_html: Ако желите да обришете Ваш налог, можете <a href="%{path}">наставити овде</a>. Бићете упитани да потврдите.
     didnt_get_confirmation: Нисте добили поруку са упутствима за потврду налога?
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index c123e2889..3978f6d11 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -334,7 +334,6 @@ sv:
     your_token: Din access token
   auth:
     change_password: Lösenord
-    confirm_email: Bekräfta e-postadress
     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.
     didnt_get_confirmation: Fick inte instruktioner om bekräftelse?
diff --git a/config/locales/th.yml b/config/locales/th.yml
index a009e4ebb..73e6fb178 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1,6 +1,7 @@
 ---
 th:
   about:
+    about_hashtag_html: มีโพสต์สาธารณะที่ถูกแท็กด้วย <strong>#%{hashtag}</strong> คุณสามารถโต้ตอบได้หากคุณมีบัญชีที่ไหนก็ได้ในเฟดิเวิร์ส
     about_mastodon_html: Mastodon เป็นเครือข่ายสังคมที่ทำงานบนโปรโตคอลเว็บแบบเปิดและซอฟต์แวร์เสรีที่เปิดต้นฉบับ กระจายศูนย์เหมือนอีเมล
     about_this: เกี่ยวกับ
     active_count_after: ที่ใช้งาน
@@ -18,9 +19,11 @@ th:
     documentation: เอกสารประกอบ
     extended_description_html: |
       <h3>สถานที่ที่ดีสำหรับกฎ</h3>
-      <p>ยังไม่ได้ตั้งคำอธิบายแบบขยาย</p>
+      <p>ยังไม่ได้ตั้งคำอธิบายเพิ่มเติม</p>
+    federation_hint_html: เมื่อคุณมีบัญชีที่ %{instance} แล้ว คุณสามารถติดตามผู้คนบนเซิร์ฟเวอร์ Mastodon เซิร์ฟเวอร์ใดก็ได้
     generic_description: "%{domain} เป็นเซิร์ฟเวอร์หนึ่งในเครือข่าย"
     get_apps: ลองแอปสำหรับมือถือ
+    hosted_on: Mastodon ให้บริการบน %{domain}
     learn_more: เรียนรู้เพิ่มเติม
     privacy_policy: นโยบายความเป็นส่วนตัว
     see_whats_happening: ดูสิ่งที่กำลังเกิดขึ้น
@@ -28,7 +31,7 @@ th:
     source_code: โค้ดต้นฉบับ
     status_count_after:
       other: สถานะ
-    status_count_before: ผู้สร้าง
+    status_count_before: ผู้ใช้เหล่านั้นได้สร้าง
     terms: เงื่อนไขการให้บริการ
     user_count_after:
       other: ผู้ใช้
@@ -156,6 +159,18 @@ th:
       warn: เตือน
       web: เว็บ
     action_logs:
+      actions:
+        change_email_user: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}"
+        confirm_user: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}"
+        create_account_warning: "%{name} ได้ส่งคำเตือนไปยัง %{target}"
+        create_domain_block: "%{name} ได้ปิดกั้นโดเมน %{target}"
+        destroy_custom_emoji: "%{name} ได้ทำลายอีโมจิ %{target}"
+        destroy_domain_block: "%{name} ได้เลิกปิดกั้นโดเมน %{target}"
+        destroy_status: "%{name} ได้เอาสถานะโดย %{target} ออก"
+        disable_custom_emoji: "%{name} ได้ปิดใช้งานอีโมจิ %{target}"
+        enable_custom_emoji: "%{name} ได้เปิดใช้งานอีโมจิ %{target}"
+        update_custom_emoji: "%{name} ได้อัปเดตอีโมจิ %{target}"
+        update_status: "%{name} ได้อัปเดตสถานะโดย %{target}"
       deleted_status: "(สถานะที่ลบแล้ว)"
       title: รายการบันทึกการตรวจสอบ
     custom_emojis:
@@ -287,6 +302,8 @@ th:
       unresolved: ยังไม่ได้แก้ปัญหา
       updated_at: อัปเดตเมื่อ
     settings:
+      bootstrap_timeline_accounts:
+        title: การติดตามเริ่มต้นสำหรับผู้ใช้ใหม่
       contact_information:
         email: อีเมลธุรกิจ
         username: ชื่อผู้ใช้ในการติดต่อ
@@ -320,6 +337,8 @@ th:
         title: ข้อมูลแบบขยายที่กำหนดเอง
       site_short_description:
         title: คำอธิบายเซิร์ฟเวอร์แบบสั้น
+      site_terms:
+        title: เงื่อนไขการให้บริการที่กำหนดเอง
       site_title: ชื่อเซิร์ฟเวอร์
       timeline_preview:
         desc_html: แสดงเส้นเวลาสาธารณะในหน้าเริ่มต้น
@@ -336,13 +355,7 @@ th:
       no_media: ไม่มีสื่อ
       title: สถานะบัญชี
     tags:
-      accounts: บัญชี
-      hidden: ซ่อนอยู่
-      hide: ซ่อนจากไดเรกทอรี
-      name: แฮชแท็ก
       title: แฮชแท็ก
-      unhide: แสดงในไดเรกทอรี
-      visible: มองเห็น
     title: การดูแล
     warning_presets:
       add_new: เพิ่มใหม่
@@ -362,11 +375,12 @@ th:
     view_profile: ดูโปรไฟล์
     view_status: ดูสถานะ
   applications:
+    created: สร้างแอปพลิเคชันสำเร็จ
+    destroyed: ลบแอปพลิเคชันสำเร็จ
     invalid_url: URL ที่ระบุไม่ถูกต้อง
   auth:
     apply_for_account: ขอคำเชิญ
     change_password: รหัสผ่าน
-    confirm_email: ยืนยันอีเมล
     delete_account: ลบบัญชี
     forgot_password: ลืมรหัสผ่านของคุณ?
     login: เข้าสู่ระบบ
@@ -381,6 +395,8 @@ th:
     reset_password: ตั้งรหัสผ่านใหม่
     security: ความปลอดภัย
     set_new_password: ตั้งรหัสผ่านใหม่
+    status:
+      account_status: สถานะบัญชี
     trouble_logging_in: มีปัญหาในการเข้าสู่ระบบ?
   authorize_follow:
     already_following: คุณกำลังติดตามบัญชีนี้อยู่แล้ว
@@ -412,6 +428,8 @@ th:
     directory: ไดเรกทอรีโปรไฟล์
     explanation: ค้นพบผู้ใช้ตามความสนใจของเขา
     explore_mastodon: สำรวจ %{title}
+    people:
+      other: "%{count} คน"
   errors:
     '403': คุณไม่มีสิทธิอนุญาตเพื่อดูหน้านี้
     '404': หน้าที่คุณกำลังมองหาไม่ได้อยู่ที่นี่
@@ -482,9 +500,12 @@ th:
       '86400': 1 วัน
     expires_in_prompt: ไม่เลย
     generate: สร้าง
+    max_uses:
+      other: "%{count} การใช้"
     max_uses_prompt: ไม่มีขีดจำกัด
     table:
       expires_at: หมดอายุเมื่อ
+      uses: การใช้
     title: เชิญผู้คน
   media_attachments:
     validations:
@@ -530,6 +551,9 @@ th:
     older: เก่ากว่า
     prev: ก่อนหน้า
     truncate: "&hellip;"
+  polls:
+    errors:
+      duplicate_options: มีรายการที่ซ้ำกัน
   preferences:
     other: อื่น ๆ
     posting_defaults: ค่าเริ่มต้นการโพสต์
@@ -604,7 +628,7 @@ th:
     development: การพัฒนา
     edit_profile: แก้ไขโปรไฟล์
     export: การส่งออกข้อมูล
-    import: นำเข้า
+    import: การนำเข้า
     import_and_export: การนำเข้าและการส่งออก
     notifications: การแจ้งเตือน
     preferences: การกำหนดลักษณะ
@@ -625,6 +649,7 @@ th:
     poll:
       total_votes:
         other: "%{count} การลงคะแนน"
+      vote: ลงคะแนน
     show_more: แสดงเพิ่มเติม
     sign_in_to_participate: ลงชื่อเข้าเพื่อเข้าร่วมการสนทนา
     title: '%{name}: "%{quote}"'
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 5929e1e07..d9e7ce333 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -208,8 +208,6 @@ tr:
       site_title: Site başlığı
       title: Site Ayarları
     tags:
-      accounts: Hesaplar
-      name: Etiketler
       title: Etiketler
     title: Yönetim
     warning_presets:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index c2d422474..ac3ce62dd 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -1,63 +1,112 @@
 ---
 uk:
   about:
-    about_hashtag_html: Немає публічних постів з хештегом<strong>#%{hashtag}</strong>. Ви можете  You can interact with them if you have an account anywhere in the fediverse.
-    about_mastodon_html: Mastodon - це <em>вільна</em> соціальна мережа з <em>відкритим вихідним кодом</em>. Вона є <em>децентралізованою</em> альтернативою комерційним платформам, що дозволяє уникнути ризиків монополізації вашого спілкування однією компанією. Виберіть сервер, якому ви довіряєте &mdash; що б ви не вибрали, Ви зможете спілкуватись з усіма іншими. Будь-який користувач може запустити власну інстанцію Mastodon та без проблем брати участь в <em>соціальній мережі</em>.
+    about_hashtag_html: Це публічні дмухи, позначені символом <strong>#%{hashtag}</strong>. Ви можете взаємодіяти з ними, якщо маєте обліковий запис будь-де у федіверсі.
+    about_mastodon_html: Mastodon — це соціальна мережа, заснована на відкритих веб-протоколах та вільному програмному забезпеченні з відкритим кодом. Вона є децентралізованою на кшталт електронної пошти.
     about_this: Про цю інстанцію
+    active_count_after: активних
+    active_footnote: Активні користувачі місяця (MAU)
     administered_by: 'Адміністратор:'
+    api: API
+    apps: Мобільні додатки
+    apps_platforms: Користуйтесь Mastodon на iOS, Android та інших платформах
+    browse_directory: Переглядайте каталог профілів та фільтруйте за інтересами
+    browse_public_posts: Переглядайте потік публічних постів на Mastodon
     contact: Зв'язатися
     contact_missing: Не зазначено
     contact_unavailable: Недоступно
+    discover_users: Знайдіть цікавих користувачів
     documentation: Документація
     extended_description_html: |
       <h3>Гарне місце для правил</h3>
       <p>Детальний опис ще не налаштований.</p>
+    federation_hint_html: З обліковим записом на %{instance} ви зможете слідкувати за людьми на будь-якому сервері Mastodon та поза ним.
     generic_description: "%{domain} є одним сервером у мережі"
+    get_apps: Спробуйте мобільний додаток
     hosted_on: Mastodon розміщено на %{domain}
+    instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену.
+
+'
     learn_more: Дізнатися більше
     privacy_policy: Політика приватності
+    see_whats_happening: Погляньте, що відбувається
+    server_stats: 'Статистика серверу:'
     source_code: Вихідний код
+    status_count_after:
+      few: статуса
+      many: статусів
+      one: статус
+      other: статуси
     status_count_before: Опубліковано
+    tagline: Слідкуйте за друзями та знаходьте нових
     terms: Правила використання
+    user_count_after:
+      few: користувача
+      many: користувачів
+      one: користувач
+      other: користувачі
     user_count_before: Тут живе
     what_is_mastodon: Що таке Mastodon?
   accounts:
+    choices_html: 'Вподобання %{name}:'
     follow: Підписатися
+    followers:
+      few: Підписника
+      many: Підписників
+      one: Підписник
+      other: Підписників
     following: Підписаний(-а)
     joined: Приєднався %{date}
+    last_active: остання активність
+    link_verified_on: Права власності на це посилання були перевірені %{date}
     media: Медіа
-    moved_html: "%{name} переїхав на %{new_profile_link}:"
+    moved_html: "%{name} переїхав до %{new_profile_link}:"
     network_hidden: Ця інформація недоступна
     nothing_here: Тут нічого немає!
     people_followed_by: Люди, на яких підписаний(-а) %{name}
     people_who_follow: Підписники %{name}
-    posts_with_replies: Пости і відповіді
+    pin_errors:
+      following: Ви повинні бути підписаним на людину, яку бажаєте схвалити
+    posts:
+      few: Дмуха
+      many: Дмухів
+      one: Дмух
+      other: Дмухів
+    posts_tab_heading: Дмухи
+    posts_with_replies: Дмухи та відповіді
     reserved_username: Це ім'я користувача зарезервоване
     roles:
       admin: Адміністратор
       bot: Бот
       moderator: Мод
+    unavailable: Профіль недоступний
     unfollow: Відписатися
   admin:
+    account_actions:
+      action: Виконати дію
+      title: Здійснити модераційну дію над %{acct}
     account_moderation_notes:
-      create: Залишити примітки
-      created_msg: Примітку модератора успішно створено!
+      create: Залишити нотатку
+      created_msg: Нотатку модератора успішно створено!
       delete: Видалити
-      destroyed_msg: Примітку модератора успішно видалено!
+      destroyed_msg: Нотатку модератора успішно видалено!
     accounts:
+      approve: Схвалити
+      approve_all: Схвалити всіх
       are_you_sure: Ви впевнені?
       avatar: Аватар
       by_domain: Домен
       change_email:
-        changed_msg: Поштова адреса аккаунту успішно змінена!
-        current_email: Поточна поштова адреса
-        label: Змінити поштову адресу
-        new_email: Новий e-mail
-        submit: Змінити поштову адресу
-        title: Змінити поштову адресу для %{username}
+        changed_msg: Адресу електронної пошти облікового запису успішно змінено!
+        current_email: Поточна адреса електронної пошти
+        label: Змінити адресу електронної пошти
+        new_email: Нова адреса електронної пошти
+        submit: Змінити адресу електронної пошти
+        title: Змінити адресу електронної пошти для %{username}
       confirm: Зберегти
       confirmed: Збережено
       confirming: Зберігається
+      deleted: Видалено
       demote: Усунути
       disable: Вимкнути
       disable_two_factor_authentication: Вимкнути двофакторну авторизацію
@@ -65,14 +114,19 @@ uk:
       display_name: Відображуване ім'я
       domain: Домен
       edit: Змінити
-      email_status: Статус e-mail
+      email: Електронна пошта
+      email_status: Статус електронної пошти
       enable: Увімкнути
       enabled: Увімкнено
-      feed_url: URL фіду
+      feed_url: URL-адреса каналу
       followers: Підписники
       followers_url: URL підписників
       follows: Підписки
-      inbox_url: Вхідний URL
+      header: Заголовок
+      inbox_url: URL вхідних повідомлень
+      invited_by: 'Запросив:'
+      ip: IP
+      joined: Приєднався
       location:
         all: Усі
         local: Локальні
@@ -82,29 +136,37 @@ uk:
       media_attachments: Мультимедійні вкладення
       memorialize: Зробити пам'ятником
       moderation:
+        active: Активний
         all: Усі
+        pending: Очікують
         silenced: Заглушені
-        suspended: Заблоковані
+        suspended: Призупинені
         title: Модерація
-      moderation_notes: Примітки модераторів
+      moderation_notes: Нотатки модераторів
       most_recent_activity: Остання активність
       most_recent_ip: Останній IP
+      no_account_selected: Жоден обліковий запис не було змінено, оскільки жоден не було вибрано
+      no_limits_imposed: Жодних обмежень не накладено
       not_subscribed: Не підписані
-      outbox_url: Вихідний URL
-      perform_full_suspension: Повне блокування
+      outbox_url: URL вихідних повідомлень
+      pending: Відгук в очікуванні
+      perform_full_suspension: Призупинити
       profile_url: URL профілю
       promote: Просунути
       protocol: Протокол
       public: Публічний
       push_subscription_expires: Підписка PuSH спливає
       redownload: Оновити аватар
+      reject: Відхилити
+      reject_all: Відхилити усе
       remove_avatar: Видалити аватар
+      remove_header: Видалити заголовок
       resend_confirmation:
         already_confirmed: Цей користувач уже підтверджений
-        send: Надіслати підтвердження ще раз
-        success: Повідомлення з підтвердженням успішно надіслано!
+        send: Надіслати електронний лист-підтвердження ще раз
+        success: Електронний лист-підтвердження успішно надіслано!
       reset: Скинути
-      reset_password: Зкинути пароль
+      reset_password: Скинути пароль
       resubscribe: Перепідписатися
       role: Дозволи
       roles:
@@ -112,30 +174,38 @@ uk:
         moderator: Модератор
         staff: Персонал
         user: Користувач
+      salmon_url: Salmon URL
       search: Пошук
       shared_inbox_url: URL спільного вхідного кошика
       show:
-        created_reports: Скарги створені цим аккаунтом
+        created_reports: Скарги, створені цим аккаунтом
         targeted_reports: Скарги щодо цього аккаунту
       silence: Глушення
+      silenced: Заглушені
       statuses: Статуси
       subscribe: Підписатися
-      title: Акаунти
-      unconfirmed_email: Непідтверджений e-mail
+      suspended: Призупинені
+      time_in_queue: Очікує в черзі %{time}
+      title: Облікові записи
+      unconfirmed_email: Непідтверджена адреса електронної пошти
       undo_silenced: Зняти глушення
-      undo_suspension: Зняти блокування
+      undo_suspension: Зняти призупинення
       unsubscribe: Відписатися
       username: Ім'я користувача
-      web: WWW
+      warn: Попередження
+      web: Веб
+      whitelisted: У білому списку
     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}"
@@ -144,19 +214,20 @@ uk:
         disable_user: "%{name} заборонив(-ла) авторизацію користувачу %{target}"
         enable_custom_emoji: "%{name} увімкнув(-ла) емодзі %{target}"
         enable_user: "%{name} увімкнув(-ла) авторизацію користувачу %{target}"
-        memorialize_account: "%{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}"
+        silence_account: "%{name} заглушив(-ла) обліковий запис %{target}"
+        suspend_account: "%{name} заморозив обліковий запис користувача %{target}"
         unassigned_report: "%{name} зняв(-ла) призначення скарги %{target}"
-        unsilence_account: "%{name} розглушив(-ла) аккаунт %{target}"
-        unsuspend_account: "%{name} розблокував аккаунт користувача %{target}"
+        unsilence_account: "%{name} розглушив(-ла) обліковий запис %{target}"
+        unsuspend_account: "%{name} розморозив обліковий запис користувача %{target}"
         update_custom_emoji: "%{name} оновив(-ла) емодзі %{target}"
         update_status: "%{name} змінив(-ла) статус користуача %{target}"
+      deleted_status: "(видалений статус)"
       title: Журнал подій
     custom_emojis:
       by_domain: Домен
@@ -177,59 +248,86 @@ uk:
         title: Додати новий емодзі
       overwrite: Переписати
       shortcode: Шорткод
-      shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або нижні підкреслення
+      shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або підкреслення
       title: Особливі емодзі
       unlisted: Не у списку
       update_failed_msg: Не вийшло оновити емозді
       updated_msg: Емодзі успішно оновлене!
       upload: Вивантажити
     dashboard:
+      backlog: відкладені завдання
       config: Налаштування
-      feature_deletions: Видалення аккаунтів
+      feature_deletions: Видалення облікових записів
       feature_invites: Посилання-запрошення
+      feature_profile_directory: Каталог профілів
       feature_registrations: Реєстрації
+      feature_relay: Ретранслятор дмухів між серверами
+      feature_spam_check: Анти-спам
+      feature_timeline_preview: Передпоказ стрічки
       features: Можливості
       hidden_service: Федерація з прихованими сервісами
       open_reports: відкриті скарги
+      pending_tags: хештеги, що очікують на перегляд
+      pending_users: користувачі, що очікують на перегляд
       recent_users: Останні користувачі
       search: Повнотекстовий пошук
       single_user_mode: Режим одного користувача
       software: Програмне забезпечення
       space: Використання дискового простору
-      title: Дашборд
+      title: Приборна панель
       total_users: користувачів загалом
       trends: Тренди
       week_interactions: дій за цей тиждень
       week_users_active: активно протягом тижня
       week_users_new: користувачів цього тижня
+      whitelist_mode: Режим білого списку
+    domain_allows:
+      add_new: Додати домен до білого списку
+      created_msg: Домен було успішно додано до білого списку
+      destroyed_msg: Домен було видалено з білого списку
+      undo: Видалити з білого списку
     domain_blocks:
       add_new: Додати нове
-      created_msg: Блокування домену оброблюється
+      created_msg: Блокування домену обробляється
       destroyed_msg: Блокування домену знято
       domain: Домен
+      edit: Редагувати блокування доменів
+      existing_domain_block_html: Ви вже наклали більш суворі обмеження на %{name}, вам треба спочатку <a href="%{unblock_url}">розблокувати його</a>.
       new:
         create: Створити блокування
-        hint: Блокування домену не завадить створенню нових акаунтів у базі даних, але ретроактивно та автоматично застосує вказані методи модерації для цих акаунтів.
+        hint: Блокування домену не завадить створенню нових облікових записів у базі даних, але ретроактивно та автоматично застосує до них конкретні методи модерації.
         severity:
-          desc_html: "<strong>Глушення</strong> зробить статуси акаунту невидимими для всіх, окрім їхніх підписників. <strong>Блокування</strong> видалить увесь контент акаунту, включаючи мультимедійні вкладення та дані профілю."
+          desc_html: "<strong>Глушення</strong> зробить пости облікового запису невидимими для всіх, окрім його підписників. <strong>Заморожування</strong> видалить увесь контент, медіа та дані профілю облікового запису. Якщо ви хочете лише заборонити медіафайли, оберіть <strong>Нічого</strong>."
           noop: Нічого
           silence: Глушення
           suspend: Блокування
         title: Нове блокування домену
+      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: призупинені
       show:
         affected_accounts:
-          few: Впливає на %{count} акаунти у базі даних
-          many: Впливає на %{count} акаунтів у базі даних
-          one: Впливає на один акаунт у базі даних
-          other: Впливає на %{count} акаунтів у базі даних
+          few: Впливає на %{count} облікових записи у базі даних
+          many: Впливає на %{count} облікових записів у базі даних
+          one: Впливає на один обліковий запис у базі даних
+          other: Впливає на %{count} облікових записів у базі даних
         retroactive:
-          silence: Зняти глушення з усіх існуючих акаунтів цього домену
-          suspend: Зняти блокування з усіх існуючих акаунтів цього домену
+          silence: Зняти глушення з усіх існуючих заглушених облікових записів цього домену
+          suspend: Розморозити існуючі заморожені облікові записи з цього домену
         title: Зняти блокування з домена %{domain}
         undo: Відмінити
       undo: Відмінити
+      view: Переглянути заблоковані домени
     email_domain_blocks:
       add_new: Додати
       created_msg: Успішно додано поштовий домен до чорного списку
@@ -238,25 +336,62 @@ uk:
       domain: Домен
       new:
         create: Додати домен
-        title: Нове доменне блокування домену email
+        title: Нове блокування поштового домену
       title: Чорний список поштових доменів
+    followers:
+      back_to_account: Повернутися до Облікового запису
+      title: Підписники %{acct}
     instances:
+      by_domain: Домен
+      delivery_available: Доставлення доступне
+      known_accounts:
+        few: "%{count} відомих облікових записів"
+        many: "%{count} відомих облікових записів"
+        one: "%{count} відомий обліковий запис"
+        other: "%{count} відомих облікових записів"
+      moderation:
+        all: Усі
+        limited: Обмежені
+        title: Модерація
+      private_comment: Приватний коментар
+      public_comment: Публічний коментар
       title: Відомі інстанції
+      total_blocked_by_us: Заблокованих нами
+      total_followed_by_them: Вони стежать за
+      total_followed_by_us: Ми стежимо за
+      total_reported: Звітів про них
+      total_storage: Мультимедійні вкладення
     invites:
+      deactivate_all: Деактивувати всі
       filter:
         all: Все
         available: Доступно
         expired: Просрочено
         title: Фільтр
       title: Запрошення
+    pending_accounts:
+      title: Облікові записи у черзі (%{count})
     relays:
+      add_new: Додати новий ретранслятор
+      delete: Видалити
+      description_html: "<strong>Ретлянслятор дмухів</strong> (federation relay) — це проміжний сервер, що обмінюється великими обсягами публічних дмухів між серверами, які цього хочуть. Він може допомогти маленьким та середнім серверам отримувати вміст з усього <strong>федесвіту</strong> (fediverse). Без нього локальним користувачам довелося б вручну підписуватися на людей з віддалених серверів."
+      disable: Вимкнути
+      disabled: Вимкнено
+      enable: Увімкнути
+      enable_hint: Коли ретрансляцію увімкнено, ваш сервер буде підписаний на усі публічні дмухи з цього ретранслятора, та почне посилати до нього свої публічні дмухи.
+      enabled: Увімкнено
+      inbox_url: URL ретранслятора
+      pending: Очікуємо на підтвердження ретранслятором
+      save_and_enable: Зберегти та увімкнути
+      setup: Налаштування з'єднання з ретранслятором
       status: Статус
+      title: Ретранслятори
     report_notes:
       created_msg: Скарга успішно створена!
       destroyed_msg: Скарга успішно видалена!
     reports:
       account:
-        note: примітка
+        note: нотатка
         report: скарга
       action_taken_by: Дія виконана
       are_you_sure: Ви впевнені?
@@ -275,7 +410,7 @@ uk:
         placeholder: Опишіть, які дії були виконані, або інші зміни, що стосуються справи...
       reopen: Перевідкрити скаргу
       report: 'Скарга #%{id}'
-      reported_account: Акаунт порушника
+      reported_account: Обліковий запис порушника
       reported_by: Відправник скарги
       resolved: Вирішено
       resolved_msg: Скаргу успішно вирішено!
@@ -289,32 +424,47 @@ uk:
         desc_html: Кількість локальних постів, активних та нових користувачів у тижневих розрізах
         title: Публікація агрегованої статистики про активність користувачів
       bootstrap_timeline_accounts:
-        title: Підписки за замовчуванням для нових користувачів
+        desc_html: Розділяйте імена користувачів комами. Працюватимуть тільки локальні і розблоковані облікові записи. Якщо порожньо, то типово це всі локальні адміністратори.
+        title: Типові підписки для нових користувачів
       contact_information:
         email: Введіть публічний email
         username: Введіть ім'я користувача
+      custom_css:
+        desc_html: Відобразити вигляд, коли CSS завантажено для кожної сторінки
+        title: Користувацький CSS
       hero:
-        desc_html: Відображається на головній сторінці. Рекомендована як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції
+        desc_html: Відображається на головній сторінці. Рекомендовано як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції
         title: Банер інстанції
+      mascot:
+        desc_html: Відображається на багатьох сторінках. Щонайменше 293×205 пікселів рекомендовано. Якщо не вказано, буде використано талісман інстанції
+        title: Талісман
       peers_api_enabled:
         desc_html: Доменні ім'я, помічені цією інстанцією федисвіту
         title: Опублікувати список знайдених інстанцій
       preview_sensitive_media:
-        desc_html: Передпоказ посилання на інших сайтах буде відображати мініатюру навіть якщо медіа відмічене як вразливе
-        title: Показувати вразливе медія у перепоказі OpenGraph
+        desc_html: Передпоказ посилання на інших сайтах буде відображати мініатюру навіть якщо медіа відмічене як дражливе
+        title: Показувати дражливе медіа у передпоказах OpenGraph
+      profile_directory:
+        desc_html: Дозволити користувачам бути видимими
+        title: Увімкнути каталог профілів
       registrations:
         closed_message:
           desc_html: Відображається на титульній сторінці, коли реєстрація закрита <br>Можна використовувати HTML-теги
           title: Повідомлення про закриту реєстрацію
         deletion:
-          desc_html: Дозволити будь-кому видаляти свій аккаунт
-          title: Дозволити видалення аккаунтів
+          desc_html: Дозволити будь-кому видаляти свій обліковий запис
+          title: Видалення відкритого облікового запису
         min_invite_role:
           disabled: Ніхто
           title: Дозволити запрошення від
+      registrations_mode:
+        modes:
+          approved: Для входу потрібне схвалення
+          none: Ніхто не може увійти
+          open: Будь-хто може увійти
       show_known_fediverse_at_about_page:
-        desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані локальні пости.
-        title: Показувати доступний федисвіт у передпоказі фіду
+        desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані лише локальні дмухи.
+        title: Показувати доступний федисвіт у передпоказі стрічки
       show_staff_badge:
         desc_html: Відмічати персонал на сторінці користувачів
         title: Показувати персонал
@@ -324,39 +474,80 @@ uk:
       site_description_extended:
         desc_html: Відображається на сторінці додаткової информації<br>Можна використовувати HTML-теги
         title: Розширений опис сайту
+      site_short_description:
+        title: Короткий опис сервера
       site_terms:
         desc_html: |-
           Ви можене написати власну політику приватності, умови використанні та інші законні штуки<br>
           Можете використовувати HTML теги
         title: Особливі умови використання
       site_title: Назва сайту
+      spam_check_enabled:
+        desc_html: Mastodon може автоматично глушити та автоматично звітувати про облікові записи, які надсилають повторні небажані повідомлення. Можливі хибно-позитивні спрацьовування.
+        title: Автоматизація антиспаму
       thumbnail:
         desc_html: Використовується для передпоказів через OpenGraph та API. Бажано розміром 1200х640 пікселів
         title: Мініатюра інстанції
       timeline_preview:
-        desc_html: Показувати публічний фід на головній сторінці
+        desc_html: Показувати публічну стрічку на головній сторінці
         title: Передпоказ фіду
       title: Налаштування сайту
+      trends:
+        desc_html: Відображати розглянуті хештеґи, які популярні зараз
+        title: Популярні хештеги
     statuses:
-      back_to_account: Назад на сторінку профілю
+      back_to_account: Назад до сторінки облікового запису
       batch:
         delete: Видалити
-        nsfw_off: Відмітити сприйнятливим
-        nsfw_on: Відмітити несприйнятливим
+        nsfw_off: Відмітити прийнятним
+        nsfw_on: Відмітити неприйнятним
       failed_to_execute: Не вийшло
       media:
         title: Медіа
       no_media: Немає медіа
-      title: Статуси аккаунтів
+      no_status_selected: Жодного статуса не було змінено, оскільки жодного не було вибрано
+      title: Статуси облікових записів
       with_media: З медіа
+    tags:
+      accounts_today: Унікальних використань за сьогодні
+      accounts_week: Унікальних використань за тиждень
+      breakdown: Аналіз використання за сьогодні за джерелом
+      context: Контекст
+      directory: У каталозі
+      in_directory: "%{count} у каталозі"
+      review: Переглянути статус
+      reviewed: Переглянуто
+      title: Хештеґи
+      trending_right_now: Популярні саме зараз
+      unique_uses_today: "%{count} постять сьогодні"
+      unreviewed: Не переглянуто
+      updated_msg: Параметри хештеґів успішно оновлені
     title: Адміністрування
+    warning_presets:
+      add_new: Додати новий
+      delete: Видалити
+      edit: Редагувати
+      edit_preset: Редагувати шаблон попередження
+      title: Управління шаблонами попереджень
   admin_mailer:
+    new_pending_account:
+      body: Деталі нового облікового запису наведено нижче. Ви можете схвалити або відхилити цю заяву.
+      subject: Новий обліковий запис надіслано на розгляд на %{instance} (%{username})
     new_report:
-      body: "%{reporter} поскаржився(-лася) %{target}"
-      body_remote: Хтось з домену %{domain} поскаржився(-лася) %{target}
+      body: "%{reporter} поскаржився(-лася) на %{target}"
+      body_remote: Хтось з домену %{domain} поскаржився(-лася) на %{target}
       subject: Нова скарга до %{instance} (#%{id})
+    new_trending_tag:
+      subject: Новий хештеґ надіслано на розгляд до %{instance} (#%{name})
+  appearance:
+    advanced_web_interface: Розширений web-інтерфейс
+    animations_and_accessibility: Анімація та доступність
+    confirmation_dialogs: Діалоги підтвердження
+    discovery: Виявлення
+    sensitive_content: Дражливий вміст
   application_mailer:
     notification_preferences: Змінити налаштування e-mail
+    salutation: "%{name},"
     settings: 'Змінити налаштування e-mail: %{link}'
     view: 'Перегляд:'
     view_profile: Показати профіль
@@ -370,26 +561,42 @@ uk:
     warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким!
     your_token: Ваш токен доступу
   auth:
+    apply_for_account: Запитати запрошення
     change_password: Пароль
-    confirm_email: Підтвердьте e-mail адресу
-    delete_account: Видалити аккаунт
-    delete_account_html: Якщо ви хочете видалити аккаунт, ви можете <a href="%{path}">перейти сюди</a>. Вас попросять підтвердити дію.
+    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>. Вас попросять підтвердити дію.
     didnt_get_confirmation: Ви не отримали інструкції з підтвердження?
-    forgot_password: Забули свій пароль?
+    forgot_password: Забули пароль?
     invalid_reset_password_token: Токен скидання паролю неправильний або просрочений. Спробуйте попросити новий.
     login: Увійти
     logout: Вийти
-    migrate_account: Переїхати до іншого аккаунту
-    migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете <a href="%{path}">налаштувати це тут</a>.
+    migrate_account: Переїхати на інший обліковий запис
+    migrate_account_html: Якщо ви бажаєте перенаправити цей обліковий запис на інший, ви можете <a href="%{path}">налаштувати це тут</a>.
     or_log_in_with: Або увійдіть з
+    providers:
+      cas: CAS
+      saml: SAML
     register: Зареєструватися
+    registration_closed: "%{instance} не приймає нових членів"
     resend_confirmation: Повторно відправити інструкції з підтвердження
     reset_password: Скинути пароль
     security: Зміна паролю
     set_new_password: Встановити новий пароль
+    setup:
+      email_below_hint_html: Якщо ця електронна адреса не є вірною, ви можете змінити її тут та отримати новий лист для підтвердження.
+      email_settings_hint_html: Електронний лист-підтвердження було вислано до %{email}. Якщо ця адреса електронної пошти не є вірною, ви можете змінити її в налаштуваннях облікового запису.
+      title: Налаштування
+    status:
+      account_status: Статус облікового запису
+      confirming: Очікуємо на завершення підтвердження за допомогою електронної пошти.
+      functional: Ваш обліковий запис повністю робочій.
+      pending: Ваша заява очікує на розгляд нашим персоналом. Це може зайняти деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена.
+    trouble_logging_in: Проблема під час входу?
   authorize_follow:
-    already_following: Ви вже підписані на цей аккаунт
-    error: На жаль, при пошуку віддаленого аккаунту виникла помилка
+    already_following: Ви вже слідкуєте за цим обліковим записом
+    error: На жаль, під час пошуку віддаленого облікового запису сталася помилка
     follow: Підписатися
     follow_request: 'Вам надіслали запит на підписку:'
     following: 'Ура! Ви тепер підписані на:'
@@ -414,16 +621,28 @@ uk:
       x_seconds: "%{count}сек"
   deletes:
     bad_password_msg: Гарна спроба, гакери! Неправильний пароль
-    confirm_password: Введіть актуальний пароль щоб перевірити що ви це ви
-    description_html: Це <strong>безвідворотно і назавжди</strong> видалить контент з вашого аккаунту та деактивує його. Ваше ім'я користувача буде залишатися зарезервованим для уникнення вашої деперсоналізації.
-    proceed: Видалити аккаунт
-    success_msg: Ваш аккаунт було успішно видалено
-    warning_html: Ми можемо гарантувати видалення контенти <b>лише з цього сайту</b>. Контент, що був поширений залишає сліди. Сервери, що є офлайн та ті, що відписалися від наших оновлень не запишуть змін до своїх баз даних.
+    confirm_password: Введіть актуальний пароль, щоб перевірити що ви це ви
+    description_html: Це <strong>безповоротно і назавжди</strong> видалить контент з вашого облікового запису та деактивує його. Ваше ім'я користувача буде залишатися зарезервованим для запобігання можливим підмінам особи.
+    proceed: Видалити обліковий запис
+    success_msg: Ваш обліковий запис було успішно видалено
+    warning_html: Ми можемо гарантувати видалення контенту <b>лише з цього сайту</b>. Контент, що був поширений, залишає сліди. Сервери, що є офлайн та ті, що відписалися від наших оновлень, не запишуть змін до своїх баз даних.
     warning_title: Про доступність поширеного контенту
+  directories:
+    directory: Каталог профілів
+    enabled: Ви вже присутні у цьому каталозі.
+    explanation: Шукайте користувачів за їх інтересами
+    explore_mastodon: Досліджуйте %{title}
+    people:
+      few: "%{count} людей"
+      many: "%{count} людей"
+      one: "%{count} людина"
+      other: "%{count} люди"
+  domain_validator:
+    invalid_domain: не є допустимим ім'ям домену
   errors:
     '403': У Вас немає доступу до перегляду даної сторінки.
-    '404': Сторінка, яку Ви шукали, не існує.
-    '410': Сторінка, яку Ви шукали, більше не існує.
+    '404': Сторінки, яку Ви шукали, не існує.
+    '410': Сторінки, яку Ви шукали, більше не існує.
     '422':
       content: Перевірка безпеки не вдалася. Можливо, Ви блокуєте cookies?
       title: Перевірка безпеки не вдалася
@@ -432,6 +651,9 @@ uk:
       content: Пробачте, та щось пішло не так з нашого боку.
       title: Ця сторінка неправильна
     noscript_html: Для використання веб-застосунку Mastodon, будь-ласка увімкніть JavaScript. Якщо у вас немає такої можливості, скористайтесь одним із <a href="%{apps_path}">нативних застосунків</a> для Mastodon для вашої платформи.
+  existing_username_validator:
+    not_found: не вдалося знайти локального користувача з таким ім'ям
+    not_found_multiple: не вдалося знайти %{usernames}
   exports:
     archive_takeout:
       date: Дата
@@ -441,14 +663,21 @@ uk:
       request: Зробити запит на архів
       size: Розмір
     blocks: Список блокувань
+    csv: CSV
+    domain_blocks: Блокування доменів
     follows: Підписки
+    lists: Списки
     mutes: Список глушення
     storage: Ваш медіаконтент
+  featured_tags:
+    add_new: Додати новий
+    errors:
+      limit: Ви досягли максимальної кількості хештеґів
   filters:
     contexts:
-      home: Ваш фід
+      home: Ваша стрічка
       notifications: Сповіщення
-      public: Публічний фід
+      public: Глобальні стрічки
       thread: Повідомлення
     edit:
       title: Редагувати фільтр
@@ -460,14 +689,45 @@ uk:
       title: Фільтри
     new:
       title: Додати фільтр
+  footer:
+    developers: Розробникам
+    more: Більше…
+    resources: Ресурси
   generic:
+    all: Усі
     changes_saved_msg: Зміни успішно збережені!
+    copy: Копіювати
+    order_by: Сортувати за
     save_changes: Зберегти зміни
+    validation_errors:
+      few: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки
+      many: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки
+      one: Щось досі не гаразд! Перегляньте повідомлення про помилку
+      other: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки
+  html_validator:
+    invalid_markup: 'містить неприпустиму HTML розмітку: %{error}'
+  identity_proofs:
+    active: Активне
+    authorize: Так, авторизувати
+    authorize_connection_prompt: Авторизувати це зашифроване з'єднання?
+    errors:
+      failed: Не вдалося встановити це зашифроване з'єднання. Спробуйте ще раз за допомогою %{provider}.
+    i_am_html: Я %{username} з %{service}.
+    inactive: Неактивний
+    publicize_checkbox: 'Та дмухнути це:'
+    publicize_toot: 'Це доведено! Я таки %{username} з %{service}: %{url}'
+    status: Стан перевірки
   imports:
+    modes:
+      merge: Злиття
+      merge_long: Зберегти існуючі записи та додати нові
+      overwrite: Перезаписувати
+      overwrite_long: Замінити поточні записи новими
     preface: Вы можете завантажити деякі дані, наприклад, списки людей, на яких Ви підписані чи яких блокуєте, в Ваш акаунт на цій інстанції з файлів, експортованих з іншої інстанції.
     success: Ваші дані були успішно загружені та будуть оброблені в найближчий момент
     types:
       blocking: Список блокувань
+      domain_blocking: Список заблокованих сайтів
       following: Підписки
       muting: Список глушення
     upload: Завантажити
@@ -485,6 +745,11 @@ uk:
     expires_in_prompt: Ніколи
     generate: Згенерувати
     invited_by: 'Вас запросив(-ла):'
+    max_uses:
+      few: "%{count} використання"
+      many: "%{count} використань"
+      one: 1 використання
+      other: "%{count} використань"
     max_uses_prompt: Без обмеження
     prompt: Генеруйте та діліться посиланням з іншими для надання доступу до сайту
     table:
@@ -493,16 +758,16 @@ uk:
     title: Запросити людей
   lists:
     errors:
-      limit: Ви досягнули максимальної кількості списків
+      limit: Ви досягли максимальної кількості списків
   media_attachments:
     validations:
       images_and_video: Не можна додати відео до статусу з зображеннями
       too_many: Не можна додати більше 4 файлів
   migrations:
-    acct: username@domain нового аккаунту
-    currently_redirecting: 'Ваш профіль налаштований перенаправляти на:'
+    acct: username@domain нового облікового запису
+    currently_redirecting: 'Ваш профіль налаштований перенаправляти до:'
     proceed: Зберегти
-    updated_msg: Переїзд вашого аккаунту успішно оновлений!
+    updated_msg: Налаштування переїзду вашого облікового запису успішно оновлені!
   moderation:
     title: Модерація
   notification_mailer:
@@ -526,12 +791,12 @@ uk:
       subject: Користувачу %{name} сподобався ваш статус
       title: Нове вподобання
     follow:
-      body: "%{name} тепер підписаний на вас!"
+      body: "%{name} тепер підписаний(-а) на вас!"
       subject: "%{name} тепер підписаний(-а) на вас"
-      title: Новий підписник
+      title: Новий підписник(-ця)
     follow_request:
       action: Керувати запитами на підписку
-      body: "%{name} запитав Вас про підписку"
+      body: "%{name} запитав(-ла) Вас про підписку"
       subject: "%{name} хоче підписатися на Вас"
       title: Новий запит на підписку
     mention:
@@ -541,11 +806,12 @@ uk:
       title: Нова згадка
     reblog:
       body: 'Ваш статус було передмухнуто %{name}:'
-      subject: "%{name} передмухнув ваш статус"
+      subject: "%{name} передмухнув(-ла) ваш статус"
       title: Нове передмухування
   number:
     human:
       decimal_units:
+        format: "%n%u"
         units:
           billion: млрд
           million: млн
@@ -555,45 +821,138 @@ uk:
   pagination:
     newer: Новіше
     next: Далі
+    older: Старіші
     prev: Назад
+    truncate: "&hellip;"
+  polls:
+    errors:
+      already_voted: Ви вже голосували в цьому опитуванні
+      duplicate_options: містить повторювані варіанти
+      duration_too_long: надто далеко у майбутньому
+      duration_too_short: надто мала тривалість
+      expired: Це опитування вже завершено
+      over_character_limit: не може бути довше ніж %{max} символів кожен
+      too_few_options: має містити більше ніж один варіант
+      too_many_options: не може мати більше ніж %{max} варіантів
   preferences:
     other: Інше
+    public_timelines: Глобальні стрічки
+  relationships:
+    activity: Діяльність облікового запису
+    dormant: Неактивні
+    last_active: Крайня активність
+    most_recent: За часом створення
+    moved: Переміщено
+    mutual: Взаємні уподобання
+    primary: Первинні
+    relationship: Зв’язок
+    remove_selected_domains: Видалити усіх підписників з обраних доменів
+    remove_selected_followers: Видалити обраних підписників
+    remove_selected_follows: Не стежити за обраними користувачами
+    status: Статус облікового запису
   remote_follow:
     acct: Введіть username@domain, яким ви хочете підписатися
-    missing_resource: Пошук потрібного перенаправлення URL для Вашого аккаунта закінчився невдачею
-    no_account_html: Не маєте аккаунту? Не біда, ви можете <a href='%{sign_up_path}' target='_blank'>зареєструватися</a>
+    missing_resource: Не вдалося знайти необхідний URL переадресації для вашого облікового запису
+    no_account_html: Не маєте облікового запису? Ви можете <a href='%{sign_up_path}' target='_blank'>зареєструватися тут</a>
     proceed: Перейти до підписки
     prompt: 'Ви хочете підписатися на:'
+    reason_html: "<strong>Чому це необхідно?</strong> <code>%{instance}</code> можливо, не є сервером, на якому ви зареєстровані, тому ми маємо спрямувати вас до вашого домашнього сервера."
+  remote_interaction:
+    favourite:
+      proceed: Перейти до додавання в улюблені
+      prompt: 'Ви хочете зробити улюбленим цей дмух:'
+    reblog:
+      proceed: Перейти до передмухування
+      prompt: 'Ви хочете передмухнути цей дмух:'
+    reply:
+      proceed: Перейти до відповіді
+      prompt: 'Ви хочете відповісти на цей дмух:'
+  scheduled_statuses:
+    over_daily_limit: Ви перевищили ліміт в %{limit} запланованих дмухів на сьогодні
+    over_total_limit: Ви перевищили ліміт в %{limit} запланованих дмухів
+    too_soon: Запланована дата має бути в майбутньому
   sessions:
     activity: Остання активність
     browser: Браузер
     browsers:
+      alipay: Alipay
+      blackberry: Blackberry
+      chrome: Хром
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
       generic: Невідомий браузер
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Nokia S40 Ovi Browser
+      opera: Опера
+      otter: Otter
+      phantom_js: PhantomJS
+      qq: QQ Browser
+      safari: Сафарі
+      uc_browser: UCBrowser
+      weibo: Weibo
     current_session: Активна сесія
     description: "%{browser} на %{platform}"
-    explanation: Це веб-браузери, нині авторизовані до вашого аккаунту Mastodon.
+    explanation: Це веб-браузери, авторизовані у вашому обліковому записі 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: Сесії
   settings:
+    account: Обліковий запис
+    account_settings: Налаштування облікового запису
+    appearance: Вигляд
     authorized_apps: Авторизовані застосунки
-    back: Назад у Mastodon
-    delete: Видалення аккаунту
+    back: Назад до Mastodon
+    delete: Видалення облікового запису
     development: Розробка
     edit_profile: Редагувати профіль
     export: Експорт даних
+    featured_tags: Рекомендовані хештеґи
     import: Імпорт
-    migrate: Міграція акаунту
+    import_and_export: Імпорт та експорт
+    migrate: Міграція облікового запису
     notifications: Сповіщення
     preferences: Налаштування
+    profile: Профіль
+    relationships: Підписки та підписники
     two_factor_authentication: Двофакторна авторизація
+  spam_check:
+    spam_detected_and_silenced: Це автоматично згенерована скарга. Було виявлено розсилку спаму, відправник був автоматично заглушений. Якщо це помилка, зніміть заглушування з облікового запису.
   statuses:
     attached:
       description: 'Прикріплено: %{attached}'
+      image:
+        few: "%{count} зображень"
+        many: "%{count} зображень"
+        one: "%{count} зображення"
+        other: "%{count} зображення"
+      video:
+        few: "%{count} відео"
+        many: "%{count} відео"
+        one: "%{count} відео"
+        other: "%{count} відео"
     boosted_from_html: Просунуто від %{acct_link}
     content_warning: 'Попередження про контент: %{warning}'
+    disallowed_hashtags:
+      few: 'заборонених хештеґа: %{tags}'
+      many: 'заборонених хештеґів: %{tags}'
+      one: 'заборонений хештеґ: %{tags}'
+      other: 'заборонених хештеґів: %{tags}'
     language_detection: Автоматично визначати мову
     open_in_web: Відкрити у вебі
     over_character_limit: перевищено ліміт символів (%{max})
@@ -602,7 +961,16 @@ uk:
       ownership: Не можна закріпити чужий пост
       private: Не можна закріпити непублічний пост
       reblog: Не можна закріпити просунутий пост
+    poll:
+      total_votes:
+        few: "%{count} голоса"
+        many: "%{count} голосів"
+        one: "%{count} голос"
+        other: "%{count} голоси"
+      vote: Проголосувати
     show_more: Детальніше
+    sign_in_to_participate: Увійдіть, щоб брати участь у бесіді
+    title: '%{name}: "%{quote}"'
     visibilities:
       private: Для підписників
       private_long: Показувати тільки підписникам
@@ -613,13 +981,19 @@ uk:
   stream_entries:
     pinned: Закріплений пост
     reblogged: передмухнув(-ла)
-    sensitive_content: Несприйнятливий контент
+    sensitive_content: Дражливий контент
+  tags:
+    does_not_match_previous_name: не збігається з попереднім ім'ям
   terms:
     title: Умови використання та Політика приватності %{instance}
   themes:
     contrast: Висока контрасність
     default: Mastodon
     mastodon-light: Mastodon (світла)
+  time:
+    formats:
+      default: "%b %d, %Y, %H:%M"
+      month: "%b %Y"
   two_factor_authentication:
     code_hint: Для підтверждення введіть код, згенерований застосунком аутентифікатора
     description_html: При увімкненні <strong>двофакторної аутентифікації</strong>, вхід буде вимагати від Вас використовування Вашого телефона, який згенерує вхідний код.
@@ -629,36 +1003,57 @@ uk:
     enabled_success: Двофакторна аутентифікація успішно увімкнена
     generate_recovery_codes: Згенерувати коди відновлення
     instructions_html: "<strong>Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-застосунку на Вашому телефоні</strong>. З цього моменту він буде генерувати коди, які буде необхідно ввести для входу."
-    lost_recovery_codes: Коди відновлення дозволяють повернути доступ до акаунту у випадку втрати телефону. Якщо Ви втратили Ваші коди відновлення, Ви можете знову згенерувати їх тут. Тоді ваші старі коди відновлення будуть анульовані.
+    lost_recovery_codes: Коди відновлення дозволяють повернути доступ до вашого облікового запису у випадку втрати телефону. Якщо ви втратили ваші коди відновлення, ви можете знову згенерувати їх тут. Ваші старі коди відновлення будуть анульовані.
     manual_instructions: 'Якщо Ви не можете відсканувати QR-код та хочете ввести його вручну, секрет представлений тут відкритим текстом:'
     recovery_codes: Запасні коди відновлення
     recovery_codes_regenerated: Коди відновлення успішно згенеровані
-    recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з кодів відновлення, вказаних нижче, щоб повернути доступ до акаунту. Тримайте коди відновлення у безпеці, наприклад, роздруйте їх та зберігайте їх з іншими важливими документами.
+    recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з нижчевказаних кодів відновлення, щоб повернути доступ до вашого облікового запису. <strong>Тримайте коди відновлення у безпеці</strong>, наприклад, роздрукуйте їх та зберігайте разом з іншими важливими документами.
     setup: Налаштувати
     wrong_code: Введений код неправильний! Чи правильно встановлений час на сервері та пристрої?
   user_mailer:
     backup_ready:
-      explanation: Ви зробили запит на повний архів вашого аккаунту Mastodon. Він вже готовий для завантаження!
+      explanation: Ви робили запит повної резервної копії вашого облікового запису Mastodon. Вона вже готова для завантаження!
       subject: Ваш архів готовий до завантаження
       title: Винесення архіву
+    warning:
+      explanation:
+        disable: Поки ваш обліковий запис заморожений, його дані залишаються незмінними. Проте ви не зможете виконувати будь-які дії над обліковим записом, доки його не буде розблоковано.
+        silence: Поки ваш обліковий запис обмежено, ваші дмухи на цьому сервері бачитимуть лише ті люди, які вже слідкують за вами, а вас може бути виключено з різних публічних списків. Тим не менш, інші можуть слідкувати за вами вручну.
+        suspend: Ваш обліковий запис було призупинено, а всі ваші дмухи і вивантажені медіафайли - безповоротно видалено з цього сервера та серверів, де ви мали послідовників.
+      review_server_policies: Переглянути політики сервера
+      subject:
+        disable: Ваш обліковий запис %{acct} було заморожено
+        none: Попередження для %{acct}
+        silence: Ваш обліковий запис %{acct} було обмежено
+        suspend: Ваш обліковий запис %{acct} було призупинено
+      title:
+        disable: Обліковий запис заморожено
+        none: Попередження
+        silence: Ообліковий запис обмежено
+        suspend: Обліковий запис призупинено
     welcome:
       edit_profile_action: Налаштувати профіль
-      edit_profile_step: Ви можете налаштувати профіль під себе завантаживши аватар, шпалери, змінивши відображуване ім'я тощо. Якщо ви захочете переглядати нових підписників до того, як вони зможуть підписатися на вас, ви можете заблокувати свій аккаунт.
+      edit_profile_step: Ви можете налаштувати ваш профіль, завантаживши аватар, шпалери, змінивши відображуване ім'я тощо. Якщо ви захочете переглядати нових підписників до того, як вони зможуть підписатися на вас, ви можете заблокувати свій обліковий запис.
       explanation: Ось декілька порад для початку
       final_action: Почати постити
-      final_step: 'Почність постити! Навіть не підписавшись на вас, інші зможуть побачити ваші пости, наприкоал, у локальному фіді та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.'
+      final_step: 'Почність постити! Навіть не підписавшись на вас, інші зможуть побачити ваші пости, наприклад, у локальній стрічці та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.'
       full_handle: Ваше звернення
       full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів.
       review_preferences_action: Змінити налаштування
       review_preferences_step: Переконайтеся у тому, що ви налаштували все необхідне, як от які e-mail повідомлення ви хочете отримувати, або який рівень приватності ви хочете встановити вашим постам за замовчуванням. Якщо хочете, ви можете увімкнути автоматичне програвання GIF анімацій.
       subject: Ласкаво просимо до Mastodon
       tip_federated_timeline: Федерований фід є широким поглядом на мережу Mastodon. Але він включає лише людей, на яких підписані ваші сусіди по сайту, тому він не є повним.
-      tip_following: Ви автоматично підписані на адміністратора(-ів) сервера. Для того, щоб знайти ще цікавих людей, дослідіть локальний та федерований фіди.
+      tip_following: Ви автоматично підписані на адміністратора(-ів) сервера. Для того, щоб знайти ще цікавих людей, дослідіть локальну та глобальну стрічки.
       tip_local_timeline: Локальний фід - це погляд згори на людей на %{instance}. Це ваші прямі сусіди!
       tip_mobile_webapp: Якщо ваш мобільний браузер пропонує вам додати Mastodon на робочий стіл, ви можете отримувати push-сповіщення. Все може виглядати як нативний застосунок у багатьох речах.
       tips: Поради
       title: Ласкаво просимо, %{name}!
   users:
+    follow_limit_reached: Не можна слідкувати більш ніж за %{limit} людей
     invalid_email: Введена адреса e-mail неправильна
     invalid_otp_token: Введено неправильний код
     otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email}
+    seamless_external_login: Ви увійшли за допомогою зовнішнього сервісу, тому налаштування паролю та електронної пошти недоступні.
+    signed_in_as: 'Ви увійшли як:'
+  verification:
+    verification: Підтвердження
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 42ab59d50..e42c68055 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -90,7 +90,7 @@ zh-CN:
         title: 为 %{username} 更改电子邮件地址
       confirm: 确认
       confirmed: 已确认
-      confirming: 确认
+      confirming: 确认中
       deleted: 已删除
       demote: 降任
       disable: 停用
@@ -179,6 +179,7 @@ zh-CN:
       username: 用户名
       warn: 警告
       web: 站内页面
+      whitelisted: 已加入白名单
     action_logs:
       actions:
         assigned_to_self_report: "%{name} 接管了举报 %{target}"
@@ -246,10 +247,13 @@ zh-CN:
       feature_profile_directory: 用户目录
       feature_registrations: 公开注册
       feature_relay: 中继服务器
+      feature_spam_check: 反垃圾
       feature_timeline_preview: 时间轴预览
       features: 功能
       hidden_service: 匿名服务连通性
       open_reports: 待处理举报数
+      pending_tags: 等待审核的标签
+      pending_users: 等待审核的用户
       recent_users: 新用户
       search: 全文搜索
       single_user_mode: 单用户模式
@@ -261,6 +265,12 @@ zh-CN:
       week_interactions: 本周互动数
       week_users_active: 本周活跃用户数
       week_users_new: 本周新用户数
+      whitelist_mode: 白名单模式
+    domain_allows:
+      add_new: 白名单域名
+      created_msg: 域名已被列入白名单
+      destroyed_msg: 域名已从白名单中移除
+      undo: 从白名单中移除
     domain_blocks:
       add_new: 添加新屏蔽域名
       created_msg: 正在进行域名屏蔽
@@ -276,6 +286,8 @@ zh-CN:
           silence: 自动隐藏
           suspend: 自动封禁
         title: 添加域名屏蔽
+      private_comment: 私密评论
+      public_comment: 公开评论
       reject_media: 拒绝接收媒体文件
       reject_media_hint: 删除本地已缓存的媒体文件,并且不再接收来自该域名的任何媒体文件。此选项不影响封禁
       reject_reports: 拒绝接收举报
@@ -294,6 +306,7 @@ zh-CN:
         title: 撤销对 %{domain} 的域名屏蔽
         undo: 撤销
       undo: 撤销屏蔽域名
+      view: 查看域名屏蔽
     email_domain_blocks:
       add_new: 添加新条目
       created_msg: 电子邮件域名屏蔽添加成功
@@ -316,6 +329,8 @@ zh-CN:
         all: 全部
         limited: 受限的
         title: 运营
+      private_comment: 私密评论
+      public_comment: 公开评论
       title: 已知实例
       total_blocked_by_us: 被我方屏蔽的
       total_followed_by_them: 被对方关注的
@@ -443,6 +458,9 @@ zh-CN:
         desc_html: 可以填写自己的隐私权政策、使用条款或其他法律文本。可以使用 HTML 标签
         title: 自定义使用条款
       site_title: 本站名称
+      spam_check_enabled:
+        desc_html: Mastodon可以自动隐藏和举报重复发送垃圾消息的账户。但是本功能有可能误伤无辜。
+        title: 自动反垃圾
       thumbnail:
         desc_html: 用于在 OpenGraph 和 API 中显示预览图。推荐分辨率 1200×630px
         title: 本站缩略图
@@ -450,6 +468,8 @@ zh-CN:
         desc_html: 在主页显示公共时间轴
         title: 时间轴预览
       title: 网站设置
+      trends:
+        title: 热门标签
     statuses:
       back_to_account: 返回帐户信息页
       batch:
@@ -464,13 +484,13 @@ zh-CN:
       title: 帐户嘟文
       with_media: 含有媒体文件
     tags:
-      accounts: 帐户
-      hidden: 隐藏
-      hide: 从用户目录中隐藏
-      name: 话题标签
+      accounts_today: 今日活跃用户
+      accounts_week: 本周活跃用户
+      directory: 在目录中
+      reviewed: 已审核
       title: 话题标签
-      unhide: 在用户目录中显示
-      visible: 可见
+      trending_right_now: 当前热门
+      unreviewed: 未审核
     title: 管理
     warning_presets:
       add_new: 添加新条目
@@ -491,6 +511,7 @@ zh-CN:
     advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。
     animations_and_accessibility: 动画和访问选项
     confirmation_dialogs: 确认对话框
+    discovery: 发现
     sensitive_content: 敏感内容
   application_mailer:
     notification_preferences: 更改电子邮件首选项
@@ -511,7 +532,6 @@ zh-CN:
     apply_for_account: 请求邀请
     change_password: 密码
     checkbox_agreement_html: 我同意 <a href="%{rules_path}" target="_blank">服务器规则</a> 和 <a href="%{terms_path}" target="_blank">服务条款</a>
-    confirm_email: 确认电子邮件地址
     delete_account: 删除帐户
     delete_account_html: 如果你想删除你的帐户,请<a href="%{path}">点击这里继续</a>。你需要确认你的操作。
     didnt_get_confirmation: 没有收到确认邮件?
@@ -531,6 +551,11 @@ zh-CN:
     reset_password: 重置密码
     security: 帐户安全
     set_new_password: 设置新密码
+    setup:
+      title: 初始设置
+    status:
+      account_status: 帐户状态
+      confirming: 等待电子邮件确认完成。
     trouble_logging_in: 登录有问题?
   authorize_follow:
     already_following: 你已经在关注此用户了
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 520771da4..b1769871d 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -350,7 +350,6 @@ zh-HK:
     your_token: token
   auth:
     change_password: 密碼
-    confirm_email: 確認電郵
     delete_account: 刪除帳戶
     delete_account_html: 如果你想刪除你的帳戶,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。
     didnt_get_confirmation: 沒有收到確認指示電郵?
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 801ea7cea..b7a9a2ec2 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -424,7 +424,6 @@ zh-TW:
     your_token: 你的 token
   auth:
     change_password: 密碼
-    confirm_email: 確認電子信箱位址
     delete_account: 刪除帳戶
     delete_account_html: 如果你想刪除你的帳戶,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。
     didnt_get_confirmation: 沒有收到驗證信?
diff --git a/config/routes.rb b/config/routes.rb
index 160640e0e..789b5f502 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -435,9 +435,10 @@ Rails.application.routes.draw do
 
   get '/web/(*any)', to: 'home#index', as: :web
 
-  get '/about',      to: 'about#show'
-  get '/about/more', to: 'about#more'
-  get '/terms',      to: 'about#terms'
+  get '/about',        to: 'about#show'
+  get '/about/more',   to: 'about#more'
+  get '/about/blocks', to: 'about#blocks'
+  get '/terms',        to: 'about#terms'
 
   root 'home#index'
 
diff --git a/config/settings.yml b/config/settings.yml
index 70a9a3a44..0e615f8e8 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -72,6 +72,8 @@ defaults: &defaults
   show_replies_in_public_timelines: false
   default_content_type: 'text/plain'
   spam_check_enabled: true
+  show_domain_blocks: 'disabled'
+  show_domain_blocks_rationale: 'disabled'
 
 development:
   <<: *defaults
diff --git a/config/webpack/development.js b/config/webpack/development.js
index 1e50a4f46..56f6e43f0 100644
--- a/config/webpack/development.js
+++ b/config/webpack/development.js
@@ -56,5 +56,6 @@ module.exports = merge(sharedConfig, {
       settings.dev_server.watch_options,
       watchOptions
     ),
+    writeToDisk: filePath => /ocr/.test(filePath),
   },
 });
diff --git a/config/webpack/shared.js b/config/webpack/shared.js
index b6e2537b1..1741ffdb9 100644
--- a/config/webpack/shared.js
+++ b/config/webpack/shared.js
@@ -5,6 +5,7 @@ const { basename, dirname, join, relative, resolve } = require('path');
 const { sync } = require('glob');
 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const AssetsManifestPlugin = require('webpack-assets-manifest');
+const CopyPlugin = require('copy-webpack-plugin');
 const { env, settings, core, flavours, output } = require('./configuration.js');
 const rules = require('./rules');
 const localePacks = require('./generateLocalePacks');
@@ -109,6 +110,10 @@ module.exports = {
       writeToDisk: true,
       publicPath: true,
     }),
+    new CopyPlugin([
+      { from: 'node_modules/tesseract.js/dist/worker.min.js', to: 'ocr' },
+      { from: 'node_modules/tesseract.js-core/tesseract-core.wasm.js', to: 'ocr' },
+    ]),
   ],
 
   resolve: {
diff --git a/db/migrate/20190403141604_add_comment_to_invites.rb b/db/migrate/20190403141604_add_comment_to_invites.rb
new file mode 100644
index 000000000..f0d7b1dcd
--- /dev/null
+++ b/db/migrate/20190403141604_add_comment_to_invites.rb
@@ -0,0 +1,5 @@
+class AddCommentToInvites < ActiveRecord::Migration[5.2]
+  def change
+    add_column :invites, :comment, :text
+  end
+end
diff --git a/db/migrate/20190815225426_add_last_status_at_to_tags.rb b/db/migrate/20190815225426_add_last_status_at_to_tags.rb
new file mode 100644
index 000000000..d83537c47
--- /dev/null
+++ b/db/migrate/20190815225426_add_last_status_at_to_tags.rb
@@ -0,0 +1,6 @@
+class AddLastStatusAtToTags < ActiveRecord::Migration[5.2]
+  def change
+    add_column :tags, :last_status_at, :datetime
+    add_column :tags, :last_trend_at, :datetime
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index e87c6831f..7e62fe1f5 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2019_08_07_135426) do
+ActiveRecord::Schema.define(version: 2019_08_15_225426) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -354,6 +354,7 @@ ActiveRecord::Schema.define(version: 2019_08_07_135426) do
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
     t.boolean "autofollow", default: false, null: false
+    t.text "comment"
     t.index ["code"], name: "index_invites_on_code", unique: true
     t.index ["user_id"], name: "index_invites_on_user_id"
   end
@@ -680,6 +681,8 @@ ActiveRecord::Schema.define(version: 2019_08_07_135426) do
     t.boolean "listable"
     t.datetime "reviewed_at"
     t.datetime "requested_review_at"
+    t.datetime "last_status_at"
+    t.datetime "last_trend_at"
     t.index "lower((name)::text)", name: "index_tags_on_name_lower", unique: true
   end
 
diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb
index 7d0215313..d1854acc0 100644
--- a/lib/mastodon/accounts_cli.rb
+++ b/lib/mastodon/accounts_cli.rb
@@ -314,11 +314,15 @@ module Mastodon
 
     desc 'follow ACCT', 'Make all local accounts follow account specified by ACCT'
     long_desc <<-LONG_DESC
-      Make all local accounts follow an account specified by ACCT. ACCT can be
-      a simple username, in case of a local user. It can also be in the format
-      username@domain, in case of a remote user.
+      Make all local accounts follow another local account specified by ACCT.
+      ACCT should be the username only.
     LONG_DESC
     def follow(acct)
+      if acct.include? '@'
+        say('Target account name should not contain a target instance, since it has to be a local account.', :red)
+        exit(1)
+      end
+
       target_account = ResolveAccountService.new.call(acct)
       processed      = 0
       failed         = 0
diff --git a/lib/mastodon/cache_cli.rb b/lib/mastodon/cache_cli.rb
index e9b6667b3..5b0eea91b 100644
--- a/lib/mastodon/cache_cli.rb
+++ b/lib/mastodon/cache_cli.rb
@@ -15,5 +15,50 @@ module Mastodon
       Rails.cache.clear
       say('OK', :green)
     end
+
+    desc 'recount TYPE', 'Update hard-cached counters'
+    long_desc <<~LONG_DESC
+      Update hard-cached counters of TYPE by counting referenced
+      records from scratch. TYPE can be "accounts" or "statuses".
+
+      It may take a very long time to finish, depending on the
+      size of the database.
+    LONG_DESC
+    def recount(type)
+      processed = 0
+
+      case type
+      when 'accounts'
+        Account.local.includes(:account_stat).find_each do |account|
+          account_stat                 = account.account_stat
+          account_stat.following_count = account.active_relationships.count
+          account_stat.followers_count = account.passive_relationships.count
+          account_stat.statuses_count  = account.statuses.where.not(visibility: :direct).count
+
+          account_stat.save if account_stat.changed?
+
+          processed += 1
+          say('.', :green, false)
+        end
+      when 'statuses'
+        Status.includes(:status_stat).find_each do |status|
+          status_stat                  = status.status_stat
+          status_stat.replies_count    = status.replies.where.not(visibility: :direct).count
+          status_stat.reblogs_count    = status.reblogs.count
+          status_stat.favourites_count = status.favourites.count
+
+          status_stat.save if status_stat.changed?
+
+          processed += 1
+          say('.', :green, false)
+        end
+      else
+        say("Unknown type: #{type}", :red)
+        exit(1)
+      end
+
+      say
+      say("OK, recounted #{processed} records", :green)
+    end
   end
 end
diff --git a/package.json b/package.json
index 061234a31..6bbe87f11 100644
--- a/package.json
+++ b/package.json
@@ -86,6 +86,7 @@
     "blurhash": "^1.0.0",
     "classnames": "^2.2.5",
     "compression-webpack-plugin": "^3.0.0",
+    "copy-webpack-plugin": "^5.0.4",
     "cross-env": "^5.1.4",
     "css-loader": "^3.2.0",
     "cssnano": "^4.1.10",
@@ -96,8 +97,8 @@
     "escape-html": "^1.0.3",
     "exif-js": "^2.3.0",
     "express": "^4.17.1",
+    "file-loader": "^4.2.0",
     "favico.js": "^0.3.10",
-    "file-loader": "^4.1.0",
     "font-awesome": "^4.7.0",
     "glob": "^7.1.1",
     "http-link-header": "^1.0.2",
@@ -137,7 +138,7 @@
     "react-notification": "^6.8.4",
     "react-overlays": "^0.8.3",
     "react-redux": "^7.1.0",
-    "react-redux-loading-bar": "^4.0.8",
+    "react-redux-loading-bar": "^4.4.0",
     "react-router-dom": "^4.1.1",
     "react-router-scroll-4": "^1.0.0-beta.1",
     "react-select": "^2.4.4",
@@ -146,18 +147,19 @@
     "react-textarea-autosize": "^7.1.0",
     "react-toggle": "^4.0.1",
     "redis": "^2.7.1",
-    "redux": "^4.0.1",
+    "redux": "^4.0.4",
     "redux-immutable": "^4.0.0",
     "redux-thunk": "^2.2.0",
     "rellax": "^1.10.0",
     "requestidlecallback": "^0.3.0",
     "reselect": "^4.0.0",
-    "rimraf": "^2.6.3",
+    "rimraf": "^3.0.0",
     "sass": "^1.22.9",
     "sass-loader": "^7.0.3",
     "stringz": "^2.0.0",
     "substring-trie": "^1.0.2",
     "terser-webpack-plugin": "^1.4.1",
+    "tesseract.js": "^2.0.0-alpha.13",
     "throng": "^4.0.0",
     "tiny-queue": "^0.2.1",
     "uuid": "^3.1.0",
diff --git a/public/ocr/lang-data/eng.traineddata.gz b/public/ocr/lang-data/eng.traineddata.gz
new file mode 100644
index 000000000..e83c12676
--- /dev/null
+++ b/public/ocr/lang-data/eng.traineddata.gz
Binary files differdiff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb
index f43cf0c27..941f1dd91 100644
--- a/spec/controllers/home_controller_spec.rb
+++ b/spec/controllers/home_controller_spec.rb
@@ -27,16 +27,6 @@ RSpec.describe HomeController, type: :controller do
         subject
         expect(assigns(:body_classes)).to eq 'app-body'
       end
-
-      it 'assigns @initial_state_json' do
-        subject
-        initial_state_json = json_str_to_hash(assigns(:initial_state_json))
-        expect(initial_state_json[:meta]).to_not be_nil
-        expect(initial_state_json[:compose]).to_not be_nil
-        expect(initial_state_json[:accounts]).to_not be_nil
-        expect(initial_state_json[:settings]).to_not be_nil
-        expect(initial_state_json[:media_attachments]).to_not be_nil
-      end
     end
   end
 end
diff --git a/spec/controllers/shares_controller_spec.rb b/spec/controllers/shares_controller_spec.rb
index a74e9af56..d6de3016a 100644
--- a/spec/controllers/shares_controller_spec.rb
+++ b/spec/controllers/shares_controller_spec.rb
@@ -7,15 +7,12 @@ describe SharesController do
   before { sign_in user }
 
   describe 'GTE #show' do
-    subject(:initial_state_json) { JSON.parse(assigns(:initial_state_json), symbolize_names: true) }
     subject(:body_classes) { assigns(:body_classes) }
 
     before { get :show, params: { title: 'test title', text: 'test text', url: 'url1 url2' } }
 
-    it 'assigns json' do
+    it 'returns http success' do
       expect(response).to have_http_status :ok
-      expect(initial_state_json[:compose][:text]).to eq 'test title test text url1 url2'
-      expect(initial_state_json[:meta][:me]).to eq user.account.id.to_s
       expect(body_classes).to eq 'modal-layout compose-standalone'
     end
   end
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
index 9d700849b..2bb30fb57 100644
--- a/spec/models/tag_spec.rb
+++ b/spec/models/tag_spec.rb
@@ -136,8 +136,8 @@ RSpec.describe Tag, type: :model do
     end
 
     it 'finds the exact matching tag as the first item' do
-      similar_tag = Fabricate(:tag, name: "matchlater", score: 1)
-      tag = Fabricate(:tag, name: "match", score: 1)
+      similar_tag = Fabricate(:tag, name: "matchlater", reviewed_at: Time.now.utc)
+      tag = Fabricate(:tag, name: "match", reviewed_at: Time.now.utc)
 
       results = Tag.search_for("match")
 
diff --git a/spec/services/account_search_service_spec.rb b/spec/services/account_search_service_spec.rb
index 7b071b378..5b7182586 100644
--- a/spec/services/account_search_service_spec.rb
+++ b/spec/services/account_search_service_spec.rb
@@ -1,126 +1,56 @@
 require 'rails_helper'
 
 describe AccountSearchService, type: :service do
-  describe '.call' do
-    describe 'with a query to ignore' do
+  describe '#call' do
+    context 'with a query to ignore' do
       it 'returns empty array for missing query' do
         results = subject.call('', nil, limit: 10)
 
         expect(results).to eq []
       end
-      it 'returns empty array for hashtag query' do
-        results = subject.call('#tag', nil, limit: 10)
 
-        expect(results).to eq []
-      end
       it 'returns empty array for limit zero' do
         Fabricate(:account, username: 'match')
+
         results = subject.call('match', nil, limit: 0)
 
         expect(results).to eq []
       end
     end
 
-    describe 'searching for a simple term that is not an exact match' do
+    context 'searching for a simple term that is not an exact match' do
       it 'does not return a nil entry in the array for the exact match' do
-        match = Fabricate(:account, username: 'matchingusername')
-
+        account = Fabricate(:account, username: 'matchingusername')
         results = subject.call('match', nil, limit: 5)
-        expect(results).to eq [match]
-      end
-    end
 
-    describe 'searching local and remote users' do
-      describe "when only '@'" do
-        before do
-          allow(Account).to receive(:find_local)
-          allow(Account).to receive(:search_for)
-          subject.call('@', nil, limit: 10)
-        end
-
-        it 'uses find_local with empty query to look for local accounts' do
-          expect(Account).to have_received(:find_local).with('')
-        end
-      end
-
-      describe 'when no domain' do
-        before do
-          allow(Account).to receive(:find_local)
-          allow(Account).to receive(:search_for)
-          subject.call('one', nil, limit: 10)
-        end
-
-        it 'uses find_local to look for local accounts' do
-          expect(Account).to have_received(:find_local).with('one')
-        end
-
-        it 'uses search_for to find matches' do
-          expect(Account).to have_received(:search_for).with('one', 10, 0)
-        end
-      end
-
-      describe 'when there is a domain' do
-        before do
-          allow(Account).to receive(:find_remote)
-        end
-
-        it 'uses find_remote to look for remote accounts' do
-          subject.call('two@example.com', nil, limit: 10)
-          expect(Account).to have_received(:find_remote).with('two', 'example.com')
-        end
-
-        describe 'and there is no account provided' do
-          it 'uses search_for to find matches' do
-            allow(Account).to receive(:search_for)
-            subject.call('two@example.com', nil, limit: 10, resolve: false)
-
-            expect(Account).to have_received(:search_for).with('two example.com', 10, 0)
-          end
-        end
-
-        describe 'and there is an account provided' do
-          it 'uses advanced_search_for to find matches' do
-            account = Fabricate(:account)
-            allow(Account).to receive(:advanced_search_for)
-            subject.call('two@example.com', account, limit: 10, resolve: false)
-
-            expect(Account).to have_received(:advanced_search_for).with('two example.com', account, 10, nil, 0)
-          end
-        end
+        expect(results).to eq [account]
       end
     end
 
-    describe 'with an exact match' do
-      it 'returns exact match first, and does not return duplicates' do
-        partial = Fabricate(:account, username: 'exactness')
-        exact = Fabricate(:account, username: 'exact')
-
-        results = subject.call('exact', nil, limit: 10)
-        expect(results.size).to eq 2
-        expect(results).to eq [exact, partial]
-      end
-    end
-
-    describe 'when there is a local domain' do
+    context 'when there is a local domain' do
       around do |example|
         before = Rails.configuration.x.local_domain
+
         example.run
+
         Rails.configuration.x.local_domain = before
       end
 
       it 'returns exact match first' do
         remote     = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e')
         remote_too = Fabricate(:account, username: 'b', domain: 'remote', display_name: 'e')
-        exact = Fabricate(:account, username: 'e')
+        exact      = Fabricate(:account, username: 'e')
+
         Rails.configuration.x.local_domain = 'example.com'
 
         results = subject.call('e@example.com', nil, limit: 2)
+
         expect(results.size).to eq 2
         expect(results).to eq([exact, remote]).or eq([exact, remote_too])
       end
     end
 
-    describe 'when there is a domain but no exact match' do
+    context 'when there is a domain but no exact match' do
       it 'follows the remote account when resolve is true' do
         service = double(call: nil)
         allow(ResolveAccountService).to receive(:new).and_return(service)
@@ -138,23 +68,21 @@ describe AccountSearchService, type: :service do
       end
     end
 
-    describe 'should not include suspended accounts' do
-      it 'returns the fuzzy match first, and does not return suspended exacts' do
-        partial = Fabricate(:account, username: 'exactness')
-        exact = Fabricate(:account, username: 'exact', suspended: true)
+    it 'returns the fuzzy match first, and does not return suspended exacts' do
+      partial = Fabricate(:account, username: 'exactness')
+      exact   = Fabricate(:account, username: 'exact', suspended: true)
+      results = subject.call('exact', nil, limit: 10)
 
-        results = subject.call('exact', nil, limit: 10)
-        expect(results.size).to eq 1
-        expect(results).to eq [partial]
-      end
+      expect(results.size).to eq 1
+      expect(results).to eq [partial]
+    end
 
-      it "does not return suspended remote accounts" do
-        remote = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e', suspended: true)
+    it "does not return suspended remote accounts" do
+      remote  = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e', suspended: true)
+      results = subject.call('a@example.com', nil, limit: 2)
 
-        results = subject.call('a@example.com', nil, limit: 2)
-        expect(results.size).to eq 0
-        expect(results).to eq []
-      end
+      expect(results.size).to eq 0
+      expect(results).to eq []
     end
   end
 end
diff --git a/yarn.lock b/yarn.lock
index 58cbfecbc..931d53cad 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1731,6 +1731,14 @@ aws4@^1.8.0:
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
   integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
 
+axios@^0.18.0:
+  version "0.18.1"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
+  integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
+  dependencies:
+    follow-redirects "1.5.10"
+    is-buffer "^2.0.2"
+
 axios@^0.19.0:
   version "0.19.0"
   resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
@@ -1979,6 +1987,11 @@ blurhash@^1.0.0:
   resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.0.0.tgz#9087bc5cc4d482f1305059d7410df4133adcab2e"
   integrity sha512-x6fpZnd6AWde4U9m7xhUB44qIvGV4W6OdTAXGabYm4oZUOOGh5K1HAEoGAQn3iG4gbbPn9RSGce3VfNgGsX/Vw==
 
+bmp-js@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
+  integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
+
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
@@ -2216,6 +2229,26 @@ cacache@^11.2.0:
     unique-filename "^1.1.1"
     y18n "^4.0.0"
 
+cacache@^11.3.3:
+  version "11.3.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
+  integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
+  dependencies:
+    bluebird "^3.5.5"
+    chownr "^1.1.1"
+    figgy-pudding "^3.5.1"
+    glob "^7.1.4"
+    graceful-fs "^4.1.15"
+    lru-cache "^5.1.1"
+    mississippi "^3.0.0"
+    mkdirp "^0.5.1"
+    move-concurrently "^1.0.1"
+    promise-inflight "^1.0.1"
+    rimraf "^2.6.3"
+    ssri "^6.0.1"
+    unique-filename "^1.1.1"
+    y18n "^4.0.0"
+
 cacache@^12.0.2:
   version "12.0.2"
   resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c"
@@ -2345,7 +2378,7 @@ chardet@^0.7.0:
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
   integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
 
-check-types@^7.3.0:
+check-types@^7.3.0, check-types@^7.4.0:
   version "7.4.0"
   resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
   integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==
@@ -2695,6 +2728,24 @@ copy-descriptor@^0.1.0:
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
   integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
 
+copy-webpack-plugin@^5.0.4:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz#c78126f604e24f194c6ec2f43a64e232b5d43655"
+  integrity sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==
+  dependencies:
+    cacache "^11.3.3"
+    find-cache-dir "^2.1.0"
+    glob-parent "^3.1.0"
+    globby "^7.1.1"
+    is-glob "^4.0.1"
+    loader-utils "^1.2.3"
+    minimatch "^3.0.4"
+    normalize-path "^3.0.0"
+    p-limit "^2.2.0"
+    schema-utils "^1.0.0"
+    serialize-javascript "^1.7.0"
+    webpack-log "^2.0.0"
+
 core-js-compat@^3.1.1:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14"
@@ -3278,6 +3329,13 @@ diffie-hellman@^5.0.0:
     miller-rabin "^4.0.0"
     randombytes "^2.0.0"
 
+dir-glob@^2.0.0:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+  dependencies:
+    path-type "^3.0.0"
+
 discontinuous-range@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
@@ -4222,14 +4280,19 @@ file-entry-cache@^5.0.1:
   dependencies:
     flat-cache "^2.0.1"
 
-file-loader@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.1.0.tgz#3a763391bc9502da7c59612fe348e38fc1980336"
-  integrity sha512-ajDk1nlByoalZAGR4b0H6oD+EGlWnyW1qbSxzaUc7RFiqmn+RbXQQRbTc72jsiUIlVusJ4Et58ltds8ZwTfnAw==
+file-loader@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e"
+  integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==
   dependencies:
     loader-utils "^1.2.3"
     schema-utils "^2.0.0"
 
+file-type@^10.5.0:
+  version "10.11.0"
+  resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
+  integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
+
 filesize@^3.6.1:
   version "3.6.1"
   resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
@@ -4652,6 +4715,18 @@ globby@^6.1.0:
     pify "^2.0.0"
     pinkie-promise "^2.0.0"
 
+globby@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+  integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA=
+  dependencies:
+    array-union "^1.0.1"
+    dir-glob "^2.0.0"
+    glob "^7.1.2"
+    ignore "^3.3.5"
+    pify "^3.0.0"
+    slash "^1.0.0"
+
 globule@^1.0.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
@@ -4989,6 +5064,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
   dependencies:
     postcss "^7.0.14"
 
+idb-keyval@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6"
+  integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==
+
 ieee754@^1.1.4:
   version "1.1.12"
   resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
@@ -5006,7 +5086,7 @@ ignore-walk@^3.0.1:
   dependencies:
     minimatch "^3.0.4"
 
-ignore@^3.1.2:
+ignore@^3.1.2, ignore@^3.3.5:
   version "3.3.10"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
   integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
@@ -5548,6 +5628,16 @@ is-typedarray@~1.0.0:
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
   integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
 
+is-url@1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
+  integrity sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=
+
+is-url@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
 is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@@ -6826,6 +6916,11 @@ node-fetch@^1.0.1:
     encoding "^0.1.11"
     is-stream "^1.0.1"
 
+node-fetch@^2.3.0:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
+  integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+
 node-forge@0.7.5:
   version "0.7.5"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
@@ -7165,6 +7260,11 @@ onetime@^2.0.0:
   dependencies:
     mimic-fn "^1.0.0"
 
+opencollective-postinstall@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
+  integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
+
 opener@^1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
@@ -8431,10 +8531,10 @@ react-overlays@^0.8.3:
     react-transition-group "^2.2.0"
     warning "^3.0.0"
 
-react-redux-loading-bar@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-4.0.8.tgz#e84d59d1517b79f53b0f39c8ddb40682af648c1b"
-  integrity sha512-BpR1tlYrYKFtGhxa7nAKc0dpcV33ZgXJ/jKNLpDDaxu2/cCxbkWQt9YlWT+VLw1x/7qyNYY4DH48bZdtmciSpg==
+react-redux-loading-bar@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-4.4.0.tgz#630f1e3ada7a15d461021d58d8ea935901dba104"
+  integrity sha512-kcR+wT2eA3+bQD7Gpn7KcHcnANHkayLQGiePEU4JFnLq6sQqjlcE3n8DAUEGjTV+T+Gwlt3rMq/zfImq5yc0PA==
   dependencies:
     prop-types "^15.6.2"
     react-lifecycles-compat "^3.0.2"
@@ -8698,10 +8798,10 @@ redux-thunk@^2.2.0:
   resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
   integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
 
-redux@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5"
-  integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==
+redux@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796"
+  integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==
   dependencies:
     loose-envify "^1.4.0"
     symbol-observable "^1.2.0"
@@ -8992,6 +9092,13 @@ rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf
   dependencies:
     glob "^7.1.3"
 
+rimraf@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b"
+  integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==
+  dependencies:
+    glob "^7.1.3"
+
 ripemd160@^2.0.0, ripemd160@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -9872,6 +9979,37 @@ terser@^4.1.2:
     source-map "~0.6.1"
     source-map-support "~0.5.12"
 
+tesseract.js-core@^2.0.0-beta.10:
+  version "2.0.0-beta.10"
+  resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.0.0-beta.10.tgz#b8f0dd2be4686650c4350f648900adccfaf58d6b"
+  integrity sha512-QmNgMA9m5ES5uMTqpOAPysrUA80vUx/6WKQlfkK3zhOeAgqv8DjwwcDv9tQv2TgRzOQ+LFKrJn94Y2rw5b2IGw==
+
+tesseract.js-utils@^1.0.0-beta.8:
+  version "1.0.0-beta.8"
+  resolved "https://registry.yarnpkg.com/tesseract.js-utils/-/tesseract.js-utils-1.0.0-beta.8.tgz#d1ef25c12609a337c3e0ac12a33f9903f3145a68"
+  integrity sha512-qjHBfWfzo2o1ZY9XI0Wh2hmpp38+mIgCMOk60W5Yyie/pBl421VLBKOZUEwQgpbLnOJ24VU6Q8yXsVgtFFHcFg==
+  dependencies:
+    axios "^0.18.0"
+    bmp-js "^0.1.0"
+    file-type "^10.5.0"
+    idb-keyval "^3.1.0"
+    is-url "^1.2.4"
+    zlibjs "^0.3.1"
+
+tesseract.js@^2.0.0-alpha.13:
+  version "2.0.0-alpha.13"
+  resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.0.0-alpha.13.tgz#87bb3d71fe646c0993b073552241d203d9dfef3a"
+  integrity sha512-ZFEdak7jWtN5vIDwZcw8OdAqA7RvG0QRailZKQFS5rtnl/Yy5vC4WcqfJh9+o+cA3bdr2zV5SENoWDtEihlSVA==
+  dependencies:
+    axios "^0.18.0"
+    check-types "^7.4.0"
+    is-url "1.2.2"
+    node-fetch "^2.3.0"
+    opencollective-postinstall "^2.0.2"
+    resolve-url "^0.2.1"
+    tesseract.js-core "^2.0.0-beta.10"
+    tesseract.js-utils "^1.0.0-beta.8"
+
 test-exclude@^5.0.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1"
@@ -10734,3 +10872,8 @@ yargs@^13.3.0:
     which-module "^2.0.0"
     y18n "^4.0.0"
     yargs-parser "^13.1.1"
+
+zlibjs@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554"
+  integrity sha1-UBl+2yihxCymWcyLTmqd3W1ERVQ=