diff --git a/.github/workflows/bundler-audit.yml b/.github/workflows/bundler-audit.yml
index 2341d6e67..fa28d28f7 100644
--- a/.github/workflows/bundler-audit.yml
+++ b/.github/workflows/bundler-audit.yml
@@ -36,4 +36,4 @@ jobs:
           bundler-cache: true
 
       - name: Run bundler-audit
-        run: bundle exec bundler-audit check --update
+        run: bin/bundler-audit check --update
diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml
index 7c1004329..4f87f0fe5 100644
--- a/.github/workflows/check-i18n.yml
+++ b/.github/workflows/check-i18n.yml
@@ -35,18 +35,18 @@ jobs:
           git diff --exit-code
 
       - name: Check locale file normalization
-        run: bundle exec i18n-tasks check-normalized
+        run: bin/i18n-tasks check-normalized
 
       - name: Check for unused strings
-        run: bundle exec i18n-tasks unused
+        run: bin/i18n-tasks unused
 
       - name: Check for missing strings in English YML
         run: |
-          bundle exec i18n-tasks add-missing -l en
+          bin/i18n-tasks add-missing -l en
           git diff --exit-code
 
       - name: Check for wrong string interpolations
-        run: bundle exec i18n-tasks check-consistent-interpolations
+        run: bin/i18n-tasks check-consistent-interpolations
 
       - name: Check that all required locale files exist
-        run: bundle exec rake repo:check_locales_files
+        run: bin/rake repo:check_locales_files
diff --git a/.github/workflows/crowdin-download-stable.yml b/.github/workflows/crowdin-download-stable.yml
index de21e2e58..ef28258cc 100644
--- a/.github/workflows/crowdin-download-stable.yml
+++ b/.github/workflows/crowdin-download-stable.yml
@@ -46,7 +46,7 @@ jobs:
         uses: ./.github/actions/setup-ruby
 
       - name: Run i18n normalize task
-        run: bundle exec i18n-tasks normalize
+        run: bin/i18n-tasks normalize
 
       # Create or update the pull request
       - name: Create Pull Request
diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml
index 900899dd5..e9b909b9e 100644
--- a/.github/workflows/crowdin-download.yml
+++ b/.github/workflows/crowdin-download.yml
@@ -48,7 +48,7 @@ jobs:
         uses: ./.github/actions/setup-ruby
 
       - name: Run i18n normalize task
-        run: bundle exec i18n-tasks normalize
+        run: bin/i18n-tasks normalize
 
       # Create or update the pull request
       - name: Create Pull Request
diff --git a/.github/workflows/lint-haml.yml b/.github/workflows/lint-haml.yml
index a1a9e99c9..499be2010 100644
--- a/.github/workflows/lint-haml.yml
+++ b/.github/workflows/lint-haml.yml
@@ -43,4 +43,4 @@ jobs:
       - name: Run haml-lint
         run: |
           echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
-          bundle exec haml-lint --reporter github
+          bin/haml-lint --reporter github
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0696f0b31..ebc166a48 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -68,7 +68,7 @@ The following changelog entries focus on changes visible to users, administrator
   - `GET /api/v2/notifications`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-grouped
   - `GET /api/v2/notifications/:group_key`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-notification-group
   - `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts
-  - `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
+  - `POST /api/v2/notifications/:group_key/dismiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
   - `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count
 - **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
   The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\
@@ -399,7 +399,7 @@ The following changelog entries focus on changes visible to users, administrator
 - Fix empty environment variables not using default nil value (#27400 by @renchap)
 - Fix language sorting in settings (#27158 by @gunchleoc)
 
-## |4.2.11] - 2024-08-16
+## [4.2.11] - 2024-08-16
 
 ### Added
 
diff --git a/Dockerfile b/Dockerfile
index dcc4d68bb..6f0488df1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-# syntax=docker/dockerfile:1.10
+# syntax=docker/dockerfile:1.12
 
 # This file is designed for production server deployment, not local development work
 # For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker
diff --git a/Gemfile.lock b/Gemfile.lock
index 842d25dd1..701ddd782 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -54,7 +54,7 @@ GEM
       erubi (~> 1.11)
       rails-dom-testing (~> 2.2)
       rails-html-sanitizer (~> 1.6)
-    active_model_serializers (0.10.14)
+    active_model_serializers (0.10.15)
       actionpack (>= 4.1)
       activemodel (>= 4.1)
       case_transform (>= 0.2)
@@ -93,10 +93,9 @@ GEM
     annotaterb (4.13.0)
     ast (2.4.2)
     attr_required (1.0.2)
-    awrence (1.2.1)
     aws-eventstream (1.3.0)
-    aws-partitions (1.1012.0)
-    aws-sdk-core (3.213.0)
+    aws-partitions (1.1015.0)
+    aws-sdk-core (3.214.0)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.992.0)
       aws-sigv4 (~> 1.9)
@@ -104,7 +103,7 @@ GEM
     aws-sdk-kms (1.96.0)
       aws-sdk-core (~> 3, >= 3.210.0)
       aws-sigv4 (~> 1.5)
-    aws-sdk-s3 (1.173.0)
+    aws-sdk-s3 (1.175.0)
       aws-sdk-core (~> 3, >= 3.210.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.5)
@@ -346,10 +345,12 @@ GEM
     json-ld-preloaded (3.3.1)
       json-ld (~> 3.3)
       rdf (~> 3.3)
-    json-schema (5.1.0)
+    json-schema (5.1.1)
       addressable (~> 2.8)
+      bigdecimal (~> 3.1)
     jsonapi-renderer (0.2.2)
-    jwt (2.7.1)
+    jwt (2.9.3)
+      base64
     kaminari (1.2.2)
       activesupport (>= 4.1.0)
       kaminari-actionview (= 1.2.2)
@@ -407,8 +408,8 @@ GEM
       mime-types-data (~> 3.2015)
     mime-types-data (3.2024.1105)
     mini_mime (1.1.5)
-    mini_portile2 (2.8.7)
-    minitest (5.25.1)
+    mini_portile2 (2.8.8)
+    minitest (5.25.2)
     msgpack (1.7.5)
     multi_json (1.15.0)
     mutex_m (0.3.0)
@@ -425,7 +426,7 @@ GEM
     net-smtp (0.5.0)
       net-protocol
     nio4r (2.7.4)
-    nokogiri (1.16.7)
+    nokogiri (1.16.8)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     oj (3.16.7)
@@ -472,7 +473,7 @@ GEM
       opentelemetry-common (~> 0.20)
       opentelemetry-sdk (~> 1.2)
       opentelemetry-semantic_conventions
-    opentelemetry-helpers-sql-obfuscation (0.2.0)
+    opentelemetry-helpers-sql-obfuscation (0.2.1)
       opentelemetry-common (~> 0.21)
     opentelemetry-instrumentation-action_mailer (0.2.0)
       opentelemetry-api (~> 1.0)
@@ -492,7 +493,7 @@ GEM
     opentelemetry-instrumentation-active_model_serializers (0.20.2)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-active_record (0.8.0)
+    opentelemetry-instrumentation-active_record (0.8.1)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
     opentelemetry-instrumentation-active_support (0.6.0)
@@ -505,29 +506,29 @@ GEM
     opentelemetry-instrumentation-concurrent_ruby (0.21.4)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-excon (0.22.4)
+    opentelemetry-instrumentation-excon (0.22.5)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-faraday (0.24.6)
+    opentelemetry-instrumentation-faraday (0.24.7)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-http (0.23.4)
+    opentelemetry-instrumentation-http (0.23.5)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-http_client (0.22.7)
+    opentelemetry-instrumentation-http_client (0.22.8)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-net_http (0.22.7)
+    opentelemetry-instrumentation-net_http (0.22.8)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-pg (0.29.0)
+    opentelemetry-instrumentation-pg (0.29.1)
       opentelemetry-api (~> 1.0)
       opentelemetry-helpers-sql-obfuscation
       opentelemetry-instrumentation-base (~> 0.22.1)
     opentelemetry-instrumentation-rack (0.25.0)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-rails (0.33.0)
+    opentelemetry-instrumentation-rails (0.33.1)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-action_mailer (~> 0.2.0)
       opentelemetry-instrumentation-action_pack (~> 0.10.0)
@@ -752,7 +753,7 @@ GEM
       activerecord (>= 4.0.0)
       railties (>= 4.0.0)
     securerandom (0.3.2)
-    selenium-webdriver (4.26.0)
+    selenium-webdriver (4.27.0)
       base64 (~> 0.2)
       logger (~> 1.4)
       rexml (~> 3.2, >= 3.2.5)
@@ -844,9 +845,8 @@ GEM
       public_suffix
     warden (1.2.9)
       rack (>= 2.0.9)
-    webauthn (3.1.0)
+    webauthn (3.2.2)
       android_key_attestation (~> 0.3.0)
-      awrence (~> 1.1)
       bindata (~> 2.4)
       cbor (~> 0.5.9)
       cose (~> 1.1)
@@ -1031,7 +1031,7 @@ DEPENDENCIES
   xorcist (~> 1.1)
 
 RUBY VERSION
-   ruby 3.3.5p100
+   ruby 3.3.6p108
 
 BUNDLED WITH
-   2.5.22
+   2.5.23
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index d493bd43b..7a858ed05 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -22,7 +22,6 @@ class ApplicationController < ActionController::Base
   helper_method :use_seamless_external_login?
   helper_method :sso_account_settings
   helper_method :limited_federation_mode?
-  helper_method :body_class_string
   helper_method :skip_csrf_meta_tags?
 
   rescue_from ActionController::ParameterMissing, Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
@@ -158,10 +157,6 @@ class ApplicationController < ActionController::Base
     current_user.setting_theme
   end
 
-  def body_class_string
-    @body_classes || ''
-  end
-
   def respond_with_error(code)
     respond_to do |format|
       format.any  { render "errors/#{code}", layout: 'error', status: code, formats: [:html] }
diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb
index 1823b5b8e..b1b09f2aa 100644
--- a/app/controllers/concerns/cache_concern.rb
+++ b/app/controllers/concerns/cache_concern.rb
@@ -28,7 +28,7 @@ module CacheConcern
   def render_with_cache(**options)
     raise ArgumentError, 'Only JSON render calls are supported' unless options.key?(:json) || block_given?
 
-    key        = options.delete(:key) || [[params[:controller], params[:action]].join('/'), options[:json].respond_to?(:cache_key) ? options[:json].cache_key : nil, options[:fields].nil? ? nil : options[:fields].join(',')].compact.join(':')
+    key        = options.delete(:key) || [[params[:controller], params[:action]].join('/'), options[:json].respond_to?(:cache_key) ? options[:json].cache_key : nil, options[:fields]&.join(',')].compact.join(':')
     expires_in = options.delete(:expires_in) || 3.minutes
     body       = Rails.cache.read(key, raw: true)
 
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 3d5025724..e1ca536c7 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -143,10 +143,11 @@ module ApplicationHelper
   end
 
   def body_classes
-    output = body_class_string.split
+    output = []
     output << content_for(:body_classes)
     output << "theme-#{current_theme.parameterize}"
     output << 'system-font' if current_account&.user&.setting_system_font_ui
+    output << 'custom-scrollbars' unless current_account&.user&.setting_system_scrollbars_ui
     output << (current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion')
     output << 'rtl' if locale_direction == 'rtl'
     output.compact_blank.join(' ')
diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx
index c1e841801..9e8ff9caa 100644
--- a/app/javascript/entrypoints/public.tsx
+++ b/app/javascript/entrypoints/public.tsx
@@ -230,62 +230,6 @@ function loaded() {
       }
     },
   );
-
-  Rails.delegate(
-    document,
-    'button.status__content__spoiler-link',
-    'click',
-    function () {
-      if (!(this instanceof HTMLButtonElement)) return;
-
-      const statusEl = this.parentNode?.parentNode;
-
-      if (
-        !(
-          statusEl instanceof HTMLDivElement &&
-          statusEl.classList.contains('.status__content')
-        )
-      )
-        return;
-
-      if (statusEl.dataset.spoiler === 'expanded') {
-        statusEl.dataset.spoiler = 'folded';
-        this.textContent = new IntlMessageFormat(
-          localeData['status.show_more'] ?? 'Show more',
-          locale,
-        ).format() as string;
-      } else {
-        statusEl.dataset.spoiler = 'expanded';
-        this.textContent = new IntlMessageFormat(
-          localeData['status.show_less'] ?? 'Show less',
-          locale,
-        ).format() as string;
-      }
-    },
-  );
-
-  document
-    .querySelectorAll<HTMLButtonElement>('button.status__content__spoiler-link')
-    .forEach((spoilerLink) => {
-      const statusEl = spoilerLink.parentNode?.parentNode;
-
-      if (
-        !(
-          statusEl instanceof HTMLDivElement &&
-          statusEl.classList.contains('.status__content')
-        )
-      )
-        return;
-
-      const message =
-        statusEl.dataset.spoiler === 'expanded'
-          ? (localeData['status.show_less'] ?? 'Show less')
-          : (localeData['status.show_more'] ?? 'Show more');
-      spoilerLink.textContent = new IntlMessageFormat(
-        message,
-        locale,
-      ).format() as string;
-    });
 }
 
 Rails.delegate(
@@ -439,6 +383,24 @@ Rails.delegate(document, '#registration_new_user,#new_user', 'submit', () => {
   });
 });
 
+Rails.delegate(document, '.rules-list button', 'click', ({ target }) => {
+  if (!(target instanceof HTMLElement)) {
+    return;
+  }
+
+  const button = target.closest('button');
+
+  if (!button) {
+    return;
+  }
+
+  if (button.ariaExpanded === 'true') {
+    button.ariaExpanded = 'false';
+  } else {
+    button.ariaExpanded = 'true';
+  }
+});
+
 function main() {
   ready(loaded).catch((error: unknown) => {
     console.error(error);
diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js
deleted file mode 100644
index 48dee2587..000000000
--- a/app/javascript/mastodon/actions/alerts.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import { defineMessages } from 'react-intl';
-
-import { AxiosError } from 'axios';
-
-const messages = defineMessages({
-  unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
-  unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' },
-  rateLimitedTitle: { id: 'alert.rate_limited.title', defaultMessage: 'Rate limited' },
-  rateLimitedMessage: { id: 'alert.rate_limited.message', defaultMessage: 'Please retry after {retry_time, time, medium}.' },
-});
-
-export const ALERT_SHOW    = 'ALERT_SHOW';
-export const ALERT_DISMISS = 'ALERT_DISMISS';
-export const ALERT_CLEAR   = 'ALERT_CLEAR';
-export const ALERT_NOOP    = 'ALERT_NOOP';
-
-export const dismissAlert = alert => ({
-  type: ALERT_DISMISS,
-  alert,
-});
-
-export const clearAlert = () => ({
-  type: ALERT_CLEAR,
-});
-
-export const showAlert = alert => ({
-  type: ALERT_SHOW,
-  alert,
-});
-
-export const showAlertForError = (error, skipNotFound = false) => {
-  if (error.response) {
-    const { data, status, statusText, headers } = error.response;
-
-    // Skip these errors as they are reflected in the UI
-    if (skipNotFound && (status === 404 || status === 410)) {
-      return { type: ALERT_NOOP };
-    }
-
-    // Rate limit errors
-    if (status === 429 && headers['x-ratelimit-reset']) {
-      return showAlert({
-        title: messages.rateLimitedTitle,
-        message: messages.rateLimitedMessage,
-        values: { 'retry_time': new Date(headers['x-ratelimit-reset']) },
-      });
-    }
-
-    return showAlert({
-      title: `${status}`,
-      message: data.error || statusText,
-    });
-  }
-
-  // An aborted request, e.g. due to reloading the browser window, it not really error
-  if (error.code === AxiosError.ECONNABORTED) {
-    return { type: ALERT_NOOP };
-  }
-
-  console.error(error);
-
-  return showAlert({
-    title: messages.unexpectedTitle,
-    message: messages.unexpectedMessage,
-  });
-};
diff --git a/app/javascript/mastodon/actions/alerts.ts b/app/javascript/mastodon/actions/alerts.ts
new file mode 100644
index 000000000..a521f3ef3
--- /dev/null
+++ b/app/javascript/mastodon/actions/alerts.ts
@@ -0,0 +1,90 @@
+import { defineMessages } from 'react-intl';
+import type { MessageDescriptor } from 'react-intl';
+
+import { AxiosError } from 'axios';
+import type { AxiosResponse } from 'axios';
+
+interface Alert {
+  title: string | MessageDescriptor;
+  message: string | MessageDescriptor;
+  values?: Record<string, string | number | Date>;
+}
+
+interface ApiErrorResponse {
+  error?: string;
+}
+
+const messages = defineMessages({
+  unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
+  unexpectedMessage: {
+    id: 'alert.unexpected.message',
+    defaultMessage: 'An unexpected error occurred.',
+  },
+  rateLimitedTitle: {
+    id: 'alert.rate_limited.title',
+    defaultMessage: 'Rate limited',
+  },
+  rateLimitedMessage: {
+    id: 'alert.rate_limited.message',
+    defaultMessage: 'Please retry after {retry_time, time, medium}.',
+  },
+});
+
+export const ALERT_SHOW = 'ALERT_SHOW';
+export const ALERT_DISMISS = 'ALERT_DISMISS';
+export const ALERT_CLEAR = 'ALERT_CLEAR';
+export const ALERT_NOOP = 'ALERT_NOOP';
+
+export const dismissAlert = (alert: Alert) => ({
+  type: ALERT_DISMISS,
+  alert,
+});
+
+export const clearAlert = () => ({
+  type: ALERT_CLEAR,
+});
+
+export const showAlert = (alert: Alert) => ({
+  type: ALERT_SHOW,
+  alert,
+});
+
+export const showAlertForError = (error: unknown, skipNotFound = false) => {
+  if (error instanceof AxiosError && error.response) {
+    const { status, statusText, headers } = error.response;
+    const { data } = error.response as AxiosResponse<ApiErrorResponse>;
+
+    // Skip these errors as they are reflected in the UI
+    if (skipNotFound && (status === 404 || status === 410)) {
+      return { type: ALERT_NOOP };
+    }
+
+    // Rate limit errors
+    if (status === 429 && headers['x-ratelimit-reset']) {
+      return showAlert({
+        title: messages.rateLimitedTitle,
+        message: messages.rateLimitedMessage,
+        values: {
+          retry_time: new Date(headers['x-ratelimit-reset'] as string),
+        },
+      });
+    }
+
+    return showAlert({
+      title: `${status}`,
+      message: data.error ?? statusText,
+    });
+  }
+
+  // An aborted request, e.g. due to reloading the browser window, it not really error
+  if (error instanceof AxiosError && error.code === AxiosError.ECONNABORTED) {
+    return { type: ALERT_NOOP };
+  }
+
+  console.error(error);
+
+  return showAlert({
+    title: messages.unexpectedTitle,
+    message: messages.unexpectedMessage,
+  });
+};
diff --git a/app/javascript/mastodon/actions/suggestions.js b/app/javascript/mastodon/actions/suggestions.js
deleted file mode 100644
index 258ffa901..000000000
--- a/app/javascript/mastodon/actions/suggestions.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import api from '../api';
-
-import { fetchRelationships } from './accounts';
-import { importFetchedAccounts } from './importer';
-
-export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST';
-export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS';
-export const SUGGESTIONS_FETCH_FAIL    = 'SUGGESTIONS_FETCH_FAIL';
-
-export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS';
-
-export function fetchSuggestions(withRelationships = false) {
-  return (dispatch) => {
-    dispatch(fetchSuggestionsRequest());
-
-    api().get('/api/v2/suggestions', { params: { limit: 20 } }).then(response => {
-      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
-      dispatch(fetchSuggestionsSuccess(response.data));
-
-      if (withRelationships) {
-        dispatch(fetchRelationships(response.data.map(item => item.account.id)));
-      }
-    }).catch(error => dispatch(fetchSuggestionsFail(error)));
-  };
-}
-
-export function fetchSuggestionsRequest() {
-  return {
-    type: SUGGESTIONS_FETCH_REQUEST,
-    skipLoading: true,
-  };
-}
-
-export function fetchSuggestionsSuccess(suggestions) {
-  return {
-    type: SUGGESTIONS_FETCH_SUCCESS,
-    suggestions,
-    skipLoading: true,
-  };
-}
-
-export function fetchSuggestionsFail(error) {
-  return {
-    type: SUGGESTIONS_FETCH_FAIL,
-    error,
-    skipLoading: true,
-    skipAlert: true,
-  };
-}
-
-export const dismissSuggestion = accountId => (dispatch) => {
-  dispatch({
-    type: SUGGESTIONS_DISMISS,
-    id: accountId,
-  });
-
-  api().delete(`/api/v1/suggestions/${accountId}`).catch(() => {});
-};
diff --git a/app/javascript/mastodon/actions/suggestions.ts b/app/javascript/mastodon/actions/suggestions.ts
new file mode 100644
index 000000000..0eadfa6b4
--- /dev/null
+++ b/app/javascript/mastodon/actions/suggestions.ts
@@ -0,0 +1,24 @@
+import {
+  apiGetSuggestions,
+  apiDeleteSuggestion,
+} from 'mastodon/api/suggestions';
+import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
+
+import { fetchRelationships } from './accounts';
+import { importFetchedAccounts } from './importer';
+
+export const fetchSuggestions = createDataLoadingThunk(
+  'suggestions/fetch',
+  () => apiGetSuggestions(20),
+  (data, { dispatch }) => {
+    dispatch(importFetchedAccounts(data.map((x) => x.account)));
+    dispatch(fetchRelationships(data.map((x) => x.account.id)));
+
+    return data;
+  },
+);
+
+export const dismissSuggestion = createDataLoadingThunk(
+  'suggestions/dismiss',
+  ({ accountId }: { accountId: string }) => apiDeleteSuggestion(accountId),
+);
diff --git a/app/javascript/mastodon/api/accounts.ts b/app/javascript/mastodon/api/accounts.ts
index bd1757e82..717010ba7 100644
--- a/app/javascript/mastodon/api/accounts.ts
+++ b/app/javascript/mastodon/api/accounts.ts
@@ -5,3 +5,16 @@ export const apiSubmitAccountNote = (id: string, value: string) =>
   apiRequestPost<ApiRelationshipJSON>(`v1/accounts/${id}/note`, {
     comment: value,
   });
+
+export const apiFollowAccount = (
+  id: string,
+  params?: {
+    reblogs: boolean;
+  },
+) =>
+  apiRequestPost<ApiRelationshipJSON>(`v1/accounts/${id}/follow`, {
+    ...params,
+  });
+
+export const apiUnfollowAccount = (id: string) =>
+  apiRequestPost<ApiRelationshipJSON>(`v1/accounts/${id}/unfollow`);
diff --git a/app/javascript/mastodon/api/suggestions.ts b/app/javascript/mastodon/api/suggestions.ts
new file mode 100644
index 000000000..d4817698c
--- /dev/null
+++ b/app/javascript/mastodon/api/suggestions.ts
@@ -0,0 +1,8 @@
+import { apiRequestGet, apiRequestDelete } from 'mastodon/api';
+import type { ApiSuggestionJSON } from 'mastodon/api_types/suggestions';
+
+export const apiGetSuggestions = (limit: number) =>
+  apiRequestGet<ApiSuggestionJSON[]>('v2/suggestions', { limit });
+
+export const apiDeleteSuggestion = (accountId: string) =>
+  apiRequestDelete(`v1/suggestions/${accountId}`);
diff --git a/app/javascript/mastodon/api_types/suggestions.ts b/app/javascript/mastodon/api_types/suggestions.ts
new file mode 100644
index 000000000..7d91daf90
--- /dev/null
+++ b/app/javascript/mastodon/api_types/suggestions.ts
@@ -0,0 +1,13 @@
+import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
+
+export type ApiSuggestionSourceJSON =
+  | 'featured'
+  | 'most_followed'
+  | 'most_interactions'
+  | 'similar_to_recently_followed'
+  | 'friends_of_friends';
+
+export interface ApiSuggestionJSON {
+  sources: [ApiSuggestionSourceJSON, ...ApiSuggestionSourceJSON[]];
+  account: ApiAccountJSON;
+}
diff --git a/app/javascript/mastodon/components/account.jsx b/app/javascript/mastodon/components/account.jsx
deleted file mode 100644
index 265c68697..000000000
--- a/app/javascript/mastodon/components/account.jsx
+++ /dev/null
@@ -1,181 +0,0 @@
-import PropTypes from 'prop-types';
-import { useCallback } from 'react';
-
-import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
-
-import classNames from 'classnames';
-import { Link } from 'react-router-dom';
-
-import ImmutablePropTypes from 'react-immutable-proptypes';
-
-import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
-import { EmptyAccount } from 'mastodon/components/empty_account';
-import { ShortNumber } from 'mastodon/components/short_number';
-import { VerifiedBadge } from 'mastodon/components/verified_badge';
-
-import DropdownMenuContainer from '../containers/dropdown_menu_container';
-import { me } from '../initial_state';
-
-import { Avatar } from './avatar';
-import { Button } from './button';
-import { FollowersCounter } from './counters';
-import { DisplayName } from './display_name';
-import { RelativeTimestamp } from './relative_timestamp';
-
-const messages = defineMessages({
-  follow: { id: 'account.follow', defaultMessage: 'Follow' },
-  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
-  cancel_follow_request: { id: 'account.cancel_follow_request', defaultMessage: 'Withdraw follow request' },
-  unblock: { id: 'account.unblock_short', defaultMessage: 'Unblock' },
-  unmute: { id: 'account.unmute_short', defaultMessage: 'Unmute' },
-  mute_notifications: { id: 'account.mute_notifications_short', defaultMessage: 'Mute notifications' },
-  unmute_notifications: { id: 'account.unmute_notifications_short', defaultMessage: 'Unmute notifications' },
-  mute: { id: 'account.mute_short', defaultMessage: 'Mute' },
-  block: { id: 'account.block_short', defaultMessage: 'Block' },
-  more: { id: 'status.more', defaultMessage: 'More' },
-});
-
-const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifications, hidden, minimal, defaultAction, withBio }) => {
-  const intl = useIntl();
-
-  const handleFollow = useCallback(() => {
-    onFollow(account);
-  }, [onFollow, account]);
-
-  const handleBlock = useCallback(() => {
-    onBlock(account);
-  }, [onBlock, account]);
-
-  const handleMute = useCallback(() => {
-    onMute(account);
-  }, [onMute, account]);
-
-  const handleMuteNotifications = useCallback(() => {
-    onMuteNotifications(account, true);
-  }, [onMuteNotifications, account]);
-
-  const handleUnmuteNotifications = useCallback(() => {
-    onMuteNotifications(account, false);
-  }, [onMuteNotifications, account]);
-
-  if (!account) {
-    return <EmptyAccount size={size} minimal={minimal} />;
-  }
-
-  if (hidden) {
-    return (
-      <>
-        {account.get('display_name')}
-        {account.get('username')}
-      </>
-    );
-  }
-
-  let buttons;
-
-  if (account.get('id') !== me && account.get('relationship', null) !== null) {
-    const following = account.getIn(['relationship', 'following']);
-    const requested = account.getIn(['relationship', 'requested']);
-    const blocking  = account.getIn(['relationship', 'blocking']);
-    const muting  = account.getIn(['relationship', 'muting']);
-
-    if (requested) {
-      buttons = <Button text={intl.formatMessage(messages.cancel_follow_request)} onClick={handleFollow} />;
-    } else if (blocking) {
-      buttons = <Button text={intl.formatMessage(messages.unblock)} onClick={handleBlock} />;
-    } else if (muting) {
-      let menu;
-
-      if (account.getIn(['relationship', 'muting_notifications'])) {
-        menu = [{ text: intl.formatMessage(messages.unmute_notifications), action: handleUnmuteNotifications }];
-      } else {
-        menu = [{ text: intl.formatMessage(messages.mute_notifications), action: handleMuteNotifications }];
-      }
-
-      buttons = (
-        <>
-          <DropdownMenuContainer
-            items={menu}
-            icon='ellipsis-h'
-            iconComponent={MoreHorizIcon}
-            direction='right'
-            title={intl.formatMessage(messages.more)}
-          />
-
-          <Button text={intl.formatMessage(messages.unmute)} onClick={handleMute} />
-        </>
-      );
-    } else if (defaultAction === 'mute') {
-      buttons = <Button text={intl.formatMessage(messages.mute)} onClick={handleMute} />;
-    } else if (defaultAction === 'block') {
-      buttons = <Button text={intl.formatMessage(messages.block)} onClick={handleBlock} />;
-    } else if (!account.get('suspended') && !account.get('moved') || following) {
-      buttons = <Button text={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={handleFollow} />;
-    }
-  }
-
-  let muteTimeRemaining;
-
-  if (account.get('mute_expires_at')) {
-    muteTimeRemaining = <>· <RelativeTimestamp timestamp={account.get('mute_expires_at')} futureDate /></>;
-  }
-
-  let verification;
-
-  const firstVerifiedField = account.get('fields').find(item => !!item.get('verified_at'));
-
-  if (firstVerifiedField) {
-    verification = <VerifiedBadge link={firstVerifiedField.get('value')} />;
-  }
-
-  return (
-    <div className={classNames('account', { 'account--minimal': minimal })}>
-      <div className='account__wrapper'>
-        <Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`} data-hover-card-account={account.get('id')}>
-          <div className='account__avatar-wrapper'>
-            <Avatar account={account} size={size} />
-          </div>
-
-          <div className='account__contents'>
-            <DisplayName account={account} />
-            {!minimal && (
-              <div className='account__details'>
-                <ShortNumber value={account.get('followers_count')} renderer={FollowersCounter} /> {verification} {muteTimeRemaining}
-              </div>
-            )}
-          </div>
-        </Link>
-
-        {!minimal && (
-          <div className='account__relationship'>
-            {buttons}
-          </div>
-        )}
-      </div>
-
-      {withBio && (account.get('note').length > 0 ? (
-        <div
-          className='account__note translate'
-          dangerouslySetInnerHTML={{ __html: account.get('note_emojified') }}
-        />
-      ) : (
-        <div className='account__note account__note--missing'><FormattedMessage id='account.no_bio' defaultMessage='No description provided.' /></div>
-      ))}
-    </div>
-  );
-};
-
-Account.propTypes = {
-  size: PropTypes.number,
-  account: ImmutablePropTypes.record,
-  onFollow: PropTypes.func,
-  onBlock: PropTypes.func,
-  onMute: PropTypes.func,
-  onMuteNotifications: PropTypes.func,
-  hidden: PropTypes.bool,
-  minimal: PropTypes.bool,
-  defaultAction: PropTypes.string,
-  withBio: PropTypes.bool,
-};
-
-export default Account;
diff --git a/app/javascript/mastodon/components/account.tsx b/app/javascript/mastodon/components/account.tsx
new file mode 100644
index 000000000..00d3cf27b
--- /dev/null
+++ b/app/javascript/mastodon/components/account.tsx
@@ -0,0 +1,235 @@
+import { useCallback } from 'react';
+
+import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
+
+import classNames from 'classnames';
+import { Link } from 'react-router-dom';
+
+import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
+import {
+  blockAccount,
+  unblockAccount,
+  muteAccount,
+  unmuteAccount,
+} from 'mastodon/actions/accounts';
+import { initMuteModal } from 'mastodon/actions/mutes';
+import { Avatar } from 'mastodon/components/avatar';
+import { Button } from 'mastodon/components/button';
+import { FollowersCounter } from 'mastodon/components/counters';
+import { DisplayName } from 'mastodon/components/display_name';
+import { FollowButton } from 'mastodon/components/follow_button';
+import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
+import { ShortNumber } from 'mastodon/components/short_number';
+import { Skeleton } from 'mastodon/components/skeleton';
+import { VerifiedBadge } from 'mastodon/components/verified_badge';
+import DropdownMenu from 'mastodon/containers/dropdown_menu_container';
+import { me } from 'mastodon/initial_state';
+import { useAppSelector, useAppDispatch } from 'mastodon/store';
+
+const messages = defineMessages({
+  follow: { id: 'account.follow', defaultMessage: 'Follow' },
+  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
+  cancel_follow_request: {
+    id: 'account.cancel_follow_request',
+    defaultMessage: 'Withdraw follow request',
+  },
+  unblock: { id: 'account.unblock_short', defaultMessage: 'Unblock' },
+  unmute: { id: 'account.unmute_short', defaultMessage: 'Unmute' },
+  mute_notifications: {
+    id: 'account.mute_notifications_short',
+    defaultMessage: 'Mute notifications',
+  },
+  unmute_notifications: {
+    id: 'account.unmute_notifications_short',
+    defaultMessage: 'Unmute notifications',
+  },
+  mute: { id: 'account.mute_short', defaultMessage: 'Mute' },
+  block: { id: 'account.block_short', defaultMessage: 'Block' },
+  more: { id: 'status.more', defaultMessage: 'More' },
+});
+
+export const Account: React.FC<{
+  size?: number;
+  id: string;
+  hidden?: boolean;
+  minimal?: boolean;
+  defaultAction?: 'block' | 'mute';
+  withBio?: boolean;
+}> = ({ id, size = 46, hidden, minimal, defaultAction, withBio }) => {
+  const intl = useIntl();
+  const account = useAppSelector((state) => state.accounts.get(id));
+  const relationship = useAppSelector((state) => state.relationships.get(id));
+  const dispatch = useAppDispatch();
+
+  const handleBlock = useCallback(() => {
+    if (relationship?.blocking) {
+      dispatch(unblockAccount(id));
+    } else {
+      dispatch(blockAccount(id));
+    }
+  }, [dispatch, id, relationship]);
+
+  const handleMute = useCallback(() => {
+    if (relationship?.muting) {
+      dispatch(unmuteAccount(id));
+    } else {
+      dispatch(initMuteModal(account));
+    }
+  }, [dispatch, id, account, relationship]);
+
+  const handleMuteNotifications = useCallback(() => {
+    dispatch(muteAccount(id, true));
+  }, [dispatch, id]);
+
+  const handleUnmuteNotifications = useCallback(() => {
+    dispatch(muteAccount(id, false));
+  }, [dispatch, id]);
+
+  if (hidden) {
+    return (
+      <>
+        {account?.display_name}
+        {account?.username}
+      </>
+    );
+  }
+
+  let buttons;
+
+  if (account && account.id !== me && relationship) {
+    const { requested, blocking, muting } = relationship;
+
+    if (requested) {
+      buttons = <FollowButton accountId={id} />;
+    } else if (blocking) {
+      buttons = (
+        <Button
+          text={intl.formatMessage(messages.unblock)}
+          onClick={handleBlock}
+        />
+      );
+    } else if (muting) {
+      const menu = [
+        {
+          text: intl.formatMessage(
+            relationship.muting_notifications
+              ? messages.unmute_notifications
+              : messages.mute_notifications,
+          ),
+          action: relationship.muting_notifications
+            ? handleUnmuteNotifications
+            : handleMuteNotifications,
+        },
+      ];
+
+      buttons = (
+        <>
+          <DropdownMenu
+            items={menu}
+            icon='ellipsis-h'
+            iconComponent={MoreHorizIcon}
+            direction='right'
+            title={intl.formatMessage(messages.more)}
+          />
+
+          <Button
+            text={intl.formatMessage(messages.unmute)}
+            onClick={handleMute}
+          />
+        </>
+      );
+    } else if (defaultAction === 'mute') {
+      buttons = (
+        <Button text={intl.formatMessage(messages.mute)} onClick={handleMute} />
+      );
+    } else if (defaultAction === 'block') {
+      buttons = (
+        <Button
+          text={intl.formatMessage(messages.block)}
+          onClick={handleBlock}
+        />
+      );
+    } else {
+      buttons = <FollowButton accountId={id} />;
+    }
+  } else {
+    buttons = <FollowButton accountId={id} />;
+  }
+
+  let muteTimeRemaining;
+
+  if (account?.mute_expires_at) {
+    muteTimeRemaining = (
+      <>
+        · <RelativeTimestamp timestamp={account.mute_expires_at} futureDate />
+      </>
+    );
+  }
+
+  let verification;
+
+  const firstVerifiedField = account?.fields.find((item) => !!item.verified_at);
+
+  if (firstVerifiedField) {
+    verification = <VerifiedBadge link={firstVerifiedField.value} />;
+  }
+
+  return (
+    <div className={classNames('account', { 'account--minimal': minimal })}>
+      <div className='account__wrapper'>
+        <Link
+          className='account__display-name'
+          title={account?.acct}
+          to={`/@${account?.acct}`}
+          data-hover-card-account={id}
+        >
+          <div className='account__avatar-wrapper'>
+            {account ? (
+              <Avatar account={account} size={size} />
+            ) : (
+              <Skeleton width={size} height={size} />
+            )}
+          </div>
+
+          <div className='account__contents'>
+            <DisplayName account={account} />
+
+            {!minimal && (
+              <div className='account__details'>
+                {account ? (
+                  <>
+                    <ShortNumber
+                      value={account.followers_count}
+                      renderer={FollowersCounter}
+                    />{' '}
+                    {verification} {muteTimeRemaining}
+                  </>
+                ) : (
+                  <Skeleton width='7ch' />
+                )}
+              </div>
+            )}
+          </div>
+        </Link>
+
+        {!minimal && <div className='account__relationship'>{buttons}</div>}
+      </div>
+
+      {account &&
+        withBio &&
+        (account.note.length > 0 ? (
+          <div
+            className='account__note translate'
+            dangerouslySetInnerHTML={{ __html: account.note_emojified }}
+          />
+        ) : (
+          <div className='account__note account__note--missing'>
+            <FormattedMessage
+              id='account.no_bio'
+              defaultMessage='No description provided.'
+            />
+          </div>
+        ))}
+    </div>
+  );
+};
diff --git a/app/javascript/mastodon/components/column.jsx b/app/javascript/mastodon/components/column.jsx
deleted file mode 100644
index abc87a57e..000000000
--- a/app/javascript/mastodon/components/column.jsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import PropTypes from 'prop-types';
-import { PureComponent } from 'react';
-
-import { supportsPassiveEvents } from 'detect-passive-events';
-
-import { scrollTop } from '../scroll';
-
-const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
-
-export default class Column extends PureComponent {
-
-  static propTypes = {
-    children: PropTypes.node,
-    label: PropTypes.string,
-    bindToDocument: PropTypes.bool,
-  };
-
-  scrollTop () {
-    let scrollable = null;
-
-    if (this.props.bindToDocument) {
-      scrollable = document.scrollingElement;
-    } else {
-      scrollable = this.node.querySelector('.scrollable');
-    }
-
-    if (!scrollable) {
-      return;
-    }
-
-    this._interruptScrollAnimation = scrollTop(scrollable);
-  }
-
-  handleWheel = () => {
-    if (typeof this._interruptScrollAnimation !== 'function') {
-      return;
-    }
-
-    this._interruptScrollAnimation();
-  };
-
-  setRef = c => {
-    this.node = c;
-  };
-
-  componentDidMount () {
-    if (this.props.bindToDocument) {
-      document.addEventListener('wheel', this.handleWheel, listenerOptions);
-    } else {
-      this.node.addEventListener('wheel', this.handleWheel, listenerOptions);
-    }
-  }
-
-  componentWillUnmount () {
-    if (this.props.bindToDocument) {
-      document.removeEventListener('wheel', this.handleWheel, listenerOptions);
-    } else {
-      this.node.removeEventListener('wheel', this.handleWheel, listenerOptions);
-    }
-  }
-
-  render () {
-    const { label, children } = this.props;
-
-    return (
-      <div role='region' aria-label={label} className='column' ref={this.setRef}>
-        {children}
-      </div>
-    );
-  }
-
-}
diff --git a/app/javascript/mastodon/components/column.tsx b/app/javascript/mastodon/components/column.tsx
new file mode 100644
index 000000000..01c75d85c
--- /dev/null
+++ b/app/javascript/mastodon/components/column.tsx
@@ -0,0 +1,52 @@
+import { forwardRef, useRef, useImperativeHandle } from 'react';
+import type { Ref } from 'react';
+
+import { scrollTop } from 'mastodon/scroll';
+
+export interface ColumnRef {
+  scrollTop: () => void;
+  node: HTMLDivElement | null;
+}
+
+interface ColumnProps {
+  children?: React.ReactNode;
+  label?: string;
+  bindToDocument?: boolean;
+}
+
+export const Column = forwardRef<ColumnRef, ColumnProps>(
+  ({ children, label, bindToDocument }, ref: Ref<ColumnRef>) => {
+    const nodeRef = useRef<HTMLDivElement>(null);
+
+    useImperativeHandle(ref, () => ({
+      node: nodeRef.current,
+
+      scrollTop() {
+        let scrollable = null;
+
+        if (bindToDocument) {
+          scrollable = document.scrollingElement;
+        } else {
+          scrollable = nodeRef.current?.querySelector('.scrollable');
+        }
+
+        if (!scrollable) {
+          return;
+        }
+
+        scrollTop(scrollable);
+      },
+    }));
+
+    return (
+      <div role='region' aria-label={label} className='column' ref={nodeRef}>
+        {children}
+      </div>
+    );
+  },
+);
+
+Column.displayName = 'Column';
+
+// eslint-disable-next-line import/no-default-export
+export default Column;
diff --git a/app/javascript/mastodon/components/column_back_button.tsx b/app/javascript/mastodon/components/column_back_button.tsx
index af38c1e11..aad355d71 100644
--- a/app/javascript/mastodon/components/column_back_button.tsx
+++ b/app/javascript/mastodon/components/column_back_button.tsx
@@ -24,7 +24,7 @@ function useHandleClick(onClick?: OnClickCallback) {
   }, [history, onClick]);
 }
 
-export const ColumnBackButton: React.FC<{ onClick: OnClickCallback }> = ({
+export const ColumnBackButton: React.FC<{ onClick?: OnClickCallback }> = ({
   onClick,
 }) => {
   const handleClick = useHandleClick(onClick);
diff --git a/app/javascript/mastodon/components/column_search_header.tsx b/app/javascript/mastodon/components/column_search_header.tsx
new file mode 100644
index 000000000..90b6c4d89
--- /dev/null
+++ b/app/javascript/mastodon/components/column_search_header.tsx
@@ -0,0 +1,67 @@
+import { useCallback, useState, useEffect, useRef } from 'react';
+
+import { FormattedMessage } from 'react-intl';
+
+export const ColumnSearchHeader: React.FC<{
+  onBack: () => void;
+  onSubmit: (value: string) => void;
+  onActivate: () => void;
+  placeholder: string;
+  active: boolean;
+}> = ({ onBack, onActivate, onSubmit, placeholder, active }) => {
+  const inputRef = useRef<HTMLInputElement>(null);
+  const [value, setValue] = useState('');
+
+  useEffect(() => {
+    if (!active) {
+      setValue('');
+    }
+  }, [active]);
+
+  const handleChange = useCallback(
+    ({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {
+      setValue(value);
+      onSubmit(value);
+    },
+    [setValue, onSubmit],
+  );
+
+  const handleKeyUp = useCallback(
+    (e: React.KeyboardEvent<HTMLInputElement>) => {
+      if (e.key === 'Escape') {
+        e.preventDefault();
+        onBack();
+        inputRef.current?.blur();
+      }
+    },
+    [onBack],
+  );
+
+  const handleFocus = useCallback(() => {
+    onActivate();
+  }, [onActivate]);
+
+  const handleSubmit = useCallback(() => {
+    onSubmit(value);
+  }, [onSubmit, value]);
+
+  return (
+    <form className='column-search-header' onSubmit={handleSubmit}>
+      <input
+        ref={inputRef}
+        type='search'
+        value={value}
+        onChange={handleChange}
+        onKeyUp={handleKeyUp}
+        placeholder={placeholder}
+        onFocus={handleFocus}
+      />
+
+      {active && (
+        <button type='button' className='link-button' onClick={onBack}>
+          <FormattedMessage id='column_search.cancel' defaultMessage='Cancel' />
+        </button>
+      )}
+    </form>
+  );
+};
diff --git a/app/javascript/mastodon/components/empty_account.tsx b/app/javascript/mastodon/components/empty_account.tsx
deleted file mode 100644
index a4a6b7f82..000000000
--- a/app/javascript/mastodon/components/empty_account.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-
-import classNames from 'classnames';
-
-import { DisplayName } from 'mastodon/components/display_name';
-import { Skeleton } from 'mastodon/components/skeleton';
-
-interface Props {
-  size?: number;
-  minimal?: boolean;
-}
-
-export const EmptyAccount: React.FC<Props> = ({
-  size = 46,
-  minimal = false,
-}) => {
-  return (
-    <div className={classNames('account', { 'account--minimal': minimal })}>
-      <div className='account__wrapper'>
-        <div className='account__display-name'>
-          <div className='account__avatar-wrapper'>
-            <Skeleton width={size} height={size} />
-          </div>
-
-          <div>
-            <DisplayName />
-            <Skeleton width='7ch' />
-          </div>
-        </div>
-      </div>
-    </div>
-  );
-};
diff --git a/app/javascript/mastodon/components/follow_button.tsx b/app/javascript/mastodon/components/follow_button.tsx
index 46314af30..faf9d8bdb 100644
--- a/app/javascript/mastodon/components/follow_button.tsx
+++ b/app/javascript/mastodon/components/follow_button.tsx
@@ -99,7 +99,12 @@ export const FollowButton: React.FC<{
   return (
     <Button
       onClick={handleClick}
-      disabled={relationship?.blocked_by || relationship?.blocking}
+      disabled={
+        relationship?.blocked_by ||
+        relationship?.blocking ||
+        (!(relationship?.following || relationship?.requested) &&
+          (account?.suspended || !!account?.moved))
+      }
       secondary={following}
       className={following ? 'button--destructive' : undefined}
     >
diff --git a/app/javascript/mastodon/components/gif.tsx b/app/javascript/mastodon/components/gif.tsx
new file mode 100644
index 000000000..8fbcb8c76
--- /dev/null
+++ b/app/javascript/mastodon/components/gif.tsx
@@ -0,0 +1,22 @@
+import { useHovering } from '@/hooks/useHovering';
+import { autoPlayGif } from 'mastodon/initial_state';
+
+export const GIF: React.FC<{
+  src: string;
+  staticSrc: string;
+  className: string;
+  animate?: boolean;
+}> = ({ src, staticSrc, className, animate = autoPlayGif }) => {
+  const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
+
+  return (
+    <img
+      className={className}
+      src={hovering || animate ? src : staticSrc}
+      alt=''
+      role='presentation'
+      onMouseEnter={handleMouseEnter}
+      onMouseLeave={handleMouseLeave}
+    />
+  );
+};
diff --git a/app/javascript/mastodon/components/server_banner.jsx b/app/javascript/mastodon/components/server_banner.jsx
index baa220af5..b6ea01997 100644
--- a/app/javascript/mastodon/components/server_banner.jsx
+++ b/app/javascript/mastodon/components/server_banner.jsx
@@ -8,10 +8,10 @@ import { Link } from 'react-router-dom';
 import { connect } from 'react-redux';
 
 import { fetchServer } from 'mastodon/actions/server';
+import { Account } from 'mastodon/components/account';
 import { ServerHeroImage } from 'mastodon/components/server_hero_image';
 import { ShortNumber } from 'mastodon/components/short_number';
 import { Skeleton } from 'mastodon/components/skeleton';
-import Account from 'mastodon/containers/account_container';
 import { domain } from 'mastodon/initial_state';
 
 const messages = defineMessages({
diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx
index 669eb22cb..cf6fe86c3 100644
--- a/app/javascript/mastodon/components/status.jsx
+++ b/app/javascript/mastodon/components/status.jsx
@@ -173,7 +173,7 @@ class Status extends ImmutablePureComponent {
   handleMouseUp = e => {
     // Only handle clicks on the empty space above the content
 
-    if (e.target !== e.currentTarget) {
+    if (e.target !== e.currentTarget && e.detail >= 1) {
       return;
     }
 
diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx
index fe485eb3a..6b06b938d 100644
--- a/app/javascript/mastodon/components/status_content.jsx
+++ b/app/javascript/mastodon/components/status_content.jsx
@@ -204,7 +204,7 @@ class StatusContent extends PureComponent {
       element = element.parentNode;
     }
 
-    if (deltaX + deltaY < 5 && (e.button === 0 || e.button === 1) && this.props.onClick) {
+    if (deltaX + deltaY < 5 && (e.button === 0 || e.button === 1) && e.detail >= 1 && this.props.onClick) {
       this.props.onClick(e);
     }
 
diff --git a/app/javascript/mastodon/containers/account_container.jsx b/app/javascript/mastodon/containers/account_container.jsx
deleted file mode 100644
index d34962fa4..000000000
--- a/app/javascript/mastodon/containers/account_container.jsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { injectIntl } from 'react-intl';
-
-import { connect } from 'react-redux';
-
-import { openModal } from 'mastodon/actions/modal';
-
-import {
-  followAccount,
-  blockAccount,
-  unblockAccount,
-  muteAccount,
-  unmuteAccount,
-} from '../actions/accounts';
-import { initMuteModal } from '../actions/mutes';
-import Account from '../components/account';
-import { makeGetAccount } from '../selectors';
-
-const makeMapStateToProps = () => {
-  const getAccount = makeGetAccount();
-
-  const mapStateToProps = (state, props) => ({
-    account: getAccount(state, props.id),
-  });
-
-  return mapStateToProps;
-};
-
-const mapDispatchToProps = (dispatch) => ({
-
-  onFollow (account) {
-    if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
-      dispatch(openModal({ modalType: 'CONFIRM_UNFOLLOW', modalProps: { account } }));
-    } else {
-      dispatch(followAccount(account.get('id')));
-    }
-  },
-
-  onBlock (account) {
-    if (account.getIn(['relationship', 'blocking'])) {
-      dispatch(unblockAccount(account.get('id')));
-    } else {
-      dispatch(blockAccount(account.get('id')));
-    }
-  },
-
-  onMute (account) {
-    if (account.getIn(['relationship', 'muting'])) {
-      dispatch(unmuteAccount(account.get('id')));
-    } else {
-      dispatch(initMuteModal(account));
-    }
-  },
-
-
-  onMuteNotifications (account, notifications) {
-    dispatch(muteAccount(account.get('id'), notifications));
-  },
-});
-
-export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account));
diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx
index 65a36520d..3b24a7636 100644
--- a/app/javascript/mastodon/features/about/index.jsx
+++ b/app/javascript/mastodon/features/about/index.jsx
@@ -13,11 +13,11 @@ import { connect } from 'react-redux';
 import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react';
 import ExpandMoreIcon from '@/material-icons/400-24px/expand_more.svg?react';
 import { fetchServer, fetchExtendedDescription, fetchDomainBlocks  } from 'mastodon/actions/server';
+import { Account } from 'mastodon/components/account';
 import Column from 'mastodon/components/column';
 import { Icon  }  from 'mastodon/components/icon';
 import { ServerHeroImage } from 'mastodon/components/server_hero_image';
 import { Skeleton } from 'mastodon/components/skeleton';
-import Account from 'mastodon/containers/account_container';
 import LinkFooter from 'mastodon/features/ui/components/link_footer';
 
 const messages = defineMessages({
diff --git a/app/javascript/mastodon/features/annual_report/percentile.tsx b/app/javascript/mastodon/features/annual_report/percentile.tsx
index 22962019a..0cfa7d18b 100644
--- a/app/javascript/mastodon/features/annual_report/percentile.tsx
+++ b/app/javascript/mastodon/features/annual_report/percentile.tsx
@@ -1,6 +1,7 @@
 /* eslint-disable react/jsx-no-useless-fragment */
 import { FormattedMessage, FormattedNumber } from 'react-intl';
 
+import { domain } from 'mastodon/initial_state';
 import type { Percentiles } from 'mastodon/models/annual_report';
 
 export const Percentile: React.FC<{
@@ -12,7 +13,7 @@ export const Percentile: React.FC<{
     <div className='annual-report__bento__box annual-report__summary__percentile'>
       <FormattedMessage
         id='annual_report.summary.percentile.text'
-        defaultMessage='<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of Mastodon users.</bottomLabel>'
+        defaultMessage='<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of {domain} users.</bottomLabel>'
         values={{
           topLabel: (str) => (
             <div className='annual-report__summary__percentile__label'>
@@ -44,6 +45,8 @@ export const Percentile: React.FC<{
               )}
             </div>
           ),
+
+          domain,
         }}
       >
         {(message) => <>{message}</>}
diff --git a/app/javascript/mastodon/features/blocks/index.jsx b/app/javascript/mastodon/features/blocks/index.jsx
index 1a631d3d0..57f86042e 100644
--- a/app/javascript/mastodon/features/blocks/index.jsx
+++ b/app/javascript/mastodon/features/blocks/index.jsx
@@ -9,11 +9,11 @@ import { connect } from 'react-redux';
 import { debounce } from 'lodash';
 
 import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react';
+import { Account } from 'mastodon/components/account';
 
 import { fetchBlocks, expandBlocks } from '../../actions/blocks';
 import { LoadingIndicator } from '../../components/loading_indicator';
 import ScrollableList from '../../components/scrollable_list';
-import AccountContainer from '../../containers/account_container';
 import Column from '../ui/components/column';
 
 const messages = defineMessages({
@@ -70,7 +70,7 @@ class Blocks extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {accountIds.map(id =>
-            <AccountContainer key={id} id={id} defaultAction='block' />,
+            <Account key={id} id={id} defaultAction='block' />,
           )}
         </ScrollableList>
       </Column>
diff --git a/app/javascript/mastodon/features/compose/components/navigation_bar.jsx b/app/javascript/mastodon/features/compose/components/navigation_bar.jsx
index ec5578eef..38382b0ca 100644
--- a/app/javascript/mastodon/features/compose/components/navigation_bar.jsx
+++ b/app/javascript/mastodon/features/compose/components/navigation_bar.jsx
@@ -6,7 +6,7 @@ import { useSelector, useDispatch } from 'react-redux';
 
 import CloseIcon from '@/material-icons/400-24px/close.svg?react';
 import { cancelReplyCompose } from 'mastodon/actions/compose';
-import Account from 'mastodon/components/account';
+import { Account } from 'mastodon/components/account';
 import { IconButton } from 'mastodon/components/icon_button';
 import { me } from 'mastodon/initial_state';
 
@@ -20,7 +20,6 @@ const messages = defineMessages({
 export const NavigationBar = () => {
   const dispatch = useDispatch();
   const intl = useIntl();
-  const account = useSelector(state => state.getIn(['accounts', me]));
   const isReplying = useSelector(state => !!state.getIn(['compose', 'in_reply_to']));
 
   const handleCancelClick = useCallback(() => {
@@ -29,7 +28,7 @@ export const NavigationBar = () => {
 
   return (
     <div className='navigation-bar'>
-      <Account account={account} minimal />
+      <Account id={me} minimal />
       {isReplying ? <IconButton title={intl.formatMessage(messages.cancel)} iconComponent={CloseIcon} onClick={handleCancelClick} /> : <ActionBar />}
     </div>
   );
diff --git a/app/javascript/mastodon/features/compose/components/search_results.jsx b/app/javascript/mastodon/features/compose/components/search_results.jsx
index 6a482c8ec..986d78e8b 100644
--- a/app/javascript/mastodon/features/compose/components/search_results.jsx
+++ b/app/javascript/mastodon/features/compose/components/search_results.jsx
@@ -6,6 +6,7 @@ import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react';
 import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
 import TagIcon from '@/material-icons/400-24px/tag.svg?react';
 import { expandSearch } from 'mastodon/actions/search';
+import { Account } from 'mastodon/components/account';
 import { Icon }  from 'mastodon/components/icon';
 import { LoadMore } from 'mastodon/components/load_more';
 import { LoadingIndicator } from 'mastodon/components/loading_indicator';
@@ -13,7 +14,6 @@ import { SearchSection } from 'mastodon/features/explore/components/search_secti
 import { useAppDispatch, useAppSelector } from 'mastodon/store';
 
 import { ImmutableHashtag as Hashtag } from '../../../components/hashtag';
-import AccountContainer from '../../../containers/account_container';
 import StatusContainer from '../../../containers/status_container';
 
 const INITIAL_PAGE_LIMIT = 10;
@@ -49,7 +49,7 @@ export const SearchResults = () => {
   if (results.get('accounts') && results.get('accounts').size > 0) {
     accounts = (
       <SearchSection title={<><Icon id='users' icon={PeopleIcon} /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>}>
-        {withoutLastResult(results.get('accounts')).map(accountId => <AccountContainer key={accountId} id={accountId} />)}
+        {withoutLastResult(results.get('accounts')).map(accountId => <Account key={accountId} id={accountId} />)}
         {(results.get('accounts').size > INITIAL_PAGE_LIMIT && results.get('accounts').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={handleLoadMoreAccounts} />}
       </SearchSection>
     );
diff --git a/app/javascript/mastodon/features/directory/index.tsx b/app/javascript/mastodon/features/directory/index.tsx
index d0e57600b..ef2649a27 100644
--- a/app/javascript/mastodon/features/directory/index.tsx
+++ b/app/javascript/mastodon/features/directory/index.tsx
@@ -15,7 +15,8 @@ import {
   changeColumnParams,
 } from 'mastodon/actions/columns';
 import { fetchDirectory, expandDirectory } from 'mastodon/actions/directory';
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
+import type { ColumnRef } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
 import { LoadMore } from 'mastodon/components/load_more';
 import { LoadingIndicator } from 'mastodon/components/loading_indicator';
@@ -49,7 +50,7 @@ export const Directory: React.FC<{
   const intl = useIntl();
   const dispatch = useAppDispatch();
 
-  const column = useRef<Column>(null);
+  const column = useRef<ColumnRef>(null);
 
   const [orderParam, setOrderParam] = useSearchParam('order');
   const [localParam, setLocalParam] = useSearchParam('local');
diff --git a/app/javascript/mastodon/features/explore/links.jsx b/app/javascript/mastodon/features/explore/links.jsx
index 035e5aaad..68cf0283e 100644
--- a/app/javascript/mastodon/features/explore/links.jsx
+++ b/app/javascript/mastodon/features/explore/links.jsx
@@ -45,7 +45,7 @@ class Links extends PureComponent {
 
     const banner = (
       <DismissableBanner id='explore/links'>
-        <FormattedMessage id='dismissable_banner.explore_links' defaultMessage='These are news stories being shared the most on the social web today. Newer news stories posted by more different people are ranked higher.' />
+        <FormattedMessage id='dismissable_banner.explore_links' defaultMessage='These news stories are being shared the most on the fediverse today. Newer news stories posted by more different people are ranked higher.' />
       </DismissableBanner>
     );
 
diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx
index 355c0f1c4..ad70d459d 100644
--- a/app/javascript/mastodon/features/explore/results.jsx
+++ b/app/javascript/mastodon/features/explore/results.jsx
@@ -13,10 +13,10 @@ import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react';
 import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
 import TagIcon from '@/material-icons/400-24px/tag.svg?react';
 import { submitSearch, expandSearch } from 'mastodon/actions/search';
+import { Account } from 'mastodon/components/account';
 import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag';
 import { Icon } from 'mastodon/components/icon';
 import ScrollableList from 'mastodon/components/scrollable_list';
-import Account from 'mastodon/containers/account_container';
 import Status from 'mastodon/containers/status_container';
 
 import { SearchSection } from './components/search_section';
diff --git a/app/javascript/mastodon/features/explore/statuses.jsx b/app/javascript/mastodon/features/explore/statuses.jsx
index 414b47fcd..883f6906b 100644
--- a/app/javascript/mastodon/features/explore/statuses.jsx
+++ b/app/javascript/mastodon/features/explore/statuses.jsx
@@ -58,7 +58,7 @@ class Statuses extends PureComponent {
     return (
       <StatusList
         trackScroll
-        prepend={<DismissableBanner id='explore/statuses'><FormattedMessage id='dismissable_banner.explore_statuses' defaultMessage='These are posts from across the social web that are gaining traction today. Newer posts with more boosts and favorites are ranked higher.' /></DismissableBanner>}
+        prepend={<DismissableBanner id='explore/statuses'><FormattedMessage id='dismissable_banner.explore_statuses' defaultMessage='These posts from across the fediverse are gaining traction today. Newer posts with more boosts and favorites are ranked higher.' /></DismissableBanner>}
         alwaysPrepend
         timelineId='explore'
         statusIds={statusIds}
diff --git a/app/javascript/mastodon/features/explore/suggestions.jsx b/app/javascript/mastodon/features/explore/suggestions.jsx
index 101ec0d19..b469a1525 100644
--- a/app/javascript/mastodon/features/explore/suggestions.jsx
+++ b/app/javascript/mastodon/features/explore/suggestions.jsx
@@ -5,7 +5,6 @@ import { FormattedMessage } from 'react-intl';
 
 import { withRouter } from 'react-router-dom';
 
-import ImmutablePropTypes from 'react-immutable-proptypes';
 import { connect } from 'react-redux';
 
 import { fetchSuggestions } from 'mastodon/actions/suggestions';
@@ -15,15 +14,15 @@ import { WithRouterPropTypes } from 'mastodon/utils/react_router';
 import { Card } from './components/card';
 
 const mapStateToProps = state => ({
-  suggestions: state.getIn(['suggestions', 'items']),
-  isLoading: state.getIn(['suggestions', 'isLoading']),
+  suggestions: state.suggestions.items,
+  isLoading: state.suggestions.isLoading,
 });
 
 class Suggestions extends PureComponent {
 
   static propTypes = {
     isLoading: PropTypes.bool,
-    suggestions: ImmutablePropTypes.list,
+    suggestions: PropTypes.array,
     dispatch: PropTypes.func.isRequired,
     ...WithRouterPropTypes,
   };
@@ -32,17 +31,17 @@ class Suggestions extends PureComponent {
     const { dispatch, suggestions, history } = this.props;
 
     // If we're navigating back to the screen, do not trigger a reload
-    if (history.action === 'POP' && suggestions.size > 0) {
+    if (history.action === 'POP' && suggestions.length > 0) {
       return;
     }
 
-    dispatch(fetchSuggestions(true));
+    dispatch(fetchSuggestions());
   }
 
   render () {
     const { isLoading, suggestions } = this.props;
 
-    if (!isLoading && suggestions.isEmpty()) {
+    if (!isLoading && suggestions.length === 0) {
       return (
         <div className='explore__suggestions scrollable scrollable--flex'>
           <div className='empty-column-indicator'>
@@ -56,9 +55,9 @@ class Suggestions extends PureComponent {
       <div className='explore__suggestions scrollable' data-nosnippet>
         {isLoading ? <LoadingIndicator /> : suggestions.map(suggestion => (
           <Card
-            key={suggestion.get('account')}
-            id={suggestion.get('account')}
-            source={suggestion.getIn(['sources', 0])}
+            key={suggestion.account_id}
+            id={suggestion.account_id}
+            source={suggestion.sources[0]}
           />
         ))}
       </div>
diff --git a/app/javascript/mastodon/features/explore/tags.jsx b/app/javascript/mastodon/features/explore/tags.jsx
index 90cf3c32a..b803d5fa1 100644
--- a/app/javascript/mastodon/features/explore/tags.jsx
+++ b/app/javascript/mastodon/features/explore/tags.jsx
@@ -44,7 +44,7 @@ class Tags extends PureComponent {
 
     const banner = (
       <DismissableBanner id='explore/tags'>
-        <FormattedMessage id='dismissable_banner.explore_tags' defaultMessage='These are hashtags that are gaining traction on the social web today. Hashtags that are used by more different people are ranked higher.' />
+        <FormattedMessage id='dismissable_banner.explore_tags' defaultMessage='These hashtags are gaining traction on the fediverse today. Hashtags that are used by more different people are ranked higher.' />
       </DismissableBanner>
     );
 
diff --git a/app/javascript/mastodon/features/favourites/index.jsx b/app/javascript/mastodon/features/favourites/index.jsx
index 27ca16940..c5c6abe08 100644
--- a/app/javascript/mastodon/features/favourites/index.jsx
+++ b/app/javascript/mastodon/features/favourites/index.jsx
@@ -12,11 +12,11 @@ import { debounce } from 'lodash';
 
 import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react';
 import { fetchFavourites, expandFavourites } from 'mastodon/actions/interactions';
+import { Account } from 'mastodon/components/account';
 import ColumnHeader from 'mastodon/components/column_header';
 import { Icon }  from 'mastodon/components/icon';
 import { LoadingIndicator } from 'mastodon/components/loading_indicator';
 import ScrollableList from 'mastodon/components/scrollable_list';
-import AccountContainer from 'mastodon/containers/account_container';
 import Column from 'mastodon/features/ui/components/column';
 
 const messages = defineMessages({
@@ -87,7 +87,7 @@ class Favourites extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {accountIds.map(id =>
-            <AccountContainer key={id} id={id} withNote={false} />,
+            <Account key={id} id={id} />,
           )}
         </ScrollableList>
 
diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx
index f65bee45e..ff80aac22 100644
--- a/app/javascript/mastodon/features/firehose/index.jsx
+++ b/app/javascript/mastodon/features/firehose/index.jsx
@@ -133,7 +133,7 @@ const Firehose = ({ feedType, multiColumn }) => {
     <DismissableBanner id='public_timeline'>
       <FormattedMessage
         id='dismissable_banner.public_timeline'
-        defaultMessage='These are the most recent public posts from people on the social web that people on {domain} follow.'
+        defaultMessage='These are the most recent public posts from people on the fediverse that people on {domain} follow.'
         values={{ domain }}
       />
     </DismissableBanner>
diff --git a/app/javascript/mastodon/features/followers/index.jsx b/app/javascript/mastodon/features/followers/index.jsx
index 92fce79c3..c13033b28 100644
--- a/app/javascript/mastodon/features/followers/index.jsx
+++ b/app/javascript/mastodon/features/followers/index.jsx
@@ -8,6 +8,7 @@ import { connect } from 'react-redux';
 
 import { debounce } from 'lodash';
 
+import { Account } from 'mastodon/components/account';
 import { TimelineHint } from 'mastodon/components/timeline_hint';
 import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
 import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
@@ -23,7 +24,6 @@ import {
 import { ColumnBackButton } from '../../components/column_back_button';
 import { LoadingIndicator } from '../../components/loading_indicator';
 import ScrollableList from '../../components/scrollable_list';
-import AccountContainer from '../../containers/account_container';
 import { LimitedAccountHint } from '../account_timeline/components/limited_account_hint';
 import HeaderContainer from '../account_timeline/containers/header_container';
 import Column from '../ui/components/column';
@@ -175,7 +175,7 @@ class Followers extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {forceEmptyState ? [] : accountIds.map(id =>
-            <AccountContainer key={id} id={id} withNote={false} />,
+            <Account key={id} id={id} />,
           )}
         </ScrollableList>
       </Column>
diff --git a/app/javascript/mastodon/features/following/index.jsx b/app/javascript/mastodon/features/following/index.jsx
index b53a016ff..d37c0c30e 100644
--- a/app/javascript/mastodon/features/following/index.jsx
+++ b/app/javascript/mastodon/features/following/index.jsx
@@ -8,6 +8,7 @@ import { connect } from 'react-redux';
 
 import { debounce } from 'lodash';
 
+import { Account } from 'mastodon/components/account';
 import { TimelineHint } from 'mastodon/components/timeline_hint';
 import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
 import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
@@ -23,7 +24,6 @@ import {
 import { ColumnBackButton } from '../../components/column_back_button';
 import { LoadingIndicator } from '../../components/loading_indicator';
 import ScrollableList from '../../components/scrollable_list';
-import AccountContainer from '../../containers/account_container';
 import { LimitedAccountHint } from '../account_timeline/components/limited_account_hint';
 import HeaderContainer from '../account_timeline/containers/header_container';
 import Column from '../ui/components/column';
@@ -175,7 +175,7 @@ class Following extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {forceEmptyState ? [] : accountIds.map(id =>
-            <AccountContainer key={id} id={id} withNote={false} />,
+            <Account key={id} id={id} />,
           )}
         </ScrollableList>
       </Column>
diff --git a/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx b/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx
index d2fe8851f..415cf7bf1 100644
--- a/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx
+++ b/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx
@@ -4,12 +4,17 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 
 import ImmutablePropTypes from 'react-immutable-proptypes';
 
+import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
 import { Button } from 'mastodon/components/button';
 import { ShortNumber } from 'mastodon/components/short_number';
+import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container';
+import { withIdentity } from 'mastodon/identity_context';
+import { PERMISSION_MANAGE_TAXONOMIES } from 'mastodon/permissions';
 
 const messages = defineMessages({
   followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
   unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
+  adminModeration: { id: 'hashtag.admin_moderation', defaultMessage: 'Open moderation interface for #{name}' },
 });
 
 const usesRenderer = (displayNumber, pluralReady) => (
@@ -45,11 +50,18 @@ const usesTodayRenderer = (displayNumber, pluralReady) => (
   />
 );
 
-export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
+export const HashtagHeader = withIdentity(injectIntl(({ tag, intl, disabled, onClick, identity }) => {
   if (!tag) {
     return null;
   }
 
+  const { signedIn, permissions } = identity;
+  const menu = [];
+
+  if (signedIn && (permissions & PERMISSION_MANAGE_TAXONOMIES) === PERMISSION_MANAGE_TAXONOMIES ) {
+    menu.push({ text: intl.formatMessage(messages.adminModeration, { name: tag.get("name") }), href: `/admin/tags/${tag.get('id')}` });
+  }
+
   const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]);
   const dividingCircle = <span aria-hidden>{' · '}</span>;
 
@@ -57,7 +69,10 @@ export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
     <div className='hashtag-header'>
       <div className='hashtag-header__header'>
         <h1>#{tag.get('name')}</h1>
-        <Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
+        <div className='hashtag-header__header__buttons'>
+          { menu.length > 0 && <DropdownMenuContainer disabled={menu.length === 0} items={menu} icon='ellipsis-v' iconComponent={MoreHorizIcon} size={24} direction='right' /> }
+          <Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
+        </div>
       </div>
 
       <div>
@@ -69,7 +84,7 @@ export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
       </div>
     </div>
   );
-});
+}));
 
 HashtagHeader.propTypes = {
   tag: ImmutablePropTypes.map,
diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx
deleted file mode 100644
index 3269b5a49..000000000
--- a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx
+++ /dev/null
@@ -1,217 +0,0 @@
-import PropTypes from 'prop-types';
-import { useEffect, useCallback, useRef, useState } from 'react';
-
-import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
-
-import { Link } from 'react-router-dom';
-
-import ImmutablePropTypes from 'react-immutable-proptypes';
-import { useDispatch, useSelector } from 'react-redux';
-
-import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react';
-import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react';
-import CloseIcon from '@/material-icons/400-24px/close.svg?react';
-import InfoIcon from '@/material-icons/400-24px/info.svg?react';
-import { changeSetting } from 'mastodon/actions/settings';
-import { fetchSuggestions, dismissSuggestion } from 'mastodon/actions/suggestions';
-import { Avatar } from 'mastodon/components/avatar';
-import { DisplayName } from 'mastodon/components/display_name';
-import { FollowButton } from 'mastodon/components/follow_button';
-import { Icon } from 'mastodon/components/icon';
-import { IconButton } from 'mastodon/components/icon_button';
-import { VerifiedBadge } from 'mastodon/components/verified_badge';
-import { domain } from 'mastodon/initial_state';
-
-const messages = defineMessages({
-  follow: { id: 'account.follow', defaultMessage: 'Follow' },
-  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
-  previous: { id: 'lightbox.previous', defaultMessage: 'Previous' },
-  next: { id: 'lightbox.next', defaultMessage: 'Next' },
-  dismiss: { id: 'follow_suggestions.dismiss', defaultMessage: "Don't show again" },
-  friendsOfFriendsHint: { id: 'follow_suggestions.hints.friends_of_friends', defaultMessage: 'This profile is popular among the people you follow.' },
-  similarToRecentlyFollowedHint: { id: 'follow_suggestions.hints.similar_to_recently_followed', defaultMessage: 'This profile is similar to the profiles you have most recently followed.' },
-  featuredHint: { id: 'follow_suggestions.hints.featured', defaultMessage: 'This profile has been hand-picked by the {domain} team.' },
-  mostFollowedHint: { id: 'follow_suggestions.hints.most_followed', defaultMessage: 'This profile is one of the most followed on {domain}.'},
-  mostInteractionsHint: { id: 'follow_suggestions.hints.most_interactions', defaultMessage: 'This profile has been recently getting a lot of attention on {domain}.' },
-});
-
-const Source = ({ id }) => {
-  const intl = useIntl();
-
-  let label, hint;
-
-  switch (id) {
-  case 'friends_of_friends':
-    hint = intl.formatMessage(messages.friendsOfFriendsHint);
-    label = <FormattedMessage id='follow_suggestions.personalized_suggestion' defaultMessage='Personalized suggestion' />;
-    break;
-  case 'similar_to_recently_followed':
-    hint = intl.formatMessage(messages.similarToRecentlyFollowedHint);
-    label = <FormattedMessage id='follow_suggestions.personalized_suggestion' defaultMessage='Personalized suggestion' />;
-    break;
-  case 'featured':
-    hint = intl.formatMessage(messages.featuredHint, { domain });
-    label = <FormattedMessage id='follow_suggestions.curated_suggestion' defaultMessage='Staff pick' />;
-    break;
-  case 'most_followed':
-    hint = intl.formatMessage(messages.mostFollowedHint, { domain });
-    label = <FormattedMessage id='follow_suggestions.popular_suggestion' defaultMessage='Popular suggestion' />;
-    break;
-  case 'most_interactions':
-    hint = intl.formatMessage(messages.mostInteractionsHint, { domain });
-    label = <FormattedMessage id='follow_suggestions.popular_suggestion' defaultMessage='Popular suggestion' />;
-    break;
-  }
-
-  return (
-    <div className='inline-follow-suggestions__body__scrollable__card__text-stack__source' title={hint}>
-      <Icon icon={InfoIcon} />
-      {label}
-    </div>
-  );
-};
-
-Source.propTypes = {
-  id: PropTypes.oneOf(['friends_of_friends', 'similar_to_recently_followed', 'featured', 'most_followed', 'most_interactions']),
-};
-
-const Card = ({ id, sources }) => {
-  const intl = useIntl();
-  const account = useSelector(state => state.getIn(['accounts', id]));
-  const firstVerifiedField = account.get('fields').find(item => !!item.get('verified_at'));
-  const dispatch = useDispatch();
-
-  const handleDismiss = useCallback(() => {
-    dispatch(dismissSuggestion(id));
-  }, [id, dispatch]);
-
-  return (
-    <div className='inline-follow-suggestions__body__scrollable__card'>
-      <IconButton iconComponent={CloseIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
-
-      <div className='inline-follow-suggestions__body__scrollable__card__avatar'>
-        <Link to={`/@${account.get('acct')}`}><Avatar account={account} size={72} /></Link>
-      </div>
-
-      <div className='inline-follow-suggestions__body__scrollable__card__text-stack'>
-        <Link to={`/@${account.get('acct')}`}><DisplayName account={account} /></Link>
-        {firstVerifiedField ? <VerifiedBadge link={firstVerifiedField.get('value')} /> : <Source id={sources.get(0)} />}
-      </div>
-
-      <FollowButton accountId={id} />
-    </div>
-  );
-};
-
-Card.propTypes = {
-  id: PropTypes.string.isRequired,
-  sources: ImmutablePropTypes.list,
-};
-
-const DISMISSIBLE_ID = 'home/follow-suggestions';
-
-export const InlineFollowSuggestions = ({ hidden }) => {
-  const intl = useIntl();
-  const dispatch = useDispatch();
-  const suggestions = useSelector(state => state.getIn(['suggestions', 'items']));
-  const isLoading = useSelector(state => state.getIn(['suggestions', 'isLoading']));
-  const dismissed = useSelector(state => state.getIn(['settings', 'dismissed_banners', DISMISSIBLE_ID]));
-  const bodyRef = useRef();
-  const [canScrollLeft, setCanScrollLeft] = useState(false);
-  const [canScrollRight, setCanScrollRight] = useState(true);
-
-  useEffect(() => {
-    dispatch(fetchSuggestions());
-  }, [dispatch]);
-
-  useEffect(() => {
-    if (!bodyRef.current) {
-      return;
-    }
-
-    if (getComputedStyle(bodyRef.current).direction === 'rtl') {
-      setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth);
-      setCanScrollRight(bodyRef.current.scrollLeft < 0);
-    } else {
-      setCanScrollLeft(bodyRef.current.scrollLeft > 0);
-      setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
-    }
-  }, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]);
-
-  const handleLeftNav = useCallback(() => {
-    bodyRef.current.scrollLeft -= 200;
-  }, [bodyRef]);
-
-  const handleRightNav = useCallback(() => {
-    bodyRef.current.scrollLeft += 200;
-  }, [bodyRef]);
-
-  const handleScroll = useCallback(() => {
-    if (!bodyRef.current) {
-      return;
-    }
-
-    if (getComputedStyle(bodyRef.current).direction === 'rtl') {
-      setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth);
-      setCanScrollRight(bodyRef.current.scrollLeft < 0);
-    } else {
-      setCanScrollLeft(bodyRef.current.scrollLeft > 0);
-      setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
-    }
-  }, [setCanScrollRight, setCanScrollLeft, bodyRef]);
-
-  const handleDismiss = useCallback(() => {
-    dispatch(changeSetting(['dismissed_banners', DISMISSIBLE_ID], true));
-  }, [dispatch]);
-
-  if (dismissed || (!isLoading && suggestions.isEmpty())) {
-    return null;
-  }
-
-  if (hidden) {
-    return (
-      <div className='inline-follow-suggestions' />
-    );
-  }
-
-  return (
-    <div className='inline-follow-suggestions'>
-      <div className='inline-follow-suggestions__header'>
-        <h3><FormattedMessage id='follow_suggestions.who_to_follow' defaultMessage='Who to follow' /></h3>
-
-        <div className='inline-follow-suggestions__header__actions'>
-          <button className='link-button' onClick={handleDismiss}><FormattedMessage id='follow_suggestions.dismiss' defaultMessage="Don't show again" /></button>
-          <Link to='/explore/suggestions' className='link-button'><FormattedMessage id='follow_suggestions.view_all' defaultMessage='View all' /></Link>
-        </div>
-      </div>
-
-      <div className='inline-follow-suggestions__body'>
-        <div className='inline-follow-suggestions__body__scrollable' ref={bodyRef} onScroll={handleScroll}>
-          {suggestions.map(suggestion => (
-            <Card
-              key={suggestion.get('account')}
-              id={suggestion.get('account')}
-              sources={suggestion.get('sources')}
-            />
-          ))}
-        </div>
-
-        {canScrollLeft && (
-          <button className='inline-follow-suggestions__body__scroll-button left' onClick={handleLeftNav} aria-label={intl.formatMessage(messages.previous)}>
-            <div className='inline-follow-suggestions__body__scroll-button__icon'><Icon icon={ChevronLeftIcon} /></div>
-          </button>
-        )}
-
-        {canScrollRight && (
-          <button className='inline-follow-suggestions__body__scroll-button right' onClick={handleRightNav} aria-label={intl.formatMessage(messages.next)}>
-            <div className='inline-follow-suggestions__body__scroll-button__icon'><Icon icon={ChevronRightIcon} /></div>
-          </button>
-        )}
-      </div>
-    </div>
-  );
-};
-
-InlineFollowSuggestions.propTypes = {
-  hidden: PropTypes.bool,
-};
diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.tsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.tsx
new file mode 100644
index 000000000..5fd47443d
--- /dev/null
+++ b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.tsx
@@ -0,0 +1,326 @@
+import { useEffect, useCallback, useRef, useState } from 'react';
+
+import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
+
+import { Link } from 'react-router-dom';
+
+import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react';
+import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react';
+import CloseIcon from '@/material-icons/400-24px/close.svg?react';
+import InfoIcon from '@/material-icons/400-24px/info.svg?react';
+import { changeSetting } from 'mastodon/actions/settings';
+import {
+  fetchSuggestions,
+  dismissSuggestion,
+} from 'mastodon/actions/suggestions';
+import type { ApiSuggestionSourceJSON } from 'mastodon/api_types/suggestions';
+import { Avatar } from 'mastodon/components/avatar';
+import { DisplayName } from 'mastodon/components/display_name';
+import { FollowButton } from 'mastodon/components/follow_button';
+import { Icon } from 'mastodon/components/icon';
+import { IconButton } from 'mastodon/components/icon_button';
+import { VerifiedBadge } from 'mastodon/components/verified_badge';
+import { domain } from 'mastodon/initial_state';
+import { useAppDispatch, useAppSelector } from 'mastodon/store';
+
+const messages = defineMessages({
+  follow: { id: 'account.follow', defaultMessage: 'Follow' },
+  unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
+  previous: { id: 'lightbox.previous', defaultMessage: 'Previous' },
+  next: { id: 'lightbox.next', defaultMessage: 'Next' },
+  dismiss: {
+    id: 'follow_suggestions.dismiss',
+    defaultMessage: "Don't show again",
+  },
+  friendsOfFriendsHint: {
+    id: 'follow_suggestions.hints.friends_of_friends',
+    defaultMessage: 'This profile is popular among the people you follow.',
+  },
+  similarToRecentlyFollowedHint: {
+    id: 'follow_suggestions.hints.similar_to_recently_followed',
+    defaultMessage:
+      'This profile is similar to the profiles you have most recently followed.',
+  },
+  featuredHint: {
+    id: 'follow_suggestions.hints.featured',
+    defaultMessage: 'This profile has been hand-picked by the {domain} team.',
+  },
+  mostFollowedHint: {
+    id: 'follow_suggestions.hints.most_followed',
+    defaultMessage: 'This profile is one of the most followed on {domain}.',
+  },
+  mostInteractionsHint: {
+    id: 'follow_suggestions.hints.most_interactions',
+    defaultMessage:
+      'This profile has been recently getting a lot of attention on {domain}.',
+  },
+});
+
+const Source: React.FC<{
+  id: ApiSuggestionSourceJSON;
+}> = ({ id }) => {
+  const intl = useIntl();
+
+  let label, hint;
+
+  switch (id) {
+    case 'friends_of_friends':
+      hint = intl.formatMessage(messages.friendsOfFriendsHint);
+      label = (
+        <FormattedMessage
+          id='follow_suggestions.personalized_suggestion'
+          defaultMessage='Personalized suggestion'
+        />
+      );
+      break;
+    case 'similar_to_recently_followed':
+      hint = intl.formatMessage(messages.similarToRecentlyFollowedHint);
+      label = (
+        <FormattedMessage
+          id='follow_suggestions.personalized_suggestion'
+          defaultMessage='Personalized suggestion'
+        />
+      );
+      break;
+    case 'featured':
+      hint = intl.formatMessage(messages.featuredHint, { domain });
+      label = (
+        <FormattedMessage
+          id='follow_suggestions.curated_suggestion'
+          defaultMessage='Staff pick'
+        />
+      );
+      break;
+    case 'most_followed':
+      hint = intl.formatMessage(messages.mostFollowedHint, { domain });
+      label = (
+        <FormattedMessage
+          id='follow_suggestions.popular_suggestion'
+          defaultMessage='Popular suggestion'
+        />
+      );
+      break;
+    case 'most_interactions':
+      hint = intl.formatMessage(messages.mostInteractionsHint, { domain });
+      label = (
+        <FormattedMessage
+          id='follow_suggestions.popular_suggestion'
+          defaultMessage='Popular suggestion'
+        />
+      );
+      break;
+  }
+
+  return (
+    <div
+      className='inline-follow-suggestions__body__scrollable__card__text-stack__source'
+      title={hint}
+    >
+      <Icon id='' icon={InfoIcon} />
+      {label}
+    </div>
+  );
+};
+
+const Card: React.FC<{
+  id: string;
+  sources: [ApiSuggestionSourceJSON, ...ApiSuggestionSourceJSON[]];
+}> = ({ id, sources }) => {
+  const intl = useIntl();
+  const account = useAppSelector((state) => state.accounts.get(id));
+  const firstVerifiedField = account?.fields.find((item) => !!item.verified_at);
+  const dispatch = useAppDispatch();
+
+  const handleDismiss = useCallback(() => {
+    void dispatch(dismissSuggestion({ accountId: id }));
+  }, [id, dispatch]);
+
+  return (
+    <div className='inline-follow-suggestions__body__scrollable__card'>
+      <IconButton
+        icon=''
+        iconComponent={CloseIcon}
+        onClick={handleDismiss}
+        title={intl.formatMessage(messages.dismiss)}
+      />
+
+      <div className='inline-follow-suggestions__body__scrollable__card__avatar'>
+        <Link to={`/@${account?.acct}`}>
+          <Avatar account={account} size={72} />
+        </Link>
+      </div>
+
+      <div className='inline-follow-suggestions__body__scrollable__card__text-stack'>
+        <Link to={`/@${account?.acct}`}>
+          <DisplayName account={account} />
+        </Link>
+        {firstVerifiedField ? (
+          <VerifiedBadge link={firstVerifiedField.value} />
+        ) : (
+          <Source id={sources[0]} />
+        )}
+      </div>
+
+      <FollowButton accountId={id} />
+    </div>
+  );
+};
+
+const DISMISSIBLE_ID = 'home/follow-suggestions';
+
+export const InlineFollowSuggestions: React.FC<{
+  hidden?: boolean;
+}> = ({ hidden }) => {
+  const intl = useIntl();
+  const dispatch = useAppDispatch();
+  const suggestions = useAppSelector((state) => state.suggestions.items);
+  const isLoading = useAppSelector((state) => state.suggestions.isLoading);
+  const dismissed = useAppSelector(
+    (state) =>
+      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
+      state.settings.getIn(['dismissed_banners', DISMISSIBLE_ID]) as boolean,
+  );
+  const bodyRef = useRef<HTMLDivElement>(null);
+  const [canScrollLeft, setCanScrollLeft] = useState(false);
+  const [canScrollRight, setCanScrollRight] = useState(true);
+
+  useEffect(() => {
+    void dispatch(fetchSuggestions());
+  }, [dispatch]);
+
+  useEffect(() => {
+    if (!bodyRef.current) {
+      return;
+    }
+
+    if (getComputedStyle(bodyRef.current).direction === 'rtl') {
+      setCanScrollLeft(
+        bodyRef.current.clientWidth - bodyRef.current.scrollLeft <
+          bodyRef.current.scrollWidth,
+      );
+      setCanScrollRight(bodyRef.current.scrollLeft < 0);
+    } else {
+      setCanScrollLeft(bodyRef.current.scrollLeft > 0);
+      setCanScrollRight(
+        bodyRef.current.scrollLeft + bodyRef.current.clientWidth <
+          bodyRef.current.scrollWidth,
+      );
+    }
+  }, [setCanScrollRight, setCanScrollLeft, suggestions]);
+
+  const handleLeftNav = useCallback(() => {
+    if (!bodyRef.current) {
+      return;
+    }
+
+    bodyRef.current.scrollLeft -= 200;
+  }, []);
+
+  const handleRightNav = useCallback(() => {
+    if (!bodyRef.current) {
+      return;
+    }
+
+    bodyRef.current.scrollLeft += 200;
+  }, []);
+
+  const handleScroll = useCallback(() => {
+    if (!bodyRef.current) {
+      return;
+    }
+
+    if (getComputedStyle(bodyRef.current).direction === 'rtl') {
+      setCanScrollLeft(
+        bodyRef.current.clientWidth - bodyRef.current.scrollLeft <
+          bodyRef.current.scrollWidth,
+      );
+      setCanScrollRight(bodyRef.current.scrollLeft < 0);
+    } else {
+      setCanScrollLeft(bodyRef.current.scrollLeft > 0);
+      setCanScrollRight(
+        bodyRef.current.scrollLeft + bodyRef.current.clientWidth <
+          bodyRef.current.scrollWidth,
+      );
+    }
+  }, [setCanScrollRight, setCanScrollLeft]);
+
+  const handleDismiss = useCallback(() => {
+    dispatch(changeSetting(['dismissed_banners', DISMISSIBLE_ID], true));
+  }, [dispatch]);
+
+  if (dismissed || (!isLoading && suggestions.length === 0)) {
+    return null;
+  }
+
+  if (hidden) {
+    return <div className='inline-follow-suggestions' />;
+  }
+
+  return (
+    <div className='inline-follow-suggestions'>
+      <div className='inline-follow-suggestions__header'>
+        <h3>
+          <FormattedMessage
+            id='follow_suggestions.who_to_follow'
+            defaultMessage='Who to follow'
+          />
+        </h3>
+
+        <div className='inline-follow-suggestions__header__actions'>
+          <button className='link-button' onClick={handleDismiss}>
+            <FormattedMessage
+              id='follow_suggestions.dismiss'
+              defaultMessage="Don't show again"
+            />
+          </button>
+          <Link to='/explore/suggestions' className='link-button'>
+            <FormattedMessage
+              id='follow_suggestions.view_all'
+              defaultMessage='View all'
+            />
+          </Link>
+        </div>
+      </div>
+
+      <div className='inline-follow-suggestions__body'>
+        <div
+          className='inline-follow-suggestions__body__scrollable'
+          ref={bodyRef}
+          onScroll={handleScroll}
+        >
+          {suggestions.map((suggestion) => (
+            <Card
+              key={suggestion.account_id}
+              id={suggestion.account_id}
+              sources={suggestion.sources}
+            />
+          ))}
+        </div>
+
+        {canScrollLeft && (
+          <button
+            className='inline-follow-suggestions__body__scroll-button left'
+            onClick={handleLeftNav}
+            aria-label={intl.formatMessage(messages.previous)}
+          >
+            <div className='inline-follow-suggestions__body__scroll-button__icon'>
+              <Icon id='' icon={ChevronLeftIcon} />
+            </div>
+          </button>
+        )}
+
+        {canScrollRight && (
+          <button
+            className='inline-follow-suggestions__body__scroll-button right'
+            onClick={handleRightNav}
+            aria-label={intl.formatMessage(messages.next)}
+          >
+            <div className='inline-follow-suggestions__body__scroll-button__icon'>
+              <Icon id='' icon={ChevronRightIcon} />
+            </div>
+          </button>
+        )}
+      </div>
+    </div>
+  );
+};
diff --git a/app/javascript/mastodon/features/link_timeline/index.tsx b/app/javascript/mastodon/features/link_timeline/index.tsx
index 262a21afc..1b3f28717 100644
--- a/app/javascript/mastodon/features/link_timeline/index.tsx
+++ b/app/javascript/mastodon/features/link_timeline/index.tsx
@@ -5,7 +5,8 @@ import { useParams } from 'react-router-dom';
 
 import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
 import { expandLinkTimeline } from 'mastodon/actions/timelines';
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
+import type { ColumnRef } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
 import StatusListContainer from 'mastodon/features/ui/containers/status_list_container';
 import type { Card } from 'mastodon/models/status';
@@ -17,7 +18,7 @@ export const LinkTimeline: React.FC<{
   const { url } = useParams<{ url: string }>();
   const decodedUrl = url ? decodeURIComponent(url) : undefined;
   const dispatch = useAppDispatch();
-  const columnRef = useRef<Column>(null);
+  const columnRef = useRef<ColumnRef>(null);
   const firstStatusId = useAppSelector((state) =>
     decodedUrl
       ? // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
diff --git a/app/javascript/mastodon/features/lists/index.tsx b/app/javascript/mastodon/features/lists/index.tsx
index cf413a1fe..25a537336 100644
--- a/app/javascript/mastodon/features/lists/index.tsx
+++ b/app/javascript/mastodon/features/lists/index.tsx
@@ -11,7 +11,7 @@ import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
 import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react';
 import { fetchLists } from 'mastodon/actions/lists';
 import { openModal } from 'mastodon/actions/modal';
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
 import { Icon } from 'mastodon/components/icon';
 import ScrollableList from 'mastodon/components/scrollable_list';
diff --git a/app/javascript/mastodon/features/lists/members.tsx b/app/javascript/mastodon/features/lists/members.tsx
index bdd5064ce..41d02ad9f 100644
--- a/app/javascript/mastodon/features/lists/members.tsx
+++ b/app/javascript/mastodon/features/lists/members.tsx
@@ -7,14 +7,15 @@ import { useParams, Link } from 'react-router-dom';
 
 import { useDebouncedCallback } from 'use-debounce';
 
-import AddIcon from '@/material-icons/400-24px/add.svg?react';
-import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react';
 import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
 import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react';
-import { fetchFollowing } from 'mastodon/actions/accounts';
+import { fetchRelationships } from 'mastodon/actions/accounts';
+import { showAlertForError } from 'mastodon/actions/alerts';
 import { importFetchedAccounts } from 'mastodon/actions/importer';
 import { fetchList } from 'mastodon/actions/lists';
+import { openModal } from 'mastodon/actions/modal';
 import { apiRequest } from 'mastodon/api';
+import { apiFollowAccount } from 'mastodon/api/accounts';
 import {
   apiGetAccounts,
   apiAddAccountToList,
@@ -23,23 +24,22 @@ import {
 import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
 import { Avatar } from 'mastodon/components/avatar';
 import { Button } from 'mastodon/components/button';
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
+import { ColumnSearchHeader } from 'mastodon/components/column_search_header';
 import { FollowersCounter } from 'mastodon/components/counters';
 import { DisplayName } from 'mastodon/components/display_name';
-import { Icon } from 'mastodon/components/icon';
 import ScrollableList from 'mastodon/components/scrollable_list';
 import { ShortNumber } from 'mastodon/components/short_number';
 import { VerifiedBadge } from 'mastodon/components/verified_badge';
-import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context';
 import { me } from 'mastodon/initial_state';
 import { useAppDispatch, useAppSelector } from 'mastodon/store';
 
 const messages = defineMessages({
   heading: { id: 'column.list_members', defaultMessage: 'Manage list members' },
   placeholder: {
-    id: 'lists.search_placeholder',
-    defaultMessage: 'Search people you follow',
+    id: 'lists.search',
+    defaultMessage: 'Search',
   },
   enterSearch: { id: 'lists.add_to_list', defaultMessage: 'Add to list' },
   add: { id: 'lists.add_member', defaultMessage: 'Add' },
@@ -49,54 +49,6 @@ const messages = defineMessages({
 
 type Mode = 'remove' | 'add';
 
-const ColumnSearchHeader: React.FC<{
-  onBack: () => void;
-  onSubmit: (value: string) => void;
-}> = ({ onBack, onSubmit }) => {
-  const intl = useIntl();
-  const [value, setValue] = useState('');
-
-  const handleChange = useCallback(
-    ({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {
-      setValue(value);
-      onSubmit(value);
-    },
-    [setValue, onSubmit],
-  );
-
-  const handleSubmit = useCallback(() => {
-    onSubmit(value);
-  }, [onSubmit, value]);
-
-  return (
-    <ButtonInTabsBar>
-      <form className='column-search-header' onSubmit={handleSubmit}>
-        <button
-          type='button'
-          className='column-header__back-button compact'
-          onClick={onBack}
-          aria-label={intl.formatMessage(messages.back)}
-        >
-          <Icon
-            id='chevron-left'
-            icon={ArrowBackIcon}
-            className='column-back-button__icon'
-          />
-        </button>
-
-        <input
-          type='search'
-          value={value}
-          onChange={handleChange}
-          placeholder={intl.formatMessage(messages.placeholder)}
-          /* eslint-disable-next-line jsx-a11y/no-autofocus */
-          autoFocus
-        />
-      </form>
-    </ButtonInTabsBar>
-  );
-};
-
 const AccountItem: React.FC<{
   accountId: string;
   listId: string;
@@ -104,17 +56,51 @@ const AccountItem: React.FC<{
   onToggle: (accountId: string) => void;
 }> = ({ accountId, listId, partOfList, onToggle }) => {
   const intl = useIntl();
+  const dispatch = useAppDispatch();
   const account = useAppSelector((state) => state.accounts.get(accountId));
+  const relationship = useAppSelector((state) =>
+    accountId ? state.relationships.get(accountId) : undefined,
+  );
+  const following =
+    accountId === me || relationship?.following || relationship?.requested;
+
+  useEffect(() => {
+    if (accountId) {
+      dispatch(fetchRelationships([accountId]));
+    }
+  }, [dispatch, accountId]);
 
   const handleClick = useCallback(() => {
     if (partOfList) {
       void apiRemoveAccountFromList(listId, accountId);
+      onToggle(accountId);
     } else {
-      void apiAddAccountToList(listId, accountId);
+      if (following) {
+        void apiAddAccountToList(listId, accountId);
+        onToggle(accountId);
+      } else {
+        dispatch(
+          openModal({
+            modalType: 'CONFIRM_FOLLOW_TO_LIST',
+            modalProps: {
+              accountId,
+              onConfirm: () => {
+                apiFollowAccount(accountId)
+                  .then(() => apiAddAccountToList(listId, accountId))
+                  .then(() => {
+                    onToggle(accountId);
+                    return '';
+                  })
+                  .catch((err: unknown) => {
+                    dispatch(showAlertForError(err));
+                  });
+              },
+            },
+          }),
+        );
+      }
     }
-
-    onToggle(accountId);
-  }, [accountId, listId, partOfList, onToggle]);
+  }, [dispatch, accountId, following, listId, partOfList, onToggle]);
 
   if (!account) {
     return null;
@@ -156,6 +142,7 @@ const AccountItem: React.FC<{
             text={intl.formatMessage(
               partOfList ? messages.remove : messages.add,
             )}
+            secondary={partOfList}
             onClick={handleClick}
           />
         </div>
@@ -171,9 +158,6 @@ const ListMembers: React.FC<{
   const { id } = useParams<{ id: string }>();
   const intl = useIntl();
 
-  const followingAccountIds = useAppSelector(
-    (state) => state.user_lists.getIn(['following', me, 'items']) as string[],
-  );
   const [searching, setSearching] = useState(false);
   const [accountIds, setAccountIds] = useState<string[]>([]);
   const [searchAccountIds, setSearchAccountIds] = useState<string[]>([]);
@@ -195,8 +179,6 @@ const ListMembers: React.FC<{
         .catch(() => {
           setLoading(false);
         });
-
-      dispatch(fetchFollowing(me));
     }
   }, [dispatch, id]);
 
@@ -243,8 +225,7 @@ const ListMembers: React.FC<{
         signal: searchRequestRef.current.signal,
         params: {
           q: value,
-          resolve: false,
-          following: true,
+          resolve: true,
         },
       })
         .then((data) => {
@@ -265,8 +246,8 @@ const ListMembers: React.FC<{
 
   let displayedAccountIds: string[];
 
-  if (mode === 'add') {
-    displayedAccountIds = searching ? searchAccountIds : followingAccountIds;
+  if (mode === 'add' && searching) {
+    displayedAccountIds = searchAccountIds;
   } else {
     displayedAccountIds = accountIds;
   }
@@ -276,31 +257,21 @@ const ListMembers: React.FC<{
       bindToDocument={!multiColumn}
       label={intl.formatMessage(messages.heading)}
     >
-      {mode === 'remove' ? (
-        <ColumnHeader
-          title={intl.formatMessage(messages.heading)}
-          icon='list-ul'
-          iconComponent={ListAltIcon}
-          multiColumn={multiColumn}
-          showBackButton
-          extraButton={
-            <button
-              onClick={handleSearchClick}
-              type='button'
-              className='column-header__button'
-              title={intl.formatMessage(messages.enterSearch)}
-              aria-label={intl.formatMessage(messages.enterSearch)}
-            >
-              <Icon id='plus' icon={AddIcon} />
-            </button>
-          }
-        />
-      ) : (
-        <ColumnSearchHeader
-          onBack={handleDismissSearchClick}
-          onSubmit={handleSearch}
-        />
-      )}
+      <ColumnHeader
+        title={intl.formatMessage(messages.heading)}
+        icon='list-ul'
+        iconComponent={ListAltIcon}
+        multiColumn={multiColumn}
+        showBackButton
+      />
+
+      <ColumnSearchHeader
+        placeholder={intl.formatMessage(messages.placeholder)}
+        onBack={handleDismissSearchClick}
+        onSubmit={handleSearch}
+        onActivate={handleSearchClick}
+        active={mode === 'add'}
+      />
 
       <ScrollableList
         scrollKey='list_members'
@@ -310,17 +281,15 @@ const ListMembers: React.FC<{
         showLoading={loading && displayedAccountIds.length === 0}
         hasMore={false}
         footer={
-          mode === 'remove' && (
-            <>
-              <div className='spacer' />
+          <>
+            {displayedAccountIds.length > 0 && <div className='spacer' />}
 
-              <div className='column-footer'>
-                <Link to={`/lists/${id}`} className='button button--block'>
-                  <FormattedMessage id='lists.done' defaultMessage='Done' />
-                </Link>
-              </div>
-            </>
-          )
+            <div className='column-footer'>
+              <Link to={`/lists/${id}`} className='button button--block'>
+                <FormattedMessage id='lists.done' defaultMessage='Done' />
+              </Link>
+            </div>
+          </>
         }
         emptyMessage={
           mode === 'remove' ? (
diff --git a/app/javascript/mastodon/features/lists/new.tsx b/app/javascript/mastodon/features/lists/new.tsx
index cf39331d7..100f126c3 100644
--- a/app/javascript/mastodon/features/lists/new.tsx
+++ b/app/javascript/mastodon/features/lists/new.tsx
@@ -14,7 +14,7 @@ import { fetchList } from 'mastodon/actions/lists';
 import { createList, updateList } from 'mastodon/actions/lists_typed';
 import { apiGetAccounts } from 'mastodon/api/lists';
 import type { RepliesPolicyType } from 'mastodon/api_types/lists';
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
 import { LoadingIndicator } from 'mastodon/components/loading_indicator';
 import { useAppDispatch, useAppSelector } from 'mastodon/store';
diff --git a/app/javascript/mastodon/features/mutes/index.jsx b/app/javascript/mastodon/features/mutes/index.jsx
index 3b50244ea..5a5711da5 100644
--- a/app/javascript/mastodon/features/mutes/index.jsx
+++ b/app/javascript/mastodon/features/mutes/index.jsx
@@ -11,11 +11,11 @@ import { connect } from 'react-redux';
 import { debounce } from 'lodash';
 
 import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react';
+import { Account } from 'mastodon/components/account';
 
 import { fetchMutes, expandMutes } from '../../actions/mutes';
 import { LoadingIndicator } from '../../components/loading_indicator';
 import ScrollableList from '../../components/scrollable_list';
-import AccountContainer from '../../containers/account_container';
 import Column from '../ui/components/column';
 
 const messages = defineMessages({
@@ -72,7 +72,7 @@ class Mutes extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {accountIds.map(id =>
-            <AccountContainer key={id} id={id} defaultAction='mute' />,
+            <Account key={id} id={id} defaultAction='mute' />,
           )}
         </ScrollableList>
 
diff --git a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx b/app/javascript/mastodon/features/notifications/components/filter_bar.jsx
deleted file mode 100644
index c288c2c0d..000000000
--- a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx
+++ /dev/null
@@ -1,119 +0,0 @@
-import PropTypes from 'prop-types';
-import { PureComponent } from 'react';
-
-import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-
-import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
-import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react';
-import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';
-import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
-import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react';
-import StarIcon from '@/material-icons/400-24px/star.svg?react';
-import { Icon }  from 'mastodon/components/icon';
-
-const tooltips = defineMessages({
-  mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },
-  favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favorites' },
-  boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },
-  polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' },
-  follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },
-  statuses: { id: 'notifications.filter.statuses', defaultMessage: 'Updates from people you follow' },
-});
-
-class FilterBar extends PureComponent {
-
-  static propTypes = {
-    selectFilter: PropTypes.func.isRequired,
-    selectedFilter: PropTypes.string.isRequired,
-    advancedMode: PropTypes.bool.isRequired,
-    intl: PropTypes.object.isRequired,
-  };
-
-  onClick (notificationType) {
-    return () => this.props.selectFilter(notificationType);
-  }
-
-  render () {
-    const { selectedFilter, advancedMode, intl } = this.props;
-    const renderedElement = !advancedMode ? (
-      <div className='notification__filter-bar'>
-        <button
-          className={selectedFilter === 'all' ? 'active' : ''}
-          onClick={this.onClick('all')}
-        >
-          <FormattedMessage
-            id='notifications.filter.all'
-            defaultMessage='All'
-          />
-        </button>
-        <button
-          className={selectedFilter === 'mention' ? 'active' : ''}
-          onClick={this.onClick('mention')}
-        >
-          <FormattedMessage
-            id='notifications.filter.mentions'
-            defaultMessage='Mentions'
-          />
-        </button>
-      </div>
-    ) : (
-      <div className='notification__filter-bar'>
-        <button
-          className={selectedFilter === 'all' ? 'active' : ''}
-          onClick={this.onClick('all')}
-        >
-          <FormattedMessage
-            id='notifications.filter.all'
-            defaultMessage='All'
-          />
-        </button>
-        <button
-          className={selectedFilter === 'mention' ? 'active' : ''}
-          onClick={this.onClick('mention')}
-          title={intl.formatMessage(tooltips.mentions)}
-        >
-          <Icon id='reply-all' icon={ReplyAllIcon} />
-        </button>
-        <button
-          className={selectedFilter === 'favourite' ? 'active' : ''}
-          onClick={this.onClick('favourite')}
-          title={intl.formatMessage(tooltips.favourites)}
-        >
-          <Icon id='star' icon={StarIcon} />
-        </button>
-        <button
-          className={selectedFilter === 'reblog' ? 'active' : ''}
-          onClick={this.onClick('reblog')}
-          title={intl.formatMessage(tooltips.boosts)}
-        >
-          <Icon id='retweet' icon={RepeatIcon} />
-        </button>
-        <button
-          className={selectedFilter === 'poll' ? 'active' : ''}
-          onClick={this.onClick('poll')}
-          title={intl.formatMessage(tooltips.polls)}
-        >
-          <Icon id='tasks' icon={InsertChartIcon} />
-        </button>
-        <button
-          className={selectedFilter === 'status' ? 'active' : ''}
-          onClick={this.onClick('status')}
-          title={intl.formatMessage(tooltips.statuses)}
-        >
-          <Icon id='home' icon={HomeIcon} />
-        </button>
-        <button
-          className={selectedFilter === 'follow' ? 'active' : ''}
-          onClick={this.onClick('follow')}
-          title={intl.formatMessage(tooltips.follows)}
-        >
-          <Icon id='user-plus' icon={PersonAddIcon} />
-        </button>
-      </div>
-    );
-    return renderedElement;
-  }
-
-}
-
-export default injectIntl(FilterBar);
diff --git a/app/javascript/mastodon/features/notifications/components/notification.jsx b/app/javascript/mastodon/features/notifications/components/notification.jsx
index 7e3a860e3..00963b227 100644
--- a/app/javascript/mastodon/features/notifications/components/notification.jsx
+++ b/app/javascript/mastodon/features/notifications/components/notification.jsx
@@ -18,8 +18,8 @@ import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react';
 import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react';
 import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
 import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
+import { Account } from 'mastodon/components/account';
 import { Icon }  from 'mastodon/components/icon';
-import AccountContainer from 'mastodon/containers/account_container';
 import StatusContainer from 'mastodon/containers/status_container';
 import { me } from 'mastodon/initial_state';
 import { WithRouterPropTypes } from 'mastodon/utils/react_router';
@@ -147,7 +147,7 @@ class Notification extends ImmutablePureComponent {
             </span>
           </div>
 
-          <AccountContainer id={account.get('id')} hidden={this.props.hidden} />
+          <Account id={account.get('id')} hidden={this.props.hidden} />
         </div>
       </HotKeys>
     );
@@ -167,7 +167,7 @@ class Notification extends ImmutablePureComponent {
             </span>
           </div>
 
-          <FollowRequestContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} />
+          <FollowRequestContainer id={account.get('id')} hidden={this.props.hidden} />
         </div>
       </HotKeys>
     );
@@ -420,7 +420,7 @@ class Notification extends ImmutablePureComponent {
             </span>
           </div>
 
-          <AccountContainer id={account.get('id')} hidden={this.props.hidden} />
+          <Account id={account.get('id')} hidden={this.props.hidden} />
         </div>
       </HotKeys>
     );
diff --git a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js
deleted file mode 100644
index 4e0184cef..000000000
--- a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { connect } from 'react-redux';
-
-import { setFilter } from '../../../actions/notifications';
-import FilterBar from '../components/filter_bar';
-
-const makeMapStateToProps = state => ({
-  selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),
-  advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),
-});
-
-const mapDispatchToProps = (dispatch) => ({
-  selectFilter (newActiveFilter) {
-    dispatch(setFilter(newActiveFilter));
-  },
-});
-
-export default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);
diff --git a/app/javascript/mastodon/features/notifications/index.jsx b/app/javascript/mastodon/features/notifications/index.jsx
deleted file mode 100644
index cefbd544b..000000000
--- a/app/javascript/mastodon/features/notifications/index.jsx
+++ /dev/null
@@ -1,308 +0,0 @@
-import PropTypes from 'prop-types';
-import { PureComponent } from 'react';
-
-import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-
-import { Helmet } from 'react-helmet';
-
-import { createSelector } from '@reduxjs/toolkit';
-import { List as ImmutableList } from 'immutable';
-import ImmutablePropTypes from 'react-immutable-proptypes';
-import { connect } from 'react-redux';
-
-import { debounce } from 'lodash';
-
-import DoneAllIcon from '@/material-icons/400-24px/done_all.svg?react';
-import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react';
-import { compareId } from 'mastodon/compare_id';
-import { Icon }  from 'mastodon/components/icon';
-import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator';
-import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
-
-import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
-import { submitMarkers } from '../../actions/markers';
-import {
-  expandNotifications,
-  scrollTopNotifications,
-  loadPending,
-  mountNotifications,
-  unmountNotifications,
-  markNotificationsAsRead,
-} from '../../actions/notifications';
-import Column from '../../components/column';
-import ColumnHeader from '../../components/column_header';
-import { LoadGap } from '../../components/load_gap';
-import ScrollableList from '../../components/scrollable_list';
-
-import {
-  FilteredNotificationsBanner,
-  FilteredNotificationsIconButton,
-} from './components/filtered_notifications_banner';
-import NotificationsPermissionBanner from './components/notifications_permission_banner';
-import ColumnSettingsContainer from './containers/column_settings_container';
-import FilterBarContainer from './containers/filter_bar_container';
-import NotificationContainer from './containers/notification_container';
-
-const messages = defineMessages({
-  title: { id: 'column.notifications', defaultMessage: 'Notifications' },
-  markAsRead : { id: 'notifications.mark_as_read', defaultMessage: 'Mark every notification as read' },
-});
-
-const getExcludedTypes = createSelector([
-  state => state.getIn(['settings', 'notifications', 'shows']),
-], (shows) => {
-  return ImmutableList(shows.filter(item => !item).keys());
-});
-
-const getNotifications = createSelector([
-  state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),
-  state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),
-  getExcludedTypes,
-  state => state.getIn(['notifications', 'items']),
-], (showFilterBar, allowedType, excludedTypes, notifications) => {
-  if (!showFilterBar || allowedType === 'all') {
-    // used if user changed the notification settings after loading the notifications from the server
-    // otherwise a list of notifications will come pre-filtered from the backend
-    // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category
-    return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));
-  }
-  return notifications.filter(item => item === null || allowedType === item.get('type'));
-});
-
-const mapStateToProps = state => ({
-  notifications: getNotifications(state),
-  isLoading: state.getIn(['notifications', 'isLoading'], 0) > 0,
-  isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0,
-  hasMore: state.getIn(['notifications', 'hasMore']),
-  numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,
-  lastReadId: state.getIn(['settings', 'notifications', 'showUnread']) ? state.getIn(['notifications', 'readMarkerId']) : '0',
-  canMarkAsRead: state.getIn(['settings', 'notifications', 'showUnread']) && state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0),
-  needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default' && !state.getIn(['settings', 'notifications', 'dismissPermissionBanner']),
-});
-
-class Notifications extends PureComponent {
-  static propTypes = {
-    identity: identityContextPropShape,
-    columnId: PropTypes.string,
-    notifications: ImmutablePropTypes.list.isRequired,
-    dispatch: PropTypes.func.isRequired,
-    intl: PropTypes.object.isRequired,
-    isLoading: PropTypes.bool,
-    isUnread: PropTypes.bool,
-    multiColumn: PropTypes.bool,
-    hasMore: PropTypes.bool,
-    numPending: PropTypes.number,
-    lastReadId: PropTypes.string,
-    canMarkAsRead: PropTypes.bool,
-    needsNotificationPermission: PropTypes.bool,
-  };
-
-  static defaultProps = {
-    trackScroll: true,
-  };
-
-  UNSAFE_componentWillMount() {
-    this.props.dispatch(mountNotifications());
-  }
-
-  componentWillUnmount () {
-    this.handleLoadOlder.cancel();
-    this.handleScrollToTop.cancel();
-    this.handleScroll.cancel();
-    this.props.dispatch(scrollTopNotifications(false));
-    this.props.dispatch(unmountNotifications());
-  }
-
-  handleLoadGap = (maxId) => {
-    this.props.dispatch(expandNotifications({ maxId }));
-  };
-
-  handleLoadOlder = debounce(() => {
-    const last = this.props.notifications.last();
-    this.props.dispatch(expandNotifications({ maxId: last && last.get('id') }));
-  }, 300, { leading: true });
-
-  handleLoadPending = () => {
-    this.props.dispatch(loadPending());
-  };
-
-  handleScrollToTop = debounce(() => {
-    this.props.dispatch(scrollTopNotifications(true));
-  }, 100);
-
-  handleScroll = debounce(() => {
-    this.props.dispatch(scrollTopNotifications(false));
-  }, 100);
-
-  handlePin = () => {
-    const { columnId, dispatch } = this.props;
-
-    if (columnId) {
-      dispatch(removeColumn(columnId));
-    } else {
-      dispatch(addColumn('NOTIFICATIONS', {}));
-    }
-  };
-
-  handleMove = (dir) => {
-    const { columnId, dispatch } = this.props;
-    dispatch(moveColumn(columnId, dir));
-  };
-
-  handleHeaderClick = () => {
-    this.column.scrollTop();
-  };
-
-  setColumnRef = c => {
-    this.column = c;
-  };
-
-  handleMoveUp = id => {
-    const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) - 1;
-    this._selectChild(elementIndex, true);
-  };
-
-  handleMoveDown = id => {
-    const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;
-    this._selectChild(elementIndex, false);
-  };
-
-  _selectChild (index, align_top) {
-    const container = this.column.node;
-    const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);
-
-    if (element) {
-      if (align_top && container.scrollTop > element.offsetTop) {
-        element.scrollIntoView(true);
-      } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {
-        element.scrollIntoView(false);
-      }
-      element.focus();
-    }
-  }
-
-  handleMarkAsRead = () => {
-    this.props.dispatch(markNotificationsAsRead());
-    this.props.dispatch(submitMarkers({ immediate: true }));
-  };
-
-  render () {
-    const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props;
-    const pinned = !!columnId;
-    const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />;
-    const { signedIn } = this.props.identity;
-
-    let scrollableContent = null;
-
-    const filterBarContainer = signedIn
-      ? (<FilterBarContainer />)
-      : null;
-
-    if (isLoading && this.scrollableContent) {
-      scrollableContent = this.scrollableContent;
-    } else if (notifications.size > 0 || hasMore) {
-      scrollableContent = notifications.map((item, index) => item === null ? (
-        <LoadGap
-          key={'gap:' + notifications.getIn([index + 1, 'id'])}
-          disabled={isLoading}
-          param={index > 0 ? notifications.getIn([index - 1, 'id']) : null}
-          onClick={this.handleLoadGap}
-        />
-      ) : (
-        <NotificationContainer
-          key={item.get('id')}
-          notification={item}
-          accountId={item.get('account')}
-          onMoveUp={this.handleMoveUp}
-          onMoveDown={this.handleMoveDown}
-          unread={lastReadId !== '0' && compareId(item.get('id'), lastReadId) > 0}
-        />
-      ));
-    } else {
-      scrollableContent = null;
-    }
-
-    this.scrollableContent = scrollableContent;
-
-    let scrollContainer;
-
-    const prepend = (
-      <>
-        {needsNotificationPermission && <NotificationsPermissionBanner />}
-        <FilteredNotificationsBanner />
-      </>
-    );
-
-    if (signedIn) {
-      scrollContainer = (
-        <ScrollableList
-          scrollKey={`notifications-${columnId}`}
-          trackScroll={!pinned}
-          isLoading={isLoading}
-          showLoading={isLoading && notifications.size === 0}
-          hasMore={hasMore}
-          numPending={numPending}
-          prepend={prepend}
-          alwaysPrepend
-          emptyMessage={emptyMessage}
-          onLoadMore={this.handleLoadOlder}
-          onLoadPending={this.handleLoadPending}
-          onScrollToTop={this.handleScrollToTop}
-          onScroll={this.handleScroll}
-          bindToDocument={!multiColumn}
-        >
-          {scrollableContent}
-        </ScrollableList>
-      );
-    } else {
-      scrollContainer = <NotSignedInIndicator />;
-    }
-
-    const extraButton = (
-      <>
-        <FilteredNotificationsIconButton className='column-header__button' />
-        {canMarkAsRead && (
-          <button
-            aria-label={intl.formatMessage(messages.markAsRead)}
-            title={intl.formatMessage(messages.markAsRead)}
-            onClick={this.handleMarkAsRead}
-            className='column-header__button'
-          >
-            <Icon id='done-all' icon={DoneAllIcon} />
-          </button>
-        )}
-      </>
-    );
-
-    return (
-      <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.title)}>
-        <ColumnHeader
-          icon='bell'
-          iconComponent={NotificationsIcon}
-          active={isUnread}
-          title={intl.formatMessage(messages.title)}
-          onPin={this.handlePin}
-          onMove={this.handleMove}
-          onClick={this.handleHeaderClick}
-          pinned={pinned}
-          multiColumn={multiColumn}
-          extraButton={extraButton}
-        >
-          <ColumnSettingsContainer />
-        </ColumnHeader>
-
-        {filterBarContainer}
-
-        {scrollContainer}
-
-        <Helmet>
-          <title>{intl.formatMessage(messages.title)}</title>
-          <meta name='robots' content='noindex' />
-        </Helmet>
-      </Column>
-    );
-  }
-
-}
-
-export default connect(mapStateToProps)(withIdentity(injectIntl(Notifications)));
diff --git a/app/javascript/mastodon/features/notifications_v2/index.tsx b/app/javascript/mastodon/features/notifications_v2/index.tsx
index 730d95bcd..bb476fe51 100644
--- a/app/javascript/mastodon/features/notifications_v2/index.tsx
+++ b/app/javascript/mastodon/features/notifications_v2/index.tsx
@@ -36,7 +36,8 @@ import { useAppDispatch, useAppSelector } from 'mastodon/store';
 
 import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
 import { submitMarkers } from '../../actions/markers';
-import Column from '../../components/column';
+import { Column } from '../../components/column';
+import type { ColumnRef } from '../../components/column';
 import { ColumnHeader } from '../../components/column_header';
 import { LoadGap } from '../../components/load_gap';
 import ScrollableList from '../../components/scrollable_list';
@@ -96,7 +97,7 @@ export const Notifications: React.FC<{
     selectNeedsNotificationPermission,
   );
 
-  const columnRef = useRef<Column>(null);
+  const columnRef = useRef<ColumnRef>(null);
 
   const selectChild = useCallback((index: number, alignTop: boolean) => {
     const container = columnRef.current?.node as HTMLElement | undefined;
diff --git a/app/javascript/mastodon/features/notifications_wrapper.jsx b/app/javascript/mastodon/features/notifications_wrapper.jsx
deleted file mode 100644
index 50383d5eb..000000000
--- a/app/javascript/mastodon/features/notifications_wrapper.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import Notifications_v2 from 'mastodon/features/notifications_v2';
-
-export const NotificationsWrapper = (props) => {
-  return (
-    <Notifications_v2 {...props} />
-  );
-};
-
-export default NotificationsWrapper;
\ No newline at end of file
diff --git a/app/javascript/mastodon/features/onboarding/components/step.jsx b/app/javascript/mastodon/features/onboarding/components/step.jsx
deleted file mode 100644
index a2a1653b8..000000000
--- a/app/javascript/mastodon/features/onboarding/components/step.jsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import PropTypes from 'prop-types';
-
-import { Link } from 'react-router-dom';
-
-import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react';
-import CheckIcon from '@/material-icons/400-24px/done.svg?react';
-import { Icon } from 'mastodon/components/icon';
-
-export const Step = ({ label, description, icon, iconComponent, completed, onClick, href, to }) => {
-  const content = (
-    <>
-      <div className='onboarding__steps__item__icon'>
-        <Icon id={icon} icon={iconComponent} />
-      </div>
-
-      <div className='onboarding__steps__item__description'>
-        <h6>{label}</h6>
-        <p>{description}</p>
-      </div>
-
-      <div className={completed ? 'onboarding__steps__item__progress' : 'onboarding__steps__item__go'}>
-        {completed ? <Icon icon={CheckIcon} /> : <Icon icon={ArrowRightAltIcon} />}
-      </div>
-    </>
-  );
-
-  if (href) {
-    return (
-      <a href={href} onClick={onClick} target='_blank' rel='noopener' className='onboarding__steps__item'>
-        {content}
-      </a>
-    );
-  } else if (to) {
-    return (
-      <Link to={to} className='onboarding__steps__item'>
-        {content}
-      </Link>
-    );
-  }
-
-  return (
-    <button onClick={onClick} className='onboarding__steps__item'>
-      {content}
-    </button>
-  );
-};
-
-Step.propTypes = {
-  label: PropTypes.node,
-  description: PropTypes.node,
-  icon: PropTypes.string,
-  iconComponent: PropTypes.func,
-  completed: PropTypes.bool,
-  href: PropTypes.string,
-  to: PropTypes.string,
-  onClick: PropTypes.func,
-};
diff --git a/app/javascript/mastodon/features/onboarding/follows.jsx b/app/javascript/mastodon/features/onboarding/follows.jsx
deleted file mode 100644
index e23a335c0..000000000
--- a/app/javascript/mastodon/features/onboarding/follows.jsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { useEffect } from 'react';
-
-import { FormattedMessage } from 'react-intl';
-
-import { Link } from 'react-router-dom';
-
-import { useDispatch } from 'react-redux';
-
-
-import { fetchSuggestions } from 'mastodon/actions/suggestions';
-import { markAsPartial } from 'mastodon/actions/timelines';
-import { ColumnBackButton } from 'mastodon/components/column_back_button';
-import { EmptyAccount } from 'mastodon/components/empty_account';
-import Account from 'mastodon/containers/account_container';
-import { useAppSelector } from 'mastodon/store';
-
-export const Follows = () => {
-  const dispatch = useDispatch();
-  const isLoading = useAppSelector(state => state.getIn(['suggestions', 'isLoading']));
-  const suggestions = useAppSelector(state => state.getIn(['suggestions', 'items']));
-
-  useEffect(() => {
-    dispatch(fetchSuggestions(true));
-
-    return () => {
-      dispatch(markAsPartial('home'));
-    };
-  }, [dispatch]);
-
-  let loadedContent;
-
-  if (isLoading) {
-    loadedContent = (new Array(8)).fill().map((_, i) => <EmptyAccount key={i} />);
-  } else if (suggestions.isEmpty()) {
-    loadedContent = <div className='follow-recommendations__empty'><FormattedMessage id='onboarding.follows.empty' defaultMessage='Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.' /></div>;
-  } else {
-    loadedContent = suggestions.map(suggestion => <Account id={suggestion.get('account')} key={suggestion.get('account')} withBio />);
-  }
-
-  return (
-    <>
-      <ColumnBackButton />
-
-      <div className='scrollable privacy-policy'>
-        <div className='column-title'>
-          <h3><FormattedMessage id='onboarding.follows.title' defaultMessage='Popular on Mastodon' /></h3>
-          <p><FormattedMessage id='onboarding.follows.lead' defaultMessage='You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!' /></p>
-        </div>
-
-        <div className='follow-recommendations'>
-          {loadedContent}
-        </div>
-
-        <p className='onboarding__lead'><FormattedMessage id='onboarding.tips.accounts_from_other_servers' defaultMessage='<strong>Did you know?</strong> Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!' values={{ strong: chunks => <strong>{chunks}</strong> }} /></p>
-
-        <div className='onboarding__footer'>
-          <Link className='link-button' to='/start'><FormattedMessage id='onboarding.actions.back' defaultMessage='Take me back' /></Link>
-        </div>
-      </div>
-    </>
-  );
-};
diff --git a/app/javascript/mastodon/features/onboarding/follows.tsx b/app/javascript/mastodon/features/onboarding/follows.tsx
new file mode 100644
index 000000000..703a4449b
--- /dev/null
+++ b/app/javascript/mastodon/features/onboarding/follows.tsx
@@ -0,0 +1,186 @@
+import { useEffect, useState, useCallback, useRef } from 'react';
+
+import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
+
+import { Helmet } from 'react-helmet';
+import { Link } from 'react-router-dom';
+
+import { useDebouncedCallback } from 'use-debounce';
+
+import PersonIcon from '@/material-icons/400-24px/person.svg?react';
+import { fetchRelationships } from 'mastodon/actions/accounts';
+import { importFetchedAccounts } from 'mastodon/actions/importer';
+import { fetchSuggestions } from 'mastodon/actions/suggestions';
+import { markAsPartial } from 'mastodon/actions/timelines';
+import { apiRequest } from 'mastodon/api';
+import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
+import { Account } from 'mastodon/components/account';
+import { Column } from 'mastodon/components/column';
+import { ColumnHeader } from 'mastodon/components/column_header';
+import { ColumnSearchHeader } from 'mastodon/components/column_search_header';
+import ScrollableList from 'mastodon/components/scrollable_list';
+import { useAppSelector, useAppDispatch } from 'mastodon/store';
+
+const messages = defineMessages({
+  title: {
+    id: 'onboarding.follows.title',
+    defaultMessage: 'Follow people to get started',
+  },
+  search: { id: 'onboarding.follows.search', defaultMessage: 'Search' },
+  back: { id: 'onboarding.follows.back', defaultMessage: 'Back' },
+});
+
+type Mode = 'remove' | 'add';
+
+export const Follows: React.FC<{
+  multiColumn?: boolean;
+}> = ({ multiColumn }) => {
+  const intl = useIntl();
+  const dispatch = useAppDispatch();
+  const isLoading = useAppSelector((state) => state.suggestions.isLoading);
+  const suggestions = useAppSelector((state) => state.suggestions.items);
+  const [searchAccountIds, setSearchAccountIds] = useState<string[]>([]);
+  const [mode, setMode] = useState<Mode>('remove');
+  const [isLoadingSearch, setIsLoadingSearch] = useState(false);
+  const [isSearching, setIsSearching] = useState(false);
+
+  useEffect(() => {
+    void dispatch(fetchSuggestions());
+
+    return () => {
+      dispatch(markAsPartial('home'));
+    };
+  }, [dispatch]);
+
+  const handleSearchClick = useCallback(() => {
+    setMode('add');
+  }, [setMode]);
+
+  const handleDismissSearchClick = useCallback(() => {
+    setMode('remove');
+    setIsSearching(false);
+  }, [setMode, setIsSearching]);
+
+  const searchRequestRef = useRef<AbortController | null>(null);
+
+  const handleSearch = useDebouncedCallback(
+    (value: string) => {
+      if (searchRequestRef.current) {
+        searchRequestRef.current.abort();
+      }
+
+      if (value.trim().length === 0) {
+        setIsSearching(false);
+        setSearchAccountIds([]);
+        return;
+      }
+
+      setIsSearching(true);
+      setIsLoadingSearch(true);
+
+      searchRequestRef.current = new AbortController();
+
+      void apiRequest<ApiAccountJSON[]>('GET', 'v1/accounts/search', {
+        signal: searchRequestRef.current.signal,
+        params: {
+          q: value,
+        },
+      })
+        .then((data) => {
+          dispatch(importFetchedAccounts(data));
+          dispatch(fetchRelationships(data.map((a) => a.id)));
+          setSearchAccountIds(data.map((a) => a.id));
+          setIsLoadingSearch(false);
+          return '';
+        })
+        .catch(() => {
+          setIsLoadingSearch(false);
+        });
+    },
+    500,
+    { leading: true, trailing: true },
+  );
+
+  let displayedAccountIds: string[];
+
+  if (mode === 'add' && isSearching) {
+    displayedAccountIds = searchAccountIds;
+  } else {
+    displayedAccountIds = suggestions.map(
+      (suggestion) => suggestion.account_id,
+    );
+  }
+
+  return (
+    <Column
+      bindToDocument={!multiColumn}
+      label={intl.formatMessage(messages.title)}
+    >
+      <ColumnHeader
+        title={intl.formatMessage(messages.title)}
+        icon='person'
+        iconComponent={PersonIcon}
+        multiColumn={multiColumn}
+        showBackButton
+      />
+
+      <ColumnSearchHeader
+        placeholder={intl.formatMessage(messages.search)}
+        onBack={handleDismissSearchClick}
+        onActivate={handleSearchClick}
+        active={mode === 'add'}
+        onSubmit={handleSearch}
+      />
+
+      <ScrollableList
+        scrollKey='follow_recommendations'
+        trackScroll={!multiColumn}
+        bindToDocument={!multiColumn}
+        showLoading={
+          (isLoading || isLoadingSearch) && displayedAccountIds.length === 0
+        }
+        hasMore={false}
+        isLoading={isLoading || isLoadingSearch}
+        footer={
+          <>
+            {displayedAccountIds.length > 0 && <div className='spacer' />}
+
+            <div className='column-footer'>
+              <Link className='button button--block' to='/home'>
+                <FormattedMessage
+                  id='onboarding.follows.done'
+                  defaultMessage='Done'
+                />
+              </Link>
+            </div>
+          </>
+        }
+        emptyMessage={
+          mode === 'remove' ? (
+            <FormattedMessage
+              id='onboarding.follows.empty'
+              defaultMessage='Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.'
+            />
+          ) : (
+            <FormattedMessage
+              id='lists.no_results_found'
+              defaultMessage='No results found.'
+            />
+          )
+        }
+      >
+        {displayedAccountIds.map((accountId) => (
+          <Account id={accountId} key={accountId} withBio />
+        ))}
+      </ScrollableList>
+
+      <Helmet>
+        <title>{intl.formatMessage(messages.title)}</title>
+        <meta name='robots' content='noindex' />
+      </Helmet>
+    </Column>
+  );
+};
+
+// eslint-disable-next-line import/no-default-export
+export default Follows;
diff --git a/app/javascript/mastodon/features/onboarding/index.jsx b/app/javascript/mastodon/features/onboarding/index.jsx
deleted file mode 100644
index d100a1c3d..000000000
--- a/app/javascript/mastodon/features/onboarding/index.jsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { useCallback } from 'react';
-
-import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
-
-import { Helmet } from 'react-helmet';
-import { Link, Switch, Route } from 'react-router-dom';
-
-import { useDispatch } from 'react-redux';
-
-
-import illustration from '@/images/elephant_ui_conversation.svg';
-import AccountCircleIcon from '@/material-icons/400-24px/account_circle.svg?react';
-import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react';
-import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react';
-import EditNoteIcon from '@/material-icons/400-24px/edit_note.svg?react';
-import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';
-import { focusCompose } from 'mastodon/actions/compose';
-import { Icon }  from 'mastodon/components/icon';
-import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator';
-import Column from 'mastodon/features/ui/components/column';
-import { me } from 'mastodon/initial_state';
-import { useAppSelector } from 'mastodon/store';
-import { assetHost } from 'mastodon/utils/config';
-
-import { Step } from './components/step';
-import { Follows } from './follows';
-import { Profile } from './profile';
-import { Share } from './share';
-
-const messages = defineMessages({
-  template: { id: 'onboarding.compose.template', defaultMessage: 'Hello #Mastodon!' },
-});
-
-const Onboarding = () => {
-  const account = useAppSelector(state => state.getIn(['accounts', me]));
-  const dispatch = useDispatch();
-  const intl = useIntl();
-
-  const handleComposeClick = useCallback(() => {
-    dispatch(focusCompose(intl.formatMessage(messages.template)));
-  }, [dispatch, intl]);
-
-  return (
-    <Column>
-      {account ? (
-        <Switch>
-          <Route path='/start' exact>
-            <div className='scrollable privacy-policy'>
-              <div className='column-title'>
-                <img src={illustration} alt='' className='onboarding__illustration' />
-                <h3><FormattedMessage id='onboarding.start.title' defaultMessage="You've made it!" /></h3>
-                <p><FormattedMessage id='onboarding.start.lead' defaultMessage="Your new Mastodon account is ready to go. Here's how you can make the most of it:" /></p>
-              </div>
-
-              <div className='onboarding__steps'>
-                <Step to='/start/profile' completed={(!account.get('avatar').endsWith('missing.png')) || (account.get('display_name').length > 0 && account.get('note').length > 0)} icon='address-book-o' iconComponent={AccountCircleIcon} label={<FormattedMessage id='onboarding.steps.setup_profile.title' defaultMessage='Customize your profile' />} description={<FormattedMessage id='onboarding.steps.setup_profile.body' defaultMessage='Others are more likely to interact with you with a filled out profile.' />} />
-                <Step to='/start/follows' completed={(account.get('following_count') * 1) >= 1} icon='user-plus' iconComponent={PersonAddIcon} label={<FormattedMessage id='onboarding.steps.follow_people.title' defaultMessage='Find at least {count, plural, one {one person} other {# people}} to follow' values={{ count: 7 }} />} description={<FormattedMessage id='onboarding.steps.follow_people.body' defaultMessage="You curate your own home feed. Let's fill it with interesting people." />} />
-                <Step onClick={handleComposeClick} completed={(account.get('statuses_count') * 1) >= 1} icon='pencil-square-o' iconComponent={EditNoteIcon} label={<FormattedMessage id='onboarding.steps.publish_status.title' defaultMessage='Make your first post' />} description={<FormattedMessage id='onboarding.steps.publish_status.body' defaultMessage='Say hello to the world.' values={{ emoji: <img className='emojione' alt='🐘' src={`${assetHost}/emoji/1f418.svg`} /> }} />} />
-                <Step to='/start/share' icon='copy' iconComponent={ContentCopyIcon} label={<FormattedMessage id='onboarding.steps.share_profile.title' defaultMessage='Share your profile' />} description={<FormattedMessage id='onboarding.steps.share_profile.body' defaultMessage='Let your friends know how to find you on Mastodon!' />} />
-              </div>
-
-              <p className='onboarding__lead'><FormattedMessage id='onboarding.start.skip' defaultMessage="Don't need help getting started?" /></p>
-
-              <div className='onboarding__links'>
-                <Link to='/explore' className='onboarding__link'>
-                  <FormattedMessage id='onboarding.actions.go_to_explore' defaultMessage='Take me to trending' />
-                  <Icon icon={ArrowRightAltIcon} />
-                </Link>
-
-                <Link to='/home' className='onboarding__link'>
-                  <FormattedMessage id='onboarding.actions.go_to_home' defaultMessage='Take me to my home feed' />
-                  <Icon icon={ArrowRightAltIcon} />
-                </Link>
-              </div>
-            </div>
-          </Route>
-
-          <Route path='/start/profile' component={Profile} />
-          <Route path='/start/follows' component={Follows} />
-          <Route path='/start/share' component={Share} />
-        </Switch>
-      ) : <NotSignedInIndicator />}
-
-      <Helmet>
-        <meta name='robots' content='noindex' />
-      </Helmet>
-    </Column>
-  );
-};
-
-export default Onboarding;
diff --git a/app/javascript/mastodon/features/onboarding/profile.jsx b/app/javascript/mastodon/features/onboarding/profile.jsx
deleted file mode 100644
index 14250ae39..000000000
--- a/app/javascript/mastodon/features/onboarding/profile.jsx
+++ /dev/null
@@ -1,162 +0,0 @@
-import { useState, useMemo, useCallback, createRef } from 'react';
-
-import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
-
-import classNames from 'classnames';
-import { useHistory } from 'react-router-dom';
-
-
-import { useDispatch } from 'react-redux';
-
-import Toggle from 'react-toggle';
-
-import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react';
-import EditIcon from '@/material-icons/400-24px/edit.svg?react';
-import { updateAccount } from 'mastodon/actions/accounts';
-import { Button } from 'mastodon/components/button';
-import { ColumnBackButton } from 'mastodon/components/column_back_button';
-import { Icon } from 'mastodon/components/icon';
-import { LoadingIndicator } from 'mastodon/components/loading_indicator';
-import { me } from 'mastodon/initial_state';
-import { useAppSelector } from 'mastodon/store';
-import { unescapeHTML } from 'mastodon/utils/html';
-
-const messages = defineMessages({
-  uploadHeader: { id: 'onboarding.profile.upload_header', defaultMessage: 'Upload profile header' },
-  uploadAvatar: { id: 'onboarding.profile.upload_avatar', defaultMessage: 'Upload profile picture' },
-});
-
-const nullIfMissing = path => path.endsWith('missing.png') ? null : path;
-
-export const Profile = () => {
-  const account = useAppSelector(state => state.getIn(['accounts', me]));
-  const [displayName, setDisplayName] = useState(account.get('display_name'));
-  const [note, setNote] = useState(unescapeHTML(account.get('note')));
-  const [avatar, setAvatar] = useState(null);
-  const [header, setHeader] = useState(null);
-  const [discoverable, setDiscoverable] = useState(account.get('discoverable'));
-  const [isSaving, setIsSaving] = useState(false);
-  const [errors, setErrors] = useState();
-  const avatarFileRef = createRef();
-  const headerFileRef = createRef();
-  const dispatch = useDispatch();
-  const intl = useIntl();
-  const history = useHistory();
-
-  const handleDisplayNameChange = useCallback(e => {
-    setDisplayName(e.target.value);
-  }, [setDisplayName]);
-
-  const handleNoteChange = useCallback(e => {
-    setNote(e.target.value);
-  }, [setNote]);
-
-  const handleDiscoverableChange = useCallback(e => {
-    setDiscoverable(e.target.checked);
-  }, [setDiscoverable]);
-
-  const handleAvatarChange = useCallback(e => {
-    setAvatar(e.target?.files?.[0]);
-  }, [setAvatar]);
-
-  const handleHeaderChange = useCallback(e => {
-    setHeader(e.target?.files?.[0]);
-  }, [setHeader]);
-
-  const avatarPreview = useMemo(() => avatar ? URL.createObjectURL(avatar) : nullIfMissing(account.get('avatar')), [avatar, account]);
-  const headerPreview = useMemo(() => header ? URL.createObjectURL(header) : nullIfMissing(account.get('header')), [header, account]);
-
-  const handleSubmit = useCallback(() => {
-    setIsSaving(true);
-
-    dispatch(updateAccount({
-      displayName,
-      note,
-      avatar,
-      header,
-      discoverable,
-      indexable: discoverable,
-    })).then(() => history.push('/start/follows')).catch(err => {
-      setIsSaving(false);
-      setErrors(err.response.data.details);
-    });
-  }, [dispatch, displayName, note, avatar, header, discoverable, history]);
-
-  return (
-    <>
-      <ColumnBackButton />
-
-      <div className='scrollable privacy-policy'>
-        <div className='column-title'>
-          <h3><FormattedMessage id='onboarding.profile.title' defaultMessage='Profile setup' /></h3>
-          <p><FormattedMessage id='onboarding.profile.lead' defaultMessage='You can always complete this later in the settings, where even more customization options are available.' /></p>
-        </div>
-
-        <div className='simple_form'>
-          <div className='onboarding__profile'>
-            <label className={classNames('app-form__header-input', { selected: !!headerPreview, invalid: !!errors?.header })} title={intl.formatMessage(messages.uploadHeader)}>
-              <input
-                type='file'
-                hidden
-                ref={headerFileRef}
-                accept='image/*'
-                onChange={handleHeaderChange}
-              />
-
-              {headerPreview && <img src={headerPreview} alt='' />}
-
-              <Icon icon={headerPreview ? EditIcon : AddPhotoAlternateIcon} />
-            </label>
-
-            <label className={classNames('app-form__avatar-input', { selected: !!avatarPreview, invalid: !!errors?.avatar })} title={intl.formatMessage(messages.uploadAvatar)}>
-              <input
-                type='file'
-                hidden
-                ref={avatarFileRef}
-                accept='image/*'
-                onChange={handleAvatarChange}
-              />
-
-              {avatarPreview && <img src={avatarPreview} alt='' />}
-
-              <Icon icon={avatarPreview ? EditIcon : AddPhotoAlternateIcon} />
-            </label>
-          </div>
-
-          <div className={classNames('input with_block_label', { field_with_errors: !!errors?.display_name })}>
-            <label htmlFor='display_name'><FormattedMessage id='onboarding.profile.display_name' defaultMessage='Display name' /></label>
-            <span className='hint'><FormattedMessage id='onboarding.profile.display_name_hint' defaultMessage='Your full name or your fun name…' /></span>
-            <div className='label_input'>
-              <input id='display_name' type='text' value={displayName} onChange={handleDisplayNameChange} maxLength={30} />
-            </div>
-          </div>
-
-          <div className={classNames('input with_block_label', { field_with_errors: !!errors?.note })}>
-            <label htmlFor='note'><FormattedMessage id='onboarding.profile.note' defaultMessage='Bio' /></label>
-            <span className='hint'><FormattedMessage id='onboarding.profile.note_hint' defaultMessage='You can @mention other people or #hashtags…' /></span>
-            <div className='label_input'>
-              <textarea id='note' value={note} onChange={handleNoteChange} maxLength={500} />
-            </div>
-          </div>
-
-          <label className='app-form__toggle'>
-            <div className='app-form__toggle__label'>
-              <strong><FormattedMessage id='onboarding.profile.discoverable' defaultMessage='Make my profile discoverable' /></strong> <span className='recommended'><FormattedMessage id='recommended' defaultMessage='Recommended' /></span>
-              <span className='hint'><FormattedMessage id='onboarding.profile.discoverable_hint' defaultMessage='When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.' /></span>
-            </div>
-
-            <div className='app-form__toggle__toggle'>
-              <div>
-                <Toggle checked={discoverable} onChange={handleDiscoverableChange} />
-              </div>
-            </div>
-          </label>
-        </div>
-
-        <div className='onboarding__footer'>
-          <Button block onClick={handleSubmit} disabled={isSaving}>{isSaving ? <LoadingIndicator /> : <FormattedMessage id='onboarding.profile.save_and_continue' defaultMessage='Save and continue' />}</Button>
-        </div>
-      </div>
-    </>
-  );
-};
diff --git a/app/javascript/mastodon/features/onboarding/profile.tsx b/app/javascript/mastodon/features/onboarding/profile.tsx
new file mode 100644
index 000000000..1e5e868f1
--- /dev/null
+++ b/app/javascript/mastodon/features/onboarding/profile.tsx
@@ -0,0 +1,329 @@
+import { useState, useMemo, useCallback, createRef } from 'react';
+
+import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
+
+import classNames from 'classnames';
+import { Helmet } from 'react-helmet';
+import { useHistory } from 'react-router-dom';
+
+import Toggle from 'react-toggle';
+
+import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react';
+import EditIcon from '@/material-icons/400-24px/edit.svg?react';
+import PersonIcon from '@/material-icons/400-24px/person.svg?react';
+import { updateAccount } from 'mastodon/actions/accounts';
+import { Button } from 'mastodon/components/button';
+import { Column } from 'mastodon/components/column';
+import { ColumnHeader } from 'mastodon/components/column_header';
+import { Icon } from 'mastodon/components/icon';
+import { LoadingIndicator } from 'mastodon/components/loading_indicator';
+import { me } from 'mastodon/initial_state';
+import { useAppSelector, useAppDispatch } from 'mastodon/store';
+import { unescapeHTML } from 'mastodon/utils/html';
+
+const messages = defineMessages({
+  title: {
+    id: 'onboarding.profile.title',
+    defaultMessage: 'Profile setup',
+  },
+  uploadHeader: {
+    id: 'onboarding.profile.upload_header',
+    defaultMessage: 'Upload profile header',
+  },
+  uploadAvatar: {
+    id: 'onboarding.profile.upload_avatar',
+    defaultMessage: 'Upload profile picture',
+  },
+});
+
+const nullIfMissing = (path: string) =>
+  path.endsWith('missing.png') ? null : path;
+
+interface ApiAccountErrors {
+  display_name?: unknown;
+  note?: unknown;
+  avatar?: unknown;
+  header?: unknown;
+}
+
+export const Profile: React.FC<{
+  multiColumn?: boolean;
+}> = ({ multiColumn }) => {
+  const account = useAppSelector((state) =>
+    me ? state.accounts.get(me) : undefined,
+  );
+  const [displayName, setDisplayName] = useState(account?.display_name ?? '');
+  const [note, setNote] = useState(
+    account ? (unescapeHTML(account.note) ?? '') : '',
+  );
+  const [avatar, setAvatar] = useState<File>();
+  const [header, setHeader] = useState<File>();
+  const [discoverable, setDiscoverable] = useState(true);
+  const [isSaving, setIsSaving] = useState(false);
+  const [errors, setErrors] = useState<ApiAccountErrors>();
+  const avatarFileRef = createRef<HTMLInputElement>();
+  const headerFileRef = createRef<HTMLInputElement>();
+  const dispatch = useAppDispatch();
+  const intl = useIntl();
+  const history = useHistory();
+
+  const handleDisplayNameChange = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>) => {
+      setDisplayName(e.target.value);
+    },
+    [setDisplayName],
+  );
+
+  const handleNoteChange = useCallback(
+    (e: React.ChangeEvent<HTMLTextAreaElement>) => {
+      setNote(e.target.value);
+    },
+    [setNote],
+  );
+
+  const handleDiscoverableChange = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>) => {
+      setDiscoverable(e.target.checked);
+    },
+    [setDiscoverable],
+  );
+
+  const handleAvatarChange = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>) => {
+      setAvatar(e.target.files?.[0]);
+    },
+    [setAvatar],
+  );
+
+  const handleHeaderChange = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>) => {
+      setHeader(e.target.files?.[0]);
+    },
+    [setHeader],
+  );
+
+  const avatarPreview = useMemo(
+    () =>
+      avatar
+        ? URL.createObjectURL(avatar)
+        : nullIfMissing(account?.avatar ?? 'missing.png'),
+    [avatar, account],
+  );
+  const headerPreview = useMemo(
+    () =>
+      header
+        ? URL.createObjectURL(header)
+        : nullIfMissing(account?.header ?? 'missing.png'),
+    [header, account],
+  );
+
+  const handleSubmit = useCallback(() => {
+    setIsSaving(true);
+
+    dispatch(
+      updateAccount({
+        displayName,
+        note,
+        avatar,
+        header,
+        discoverable,
+        indexable: discoverable,
+      }),
+    )
+      .then(() => {
+        history.push('/start/follows');
+        return '';
+      })
+      // eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable
+      .catch((err) => {
+        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+        if (err.response) {
+          // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
+          const { details }: { details: ApiAccountErrors } = err.response.data;
+          setErrors(details);
+        }
+
+        setIsSaving(false);
+      });
+  }, [dispatch, displayName, note, avatar, header, discoverable, history]);
+
+  return (
+    <Column
+      bindToDocument={!multiColumn}
+      label={intl.formatMessage(messages.title)}
+    >
+      <ColumnHeader
+        title={intl.formatMessage(messages.title)}
+        icon='person'
+        iconComponent={PersonIcon}
+        multiColumn={multiColumn}
+      />
+
+      <div className='scrollable scrollable--flex'>
+        <div className='simple_form app-form'>
+          <div className='onboarding__profile'>
+            <label
+              className={classNames('app-form__header-input', {
+                selected: !!headerPreview,
+                invalid: !!errors?.header,
+              })}
+              title={intl.formatMessage(messages.uploadHeader)}
+            >
+              <input
+                type='file'
+                hidden
+                ref={headerFileRef}
+                accept='image/*'
+                onChange={handleHeaderChange}
+              />
+
+              {headerPreview && <img src={headerPreview} alt='' />}
+
+              <Icon
+                id=''
+                icon={headerPreview ? EditIcon : AddPhotoAlternateIcon}
+              />
+            </label>
+
+            <label
+              className={classNames('app-form__avatar-input', {
+                selected: !!avatarPreview,
+                invalid: !!errors?.avatar,
+              })}
+              title={intl.formatMessage(messages.uploadAvatar)}
+            >
+              <input
+                type='file'
+                hidden
+                ref={avatarFileRef}
+                accept='image/*'
+                onChange={handleAvatarChange}
+              />
+
+              {avatarPreview && <img src={avatarPreview} alt='' />}
+
+              <Icon
+                id=''
+                icon={avatarPreview ? EditIcon : AddPhotoAlternateIcon}
+              />
+            </label>
+          </div>
+
+          <div className='fields-group'>
+            <div
+              className={classNames('input with_block_label', {
+                field_with_errors: !!errors?.display_name,
+              })}
+            >
+              <label htmlFor='display_name'>
+                <FormattedMessage
+                  id='onboarding.profile.display_name'
+                  defaultMessage='Display name'
+                />
+              </label>
+              <span className='hint'>
+                <FormattedMessage
+                  id='onboarding.profile.display_name_hint'
+                  defaultMessage='Your full name or your fun name…'
+                />
+              </span>
+              <div className='label_input'>
+                <input
+                  id='display_name'
+                  type='text'
+                  value={displayName}
+                  onChange={handleDisplayNameChange}
+                  maxLength={30}
+                />
+              </div>
+            </div>
+          </div>
+
+          <div className='fields-group'>
+            <div
+              className={classNames('input with_block_label', {
+                field_with_errors: !!errors?.note,
+              })}
+            >
+              <label htmlFor='note'>
+                <FormattedMessage
+                  id='onboarding.profile.note'
+                  defaultMessage='Bio'
+                />
+              </label>
+              <span className='hint'>
+                <FormattedMessage
+                  id='onboarding.profile.note_hint'
+                  defaultMessage='You can @mention other people or #hashtags…'
+                />
+              </span>
+              <div className='label_input'>
+                <textarea
+                  id='note'
+                  value={note}
+                  onChange={handleNoteChange}
+                  maxLength={500}
+                />
+              </div>
+            </div>
+          </div>
+
+          <label className='app-form__toggle'>
+            <div className='app-form__toggle__label'>
+              <strong>
+                <FormattedMessage
+                  id='onboarding.profile.discoverable'
+                  defaultMessage='Make my profile discoverable'
+                />
+              </strong>{' '}
+              <span className='recommended'>
+                <FormattedMessage
+                  id='recommended'
+                  defaultMessage='Recommended'
+                />
+              </span>
+              <span className='hint'>
+                <FormattedMessage
+                  id='onboarding.profile.discoverable_hint'
+                  defaultMessage='When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.'
+                />
+              </span>
+            </div>
+
+            <div className='app-form__toggle__toggle'>
+              <div>
+                <Toggle
+                  checked={discoverable}
+                  onChange={handleDiscoverableChange}
+                />
+              </div>
+            </div>
+          </label>
+        </div>
+
+        <div className='spacer' />
+
+        <div className='column-footer'>
+          <Button block onClick={handleSubmit} disabled={isSaving}>
+            {isSaving ? (
+              <LoadingIndicator />
+            ) : (
+              <FormattedMessage
+                id='onboarding.profile.save_and_continue'
+                defaultMessage='Save and continue'
+              />
+            )}
+          </Button>
+        </div>
+      </div>
+
+      <Helmet>
+        <title>{intl.formatMessage(messages.title)}</title>
+        <meta name='robots' content='noindex' />
+      </Helmet>
+    </Column>
+  );
+};
+
+// eslint-disable-next-line import/no-default-export
+export default Profile;
diff --git a/app/javascript/mastodon/features/onboarding/share.jsx b/app/javascript/mastodon/features/onboarding/share.jsx
deleted file mode 100644
index 9c720e907..000000000
--- a/app/javascript/mastodon/features/onboarding/share.jsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import PropTypes from 'prop-types';
-import { PureComponent } from 'react';
-
-import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
-
-import classNames from 'classnames';
-import { Link } from 'react-router-dom';
-
-
-import SwipeableViews from 'react-swipeable-views';
-
-import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react';
-import { ColumnBackButton } from 'mastodon/components/column_back_button';
-import { CopyPasteText } from 'mastodon/components/copy_paste_text';
-import { Icon }  from 'mastodon/components/icon';
-import { me, domain } from 'mastodon/initial_state';
-import { useAppSelector } from 'mastodon/store';
-
-const messages = defineMessages({
-  shareableMessage: { id: 'onboarding.share.message', defaultMessage: 'I\'m {username} on #Mastodon! Come follow me at {url}' },
-});
-
-class TipCarousel extends PureComponent {
-
-  static propTypes = {
-    children: PropTypes.node,
-  };
-
-  state = {
-    index: 0,
-  };
-
-  handleSwipe = index => {
-    this.setState({ index });
-  };
-
-  handleChangeIndex = e => {
-    this.setState({ index: Number(e.currentTarget.getAttribute('data-index')) });
-  };
-
-  handleKeyDown = e => {
-    switch(e.key) {
-    case 'ArrowLeft':
-      e.preventDefault();
-      this.setState(({ index }, { children }) => ({ index: Math.abs(index - 1) % children.length }));
-      break;
-    case 'ArrowRight':
-      e.preventDefault();
-      this.setState(({ index }, { children }) => ({ index: (index + 1) % children.length }));
-      break;
-    }
-  };
-
-  render () {
-    const { children } = this.props;
-    const { index } = this.state;
-
-    return (
-      <div className='tip-carousel' tabIndex='0' onKeyDown={this.handleKeyDown}>
-        <SwipeableViews onChangeIndex={this.handleSwipe} index={index} enableMouseEvents tabIndex='-1'>
-          {children}
-        </SwipeableViews>
-
-        <div className='media-modal__pagination'>
-          {children.map((_, i) => (
-            <button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}>
-              {i + 1}
-            </button>
-          ))}
-        </div>
-      </div>
-    );
-  }
-
-}
-
-export const Share = () => {
-  const account = useAppSelector(state => state.getIn(['accounts', me]));
-  const intl = useIntl();
-  const url = (new URL(`/@${account.get('username')}`, document.baseURI)).href;
-
-  return (
-    <>
-      <ColumnBackButton />
-
-      <div className='scrollable privacy-policy'>
-        <div className='column-title'>
-          <h3><FormattedMessage id='onboarding.share.title' defaultMessage='Share your profile' /></h3>
-          <p><FormattedMessage id='onboarding.share.lead' defaultMessage='Let people know how they can find you on Mastodon!' /></p>
-        </div>
-
-        <CopyPasteText value={intl.formatMessage(messages.shareableMessage, { username: `@${account.get('username')}@${domain}`, url })} />
-
-        <TipCarousel>
-          <div><p className='onboarding__lead'><FormattedMessage id='onboarding.tips.verification' defaultMessage='<strong>Did you know?</strong> You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!'  values={{ strong: chunks => <strong>{chunks}</strong> }}  /></p></div>
-          <div><p className='onboarding__lead'><FormattedMessage id='onboarding.tips.migration' defaultMessage='<strong>Did you know?</strong> If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!' values={{ domain, strong: chunks => <strong>{chunks}</strong> }} /></p></div>
-          <div><p className='onboarding__lead'><FormattedMessage id='onboarding.tips.2fa' defaultMessage='<strong>Did you know?</strong> You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!'  values={{ strong: chunks => <strong>{chunks}</strong> }}  /></p></div>
-        </TipCarousel>
-
-        <p className='onboarding__lead'><FormattedMessage id='onboarding.share.next_steps' defaultMessage='Possible next steps:' /></p>
-
-        <div className='onboarding__links'>
-          <Link to='/home' className='onboarding__link'>
-            <FormattedMessage id='onboarding.actions.go_to_home' defaultMessage='Take me to my home feed' />
-            <Icon icon={ArrowRightAltIcon} />
-          </Link>
-
-          <Link to='/explore' className='onboarding__link'>
-            <FormattedMessage id='onboarding.actions.go_to_explore' defaultMessage='Take me to trending' />
-            <Icon icon={ArrowRightAltIcon} />
-          </Link>
-        </div>
-
-        <div className='onboarding__footer'>
-          <Link className='link-button' to='/start'><FormattedMessage id='onboarding.action.back' defaultMessage='Take me back' /></Link>
-        </div>
-      </div>
-    </>
-  );
-};
diff --git a/app/javascript/mastodon/features/public_timeline/index.jsx b/app/javascript/mastodon/features/public_timeline/index.jsx
index 91351901f..aa5a02645 100644
--- a/app/javascript/mastodon/features/public_timeline/index.jsx
+++ b/app/javascript/mastodon/features/public_timeline/index.jsx
@@ -142,7 +142,7 @@ class PublicTimeline extends PureComponent {
         </ColumnHeader>
 
         <StatusListContainer
-          prepend={<DismissableBanner id='public_timeline'><FormattedMessage id='dismissable_banner.public_timeline' defaultMessage='These are the most recent public posts from people on the social web that people on {domain} follow.' values={{ domain }} /></DismissableBanner>}
+          prepend={<DismissableBanner id='public_timeline'><FormattedMessage id='dismissable_banner.public_timeline' defaultMessage='These are the most recent public posts from people on the fediverse that people on {domain} follow.' values={{ domain }} /></DismissableBanner>}
           timelineId={`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`}
           onLoadMore={this.handleLoadMore}
           trackScroll={!pinned}
diff --git a/app/javascript/mastodon/features/reblogs/index.jsx b/app/javascript/mastodon/features/reblogs/index.jsx
index 3d1fc94cb..8bde919a0 100644
--- a/app/javascript/mastodon/features/reblogs/index.jsx
+++ b/app/javascript/mastodon/features/reblogs/index.jsx
@@ -11,13 +11,13 @@ import { connect } from 'react-redux';
 import { debounce } from 'lodash';
 
 import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react';
+import { Account } from 'mastodon/components/account';
 import { Icon }  from 'mastodon/components/icon';
 
 import { fetchReblogs, expandReblogs } from '../../actions/interactions';
 import ColumnHeader from '../../components/column_header';
 import { LoadingIndicator } from '../../components/loading_indicator';
 import ScrollableList from '../../components/scrollable_list';
-import AccountContainer from '../../containers/account_container';
 import Column from '../ui/components/column';
 
 const messages = defineMessages({
@@ -88,7 +88,7 @@ class Reblogs extends ImmutablePureComponent {
           bindToDocument={!multiColumn}
         >
           {accountIds.map(id =>
-            <AccountContainer key={id} id={id} withNote={false} />,
+            <Account key={id} id={id} />,
           )}
         </ScrollableList>
 
diff --git a/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx b/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx
index eb6682d77..beaf18563 100644
--- a/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx
+++ b/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx
@@ -9,58 +9,7 @@ import { Link } from 'react-router-dom';
 
 import { Button } from 'mastodon/components/button';
 import Column from 'mastodon/components/column';
-import { autoPlayGif } from 'mastodon/initial_state';
-
-class GIF extends PureComponent {
-
-  static propTypes = {
-    src: PropTypes.string.isRequired,
-    staticSrc: PropTypes.string.isRequired,
-    className: PropTypes.string,
-    animate: PropTypes.bool,
-  };
-
-  static defaultProps = {
-    animate: autoPlayGif,
-  };
-
-  state = {
-    hovering: false,
-  };
-
-  handleMouseEnter = () => {
-    const { animate } = this.props;
-
-    if (!animate) {
-      this.setState({ hovering: true });
-    }
-  };
-
-  handleMouseLeave = () => {
-    const { animate } = this.props;
-
-    if (!animate) {
-      this.setState({ hovering: false });
-    }
-  };
-
-  render () {
-    const { src, staticSrc, className, animate } = this.props;
-    const { hovering } = this.state;
-
-    return (
-      <img
-        className={className}
-        src={(hovering || animate) ? src : staticSrc}
-        alt=''
-        role='presentation'
-        onMouseEnter={this.handleMouseEnter}
-        onMouseLeave={this.handleMouseLeave}
-      />
-    );
-  }
-
-}
+import { GIF } from 'mastodon/components/gif';
 
 class CopyButton extends PureComponent {
 
diff --git a/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx b/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx
deleted file mode 100644
index d1c9e3688..000000000
--- a/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import PropTypes from 'prop-types';
-import { PureComponent } from 'react';
-
-import { defineMessages, injectIntl } from 'react-intl';
-
-import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react';
-
-import { IconButton } from '../../../components/icon_button';
-
-const messages = defineMessages({
-  error: { id: 'bundle_modal_error.message', defaultMessage: 'Something went wrong while loading this component.' },
-  retry: { id: 'bundle_modal_error.retry', defaultMessage: 'Try again' },
-  close: { id: 'bundle_modal_error.close', defaultMessage: 'Close' },
-});
-
-class BundleModalError extends PureComponent {
-
-  static propTypes = {
-    onRetry: PropTypes.func.isRequired,
-    onClose: PropTypes.func.isRequired,
-    intl: PropTypes.object.isRequired,
-  };
-
-  handleRetry = () => {
-    this.props.onRetry();
-  };
-
-  render () {
-    const { onClose, intl: { formatMessage } } = this.props;
-
-    // Keep the markup in sync with <ModalLoading />
-    // (make sure they have the same dimensions)
-    return (
-      <div className='modal-root__modal error-modal'>
-        <div className='error-modal__body'>
-          <IconButton title={formatMessage(messages.retry)} icon='refresh' iconComponent={RefreshIcon} onClick={this.handleRetry} size={64} />
-          {formatMessage(messages.error)}
-        </div>
-
-        <div className='error-modal__footer'>
-          <div>
-            <button
-              onClick={onClose}
-              className='error-modal__nav onboarding-modal__skip'
-            >
-              {formatMessage(messages.close)}
-            </button>
-          </div>
-        </div>
-      </div>
-    );
-  }
-
-}
-
-export default injectIntl(BundleModalError);
diff --git a/app/javascript/mastodon/features/ui/components/column_loading.tsx b/app/javascript/mastodon/features/ui/components/column_loading.tsx
index d9563dda7..8b20e76ff 100644
--- a/app/javascript/mastodon/features/ui/components/column_loading.tsx
+++ b/app/javascript/mastodon/features/ui/components/column_loading.tsx
@@ -1,4 +1,4 @@
-import Column from 'mastodon/components/column';
+import { Column } from 'mastodon/components/column';
 import { ColumnHeader } from 'mastodon/components/column_header';
 import type { Props as ColumnHeaderProps } from 'mastodon/components/column_header';
 
diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx
index de957a79b..97b54e50d 100644
--- a/app/javascript/mastodon/features/ui/components/columns_area.jsx
+++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx
@@ -8,7 +8,7 @@ import { scrollRight } from '../../../scroll';
 import BundleContainer from '../containers/bundle_container';
 import {
   Compose,
-  NotificationsWrapper,
+  Notifications,
   HomeTimeline,
   CommunityTimeline,
   PublicTimeline,
@@ -30,7 +30,7 @@ import NavigationPanel from './navigation_panel';
 const componentMap = {
   'COMPOSE': Compose,
   'HOME': HomeTimeline,
-  'NOTIFICATIONS': NotificationsWrapper,
+  'NOTIFICATIONS': Notifications,
   'PUBLIC': PublicTimeline,
   'REMOTE': PublicTimeline,
   'COMMUNITY': CommunityTimeline,
diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/follow_to_list.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/follow_to_list.tsx
new file mode 100644
index 000000000..b862a2982
--- /dev/null
+++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/follow_to_list.tsx
@@ -0,0 +1,43 @@
+import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
+
+import { useAppSelector } from 'mastodon/store';
+
+import type { BaseConfirmationModalProps } from './confirmation_modal';
+import { ConfirmationModal } from './confirmation_modal';
+
+const messages = defineMessages({
+  title: {
+    id: 'confirmations.follow_to_list.title',
+    defaultMessage: 'Follow user?',
+  },
+  confirm: {
+    id: 'confirmations.follow_to_list.confirm',
+    defaultMessage: 'Follow and add to list',
+  },
+});
+
+export const ConfirmFollowToListModal: React.FC<
+  {
+    accountId: string;
+    onConfirm: () => void;
+  } & BaseConfirmationModalProps
+> = ({ accountId, onConfirm, onClose }) => {
+  const intl = useIntl();
+  const account = useAppSelector((state) => state.accounts.get(accountId));
+
+  return (
+    <ConfirmationModal
+      title={intl.formatMessage(messages.title)}
+      message={
+        <FormattedMessage
+          id='confirmations.follow_to_list.message'
+          defaultMessage='You need to be following {name} to add them to a list.'
+          values={{ name: <strong>@{account?.acct}</strong> }}
+        />
+      }
+      confirm={intl.formatMessage(messages.confirm)}
+      onConfirm={onConfirm}
+      onClose={onClose}
+    />
+  );
+};
diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
index 912c99a39..16478d0d1 100644
--- a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
+++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
@@ -6,3 +6,4 @@ export { ConfirmEditStatusModal } from './edit_status';
 export { ConfirmUnfollowModal } from './unfollow';
 export { ConfirmClearNotificationsModal } from './clear_notifications';
 export { ConfirmLogOutModal } from './log_out';
+export { ConfirmFollowToListModal } from './follow_to_list';
diff --git a/app/javascript/mastodon/features/ui/components/modal_loading.jsx b/app/javascript/mastodon/features/ui/components/modal_loading.jsx
deleted file mode 100644
index 7d19e7351..000000000
--- a/app/javascript/mastodon/features/ui/components/modal_loading.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { LoadingIndicator } from '../../../components/loading_indicator';
-
-// Keep the markup in sync with <BundleModalError />
-// (make sure they have the same dimensions)
-const ModalLoading = () => (
-  <div className='modal-root__modal error-modal'>
-    <div className='error-modal__body'>
-      <LoadingIndicator />
-    </div>
-    <div className='error-modal__footer'>
-      <div>
-        <button className='error-modal__nav onboarding-modal__skip' />
-      </div>
-    </div>
-  </div>
-);
-
-export default ModalLoading;
diff --git a/app/javascript/mastodon/features/ui/components/modal_placeholder.tsx b/app/javascript/mastodon/features/ui/components/modal_placeholder.tsx
new file mode 100644
index 000000000..13ec6ca2c
--- /dev/null
+++ b/app/javascript/mastodon/features/ui/components/modal_placeholder.tsx
@@ -0,0 +1,61 @@
+import { useCallback } from 'react';
+
+import { FormattedMessage } from 'react-intl';
+
+import { Button } from 'mastodon/components/button';
+import { GIF } from 'mastodon/components/gif';
+import { LoadingIndicator } from 'mastodon/components/loading_indicator';
+
+export const ModalPlaceholder: React.FC<{
+  loading: boolean;
+  onClose: (arg0: string | undefined, arg1: boolean) => void;
+  onRetry?: () => void;
+}> = ({ loading, onClose, onRetry }) => {
+  const handleClose = useCallback(() => {
+    onClose(undefined, false);
+  }, [onClose]);
+
+  const handleRetry = useCallback(() => {
+    if (onRetry) onRetry();
+  }, [onRetry]);
+
+  return (
+    <div className='modal-root__modal modal-placeholder' aria-busy={loading}>
+      {loading ? (
+        <LoadingIndicator />
+      ) : (
+        <div className='modal-placeholder__error'>
+          <GIF
+            src='/oops.gif'
+            staticSrc='/oops.png'
+            className='modal-placeholder__error__image'
+          />
+
+          <div className='modal-placeholder__error__message'>
+            <p>
+              <FormattedMessage
+                id='bundle_modal_error.message'
+                defaultMessage='Something went wrong while loading this screen.'
+              />
+            </p>
+
+            <div className='modal-placeholder__error__message__actions'>
+              <Button onClick={handleRetry}>
+                <FormattedMessage
+                  id='bundle_modal_error.retry'
+                  defaultMessage='Try again'
+                />
+              </Button>
+              <Button onClick={handleClose} className='button button-tertiary'>
+                <FormattedMessage
+                  id='bundle_modal_error.close'
+                  defaultMessage='Close'
+                />
+              </Button>
+            </div>
+          </div>
+        </div>
+      )}
+    </div>
+  );
+};
diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx
index 8a97ec456..16d4973b9 100644
--- a/app/javascript/mastodon/features/ui/components/modal_root.jsx
+++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx
@@ -26,7 +26,6 @@ import BundleContainer from '../containers/bundle_container';
 import ActionsModal from './actions_modal';
 import AudioModal from './audio_modal';
 import { BoostModal } from './boost_modal';
-import BundleModalError from './bundle_modal_error';
 import {
   ConfirmationModal,
   ConfirmDeleteStatusModal,
@@ -36,11 +35,12 @@ import {
   ConfirmUnfollowModal,
   ConfirmClearNotificationsModal,
   ConfirmLogOutModal,
+  ConfirmFollowToListModal,
 } from './confirmation_modals';
 import FocalPointModal from './focal_point_modal';
 import ImageModal from './image_modal';
 import MediaModal from './media_modal';
-import ModalLoading from './modal_loading';
+import { ModalPlaceholder } from './modal_placeholder';
 import VideoModal from './video_modal';
 
 export const MODAL_COMPONENTS = {
@@ -57,6 +57,7 @@ export const MODAL_COMPONENTS = {
   'CONFIRM_UNFOLLOW': () => Promise.resolve({ default: ConfirmUnfollowModal }),
   'CONFIRM_CLEAR_NOTIFICATIONS': () => Promise.resolve({ default: ConfirmClearNotificationsModal }),
   'CONFIRM_LOG_OUT': () => Promise.resolve({ default: ConfirmLogOutModal }),
+  'CONFIRM_FOLLOW_TO_LIST': () => Promise.resolve({ default: ConfirmFollowToListModal }),
   'MUTE': MuteModal,
   'BLOCK': BlockModal,
   'DOMAIN_BLOCK': DomainBlockModal,
@@ -105,14 +106,16 @@ export default class ModalRoot extends PureComponent {
     this.setState({ backgroundColor: color });
   };
 
-  renderLoading = modalId => () => {
-    return ['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
+  renderLoading = () => {
+    const { onClose } = this.props;
+
+    return <ModalPlaceholder loading onClose={onClose} />;
   };
 
   renderError = (props) => {
     const { onClose } = this.props;
 
-    return <BundleModalError {...props} onClose={onClose} />;
+    return <ModalPlaceholder {...props} onClose={onClose} />;
   };
 
   handleClose = (ignoreFocus = false) => {
@@ -134,7 +137,7 @@ export default class ModalRoot extends PureComponent {
       <Base backgroundColor={backgroundColor} onClose={this.handleClose} ignoreFocus={ignoreFocus}>
         {visible && (
           <>
-            <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
+            <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
               {(SpecificComponent) => {
                 const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined;
                 return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={ref} />;
diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx
index daa4585ea..a2521a93d 100644
--- a/app/javascript/mastodon/features/ui/index.jsx
+++ b/app/javascript/mastodon/features/ui/index.jsx
@@ -49,7 +49,7 @@ import {
   Favourites,
   DirectTimeline,
   HashtagTimeline,
-  NotificationsWrapper,
+  Notifications,
   NotificationRequests,
   NotificationRequest,
   FollowRequests,
@@ -66,8 +66,9 @@ import {
   Mutes,
   PinnedStatuses,
   Directory,
+  OnboardingProfile,
+  OnboardingFollows,
   Explore,
-  Onboarding,
   About,
   PrivacyPolicy,
 } from './util/async-components';
@@ -211,7 +212,7 @@ class SwitchingColumnsArea extends PureComponent {
             <WrappedRoute path='/lists/:id/edit' component={ListEdit} content={children} />
             <WrappedRoute path='/lists/:id/members' component={ListMembers} content={children} />
             <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />
-            <WrappedRoute path='/notifications' component={NotificationsWrapper} content={children} exact />
+            <WrappedRoute path='/notifications' component={Notifications} content={children} exact />
             <WrappedRoute path='/notifications/requests' component={NotificationRequests} content={children} exact />
             <WrappedRoute path='/notifications/requests/:id' component={NotificationRequest} content={children} exact />
             <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />
@@ -219,7 +220,8 @@ class SwitchingColumnsArea extends PureComponent {
             <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />
             <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />
 
-            <WrappedRoute path='/start' component={Onboarding} content={children} />
+            <WrappedRoute path={['/start', '/start/profile']} exact component={OnboardingProfile} content={children} />
+            <WrappedRoute path='/start/follows' component={OnboardingFollows} content={children} />
             <WrappedRoute path='/directory' component={Directory} content={children} />
             <WrappedRoute path={['/explore', '/search']} component={Explore} content={children} />
             <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />
diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js
index 5a85c856d..8c491e5a2 100644
--- a/app/javascript/mastodon/features/ui/util/async-components.js
+++ b/app/javascript/mastodon/features/ui/util/async-components.js
@@ -7,15 +7,7 @@ export function Compose () {
 }
 
 export function Notifications () {
-  return import(/* webpackChunkName: "features/notifications_v1" */'../../notifications');
-}
-
-export function Notifications_v2 () {
-  return import(/* webpackChunkName: "features/notifications_v2" */'../../notifications_v2');
-}
-
-export function NotificationsWrapper () {
-  return import(/* webpackChunkName: "features/notifications" */'../../notifications_wrapper');
+  return import(/* webpackChunkName: "features/notifications" */'../../notifications_v2');
 }
 
 export function HomeTimeline () {
@@ -166,8 +158,12 @@ export function Directory () {
   return import(/* webpackChunkName: "features/directory" */'../../directory');
 }
 
-export function Onboarding () {
-  return import(/* webpackChunkName: "features/onboarding" */'../../onboarding');
+export function OnboardingProfile () {
+  return import(/* webpackChunkName: "features/onboarding" */'../../onboarding/profile');
+}
+
+export function OnboardingFollows () {
+  return import(/* webpackChunkName: "features/onboarding" */'../../onboarding/follows');
 }
 
 export function CompareHistoryModal () {
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
index bf84cff11..4bba9976e 100644
--- a/app/javascript/mastodon/locales/af.json
+++ b/app/javascript/mastodon/locales/af.json
@@ -71,7 +71,6 @@
   "bundle_column_error.return": "Keer terug na die tuisblad",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Sluit",
-  "bundle_modal_error.message": "Die laai van die komponent het iewers skeefgeloop.",
   "bundle_modal_error.retry": "Probeer weer",
   "closed_registrations_modal.find_another_server": "Vind 'n ander bediener",
   "closed_registrations_modal.preamble": "Omdat Mastodon gedesentraliseer is, kan jy op hierdie bediener enigiemand volg en met enigiemand gesels, al is jou rekening op ‘n ander bediener. Jy kan selfs jou eie bediener by die netwerk voeg!",
@@ -132,8 +131,6 @@
   "directory.local": "Slegs van {domain}",
   "disabled_account_banner.account_settings": "Rekeninginstellings",
   "disabled_account_banner.text": "Jou rekening {disabledAccount} is tans gedeaktiveer.",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Bed hierdie plasing op jou webblad in met die kode wat jy hier onder kan kopieer.",
   "embed.preview": "Dit sal so lyk:",
   "emoji_button.activity": "Aktiwiteit",
@@ -248,19 +245,6 @@
   "notifications.permission_denied_alert": "Lessenaarkennisgewings kan nie geaktiveer word nie omdat 'n webblaaier toegewing voorheen geweier was",
   "notifications_permission_banner.enable": "Aktiveer lessenaarkennissgewings",
   "notifications_permission_banner.how_to_control": "Om kennisgewings te ontvang wanner Mastodon nie oop is nie, aktiveer lessenaarkennisgewings. Jy kan beheer watter spesifieke tipe interaksies lessenaarkennisgewings genereer deur die {icon} knoppie hier bo sodra hulle geaktiveer is.",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Verander privaatheid van plasing",
   "privacy.public.short": "Publiek",
   "privacy_policy.last_updated": "Laaste bywerking op {date}",
diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json
index 11be07e99..c0fc8bd9f 100644
--- a/app/javascript/mastodon/locales/an.json
+++ b/app/javascript/mastodon/locales/an.json
@@ -81,7 +81,6 @@
   "bundle_column_error.routing.body": "No se podió trobar la pachina solicitada. Yes seguro que la URL en a barra d'adrezas ye correcta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zarrar",
-  "bundle_modal_error.message": "Bella cosa salió malament en cargar este component.",
   "bundle_modal_error.retry": "Intenta-lo de nuevo",
   "closed_registrations.other_server_instructions": "Como Mastodon ye descentralizau, puetz creyar una cuenta en unatro servidor y seguir interactuando con este.",
   "closed_registrations_modal.description": "La creyación d'una cuenta en {domain} no ye posible actualment, pero tiene en cuenta que no amenestes una cuenta especificament en {domain} pa usar Mastodon.",
@@ -155,8 +154,6 @@
   "disabled_account_banner.text": "La tuya cuenta {disabledAccount} ye actualment deshabilitada.",
   "dismissable_banner.community_timeline": "Estas son las publicacions publicas mas recients de personas que las suyas cuentas son alochadas en {domain}.",
   "dismissable_banner.dismiss": "Descartar",
-  "dismissable_banner.explore_links": "Estas noticias son estando discutidas per personas en este y atros servidors d'o ret descentralizau en este momento.",
-  "dismissable_banner.explore_tags": "Estas tendencias son ganando popularidat entre la chent en este y atros servidors d'o ret descentralizau en este momento.",
   "embed.instructions": "Anyade esta publicación a lo tuyo puesto web con o siguient codigo.",
   "embed.preview": "Asinas ye como se veyerá:",
   "emoji_button.activity": "Actividat",
@@ -359,19 +356,6 @@
   "notifications_permission_banner.enable": "Habilitar notificacions d'escritorio",
   "notifications_permission_banner.how_to_control": "Pa recibir notificacions quan Mastodon no sía ubierto, habilite las notificacions d'escritorio. Puetz controlar con precisión qué tipos d'interaccions cheneran notificacions d'escritorio a traviés d'o botón {icon} d'alto una vegada que sían habilitadas.",
   "notifications_permission_banner.title": "Nunca te pierdas cosa",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Restaurar",
   "poll.closed": "Zarrada",
   "poll.refresh": "Actualizar",
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index f17d3dae2..e3183ac4a 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "تعذر العثور على الصفحة المطلوبة. هل أنت متأكد من أنّ الرابط التشعبي URL في شريط العناوين صحيح؟",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "إغلاق",
-  "bundle_modal_error.message": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.",
   "bundle_modal_error.retry": "إعادة المُحاولة",
   "closed_registrations.other_server_instructions": "بما أن ماستدون لامركزي، يمكنك إنشاء حساب على خادم آخر للاستمرار في التفاعل مع هذا الخادم.",
   "closed_registrations_modal.description": "لا يمكن إنشاء حساب على {domain} حاليا، ولكن على فكرة لست بحاجة إلى حساب على {domain} بذاته لاستخدام ماستدون.",
@@ -211,10 +210,6 @@
   "disabled_account_banner.text": "حسابك {disabledAccount} معطل حاليا.",
   "dismissable_banner.community_timeline": "هذه هي أحدث المنشورات العامة من أشخاص تُستضاف حساباتهم على {domain}.",
   "dismissable_banner.dismiss": "رفض",
-  "dismissable_banner.explore_links": "هذه هي القصص الإخبارية الأكثر مشاركة على الشبكة الاجتماعية اليوم. القصص الإخبارية الأحدث التي تنشرها أشخاص مختلفة هي مصنفة في الأعلى.",
-  "dismissable_banner.explore_statuses": "هذه هي المنشورات الرائجة على الشبكات الاجتماعيّة اليوم. تظهر المنشورات المعاد نشرها والحائزة على مفضّلات أكثر في مرتبة عليا.",
-  "dismissable_banner.explore_tags": "هذه هي الوسوم تكتسب جذب الاهتمام حاليًا على الويب الاجتماعي. الوسوم التي يستخدمها مختلف الناس تحتل مرتبة عليا.",
-  "dismissable_banner.public_timeline": "هذه هي أحدث المنشورات العامة من الناس على الشبكة الاجتماعية التي يتبعها الناس على {domain}.",
   "domain_block_modal.block": "حظر الخادم",
   "domain_block_modal.block_account_instead": "أحجب @{name} بدلاً من ذلك",
   "domain_block_modal.they_can_interact_with_old_posts": "يمكن للأشخاص من هذا الخادم التفاعل مع منشوراتك القديمة.",
@@ -563,44 +558,17 @@
   "notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
   "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
   "notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
-  "onboarding.action.back": "تراجع",
-  "onboarding.actions.back": "تراجع",
-  "onboarding.actions.go_to_explore": "خذني إلى المتداولة",
-  "onboarding.actions.go_to_home": "خذني إلى وصلات خيطي الرئيس",
-  "onboarding.compose.template": "مرحبا #ماستدون!",
   "onboarding.follows.empty": "نأسف، لا يمكن عرض نتائج في الوقت الحالي. جرب البحث أو انتقل لصفحة الاستكشاف لإيجاد أشخاص للمتابعة، أو حاول مرة أخرى.",
-  "onboarding.follows.lead": "مقتطفات خيطك الرئيس هي الطريقة الأساسية لتجربة ماستدون. كلما زاد عدد الأشخاص الذين تتبعهم، كلما زاد خيط أخبارك نشاطا وإثارة للاهتمام. بداية، إليك بعض الاقتراحات:",
-  "onboarding.follows.title": "أضفِ طابعا شخصيا على موجزات خيطك الرئيس",
   "onboarding.profile.discoverable": "اجعل ملفي الشخصي قابلاً للاكتشاف",
   "onboarding.profile.discoverable_hint": "عندما تختار تفعيل إمكانية الاكتشاف على ماستدون، قد تظهر منشوراتك في نتائج البحث والمواضيع الرائجة، وقد يتم اقتراح ملفك الشخصي لأشخاص ذوي اهتمامات مماثلة معك.",
   "onboarding.profile.display_name": "الاسم العلني",
   "onboarding.profile.display_name_hint": "اسمك الكامل أو اسمك المرح…",
-  "onboarding.profile.lead": "يمكنك دائمًا إكمال ذلك لاحقًا في الإعدادات، حيث يتوفر المزيد من خيارات التخصيص.",
   "onboarding.profile.note": "نبذة عنك",
   "onboarding.profile.note_hint": "يمكنك @ذِكر أشخاص آخرين أو استعمال #الوسوم…",
   "onboarding.profile.save_and_continue": "حفظ و إستمرار",
   "onboarding.profile.title": "إعداد الملف الشخصي",
   "onboarding.profile.upload_avatar": "تحميل صورة الملف الشخصي",
   "onboarding.profile.upload_header": "تحميل رأسية الملف الشخصي",
-  "onboarding.share.lead": "اسمح للأشخاص بمعرفة إمكانية الوصول إليك على ماستدون!",
-  "onboarding.share.message": "أنا {username} في #Mastodon! تعال لمتابعتي على {url}",
-  "onboarding.share.next_steps": "الخطوات المحتملة التالية:",
-  "onboarding.share.title": "شارك ملفك التعريفي",
-  "onboarding.start.lead": "أنت الآن جزء من ماستدون، منصة إعلامية اجتماعية فريدة من نوعها ولا مركزية حيث أنت - وليست الخوارزميات - من يقوم بضبط تجربتك الخاصة. دعنا نبدأ على هذه الحدود الاجتماعية الجديدة:",
-  "onboarding.start.skip": "ألست بحاجة للمساعدة للبداية؟",
-  "onboarding.start.title": "لقد نجحت!",
-  "onboarding.steps.follow_people.body": "إن متابعة الأشخاص المثيرين للاهتمام هي غاية ماستدون.",
-  "onboarding.steps.follow_people.title": "أضفِ طابعا شخصيا على خيطك الرئيس",
-  "onboarding.steps.publish_status.body": "قل مرحبا للعالَم عبر نصّ أو صور أو فيديوهات أو استطلاعات رأي {emoji}",
-  "onboarding.steps.publish_status.title": "قم بإنشاء أول منشور لك",
-  "onboarding.steps.setup_profile.body": "قم بتعزيز تفاعلاتك عبر الحصول على مِلَفّ شخصي شامل.",
-  "onboarding.steps.setup_profile.title": "قم بتخصيص ملفك التعريفي",
-  "onboarding.steps.share_profile.body": "أخبر أصدقائك بكيفية العثور عليك على ماستدون",
-  "onboarding.steps.share_profile.title": "شارك مِلَفّ ماستدون التعريفي الخاص بك",
-  "onboarding.tips.2fa": "<strong>هل تعلم؟</strong> يمكنك تأمين حسابك عن طريق إعداد المصادقة ذات عاملين في إعدادات حسابك. تعمل مع أي تطبيق TOTP من اختيارك، لا حاجة لرقم هاتف!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>هل تعلم؟</strong> لأن ماستدون لامركزية فإن بعض الحسابات التي تصادفها ستكون مستضافة على خوادم غير خادمك. ومع ذلك يمكنك التفاعل معها بسلاسة! خادمهم هو النصف الآخر من اسم المستخدم خاصتهم!",
-  "onboarding.tips.migration": "<strong>هل تعلم؟</strong> إذا شعرت بأن {domain} ليس خياراً ممتازاً لك في المستقبل، فيمكنك الانتقال إلى خادم ماستدون آخر دون خسارة متابعيك. يمكنك حتى استضافة خادمك الخاص!",
-  "onboarding.tips.verification": "<strong>هل تعلم؟</strong> يمكنك تأكيد حسابك عبر وضع رابط إلى ملف ماستدون الشخصي الخاص بك في موقعك الخاص وإضافة رابط موقعك على ملفك الشخصي. لا حاجة لأي رسوم أو مستندات!",
   "password_confirmation.exceeds_maxlength": "تأكيد كلمة المرور يتجاوز الحد الأقصى لطول كلمة المرور",
   "password_confirmation.mismatching": "تأكيد كلمة المرور غير مطابق",
   "picture_in_picture.restore": "ضعها مرة أخرى",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index e6659510d..b453dfe0e 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -66,7 +66,6 @@
   "bundle_column_error.return": "Volver al aniciu",
   "bundle_column_error.routing.body": "Nun se pudo atopar la páxina solicitada. ¿De xuru que la URL de la barra de direiciones ta bien escrita?",
   "bundle_column_error.routing.title": "404",
-  "bundle_modal_error.message": "Asocedió daqué malo mentanto se cargaba esti componente.",
   "closed_registrations.other_server_instructions": "Darréu que Mastodon ye una rede social descentralizada, pues crear una cuenta n'otru sirvidor y siguir interactuando con esti.",
   "closed_registrations_modal.description": "Anguaño nun ye posible crear cuentes en {domain}, mas ten en cuenta que nun precises una cuenta nesti sirvidor pa usar Mastodon.",
   "closed_registrations_modal.find_another_server": "Atopar otru sirvidor",
@@ -129,8 +128,6 @@
   "directory.recently_active": "Con actividá recién",
   "dismissable_banner.community_timeline": "Esta seición contién los artículos públicos más actuales de los perfiles agospiaos nel dominiu {domain}.",
   "dismissable_banner.dismiss": "Escartar",
-  "dismissable_banner.explore_tags": "Esta seición contién les etiquetes del fediversu que tán ganando popularidá güei. Les etiquetes más usaes polos perfiles apaecen no cimero.",
-  "dismissable_banner.public_timeline": "Esta seición contién los artículos más nuevos de les persones na web social que les persones de {domain} siguen.",
   "embed.instructions": "Empotra esti artículu nel to sitiu web copiando'l códigu d'abaxo.",
   "embed.preview": "Va apaecer asina:",
   "emoji_button.activity": "Actividá",
@@ -309,10 +306,6 @@
   "notifications.mark_as_read": "Marcar tolos avisos como lleíos",
   "notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.",
   "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…",
-  "onboarding.start.lead": "Yá yes parte de Mastodon, una plataforma social multimedia descentralizada onde tu y non un algoritmu, personalices la to esperiencia. Vamos presentate esti llugar social nuevu:",
-  "onboarding.start.skip": "¿Nun precises ayuda pa comenzar?",
-  "onboarding.steps.follow_people.body": "Mastodon trata namás de siguir a cuentes interesantes.",
-  "onboarding.steps.publish_status.body": "Saluda al mundu con semeyes, vídeos, testu o encuestes {emoji}",
   "password_confirmation.exceeds_maxlength": "La contraseña de confirmación supera la llongura de caráuteres máxima",
   "password_confirmation.mismatching": "La contraseña de confirmación nun concasa",
   "poll.closed": "Finó",
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 26a42ebc6..4b85f982e 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "Запытаная старонка не знойдзена. Вы ўпэўнены, што URL у адрасным радку правільны?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Закрыць",
-  "bundle_modal_error.message": "Нешта пайшло не так падчас загрузкі гэтага кампанента.",
   "bundle_modal_error.retry": "Паспрабуйце зноў",
   "closed_registrations.other_server_instructions": "Паколькі Mastodon дэцэнтралізаваны, вы можаце стварыць уліковы запіс на іншым серверы і працягваць узаемадзейнічаць з ім.",
   "closed_registrations_modal.description": "Стварэнне ўліковага запісу на {domain} цяпер немагчыма. Заўважце, што няма неабходнасці мець уліковы запіс менавіта на {domain}, каб выкарыстоўваць Mastodon.",
@@ -213,10 +212,6 @@
   "disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
   "dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
   "dismissable_banner.dismiss": "Адхіліць",
-  "dismissable_banner.explore_links": "Гэтыя навіны абмяркоўваюцца цяпер на гэтым і іншых серверах дэцэнтралізаванай сеткі.",
-  "dismissable_banner.explore_statuses": "Допісы з гэтага і іншых сервераў дэцэнтралізаванай сеткі, якія набіраюць папулярнасць прама зараз.",
-  "dismissable_banner.explore_tags": "Гэтыя хэштэгі зараз набіраюць папулярнасць сярод людзей на гэтым і іншых серверах дэцэнтралізаванай сеткі",
-  "dismissable_banner.public_timeline": "Гэта апошнія публічныя допісы людзей з усей сеткі, за якімі сочаць карыстальнікі {domain}.",
   "domain_block_modal.block": "Заблакіраваць сервер",
   "domain_block_modal.block_account_instead": "Заблакіраваць @{name} замест гэтага",
   "domain_block_modal.they_can_interact_with_old_posts": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
@@ -568,44 +563,17 @@
   "notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале",
   "notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.",
   "notifications_permission_banner.title": "Не прапусціце нічога",
-  "onboarding.action.back": "Прыняць мяне назад",
-  "onboarding.actions.back": "Прыняць мяне назад",
-  "onboarding.actions.go_to_explore": "Паглядзіце, што ў трэндзе",
-  "onboarding.actions.go_to_home": "Перайдзіце на свой хатні канал",
-  "onboarding.compose.template": "Прывітанне, #Mastodon!",
   "onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
-  "onboarding.follows.lead": "Вы самі ствараеце свой хатні канал. Чым больш людзей вы падпішаце, тым больш актыўна і цікавей гэта будзе. Гэтыя профілі могуць стаць добрай адпраўной кропкай — вы заўсёды можаце адмяніць падпіску на іх пазней!",
-  "onboarding.follows.title": "Папулярна на Mastodon",
   "onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
   "onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
   "onboarding.profile.display_name": "Бачнае імя",
   "onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
-  "onboarding.profile.lead": "Вы заўсёды можаце выканаць гэта пазней у Наладах, дзе даступна яшчэ больш параметраў.",
   "onboarding.profile.note": "Біяграфія",
   "onboarding.profile.note_hint": "Вы можаце @згадаць іншых людзей або выкарыстоўваць #хэштэгі…",
   "onboarding.profile.save_and_continue": "Захаваць і працягнуць",
   "onboarding.profile.title": "Налады профілю",
   "onboarding.profile.upload_avatar": "Загрузіць фота профілю",
   "onboarding.profile.upload_header": "Загрузіць шапку профілю",
-  "onboarding.share.lead": "Дайце людзям ведаць, як яны могуць знайсці вас на Mastodon!",
-  "onboarding.share.message": "Я {username} на #Mastodon! Сачыце за мной на {url}",
-  "onboarding.share.next_steps": "Магчымыя наступныя крокі:",
-  "onboarding.share.title": "Абагульце свой профіль",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Вы зрабілі гэта!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Зрабіце свой першы допіс",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Абагульць ваш профіль у Mastodon",
-  "onboarding.tips.2fa": "<strong>Ці вы ведаеце?</strong> Вы можаце абараніць свой уліковы запіс, усталяваўшы двухфактарную аўтэнтыфікацыю ў наладах уліковага запісу. Яна працуе з любой праграмай TOTP на ваш выбар, нумар тэлефона не патрэбны!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ці вы ведаеце?</strong> Паколькі Mastodon дэцэнтралізаваны, некаторыя профілі, якія вам трапляюцца, будуць размяшчацца на іншых серверах, адрозных ад вашага. І ўсё ж вы можаце бесперашкодна ўзаемадзейнічаць з імі! Іх сервер пазначаны ў другой палове імя карыстальніка!",
-  "onboarding.tips.migration": "<strong>Ці вы ведаеце?</strong> Калі вы адчуваеце, што {domain} не з'яўляецца для вас лепшым выбарам у будучыні, вы можаце перайсці на іншы сервер Mastodon, не губляючы сваіх падпісчыкаў. Вы нават можаце стварыць свой уласны сервер!",
-  "onboarding.tips.verification": "<strong>Ці вы ведаеце?</strong> Вы можаце пацвердзіць свой уліковы запіс, размясціўшы спасылку на свой профіль Mastodon на сваім вэб-сайце і дадаўшы вэб-сайт у свой профіль. Ніякіх збораў і дакументаў не патрабуецца!",
   "password_confirmation.exceeds_maxlength": "Пароль пацьверджання перавышае максімальна дапушчальную даўжыню",
   "password_confirmation.mismatching": "Пароль пацьверджання не супадае",
   "picture_in_picture.restore": "Вярніце назад",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 32d61423d..0669b7f40 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -22,7 +22,7 @@
   "account.cancel_follow_request": "Оттегляне на заявката за последване",
   "account.copy": "Копиране на връзка към профила",
   "account.direct": "Частно споменаване на @{name}",
-  "account.disable_notifications": "Сприране на известия при публикуване от @{name}",
+  "account.disable_notifications": "Спиране на известяване при публикуване от @{name}",
   "account.domain_blocked": "Блокиран домейн",
   "account.edit_profile": "Редактиране на профила",
   "account.enable_notifications": "Известяване при публикуване от @{name}",
@@ -97,7 +97,7 @@
   "annual_report.summary.here_it_is": "Ето преглед на вашата {year} година:",
   "annual_report.summary.highlighted_post.by_favourites": "най-правено като любима публикация",
   "annual_report.summary.highlighted_post.by_reblogs": "най-подсилваната публикация",
-  "annual_report.summary.highlighted_post.by_replies": "публикации с най-много отговори",
+  "annual_report.summary.highlighted_post.by_replies": "публикация с най-много отговори",
   "annual_report.summary.highlighted_post.possessive": "на {name}",
   "annual_report.summary.most_used_app.most_used_app": "най-употребявано приложение",
   "annual_report.summary.most_used_hashtag.most_used_hashtag": "най-употребяван хаштаг",
@@ -128,7 +128,7 @@
   "bundle_column_error.routing.body": "Заявената страница не може да се намери. Сигурни ли сте, че URL адресът в адресната лента е правилен?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Затваряне",
-  "bundle_modal_error.message": "Нещо се обърка, зареждайки компонента.",
+  "bundle_modal_error.message": "Нещо се обърка, зареждайки този екран.",
   "bundle_modal_error.retry": "Нов опит",
   "closed_registrations.other_server_instructions": "Oткак e децентрализиранa Mastodon, може да създадете акаунт на друг сървър и още може да взаимодействате с този.",
   "closed_registrations_modal.description": "Създаването на акаунт в {domain} сега не е възможно, но обърнете внимание, че нямате нужда от акаунт конкретно на {domain}, за да ползвате Mastodon.",
@@ -138,7 +138,7 @@
   "column.about": "Относно",
   "column.blocks": "Блокирани потребители",
   "column.bookmarks": "Отметки",
-  "column.community": "Локален инфопоток",
+  "column.community": "Локална хронология",
   "column.create_list": "Създаване на списък",
   "column.direct": "Частни споменавания",
   "column.directory": "Разглеждане на профили",
@@ -153,7 +153,7 @@
   "column.mutes": "Заглушени потребители",
   "column.notifications": "Известия",
   "column.pins": "Закачени публикации",
-  "column.public": "Федериран инфопоток",
+  "column.public": "Федеративна хронология",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Скриване на настройките",
   "column_header.moveLeft_settings": "Преместване на колона вляво",
@@ -161,6 +161,7 @@
   "column_header.pin": "Закачане",
   "column_header.show_settings": "Показване на настройките",
   "column_header.unpin": "Разкачане",
+  "column_search.cancel": "Отказ",
   "column_subheading.settings": "Настройки",
   "community.column_settings.local_only": "Само локално",
   "community.column_settings.media_only": "Само мултимедия",
@@ -214,7 +215,7 @@
   "confirmations.reply.message": "Отговарянето сега ще замени съобщението, което в момента съставяте. Сигурни ли сте, че искате да продължите?",
   "confirmations.reply.title": "Презаписвате ли публикацията?",
   "confirmations.unfollow.confirm": "Без следване",
-  "confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?",
+  "confirmations.unfollow.message": "Наистина ли искате вече да не следвате {name}?",
   "confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
   "content_warning.hide": "Скриване на публ.",
   "content_warning.show": "Нека се покаже",
@@ -234,16 +235,18 @@
   "disabled_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен.",
   "dismissable_banner.community_timeline": "Ето най-скорошните публични публикации от хора, чиито акаунти са разположени в {domain}.",
   "dismissable_banner.dismiss": "Отхвърляне",
-  "dismissable_banner.explore_links": "Това са най-споделяните новини в социалната мрежа днес. По-нови истории, споделени от повече хора се показват по-напред.",
-  "dismissable_banner.explore_statuses": "Има публикации през социалната мрежа, които днес набират популярност. По-новите публикации с повече подсилвания и любими са класирани по-високо.",
-  "dismissable_banner.explore_tags": "Тези хаштагове сега набират популярност сред хората в този и други сървъри на децентрализирата мрежа.",
-  "dismissable_banner.public_timeline": "Ето най-новите обществени публикации от хора в социална мрежа, която хората в {domain} следват.",
+  "dismissable_banner.explore_links": "Тези новинарски истории са най-споделяните във федивселената днес. По-нови новинарски истории, публикувани от повече различни хора са класирани по-напред.",
+  "dismissable_banner.explore_statuses": "Има публикации из федивселената, които днес набират популярност. По-новите публикации с повече подсилвания и любими са класирани по-високо.",
+  "dismissable_banner.explore_tags": "Тези хаштагове днес набират популярност. Хаштагове, употребявани от повече различни хора са класирани по-напред.",
+  "dismissable_banner.public_timeline": "Ето най-новите обществени публикации от хора във федивселената, която хората в {domain} следват.",
   "domain_block_modal.block": "Блокиране на сървър",
   "domain_block_modal.block_account_instead": "Вместо това блокиране на @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Хората от този сървър могат да взаимодействат с ваши стари публикации.",
   "domain_block_modal.they_cant_follow": "Никого от този сървър не може да ви последва.",
   "domain_block_modal.they_wont_know": "Няма да узнаят, че са били блокирани.",
   "domain_block_modal.title": "Блокирате ли домейн?",
+  "domain_block_modal.you_will_lose_num_followers": "Ще загубите {followersCount, plural, one {{followersCountDisplay} последовател} other {{followersCountDisplay} последователи}} и {followingCount, plural, one {{followingCountDisplay} лице, което следвате} other {{followingCountDisplay} души, които следвате}}.",
+  "domain_block_modal.you_will_lose_relationships": "Ще загубите всичките си последователи и хората, които следвате от този сървър.",
   "domain_block_modal.you_wont_see_posts": "Няма да виждате публикации или известия от потребителите на този сървър.",
   "domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.",
   "domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.",
@@ -281,16 +284,16 @@
   "empty_column.account_unavailable": "Профилът не е наличен",
   "empty_column.blocks": "Още не сте блокирали никакви потребители.",
   "empty_column.bookmarked_statuses": "Още не сте отметнали публикации. Отметвайки някоя, то тя ще се покаже тук.",
-  "empty_column.community": "Локалният инфопоток е празен. Публикувайте нещо, за да започнете!",
+  "empty_column.community": "Локалната хронология е празна. Напишете нещо публично, за да завъртите процеса!",
   "empty_column.direct": "Още нямате никакви частни споменавания. Тук ще се показват, изпращайки или получавайки едно.",
   "empty_column.domain_blocks": "Още няма блокирани домейни.",
-  "empty_column.explore_statuses": "Няма тенденции в момента. Проверете пак по-късно!",
+  "empty_column.explore_statuses": "Няма нищо популярно в момента. Проверете пак по-късно!",
   "empty_column.favourited_statuses": "Още нямате никакви любими публикации. Правейки любима, то тя ще се покаже тук.",
   "empty_column.favourites": "Още никого не е слагал публикацията в любими. Когато някой го направи, този човек ще се покаже тук.",
   "empty_column.follow_requests": "Още нямате заявки за последване. Получавайки такава, то тя ще се покаже тук.",
   "empty_column.followed_tags": "Още не сте последвали никакви хаштагове. Последваните хаштагове ще се покажат тук.",
   "empty_column.hashtag": "Още няма нищо в този хаштаг.",
-  "empty_column.home": "Вашата начална часова ос е празна! Последвайте повече хора, за да я запълните. {suggestions}",
+  "empty_column.home": "Вашата начална хронология е празна! Последвайте повече хора, за да се запълни.",
   "empty_column.list": "Все още списъкът е празен. Членуващите на списъка, публикуващи нови публикации, ще се появят тук.",
   "empty_column.mutes": "Още не сте заглушавали потребители.",
   "empty_column.notification_requests": "Всичко е чисто! Тук няма нищо. Получавайки нови известия, те ще се появят тук според настройките ви.",
@@ -324,6 +327,7 @@
   "filter_modal.select_filter.subtitle": "Изберете съществуваща категория или създайте нова",
   "filter_modal.select_filter.title": "Филтриране на публ.",
   "filter_modal.title.status": "Филтриране на публ.",
+  "filter_warning.matches_filter": "Съвпадащ филтър на “<span>{title}</span>”",
   "filtered_notifications_banner.pending_requests": "От {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}",
   "filtered_notifications_banner.title": "Филтрирани известия",
   "firehose.all": "Всичко",
@@ -358,6 +362,7 @@
   "footer.status": "Състояние",
   "generic.saved": "Запазено",
   "getting_started.heading": "Първи стъпки",
+  "hashtag.admin_moderation": "Отваряне на модериращия интерфейс за #{name}",
   "hashtag.column_header.tag_mode.all": "и {additional}",
   "hashtag.column_header.tag_mode.any": "или {additional}",
   "hashtag.column_header.tag_mode.none": "без {additional}",
@@ -391,11 +396,13 @@
   "ignore_notifications_modal.disclaimer": "Mastodon не може да осведоми потребители, че сте пренебрегнали известията им. Пренебрегването на известията няма да спре самите съобщения да не бъдат изпращани.",
   "ignore_notifications_modal.filter_to_act_users": "Вие все още ще може да приемате, отхвърляте или докладвате потребители",
   "ignore_notifications_modal.filter_to_avoid_confusion": "Прецеждането помага за избягване на възможно объркване",
+  "ignore_notifications_modal.filter_to_review_separately": "Може да разгледате отделно филтрираните известия",
   "ignore_notifications_modal.ignore": "Пренебрегване на известията",
   "ignore_notifications_modal.limited_accounts_title": "Пренебрегвате ли известията от модерирани акаунти?",
   "ignore_notifications_modal.new_accounts_title": "Пренебрегвате ли известията от нови акаунти?",
   "ignore_notifications_modal.not_followers_title": "Пренебрегвате ли известията от хора, които не са ви последвали?",
   "ignore_notifications_modal.not_following_title": "Пренебрегвате ли известията от хора, които не сте последвали?",
+  "ignore_notifications_modal.private_mentions_title": "Пренебрегвате ли известия от непоискани лични споменавания?",
   "interaction_modal.description.favourite": "Имайки акаунт в Mastodon, може да сложите тази публикации в любими, за да позволите на автора да узнае, че я цените и да я запазите за по-късно.",
   "interaction_modal.description.follow": "С акаунт в Mastodon може да последвате {name}, за да получавате публикациите от този акаунт в началния си инфоканал.",
   "interaction_modal.description.reblog": "С акаунт в Mastodon може да подсилите тази публикация, за да я споделите с последователите си.",
@@ -403,7 +410,7 @@
   "interaction_modal.description.vote": "Имайки акаунт в Mastodon, можете да гласувате в тази анкета.",
   "interaction_modal.login.action": "Към началото",
   "interaction_modal.login.prompt": "Домейнът на сървъра ви, примерно, mastodon.social",
-  "interaction_modal.no_account_yet": "Още не е в Мастодон?",
+  "interaction_modal.no_account_yet": "Още ли не сте в Mastodon?",
   "interaction_modal.on_another_server": "На различен сървър",
   "interaction_modal.on_this_server": "На този сървър",
   "interaction_modal.sign_in": "Не сте влезли в този сървър. Къде се хоства акаунтът ви?",
@@ -427,12 +434,12 @@
   "keyboard_shortcuts.enter": "Отваряне на публикация",
   "keyboard_shortcuts.favourite": "Любима публикация",
   "keyboard_shortcuts.favourites": "Отваряне на списъка с любими",
-  "keyboard_shortcuts.federated": "Отваряне на федерирания инфопоток",
+  "keyboard_shortcuts.federated": "Отваряне на федералната хронология",
   "keyboard_shortcuts.heading": "Клавишни съчетания",
-  "keyboard_shortcuts.home": "Отваряне на личния инфопоток",
+  "keyboard_shortcuts.home": "Отваряне на началната хронология",
   "keyboard_shortcuts.hotkey": "Бърз клавиш",
   "keyboard_shortcuts.legend": "Показване на тази легенда",
-  "keyboard_shortcuts.local": "Отваряне на локалния инфопоток",
+  "keyboard_shortcuts.local": "Отваряне на локалната хронология",
   "keyboard_shortcuts.mention": "Споменаване на автора",
   "keyboard_shortcuts.muted": "Отваряне на списъка със заглушени потребители",
   "keyboard_shortcuts.my_profile": "Отваряне на профила ви",
@@ -460,13 +467,22 @@
   "link_preview.author": "От {name}",
   "link_preview.more_from_author": "Още от {name}",
   "link_preview.shares": "{count, plural, one {{counter} публикация} other {{counter} публикации}}",
+  "lists.add_member": "Добавяне",
+  "lists.add_to_list": "Добавяне в списък",
+  "lists.add_to_lists": "Добавяне на {name} в списъци",
+  "lists.create": "Създаване",
+  "lists.create_a_list_to_organize": "Сътворете нов списък, за да организирате инфоканала си на Начало",
   "lists.create_list": "Създаване на списък",
   "lists.delete": "Изтриване на списъка",
   "lists.done": "Готово",
   "lists.edit": "Промяна на списъка",
+  "lists.exclusive": "Скриване на членуващи в Начало",
+  "lists.exclusive_hint": "Ако някой е в този списък, то скрийте го в инфоканала си на Начало, за да избегнете виждането на публикациите му два пъти.",
   "lists.find_users_to_add": "Намерете потребители за добавяне",
   "lists.list_members": "Списък членуващи",
+  "lists.list_members_count": "{count, plural, one {# членуващ} other {# членуващи}}",
   "lists.list_name": "Име на списък",
+  "lists.new_list_name": "Ново име на списък",
   "lists.no_lists_yet": "Още няма списъци.",
   "lists.no_members_yet": "Още няма членуващи.",
   "lists.no_results_found": "Няма намерени резултати.",
@@ -476,6 +492,7 @@
   "lists.replies_policy.none": "Никого",
   "lists.save": "Запазване",
   "lists.search_placeholder": "Търсене сред, които сте последвали",
+  "lists.show_replies_to": "Включва отговори от членуващи в списъка до",
   "load_pending": "{count, plural, one {# нов елемент} other {# нови елемента}}",
   "loading_indicator.label": "Зареждане…",
   "media_gallery.hide": "Скриване",
@@ -494,7 +511,7 @@
   "navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
   "navigation_bar.blocks": "Блокирани потребители",
   "navigation_bar.bookmarks": "Отметки",
-  "navigation_bar.community_timeline": "Локален инфопоток",
+  "navigation_bar.community_timeline": "Локална хронология",
   "navigation_bar.compose": "Съставяне на нова публикация",
   "navigation_bar.direct": "Частни споменавания",
   "navigation_bar.discover": "Откриване",
@@ -524,6 +541,8 @@
   "notification.admin.report_statuses_other": "{name} докладва {target}",
   "notification.admin.sign_up": "{name} се регистрира",
   "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} се регистрираха",
+  "notification.annual_report.message": "#Wrapstodon за {year} година ви очаква! Свалете булото на изтъкнатото и паметните моменти за годината си в Mastodon!",
+  "notification.annual_report.view": "Преглед на #Wrapstodon",
   "notification.favourite": "{name} направи любима публикацията ви",
   "notification.favourite.name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> направиха любима ваша публикация",
   "notification.follow": "{name} ви последва",
@@ -557,10 +576,15 @@
   "notification.status": "{name} току-що публикува",
   "notification.update": "{name} промени публикация",
   "notification_requests.accept": "Приемам",
+  "notification_requests.accept_multiple": "{count, plural, one {Приемане на # заявка…} other {Приемане на # заявки…}}",
+  "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Приемане на заявката} other {Приемане на заявките}}",
   "notification_requests.confirm_accept_multiple.message": "На път сте да приемете {count, plural, one {едно известие за заявка} other {# известия за заявки}}. Наистина ли искате да продължите?",
   "notification_requests.confirm_accept_multiple.title": "Приемате ли заявките за известие?",
+  "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Отхвърляне на заявката} other {Отхвърляне на заявките}}",
+  "notification_requests.confirm_dismiss_multiple.message": "На път сте да отхвърлите {count, plural, one {една заявка за известие} other {# заявки за известие}}. Няма да имате лесен достъп до {count, plural, one {това лице} other {тях}} отново. Наистина ли искате да продължите?",
   "notification_requests.confirm_dismiss_multiple.title": "Отхвърляте ли заявките за известие?",
   "notification_requests.dismiss": "Отхвърлям",
+  "notification_requests.dismiss_multiple": "{count, plural, one {Отхвърляне на # заявка…} other {Отхвърляне на # заявки…}}",
   "notification_requests.edit_selection": "Редактиране",
   "notification_requests.exit_selection": "Готово",
   "notification_requests.explainer_for_limited_account": "Известията от този акаунт са прецедени, защото акаунтът е ограничен от модератор.",
@@ -581,6 +605,7 @@
   "notifications.column_settings.filter_bar.category": "Лента за бърз филтър",
   "notifications.column_settings.follow": "Нови последователи:",
   "notifications.column_settings.follow_request": "Нови заявки за последване:",
+  "notifications.column_settings.group": "Групиране",
   "notifications.column_settings.mention": "Споменавания:",
   "notifications.column_settings.poll": "Резултати от анкета:",
   "notifications.column_settings.push": "Изскачащи известия",
@@ -606,6 +631,7 @@
   "notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.",
   "notifications.policy.accept": "Приемам",
   "notifications.policy.accept_hint": "Показване в известия",
+  "notifications.policy.drop": "Пренебрегване",
   "notifications.policy.drop_hint": "Изпращане в празнотата, за да не се видим никога пак",
   "notifications.policy.filter": "Филтър",
   "notifications.policy.filter_limited_accounts_hint": "Ограничено от модераторите на сървъра",
@@ -622,44 +648,21 @@
   "notifications_permission_banner.enable": "Включване на известията на работния плот",
   "notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.",
   "notifications_permission_banner.title": "Никога не пропускайте нищо",
-  "onboarding.action.back": "Върнете ме обратно",
-  "onboarding.actions.back": "Върнете ме обратно",
-  "onboarding.actions.go_to_explore": "Виж тенденции",
-  "onboarding.actions.go_to_home": "Към началния ми инфоканал",
-  "onboarding.compose.template": "Здравейте, #Mastodon!",
-  "onboarding.follows.empty": "За съжаление, в момента не могат да бъдат показани резултати. Може да опитате да търсите или да разгледате, за да намерите кого да последвате, или опитайте отново по-късно.",
-  "onboarding.follows.lead": "Може да бъдете куратор на началния си инфоканал. Последвайки повече хора, по-деен и по-интересен ще става. Тези профили може да са добра начална точка, от която винаги по-късно да спрете да следвате!",
-  "onboarding.follows.title": "Популярно в Mastodon",
+  "onboarding.follows.back": "Назад",
+  "onboarding.follows.done": "Готово",
+  "onboarding.follows.empty": "За съжаление, в момента не могат да се показват резултати. Може да опитате посредством търсене или сърфиране да разгледате страницата, за да намерите хора за последване, или опитайте пак по-късно.",
+  "onboarding.follows.search": "Търсене",
+  "onboarding.follows.title": "Последвайте хора, за да започнете",
   "onboarding.profile.discoverable": "Правене на моя профил откриваем",
   "onboarding.profile.discoverable_hint": "Включвайки откриваемостта в Mastodon, вашите публикации може да се появят при резултатите от търсене и изгряващи неща, и вашия профил може да бъде предложен на хора с подобни интереси като вашите.",
   "onboarding.profile.display_name": "Името на показ",
   "onboarding.profile.display_name_hint": "Вашето пълно име или псевдоним…",
-  "onboarding.profile.lead": "Винаги може да завършите това по-късно в настройките, където дори има повече възможности за настройване.",
-  "onboarding.profile.note": "Биогр.",
+  "onboarding.profile.note": "Биография",
   "onboarding.profile.note_hint": "Може да @споменавате други хора или #хаштагове…",
   "onboarding.profile.save_and_continue": "Запазване и продължаване",
   "onboarding.profile.title": "Настройване на профила",
   "onboarding.profile.upload_avatar": "Качване на снимка на профила",
   "onboarding.profile.upload_header": "Качване на заглавка на профила",
-  "onboarding.share.lead": "Позволете на хората да знаят, че могат да ви намерят в Mastodon!",
-  "onboarding.share.message": "Аз съм {username} в #Mastodon! Елате да ме последвате при {url}",
-  "onboarding.share.next_steps": "Възможни следващи стъпки:",
-  "onboarding.share.title": "Споделяне на профила ви",
-  "onboarding.start.lead": "Вашият нов акаунт в Mastodon е готов за употреба. Ето как може да се възползвате по най-добрия начин от него:",
-  "onboarding.start.skip": "Желаете ли да прескочите?",
-  "onboarding.start.title": "Успяхте!",
-  "onboarding.steps.follow_people.body": "Може да бъдете куратор на инфоканала си. Хайде да го запълним с интересни хора.",
-  "onboarding.steps.follow_people.title": "Персонализиране на началния ви инфоканал",
-  "onboarding.steps.publish_status.body": "Поздравете целия свят.",
-  "onboarding.steps.publish_status.title": "Направете първата си публикация",
-  "onboarding.steps.setup_profile.body": "Подсилете взаимодействията си, имайки изчерпателен профил.",
-  "onboarding.steps.setup_profile.title": "Пригодете профила си",
-  "onboarding.steps.share_profile.body": "Позволете на приятелите си да знаят как да ви намират в Mastodon!",
-  "onboarding.steps.share_profile.title": "Споделяне на профила ви",
-  "onboarding.tips.2fa": "<strong>Знаете ли, че?</strong> Може да защитите акаунта си, настройвайки двуфакторното удостоверяване в настройките на акаунта си. То работи с всяко приложение TOTP по ваш избор, не е необходим номер телефона!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Знаете ли, че?</strong> Откак Mastodon е децентрализиран, някои профили, които срещате ще бъдат разположени на сървъри различен от вашия. И още може да взаимодействате с тях безпроблемно! Сървърът им е втората половина от потребителското им име!",
-  "onboarding.tips.migration": "<strong>Знаете ли, че?</strong> Ако се чувствате, че {domain} не е чудесен избор на сървър в бъдуще, може да се преместите на друг сървър на Mastodon без да загубите последователите си. Дори може да сте съдържатели на свой собствен сървър!",
-  "onboarding.tips.verification": "<strong>Знаете ли, че?</strong> Може да потвърдите акаунта си, слагайки връзка към профила си в Mastodon на уебсайта си и добавите уебсайта в профила си. Не са необходими документи или такси!",
   "password_confirmation.exceeds_maxlength": "Потвърждаването на паролата превишава максимално допустимата дължина за парола",
   "password_confirmation.mismatching": "Потвърждаването на паролата не съвпада",
   "picture_in_picture.restore": "Връщане обратно",
@@ -723,7 +726,7 @@
   "report.placeholder": "Допълнителни коментари",
   "report.reasons.dislike": "Не ми харесва",
   "report.reasons.dislike_description": "Не е нещо, което искате да виждате",
-  "report.reasons.legal": "Законово е",
+  "report.reasons.legal": "Незаконно е",
   "report.reasons.legal_description": "Смятате, че това нарушава закона на вашата страна или държавата на сървъра",
   "report.reasons.other": "Нещо друго е",
   "report.reasons.other_description": "Проблемът не попада в нито една от останалите категории",
@@ -761,7 +764,7 @@
   "search.quick_action.open_url": "Отваряне на URL адреса в Mastodon",
   "search.quick_action.status_search": "Съвпадение на публикации {x}",
   "search.search_or_paste": "Търсене/поставяне на URL",
-  "search_popout.full_text_search_disabled_message": "Не е достъпно на {domain}.",
+  "search_popout.full_text_search_disabled_message": "Не е налично на {domain}.",
   "search_popout.full_text_search_logged_out_message": "Достъпно само при влизане в системата.",
   "search_popout.language_code": "Код на езика по ISO",
   "search_popout.options": "Възможности при търсене",
@@ -843,9 +846,9 @@
   "status.uncached_media_warning": "Онагледяването не е налично",
   "status.unmute_conversation": "Без заглушаването на разговора",
   "status.unpin": "Разкачане от профила",
-  "subscribed_languages.lead": "Публикации само на избрани езици ще се явяват в началото ви и в списъка с часови оси след промяната. Изберете \"нищо\", за да получавате публикации на всички езици.",
+  "subscribed_languages.lead": "Публикации само на избрани езици ще се явяват в началото ви и в хронологичните списъци след промяната. Изберете \"нищо\", за да получавате публикации на всички езици.",
   "subscribed_languages.save": "Запазване на промените",
-  "subscribed_languages.target": "Смяна на езика за {target}",
+  "subscribed_languages.target": "Промяна на абонираните езици за {target}",
   "tabs_bar.home": "Начало",
   "tabs_bar.notifications": "Известия",
   "time_remaining.days": "{number, plural, one {остава # ден} other {остават # дни}}",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 03f59e1db..768a4dbf7 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -91,7 +91,6 @@
   "bundle_column_error.routing.body": "অনুরোধ করা পৃষ্ঠা খুঁজে পাওয়া যাবে না। আপনি কি নিশ্চিত যে ঠিকানা বারে ইউআরএলটি সঠিক?",
   "bundle_column_error.routing.title": "৪০৪",
   "bundle_modal_error.close": "বন্ধ করুন",
-  "bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।.",
   "bundle_modal_error.retry": "আবার চেষ্টা করুন",
   "closed_registrations.other_server_instructions": "মাস্টোডন বিকেন্দ্রীভূত হওয়ায়, আপনি অন্য সার্ভারে একটি অ্যাকাউন্ট তৈরি করতে পারেন এবং এখনও এটির সাথে যোগাযোগ করতে পারেন।",
   "closed_registrations_modal.description": "{domain} এ একটি অ্যাকাউন্ট তৈরি করা বর্তমানে সম্ভব নয়, তবে দয়া করে মনে রাখবেন যে ম্যাস্টোডন ব্যবহার করার জন্য আপনার বিশেষভাবে {domain} এ কোনো অ্যাকাউন্টের প্রয়োজন নেই৷",
@@ -173,8 +172,6 @@
   "disabled_account_banner.account_settings": "একাউন্ট সেটিংস",
   "disabled_account_banner.text": "আপনার একাউন্ট {disabledAccount} বর্তমানে বন্ধ করা.",
   "dismissable_banner.dismiss": "সরাও",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "এই লেখাটি আপনার ওয়েবসাইটে যুক্ত করতে নিচের কোডটি বেবহার করুন।",
   "embed.preview": "সেটা দেখতে এরকম হবে:",
   "emoji_button.activity": "কার্যকলাপ",
@@ -327,21 +324,6 @@
   "notifications.filter.mentions": "উল্লেখিত",
   "notifications.filter.polls": "নির্বাচনের ফলাফল",
   "notifications.group": "{count} প্রজ্ঞাপন",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.accounts_from_other_servers": "<strong>তুমি কি জানতে?</strong> যেহেতু মাস্টোডন বিকেন্দ্রীভূত, কিছু অ্যাকাউন্ট তোমার নিজের ছাড়া অন্য কোনো সার্ভারে থাকতে পারে। অথচ তুমি তাদের সাথে কোনো সমস্যা ছাড়াই কথা বলতে পারছো! তাদের সার্ভার তাদের ব্যবহারকারী নামের দ্বিতীয় অর্ধাংশ!",
-  "onboarding.tips.migration": "<strong>তুমি কি জানো?</strong> {domain} তোমার পছন্দ না হলে, ভবিষ্যতে তুমি অন্য কোনো সার্ভারে যেতে পারো তোমার অনুসরণকারীদেরকে না হারিয়েই। এমনকি তুমি নিজের সার্ভারও তৈরি করতে পারো!",
   "picture_in_picture.restore": "ফিরত রাখো",
   "poll.closed": "বন্ধ",
   "poll.refresh": "বদলেছে কিনা দেখতে",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index da99874f0..971d58b1f 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -99,7 +99,6 @@
   "bundle_column_error.routing.body": "N'haller ket kavout ar bajenn goulennet. Sur oc'h eo reizh an URL er varrenn chomlec'hioù?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Serriñ",
-  "bundle_modal_error.message": "Degouezhet ez eus bet ur fazi en ur gargañ an elfenn-mañ.",
   "bundle_modal_error.retry": "Klask en-dro",
   "closed_registrations.other_server_instructions": "Peogwir ez eo Mastodon digreizennet e c'heller krouiñ ur gont war ur servijer all ha kenderc'hel da zaremprediñ gant hemañ.",
   "closed_registrations_modal.description": "N'eo ket posupl krouiñ ur gont war {domain} evit ar mare, met n'ho peus ket ezhomm ur gont war {domain} dre ret evit ober gant Mastodon.",
@@ -129,6 +128,7 @@
   "column_header.pin": "Spilhennañ",
   "column_header.show_settings": "Diskouez an arventennoù",
   "column_header.unpin": "Dispilhennañ",
+  "column_search.cancel": "Nullañ",
   "column_subheading.settings": "Arventennoù",
   "community.column_settings.local_only": "Nemet lec'hel",
   "community.column_settings.media_only": "Nemet Mediaoù",
@@ -189,8 +189,6 @@
   "disabled_account_banner.text": "Ho kont {disabledAccount} zo divev evit bremañ.",
   "dismissable_banner.community_timeline": "Setu toudoù foran nevesañ an dud a zo herberc’hiet o c'hontoù gant {domain}.",
   "dismissable_banner.dismiss": "Diverkañ",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "domain_pill.server": "Dafariad",
   "domain_pill.username": "Anv-implijer",
   "embed.instructions": "Enframmit an toud-mañ en ho lec'hienn en ur eilañ ar c'hod amañ-dindan.",
@@ -422,33 +420,15 @@
   "notifications_permission_banner.enable": "Lezel kemennoù war ar burev",
   "notifications_permission_banner.how_to_control": "Evit reseviñ kemennoù pa ne vez ket digoret Mastodon, lezelit kemennoù war ar burev. Gallout a rit kontrollañ peseurt eskemmoù a c'henel kemennoù war ar burev gant ar {icon} nozelenn a-us kentre ma'z int lezelet.",
   "notifications_permission_banner.title": "Na vankit netra morse",
-  "onboarding.action.back": "Distreiñ",
-  "onboarding.actions.back": "Distreiñ",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Mont d'ho red degemer",
-  "onboarding.compose.template": "Salud #Mastodon!",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
+  "onboarding.follows.back": "Distreiñ",
+  "onboarding.follows.done": "Graet",
+  "onboarding.follows.search": "Klask",
   "onboarding.profile.display_name": "Anv diskouezet",
   "onboarding.profile.display_name_hint": "Hoc'h anv klok pe hoc'h anv fentus…",
   "onboarding.profile.note": "Berr-ha-berr",
   "onboarding.profile.note_hint": "Gallout a rit @menegiñ tud all pe #hashtagoù…",
   "onboarding.profile.save_and_continue": "Enrollañ ha kenderc'hel",
   "onboarding.profile.upload_avatar": "Enporzhiañ ur skeudenn profil",
-  "onboarding.share.lead": "Roit da c'houzout d'an dud e c'hallont ho kavout war vMastondon!",
-  "onboarding.share.message": "Me a zo {username} war #Mastodon! Heuilhit ac'hanon war {url}",
-  "onboarding.share.title": "Skignañ ho profil",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Deuet oc'h a-benn!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Grit hoc'h embannadur kentañ",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Rannit ho kont Mastodon",
   "password_confirmation.mismatching": "Disheñvel eo an daou c'her-termen-se",
   "picture_in_picture.restore": "Adlakaat",
   "poll.closed": "Serret",
diff --git a/app/javascript/mastodon/locales/bs.json b/app/javascript/mastodon/locales/bs.json
index d06054ee5..35e91a8fc 100644
--- a/app/javascript/mastodon/locales/bs.json
+++ b/app/javascript/mastodon/locales/bs.json
@@ -11,8 +11,6 @@
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No posts found",
   "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
@@ -51,19 +49,6 @@
   "navigation_bar.domain_blocks": "Hidden domains",
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index fc100d7c0..022d5800b 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -87,7 +87,11 @@
   "alert.unexpected.title": "Vaja!",
   "alt_text_badge.title": "Text alternatiu",
   "announcement.announcement": "Anunci",
+  "annual_report.summary.archetype.booster": "Sempre a la moda",
+  "annual_report.summary.archetype.lurker": "Tot ho llegeix",
   "annual_report.summary.archetype.oracle": "L'Oracle",
+  "annual_report.summary.archetype.pollster": "Tot són enquestes",
+  "annual_report.summary.archetype.replier": "Tot ho respon",
   "annual_report.summary.followers.followers": "seguidors",
   "annual_report.summary.followers.total": "{count} en total",
   "annual_report.summary.here_it_is": "El repàs del vostre {year}:",
@@ -99,6 +103,8 @@
   "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'etiqueta més utilitzada",
   "annual_report.summary.most_used_hashtag.none": "Cap",
   "annual_report.summary.new_posts.new_posts": "publicacions noves",
+  "annual_report.summary.percentile.text": "<topLabel>Que us posa en el</topLabel><percentage></percentage><bottomLabel>més alt dels usuaris de Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "No li ho direm al Bernie.",
   "annual_report.summary.thanks": "Gràcies per formar part de Mastodon!",
   "attachments_list.unprocessed": "(sense processar)",
   "audio.hide": "Amaga l'àudio",
@@ -123,7 +129,7 @@
   "bundle_column_error.routing.body": "No es pot trobar la pàgina sol·licitada. Segur que l'enllaç que has introduït és correcte?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Tanca",
-  "bundle_modal_error.message": "S'ha produït un error en carregar aquest component.",
+  "bundle_modal_error.message": "S'ha produït un error en carregar aquesta pantalla.",
   "bundle_modal_error.retry": "Torna-ho a provar",
   "closed_registrations.other_server_instructions": "Com que Mastodon és descentralitzat, pots crear un compte en un altre servidor i continuar interactuant amb aquest.",
   "closed_registrations_modal.description": "No es pot crear un compte a {domain} ara mateix, però tingues en compte que no necessites específicament un compte a {domain} per a usar Mastodon.",
@@ -134,13 +140,16 @@
   "column.blocks": "Usuaris blocats",
   "column.bookmarks": "Marcadors",
   "column.community": "Línia de temps local",
+  "column.create_list": "Crea una llista",
   "column.direct": "Mencions privades",
   "column.directory": "Navega pels perfils",
   "column.domain_blocks": "Dominis blocats",
+  "column.edit_list": "Edita la llista",
   "column.favourites": "Favorits",
   "column.firehose": "Tuts en directe",
   "column.follow_requests": "Peticions de seguir-te",
   "column.home": "Inici",
+  "column.list_members": "Gestiona els membres de la llista",
   "column.lists": "Llistes",
   "column.mutes": "Usuaris silenciats",
   "column.notifications": "Notificacions",
@@ -153,6 +162,7 @@
   "column_header.pin": "Fixa",
   "column_header.show_settings": "Mostra la configuració",
   "column_header.unpin": "Desfixa",
+  "column_search.cancel": "Cancel·la",
   "column_subheading.settings": "Configuració",
   "community.column_settings.local_only": "Només local",
   "community.column_settings.media_only": "Només contingut",
@@ -226,10 +236,10 @@
   "disabled_account_banner.text": "El teu compte {disabledAccount} està desactivat.",
   "dismissable_banner.community_timeline": "Aquests són els tuts públics més recents d'usuaris amb els seus comptes a {domain}.",
   "dismissable_banner.dismiss": "Ometre",
-  "dismissable_banner.explore_links": "Gent d'aquest i d'altres servidors de la xarxa descentralitzada estan comentant ara mateix aquestes notícies.",
-  "dismissable_banner.explore_statuses": "Aquests son els tuts de la xarxa descentralitzada que guanyen atenció ara mateix. Els tuts més nous amb més impulsos i favorits tenen millor rànquing.",
-  "dismissable_banner.explore_tags": "Aquestes etiquetes estan guanyant ara mateix l'atenció dels usuaris d'aquest i altres servidors de la xarxa descentralitzada.",
-  "dismissable_banner.public_timeline": "Aquests son els tuts públics més recents de les persones a la web social que les persones de {domain} segueixen.",
+  "dismissable_banner.explore_links": "Aquestes històries noves són les més compartides avui al Fedivers. Les històries noves publicades per més persones diferents es classifiquen amunt.",
+  "dismissable_banner.explore_statuses": "Aquestes publicacions d'arreu del Fedivers estan atraient l'atenció avui. Les publicacions noves amb més impulsos i favorits es classifiquen amunt.",
+  "dismissable_banner.explore_tags": "Aquestes etiquetes estan atraient l'atenció avui. Les etiquetes que fan servir més persones diferents es classifiquen amunt.",
+  "dismissable_banner.public_timeline": "Aquestes són les publicacions més recents al Fedivers que segueixen gent a {domain}.",
   "domain_block_modal.block": "Bloca el servidor",
   "domain_block_modal.block_account_instead": "En lloc d'això, bloca @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Els usuaris d'aquest servidor poden interactuar amb les vostres publicacions antigues.",
@@ -353,6 +363,7 @@
   "footer.status": "Estat",
   "generic.saved": "Desat",
   "getting_started.heading": "Primeres passes",
+  "hashtag.admin_moderation": "Obre la interfície de moderació per a #{name}",
   "hashtag.column_header.tag_mode.all": "i {additional}",
   "hashtag.column_header.tag_mode.any": "o {additional}",
   "hashtag.column_header.tag_mode.none": "sense {additional}",
@@ -458,11 +469,32 @@
   "link_preview.author": "Per {name}",
   "link_preview.more_from_author": "Més de {name}",
   "link_preview.shares": "{count, plural, one {{counter} publicació} other {{counter} publicacions}}",
+  "lists.add_member": "Afegeix",
+  "lists.add_to_list": "Afegeix a la llista",
+  "lists.add_to_lists": "Afegeix {name} a les llistes",
+  "lists.create": "Crea",
+  "lists.create_a_list_to_organize": "Creeu una nova llista per a organitzar la pantalla d'inici",
+  "lists.create_list": "Crea una llista",
   "lists.delete": "Elimina la llista",
+  "lists.done": "Fet",
   "lists.edit": "Edita la llista",
+  "lists.exclusive": "Amaga membres a Inici",
+  "lists.exclusive_hint": "Si algú és a la llista, amagueu-los de la pantalla d'inici, per a no veure'n les publicacions duplicades.",
+  "lists.find_users_to_add": "Troba usuaris per a afegir",
+  "lists.list_members": "Membres de la llista",
+  "lists.list_members_count": "{count, plural, one {# membre} other {# membres}}",
+  "lists.list_name": "Nom de la llista",
+  "lists.new_list_name": "Nom de la nova llista",
+  "lists.no_lists_yet": "Encara no hi ha cap llista.",
+  "lists.no_members_yet": "Encara no hi ha membres.",
+  "lists.no_results_found": "No s'han trobat resultats.",
+  "lists.remove_member": "Elimina",
   "lists.replies_policy.followed": "Qualsevol usuari que segueixis",
   "lists.replies_policy.list": "Membres de la llista",
   "lists.replies_policy.none": "Ningú",
+  "lists.save": "Desa",
+  "lists.search_placeholder": "Cerca persones que seguiu",
+  "lists.show_replies_to": "Inclou respostes de membres de la llista a",
   "load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
   "loading_indicator.label": "Es carrega…",
   "media_gallery.hide": "Amaga",
@@ -511,6 +543,8 @@
   "notification.admin.report_statuses_other": "{name} ha reportat {target}",
   "notification.admin.sign_up": "{name} s'ha registrat",
   "notification.admin.sign_up.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} s'han registrat",
+  "notification.annual_report.message": "El vostre {year} #Wrapstodon t'espera. Desveleu els vostres moments més memorables a Mastodon!",
+  "notification.annual_report.view": "Visualitzeu #Wrapstodon",
   "notification.favourite": "{name} ha afavorit el teu tut",
   "notification.favourite.name_and_others_with_link": "{name} i <a>{count, plural, one {# altre} other {# altres}}</a> han afavorit la vostra publicació",
   "notification.follow": "{name} et segueix",
@@ -617,44 +651,21 @@
   "notifications_permission_banner.enable": "Activa les notificacions d’escriptori",
   "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
   "notifications_permission_banner.title": "No et perdis mai res",
-  "onboarding.action.back": "Porta'm enrere",
-  "onboarding.actions.back": "Porta'm enrere",
-  "onboarding.actions.go_to_explore": "Mira què és tendència",
-  "onboarding.actions.go_to_home": "Ves a la teva línia de temps",
-  "onboarding.compose.template": "Hola Mastodon!",
+  "onboarding.follows.back": "Enrere",
+  "onboarding.follows.done": "Fet",
   "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.",
-  "onboarding.follows.lead": "La teva línia de temps inici només està a les teves mans. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant de seguir-los!:",
-  "onboarding.follows.title": "Personalitza la pantalla d'inci",
+  "onboarding.follows.search": "Cerca",
+  "onboarding.follows.title": "Seguiu gent per a començar",
   "onboarding.profile.discoverable": "Fes el meu perfil descobrible",
   "onboarding.profile.discoverable_hint": "En acceptar d'ésser descobert a Mastodon els teus missatges poden aparèixer dins les tendències i els resultats de cerques, i el teu perfil es pot suggerir a qui tingui interessos semblants als teus.",
   "onboarding.profile.display_name": "Nom que es mostrarà",
   "onboarding.profile.display_name_hint": "El teu nom complet o el teu malnom…",
-  "onboarding.profile.lead": "Sempre ho pots completar més endavant a la configuració, on hi ha encara més opcions disponibles.",
   "onboarding.profile.note": "Biografia",
   "onboarding.profile.note_hint": "Pots @mencionar altra gent o #etiquetes…",
   "onboarding.profile.save_and_continue": "Desa i continua",
   "onboarding.profile.title": "Configuració del perfil",
   "onboarding.profile.upload_avatar": "Importa una foto de perfil",
   "onboarding.profile.upload_header": "Importa una capçalera de perfil",
-  "onboarding.share.lead": "Permet que la gent sàpiga com trobar-te a Mastodon!",
-  "onboarding.share.message": "Sóc {username} a #Mastodon! Vine i segueix-me a {url}",
-  "onboarding.share.next_steps": "Possibles passes següents:",
-  "onboarding.share.title": "Comparteix el teu perfil",
-  "onboarding.start.lead": "El teu nou compte ja està preparat a Mastodon, la xarxa social on tu—no un algorisme—té tot el control. Aquí tens com en pots treure tot el suc:",
-  "onboarding.start.skip": "Vols saltar-te tota la resta?",
-  "onboarding.start.title": "Llestos!",
-  "onboarding.steps.follow_people.body": "Mastodon va de seguir a gent interessant.",
-  "onboarding.steps.follow_people.title": "Personalitza la pantalla d'inci",
-  "onboarding.steps.publish_status.body": "Saluda al món amb text, fotos, vídeos o enquestes {emoji}",
-  "onboarding.steps.publish_status.title": "Fes el teu primer tut",
-  "onboarding.steps.setup_profile.body": "És més fàcil que altres interactuïn amb tu si tens un perfil complet.",
-  "onboarding.steps.setup_profile.title": "Personalitza el perfil",
-  "onboarding.steps.share_profile.body": "Fer saber als teus amics com trobar-te a Mastodon",
-  "onboarding.steps.share_profile.title": "Comparteix el teu perfil",
-  "onboarding.tips.2fa": "<strong>Ho sabies?</strong> Pots securitzar el teu compte activant l'autenticació de doble factor en la configuració del teu perfil. Funciona amb qualsevol aplicació TOTP de la teva elecció, no cal número de telèfon!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ho sabies?</strong> Com Mastodon és descentralitzat, et pots trobar amb perfils que són a servidors diferents del teu. I, tanmateix, també hi pots interactuar sense cap problema! El servidor és la segona part del seu nom d'usuari!",
-  "onboarding.tips.migration": "<strong>Ho sabies?</strong> Si et sembla que {domain} no és una bona elecció de servidor per a tu en el futur, pots moure't a un altre servidor Mastodon sense perdre els teus seguidors. Fins i tot pots tenir el teu propi servidor!",
-  "onboarding.tips.verification": "<strong>Ho sabies?</strong> Pots verificar el teu compte posant un enllaç al teu perfil a Mastodon en la teva pàgina web i afegint la adreça d'aquesta web en el teu perfil. Sense cap mena de tarifa o document!",
   "password_confirmation.exceeds_maxlength": "La confirmació de la contrasenya excedeix la longitud màxima",
   "password_confirmation.mismatching": "La confirmació de contrasenya no és coincident",
   "picture_in_picture.restore": "Retorna’l",
@@ -683,7 +694,7 @@
   "recommended": "Recomanat",
   "refresh": "Actualitza",
   "regeneration_indicator.label": "Es carrega…",
-  "regeneration_indicator.sublabel": "Es prepara la teva línia de temps d'Inici!",
+  "regeneration_indicator.sublabel": "Es prepara la vostra pantalla d'Inici!",
   "relative_time.days": "{number}d",
   "relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
   "relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json
index 292aefb4c..fe22cd661 100644
--- a/app/javascript/mastodon/locales/ckb.json
+++ b/app/javascript/mastodon/locales/ckb.json
@@ -95,7 +95,6 @@
   "bundle_column_error.routing.body": "پەیجی داواکراو ناتوانرێت بدۆزرێتەوە. ئایا دڵنیای کە URL ی ناو ناونیشانەکان ڕاستە?",
   "bundle_column_error.routing.title": "٤٠٤",
   "bundle_modal_error.close": "داخستن",
-  "bundle_modal_error.message": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.",
   "bundle_modal_error.retry": "دووبارە تاقی بکەوە",
   "closed_registrations.other_server_instructions": "بەو پێیەی ماستۆدۆن لامەرکەزییە، دەتوانیت ئەکاونتێک لەسەر سێرڤەرێکی تر دروست بکەیت و هێشتا کارلێک لەگەڵ ئەم سێرڤەرەدا بکەیت.",
   "closed_registrations_modal.description": "دروستکردنی ئەکاونت لەسەر {domain} لە ئێستادا ناتوانرێت، بەڵام تکایە ئەوەت لەبەرچاو بێت کە پێویستت بە ئەکاونتێک نییە بە تایبەتی لەسەر {domain} بۆ بەکارهێنانی ماستۆدۆن.",
@@ -187,9 +186,6 @@
   "disabled_account_banner.text": "ئەکاونتەکەت {disabledAccount} لە ئێستادا لەکارخراوە.",
   "dismissable_banner.community_timeline": "ئەمانە دوایین پۆستی گشتی ئەو کەسانەن کە ئەکاونتەکانیان لەلایەن {domain}ەوە هۆست کراوە.",
   "dismissable_banner.dismiss": "بەلاوە نان",
-  "dismissable_banner.explore_links": "ئەم هەواڵانە لە ئێستادا لەلایەن کەسانێکەوە لەسەر ئەم سێرڤەرە و سێرڤەرەکانی تری تۆڕی لامەرکەزی باس دەکرێن.",
-  "dismissable_banner.explore_statuses": "ئەمانە پۆستەکانن لە سەرانسەری وێبی کۆمەڵایەتی کە ئەمڕۆ کێشکردنیان بەدەستهێناوە. پۆستە نوێیەکان کە بووست و فەڤریتی زیاتریان هەیە ڕیزبەندی بەرزتریان هەیە.",
-  "dismissable_banner.explore_tags": "ئەم هاشتاگانە لە ئێستادا لە نێو خەڵکی سەر ئەم سێرڤەرە و سێرڤەرەکانی تری تۆڕی لامەرکەزیدا جێگەی خۆیان دەگرن.",
   "embed.instructions": "ئەم توتە بنچین بکە لەسەر وێب سایتەکەت بە کۆپیکردنی کۆدەکەی خوارەوە.",
   "embed.preview": "ئەمە ئەو شتەیە کە لە شێوەی خۆی دەچێت:",
   "emoji_button.activity": "چالاکی",
@@ -407,19 +403,6 @@
   "notifications_permission_banner.enable": "چالاککردنی ئاگانامەکانی دێسکتۆپ",
   "notifications_permission_banner.how_to_control": "بۆ وەرگرتنی ئاگانامەکان کاتێک ماستۆدۆن نەکراوەیە، ئاگانامەکانی دێسکتۆپ چالاک بکە. دەتوانیت بە وردی کۆنترۆڵی جۆری کارلێکەکان بکەیت کە ئاگانامەکانی دێسکتۆپ دروست دەکەن لە ڕێگەی دوگمەی {icon} لەسەرەوە کاتێک چالاک دەکرێن.",
   "notifications_permission_banner.title": "هەرگیز شتێک لە دەست مەدە",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "بیگەڕێنەوە",
   "poll.closed": "دابخە",
   "poll.refresh": "نوێکردنەوە",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 033f3fc80..5d81889b6 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -43,7 +43,6 @@
   "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta",
   "bundle_column_error.retry": "Pruvà torna",
   "bundle_modal_error.close": "Chjudà",
-  "bundle_modal_error.message": "C'hè statu un prublemu caricandu st'elementu.",
   "bundle_modal_error.retry": "Pruvà torna",
   "column.blocks": "Utilizatori bluccati",
   "column.bookmarks": "Segnalibri",
@@ -103,8 +102,6 @@
   "directory.local": "Solu da {domain}",
   "directory.new_arrivals": "Ultimi arrivi",
   "directory.recently_active": "Attività ricente",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.",
   "embed.preview": "Hà da parè à quessa:",
   "emoji_button.activity": "Attività",
@@ -253,19 +250,6 @@
   "notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore",
   "notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.",
   "notifications_permission_banner.title": "Ùn mancate mai nunda",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Rimette in piazza",
   "poll.closed": "Chjosu",
   "poll.refresh": "Attualizà",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 89db6c5cb..c8042a125 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -109,7 +109,6 @@
   "bundle_column_error.routing.body": "Požadovaná stránka nebyla nalezena. Opravdu je URL v adresním řádku správně?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zavřít",
-  "bundle_modal_error.message": "Při načítání tohoto komponentu se něco pokazilo.",
   "bundle_modal_error.retry": "Zkusit znovu",
   "closed_registrations.other_server_instructions": "Protože Mastodon je decentralizovaný, můžete si vytvořit účet na jiném serveru a přesto komunikovat s tímto serverem.",
   "closed_registrations_modal.description": "V současné době není možné vytvořit účet na {domain}, ale mějte prosím na paměti, že k používání Mastodonu nepotřebujete účet konkrétně na {domain}.",
@@ -209,10 +208,6 @@
   "disabled_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován.",
   "dismissable_banner.community_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí, jejichž účty hostuje {domain}.",
   "dismissable_banner.dismiss": "Zavřít",
-  "dismissable_banner.explore_links": "O těchto zprávách hovoří lidé na tomto a dalších serverech decentralizované sítě právě teď.",
-  "dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
-  "dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
-  "dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
   "domain_block_modal.block": "Blokovat server",
   "domain_block_modal.block_account_instead": "Raději blokovat @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
@@ -534,44 +529,17 @@
   "notifications_permission_banner.enable": "Povolit oznámení na ploše",
   "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.",
   "notifications_permission_banner.title": "Nenechte si nic uniknout",
-  "onboarding.action.back": "Vrátit se zpět",
-  "onboarding.actions.back": "Vrátit se zpět",
-  "onboarding.actions.go_to_explore": "Podívejte se, co je populární",
-  "onboarding.actions.go_to_home": "Přejít na svůj domovský feed",
-  "onboarding.compose.template": "Ahoj #Mastodon!",
   "onboarding.follows.empty": "Bohužel, žádné výsledky nelze momentálně zobrazit. Můžete zkusit vyhledat nebo procházet stránku s průzkumem a najít lidi, kteří budou sledovat, nebo to zkuste znovu později.",
-  "onboarding.follows.lead": "Domovský kanál je hlavní metodou zažívání Mastodonu. Čím více lidí sledujete, tím aktivnější a zajímavější bude. Pro začnutí, zde máte několik návrhů:",
-  "onboarding.follows.title": "Přispůsobit vlastní domovský kanál",
   "onboarding.profile.discoverable": "Udělat svůj profil vyhledatelným",
   "onboarding.profile.discoverable_hint": "Když se rozhodnete být vyhledatelný na Mastodonu, vaše příspěvky se mohou objevit ve výsledcích vyhledávání a v populárních, a váš profil může být navrhován lidem s podobnými zájmy.",
   "onboarding.profile.display_name": "Zobrazované jméno",
   "onboarding.profile.display_name_hint": "Vaše celé jméno nebo přezdívka…",
-  "onboarding.profile.lead": "Toto můžete vždy dokončit později v nastavení, kde je k dispozici ještě více možností přizpůsobení.",
   "onboarding.profile.note": "O vás",
   "onboarding.profile.note_hint": "Můžete @zmínit jiné osoby nebo #hashtagy…",
   "onboarding.profile.save_and_continue": "Uložit a pokračovat",
   "onboarding.profile.title": "Nastavení profilu",
   "onboarding.profile.upload_avatar": "Nahrát profilový obrázek",
   "onboarding.profile.upload_header": "Nahrát hlavičku profilu",
-  "onboarding.share.lead": "Dejte lidem vědět, jak vás mohou najít na Mastodonu!",
-  "onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}",
-  "onboarding.share.next_steps": "Možné další kroky:",
-  "onboarding.share.title": "Sdílejte svůj profil",
-  "onboarding.start.lead": "Nyní jste součástí Mastodonu, unikátní sociální sítě, kde vy - ne algoritmus - vytváří vaše vlastní prožitky. Začněte na této nové sociální platformě:",
-  "onboarding.start.skip": "Nepotřebujete pomoci začít?",
-  "onboarding.start.title": "Dokázali jste to!",
-  "onboarding.steps.follow_people.body": "Mastodon je o sledování zajimavých lidí.",
-  "onboarding.steps.follow_people.title": "Přispůsobit vlastní domovský kanál",
-  "onboarding.steps.publish_status.body": "Řekněte světu ahoj s pomocí textem, fotografiemi, videami nebo anketami {emoji}",
-  "onboarding.steps.publish_status.title": "Vytvořte svůj první příspěvek",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Přizpůsobit svůj profil",
-  "onboarding.steps.share_profile.body": "Dejte blízkým lidem vědět, jak vás mohou najít na Mastodonu",
-  "onboarding.steps.share_profile.title": "Sdílejte svůj profil",
-  "onboarding.tips.2fa": "<strong>Víte, že?</strong> Svůj účet můžete zabezpečit nastavením dvoufaktorového ověřování v nastavení účtu. Funguje s jakoukoli TOTP aplikací podle vašeho výběru, telefonní číslo není nutné!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Víte, že?</strong> Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!",
-  "onboarding.tips.migration": "<strong>Víte, že?</strong> Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!",
-  "onboarding.tips.verification": "<strong>Víte, že?</strong> Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!",
   "password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální povolenou délku hesla",
   "password_confirmation.mismatching": "Zadaná hesla se neshodují",
   "picture_in_picture.restore": "Vrátit zpět",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index c4f79da43..99dc11a88 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -129,7 +129,6 @@
   "bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Cau",
-  "bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
   "bundle_modal_error.retry": "Ceisiwch eto",
   "closed_registrations.other_server_instructions": "Gan fod Mastodon yn ddatganoledig, gallwch greu cyfrif ar weinydd arall a dal i ryngweithio gyda hwn.",
   "closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.",
@@ -140,13 +139,16 @@
   "column.blocks": "Defnyddwyr a flociwyd",
   "column.bookmarks": "Llyfrnodau",
   "column.community": "Ffrwd lleol",
+  "column.create_list": "Creu rhestr",
   "column.direct": "Crybwylliadau preifat",
   "column.directory": "Pori proffiliau",
   "column.domain_blocks": "Parthau wedi'u blocio",
+  "column.edit_list": "Golygu rhestr",
   "column.favourites": "Ffefrynnau",
   "column.firehose": "Ffrydiau byw",
   "column.follow_requests": "Ceisiadau dilyn",
   "column.home": "Cartref",
+  "column.list_members": "Rheoli aelodau rhestr",
   "column.lists": "Rhestrau",
   "column.mutes": "Defnyddwyr wedi'u tewi",
   "column.notifications": "Hysbysiadau",
@@ -159,6 +161,7 @@
   "column_header.pin": "Pinio",
   "column_header.show_settings": "Dangos gosodiadau",
   "column_header.unpin": "Dadbinio",
+  "column_search.cancel": "Diddymu",
   "column_subheading.settings": "Gosodiadau",
   "community.column_settings.local_only": "Lleol yn unig",
   "community.column_settings.media_only": "Cyfryngau yn unig",
@@ -232,10 +235,6 @@
   "disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.",
   "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
   "dismissable_banner.dismiss": "Cau",
-  "dismissable_banner.explore_links": "Dyma straeon newyddion sy’n cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
-  "dismissable_banner.explore_statuses": "Dyma postiadau o bob gwr o'r we gymdeithasol sy'n derbyn sylw heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynnau'n cael eu graddio'n uwch.",
-  "dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
-  "dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
   "domain_block_modal.block": "Blocio gweinydd",
   "domain_block_modal.block_account_instead": "Blocio @{name} yn ei le",
   "domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.",
@@ -464,11 +463,32 @@
   "link_preview.author": "Gan {name}",
   "link_preview.more_from_author": "Mwy gan {name}",
   "link_preview.shares": "{count, plural, one {{counter} postiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}",
+  "lists.add_member": "Ychwanegu",
+  "lists.add_to_list": "Ychwanegu at restr",
+  "lists.add_to_lists": "Ychwanegu {name} at restrau",
+  "lists.create": "Creu",
+  "lists.create_a_list_to_organize": "Creu rhestr newydd i drefnu eich llif Cartref",
+  "lists.create_list": "Creu rhestr",
   "lists.delete": "Dileu rhestr",
+  "lists.done": "Wedi gorffen",
   "lists.edit": "Golygu rhestr",
+  "lists.exclusive": "Cuddio aelodau yn y Cartref",
+  "lists.exclusive_hint": "Os oes rhywun ar y rhestr hon, cuddiwch nhw yn eich llif Cartref i osgoi gweld eu postiadau ddwywaith.",
+  "lists.find_users_to_add": "Canfod defnyddwyr i'w hychwanegu",
+  "lists.list_members": "Aelodau rhestr",
+  "lists.list_members_count": "{count, plural, one {# aelod} other {# aelod}}",
+  "lists.list_name": "Enw rhestr",
+  "lists.new_list_name": "Enw rhestr newydd",
+  "lists.no_lists_yet": "Dim rhestrau eto.",
+  "lists.no_members_yet": "Dim aelodau eto.",
+  "lists.no_results_found": "Heb ganfod canlyniadau.",
+  "lists.remove_member": "Tynnu",
   "lists.replies_policy.followed": "Unrhyw ddefnyddiwr sy'n cael ei ddilyn",
   "lists.replies_policy.list": "Aelodau'r rhestr",
   "lists.replies_policy.none": "Neb",
+  "lists.save": "Cadw",
+  "lists.search_placeholder": "Chwiliwch am bobl rydych chi'n eu dilyn",
+  "lists.show_replies_to": "Cynhwyswch atebion gan aelodau'r rhestr i",
   "load_pending": "{count, plural, one {# eitem newydd} other {# eitem newydd}}",
   "loading_indicator.label": "Yn llwytho…",
   "media_gallery.hide": "Cuddio",
@@ -625,44 +645,21 @@
   "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith",
   "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.",
   "notifications_permission_banner.title": "Peidiwch â cholli dim",
-  "onboarding.action.back": "Ewch â fi nôl",
-  "onboarding.actions.back": "Ewch â fi nôl",
-  "onboarding.actions.go_to_explore": "Gweld y pynciau llosg",
-  "onboarding.actions.go_to_home": "Ewch i'm ffrwd gartref",
-  "onboarding.compose.template": "Helo, #Mastodon!",
+  "onboarding.follows.back": "Nôl",
+  "onboarding.follows.done": "Wedi gorffen",
   "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.",
-  "onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:",
-  "onboarding.follows.title": "Personolwch eich ffrwd gartref",
+  "onboarding.follows.search": "Chwilio",
+  "onboarding.follows.title": "Dilynwch bobl i gychwyn arni",
   "onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod",
   "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a threndiau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.",
   "onboarding.profile.display_name": "Enw dangos",
   "onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…",
-  "onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.",
   "onboarding.profile.note": "Bywgraffiad",
   "onboarding.profile.note_hint": "Gallwch @grybwyll pobl eraill neu #hashnodau…",
   "onboarding.profile.save_and_continue": "Cadw a pharhau",
   "onboarding.profile.title": "Gosodiad proffil",
   "onboarding.profile.upload_avatar": "Llwytho llun proffil",
   "onboarding.profile.upload_header": "Llwytho pennyn proffil",
-  "onboarding.share.lead": "Cofiwch ddweud wrth bobl sut y gallan nhw ddod o hyd i chi ar Mastodon!",
-  "onboarding.share.message": "Fi yw {username} ar #Mastodon! Dewch i'm dilyn i yn {url}",
-  "onboarding.share.next_steps": "Camau nesaf posib:",
-  "onboarding.share.title": "Rhannwch eich proffil",
-  "onboarding.start.lead": "Mae eich cyfrif Mastodon newydd yn barod! Dyma sut y gallwch chi wneud y gorau ohono:",
-  "onboarding.start.skip": "Eisiau mynd syth yn eich blaen?",
-  "onboarding.start.title": "Rydych chi wedi cyrraedd!",
-  "onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.",
-  "onboarding.steps.follow_people.title": "Personolwch eich ffrwd gartref",
-  "onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn {emoji}",
-  "onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf",
-  "onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.",
-  "onboarding.steps.setup_profile.title": "Cyfaddaswch eich proffil",
-  "onboarding.steps.share_profile.body": "Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon",
-  "onboarding.steps.share_profile.title": "Rhannwch eich proffil",
-  "onboarding.tips.2fa": "<strong>Oeddech chi'n gwybod?</strong> Gallwch ddiogelu'ch cyfrif trwy osod dilysiad dau ffactor yng ngosodiadau eich cyfrif. Mae'n gweithio gydag unrhyw app TOTP o'ch dewis, nid oes angen rhif ffôn!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Oeddech chi'n gwybod?</strong> Gan fod Mastodon wedi'i ddatganoli, bydd rhai proffiliau y dewch ar eu traws yn cael eu cynnal ar weinyddion heblaw eich un chi. Ac eto gallwch chi ryngweithio â nhw yn hawdd! Mae eu gweinydd yn ail hanner eu henw defnyddiwr!",
-  "onboarding.tips.migration": "<strong>Oeddech chi'n gwybod?</strong> Os ydych chi'n teimlo nad yw {domain} yn ddewis gweinydd gwych i chi i'r dyfodol, gallwch chi symud i weinydd Mastodon arall heb golli'ch dilynwyr. Gallwch chi hyd yn oed gynnal eich gweinydd eich hun!",
-  "onboarding.tips.verification": "<strong>Oeddech chi'n gwybod?</strong> Gallwch wirio'ch cyfrif trwy roi dolen i'ch proffil Mastodon ar eich gwefan eich hun ac ychwanegu'r wefan at eich proffil. Nid oes angen ffioedd na dogfennau!",
   "password_confirmation.exceeds_maxlength": "Mae'r cadarnhad cyfrinair yn fwy nag uchafswm hyd y cyfrinair",
   "password_confirmation.mismatching": "Nid yw'r cadarnhad cyfrinair yn cyfateb",
   "picture_in_picture.restore": "Rhowch ef yn ôl",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 9f0f27b80..e4e610ee1 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Den anmodede side kunne ikke findes. Er du sikker på, at URL'en er korrekt?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Luk",
-  "bundle_modal_error.message": "Noget gik galt under indlæsningen af denne komponent.",
+  "bundle_modal_error.message": "Noget gik galt under indlæsningen af denne skærm.",
   "bundle_modal_error.retry": "Forsøg igen",
   "closed_registrations.other_server_instructions": "Da Mastodon er decentraliseret, kan du oprette en konto på en anden server og stadig interagere med denne.",
   "closed_registrations_modal.description": "Oprettelse af en konto på {domain} er i øjeblikket ikke muligt, men husk på, at du ikke behøver en konto specifikt på {domain} for at bruge Mastodon.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Fastgør",
   "column_header.show_settings": "Vis indstillinger",
   "column_header.unpin": "Løsgør",
+  "column_search.cancel": "Afbryd",
   "column_subheading.settings": "Indstillinger",
   "community.column_settings.local_only": "Kun lokalt",
   "community.column_settings.media_only": "Kun medier",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.",
   "dismissable_banner.community_timeline": "Disse er de seneste offentlige indlæg fra personer med konti hostet af {domain}.",
   "dismissable_banner.dismiss": "Afvis",
-  "dismissable_banner.explore_links": "Der tales lige nu om disse nyhedshistorier af folk på denne og andre servere i det decentraliserede netværk.",
-  "dismissable_banner.explore_statuses": "Disse indlæg fra diverse sociale netværk vinder fodfæste i dag. Nyere indlæg med flere boosts og favoritter rangeres højere.",
-  "dismissable_banner.explore_tags": "Disse hashtages vinder lige nu fodfæste blandt folk på denne og andre servere i det decentraliserede netværk.",
-  "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra folk på det sociale netværk, som folk på {domain} følger.",
+  "dismissable_banner.explore_links": "Disse nyhedshistorier deles mest på fediverset i dag. Nyere nyhedshistorier lagt op af flere forskellige personer rangeres højere.",
+  "dismissable_banner.explore_statuses": "Disse indlæg på tværs af fediverset opnår momentum i dag. Nyere indlæg med flere boosts og favoritter rangeres højere.",
+  "dismissable_banner.explore_tags": "Disse hashtags opnår momentum på fediverset i dag. Hashtags brugt af flere forskellige personer rangeres højere.",
+  "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra personer på fediverset, som folk på {domain} følger.",
   "domain_block_modal.block": "Blokér server",
   "domain_block_modal.block_account_instead": "Blokér i stedet @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Folk fra denne server kan interagere med de gamle indlæg.",
@@ -362,6 +363,7 @@
   "footer.status": "Status",
   "generic.saved": "Gemt",
   "getting_started.heading": "Startmenu",
+  "hashtag.admin_moderation": "Åbn modereringsbrugerflade for #{name}",
   "hashtag.column_header.tag_mode.all": "og {additional}",
   "hashtag.column_header.tag_mode.any": "eller {additional}",
   "hashtag.column_header.tag_mode.none": "uden {additional}",
@@ -648,44 +650,21 @@
   "notifications_permission_banner.enable": "Aktivér computernotifikationer",
   "notifications_permission_banner.how_to_control": "Aktivér computernotifikationer for at få besked, når Mastodon ikke er åben. Når de er aktiveret, kan man via knappen {icon} ovenfor præcist styre, hvilke typer af interaktioner, som genererer computernotifikationer.",
   "notifications_permission_banner.title": "Gå aldrig glip af noget",
-  "onboarding.action.back": "Gå tilbage",
-  "onboarding.actions.back": "Gå tilbage",
-  "onboarding.actions.go_to_explore": "Se, hvad som trender",
-  "onboarding.actions.go_to_home": "Gå til hjemme-feed'et",
-  "onboarding.compose.template": "Hej #Mastodon!",
+  "onboarding.follows.back": "Retur",
+  "onboarding.follows.done": "Færdig",
   "onboarding.follows.empty": "Ingen resultater tilgængelige pt. Prøv at bruge søgning eller gennemse siden for at finde personer at følge, eller forsøg igen senere.",
-  "onboarding.follows.lead": "Man kurerer sin eget hjemme-feed. Jo flere personer man følger, des mere aktiv og interessant vil det være. Disse profiler kan være et godt udgangspunkt – de kan altid fjernes senere!",
-  "onboarding.follows.title": "Populært på Mastodon",
+  "onboarding.follows.search": "Søg",
+  "onboarding.follows.title": "Følg folk for at komme i gang",
   "onboarding.profile.discoverable": "Gør min profil synlig",
   "onboarding.profile.discoverable_hint": "Når man vælger at være synlig på Mastodon, kan ens indlæg fremgå i søgeresultater og tendenser, og profilen kan blive foreslået til andre med tilsvarende interesse.",
   "onboarding.profile.display_name": "Visningsnavn",
   "onboarding.profile.display_name_hint": "Fulde navn eller dit sjove navn…",
-  "onboarding.profile.lead": "Dette kan altid færdiggøres senere i indstillingerne, hvor endnu flere tilpasningsmuligheder forefindes.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #hashtags…",
   "onboarding.profile.save_and_continue": "Gem og fortsæt",
   "onboarding.profile.title": "Profilopsætning",
   "onboarding.profile.upload_avatar": "Upload profilbillede",
   "onboarding.profile.upload_header": "Upload profiloverskrift",
-  "onboarding.share.lead": "Lad folk vide, hvordan de kan finde dig på Mastodon!",
-  "onboarding.share.message": "Jeg er {username} på #Mastodon! Følg mig på {url}",
-  "onboarding.share.next_steps": "Mulige næste trin:",
-  "onboarding.share.title": "Del profilen",
-  "onboarding.start.lead": "Den nye Mastodon konto er klar til brug. Sådan kan man få mest muligt ud af den:",
-  "onboarding.start.skip": "Vil springe længere frem?",
-  "onboarding.start.title": "Du klarede det!",
-  "onboarding.steps.follow_people.body": "Man kurerer sit eget feed. Lad os fylde det med interessante personer.",
-  "onboarding.steps.follow_people.title": "Følg {count, plural, one {en person} other {# personer}}",
-  "onboarding.steps.publish_status.body": "Sig hej til verden med tekst, billeder, videoer eller afstemninger {emoji}",
-  "onboarding.steps.publish_status.title": "Skriv dit første indlæg",
-  "onboarding.steps.setup_profile.body": "Andre er mere tilbøjelige til at interagere, hvis man har udfyldt sin profil.",
-  "onboarding.steps.setup_profile.title": "Tilpas profilen",
-  "onboarding.steps.share_profile.body": "Lad vennerne vide, hvordan de finder dig på Mastodon!",
-  "onboarding.steps.share_profile.title": "Del profilen",
-  "onboarding.tips.2fa": "<strong>Vidste du?</strong> Man kan sikre sin konto ved at opsætte tofaktorgodkendelse i kontoindstillingerne. Det virker med enhver valgt TOTP-app, intet telefonnummer nødvendigt!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Vidste du?</strong> Da Mastodon er decentraliseret, vil nogle af de profiler, man støder på, være hostet på andre servere end ens egen. Alligevel kan man interagere med dem problemfrit! Deres servernavn udgør anden halvdel af deres brugernavn!",
-  "onboarding.tips.migration": "<strong>Vidste du?</strong> Synes man ikke, at {domain} er et godt servervalg fremadrettet, kan man flytte til en anden Mastodon-server uden at miste sine følgere. Man kan endda hoste sin egen server!",
-  "onboarding.tips.verification": "<strong>Vidste du det?</strong> Man kan bekræfte sin konto ved at placere sit Mastodon-profillink på sin egen websted og føje webstedet til sin profil. Ingen gebyrer eller dokumenter påkrævet!",
   "password_confirmation.exceeds_maxlength": "Adgangskodebekræftelse overstiger maks. adgangskodelængde",
   "password_confirmation.mismatching": "Adgangskodebekræftelse matcher ikke",
   "picture_in_picture.restore": "Indsæt det igen",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index b47007522..cf46a1468 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -19,7 +19,7 @@
   "account.block_domain": "{domain} sperren",
   "account.block_short": "Blockieren",
   "account.blocked": "Blockiert",
-  "account.cancel_follow_request": "Folgeanfrage zurückziehen",
+  "account.cancel_follow_request": "Follower-Anfrage zurückziehen",
   "account.copy": "Link zum Profil kopieren",
   "account.direct": "@{name} privat erwähnen",
   "account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet",
@@ -89,9 +89,9 @@
   "announcement.announcement": "Ankündigung",
   "annual_report.summary.archetype.booster": "Trendjäger*in",
   "annual_report.summary.archetype.lurker": "Beobachter*in",
-  "annual_report.summary.archetype.oracle": "Orakel",
+  "annual_report.summary.archetype.oracle": "Universaltalent",
   "annual_report.summary.archetype.pollster": "Meinungsforscher*in",
-  "annual_report.summary.archetype.replier": "Geselliger Schmetterling",
+  "annual_report.summary.archetype.replier": "Sozialer Schmetterling",
   "annual_report.summary.followers.followers": "Follower",
   "annual_report.summary.followers.total": "{count} insgesamt",
   "annual_report.summary.here_it_is": "Dein Jahresrückblick für {year}:",
@@ -113,7 +113,7 @@
   "block_modal.show_more": "Mehr anzeigen",
   "block_modal.they_cant_mention": "Das Profil wird dich nicht erwähnen oder dir folgen können.",
   "block_modal.they_cant_see_posts": "Deine Beiträge können nicht mehr angesehen werden und du wirst deren Beiträge nicht mehr sehen.",
-  "block_modal.they_will_know": "Es wird erkennbar sein, dass dieses Profil blockiert wurde.",
+  "block_modal.they_will_know": "Das Profil wird erkennen können, dass du es blockiert hast.",
   "block_modal.title": "Profil blockieren?",
   "block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.",
   "boost_modal.combo": "Mit {combo} erscheint dieses Fenster beim nächsten Mal nicht mehr",
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Die angeforderte Seite konnte nicht gefunden werden. Bist du dir sicher, dass die URL in der Adressleiste korrekt ist?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Schließen",
-  "bundle_modal_error.message": "Beim Laden dieser Komponente ist etwas schiefgelaufen.",
+  "bundle_modal_error.message": "Beim Laden des Inhalts ist etwas schiefgelaufen.",
   "bundle_modal_error.retry": "Erneut versuchen",
   "closed_registrations.other_server_instructions": "Da Mastodon dezentralisiert ist, kannst du ein Konto auf einem anderen Server erstellen und trotzdem mit diesem Server interagieren.",
   "closed_registrations_modal.description": "Das Anlegen eines Kontos auf {domain} ist derzeit nicht möglich, aber bedenke, dass du kein extra Konto auf {domain} benötigst, um Mastodon nutzen zu können.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Anheften",
   "column_header.show_settings": "Einstellungen anzeigen",
   "column_header.unpin": "Lösen",
+  "column_search.cancel": "Abbrechen",
   "column_subheading.settings": "Einstellungen",
   "community.column_settings.local_only": "Nur lokal",
   "community.column_settings.media_only": "Nur Beiträge mit Medien",
@@ -179,7 +180,7 @@
   "compose_form.placeholder": "Was gibt’s Neues?",
   "compose_form.poll.duration": "Umfragedauer",
   "compose_form.poll.multiple": "Mehrfachauswahl",
-  "compose_form.poll.option_placeholder": "Option {number}",
+  "compose_form.poll.option_placeholder": "{number}. Auswahl",
   "compose_form.poll.single": "Einfachauswahl",
   "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben",
   "compose_form.poll.switch_to_single": "Nur Einfachauswahl erlauben",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert.",
   "dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.",
   "dismissable_banner.dismiss": "Ablehnen",
-  "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im Social Web geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen geteilt wurden, erscheinen weiter oben.",
-  "dismissable_banner.explore_statuses": "Diese Beiträge sind heute im Social Web sehr beliebt. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, erscheinen weiter oben.",
-  "dismissable_banner.explore_tags": "Diese Hashtags sind heute im Social Web sehr beliebt. Hashtags, die von vielen verschiedenen Profilen verwendet werden, erscheinen weiter oben.",
-  "dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im Social Web, denen Leute auf {domain} folgen.",
+  "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im Fediverse geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen geteilt wurden, erscheinen weiter oben.",
+  "dismissable_banner.explore_statuses": "Diese Beiträge sind heute im Fediverse sehr beliebt. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, erscheinen weiter oben.",
+  "dismissable_banner.explore_tags": "Diese Hashtags sind heute im Fediverse sehr beliebt. Hashtags, die von vielen verschiedenen Profilen verwendet werden, erscheinen weiter oben.",
+  "dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im Fediverse, denen Leute auf {domain} folgen.",
   "domain_block_modal.block": "Server blockieren",
   "domain_block_modal.block_account_instead": "Stattdessen @{name} blockieren",
   "domain_block_modal.they_can_interact_with_old_posts": "Profile von diesem Server werden mit deinen älteren Beiträgen interagieren können.",
@@ -255,7 +256,7 @@
   "domain_pill.their_server": "Deren digitale Heimat. Hier „leben“ alle Beiträge von diesem Profil.",
   "domain_pill.their_username": "Deren eindeutigen Identität auf dem betreffenden Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.",
   "domain_pill.username": "Profilname",
-  "domain_pill.whats_in_a_handle": "Was ist Teil der Adresse?",
+  "domain_pill.whats_in_a_handle": "Woraus besteht eine Adresse?",
   "domain_pill.who_they_are": "Adressen teilen mit, wer jemand ist und wo sich jemand aufhält. Daher kannst du mit Leuten im gesamten Social Web interagieren, wenn es eine durch <button>ActivityPub angetriebene Plattform</button> ist.",
   "domain_pill.who_you_are": "Deine Adresse teilt mit, wer du bist und wo du dich aufhältst. Daher können andere Leute im gesamten Social Web mit dir interagieren, wenn es eine durch <button>ActivityPub angetriebene Plattform</button> ist.",
   "domain_pill.your_handle": "Deine Adresse:",
@@ -330,9 +331,9 @@
   "filter_warning.matches_filter": "Übereinstimmend mit dem Filter „<span>{title}</span>“",
   "filtered_notifications_banner.pending_requests": "Von {count, plural, =0 {keinem, den} one {einer Person, die} other {# Personen, die}} du möglicherweise kennst",
   "filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
-  "firehose.all": "Alles",
+  "firehose.all": "Alle Server",
   "firehose.local": "Dieser Server",
-  "firehose.remote": "Andere Server",
+  "firehose.remote": "Externe Server",
   "follow_request.authorize": "Genehmigen",
   "follow_request.reject": "Ablehnen",
   "follow_requests.unlocked_explanation": "Auch wenn dein Konto öffentlich bzw. nicht geschützt ist, haben die Moderator*innen von {domain} gedacht, dass du diesen Follower lieber manuell bestätigen solltest.",
@@ -362,6 +363,7 @@
   "footer.status": "Status",
   "generic.saved": "Gespeichert",
   "getting_started.heading": "Auf gehts!",
+  "hashtag.admin_moderation": "#{name} moderieren",
   "hashtag.column_header.tag_mode.all": "und {additional}",
   "hashtag.column_header.tag_mode.any": "oder {additional}",
   "hashtag.column_header.tag_mode.none": "ohne {additional}",
@@ -492,7 +494,7 @@
   "lists.replies_policy.none": "Niemanden",
   "lists.save": "Speichern",
   "lists.search_placeholder": "Nach Profilen suchen, denen du folgst",
-  "lists.show_replies_to": "Antworten von Listenmitgliedern anzeigen für …",
+  "lists.show_replies_to": "Antworten von Listenmitgliedern einbeziehen an …",
   "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}",
   "loading_indicator.label": "Wird geladen …",
   "media_gallery.hide": "Ausblenden",
@@ -541,7 +543,7 @@
   "notification.admin.report_statuses_other": "{name} meldete {target}",
   "notification.admin.sign_up": "{name} registrierte sich",
   "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} registrierten sich",
-  "notification.annual_report.message": "Dein {year} #Wrapstodon erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!",
+  "notification.annual_report.message": "Dein #Wrapstodon für {year} erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!",
   "notification.annual_report.view": "#Wrapstodon ansehen",
   "notification.favourite": "{name} favorisierte deinen Beitrag",
   "notification.favourite.name_and_others_with_link": "{name} und <a>{count, plural, one {# weiteres Profil} other {# weitere Profile}}</a> favorisierten deinen Beitrag",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen",
   "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.",
   "notifications_permission_banner.title": "Nichts verpassen",
-  "onboarding.action.back": "Bring mich zurück",
-  "onboarding.actions.back": "Bring mich zurück",
-  "onboarding.actions.go_to_explore": "Zeig mir die Trends",
-  "onboarding.actions.go_to_home": "Bring mich zu meiner Startseite",
-  "onboarding.compose.template": "Hallo #Mastodon!",
+  "onboarding.follows.back": "Zurück",
+  "onboarding.follows.done": "Fertig",
   "onboarding.follows.empty": "Bedauerlicherweise können aktuell keine Ergebnisse angezeigt werden. Du kannst die Suche verwenden oder den Reiter „Entdecken“ auswählen, um neue Leute zum Folgen zu finden – oder du versuchst es später erneut.",
-  "onboarding.follows.lead": "Deine Startseite ist der primäre Anlaufpunkt, um Mastodon zu erleben. Je mehr Profilen du folgst, umso aktiver und interessanter wird sie. Damit du direkt loslegen kannst, gibt es hier ein paar Vorschläge:",
-  "onboarding.follows.title": "Personalisiere deine Startseite",
+  "onboarding.follows.search": "Suchen",
+  "onboarding.follows.title": "Folge Profilen, um loszulegen",
   "onboarding.profile.discoverable": "Mein Profil darf entdeckt werden",
   "onboarding.profile.discoverable_hint": "Wenn du entdeckt werden möchtest, dann können deine Beiträge in Suchergebnissen und Trends erscheinen. Dein Profil kann ebenfalls anderen mit ähnlichen Interessen vorgeschlagen werden.",
   "onboarding.profile.display_name": "Anzeigename",
   "onboarding.profile.display_name_hint": "Dein richtiger Name oder dein Fantasiename …",
-  "onboarding.profile.lead": "Du kannst dein Profil später in den Einstellungen vervollständigen. Dort stehen weitere Anpassungsmöglichkeiten zur Verfügung.",
   "onboarding.profile.note": "Über mich",
   "onboarding.profile.note_hint": "Du kannst andere @Profile erwähnen oder #Hashtags verwenden …",
   "onboarding.profile.save_and_continue": "Speichern und fortfahren",
   "onboarding.profile.title": "Profil einrichten",
   "onboarding.profile.upload_avatar": "Profilbild hochladen",
   "onboarding.profile.upload_header": "Titelbild hochladen",
-  "onboarding.share.lead": "Lass die Leute wissen, wie sie dich auf Mastodon finden können!",
-  "onboarding.share.message": "Ich bin {username} auf #Mastodon! Folge mir auf {url}",
-  "onboarding.share.next_steps": "Mögliche nächste Schritte:",
-  "onboarding.share.title": "Teile dein Profil",
-  "onboarding.start.lead": "Du bist nun ein Teil von Mastodon – eine einzigartige, dezentralisierte Social-Media-Plattform, bei der du und kein Algorithmus deine eigene Erfahrung gestaltest. Fangen wir an, diese neue soziale Dimension zu erkunden:",
-  "onboarding.start.skip": "Du benötigst keine Hilfe für den Einstieg?",
-  "onboarding.start.title": "Du hast es geschafft!",
-  "onboarding.steps.follow_people.body": "Interessanten Profilen zu folgen ist das, was Mastodon ausmacht.",
-  "onboarding.steps.follow_people.title": "Personalisiere deine Startseite",
-  "onboarding.steps.publish_status.body": "Begrüße die Welt mit Text, Fotos, Videos oder Umfragen. {emoji}",
-  "onboarding.steps.publish_status.title": "Erstelle deinen ersten Beitrag",
-  "onboarding.steps.setup_profile.body": "Mit einem vollständigen Profil interagieren andere eher mit dir.",
-  "onboarding.steps.setup_profile.title": "Personalisiere dein Profil",
-  "onboarding.steps.share_profile.body": "Lass deine Freund*innen wissen, wie sie dich auf Mastodon finden können.",
-  "onboarding.steps.share_profile.title": "Teile dein Mastodon-Profil",
-  "onboarding.tips.2fa": "<strong>Wusstest du schon?</strong> Du kannst die Sicherheit deines Kontos erhöhen, indem du die Zwei-Faktor-Authentisierung in deinen Kontoeinstellungen aktivierst. Dafür ist keine Telefonnummer notwendig und es funktioniert jede beliebige TOTP-App!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Wusstest du schon?</strong> Da Mastodon dezentralisiert ist, werden einige Profile, denen du begegnest, auf anderen Servern als deinem bereitgestellt. Und trotzdem kannst du uneingeschränkt mit ihnen interagieren! Der Servername befindet sich in der zweiten Hälfte ihres Profilnamens!",
-  "onboarding.tips.migration": "<strong>Wusstest du schon?</strong> Wenn du das Gefühl hast, dass {domain} in Zukunft nicht die richtige Serverwahl für dich ist, kannst du auf einen anderen Mastodon-Server umziehen, ohne deine Follower zu verlieren. Du kannst sogar deinen eigenen Server betreiben!",
-  "onboarding.tips.verification": "<strong>Wusstest du schon?</strong> Du kannst dein Konto verifizieren, indem du auf deiner Website auf dein Mastodon-Profil verlinkst und den Link deiner Website zu deinem Profil hinzufügst. Völlig kostenlos und ohne Dokumente einsenden zu müssen!",
   "password_confirmation.exceeds_maxlength": "Passwortbestätigung überschreitet die maximal erlaubte Zeichenanzahl",
   "password_confirmation.mismatching": "Passwortbestätigung stimmt nicht überein",
   "picture_in_picture.restore": "Zurücksetzen",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 57f47dda7..000c0e765 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -101,6 +101,7 @@
   "annual_report.summary.highlighted_post.possessive": "του χρήστη {name}",
   "annual_report.summary.most_used_app.most_used_app": "πιο χρησιμοποιημένη εφαρμογή",
   "annual_report.summary.most_used_hashtag.most_used_hashtag": "πιο χρησιμοποιημένη ετικέτα",
+  "annual_report.summary.most_used_hashtag.none": "Κανένα",
   "annual_report.summary.new_posts.new_posts": "νέες αναρτήσεις",
   "annual_report.summary.percentile.text": "<topLabel>Αυτό σε βάζει στην κορυφή του </topLabel><percentage></percentage><bottomLabel>των χρηστών του Mastodon.</bottomLabel>",
   "annual_report.summary.percentile.we_wont_tell_bernie": "Δεν θα το πούμε στον Bernie.",
@@ -128,7 +129,7 @@
   "bundle_column_error.routing.body": "Η επιθυμητή σελίδα δεν βρέθηκε. Είναι σωστό το URL στο πεδίο διευθύνσεων;",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Κλείσιμο",
-  "bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.",
+  "bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση αυτής της οθόνης.",
   "bundle_modal_error.retry": "Δοκίμασε ξανά",
   "closed_registrations.other_server_instructions": "Καθώς το Mastodon είναι αποκεντρωμένο, μπορείς να δημιουργήσεις λογαριασμό σε άλλον διακομιστή αλλά να συνεχίσεις να αλληλεπιδράς με αυτόν.",
   "closed_registrations_modal.description": "Η δημιουργία λογαριασμού στον {domain} προς το παρόν δεν είναι δυνατή, αλλά λάβε υπόψη ότι δεν χρειάζεσαι λογαριασμό ειδικά στον {domain} για να χρησιμοποιήσεις το Mastodon.",
@@ -139,13 +140,16 @@
   "column.blocks": "Αποκλεισμένοι χρήστες",
   "column.bookmarks": "Σελιδοδείκτες",
   "column.community": "Τοπική ροή",
+  "column.create_list": "Δημιουργία λίστας",
   "column.direct": "Ιδιωτικές αναφορές",
   "column.directory": "Περιήγηση στα προφίλ",
   "column.domain_blocks": "Αποκλεισμένοι τομείς",
+  "column.edit_list": "Επεξεργασία λίστας",
   "column.favourites": "Αγαπημένα",
   "column.firehose": "Ζωντανές ροές",
   "column.follow_requests": "Αιτήματα ακολούθησης",
   "column.home": "Αρχική",
+  "column.list_members": "Διαχείριση μελών λίστας",
   "column.lists": "Λίστες",
   "column.mutes": "Αποσιωπημένοι χρήστες",
   "column.notifications": "Ειδοποιήσεις",
@@ -158,6 +162,7 @@
   "column_header.pin": "Καρφίτσωμα",
   "column_header.show_settings": "Εμφάνιση ρυθμίσεων",
   "column_header.unpin": "Ξεκαρφίτσωμα",
+  "column_search.cancel": "Ακύρωση",
   "column_subheading.settings": "Ρυθμίσεις",
   "community.column_settings.local_only": "Τοπικά μόνο",
   "community.column_settings.media_only": "Μόνο πολυμέσα",
@@ -231,10 +236,8 @@
   "disabled_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προς το παρόν απενεργοποιημένος.",
   "dismissable_banner.community_timeline": "Αυτές είναι οι πιο πρόσφατες δημόσιες αναρτήσεις ατόμων των οποίων οι λογαριασμοί φιλοξενούνται στο {domain}.",
   "dismissable_banner.dismiss": "Παράβλεψη",
-  "dismissable_banner.explore_links": "Αυτές οι ειδήσεις συζητούνται σε αυτόν και άλλους διακομιστές του αποκεντρωμένου δικτύου αυτή τη στιγμή.",
-  "dismissable_banner.explore_statuses": "Αυτές είναι οι αναρτήσεις που έχουν απήχηση στο κοινωνικό δίκτυο σήμερα. Οι νεώτερες αναρτήσεις με περισσότερες προωθήσεις και προτιμήσεις κατατάσσονται ψηλότερα.",
-  "dismissable_banner.explore_tags": "Αυτές οι ετικέτες αποκτούν απήχηση σε αυτόν και άλλους διακομιστές του αποκεντρωμένου δικτύου αυτή τη στιγμή.",
-  "dismissable_banner.public_timeline": "Αυτές είναι οι πιο πρόσφατες δημόσιες αναρτήσεις από άτομα στον κοινωνικό ιστό που ακολουθούν άτομα από το {domain}.",
+  "dismissable_banner.explore_links": "Αυτές οι ιστορίες ειδήσεων μοιράζονται περισσότερο στο fediverse σήμερα. Νεότερες ιστορίες ειδήσεων που δημοσιεύτηκαν από πιο διαφορετικά άτομα κατατάσσονται υψηλότερα.",
+  "dismissable_banner.explore_statuses": "Αυτές οι αναρτήσεις από όλο το fediverse κερδίζουν την προσοχή σήμερα. Νεότερες αναρτήσεις με περισσότερες ενισχύσεις και αγαπημένα κατατάσσονται υψηλότερα.",
   "domain_block_modal.block": "Αποκλεισμός διακομιστή",
   "domain_block_modal.block_account_instead": "Αποκλεισμός @{name} αντ' αυτού",
   "domain_block_modal.they_can_interact_with_old_posts": "Άτομα από αυτόν τον διακομιστή μπορούν να αλληλεπιδράσουν με τις παλιές αναρτήσεις σου.",
@@ -624,44 +627,17 @@
   "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
   "notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.",
   "notifications_permission_banner.title": "Μη χάσεις στιγμή",
-  "onboarding.action.back": "Επιστροφή",
-  "onboarding.actions.back": "Επιστροφή",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Πηγαίνετε στην αρχική σας ροή",
-  "onboarding.compose.template": "Γειά σου #Mastodon!",
   "onboarding.follows.empty": "Δυστυχώς, δεν μπορούν να εμφανιστούν αποτελέσματα αυτή τη στιγμή. Μπορείς να προσπαθήσεις να χρησιμοποιήσεις την αναζήτηση ή να περιηγηθείς στη σελίδα εξερεύνησης για να βρεις άτομα να ακολουθήσεις ή να δοκιμάσεις ξανά αργότερα.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Δημοφιλή στο Mastodon",
   "onboarding.profile.discoverable": "Κάνε το προφίλ μου ανακαλύψιμο",
   "onboarding.profile.discoverable_hint": "Όταν επιλέγεις την δυνατότητα ανακάλυψης στο Mastodon, οι αναρτήσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης και τις τάσεις, και το προφίλ σου μπορεί να προτείνεται σε άτομα με παρόμοια ενδιαφέροντα με εσένα.",
   "onboarding.profile.display_name": "Εμφανιζόμενο όνομα",
   "onboarding.profile.display_name_hint": "Το πλήρες ή το διασκεδαστικό σου όνομα…",
-  "onboarding.profile.lead": "Μπορείς πάντα να το ολοκληρώσεις αργότερα στις ρυθμίσεις, όπου είναι διαθέσιμες ακόμα περισσότερες επιλογές προσαρμογής.",
   "onboarding.profile.note": "Βιογραφικό",
   "onboarding.profile.note_hint": "Μπορείτε να @αναφέρετε άλλα άτομα ή #hashtags…",
   "onboarding.profile.save_and_continue": "Αποθήκευση και συνέχεια",
   "onboarding.profile.title": "Ρύθμιση προφίλ",
   "onboarding.profile.upload_avatar": "Μεταφόρτωση εικόνας προφίλ",
   "onboarding.profile.upload_header": "Μεταφόρτωση κεφαλίδας προφίλ",
-  "onboarding.share.lead": "Let people know how they can find you on Mastodon!\nΕνημερώστε άλλα άτομα πώς μπορούν να σας βρουν στο Mastodon!",
-  "onboarding.share.message": "Με λένε {username} στο #Mastodon! Έλα να με ακολουθήσεις στο {url}",
-  "onboarding.share.next_steps": "Πιθανά επόμενα βήματα:",
-  "onboarding.share.title": "Κοινοποίηση του προφίλ σου",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "You've made it!\nΤα καταφέρατε!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Κάντε την πρώτη σας δημοσίευση",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Το ήξερες;</strong> Μπορείς να ασφαλίσεις το λογαριασμό σου ρυθμίζοντας ταυτότητα δύο παραγόντων στις ρυθμίσεις του λογαριασμού σου. Λειτουργεί με οποιαδήποτε εφαρμογή TOTP της επιλογής σας, δεν απαιτείται αριθμός τηλεφώνου!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Το ήξερες;</strong> Από τη στιγμή που το Mastodon είναι αποκεντρωμένο, κάποια προφίλ που συναντάς θα φιλοξενούνται σε διακομιστές διαφορετικούς από τον δικό σου. Και παρόλα αυτά μπορείς να αλληλεπιδράσεις μαζί τους απρόσκοπτα! Ο διακομιστής τους είναι στο δεύτερο μισό του ονόματος χρήστη!",
-  "onboarding.tips.migration": "<strong>Το ήξερες;</strong> Αν αισθάνεσαι ότι το {domain} δεν είναι η κατάλληλη επιλογή διακομιστή για σένα στο μέλλον, μπορείς να μετακινηθείς σε άλλο διακομιστή Mastodon χωρίς να χάσεις τους ακόλουθούς σου. Μπορείς να κάνεις ακόμα και τον δικό σου διακομιστή!",
-  "onboarding.tips.verification": "<strong>Το ήξερες;</strong> Μπορείς να επαληθεύσεις τον λογαριασμό σου βάζοντας έναν σύνδεσμο του προφίλ σου στο Mastodon στην ιστοσελίδα σου και να προσθέσεις την ιστοσελίδα στο προφίλ σου. Χωρίς έξοδα ή έγγραφα!",
   "password_confirmation.exceeds_maxlength": "Η επιβεβαίωση κωδικού πρόσβασης υπερβαίνει το μέγιστο μήκος κωδικού πρόσβασης",
   "password_confirmation.mismatching": "Η επιβεβαίωση του κωδικού πρόσβασης δε συμπίπτει",
   "picture_in_picture.restore": "Βάλε το πίσω",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index 8d4201484..d7346d82e 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -129,7 +129,6 @@
   "bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Close",
-  "bundle_modal_error.message": "Something went wrong while loading this component.",
   "bundle_modal_error.retry": "Try again",
   "closed_registrations.other_server_instructions": "Since Mastodon is decentralised, you can create an account on another server and still interact with this one.",
   "closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.",
@@ -140,13 +139,16 @@
   "column.blocks": "Blocked users",
   "column.bookmarks": "Bookmarks",
   "column.community": "Local timeline",
+  "column.create_list": "Create list",
   "column.direct": "Private mentions",
   "column.directory": "Browse profiles",
   "column.domain_blocks": "Blocked domains",
+  "column.edit_list": "Edit list",
   "column.favourites": "Favourites",
   "column.firehose": "Live feeds",
   "column.follow_requests": "Follow requests",
   "column.home": "Home",
+  "column.list_members": "Manage list members",
   "column.lists": "Lists",
   "column.mutes": "Muted users",
   "column.notifications": "Notifications",
@@ -159,6 +161,7 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
+  "column_search.cancel": "Cancel",
   "column_subheading.settings": "Settings",
   "community.column_settings.local_only": "Local only",
   "community.column_settings.media_only": "Media Only",
@@ -232,10 +235,6 @@
   "disabled_account_banner.text": "Your account {disabledAccount} is currently disabled.",
   "dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.",
   "dismissable_banner.dismiss": "Dismiss",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralised network right now.",
-  "dismissable_banner.explore_statuses": "These are posts from across the social web that are gaining traction today. Newer posts with more boosts and favourites are ranked higher.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralised network right now.",
-  "dismissable_banner.public_timeline": "These are the most recent public posts from people on the social web that people on {domain} follow.",
   "domain_block_modal.block": "Block server",
   "domain_block_modal.block_account_instead": "Block @{name} instead",
   "domain_block_modal.they_can_interact_with_old_posts": "People from this server can interact with your old posts.",
@@ -464,11 +463,32 @@
   "link_preview.author": "By {name}",
   "link_preview.more_from_author": "More from {name}",
   "link_preview.shares": "{count, plural, one {{counter} post} other {{counter} posts}}",
+  "lists.add_member": "Add",
+  "lists.add_to_list": "Add to list",
+  "lists.add_to_lists": "Add {name} to lists",
+  "lists.create": "Create",
+  "lists.create_a_list_to_organize": "Create a new list to organise your Home feed",
+  "lists.create_list": "Create list",
   "lists.delete": "Delete list",
+  "lists.done": "Done",
   "lists.edit": "Edit list",
+  "lists.exclusive": "Hide members in Home",
+  "lists.exclusive_hint": "If someone is on this list, hide them in your Home feed to avoid seeing their posts twice.",
+  "lists.find_users_to_add": "Find users to add",
+  "lists.list_members": "List members",
+  "lists.list_members_count": "{count, plural, one {# member} other {# members}}",
+  "lists.list_name": "List name",
+  "lists.new_list_name": "New list name",
+  "lists.no_lists_yet": "No lists yet.",
+  "lists.no_members_yet": "No members yet.",
+  "lists.no_results_found": "No results found.",
+  "lists.remove_member": "Remove",
   "lists.replies_policy.followed": "Any followed user",
   "lists.replies_policy.list": "Members of the list",
   "lists.replies_policy.none": "No one",
+  "lists.save": "Save",
+  "lists.search_placeholder": "Search people you follow",
+  "lists.show_replies_to": "Include replies from list members to",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading…",
   "media_gallery.hide": "Hide",
@@ -518,6 +538,7 @@
   "notification.admin.sign_up": "{name} signed up",
   "notification.admin.sign_up.name_and_others": "{name} and {count, plural, one {# other} other {# others}} signed up",
   "notification.annual_report.message": "Your {year} #Wrapstodon awaits! Unveil your year's highlights and memorable moments on Mastodon!",
+  "notification.annual_report.view": "View #Wrapstodon",
   "notification.favourite": "{name} favourited your post",
   "notification.favourite.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> favourited your post",
   "notification.follow": "{name} followed you",
@@ -624,44 +645,21 @@
   "notifications_permission_banner.enable": "Enable desktop notifications",
   "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
   "notifications_permission_banner.title": "Never miss a thing",
-  "onboarding.action.back": "Take me back",
-  "onboarding.actions.back": "Take me back",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Take me to my home feed",
-  "onboarding.compose.template": "Hello #Mastodon!",
+  "onboarding.follows.back": "Back",
+  "onboarding.follows.done": "Done",
   "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Personalize your home feed",
+  "onboarding.follows.search": "Search",
+  "onboarding.follows.title": "Follow people to get started",
   "onboarding.profile.discoverable": "Make my profile discoverable",
   "onboarding.profile.discoverable_hint": "When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.",
   "onboarding.profile.display_name": "Display name",
   "onboarding.profile.display_name_hint": "Your full name or your fun name…",
-  "onboarding.profile.lead": "You can always complete this later in the settings, where even more customisation options are available.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "You can @mention other people or #hashtags…",
   "onboarding.profile.save_and_continue": "Save and continue",
   "onboarding.profile.title": "Profile setup",
   "onboarding.profile.upload_avatar": "Upload profile picture",
   "onboarding.profile.upload_header": "Upload profile header",
-  "onboarding.share.lead": "Let people know how they can find you on Mastodon!",
-  "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}",
-  "onboarding.share.next_steps": "Possible next steps:",
-  "onboarding.share.title": "Share your profile",
-  "onboarding.start.lead": "You're now part of Mastodon, a unique, decentralized social media platform where you—not an algorithm—curate your own experience. Let's get you started on this new social frontier:",
-  "onboarding.start.skip": "Don't need help getting started?",
-  "onboarding.start.title": "You've made it!",
-  "onboarding.steps.follow_people.body": "Following interesting people is what Mastodon is all about.",
-  "onboarding.steps.follow_people.title": "Personalize your home feed",
-  "onboarding.steps.publish_status.body": "Say hello to the world with text, photos, videos, or polls {emoji}",
-  "onboarding.steps.publish_status.title": "Make your first post",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customise your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your Mastodon profile",
-  "onboarding.tips.2fa": "<strong>Did you know?</strong> You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Did you know?</strong> Since Mastodon is decentralised, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!",
-  "onboarding.tips.migration": "<strong>Did you know?</strong> If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!",
-  "onboarding.tips.verification": "<strong>Did you know?</strong> You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!",
   "password_confirmation.exceeds_maxlength": "Password confirmation exceeds the maximum password length",
   "password_confirmation.mismatching": "Password confirmation does not match",
   "picture_in_picture.restore": "Put it back",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 142b7f177..36e180722 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -103,7 +103,7 @@
   "annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag",
   "annual_report.summary.most_used_hashtag.none": "None",
   "annual_report.summary.new_posts.new_posts": "new posts",
-  "annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of Mastodon users.</bottomLabel>",
+  "annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of {domain} users.</bottomLabel>",
   "annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.",
   "annual_report.summary.thanks": "Thanks for being part of Mastodon!",
   "attachments_list.unprocessed": "(unprocessed)",
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Close",
-  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.message": "Something went wrong while loading this screen.",
   "bundle_modal_error.retry": "Try again",
   "closed_registrations.other_server_instructions": "Since Mastodon is decentralized, you can create an account on another server and still interact with this one.",
   "closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
+  "column_search.cancel": "Cancel",
   "column_subheading.settings": "Settings",
   "community.column_settings.local_only": "Local only",
   "community.column_settings.media_only": "Media Only",
@@ -204,6 +205,9 @@
   "confirmations.edit.confirm": "Edit",
   "confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
   "confirmations.edit.title": "Overwrite post?",
+  "confirmations.follow_to_list.confirm": "Follow and add to list",
+  "confirmations.follow_to_list.message": "You need to be following {name} to add them to a list.",
+  "confirmations.follow_to_list.title": "Follow user?",
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.logout.title": "Log out?",
@@ -235,10 +239,10 @@
   "disabled_account_banner.text": "Your account {disabledAccount} is currently disabled.",
   "dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.",
   "dismissable_banner.dismiss": "Dismiss",
-  "dismissable_banner.explore_links": "These are news stories being shared the most on the social web today. Newer news stories posted by more different people are ranked higher.",
-  "dismissable_banner.explore_statuses": "These are posts from across the social web that are gaining traction today. Newer posts with more boosts and favorites are ranked higher.",
-  "dismissable_banner.explore_tags": "These are hashtags that are gaining traction on the social web today. Hashtags that are used by more different people are ranked higher.",
-  "dismissable_banner.public_timeline": "These are the most recent public posts from people on the social web that people on {domain} follow.",
+  "dismissable_banner.explore_links": "These news stories are being shared the most on the fediverse today. Newer news stories posted by more different people are ranked higher.",
+  "dismissable_banner.explore_statuses": "These posts from across the fediverse are gaining traction today. Newer posts with more boosts and favorites are ranked higher.",
+  "dismissable_banner.explore_tags": "These hashtags are gaining traction on the fediverse today. Hashtags that are used by more different people are ranked higher.",
+  "dismissable_banner.public_timeline": "These are the most recent public posts from people on the fediverse that people on {domain} follow.",
   "domain_block_modal.block": "Block server",
   "domain_block_modal.block_account_instead": "Block @{name} instead",
   "domain_block_modal.they_can_interact_with_old_posts": "People from this server can interact with your old posts.",
@@ -362,6 +366,7 @@
   "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
+  "hashtag.admin_moderation": "Open moderation interface for #{name}",
   "hashtag.column_header.tag_mode.all": "and {additional}",
   "hashtag.column_header.tag_mode.any": "or {additional}",
   "hashtag.column_header.tag_mode.none": "without {additional}",
@@ -491,7 +496,7 @@
   "lists.replies_policy.list": "Members of the list",
   "lists.replies_policy.none": "No one",
   "lists.save": "Save",
-  "lists.search_placeholder": "Search people you follow",
+  "lists.search": "Search",
   "lists.show_replies_to": "Include replies from list members to",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Loading…",
@@ -649,44 +654,21 @@
   "notifications_permission_banner.enable": "Enable desktop notifications",
   "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
   "notifications_permission_banner.title": "Never miss a thing",
-  "onboarding.action.back": "Take me back",
-  "onboarding.actions.back": "Take me back",
-  "onboarding.actions.go_to_explore": "Take me to trending",
-  "onboarding.actions.go_to_home": "Take me to my home feed",
-  "onboarding.compose.template": "Hello #Mastodon!",
+  "onboarding.follows.back": "Back",
+  "onboarding.follows.done": "Done",
   "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.",
-  "onboarding.follows.lead": "Your home feed is the primary way to experience Mastodon. The more people you follow, the more active and interesting it will be. To get you started, here are some suggestions:",
-  "onboarding.follows.title": "Personalize your home feed",
+  "onboarding.follows.search": "Search",
+  "onboarding.follows.title": "Follow people to get started",
   "onboarding.profile.discoverable": "Make my profile discoverable",
   "onboarding.profile.discoverable_hint": "When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.",
   "onboarding.profile.display_name": "Display name",
   "onboarding.profile.display_name_hint": "Your full name or your fun name…",
-  "onboarding.profile.lead": "You can always complete this later in the settings, where even more customization options are available.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "You can @mention other people or #hashtags…",
   "onboarding.profile.save_and_continue": "Save and continue",
   "onboarding.profile.title": "Profile setup",
   "onboarding.profile.upload_avatar": "Upload profile picture",
   "onboarding.profile.upload_header": "Upload profile header",
-  "onboarding.share.lead": "Let people know how they can find you on Mastodon!",
-  "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}",
-  "onboarding.share.next_steps": "Possible next steps:",
-  "onboarding.share.title": "Share your profile",
-  "onboarding.start.lead": "You're now part of Mastodon, a unique, decentralized social media platform where you—not an algorithm—curate your own experience. Let's get you started on this new social frontier:",
-  "onboarding.start.skip": "Don't need help getting started?",
-  "onboarding.start.title": "You've made it!",
-  "onboarding.steps.follow_people.body": "Following interesting people is what Mastodon is all about.",
-  "onboarding.steps.follow_people.title": "Personalize your home feed",
-  "onboarding.steps.publish_status.body": "Say hello to the world with text, photos, videos, or polls {emoji}",
-  "onboarding.steps.publish_status.title": "Make your first post",
-  "onboarding.steps.setup_profile.body": "Boost your interactions by having a comprehensive profile.",
-  "onboarding.steps.setup_profile.title": "Personalize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon",
-  "onboarding.steps.share_profile.title": "Share your Mastodon profile",
-  "onboarding.tips.2fa": "<strong>Did you know?</strong> You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Did you know?</strong> Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!",
-  "onboarding.tips.migration": "<strong>Did you know?</strong> If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!",
-  "onboarding.tips.verification": "<strong>Did you know?</strong> You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!",
   "password_confirmation.exceeds_maxlength": "Password confirmation exceeds the maximum password length",
   "password_confirmation.mismatching": "Password confirmation does not match",
   "picture_in_picture.restore": "Put it back",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 730c30176..d23783b21 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -89,10 +89,15 @@
   "announcement.announcement": "Anonco",
   "annual_report.summary.archetype.replier": "La plej societema",
   "annual_report.summary.followers.followers": "sekvantoj",
+  "annual_report.summary.highlighted_post.by_favourites": "plej ŝatata afiŝo",
+  "annual_report.summary.highlighted_post.by_reblogs": "plej diskonigita afiŝo",
   "annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj",
+  "annual_report.summary.highlighted_post.possessive": "de {name}",
   "annual_report.summary.most_used_app.most_used_app": "plej uzita apo",
+  "annual_report.summary.most_used_hashtag.most_used_hashtag": "plej uzata kradvorto",
   "annual_report.summary.most_used_hashtag.none": "Nenio",
   "annual_report.summary.new_posts.new_posts": "novaj afiŝoj",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Ni ne diros al Zamenhof.",
   "annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!",
   "attachments_list.unprocessed": "(neprilaborita)",
   "audio.hide": "Kaŝi aŭdion",
@@ -117,7 +122,7 @@
   "bundle_column_error.routing.body": "La celita paĝo ne troveblas. Ĉu vi certas, ke la retadreso (URL) en via retfoliumilo estas ĝusta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fermi",
-  "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
+  "bundle_modal_error.message": "Io misfunkciis dum ŝarĝo de ĉi tiu ekrano.",
   "bundle_modal_error.retry": "Provu denove",
   "closed_registrations.other_server_instructions": "Ĉar Mastodon estas malcentraliza, vi povas krei konton ĉe alia servilo kaj ankoraŭ komuniki kun ĉi tiu.",
   "closed_registrations_modal.description": "Krei konton ĉe {domain} aktuale ne eblas, tamen bonvole rimarku, ke vi ne bezonas konton specife ĉe {domain} por uzi Mastodon.",
@@ -128,13 +133,16 @@
   "column.blocks": "Blokitaj uzantoj",
   "column.bookmarks": "Legosignoj",
   "column.community": "Loka templinio",
+  "column.create_list": "Krei liston",
   "column.direct": "Privataj mencioj",
   "column.directory": "Foliumi la profilojn",
   "column.domain_blocks": "Blokitaj domajnoj",
+  "column.edit_list": "Redakti liston",
   "column.favourites": "Stelumoj",
   "column.firehose": "Rektaj fluoj",
   "column.follow_requests": "Petoj de sekvado",
   "column.home": "Hejmo",
+  "column.list_members": "Administri listanojn",
   "column.lists": "Listoj",
   "column.mutes": "Silentigitaj uzantoj",
   "column.notifications": "Sciigoj",
@@ -147,6 +155,7 @@
   "column_header.pin": "Fiksi",
   "column_header.show_settings": "Montri la agordojn",
   "column_header.unpin": "Malfiksi",
+  "column_search.cancel": "Nuligi",
   "column_subheading.settings": "Agordoj",
   "community.column_settings.local_only": "Nur loka",
   "community.column_settings.media_only": "Nur plurmedio",
@@ -220,10 +229,8 @@
   "disabled_account_banner.text": "Via konto {disabledAccount} estas nune malvalidigita.",
   "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.",
   "dismissable_banner.dismiss": "Eksigi",
-  "dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.",
-  "dismissable_banner.explore_statuses": "Jen afiŝoj en la socia reto kiuj populariĝis hodiaŭ. Novaj afiŝoj kun pli da diskonigoj kaj stelumoj aperas pli alte.",
-  "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.",
-  "dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.",
+  "dismissable_banner.explore_statuses": "Ĉi tiuj afiŝoj populariĝas sur la fediverso hodiaŭ. Pli novaj afiŝoj kun pli da diskonigoj kaj stemuloj estas rangigitaj pli alte.",
+  "dismissable_banner.explore_tags": "Ĉi tiuj kradvortoj populariĝas sur la fediverso hodiaŭ. Kradvortoj, kiuj estas uzataj de pli malsamaj homoj, estas rangigitaj pli alte.",
   "domain_block_modal.block": "Bloki servilon",
   "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe",
   "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.",
@@ -452,11 +459,31 @@
   "link_preview.author": "De {name}",
   "link_preview.more_from_author": "Pli de {name}",
   "link_preview.shares": "{count, plural, one {{counter} afiŝo} other {{counter} afiŝoj}}",
+  "lists.add_member": "Aldoni",
+  "lists.add_to_list": "Aldoni al la listo",
+  "lists.add_to_lists": "Aldoni {name} al la listo",
+  "lists.create": "Krei",
+  "lists.create_a_list_to_organize": "Krei novan liston por organizi vian Hejmpaĝon",
+  "lists.create_list": "Krei liston",
   "lists.delete": "Forigi la liston",
+  "lists.done": "Farita",
   "lists.edit": "Redakti la liston",
+  "lists.exclusive": "Kaŝi membrojn en Hejmpaĝo",
+  "lists.exclusive_hint": "Se iu estas en ĉi tiuj listo, kaŝu ilin en via hejmpaĝo por eviti vidi iliajn afiŝojn dufoje.",
+  "lists.find_users_to_add": "Trovi uzantojn por aldoni",
+  "lists.list_members": "Listoj de membroj",
+  "lists.list_members_count": "{count, plural,one {# membro} other {# membroj}}",
+  "lists.list_name": "Nomo de la listo",
+  "lists.new_list_name": "Nomo de nova listo",
+  "lists.no_lists_yet": "Ankoraŭ ne estas listoj.",
+  "lists.no_members_yet": "Ankoraŭ neniuj membroj.",
+  "lists.no_results_found": "Neniuj rezultoj trovitaj.",
+  "lists.remove_member": "Forigi",
   "lists.replies_policy.followed": "Iu sekvanta uzanto",
   "lists.replies_policy.list": "Membroj de la listo",
   "lists.replies_policy.none": "Neniu",
+  "lists.save": "Konservi",
+  "lists.search_placeholder": "Serĉi homojn, kiujn vi sekvas",
   "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}",
   "loading_indicator.label": "Ŝargado…",
   "media_gallery.hide": "Kaŝi",
@@ -612,44 +639,21 @@
   "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn",
   "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.",
   "notifications_permission_banner.title": "Neniam preterlasas iun ajn",
-  "onboarding.action.back": "Prenu min reen",
-  "onboarding.actions.back": "Prenu min reen",
-  "onboarding.actions.go_to_explore": "Konduku min al tendenco",
-  "onboarding.actions.go_to_home": "Konduku min al mia hejma fluo",
-  "onboarding.compose.template": "Saluton #Mastodon!",
+  "onboarding.follows.back": "Reen",
+  "onboarding.follows.done": "Farita",
   "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.",
-  "onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:",
-  "onboarding.follows.title": "Agordi vian hejman fluon",
+  "onboarding.follows.search": "Serĉi",
+  "onboarding.follows.title": "Sekvi homojn por komenci",
   "onboarding.profile.discoverable": "Trovebligi mian profilon",
   "onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.",
   "onboarding.profile.display_name": "Publika nomo",
   "onboarding.profile.display_name_hint": "Via plena nomo aŭ via kromnomo…",
-  "onboarding.profile.lead": "Vi ĉiam povas plenigi ĉi tion poste en la agordoj, kie eĉ pli da personecigagordoj estas disponeblaj.",
   "onboarding.profile.note": "Sinprezento",
   "onboarding.profile.note_hint": "Vi povas @mencii aliajn homojn aŭ #kradvortojn…",
   "onboarding.profile.save_and_continue": "Konservi kaj daŭrigi",
   "onboarding.profile.title": "Profila fikso",
   "onboarding.profile.upload_avatar": "Alŝuti profilbildon",
   "onboarding.profile.upload_header": "Alŝuti profilkapbildon",
-  "onboarding.share.lead": "Sciigi personojn pri kiel ili povas trovi vin ĉe Mastodon!",
-  "onboarding.share.message": "Mi estas {username} en #Mastodon! Sekvu min ĉe {url}",
-  "onboarding.share.next_steps": "Eblaj malantauaj paŝoj:",
-  "onboarding.share.title": "Disvastigi vian profilon",
-  "onboarding.start.lead": "Vi nun estas parto de Mastodon, unika, malcentralizita socia amaskomunikilara platformo, kie vi—ne algoritmo—zorgas vian propran sperton. Ni komencu vin sur ĉi tiu nova socia limo:",
-  "onboarding.start.skip": "Ĉu vi ne bezonas helpon por komenci?",
-  "onboarding.start.title": "Vi atingas ĝin!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Agordu vian hejman fluon",
-  "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}",
-  "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon",
-  "onboarding.steps.setup_profile.body": "Diskonigu viajn interagojn havante ampleksan profilon.",
-  "onboarding.steps.setup_profile.title": "Agordu vian profilon",
-  "onboarding.steps.share_profile.body": "Sciigu viajn amikojn kiel trovi vin sur Mastodon",
-  "onboarding.steps.share_profile.title": "Kunhavigu vian Mastodon-profilon",
-  "onboarding.tips.2fa": "<strong>Ĉu vi scias?</strong> Vi povas sekurigi vian konton per efektivigi dufaktora autentigo en via kontoagordoj.",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ĉu vi scias?</strong> Ĉar Mastodon estas sencentra, kelkaj profiloj kiujn vi trovi estas gastigitaj ĉe aliaj serviloj kiuj ne estas via.",
-  "onboarding.tips.migration": "<strong>Ĉu vi scias?</strong> Se vi sentas ke {domain} ne estas bona servilelekto por vi en la estonteco, vi povas translokiĝi al alia servilo de Mastodon sen malgajni viajn sekvantojn.",
-  "onboarding.tips.verification": "<strong>Ĉu vi sciis?</strong> Vi povas kontroli vian konton metante ligilon al via Mastodon-profilo en via propra retejo kaj aldonante la retejon al via profilo. Neniuj kotizoj aŭ dokumentoj necesaj!",
   "password_confirmation.exceeds_maxlength": "Pasvorto-konfirmo superas la maksimuman pasvortan longon",
   "password_confirmation.mismatching": "Pasvorto konfirmo ne kongruas",
   "picture_in_picture.restore": "Remetu ĝin",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 2dea704a7..38a776700 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "No se pudo encontrar la página solicitada. ¿Estás seguro que la dirección web es correcta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Cerrar",
-  "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
+  "bundle_modal_error.message": "Ha habido algún error mientras cargábamos esta pantalla.",
   "bundle_modal_error.retry": "Intentá de nuevo",
   "closed_registrations.other_server_instructions": "Ya que Mastodon es descentralizado, podés crearte una cuenta en otro servidor y todavía interactuar con éste.",
   "closed_registrations_modal.description": "Actualmente no es posible crearte una cuenta en {domain}. pero recordá que no necesitás tener una cuenta puntualmente dentro de {domain} para poder usar Mastodon.",
@@ -140,13 +140,16 @@
   "column.blocks": "Usuarios bloqueados",
   "column.bookmarks": "Marcadores",
   "column.community": "Línea temporal local",
+  "column.create_list": "Crear lista",
   "column.direct": "Menciones privadas",
   "column.directory": "Explorar perfiles",
   "column.domain_blocks": "Dominios bloqueados",
+  "column.edit_list": "Editar lista",
   "column.favourites": "Favoritos",
   "column.firehose": "Líneas temporales en vivo",
   "column.follow_requests": "Solicitudes de seguimiento",
   "column.home": "Principal",
+  "column.list_members": "Administrar miembros de la lista",
   "column.lists": "Listas",
   "column.mutes": "Usuarios silenciados",
   "column.notifications": "Notificaciones",
@@ -159,6 +162,7 @@
   "column_header.pin": "Fijar",
   "column_header.show_settings": "Mostrar configuración",
   "column_header.unpin": "Dejar de fijar",
+  "column_search.cancel": "Cancelar",
   "column_subheading.settings": "Configuración",
   "community.column_settings.local_only": "Sólo local",
   "community.column_settings.media_only": "Sólo medios",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada.",
   "dismissable_banner.community_timeline": "Estos son los mensajes públicos más recientes de cuentas alojadas en {domain}.",
   "dismissable_banner.dismiss": "Descartar",
-  "dismissable_banner.explore_links": "Estas son las noticias más compartidas en la web social, hoy mismo. Las noticias más recientes publicadas por diferentes cuentas obtienen más exposición.",
-  "dismissable_banner.explore_statuses": "Estos son los mensajes que están ganando popularidad en la web social, hoy mismo. Los mensajes más recientes con más adhesiones y marcados como favoritos obtienen más exposición.",
-  "dismissable_banner.explore_tags": "Estas son etiquetas que están ganando popularidad en la web social, hoy mismo. Las etiquetas que son usadas por diferentes cuentas obtienen más exposición.",
-  "dismissable_banner.public_timeline": "Estos son los mensajes públicos más recientes de cuentas en la web social que las personas en {domain} siguen.",
+  "dismissable_banner.explore_links": "Estas noticias son las más compartidas hoy en el fediverso. Las noticias más recientes publicadas por más personas diferentes se clasifican mejor.",
+  "dismissable_banner.explore_statuses": "Estas publicaciones del fediverso están ganando popularidad hoy. Las publicaciones más recientes, con más impulsos y favoritos, se clasifican mejor.",
+  "dismissable_banner.explore_tags": "Estas etiquetas están ganando popularidad hoy en el fediverso. Las etiquetas que son utilizados por más personas diferentes se puntúan más alto.",
+  "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de las personas del fediverso a las que sigue la gente de {domain}.",
   "domain_block_modal.block": "Bloquear servidor",
   "domain_block_modal.block_account_instead": "Bloquear @{name} en su lugar",
   "domain_block_modal.they_can_interact_with_old_posts": "Las cuentas de este servidor pueden interactuar con tus mensajes antiguos.",
@@ -359,6 +363,7 @@
   "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Inicio de Mastodon",
+  "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}",
   "hashtag.column_header.tag_mode.all": "y {additional}",
   "hashtag.column_header.tag_mode.any": "o {additional}",
   "hashtag.column_header.tag_mode.none": "sin {additional}",
@@ -464,11 +469,32 @@
   "link_preview.author": "Por {name}",
   "link_preview.more_from_author": "Más de {name}",
   "link_preview.shares": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}",
+  "lists.add_member": "Añadir",
+  "lists.add_to_list": "Añadir a la lista",
+  "lists.add_to_lists": "Añadir {name} a las listas",
+  "lists.create": "Crear",
+  "lists.create_a_list_to_organize": "Crea una nueva lista para organizar tu página de inicio",
+  "lists.create_list": "Crear una lista",
   "lists.delete": "Eliminar lista",
+  "lists.done": "Hecho",
   "lists.edit": "Editar lista",
+  "lists.exclusive": "Ocultar miembros en Inicio",
+  "lists.exclusive_hint": "Si alguien está en esta lista, escóndelo en tu página de inicio para evitar ver sus publicaciones dos veces.",
+  "lists.find_users_to_add": "Buscar usuarios para añadir",
+  "lists.list_members": "Miembros de la lista",
+  "lists.list_members_count": "{count, plural,one {# miembro} other {# miembros}}",
+  "lists.list_name": "Nombre de la lista",
+  "lists.new_list_name": "Nombre de la nueva lista",
+  "lists.no_lists_yet": "Aún no hay listas.",
+  "lists.no_members_yet": "Aún no hay miembros.",
+  "lists.no_results_found": "No se encontraron resultados.",
+  "lists.remove_member": "Eliminar",
   "lists.replies_policy.followed": "Cualquier cuenta seguida",
   "lists.replies_policy.list": "Miembros de la lista",
   "lists.replies_policy.none": "Nadie",
+  "lists.save": "Guardar",
+  "lists.search_placeholder": "Buscar gente a la que sigues",
+  "lists.show_replies_to": "Incluir las respuestas de los miembros de la lista a",
   "load_pending": "{count, plural, one {# elemento nuevo} other {# elementos nuevos}}",
   "loading_indicator.label": "Cargando…",
   "media_gallery.hide": "Ocultar",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
   "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
   "notifications_permission_banner.title": "No te pierdas nada",
-  "onboarding.action.back": "Llevame de regreso",
-  "onboarding.actions.back": "Llevame de regreso",
-  "onboarding.actions.go_to_explore": "Llevame a las tendencias",
-  "onboarding.actions.go_to_home": "Llevame a mi línea temporal principal",
-  "onboarding.compose.template": "¡Hola, #Mastodon!",
+  "onboarding.follows.back": "Atrás",
+  "onboarding.follows.done": "Hecho",
   "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Podés intentar usar la búsqueda o navegar por la página de exploración para encontrar cuentas a las que seguir, o intentarlo de nuevo más tarde.",
-  "onboarding.follows.lead": "Tu línea temporal de inicio es la forma principal de experimentar Mastodon. Cuanta más cuentas sigás, más activa e interesante será. Para empezar, acá tenés algunas sugerencias:",
-  "onboarding.follows.title": "Personalizá tu línea de tiempo principal",
+  "onboarding.follows.search": "Buscar",
+  "onboarding.follows.title": "Sigue personas para comenzar",
   "onboarding.profile.discoverable": "Hacer que mi perfil sea detectable",
   "onboarding.profile.discoverable_hint": "Cuando optás por ser detectable en Mastodon, tus mensajes pueden aparecer en los resultados de búsqueda y de tendencia, y tu perfil puede ser sugerido a personas con intereses similares a los tuyos.",
   "onboarding.profile.display_name": "Nombre para mostrar",
   "onboarding.profile.display_name_hint": "Tu nombre completo o tu pseudónimo…",
-  "onboarding.profile.lead": "Siempre podés completar esto más tarde en la configuración, donde hay disponibles más opciones de personalización.",
   "onboarding.profile.note": "Biografía",
   "onboarding.profile.note_hint": "Podés @mencionar otras cuentas o usar #etiquetas…",
   "onboarding.profile.save_and_continue": "Guardar y continuar",
   "onboarding.profile.title": "Configuración del perfil",
   "onboarding.profile.upload_avatar": "Subir avatar",
   "onboarding.profile.upload_header": "Subir cabecera",
-  "onboarding.share.lead": "¡Decile a la gente cómo te pueden encontrar en Mastodon!",
-  "onboarding.share.message": "¡En #Mastodon soy «{username}»! Podés seguirme desde {url}",
-  "onboarding.share.next_steps": "Posibles próximos pasos:",
-  "onboarding.share.title": "Compartí tu perfil",
-  "onboarding.start.lead": "Ahora sos parte de Mastodon, una plataforma única y descentralizada de redes sociales donde vos —no un algoritmo— personalizás tu propia experiencia. Vamos a introducirte en esta nueva frontera social:",
-  "onboarding.start.skip": "¿No necesitás ayuda para empezar?",
-  "onboarding.start.title": "¡Listo!",
-  "onboarding.steps.follow_people.body": "Seguir cuentas interesantes es de lo que trata Mastodon.",
-  "onboarding.steps.follow_people.title": "Personalizá tu línea de tiempo principal",
-  "onboarding.steps.publish_status.body": "Decili hola al mundo con textos, fotos, videos o encuestas {emoji}",
-  "onboarding.steps.publish_status.title": "Escribí tu primer mensaje",
-  "onboarding.steps.setup_profile.body": "Aumentá tus interacciones teniendo un perfil completo.",
-  "onboarding.steps.setup_profile.title": "Personalizá tu perfil",
-  "onboarding.steps.share_profile.body": "¡Hacé que tus amistades sepan cómo encontrarte en Mastodon!",
-  "onboarding.steps.share_profile.title": "Compartí tu perfil de Mastodon",
-  "onboarding.tips.2fa": "<strong>¿Lo sabías?</strong> Podés proteger su cuenta configurando la autenticación de dos factores en la configuración de tu cuenta. Funciona con cualquier aplicación TOTP de tu elección, ¡sin necesidad de número de teléfono!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>¿Lo sabías?</strong> Como Mastodon es una red social descentralizada, algunos perfiles que encuentres serán alojados en servidores diferentes del tuyo. ¡Y sin embargo podés interactuar con ellos! ¡El nombre de su servidor está en la segunda mitad de sus nombres de usuario!",
-  "onboarding.tips.migration": "<strong>¿Lo sabías?</strong> Si creés que {domain} no es una gran elección de servidor para vos en el futuro, podés mudarte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso podés alojar tu propio servidor!",
-  "onboarding.tips.verification": "<strong>¿Lo sabías?</strong> Podés verificar tu cuenta poniendo el enlace de tu perfil de Mastodon en tu propio sitio web y agregando la dirección web de tu sitio en tu perfil de Mastodon. ¡No hay necesidad de comisiones ni documentación!",
   "password_confirmation.exceeds_maxlength": "La confirmación de contraseña excede la longitud máxima de la contraseña",
   "password_confirmation.mismatching": "La confirmación de contraseña no coincide",
   "picture_in_picture.restore": "Restaurar",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index d86387341..d32586db0 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -88,22 +88,22 @@
   "alt_text_badge.title": "Texto alternativo",
   "announcement.announcement": "Anuncio",
   "annual_report.summary.archetype.booster": "El cazador de tendencias",
-  "annual_report.summary.archetype.lurker": "El acechador",
+  "annual_report.summary.archetype.lurker": "El merodeador",
   "annual_report.summary.archetype.oracle": "El oraculo",
   "annual_report.summary.archetype.pollster": "El encuestador",
   "annual_report.summary.archetype.replier": "La mariposa sociable",
   "annual_report.summary.followers.followers": "seguidores",
   "annual_report.summary.followers.total": "{count} en total",
-  "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
+  "annual_report.summary.here_it_is": "Este es el resumen de tu {year}:",
   "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos",
   "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
   "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
   "annual_report.summary.highlighted_post.possessive": "de {name}",
-  "annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
-  "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
+  "annual_report.summary.most_used_app.most_used_app": "aplicación más utilizada",
+  "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más utilizada",
   "annual_report.summary.most_used_hashtag.none": "Ninguna",
   "annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
-  "annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.text": "<topLabel>Eso te sitúa en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>",
   "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
   "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
   "attachments_list.unprocessed": "(sin procesar)",
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "No se pudo encontrar la página solicitada. ¿Estás seguro de que la URL en la barra de direcciones es correcta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Cerrar",
-  "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
+  "bundle_modal_error.message": "Algo ha fallado al cargar esta pantalla.",
   "bundle_modal_error.retry": "Inténtalo de nuevo",
   "closed_registrations.other_server_instructions": "Como Mastodon es descentralizado, puedes crear una cuenta en otro servidor y seguir interactuando con este.",
   "closed_registrations_modal.description": "La creación de una cuenta en {domain} no es posible actualmente, pero ten en cuenta que no necesitas una cuenta específicamente en {domain} para usar Mastodon.",
@@ -140,13 +140,16 @@
   "column.blocks": "Usuarios bloqueados",
   "column.bookmarks": "Marcadores",
   "column.community": "Línea de tiempo local",
+  "column.create_list": "Crear lista",
   "column.direct": "Menciones privadas",
   "column.directory": "Buscar perfiles",
   "column.domain_blocks": "Dominios ocultados",
+  "column.edit_list": "Editar lista",
   "column.favourites": "Favoritos",
   "column.firehose": "Cronologías",
   "column.follow_requests": "Solicitudes de seguimiento",
   "column.home": "Inicio",
+  "column.list_members": "Administrar miembros de la lista",
   "column.lists": "Listas",
   "column.mutes": "Usuarios silenciados",
   "column.notifications": "Notificaciones",
@@ -159,6 +162,7 @@
   "column_header.pin": "Fijar",
   "column_header.show_settings": "Mostrar ajustes",
   "column_header.unpin": "Desfijar",
+  "column_search.cancel": "Cancelar",
   "column_subheading.settings": "Ajustes",
   "community.column_settings.local_only": "Solo local",
   "community.column_settings.media_only": "Solo media",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada.",
   "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de las personas cuyas cuentas están alojadas en {domain}.",
   "dismissable_banner.dismiss": "Descartar",
-  "dismissable_banner.explore_links": "Estas noticias están siendo discutidas por personas en este y otros servidores de la red descentralizada en este momento.",
-  "dismissable_banner.explore_statuses": "Estas son las publicaciones que están en tendencia en la red ahora. Las publicaciones recientes con más impulsos y favoritos se muestran más arriba.",
-  "dismissable_banner.explore_tags": "Se trata de etiquetas que están ganando adeptos en las redes sociales hoy en día. Las etiquetas que son utilizadas por más personas diferentes se clasifican mejor.",
-  "dismissable_banner.public_timeline": "Estas son las publicaciones públicas más recientes de personas en la web social a las que sigue la gente en {domain}.",
+  "dismissable_banner.explore_links": "Estas noticias son las más compartidas hoy en el fediverso. Las noticias más recientes publicadas por más personas diferentes se clasifican mejor.",
+  "dismissable_banner.explore_statuses": "Estas publicaciones del fediverso están ganando popularidad hoy. Las publicaciones más recientes, con más impulsos y favoritos, se clasifican mejor.",
+  "dismissable_banner.explore_tags": "Estas etiquetas están ganando popularidad hoy en el fediverso. Las etiquetas que son utilizados por más personas diferentes se puntúan más alto.",
+  "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de las personas del fediverso a las que sigue la gente de {domain}.",
   "domain_block_modal.block": "Bloquear servidor",
   "domain_block_modal.block_account_instead": "Bloquear @{name} en su lugar",
   "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este servidor pueden interactuar con tus publicaciones antiguas.",
@@ -359,6 +363,7 @@
   "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Primeros pasos",
+  "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}",
   "hashtag.column_header.tag_mode.all": "y {additional}",
   "hashtag.column_header.tag_mode.any": "o {additional}",
   "hashtag.column_header.tag_mode.none": "sin {additional}",
@@ -464,11 +469,32 @@
   "link_preview.author": "Por {name}",
   "link_preview.more_from_author": "Más de {name}",
   "link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
+  "lists.add_member": "Agregar",
+  "lists.add_to_list": "Agregar a lista",
+  "lists.add_to_lists": "Agregar {name} a listas",
+  "lists.create": "Crear",
+  "lists.create_a_list_to_organize": "Crea una nueva lista para organizar tu página de inicio",
+  "lists.create_list": "Crear lista",
   "lists.delete": "Borrar lista",
+  "lists.done": "Hecho",
   "lists.edit": "Editar lista",
+  "lists.exclusive": "Ocultar miembros en Inicio",
+  "lists.exclusive_hint": "Si alguien aparece en esta lista, ocúltalo en tu página de inicio para evitar ver sus publicaciones dos veces.",
+  "lists.find_users_to_add": "Buscar usuarios para agregar",
+  "lists.list_members": "Miembros de la lista",
+  "lists.list_members_count": "{count, plural,one {# miembro} other {# miembros}}",
+  "lists.list_name": "Nombre de la lista",
+  "lists.new_list_name": "Nombre de la nueva lista",
+  "lists.no_lists_yet": "No hay listas todavía.",
+  "lists.no_members_yet": "No hay miembros todavía.",
+  "lists.no_results_found": "No se han encontrado resultados.",
+  "lists.remove_member": "Eliminar",
   "lists.replies_policy.followed": "Cualquier usuario seguido",
   "lists.replies_policy.list": "Miembros de la lista",
   "lists.replies_policy.none": "Nadie",
+  "lists.save": "Guardar",
+  "lists.search_placeholder": "Buscar personas a las que sigues",
+  "lists.show_replies_to": "Incluir respuestas de miembros de la lista a",
   "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
   "loading_indicator.label": "Cargando…",
   "media_gallery.hide": "Ocultar",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
   "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
   "notifications_permission_banner.title": "Nunca te pierdas nada",
-  "onboarding.action.back": "Llévame atrás",
-  "onboarding.actions.back": "Llévame atrás",
-  "onboarding.actions.go_to_explore": "Ver qué es tendencia",
-  "onboarding.actions.go_to_home": "Ir al inicio",
-  "onboarding.compose.template": "¡Hola #Mastodon!",
+  "onboarding.follows.back": "Volver",
+  "onboarding.follows.done": "Hecho",
   "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.",
-  "onboarding.follows.lead": "Tienes que personalizar tu inicio. Cuantas más personas sigas, más activo e interesante será. Estos perfiles pueden ser un buen punto de partida, ¡pero siempre puedes dejar de seguirlos más adelante!",
-  "onboarding.follows.title": "Popular en Mastodon",
+  "onboarding.follows.search": "Buscar",
+  "onboarding.follows.title": "Sigue personas para comenzar",
   "onboarding.profile.discoverable": "Make my profile discoverable",
   "onboarding.profile.discoverable_hint": "Cuando aceptas ser descubierto en Mastodon, tus publicaciones pueden aparecer en resultados de búsqueda y tendencias, y tu perfil puede ser sugerido a personas con intereses similares a los tuyos.",
   "onboarding.profile.display_name": "Nombre a mostrar",
   "onboarding.profile.display_name_hint": "Tu nombre completo o tu apodo…",
-  "onboarding.profile.lead": "Siempre puedes completar esto más tarde en los ajustes, donde hay aún más opciones de personalización disponibles.",
   "onboarding.profile.note": "Biografía",
   "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #etiquetas…",
   "onboarding.profile.save_and_continue": "Guardar y continuar",
   "onboarding.profile.title": "Configuración del perfil",
   "onboarding.profile.upload_avatar": "Subir foto de perfil",
   "onboarding.profile.upload_header": "Subir foto de cabecera",
-  "onboarding.share.lead": "¡Dile a la gente cómo te pueden encontrar en Mastodon!",
-  "onboarding.share.message": "¡Soy {username} en #Mastodon! Ven a seguirme en {url}",
-  "onboarding.share.next_steps": "Posibles siguientes pasos:",
-  "onboarding.share.title": "Comparte tu perfil",
-  "onboarding.start.lead": "Tu nueva cuenta de Mastodon está lista. Así es como puedes sacarle el máximo provecho:",
-  "onboarding.start.skip": "¿Quieres saltarte todos los pasos?",
-  "onboarding.start.title": "¡Lo has logrado!",
-  "onboarding.steps.follow_people.body": "Tienes que personalizar tu inicio. Vamos a llenarlo de gente interesante.",
-  "onboarding.steps.follow_people.title": "Sigue a {count, plural, one {una persona} other {# personas}}",
-  "onboarding.steps.publish_status.body": "Dile hola al mundo.",
-  "onboarding.steps.publish_status.title": "Escribe tu primera publicación",
-  "onboarding.steps.setup_profile.body": "Si rellenas tu perfil tendrás más posibilidades de que otros interactúen contigo.",
-  "onboarding.steps.setup_profile.title": "Personaliza tu perfil",
-  "onboarding.steps.share_profile.body": "Dile a tus amigos cómo encontrarte en Mastodon",
-  "onboarding.steps.share_profile.title": "Comparte tu perfil",
-  "onboarding.tips.2fa": "<strong>¿Sabías que?</strong> Puedes proteger tu cuenta configurando la autenticación de dos factores en los ajustes de su cuenta. Funciona con cualquier aplicación TOTP que elijas, ¡sin necesidad de número de teléfono!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>¿Sabías que?</strong> Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!",
-  "onboarding.tips.migration": "<strong>¿Sabías que?</strong> Si sientes que {domain} no es una gran elección de servidor para ti en el futuro, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!",
-  "onboarding.tips.verification": "<strong>¿Sabías que?</strong> Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en su propio sitio web y añadiendo el sitio web a su perfil. ¡Sin necesidad de comisiones ni documentos!",
   "password_confirmation.exceeds_maxlength": "La contraseña de confirmación excede la longitud máxima de la contraseña",
   "password_confirmation.mismatching": "La contraseña de confirmación no coincide",
   "picture_in_picture.restore": "Restaurar",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index bfb16e9fd..cb076540f 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "No se pudo encontrar la página solicitada. ¿Estás seguro de que la URL en la barra de direcciones es correcta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Cerrar",
-  "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
+  "bundle_modal_error.message": "Ha habido algún error mientras cargábamos esta pantalla.",
   "bundle_modal_error.retry": "Inténtalo de nuevo",
   "closed_registrations.other_server_instructions": "Como Mastodon es descentralizado, puedes crear una cuenta en otro servidor y seguir interactuando con este.",
   "closed_registrations_modal.description": "La creación de una cuenta en {domain} no es posible actualmente, pero ten en cuenta que no necesitas una cuenta específicamente en {domain} para usar Mastodon.",
@@ -140,13 +140,16 @@
   "column.blocks": "Usuarios bloqueados",
   "column.bookmarks": "Marcadores",
   "column.community": "Cronología local",
+  "column.create_list": "Crear lista",
   "column.direct": "Menciones privadas",
   "column.directory": "Buscar perfiles",
   "column.domain_blocks": "Dominios bloqueados",
+  "column.edit_list": "Editar lista",
   "column.favourites": "Favoritos",
   "column.firehose": "Cronologías",
   "column.follow_requests": "Solicitudes de seguimiento",
   "column.home": "Inicio",
+  "column.list_members": "Administrar miembros de la lista",
   "column.lists": "Listas",
   "column.mutes": "Usuarios silenciados",
   "column.notifications": "Notificaciones",
@@ -159,6 +162,7 @@
   "column_header.pin": "Fijar",
   "column_header.show_settings": "Mostrar ajustes",
   "column_header.unpin": "Dejar de fijar",
+  "column_search.cancel": "Cancelar",
   "column_subheading.settings": "Ajustes",
   "community.column_settings.local_only": "Solo local",
   "community.column_settings.media_only": "Solo multimedia",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada.",
   "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de personas cuyas cuentas están alojadas en {domain}.",
   "dismissable_banner.dismiss": "Descartar",
-  "dismissable_banner.explore_links": "Estas son las noticias que están siendo más compartidas hoy en la red. Nuevas noticias publicadas por diferentes personas se puntúan más alto.",
-  "dismissable_banner.explore_statuses": "Estas son las publicaciones que están ganando popularidad en la web social hoy. Las publicaciones recientes con más impulsos y favoritos obtienen más exposición.",
-  "dismissable_banner.explore_tags": "Estas son las etiquetas que están ganando popularidad hoy en la red. Etiquetas que se usan por personas diferentes se puntúan más alto.",
-  "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de personas en el Fediverso que siguen las personas de {domain}.",
+  "dismissable_banner.explore_links": "Estas noticias son las más compartidas hoy en el fediverso. Las noticias más recientes publicadas por más personas diferentes se clasifican mejor.",
+  "dismissable_banner.explore_statuses": "Estas publicaciones del fediverso están ganando popularidad hoy. Las publicaciones más recientes, con más impulsos y favoritos, se clasifican mejor.",
+  "dismissable_banner.explore_tags": "Estas etiquetas están ganando popularidad hoy en el fediverso. Las etiquetas que son utilizados por más personas diferentes se puntúan más alto.",
+  "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de las personas del fediverso a las que sigue la gente de {domain}.",
   "domain_block_modal.block": "Bloquear servidor",
   "domain_block_modal.block_account_instead": "Bloquear @{name} en su lugar",
   "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este servidor pueden interactuar con tus publicaciones antiguas.",
@@ -359,6 +363,7 @@
   "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Primeros pasos",
+  "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}",
   "hashtag.column_header.tag_mode.all": "y {additional}",
   "hashtag.column_header.tag_mode.any": "o {additional}",
   "hashtag.column_header.tag_mode.none": "sin {additional}",
@@ -401,7 +406,7 @@
   "ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de personas a las que no sigues?",
   "ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?",
   "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.",
-  "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu línea temporal de inicio.",
+  "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu página de inicio.",
   "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.",
   "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.",
   "interaction_modal.description.vote": "Con una cuenta en Mastodon, puedes votar en esta encuesta.",
@@ -464,11 +469,32 @@
   "link_preview.author": "Por {name}",
   "link_preview.more_from_author": "Más de {name}",
   "link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
+  "lists.add_member": "Añadir",
+  "lists.add_to_list": "Añadir a la lista",
+  "lists.add_to_lists": "Añadir {name} a las listas",
+  "lists.create": "Crear",
+  "lists.create_a_list_to_organize": "Crea una nueva lista para organizar tu página de inicio",
+  "lists.create_list": "Crear una lista",
   "lists.delete": "Borrar lista",
+  "lists.done": "Hecho",
   "lists.edit": "Editar lista",
+  "lists.exclusive": "Ocultar miembros en Inicio",
+  "lists.exclusive_hint": "Si alguien está en esta lista, escóndelo en tu página de inicio para evitar ver sus publicaciones dos veces.",
+  "lists.find_users_to_add": "Buscar usuarios para añadir",
+  "lists.list_members": "Miembros de la lista",
+  "lists.list_members_count": "{count, plural,one {# miembro} other {# miembros}}",
+  "lists.list_name": "Nombre de la lista",
+  "lists.new_list_name": "Nombre de la nueva lista",
+  "lists.no_lists_yet": "Aún no hay listas.",
+  "lists.no_members_yet": "Aún no hay miembros.",
+  "lists.no_results_found": "No se encontraron resultados.",
+  "lists.remove_member": "Eliminar",
   "lists.replies_policy.followed": "Cualquier usuario seguido",
   "lists.replies_policy.list": "Miembros de la lista",
   "lists.replies_policy.none": "Nadie",
+  "lists.save": "Guardar",
+  "lists.search_placeholder": "Buscar gente a la que sigues",
+  "lists.show_replies_to": "Incluir las respuestas de los miembros de la lista a",
   "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
   "loading_indicator.label": "Cargando…",
   "media_gallery.hide": "Ocultar",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
   "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
   "notifications_permission_banner.title": "Nunca te pierdas nada",
-  "onboarding.action.back": "Llévame atrás",
-  "onboarding.actions.back": "Llévame atrás",
-  "onboarding.actions.go_to_explore": "Llévame a tendencias",
-  "onboarding.actions.go_to_home": "Ir a mi inicio",
-  "onboarding.compose.template": "¡Hola #Mastodon!",
+  "onboarding.follows.back": "Atrás",
+  "onboarding.follows.done": "Hecho",
   "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar personas a las que seguir, o inténtalo de nuevo más tarde.",
-  "onboarding.follows.lead": "Tu línea de inicio es la forma principal de experimentar Mastodon. Cuanta más personas sigas, más activa e interesante será. Para empezar, aquí hay algunas sugerencias:",
-  "onboarding.follows.title": "Personaliza tu línea de inicio",
+  "onboarding.follows.search": "Buscar",
+  "onboarding.follows.title": "Sigue personas para comenzar",
   "onboarding.profile.discoverable": "Hacer que mi perfil aparezca en búsquedas",
   "onboarding.profile.discoverable_hint": "Cuando permites que tu perfil aparezca en búsquedas en Mastodon, tus publicaciones podrán aparecer en los resultados de búsqueda y en tendencias, y tu perfil podrá recomendarse a gente con intereses similares a los tuyos.",
   "onboarding.profile.display_name": "Nombre para mostrar",
   "onboarding.profile.display_name_hint": "Tu nombre completo o tu apodo…",
-  "onboarding.profile.lead": "Siempre puedes completar esto más tarde en los ajustes, donde hay aún más opciones de personalización disponibles.",
   "onboarding.profile.note": "Biografía",
   "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #etiquetas…",
   "onboarding.profile.save_and_continue": "Guardar y continuar",
   "onboarding.profile.title": "Configuración del perfil",
   "onboarding.profile.upload_avatar": "Subir foto de perfil",
   "onboarding.profile.upload_header": "Subir encabezado de perfil",
-  "onboarding.share.lead": "¡Cuéntale a otras personas cómo te pueden encontrar en Mastodon!",
-  "onboarding.share.message": "¡Soy {username} en #Mastodon! Ven a seguirme en {url}",
-  "onboarding.share.next_steps": "Posibles siguientes pasos:",
-  "onboarding.share.title": "Comparte tu perfil",
-  "onboarding.start.lead": "Ahora eres parte de Mastodon, una plataforma única y descentralizada de redes sociales donde tú —no un algoritmo— personalizarás tu propia experiencia. Vamos a introducirte en esta nueva frontera social:",
-  "onboarding.start.skip": "¿No necesitas ayuda para empezar?",
-  "onboarding.start.title": "¡Lo has logrado!",
-  "onboarding.steps.follow_people.body": "Seguir personas interesante es de lo que trata Mastodon.",
-  "onboarding.steps.follow_people.title": "Personaliza tu línea de inicio",
-  "onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}",
-  "onboarding.steps.publish_status.title": "Escribe tu primera publicación",
-  "onboarding.steps.setup_profile.body": "Aumenta tus interacciones con un perfil completo.",
-  "onboarding.steps.setup_profile.title": "Personaliza tu perfil",
-  "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!",
-  "onboarding.steps.share_profile.title": "Comparte tu perfil de Mastodon",
-  "onboarding.tips.2fa": "<strong>¿Sabías?</strong> Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de tu cuenta. Funciona con cualquier aplicación TOTP de tu elección, ¡no necesitas número de teléfono!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>¿Sabías que?</strong> Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!",
-  "onboarding.tips.migration": "<strong>¿Sabías?</strong> Si en el futuro piensas que {domain} no es el servidor adecuado para ti, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!",
-  "onboarding.tips.verification": "<strong>¿Sabías?</strong> Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en tu propio sitio web y añadiendo el sitio web a tu perfil. ¡No se necesitan comisiones ni documentos!",
   "password_confirmation.exceeds_maxlength": "La contraseña de confirmación excede la longitud máxima de la contraseña",
   "password_confirmation.mismatching": "La contraseña de confirmación no coincide",
   "picture_in_picture.restore": "Restaurar",
@@ -691,7 +694,7 @@
   "recommended": "Recomendado",
   "refresh": "Actualizar",
   "regeneration_indicator.label": "Cargando…",
-  "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
+  "regeneration_indicator.sublabel": "¡Tu página de inicio se está preparando!",
   "relative_time.days": "{number} d",
   "relative_time.full.days": "hace {number, plural, one {# día} other {# días}}",
   "relative_time.full.hours": "hace {number, plural, one {# hora} other {# horas}}",
@@ -745,7 +748,7 @@
   "report.thanks.title": "¿No quieres esto?",
   "report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.",
   "report.unfollow": "Dejar de seguir a @{name}",
-  "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para no ver sus publicaciones en tu muro de inicio, deja de seguirla.",
+  "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para dejar de ver sus publicaciones en tu página de inicio, deja de seguirla.",
   "report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)",
   "report_notification.categories.legal": "Legal",
   "report_notification.categories.legal_sentence": "contenido ilegal",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index 1db32efe0..3260baf4c 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -87,6 +87,25 @@
   "alert.unexpected.title": "Oih!",
   "alt_text_badge.title": "Alternatiivtekst",
   "announcement.announcement": "Teadaanne",
+  "annual_report.summary.archetype.booster": "Ägesisu küttija",
+  "annual_report.summary.archetype.lurker": "Hiilija",
+  "annual_report.summary.archetype.oracle": "Oraakel",
+  "annual_report.summary.archetype.pollster": "Küsitleja",
+  "annual_report.summary.archetype.replier": "Sotsiaalne liblikas",
+  "annual_report.summary.followers.followers": "jälgijad",
+  "annual_report.summary.followers.total": "{count} kokku",
+  "annual_report.summary.here_it_is": "Siin on sinu {year} ülevaatlikult:",
+  "annual_report.summary.highlighted_post.by_favourites": "enim lemmikuks märgitud postitus",
+  "annual_report.summary.highlighted_post.by_reblogs": "enim jagatud postitus",
+  "annual_report.summary.highlighted_post.by_replies": "kõige vastatum postitus",
+  "annual_report.summary.highlighted_post.possessive": "omanik {name}",
+  "annual_report.summary.most_used_app.most_used_app": "enim kasutatud äpp",
+  "annual_report.summary.most_used_hashtag.most_used_hashtag": "enim kasutatud silt",
+  "annual_report.summary.most_used_hashtag.none": "Pole",
+  "annual_report.summary.new_posts.new_posts": "uus postitus",
+  "annual_report.summary.percentile.text": "<topLabel>See paigutab su top </topLabel><percentage></percentage><bottomLabel> Mastodoni kasutajatest.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Vägev.",
+  "annual_report.summary.thanks": "Tänud olemast osa Mastodonist!",
   "attachments_list.unprocessed": "(töötlemata)",
   "audio.hide": "Peida audio",
   "block_modal.remote_users_caveat": "Serverile {domain} edastatakse palve otsust järgida. Ometi pole see tagatud, kuna mõned serverid võivad blokeeringuid käsitleda omal moel. Avalikud postitused võivad tuvastamata kasutajatele endiselt näha olla.",
@@ -110,7 +129,7 @@
   "bundle_column_error.routing.body": "Päritud lehte ei leitud. Kas URL on aadressiribal õige?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Sulge",
-  "bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.",
+  "bundle_modal_error.message": "Selle ekraanitäie laadimisel läks midagi valesti.",
   "bundle_modal_error.retry": "Proovi uuesti",
   "closed_registrations.other_server_instructions": "Kuna Mastodon on detsentraliseeritud, võib konto teha teise serverisse ja sellegipoolest siinse kontoga suhelda.",
   "closed_registrations_modal.description": "Praegu ei ole võimalik teha {domain} peale kontot, aga pea meeles, et sul ei pea olema just {domain} konto, et Mastodoni kasutada.",
@@ -121,13 +140,16 @@
   "column.blocks": "Blokeeritud kasutajad",
   "column.bookmarks": "Järjehoidjad",
   "column.community": "Kohalik ajajoon",
+  "column.create_list": "Loo loend",
   "column.direct": "Privaatsed mainimised",
   "column.directory": "Sirvi profiile",
   "column.domain_blocks": "Peidetud domeenid",
+  "column.edit_list": "Muuda loendit",
   "column.favourites": "Lemmikud",
   "column.firehose": "Laiv lõimed",
   "column.follow_requests": "Jälgimistaotlused",
   "column.home": "Kodu",
+  "column.list_members": "Halda loendi liikmeid",
   "column.lists": "Nimekirjad",
   "column.mutes": "Vaigistatud kasutajad",
   "column.notifications": "Teated",
@@ -140,6 +162,7 @@
   "column_header.pin": "Kinnita",
   "column_header.show_settings": "Näita sätteid",
   "column_header.unpin": "Eemalda kinnitus",
+  "column_search.cancel": "Tühista",
   "column_subheading.settings": "Sätted",
   "community.column_settings.local_only": "Ainult kohalik",
   "community.column_settings.media_only": "Ainult meedia",
@@ -213,10 +236,10 @@
   "disabled_account_banner.text": "Su konto {disabledAccount} on hetkel keelatud.",
   "dismissable_banner.community_timeline": "Need on kõige viimased avalikud postitused inimestelt, kelle kontosid majutab {domain}.",
   "dismissable_banner.dismiss": "Sulge",
-  "dismissable_banner.explore_links": "Need on uudised, millest inimesed siin ja teistes serverites üle detsentraliseeritud võrgu praegu räägivad.",
-  "dismissable_banner.explore_statuses": "Need postitused üle sotsiaalse võrgu koguvad praegu tähelepanu. Uued postitused, millel on rohkem jagamisi ja lemmikuks märkimisi, on kõrgemal kohal.",
-  "dismissable_banner.explore_tags": "Need sildid siit ja teistes serveritest detsentraliseeritud võrgus koguvad tähelepanu just praegu selles serveris.",
-  "dismissable_banner.public_timeline": "Need on kõige uuemad avalikud postitused inimestelt sotsiaalvõrgustikus, mida {domain} inimesed jälgivad.",
+  "dismissable_banner.explore_links": "Neid uudislugusid jagatakse praegu fediversiumis kõige rohkem. mitme erineva kasutaja postitatud postitused on paigutatud kõrgemale.",
+  "dismissable_banner.explore_statuses": "Need postitused üle kogu fediversiumi koguvad praegu tähelepanu. Uuemad postitused, mida on rohkem jagatud ja lemmikuks märgitud, on paigutatud kõrgemale.",
+  "dismissable_banner.explore_tags": "Need sildid koguvad praegu fediversiumis tähelepanu. Sildid, mida kasutavad rohkemad inimesed, on paigutatud kõrgemale.",
+  "dismissable_banner.public_timeline": "Need on värskeimad avalikud postitused inimestelt fediversiumis, mida domeeni {domain} inimesed jälgivad.",
   "domain_block_modal.block": "Blokeeri server",
   "domain_block_modal.block_account_instead": "Selle asemel blokeeri @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Inimesed sellest serverist saavad interakteeruda sinu vanade postitustega.",
@@ -324,7 +347,7 @@
   "follow_suggestions.hints.most_interactions": "See kasutajaprofiil on viimasel ajal {domain} saanud palju tähelepanu.",
   "follow_suggestions.hints.similar_to_recently_followed": "See kasutajaprofiil sarnaneb neile, mida oled hiljuti jälgima asunud.",
   "follow_suggestions.personalized_suggestion": "Isikupärastatud soovitus",
-  "follow_suggestions.popular_suggestion": "Popuplaarne soovitus",
+  "follow_suggestions.popular_suggestion": "Populaarne soovitus",
   "follow_suggestions.popular_suggestion_longer": "Populaarne kohas {domain}",
   "follow_suggestions.similar_to_recently_followed_longer": "Sarnane profiilile, mida hiljuti jälgima hakkasid",
   "follow_suggestions.view_all": "Vaata kõiki",
@@ -340,6 +363,7 @@
   "footer.status": "Olek",
   "generic.saved": "Salvestatud",
   "getting_started.heading": "Alustamine",
+  "hashtag.admin_moderation": "Ava modereerimisliides #{name} jaoks",
   "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}",
@@ -445,6 +469,8 @@
   "link_preview.author": "{name} poolt",
   "link_preview.more_from_author": "Veel kasutajalt {name}",
   "link_preview.shares": "{count, plural, one {{counter} postitus} other {{counter} postitust}}",
+  "lists.add_member": "Lisa",
+  "lists.add_to_list": "Lisa loendisse",
   "lists.delete": "Kustuta nimekiri",
   "lists.edit": "Muuda nimekirja",
   "lists.replies_policy.followed": "Igalt jälgitud kasutajalt",
@@ -604,44 +630,17 @@
   "notifications_permission_banner.enable": "Luba töölaua märguanded",
   "notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.",
   "notifications_permission_banner.title": "Ära jää millestki ilma",
-  "onboarding.action.back": "Võta mind tagasi",
-  "onboarding.actions.back": "Võta mind tagasi",
-  "onboarding.actions.go_to_explore": "Vaata, mis on trendikas",
-  "onboarding.actions.go_to_home": "Mine oma koduvoogu",
-  "onboarding.compose.template": "Tere, #Mastodon!",
   "onboarding.follows.empty": "Kahjuks ei saa hetkel tulemusi näidata. Proovi kasutada otsingut või lehitse uurimise lehte, et leida inimesi, keda jälgida, või proovi hiljem uuesti.",
-  "onboarding.follows.lead": "Haldad ise oma koduvoogu. Mida rohkemaid inimesi jälgid, seda aktiivsem ja huvitavam see on. Need profiilid võiksid olla head alustamiskohad — saad nende jälgimise alati lõpetada!",
-  "onboarding.follows.title": "Isikupärasta oma koduvoogu",
   "onboarding.profile.discoverable": "Muuda mu profiil avastatavaks",
   "onboarding.profile.discoverable_hint": "Kui nõustud enda avastamisega Mastodonis, võivad sinu postitused ilmuda otsingutulemustes ja trendides ning sinu profiili võidakse soovitada sinuga sarnaste huvidega inimestele.",
   "onboarding.profile.display_name": "Näidatav nimi",
   "onboarding.profile.display_name_hint": "Su täisnimi või naljanimi…",
-  "onboarding.profile.lead": "Saad selle alati hiljem seadetes lõpuni viia, kus on saadaval veel rohkem kohandamisvalikuid.",
   "onboarding.profile.note": "Elulugu",
   "onboarding.profile.note_hint": "Saad @mainida teisi kasutajaid või #sildistada…",
   "onboarding.profile.save_and_continue": "Salvesta ja jätka",
   "onboarding.profile.title": "Profiili seadistamine",
   "onboarding.profile.upload_avatar": "Laadi üles profiilipilt",
   "onboarding.profile.upload_header": "Laadi üles profiili päis",
-  "onboarding.share.lead": "Anna inimestele teada, kuidas sind Mastodonist üles leida!",
-  "onboarding.share.message": "Ma olen #Mastodon võrgustikus {username}! tule ja jälgi mind aadressil {url}",
-  "onboarding.share.next_steps": "Võimalikud järgmised sammud:",
-  "onboarding.share.title": "Jaga oma profiili",
-  "onboarding.start.lead": "Su uus Mastodoni konto on valmis kasutamiseks. Siin info, kuidas sellest maksimum võtta:",
-  "onboarding.start.skip": "Soovid kohe edasi hüpata?",
-  "onboarding.start.title": "Said valmis!",
-  "onboarding.steps.follow_people.body": "Haldad oma koduvoogu. Täida see huvitavate inimestega.",
-  "onboarding.steps.follow_people.title": "Isikupärasta oma koduvoogu",
-  "onboarding.steps.publish_status.body": "Ütle maailmale tere.",
-  "onboarding.steps.publish_status.title": "Tee oma esimene postitus",
-  "onboarding.steps.setup_profile.body": "Täidetud profiili korral suhtlevad teised sinuga tõenäolisemalt.",
-  "onboarding.steps.setup_profile.title": "Isikupärasta oma profiili",
-  "onboarding.steps.share_profile.body": "Anna sõpradele teada, kuidas sind Mastodonist leida!",
-  "onboarding.steps.share_profile.title": "Jaga oma profiili",
-  "onboarding.tips.2fa": "<strong>Kas sa teadsid?</strong> Saad oma kontot muuta turvalisemaks valides konto seadetes kaheastmelise autoriseerimise. See töötab mistahes sinu valitud TOTP-äpiga, telefoninumbrit pole vaja!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Kas teadsid?</strong> Kuna Mastodon on detsentraliseeritud, kohtad profiile, mis paiknevad teises serveris kui sinu oma. Kuid ikka saad sa nendega ladusalt suhelda! Nende server on nende kasutajanime teises pooles!",
-  "onboarding.tips.migration": "<strong>Kas sa teadsid?</strong> Kui tunned, et {domain} ei ole tuleviku jaoks hea serveri valik, saad kolida teise Mastodoni serverisse, ilma oma jälgijaid kaotamata. Saad isegi käivitada oma serveri!",
-  "onboarding.tips.verification": "<strong>Kas sa teadsid?</strong> Saad verifitseerida oma Mastodoni konto pannes oma veebilehele tagasilingi Mastodoni profiilile ja lisades profiilile lingi oma veebilehele. Dokumente ega raha pole vaja!",
   "password_confirmation.exceeds_maxlength": "Salasõnakinnitus on pikem kui salasõna maksimumpikkus",
   "password_confirmation.mismatching": "Salasõnakinnitus ei sobi kokku",
   "picture_in_picture.restore": "Pane tagasi",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index c77ca93f9..351ad59f1 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "Eskatutako orria ezin izan da aurkitu. Ziur helbide-barrako URLa zuzena dela?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Itxi",
-  "bundle_modal_error.message": "Zerbait okerra gertatu da osagai hau kargatzean.",
   "bundle_modal_error.retry": "Saiatu berriro",
   "closed_registrations.other_server_instructions": "Mastodon deszentralizatua denez, beste kontu bat sortu dezakezu beste zerbitzari batean eta honekin komunikatu.",
   "closed_registrations_modal.description": "Une honetan ezin da konturik sortu {domain} zerbitzarian, baina kontuan izan Mastodon erabiltzeko ez duzula zertan konturik izan zehazki {domain} zerbitzarian.",
@@ -211,10 +210,6 @@
   "disabled_account_banner.text": "Zure {disabledAccount} kontua desgaituta dago une honetan.",
   "dismissable_banner.community_timeline": "Hauek dira {domain} zerbitzarian ostatatutako kontuen bidalketa publiko berrienak.",
   "dismissable_banner.dismiss": "Baztertu",
-  "dismissable_banner.explore_links": "Albiste hauei buruz hitz egiten ari da jendea orain zerbitzari honetan eta sare deszentralizatuko besteetan.",
-  "dismissable_banner.explore_statuses": "Hauek dira gaur egun lekua hartzen ari diren sare sozial osoaren argitalpenak. Bultzada eta gogoko gehien dituzten argitalpen berrienek sailkapen altuagoa dute.",
-  "dismissable_banner.explore_tags": "Traola hauek daude bogan orain zerbitzari honetan eta sare deszentralizatuko besteetan.",
-  "dismissable_banner.public_timeline": "Hauek dira {domain}-(e)ko jendeak web sozialean jarraitzen dituen jendearen azkeneko argitalpen publikoak.",
   "domain_block_modal.block": "Blokeatu zerbitzaria",
   "domain_block_modal.block_account_instead": "Blokeatu @{name} bestela",
   "domain_block_modal.they_can_interact_with_old_posts": "Zerbitzari honetako jendea zure argitalpen zaharrekin elkarreragin dezake.",
@@ -588,44 +583,17 @@
   "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak",
   "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.",
   "notifications_permission_banner.title": "Ez galdu ezer inoiz",
-  "onboarding.action.back": "Egin atzera",
-  "onboarding.actions.back": "Egin atzera",
-  "onboarding.actions.go_to_explore": "Ikusi zer dagoen pil-pilean",
-  "onboarding.actions.go_to_home": "Joan hasierara",
-  "onboarding.compose.template": "Kaixo #Mastodon!",
   "onboarding.follows.empty": "Zoritxarrez, ezin da emaitzik erakutsi orain. Bilaketa erabil dezakezu edo Arakatu orrian jendea bilatu jarraitzeko, edo saiatu geroago.",
-  "onboarding.follows.lead": "Hasierako orria zuk pertsonalizatzen duzu. Gero eta jende gehiagori jarraitu, orduan eta aktibo eta interesgarriago izango da. Profil hauek egokiak izan daitezke hasteko, beti ere, geroago jarraitzeari utz diezazkiekezu!",
-  "onboarding.follows.title": "Mastodonen pil-pilean",
   "onboarding.profile.discoverable": "Profila aurkitzeko moduan jarri",
   "onboarding.profile.discoverable_hint": "Mastodon zure profila aurkitzeko moduan duzunean, zure mezuak bilaketa-emaitzetan eta jarraipenetan ager daitezke, eta zure profila antzeko interesa duen jendeari iradoki ahal zaio.",
   "onboarding.profile.display_name": "Bistaratzeko izena",
   "onboarding.profile.display_name_hint": "Zure izena edo ezizena…",
-  "onboarding.profile.lead": "Geroagoago bete daiteke konfigurazioan, non pertsonalizatzeko aukera gehiago dauden.",
   "onboarding.profile.note": "Biografia",
   "onboarding.profile.note_hint": "Beste pertsona batzuk @aipa ditzakezu edo #traolak erabili…",
   "onboarding.profile.save_and_continue": "Gorde eta jarraitu",
   "onboarding.profile.title": "Profilaren konfigurazioa",
   "onboarding.profile.upload_avatar": "Igo profilaren irudia",
   "onboarding.profile.upload_header": "Igo profilaren goiburua",
-  "onboarding.share.lead": "Esan jendeari nola aurki zaitzaketen Mastodonen!",
-  "onboarding.share.message": "{username} naiz #Mastodon-en! Jarrai nazazu hemen: {url}",
-  "onboarding.share.next_steps": "Hurrengo urrats posibleak:",
-  "onboarding.share.title": "Partekatu zure profila",
-  "onboarding.start.lead": "Mastodon-en parte zara orain, bakarra eta deszentralizatua den sare sozialaren plataforma, non zuk, eta ez algoritmo batek, zeure esperientzia pertsonaliza dezakezun. Igaro ezazu muga soziala:",
-  "onboarding.start.skip": "Urrats guztiak saltatu nahi dituzu?",
-  "onboarding.start.title": "Lortu duzu!",
-  "onboarding.steps.follow_people.body": "Zure jarioa zuk pertsonalizatzen duzu. Bete dezagun jende interesgarriaz.",
-  "onboarding.steps.follow_people.title": "Jarraitu {count, plural, one {pertsona bat} other {# pertsona}}",
-  "onboarding.steps.publish_status.body": "Agurtu munduari.",
-  "onboarding.steps.publish_status.title": "Sortu zure lehen bidalketa",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Bazenekien?</strong> Zure kontua babes dezakezu, bi faktoreko autentifikazioa zure kontuko ezarpenetan ezarriaz. Edozein TOTP aplikaziorekin dabil, ez da telefono-zenbakirik behar!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Badakizu?</strong> Mastodon deszentralizatua denez, beste zerbitzarietako profilak topatuko dituzu. Eta, hala ere, arazorik gabe jardun dezakezu haiekin! Haien zerbitzaria erabiltzaile-izenaren bigarren erdian dago!",
-  "onboarding.tips.migration": "<strong>Bazenekien?</strong> Uste baduzu {domain} ez dela aukera on bat zuretzako etorkizunari begira, beste Mastodon zerbitzari batera alda zaitezke, zure jarraitzaileak galdu gabe. Zure zerbitzaria propioa ere ostata dezakezu!",
-  "onboarding.tips.verification": "<strong>Bazenekien?</strong> Zure kontua egiazta dezakezu zure webgunean zure Mastodon-go profilaren esteka jarriz, eta profilean webgunea gehituz. Ordainketa edo dokumenturik gabe!",
   "password_confirmation.exceeds_maxlength": "Pasahitzaren berrespenak pasahitzaren gehienezko luzera gainditzen du",
   "password_confirmation.mismatching": "Pasahitzaren berrespena ez dator bat",
   "picture_in_picture.restore": "Leheneratu",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 608c1321b..469d42a00 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -87,6 +87,7 @@
   "alert.unexpected.title": "ای وای!",
   "alt_text_badge.title": "متن جایگزین",
   "announcement.announcement": "اعلامیه",
+  "annual_report.summary.followers.followers": "دنبال کننده",
   "attachments_list.unprocessed": "(پردازش نشده)",
   "audio.hide": "نهفتن صدا",
   "block_modal.remote_users_caveat": "ما از کارساز {domain} خواهیم خواست که به تصمیم شما احترام بگذارد. با این حال، تضمینی برای رعایت آن وجود ندارد زیرا برخی کارسازها ممکن است بلوک‌ها را به‌طور متفاوتی مدیریت کنند. فرسته‌های عمومی ممکن است همچنان برای کاربران که وارد نشده قابل مشاهده باشند.",
@@ -110,7 +111,6 @@
   "bundle_column_error.routing.body": "صفحهٔ درخواستی پیدا نشد. مطمئنید که نشانی را درست وارد کرده‌اید؟",
   "bundle_column_error.routing.title": "۴۰۴",
   "bundle_modal_error.close": "بستن",
-  "bundle_modal_error.message": "هنگام بار کردن این مولفه، اشتباهی رخ داد.",
   "bundle_modal_error.retry": "تلاش دوباره",
   "closed_registrations.other_server_instructions": "از آن‌جا که ماستودون نامتمرکز است، می‌توانید حسابی روی کارسازی دیگر ساخته و همچنان با این‌یکی در تعامل باشید.",
   "closed_registrations_modal.description": "هم‌اکنون امکان ساخت حساب روی {domain} وجود ندارد؛ ولی لطفاً به خاطر داشته باشید که برای استفاده از ماستودون، نیازی به داشتن حساب روی {domain} نیست.",
@@ -140,6 +140,7 @@
   "column_header.pin": "سنجاق کردن",
   "column_header.show_settings": "نمایش تنظیمات",
   "column_header.unpin": "برداشتن سنجاق",
+  "column_search.cancel": "لغو",
   "column_subheading.settings": "تنظیمات",
   "community.column_settings.local_only": "فقط محلی",
   "community.column_settings.media_only": "فقط رسانه",
@@ -212,10 +213,6 @@
   "disabled_account_banner.text": "حسابتان {disabledAccount} اکنون از کار افتاده.",
   "dismissable_banner.community_timeline": "این‌ها جدیدترین فرسته‌های عمومی از افرادیند که حساب‌هایشان به دست {domain} میزبانی می‌شود.",
   "dismissable_banner.dismiss": "دور انداختن",
-  "dismissable_banner.explore_links": "هم‌اکنون افراد روی این کارساز و دیگر کارسازهای شبکهٔ نامتمرکز در مورد این داستان‌های خبری صحبت می‌کنند.",
-  "dismissable_banner.explore_statuses": "هم‌اکنون این فرسته‌ها از این کارساز و دیگر کارسازهای شبکهٔ نامتمرکز داغ شده‌اند.",
-  "dismissable_banner.explore_tags": "هم‌اکنون این برچسب‌ها بین افراد این کارساز و دیگر کارسازهای شبکهٔ نامتمرکز داغ شده‌اند.",
-  "dismissable_banner.public_timeline": "این‌ها جدیدترین فرسته‌های عمومی از افرادی روی وب اجتماعیند که اعضای {domain} پی می‌گیرندشان.",
   "domain_block_modal.block": "انسداد کارساز",
   "domain_block_modal.block_account_instead": "انسداد @{name} به جایش",
   "domain_block_modal.they_can_interact_with_old_posts": "افزارد روی این کراساز می‌توانند با فرسته‌های قدیمیتان تعامل داشته باشند.",
@@ -438,9 +435,11 @@
   "link_preview.shares": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}",
   "lists.delete": "حذف سیاهه",
   "lists.edit": "ویرایش سیاهه",
+  "lists.remove_member": "حذف",
   "lists.replies_policy.followed": "هر کاربر پی‌گرفته",
   "lists.replies_policy.list": "اعضای سیاهه",
   "lists.replies_policy.none": "هیچ کدام",
+  "lists.save": "ذخیره",
   "load_pending": "{count, plural, one {# مورد جدید} other {# مورد جدید}}",
   "loading_indicator.label": "در حال بارگذاری…",
   "media_gallery.hide": "نهفتن",
@@ -584,44 +583,21 @@
   "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار",
   "notifications_permission_banner.how_to_control": "برای دریافت آگاهی‌ها هنگام باز نبودن ماستودون، آگاهی‌های میزکار را به کار بیندازید. پس از به کار افتادنشان می‌توانید گونه‌های دقیق برهم‌کنش‌هایی که آگاهی‌های میزکار تولید می‌کنند را از {icon} بالا واپایید.",
   "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید",
-  "onboarding.action.back": "برم گردان",
-  "onboarding.actions.back": "برم گردان",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "سلام #ماستودون!",
+  "onboarding.follows.back": "بازگشت",
+  "onboarding.follows.done": "انجام شد",
   "onboarding.follows.empty": "متأسفانه هم‌اکنون نتیجه‌ای قابل نمایش نیست. می‌توانید استفاده از جست‌وجو یا مرور صفحهٔ کاوش را برای یافتن افرادی برای پی‌گیری آزموده یا دوباره تلاش کنید.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
+  "onboarding.follows.search": "جست‌وجو",
+  "onboarding.follows.title": "پی گرفتن افرادی برای آغاز",
   "onboarding.profile.discoverable": "نمایه خود را قابل نمایش کنید",
   "onboarding.profile.discoverable_hint": "خواسته‌اید روی ماستودون کشف شوید. ممکن است فرسته‌هایتان در نتیحهٔ جست‌وجوها و فرسته‌های داغ ظاهر شده و نمایه‌تان به افرادی با علایق مشابهتان پیشنهاد شود.",
   "onboarding.profile.display_name": "نام نمایشی",
   "onboarding.profile.display_name_hint": "نام کامل یا نام باحالتان…",
-  "onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌های شخصی سازی بیش‌تری نیز دارد کامل کنید.",
   "onboarding.profile.note": "درباره شما",
   "onboarding.profile.note_hint": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…",
   "onboarding.profile.save_and_continue": "ذخیره کن و ادامه بده",
   "onboarding.profile.title": "تنظیم نمایه",
   "onboarding.profile.upload_avatar": "بازگذاری تصویر نمایه",
   "onboarding.profile.upload_header": "بارگذاری تصویر سردر نمایه",
-  "onboarding.share.lead": "بگذارید افراد بدانند چگونه می‌توانند در ماستادون بیابندتان!",
-  "onboarding.share.message": "من {username} روی #ماستودون هستم! مرا در {url} پی‌بگیرید",
-  "onboarding.share.next_steps": "گام‌های ممکن بعدی:",
-  "onboarding.share.title": "هم‌رسانی نمایه‌تان",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "انجامش دادید!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "نخستین فرسته‌تان را بنویسید",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>آیا می‌دانستید؟</strong> می‌توانید با پریایی هویت‌سنجی دو عاملی در تنظیمات حساب، حسابتان را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه کار کرده و نیازی به شماره تلفن ندارد!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>آیا می‌دانستید؟</strong> از آن‌جا که ماستودون نامتمرکز است، برخی نمایه‌ها که به آن‌ها برمی‌خورید روی کارسازهایی متفاوت از شما میزبانی می‌شوند و باز هم می‌توانید بدون مشکل با آن‌ها تعامل داشته باشید! کارسازشان در نیمه دوم نام کاربریشان است!",
-  "onboarding.tips.migration": "<strong>آیا می‌دانستید؟</strong> اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به کارساز ماستودون دیگری مهاجرت کنید. حتا می‌توانید کارساز خودتان را میزبانی کنید!",
-  "onboarding.tips.verification": "<strong>آیا می‌دانستید؟</strong> می‌توانید حسابتان را با گذاشتن پیوندی به نمایهٔ ماستودونتان روی پایگاه وب خود و افزودن پایگاه وبتان به نمایه‌تان تأیید کنید. بدون نیاز به هیچ کارمزد یا سندی!",
   "password_confirmation.exceeds_maxlength": "تأییدیه گذرواژه از حداکثر طول گذرواژه بیشتر است",
   "password_confirmation.mismatching": "تایید گذرواژه با گذرواژه مطابقت ندارد",
   "picture_in_picture.restore": "برگرداندن",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index a987c4bad..5ddc672f5 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -12,7 +12,7 @@
   "about.powered_by": "Hajautetun sosiaalisen median tarjoaa {mastodon}",
   "about.rules": "Palvelimen säännöt",
   "account.account_note_header": "Henkilökohtainen muistiinpano",
-  "account.add_or_remove_from_list": "Lisää tai poista listoilta",
+  "account.add_or_remove_from_list": "Lisää tai poista listoista",
   "account.badges.bot": "Botti",
   "account.badges.group": "Ryhmä",
   "account.block": "Estä @{name}",
@@ -128,7 +128,7 @@
   "bundle_column_error.routing.body": "Pyydettyä sivua ei löytynyt. Oletko varma, että osoitepalkin URL-osoite on oikein?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Sulje",
-  "bundle_modal_error.message": "Jotain meni pieleen komponenttia ladattaessa.",
+  "bundle_modal_error.message": "Jotain meni pieleen tätä näyttöä ladattaessa.",
   "bundle_modal_error.retry": "Yritä uudelleen",
   "closed_registrations.other_server_instructions": "Koska Mastodon on hajautettu, voit luoda tilin toiselle palvelimelle ja olla silti vuorovaikutuksessa tämän kanssa.",
   "closed_registrations_modal.description": "Tilin luonti palvelimelle {domain} ei tällä hetkellä ole mahdollista, mutta ota huomioon, ettei Mastodonin käyttö edellytä juuri kyseisen palvelimen tiliä.",
@@ -161,6 +161,7 @@
   "column_header.pin": "Kiinnitä",
   "column_header.show_settings": "Näytä asetukset",
   "column_header.unpin": "Irrota",
+  "column_search.cancel": "Peruuta",
   "column_subheading.settings": "Asetukset",
   "community.column_settings.local_only": "Vain paikalliset",
   "community.column_settings.media_only": "Vain media",
@@ -234,10 +235,10 @@
   "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.",
   "dismissable_banner.community_timeline": "Nämä ovat tuoreimpia julkaisuja käyttäjiltä, joiden tili on palvelimella {domain}.",
   "dismissable_banner.dismiss": "Hylkää",
-  "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat korkeammalle sijalle.",
-  "dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikeiksi lisätyimmät julkaisut nousevat korkeammalle sijalle.",
-  "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat korkeammalle sijalle.",
-  "dismissable_banner.public_timeline": "Nämä ovat tuoreimpia julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.",
+  "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään fediversumissa eniten. Uudemmat ja useampien eri käyttäjien lähettämät uutiset sijoittuvat korkeammalle.",
+  "dismissable_banner.explore_statuses": "Nämä julkaisut ympäri fediversumia saavat tänään huomiota. Uudemmat, tehostetummat ja suosikiksi lisätymmät julkaisut sijoittuvat korkeammalle.",
+  "dismissable_banner.explore_tags": "Nämä aihetunnisteet ympäri fediversumia saavat tänään huomiota. Useampien eri käyttäjien käyttämät aihetunnisteet sijoittuvat korkeammalle.",
+  "dismissable_banner.public_timeline": "Nämä ovat tuoreimpia julkaisuja fediversumin käyttäjiltä, joita seurataan palvelimella {domain}.",
   "domain_block_modal.block": "Estä palvelin",
   "domain_block_modal.block_account_instead": "Estä sen sijaan @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Tämän palvelimen käyttäjät eivät voi olla vuorovaikutuksessa vanhojen julkaisujesi kanssa.",
@@ -293,7 +294,7 @@
   "empty_column.followed_tags": "Et seuraa vielä yhtäkään aihetunnistetta. Kun alat seurata, ne tulevat tähän näkyviin.",
   "empty_column.hashtag": "Tällä aihetunnisteella ei löydy vielä sisältöä.",
   "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia käyttäjiä, niin näet enemmän sisältöä.",
-  "empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.",
+  "empty_column.list": "Tässä listassa ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.",
   "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
   "empty_column.notification_requests": "Olet ajan tasalla! Täällä ei ole mitään uutta kerrottavaa. Kun saat uusia ilmoituksia, ne näkyvät täällä asetustesi mukaisesti.",
   "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun muut ovat vuorovaikutuksessa kanssasi, näet sen täällä.",
@@ -361,6 +362,7 @@
   "footer.status": "Tila",
   "generic.saved": "Tallennettu",
   "getting_started.heading": "Näin pääset alkuun",
+  "hashtag.admin_moderation": "Avaa tunnisteen #{name} moderointinäkymä",
   "hashtag.column_header.tag_mode.all": "ja {additional}",
   "hashtag.column_header.tag_mode.any": "tai {additional}",
   "hashtag.column_header.tag_mode.none": "ilman {additional}",
@@ -467,8 +469,8 @@
   "link_preview.more_from_author": "Lisää tekijältä {name}",
   "link_preview.shares": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}",
   "lists.add_member": "Lisää",
-  "lists.add_to_list": "Lisää listalle",
-  "lists.add_to_lists": "Lisää {name} listalle",
+  "lists.add_to_list": "Lisää listaan",
+  "lists.add_to_lists": "Lisää {name} listaan",
   "lists.create": "Luo",
   "lists.create_a_list_to_organize": "Luo uusi lista kotisyötteesi järjestämiseksi",
   "lists.create_list": "Luo lista",
@@ -476,7 +478,7 @@
   "lists.done": "Valmis",
   "lists.edit": "Muokkaa listaa",
   "lists.exclusive": "Piilota jäsenet kotisyötteestä",
-  "lists.exclusive_hint": "Jos joku on tällä listalla, piilota hänet kotisyötteestäsi, jotta et näe hänen julkaisujaan kahteen kertaan.",
+  "lists.exclusive_hint": "Jos joku on tässä listassa, piilota hänet kotisyötteestäsi, jotta et näe hänen julkaisujaan kahteen kertaan.",
   "lists.find_users_to_add": "Etsi lisättäviä käyttäjiä",
   "lists.list_members": "Listan jäsenet",
   "lists.list_members_count": "{count, plural, one {# jäsen} other {# jäsentä}}",
@@ -648,44 +650,21 @@
   "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön",
   "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.",
   "notifications_permission_banner.title": "Älä anna minkään mennä ohi",
-  "onboarding.action.back": "Palaa takaisin",
-  "onboarding.actions.back": "Palaa takaisin",
-  "onboarding.actions.go_to_explore": "Siirry suosittujen aiheiden syötteeseen",
-  "onboarding.actions.go_to_home": "Siirry kotisyötteeseeni",
-  "onboarding.compose.template": "Tervehdys #Mastodon!",
+  "onboarding.follows.back": "Takaisin",
+  "onboarding.follows.done": "Valmis",
   "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa tai yrittää myöhemmin uudelleen.",
-  "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta – voit milloin tahansa myös lopettaa niiden seuraamisen:",
-  "onboarding.follows.title": "Mukauta kotisyötettäsi",
+  "onboarding.follows.search": "Haku",
+  "onboarding.follows.title": "Aloita seuraamalla käyttäjiä",
   "onboarding.profile.discoverable": "Aseta profiilini löydettäväksi",
   "onboarding.profile.discoverable_hint": "Kun olet määrittänyt itsesi löydettäväksi Mastodonista, julkaisusi voivat näkyä hakutuloksissa ja suosituissa kohteissa. Lisäksi profiiliasi voidaan ehdottaa käyttäjille, jotka ovat kiinnostuneita kanssasi samoista aiheista.",
   "onboarding.profile.display_name": "Näyttönimi",
   "onboarding.profile.display_name_hint": "Koko nimesi tai lempinimesi…",
-  "onboarding.profile.lead": "Voit viimeistellä tämän milloin tahansa asetuksista. Sieltä löydät myös lisää mukautusvaihtoehtoja.",
   "onboarding.profile.note": "Elämäkerta",
   "onboarding.profile.note_hint": "Voit @mainita muita käyttäjiä tai #aihetunnisteita…",
   "onboarding.profile.save_and_continue": "Tallenna ja jatka",
   "onboarding.profile.title": "Profiilin määritys",
   "onboarding.profile.upload_avatar": "Lähetä profiilikuva",
   "onboarding.profile.upload_header": "Lähetä profiilin otsakekuva",
-  "onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!",
-  "onboarding.share.message": "Olen {username} #Mastodon⁠issa! Seuraa minua osoitteessa {url}",
-  "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:",
-  "onboarding.share.title": "Jaa profiilisi",
-  "onboarding.start.lead": "Uusi Mastodon-tilisi on nyt valmiina käyttöön. Kyseessä on ainutlaatuinen, hajautettu sosiaalisen median alusta, jolla sinä itse – algoritmin sijaan – määrität käyttökokemuksesi. Näin hyödyt Mastodonista eniten:",
-  "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin ilman alkuunpääsyohjeistuksia?",
-  "onboarding.start.title": "Olet tehnyt sen!",
-  "onboarding.steps.follow_people.body": "Mastodonissa on kyse kiinnostavien käyttäjien seuraamisesta.",
-  "onboarding.steps.follow_people.title": "Mukauta kotisyötettäsi",
-  "onboarding.steps.publish_status.body": "Tervehdi maailmaa sanoin, kuvin tai äänestyksin {emoji}",
-  "onboarding.steps.publish_status.title": "Laadi ensimmäinen julkaisusi",
-  "onboarding.steps.setup_profile.body": "Täydentämällä profiilisi tietoja tehostat vuorovaikutteisuutta.",
-  "onboarding.steps.setup_profile.title": "Mukauta profiiliasi",
-  "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista",
-  "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi",
-  "onboarding.tips.2fa": "<strong>Tiesitkö?</strong> Voit suojata tilisi ottamalla kaksivaiheisen todennuksen käyttöön tilisi asetuksista. Se toimii millä tahansa TOTP-sovelluksella, eikä sen käyttö edellytä puhelinnumeron luovuttamista!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Tiesitkö?</strong> Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjätunnuksen jälkiosassa!",
-  "onboarding.tips.migration": "<strong>Tiesitkö?</strong> Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!",
-  "onboarding.tips.verification": "<strong>Tiesitkö?</strong> Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi lisäkenttään. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä asiakirjoja!",
   "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden",
   "password_confirmation.mismatching": "Salasanan vahvistus ei täsmää",
   "picture_in_picture.restore": "Laita se takaisin",
diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json
index 1ccc6f036..a7f233832 100644
--- a/app/javascript/mastodon/locales/fil.json
+++ b/app/javascript/mastodon/locales/fil.json
@@ -71,7 +71,6 @@
   "bundle_column_error.routing.body": "Hindi mahanap ang hiniling na pahina. Sigurado ka ba na ang URL sa address bar ay tama?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "I-sara",
-  "bundle_modal_error.message": "May nangyaring mali habang kinakarga ang bahaging ito.",
   "bundle_modal_error.retry": "Subukang muli",
   "closed_registrations.other_server_instructions": "Dahil desentralisado ang Mastodon, pwede kang gumawa ng account sa iba pang server at makipag-ugnayan pa rin dito.",
   "closed_registrations_modal.description": "Hindi pa pwedeng gumawa ng account sa {domain}, pero tandaan na hindi mo kailangan ng account partikular sa {domain} para gamitin ang Mastodon.",
@@ -143,10 +142,6 @@
   "disabled_account_banner.text": "Ang iyong account na {disabledAccount} ay hindi pinapagana ngayon.",
   "dismissable_banner.community_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong ang mga account hinohost ng {domain}.",
   "dismissable_banner.dismiss": "Alisin",
-  "dismissable_banner.explore_links": "Ito ang mga balitang kwento na pinaka-binabahagi sa social web ngayon. Ang mga mas bagong balitang kwento na pinost ng mas marami pang mga iba't ibang tao ay tinataasan ng antas.",
-  "dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.",
-  "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.",
-  "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.",
   "domain_block_modal.block": "Harangan ang serbiro",
   "domain_block_modal.title": "Harangan ang domain?",
   "domain_pill.server": "Serbiro",
@@ -278,11 +273,8 @@
   "notifications.policy.accept_hint": "Ipakita sa mga abiso",
   "notifications.policy.filter_not_followers_title": "Mga taong hindi ka susundan",
   "notifications.policy.filter_not_following_title": "Mga taong hindi mo sinusundan",
-  "onboarding.action.back": "Ibalik mo ako",
-  "onboarding.actions.back": "Ibalik mo ako",
   "onboarding.profile.note_hint": "Maaari mong @bangitin ang ibang mga tao o mga #hashtag…",
   "onboarding.profile.save_and_continue": "Iimbak at magpatuloy",
-  "onboarding.share.next_steps": "Mga posibleng susunod na hakbang:",
   "picture_in_picture.restore": "Ilagay ito pabalik",
   "poll.closed": "Sarado",
   "poll.reveal": "Ipakita ang mga resulta",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index bc56152f3..d53d5a98e 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Tað bar ikki til at finna umbidnu síðuna. Er URL'urin rættur?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Lat aftur",
-  "bundle_modal_error.message": "Okkurt gekk galið, tá hesin komponenturin bleiv innlisin.",
+  "bundle_modal_error.message": "Okkurt gekk galið, tá hendan síðan bleiv innlisin.",
   "bundle_modal_error.retry": "Royn umaftur",
   "closed_registrations.other_server_instructions": "Av tí at Mastodon er desentraliserað, kanst tú stovna eina kontu á einum øðrum ambætara og framvegis virka saman við hesum ambætaranum.",
   "closed_registrations_modal.description": "Tað er ikki møguligt at stovna sær eina kontu á {domain} í løtuni, men vinarliga hav í huga at tær nýtist ikki eina kontu á júst {domain} fyri at brúka Mastodon.",
@@ -140,13 +140,16 @@
   "column.blocks": "Bannaðir brúkarar",
   "column.bookmarks": "Bókamerki",
   "column.community": "Lokal tíðarlinja",
+  "column.create_list": "Ger lista",
   "column.direct": "Privatar umrøður",
   "column.directory": "Blaða gjøgnum vangar",
   "column.domain_blocks": "Bannað økisnøvn",
+  "column.edit_list": "Broyt lista",
   "column.favourites": "Dámdir postar",
   "column.firehose": "Beinleiðis rásir",
   "column.follow_requests": "Umbønir at fylgja",
   "column.home": "Heim",
+  "column.list_members": "Rætta limalista",
   "column.lists": "Listar",
   "column.mutes": "Sløktir brúkarar",
   "column.notifications": "Fráboðanir",
@@ -159,6 +162,7 @@
   "column_header.pin": "Fest",
   "column_header.show_settings": "Vís stillingar",
   "column_header.unpin": "Loys",
+  "column_search.cancel": "Angra",
   "column_subheading.settings": "Stillingar",
   "community.column_settings.local_only": "Einans lokalt",
   "community.column_settings.media_only": "Einans miðlar",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "Konta tín {disabledAccount} er í løtuni óvirkin.",
   "dismissable_banner.community_timeline": "Hesir er nýggjastu almennu postarnir frá fólki, hvørs kontur eru hýstar av {domain}.",
   "dismissable_banner.dismiss": "Avvís",
-  "dismissable_banner.explore_links": "Fólk tosa um hesi tíðindi, á hesum og øðrum ambætarum á miðspjadda netverkinum, júst nú.",
-  "dismissable_banner.explore_statuses": "Hesi uppsløg, frá hesum og øðrum ambætarum á miðspjadda netverkinum, hava framgongd á hesum ambætara júst nú. Nýggjari postar, sum fleiri hava framhevja og dáma, verða raðfestir hægri.",
-  "dismissable_banner.explore_tags": "Hesi frámerki vinna í løtuni fótafesti millum fólk á hesum og øðrum ambætarum í desentrala netverkinum beint nú.",
-  "dismissable_banner.public_timeline": "Hetta eru teir nýggjast postarnir frá fólki á sosialu vevinum, sum fólk á {domain} fylgja.",
+  "dismissable_banner.explore_links": "Hesi eru tíðindini, sum eru mest deilt á fediversinum í dag. Nýggjari tíðindi frá fjølbroyttari fólki eru raðfest hægri.",
+  "dismissable_banner.explore_statuses": "Hesir postar á fediversinum hava framgongd í dag. Nýggjari postar, sum fleiri hava framhevja og dámt, eru raðfestir hægri.",
+  "dismissable_banner.explore_tags": "Hesi frámerki vinna í løtuni fótafesti á fediversinum í dag. Frámerki, sum eru brúkt millum fleiri ymisk fólk, eru raðfest hægri.",
+  "dismissable_banner.public_timeline": "Hetta eru nýggjastu almennu postarnir frá fólki á fediversinum, sum fólk á {domain} fylgja.",
   "domain_block_modal.block": "Banna ambætara",
   "domain_block_modal.block_account_instead": "Banna @{name} ístaðin",
   "domain_block_modal.they_can_interact_with_old_posts": "Fólk frá hesum ambætara kunnu svara tínum gomlu postum.",
@@ -359,6 +363,7 @@
   "footer.status": "Støða",
   "generic.saved": "Goymt",
   "getting_started.heading": "At byrja",
+  "hashtag.admin_moderation": "Lat umsjónarmarkamót upp fyri #{name}",
   "hashtag.column_header.tag_mode.all": "og {additional}",
   "hashtag.column_header.tag_mode.any": "ella {additional}",
   "hashtag.column_header.tag_mode.none": "uttan {additional}",
@@ -464,11 +469,32 @@
   "link_preview.author": "Av {name}",
   "link_preview.more_from_author": "Meira frá {name}",
   "link_preview.shares": "{count, plural, one {{counter} postur} other {{counter} postar}}",
+  "lists.add_member": "Legg afturat",
+  "lists.add_to_list": "Legg afturat lista",
+  "lists.add_to_lists": "Legg {name} afturat lista",
+  "lists.create": "Ger",
+  "lists.create_a_list_to_organize": "Ger ein nýggjan lista til heimarásina hjá tær",
+  "lists.create_list": "Ger lista",
   "lists.delete": "Strika lista",
+  "lists.done": "Liðugt",
   "lists.edit": "Broyt lista",
+  "lists.exclusive": "Fjal limir á heimarás",
+  "lists.exclusive_hint": "Um onkur er á hesum listanum, so skulu tey fjalast á heimarásini, so tú sleppir undan at síggja postar teirra tvær ferðir.",
+  "lists.find_users_to_add": "Finn brúkarar at leggja afturat",
+  "lists.list_members": "Lista limir",
+  "lists.list_members_count": "{count, plural, one {# limur} other {# limir}}",
+  "lists.list_name": "Listanavn",
+  "lists.new_list_name": "Nýtt listanavn",
+  "lists.no_lists_yet": "Ongir listar enn.",
+  "lists.no_members_yet": "Eingir limir enn.",
+  "lists.no_results_found": "Eingi úrslit funnin.",
+  "lists.remove_member": "Burturbein",
   "lists.replies_policy.followed": "Øllum fylgdum brúkarum",
   "lists.replies_policy.list": "Listalimunum",
   "lists.replies_policy.none": "Eingin",
+  "lists.save": "Goym",
+  "lists.search_placeholder": "Leita eftir fólki, sum tú fylgir",
+  "lists.show_replies_to": "Írokna svar frá limum á listanum til",
   "load_pending": "{count, plural, one {# nýtt evni} other {# nýggj evni}}",
   "loading_indicator.label": "Innlesur…",
   "media_gallery.hide": "Fjal",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Ger skriviborðsfráboðanir virknar",
   "notifications_permission_banner.how_to_control": "Ger skriviborðsfráboðanir virknar fyri at móttaka fráboðanir, tá Mastodon ikki er opið. Tá tær eru gjørdar virknar, kanst tú stýra, hvørji sløg av samvirkni geva skriviborðsfráboðanir. Hetta umvegis {icon} knøttin omanfyri.",
   "notifications_permission_banner.title": "Miss einki",
-  "onboarding.action.back": "Tak meg aftur",
-  "onboarding.actions.back": "Tak meg aftur",
-  "onboarding.actions.go_to_explore": "Sí rákið",
-  "onboarding.actions.go_to_home": "Far til heimarásina",
-  "onboarding.compose.template": "Hey #Mastodon!",
+  "onboarding.follows.back": "Aftur",
+  "onboarding.follows.done": "Liðugt",
   "onboarding.follows.empty": "Tíverri kunnu eingi úrslit vísast beint nú. Tú kanst royna at brúka leiting ella at kaga gjøgnum Rannsaka síðuna fyri at finna fólk at fylgja - ella royna aftur seinni.",
-  "onboarding.follows.lead": "Tú snikkar sjálv/ur tína heimarás til. Jú fleiri fólk, tú fylgir, jú virknari og áhugaverdari verður tað. Hesir vangar kunnu vera ein góð byrjan — tú kanst altíð gevast at fylgja teimum seinni!",
-  "onboarding.follows.title": "Vælumtókt á Mastodon",
+  "onboarding.follows.search": "Leita",
+  "onboarding.follows.title": "Fylg fólki fyri at koma í gongd",
   "onboarding.profile.discoverable": "Ger tað møguligt hjá øðrum at finna vangan hjá mær",
   "onboarding.profile.discoverable_hint": "Tá tú játtar at onnur skulu kunna finna teg á Mastodon, so kann henda, at postar tínir síggjast í leitiúrslitum og rákum, og vangin hjá tær kann vera skotin upp fyri fólki við áhugamálum sum minna um tíni.",
   "onboarding.profile.display_name": "Navn, sum skal vísast",
   "onboarding.profile.display_name_hint": "Títt fulla navn ella títt stuttliga navn…",
-  "onboarding.profile.lead": "Tú kanst altíð gera hetta liðugt seinni í stillingunum, har enn fleiri tillagingarmøguleikar eru tøkir.",
   "onboarding.profile.note": "Ævilýsing",
   "onboarding.profile.note_hint": "Tú kanst @umrøða onnur fólk ella #frámerki…",
   "onboarding.profile.save_and_continue": "Goym og halt fram",
   "onboarding.profile.title": "Vangauppsetan",
   "onboarding.profile.upload_avatar": "Legg vangamynd upp",
   "onboarding.profile.upload_header": "Legg vangahøvd upp",
-  "onboarding.share.lead": "Lat fólk vita, hvussu tey kunnu finna teg á Mastodon!",
-  "onboarding.share.message": "Eg eri {username} á #Mastodon! Kom og fylg mær á {url}",
-  "onboarding.share.next_steps": "Møgulig næstu stig:",
-  "onboarding.share.title": "Deil tín vanga",
-  "onboarding.start.lead": "Tín nýggja Mastodon konta er klár. Her er ymiskt fyri at fáa sum mest burturúr:",
-  "onboarding.start.skip": "Hevur tú hug at leypa hetta um?",
-  "onboarding.start.title": "Tú kláraði tað!",
-  "onboarding.steps.follow_people.body": "Tú snikkar sjálv/ur tína rás til. Latum okkum fylla hana við áhugaverdum fólki.",
-  "onboarding.steps.follow_people.title": "Fylg {count, plural, one {einum persóni} other {# persónum}}",
-  "onboarding.steps.publish_status.body": "Sig hey við verðina.",
-  "onboarding.steps.publish_status.title": "Ger tín fyrsta post",
-  "onboarding.steps.setup_profile.body": "Líkindini eru størri fyri, at onnur samvirka við tær, um tú hevur ein útfyltan vanga.",
-  "onboarding.steps.setup_profile.title": "Snikka vangan hjá tær til",
-  "onboarding.steps.share_profile.body": "Lat vinir tínar vita, hvussu tey kunnu finna teg á Mastodon!",
-  "onboarding.steps.share_profile.title": "Deil vangan hjá tær",
-  "onboarding.tips.2fa": "<strong>Visti tú?</strong> Tú kanst tryggja kontu tína við at seta upp váttan í tveimum stigum í kontustillingunum hjá tær. Tað riggar við øllum TOTP appum; einki telefonnummar er neyðugt!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Visti tú?</strong> Av tí at Mastodon er miðspjatt, so eru summir vangar, sum tú kemur framat, hýstir á øðrum ambætarum. Og hóast hetta kanst tú samvirka við teir uttan nakað roks! Ambætarin er í seinna parti av brúkaranavninum hjá teimum!",
-  "onboarding.tips.migration": "<strong>Visti tú?</strong> Heldur tú at {domain} ikki er eitt gott ambætaraval fyri teg í framtíðini, so kanst tú flyta til ein annan Mastodon ambætara uttan at missa fylgjararnar hjá tær. Tú kanst enntá hýsa tínum egna ambætara!",
-  "onboarding.tips.verification": "<strong>Visti tú?</strong> Tú kanst vátta tína kontu við at leggja eitt leinki til tín Mastodon vanga á tína heimasíðu og leggja heimasíðuna á vangan hjá tær. Einki gjald og eingi skjøl neyðug!",
   "password_confirmation.exceeds_maxlength": "Loyniorðsváttanin er longri enn mest loyvda loyniorðslongd",
   "password_confirmation.mismatching": "Loyniorðsváttanin passar ikki til",
   "picture_in_picture.restore": "Legg hana aftur",
diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json
index a1134e0de..6c9933ca3 100644
--- a/app/javascript/mastodon/locales/fr-CA.json
+++ b/app/javascript/mastodon/locales/fr-CA.json
@@ -87,9 +87,22 @@
   "alert.unexpected.title": "Oups!",
   "alt_text_badge.title": "Texte Alt",
   "announcement.announcement": "Annonce",
+  "annual_report.summary.archetype.lurker": "Le faucheur",
   "annual_report.summary.archetype.oracle": "L’oracle",
+  "annual_report.summary.followers.followers": "abonné·e·s",
+  "annual_report.summary.followers.total": "{count} au total",
   "annual_report.summary.here_it_is": "Voici votre récap de {year} :",
+  "annual_report.summary.highlighted_post.by_favourites": "post le plus aimé",
+  "annual_report.summary.highlighted_post.by_reblogs": "post le plus boosté",
+  "annual_report.summary.highlighted_post.by_replies": "post avec le plus de réponses",
+  "annual_report.summary.highlighted_post.possessive": "{name}'s",
   "annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
+  "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
+  "annual_report.summary.most_used_hashtag.none": "Aucun",
+  "annual_report.summary.new_posts.new_posts": "nouveaux posts",
+  "annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
+  "annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
   "attachments_list.unprocessed": "(non traité)",
   "audio.hide": "Masquer l'audio",
   "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",
@@ -113,7 +126,6 @@
   "bundle_column_error.routing.body": "La page demandée est introuvable. Êtes-vous sûr que l’URL dans la barre d’adresse est correcte?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fermer",
-  "bundle_modal_error.message": "Une erreur s’est produite lors du chargement de ce composant.",
   "bundle_modal_error.retry": "Réessayer",
   "closed_registrations.other_server_instructions": "Puisque Mastodon est décentralisé, vous pouvez créer un compte sur un autre serveur et interagir quand même avec celui-ci.",
   "closed_registrations_modal.description": "Créer un compte sur {domain} est présentement impossible, néanmoins souvenez-vous que vous n'avez pas besoin d'un compte spécifiquement sur {domain} pour utiliser Mastodon.",
@@ -124,13 +136,16 @@
   "column.blocks": "Comptes bloqués",
   "column.bookmarks": "Signets",
   "column.community": "Fil local",
+  "column.create_list": "Créer une liste",
   "column.direct": "Mention privée",
   "column.directory": "Parcourir les profils",
   "column.domain_blocks": "Domaines bloqués",
+  "column.edit_list": "Modifier la liste",
   "column.favourites": "Favoris",
   "column.firehose": "Flux en direct",
   "column.follow_requests": "Demande d'abonnement",
   "column.home": "Accueil",
+  "column.list_members": "Gérer les membres de la liste",
   "column.lists": "Listes",
   "column.mutes": "Comptes masqués",
   "column.notifications": "Notifications",
@@ -143,6 +158,7 @@
   "column_header.pin": "Épingler",
   "column_header.show_settings": "Afficher les paramètres",
   "column_header.unpin": "Désépingler",
+  "column_search.cancel": "Annuler",
   "column_subheading.settings": "Paramètres",
   "community.column_settings.local_only": "Local seulement",
   "community.column_settings.media_only": "Média seulement",
@@ -200,6 +216,7 @@
   "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
   "content_warning.hide": "Masquer le message",
   "content_warning.show": "Afficher quand même",
+  "content_warning.show_more": "Déplier",
   "conversation.delete": "Supprimer cette conversation",
   "conversation.mark_as_read": "Marquer comme lu",
   "conversation.open": "Afficher cette conversation",
@@ -215,10 +232,6 @@
   "disabled_account_banner.text": "Votre compte {disabledAccount} est présentement désactivé.",
   "dismissable_banner.community_timeline": "Voici les publications publiques les plus récentes de personnes dont les comptes sont hébergés par {domain}.",
   "dismissable_banner.dismiss": "Rejeter",
-  "dismissable_banner.explore_links": "Ces nouvelles sont présentement en cours de discussion par des personnes sur d'autres serveurs du réseau décentralisé ainsi que sur celui-ci.",
-  "dismissable_banner.explore_statuses": "Voici des publications venant de tout le web social gagnant en popularité aujourd’hui. Les nouvelles publications avec plus de boosts et de favoris sont classés plus haut.",
-  "dismissable_banner.explore_tags": "Ces hashtags sont présentement en train de gagner de l'ampleur parmi des personnes sur les serveurs du réseau décentralisé dont celui-ci.",
-  "dismissable_banner.public_timeline": "Ce sont les messages publics les plus récents de personnes sur le web social que les gens de {domain} suivent.",
   "domain_block_modal.block": "Bloquer le serveur",
   "domain_block_modal.block_account_instead": "Bloquer @{name} à la place",
   "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.",
@@ -307,6 +320,7 @@
   "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle",
   "filter_modal.select_filter.title": "Filtrer cette publication",
   "filter_modal.title.status": "Filtrer une publication",
+  "filter_warning.matches_filter": "Correspond au filtre « <span>{title}</span> »",
   "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître",
   "filtered_notifications_banner.title": "Notifications filtrées",
   "firehose.all": "Tout",
@@ -386,6 +400,7 @@
   "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs publications dans votre fil d'accueil.",
   "interaction_modal.description.reblog": "Avec un compte Mastodon, vous pouvez booster cette publication pour la partager avec vos propres abonné·e·s.",
   "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à cette publication.",
+  "interaction_modal.description.vote": "Avec un compte sur Mastodon, vous pouvez répondre à cette question.",
   "interaction_modal.login.action": "Aller à mon serveur",
   "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
   "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
@@ -397,6 +412,7 @@
   "interaction_modal.title.follow": "Suivre {name}",
   "interaction_modal.title.reblog": "Booster la publication de {name}",
   "interaction_modal.title.reply": "Répondre à la publication de {name}",
+  "interaction_modal.title.vote": "Voter pour le sondage de {name}",
   "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}}",
@@ -444,11 +460,30 @@
   "link_preview.author": "Par {name}",
   "link_preview.more_from_author": "Plus via {name}",
   "link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
+  "lists.add_member": "Ajouter",
+  "lists.add_to_list": "Ajouter à la liste",
+  "lists.add_to_lists": "Ajouter {name} aux listes",
+  "lists.create": "Créer",
+  "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre Page d'accueil",
+  "lists.create_list": "Créer une liste",
   "lists.delete": "Supprimer la liste",
+  "lists.done": "Terminé",
   "lists.edit": "Modifier la liste",
+  "lists.exclusive": "Cacher les membres de la page d'accueil",
+  "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.",
+  "lists.find_users_to_add": "Trouver des utilisateurs à ajouter",
+  "lists.list_members": "Lister les membres",
+  "lists.list_name": "Nom de la liste",
+  "lists.new_list_name": "Nom de la nouvelle liste",
+  "lists.no_lists_yet": "Aucune liste pour l'instant.",
+  "lists.no_members_yet": "Aucun membre pour l'instant.",
+  "lists.no_results_found": "Aucun résultat.",
+  "lists.remove_member": "Supprimer",
   "lists.replies_policy.followed": "N'importe quel compte suivi",
   "lists.replies_policy.list": "Membres de la liste",
   "lists.replies_policy.none": "Personne",
+  "lists.save": "Enregistrer",
+  "lists.search_placeholder": "Rechercher parmi les gens que vous suivez",
   "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}",
   "loading_indicator.label": "Chargement…",
   "media_gallery.hide": "Masquer",
@@ -497,6 +532,7 @@
   "notification.admin.report_statuses_other": "{name} a signalé {target}",
   "notification.admin.sign_up": "{name} s'est inscrit·e",
   "notification.admin.sign_up.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont inscrit",
+  "notification.annual_report.view": "Voir #Wrapstodon",
   "notification.favourite": "{name} a ajouté votre publication à ses favoris",
   "notification.favourite.name_and_others_with_link": "{name} et <a>{count, plural, one {# autre} other {# autres}}</a> ont mis votre message en favori",
   "notification.follow": "{name} vous suit",
@@ -603,44 +639,20 @@
   "notifications_permission_banner.enable": "Activer les notifications de bureau",
   "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
   "notifications_permission_banner.title": "Ne rien rater",
-  "onboarding.action.back": "Revenir en arrière",
-  "onboarding.actions.back": "Revenir en arrière",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Bonjour #Mastodon!",
+  "onboarding.follows.back": "Retour",
+  "onboarding.follows.done": "Terminé",
   "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer de rechercher ou de parcourir la page \"Explorer\" pour trouver des personnes à suivre, ou réessayer plus tard.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
+  "onboarding.follows.search": "Recherche",
   "onboarding.profile.discoverable": "Rendre mon profil découvrable",
   "onboarding.profile.discoverable_hint": "Lorsque vous acceptez d'être découvert sur Mastodon, vos messages peuvent apparaître dans les résultats de recherche et les tendances, et votre profil peut être suggéré à des personnes ayant des intérêts similaires aux vôtres.",
   "onboarding.profile.display_name": "Nom affiché",
   "onboarding.profile.display_name_hint": "Votre nom complet ou votre nom rigolo…",
-  "onboarding.profile.lead": "Vous pouvez toujours compléter cela plus tard dans les paramètres. Vous y trouverez encore plus d'options de personnalisation.",
   "onboarding.profile.note": "Biographie",
   "onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…",
   "onboarding.profile.save_and_continue": "Enregistrer et continuer",
   "onboarding.profile.title": "Configuration du profil",
   "onboarding.profile.upload_avatar": "Importer une photo de profil",
   "onboarding.profile.upload_header": "Importer un entête de profil",
-  "onboarding.share.lead": "Faites savoir aux gens comment vous trouver sur Mastodon!",
-  "onboarding.share.message": "Je suis {username} sur #Mastodon! Suivez-moi sur {url}",
-  "onboarding.share.next_steps": "Étapes suivantes possibles:",
-  "onboarding.share.title": "Partager votre profil",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Vous avez réussi!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Écrivez votre première publication",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Le saviez-vous ?</strong> Vous pouvez sécuriser votre compte en configurant l'authentification à deux facteurs dans les paramètres de votre compte. Ça marche avec n'importe quelle application TOTP de votre choix, aucun numéro de téléphone nécessaire!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Le saviez-vous ?</strong> Puisque Mastodon est décentralisé, certains profils que vous rencontrez seront hébergés sur des serveurs autres que les vôtres. Et vous pouvez toujours interagir avec ceux-là de façon transparente! Leur serveur est dans la seconde moitié de leur nom d'utilisateur!",
-  "onboarding.tips.migration": "<strong>Le saviez-vous ?</strong> Si vous avez l'impression que {domain} n'est pas un bon choix de serveur pour vous dans le futur, vous pouvez déménager vers un autre serveur Mastodon sans perdre vos abonnés. Vous pouvez même héberger votre propre serveur!",
-  "onboarding.tips.verification": "<strong>Le saviez-vous ?</strong> Vous pouvez vérifier votre compte en mettant un lien vers votre profil Mastodon sur votre propre site web et en ajoutant le site à votre profil. Sans frais ou documents!",
   "password_confirmation.exceeds_maxlength": "La confirmation du mot de passe dépasse la longueur maximale du mot de passe",
   "password_confirmation.mismatching": "Les deux mots de passe ne correspondent pas",
   "picture_in_picture.restore": "Remettre en place",
@@ -848,6 +860,7 @@
   "upload_form.description": "Décrire pour les malvoyants",
   "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
   "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.",
+  "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.",
   "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.",
   "upload_form.edit": "Modifier",
   "upload_form.thumbnail": "Changer la vignette",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 8597152f0..d986f1350 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -87,9 +87,22 @@
   "alert.unexpected.title": "Oups !",
   "alt_text_badge.title": "Texte Alt",
   "announcement.announcement": "Annonce",
+  "annual_report.summary.archetype.lurker": "Le faucheur",
   "annual_report.summary.archetype.oracle": "L’oracle",
+  "annual_report.summary.followers.followers": "abonné·e·s",
+  "annual_report.summary.followers.total": "{count} au total",
   "annual_report.summary.here_it_is": "Voici votre récap de {year} :",
+  "annual_report.summary.highlighted_post.by_favourites": "post le plus aimé",
+  "annual_report.summary.highlighted_post.by_reblogs": "post le plus boosté",
+  "annual_report.summary.highlighted_post.by_replies": "post avec le plus de réponses",
+  "annual_report.summary.highlighted_post.possessive": "{name}'s",
   "annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
+  "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
+  "annual_report.summary.most_used_hashtag.none": "Aucun",
+  "annual_report.summary.new_posts.new_posts": "nouveaux posts",
+  "annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
+  "annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
   "attachments_list.unprocessed": "(non traité)",
   "audio.hide": "Masquer l'audio",
   "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",
@@ -113,7 +126,6 @@
   "bundle_column_error.routing.body": "La page demandée est introuvable. Êtes-vous sûr que l’URL dans la barre d’adresse est correcte ?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fermer",
-  "bundle_modal_error.message": "Une erreur s’est produite lors du chargement de ce composant.",
   "bundle_modal_error.retry": "Réessayer",
   "closed_registrations.other_server_instructions": "Puisque Mastodon est décentralisé, vous pouvez créer un compte sur un autre serveur et interagir quand même avec celui-ci.",
   "closed_registrations_modal.description": "Créer un compte sur {domain} est actuellement impossible, néanmoins souvenez-vous que vous n'avez pas besoin d'un compte spécifiquement sur {domain} pour utiliser Mastodon.",
@@ -124,13 +136,16 @@
   "column.blocks": "Utilisateurs bloqués",
   "column.bookmarks": "Marque-pages",
   "column.community": "Fil public local",
+  "column.create_list": "Créer une liste",
   "column.direct": "Mentions privées",
   "column.directory": "Parcourir les profils",
   "column.domain_blocks": "Domaines bloqués",
+  "column.edit_list": "Modifier la liste",
   "column.favourites": "Favoris",
   "column.firehose": "Flux en direct",
   "column.follow_requests": "Demandes d'abonnement",
   "column.home": "Accueil",
+  "column.list_members": "Gérer les membres de la liste",
   "column.lists": "Listes",
   "column.mutes": "Comptes masqués",
   "column.notifications": "Notifications",
@@ -143,6 +158,7 @@
   "column_header.pin": "Épingler",
   "column_header.show_settings": "Afficher les paramètres",
   "column_header.unpin": "Désépingler",
+  "column_search.cancel": "Annuler",
   "column_subheading.settings": "Paramètres",
   "community.column_settings.local_only": "Local seulement",
   "community.column_settings.media_only": "Média uniquement",
@@ -200,6 +216,7 @@
   "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
   "content_warning.hide": "Masquer le message",
   "content_warning.show": "Afficher quand même",
+  "content_warning.show_more": "Déplier",
   "conversation.delete": "Supprimer la conversation",
   "conversation.mark_as_read": "Marquer comme lu",
   "conversation.open": "Afficher la conversation",
@@ -215,10 +232,6 @@
   "disabled_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé.",
   "dismissable_banner.community_timeline": "Voici les messages publics les plus récents des comptes hébergés par {domain}.",
   "dismissable_banner.dismiss": "Rejeter",
-  "dismissable_banner.explore_links": "On parle actuellement de ces nouvelles sur ce serveur, ainsi que sur d'autres serveurs du réseau décentralisé.",
-  "dismissable_banner.explore_statuses": "Ces messages venant de tout le web social gagnent en popularité aujourd’hui. Les nouveaux messages avec plus de boosts et de favoris sont classés plus haut.",
-  "dismissable_banner.explore_tags": "Ces hashtags sont actuellement en train de gagner de l'ampleur parmi les personnes sur les serveurs du réseau décentralisé dont celui-ci.",
-  "dismissable_banner.public_timeline": "Il s'agit des messages publics les plus récents publiés par des gens sur le web social et que les utilisateurs de {domain} suivent.",
   "domain_block_modal.block": "Bloquer le serveur",
   "domain_block_modal.block_account_instead": "Bloquer @{name} à la place",
   "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.",
@@ -307,6 +320,7 @@
   "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou créez-en une nouvelle",
   "filter_modal.select_filter.title": "Filtrer ce message",
   "filter_modal.title.status": "Filtrer un message",
+  "filter_warning.matches_filter": "Correspond au filtre « <span>{title}</span> »",
   "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître",
   "filtered_notifications_banner.title": "Notifications filtrées",
   "firehose.all": "Tout",
@@ -386,6 +400,7 @@
   "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs posts dans votre fil d'actualité.",
   "interaction_modal.description.reblog": "Avec un compte sur Mastodon, vous pouvez partager ce message pour le faire découvrir à vos propres abonné⋅e⋅s.",
   "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à ce message.",
+  "interaction_modal.description.vote": "Avec un compte sur Mastodon, vous pouvez répondre à cette question.",
   "interaction_modal.login.action": "Aller à mon serveur",
   "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
   "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
@@ -397,6 +412,7 @@
   "interaction_modal.title.follow": "Suivre {name}",
   "interaction_modal.title.reblog": "Partager le message de {name}",
   "interaction_modal.title.reply": "Répondre au message de {name}",
+  "interaction_modal.title.vote": "Voter pour le sondage de {name}",
   "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}}",
@@ -444,11 +460,30 @@
   "link_preview.author": "Par {name}",
   "link_preview.more_from_author": "Plus via {name}",
   "link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
+  "lists.add_member": "Ajouter",
+  "lists.add_to_list": "Ajouter à la liste",
+  "lists.add_to_lists": "Ajouter {name} aux listes",
+  "lists.create": "Créer",
+  "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre Page d'accueil",
+  "lists.create_list": "Créer une liste",
   "lists.delete": "Supprimer la liste",
+  "lists.done": "Terminé",
   "lists.edit": "Modifier la liste",
+  "lists.exclusive": "Cacher les membres de la page d'accueil",
+  "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.",
+  "lists.find_users_to_add": "Trouver des utilisateurs à ajouter",
+  "lists.list_members": "Lister les membres",
+  "lists.list_name": "Nom de la liste",
+  "lists.new_list_name": "Nom de la nouvelle liste",
+  "lists.no_lists_yet": "Aucune liste pour l'instant.",
+  "lists.no_members_yet": "Aucun membre pour l'instant.",
+  "lists.no_results_found": "Aucun résultat.",
+  "lists.remove_member": "Supprimer",
   "lists.replies_policy.followed": "N'importe quel compte suivi",
   "lists.replies_policy.list": "Membres de la liste",
   "lists.replies_policy.none": "Personne",
+  "lists.save": "Enregistrer",
+  "lists.search_placeholder": "Rechercher parmi les gens que vous suivez",
   "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}",
   "loading_indicator.label": "Chargement…",
   "media_gallery.hide": "Masquer",
@@ -497,6 +532,7 @@
   "notification.admin.report_statuses_other": "{name} a signalé {target}",
   "notification.admin.sign_up": "{name} s'est inscrit",
   "notification.admin.sign_up.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont inscrit",
+  "notification.annual_report.view": "Voir #Wrapstodon",
   "notification.favourite": "{name} a ajouté votre message à ses favoris",
   "notification.favourite.name_and_others_with_link": "{name} et <a>{count, plural, one {# autre} other {# autres}}</a> ont mis votre message en favori",
   "notification.follow": "{name} vous suit",
@@ -603,44 +639,20 @@
   "notifications_permission_banner.enable": "Activer les notifications de bureau",
   "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
   "notifications_permission_banner.title": "Toujours au courant",
-  "onboarding.action.back": "Revenir en arrière",
-  "onboarding.actions.back": "Revenir en arrière",
-  "onboarding.actions.go_to_explore": "Aller aux tendances",
-  "onboarding.actions.go_to_home": "Allers vers mon flux principal",
-  "onboarding.compose.template": "Bonjour #Mastodon !",
+  "onboarding.follows.back": "Retour",
+  "onboarding.follows.done": "Terminé",
   "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer d'utiliser la recherche ou parcourir la page de découverte pour trouver des personnes à suivre, ou réessayez plus tard.",
-  "onboarding.follows.lead": "Votre flux principal est le principal moyen de découvrir Mastodon. Plus vous suivez de personnes, plus il sera actif et intéressant. Pour commencer, voici quelques suggestions :",
-  "onboarding.follows.title": "Personnaliser votre flux principal",
+  "onboarding.follows.search": "Recherche",
   "onboarding.profile.discoverable": "Rendre mon profil découvrable",
   "onboarding.profile.discoverable_hint": "Lorsque vous acceptez d'être découvert sur Mastodon, vos messages peuvent apparaître dans les résultats de recherche et les tendances, et votre profil peut être suggéré à des personnes ayant des intérêts similaires aux vôtres.",
   "onboarding.profile.display_name": "Nom affiché",
   "onboarding.profile.display_name_hint": "Votre nom complet ou votre nom rigolo…",
-  "onboarding.profile.lead": "Vous pouvez toujours compléter cela plus tard dans les paramètres. Vous y trouverez encore plus d'options de personnalisation.",
   "onboarding.profile.note": "Biographie",
   "onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…",
   "onboarding.profile.save_and_continue": "Enregistrer et continuer",
   "onboarding.profile.title": "Configuration du profil",
   "onboarding.profile.upload_avatar": "Importer une photo de profil",
   "onboarding.profile.upload_header": "Importer un entête de profil",
-  "onboarding.share.lead": "Faites savoir aux gens comment ils peuvent vous trouver sur Mastodon!",
-  "onboarding.share.message": "Je suis {username} sur #Mastodon ! Suivez-moi sur {url}",
-  "onboarding.share.next_steps": "Étapes suivantes possibles :",
-  "onboarding.share.title": "Partager votre profil",
-  "onboarding.start.lead": "Vous faites désormais partie de Mastodon, une plateforme de médias sociaux unique et décentralisée où c'est vous, et non un algorithme, qui créez votre propre expérience. Nous allons vous aider à vous lancer dans cette nouvelle frontière sociale :",
-  "onboarding.start.skip": "Vous n’avez donc pas besoin d’aide pour commencer ?",
-  "onboarding.start.title": "Vous avez réussi !",
-  "onboarding.steps.follow_people.body": "Suivre des personnes intéressantes, c'est la raison d'être de Mastodon.",
-  "onboarding.steps.follow_people.title": "Personnaliser votre flux principal",
-  "onboarding.steps.publish_status.body": "Dites bonjour au monde avec du texte, des photos, des vidéos ou des sondages {emoji}",
-  "onboarding.steps.publish_status.title": "Rédigez votre premier message",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Personnaliser votre profil",
-  "onboarding.steps.share_profile.body": "Faites savoir à vos ami·e·s comment vous trouver sur Mastodon",
-  "onboarding.steps.share_profile.title": "Partagez votre profil Mastodon",
-  "onboarding.tips.2fa": "<strong>Le saviez-vous ?</strong> Vous pouvez sécuriser votre compte en configurant l'authentification à deux facteurs dans les paramètres de votre compte. Il fonctionne avec n'importe quelle application TOTP de votre choix, sans numéro de téléphone nécessaire !",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Le saviez-vous ?</strong> Puisque Mastodon est décentralisé, certains profils que vous rencontrez seront hébergés sur des serveurs autres que les vôtres. Et pourtant, vous pouvez interagir avec eux ! Leur serveur est dans la seconde moitié de leur nom d'utilisateur !",
-  "onboarding.tips.migration": "<strong>Le saviez-vous ?</strong> Si vous avez l'impression que {domain} n'est pas un bon choix de serveur pour vous dans le futur, vous pouvez vous déplacer sur un autre serveur Mastodon sans perdre vos abonnés. Vous pouvez même héberger votre propre serveur!",
-  "onboarding.tips.verification": "<strong>Le saviez-vous ?</strong> Vous pouvez vérifier votre compte en mettant un lien vers votre profil Mastodon sur votre propre site web et en ajoutant le site à votre profil. Pas de frais ou de documents nécessaires !",
   "password_confirmation.exceeds_maxlength": "La confirmation du mot de passe dépasse la longueur du mot de passe",
   "password_confirmation.mismatching": "Les deux mots de passe ne correspondent pas",
   "picture_in_picture.restore": "Remettre en place",
@@ -848,6 +860,7 @@
   "upload_form.description": "Décrire pour les malvoyant·e·s",
   "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
   "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.",
+  "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.",
   "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.",
   "upload_form.edit": "Modifier",
   "upload_form.thumbnail": "Changer la vignette",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index a5e8f924d..5d990090c 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "De opfrege side kin net fûn wurde. Binne jo wis dat de URL yn de adresbalke goed is?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Slute",
-  "bundle_modal_error.message": "Der gie wat mis by it laden fan dizze komponint.",
   "bundle_modal_error.retry": "Opnij probearje",
   "closed_registrations.other_server_instructions": "Omdat Mastodon desintralisearre is, kinne jo in account meitsje op in oare server en noch hieltyd ynteraksje hawwe mei dizze.",
   "closed_registrations_modal.description": "It oanmeitsjen fan in account op {domain} is op dit stuit net mooglik, mar hâld asjebleaft yn gedachten dat jo gjin account spesifyk op {domain} nedich hawwe om Mastodon te brûken.",
@@ -213,10 +212,6 @@
   "disabled_account_banner.text": "Jo account {disabledAccount} is op dit stuit útskeakele.",
   "dismissable_banner.community_timeline": "Dit binne de meast resinte iepenbiere berjochten fan accounts op {domain}.",
   "dismissable_banner.dismiss": "Slute",
-  "dismissable_banner.explore_links": "Dizze nijsberjochten winne oan populariteit op dizze en oare servers binnen it desintrale netwurk.",
-  "dismissable_banner.explore_statuses": "Dizze berjochten winne oan populariteit op dizze en oare servers binnen it desintrale netwurk. Nijere berjochten mei mear boosts en favoriten stean heger.",
-  "dismissable_banner.explore_tags": "Dizze hashtags winne oan populariteit op dizze en oare servers binnen it desintrale netwurk.",
-  "dismissable_banner.public_timeline": "Dit binne de meast resinte iepenbiere berjochten fan accounts op it sosjale web dy’t troch minsken op {domain} folge wurde.",
   "domain_block_modal.block": "Server blokkearje",
   "domain_block_modal.block_account_instead": "Yn stee hjirfan {name} blokkearje",
   "domain_block_modal.they_can_interact_with_old_posts": "Minsken op dizze server kinne ynteraksje hawwe mei jo âlde berjochten.",
@@ -604,44 +599,17 @@
   "notifications_permission_banner.enable": "Desktopmeldingen ynskeakelje",
   "notifications_permission_banner.how_to_control": "Om meldingen te ûntfangen wannear’t Mastodon net iepen stiet. Jo kinne krekt bepale hokker soarte fan ynteraksjes wol of gjin desktopmeldingen jouwe fia de boppesteande {icon} knop.",
   "notifications_permission_banner.title": "Mis neat",
-  "onboarding.action.back": "Bring my tebek",
-  "onboarding.actions.back": "Bring my tebek",
-  "onboarding.actions.go_to_explore": "De aktuele trends besjen",
-  "onboarding.actions.go_to_home": "Gean nei jo startside",
-  "onboarding.compose.template": "Hallo #Mastodon!",
   "onboarding.follows.empty": "Spitigernôch kinne op dit stuit gjin resultaten toand wurde. Jo kinne probearje te sykjen of te blêdzjen troch de ferkenningsside om minsken te finen dy’t jo folgje kinne, of probearje it letter opnij.",
-  "onboarding.follows.lead": "Jo beheare jo eigen startside. Hoe mear minsken jo folgje, hoe aktiver en ynteressanter it wêze sil. Dizze profilen kinne in goed startpunt wêze, jo kinne se letter altyd ûntfolgje!",
-  "onboarding.follows.title": "Populêr op Mastodon",
   "onboarding.profile.discoverable": "Meitsje myn profyl te finen",
   "onboarding.profile.discoverable_hint": "Wannear’t jo akkoard gean mei it te finen wêzen op Mastodon, ferskine jo berjochten yn sykresultaten en kinne se trending wurde, en jo profyl kin oan oare minsken oanrekommandearre wurde wannear’t se fergelykbere ynteressen hawwe.",
   "onboarding.profile.display_name": "Werjeftenamme",
   "onboarding.profile.display_name_hint": "Jo folsleine namme of in aardige bynamme…",
-  "onboarding.profile.lead": "Jo kinne dit letter altyd oanfolje yn de ynstellingen, wêr’t noch mear oanpassingsopsjes beskikber binne.",
   "onboarding.profile.note": "Biografy",
   "onboarding.profile.note_hint": "Jo kinne oare minsken @fermelde of #hashtags brûke…",
   "onboarding.profile.save_and_continue": "Bewarje en trochgean",
   "onboarding.profile.title": "Profyl ynstelle",
   "onboarding.profile.upload_avatar": "Profylfoto oplade",
   "onboarding.profile.upload_header": "Omslachfoto foar profyl oplade",
-  "onboarding.share.lead": "Lit minsken witte hoe’t se jo fine kinne op Mastodon!",
-  "onboarding.share.message": "Ik bin {username} op #Mastodon! Folgje my op {url}",
-  "onboarding.share.next_steps": "Mooglike folgjende stappen:",
-  "onboarding.share.title": "Jo profyl diele",
-  "onboarding.start.lead": "Jo nije Mastodon-account stiet klear. Sa helje jo der it beste út:",
-  "onboarding.start.skip": "Wolle jo daliks trochgean?",
-  "onboarding.start.title": "It is jo slagge!",
-  "onboarding.steps.follow_people.body": "Jo beheare jo eigen nijsstream. Litte wy it folje mei ynteressante minsken.",
-  "onboarding.steps.follow_people.title": "Folgje {count, plural, one {ien persoan} other {# minsken}}",
-  "onboarding.steps.publish_status.body": "Sis hallo tsjin de wrâld.",
-  "onboarding.steps.publish_status.title": "Meitsje jo earste berjocht",
-  "onboarding.steps.setup_profile.body": "Oaren sille earder mei jo yn kontakt komme as jo wat oer josels fertelle.",
-  "onboarding.steps.setup_profile.title": "Pas jo profyl oan",
-  "onboarding.steps.share_profile.body": "Lit jo freonen witte hoe’t jo te finen binne op Mastodon!",
-  "onboarding.steps.share_profile.title": "Jo profyl diele",
-  "onboarding.tips.2fa": "<strong>Wisten jo dit al?</strong> Jo kinne de befeiliging fan jo account ferheegje troch twa-staps-autentikaasje yn te stellen yn jo accountynstellingen. Derfoar is gjin telefoannûmer nedich en it funksjonearret mei elke TOTP-app!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Witte jo?</strong> Mastodon desintralisearre is en guon profilen dy’t jo tsjinkomme, stean op oare servers as dy fan jo. En dochs kinne jo sûnder problemen mei harren kommunisearje! Harren server stiet yn de twadde helte fan harren brûkersnamme!",
-  "onboarding.tips.migration": "<strong>Wisten jo dit al?</strong> Wannear’t jo it gefoel hawwe, dat {domain} yn de takomst net de krekte serverkar foar jo is, kinne jo nei elk oare Mastodon-Server wikselje, sûnder jo folgers te ferliezen. Jo kinne sels jo eigen server hoste!",
-  "onboarding.tips.verification": "<strong>Wisten jo dit al?</strong> Jo kinne jo account ferifiearje, troch op jo website in keppeling te pleatsen nei jo Mastodon-profyl en de website oan jo profyl ta te foegjen. Gjin kosten of dokuminten nedich!",
   "password_confirmation.exceeds_maxlength": "Wachtwurdbefêstiging giet oer de maksimale wachtwurdlingte",
   "password_confirmation.mismatching": "Wachtwurdbefêstiging komt net oerien",
   "picture_in_picture.restore": "Tebeksette",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 31418c8e7..979490ca4 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Ní féidir teacht ar an leathanach a iarradh. An bhfuil tú cinnte go bhfuil an URL sa seoladh i gceart?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Dún",
-  "bundle_modal_error.message": "Chuaigh rud éigin mícheart nuair a bhí an chomhpháirt seo ag lódáil.",
+  "bundle_modal_error.message": "Tharla earráid agus an scáileán seo á lódáil.",
   "bundle_modal_error.retry": "Bain triail as arís",
   "closed_registrations.other_server_instructions": "Mar rud díláraithe Mastodon, is féidir leat cuntas a chruthú ar seirbheálaí eile ach fós idirghníomhaigh leis an ceann seo.",
   "closed_registrations_modal.description": "Ní féidir cuntas a chruthú ar {domain} faoi láthair, ach cuimhnigh nach gá go mbeadh cuntas agat go sonrach ar {domain} chun Mastodon a úsáid.",
@@ -140,13 +140,16 @@
   "column.blocks": "Cuntais choiscthe",
   "column.bookmarks": "Leabharmharcanna",
   "column.community": "Amlíne áitiúil",
+  "column.create_list": "Cruthaigh liosta",
   "column.direct": "Luann príobháideach",
   "column.directory": "Brabhsáil próifílí",
   "column.domain_blocks": "Fearainn bhactha",
+  "column.edit_list": "Cuir liosta in eagar",
   "column.favourites": "Ceanáin",
   "column.firehose": "Fothaí beo",
   "column.follow_requests": "Iarratais leanúnaí",
   "column.home": "Baile",
+  "column.list_members": "Bainistigh baill liosta",
   "column.lists": "Liostaí",
   "column.mutes": "Úsáideoirí balbhaithe",
   "column.notifications": "Fógraí",
@@ -159,6 +162,7 @@
   "column_header.pin": "Pionna",
   "column_header.show_settings": "Taispeáin socruithe",
   "column_header.unpin": "Bain pionna",
+  "column_search.cancel": "Cealaigh",
   "column_subheading.settings": "Socruithe",
   "community.column_settings.local_only": "Áitiúil amháin",
   "community.column_settings.media_only": "Meáin Amháin",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "Tá do chuntas {disabledAccount} díchumasaithe faoi láthair.",
   "dismissable_banner.community_timeline": "Seo iad na postála is déanaí ó dhaoine le cuntais ar {domain}.",
   "dismissable_banner.dismiss": "Diúltaigh",
-  "dismissable_banner.explore_links": "Tá na scéalta nuachta seo á phlé anseo agus ar fhreastalaithe eile ar an líonra díláraithe faoi láthair.",
-  "dismissable_banner.explore_statuses": "Is postálacha iad seo ó ar fud an ghréasáin shóisialta atá ag éirí níos tarraingtí inniu. Rangaítear poist níos nuaí le níos mó teanntáin agus ceanáin níos airde.",
-  "dismissable_banner.explore_tags": "Is hashtags iad seo atá ag tarraingt ar an ngréasán sóisialta inniu. Tá na hashtags a úsáideann níos mó daoine difriúla rangaithe níos airde.",
-  "dismissable_banner.public_timeline": "Seo iad na postálacha poiblí is déanaí ó dhaoine ar an ngréasán sóisialta a leanann daoine ar {domain}.",
+  "dismissable_banner.explore_links": "Is iad na scéalta nuachta seo is mó atá á roinnt ar an lá inniu. Rangaítear scéalta nuachta níos nuaí arna bpostáil ag daoine éagsúla níos airde.",
+  "dismissable_banner.explore_statuses": "Tá tarraingt ag teacht ar na poist seo ó gach cearn den fhealsúnacht inniu. Rangaítear poist níos nuaí le níos mó teanntáin agus ceanáin níos airde.",
+  "dismissable_banner.explore_tags": "Tá tarraingt ag na hashtags seo ar an bhfeadóg mhór inniu. Tá na hashtags a úsáideann níos mó daoine difriúla rangaithe níos airde.",
+  "dismissable_banner.public_timeline": "Seo iad na postálacha poiblí is déanaí ó dhaoine ar an bhfealsúnacht a leanann daoine ar {domain}.",
   "domain_block_modal.block": "Bloc freastalaí",
   "domain_block_modal.block_account_instead": "Cuir bac ar @{name} ina ionad sin",
   "domain_block_modal.they_can_interact_with_old_posts": "Is féidir le daoine ón bhfreastalaí seo idirghníomhú le do sheanphoist.",
@@ -359,6 +363,7 @@
   "footer.status": "Stádas",
   "generic.saved": "Sábháilte",
   "getting_started.heading": "Ag tosú amach",
+  "hashtag.admin_moderation": "Oscail comhéadan modhnóireachta le haghaidh #{name}",
   "hashtag.column_header.tag_mode.all": "agus {additional}",
   "hashtag.column_header.tag_mode.any": "nó {additional}",
   "hashtag.column_header.tag_mode.none": "gan {additional}",
@@ -464,11 +469,32 @@
   "link_preview.author": "Le {name}",
   "link_preview.more_from_author": "Tuilleadh ó {name}",
   "link_preview.shares": "{count, plural, one {{counter} post} other {{counter} poist}}",
+  "lists.add_member": "Cuir",
+  "lists.add_to_list": "Cuir leis an liosta",
+  "lists.add_to_lists": "Cuir {name} le liostaí",
+  "lists.create": "Cruthaigh",
+  "lists.create_a_list_to_organize": "Cruthaigh liosta nua chun d'fhotha Baile a eagrú",
+  "lists.create_list": "Cruthaigh liosta",
   "lists.delete": "Scrios liosta",
+  "lists.done": "Déanta",
   "lists.edit": "Cuir an liosta in eagar",
+  "lists.exclusive": "Folaigh baill sa Bhaile",
+  "lists.exclusive_hint": "Má tá duine ar an liosta seo, cuir i bhfolach iad i do fhotha Baile ionas nach bhfeicfidh tú a bpoist faoi dhó.",
+  "lists.find_users_to_add": "Aimsigh úsáideoirí le cur leis",
+  "lists.list_members": "Liostaigh baill",
+  "lists.list_members_count": "{count, plural, one {# ball} two {# bhall} few {# baill} many {# baill} other {# baill}}",
+  "lists.list_name": "Ainm an liosta",
+  "lists.new_list_name": "Ainm liosta nua",
+  "lists.no_lists_yet": "Níl aon liostaí fós.",
+  "lists.no_members_yet": "Níl aon bhall fós.",
+  "lists.no_results_found": "Níor aimsíodh aon torthaí.",
+  "lists.remove_member": "Bain",
   "lists.replies_policy.followed": "Úsáideoir ar bith atá á leanúint",
   "lists.replies_policy.list": "Baill an liosta",
   "lists.replies_policy.none": "Duine ar bith",
+  "lists.save": "Sábháil",
+  "lists.search_placeholder": "Cuardaigh daoine a leanann tú",
+  "lists.show_replies_to": "Cuir san áireamh freagraí ó bhaill an liosta go",
   "load_pending": "{count, plural, one {# mír nua} two {# mír nua} few {# mír nua} many {# mír nua} other {# mír nua}}",
   "loading_indicator.label": "Á lódáil…",
   "media_gallery.hide": "Folaigh",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Ceadaigh fógraí ar an deasc",
   "notifications_permission_banner.how_to_control": "Chun fógraí a fháil nuair nach bhfuil Mastodon oscailte, cumasaigh fógraí deisce. Is féidir leat a rialú go beacht cé na cineálacha idirghníomhaíochtaí a ghineann fógraí deisce tríd an gcnaipe {icon} thuas nuair a bhíonn siad cumasaithe.",
   "notifications_permission_banner.title": "Ná caill aon rud go deo",
-  "onboarding.action.back": "Tóg ar ais mé",
-  "onboarding.actions.back": "Tóg ar ais mé",
-  "onboarding.actions.go_to_explore": "Tóg mé chun trending",
-  "onboarding.actions.go_to_home": "Tóg go dtí mo bheathú baile mé",
-  "onboarding.compose.template": "Dia duit #Mastodon!",
+  "onboarding.follows.back": "Ar ais",
+  "onboarding.follows.done": "Déanta",
   "onboarding.follows.empty": "Ar an drochuair, ní féidir aon torthaí a thaispeáint faoi láthair. Is féidir leat triail a bhaint as cuardach nó brabhsáil ar an leathanach taiscéalaíochta chun teacht ar dhaoine le leanúint, nó bain triail eile as níos déanaí.",
-  "onboarding.follows.lead": "Is é do bheathú baile an príomhbhealach chun taithí a fháil ar Mastodon. Dá mhéad daoine a leanann tú, is ea is gníomhaí agus is suimiúla a bheidh sé. Chun tú a chur ar bun, seo roinnt moltaí:",
-  "onboarding.follows.title": "Cuir do chuid fotha baile in oiriúint duit féin",
+  "onboarding.follows.search": "Cuardach",
+  "onboarding.follows.title": "Lean daoine le tosú",
   "onboarding.profile.discoverable": "Déan mo phróifíl a fháil amach",
   "onboarding.profile.discoverable_hint": "Nuair a roghnaíonn tú infhionnachtana ar Mastodon, d’fhéadfadh do phoist a bheith le feiceáil i dtorthaí cuardaigh agus treochtaí, agus d’fhéadfaí do phróifíl a mholadh do dhaoine a bhfuil na leasanna céanna acu leat.",
   "onboarding.profile.display_name": "Ainm taispeána",
   "onboarding.profile.display_name_hint": "D’ainm iomlán nó d’ainm spraíúil…",
-  "onboarding.profile.lead": "Is féidir leat é seo a chomhlánú i gcónaí níos déanaí sna socruithe, áit a bhfuil níos mó roghanna saincheaptha ar fáil.",
   "onboarding.profile.note": "Bith",
   "onboarding.profile.note_hint": "Is féidir leat @ daoine eile a lua nó #hashtags…",
   "onboarding.profile.save_and_continue": "Sábháil agus lean ar aghaidh",
   "onboarding.profile.title": "Socrú próifíle",
   "onboarding.profile.upload_avatar": "Íosluchtaigh pictiúr próifíl",
   "onboarding.profile.upload_header": "Íoslódáil an ceanntásca próifíl",
-  "onboarding.share.lead": "Cuir in iúl do dhaoine conas is féidir leo tú a aimsiú ar Mastodon!",
-  "onboarding.share.message": "Is {username} mé ar #Mastodon! Tar lean mé ag {url}",
-  "onboarding.share.next_steps": "Na chéad chéimeanna eile is féidir:",
-  "onboarding.share.title": "Roinn do phróifíl",
-  "onboarding.start.lead": "Tá tú mar chuid de Mastodon anois, ardán meán sóisialta díláraithe uathúil ina ndéanann tú - ní algartam - do thaithí féin a choimeád. Cuirimis tús leat ar an teorainn shóisialta nua seo:",
-  "onboarding.start.skip": "Nach bhfuil cabhair uait le tosú?",
-  "onboarding.start.title": "Tá sé déanta agat!",
-  "onboarding.steps.follow_people.body": "Is éard atá i gceist le daoine suimiúla a leanúint ná Mastodon.",
-  "onboarding.steps.follow_people.title": "Cuir do chuid fotha baile in oiriúint duit féin",
-  "onboarding.steps.publish_status.body": "Abair heileo leis an domhan le téacs, grianghraif, físeáin nó pobalbhreith {emoji}",
-  "onboarding.steps.publish_status.title": "Déan do chéad phostáil",
-  "onboarding.steps.setup_profile.body": "Cuir le d'idirghníomhaíochtaí trí phróifíl chuimsitheach a bheith agat.",
-  "onboarding.steps.setup_profile.title": "Déan do phróifíl a phearsantú",
-  "onboarding.steps.share_profile.body": "Cuir in iúl do do chairde conas tú a aimsiú ar Mastodon",
-  "onboarding.steps.share_profile.title": "Roinn do phróifíl Mastodon",
-  "onboarding.tips.2fa": "<strong>An raibh a fhios agat?</strong> Is féidir leat do chuntas a dhéanamh slán trí fhíordheimhniú dhá fhachtóir a shocrú i socruithe do chuntais. Oibríonn sé le haon aip TOTP de do rogha féin, níl aon uimhir theileafóin riachtanach!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>An raibh a fhios agat?</strong> Ós rud é go bhfuil Mastodon díláraithe, déanfar roinnt próifílí a dtagann tú trasna orthu a óstáil ar fhreastalaithe seachas do fhreastalaithe. Agus fós is féidir leat idirghníomhú leo gan uaim! Tá an freastalaí acu sa dara leath dá n-ainm úsáideora!",
-  "onboarding.tips.migration": "<strong>An raibh a fhios agat?</strong> Más dóigh leat nach rogha freastalaí iontach é {domain} amach anseo, is féidir leat bogadh go freastalaí Mastodon eile gan do leantóirí a chailliúint. Is féidir leat do fhreastalaí féin a óstáil fiú!",
-  "onboarding.tips.verification": "<strong>An raibh a fhios agat?</strong> Is féidir leat do chuntas a fhíorú trí nasc a chur le do phróifíl Mastodon ar do shuíomh Gréasáin féin agus an suíomh Gréasáin a chur le do phróifíl. Níl aon táillí nó doiciméid riachtanach!",
   "password_confirmation.exceeds_maxlength": "Sáraíonn dearbhú pasfhocail uasfhad an phasfhocail",
   "password_confirmation.mismatching": "Ní hionann dearbhú pasfhocail",
   "picture_in_picture.restore": "Cuir é ar ais",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
index 17dbfc30e..1da6bdcdd 100644
--- a/app/javascript/mastodon/locales/gd.json
+++ b/app/javascript/mastodon/locales/gd.json
@@ -129,7 +129,6 @@
   "bundle_column_error.routing.body": "Cha do lorg sinn an duilleag a dh’iarr thu. A bheil thu cinnteach gu bheil an t-URL ann am bàr an t-seòlaidh mar bu chòir?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Dùin",
-  "bundle_modal_error.message": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.",
   "bundle_modal_error.retry": "Feuch ris a-rithist",
   "closed_registrations.other_server_instructions": "Air sgàth ’s gu bheil Mastodon sgaoilte, ’s urrainn dhut cunntas a chruthachadh air frithealaiche eile agus conaltradh ris an fhrithealaiche seo co-dhiù.",
   "closed_registrations_modal.description": "Cha ghabh cunntas a chruthachadh air {domain} aig an àm seo ach thoir an aire nach fheum thu cunntas air {domain} gu sònraichte airson Mastodon a chleachdadh.",
@@ -232,10 +231,6 @@
   "disabled_account_banner.text": "Tha an cunntas {disabledAccount} agad à comas aig an àm seo.",
   "dismissable_banner.community_timeline": "Seo na postaichean poblach as ùire o dhaoine aig a bheil cunntas air {domain}.",
   "dismissable_banner.dismiss": "Leig seachad",
-  "dismissable_banner.explore_links": "Seo na cinn-naidheachd a tha ’gan co-roinneadh as trice thar an lìona shòisealta an-diugh. Gheibh naidheachdan nas ùire a tha ’gan co-roinneadh le daoine eadar-dhealaichte rangachadh nas àirde.",
-  "dismissable_banner.explore_statuses": "Tha fèill air na postaichean seo a’ fàs thar an lìona shòisealta an-diugh. Gheibh postaichean nas ùire le barrachd brosnaichean is annsachdan rangachadh nas àirde.",
-  "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs air an fhrithealaiche seo is frithealaichean eile dhen lìonra sgaoilte an-diugh. Gheibh tagaichean hais a tha ’gan cleachdadh le daoine eadar-dhealaichte rangachadh nas àirde.",
-  "dismissable_banner.public_timeline": "Seo na postaichean poblach as ùire o dhaoine air an lìonra sòisealta tha ’gan leantainn le daoine air {domain}.",
   "domain_block_modal.block": "Bac am frithealaiche",
   "domain_block_modal.block_account_instead": "Bac @{name} ’na àite",
   "domain_block_modal.they_can_interact_with_old_posts": "’S urrainn do dhaoine a th’ air an fhrithealaiche seo eadar-ghabhail leis na seann-phostaichean agad.",
@@ -625,44 +620,17 @@
   "notifications_permission_banner.enable": "Cuir brathan deasga an comas",
   "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.",
   "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh",
-  "onboarding.action.back": "Air ais leam",
-  "onboarding.actions.back": "Air ais leam",
-  "onboarding.actions.go_to_explore": "Thoir dha na treandaichean mi",
-  "onboarding.actions.go_to_home": "Thoir dhachaigh mi",
-  "onboarding.compose.template": "Shin thu, a #Mhastodon!",
   "onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.",
-  "onboarding.follows.lead": "’S e do prìomh-doras do Mhastodon a th’ ann san dachaigh. Mar as motha an t-uiread de dhaoine a leanas tu ’s ann nas beòthaile inntinniche a bhios i. Seo moladh no dhà dhut airson tòiseachadh:",
-  "onboarding.follows.title": "Cuir dreach pearsanta air do dhachaigh",
   "onboarding.profile.discoverable": "Bu mhath leam gun gabh a’ phròifil agam a rùrachadh",
   "onboarding.profile.discoverable_hint": "Ma chuir thu romhad gun gabh a’ phròifil agad a rùrachadh air Mastodon, faodaidh na postaichean agad nochdadh ann an toraidhean luirg agus treandaichean agus dh’fhaoidte gun dèid a’ phròifil agad a mholadh dhan fheadhainn aig a bheil ùidhean coltach ri d’ ùidhean-sa.",
   "onboarding.profile.display_name": "Ainm-taisbeanaidh",
   "onboarding.profile.display_name_hint": "D’ ainm slàn no spòrsail…",
-  "onboarding.profile.lead": "’S urrainn dhut seo a choileanadh uair sam bith eile sna roghainnean far am bi roghainnean gnàthachaidh eile ri làimh dhut cuideachd.",
   "onboarding.profile.note": "Cunntas-beatha",
   "onboarding.profile.note_hint": "’S urrainn dhut @iomradh a thoirt air càch no air #tagaicheanHais…",
   "onboarding.profile.save_and_continue": "Sàbhail ’s lean air adhart",
   "onboarding.profile.title": "Suidheachadh na pròifile",
   "onboarding.profile.upload_avatar": "Luchdaich suas dealbh na pròifil",
   "onboarding.profile.upload_header": "Luchdaich suas bann-cinn na pròifil",
-  "onboarding.share.lead": "Innis do dhaoine mar a gheibh iad grèim ort air Mastodon!",
-  "onboarding.share.message": "Is mise {username} air #Mastodon! Thig ’gam leantainn air {url}",
-  "onboarding.share.next_steps": "Ceuman eile as urrainn dhut gabhail:",
-  "onboarding.share.title": "Co-roinn a’ phròifil agad",
-  "onboarding.start.lead": "Tha thu ’nad bhall de Mhastodon a-nis, seo ùrlar mheadhanan sòisealta sònraichte sgaoilte far am bi na chì thu an urra riut fhèin seach an urra ri algairim. Seo dhut toiseach-tòiseachaidh air an àrainneachd ùr:",
-  "onboarding.start.skip": "Nach eil thu feumach air taic airson tòiseachadh?",
-  "onboarding.start.title": "Rinn thu a’ chùis air!",
-  "onboarding.steps.follow_people.body": "Tha leantainn dhaoine inntinneach air cridhe Mhastodon.",
-  "onboarding.steps.follow_people.title": "Cuir dreach pearsanta air do dhachaigh",
-  "onboarding.steps.publish_status.body": "Cuir an aithne air an t-saoghal le teacsa, dealbhan, videothan no cunntasan-bheachd {emoji}",
-  "onboarding.steps.publish_status.title": "Dèan a’ chiad phost agad",
-  "onboarding.steps.setup_profile.body": "Brosnaich an conaltradh a gheibh thu le pròifil shlàn.",
-  "onboarding.steps.setup_profile.title": "Gnàthaich a’ phròifil agad",
-  "onboarding.steps.share_profile.body": "Leig fios dha do charaidean mar a gheibh iad lorg ort air Mastodon",
-  "onboarding.steps.share_profile.title": "Co-roinn a’ phròifil Mastodon agad",
-  "onboarding.tips.2fa": "<strong>An robh fios agad?</strong> ’S urrainn dhut an cunntas agad a dhìon is tu a’ suidheachadh dearbhadh dà-cheumnach ann an roghainnean a’ chunntais agad. Obraichidh e le aplacaid dearbhaidh dhà-cheumnaich sam bith a thogras tu gun fheum air àireamh fòn!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>An robh fios agad?</strong> On a tha Mastodon sgaoilte, tachraidh tu air pròifilean a tha ’gan òstadh air frithealaichean eile. ’S urrainn dhut bruidhinn riutha gun chnap-starra co-dhiù! ’S e ainm an fhrithealaiche a tha san dàrna leth dhen ainm-chleachdaiche aca!",
-  "onboarding.tips.migration": "<strong>An robh fios agad?</strong> Ma thig an latha nach eil thu toilichte le {domain} mar an fhrithealaiche agad tuilleadh, ’s urrainn dhut imrich gu frithealaiche Mastodon eile gun a bhith a’ call an luchd-leantainn agad. ’S urrainn dhut fiù frithealaiche agad fhèin òstadh!",
-  "onboarding.tips.verification": "<strong>An robh fios agad?</strong> ’S urrainn dhut an cunntas agad a dhearbhadh. Cuir ceangal ris a’ phròifil Mastodon air an làrach-lìn agad fhèin agus cuir an làrach-lìn ris a’ phròifil agad an uairsin. Cha bhi feum air pàigheadh no sgrìobhainnean!",
   "password_confirmation.exceeds_maxlength": "Tha dearbhadh an fhacail-fhaire nas fhaide na tha ceadaichte do dh’faclan-faire",
   "password_confirmation.mismatching": "Chan eil an dearbhadh co-ionnan ris an fhacal-fhaire",
   "picture_in_picture.restore": "Thoir air ais e",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index e77aaade6..1435969a8 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -87,10 +87,10 @@
   "alert.unexpected.title": "Vaites!",
   "alt_text_badge.title": "Texto Alt",
   "announcement.announcement": "Anuncio",
-  "annual_report.summary.archetype.booster": "A axencia de noticias",
+  "annual_report.summary.archetype.booster": "O Telexornal",
   "annual_report.summary.archetype.lurker": "Volleur",
-  "annual_report.summary.archetype.oracle": "Sabichón/e",
-  "annual_report.summary.archetype.pollster": "O INE",
+  "annual_report.summary.archetype.oracle": "Sabichón",
+  "annual_report.summary.archetype.pollster": "I.G.E.",
   "annual_report.summary.archetype.replier": "Lareteire",
   "annual_report.summary.followers.followers": "seguidoras",
   "annual_report.summary.followers.total": "{count} en total",
@@ -104,6 +104,7 @@
   "annual_report.summary.most_used_hashtag.none": "Nada",
   "annual_report.summary.new_posts.new_posts": "novas publicacións",
   "annual_report.summary.percentile.text": "<topLabel>Sitúante no top</topLabel><percentage></percentage><bottomLabel> das usuarias de Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Moito tes que contarnos!",
   "annual_report.summary.thanks": "Grazas por ser parte de Mastodon!",
   "attachments_list.unprocessed": "(sen procesar)",
   "audio.hide": "Agochar audio",
@@ -128,7 +129,7 @@
   "bundle_column_error.routing.body": "Non atopamos a páxina solicitada. Tes a certeza de que o URL na barra de enderezos é correcto?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Pechar",
-  "bundle_modal_error.message": "Ocorreu un erro ó cargar este compoñente.",
+  "bundle_modal_error.message": "Algo fallou mentras cargaba esta páxina.",
   "bundle_modal_error.retry": "Téntao de novo",
   "closed_registrations.other_server_instructions": "Cómo Mastodon é descentralizado, podes crear unha conta noutro servidor e interactuar igualmente con este.",
   "closed_registrations_modal.description": "Actualmente non é posible crear unha conta en {domain}, pero ten en conta que non precisas unha conta específicamente en {domain} para usar Mastodon.",
@@ -139,13 +140,16 @@
   "column.blocks": "Usuarias bloqueadas",
   "column.bookmarks": "Marcadores",
   "column.community": "Cronoloxía local",
+  "column.create_list": "Crear lista",
   "column.direct": "Mencións privadas",
   "column.directory": "Procurar perfís",
   "column.domain_blocks": "Dominios agochados",
+  "column.edit_list": "Editar lista",
   "column.favourites": "Favoritas",
   "column.firehose": "O que acontece",
   "column.follow_requests": "Peticións de seguimento",
   "column.home": "Inicio",
+  "column.list_members": "Xestionar membros da lista",
   "column.lists": "Listaxes",
   "column.mutes": "Usuarias acaladas",
   "column.notifications": "Notificacións",
@@ -158,6 +162,7 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Amosar axustes",
   "column_header.unpin": "Desapegar",
+  "column_search.cancel": "Cancelar",
   "column_subheading.settings": "Axustes",
   "community.column_settings.local_only": "Só local",
   "community.column_settings.media_only": "Só multimedia",
@@ -231,10 +236,10 @@
   "disabled_account_banner.text": "Actualmente a túa conta {disabledAccount} está desactivada.",
   "dismissable_banner.community_timeline": "Estas son as publicacións máis recentes das persoas que teñen a súa conta en {domain}.",
   "dismissable_banner.dismiss": "Desbotar",
-  "dismissable_banner.explore_links": "Estas son as novas historias más compartidas hoxe na web social. Aparecen primeiro as novas compartidas por máis persoas diferentes.",
-  "dismissable_banner.explore_statuses": "Estas son as publicacións da web social que hoxe están gañando popularidade. As publicacións con máis promocións e favorecemento teñen puntuación máis alta.",
-  "dismissable_banner.explore_tags": "Estes cancelos están gañando popularidade entre as persoas deste servidor e noutros servidores da rede descentralizada.",
-  "dismissable_banner.public_timeline": "Estas son as publicacións públicas máis recentes das persoas que as usuarias de {domain} están a seguir.",
+  "dismissable_banner.explore_links": "Estas son as historias de novas que máis se están compartindo hoxe no fediverso. As historias máis recentes compartidas por máis persoas móstranse máis arriba.",
+  "dismissable_banner.explore_statuses": "Estas publicacións do fediverso están hoxe gañando popularidade. As publicacións máis recentes con máis promocións e favorecementos móstranse máis arriba.",
+  "dismissable_banner.explore_tags": "Estes cancelos están gañando popularidade hoxe no fediverso. Os cancelos utilizados por máis persoas móstranse máis arriba.",
+  "dismissable_banner.public_timeline": "Estas son as publicacións públicas más recentes das persoas do fediverso seguidas por persoas de {domain}.",
   "domain_block_modal.block": "Bloquear servidor",
   "domain_block_modal.block_account_instead": "Prefiro bloquear a @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "As persoas deste servidor poden interactuar coas túas publicacións antigas.",
@@ -358,6 +363,7 @@
   "footer.status": "Estado",
   "generic.saved": "Gardado",
   "getting_started.heading": "Primeiros pasos",
+  "hashtag.admin_moderation": "Abrir interface de moderación para ##{name}",
   "hashtag.column_header.tag_mode.all": "e {additional}",
   "hashtag.column_header.tag_mode.any": "ou {additional}",
   "hashtag.column_header.tag_mode.none": "sen {additional}",
@@ -463,11 +469,32 @@
   "link_preview.author": "Por {name}",
   "link_preview.more_from_author": "Máis de {name}",
   "link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}",
+  "lists.add_member": "Engadir",
+  "lists.add_to_list": "Engadir á lista",
+  "lists.add_to_lists": "Engadir {name} ás listas",
+  "lists.create": "Crear",
+  "lists.create_a_list_to_organize": "Crear unha nova lista para organizar o teu Inicio",
+  "lists.create_list": "Crear lista",
   "lists.delete": "Eliminar listaxe",
+  "lists.done": "Feito",
   "lists.edit": "Editar listaxe",
+  "lists.exclusive": "Ocultar membros no Inicio",
+  "lists.exclusive_hint": "Se alguén está nesta lista non aparerá na cronoloxía de Inicio para evitar duplicidades das publicacións.",
+  "lists.find_users_to_add": "Buscar persoas que engadir",
+  "lists.list_members": "Membros da lista",
+  "lists.list_members_count": "{count, plural, one {# membro} other {# membros}}",
+  "lists.list_name": "Nome da lista",
+  "lists.new_list_name": "Novo nome da lista",
+  "lists.no_lists_yet": "Aínda non hai listas.",
+  "lists.no_members_yet": "Aínda non hai membros.",
+  "lists.no_results_found": "Non se atoparon resultados.",
+  "lists.remove_member": "Retirar",
   "lists.replies_policy.followed": "Calquera usuaria que siga",
   "lists.replies_policy.list": "Membros da lista",
   "lists.replies_policy.none": "Ninguén",
+  "lists.save": "Gardar",
+  "lists.search_placeholder": "Buscar persoas que segues",
+  "lists.show_replies_to": "Incluír respostas dos membros das listas a",
   "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}",
   "loading_indicator.label": "Estase a cargar…",
   "media_gallery.hide": "Agochar",
@@ -624,44 +651,21 @@
   "notifications_permission_banner.enable": "Activar notificacións de escritorio",
   "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.",
   "notifications_permission_banner.title": "Non perder nada",
-  "onboarding.action.back": "Lévame de volta",
-  "onboarding.actions.back": "Lévame de volta",
-  "onboarding.actions.go_to_explore": "Mira do que se está a falar",
-  "onboarding.actions.go_to_home": "Vai á cronoloxía de inicio",
-  "onboarding.compose.template": "Ola #Mastodon!",
+  "onboarding.follows.back": "Volver",
+  "onboarding.follows.done": "Feito",
   "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.",
-  "onboarding.follows.lead": "A cronoloxía de Inicio é o principal xeito de desfrutar Mastodon. Cantas máis persoas sigas mais interesante e activa será. Para comezar, aquí tes algunhas suxestións:",
-  "onboarding.follows.title": "Personaliza a cronoloxía de inicio",
+  "onboarding.follows.search": "Buscar",
+  "onboarding.follows.title": "Comeza seguindo algunhas persoas",
   "onboarding.profile.discoverable": "Que o meu perfil se poida atopar",
   "onboarding.profile.discoverable_hint": "Cando elixes que poidan atoparte en Mastodon as túas publicacións aparecerán nos resultados das buscas e nos temas en voga, e o teu perfil podería ser suxerido para seguimento a persoas con intereses semellantes aos teus.",
   "onboarding.profile.display_name": "Nome público",
   "onboarding.profile.display_name_hint": "O teu nome completo ou un nome divertido…",
-  "onboarding.profile.lead": "Sempre poderás incluír esta información mais tarde nos axustes, onde terás máis opcións dispoñibles.",
   "onboarding.profile.note": "Acerca de ti",
   "onboarding.profile.note_hint": "Podes @mencionar a outras persoas ou usar #cancelos…",
   "onboarding.profile.save_and_continue": "Gardar e continuar",
   "onboarding.profile.title": "Configuración do perfil",
   "onboarding.profile.upload_avatar": "Subir imaxe do perfil",
   "onboarding.profile.upload_header": "Subir cabeceira para o perfil",
-  "onboarding.share.lead": "Fai que as persoas saiban como atoparte en Mastodon!",
-  "onboarding.share.message": "Son {username} en #Mastodon! Sígueme en {url}",
-  "onboarding.share.next_steps": "Seguintes pasos:",
-  "onboarding.share.title": "Comparte o teu perfil",
-  "onboarding.start.lead": "Xa formas parte de Mastodon, unha plataforma de relacións sociais descentralizada, única, onde ti —e non un algoritmo— elixes o que les. Axudámosche cos primeiros pasos:",
-  "onboarding.start.skip": "Queres omitir todo isto?",
-  "onboarding.start.title": "Pois xa está!",
-  "onboarding.steps.follow_people.body": "Mastodon consiste en seguir a persoas interesantes.",
-  "onboarding.steps.follow_people.title": "Personaliza a túa cronoloxía",
-  "onboarding.steps.publish_status.body": "Exprésate con texto, fotos, vídeos ou enquisas {emoji}",
-  "onboarding.steps.publish_status.title": "Escribe a túa primeira publicación",
-  "onboarding.steps.setup_profile.body": "Ao engadir información ao teu perfil é máis probable que teñas máis interaccións.",
-  "onboarding.steps.setup_profile.title": "Personaliza o perfil",
-  "onboarding.steps.share_profile.body": "Dille ás amizades como poden atoparte en Mastodon.",
-  "onboarding.steps.share_profile.title": "Comparte o teu perfil en Mastodon",
-  "onboarding.tips.2fa": "<strong>Sabes que?</strong> Podes protexer a túa conta configurando un segundo factor de autenticación nos axustes. Funciona con calquera app TOTP, non precisas un número de teléfono!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Sabes que?</strong> Como Mastodon é descentralizado, algúns perfís que atopes estarán en servidores diferentes ao teu. Pero podes interactuar igualmente con eles! O seu servidor é o que ven despois da @ no seu identificador!",
-  "onboarding.tips.migration": "<strong>Sabes que?</strong> Se cres que {domain} non é o servidor axeitado para ti, podes mover a conta a outro servidor Mastodon sen perder as túas seguidoras. Incluso podes hospedar o teu propio servidor!",
-  "onboarding.tips.verification": "<strong>Sabes que?</strong> Podes verificar a túa conta poñendo unha ligazón ao teu perfil en Mastodon no teu sitio web e engadindo esa web ao teu perfil. Non hai que pagar nada nin presentar documentos!",
   "password_confirmation.exceeds_maxlength": "A lonxitude do contrasinal de confirmación excede o máximo permitido",
   "password_confirmation.mismatching": "O contrasinal de confirmación non concorda",
   "picture_in_picture.restore": "Devolver",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 57f0ee9e5..8d689404e 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -1,5 +1,5 @@
 {
-  "about.blocks": "שרתים מוגבלים",
+  "about.blocks": "שרתים תחת פיקוח תוכן",
   "about.contact": "יצירת קשר:",
   "about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.",
   "about.domain_blocks.no_reason_available": "הסיבה אינה זמינה",
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "העמוד המבוקש לא נמצא. האם ה־URL נכון?",
   "bundle_column_error.routing.title": "שגיאה 404: הדף לא נמצא",
   "bundle_modal_error.close": "לסגור",
-  "bundle_modal_error.message": "משהו השתבש בעת טעינת הרכיב הזה.",
+  "bundle_modal_error.message": "משהו השתבש בעת טעינת המסך הזה.",
   "bundle_modal_error.retry": "לנסות שוב",
   "closed_registrations.other_server_instructions": "מכיוון שמסטודון היא רשת מבוזרת, ניתן ליצור חשבון על שרת נוסף ועדיין לקיים קשר עם משתמשים בשרת זה.",
   "closed_registrations_modal.description": "יצירת חשבון על שרת {domain} איננה אפשרית כרגע, אבל זכרו שאינכן זקוקות לחשבון על {domain} כדי להשתמש במסטודון.",
@@ -162,6 +162,7 @@
   "column_header.pin": "הצמדה",
   "column_header.show_settings": "הצגת העדפות",
   "column_header.unpin": "שחרור הצמדה",
+  "column_search.cancel": "ביטול",
   "column_subheading.settings": "הגדרות",
   "community.column_settings.local_only": "מקומי בלבד",
   "community.column_settings.media_only": "מדיה בלבד",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "חשבונך {disabledAccount} אינו פעיל כרגע.",
   "dismissable_banner.community_timeline": "אלו הם החצרוצים הציבוריים האחרונים מהמשתמשים על שרת {domain}.",
   "dismissable_banner.dismiss": "בטל",
-  "dismissable_banner.explore_links": "אלו הקישורים האחרונים ששותפו על ידי משתמשים ששרת זה רואה ברשת המבוזרת כרגע.",
+  "dismissable_banner.explore_links": "ידיעות החדשות האלו שותפו במיוחד על ידי משתמשים ששרת זה רואה ברשת המבוזרת כרגע. ידיעות עדכניות יותר ששותפו על ידי יותר אנשים שונים מדורגות גבוה יותר.",
   "dismissable_banner.explore_statuses": "אלו הודעות משרת זה ואחרים ברשת המבוזרת שצוברות חשיפה היום. הודעות חדשות יותר עם יותר הדהודים וחיבובים מדורגות גבוה יותר.",
-  "dismissable_banner.explore_tags": "התגיות האלו, משרת זה ואחרים ברשת המבוזרת, צוברות חשיפה כעת.",
-  "dismissable_banner.public_timeline": "אלו ההודעות האחרונות שהתקבלו מהמשתמשים שנעקבים על ידי משתמשים מ־{domain}.",
+  "dismissable_banner.explore_tags": "התגיות האלו, משרת זה ואחרים ברשת המבוזרת, צוברות חשיפה כעת. תגיות בשימוש נרחב יותר מדורגות גבוה יותר.",
+  "dismissable_banner.public_timeline": "אלו ההודעות האחרונות שהתקבלו מהמשתמשיםות ברשת המבוזרת, אשר משתמשיםות ב־{domain} עוקביםות אחריהםן.",
   "domain_block_modal.block": "חסימת שרת",
   "domain_block_modal.block_account_instead": "לחסום את @{name} במקום שרת שלם",
   "domain_block_modal.they_can_interact_with_old_posts": "משתמשים משרת זה יכולים להתייחס להודעותיך הישנות.",
@@ -362,6 +363,7 @@
   "footer.status": "מצב",
   "generic.saved": "נשמר",
   "getting_started.heading": "בואו נתחיל",
+  "hashtag.admin_moderation": "פתיחת ממשק פיקוח דיון עבור #{name}",
   "hashtag.column_header.tag_mode.all": "ו- {additional}",
   "hashtag.column_header.tag_mode.any": "או {additional}",
   "hashtag.column_header.tag_mode.none": "ללא {additional}",
@@ -398,7 +400,7 @@
   "ignore_notifications_modal.filter_to_avoid_confusion": "סינון מסייע למניעת בלבולים אפשריים",
   "ignore_notifications_modal.filter_to_review_separately": "ניתן לסקור התראות מפולטרות בנפרד",
   "ignore_notifications_modal.ignore": "להתעלם מהתראות",
-  "ignore_notifications_modal.limited_accounts_title": "להתעלם מהתראות מחשבונות תחת פיקוח?",
+  "ignore_notifications_modal.limited_accounts_title": "להתעלם מהתראות מחשבונות תחת פיקוח דיון?",
   "ignore_notifications_modal.new_accounts_title": "להתעלם מהתראות מחשבונות חדשים?",
   "ignore_notifications_modal.not_followers_title": "להתעלם מהתראות מא.נשים שאינם עוקביך?",
   "ignore_notifications_modal.not_following_title": "להתעלם מהתראות מא.נשים שאינם נעקביך?",
@@ -463,7 +465,7 @@
   "lightbox.zoom_in": "הגדלה לגודל מלא",
   "lightbox.zoom_out": "התאמה לגודל המסך",
   "limited_account_hint.action": "הצג חשבון בכל זאת",
-  "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.",
+  "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי מנחי הדיון של {domain}.",
   "link_preview.author": "מאת {name}",
   "link_preview.more_from_author": "עוד מאת {name}",
   "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
@@ -524,7 +526,7 @@
   "navigation_bar.follows_and_followers": "נעקבים ועוקבים",
   "navigation_bar.lists": "רשימות",
   "navigation_bar.logout": "התנתקות",
-  "navigation_bar.moderation": "פיקוח",
+  "navigation_bar.moderation": "הנחיית דיונים",
   "navigation_bar.mutes": "משתמשים בהשתקה",
   "navigation_bar.opened_in_classic_interface": "הודעות, חשבונות ושאר עמודי רשת יפתחו כברירת מחדל בדפדפן רשת קלאסי.",
   "navigation_bar.personal": "אישי",
@@ -636,7 +638,7 @@
   "notifications.policy.filter": "מסנן",
   "notifications.policy.filter_hint": "שליחה לתיבה נכנסת מסוננת",
   "notifications.policy.filter_limited_accounts_hint": "הוגבל על ידי מנהלי הדיונים",
-  "notifications.policy.filter_limited_accounts_title": "חשבון מוגבל",
+  "notifications.policy.filter_limited_accounts_title": "חשבומות תחת ניהול תוכן",
   "notifications.policy.filter_new_accounts.hint": "נוצר {days, plural,one {ביום האחרון} two {ביומיים האחרונים} other {ב־# הימים האחרונים}}",
   "notifications.policy.filter_new_accounts_title": "חשבונות חדשים",
   "notifications.policy.filter_not_followers_hint": "כולל משתמשים שעקבו אחריך פחות מ{days, plural,one {יום} two {יומיים} other {־# ימים}}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "לאפשר נוטיפיקציות מסך",
   "notifications_permission_banner.how_to_control": "כדי לקבל התראות גם כאשר מסטודון סגור יש לאפשר התראות מסך. ניתן לשלוט בדיוק איזה סוג של אינטראקציות יביא להתראות מסך דרך כפתור ה- {icon} מרגע שהן מאופשרות.",
   "notifications_permission_banner.title": "לעולם אל תחמיץ דבר",
-  "onboarding.action.back": "חזרה",
-  "onboarding.actions.back": "חזרה",
-  "onboarding.actions.go_to_explore": "הצגת מגמות",
-  "onboarding.actions.go_to_home": "מעבר לזרם הודעות הנעקבים",
-  "onboarding.compose.template": "שלום #מסטודון!",
+  "onboarding.follows.back": "בחזרה",
+  "onboarding.follows.done": "בוצע",
   "onboarding.follows.empty": "למצער, תוצאות לחיפושך אינן בנמצא. ניתן להשתמש בחיפוש או בדף החקירות לשם מציאת אנשים ולעקבם. אפשר גם לנסות שוב אחר כך.",
-  "onboarding.follows.lead": "אתם אוצרים את הזרם הבייתי שלכם. ככל שתעקבו אחרי יותר אנשים, הוא יהיה עשיר ופעיל יותר. הנה כמה פרופילים להתחיל בהם - תמיד ניתן להפסיק מעקב אחריהם בהמשך!",
-  "onboarding.follows.title": "פופולארי על מסטודון",
+  "onboarding.follows.search": "חיפוש",
+  "onboarding.follows.title": "כדי להתחיל, יש לעקוב אחרי אנשים",
   "onboarding.profile.discoverable": "כלול את הפרופיל שלי בעמודת התגליות",
   "onboarding.profile.discoverable_hint": "כשתבחרו להכלל ב\"תגליות\" על מסטודון, ההודעות שלכם עשויות להופיע בתוצאות חיפוש ועמודות \"נושאים חמים\", והפרופיל יוצע לאחרים עם תחומי עניין משותפים לכם.",
   "onboarding.profile.display_name": "שם להצגה",
   "onboarding.profile.display_name_hint": "שמך המלא או כינוי הכיף שלך…",
-  "onboarding.profile.lead": "תמיד ניתן להשלים זאת אחר כך בהגדרות, שם יש אפילו עוד אפשרויות להתאמה אישית.",
   "onboarding.profile.note": "אודות",
   "onboarding.profile.note_hint": "ניתן @לאזכר משתמשים אחרים או #תגיות…",
   "onboarding.profile.save_and_continue": "לשמור ולהמשיך",
   "onboarding.profile.title": "הגדרת פרופיל",
   "onboarding.profile.upload_avatar": "העלאת תמונת פרופיל",
   "onboarding.profile.upload_header": "העלאת כותרת פרופיל",
-  "onboarding.share.lead": "כדאי להודיע לחברים היכן למצוא אותך במסטודון!",
-  "onboarding.share.message": "אני {username} ברשת #מסטודון! בואו לעקוב אחרי בכתובת {url}",
-  "onboarding.share.next_steps": "לאיפה להמשיך מכאן:",
-  "onboarding.share.title": "לשתף פרופיל",
-  "onboarding.start.lead": "חשבונך החדש במסטודון מוכן. הנה דרכים להפיק ממנו את המירב:",
-  "onboarding.start.skip": "לדלג הלאה?",
-  "onboarding.start.title": "הצלחת!",
-  "onboarding.steps.follow_people.body": "זרם הבית שלכם יאצר על ידיכם. בואו נמלא אותו באנשים מעניינים.",
-  "onboarding.steps.follow_people.title": "להוסיף למעקב {count, plural,one {חשבון אחד}other {# חשבונות}}",
-  "onboarding.steps.publish_status.body": "ברכו לשלום את העולם.",
-  "onboarding.steps.publish_status.title": "כתבו את הפוסט הראשון שלכם",
-  "onboarding.steps.setup_profile.body": "כדאי להשלים את הפרופיל כדי לעודד אחרים ליצירת קשר.",
-  "onboarding.steps.setup_profile.title": "התאמה אישית של הפרופיל",
-  "onboarding.steps.share_profile.body": "ספרו לחברים איך למצוא אתכם במסטודון!",
-  "onboarding.steps.share_profile.title": "לשתף פרופיל",
-  "onboarding.tips.2fa": "<strong>הידעת?</strong> ניתן לאבטח את החשבון ע\"י הקמת אימות דו-שלבי במסך מאפייני החשבון. השיטה תעבוד עם כל יישומון תואם TOTP על המכשיר שלך, ללא צורך במספר טלפון!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>הידעת?</strong> כיוון שמסטודון פועל ברשת מבוזרת, חלק מהפרופילים שתתקלו בהם פועלים משרתים אחרים משרת הבית שלכם. ניתן להיות איתם בקשר בצורה זהה לכל חשבון אחר! שם השרת שלהם הוא החלק השני של שם המשתמש שלהם!",
-  "onboarding.tips.migration": "<strong>הידעת?</strong> אם תחליטו כי {domain} איננו שרת שמתאים לכם בעתיד, ניתן לעבור לשרת אחר מבלי לאבד עוקבים. תוכלו אפילו להקים שרת משלכן!",
-  "onboarding.tips.verification": "<strong>הידעת?</strong> ניתן לאשרר את החשבון ע\"י קישור הפרופיל אל האתר שלכם ומהאתר חזרה לפרופיל. לא נדרשים תשלומים ומסמכים!",
   "password_confirmation.exceeds_maxlength": "הסיסמה בשדה אימות הסיסמה ארוכה מאורך הסיסמה המירבי",
   "password_confirmation.mismatching": "אימות סיסמה אינו תואם לסיסמה",
   "picture_in_picture.restore": "החזירי למקומו",
@@ -813,9 +792,9 @@
   "sign_in_banner.mastodon_is": "מסטודון הוא הדרך הטובה ביותר לעקוב אחרי מה שקורה.",
   "sign_in_banner.sign_in": "התחברות",
   "sign_in_banner.sso_redirect": "התחברות/הרשמה",
-  "status.admin_account": "פתח/י ממשק ניהול עבור @{name}",
-  "status.admin_domain": "פתיחת ממשק ניהול עבור {domain}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "פתח/י ממשק פיקוח דיון עבור @{name}",
+  "status.admin_domain": "פתיחת ממשק פיקוח דיון עבור {domain}",
+  "status.admin_status": "לפתוח הודעה זו במסך ניהול הדיונים",
   "status.block": "חסימת @{name}",
   "status.bookmark": "סימניה",
   "status.cancel_reblog_private": "הסרת הדהוד",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index eebf0dd9d..ab7001f15 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -103,7 +103,6 @@
   "bundle_column_error.routing.body": "अनुरोधित पेज पाया नहीं जा सका। क्या आप सुनिश्चित हैं कि एड्रेस बार में URL सही है?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "बंद",
-  "bundle_modal_error.message": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया",
   "bundle_modal_error.retry": "दुबारा कोशिश करें",
   "closed_registrations.other_server_instructions": "जब से मास्टोडन विकेंद्रीकरण हुआ है, आप दुसरे सर्वर पर एक अकाउंट बना सकते हैं और अब भी इसके साथ उपयोग कर सकते हैं",
   "closed_registrations_modal.description": "{domain} पर अकाउंट बनाना अभी संभव नहीं है, किन्तु कृपया ध्यान दें कि आपको मास्टोडन का प्रयोग करने के लिए {domain} पर एक अकाउंट का पूर्ण रूप से नहीं आवश्यकता हैं",
@@ -195,9 +194,6 @@
   "disabled_account_banner.text": "आपका अकाउंट {disabledAccount} अभी डिसेबल्ड है",
   "dismissable_banner.community_timeline": "ये उन लोगों की सबसे रीसेंट पब्लिक पोस्ट हैं जिनके अकाउंट इनके {domain} द्वारा होस्ट किए गए हैं",
   "dismissable_banner.dismiss": "डिसमिस",
-  "dismissable_banner.explore_links": "इन समाचारों के बारे में लोगों द्वारा इस पर और डेसेंट्रलीसेड नेटवर्क के अन्य सर्वरों पर अभी बात की जा रही है।",
-  "dismissable_banner.explore_tags": "ये हैशटैग अभी इस पर और डेसेंट्रलीसेड नेटवर्क के अन्य सर्वरों पर लोगों के बीच कर्षण प्राप्त कर रहे हैं।",
-  "dismissable_banner.public_timeline": "यह ताजा सार्वजनिक पोस्ट है जिसका सामाजिक वेब {domain} के लोगो द्वारा अनुसरण हो रहा हैं।",
   "domain_block_modal.block": "सर्वर ब्लॉक करें",
   "domain_block_modal.block_account_instead": "इसकी जगह यह @{name} रखें",
   "domain_block_modal.they_can_interact_with_old_posts": "इस सर्वर की लोग आपकी पूरानी पोस्ट्स का अनुसरण किया जा sakta है।",
@@ -403,30 +399,9 @@
   "notifications.filter.polls": "चुनाव परिणाम",
   "notifications.grant_permission": "अनुमति दें",
   "notifications.group": "{count} सूचनाएँ",
-  "onboarding.action.back": "मुझे वापस ले जाओ",
-  "onboarding.actions.back": "मुझे वापस ले जाओ",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "नमस्कार #मस्टोडोन",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.discoverable": "अपना प्रोफाइल खोजने योग्य बनाएं",
   "onboarding.profile.discoverable_hint": "जब आप मॅस्टोडॉन पर डिस्कवरेबिलिटी चुनते हैं तो आपके पोस्ट ट्रेंडिंग और सर्च में दिख सकते हैं और आपका प्रोफाइल आपके ही जैसे अकाउंट्स को सुझाया जा सकता है।",
   "onboarding.profile.display_name": "प्रदर्शित नाम",
-  "onboarding.share.message": "मैं {username} मॅस्टोडॉन पर हूं! मुझे यहां {url} फॉलो करें",
-  "onboarding.share.next_steps": "आगे कि संभवित विधि",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "आपने कर लिया!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "अपनी पहली पोस्ट बनाएं",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>क्या आप जानते है?</strong> आप अपना खाता दो-कदमवाले प्रमाणीकरण से अपने खाते की सेटिंग से सुरक्षित कर सकते हे!",
   "poll.closed": "बंद कर दिया",
   "poll.refresh": "रीफ्रेश करें",
   "poll.vote": "वोट",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index f09cd71c7..ebb15ed09 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -94,7 +94,6 @@
   "bundle_column_error.routing.body": "Traženu stranicu nije moguće pronaći. Jeste li sigurni da je URL u adresnoj traci točan?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zatvori",
-  "bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.",
   "bundle_modal_error.retry": "Pokušajte ponovno",
   "closed_registrations_modal.find_another_server": "Nađi drugi server",
   "column.about": "O aplikaciji",
@@ -169,8 +168,6 @@
   "directory.recently_active": "Nedavno aktivni",
   "disabled_account_banner.account_settings": "Postavke računa",
   "disabled_account_banner.text": "Tvoj račun {disabledAccount} je trenutno onemogućen.",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "Evo kako će izgledati:",
   "emoji_button.activity": "Aktivnost",
@@ -349,21 +346,7 @@
   "notifications.grant_permission": "Odobri dopuštenje.",
   "notifications.group": "{count} obavijesti",
   "notifications.mark_as_read": "Označi sve obavijesti kao pročitane",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.upload_avatar": "Učitaj sliku profila",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Napiši svoj prvi post",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "Završeno",
   "poll.refresh": "Osvježi",
   "poll.reveal": "Vidi rezultate",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 9a76a21e9..3696b7ce9 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "A kért oldal nem található. Biztos, hogy a címsávban lévő webcím helyes?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Bezárás",
-  "bundle_modal_error.message": "Hiba történt a komponens betöltésekor.",
+  "bundle_modal_error.message": "Hiba történt a képernyő betöltésekor.",
   "bundle_modal_error.retry": "Próbáld újra",
   "closed_registrations.other_server_instructions": "Mivel a Mastdon decentralizált, létrehozhatsz egy fiókot egy másik kiszolgálón és mégis kapcsolódhatsz ehhez.",
   "closed_registrations_modal.description": "Fiók létrehozása a {domain} kiszolgálón jelenleg nem lehetséges, de jó, ha tudod, hogy nem szükséges fiókkal rendelkezni pont a {domain} kiszolgálón, hogy használhasd a Mastodont.",
@@ -140,13 +140,16 @@
   "column.blocks": "Letiltott felhasználók",
   "column.bookmarks": "Könyvjelzők",
   "column.community": "Helyi idővonal",
+  "column.create_list": "Lista létrehozása",
   "column.direct": "Személyes említések",
   "column.directory": "Profilok böngészése",
   "column.domain_blocks": "Letiltott domainek",
+  "column.edit_list": "Lista módosítása",
   "column.favourites": "Kedvencek",
   "column.firehose": "Hírfolyamok",
   "column.follow_requests": "Követési kérések",
   "column.home": "Kezdőlap",
+  "column.list_members": "Listatagok kezelése",
   "column.lists": "Listák",
   "column.mutes": "Némított felhasználók",
   "column.notifications": "Értesítések",
@@ -159,6 +162,7 @@
   "column_header.pin": "Kitűzés",
   "column_header.show_settings": "Beállítások megjelenítése",
   "column_header.unpin": "Kitűzés eltávolítása",
+  "column_search.cancel": "Mégse",
   "column_subheading.settings": "Beállítások",
   "community.column_settings.local_only": "Csak helyi",
   "community.column_settings.media_only": "Csak média",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "A(z) {disabledAccount} fiókod jelenleg le van tiltva.",
   "dismissable_banner.community_timeline": "Ezek a legfrissebb nyilvános bejegyzések, amelyeket a(z) {domain} kiszolgáló fiókjait használó emberek tették közzé.",
   "dismissable_banner.dismiss": "Elvetés",
-  "dismissable_banner.explore_links": "Jelenleg ezekről a hírekről beszélgetnek az ezen és a központosítás nélküli hálózat többi kiszolgálóján lévő emberek.",
-  "dismissable_banner.explore_statuses": "Ezek jelenleg népszerűvé váló bejegyzések a háló különböző szegleteiből. Az újabb vagy több megtolással rendelkező bejegyzéseket, illetve a kedvencnek jelöléssel rendelkezőeket rangsoroljuk előrébb.",
-  "dismissable_banner.explore_tags": "Jelenleg ezek a hashtagek hódítanak teret a közösségi weben. Azokat a hashtageket, amelyeket több különböző ember használ, magasabbra rangsorolják.",
-  "dismissable_banner.public_timeline": "Ezek a legfrissebb nyilvános bejegyzések a közösségi weben, amelyeket {domain} domain felhasználói követnek.",
+  "dismissable_banner.explore_links": "Ma ezeket a híreket osztják meg a legtöbbször a födiverzumban. Azok az újabb hírek, melyeket különbözőbb emberek osztanak meg, előrébb vannak sorolva.",
+  "dismissable_banner.explore_statuses": "Ma ezek a bejegyzések hódítanak teret a födiverzumban. Azok az újabb bejegyzések, melyek több megtolással és kedvencnek jelöléssel rendelkeznek, előrébb vannak sorolva.",
+  "dismissable_banner.explore_tags": "Ma ezek a hashtagek hódítanak teret a födiverzumban. Azok a hashtagek, melyeket különbözőbb emberek használnak, előrébb vannak sorolva.",
+  "dismissable_banner.public_timeline": "Ezek a legfrissebb nyilvános bejegyzések a födiverzumban lévő emberektől, akiket a(z) {domain} felhasználói követnek.",
   "domain_block_modal.block": "Kiszolgáló letiltása",
   "domain_block_modal.block_account_instead": "Helyette @{name} letiltása",
   "domain_block_modal.they_can_interact_with_old_posts": "Az ezen a kiszolgálón lévő emberek interaktálhatnak a régi bejegyzéseiddel.",
@@ -359,6 +363,7 @@
   "footer.status": "Állapot",
   "generic.saved": "Elmentve",
   "getting_started.heading": "Első lépések",
+  "hashtag.admin_moderation": "Moderációs felület megnyitása a következőhöz: #{name}",
   "hashtag.column_header.tag_mode.all": "és {additional}",
   "hashtag.column_header.tag_mode.any": "vagy {additional}",
   "hashtag.column_header.tag_mode.none": "{additional} nélkül",
@@ -464,11 +469,32 @@
   "link_preview.author": "{name} szerint",
   "link_preview.more_from_author": "Több tőle: {name}",
   "link_preview.shares": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}",
+  "lists.add_member": "Hozzáadás",
+  "lists.add_to_list": "Hozzáadás a listához",
+  "lists.add_to_lists": "{name} hozzáadása a listához",
+  "lists.create": "Létrehozás",
+  "lists.create_a_list_to_organize": "Új lista létrehozása a kezdőlapod szervezéséhez",
+  "lists.create_list": "Lista létrehozása",
   "lists.delete": "Lista törlése",
+  "lists.done": "Kész",
   "lists.edit": "Lista szerkesztése",
+  "lists.exclusive": "Tagok elrejtése a kezdőlapon",
+  "lists.exclusive_hint": "Ha valaki szerepel ezen a listán, el lesz rejtve a kezdőlapod hírfolyamán, hogy ne lásd kétszer a bejegyzéseit.",
+  "lists.find_users_to_add": "Hozzáadandó felhasználók keresése",
+  "lists.list_members": "Tagok listázása",
+  "lists.list_members_count": "{count, plural, one {# tag} other {# tag}}",
+  "lists.list_name": "Lista neve",
+  "lists.new_list_name": "Új lista neve",
+  "lists.no_lists_yet": "Nincsenek még listák.",
+  "lists.no_members_yet": "Nincsenek még tagok.",
+  "lists.no_results_found": "Nincs találat.",
+  "lists.remove_member": "Eltávolítás",
   "lists.replies_policy.followed": "Bármely követett felhasználó",
   "lists.replies_policy.list": "A lista tagjai",
   "lists.replies_policy.none": "Senki",
+  "lists.save": "Mentés",
+  "lists.search_placeholder": "Keresés a követett személyek között",
+  "lists.show_replies_to": "Listatagok válaszainak hozzávétele",
   "load_pending": "{count, plural, one {# új elem} other {# új elem}}",
   "loading_indicator.label": "Betöltés…",
   "media_gallery.hide": "Elrejtés",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "Asztali értesítések engedélyezése",
   "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.",
   "notifications_permission_banner.title": "Soha ne mulassz el semmit",
-  "onboarding.action.back": "Vissza",
-  "onboarding.actions.back": "Vissza",
-  "onboarding.actions.go_to_explore": "Felkapottak megtekintése",
-  "onboarding.actions.go_to_home": "Ugrás a saját hírfolyamra",
-  "onboarding.compose.template": "Üdvözlet, #Mastodon!",
+  "onboarding.follows.back": "Vissza",
+  "onboarding.follows.done": "Kész",
   "onboarding.follows.empty": "Sajnos jelenleg nem jeleníthető meg eredmény. Kipróbálhatod a keresést vagy böngészheted a felfedező oldalon a követni kívánt személyeket, vagy próbáld meg később.",
-  "onboarding.follows.lead": "A kezdőlapod a Mastodon használatának elsődleges módja. Minél több embert követsz, annál aktívabbak és érdekesebbek lesznek a dolgok. Az induláshoz itt van néhány javaslat:",
-  "onboarding.follows.title": "Szabd személyre a kezdőlapodat",
+  "onboarding.follows.search": "Keresés",
+  "onboarding.follows.title": "A kezdéshez kezdj el embereket követni",
   "onboarding.profile.discoverable": "Saját profil beállítása felfedezhetőként",
   "onboarding.profile.discoverable_hint": "A Mastodonon a felfedezhetőség választása esetén a saját bejegyzéseid megjelenhetnek a keresési eredmények és a felkapott tartalmak között, valamint a profilod a hozzád hasonló érdeklődési körrel rendelkező embereknél is ajánlásra kerülhet.",
   "onboarding.profile.display_name": "Megjelenített név",
   "onboarding.profile.display_name_hint": "Teljes neved vagy vicces neved…",
-  "onboarding.profile.lead": "Ezt később bármikor befejezheted a beállításokban, ahol még több testreszabási lehetőség áll rendelkezésre.",
   "onboarding.profile.note": "Bemutatkozás",
   "onboarding.profile.note_hint": "Megemlíthetsz @másokat vagy #hashtag-eket…",
   "onboarding.profile.save_and_continue": "Mentés és folytatás",
   "onboarding.profile.title": "Profilbeállítás",
   "onboarding.profile.upload_avatar": "Profilkép feltöltése",
   "onboarding.profile.upload_header": "Profil fejléc feltöltése",
-  "onboarding.share.lead": "Tudassuk az emberekkel, hogyan találhatnak meg a Mastodonon!",
-  "onboarding.share.message": "{username} vagyok a #Mastodon hálózaton! Kövess itt: {url}.",
-  "onboarding.share.next_steps": "Lehetséges következő lépések:",
-  "onboarding.share.title": "Profil megosztása",
-  "onboarding.start.lead": "Az új Mastodon-fiók használatra kész. Így hozhatod ki belőle a legtöbbet:",
-  "onboarding.start.skip": "Nincs szükséged segítségre a kezdéshez?",
-  "onboarding.start.title": "Ez sikerült!",
-  "onboarding.steps.follow_people.body": "A Mastodon az érdekes emberek követéséről szól.",
-  "onboarding.steps.follow_people.title": "Szabd személyre a kezdőlapodat",
-  "onboarding.steps.publish_status.body": "Köszöntsd a világot szöveggel, fotókkal, videókkal vagy szavazásokkal {emoji}",
-  "onboarding.steps.publish_status.title": "Az első bejegyzés létrehozása",
-  "onboarding.steps.setup_profile.body": "Növeld az interakciók számát a profilod részletesebb kitöltésével.",
-  "onboarding.steps.setup_profile.title": "Szabd személyre a profilodat",
-  "onboarding.steps.share_profile.body": "Tudasd az ismerőseiddel, hogyan találhatnak meg a Mastodonon",
-  "onboarding.steps.share_profile.title": "Oszd meg a Mastodon profilodat",
-  "onboarding.tips.2fa": "<strong>Tudtad?</strong> A fiókod biztonságossá teheted, ha a fiók beállításaiban beállítod a kétlépcsős hitelesítést. Bármilyen választott TOTP alkalmazással működik, nincs szükség telefonszámra!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Tudtad?</strong> Mivel a Mastodon decentralizált, egyes profilok, amelyekkel találkozol, más kiszolgálókon lesznek tárolva. És mégis zökkenőmentesen kommunikálhatsz velük! A kiszolgáló a felhasználónevük második felében található!",
-  "onboarding.tips.migration": "<strong>Tudtad?</strong> Ha úgy érzed, hogy a {domain} már nem jó kiszolgáló a számodra, átköltözhetsz egy másik Mastodon kiszolgálóra anélkül, hogy elveszítenéd a követőidet. Akár saját kiszolgálót is üzemeltethetsz!",
-  "onboarding.tips.verification": "<strong>Tudtad?</strong> Fiókodat ellenőrizheted, ha raksz egy hivatkozást a Mastodon-profilodra a saját webhelyeden és hozzáadod ezt a webhelyet a profilodhoz. Nincs szükség díjfizetésre vagy dokumentumra!",
   "password_confirmation.exceeds_maxlength": "A jelszó megerősítése hosszabb a legnagyobb megengedett jelszóhossznál",
   "password_confirmation.mismatching": "A jelszómegerősítés nem egyezik",
   "picture_in_picture.restore": "Visszahelyezés",
@@ -691,7 +694,7 @@
   "recommended": "Ajánlott",
   "refresh": "Frissítés",
   "regeneration_indicator.label": "Betöltés…",
-  "regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
+  "regeneration_indicator.sublabel": "A kezdőlapod hírfolyama épp készül!",
   "relative_time.days": "{number}n",
   "relative_time.full.days": "{number, plural, one {# napja} other {# napja}}",
   "relative_time.full.hours": "{number, plural, one {# órája} other {# órája}}",
@@ -745,7 +748,7 @@
   "report.thanks.title": "Nem akarod ezt látni?",
   "report.thanks.title_actionable": "Köszönjük, hogy jelentetted, megnézzük.",
   "report.unfollow": "@{name} követésének leállítása",
-  "report.unfollow_explanation": "Követed ezt a fiókot. Hogy ne lásd a bejegyzéseit a saját idővonaladon, szüntesd meg a követését.",
+  "report.unfollow_explanation": "Követed ezt a fiókot. Hogy ne lásd a bejegyzéseit a kezdőlapi hírfolyamban, szüntesd meg a követését.",
   "report_notification.attached_statuses": "{count} bejegyzés mellékelve",
   "report_notification.categories.legal": "Jogi",
   "report_notification.categories.legal_sentence": "illegális tartalom",
@@ -849,7 +852,7 @@
   "subscribed_languages.lead": "A változtatás után csak a kiválasztott nyelvű bejegyzések fognak megjelenni a kezdőlapon és az idővonalakon. Ha egy sincs kiválasztva, akkor minden nyelven megjelennek a bejegyzések.",
   "subscribed_languages.save": "Változások mentése",
   "subscribed_languages.target": "Feliratkozott nyelvek módosítása {target} esetében",
-  "tabs_bar.home": "Kezdőoldal",
+  "tabs_bar.home": "Kezdőlap",
   "tabs_bar.notifications": "Értesítések",
   "time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra",
   "time_remaining.hours": "{number, plural, one {# óra} other {# óra}} van hátra",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index b5faf7e72..55b32b2c3 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -72,7 +72,6 @@
   "bundle_column_error.return": "Վերադառնալ տուն",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Փակել",
-  "bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։",
   "bundle_modal_error.retry": "Կրկին փորձել",
   "closed_registrations_modal.find_another_server": "Գտնել այլ սերուերում",
   "column.about": "Մասին",
@@ -144,8 +143,6 @@
   "directory.recently_active": "Վերջերս ակտիւ",
   "disabled_account_banner.account_settings": "Հաշուի կարգաւորումներ",
   "dismissable_banner.dismiss": "Բաց թողնել",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Այս գրառումը քո կայքում ներդնելու համար կարող ես պատճէնել ներքեւի կոդը։",
   "embed.preview": "Ահա, թէ ինչ տեսք կունենայ այն՝",
   "emoji_button.activity": "Զբաղմունքներ",
@@ -342,22 +339,6 @@
   "notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
   "notifications_permission_banner.how_to_control": "Ծանուցումներ ստանալու համար, երբ Մաստոդոնը բաց չէ՝ ակտիւացրու աշխատատիրոյթի ծանուցումները։ Դու կարող ես ճշգրտօրէն վերահսկել թէ ինչպիսի փոխգործակցութիւններ առաջանան աշխատատիրոյթի ծանուցումներից՝ {icon}ի կոճակով՝ այն ակտիւացնելուց յետոյ։",
   "notifications_permission_banner.title": "Ոչինչ բաց մի թող",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Բարեւ #Mastodon!",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Դու արեցի՜ր դա",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Ստեղծիր առաջին գրառումդ",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Յետ բերել",
   "poll.closed": "Փակ",
   "poll.refresh": "Թարմացնել",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index 891c293d5..1de5247f2 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Le pagina requestate non pote esser trovate. Es tu secur que le URL in le barra de adresse es correcte?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Clauder",
-  "bundle_modal_error.message": "Un error ha occurrite durante le cargamento de iste componente.",
+  "bundle_modal_error.message": "Un error ha occurrite durante le cargamento de iste schermo.",
   "bundle_modal_error.retry": "Tentar novemente",
   "closed_registrations.other_server_instructions": "Perque Mastodon es decentralisate, tu pote crear un conto sur un altere servitor e totevia interager con iste servitor.",
   "closed_registrations_modal.description": "Crear un conto sur {domain} non es actualmente possibile, ma considera que non es necessari haber un conto specificamente sur {domain} pro usar Mastodon.",
@@ -140,6 +140,7 @@
   "column.blocks": "Usatores blocate",
   "column.bookmarks": "Marcapaginas",
   "column.community": "Chronologia local",
+  "column.create_list": "Crear lista",
   "column.direct": "Mentiones private",
   "column.directory": "Navigar profilos",
   "column.domain_blocks": "Dominios blocate",
@@ -159,6 +160,7 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Monstrar le parametros",
   "column_header.unpin": "Disfixar",
+  "column_search.cancel": "Cancellar",
   "column_subheading.settings": "Parametros",
   "community.column_settings.local_only": "Solmente local",
   "community.column_settings.media_only": "Solmente multimedia",
@@ -232,10 +234,7 @@
   "disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.",
   "dismissable_banner.community_timeline": "Ecce le messages public le plus recente del personas con contos sur {domain}.",
   "dismissable_banner.dismiss": "Clauder",
-  "dismissable_banner.explore_links": "Istes es le articulos de novas que se condivide le plus sur le rete social hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.",
-  "dismissable_banner.explore_statuses": "Ecce le messages de tote le rete social que gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.",
-  "dismissable_banner.explore_tags": "Ecce le hashtags que gania popularitate sur le rete social hodie. Le hashtags usate per plus personas differente se classifica plus in alto.",
-  "dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le rete social que le gente sur {domain} seque.",
+  "dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le fediverso que le gente sur {domain} seque.",
   "domain_block_modal.block": "Blocar le servitor",
   "domain_block_modal.block_account_instead": "Blocar @{name} in su loco",
   "domain_block_modal.they_can_interact_with_old_posts": "Le personas de iste servitor pote interager con tu messages ancian.",
@@ -464,11 +463,18 @@
   "link_preview.author": "Per {name}",
   "link_preview.more_from_author": "Plus de {name}",
   "link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
+  "lists.add_member": "Adder",
+  "lists.add_to_list": "Adder al lista",
+  "lists.add_to_lists": "Adder {name} al listas",
+  "lists.create": "Crear",
   "lists.delete": "Deler lista",
   "lists.edit": "Modificar lista",
+  "lists.find_users_to_add": "Trovar usatores a adder",
+  "lists.new_list_name": "Nove nomine de lista",
   "lists.replies_policy.followed": "Qualcunque usator sequite",
   "lists.replies_policy.list": "Membros del lista",
   "lists.replies_policy.none": "Nemo",
+  "lists.search_placeholder": "Cerca personas que tu seque",
   "load_pending": "{count, plural, one {# nove entrata} other {# nove entratas}}",
   "loading_indicator.label": "Cargante…",
   "media_gallery.hide": "Celar",
@@ -625,44 +631,19 @@
   "notifications_permission_banner.enable": "Activar notificationes de scriptorio",
   "notifications_permission_banner.how_to_control": "Pro reciper notificationes quando Mastodon non es aperte, activa le notificationes de scriptorio. Post lor activation, es possibile controlar precisemente qual typos de interaction genera notificationes de scriptorio per medio del button {icon} hic supra.",
   "notifications_permission_banner.title": "Non mancar jammais a un cosa",
-  "onboarding.action.back": "Porta me retro",
-  "onboarding.actions.back": "Porta me retro",
-  "onboarding.actions.go_to_explore": "Porta me al tendentias",
-  "onboarding.actions.go_to_home": "Porta me a mi fluxo de initio",
-  "onboarding.compose.template": "Salute #Mastodon!",
   "onboarding.follows.empty": "Regrettabilemente, non es possibile monstrar resultatos al momento. Tu pote tentar usar le recerca o percurrer le pagina de exploration pro cercar personas a sequer, o tentar lo de novo plus tarde.",
-  "onboarding.follows.lead": "Le fluxo de initio es le maniera principal de discoperir Mastodon. Quanto plus personas tu seque, tanto plus active e interessante illo essera. Pro comenciar, ecce alcun suggestiones:",
-  "onboarding.follows.title": "Personalisar tu fluxo de initio",
+  "onboarding.follows.search": "Cercar",
+  "onboarding.follows.title": "Seque personas pro comenciar",
   "onboarding.profile.discoverable": "Render mi profilo discoperibile",
   "onboarding.profile.discoverable_hint": "Quando tu opta pro devenir discoperibile sur Mastodon, tu messages pote apparer in resultatos de recerca e in tendentias, e tu profilo pote esser suggerite al personas con interesses simile al tues.",
   "onboarding.profile.display_name": "Nomine a monstrar",
   "onboarding.profile.display_name_hint": "Tu nomine complete o tu supernomine…",
-  "onboarding.profile.lead": "Tu pote sempre completar isto plus tarde in le parametros, ubi se trova mesmo plus optiones de personalisation.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "Tu pote @mentionar altere personas o #hashtags…",
   "onboarding.profile.save_and_continue": "Salvar e continuar",
   "onboarding.profile.title": "Configuration del profilo",
   "onboarding.profile.upload_avatar": "Incargar imagine de profilo",
   "onboarding.profile.upload_header": "Actualisar capite de profilo",
-  "onboarding.share.lead": "Face saper al gente como illes pote trovar te sur Mastodon!",
-  "onboarding.share.message": "Io es {username} sur Mastodon! Veni sequer me a {url}",
-  "onboarding.share.next_steps": "Sequente passos possibile:",
-  "onboarding.share.title": "Compartir tu profilo",
-  "onboarding.start.lead": "Tu face ora parte de Mastodon, un platteforma de medios social unic e decentralisate ubi es tu, e non un algorithmo, qui crea tu proprie experientia. Nos va adjutar te a lancear te in iste nove frontiera social:",
-  "onboarding.start.skip": "Non require adjuta a comenciar?",
-  "onboarding.start.title": "Tu ha arrivate!",
-  "onboarding.steps.follow_people.body": "Sequer personas interessante es le ration de esser de Mastodon.",
-  "onboarding.steps.follow_people.title": "Personalisar tu fluxo de initio",
-  "onboarding.steps.publish_status.body": "Saluta le mundo con texto, photos, videos o sondages {emoji}",
-  "onboarding.steps.publish_status.title": "Face tu prime message",
-  "onboarding.steps.setup_profile.body": "Impulsa tu interactiones con un profilo comprehensive.",
-  "onboarding.steps.setup_profile.title": "Personalisa tu profilo",
-  "onboarding.steps.share_profile.body": "Face saper a tu amicos como trovar te sur Mastodon",
-  "onboarding.steps.share_profile.title": "Compartir tu profilo de Mastodon",
-  "onboarding.tips.2fa": "<strong>Lo sapeva tu?</strong> Tu pote securisar tu conto configurante le authentication bifactorial in le parametros de tu conto. Isto functiona con le application TOTP de tu preferentia, sin necessitate de un numero de telephono!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Lo sapeva tu?</strong> Perque Mastodon es decentralisate, le profilos que tu incontra pote esser hospitate sur servitores altere que le tue. Nonobstante, tu pote interager con illos sin problema! Lor servitor se trova in le secunde medietate de lor nomine de usator!",
-  "onboarding.tips.migration": "<strong>Lo sapeva tu?</strong> Si tu pensa que {domain} non es un bon servitor pro te in le futuro, tu pote cambiar a un altere servitor Mastodon sin perder tu sequitores. Tu pote mesmo hospitar tu proprie servitor!",
-  "onboarding.tips.verification": "<strong>Lo sapeva tu?</strong> Pro verificar tu conto, insere un ligamine a tu profilo Mastodon sur tu proprie sito web e adde le sito web a tu profilo. Nulle moneta o documentos necessari!",
   "password_confirmation.exceeds_maxlength": "Le confirmation del contrasigno excede le longitude maxime del contrasigno",
   "password_confirmation.mismatching": "Le confirmation del contrasigno non corresponde",
   "picture_in_picture.restore": "Restaurar",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index c966ea0ab..ee5e888c3 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "Laman yang diminta tidak ditemukan. Apakah Anda yakin bahwa URL dalam bilah alamat benar?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Tutup",
-  "bundle_modal_error.message": "Kesalahan terjadi saat memuat komponen ini.",
   "bundle_modal_error.retry": "Coba lagi",
   "closed_registrations.other_server_instructions": "Karena Mastodon itu terdesentralisasi, Anda dapat membuat sebuah akun di server lain dan masih dapat berinteraksi dengan satu ini.",
   "closed_registrations_modal.description": "Membuat sebuah akun di {domain} saat ini tidak memungkinkan, tetapi diingat bahwa Anda tidak harus memiliki sebuah akun secara khusus di {domain} untuk menggunakan Mastodon.",
@@ -212,10 +211,6 @@
   "disabled_account_banner.text": "Akun {disabledAccount} Anda kini dinonaktifkan.",
   "dismissable_banner.community_timeline": "Ini adalah kiriman publik terkini dari orang yang akunnya berada di {domain}.",
   "dismissable_banner.dismiss": "Abaikan",
-  "dismissable_banner.explore_links": "Cerita berita ini sekarang sedang dibicarakan oleh orang di server ini dan lainnya dalam jaringan terdesentralisasi.",
-  "dismissable_banner.explore_statuses": "Ini adalah postingan dari seluruh web sosial yang mendapatkan daya tarik saat ini. Postingan baru dengan lebih banyak peningkatan dan favorit memiliki peringkat lebih tinggi.",
-  "dismissable_banner.explore_tags": "Tagar ini sekarang sedang tren di antara orang di server ini dan lainnya dalam jaringan terdesentralisasi.",
-  "dismissable_banner.public_timeline": "Ini adalah postingan publik dari orang-orang di web sosial yang diikuti oleh {domain}.",
   "domain_block_modal.block": "Blokir server",
   "domain_block_modal.block_account_instead": "Blokir @{name} saja",
   "domain_block_modal.they_can_interact_with_old_posts": "Orang-orang dari server ini dapat berinteraksi dengan kiriman lama anda.",
@@ -464,23 +459,6 @@
   "notifications_permission_banner.enable": "Aktifkan notifikasi desktop",
   "notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.",
   "notifications_permission_banner.title": "Jangan lewatkan apa pun",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Halo #Mastodon!",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.share.title": "Berbagi profil Anda",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Kau berhasil!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Tulis posting pertama anda",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Taruh kembali",
   "poll.closed": "Ditutup",
   "poll.refresh": "Segarkan",
diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json
index 2be72b048..db144a3d7 100644
--- a/app/javascript/mastodon/locales/ie.json
+++ b/app/javascript/mastodon/locales/ie.json
@@ -103,7 +103,6 @@
   "bundle_column_error.routing.body": "Li demandat págine ne trovat se. Esque tu es cert que li URL in li adresse-barre es corect?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Cluder",
-  "bundle_modal_error.message": "Alquo errat durant li cargation de ti-ci componente.",
   "bundle_modal_error.retry": "Provar denov",
   "closed_registrations.other_server_instructions": "Pro que Mastodon es decentralisat, on posse crear un conto che un altri servitor e ancor interacter con ti-ci.",
   "closed_registrations_modal.description": "Crear un conto che {domain} ne es possibil actualmen, ma ples memorar que on ne besona un conto specificmen che {domain} por usar Mastodon.",
@@ -195,10 +194,6 @@
   "disabled_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat.",
   "dismissable_banner.community_timeline": "Tis-ci es li postas max recent de gente con contos che {domain}.",
   "dismissable_banner.dismiss": "Demisser",
-  "dismissable_banner.explore_links": "Tis-ci es li novas max distribuet che li social retage hodie. Novas plu nov, postat de plu diferent persones, es monstrat plu alt.",
-  "dismissable_banner.explore_statuses": "Tis-ci es postas del social retage queles es popular hodie. Nov postas con plu mult boosts e favorites es monstrat plu alt.",
-  "dismissable_banner.explore_tags": "Tis-ci es hashtags queles es popular che li social retage hodie. Hashtags usat de plu mult persones diferent es monstrat plu alt.",
-  "dismissable_banner.public_timeline": "Tis-ci es li max recent public postas de persones che li social retage quem gente che {domain} seque.",
   "domain_block_modal.block": "Bloccar servitor",
   "domain_block_modal.block_account_instead": "Altrimen, bloccar @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Persones de ti servitor posse interacter con tui old postas.",
@@ -512,44 +507,17 @@
   "notifications_permission_banner.enable": "Activisar notificationes sur li computator",
   "notifications_permission_banner.how_to_control": "Por reciver notificationes quande Mastodon ne es apert, activisa notificationes sur li computator. Tu posse decider precisimen quel species de interactiones genera notificationes per li buton {icon} in-supra quande ili es activisat.",
   "notifications_permission_banner.title": "Nequande preterlassa quocunc",
-  "onboarding.action.back": "Retroear",
-  "onboarding.actions.back": "Retroear",
-  "onboarding.actions.go_to_explore": "Ear a vider lu populari",
-  "onboarding.actions.go_to_home": "Ear al hemal témpor-linea",
-  "onboarding.compose.template": "Salute #Mastodon!",
   "onboarding.follows.empty": "Ínfortunatmen, null resultates posse esser monstrat actualmen. Tu posse provar serchar o usar li \"Explorar\" págine por trovar gente por sequer, o prova denov plu tard.",
-  "onboarding.follows.lead": "Tui hemal témpor-linea es li primari maniere de experir Mastodon. Plu persones quem tu seque, plu activ e interessant it va esser. Por auxiliar te comensar, vi quelc suggestiones:",
-  "onboarding.follows.title": "Personalisar tui hemal témpor-linea",
   "onboarding.profile.discoverable": "Fa mi profil decovribil",
   "onboarding.profile.discoverable_hint": "Quande tu opta esser decovribil in Mastodon, tui postas posse aparir in resultates de sercha e tendenties, e tui profil posse esser suggestet a persones con interesses simil a tui.",
   "onboarding.profile.display_name": "Nómine a monstrar",
   "onboarding.profile.display_name_hint": "Tui complet nómine o tui amusant nómine…",
-  "onboarding.profile.lead": "Tu sempre posse completar ti-ci plu tard in li parametres, u mem plu optiones de customisation es disponibil.",
   "onboarding.profile.note": "Biografie",
   "onboarding.profile.note_hint": "Tu posse @mentionar altri persones o #hashtags…",
   "onboarding.profile.save_and_continue": "Conservar e avansar",
   "onboarding.profile.title": "Popular tu profil",
   "onboarding.profile.upload_avatar": "Cargar profil-portrete",
   "onboarding.profile.upload_header": "Cargar cap-image",
-  "onboarding.share.lead": "Di gente qualmen ili posse trovar te che Mastodon!",
-  "onboarding.share.message": "Yo es {username} che #Mastodon! Veni e seque me a {url}",
-  "onboarding.share.next_steps": "Possibil sequent passus:",
-  "onboarding.share.title": "Partir tui profil",
-  "onboarding.start.lead": "Tu es ja un parte de Mastodon, un unic, decentralisat platform de medie social in quel tu—ne un algoritme—selectiona tui propri experientie. Lass nos departer sur un nov frontiera social:",
-  "onboarding.start.skip": "Auxilie por comensar ne besonat?",
-  "onboarding.start.title": "Tu ha successat!",
-  "onboarding.steps.follow_people.body": "Sequer interessant gente es to quo importa in Mastodon.",
-  "onboarding.steps.follow_people.title": "Personalisar tui hemal témpor-linea",
-  "onboarding.steps.publish_status.body": "Saluta li munde con text, images, videos o balotationes {emoji}",
-  "onboarding.steps.publish_status.title": "Crear tui unesim posta",
-  "onboarding.steps.setup_profile.body": "Ascresce tui interactiones per haver un profil detalliat.",
-  "onboarding.steps.setup_profile.title": "Personalisar tui profil",
-  "onboarding.steps.share_profile.body": "Di tui amics qualmen trovar te che Mastodon",
-  "onboarding.steps.share_profile.title": "Partir tui profil Mastodon",
-  "onboarding.tips.2fa": "<strong>Savet tu?</strong> Tu posse securisar tui conto per activisar 2-factor autentication in tui parametres de conto. Ti functiona con quelcunc aplication TOTP quel tu selecte, null númere de telefon besonat!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Savet tu?</strong> Pro que Mastodon es decentralisat, quelc profiles queles tu trova va esser logiat che servitores altri quam tui. Totvez tu posse interacter con les sin grates! Lor servitores es in li duesim demí de lor usator-nómines!",
-  "onboarding.tips.migration": "<strong>Savet tu?</strong> Si tu senti que {domain} ne es un bonissim servitor por te futurimen, tu posse mover te a un altri Mastodon-servitor sin perdir tui sequitores. Tu posse mem etablisser tui propri servitor!",
-  "onboarding.tips.verification": "<strong>Savet tu?</strong> Tu posse verificar tui conto per metter un ligament a tui Mastodon-profil in tui propri websitu e adjunter li websitu a tui profil. Null payament o documentes besonat!",
   "password_confirmation.exceeds_maxlength": "Confirmation de passa-parol transpassa li maxim longore de passa-paroles",
   "password_confirmation.mismatching": "Confirmation de passa-parol ne egala",
   "picture_in_picture.restore": "Restaurar",
diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json
index 60cb9b7c3..6351ca2d5 100644
--- a/app/javascript/mastodon/locales/ig.json
+++ b/app/javascript/mastodon/locales/ig.json
@@ -52,8 +52,6 @@
   "conversation.delete": "Hichapụ nkata",
   "conversation.open": "Lelee nkata",
   "disabled_account_banner.account_settings": "Mwube akaụntụ",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "domain_pill.username": "Ahaojiaru",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "emoji_button.activity": "Mmemme",
@@ -119,19 +117,6 @@
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
   "notifications.column_settings.status": "Edemede ọhụrụ:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Kekọrịta profaịlụ Mastọdọnụ gị",
   "privacy.change": "Adjust status privacy",
   "relative_time.full.just_now": "kịta",
   "relative_time.just_now": "kịta",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 8e2ea3dea..64c0f8ac9 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "Demandita pagino ne povas trovesar. Ka vu certe ke URL en situobuxo esar korekta?",
   "bundle_column_error.routing.title": "Eroro di 404",
   "bundle_modal_error.close": "Klozez",
-  "bundle_modal_error.message": "Nulo ne functionis dum chargar ca kompozaj.",
   "bundle_modal_error.retry": "Probez itere",
   "closed_registrations.other_server_instructions": "Nam Mastodon es descentraligita, on povas krear konto che altra servilo e senegarde interagar kun ca servilo.",
   "closed_registrations_modal.description": "Nune on ne povas krear konto che {domain}, ma voluntez savar ke on ne bezonas konto specifike che {domain} por uzar Mastodon.",
@@ -211,10 +210,6 @@
   "disabled_account_banner.text": "Vua konto {disabledAccount} es nune desaktivigita.",
   "dismissable_banner.community_timeline": "Co esas maxim recenta publika posti de personi quo havas konto quo hostigesas da {domain}.",
   "dismissable_banner.dismiss": "Ignorez",
-  "dismissable_banner.explore_links": "Ca nova rakonti parolesas da personi che ca e altra servili di necentraligita situo nun.",
-  "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.",
-  "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.",
-  "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.",
   "domain_block_modal.block": "Blokusez servilo",
   "domain_block_modal.block_account_instead": "Blokusez @{name} vice",
   "domain_block_modal.they_can_interact_with_old_posts": "Personi de ca servilo povas interagar kun vua desnova posti.",
@@ -596,44 +591,17 @@
   "notifications_permission_banner.enable": "Aktivigez desktopavizi",
   "notifications_permission_banner.how_to_control": "Por ganar avizi kande Mastodon ne esas apertita, aktivigez dekstopavizi. Vu povas precize regularar quale interakti facas deskstopavizi tra la supera {icon} butono pos oli aktivigesis.",
   "notifications_permission_banner.title": "Irga kozo ne pasas vu",
-  "onboarding.action.back": "Retroirez",
-  "onboarding.actions.back": "Retroirez",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Saluto #Mastodon!",
   "onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.discoverable": "Trovebligez mea profilo",
   "onboarding.profile.discoverable_hint": "Se vu selektas deskovrebleso che Mastodon, vua posti povas aparar en sercho-rezultaji e populari, e vua profilo forsan sugestesos a personi kun interesi simila a vua.",
   "onboarding.profile.display_name": "Publika nomo",
   "onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomo…",
-  "onboarding.profile.lead": "Vu sempre povas kompletigar co plu tarde en la opcioni, ube mem plua personalizanta opcioni es disponebla.",
   "onboarding.profile.note": "Biografio",
   "onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagi…",
   "onboarding.profile.save_and_continue": "Preservez e avancez",
   "onboarding.profile.title": "Kompletigez la profilo",
   "onboarding.profile.upload_avatar": "Kargez profiloportreto",
   "onboarding.profile.upload_header": "Kargez profilokapimajo",
-  "onboarding.share.lead": "Savigez personi quale ili povas trovar vu che Mastodon!",
-  "onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}",
-  "onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:",
-  "onboarding.share.title": "Partigez vua profilo",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Vu facis lo!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Facar vua unesma posto",
-  "onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Ka vu savas?</strong> Vu povas sekurigar vua konto per pozar 2-faktora verifiko en preferaji de vua konto. Telefonilnombro ne bezonesis!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ka vu savas?</strong> Vu povas interagar kun profili sur altra servili senrupte!",
-  "onboarding.tips.migration": "<strong>Ka vu savas?</strong> Se vu sentas ke {domain} ne esas apta por vu en la futuro, vu povas transferar a altra servilo di Mastodon sen malganar vua sequanti!",
-  "onboarding.tips.verification": "<strong>Ka vu savas?</strong> Vu povas verifikar vua konto per pozi ligilo a vua profilo di Mastodon sur vua sua retsituo e adjuntar la retsituo a vua profilo. Senpage!",
   "password_confirmation.exceeds_maxlength": "La konfirmo dil pasvorto superesas la limito pri longeso di pasvorti",
   "password_confirmation.mismatching": "La konfirmo dil pasvorto ne egalesas",
   "picture_in_picture.restore": "Retropozez",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index ce4c21e18..a2d94aa1e 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Umbeðin síða fannst ekki. Ertu viss um að slóðin í vistfangastikunni sé rétt?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Loka",
-  "bundle_modal_error.message": "Eitthvað fór úrskeiðis við að hlaða inn þessari einingu.",
+  "bundle_modal_error.message": "Eitthvað fór úrskeiðis við að hlaða inn þessum skjá.",
   "bundle_modal_error.retry": "Reyndu aftur",
   "closed_registrations.other_server_instructions": "Þar sem Mastodon er ekki miðstýrt, þá getur þú búið til aðgang á öðrum þjóni, en samt haft samskipti við þennan.",
   "closed_registrations_modal.description": "Að búa til aðgang á {domain} er ekki mögulegt eins og er, en vinsamlegast hafðu í huga að þú þarft ekki aðgang sérstaklega á {domain} til að nota Mastodon.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Festa",
   "column_header.show_settings": "Birta stillingar",
   "column_header.unpin": "Losa",
+  "column_search.cancel": "Hætta við",
   "column_subheading.settings": "Stillingar",
   "community.column_settings.local_only": "Einungis staðvært",
   "community.column_settings.media_only": "Einungis myndskrár",
@@ -235,9 +236,9 @@
   "disabled_account_banner.text": "Aðgangurinn þinn {disabledAccount} er óvirkur í augnablikinu.",
   "dismissable_banner.community_timeline": "Þetta eru nýjustu opinberu færslurnar frá fólki sem er hýst á {domain}.",
   "dismissable_banner.dismiss": "Hunsa",
-  "dismissable_banner.explore_links": "Þetta eru fréttafærslur sem í augnablikinu er verið að tala um af fólki á þessum og öðrum netþjónum á dreifhýsta netkerfinu.",
-  "dismissable_banner.explore_statuses": "Þessar færslur frá þessum og öðrum netþjónum á dreifhýsta netkerfinu eru að fá aukna athygli í þessu töluðum orðum.",
-  "dismissable_banner.explore_tags": "Þetta eru myllumerki sem í augnablikinu eru að fá aukna athygli hjá fólki á þessum og öðrum netþjónum á dreifhýsta netkerfinu.",
+  "dismissable_banner.explore_links": "Þessar fréttatengdu færslur hafa verið að fá aukið vægi í samfélaginu í dag. Nýrri fréttafærslur birtar af fjölbreyttara fólki fá meira vægi.",
+  "dismissable_banner.explore_statuses": "Þessar færslur hafa verið að fá aukið vægi í samfélaginu í dag. Nýrri færslur með fleiri endurbirtingar og merkingar sem eftirlæti hjá fólki fá meira vægi.",
+  "dismissable_banner.explore_tags": "Þessi myllumerki hafa verið að fá aukið vægi í samfélaginu í dag. Myllumerki sem notuð eru af fjölbreyttara fólki fá meira vægi.",
   "dismissable_banner.public_timeline": "Þetta eru nýjustu opinberu færslurnar frá fólki á samfélagsnetinu sem fólk á {domain} fylgjast með.",
   "domain_block_modal.block": "Útiloka netþjón",
   "domain_block_modal.block_account_instead": "Útiloka {name} í staðinn",
@@ -362,6 +363,7 @@
   "footer.status": "Staða",
   "generic.saved": "Vistað",
   "getting_started.heading": "Komast í gang",
+  "hashtag.admin_moderation": "Opna umsjónarviðmót fyrir #{name}",
   "hashtag.column_header.tag_mode.all": "og {additional}",
   "hashtag.column_header.tag_mode.any": "eða {additional}",
   "hashtag.column_header.tag_mode.none": "án {additional}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði",
   "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.",
   "notifications_permission_banner.title": "Aldrei missa af neinu",
-  "onboarding.action.back": "Til baka",
-  "onboarding.actions.back": "Til baka",
-  "onboarding.actions.go_to_explore": "Sjáðu hvað er í umræðunni",
-  "onboarding.actions.go_to_home": "Fara á heimastreymið þitt",
-  "onboarding.compose.template": "Halló #Mastodon!",
+  "onboarding.follows.back": "Til baka",
+  "onboarding.follows.done": "Lokið",
   "onboarding.follows.empty": "Því miður er ekki hægt að birta neinar niðurstöður í augnablikinu. Þú getur reynt að nota leitina eða skoðað könnunarsíðuna til að finna fólk til að fylgjast með, nú eða prófað aftur síðar.",
-  "onboarding.follows.lead": "Þú ræktar heimastreymið þitt. Því fleira fólki sem þú fylgist með, því virkara og áhugaverðara verður það. Að fylgjast með þessum notendum gæti verið ágætt til að byrja með - þú getur alltaf hætt að fylgjast með þeim síðar!",
-  "onboarding.follows.title": "Vinsælt á Mastodon",
+  "onboarding.follows.search": "Leita",
+  "onboarding.follows.title": "Þú ættir að fylgjast með fólki til að komast í gang",
   "onboarding.profile.discoverable": "Gera notandasniðið mitt uppgötvanlegt",
   "onboarding.profile.discoverable_hint": "Þegar þú velur að hægt sé að uppgötva þig á Mastodon, munu færslurnar þínar birtast í leitarniðurstöðum og vinsældalistum, auk þess sem stungið verður upp á notandasniðinu þínu við fólk sem er með svipuð áhugamál og þú.",
   "onboarding.profile.display_name": "Birtingarnafn",
   "onboarding.profile.display_name_hint": "Fullt nafn þitt eða eitthvað til gamans…",
-  "onboarding.profile.lead": "Þú getur alltaf klárað þetta seinna í stillingunum, þar sem enn fleiri möguleikar bjóðast á sérsníðingum.",
   "onboarding.profile.note": "Æviágrip",
   "onboarding.profile.note_hint": "Þú getur @minnst á annað fólk eða #myllumerki…",
   "onboarding.profile.save_and_continue": "Vista og halda áfram",
   "onboarding.profile.title": "Uppsetning notandasniðs",
   "onboarding.profile.upload_avatar": "Sendu inn auðkennismynd",
   "onboarding.profile.upload_header": "Sendu inn bakgrunnsmynd í haus notandasniðs",
-  "onboarding.share.lead": "Láttu fólk vita hvernig það getur fundið þig á Mastodon!",
-  "onboarding.share.message": "Ég heiti {username} á #Mastodon! Þú getur fylgst með mér á {url}",
-  "onboarding.share.next_steps": "Möguleg næstu skref:",
-  "onboarding.share.title": "Deildu notandasniðinu þínu",
-  "onboarding.start.lead": "Nýi Mastodon-aðgangurinn þinn er tilbúinn. Hér sérðu hvernig þú nærð mestu út úr honum:",
-  "onboarding.start.skip": "Viltu sleppa þessu og halda beint áfram?",
-  "onboarding.start.title": "Þú hafðir það!",
-  "onboarding.steps.follow_people.body": "Þú ræktar heimastreymið þitt. Fyllum það með áhugaverðu fólki.",
-  "onboarding.steps.follow_people.title": "Fylgjast með {count, plural, one {einum aðila} other {# aðilum}}",
-  "onboarding.steps.publish_status.body": "Heilsaðu heiminum.",
-  "onboarding.steps.publish_status.title": "Gerðu fyrstu færsluna þína",
-  "onboarding.steps.setup_profile.body": "Annað fólk er líklegra til að eiga samskipti við þig ef þý setur einhverjar áhugaverðar upplýsingar í notandasniðið þitt.",
-  "onboarding.steps.setup_profile.title": "Sérsníddu notandasniðið þitt",
-  "onboarding.steps.share_profile.body": "Láttu vini þína vita hvernig þeir geta fundið þig á Mastodon!",
-  "onboarding.steps.share_profile.title": "Deildu notandasniðinu þínu",
-  "onboarding.tips.2fa": "<strong>Vissir þú?</strong> Þú getur gert aðganginn þinn öruggari með því að setja upp tveggja-þátta auðkenningu í stillingum aðgangsins þíns. Þetta virkar með hvaða TOTP-forriti sem er, án þess að nokkuð símanúmer sé nauðsynlegt!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Vissir þú?</strong> Þar sem Mastodon er þreifhýst kerfi, er næstum óhjákvæmilegt að sumt fólk sem þú rekst á sé hýst á öðrum netþjónum en þeim sem þú ert á. Samt geturðu átt hnökralaus samskipti við þetta fólk! Nafnið á netþjóninum þeirra er síðari hluti notandanafnsins!",
-  "onboarding.tips.migration": "<strong>Vissir þú?</strong> Ef þér finns eins og {domain} sé ekki endilega það sem henti þér í framtíðinni, þá geturðu flutt þig á annan Mastodon-netþjón án þess að missa fylgjendurna þína. Þú getur meira að segja hýst þinn eigin netþjón!",
-  "onboarding.tips.verification": "<strong>Vissir þú?</strong> Þú getur sannvottað aðganginn þinn með því að setja tengil á Mastodon-notandasniðið þitt inn á vefsvæðið þitt og síðan setja tengil á vefsvæðið þitt í notandasniðið þitt. Engin gjöld eða pappírsflóð!",
   "password_confirmation.exceeds_maxlength": "Staðfesting lykilorðs; fer fram úr hámarkslengd",
   "password_confirmation.mismatching": "Staðfesting lykilorðs; samsvara ekki",
   "picture_in_picture.restore": "Setja til baka",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index d947b59ea..f97103d8b 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -87,8 +87,11 @@
   "alert.unexpected.title": "Oops!",
   "alt_text_badge.title": "Testo alternativo",
   "announcement.announcement": "Annuncio",
+  "annual_report.summary.archetype.booster": "Cacciatore/trice di tendenze",
+  "annual_report.summary.archetype.lurker": "L'osservatore/trice",
   "annual_report.summary.archetype.oracle": "L'oracolo",
   "annual_report.summary.archetype.pollster": "Sondaggista",
+  "annual_report.summary.archetype.replier": "Utente socievole",
   "annual_report.summary.followers.followers": "seguaci",
   "annual_report.summary.followers.total": "{count} in totale",
   "annual_report.summary.here_it_is": "Ecco il tuo {year} in sintesi:",
@@ -126,7 +129,6 @@
   "bundle_column_error.routing.body": "Impossibile trovare la pagina richiesta. Sei sicuro che l'URL nella barra degli indirizzi sia corretto?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Chiudi",
-  "bundle_modal_error.message": "Qualcosa è andato storto scaricando questo componente.",
   "bundle_modal_error.retry": "Riprova",
   "closed_registrations.other_server_instructions": "Poiché Mastodon è decentralizzato, puoi creare un profilo su un altro server, pur continuando a interagire con questo.",
   "closed_registrations_modal.description": "Correntemente, è impossibile creare un profilo su {domain}, ma sei pregato di tenere presente che non necessiti di un profilo specificamente su {domain} per utilizzare Mastodon.",
@@ -137,13 +139,16 @@
   "column.blocks": "Utenti bloccati",
   "column.bookmarks": "Segnalibri",
   "column.community": "Cronologia locale",
+  "column.create_list": "Crea lista",
   "column.direct": "Menzioni private",
   "column.directory": "Sfoglia profili",
   "column.domain_blocks": "Domini bloccati",
+  "column.edit_list": "Modifica lista",
   "column.favourites": "Preferiti",
   "column.firehose": "Feed dal vivo",
   "column.follow_requests": "Richieste di seguirti",
   "column.home": "Home",
+  "column.list_members": "Gestisci i membri della lista",
   "column.lists": "Liste",
   "column.mutes": "Utenti silenziati",
   "column.notifications": "Notifiche",
@@ -156,6 +161,7 @@
   "column_header.pin": "Fissa",
   "column_header.show_settings": "Mostra le impostazioni",
   "column_header.unpin": "Non fissare",
+  "column_search.cancel": "Annulla",
   "column_subheading.settings": "Impostazioni",
   "community.column_settings.local_only": "Solo Locale",
   "community.column_settings.media_only": "Solo Media",
@@ -229,10 +235,6 @@
   "disabled_account_banner.text": "Il tuo profilo {disabledAccount} è correntemente disabilitato.",
   "dismissable_banner.community_timeline": "Questi sono i post pubblici più recenti da persone i cui profili sono ospitati da {domain}.",
   "dismissable_banner.dismiss": "Ignora",
-  "dismissable_banner.explore_links": "Queste notizie sono discusse da persone su questo e altri server della rete decentralizzata, al momento.",
-  "dismissable_banner.explore_statuses": "Questi sono post da tutto il social web che stanno guadagnando popolarità oggi. I post più recenti con più condivisioni e preferiti sono classificati più in alto.",
-  "dismissable_banner.explore_tags": "Questi hashtag stanno ottenendo popolarità tra le persone su questo e altri server della rete decentralizzata, al momento.",
-  "dismissable_banner.public_timeline": "Questi sono i post pubblici più recenti di persone sul social che le persone su {domain} seguono.",
   "domain_block_modal.block": "Blocca il server",
   "domain_block_modal.block_account_instead": "Blocca invece @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Le persone da questo server possono interagire con i tuoi vecchi post.",
@@ -461,11 +463,32 @@
   "link_preview.author": "Di {name}",
   "link_preview.more_from_author": "Altro da {name}",
   "link_preview.shares": "{count, plural, one {{counter} post} other {{counter} post}}",
+  "lists.add_member": "Aggiungi",
+  "lists.add_to_list": "Aggiungi alla lista",
+  "lists.add_to_lists": "Aggiungi {name} alle liste",
+  "lists.create": "Crea",
+  "lists.create_a_list_to_organize": "Crea una nuova lista per organizzare il tuo feed Home",
+  "lists.create_list": "Crea lista",
   "lists.delete": "Elimina elenco",
+  "lists.done": "Fatto",
   "lists.edit": "Modifica elenco",
+  "lists.exclusive": "Nascondi i membri in Home",
+  "lists.exclusive_hint": "Se qualcuno è presente in questa lista, nascondilo nel tuo feed Home per evitare di vedere i suoi post due volte.",
+  "lists.find_users_to_add": "Trova utenti da aggiungere",
+  "lists.list_members": "Membri della lista",
+  "lists.list_members_count": "{count, plural, one {# membro} other {# membri}}",
+  "lists.list_name": "Nome della lista",
+  "lists.new_list_name": "Nuovo nome della lista",
+  "lists.no_lists_yet": "Non ci sono ancora liste.",
+  "lists.no_members_yet": "Non ci sono ancora membri.",
+  "lists.no_results_found": "Nessun risultato trovato.",
+  "lists.remove_member": "Rimuovi",
   "lists.replies_policy.followed": "Qualsiasi utente seguito",
   "lists.replies_policy.list": "Membri dell'elenco",
   "lists.replies_policy.none": "Nessuno",
+  "lists.save": "Salva",
+  "lists.search_placeholder": "Cerca le persone che segui",
+  "lists.show_replies_to": "Includi le risposte dei membri della lista a",
   "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}",
   "loading_indicator.label": "Caricamento…",
   "media_gallery.hide": "Nascondi",
@@ -622,44 +645,21 @@
   "notifications_permission_banner.enable": "Abilita le notifiche desktop",
   "notifications_permission_banner.how_to_control": "Per ricevere le notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare precisamente quali tipi di interazioni generano le notifiche destkop, tramite il pulsante {icon} sopra, una volta abilitate.",
   "notifications_permission_banner.title": "Non perderti mai nulla",
-  "onboarding.action.back": "Torna indietro",
-  "onboarding.actions.back": "Torna indietro",
-  "onboarding.actions.go_to_explore": "Guarda le tendenze",
-  "onboarding.actions.go_to_home": "Vai alla cronologia della tua home",
-  "onboarding.compose.template": "Ciao #Mastodon!",
+  "onboarding.follows.back": "Indietro",
+  "onboarding.follows.done": "Fatto",
   "onboarding.follows.empty": "Sfortunatamente, nessun risultato può essere mostrato in questo momento. Puoi provare a utilizzare la ricerca o sfogliare la pagina di esplorazione per trovare persone da seguire, oppure riprova più tardi.",
-  "onboarding.follows.lead": "La cronologia della tua home è gestita da te. Più persone segui, più attiva e interessante sarà. Questi profili possono essere un buon punto di partenza; puoi sempre smettere di seguirli in seguito!",
-  "onboarding.follows.title": "Popolare su Mastodon",
+  "onboarding.follows.search": "Cerca",
+  "onboarding.follows.title": "Segui le persone per iniziare",
   "onboarding.profile.discoverable": "Rendi il mio profilo rilevabile",
   "onboarding.profile.discoverable_hint": "Quando attivi la rilevabilità su Mastodon, i tuoi post potrebbero apparire nei risultati di ricerca e nelle tendenze e il tuo profilo potrebbe essere suggerito a persone con interessi simili ai tuoi.",
   "onboarding.profile.display_name": "Nome da visualizzare",
   "onboarding.profile.display_name_hint": "Il tuo nome completo o il tuo nome divertente…",
-  "onboarding.profile.lead": "Puoi sempre completarlo in un secondo momento nelle impostazioni, dove sono disponibili ancora più opzioni di personalizzazione.",
   "onboarding.profile.note": "Biografia",
   "onboarding.profile.note_hint": "Puoi @menzionare altre persone o #hashtags…",
   "onboarding.profile.save_and_continue": "Salva e continua",
   "onboarding.profile.title": "Configurazione del profilo",
   "onboarding.profile.upload_avatar": "Carica l'immagine del profilo",
   "onboarding.profile.upload_header": "Carica l'intestazione del profilo",
-  "onboarding.share.lead": "Fai sapere alle persone come possono trovarti su Mastodon!",
-  "onboarding.share.message": "Sono {username} su #Mastodon! Vieni a seguirmi su {url}",
-  "onboarding.share.next_steps": "Possibili passaggi successivi:",
-  "onboarding.share.title": "Condividi il tuo profilo",
-  "onboarding.start.lead": "Il tuo nuovo account Mastodon è pronto. Ecco come puoi sfruttarlo al meglio:",
-  "onboarding.start.skip": "Vuoi saltare tutto questo?",
-  "onboarding.start.title": "Ce l'hai fatta!",
-  "onboarding.steps.follow_people.body": "Gestisci la tua cronologia. Riempila di persone interessanti.",
-  "onboarding.steps.follow_people.title": "Segui {count, plural, one {una persona} other {# persone}}",
-  "onboarding.steps.publish_status.body": "Dì ciao al mondo.",
-  "onboarding.steps.publish_status.title": "Scrivi il tuo primo post",
-  "onboarding.steps.setup_profile.body": "Gli altri hanno maggiori probabilità di interagire con te se completi il tuo profilo.",
-  "onboarding.steps.setup_profile.title": "Personalizza il tuo profilo",
-  "onboarding.steps.share_profile.body": "Fai sapere ai tuoi amici come trovarti su Mastodon!",
-  "onboarding.steps.share_profile.title": "Condividi il tuo profilo",
-  "onboarding.tips.2fa": "<strong>Lo sapevi?</strong> Puoi proteggere il tuo account impostando l'autenticazione a due fattori nelle impostazioni del tuo account. Funziona con qualsiasi app TOTP di tua scelta, nessun numero di telefono necessario!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Lo sapevi?</strong> Dal momento che Mastodon è decentralizzato, alcuni profili che incontrerai sono ospitati su server diversi dal tuo. Ma puoi interagire con loro senza problemi! Il loro server è nella seconda metà del loro nome utente!",
-  "onboarding.tips.migration": "<strong>Lo sapevi?</strong> Se ritieni che {domain} non sia un'ottima scelta di server per te in futuro, puoi spostarti su un altro server Mastodon senza perdere i tuoi seguaci. Puoi persino ospitare il tuo server!",
-  "onboarding.tips.verification": "<strong>Lo sapevi?</strong> Puoi verificare il tuo account inserendo un collegamento al tuo profilo Mastodon sul tuo sito web e aggiungendo il sito web al tuo profilo. Nessuna spesa o documento necessario!",
   "password_confirmation.exceeds_maxlength": "La conferma della password supera la lunghezza massima della password",
   "password_confirmation.mismatching": "Le password non corrispondono",
   "picture_in_picture.restore": "Ripristinala",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 1f891b9f9..b08b81193 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -128,7 +128,6 @@
   "bundle_column_error.routing.body": "要求されたページは見つかりませんでした。アドレスバーのURLは正しいですか?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "閉じる",
-  "bundle_modal_error.message": "コンポーネントの読み込み中に問題が発生しました。",
   "bundle_modal_error.retry": "再試行",
   "closed_registrations.other_server_instructions": "Mastodonは分散型なので他のサーバーにアカウントを作ってもこのサーバーとやり取りできます。",
   "closed_registrations_modal.description": "現在{domain}でアカウント作成はできませんがMastodonは{domain}のアカウントでなくても利用できます。",
@@ -231,10 +230,6 @@
   "disabled_account_banner.text": "あなたのアカウント『{disabledAccount}』は現在無効になっています。",
   "dismissable_banner.community_timeline": "これらは{domain}がホストしている人たちの最新の公開投稿です。",
   "dismissable_banner.dismiss": "閉じる",
-  "dismissable_banner.explore_links": "ネットワーク上で話題になっているニュースです。たくさんのユーザーにシェアされた記事ほど上位に表示されます。",
-  "dismissable_banner.explore_statuses": "ネットワーク上で注目を集めている投稿です。ブーストやお気に入り登録の多い新しい投稿が上位に表示されます。",
-  "dismissable_banner.explore_tags": "ネットワーク上でトレンドになっているハッシュタグです。たくさんのユーザーに使われたタグほど上位に表示されます。",
-  "dismissable_banner.public_timeline": "{domain}のユーザーがリモートフォローしているアカウントからの公開投稿のタイムラインです。",
   "domain_block_modal.block": "サーバーをブロック",
   "domain_block_modal.block_account_instead": "@{name} さんのみをブロック",
   "domain_block_modal.they_can_interact_with_old_posts": "あなたの今までの投稿は、引き続きこのサーバーのユーザーが閲覧できます。",
@@ -624,44 +619,17 @@
   "notifications_permission_banner.enable": "デスクトップ通知を有効にする",
   "notifications_permission_banner.how_to_control": "Mastodonを閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。",
   "notifications_permission_banner.title": "お見逃しなく",
-  "onboarding.action.back": "チュートリアルに戻る",
-  "onboarding.actions.back": "チュートリアルに戻る",
-  "onboarding.actions.go_to_explore": "話題をさがす",
-  "onboarding.actions.go_to_home": "タイムラインに移動",
-  "onboarding.compose.template": "#Mastodon はじめました",
   "onboarding.follows.empty": "表示できる結果はありません。検索やエクスプローラーを使ったり、ほかのアカウントをフォローしたり、後でもう一度試しください。",
-  "onboarding.follows.lead": "ホームタイムラインはMastodonの軸足となる場所です。たくさんのユーザーをフォローすることで、ホームタイムラインはよりにぎやかでおもしろいものになります。手はじめに、おすすめのアカウントから何人かフォローしてみましょう:",
-  "onboarding.follows.title": "ホームタイムラインを埋める",
   "onboarding.profile.discoverable": "自分のプロフィールが見つけられるようにする",
   "onboarding.profile.discoverable_hint": "Mastodonの「見つける」機能にオプトインすると、あなたの投稿が検索結果やトレンドに表示されることがあります。また、あなたに似た関心を持つ人にプロフィールがおすすめされることがあります。",
   "onboarding.profile.display_name": "表示名",
   "onboarding.profile.display_name_hint": "フルネーム、あるいは面白い名前など",
-  "onboarding.profile.lead": "あとでいつでも修正できますし、設定画面にはこれ以外のカスタマイズ項目もあります。",
   "onboarding.profile.note": "自己紹介",
   "onboarding.profile.note_hint": "ほかのユーザーへのメンション (@mention) や、 #ハッシュタグ が使用できます",
   "onboarding.profile.save_and_continue": "保存して続ける",
   "onboarding.profile.title": "プロフィールの設定",
   "onboarding.profile.upload_avatar": "プロフィール画像をアップロード",
   "onboarding.profile.upload_header": "プロフィールのヘッダー画像をアップロード",
-  "onboarding.share.lead": "新しいMastodonのアカウントをみんなに紹介しましょう。",
-  "onboarding.share.message": "「{username}」で #Mastodon はじめました! {url}",
-  "onboarding.share.next_steps": "次のステップに進む:",
-  "onboarding.share.title": "プロフィールをシェアする",
-  "onboarding.start.lead": "Mastodonへようこそ。Mastodonは非中央集権型SNSのひとつで、ユーザーそれぞれの考えかたを尊重するプラットフォームです。ユーザーはどんな「好き」も自由に追いかけることができます。次のステップに進んで、新天地でのつながりをみつけましょう:",
-  "onboarding.start.skip": "チュートリアルをスキップする:",
-  "onboarding.start.title": "はじめに",
-  "onboarding.steps.follow_people.body": "ユーザーをフォローしてみましょう。これがMastodonを楽しむ基本です。",
-  "onboarding.steps.follow_people.title": "ホームタイムラインを埋める",
-  "onboarding.steps.publish_status.body": "試しになにか書いてみましょう。写真、ビデオ、アンケートなど、なんでも大丈夫です {emoji}",
-  "onboarding.steps.publish_status.title": "はじめての投稿",
-  "onboarding.steps.setup_profile.body": "ほかのユーザーが親しみやすいように、プロフィールを整えましょう。",
-  "onboarding.steps.setup_profile.title": "プロフィールを完成させる",
-  "onboarding.steps.share_profile.body": "Mastodonのアカウントをほかの人に紹介しましょう。",
-  "onboarding.steps.share_profile.title": "プロフィールをシェアする",
-  "onboarding.tips.2fa": "<strong>ワンポイント</strong> アカウント設定から2要素認証を有効にして、アカウントのセキュリティを強化しておきましょう。認証には任意のワンタイムパスワード(TOTP)アプリを利用でき、電話番号は不要です。",
-  "onboarding.tips.accounts_from_other_servers": "<strong>ワンポイント</strong> Mastodon はたくさんのサーバーがつながりあってできている非中央集権型のSNSです。いくつかのアカウントはこことは別のサーバーに所属していることがありますが、サーバーの違いを意識しなくても同じようにフォローすることができます。サーバーが異なる場合は、ユーザー名の後半にサーバー名が表示されます。",
-  "onboarding.tips.migration": "<strong>ワンポイント</strong> もしも {domain} の雰囲気が合わないと感じたときは、ほかのMastodonサーバーにフォロワーを引き継いだまま引っ越しできます。また、自分で独自のサーバーを開設することも可能です。",
-  "onboarding.tips.verification": "<strong>ワンポイント</strong> webサイトを持っている場合は、webサイトにMastodonアカウントへのリンクを掲載し、さらにアカウントのプロフィール側にもwebサイトへのリンクを追加することで、アカウントが自分のものであることを証明できます。課金や書類の提出は必要ありません。",
   "password_confirmation.exceeds_maxlength": "パスワードの最大文字数を超えています",
   "password_confirmation.mismatching": "入力済みのパスワードと一致しません",
   "picture_in_picture.restore": "元に戻す",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index b38cc0e44..1b35b8138 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -37,7 +37,6 @@
   "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს",
   "bundle_column_error.retry": "სცადეთ კიდევ ერთხელ",
   "bundle_modal_error.close": "დახურვა",
-  "bundle_modal_error.message": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
   "bundle_modal_error.retry": "სცადეთ კიდევ ერთხელ",
   "column.blocks": "დაბლოკილი მომხმარებლები",
   "column.community": "ლოკალური თაიმლაინი",
@@ -77,8 +76,6 @@
   "confirmations.redraft.confirm": "გაუქმება და გადანაწილება",
   "confirmations.unfollow.confirm": "ნუღარ მიჰყვები",
   "confirmations.unfollow.message": "დარწმუნებული ხართ, აღარ გსურთ მიჰყვებოდეთ {name}-ს?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "ეს სტატუსი ჩასვით თქვენს ვებ-საიტზე შემდეგი კოდის კოპირებით.",
   "embed.preview": "ესაა თუ როგორც გამოჩნდება:",
   "emoji_button.activity": "აქტივობა",
@@ -176,19 +173,6 @@
   "notifications.column_settings.sound": "ხმის დაკვრა",
   "notifications.column_settings.status": "New toots:",
   "notifications.group": "{count} შეტყობინება",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "სტატუსის კონფიდენციალურობის მითითება",
   "privacy.public.short": "საჯარო",
   "regeneration_indicator.label": "იტვირთება…",
diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json
index 74d8e5a19..41c0ba627 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -92,7 +92,6 @@
   "bundle_column_error.routing.body": "Asebter i d-yettwasutren ur yettwaf ara. Tetḥeqqeḍ belli tansa URL deg ufeggag n tansa tṣeḥḥa?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Mdel",
-  "bundle_modal_error.message": "Tella-d kra n tuccḍa mi d-yettali ugbur-agi.",
   "bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen",
   "closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.",
   "closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen",
@@ -179,9 +178,6 @@
   "directory.recently_active": "Yermed xas melmi kan",
   "disabled_account_banner.account_settings": "Iɣewwaṛen n umiḍan",
   "dismissable_banner.dismiss": "Agi",
-  "dismissable_banner.explore_links": "D tiqsiḍin n yisallen i yettwabḍan ass-a deg web inmetti. Tiqsiḍin n yisallen timaynutin i d-yettwassufɣen s wugar n medden yemgaraden, d tid i d-yufraren ugar.",
-  "dismissable_banner.explore_statuses": "Ti d tisufaɣ seg uzeṭṭa anmetti i d-yettawin tamyigawt ass-a. Tisufaɣ timaynutin yesεan aṭas n lǧehd d tid iḥemmlen s waṭas, ttwaεlayit d timezwura.",
-  "dismissable_banner.explore_tags": "D wiyi i d ihacṭagen i d-yettawin tamyigawt deg web anmetti ass-a. Ihacṭagen i sseqdacen ugar n medden, εlayit d imezwura.",
   "domain_block_modal.block": "Sewḥel aqeddac",
   "domain_block_modal.they_cant_follow": "Yiwen ur yezmir ad k·m-id-yeḍfer seg uqeddac-a.",
   "domain_block_modal.they_wont_know": "Ur-d yettawi ara s lexbaṛ belli yettuseḥbes.",
@@ -444,13 +440,6 @@
   "notifications.policy.filter_private_mentions_title": "Abdar uslig ur yettwasferken ara",
   "notifications_permission_banner.enable": "Rmed alɣuten n tnarit",
   "notifications_permission_banner.title": "Ur zeggel acemma",
-  "onboarding.action.back": "Tuɣalin ɣer deffir",
-  "onboarding.actions.back": "Tuɣalin ɣer deffir",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Azul a #Mastodon!",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Ttwassnen deg Mastodon",
   "onboarding.profile.display_name": "Isem ara d-yettwaskanen",
   "onboarding.profile.display_name_hint": "Isem-ik·im ummid neɣ isem-ik·im n uqeṣṣer…",
   "onboarding.profile.note": "Tameddurt",
@@ -459,20 +448,6 @@
   "onboarding.profile.title": "Asbadu n umaɣnu",
   "onboarding.profile.upload_avatar": "Sali tugna n umaɣnu",
   "onboarding.profile.upload_header": "Sali tacacit n umaɣnu",
-  "onboarding.share.lead": "Ini-asen i medden amek ara k·m-id-afen deg Mastodon!",
-  "onboarding.share.message": "Nekk d {username} deg #Mastodon! Ḍfer iyi-d sya {url}",
-  "onboarding.share.title": "Bḍu amaɣnu-inek·inem",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Tseggmeḍ-tt !",
-  "onboarding.steps.follow_people.body": "Aḍfer n medden yelhan, d tikti n Mastodon.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Ini-as azul i umaḍal s uḍris, s tiwlafin, s tividyutin neɣ s tefranin {emoji}",
-  "onboarding.steps.publish_status.title": "Aru tasuffeɣt-inek·inem tamezwarutt",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Err-it amkan-is",
   "poll.closed": "Tfukk",
   "poll.refresh": "Smiren",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index fad2807ff..74199fcf4 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -62,7 +62,6 @@
   "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}",
   "bundle_column_error.retry": "Қайтадан көріңіз",
   "bundle_modal_error.close": "Жабу",
-  "bundle_modal_error.message": "Бұл компонентті жүктеген кезде бір қате пайда болды.",
   "bundle_modal_error.retry": "Қайтадан көріңіз",
   "column.blocks": "Бұғатталғандар",
   "column.bookmarks": "Бетбелгілер",
@@ -121,8 +120,6 @@
   "directory.local": "Тек {domain} доменінен",
   "directory.new_arrivals": "Жаңадан келгендер",
   "directory.recently_active": "Жақында кіргендер",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Төмендегі кодты көшіріп алу арқылы жазбаны басқа сайттарға да орналастыра аласыз.",
   "embed.preview": "Былай көрінетін болады:",
   "emoji_button.activity": "Белсенділік",
@@ -254,19 +251,6 @@
   "notifications.filter.mentions": "Аталымдар",
   "notifications.filter.polls": "Сауалнама нәтижелері",
   "notifications.group": "{count} ескертпе",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "Жабық",
   "poll.refresh": "Жаңарту",
   "poll.total_people": "{count, plural, one {# адам} other {# адам}}",
diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json
index 941857e25..a5737627e 100644
--- a/app/javascript/mastodon/locales/kn.json
+++ b/app/javascript/mastodon/locales/kn.json
@@ -29,8 +29,6 @@
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No toots here!",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
@@ -74,19 +72,6 @@
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
   "notifications.column_settings.status": "New toots:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index ac19040d3..c8e721735 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "요청하신 페이지를 찾을 수 없습니다. 주소창에 적힌 URL이 확실히 맞나요?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "닫기",
-  "bundle_modal_error.message": "컴포넌트를 불러오는 중 문제가 발생했습니다.",
+  "bundle_modal_error.message": "이 화면을 불러오는 중 뭔가 잘못되었습니다.",
   "bundle_modal_error.retry": "다시 시도",
   "closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.",
   "closed_registrations_modal.description": "{domain}은 현재 가입이 불가능합니다. 하지만 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.",
@@ -140,13 +140,16 @@
   "column.blocks": "차단한 사용자",
   "column.bookmarks": "북마크",
   "column.community": "로컬 타임라인",
+  "column.create_list": "리스트 만들기",
   "column.direct": "개인적인 멘션",
   "column.directory": "프로필 둘러보기",
   "column.domain_blocks": "차단한 도메인",
+  "column.edit_list": "리스트 편집",
   "column.favourites": "좋아요",
   "column.firehose": "실시간 피드",
   "column.follow_requests": "팔로우 요청",
   "column.home": "홈",
+  "column.list_members": "리스트 구성원 관리",
   "column.lists": "리스트",
   "column.mutes": "뮤트한 사용자",
   "column.notifications": "알림",
@@ -159,6 +162,7 @@
   "column_header.pin": "고정하기",
   "column_header.show_settings": "설정 보이기",
   "column_header.unpin": "고정 해제",
+  "column_search.cancel": "취소",
   "column_subheading.settings": "설정",
   "community.column_settings.local_only": "로컬만",
   "community.column_settings.media_only": "미디어만",
@@ -232,10 +236,10 @@
   "disabled_account_banner.text": "당신의 계정 {disabledAccount}는 현재 비활성화 상태입니다.",
   "dismissable_banner.community_timeline": "여기 있는 것들은 계정이 {domain}에 있는 사람들의 최근 공개 게시물들입니다.",
   "dismissable_banner.dismiss": "지우기",
-  "dismissable_banner.explore_links": "이 소식들은 오늘 소셜 웹에서 가장 많이 공유된 내용들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.",
-  "dismissable_banner.explore_statuses": "이 게시물들은 오늘 소셜 웹에서 호응을 얻고 있는 게시물들입니다. 부스트와 관심을 받는 새로운 글들이 높은 순위가 됩니다.",
-  "dismissable_banner.explore_tags": "이 해시태그들은 이 서버와 분산화된 네트워크의 다른 서버에서 사람들의 인기를 끌고 있는 것들입니다.",
-  "dismissable_banner.public_timeline": "이것들은 {domain}에 있는 사람들이 팔로우한 사람들의 최신 공개 게시물들입니다.",
+  "dismissable_banner.explore_links": "이 소식들은 오늘 연합우주에서 가장 많이 공유된 것들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.",
+  "dismissable_banner.explore_statuses": "이 게시물들은 오늘 연합우주에서 호응을 얻고 있는 게시물들입니다. 부스트와 관심을 받는 새로운 글들이 높은 순위가 됩니다.",
+  "dismissable_banner.explore_tags": "이 해시태그들은 연합우주에서 사람들의 인기를 끌고 있는 것들입니다. 다양한 사람들이 사용하는 해시태그일수록 높은 순위가 됩니다.",
+  "dismissable_banner.public_timeline": "이것은 {domain}에서 팔로우한 사람들의 최신 공개 게시물들입니다.",
   "domain_block_modal.block": "서버 차단",
   "domain_block_modal.block_account_instead": "대신 @{name}를 차단",
   "domain_block_modal.they_can_interact_with_old_posts": "이 서버에 있는 사람들이 내 예전 게시물에 상호작용할 수는 있습니다.",
@@ -359,6 +363,7 @@
   "footer.status": "상태",
   "generic.saved": "저장됨",
   "getting_started.heading": "시작하기",
+  "hashtag.admin_moderation": "#{name}에 대한 중재화면 열기",
   "hashtag.column_header.tag_mode.all": "및 {additional}",
   "hashtag.column_header.tag_mode.any": "또는 {additional}",
   "hashtag.column_header.tag_mode.none": "{additional}를 제외하고",
@@ -464,11 +469,32 @@
   "link_preview.author": "{name}",
   "link_preview.more_from_author": "{name} 프로필 보기",
   "link_preview.shares": "{count, plural, other {{counter} 개의 게시물}}",
+  "lists.add_member": "추가",
+  "lists.add_to_list": "리스트에 추가",
+  "lists.add_to_lists": "리스트에 {name} 추가",
+  "lists.create": "생성",
+  "lists.create_a_list_to_organize": "새 리스트를 만들어 홈 피드를 정리하세요",
+  "lists.create_list": "리스트 생성",
   "lists.delete": "리스트 삭제",
+  "lists.done": "완료",
   "lists.edit": "리스트 편집",
+  "lists.exclusive": "구성원을 홈에서 숨기기",
+  "lists.exclusive_hint": "누군가가 이 리스트에 있으면 홈 피드에서는 숨겨 게시물을 두 번 보는 것을 방지합니다.",
+  "lists.find_users_to_add": "추가할 사용자 검색",
+  "lists.list_members": "리스트 구성원",
+  "lists.list_members_count": "{count, plural, other {# 명}}",
+  "lists.list_name": "리스트 이름",
+  "lists.new_list_name": "새 리스트 이름",
+  "lists.no_lists_yet": "아직 아무 리스트도 없습니다.",
+  "lists.no_members_yet": "아직 구성원이 없습니다.",
+  "lists.no_results_found": "결과가 없습니다.",
+  "lists.remove_member": "삭제",
   "lists.replies_policy.followed": "팔로우 한 사용자 누구나",
   "lists.replies_policy.list": "리스트의 구성원",
   "lists.replies_policy.none": "모두 제외",
+  "lists.save": "저장",
+  "lists.search_placeholder": "팔로우 중인 사람 찾기",
+  "lists.show_replies_to": "리스트 구성원의 답글또한 포함하기",
   "load_pending": "{count, plural, other {#}} 개의 새 항목",
   "loading_indicator.label": "불러오는 중...",
   "media_gallery.hide": "숨기기",
@@ -625,44 +651,21 @@
   "notifications_permission_banner.enable": "데스크탑 알림 활성화",
   "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.",
   "notifications_permission_banner.title": "아무것도 놓치지 마세요",
-  "onboarding.action.back": "돌아가기",
-  "onboarding.actions.back": "돌아가기",
-  "onboarding.actions.go_to_explore": "무엇이 유행인지 보러 가기",
-  "onboarding.actions.go_to_home": "홈 피드로 가기",
-  "onboarding.compose.template": "안녕 #마스토돈!",
+  "onboarding.follows.back": "뒤로가기",
+  "onboarding.follows.done": "완료",
   "onboarding.follows.empty": "안타깝지만 아직은 아무 것도 보여드릴 수 없습니다. 검색을 이용하거나 둘러보기 페이지에서 팔로우 할 사람을 찾을 수 있습니다. 아니면 잠시 후에 다시 시도하세요.",
-  "onboarding.follows.lead": "홈 피드는 마스토돈을 경험하는 주된 경로입니다. 더 많은 사람들을 팔로우 할수록 더 활발하고 흥미로워질 것입니다. 여기 시작을 위한 몇몇 추천을 드립니다:",
-  "onboarding.follows.title": "내게 맞는 홈 피드 꾸미기",
+  "onboarding.follows.search": "검색",
+  "onboarding.follows.title": "사람들을 팔로우하기",
   "onboarding.profile.discoverable": "내 프로필을 발견 가능하도록 설정",
   "onboarding.profile.discoverable_hint": "마스토돈의 발견하기 기능에 참여하면 게시물이 검색 결과와 유행 란에 표시될 수 있고, 비슷한 관심사를 가진 사람들에게 자신의 프로필이 추천될 수 있습니다.",
   "onboarding.profile.display_name": "표시되는 이름",
   "onboarding.profile.display_name_hint": "진짜 이름 또는 재미난 이름…",
-  "onboarding.profile.lead": "언제든지 나중에 설정 메뉴에서 마저 할 수 있고, 그곳에서 더 많은 맞춤 옵션을 고를 수 있습니다.",
   "onboarding.profile.note": "자기소개",
   "onboarding.profile.note_hint": "남을 @mention 하거나 #hashtag 태그를 달 수 있습니다…",
   "onboarding.profile.save_and_continue": "저장 및 계속",
   "onboarding.profile.title": "프로필 설정",
   "onboarding.profile.upload_avatar": "프로필 사진 업로드",
   "onboarding.profile.upload_header": "프로필 헤더 업로드",
-  "onboarding.share.lead": "여러 사람에게 마스토돈에서 나를 찾을 수 있는 방법을 알립니다!",
-  "onboarding.share.message": "#마스토돈 이용하는 {username}입니다! {url} 에서 저를 팔로우 해보세요",
-  "onboarding.share.next_steps": "할만한 다음 단계:",
-  "onboarding.share.title": "프로필 공유하기",
-  "onboarding.start.lead": "특별하고, —알고리즘이 아닌— 내가 내 경험을 만들어 나가는 분산화된 소셜미디어인 마스토돈의 일원이 되셨습니다. 이 새로운 사회에서 새로운 출발을 해 봅시다:",
-  "onboarding.start.skip": "도움이 필요 없으신가요?",
-  "onboarding.start.title": "해내셨군요!",
-  "onboarding.steps.follow_people.body": "흥미로운 사람들을 팔로우하는 것은 마스토돈의 전부입니다.",
-  "onboarding.steps.follow_people.title": "내게 맞는 홈 피드 꾸미기",
-  "onboarding.steps.publish_status.body": "글, 사진, 영상, 설문 또는 {emoji}와 함께 세상에 인사해보세요.",
-  "onboarding.steps.publish_status.title": "첫번째 게시물 쓰기",
-  "onboarding.steps.setup_profile.body": "의미있는 프로필을 작성해 상호작용을 늘려보세요.",
-  "onboarding.steps.setup_profile.title": "프로필 꾸미기",
-  "onboarding.steps.share_profile.body": "친구에게 마스토돈에서 나를 찾을 수 있는 방법을 알려주세요!",
-  "onboarding.steps.share_profile.title": "프로필 공유하기",
-  "onboarding.tips.2fa": "<strong>알고 계신가요?</strong> 계정 설정 페이지에서 2단계 인증을 설정해 계정을 더 안전하게 할 수 있습니다. 마음에 드는 아무 TOTP 앱이나 사용 가능하며 전화번호는 필요 없습니다!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>알고 계신가요?</strong> 마스토돈은 분산형이기 때문에 만날 수 있는 사람들이 내 서버가 아닌 다른 서버에 존재할 수도 있습니다. 그리고 자연스럽게 상호작용 할 수 있습니다! 그들의 서버는 그들의 사용자명의 뒤쪽 절반입니다!",
-  "onboarding.tips.migration": "<strong>알고 계신가요?</strong> 나중에 가서 {domain}이 좋은 선택이 아니었다고 느껴질 때 팔로워를 유지하면서 다른 서버로 옮겨갈 수 있습니다. 심지어 스스로 서버를 세울 수도 있습니다!",
-  "onboarding.tips.verification": "<strong>알고 계신가요?</strong> 자신의 웹사이트에 마스토돈 프로필 링크를 넣은 후 프로필에 그 웹사이트를 넣으면 계정을 검증할 수 있습니다. 수수료나 서류가 필요하지 않습니다!",
   "password_confirmation.exceeds_maxlength": "암호 확인 값이 최대 암호 길이를 초과하였습니다",
   "password_confirmation.mismatching": "암호 확인 값이 일치하지 않습니다",
   "picture_in_picture.restore": "다시 넣기",
diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json
index d15fbb676..0ef4bb8ce 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -83,7 +83,6 @@
   "bundle_column_error.routing.body": "Rûpela xwestî nehate dîtin. Tu pê bawerî ku girêdana di darika navnîşanê de rast e?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Bigire",
-  "bundle_modal_error.message": "Di dema barkirina vê hêmanê de tiştek çewt çê bû.",
   "bundle_modal_error.retry": "Dîsa bicerbîne",
   "closed_registrations.other_server_instructions": "Ji ber ku Mastodon nenavendî ye, tu dika li ser rajekarek din ajimêrekê biafirînî û hîn jî bi vê yekê re tev bigerî.",
   "closed_registrations_modal.description": "Afirandina ajimêrekê li ser {domain} niha ne pêkan e, lê ji kerema xwe ji bîr neke ku pêdiviya te bi hebûna ajimêreke taybet li ser {domain} tune ye ku tu Mastodon bi kar bînî.",
@@ -159,8 +158,6 @@
   "disabled_account_banner.text": "Ajimêrê te {disabledAccount} niha neçalak e.",
   "dismissable_banner.community_timeline": "Ev şandiyên giştî yên herî dawî ji kesên ku ajimêrê wan ji aliyê {domain} ve têne pêşkêşkirin.",
   "dismissable_banner.dismiss": "Paşguh bike",
-  "dismissable_banner.explore_links": "Ev çîrokên nûçeyan niha li ser vê û rajekarên din ên tora nenavendî ji aliyê mirovan ve têne axaftin.",
-  "dismissable_banner.explore_tags": "Ev hashtagên ji vê û rajekarên din ên di tora nenavendî de niha li ser vê rajekarê balê dikşînin.",
   "embed.instructions": "Bi jêgirtina koda jêrîn vê şandiyê li ser malpera xwe bi cih bike.",
   "embed.preview": "Ew ê çawa xuya bibe li vir tê nîşandan:",
   "emoji_button.activity": "Çalakî",
@@ -366,20 +363,6 @@
   "notifications_permission_banner.enable": "Agahdarîyên sermaseyê çalak bike",
   "notifications_permission_banner.how_to_control": "Da ku agahdariyên mastodon bistînî gava ne vekirî be. Agahdariyên sermaseyê çalak bike\n Tu dikarî agahdariyên sermaseyê bi rê ve bibî ku bi hemû cureyên çalakiyên ên ku agahdariyan rû didin ku bi riya tikandînê li ser bişkoka {icon} çalak dibe.",
   "notifications_permission_banner.title": "Tu tiştî bîr neke",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.share.title": "Profîla xwe parve bike",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Vegerîne paş",
   "poll.closed": "Girtî",
   "poll.refresh": "Nû bike",
diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json
index 49f8149f6..476038e97 100644
--- a/app/javascript/mastodon/locales/kw.json
+++ b/app/javascript/mastodon/locales/kw.json
@@ -43,7 +43,6 @@
   "boost_modal.combo": "Hwi a yll gwaska {combo} dhe woheles hemma an nessa tro",
   "bundle_column_error.retry": "Assayewgh arta",
   "bundle_modal_error.close": "Degea",
-  "bundle_modal_error.message": "Neppyth eth yn kamm ow karga'n elven ma.",
   "bundle_modal_error.retry": "Assayewgh arta",
   "column.blocks": "Devnydhyoryon lettys",
   "column.bookmarks": "Folennosow",
@@ -102,8 +101,6 @@
   "directory.local": "A {domain} hepken",
   "directory.new_arrivals": "Devedhyansow nowydh",
   "directory.recently_active": "Bew a-gynsow",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Stagewgh an post ma a-berth yn agas gwiasva ow tasskrifa'n kod a-wòles.",
   "embed.preview": "Ottomma fatel hevel:",
   "emoji_button.activity": "Gwrians",
@@ -252,19 +249,6 @@
   "notifications_permission_banner.enable": "Gweythresa gwarnyansow pennskrin",
   "notifications_permission_banner.how_to_control": "Dhe dhegemeres gwarnyansow pan na vo Mastodon ygerys, gwrewgh gweythresa gwarnyansow pennskrin. Hwi a yll dyghtya py eghennow a ynterweythresow a wra gwarnyansow pennskrin der an boton {icon} a-wartha, pan vons gweythresys.",
   "notifications_permission_banner.title": "Na wrewgh kelli travyth",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Daskor e",
   "poll.closed": "Deges",
   "poll.refresh": "Daskarga",
diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json
index fc36d8927..d0d7c574a 100644
--- a/app/javascript/mastodon/locales/la.json
+++ b/app/javascript/mastodon/locales/la.json
@@ -58,8 +58,6 @@
   "confirmations.reply.confirm": "Respondere",
   "disabled_account_banner.account_settings": "Praeferentiae ratiōnis",
   "disabled_account_banner.text": "Ratio tua {disabledAccount} debilitata est.",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "domain_block_modal.you_wont_see_posts": "Nuntios aut notificātiōnēs ab usoribus in hōc servō nōn vidēbis.",
   "domain_pill.activitypub_like_language": "ActivityPub est velut lingua quam Mastodon cum aliīs sociālibus rētibus loquitur.",
   "domain_pill.your_handle": "Tuus nominulus:",
@@ -167,27 +165,8 @@
   "notifications.filter.all": "Omnia",
   "notifications.filter.polls": "Eventus electionis",
   "notifications.group": "Notificātiōnēs",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "Tua domus feed est principalis via Mastodon experīrī. Quō plūrēs persōnas sequeris, eō actīvior et interessantior erit. Ad tē incipiendum, ecce quaedam suāsiones:",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.display_name_hint": "Tuum nomen completum aut tuum nomen ludens…",
-  "onboarding.profile.lead": "Hoc semper postea in ratiōnibus complērī potest, ubi etiam plūrēs optiōnēs personalizātiōnis praesto sunt.",
   "onboarding.profile.note_hint": "Alios hominēs vel #hashtags @nōmināre potes…",
-  "onboarding.start.lead": "Nunc pars es Mastodonis, singularis, socialis medii platformae decentralis ubi—non algorismus—tuam ipsius experientiam curas. Incipiāmus in nova hac socialis regione:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Perfecisti eam!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Scisne?</strong>  Tūam ratiōnem sēcūrāre potes duōrum elementōrum authentīcātiōnem in ratiōnis tuī praeferentiīs statuendō. Cum ūllā app TOTP ex tuā ēlēctiōne operātur, numerus tēlephōnicus necessārius nōn est!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Scisne?</strong> Quoniam Mastodon dēcentrālis est, nōnnulla profīlia quae invenīs in servīs aliīs quam tuōrum erunt hospitāta. Tamen cum eīs sine impedīmentō interāgere potes! Servus eōrum in alterā parte nōminis eōrum est!",
-  "onboarding.tips.migration": "<strong>Scisne?</strong> Sī sentīs {domain} tibi in futūrō nōn esse optimam servī ēlēctiōnem, ad alium servum Mastodon sine amittendō sectātōribus tuīs migrāre potes. Etiam tuum servum hospitārī potes!",
-  "onboarding.tips.verification": "<strong>Scisne?</strong>  Tūam ratiōnem verificāre potes iungendō nexum ad prōfīlium Mastodon tuum in propriā pāginā interrētiā et addendō pāginam ad prōfīlium tuum. Nullae pecūniae aut documenta necessāria sunt!",
   "poll.closed": "Clausum",
   "poll.total_people": "{count, plural, one {# persona} other {# personae}}",
   "poll.total_votes": "{count, plural, one {# suffragium} other {# suffragia}}",
diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json
index 9f4f6e6cb..5bb0f9cca 100644
--- a/app/javascript/mastodon/locales/lad.json
+++ b/app/javascript/mastodon/locales/lad.json
@@ -119,7 +119,6 @@
   "bundle_column_error.routing.body": "No se pudo trokar la pajina solisitada. Estas siguro ke el adreso URL en la vara de adreso es djusto?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Serra",
-  "bundle_modal_error.message": "Algo negro afito al eskargar este komponente.",
   "bundle_modal_error.retry": "Aprova de muevo",
   "closed_registrations.other_server_instructions": "Deke Mastodon es desentralizado, puedes kriyar un kuento en otro sirvidor i ainda enteraktuar kon este.",
   "closed_registrations_modal.description": "Aktualmente no es posivle kriyar un kuento en {domain}, ama por favor akodrate de ke no ay menester de tener un kuento espesifikamente en {domain} para kulanear Mastodon.",
@@ -220,10 +219,6 @@
   "disabled_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado.",
   "dismissable_banner.community_timeline": "Estas son las publikasyones publikas mas resientes de las personas kualos kuentos estan balabayados en {domain}.",
   "dismissable_banner.dismiss": "Kita",
-  "dismissable_banner.explore_links": "Estos haberes estan diskutidos agora por djente en este sirvidor i otros de la red desentralizada.",
-  "dismissable_banner.explore_statuses": "Estas publikasyones de este sirvidor i otros de la red desentralizada estan agora popularas. Publikasyones mas muevas, kon mas repartajasiones i favoritadas por mas djente aparesen primero.",
-  "dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.",
-  "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.",
   "domain_block_modal.block": "Bloka sirvidor",
   "domain_block_modal.block_account_instead": "Bloka @{name} en su lugar",
   "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este sirvidor pueden enteraktuar kon tus puvlikasyones viejas.",
@@ -561,44 +556,17 @@
   "notifications_permission_banner.enable": "Kapasita avizos de ensimameza",
   "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.",
   "notifications_permission_banner.title": "Nunkua te piedres niente",
-  "onboarding.action.back": "Va atras",
-  "onboarding.actions.back": "Va atras",
-  "onboarding.actions.go_to_explore": "Va a los trendes",
-  "onboarding.actions.go_to_home": "Va a tu linya prinsipala",
-  "onboarding.compose.template": "Ke haber, #Mastodon?",
   "onboarding.follows.empty": "Malorozamente, no se pueden amostrar rezultados en este momento. Puedes aprovar uzar la bushkeda o navigar por la pajina de eksplorasyon para topar personas a las que segir, o aprovarlo de muevo mas tadre.",
-  "onboarding.follows.lead": "Tu linya prinsipala es la forma prinsipala de eksperiensa de Mastodon. Kuantas mas personas sigas, sera mas aktiva o interesante. Para ampesar, aki ay algunas sujestyones:",
-  "onboarding.follows.title": "Personaliza tu linya prinsipala",
   "onboarding.profile.discoverable": "Faz ke mi profil apareska en bushkedas",
   "onboarding.profile.discoverable_hint": "Kuando permites ke tu profil sea diskuvriravle en Mastodon, tus publikasyones podran apareser en rezultados de bushkedas i trendes i tu profil podra ser sujerido a personas kon intereses similares a los tuyos.",
   "onboarding.profile.display_name": "Nombre amostrado",
   "onboarding.profile.display_name_hint": "Tu nombre para amostrar.",
-  "onboarding.profile.lead": "Siempre puedes kompletar esto mas tadre en las preferensyas, ande tambien ay mas opsyones de personalizasyon.",
   "onboarding.profile.note": "Tu deskripsyon",
   "onboarding.profile.note_hint": "Puedes @enmentar a otra djente o #etiketas…",
   "onboarding.profile.save_and_continue": "Guadra i kontinua",
   "onboarding.profile.title": "Konfigurasyon de profil",
   "onboarding.profile.upload_avatar": "Karga imaje de profil",
   "onboarding.profile.upload_header": "Karga kavesera de profil",
-  "onboarding.share.lead": "Informe a otros komo toparte en Mastodon!",
-  "onboarding.share.message": "Soy {username} en #Mastodon! Segidme en {url}",
-  "onboarding.share.next_steps": "Posivles sigientes pasos:",
-  "onboarding.share.title": "Partaja tu profil",
-  "onboarding.start.lead": "Agora eres parte de Mastodon, una red sosyala unika y desentralizada ande tu, no un algoritmo, puedes personalizar tu propya eksperyensya. Te entrodiziramos a esta mueva frontera sosyala:",
-  "onboarding.start.skip": "No nesesitas ayudo para ampesar?",
-  "onboarding.start.title": "Lo logrates!",
-  "onboarding.steps.follow_people.body": "El buto de Mastodon es segir a djente interesante.",
-  "onboarding.steps.follow_people.title": "Personaliza tu linya prinsipala",
-  "onboarding.steps.publish_status.body": "Puedes introdusirte al mundo kon teksto, fotos, videos o anketas {emoji}",
-  "onboarding.steps.publish_status.title": "Eskrive tu primera publikasyon",
-  "onboarding.steps.setup_profile.body": "Kompleta tu profil para aumentar tus enteraksyones.",
-  "onboarding.steps.setup_profile.title": "Personaliza tu profil",
-  "onboarding.steps.share_profile.body": "Informa a tus amigos komo toparte en Mastodon",
-  "onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon",
-  "onboarding.tips.2fa": "<strong>Saviyas?</strong> Puedes protejar tu kuento konfigurando la autentifikasyon de dos pasos en la konfigurasyon de tu kuento. Funksyona kon kualsekera aplikasyon de TOTP ke eskojas. No ay menester de uzar tu numero de telefon!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Saviyas?</strong> komo Mastodon es desentralizado, algunos profiles que topas estan lokalizados en sirvidores distinktos del tuyo. I malgrado esto, puedes enteraktuar kon eyos! Sus sirvidor forma la sigunda mitad de sus nombres de utilizador!",
-  "onboarding.tips.migration": "<strong>Savias?</strong> Si en el avenir pensas ke {domain} no es el sirvidor adekuado para ti, puedes moverte a otruno sirvidor de Mastodon sir pedrer a tus suivantes. Inkluzo puedes ser el balabay de tu propyo sirvidor!",
-  "onboarding.tips.verification": "<strong>Savias?</strong> Puedes verifikar tu kuento ponyendo un atadijo a tu profil de Mastodon en tu propio sitio web i adjustando el sitio a tu profil. No ay menester de pagamyentos o dokumentos!",
   "password_confirmation.exceeds_maxlength": "La konfirmasyon de kod es demaziado lunga",
   "password_confirmation.mismatching": "Los dos kodes son desferentes",
   "picture_in_picture.restore": "Restora",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index f9080f96e..36dea2773 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Paprašyto puslapio nepavyko rasti. Ar esi tikras (-a), kad adreso juostoje nurodytas URL adresas yra teisingas?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Uždaryti",
-  "bundle_modal_error.message": "Įkeliant šį komponentą kažkas nutiko ne taip.",
+  "bundle_modal_error.message": "Įkeliant šį ekraną kažkas nutiko ne taip.",
   "bundle_modal_error.retry": "Bandyti dar kartą",
   "closed_registrations.other_server_instructions": "Kadangi „Mastodon“ yra decentralizuotas, gali susikurti paskyrą kitame serveryje ir vis tiek bendrauti su šiuo serveriu.",
   "closed_registrations_modal.description": "Sukurti paskyrą serveryje {domain} šiuo metu neįmanoma, bet nepamiršk, kad norint naudotis „Mastodon“ nebūtina turėti paskyrą serveryje {domain}.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Prisegti",
   "column_header.show_settings": "Rodyti nustatymus",
   "column_header.unpin": "Atsegti",
+  "column_search.cancel": "Atšaukti",
   "column_subheading.settings": "Nustatymai",
   "community.column_settings.local_only": "Tik vietinis",
   "community.column_settings.media_only": "Tik medija",
@@ -235,10 +236,6 @@
   "disabled_account_banner.text": "Tavo paskyra {disabledAccount} šiuo metu išjungta.",
   "dismissable_banner.community_timeline": "Tai – naujausi vieši įrašai iš žmonių, kurių paskyros talpinamos {domain}.",
   "dismissable_banner.dismiss": "Atmesti",
-  "dismissable_banner.explore_links": "Tai – naujienos, kuriomis šiandien daugiausiai bendrinamasi socialiniame žiniatinklyje. Naujesnės naujienų istorijos, kurias paskelbė daugiau skirtingų žmonių, vertinamos aukščiau.",
-  "dismissable_banner.explore_statuses": "Tai – įrašai iš viso socialinio žiniatinklio, kurie šiandien sulaukia daug dėmesio. Naujesni įrašai, turintys daugiau pasidalinimų ir mėgstamų, vertinami aukščiau.",
-  "dismissable_banner.explore_tags": "Tai – saitažodžiai, kurie šiandien sulaukia daug dėmesio socialiniame žiniatinklyje. Saitažodžiai, kuriuos naudoja daugiau skirtingų žmonių, vertinami aukščiau.",
-  "dismissable_banner.public_timeline": "Tai – naujausi vieši įrašai iš žmonių socialiniame žiniatinklyje, kuriuos seka {domain} žmonės.",
   "domain_block_modal.block": "Blokuoti serverį",
   "domain_block_modal.block_account_instead": "Blokuoti @{name} vietoj to",
   "domain_block_modal.they_can_interact_with_old_posts": "Žmonės iš šio serverio gali bendrauti su tavo senomis įrašomis.",
@@ -362,6 +359,7 @@
   "footer.status": "Statusas",
   "generic.saved": "Išsaugota",
   "getting_started.heading": "Kaip pradėti",
+  "hashtag.admin_moderation": "Atverti prižiūrėjimo sąsają saitažodžiui #{name}",
   "hashtag.column_header.tag_mode.all": "ir {additional}",
   "hashtag.column_header.tag_mode.any": "ar {additional}",
   "hashtag.column_header.tag_mode.none": "be {additional}",
@@ -641,44 +639,21 @@
   "notifications_permission_banner.enable": "Įjungti darbalaukio pranešimus",
   "notifications_permission_banner.how_to_control": "Jei nori gauti pranešimus, kai Mastodon nėra atidarytas, įjunk darbalaukio pranešimus. Įjungęs (-usi) darbalaukio pranešimus, gali tiksliai valdyti, kokių tipų sąveikos generuoja darbalaukio pranešimus, naudojant pirmiau esančiu mygtuku {icon}.",
   "notifications_permission_banner.title": "Niekada nieko nepraleisk",
-  "onboarding.action.back": "Grąžinti mane atgal",
-  "onboarding.actions.back": "Grąžinti mane atgal",
-  "onboarding.actions.go_to_explore": "Į tendencijų puslapį",
-  "onboarding.actions.go_to_home": "Į mano pagrindinį srautų puslapį",
-  "onboarding.compose.template": "Sveiki #Mastodon!",
+  "onboarding.follows.back": "Atgal",
+  "onboarding.follows.done": "Atlikta",
   "onboarding.follows.empty": "Deja, šiuo metu jokių rezultatų parodyti negalima. Gali pabandyti naudoti paiešką arba naršyti atradimo puslapį, kad surastum žmonių, kuriuos nori sekti, arba bandyti vėliau.",
-  "onboarding.follows.lead": "Tavo pagrindinis srautas – pagrindinis būdas patirti Mastodon. Kuo daugiau žmonių seksi, tuo jis bus aktyvesnis ir įdomesnis. Norint pradėti, pateikiame keletą pasiūlymų:",
-  "onboarding.follows.title": "Suasmenink savo pagrindinį srautą",
+  "onboarding.follows.search": "Ieškoti",
+  "onboarding.follows.title": "Sekite asmenis, kad pradėtumėte",
   "onboarding.profile.discoverable": "Padaryti mano profilį atrandamą",
   "onboarding.profile.discoverable_hint": "Kai sutinki su Mastodon atrandamumu, tavo įrašai gali būti rodomi paieškos rezultatuose ir tendencijose, o profilis gali būti siūlomas panašių pomėgių turintiems žmonėms.",
   "onboarding.profile.display_name": "Rodomas vardas",
   "onboarding.profile.display_name_hint": "Tavo pilnas vardas arba linksmas vardas…",
-  "onboarding.profile.lead": "Gali visada tai užbaigti vėliau nustatymuose, kur yra dar daugiau pritaikymo parinkčių.",
   "onboarding.profile.note": "Biografija",
   "onboarding.profile.note_hint": "Gali @paminėti kitus žmones arba #saitažodžius…",
   "onboarding.profile.save_and_continue": "Išsaugoti ir tęsti",
   "onboarding.profile.title": "Profilio sąranka",
   "onboarding.profile.upload_avatar": "Įkelti profilio nuotrauką",
   "onboarding.profile.upload_header": "Įkelti profilio antraštę",
-  "onboarding.share.lead": "Leisk žmonėms sužinoti, kaip tave rasti Mastodon!",
-  "onboarding.share.message": "Aš {username}, esant #Mastodon! Ateik sekti manęs adresu {url}.",
-  "onboarding.share.next_steps": "Galimi kiti žingsniai:",
-  "onboarding.share.title": "Bendrink savo profilį",
-  "onboarding.start.lead": "Dabar esi Mastodon dalis – unikalios decentralizuotos socialinės medijos platformos, kurioje tu, o ne algoritmas, pats nustatai savo patirtį. Pradėkime tavo kelionę šioje naujoje socialinėje erdvėje:",
-  "onboarding.start.skip": "Nereikia pagalbos pradėti?",
-  "onboarding.start.title": "Tau pavyko!",
-  "onboarding.steps.follow_people.body": "Sekti įdomius žmones – tai, kas yra Mastodon.",
-  "onboarding.steps.follow_people.title": "Suasmenink savo pagrindinį srautą",
-  "onboarding.steps.publish_status.body": "Sakyk labas pasauliui tekstu, nuotraukomis, vaizdo įrašais arba apklausomis {emoji}.",
-  "onboarding.steps.publish_status.title": "Sukūrk savo pirmąjį įrašą",
-  "onboarding.steps.setup_profile.body": "Padidink savo sąveiką turint išsamų profilį.",
-  "onboarding.steps.setup_profile.title": "Suasmenink savo profilį",
-  "onboarding.steps.share_profile.body": "Leisk draugams sužinoti, kaip tave rasti Mastodon.",
-  "onboarding.steps.share_profile.title": "Bendrink savo Mastodon profilį",
-  "onboarding.tips.2fa": "<strong>Ar žinojai?</strong> Savo paskyrą gali apsaugoti nustatant dviejų veiksnių tapatybės nustatymą paskyros nustatymuose. Jis veikia su bet kuria pasirinkta TOTP programėle, telefono numeris nebūtinas.",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ar žinojai?</strong> Kadangi Mastodon decentralizuotas, kai kurie profiliai, su kuriais susidursi, bus talpinami ne tavo, o kituose serveriuose. Ir vis tiek galėsi su jais sklandžiai bendrauti! Jų serveris yra antroje naudotojo vardo pusėje.",
-  "onboarding.tips.migration": "<strong>Ar žinojai?</strong> Jei manai, kad {domain} serveris ateityje tau netiks, gali persikelti į kitą „Mastodon“ serverį neprarandant savo sekėjų. Gali net talpinti savo paties serverį!",
-  "onboarding.tips.verification": "<strong>Ar žinojai?</strong> Savo paskyrą gali patvirtinti pateikęs (-usi) nuorodą į Mastodon profilį savo interneto svetainėje ir pridėjęs (-usi) svetainę prie savo profilio. Nereikia jokių mokesčių ar dokumentų.",
   "password_confirmation.exceeds_maxlength": "Slaptažodžio patvirtinimas viršija maksimalų slaptažodžio ilgį.",
   "password_confirmation.mismatching": "Slaptažodžio patvirtinimas nesutampa.",
   "picture_in_picture.restore": "Padėti jį atgal",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index 542231f05..cc441e138 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -115,7 +115,6 @@
   "bundle_column_error.routing.body": "Pieprasīto lapu nevarēja atrast. Vai esi pārliecināts, ka URL adreses joslā ir pareizs?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Aizvērt",
-  "bundle_modal_error.message": "Kaut kas nogāja greizi šīs sastāvdaļas ielādēšanas laikā.",
   "bundle_modal_error.retry": "Mēģināt vēlreiz",
   "closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.",
   "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu {domain}, bet, lūdzu, ņem vērā, ka Tev nav nepieciešams tieši {domain} konts, lai lietotu Mastodon!",
@@ -217,10 +216,6 @@
   "disabled_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots.",
   "dismissable_banner.community_timeline": "Šie ir jaunākie publiskie ieraksti no cilvēkiem, kuru konti ir mitināti {domain}.",
   "dismissable_banner.dismiss": "Atcelt",
-  "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.",
-  "dismissable_banner.explore_statuses": "Šie ir ieraksti, kas šodien gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti jaunāki ieraksti, kuri tiek vairāk pastiprināti un ievietoti izlasēs.",
-  "dismissable_banner.explore_tags": "Šie ir tēmturi, kas šodien gūst uzmanību sabiedriskajā tīmeklī. Tēmturi, kurus izmanto vairāk dažādu cilvēku, tiek vērtēti augstāk.",
-  "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.",
   "domain_block_modal.block": "Bloķēt serveri",
   "domain_block_modal.block_account_instead": "Tā vietā liegt @{name}",
   "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.",
@@ -509,14 +504,7 @@
   "notifications_permission_banner.enable": "Iespējot darbvirsmas paziņojumus",
   "notifications_permission_banner.how_to_control": "Lai saņemtu paziņojumus, kad Mastodon nav atvērts, iespējo darbvirsmas paziņojumus. Vari precīzi kontrolēt, kāda veida mijiedarbības rada darbvirsmas paziņojumus, izmantojot augstāk redzamo pogu {icon}, kad tie būs iespējoti.",
   "notifications_permission_banner.title": "Nekad nepalaid neko garām",
-  "onboarding.action.back": "Aizved mani atpakaļ",
-  "onboarding.actions.back": "Aizved mani atpakaļ",
-  "onboarding.actions.go_to_explore": "Skatīt tendences",
-  "onboarding.actions.go_to_home": "Doties uz manu sākuma plūsmu",
-  "onboarding.compose.template": "Sveiki, #Mastodon!",
   "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.",
-  "onboarding.follows.lead": "Tava sākuma plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:",
-  "onboarding.follows.title": "Pielāgo savu mājas barotni",
   "onboarding.profile.discoverable": "Padarīt manu profilu atklājamu",
   "onboarding.profile.display_name": "Attēlojamais vārds",
   "onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…",
@@ -526,25 +514,6 @@
   "onboarding.profile.title": "Profila iestatīšana",
   "onboarding.profile.upload_avatar": "Augšupielādēt profila attēlu",
   "onboarding.profile.upload_header": "Augšupielādēt profila galveni",
-  "onboarding.share.lead": "Dari cilvēkiem zināmu, ka viņi var Tevi atrast Mastodon!",
-  "onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}",
-  "onboarding.share.next_steps": "Iespējamie nākamie soļi:",
-  "onboarding.share.title": "Kopīgo savu profilu",
-  "onboarding.start.lead": "Tagad Tu esi daļa no Mastodon — vienreizējas, decentralizētas sociālās mediju platformas, kurā Tu, nevis algoritms, veido Tavu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:",
-  "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?",
-  "onboarding.start.title": "Tev tas izdevās!",
-  "onboarding.steps.follow_people.body": "Sekošana aizraujošiem cilvēkiem ir tas, par ko ir Mastodon.",
-  "onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni",
-  "onboarding.steps.publish_status.body": "Pasveicini pasauli ar tekstu, attēliem, video vai aptaujām {emoji}",
-  "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu",
-  "onboarding.steps.setup_profile.body": "Palielini mijiedarbību ar aptverošu profilu!",
-  "onboarding.steps.setup_profile.title": "Pielāgo savu profilu",
-  "onboarding.steps.share_profile.body": "Dari saviem draugiem zināmu, kā Tevi atrast Mastodon!",
-  "onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu",
-  "onboarding.tips.2fa": "<strong>Vai zināji?</strong> Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divpakāpju autentifikāciju. Tas darbojas ar jebkuru Tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Vai zināji?</strong> Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!",
-  "onboarding.tips.migration": "<strong>Vai zināji?</strong> Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu serveri!",
-  "onboarding.tips.verification": "<strong>Vai zināji?</strong> Tu vari apliecināt savu kontu, ievietojot savā tīmekļvietnē saiti uz savu Mastodon profilu un pievienojot tīmekļvietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti.",
   "password_confirmation.exceeds_maxlength": "Paroles apstiprināšana pārsniedz maksimālo paroles garumu",
   "password_confirmation.mismatching": "Paroles apstiprinājums neatbilst",
   "picture_in_picture.restore": "Novietot atpakaļ",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index 084a94cc1..b30e70b09 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -49,7 +49,6 @@
   "boost_modal.combo": "Кликни {combo} за да го прескокниш ова нареден пат",
   "bundle_column_error.retry": "Обидете се повторно",
   "bundle_modal_error.close": "Затвори",
-  "bundle_modal_error.message": "Настана грешка при прикажувањето на оваа веб-страница.",
   "bundle_modal_error.retry": "Обидете се повторно",
   "column.blocks": "Блокирани корисници",
   "column.community": "Локална временска зона",
@@ -95,8 +94,6 @@
   "conversation.with": "Со {names}",
   "directory.federated": "Од познати fediverse",
   "directory.local": "Само од {domain}",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "emoji_button.activity": "Активност",
   "emoji_button.food": "Храна &amp; Пијалаци",
@@ -190,19 +187,6 @@
   "notifications.filter.mentions": "Спомнувања",
   "notifications.filter.polls": "Резултати од анкета",
   "notifications.group": "{count} нотификации",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "Затворени",
   "poll.refresh": "Освежи",
   "poll.total_people": "{count, plural, one {# човек} other {# луѓе}}",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index de4f565a5..4c1fa940a 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -77,7 +77,6 @@
   "bundle_column_error.return": "ഹോം പേജിലേക്ക് മടങ്ങാം",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "അടയ്ക്കുക",
-  "bundle_modal_error.message": "ഈ വെബ്പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.",
   "bundle_modal_error.retry": "വീണ്ടും ശ്രമിക്കുക",
   "closed_registrations.other_server_instructions": "Mastodon വികേന്ദ്രീകൃത സംവിധാനം ആയതിനാൽ, നിങ്ങൾക്ക് മറ്റൊരു സെർവറിൽ ഒരു അക്കൗണ്ട് ഉണ്ടാക്കിയും ഇതുമായി ആശയവിനിമയം നടത്താൻ സാധിക്കുന്നതാണ്.",
   "closed_registrations_modal.description": "{domain} ഇൽ ഇപ്പോൾ അക്കൗണ്ട് ഉണ്ടാക്കാൻ സാധിക്കുന്നതല്ല, Mastodon ഉപയോഗിക്കുന്നതിനായി നിങ്ങൾക്ക് {domain}-ൽ പ്രത്യേകമായി ഒരു അക്കൗണ്ട് ആവശ്യമില്ല എന്നത് ദയവായി ഓർക്കുക.",
@@ -159,8 +158,6 @@
   "directory.recently_active": "അടുത്തിടെയായി സജീവമായ",
   "disabled_account_banner.account_settings": "ഇടപാടു് ക്രമീകരങ്ങൾ",
   "disabled_account_banner.text": "നിങ്ങളുടെ {disabledAccount} എന്ന അക്കൗണ്ട് ഇപ്പോൾ പ്രവർത്തനരഹിതമാണ്.",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "domain_block_modal.title": "മേഖല തടസ്സപെടുത്തുക?",
   "domain_pill.username": "ഉപയോക്തൃപേരു്",
   "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.",
@@ -334,20 +331,6 @@
   "notifications.policy.filter_new_accounts_title": "പുതിയ ഇടപാടുകൾ",
   "notifications.policy.filter_not_followers_title": "താങ്ങളെ പിന്തുടരാത്തതു് ആൾക്കാർ",
   "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "ആമുഖത്താൾ വരെ പോവ്വുക",
-  "onboarding.follows.lead": "",
-  "onboarding.follows.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക",
-  "onboarding.share.title": "താങ്ങളുടെ രൂപരേഖ പങ്കിടുക",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "തിരികെ വയ്ക്കുക",
   "poll.closed": "അടച്ചു",
   "poll.refresh": "പുതുക്കുക",
diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json
index 363269541..14cec77cb 100644
--- a/app/javascript/mastodon/locales/mr.json
+++ b/app/javascript/mastodon/locales/mr.json
@@ -75,7 +75,6 @@
   "announcement.announcement": "घोषणा",
   "bundle_column_error.retry": "पुन्हा प्रयत्न करा",
   "bundle_modal_error.close": "बंद करा",
-  "bundle_modal_error.message": "हा घटक लोड करतांना काहीतरी चुकले आहे.",
   "bundle_modal_error.retry": "पुन्हा प्रयत्न करा",
   "column.blocks": "ब्लॉक केलेले खातेधारक",
   "column.domain_blocks": "गुप्त डोमेन्स",
@@ -107,8 +106,6 @@
   "confirmations.delete_list.message": "ही यादी तुम्हाला नक्की कायमची हटवायचीय?",
   "confirmations.logout.message": "तुमची खात्री आहे की तुम्ही लॉग आउट करू इच्छिता?",
   "confirmations.mute.confirm": "आवाज बंद करा",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No toots here!",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
@@ -198,19 +195,6 @@
   "notifications.filter.mentions": "उल्लेख केलेले",
   "notifications.filter.polls": "मतदान परिणाम",
   "notifications.filter.statuses": "तुम्ही फॉलो करत असलेल्या लोकांकडून अपडेट",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index f2af798d4..6a4209913 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -99,7 +99,6 @@
   "bundle_column_error.routing.body": "Halaman tersebut tidak dapat ditemui. Adakah anda pasti URL dalam bar alamat adalah betul?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Tutup",
-  "bundle_modal_error.message": "Ada yang tidak kena semasa memuatkan komponen ini.",
   "bundle_modal_error.retry": "Cuba lagi",
   "closed_registrations.other_server_instructions": "Oleh sebab Mastodon terpencar, anda boleh mencipta akaun pada pelayan lain dan masih berinteraksi dengan pelayan ini.",
   "closed_registrations_modal.description": "Mencipta akaun pada {domain} tidak dapat dibuat sekarang, tetapi sila ingat bahawa anda tidak memerlukan akaun khususnya pada {domain} untuk menggunakan Mastodon.",
@@ -191,10 +190,6 @@
   "disabled_account_banner.text": "Akaun anda {disabledAccount} telah dinyahaktif.",
   "dismissable_banner.community_timeline": "Inilah hantaran awam terkini daripada orang yang akaun dihos oleh {domain}.",
   "dismissable_banner.dismiss": "Ketepikan",
-  "dismissable_banner.explore_links": "Berita-berita ini sedang dibualkan oleh orang di pelayar ini dan pelayar lain dalam rangkaian terpencar sekarang.",
-  "dismissable_banner.explore_statuses": "Ini adalah pos dari seluruh web sosial yang semakin menarik perhatian hari ini. Pos baharu dengan lebih banyak rangsangan dan kegemaran diberi kedudukan lebih tinggi.",
-  "dismissable_banner.explore_tags": "Tanda-tanda pagar ini daripada pelayar ini dan pelayar lain dalam rangkaian terpencar sedang hangat pada pelayar ini sekarang.",
-  "dismissable_banner.public_timeline": "Ini ialah pos awam terbaharu daripada orang di web sosial yang diikuti oleh orang di {domain}.",
   "embed.instructions": "Benam hantaran ini di laman sesawang anda dengan menyalin kod berikut.",
   "embed.preview": "Begini rupanya nanti:",
   "emoji_button.activity": "Aktiviti",
@@ -442,38 +437,12 @@
   "notifications_permission_banner.enable": "Dayakan pemberitahuan atas meja",
   "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan atas meja. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan atas meja melalui butang {icon} di atas setelah ia didayakan.",
   "notifications_permission_banner.title": "Jangan terlepas apa-apa",
-  "onboarding.action.back": "Bawa saya kembali",
-  "onboarding.actions.back": "Bawa saya kembali",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Hello #Mastodon!",
   "onboarding.follows.empty": "Malangnya, tiada hasil dapat ditunjukkan sekarang. Anda boleh cuba menggunakan carian atau menyemak imbas halaman teroka untuk mencari orang untuk diikuti atau cuba lagi kemudian.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.display_name": "Nama paparan",
   "onboarding.profile.display_name_hint": "Nama penuh anda atau nama anda yang menyeronokkan…",
   "onboarding.profile.note_hint": "Anda boleh @menyebut orang lain atau #hashtags…",
   "onboarding.profile.save_and_continue": "Simpan dan teruskan",
   "onboarding.profile.upload_avatar": "Muat naik gambar profil",
-  "onboarding.share.lead": "Beritahu orang ramai bagaimana mereka boleh menemui anda di Mastodon!",
-  "onboarding.share.message": "Saya {username} di #Mastodon! Jom ikut saya di {url}",
-  "onboarding.share.next_steps": "Langkah seterusnya yang mungkin:",
-  "onboarding.share.title": "Berkongsi profil anda",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Anda telah berjaya!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Buat pos pertama anda",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Tahukah anda?</strong> Anda boleh melindungi akaun anda dengan menyediakan pengesahan dua faktor dalam tetapan akaun anda. Ia berfungsi dengan mana-mana aplikasi TOTP pilihan anda, tiada nombor telefon diperlukan!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Tahukah anda?</strong> Memandangkan Mastodon tidak berpusat, beberapa profil yang anda temui akan dihoskan pada server selain anda. Namun anda boleh berinteraksi dengan mereka dengan lancar! Server mereka berada di separuh kedua nama pengguna mereka!",
-  "onboarding.tips.migration": "<strong>Tahukah anda?</strong> Jika anda rasa {domain} bukan pilihan server yang bagus untuk anda pada masa hadapan, anda boleh beralih ke server Mastodon yang lain tanpa kehilangan pengikut anda. Anda juga boleh mengehoskan server anda sendiri!",
-  "onboarding.tips.verification": "<strong>Tahukah anda?</strong> Anda boleh mengesahkan akaun anda dengan meletakkan pautan ke profil Mastodon anda pada tapak web anda sendiri dan menambah tapak web pada profil anda. Tiada bayaran atau dokumen diperlukan!",
   "password_confirmation.exceeds_maxlength": "Pengesahan kata laluan melebihi panjang kata laluan maksimum",
   "password_confirmation.mismatching": "Pengesahan kata laluan tidak sepadan",
   "picture_in_picture.restore": "Letak semula",
diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json
index a82e56e6f..359a17be5 100644
--- a/app/javascript/mastodon/locales/my.json
+++ b/app/javascript/mastodon/locales/my.json
@@ -93,7 +93,6 @@
   "bundle_column_error.routing.body": "ရှာနေသောအရာမှာမရှိပါ။ URL မှန်မမှန်ပြန်စစ်ပေးပါ",
   "bundle_column_error.routing.title": "လေးသုံညလေး",
   "bundle_modal_error.close": "ပိတ်ပါ",
-  "bundle_modal_error.message": "ဤဝက်ဘ်စာမျက်နှာအား ဖွင့်နေစဥ် အမှားတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။",
   "bundle_modal_error.retry": "ထပ်မံကြိုးစားပါ",
   "closed_registrations.other_server_instructions": "Mastodon ကို ဗဟိုချုပ်ကိုင်မှု လျှော့ချထားသောကြောင့် သင်သည် အခြားဆာဗာတစ်ခုပေါ်တွင် အကောင့်တစ်ခု ဖန်တီးနိုင်ပြီး ဤတစ်ခုနှင့် အပြန်အလှန် တုံ့ပြန်ဆဲဖြစ်သည်။",
   "closed_registrations_modal.description": "{domain} တွင် အကောင့်တစ်ခုဖန်တီးခြင်းသည် လောလောဆယ်မဖြစ်နိုင်ပါ၊ သို့သော် Mastodon ကိုအသုံးပြုရန်အတွက် သင်သည် {domain} တွင် အထူးအကောင့်တစ်ခုမလိုအပ်ကြောင်း ကျေးဇူးပြု၍ သတိရပါ။",
@@ -178,10 +177,6 @@
   "disabled_account_banner.text": "{disabledAccount} သည်လတ်တလောပိတ်ခံထားရသည်",
   "dismissable_banner.community_timeline": "အကောင့်များမှ လတ်တလောတင်ထားသည့်အများမြင်ပို့စ်များမှာ {domain} တွင် တင်ထားသောပို့စ်များဖြစ်သည်။",
   "dismissable_banner.dismiss": "ပယ်ရန်",
-  "dismissable_banner.explore_links": "ဤသတင်းများကို ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများမှ လူများက ပြောဆိုနေကြပါသည်။",
-  "dismissable_banner.explore_statuses": "ဒီ​နေ့အတွက် လူမှုကွန်ရက်​ပေါ်မှာ စိတ်ဝင်စားမှူများ​နေတဲ့ ပို့စ်​တွေရှိပါတယ်။ပြန်မျှ​ဝေမှုနဲ့ကြယ်ပွင့်များ တဲ့ပိုစ့်အသစ်​တွေကို ပိုမြင်ရမှာပါ။.",
-  "dismissable_banner.explore_tags": "ဤ hashtag များသည် ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများပေါ်ရှိ လူများကြားတွင် ဆွဲဆောင်မှုရှိလာပါသည်",
-  "dismissable_banner.public_timeline": "ဤအရာများသည် {domain} ရှိလူများ လိုက်နာသော လူမှုဝဘ်ပေါ်ရှိ လူများထံမှ လတ်တလော အများမြင်ပို့စ်များဖြစ်သည်။",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "ဒါမျိုးမြင်ရမှာပါ။",
   "emoji_button.activity": "လုပ်ဆောင်ချက်",
@@ -420,14 +415,7 @@
   "notifications_permission_banner.enable": "ဒက်စ်တော့ အသိပေးချက်များကို ဖွင့်ပါ",
   "notifications_permission_banner.how_to_control": "Mastodon မဖွင့်သည့်အခါ အကြောင်းကြားချက်များကို လက်ခံရယူရန်၊ ဒက်စ်တော့ အသိပေးချက်များကို ဖွင့်ပါ။ ၎င်းတို့ကို ဖွင့်ပြီးသည်နှင့် ၎င်းတို့ကို ဖွင့်ပြီးသည်နှင့် အထက် {icon} ခလုတ်မှ ဒက်စ်တော့ အသိပေးချက်များကို ထုတ်ပေးသည့် အပြန်အလှန်တုံ့ပြန်မှု အမျိုးအစားများကို သင် အတိအကျ ထိန်းချုပ်နိုင်သည်။",
   "notifications_permission_banner.title": "လက်လွတ်မခံပါနှင့်",
-  "onboarding.action.back": "ပြန်ယူရန်",
-  "onboarding.actions.back": "ပြန်ယူရန်",
-  "onboarding.actions.go_to_explore": "ခေတ်စားနေသည်များကို ကြည့်ပါ",
-  "onboarding.actions.go_to_home": "ပင်မစာမျက်နှာသို့ သွားပါ",
-  "onboarding.compose.template": "မင်္ဂလာပါ #Mastodon",
   "onboarding.follows.empty": "ယခုအချိန် မည်သည့်ရလဒ်ကိုမျှ မပြသနိုင်ပါ။ လူများကိုစောင့်ကြည့်ရန်အတွက် Explore စာမျက်နှာကို အသုံးပြု၍ စမ်းကြည့်နိုင်သည် သို့မဟုတ် နောက်မှ ထပ်စမ်းကြည့်ပါ။",
-  "onboarding.follows.lead": "သင့်ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ သင်စောင့်ကြည့်သူ များလေလေ၊ စိတ်ဝင်စားစရာကောင်းသောပို့စ်များ တွေ့ရလေဖြစ်သည်။ ဤပရိုဖိုင်များမှာ ကောင်းမွန်သောအစပြုမှုတစ်ခုဖြစ်ပြီး ၎င်းတို့ကိုစောင့်ကြည့်ခြင်းမှလည်း အချိန်မရွေး ပယ်ဖျက်နိုင်ပါသည်။",
-  "onboarding.follows.title": "Mastodon တွင် ရေပန်းစားခြင်း",
   "onboarding.profile.discoverable": "ပရိုဖိုင် ရှာဖွေနိုင်ပါမည်",
   "onboarding.profile.display_name": "ဖော်ပြမည့်အမည်",
   "onboarding.profile.display_name_hint": "သင့်အမည်အပြည့်အစုံ သို့မဟုတ် သင့်အမည်ပြောင်။",
@@ -435,25 +423,6 @@
   "onboarding.profile.save_and_continue": "သိမ်းပြီး ဆက်လုပ်ပါ",
   "onboarding.profile.title": "ပရိုဖိုင်စနစ် ထည့်သွင်းခြင်း",
   "onboarding.profile.upload_avatar": "ပရိုဖိုင်ပုံ အပ်လုဒ်လုပ်ပါ",
-  "onboarding.share.lead": "Mastodon တွင် သင့်အား မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။",
-  "onboarding.share.message": "Mastodon ရှိ ကျွန်ုပ်၏အမည်မှာ {username} ဖြစ်သည်။ ကျွန်ုပ်ကို {url} တွင် စောင့်ကြည့်နိုင်ပါသည်",
-  "onboarding.share.next_steps": "ဖြစ်နိုင်ချေရှိသော နောက်အဆင့်များ -",
-  "onboarding.share.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ",
-  "onboarding.start.lead": "သင့် Mastodon အကောင့်အသစ်မှာ အသုံးပြုနိုင်ပါပြီ။ အကောင်းဆုံးဖြစ်အောင် သင်ပြုလုပ်နိုင်သည် -",
-  "onboarding.start.skip": "ရှေ့ကို ကျော်သွားချင်ပါသလား။",
-  "onboarding.start.title": "ပြုလုပ်ပြီးပြီ။",
-  "onboarding.steps.follow_people.body": "သင်သည် ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ စိတ်ဝင်စားသူများနဲ့ အပြန်အလှန်စောင့်ကြည့်နိုင်ပါပြီ။",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "ကမ္ဘာကြီးကို နှုတ်ဆက်လိုက်ပါ။",
-  "onboarding.steps.publish_status.title": "ပထမဆုံးပို့စ်တင်လိုက်ပါ။",
-  "onboarding.steps.setup_profile.body": "အခြားသူများမှာလည်း သင်နှင့် အပြန်အလှန် တုံ့ပြန်နိုင်ပါသည်။",
-  "onboarding.steps.setup_profile.title": "သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်လိုက်ပါ",
-  "onboarding.steps.share_profile.body": "Mastodon တွင် သင့်ကို သူငယ်ချင်းများ မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။",
-  "onboarding.steps.share_profile.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ",
-  "onboarding.tips.2fa": "<strong>သင်သိပါသလား။</strong> သင့်အကောင့်သတ်မှတ်ချက်များတွင် နှစ်ဆင့်ခံလုံခြုံရေးစနစ် ထည့်သွင်းခြင်းဖြင့် သင့်အကောင့်ကို လုံခြုံစေနိုင်ပါသည်။ ထိုစနစ်မှာ သင်နှစ်သက်ရာ TOTP အက်ပ်နှင့် အလုပ်လုပ်ပြီး ဖုန်းနံပါတ်ထည့်ရန်မလိုပါ။",
-  "onboarding.tips.accounts_from_other_servers": "<strong>သင်သိပါသလား?</strong> Mastodon ကို ဗဟိုချုပ်ကိုင်မှု လျှော့ချထားခြင်းကြောင့် သင်တွေ့မြင်ရသော ပရိုဖိုင်အချို့မှာ အခြားဆာဗာများမှ အသုံးပြုနေခြင်းဖြစ်သည်။ သို့သော် သင့်အနေဖြင့် ၎င်းတို့နှင့် အပြန်အလှန် တုံ့ပြန်နိုင်သည်။ အသုံးပြုသူအမည်၏အနောက်တွင် ရေးထားသောအရာမှာ ၎င်းတို့၏ဆာဗာအမည်ဖြစ်သည်။",
-  "onboarding.tips.migration": "<strong>သင်သိပါသလား?</strong> အကယ်၍ {domain} သည် နောင်တွင် သင့်အတွက် အဆင်မပြေပါက သင့်စောင့်ကြည့်သူများကို မဆုံးရှုံးစေဘဲ အခြား Mastodon ဆာဗာသို့ ပြောင်းရွှေ့နိုင်ပါသည်။ သင့် ကိုယ်ပိုင်ဆာဗာတစ်လုံး ပြုလုပ်၍ပင် ဆောင်ရွက်နိုင်ပါသည်။",
-  "onboarding.tips.verification": "<strong>သင်သိပါသလား။</strong> သင့်ဝဘ်ဆိုက်တွင် Mastodon ပရိုဖိုင်အတွက် လင့်ခ်ထည့်ထားပြီး သင့်ပရိုဖိုင်တွင် ဝဘ်ဆိုက်ထည့်ထားခြင်းဖြင့် သင့်အကောင့်ကို အတည်ပြုနိုင်သည်။ အခကြေးငွေ သို့မဟုတ် စာရွက်စာတမ်းများ မလိုအပ်ပါ။",
   "password_confirmation.exceeds_maxlength": "စကားဝှက်အတည်ပြုခြင်းတွင် အများဆုံးစကားဝှက်အရှည်ထက် ကျော်လွန်နေပါသည်",
   "password_confirmation.mismatching": "စကားဝှက်အတည်ပြုချက်မှာ မကိုက်ညီပါ",
   "picture_in_picture.restore": "ပြန်ထားပါ",
diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/app/javascript/mastodon/locales/nan.json
@@ -0,0 +1 @@
+{}
diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json
index 1cb10a93b..980737a93 100644
--- a/app/javascript/mastodon/locales/ne.json
+++ b/app/javascript/mastodon/locales/ne.json
@@ -56,7 +56,6 @@
   "bundle_column_error.network.title": "नेटवर्क त्रुटि",
   "bundle_column_error.retry": "पुन: प्रयास गर्नुहोस्",
   "bundle_modal_error.close": "बन्द गर्नुहोस्",
-  "bundle_modal_error.message": "यो कम्पोनेन्ट लोड गर्दा केही गडबड भयो।",
   "bundle_modal_error.retry": "Try again",
   "closed_registrations.other_server_instructions": "Mastodon विकेन्द्रीकृत भएकोले, तपाइँ अर्को सर्भरमा खाता खोल्न सक्नुहुन्छ र पनि यो सर्भरसँग अन्तरक्रिया गर्न सक्नुहुन्छ।",
   "closed_registrations_modal.description": "हाल {domain} मा खाता सिर्जना गर्न सम्भव छैन, तर कृपया ध्यान राख्नुहोस् कि तपाईंले Mastodon प्रयोग गर्नको लागि {domain} मा नै खाता खोल्न आवश्यक छैन।",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 1828fc8f0..6b19e0105 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "De opgevraagde pagina kon niet worden gevonden. Weet je zeker dat de URL in de adresbalk de juiste is?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Sluiten",
-  "bundle_modal_error.message": "Er ging iets mis tijdens het laden van dit component.",
+  "bundle_modal_error.message": "Er ging iets mis tijdens het laden van dit scherm.",
   "bundle_modal_error.retry": "Opnieuw proberen",
   "closed_registrations.other_server_instructions": "Omdat Mastodon gedecentraliseerd is, kun je op een andere server een account registreren en vanaf daar nog steeds met deze server communiceren.",
   "closed_registrations_modal.description": "Momenteel is het niet mogelijk om op {domain} een account aan te maken. Hou echter in gedachte dat om Mastodon te kunnen gebruiken het niet een vereiste is om op {domain} een account te hebben.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Vastmaken",
   "column_header.show_settings": "Instellingen tonen",
   "column_header.unpin": "Losmaken",
+  "column_search.cancel": "Annuleren",
   "column_subheading.settings": "Instellingen",
   "community.column_settings.local_only": "Alleen lokaal",
   "community.column_settings.media_only": "Alleen media",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "Jouw account {disabledAccount} is momenteel uitgeschakeld.",
   "dismissable_banner.community_timeline": "Dit zijn de meest recente openbare berichten van accounts op {domain}. Je kunt onder 'instellingen > voorkeuren > overig' kiezen welke talen je wilt zien.",
   "dismissable_banner.dismiss": "Sluiten",
-  "dismissable_banner.explore_links": "Dit zijn nieuwsberichten die vandaag het meest op het sociale web (fediverse) worden gedeeld. Nieuwere nieuwsberichten die door meer verschillende mensen zijn geplaatst staan hoger op de lijst.",
-  "dismissable_banner.explore_statuses": "Dit zijn berichten op het sociale web (fediverse) die vandaag aan populariteit winnen. Nieuwere berichten met meer boosts en favorieten staan hoger.",
-  "dismissable_banner.explore_tags": "Deze hashtags winnen aan populariteit op het sociale web (fediverse). Hashtags die door meer verschillende mensen worden gebruikt staan hoger.",
-  "dismissable_banner.public_timeline": "Dit zijn de meest recente openbare berichten van accounts op het sociale web (fediverse) die door mensen op {domain} worden gevolgd.",
+  "dismissable_banner.explore_links": "Deze nieuwsberichten worden vandaag de dag het meest gedeeld op de fediverse. Nieuwere verhalen die door meer verschillende mensen zijn gepost, worden hoger gerangschikt.",
+  "dismissable_banner.explore_statuses": "Deze berichten uit de hele fediverse winnen vandaag aan populariteit. Nieuwere berichten met meer boosts en favorieten worden hoger gerangschikt.",
+  "dismissable_banner.explore_tags": "Deze hashtags winnen tegenwoordig aan populariteit op de fediverse. Hashtags die door meer verschillende mensen worden gebruikt, worden hoger gerangschikt.",
+  "dismissable_banner.public_timeline": "Dit zijn de meest recente openbare berichten van mensen op de fediverse die mensen op {domain} volgen.",
   "domain_block_modal.block": "Server blokkeren",
   "domain_block_modal.block_account_instead": "Alleen {name} blokkeren",
   "domain_block_modal.they_can_interact_with_old_posts": "Mensen op deze server kunnen interactie hebben met jouw oude berichten.",
@@ -362,6 +363,7 @@
   "footer.status": "Status",
   "generic.saved": "Opgeslagen",
   "getting_started.heading": "Aan de slag",
+  "hashtag.admin_moderation": "Moderatie-omgeving van #{name} openen",
   "hashtag.column_header.tag_mode.all": "en {additional}",
   "hashtag.column_header.tag_mode.any": "of {additional}",
   "hashtag.column_header.tag_mode.none": "zonder {additional}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "Desktopmeldingen inschakelen",
   "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open staat. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.",
   "notifications_permission_banner.title": "Mis nooit meer iets",
-  "onboarding.action.back": "Breng me terug",
-  "onboarding.actions.back": "Breng me terug",
-  "onboarding.actions.go_to_explore": "Laat mij de huidige trends zien",
-  "onboarding.actions.go_to_home": "Ga naar je starttijdlijn",
-  "onboarding.compose.template": "Hallo #Mastodon!",
+  "onboarding.follows.back": "Terug",
+  "onboarding.follows.done": "Klaar",
   "onboarding.follows.empty": "Helaas kunnen op dit moment geen resultaten worden getoond. Je kunt proberen te zoeken of op de verkenningspagina te bladeren om mensen te vinden die je kunt volgen, of probeer het later opnieuw.",
-  "onboarding.follows.lead": "Jouw starttijdlijn is de belangrijkste manier om Mastodon te ervaren. Hoe meer mensen je volgt, hoe actiever en interessanter het wordt. Om te beginnen zijn hier enkele suggesties:",
-  "onboarding.follows.title": "Je starttijdlijn aan jouw wensen aanpassen",
+  "onboarding.follows.search": "Zoeken",
+  "onboarding.follows.title": "Volg mensen om te beginnen",
   "onboarding.profile.discoverable": "Maak mijn profiel vindbaar",
   "onboarding.profile.discoverable_hint": "Wanneer je akkoord gaat met het vindbaar zijn op Mastodon, verschijnen je berichten in zoekresultaten en kunnen ze trending worden, en je profiel kan aan andere mensen worden aanbevolen wanneer ze vergelijkbare interesses hebben.",
   "onboarding.profile.display_name": "Weergavenaam",
   "onboarding.profile.display_name_hint": "Jouw volledige naam of een leuke bijnaam…",
-  "onboarding.profile.lead": "Je kunt dit later altijd aanvullen in de instellingen, waar nog meer aanpassingsopties beschikbaar zijn.",
   "onboarding.profile.note": "Biografie",
   "onboarding.profile.note_hint": "Je kunt andere mensen @vermelden of #hashtags gebruiken…",
   "onboarding.profile.save_and_continue": "Opslaan en doorgaan",
   "onboarding.profile.title": "Profiel instellen",
   "onboarding.profile.upload_avatar": "Profielfoto uploaden",
   "onboarding.profile.upload_header": "Omslagfoto voor het profiel uploaden",
-  "onboarding.share.lead": "Laat mensen weten hoe ze je kunnen vinden op Mastodon!",
-  "onboarding.share.message": "Ik ben {username} op #Mastodon! Volg mij op {url}",
-  "onboarding.share.next_steps": "Mogelijke volgende stappen:",
-  "onboarding.share.title": "Jouw profiel delen",
-  "onboarding.start.lead": "Je maakt nu deel uit van Mastodon, een uniek, gedecentraliseerd sociaal mediaplatform waar jij - en dus geen algoritme - jouw eigen ervaring beheert. Laten we beginnen aan deze nieuwe sociale uitdaging:",
-  "onboarding.start.skip": "Wil je meteen verdergaan?",
-  "onboarding.start.title": "Het is je gelukt!",
-  "onboarding.steps.follow_people.body": "Op Mastodon draait het helemaal om het volgen van interessante mensen.",
-  "onboarding.steps.follow_people.title": "Je starttijdlijn aan jouw wensen aanpassen",
-  "onboarding.steps.publish_status.body": "Zeg hallo tegen de wereld met tekst, foto's, video's of peilingen {emoji}",
-  "onboarding.steps.publish_status.title": "Maak je eerste bericht",
-  "onboarding.steps.setup_profile.body": "Wanneer je meer over jezelf vertelt, krijg je meer interactie met andere mensen.",
-  "onboarding.steps.setup_profile.title": "Je profiel aanpassen",
-  "onboarding.steps.share_profile.body": "Laat je vrienden weten waar je te vinden bent op Mastodon",
-  "onboarding.steps.share_profile.title": "Deel je Mastodonprofiel",
-  "onboarding.tips.2fa": "<strong>Wist je dat?</strong> Je kunt je account beveiligen door tweestapsverificatie in te stellen in je accountinstellingen. Het werkt met elke TOTP-app naar keuze, geen telefoonnummer nodig!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Wist je dat?</strong> Mastodon is gedecentraliseerd en daarom kom je regelmatig mensen tegen die van een andere server gebruik maken dan jij. En toch kun je probleemloos met deze mensen communiceren! Hun server vind je in de tweede helft van hun gebruikersnaam!",
-  "onboarding.tips.migration": "<strong>Wist je dat?</strong> Als je het gevoel hebt dat {domain} in de toekomst voor jou geen goede serverkeuze is, dan kan je naar een andere Mastodonserver overstappen zonder je volgers te verliezen. Je kunt zelfs je eigen server opzetten!",
-  "onboarding.tips.verification": "<strong>Wist je dat?</strong> Je kunt je account verifiëren door een link naar je Mastodon-profiel op je eigen website te plaatsen en de website aan je profiel toe te voegen. Geen kosten of documenten nodig!",
   "password_confirmation.exceeds_maxlength": "Wachtwoordbevestiging overschrijdt de maximale wachtwoordlengte",
   "password_confirmation.mismatching": "Wachtwoordbevestiging komt niet overeen",
   "picture_in_picture.restore": "Terugzetten",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 440387e1a..99b653334 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -129,7 +129,6 @@
   "bundle_column_error.routing.body": "Den etterspurde sida vart ikkje funnen. Er du sikker på at URL-adressa er rett?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Lat att",
-  "bundle_modal_error.message": "Noko gjekk gale under lastinga av denne komponenten.",
   "bundle_modal_error.retry": "Prøv igjen",
   "closed_registrations.other_server_instructions": "Sidan Mastodon er desentralisert kan du lage ein brukar på ein anna tenar og framleis interagere med denne.",
   "closed_registrations_modal.description": "Det er ikkje mogleg å opprette ein konto på {domain} nett no, men hugs at du ikkje treng ein konto på akkurat {domain} for å nytte Mastodon.",
@@ -232,10 +231,6 @@
   "disabled_account_banner.text": "Kontoen din, {disabledAccount} er for tida deaktivert.",
   "dismissable_banner.community_timeline": "Dette er dei nylegaste offentlege innlegga frå personar med kontoar frå {domain}.",
   "dismissable_banner.dismiss": "Avvis",
-  "dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.",
-  "dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.",
-  "dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.",
-  "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} fylgjer.",
   "domain_block_modal.block": "Blokker tenaren",
   "domain_block_modal.block_account_instead": "Blokker @{name} i staden",
   "domain_block_modal.they_can_interact_with_old_posts": "Folk på denne tenaren kan samhandla med dei gamle innlegga dine.",
@@ -625,44 +620,17 @@
   "notifications_permission_banner.enable": "Skru på skrivebordsvarsel",
   "notifications_permission_banner.how_to_control": "Aktiver skrivebordsvarsel for å få varsel når Mastodon ikkje er open. Du kan nøye bestemme kva samhandlingar som skal føre til skrivebordsvarsel gjennom {icon}-knappen ovanfor etter at varsel er aktivert.",
   "notifications_permission_banner.title": "Gå aldri glipp av noko",
-  "onboarding.action.back": "Ta meg tilbake",
-  "onboarding.actions.back": "Ta meg tilbake",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Hei #Mastodon!",
   "onboarding.follows.empty": "Me kan ikkje visa deg nokon resultat no. Du kan prøva å søkja eller bla gjennom utforsk-sida for å finna folk å fylgja, eller du kan prøva att seinare.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.discoverable": "Gjer profilen min synleg",
   "onboarding.profile.discoverable_hint": "Når du vel å gjera profilen din synleg på Mastodon, vil innlegga dine syna i søkjeresultat og populære innlegg, og profilen din kan bli føreslegen for folk med liknande interesser som deg.",
   "onboarding.profile.display_name": "Synleg namn",
   "onboarding.profile.display_name_hint": "Det fulle namnet eller kallenamnet ditt…",
-  "onboarding.profile.lead": "Du kan alltid fullføra dette seinare i innstillingane, og der er det endå fleire tilpassingsalternativ.",
   "onboarding.profile.note": "Om meg",
   "onboarding.profile.note_hint": "Du kan @nemna folk eller #emneknaggar…",
   "onboarding.profile.save_and_continue": "Lagre og hald fram",
   "onboarding.profile.title": "Profiloppsett",
   "onboarding.profile.upload_avatar": "Last opp profilbilete",
   "onboarding.profile.upload_header": "Last opp profiltoppbilete",
-  "onboarding.share.lead": "La folk vita korleis dei kan finna deg på Mastodon!",
-  "onboarding.share.message": "Eg er {username} på #Mastodon! Du kan fylgja meg på {url}",
-  "onboarding.share.next_steps": "Dette kan du gjera no:",
-  "onboarding.share.title": "Del profilen din",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "No er du klar!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Skriv ditt fyrste innlegg",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Visste du det?</strong> Du kan sikra kontoen din ved å setja opp 2-stegsinnlogging i kontoinnstillingane dine. Det fungerer med alle appar for tostegsinnloogging, så du treng ikkje noko telefonnummer.",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Visste du det?</strong> Sidan Mastodon er desentralisert, vil mange av profilane du kjem over vera på andre tenarar enn din. Likevel kan du samhandla med dei som elles. Kva tenar dei er på, står i andre halvdelen av brukarnamnet deira.",
-  "onboarding.tips.migration": "<strong>Visste du det?</strong> Viss du ikkje synes {domain} er staden for deg, kan du flytta til ein annan Mastodon-tenar utan å mista fylgjarane dine. Du kan òg driva din eigen tenar!",
-  "onboarding.tips.verification": "<strong>Visste du det?</strong> Du kan stadfesta brukarkontoen din ved å leggja til ei lenke til Mastodon-profilen din på di eiga nettside og leggja nettsida til i profilen din. Det kostar ingenting, og krev ingen dokument!",
   "password_confirmation.exceeds_maxlength": "Passordbekreftelsen overskrider den maksimale passordlengden",
   "password_confirmation.mismatching": "Passordene er ulike",
   "picture_in_picture.restore": "Legg den tilbake",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index b461d3049..8ccb936f2 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -109,7 +109,6 @@
   "bundle_column_error.routing.body": "Den forespurte siden ble ikke funnet. Er du sikker på at URL-en i adresselinjen er riktig?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Lukk",
-  "bundle_modal_error.message": "Noe gikk galt da denne komponenten lastet.",
   "bundle_modal_error.retry": "Prøv igjen",
   "closed_registrations.other_server_instructions": "Siden Mastodon er desentralizert, kan du opprette en konto på en annen server og fortsatt kommunisere med denne.",
   "closed_registrations_modal.description": "Opprettelse av en konto på {domain} er for tiden ikke mulig, men vær oppmerksom på at du ikke trenger en konto spesifikt på {domain} for å kunne bruke Mastodon.",
@@ -210,10 +209,6 @@
   "disabled_account_banner.text": "Din konto {disabledAccount} er for øyeblikket deaktivert.",
   "dismissable_banner.community_timeline": "Dette er de nyeste offentlige innleggene fra personer med kontoer på {domain}.",
   "dismissable_banner.dismiss": "Avvis",
-  "dismissable_banner.explore_links": "Disse nyhetene snakker folk om akkurat nå på denne og andre servere i det desentraliserte nettverket.",
-  "dismissable_banner.explore_statuses": "Disse innleggene fra denne og andre servere i det desentraliserte nettverket får økt oppmerksomhet på denne serveren akkurat nå. Nyere innlegg med flere fremhevinger og favoritter er rangert høyere.",
-  "dismissable_banner.explore_tags": "Disse emneknaggene snakker folk om akkurat nå, på denne og andre servere i det desentraliserte nettverket.",
-  "dismissable_banner.public_timeline": "Dette er de siste offentlige innleggene fra mennesker på det sosiale nettet som folk på {domain} følger.",
   "domain_block_modal.block": "Blokker server",
   "domain_block_modal.block_account_instead": "Blokker @{name} i stedet",
   "domain_block_modal.they_can_interact_with_old_posts": "Personer fra denne serveren kan samhandle med dine gamle innlegg.",
@@ -545,43 +540,16 @@
   "notifications_permission_banner.enable": "Skru på skrivebordsvarsler",
   "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.",
   "notifications_permission_banner.title": "Aldri gå glipp av noe",
-  "onboarding.action.back": "Ta meg tilbake",
-  "onboarding.actions.back": "Ta meg tilbake",
-  "onboarding.actions.go_to_explore": "Se hva som er populært",
-  "onboarding.actions.go_to_home": "Gå til din tidslinje",
-  "onboarding.compose.template": "Hei #Mastodon!",
   "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nå. Du kan prøve å bruke søk eller bla gjennom utforske-siden for å finne folk å følge, eller prøve igjen senere.",
-  "onboarding.follows.lead": "Hjem-skjermen din er den viktigste måten å oppleve Mastodon på. Jo flere du følger, jo mer aktiv og interessant blir det. For å komme i gang, er her noen forslag:",
-  "onboarding.follows.title": "Populært på Mastodon",
   "onboarding.profile.discoverable": "Gjør min profil synlig",
   "onboarding.profile.display_name": "Visningsnavn",
   "onboarding.profile.display_name_hint": "Ditt fulle navn eller ditt morsomme navn…",
-  "onboarding.profile.lead": "Du kan alltid fullføre dette senere i innstillingene, der enda flere tilpasningsalternativer er tilgjengelige.",
   "onboarding.profile.note": "Om meg",
   "onboarding.profile.note_hint": "Du kan @nevne andre eller #emneknagger…",
   "onboarding.profile.save_and_continue": "Lagre og fortsett",
   "onboarding.profile.title": "Konfigurering av profil",
   "onboarding.profile.upload_avatar": "Last opp profilbilde",
   "onboarding.profile.upload_header": "Last opp profiltoppbilde",
-  "onboarding.share.lead": "La folk vite hvordan de kan finne deg på Mastodon!",
-  "onboarding.share.message": "Jeg er {username} på #Mastodon! Kom og følg meg på {url}",
-  "onboarding.share.next_steps": "Mulige neste trinn:",
-  "onboarding.share.title": "Del profilen din",
-  "onboarding.start.lead": "Du er nå en del av Mastodon, en unik, desentralisert plattform for sosiale medier der du, ikke en algoritme, styrer din egen opplevelse. La oss få deg igang på dette nye sosiale eventyret:",
-  "onboarding.start.skip": "Vil du hoppe over dette?",
-  "onboarding.start.title": "Du klarte det!",
-  "onboarding.steps.follow_people.body": "Du bestemmer over din egen tidslinje. La oss fylle den med ineressante personer.",
-  "onboarding.steps.follow_people.title": "Tilpass hjem-skjermen din",
-  "onboarding.steps.publish_status.body": "Si hallo til verdenen med tekst, bilder, videoer, eller meningsmålinger {emoji}",
-  "onboarding.steps.publish_status.title": "Lag ditt første innlegg",
-  "onboarding.steps.setup_profile.body": "Få flere samhandlinger ved å ha en fullstendig profil.",
-  "onboarding.steps.setup_profile.title": "Tilpass profilen din",
-  "onboarding.steps.share_profile.body": "La vennene dine vite hvordan du finner deg på Mastodon",
-  "onboarding.steps.share_profile.title": "Del profilen din",
-  "onboarding.tips.2fa": "<strong>Visste du?</strong> Du kan sikre kontoen din ved å sette opp 2-trinnsinnlogging i kontoinnstillingene dine. Det fungerer med enhver TOTP-app du velger selv, intet telefonnummer nødvendig!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Visste du?</strong> Siden Mastodon er desentralisert, vil noen profiler du kommer over komme fra andre servere enn din egen. Du kan likevel samhandle med dem sømløst! Serveren deres finner du i den andre halvparten av brukernavnet!",
-  "onboarding.tips.migration": "<strong>Visste du?</strong> Hvis du føler at {domain} ikke er et flott servervalg for deg i fremtiden, kan du flytte til en annen Mastodon-server uten å miste følgerene dine. Du kan også være vert for din egen server!",
-  "onboarding.tips.verification": "<strong>Visste du?</strong> Du kan bekrefte kontoen din ved å legge en lenke til Mastodon-profilen din på ditt eget nettsted og legge nettstedet til i profilen din. Ingen gebyrer eller dokumenter nødvendig!",
   "password_confirmation.exceeds_maxlength": "Passordbekreftelsen overskrider den maksimale passordlengden",
   "password_confirmation.mismatching": "Passordene er ulike",
   "picture_in_picture.restore": "Legg den tilbake",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index ddaf94987..be9df2abf 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -87,7 +87,6 @@
   "bundle_column_error.return": "Tornar a l’acuèlh",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Tampar",
-  "bundle_modal_error.message": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.",
   "bundle_modal_error.retry": "Tornar ensajar",
   "closed_registrations_modal.find_another_server": "Trobar un autre servidor",
   "closed_registrations_modal.title": "S’inscriure a Mastodon",
@@ -171,8 +170,6 @@
   "disabled_account_banner.text": "Vòstre compte {disabledAccount} es actualament desactivat.",
   "dismissable_banner.community_timeline": "Vaquí las publicacions mai recentas del monde amb un compte albergat per {domain}.",
   "dismissable_banner.dismiss": "Ignorar",
-  "dismissable_banner.explore_links": "Aquestas istòrias ne parlan lo monde d’aqueste servidor e dels autres servidors del malhum descentralizat d’aquesta passa.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
   "embed.preview": "Semblarà aquò :",
   "emoji_button.activity": "Activitats",
@@ -385,27 +382,8 @@
   "notifications_permission_banner.enable": "Activar las notificacions burèu",
   "notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.",
   "notifications_permission_banner.title": "Manquetz pas jamai res",
-  "onboarding.action.back": "Tornar en rèire",
-  "onboarding.actions.back": "Tornar en rèire",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Adiu #Mastodon !",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.display_name": "Nom d’afichatge",
   "onboarding.profile.note": "Biografia",
-  "onboarding.share.title": "Partejar vòstre perfil",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Tot es prèst !",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Escrivètz vòstre primièr tut",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Lo tornar",
   "poll.closed": "Tampat",
   "poll.refresh": "Actualizar",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index 86226f4cd..ec55387ee 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -4,6 +4,7 @@
   "about.domain_blocks.silenced.title": "ਸੀਮਿਤ",
   "about.domain_blocks.suspended.title": "ਮੁਅੱਤਲ ਕੀਤੀ",
   "about.rules": "ਸਰਵਰ ਨਿਯਮ",
+  "account.account_note_header": "ਨਿੱਜੀ ਨੋਟ",
   "account.add_or_remove_from_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ ਜਾਂ ਹਟਾਓ",
   "account.badges.bot": "ਆਟੋਮੇਟ ਕੀਤਾ",
   "account.badges.group": "ਗਰੁੱਪ",
@@ -27,7 +28,9 @@
   "account.following": "ਫ਼ਾਲੋ ਕੀਤਾ",
   "account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
   "account.go_to_profile": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਜਾਓ",
+  "account.joined_short": "ਜੁਆਇਨ ਕੀਤਾ",
   "account.media": "ਮੀਡੀਆ",
+  "account.mention": "@{name} ਦਾ ਜ਼ਿਕਰ",
   "account.mute": "{name} ਨੂੰ ਮੌਨ ਕਰੋ",
   "account.mute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮੌਨ ਕਰੋ",
   "account.mute_short": "ਮੌਨ ਕਰੋ",
@@ -44,36 +47,62 @@
   "account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
   "account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
   "account.unblock_short": "ਪਾਬੰਦੀ ਹਟਾਓ",
+  "account.unendorse": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਫ਼ੀਚਰ ਨਾ ਕਰੋ",
   "account.unfollow": "ਅਣ-ਫ਼ਾਲੋ",
+  "account.unmute": "@{name} ਲਈ ਮੌਨ ਹਟਾਓ",
+  "account.unmute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣ-ਮੌਨ ਕਰੋ",
   "account.unmute_short": "ਮੌਨ-ਰਹਿਤ ਕਰੋ",
   "account_note.placeholder": "Click to add a note",
   "admin.dashboard.retention.average": "ਔਸਤ",
   "admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ",
   "alert.unexpected.title": "ਓਹੋ!",
+  "alt_text_badge.title": "ਬਦਲੀ ਲਿਖਤ",
   "announcement.announcement": "ਹੋਕਾ",
+  "annual_report.summary.followers.followers": "ਫ਼ਾਲੋਅਰ",
+  "annual_report.summary.followers.total": "{count} ਕੁੱਲ",
+  "annual_report.summary.highlighted_post.by_favourites": "ਸਭ ਤੋਂ ਵੱਧ ਪਸੰਦ ਕੀਤੀ ਪੋਸਟ",
+  "annual_report.summary.highlighted_post.by_reblogs": "ਸਭ ਤੋਂ ਵੱਧ ਬੂਸਟ ਕੀਤੀ ਪੋਸਟ",
+  "annual_report.summary.highlighted_post.by_replies": "ਸਭ ਤੋਂ ਵੱਧ ਜਵਾਬ ਦਿੱਤੀ ਗਈ ਪੋਸਟ",
+  "annual_report.summary.highlighted_post.possessive": "{name}",
+  "annual_report.summary.most_used_app.most_used_app": "ਸਭ ਤੋਂ ਵੱਧ ਵਰਤੀ ਐਪ",
+  "annual_report.summary.most_used_hashtag.none": "ਕੋਈ ਨਹੀਂ",
+  "annual_report.summary.new_posts.new_posts": "ਨਵੀਆਂ ਪੋਸਟਾਂ",
+  "annual_report.summary.thanks": "Mastodon ਦਾ ਹਿੱਸਾ ਬਣਨ ਵਾਸਤੇ ਧੰਨਵਾਦ ਹੈ!",
+  "audio.hide": "ਆਡੀਓ ਨੂੰ ਲੁਕਾਓ",
   "block_modal.show_less": "ਘੱਟ ਦਿਖਾਓ",
   "block_modal.show_more": "ਵੱਧ ਦਿਖਾਓ",
   "block_modal.title": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਹੈ?",
+  "boost_modal.reblog": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰਨਾ ਹੈ?",
   "bundle_column_error.error.title": "ਓਹ ਹੋ!",
   "bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ",
   "bundle_column_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",
   "bundle_column_error.return": "ਵਾਪਸ ਮੁੱਖ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "ਬੰਦ ਕਰੋ",
-  "bundle_modal_error.message": "ਭਾਗ ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਕੁਝ ਗਲਤ ਵਾਪਰਿਆ ਹੈ।",
   "bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",
+  "closed_registrations_modal.title": "Mastodon ਲਈ ਸਾਈਨ ਅੱਪ ਕਰੋ",
   "column.about": "ਸਾਡੇ ਬਾਰੇ",
   "column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ",
   "column.bookmarks": "ਬੁੱਕਮਾਰਕ",
   "column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ",
+  "column.create_list": "ਸੂਚੀ ਬਣਾਓ",
   "column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
+  "column.directory": "ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਦੇਖੋ",
+  "column.domain_blocks": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ",
+  "column.edit_list": "ਸੂਚੀ ਨੂੰ ਸੋਧੋ",
   "column.favourites": "ਮਨਪਸੰਦ",
+  "column.firehose": "ਲਾਈਵ ਫੀਡ",
   "column.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ",
   "column.home": "ਮੁੱਖ ਸਫ਼ਾ",
+  "column.list_members": "ਸੂਚੀ ਦੇ ਮੈਂਬਰ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ",
   "column.lists": "ਸੂਚੀਆਂ",
+  "column.mutes": "ਮੌਨ ਕੀਤੇ ਵਰਤੋਂਕਾਰ",
   "column.notifications": "ਸੂਚਨਾਵਾਂ",
   "column.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ",
   "column_back_button.label": "ਪਿੱਛੇ",
+  "column_header.hide_settings": "ਸੈਟਿੰਗਾਂ ਨੂੰ ਲੁਕਾਓ",
+  "column_header.moveLeft_settings": "ਕਾਲਮ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਭੇਜੋ",
+  "column_header.moveRight_settings": "ਕਾਲਮ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਭੇਜੋ",
   "column_header.pin": "ਟੰਗੋ",
   "column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ",
   "column_header.unpin": "ਲਾਹੋ",
@@ -83,16 +112,20 @@
   "community.column_settings.remote_only": "ਸਿਰਫ਼ ਰਿਮੋਟ ਹੀ",
   "compose.language.change": "ਭਾਸ਼ਾ ਬਦਲੋ",
   "compose.language.search": "ਭਾਸ਼ਾਵਾਂ ਦੀ ਖੋਜ...",
+  "compose.published.body": "ਪੋਸਟ ਪ੍ਰਕਾਸ਼ਿਤ ਕੀਤੀ।",
   "compose.published.open": "ਖੋਲ੍ਹੋ",
   "compose.saved.body": "ਪੋਸਟ ਸੰਭਾਲੀ ਗਈ।",
   "compose_form.direct_message_warning_learn_more": "ਹੋਰ ਜਾਣੋ",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
   "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "ਤੁਹਾਡਾ ਖਾਤਾ {locked} ਨਹੀਂ ਹੈ। ਕੋਈ ਵੀ ਤੁਹਾਡੀਆਂ ਸਿਰਫ਼-ਫ਼ਾਲੋਅਰ ਪੋਸਟਾਂ ਵੇਖਣ ਵਾਸਤੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰ ਸਕਦਾ ਹੈ।",
   "compose_form.lock_disclaimer.lock": "ਲਾਕ ਹੈ",
-  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.placeholder": "ਤੁਹਾਡੇ ਮਨ ਵਿੱਚ ਕੀ ਹੈ?",
+  "compose_form.poll.option_placeholder": "{number} ਚੋਣ",
+  "compose_form.poll.single": "ਇਕੱਲੀ ਚੋਣ",
   "compose_form.poll.type": "ਸਟਾਈਲ",
   "compose_form.publish": "ਪੋਸਟ",
-  "compose_form.publish_form": "Publish",
+  "compose_form.publish_form": "ਨਵੀਂ ਪੋਸਟ",
   "compose_form.reply": "ਜਵਾਬ ਦਿਓ",
   "compose_form.save_changes": "ਅੱਪਡੇਟ",
   "compose_form.spoiler.marked": "ਸਮੱਗਰੀ ਚੇਤਾਵਨੀ ਨੂੰ ਹਟਾਓ",
@@ -102,20 +135,47 @@
   "confirmations.block.confirm": "ਪਾਬੰਦੀ",
   "confirmations.delete.confirm": "ਹਟਾਓ",
   "confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
+  "confirmations.delete.title": "ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?",
   "confirmations.delete_list.confirm": "ਹਟਾਓ",
+  "confirmations.delete_list.message": "ਕੀ ਤੁਸੀਂ ਇਸ ਸੂਚੀ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
+  "confirmations.delete_list.title": "ਸੂਚੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?",
   "confirmations.discard_edit_media.confirm": "ਰੱਦ ਕਰੋ",
   "confirmations.edit.confirm": "ਸੋਧ",
   "confirmations.logout.confirm": "ਬਾਹਰ ਹੋਵੋ",
+  "confirmations.logout.message": "ਕੀ ਤੁਸੀਂ ਲਾਗ ਆਉਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
+  "confirmations.logout.title": "ਲਾਗ ਆਉਟ ਕਰਨਾ ਹੈ?",
   "confirmations.mute.confirm": "ਮੌਨ ਕਰੋ",
+  "confirmations.redraft.confirm": "ਹਟਾਓ ਤੇ ਮੁੜ-ਡਰਾਫਟ",
   "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ",
   "confirmations.unfollow.confirm": "ਅਣ-ਫ਼ਾਲੋ",
+  "confirmations.unfollow.message": "ਕੀ ਤੁਸੀਂ {name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
+  "confirmations.unfollow.title": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰਨਾ ਹੈ?",
+  "content_warning.hide": "ਪੋਸਟ ਨੂੰ ਲੁਕਾਓ",
+  "content_warning.show": "ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ",
+  "content_warning.show_more": "ਹੋਰ ਵੇਖਾਓ",
+  "conversation.delete": "ਗੱਲਬਾਤ ਨੂੰ ਹਟਾਓ",
+  "conversation.mark_as_read": "ਪੜ੍ਹੇ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਲਾਓ",
+  "conversation.open": "ਗੱਲਬਾਤ ਨੂੰ ਵੇਖੋ",
+  "conversation.with": "{names} ਨਾਲ",
+  "copy_icon_button.copied": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
   "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ",
   "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
+  "directory.local": "ਸਿਰਫ਼ {domain} ਤੋਂ",
+  "directory.new_arrivals": "ਨਵੇਂ ਆਉਣ ਵਾਲੇ",
+  "directory.recently_active": "ਸੱਜਰੇ ਸਰਗਰਮ",
   "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ",
+  "disabled_account_banner.text": "ਤੁਹਾਡਾ ਖਾਤਾ {disabledAccount} ਇਸ ਵੇਲੇ ਅਸਮਰੱਥ ਕੀਤਾ ਹੈ।",
   "dismissable_banner.dismiss": "ਰੱਦ ਕਰੋ",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
-  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "domain_block_modal.block": "ਸਰਵਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
+  "domain_block_modal.block_account_instead": "ਇਸ ਦੀ ਬਜਾਏ @{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
+  "domain_block_modal.title": "ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਹੈ?",
+  "domain_pill.server": "ਸਰਵਰ",
+  "domain_pill.their_handle": "ਇਹ ਹੈਂਡਲ:",
+  "domain_pill.their_server": "ਉਹਨਾਂ ਦਾ ਡਿਜ਼ਿਟਲ ਘਰ, ਜਿੱਥੇ ਉਹਨਾਂ ਦੀਆਂ ਸਾਰੀਆਂ ਪੋਸਟਾਂ ਹੁੰਦੀਆਂ ਹਨ।",
+  "domain_pill.username": "ਵਰਤੋਂਕਾਰ-ਨਾਂ",
+  "domain_pill.whats_in_a_handle": "ਹੈਂਡਲ ਕੀ ਹੁੰਦਾ ਹੈ?",
+  "domain_pill.your_handle": "ਤੁਹਾਡਾ ਹੈਂਡਲ:",
+  "embed.instructions": "ਹੇਠਲੇ ਕੋਡ ਨੂੰ ਕਾਪੀ ਕਰਕੇ ਆਪਣੀ ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਇਸ ਪੋਸਟ ਨੂੰ ਇੰਬੈੱਡ ਕਰੋ।",
   "emoji_button.activity": "ਗਤੀਵਿਧੀ",
   "emoji_button.clear": "ਮਿਟਾਓ",
   "emoji_button.custom": "ਕਸਟਮ",
@@ -124,27 +184,43 @@
   "emoji_button.nature": "ਕੁਦਰਤ",
   "emoji_button.objects": "ਇਕਾਈ",
   "emoji_button.people": "ਲੋਕ",
+  "emoji_button.recent": "ਅਕਸਰ ਵਰਤੇ",
   "emoji_button.search": "ਖੋਜ ਕਰੋ...",
   "emoji_button.search_results": "ਖੋਜ ਨਤੀਜੇ",
   "emoji_button.symbols": "ਚਿੰਨ੍ਹ",
   "emoji_button.travel": "ਸੈਰ ਸਪਾਟਾ ਤੇ ਥਾਵਾਂ",
+  "empty_column.account_suspended": "ਖਾਤਾ ਸਸਪੈਂਡ ਕੀਤਾ",
   "empty_column.account_timeline": "ਇੱਥੇ ਕੋਈ ਪੋਸਟ ਨਹੀਂ ਹੈ!",
-  "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
+  "empty_column.account_unavailable": "ਪ੍ਰੋਫਾਈਲ ਅਣ-ਉਪਲਬਧ ਹੈ",
+  "empty_column.blocks": "ਤੁਸੀਂ ਹਾਲੇ ਕਿਸੇ ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਨਹੀਂ ਲਾਈ ਹੈ।",
+  "empty_column.bookmarked_statuses": "ਤੁਸੀਂ ਹਾਲੇ ਕਿਸੇ ਵੀ ਪੋਸਟ ਨੂੰ ਬੁੱਕਮਾਰਕ ਨਹੀਂ ਕੀਤਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਬੁੱਕਮਾਰਕ ਕੀਤਾ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦਾਵੇਗਾ।",
   "empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।",
-  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.list": "ਇਸ ਸੂਚੀ ਵਿੱਚ ਹਾਲੇ ਕੁਝ ਵੀ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਇਸ ਸੂਚੀ ਦੇ ਮੈਂਬਰ ਨਵੀਆਂ ਪੋਸਟਾਂ ਪਾਉਂਦੇ ਹਨ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੀਆਂ।",
   "errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+  "explore.search_results": "ਖੋਜ ਦੇ ਨਤੀਜੇ",
   "explore.suggested_follows": "ਲੋਕ",
   "explore.title": "ਪੜਚੋਲ ਕਰੋ",
   "explore.trending_links": "ਖ਼ਬਰਾਂ",
   "explore.trending_statuses": "ਪੋਸਟਾਂ",
   "explore.trending_tags": "ਹੈਸ਼ਟੈਗ",
+  "filter_modal.added.expired_title": "ਫਿਲਟਰ ਦੀ ਮਿਆਦ ਪੁੱਗੀ!",
+  "filter_modal.added.review_and_configure_title": "ਫਿਲਟਰ ਸੈਟਿੰਗਾਂ",
   "filter_modal.added.settings_link": "ਸੈਟਿੰਗਾਂ ਸਫ਼ਾ",
+  "filter_modal.added.title": "ਫਿਲਟਰ ਨੂੰ ਜੋੜਿਆ!",
+  "filter_modal.select_filter.expired": "ਮਿਆਦ ਪੁੱਗੀ",
+  "filter_modal.select_filter.prompt_new": "ਨਵੀਂ ਕੈਟਾਗਰੀ: {name}",
+  "filter_modal.select_filter.search": "ਖੋਜੋ ਜਾਂ ਬਣਾਓ",
   "firehose.all": "ਸਭ",
   "firehose.local": "ਇਹ ਸਰਵਰ",
   "firehose.remote": "ਹੋਰ ਸਰਵਰ",
   "follow_request.reject": "ਰੱਦ ਕਰੋ",
   "follow_suggestions.dismiss": "ਮੁੜ ਨਾ ਵੇਖਾਓ",
+  "follow_suggestions.personalized_suggestion": "ਨਿੱਜੀ ਸੁਝਾਅ",
+  "follow_suggestions.popular_suggestion": "ਹਰਮਨਪਿਆਰੇ ਸੁਝਾਅ",
+  "follow_suggestions.popular_suggestion_longer": "{domain} ਉੱਤੇ ਹਰਮਨਪਿਆਰੇ",
   "follow_suggestions.view_all": "ਸਭ ਵੇਖੋ",
+  "follow_suggestions.who_to_follow": "ਕਿਸ ਨੂੰ ਫ਼ਾਲੋ ਕਰੀਏ",
+  "followed_tags": "ਫ਼ਾਲੋ ਕੀਤੇ ਹੈਸ਼ਟੈਗ",
   "footer.about": "ਸਾਡੇ ਬਾਰੇ",
   "footer.directory": "ਪਰੋਫਾਇਲ ਡਾਇਰੈਕਟਰੀ",
   "footer.get_app": "ਐਪ ਲਵੋ",
@@ -159,53 +235,94 @@
   "hashtag.column_header.tag_mode.any": "ਜਾਂ {additional}",
   "hashtag.column_header.tag_mode.none": "{additional} ਬਿਨਾਂ",
   "hashtag.column_settings.select.no_options_message": "ਕੋਈ ਸੁਝਾਅ ਨਹੀਂ ਲੱਭਾ",
+  "hashtag.column_settings.select.placeholder": "ਹੈਸ਼ਟੈਗ ਦਿਓ…",
+  "hashtag.column_settings.tag_mode.all": "ਇਹ ਸਭ",
   "hashtag.column_settings.tag_mode.any": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ",
   "hashtag.column_settings.tag_mode.none": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ",
   "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
   "hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
   "hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ",
+  "hints.profiles.see_more_followers": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋਅਰ ਵੇਖੋ",
+  "hints.profiles.see_more_follows": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋ ਨੂੰ ਵੇਖੋ",
+  "hints.profiles.see_more_posts": "{domain} ਉੱਤੇ ਹੋਰ ਪੋਸਟਾਂ ਨੂੰ ਵੇਖੋ",
+  "home.column_settings.show_reblogs": "ਬੂਸਟਾਂ ਨੂੰ ਵੇਖੋ",
+  "home.column_settings.show_replies": "ਜਵਾਬਾਂ ਨੂੰ ਵੇਖੋ",
+  "home.hide_announcements": "ਐਲਾਨਾਂ ਨੂੰ ਓਹਲੇ ਕਰੋ",
   "home.pending_critical_update.link": "ਅੱਪਡੇਟ ਵੇਖੋ",
+  "ignore_notifications_modal.ignore": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ",
+  "interaction_modal.login.action": "ਮੈਨੂੰ ਮੁੱਖ ਸਫ਼ੇ ਉੱਤੇ ਲੈ ਜਾਓ",
+  "interaction_modal.no_account_yet": "Mastodon ਉੱਤੇ ਨਹੀਂ ਹੋ?",
+  "interaction_modal.on_another_server": "ਵੱਖਰੇ ਸਰਵਰ ਉੱਤੇ",
+  "interaction_modal.on_this_server": "ਇਸ ਸਰਵਰ ਉੱਤੇ",
+  "interaction_modal.title.favourite": "{name} ਦੀ ਪੋਸਟ ਨੂੰ ਪਸੰਦ ਕਰੋ",
   "interaction_modal.title.follow": "{name} ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
+  "interaction_modal.title.reblog": "{name} ਦੀ ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ",
+  "interaction_modal.title.reply": "{name} ਦੀ ਪੋਸਟ ਦਾ ਜਵਾਬ ਦਿਓ",
+  "interaction_modal.title.vote": "{name} ਦੀ ਚੋਣ ਵਾਸਤੇ ਵੋਟ ਪਾਓ",
+  "intervals.full.days": "{number, plural, one {# ਦਿਨ} other {# ਦਿਨ}}",
+  "intervals.full.hours": "{number, plural, one {# ਘੰਟਾ} other {# ਘੰਟੇ}}",
+  "intervals.full.minutes": "{number, plural, one {# ਮਿੰਟ} other {# ਮਿੰਟ}}",
   "keyboard_shortcuts.back": "ਪਿੱਛੇ ਜਾਓ",
   "keyboard_shortcuts.blocked": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਸੂਚੀ ਖੋਲ੍ਹੋ",
   "keyboard_shortcuts.boost": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ",
   "keyboard_shortcuts.column": "ਫੋਕਸ ਕਾਲਮ",
   "keyboard_shortcuts.compose": "to focus the compose textarea",
   "keyboard_shortcuts.description": "ਵਰਣਨ",
-  "keyboard_shortcuts.direct": "to open direct messages column",
-  "keyboard_shortcuts.down": "to move down in the list",
-  "keyboard_shortcuts.enter": "to open status",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.direct": "ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ ਕੀਤੇ ਕਾਲਮ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ",
+  "keyboard_shortcuts.down": "ਸੂਚੀ ਵਿੱਚ ਹੇਠਾਂ ਭੇਜੋ",
+  "keyboard_shortcuts.enter": "ਪੋਸਟ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.favourite": "ਪੋਸਟ ਨੂੰ ਪਸੰਦ ਕਰੋ",
+  "keyboard_shortcuts.federated": "",
   "keyboard_shortcuts.heading": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
-  "keyboard_shortcuts.home": "to open home timeline",
-  "keyboard_shortcuts.legend": "to display this legend",
-  "keyboard_shortcuts.local": "to open local timeline",
-  "keyboard_shortcuts.mention": "to mention author",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.home": "ਮੁੱਖ-ਸਫ਼ਾ ਟਾਈਮ-ਲਾਈਨ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.legend": "ਇਸ ਸੰਕੇਤ ਨੂੰ ਵੇਖਾਓ",
+  "keyboard_shortcuts.local": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.mention": "ਲੇਖਕ ਦਾ ਜ਼ਿਕਰ",
+  "keyboard_shortcuts.muted": "ਮੌਨ ਕੀਤੇ ਵਰਤੋਂਕਾਰ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.my_profile": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ",
   "keyboard_shortcuts.notifications": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਕਾਲਮ ਖੋਲ੍ਹੋ",
-  "keyboard_shortcuts.open_media": "to open media",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.open_media": "ਮੀਡੀਏ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.pinned": "ਪਿੰਨ ਕੀਤੀਆਂ ਪੋਸਟਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ",
   "keyboard_shortcuts.profile": "ਲੇਖਕ ਦਾ ਪਰੋਫਾਈਲ ਖੋਲ੍ਹੋ",
   "keyboard_shortcuts.reply": "ਪੋਸਟ ਨੂੰ ਜਵਾਬ ਦਿਓ",
-  "keyboard_shortcuts.requests": "to open follow requests list",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.spoilers": "to show/hide CW field",
+  "keyboard_shortcuts.requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ",
+  "keyboard_shortcuts.search": "ਖੋਜ ਪੱਟੀ ਨੂੰ ਫੋਕਸ ਕਰੋ",
+  "keyboard_shortcuts.spoilers": "CW ਖੇਤਰ ਨੂੰ ਵੇਖਾਓ/ਓਹਲੇ ਕਰੋ",
   "keyboard_shortcuts.start": "to open \"get started\" column",
   "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
   "keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ",
   "keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ",
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
-  "keyboard_shortcuts.up": "to move up in the list",
+  "keyboard_shortcuts.up": "ਸੂਚੀ ਵਿੱਚ ਉੱਤੇ ਭੇਜੋ",
   "lightbox.close": "ਬੰਦ ਕਰੋ",
   "lightbox.next": "ਅਗਲੀ",
   "lightbox.previous": "ਪਿਛਲੀ",
   "link_preview.author": "{name} ਵਲੋਂ",
+  "link_preview.more_from_author": "{name} ਵਲੋਂ ਹੋਰ",
+  "link_preview.shares": "{count, plural, one {{counter} ਪੋਸਟ} other {{counter} ਪੋਸਟਾਂ}}",
+  "lists.add_member": "ਜੋੜੋ",
+  "lists.add_to_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ",
+  "lists.create": "ਬਣਾਓ",
+  "lists.create_list": "ਸੂਚੀ ਬਣਾਓ",
   "lists.delete": "ਸੂਚੀ ਹਟਾਓ",
+  "lists.done": "ਮੁਕੰਮਲ",
+  "lists.edit": "ਸੂਚੀ ਨੂੰ ਸੋਧੋ",
+  "lists.find_users_to_add": "ਜੋੜਨ ਲਈ ਵਰਤੋਂਕਾਰ ਲੱਭੋ",
+  "lists.list_members": "ਮੈਂਬਰਾਂ ਦੀ ਸੂਚੀ",
+  "lists.list_members_count": "{count, plural, one {# ਮੈਂਬਰ} other {# ਮੈਂਬਰ}}",
+  "lists.list_name": "ਸੂਚੀ ਦਾ ਨਾਂ",
+  "lists.new_list_name": "ਨਵੀਂ ਸੂਚੀਂ ਦਾ ਨਾਂ",
+  "lists.no_lists_yet": "ਹਾਲੇ ਕੋਈ ਵੀ ਸੂਚੀ ਨਹੀਂ ਹੈ।",
+  "lists.remove_member": "ਹਟਾਓ",
   "lists.replies_policy.followed": "ਕੋਈ ਵੀ ਫ਼ਾਲੋ ਕੀਤਾ ਵਰਤੋਂਕਾਰ",
+  "lists.replies_policy.list": "ਸੂਚੀ ਦੇ ਮੈਂਬਰ",
   "lists.replies_policy.none": "ਕੋਈ ਨਹੀਂ",
+  "lists.save": "ਸੰਭਾਲੋ",
   "loading_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ…",
+  "media_gallery.hide": "ਲੁਕਾਓ",
+  "mute_modal.show_options": "ਚੋਣਾਂ ਨੂੰ ਵੇਖਾਓ",
   "navigation_bar.about": "ਇਸ ਬਾਰੇ",
+  "navigation_bar.administration": "ਪਰਸ਼ਾਸ਼ਨ",
   "navigation_bar.advanced_interface": "ਤਕਨੀਕੀ ਵੈੱਬ ਇੰਟਰਫੇਸ ਵਿੱਚ ਖੋਲ੍ਹੋ",
   "navigation_bar.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ",
   "navigation_bar.bookmarks": "ਬੁੱਕਮਾਰਕ",
@@ -229,49 +346,80 @@
   "navigation_bar.search": "ਖੋਜੋ",
   "navigation_bar.security": "ਸੁਰੱਖਿਆ",
   "not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।",
+  "notification.admin.sign_up": "{name} ਨੇ ਸਾਈਨ ਅੱਪ ਕੀਤਾ",
   "notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ",
+  "notification.follow.name_and_others": "{name} ਅਤੇ <a>{count, plural, one {# ਹੋਰ} other {# ਹੋਰਾਂ}}</a> ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ",
   "notification.follow_request": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ",
+  "notification.label.mention": "ਜ਼ਿਕਰ",
+  "notification.label.private_mention": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
+  "notification.label.private_reply": "ਪ੍ਰਾਈਵੇਟ ਜਵਾਬ",
+  "notification.label.reply": "ਜਵਾਬ",
+  "notification.mention": "ਜ਼ਿਕਰ",
+  "notification.mentioned_you": "{name} ਨੇ ਤੁਹਾਡਾ ਜ਼ਿਕਰ ਕੀਤਾ",
+  "notification.moderation-warning.learn_more": "ਹੋਰ ਜਾਣੋ",
+  "notification.moderation_warning.action_disable": "ਤੁਹਾਡੇ ਖਾਤੇ ਨੂੰਅਸਮਰੱਥ ਕੀਤਾ ਹੈ।",
   "notification.reblog": "{name} boosted your status",
+  "notification.relationships_severance_event.learn_more": "ਹੋਰ ਜਾਣੋ",
+  "notification.status": "{name} ਨੇ ਹੁਣੇ ਪੋਸਟ ਕੀਤਾ",
+  "notification.update": "{name} ਨੋ ਪੋਸਟ ਨੂੰ ਸੋਧਿਆ",
+  "notification_requests.accept": "ਮਨਜ਼ੂਰ",
+  "notification_requests.confirm_accept_multiple.title": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਬੇਨਤੀਆਂ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨਾ ਹੈ?",
+  "notification_requests.confirm_dismiss_multiple.title": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਬੇਨਤੀਆਂ ਨੂੰ ਖ਼ਾਰਜ ਕਰਨਾ ਹੈ?",
+  "notification_requests.dismiss": "ਖ਼ਾਰਜ ਕਰੋ",
+  "notification_requests.edit_selection": "ਸੋਧੋ",
+  "notification_requests.exit_selection": "ਮੁਕੰਮਲ",
+  "notification_requests.notifications_from": "{name} ਵਲੋਂ ਨੋਟੀਫਿਕੇਸ਼ਨ",
+  "notifications.clear_title": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?",
+  "notifications.column_settings.admin.report": "ਨਵੀਆਂ ਰਿਪੋਰਟਾਂ:",
   "notifications.column_settings.alert": "ਡੈਸਕਟਾਪ ਸੂਚਨਾਵਾਂ",
   "notifications.column_settings.favourite": "ਮਨਪਸੰਦ:",
+  "notifications.column_settings.filter_bar.category": "ਫੌਰੀ ਫਿਲਟਰ ਪੱਟੀ",
   "notifications.column_settings.follow": "ਨਵੇਂ ਫ਼ਾਲੋਅਰ:",
   "notifications.column_settings.follow_request": "ਨਵੀਆਂ ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ:",
+  "notifications.column_settings.group": "ਗਰੁੱਪ",
+  "notifications.column_settings.mention": "ਜ਼ਿਕਰ:",
+  "notifications.column_settings.poll": "ਪੋਲ ਦੇ ਨਤੀਜੇ:",
+  "notifications.column_settings.reblog": "ਬੂਸਟ:",
+  "notifications.column_settings.show": "ਕਾਲਮ ਵਿੱਚ ਵੇਖਾਓ",
+  "notifications.column_settings.sound": "ਆਵਾਜ਼ ਚਲਾਓ",
   "notifications.column_settings.status": "ਨਵੀਆਂ ਪੋਸਟਾਂ:",
+  "notifications.column_settings.unread_notifications.category": "ਨਾ-ਪੜ੍ਹੇ ਨੋਟੀਫਿਕੇਸ਼ਨ",
+  "notifications.column_settings.unread_notifications.highlight": "ਨਾ-ਪੜ੍ਹੇ ਨੋਟੀਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਉਘਾੜੋ",
   "notifications.column_settings.update": "ਸੋਧ:",
   "notifications.filter.all": "ਸਭ",
   "notifications.filter.boosts": "ਬੂਸਟ",
   "notifications.filter.favourites": "ਮਨਪਸੰਦ",
   "notifications.filter.follows": "ਫ਼ਾਲੋ",
   "notifications.filter.mentions": "ਜ਼ਿਕਰ",
-  "onboarding.actions.go_to_explore": "ਮੈਨੂੰ ਰੁਝਾਨ ਵੇਖਾਓ",
-  "onboarding.actions.go_to_home": "ਮੇਰੀ ਮੁੱਖ ਫੀਡ ਉੱਤੇ ਲੈ ਜਾਓ",
-  "onboarding.follows.lead": "",
-  "onboarding.follows.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ",
+  "notifications.filter.polls": "ਪੋਲ ਦੇ ਨਤੀਜੇ",
+  "notifications.grant_permission": "ਇਜਾਜ਼ਤ ਦਿਓ।",
+  "notifications.group": "{count} ਨੋਟੀਫਿਕੇਸ਼ਨ",
+  "notifications.policy.accept": "ਮਨਜ਼ੂਰ",
+  "notifications.policy.accept_hint": "ਨੋਟੀਫਿਕੇਸ਼ਨਾਂ ਵਿੱਚ ਵੇਖਾਓ",
+  "notifications.policy.drop": "ਅਣਡਿੱਠਾ",
   "onboarding.profile.note": "ਜਾਣਕਾਰੀ",
   "onboarding.profile.save_and_continue": "ਸੰਭਾਲੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ",
   "onboarding.profile.title": "ਪਰੋਫਾਈਲ ਸੈਟਅੱਪ",
   "onboarding.profile.upload_avatar": "ਪਰੋਫਾਈਲ ਤਸਵੀਰ ਅੱਪਲੋਡ ਕਰੋ",
-  "onboarding.share.title": "ਆਪਣਾ ਪਰੋਫਾਈਲ ਸਾਂਝਾ ਕਰੋ",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਦਦ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ?",
-  "onboarding.start.title": "ਤੁਸੀਂ ਪੂਰਾ ਕਰਨ ਲਿਆ!",
-  "onboarding.steps.follow_people.body": "ਦਿਲਚਸਪ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ, ਇਹ ਤਾਂ ਮਸਟਾਡੋਨ ਹੈ।",
-  "onboarding.steps.follow_people.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "ਆਪਣੀ ਪਹਿਲੀ ਪੋਸਟ ਕਰੋ",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਆਪਣਾ ਬਣਾਓ",
-  "onboarding.steps.share_profile.body": "ਆਪਣੇ ਮਿੱਤਰਾਂ ਨੂੰ ਦੱਸੋ ਤੁਹਾਨੂੰ ਮਸਟਾਡੋਨ ਕਿਵੇਂ ਲੱਗਿਆ",
-  "onboarding.steps.share_profile.title": "ਆਪਣੇ ਮਸਟਾਡੋਨ ਪਰੋਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰੋ",
   "poll.closed": "ਬੰਦ ਹੈ",
   "poll.refresh": "ਤਾਜ਼ਾ ਕਰੋ",
+  "poll.reveal": "ਨਤੀਜਿਆਂ ਨੂੰ ਵੇਖੋ",
   "poll.vote": "ਵੋਟ ਪਾਓ",
+  "poll.voted": "ਤੁਸੀਂ ਇਸ ਜਵਾਬ ਲਈ ਵੋਟ ਕੀਤਾ",
   "privacy.change": "ਪੋਸਟ ਦੀ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਦਲੋ",
+  "privacy.private.short": "ਫ਼ਾਲੋਅਰ",
   "privacy.public.short": "ਜਨਤਕ",
   "privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
+  "recommended": "ਸਿਫ਼ਾਰਸ਼ੀ",
   "refresh": "ਤਾਜ਼ਾ ਕਰੋ",
   "regeneration_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...",
+  "relative_time.days": "{number}ਦਿਨ",
+  "relative_time.full.days": "{number, plural, one {# ਦਿਨ} other {# ਦਿਨ}} ਪਹਿਲਾਂ",
+  "relative_time.full.hours": "{number, plural, one {# ਘੰਟਾ} other {# ਘੰਟੇ}} ਪਹਿਲਾਂ",
   "relative_time.full.just_now": "ਹੁਣੇ ਹੀ",
+  "relative_time.full.minutes": "{number, plural, one {# ਮਿੰਟ} other {# ਮਿੰਟ}} ਪਹਿਲਾਂ",
+  "relative_time.full.seconds": "{number, plural, one {# ਸਕਿੰਟ} other {# ਸਕਿੰਟ}} ਪਹਿਲਾਂ",
+  "relative_time.hours": "{number}ਘੰ",
   "relative_time.just_now": "ਹੁਣੇ",
   "relative_time.minutes": "{number}ਮਿੰ",
   "relative_time.seconds": "{number}ਸ",
@@ -295,11 +443,19 @@
   "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
   "report_notification.categories.legal": "ਕਨੂੰਨੀ",
   "report_notification.categories.other": "ਬਾਕੀ",
+  "report_notification.categories.other_sentence": "ਹੋਰ",
   "report_notification.categories.spam": "ਸਪੈਮ",
+  "report_notification.categories.spam_sentence": "ਸਪੈਮ",
   "report_notification.categories.violation": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ",
+  "report_notification.categories.violation_sentence": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ",
   "report_notification.open": "ਰਿਪੋਰਟ ਨੂੰ ਖੋਲ੍ਹੋ",
   "search.placeholder": "ਖੋਜੋ",
+  "search.quick_action.go_to_account": "ਪਰੋਫਾਈਲ {x} ਉੱਤੇ ਜਾਓ",
+  "search.quick_action.go_to_hashtag": "ਹੈਸ਼ਟੈਗ {x} ਉੱਤੇ ਜਾਓ",
+  "search_popout.language_code": "ISO ਭਾਸ਼ਾ ਕੋਡ",
+  "search_popout.options": "ਖੋਜ ਲਈ ਚੋਣਾਂ",
   "search_popout.quick_actions": "ਫੌਰੀ ਕਾਰਵਾਈਆਂ",
+  "search_popout.recent": "ਸੱਜਰੀਆਂ ਖੋਜੋ",
   "search_popout.specific_date": "ਖਾਸ ਤਾਰੀਖ",
   "search_popout.user": "ਵਰਤੋਂਕਾਰ",
   "search_results.accounts": "ਪਰੋਫਾਈਲ",
@@ -308,6 +464,7 @@
   "search_results.see_all": "ਸਭ ਵੇਖੋ",
   "search_results.statuses": "ਪੋਸਟਾਂ",
   "search_results.title": "{q} ਲਈ ਖੋਜ",
+  "server_banner.active_users": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ",
   "sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ",
   "sign_in_banner.sign_in": "ਲਾਗਇਨ",
   "sign_in_banner.sso_redirect": "ਲਾਗਇਨ ਜਾਂ ਰਜਿਸਟਰ ਕਰੋ",
@@ -316,7 +473,10 @@
   "status.bookmark": "ਬੁੱਕਮਾਰਕ",
   "status.copy": "ਪੋਸਟ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
   "status.delete": "ਹਟਾਓ",
+  "status.direct": "{name} ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ",
+  "status.direct_indicator": "ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ",
   "status.edit": "ਸੋਧ",
+  "status.edited": "ਆਖਰੀ ਸੋਧ ਦੀ ਤਾਰੀਖ {date}",
   "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
   "status.favourite": "ਪਸੰਦ",
   "status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ",
@@ -340,10 +500,12 @@
   "status.share": "ਸਾਂਝਾ ਕਰੋ",
   "status.title.with_attachments": "{user} ਨੇ {attachmentCount, plural,one {ਅਟੈਚਮੈਂਟ} other {{attachmentCount}ਅਟੈਚਮੈਂਟਾਂ}} ਪੋਸਟ ਕੀਤੀਆਂ",
   "status.translate": "ਉਲੱਥਾ ਕਰੋ",
+  "status.unpin": "ਪਰੋਫਾਈਲ ਤੋਂ ਲਾਹੋ",
   "subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੋ",
   "tabs_bar.home": "ਘਰ",
   "tabs_bar.notifications": "ਸੂਚਨਾਵਾਂ",
   "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
+  "trends.trending_now": "ਹੁਣ ਰੁਝਾਨ ਵਿੱਚ",
   "units.short.billion": "{count}ਿਬ",
   "units.short.million": "{count}ਮਿ",
   "units.short.thousand": "{count}ਹਜ਼ਾਰ",
@@ -357,8 +519,13 @@
   "upload_modal.edit_media": "ਮੀਡੀਆ ਸੋਧੋ",
   "upload_progress.label": "ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...",
   "upload_progress.processing": "ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ…",
+  "username.taken": "ਉਹ ਵਰਤੋਂਕਾਰ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਲੈ ਲਿਆ ਹੈ। ਹੋਰ ਅਜ਼ਮਾਓ",
+  "video.close": "ਵੀਡੀਓ ਨੂੰ ਬੰਦ ਕਰੋ",
+  "video.download": "ਫ਼ਾਈਲ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰੋ",
   "video.exit_fullscreen": "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚੋਂ ਬਾਹਰ ਨਿਕਲੋ",
+  "video.expand": "ਵੀਡੀਓ ਨੂੰ ਫੈਲਾਓ",
   "video.fullscreen": "ਪੂਰੀ ਸਕਰੀਨ",
+  "video.hide": "ਵੀਡੀਓ ਨੂੰ ਲੁਕਾਓ",
   "video.pause": "ਠਹਿਰੋ",
   "video.play": "ਚਲਾਓ"
 }
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 86c02a6a8..dc482af4c 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -128,7 +128,6 @@
   "bundle_column_error.routing.body": "Żądana strona nie została znaleziona. Czy na pewno adres URL w pasku adresu jest poprawny?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zamknij",
-  "bundle_modal_error.message": "Coś poszło nie tak podczas ładowania tego składnika.",
   "bundle_modal_error.retry": "Spróbuj ponownie",
   "closed_registrations.other_server_instructions": "Ponieważ Mastodon jest zdecentralizowany, możesz założyć konto na innym serwerze i wciąż mieć możliwość wchodzenia w interakcję z tym serwerem.",
   "closed_registrations_modal.description": "Opcja tworzenia kont na {domain} jest aktualnie niedostępna, ale miej na uwadze to, że nie musisz mieć konta konkretnie na {domain} by używać Mastodona.",
@@ -139,13 +138,16 @@
   "column.blocks": "Zablokowani użytkownicy",
   "column.bookmarks": "Zakładki",
   "column.community": "Lokalna oś czasu",
+  "column.create_list": "Utwórz listę",
   "column.direct": "Prywatne wzmianki",
   "column.directory": "Przeglądaj profile",
   "column.domain_blocks": "Ukryte domeny",
+  "column.edit_list": "Edytuj listę",
   "column.favourites": "Ulubione",
   "column.firehose": "Kanały na żywo",
   "column.follow_requests": "Prośby o obserwację",
   "column.home": "Strona główna",
+  "column.list_members": "Zarządzaj członkami listy",
   "column.lists": "Listy",
   "column.mutes": "Wyciszeni użytkownicy",
   "column.notifications": "Powiadomienia",
@@ -158,6 +160,7 @@
   "column_header.pin": "Przypnij",
   "column_header.show_settings": "Pokaż ustawienia",
   "column_header.unpin": "Cofnij przypięcie",
+  "column_search.cancel": "Anuluj",
   "column_subheading.settings": "Ustawienia",
   "community.column_settings.local_only": "Tylko Lokalne",
   "community.column_settings.media_only": "Tylko multimedia",
@@ -231,10 +234,6 @@
   "disabled_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone.",
   "dismissable_banner.community_timeline": "To są najnowsze wpisy publiczne od osób, które mają założone konta na {domain}.",
   "dismissable_banner.dismiss": "Schowaj",
-  "dismissable_banner.explore_links": "Te wiadomości obecnie są komentowane przez osoby z tego serwera i pozostałych w zdecentralizowanej sieci.",
-  "dismissable_banner.explore_statuses": "Obecnie te wpisy z tego serwera i pozostałych serwerów w zdecentralizowanej sieci zyskują popularność na tym serwerze.",
-  "dismissable_banner.explore_tags": "Te hasztagi obecnie zyskują popularność wśród osób z tego serwera i pozostałych w zdecentralizowanej sieci.",
-  "dismissable_banner.public_timeline": "Są to najnowsze publiczne wpisy osób w serwisie społecznościowym, które obserwują ludzie w serwisie {domain}.",
   "domain_block_modal.block": "Blokuj serwer",
   "domain_block_modal.block_account_instead": "Zamiast tego zablokuj @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Ludzie z tego serwera mogą wchodzić w interakcje z Twoimi starymi wpisami.",
@@ -463,11 +462,32 @@
   "link_preview.author": "{name}",
   "link_preview.more_from_author": "Więcej od {name}",
   "link_preview.shares": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}",
+  "lists.add_member": "Dodaj",
+  "lists.add_to_list": "Dodaj do listy",
+  "lists.add_to_lists": "Dodaj {name} do list",
+  "lists.create": "Utwórz",
+  "lists.create_a_list_to_organize": "Stwórz nową listę żeby zorganizować swoją oś czasu",
+  "lists.create_list": "Utwórz listę",
   "lists.delete": "Usuń listę",
+  "lists.done": "Gotowe",
   "lists.edit": "Edytuj listę",
+  "lists.exclusive": "Schowaj członków z osi czasu",
+  "lists.exclusive_hint": "Jeśli ktoś jest na tej liście, ukrywa go z Twojej osi czasu, aby uniknąć pokazywania jego wpisów dwukrotnie.",
+  "lists.find_users_to_add": "Znajdź użytkowników do dodania",
+  "lists.list_members": "Członkowie listy",
+  "lists.list_members_count": "{count, plural, one {# użytkownik} other {# użytkowników}}",
+  "lists.list_name": "Nazwa listy",
+  "lists.new_list_name": "Nazwa nowej listy",
+  "lists.no_lists_yet": "Nie masz jeszcze list.",
+  "lists.no_members_yet": "Brak członków.",
+  "lists.no_results_found": "Brak wyników.",
+  "lists.remove_member": "Usuń",
   "lists.replies_policy.followed": "Dowolny obserwowany użytkownik",
   "lists.replies_policy.list": "Członkowie listy",
   "lists.replies_policy.none": "Nikt",
+  "lists.save": "Zapisz",
+  "lists.search_placeholder": "Szukaj wśród osób, które obserwujesz",
+  "lists.show_replies_to": "Pokaż odpowiedzi od członków listy do",
   "load_pending": "{count, plural, one {# nowa pozycja} other {nowe pozycje}}",
   "loading_indicator.label": "Ładowanie…",
   "media_gallery.hide": "Ukryj",
@@ -623,44 +643,20 @@
   "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie",
   "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.",
   "notifications_permission_banner.title": "Nie przegap niczego",
-  "onboarding.action.back": "Zabierz mnie z powrotem",
-  "onboarding.actions.back": "Zabierz mnie z powrotem",
-  "onboarding.actions.go_to_explore": "Zobacz co się dzieje",
-  "onboarding.actions.go_to_home": "Przejdź do swojego kanału głównego",
-  "onboarding.compose.template": "Witaj #Mastodon!",
+  "onboarding.follows.back": "Wróć",
+  "onboarding.follows.done": "Gotowe",
   "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.",
-  "onboarding.follows.lead": "Zarządasz swoim własnym kanałem. Im więcej ludzi śledzisz, tym bardziej aktywny i ciekawy będzie Twój kanał. Te profile mogą być dobrym punktem wyjścia— możesz przestać je obserwować w dowolnej chwili!",
-  "onboarding.follows.title": "Popularne na Mastodonie",
+  "onboarding.follows.search": "Szukaj",
   "onboarding.profile.discoverable": "Spraw mój profil odkrywalnym",
   "onboarding.profile.discoverable_hint": "Kiedy zapisujesz się do odkrywalności w Mastodonie, twoje wpisy mogą pokazywać się w wynikach wyszukiwania i trendach, a twój profil może być sugerowany użytkownikom o podobnych zainteresowaniach.",
   "onboarding.profile.display_name": "Nazwa wyświetlana",
   "onboarding.profile.display_name_hint": "Twoje imię lub pseudonim…",
-  "onboarding.profile.lead": "Możesz wypełnić te dane później w menu ustawień, gdzie dostępnych jest jeszcze więcej opcji.",
   "onboarding.profile.note": "O mnie",
   "onboarding.profile.note_hint": "Możesz @wspomnieć użytkowników albo #hasztagi…",
   "onboarding.profile.save_and_continue": "Zapisz i kontynuuj",
   "onboarding.profile.title": "Ustawienia profilu",
   "onboarding.profile.upload_avatar": "Dodaj zdjęcie profilowe",
   "onboarding.profile.upload_header": "Dodaj banner profilu",
-  "onboarding.share.lead": "Daj znać ludziom, jak mogą cię znaleźć na Mastodonie!",
-  "onboarding.share.message": "Jestem {username} na #Mastodon! Śledź mnie tutaj {url}",
-  "onboarding.share.next_steps": "Możliwe dalsze kroki:",
-  "onboarding.share.title": "Udostępnij swój profil",
-  "onboarding.start.lead": "Twoje nowe konto Mastodonie jest gotowe. Oto jak możesz je jak najlepiej wykorzystać:",
-  "onboarding.start.skip": "Chcesz pominąć wprowadzenie?",
-  "onboarding.start.title": "Udało się!",
-  "onboarding.steps.follow_people.body": "Zarządzasz swoim własnym kanałem. Wypełnij go interesującymi ludźmi.",
-  "onboarding.steps.follow_people.title": "Obserwuj {count, plural, one {jedną osobę} few {# osoby} many {# osób} other {# osób}}",
-  "onboarding.steps.publish_status.body": "Przywitaj się ze światem.",
-  "onboarding.steps.publish_status.title": "Utwórz swój pierwszy post",
-  "onboarding.steps.setup_profile.body": "Inni użytkownicy są bardziej skłonni do interakcji z Tobą jeśli posiadasz wypełniony profil.",
-  "onboarding.steps.setup_profile.title": "Spersonalizuj swój profil",
-  "onboarding.steps.share_profile.body": "Poinformuj swoich przyjaciół jak znaleźć cię na Mastodonie!",
-  "onboarding.steps.share_profile.title": "Udostępnij swój profil",
-  "onboarding.tips.2fa": "<strong>Czy wiesz?</strong> Możesz zabezpieczyć swoje konto poprzez skonfigurowanie uwierzytelniania dwuetapowego w ustawieniach konta. Działa z wybraną przez Ciebie aplikacją TOTP, żaden numer telefonu nie jest wymagany!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Czy wiesz?</strong> Ponieważ Mastodon jest zdecentralizowany, niektóre profile, z którymi się spotkasz, będą hostowane na serwerach innych niż twoje. A mimo to możesz z nimi bezproblemowo wchodzić w interakcje! Ich serwer jest w drugiej połowie ich nazwy użytkownika!",
-  "onboarding.tips.migration": "<strong>Czy wiesz?</strong> Jeśli uważasz, że {domain} nie jest dla Ciebie dobrym wyborem na serwer w przyszłości, możesz przenieść się na inny serwer Mastodona bez utraty obserwujących. Możesz nawet hostować swój własny serwer!",
-  "onboarding.tips.verification": "<strong>Czy wiesz?</strong> Możesz zweryfikować swoje konto, umieszczając link do profilu Mastodon na swojej własnej stronie internetowej, a następnie dodając stronę do swojego profilu. Żadne opłaty lub dokumenty nie są wymagane!",
   "password_confirmation.exceeds_maxlength": "Potwierdzenie hasła przekracza maksymalną długość hasła",
   "password_confirmation.mismatching": "Wprowadzone hasła różnią się od siebie",
   "picture_in_picture.restore": "Odłóż",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 8740cd13d..27d8b9a5a 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "A página solicitada não foi encontrada. Tem certeza de que o URL na barra de endereços está correta?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fechar",
-  "bundle_modal_error.message": "Erro ao carregar este componente.",
+  "bundle_modal_error.message": "Algo deu errado ao carregar esta tela.",
   "bundle_modal_error.retry": "Tente novamente",
   "closed_registrations.other_server_instructions": "Como o Mastodon é descentralizado, você pode criar uma conta em outro servidor e ainda pode interagir com este.",
   "closed_registrations_modal.description": "Não é possível criar uma conta em {domain} no momento, mas atente que você não precisa de uma conta especificamente em {domain} para usar o Mastodon.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Mostrar configurações",
   "column_header.unpin": "Desafixar",
+  "column_search.cancel": "Cancelar",
   "column_subheading.settings": "Configurações",
   "community.column_settings.local_only": "Somente local",
   "community.column_settings.media_only": "Somente mídia",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "Sua conta {disabledAccount} está desativada no momento.",
   "dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes das pessoas cujas contas são hospedadas por {domain}.",
   "dismissable_banner.dismiss": "Dispensar",
-  "dismissable_banner.explore_links": "Estas novas histórias estão sendo contadas por pessoas neste e em outros servidores da rede descentralizada no momento.",
-  "dismissable_banner.explore_statuses": "Estas são postagens de toda a rede social que estão ganhando tração hoje. Postagens mais recentes com mais impulsos e favoritos têm classificações mais altas.",
-  "dismissable_banner.explore_tags": "Estas hashtags estão ganhando popularidade no momento entre as pessoas deste e de outros servidores da rede descentralizada.",
-  "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que pessoas em {domain} seguem.",
+  "dismissable_banner.explore_links": "Estas novas histórias estão sendo compartilhadas bastante no fediverse. Histórias mais recentes postadas por pessoas diferentes são classificadas mais altamente.",
+  "dismissable_banner.explore_statuses": "Estas publicações através do fediverse estão ganhando atenção hoje. Publicações mais recentes com mais boosts e favoritos são classificados mais altamente.",
+  "dismissable_banner.explore_tags": "Estas hashtags estão ganhando atenção hoje no fediverse. Hashtags usadas por muitas pessoas diferentes são classificadas mais altamente.",
+  "dismissable_banner.public_timeline": "Estas são as publicações mais recentes das pessoas no fediverse que as pessoas do {domain} seguem.",
   "domain_block_modal.block": "Servidor de blocos.",
   "domain_block_modal.block_account_instead": "Bloco @(nome)",
   "domain_block_modal.they_can_interact_with_old_posts": "Pessoas deste servidor podem interagir com suas publicações antigas.",
@@ -362,6 +363,7 @@
   "footer.status": "Status",
   "generic.saved": "Salvo",
   "getting_started.heading": "Primeiros passos",
+  "hashtag.admin_moderation": "Abrir interface de moderação para #{name}",
   "hashtag.column_header.tag_mode.all": "e {additional}",
   "hashtag.column_header.tag_mode.any": "ou {additional}",
   "hashtag.column_header.tag_mode.none": "sem {additional}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "Ativar notificações no computador",
   "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no computador. Você pode controlar precisamente quais tipos de interações geram notificações no computador através do botão {icon}.",
   "notifications_permission_banner.title": "Nunca perca nada",
-  "onboarding.action.back": "Me leve de volta",
-  "onboarding.actions.back": "Me leve de volta",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Ir para sua página inicial",
-  "onboarding.compose.template": "Olá #Mastodon!",
+  "onboarding.follows.back": "Voltar",
+  "onboarding.follows.done": "Feito",
   "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados agora. Você pode tentar usar a busca ou navegar na página de exploração para encontrar pessoas para seguir, ou tentar novamente mais tarde.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular no Mastodon",
+  "onboarding.follows.search": "Buscar",
+  "onboarding.follows.title": "Comece seguindo pessoas",
   "onboarding.profile.discoverable": "Tornar meu perfil descobrível",
   "onboarding.profile.discoverable_hint": "Quando você aceita a capacidade de descoberta no Mastodon, suas postagens podem aparecer nos resultados de pesquisa e nas tendências, e seu perfil pode ser sugerido a pessoas com interesses similares aos seus.",
   "onboarding.profile.display_name": "Nome de exibição",
   "onboarding.profile.display_name_hint": "Seu nome completo ou apelido…",
-  "onboarding.profile.lead": "Você sempre pode completar isso mais tarde nas configurações, onde ainda mais opções de personalização estão disponíveis.",
   "onboarding.profile.note": "Biografia",
   "onboarding.profile.note_hint": "Você pode @mencionar outras pessoas ou usar #hashtags…",
   "onboarding.profile.save_and_continue": "Salvar e continuar",
   "onboarding.profile.title": "Configuração do perfil",
   "onboarding.profile.upload_avatar": "Enviar imagem de perfil",
   "onboarding.profile.upload_header": "Carregar cabeçalho do perfil",
-  "onboarding.share.lead": "Deixe as pessoas saberem como elas podem te encontrar no Mastodon!",
-  "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha me seguir em {url}",
-  "onboarding.share.next_steps": "Possíveis próximos passos:",
-  "onboarding.share.title": "Compartilhe seu perfil",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Você conseguiu!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Diga olá para o mundo.",
-  "onboarding.steps.publish_status.title": "Crie sua primeira publicação",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>Você sabia?</strong> Você pode proteger sua conta configurando a autenticação dupla nas configurações de conta. Ele funciona com qualquer aplicativo de autenticação de sua escolha, nenhum número de telefone é necessário!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Você sabia?</strong> Como o Mastodon é descentralizado, alguns perfis que você encontrar serão hospedados em outros servidores que não os seus. E ainda assim você pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de usuário!",
-  "onboarding.tips.migration": "<strong>Você sabia?</strong> Se você sente que {domain} não é uma boa escolha de servidor para você no futuro, você pode mudar para outro servidor do Mastodon sem perder seus seguidores. Você pode até mesmo hospedar seu próprio servidor!",
-  "onboarding.tips.verification": "<strong>Você sabia?</strong> Você pode verificar sua conta colocando um link para o seu perfil do Mastodon no seu próprio site e adicionando o site ao seu perfil. Não são necessárias taxas ou documentos!",
   "password_confirmation.exceeds_maxlength": "A confirmação da senha excede o tamanho máximo de senha",
   "password_confirmation.mismatching": "A confirmação de senha não corresponde",
   "picture_in_picture.restore": "Por de volta",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index 6a6b5549e..2da6baea8 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -113,7 +113,6 @@
   "bundle_column_error.routing.body": "A página solicitada não foi encontrada. Tem a certeza que o URL na barra de endereços está correto?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fechar",
-  "bundle_modal_error.message": "Algo de errado aconteceu enquanto este componente era carregado.",
   "bundle_modal_error.retry": "Tente de novo",
   "closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, pode criar uma conta noutro servidor e interagir com este na mesma.",
   "closed_registrations_modal.description": "Neste momento não é possível criar uma conta em {domain}, mas lembramos que não é preciso ter uma conta especificamente em {domain} para usar o Mastodon.",
@@ -214,10 +213,6 @@
   "disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.",
   "dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.",
   "dismissable_banner.dismiss": "Descartar",
-  "dismissable_banner.explore_links": "Essas histórias de notícias estão, no momento, a ser faladas por pessoas neste e noutros servidores da rede descentralizada.",
-  "dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.",
-  "dismissable_banner.explore_tags": "Estas são hashtags que estão a ganhar força na rede social atualmente. As hashtags que são utilizadas por mais pessoas diferentes têm uma classificação mais elevada.",
-  "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.",
   "domain_block_modal.block": "Bloquear servidor",
   "domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa",
   "domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as suas publicações antigas.",
@@ -595,44 +590,17 @@
   "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho",
   "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.",
   "notifications_permission_banner.title": "Nunca perca nada",
-  "onboarding.action.back": "Voltar atrás",
-  "onboarding.actions.back": "Voltar atrás",
-  "onboarding.actions.go_to_explore": "Ver tendências atuais",
-  "onboarding.actions.go_to_home": "Ir para a sua página inicial",
-  "onboarding.compose.template": "Olá #Mastodon!",
   "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.",
-  "onboarding.follows.lead": "Você personaliza a sua própria página inicial. Quanto mais pessoas seguir, mais ativa e interessante ela será. Estes perfis podem ser um bom ponto de partida - pode sempre deixar de os seguir mais tarde!",
-  "onboarding.follows.title": "Popular no Mastodon",
   "onboarding.profile.discoverable": "Permitir que o meu perfil seja descoberto",
   "onboarding.profile.discoverable_hint": "Quando opta pela possibilidade de ser descoberto no Mastodon, as suas mensagens podem aparecer nos resultados de pesquisa e nas tendências, e o seu perfil pode ser sugerido a pessoas com interesses semelhantes aos seus.",
   "onboarding.profile.display_name": "Nome a apresentar",
   "onboarding.profile.display_name_hint": "O seu nome completo ou o seu nome divertido…",
-  "onboarding.profile.lead": "Pode sempre completar isto mais tarde, nas configurações, onde ainda estão disponíveis mais opções de personalização.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "Pode @mencionar outras pessoas ou #hashtags…",
   "onboarding.profile.save_and_continue": "Guardar e continuar",
   "onboarding.profile.title": "Configuração do perfil",
   "onboarding.profile.upload_avatar": "Carregar foto de perfil",
   "onboarding.profile.upload_header": "Carregar cabeçalho do perfil",
-  "onboarding.share.lead": "Deixe as pessoas saber como o podem encontrar no Mastodon!",
-  "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha seguir-me em {url}",
-  "onboarding.share.next_steps": "Próximos passos possíveis:",
-  "onboarding.share.title": "Partilhe o seu perfil",
-  "onboarding.start.lead": "A sua nova conta no Mastodon está pronta. Aqui está como pode tirar dela melhor proveito:",
-  "onboarding.start.skip": "Não precisa de ajuda para começar?",
-  "onboarding.start.title": "Conseguiu!",
-  "onboarding.steps.follow_people.body": "Seguir pessoas interessantes é o propósito do Mastodon. ",
-  "onboarding.steps.follow_people.title": "Personalize o seu feed",
-  "onboarding.steps.publish_status.body": "Diga olá ao mundo com texto, fotos, vídeos ou sondagens {emoji}",
-  "onboarding.steps.publish_status.title": "Faça a sua primeira publicação",
-  "onboarding.steps.setup_profile.body": "Promova as suas interações para ter um perfil preenchido. ",
-  "onboarding.steps.setup_profile.title": "Personalize o seu perfil",
-  "onboarding.steps.share_profile.body": "Informe os seus amigos, para saberem como encontrar-lo no Mastodon!",
-  "onboarding.steps.share_profile.title": "Partilhe o seu perfil",
-  "onboarding.tips.2fa": "<strong>Sabia?</strong> Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Sabia?</strong> Como o Mastodon é descentralizado, alguns perfis que encontra estarão hospedados noutros servidores que não os seus. E ainda assim pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de utilizador!",
-  "onboarding.tips.migration": "<strong>Sabia?</strong> Se sentir que o {domain} não é um bom servidor para si, no futuro pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!",
-  "onboarding.tips.verification": "<strong>Sabia que?</strong> Pode verificar a sua conta colocando uma hiperligação para o seu perfil Mastodon no seu próprio site e adicionando o site ao seu perfil. Sem taxas ou documentos!",
   "password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excedeu o tamanho máximo ",
   "password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde",
   "picture_in_picture.restore": "Colocá-lo de volta",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index f21ce027f..4ed227339 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -90,7 +90,6 @@
   "bundle_column_error.routing.body": "Pagina solicitată nu a putut fi găsită. Ești sigur că adresa URL din bara de adrese este corectă?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Închide",
-  "bundle_modal_error.message": "A apărut o eroare la încărcarea acestui element.",
   "bundle_modal_error.retry": "Încearcă din nou",
   "closed_registrations.other_server_instructions": "Deoarece Mastodon este descentralizat, poți crea un cont pe un alt server și încă poți interacționa cu acesta.",
   "closed_registrations_modal.description": "Crearea unui cont pe {domain} nu este posibilă momentan, dar aveți în vedere că nu aveți nevoie de un cont specific pe {domain} pentru a utiliza Mastodon.",
@@ -181,8 +180,6 @@
   "disabled_account_banner.text": "Contul tău {disabledAccount} este momentan dezactivat.",
   "dismissable_banner.community_timeline": "Acestea sunt cele mai recente postări publice de la persoane ale căror conturi sunt găzduite de {domain}.",
   "dismissable_banner.dismiss": "Renunțare",
-  "dismissable_banner.explore_links": "În acest moment, oamenii vorbesc despre aceste știri, pe acesta dar și pe alte servere ale rețelei descentralizate.",
-  "dismissable_banner.explore_tags": "Aceste hashtag-uri câștigă teren în rândul oamenilor de pe acesta și pe alte servere ale rețelei descentralizate chiar acum.",
   "embed.instructions": "Integrează această postare în site-ul tău copiind codul de mai jos.",
   "embed.preview": "Iată cum va arăta:",
   "emoji_button.activity": "Activități",
@@ -409,27 +406,7 @@
   "notifications_permission_banner.enable": "Activează notificările pe desktop",
   "notifications_permission_banner.how_to_control": "Pentru a primi notificări când Mastodon nu este deschis, activează notificările pe desktop. Poți controla exact ce tipuri de interacțiuni generează notificări pe desktop apăsând pe butonul {icon} de mai sus odată ce sunt activate.",
   "notifications_permission_banner.title": "Rămâne la curent",
-  "onboarding.action.back": "Du-mă înapoi",
-  "onboarding.actions.back": "Du-mă înapoi",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Salut, #Mastodon!",
   "onboarding.follows.empty": "Din păcate, nu pot fi afișate rezultate chiar acum. Poți încerca să cauți sau să navighezi pe pagina de explorare pentru a găsi oameni pe care să-i urmărești sau încearcă iar mai târziu.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.share.lead": "Spune-le oamenilor cum te pot găsi pe Mastodon!",
-  "onboarding.share.message": "Sunt {username} pe #Mastodon! Vino și urmărește-mă pe {url}",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "Fă-ți prima postare",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.migration": "<strong>Știai că?</strong> Dacă simți că {domain} nu este o alegere bună de server in viitor, te poți muta pe un alt server de Mastodon fără a-ți pierde urmăritorii. Poți găzdui chiar si propriul server!",
   "picture_in_picture.restore": "Pune-l înapoi",
   "poll.closed": "Închis",
   "poll.refresh": "Reîncarcă",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 90af458cd..81b5525da 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -4,7 +4,7 @@
   "about.disclaimer": "Mastodon — свободное программное обеспечение с открытым исходным кодом и торговая марка Mastodon gGmbH.",
   "about.domain_blocks.no_reason_available": "Причина не указана",
   "about.domain_blocks.preamble": "Mastodon обычно позволяет просматривать содержимое и взаимодействовать с другими пользователями любых серверов в Федиверсе. Вот исключения, сделанные конкретно для этого сервера.",
-  "about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и контент с этого сервера, если вы явно не будете их искать или не подпишетесь на них.",
+  "about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и контент с этого сервера, если вы специально не будете их искать или не подпишетесь на них.",
   "about.domain_blocks.silenced.title": "Ограничивается",
   "about.domain_blocks.suspended.explanation": "Никакие данные с этого сервера не будут обрабатываться, храниться или обмениваться, что делает невозможным любое взаимодействие или связь с пользователями с этого сервера.",
   "about.domain_blocks.suspended.title": "Заблокирован",
@@ -17,11 +17,11 @@
   "account.badges.group": "Группа",
   "account.block": "Заблокировать @{name}",
   "account.block_domain": "Заблокировать {domain}",
-  "account.block_short": "Блокировать",
+  "account.block_short": "Заблокировать",
   "account.blocked": "Заблокировано",
   "account.cancel_follow_request": "Отозвать запрос на подписку",
   "account.copy": "Скопировать ссылку на профиль",
-  "account.direct": "Лично упоминать @{name}",
+  "account.direct": "Упомянуть @{name} лично",
   "account.disable_notifications": "Не уведомлять о постах от @{name}",
   "account.domain_blocked": "Домен заблокирован",
   "account.edit_profile": "Редактировать профиль",
@@ -41,7 +41,7 @@
   "account.go_to_profile": "Перейти к профилю",
   "account.hide_reblogs": "Скрыть продвижения от @{name}",
   "account.in_memoriam": "Вечная память.",
-  "account.joined_short": "Присоединился",
+  "account.joined_short": "Дата регистрации",
   "account.languages": "Изменить языки подписки",
   "account.link_verified_on": "Владение этой ссылкой было проверено {date}",
   "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.",
@@ -74,7 +74,7 @@
   "account_note.placeholder": "Текст заметки",
   "admin.dashboard.daily_retention": "Уровень удержания пользователей после регистрации, в днях",
   "admin.dashboard.monthly_retention": "Уровень удержания пользователей после регистрации, в месяцах",
-  "admin.dashboard.retention.average": "Среднее",
+  "admin.dashboard.retention.average": "В среднем за всё время",
   "admin.dashboard.retention.cohort": "Месяц регистрации",
   "admin.dashboard.retention.cohort_size": "Новые пользователи",
   "admin.impact_report.instance_accounts": "Профили учетных записей, которые будут удалены",
@@ -89,7 +89,7 @@
   "announcement.announcement": "Объявление",
   "annual_report.summary.archetype.booster": "Репостер",
   "annual_report.summary.archetype.lurker": "Молчун",
-  "annual_report.summary.archetype.oracle": "Шаман",
+  "annual_report.summary.archetype.oracle": "Гуру",
   "annual_report.summary.archetype.pollster": "Опросчик",
   "annual_report.summary.archetype.replier": "Душа компании",
   "annual_report.summary.followers.followers": "подписчиков",
@@ -104,6 +104,7 @@
   "annual_report.summary.most_used_hashtag.none": "Нет",
   "annual_report.summary.new_posts.new_posts": "новых постов",
   "annual_report.summary.percentile.text": "<topLabel>Всё это помещает вас в топ</topLabel><percentage></percentage><bottomLabel>пользователей Mastodon.</bottomLabel>",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "Роскомнадзор об этом не узнает.",
   "annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
   "attachments_list.unprocessed": "(не обработан)",
   "audio.hide": "Скрыть аудио",
@@ -113,11 +114,11 @@
   "block_modal.they_cant_mention": "Он не может упоминать или подписываться на вас.",
   "block_modal.they_cant_see_posts": "Он не может видеть ваши сообщения, и вы не увидите его.",
   "block_modal.they_will_know": "Он может видеть, что он заблокирован.",
-  "block_modal.title": "Заблокируем пользователя?",
+  "block_modal.title": "Заблокировать пользователя?",
   "block_modal.you_wont_see_mentions": "Вы не увидите записи, которые упоминают его.",
   "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз",
-  "boost_modal.reblog": "Репостнуть?",
-  "boost_modal.undo_reblog": "Убрать репост?",
+  "boost_modal.reblog": "Продвинуть пост?",
+  "boost_modal.undo_reblog": "Убрать продвижение?",
   "bundle_column_error.copy_stacktrace": "Скопировать отчет об ошибке",
   "bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.",
   "bundle_column_error.error.title": "О нет!",
@@ -128,10 +129,10 @@
   "bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что URL в адресной строке правильный?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Закрыть",
-  "bundle_modal_error.message": "Что-то пошло не так при загрузке этого компонента.",
+  "bundle_modal_error.message": "Что-то пошло не так при загрузке этой страницы.",
   "bundle_modal_error.retry": "Попробовать снова",
   "closed_registrations.other_server_instructions": "Поскольку Mastodon децентрализован, вы можете создать учетную запись на другом сервере и всё ещё взаимодействовать с этим сервером.",
-  "closed_registrations_modal.description": "Создание учетной записи на {domain} в настоящее время невозможно, но имейте в виду, что для использования Mastodon вам не нужен аккаунт именно на {domain}.",
+  "closed_registrations_modal.description": "Создать учётную запись на {domain} сейчас не выйдет, но имейте в виду, что вам не нужна учётная запись именно на {domain}, чтобы использовать Mastodon.",
   "closed_registrations_modal.find_another_server": "Найти другой сервер",
   "closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где вы создадите свою учетную запись, вы сможете следить и взаимодействовать с кем угодно на этом сервере. Вы даже можете разместить свой собственный сервер!",
   "closed_registrations_modal.title": "Регистрация в Mastodon",
@@ -139,13 +140,16 @@
   "column.blocks": "Заблокированные пользователи",
   "column.bookmarks": "Закладки",
   "column.community": "Локальная лента",
+  "column.create_list": "Создать список",
   "column.direct": "Личные упоминания",
   "column.directory": "Просмотр профилей",
   "column.domain_blocks": "Заблокированные домены",
+  "column.edit_list": "Изменить список",
   "column.favourites": "Избранные",
   "column.firehose": "Живая лента",
   "column.follow_requests": "Запросы на подписку",
   "column.home": "Главная",
+  "column.list_members": "Управление участниками списка",
   "column.lists": "Списки",
   "column.mutes": "Игнорируемые пользователи",
   "column.notifications": "Уведомления",
@@ -158,11 +162,12 @@
   "column_header.pin": "Закрепить",
   "column_header.show_settings": "Показать настройки",
   "column_header.unpin": "Открепить",
+  "column_search.cancel": "Отмена",
   "column_subheading.settings": "Настройки",
   "community.column_settings.local_only": "Только локальные",
   "community.column_settings.media_only": "Только с медиафайлами",
   "community.column_settings.remote_only": "Только удалённые",
-  "compose.language.change": "Сменить язык",
+  "compose.language.change": "Изменить язык",
   "compose.language.search": "Поиск языков...",
   "compose.published.body": "Пост опубликован.",
   "compose.published.open": "Открыть",
@@ -215,7 +220,7 @@
   "confirmations.unfollow.title": "Отписаться?",
   "content_warning.hide": "Скрыть пост",
   "content_warning.show": "Всё равно показать",
-  "content_warning.show_more": "Покажи ещё",
+  "content_warning.show_more": "Развернуть",
   "conversation.delete": "Удалить беседу",
   "conversation.mark_as_read": "Отметить как прочитанное",
   "conversation.open": "Просмотр беседы",
@@ -229,12 +234,12 @@
   "directory.recently_active": "Недавно активные",
   "disabled_account_banner.account_settings": "Настройки учётной записи",
   "disabled_account_banner.text": "Ваша учётная запись {disabledAccount} в настоящее время отключена.",
-  "dismissable_banner.community_timeline": "Это самые последние публичные сообщения от людей, чьи учетные записи размещены в {domain}.",
+  "dismissable_banner.community_timeline": "Это самые новые публичные посты от тех пользователей, чьи учётные записи находятся на сервере {domain}.",
   "dismissable_banner.dismiss": "Закрыть",
   "dismissable_banner.explore_links": "Об этих новостях прямо сейчас говорят люди на этом и других серверах децентрализованной сети.",
-  "dismissable_banner.explore_statuses": "Эти сообщения со связанных серверов сети сейчас набирают популярность.",
+  "dismissable_banner.explore_statuses": "Эти посты привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.",
   "dismissable_banner.explore_tags": "Эти хэштеги привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.",
-  "dismissable_banner.public_timeline": "Это самые последние публичные сообщения от людей в социальной сети, за которыми подписались пользователи {domain}.",
+  "dismissable_banner.public_timeline": "Это самые новые публичные посты от тех пользователей этого и других серверов децентрализованной сети, на которых подписываются пользователи {domain}.",
   "domain_block_modal.block": "Заблокировать сервер",
   "domain_block_modal.block_account_instead": "Заблокировать @{name} вместо",
   "domain_block_modal.they_can_interact_with_old_posts": "Люди с этого сервера могут взаимодействовать с вашими старыми записями.",
@@ -279,7 +284,7 @@
   "empty_column.account_timeline": "Здесь нет постов!",
   "empty_column.account_unavailable": "Профиль недоступен",
   "empty_column.blocks": "Вы ещё никого не заблокировали.",
-  "empty_column.bookmarked_statuses": "У вас пока нет постов в закладках. Как добавите один, он отобразится здесь.",
+  "empty_column.bookmarked_statuses": "У вас пока нет закладок. Когда вы добавляете пост в закладки, он появляется здесь.",
   "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!",
   "empty_column.direct": "У вас пока нет личных сообщений. Как только вы отправите или получите сообщение, оно появится здесь.",
   "empty_column.domain_blocks": "Скрытых доменов пока нет.",
@@ -288,9 +293,9 @@
   "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.",
   "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
   "empty_column.followed_tags": "Вы еще не подписались ни на один хэштег. Когда вы это сделаете, они появятся здесь.",
-  "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.",
+  "empty_column.hashtag": "С этим хэштегом пока ещё ничего не публиковали.",
   "empty_column.home": "Ваша лента совсем пуста! Подписывайтесь на других, чтобы заполнить её.",
-  "empty_column.list": "В этом списке пока ничего нет.",
+  "empty_column.list": "В этом списке пока ничего нет. Когда пользователи в списке публикуют новые посты, они появляются здесь.",
   "empty_column.mutes": "Вы ещё никого не добавляли в список игнорируемых.",
   "empty_column.notification_requests": "Здесь ничего нет! Когда вы получите новые уведомления, они здесь появятся согласно вашим настройкам.",
   "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.",
@@ -358,6 +363,7 @@
   "footer.status": "Статус",
   "generic.saved": "Сохранено",
   "getting_started.heading": "Начать",
+  "hashtag.admin_moderation": "Открыть интерфейс модератора для #{name}",
   "hashtag.column_header.tag_mode.all": "и {additional}",
   "hashtag.column_header.tag_mode.any": "или {additional}",
   "hashtag.column_header.tag_mode.none": "без {additional}",
@@ -463,11 +469,32 @@
   "link_preview.author": "Автор: {name}",
   "link_preview.more_from_author": "Больше от {name}",
   "link_preview.shares": "{count, plural, one {{counter} пост} other {{counter} посты}}",
+  "lists.add_member": "Добавить",
+  "lists.add_to_list": "Добавить в список",
+  "lists.add_to_lists": "Добавить {name} в списки",
+  "lists.create": "Создать",
+  "lists.create_a_list_to_organize": "Создать новый список, чтобы упорядочить домашнюю ленту",
+  "lists.create_list": "Создать список",
   "lists.delete": "Удалить список",
+  "lists.done": "Готово",
   "lists.edit": "Изменить список",
-  "lists.replies_policy.followed": "Любой подписанный пользователь",
+  "lists.exclusive": "Не показывать участников в домашней ленте",
+  "lists.exclusive_hint": "Если кто-то есть в этом списке, скрыть его в домашней ленте, чтобы не видеть его посты дважды.",
+  "lists.find_users_to_add": "Найти пользователей для добавления",
+  "lists.list_members": "Участники списка",
+  "lists.list_members_count": "{count, plural, one {# участник} few {# участника} other {# участников}}",
+  "lists.list_name": "Название списка",
+  "lists.new_list_name": "Новое имя списка",
+  "lists.no_lists_yet": "Пока нет списков.",
+  "lists.no_members_yet": "Пока нет участников.",
+  "lists.no_results_found": "Не найдено.",
+  "lists.remove_member": "Удалить",
+  "lists.replies_policy.followed": "Пользователи, на которых вы подписаны",
   "lists.replies_policy.list": "Пользователи в списке",
   "lists.replies_policy.none": "Никого",
+  "lists.save": "Сохранить",
+  "lists.search_placeholder": "Искать среди подписок",
+  "lists.show_replies_to": "Показывать ответы участников списка на посты",
   "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}",
   "loading_indicator.label": "Загрузка…",
   "media_gallery.hide": "Скрыть",
@@ -539,7 +566,7 @@
   "notification.moderation_warning.action_sensitive": "С этого момента ваши сообщения будут помечены как деликатные.",
   "notification.moderation_warning.action_silence": "Ваша учётная запись была ограничена.",
   "notification.moderation_warning.action_suspend": "Действие вашей учётной записи приостановлено.",
-  "notification.own_poll": "Ваш опрос закончился",
+  "notification.own_poll": "Ваш опрос завершился",
   "notification.poll": "Голосование, в котором вы приняли участие, завершилось",
   "notification.reblog": "{name} продвинул(а) ваш пост",
   "notification.reblog.name_and_others_with_link": "{name} и ещё <a>{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}</a> продвинули ваш пост",
@@ -548,7 +575,7 @@
   "notification.relationships_severance_event.domain_block": "Администратор {from} заблокировал {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.",
   "notification.relationships_severance_event.learn_more": "Узнать больше",
   "notification.relationships_severance_event.user_domain_block": "Вы заблокировали {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.",
-  "notification.status": "{name} только что запостил",
+  "notification.status": "{name} опубликовал(а) новый пост",
   "notification.update": "{name} изменил(а) пост",
   "notification_requests.accept": "Принять",
   "notification_requests.accept_multiple": "{count, plural, one {Принять # запрос…} few {Принять # запроса…} other {Принять # запросов…}}",
@@ -624,44 +651,21 @@
   "notifications_permission_banner.enable": "Включить уведомления",
   "notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.",
   "notifications_permission_banner.title": "Будьте в курсе происходящего",
-  "onboarding.action.back": "Верните меня",
-  "onboarding.actions.back": "Верните меня",
-  "onboarding.actions.go_to_explore": "Посмотреть, что актуально",
-  "onboarding.actions.go_to_home": "Перейти к домашней ленте новостей",
-  "onboarding.compose.template": "Привет, #Mastodon!",
+  "onboarding.follows.back": "Назад",
+  "onboarding.follows.done": "Готово",
   "onboarding.follows.empty": "К сожалению, сейчас нет результатов. Вы можете попробовать использовать поиск или просмотреть страницу \"Исследования\", чтобы найти людей, за которыми можно следить, или повторить попытку позже.",
-  "onboarding.follows.lead": "Вы сами формируете свою домашнюю ленту. Чем больше людей, за которыми вы следите, тем активнее и интереснее она будет. Эти профили могут быть хорошей отправной точкой - вы всегда можете от них отказаться!",
-  "onboarding.follows.title": "Популярно на Mastodon",
+  "onboarding.follows.search": "Поиск",
+  "onboarding.follows.title": "Начните подписываться на людей",
   "onboarding.profile.discoverable": "Сделать мой профиль открытым",
   "onboarding.profile.discoverable_hint": "Если вы соглашаетесь на открытость на Mastodon, ваши сообщения могут появляться в результатах поиска и трендах, а ваш профиль может быть предложен людям со схожими с вами интересами.",
   "onboarding.profile.display_name": "Отображаемое имя",
   "onboarding.profile.display_name_hint": "Ваше полное имя или псевдоним…",
-  "onboarding.profile.lead": "Вы всегда можете завершить это позже в настройках, где доступны еще более широкие возможности настройки.",
   "onboarding.profile.note": "О себе",
   "onboarding.profile.note_hint": "Вы можете @упоминать других людей или использовать #хэштеги…",
   "onboarding.profile.save_and_continue": "Сохранить и продолжить",
   "onboarding.profile.title": "Настройка профиля",
   "onboarding.profile.upload_avatar": "Загрузить фотографию профиля",
   "onboarding.profile.upload_header": "Загрузить заголовок профиля",
-  "onboarding.share.lead": "Расскажите людям, как найти вас на Mastodon!",
-  "onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}",
-  "onboarding.share.next_steps": "Возможные дальнейшие шаги:",
-  "onboarding.share.title": "Поделиться вашим профилем",
-  "onboarding.start.lead": "Ваш новый аккаунт Mastodon готов к работе. Вот как вы можете использовать его по максимуму:",
-  "onboarding.start.skip": "Хотите сразу перейти к делу?",
-  "onboarding.start.title": "Вы сделали это!",
-  "onboarding.steps.follow_people.body": "Вы сами формируете свою ленту. Давайте наполним ее интересными людьми.",
-  "onboarding.steps.follow_people.title": "Подписаться на {count, plural, one {одного человека} other {# людей}}",
-  "onboarding.steps.publish_status.body": "Поздоровайтесь с миром.",
-  "onboarding.steps.publish_status.title": "Разместите свой первый пост",
-  "onboarding.steps.setup_profile.body": "Другие с большей вероятностью будут взаимодействовать с вами, если у вас заполненный профиль.",
-  "onboarding.steps.setup_profile.title": "Настройте свой профиль",
-  "onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!",
-  "onboarding.steps.share_profile.title": "Поделитесь вашим профилем",
-  "onboarding.tips.2fa": "<strong>А вы знали? </strong> Можно защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не нужен!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Знали ли вы? </strong> Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!",
-  "onboarding.tips.migration": "<strong>Знаете ли вы? </strong> Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих подписчиков. Вы даже можете разместить свой собственный сервер!",
-  "onboarding.tips.verification": "<strong>Знали ли вы? </strong> Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!",
   "password_confirmation.exceeds_maxlength": "Срок подтверждения пароля превышает максимальную длину пароля",
   "password_confirmation.mismatching": "Введенные пароли не совпадают.",
   "picture_in_picture.restore": "Вернуть обратно",
@@ -718,7 +722,7 @@
   "report.close": "Готово",
   "report.comment.title": "Есть ли что-нибудь ещё, что нам стоит знать?",
   "report.forward": "Переслать в {target}",
-  "report.forward_hint": "Эта учётная запись расположена на другом узле. Отправить туда анонимную копию вашей жалобы?",
+  "report.forward_hint": "Эта учётная запись расположена на другом сервере. Отправить туда анонимную копию вашей жалобы?",
   "report.mute": "Игнорировать",
   "report.mute_explanation": "Вы не будете видеть их посты. Они по-прежнему могут подписываться на вас и видеть ваши посты, но не будут знать, что они в списке игнорируемых.",
   "report.next": "Далее",
@@ -833,7 +837,7 @@
   "status.replied_to": "Ответил(а) {name}",
   "status.reply": "Ответить",
   "status.replyAll": "Ответить всем",
-  "status.report": "Пожаловаться",
+  "status.report": "Пожаловаться на @{name}",
   "status.sensitive_warning": "Содержимое «деликатного характера»",
   "status.share": "Поделиться",
   "status.show_less_all": "Свернуть все спойлеры в ветке",
@@ -871,6 +875,7 @@
   "upload_form.drag_and_drop.on_drag_cancel": "Перетаскивание было отменено. Вложение медиа {item} было удалено.",
   "upload_form.drag_and_drop.on_drag_end": "Медиа вложение {item} было удалено.",
   "upload_form.drag_and_drop.on_drag_over": "Медиа вложение {item} было перемещено.",
+  "upload_form.drag_and_drop.on_drag_start": "Загружается медиафайл {item}.",
   "upload_form.edit": "Изменить",
   "upload_form.thumbnail": "Изменить обложку",
   "upload_form.video_description": "Опишите видео для людей с нарушением слуха или зрения",
diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json
index b55d5e7a7..8fd083efc 100644
--- a/app/javascript/mastodon/locales/ry.json
+++ b/app/javascript/mastodon/locales/ry.json
@@ -99,7 +99,6 @@
   "bundle_column_error.routing.body": "Не можеме найти сяку сторунку. Бизувні сьте, ож URL у адресному шорикови є добрый?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Заперти",
-  "bundle_modal_error.message": "Штось ся показило, закидь сьме ладовали сись компонент.",
   "bundle_modal_error.retry": "Попробовати зась",
   "closed_registrations.other_server_instructions": "Mastodon є децентралізованов платформов, можете си учинити профіл и на другому серверови тай комуніковати из сим.",
   "closed_registrations_modal.description": "Раз не мож учинити профіл на {domain}, айбо не мусите мати профіл ипен на серверови {domain} обы хосновати Mastodon.",
diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json
index a12bb6bde..2ec006b7e 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -83,7 +83,6 @@
   "bundle_column_error.routing.body": "अनुरोधितं पृष्ठं न लब्धम्। URL सङ्केतं सम्यगस्तीति कृपया दृढीकुरु।",
   "bundle_column_error.routing.title": "४०४",
   "bundle_modal_error.close": "पिधीयताम्",
-  "bundle_modal_error.message": "आरोपणे कश्चन दोषो जातः",
   "bundle_modal_error.retry": "पुनः यतताम्",
   "closed_registrations.other_server_instructions": "यतोहि मस्टोडोनक्रेन्द्रीयकृतमस्ति, अन्यास्मिन्सर्वरि एकौण्टं स्रष्टुं शक्नोषि एवञ्च एतेन संयोक्तुं शक्नोषि।",
   "closed_registrations_modal.description": "{domain} मध्ये एकौण्टं करणमधुना न सम्भवति, किन्तु कृपया अवधीयतां यन्मास्टोडोनमुपयोक्तुं {domain} मध्ये एकौण्टं करणं नावश्यकम्।",
@@ -161,8 +160,6 @@
   "disabled_account_banner.text": "तव एकौण्ट् {disabledAccount} अधुना निष्कृतमस्ति।",
   "dismissable_banner.community_timeline": "तानि तेषां जनानां नूतनतमानि सार्वजनिकानि पत्राणि सन्ति येषामेकौण्टः {domain} द्वारा होस्त् भवन्ति।",
   "dismissable_banner.dismiss": "अपास्य",
-  "dismissable_banner.explore_links": "एतासां वार्तानां विषये अधुना अकेन्द्रीकृतजालस्य अस्मिनन्येषु च सर्वर्षु जनैश्चर्चा क्रियते।",
-  "dismissable_banner.explore_tags": "अकेन्द्रीकृतजालस्य अस्मदन्येभ्यश्च सर्वर्भ्यः एतानि प्रचलितवस्तूनि इदानीमस्मिन्सर्वरि कर्षणं प्राप्नुवन्ति।",
   "embed.instructions": "पत्रमेतत्स्वीयजालस्थाने स्थापयितुमधो लिखितो विध्यादेशो युज्यताम्",
   "embed.preview": "अत्रैवं दृश्यते तत्:",
   "emoji_button.activity": "आचरणम्",
@@ -372,30 +369,7 @@
   "notifications_permission_banner.enable": "देस्क्टप्विज्ञापनानि सशक्तं कुरु",
   "notifications_permission_banner.how_to_control": "यदा माटोडोन्नोद्घाटितस्तदा विज्ञापनानि प्राप्तुं देस्क्तप्विज्ञापनानि सशक्तं कुरु। यदा तानि सशक्तानि तदा {icon} गण्डस्य माध्यमेन केऽपि प्रकारास्संवादा देस्क्तप्विज्ञापनानि जनयन्तीति नियामकं कर्तुं शक्नोषि।",
   "notifications_permission_banner.title": "मा कदापि वस्तु त्यज",
-  "onboarding.action.back": "मां प्रत्यागमय",
-  "onboarding.actions.back": "मां प्रत्यागमय",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "नमस्ते #मास्टोडन्",
   "onboarding.follows.empty": "दुर्भाग्यतया इदानीं कोऽपि परिणामो न दृश्यते। अन्वेषणमुपयोजयितुं वा जनमनुसर्तुं गवेषणपृष्ठस्यान्वेषणं यतितुं शक्नोषि वा पश्चात्पुनर्यतस्व।",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.share.lead": "मास्टोडनि कथं ते त्वामन्वेषितुं शक्नुवन्ति तज्जनान्ज्ञापय!",
-  "onboarding.share.message": "अहं {username} #मास्टोडनि! आयाहि {url} इत्यस्मिननुसरन्तु।",
-  "onboarding.share.next_steps": "सम्भवपरपदानि :",
-  "onboarding.share.title": "स्वविवरणं विभाज्यताम्",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "चकृषे!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "स्वप्रथमप्रेषणं कुरु",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>वेत्सि वा?</strong> स्वैकौटं सुरक्षितुं द्विकारकप्रमाणीकरणमेकौत्सेटिंसि स्थापयितुं शक्नोषि। केनापि त्वया विकल्पितेन TOTP एपा एतत्कार्यं करोति, न काचिद्दूरवाणीसंख्या आवश्यका।",
   "picture_in_picture.restore": "तत्प्रतिस्थापय",
   "poll.closed": "बद्धम्",
   "poll.refresh": "नवीकुरु",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index 19bdba818..98f8ab49b 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -110,7 +110,6 @@
   "bundle_column_error.routing.body": "Impossìbile agatare sa pàgina rechesta. Seguru chi s'URL in sa barra de indiritzos est curretu?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Serra",
-  "bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.",
   "bundle_modal_error.retry": "Torra·bi a proare",
   "closed_registrations.other_server_instructions": "Dae chi Mastodon est detzentralizadu, podes creare unu contu in un'àteru serbidore e interagire cun custu.",
   "closed_registrations_modal.description": "Sa creatzione de contos in {domain} no est possìbile in custu momentu, però tene in cunsideru chi non tenes bisòngiu de unu contu ispetzìficu in {domain} pro impreare Mastodon.",
@@ -210,8 +209,6 @@
   "disabled_account_banner.text": "Su contu tuo {disabledAccount} no est ativu.",
   "dismissable_banner.community_timeline": "Custas sunt is publicatziones pùblicas prus reghentes dae gente cun contu in {domain}.",
   "dismissable_banner.dismiss": "Iscarta",
-  "dismissable_banner.explore_links": "Custas sunt is istòrias de noas prus cumpartzidas in sa rete oe. Is istòrias prus noas publicadas dae gente prus diversa ant a èssere priorizadas.",
-  "dismissable_banner.explore_statuses": "Custas sunt publicatziones dae sa rete detzentralizada chi sunt retzende atentzione oe. Is publicatziones prus noas cun prus cumpartziduras e preferèntzias ant a èssere priorizadas.",
   "domain_block_modal.block": "Bloca su serbidore",
   "domain_block_modal.block_account_instead": "Bloca imbetzes a @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Is persones de custu serbidore podent ancora interagire cun is publicatziones betzas tuas.",
@@ -532,11 +529,8 @@
   "notifications_permission_banner.enable": "Abilita is notìficas de iscrivania",
   "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.",
   "notifications_permission_banner.title": "Non ti perdas mai nudda",
-  "onboarding.compose.template": "Salude #Mastodon!",
   "onboarding.profile.display_name": "Nòmine visìbile",
   "onboarding.profile.note": "Biografia",
-  "onboarding.steps.setup_profile.title": "Personaliza su profilu tuo",
-  "onboarding.steps.share_profile.title": "Cumpartzi su profilu tuo",
   "picture_in_picture.restore": "Torra·ddu a ue fiat",
   "poll.closed": "Serradu",
   "poll.refresh": "Atualiza",
diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json
index 196b4cdb0..5c5bd8d3f 100644
--- a/app/javascript/mastodon/locales/sco.json
+++ b/app/javascript/mastodon/locales/sco.json
@@ -80,7 +80,6 @@
   "bundle_column_error.routing.body": "The requestit page cuidnae be fun. Are ye shair thit the URL in the addres baur is richt?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Shut",
-  "bundle_modal_error.message": "Somehin went wrang whilst loadin this component.",
   "bundle_modal_error.retry": "Gie it anither shot",
   "closed_registrations.other_server_instructions": "Seein Mastodon is decentralized ye kin mak a accoont on anither server an stull interact wi this ane.",
   "closed_registrations_modal.description": "Makkin a accoont on {domain} isnae possible the noo, but mind ye dinnae need a accoont on {domain} specific for tae uise Mastodon.",
@@ -154,8 +153,6 @@
   "disabled_account_banner.text": "Yer accoont {disabledAccount} is disabilt the noo.",
   "dismissable_banner.community_timeline": "Here the maist recent public posts fae fowk thit's accoonts is hostit bi {domain}.",
   "dismissable_banner.dismiss": "Pit awa",
-  "dismissable_banner.explore_links": "Thir news stories is bein talked aboot bi fowk on this an ither servers o the decentralized netwirk richt noo.",
-  "dismissable_banner.explore_tags": "Thir hashtags is gaitherin traction amang the fowk on thit an ither servers o the decentralized netwirk richt noo.",
   "embed.instructions": "Embed this post on yer wabsteid bi copyin the code ablow.",
   "embed.preview": "Here whit it'll luik lik:",
   "emoji_button.activity": "Activity",
@@ -355,19 +352,6 @@
   "notifications_permission_banner.enable": "Turn on desktap notes",
   "notifications_permission_banner.how_to_control": "Fir tae get notes whan Mastodon isnae open, turn on desktap notes. Ye kin pick exactly whit types o interactions gie ye desktap notes throu the {icon} button abuin ance they'r turnt on.",
   "notifications_permission_banner.title": "Dinnae miss a hing",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Pit it back",
   "poll.closed": "Shut",
   "poll.refresh": "Refresh",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
index dbf6a41f6..08d24525f 100644
--- a/app/javascript/mastodon/locales/si.json
+++ b/app/javascript/mastodon/locales/si.json
@@ -62,7 +62,6 @@
   "bundle_column_error.return": "ආපසු මුලට යන්න",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "වසන්න",
-  "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.",
   "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න",
   "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක",
   "closed_registrations_modal.title": "මාස්ටඩන් හි ලියාපදිංචි වන්න",
@@ -306,13 +305,6 @@
   "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න",
   "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න",
   "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න",
-  "onboarding.actions.go_to_explore": "නැගී එන දෑ වෙත ගෙනයන්න",
-  "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!",
-  "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න",
-  "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න",
-  "onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය",
-  "onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න",
-  "onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න",
   "poll.closed": "වසා ඇත",
   "poll.refresh": "නැවුම් කරන්න",
   "poll.reveal": "ප්‍රතිඵල බලන්න",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index d7e396c69..55248bc12 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -94,6 +94,7 @@
   "annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami",
   "annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia",
   "annual_report.summary.most_used_hashtag.most_used_hashtag": "najviac užívaný hashtag",
+  "annual_report.summary.most_used_hashtag.none": "Žiaden",
   "annual_report.summary.new_posts.new_posts": "nové príspevky",
   "annual_report.summary.percentile.we_wont_tell_bernie": "Nepovieme Berniemu.",
   "attachments_list.unprocessed": "(nespracované)",
@@ -117,7 +118,6 @@
   "bundle_column_error.routing.body": "Žiadaná stránka nebola nájdená. Ste si istí, že zadaná adresa URL je správna?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zatvoriť",
-  "bundle_modal_error.message": "Pri načítavaní tohto komponentu nastala chyba.",
   "bundle_modal_error.retry": "Skúsiť znova",
   "closed_registrations.other_server_instructions": "Keďže Mastodon je decentralizovaný, môžete si vytvoriť účet na inom serveri a stále komunikovať s týmto serverom.",
   "closed_registrations_modal.description": "Vytvorenie účtu na {domain} nie je v súčasnosti možné, ale myslite na to, že na používanie Mastodonu nepotrebujete účet práve na {domain}.",
@@ -128,9 +128,11 @@
   "column.blocks": "Blokované účty",
   "column.bookmarks": "Záložky",
   "column.community": "Miestna časová os",
+  "column.create_list": "Vytvor zoznam",
   "column.direct": "Súkromné označenia",
   "column.directory": "Prehľadávať profily",
   "column.domain_blocks": "Blokované domény",
+  "column.edit_list": "Uprav zoznam",
   "column.favourites": "Obľúbené",
   "column.firehose": "Živé kanály",
   "column.follow_requests": "Žiadosti o sledovanie",
@@ -147,6 +149,7 @@
   "column_header.pin": "Pripnúť",
   "column_header.show_settings": "Zobraziť nastavenia",
   "column_header.unpin": "Odopnúť",
+  "column_search.cancel": "Zruš",
   "column_subheading.settings": "Nastavenia",
   "community.column_settings.local_only": "Iba miestne",
   "community.column_settings.media_only": "Iba médiá",
@@ -220,10 +223,6 @@
   "disabled_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný.",
   "dismissable_banner.community_timeline": "Toto sú najnovšie verejné príspevky od účtov hostených na {domain}.",
   "dismissable_banner.dismiss": "Zrušiť",
-  "dismissable_banner.explore_links": "Toto sú správy zo sociálnej siete, ktoré sú dnes populárne. Novšie správy s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.",
-  "dismissable_banner.explore_statuses": "Toto sú príspevky z celej sociálnej siete, ktoré sú dnes populárne. Novšie príspevky s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.",
-  "dismissable_banner.explore_tags": "Toto sú hashtagy zo sociálnej siete, ktoré sú dnes populárne. Novšie hashtagy používané viacerými ľuďmi sú radené vyššie.",
-  "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od účtov na sociálnej sieti, ktoré sú sledované účtami z {domain}.",
   "domain_block_modal.block": "Blokovať server",
   "domain_block_modal.block_account_instead": "Namiesto toho zablokuj @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Ľudia z tohto servera môžu interaktovať s tvojimi starými príspevkami.",
@@ -427,11 +426,22 @@
   "link_preview.author": "Autor: {name}",
   "link_preview.more_from_author": "Viac od {name}",
   "link_preview.shares": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}",
+  "lists.add_member": "Pridaj",
+  "lists.add_to_list": "Pridaj do zoznamu",
+  "lists.add_to_lists": "Pridaj {name} do zoznamov",
   "lists.delete": "Vymazať zoznam",
   "lists.edit": "Upraviť zoznam",
+  "lists.list_members": "Členovia zoznamu",
+  "lists.list_name": "Názov zoznamu",
+  "lists.new_list_name": "Názov nového zoznamu",
+  "lists.no_lists_yet": "Ešte žiadne zoznamy.",
+  "lists.no_members_yet": "Zatiaľ bez členov.",
+  "lists.no_results_found": "Žiadne výsledky nenájdené.",
+  "lists.remove_member": "Odstráň",
   "lists.replies_policy.followed": "Akémukoľvek sledovanému účtu",
   "lists.replies_policy.list": "Členom zoznamu",
   "lists.replies_policy.none": "Nikomu",
+  "lists.save": "Ulož",
   "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}",
   "loading_indicator.label": "Načítavanie…",
   "media_gallery.hide": "Skryť",
@@ -516,6 +526,7 @@
   "notifications.column_settings.filter_bar.advanced": "Zobraziť všetky kategórie",
   "notifications.column_settings.follow": "Nové sledovania od:",
   "notifications.column_settings.follow_request": "Nové žiadosti o sledovanie od:",
+  "notifications.column_settings.group": "Skupina",
   "notifications.column_settings.mention": "Označenia:",
   "notifications.column_settings.poll": "Výsledky ankety:",
   "notifications.column_settings.push": "Upozornenia push",
@@ -552,44 +563,20 @@
   "notifications_permission_banner.enable": "Povoliť upozornenia na ploche",
   "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.",
   "notifications_permission_banner.title": "Nenechajte si nič ujsť",
-  "onboarding.action.back": "Ísť späť",
-  "onboarding.actions.back": "Ísť späť",
-  "onboarding.actions.go_to_explore": "Prejsť na populárne",
-  "onboarding.actions.go_to_home": "Prejsť na domovský kanál",
-  "onboarding.compose.template": "Ahoj, #Mastodon!",
+  "onboarding.follows.back": "Späť",
+  "onboarding.follows.done": "Hotovo",
   "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.",
-  "onboarding.follows.lead": "Váš domovský kanál je váš hlavný spôsob objavovania Mastodonu. Čím viac ľudí sledujete, tým bude aktívnejší a zaujímavejší. Tu je pár tipov na začiatok:",
-  "onboarding.follows.title": "Prispôsobte si svoj domovský kanál",
+  "onboarding.follows.search": "Hľadať",
   "onboarding.profile.discoverable": "Nastavte svoj profil ako objaviteľný",
   "onboarding.profile.discoverable_hint": "Keď si na Mastodone zapnete objaviteľnosť, vaše príspevky sa môžu zobrazovať vo výsledkoch vyhľadávania a v populárnych. Váš profil môže byť navyše navrhovaný ľuďom, s ktorými máte podobné záujmy.",
   "onboarding.profile.display_name": "Používateľské meno",
   "onboarding.profile.display_name_hint": "Vaše celé meno alebo pokojne aj vtipná prezývka…",
-  "onboarding.profile.lead": "Vždy si to môžete doplniť neskôr v nastaveniach, kde nájdete aj ďalšie možnosti prispôsobenia.",
   "onboarding.profile.note": "Niečo o vás",
   "onboarding.profile.note_hint": "Môžete @označiť iných ľudí alebo #hashtagy…",
   "onboarding.profile.save_and_continue": "Uložiť a pokračovať",
   "onboarding.profile.title": "Nastavenie profilu",
   "onboarding.profile.upload_avatar": "Nahrať profilový obrázok",
   "onboarding.profile.upload_header": "Nahrať obrázok záhlavia profilu",
-  "onboarding.share.lead": "Dajte ostatným vedieť, ako vás môžu na Mastodone nájsť.",
-  "onboarding.share.message": "Na #Mastodon⁠e som {username}. Príď ma sledovať na {url}!",
-  "onboarding.share.next_steps": "Ďalšie možné kroky:",
-  "onboarding.share.title": "Zdieľajte svoj profil",
-  "onboarding.start.lead": "Teraz ste súčasťou Mastodonu, jedinečnej decentralizovanej sociálnej platformy, kde o všetkom rozhodujete vy, nie algoritmus. Poďme sa pozrieť, ako môžete začať:",
-  "onboarding.start.skip": "Nepotrebujete pomoc so začiatkom?",
-  "onboarding.start.title": "Zvládli ste to!",
-  "onboarding.steps.follow_people.body": "Mastodon je vybudovaný okolo sledovania zaujímavých ľudí.",
-  "onboarding.steps.follow_people.title": "Prispôsobte si svoj domovský kanál",
-  "onboarding.steps.publish_status.body": "Predstavte sa svetu textom, fotkami, videami či anketami {emoji}",
-  "onboarding.steps.publish_status.title": "Vytvorte svoj prvý príspevok",
-  "onboarding.steps.setup_profile.body": "Plnší profil vám pomôže mať viac interakcií.",
-  "onboarding.steps.setup_profile.title": "Upravte si profil",
-  "onboarding.steps.share_profile.body": "Dajte svojej partii vedieť, ako vás môžu na Mastodone nájsť.",
-  "onboarding.steps.share_profile.title": "Zdieľajte svoj profil na Mastodone",
-  "onboarding.tips.2fa": "<strong>Vedeli ste?</strong> Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Vedeli ste?</strong> Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!",
-  "onboarding.tips.migration": "<strong>Vedeli ste?</strong> Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostiť svoj vlastný server!",
-  "onboarding.tips.verification": "<strong>Vedeli ste?</strong> Svoj účet môžete overiť umiestnením odkazu na svoj profil na Mastodone na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!",
   "password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla",
   "password_confirmation.mismatching": "Zadané heslá sa nezhodujú",
   "picture_in_picture.restore": "Vrátiť späť",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 84141a779..df7ff350b 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -116,7 +116,6 @@
   "bundle_column_error.routing.body": "Zahtevane strani ni mogoče najti. Ali ste prepričani, da je naslov URL v naslovni vrstici pravilen?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zapri",
-  "bundle_modal_error.message": "Med nalaganjem te komponente je prišlo do napake.",
   "bundle_modal_error.retry": "Poskusi znova",
   "closed_registrations.other_server_instructions": "Ker je Mastodon decentraliziran, lahko ustvarite račun na drugem strežniku in ste še vedno v interakciji s tem.",
   "closed_registrations_modal.description": "Odpiranje računa na {domain} trenutno ni možno, upoštevajte pa, da ne potrebujete računa prav na {domain}, da bi uporabljali Mastodon.",
@@ -222,10 +221,6 @@
   "disabled_account_banner.text": "Vaš račun {disabledAccount} je trenutno onemogočen.",
   "dismissable_banner.community_timeline": "To so najnovejše javne objave oseb, katerih računi gostujejo na {domain}.",
   "dismissable_banner.dismiss": "Opusti",
-  "dismissable_banner.explore_links": "O teh novicah ravno zdaj veliko govorijo osebe na tem in drugih strežnikih decentraliziranega omrežja.",
-  "dismissable_banner.explore_statuses": "Te objave s tega in drugih strežnikov v decentraliziranem omrežju pridobivajo ravno zdaj veliko pozornosti na tem strežniku.",
-  "dismissable_banner.explore_tags": "Ravno zdaj dobivajo ti ključniki veliko pozoronosti med osebami na tem in drugih strežnikih decentraliziranega omrežja.",
-  "dismissable_banner.public_timeline": "To so najnovejše javne objave oseb z družabnega omrežja, ki jim sledijo osebe na {domain}.",
   "domain_block_modal.block": "Blokiraj strežnik",
   "domain_block_modal.block_account_instead": "Namesto tega blokiraj @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Osebe s tega strežnika se lahko odzivajo na vaše stare objave.",
@@ -590,44 +585,17 @@
   "notifications_permission_banner.enable": "Omogoči obvestila na namizju",
   "notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.",
   "notifications_permission_banner.title": "Nikoli ne zamudite ničesar",
-  "onboarding.action.back": "Pelji me nazaj",
-  "onboarding.actions.back": "Pelji me nazaj",
-  "onboarding.actions.go_to_explore": "Poglejte, kaj je v trendu",
-  "onboarding.actions.go_to_home": "Pojdite na svoj domači vir",
-  "onboarding.compose.template": "Pozdravljen, #Mastodon!",
   "onboarding.follows.empty": "Žal trenutno ni mogoče prikazati nobenih rezultatov. Lahko poskusite z iskanjem ali brskanjem po strani za raziskovanje, da poiščete osebe, ki jim želite slediti, ali poskusite znova pozneje.",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Priljubljeno na Mastodonu",
   "onboarding.profile.discoverable": "Naj bo moj profil mogoče najti",
   "onboarding.profile.discoverable_hint": "Ko se odločite za razkrivanje na Mastodonu, se lahko vaše objave pojavijo v rezultatih iskanja in trendih, vaš profil pa se lahko predlaga ljudem, ki imajo podobne interese kot vi.",
   "onboarding.profile.display_name": "Pojavno ime",
   "onboarding.profile.display_name_hint": "Vaše polno ime ali lažno ime ...",
-  "onboarding.profile.lead": "To lahko vedno dokončate med nastavitvami, kjer je na voljo še več možnosti prilagajanja.",
   "onboarding.profile.note": "Biografija",
   "onboarding.profile.note_hint": "Druge osebe lahko @omenite ali #ključite ...",
   "onboarding.profile.save_and_continue": "Shrani in nadaljuj",
   "onboarding.profile.title": "Nastavitev profila",
   "onboarding.profile.upload_avatar": "Naloži sliko profila",
   "onboarding.profile.upload_header": "Naloži glavo profila",
-  "onboarding.share.lead": "Povejte vsem, kako vas lahko najdejo na Mastodonu!",
-  "onboarding.share.message": "Sem {username} na #Mastodon! Sledite mi na {url}",
-  "onboarding.share.next_steps": "Možni naslednji koraki:",
-  "onboarding.share.title": "Delite svoj profil z drugimi",
-  "onboarding.start.lead": "Vaš novi račun Mastodon je pripravljen za uporabo. Takole ga lahko najbolje izkoristite:",
-  "onboarding.start.skip": "Ali želite preskočiti vse to?",
-  "onboarding.start.title": "Uspelo vam je!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Pozdravite cel svet.",
-  "onboarding.steps.publish_status.title": "Ustvarite svojo prvo objavo",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Prilagodite svoj profil",
-  "onboarding.steps.share_profile.body": "Naj prijatelji izvejo, kako vas najdejo na Mastodonu!",
-  "onboarding.steps.share_profile.title": "Delite svoj profil z drugimi",
-  "onboarding.tips.2fa": "<strong>Ali veste?</strong> Račun lahko zavarujete tako, da v nastavitvah računa nastavite dvostopenjsko overjanje. Deluje s poljubnim programom TOTP po vaši izbiri, telefonska številka ni potrebna!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Ali veste?</strong> Ker je Mastodon decentraliziran, bodo nekateri profili, na katere naletite, gostovali na strežnikih, ki ni vaš. Pa vendar lahko z njimi brezhibno komunicirate! Njihov strežnik je zapisan v drugi polovici njihovega uporabniškega imena!",
-  "onboarding.tips.migration": "<strong>Ali veste?</strong> Če menite, da {domain} za vas v prihodnosti ni najboljša izbira strežnika, se lahko preselite na drug strežnik Mastodon, ne da bi izgubili sledilce. Lahko celo gostite svoj strežnik!",
-  "onboarding.tips.verification": "<strong>Ali veste?</strong> Svoj račun lahko preverite tako, da na svoje spletno mesto postavite povezavo do svojega profila Mastodon in spletno stran dodate v svoj profil. Brez stroškov ali dokumentov!",
   "password_confirmation.exceeds_maxlength": "Potrditev gesla presega največjo dolžino gesla",
   "password_confirmation.mismatching": "Potrdilo gesla se ne ujema.",
   "picture_in_picture.restore": "Postavi nazaj",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index c2781a2b6..6de39e6e9 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -124,7 +124,7 @@
   "bundle_column_error.routing.body": "Faqja e kërkuar s’u gjet dot. Jeni i sigurt se URL-ja te shtylla e adresave është e saktë?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Mbylle",
-  "bundle_modal_error.message": "Diç shkoi ters teksa ngarkohej ky përbërës.",
+  "bundle_modal_error.message": "Diç shkoi ters, teksa ngarkohej kjo skenë.",
   "bundle_modal_error.retry": "Riprovoni",
   "closed_registrations.other_server_instructions": "Ngaqë Mastodon-i është i decentralizuar, mund të krijoni një llogari në një tjetër shërbyes dhe prapë të ndëveproni me këtë këtu.",
   "closed_registrations_modal.description": "Krijimi i një llogarie te {domain} aktualisht është i pamundur, por kini parasysh se s’keni nevojë për një llogari posaçërisht në {domain} që të përdorni Mastodon-in.",
@@ -157,6 +157,7 @@
   "column_header.pin": "Fiksoje",
   "column_header.show_settings": "Shfaq rregullime",
   "column_header.unpin": "Shfiksoje",
+  "column_search.cancel": "Anuloje",
   "column_subheading.settings": "Rregullime",
   "community.column_settings.local_only": "Vetëm vendore",
   "community.column_settings.media_only": "Vetëm Media",
@@ -230,10 +231,10 @@
   "disabled_account_banner.text": "Llogaria juaj {disabledAccount} është aktualisht e çaktivizuar.",
   "dismissable_banner.community_timeline": "Këto janë postimet më të freskëta publike nga persona llogaritë e të cilëve strehohen nga {domain}.",
   "dismissable_banner.dismiss": "Hidhe tej",
-  "dismissable_banner.explore_links": "Këto histori të reja po tirren nga persona në këtë shërbyes dhe të tjerë të tillë të rrjetit të decentralizuar mu tani.",
-  "dismissable_banner.explore_statuses": "Këto janë postime nga rrjeti shoqëror që po tërheqin vëmendjen tani. Postimet më të reja me më përforcime dhe më të parapëlqyera nga njerëzit renditen më sipër.",
-  "dismissable_banner.explore_tags": "Këta hashtag-ë po tërheqin vëmendjen mes personave në këtë shërbyes dhe të tjerë të tillë të rrjetit të decentralizuar mu tani.",
-  "dismissable_banner.public_timeline": "Këto janë postimet më të reja publike prej personash në rrjetin shoqëror që ndjekin njerëzit në {domain}.",
+  "dismissable_banner.explore_links": "Këto lajme po ndahen më shumë se të tjerat në fedivers sot. Lajme më të reja të postuara nga më tepër persona të ndryshëm klasifikohen më lart.",
+  "dismissable_banner.explore_statuses": "Këto postime nga fediversi po tërheqin vëmendjen sot. Postimet më të reja me më tepër përforcime dhe parapëlqime klasifikohen më lart.",
+  "dismissable_banner.explore_tags": "Këta hashtag-ë po tërheqin vëmendjen në fedivers sot. Hashtag-ët që përdoren nga më tepër persona klasifikohen më lart.",
+  "dismissable_banner.public_timeline": "Këto janë postimet publike më të freskëta nga persona në fedivers që ndjekin personat në {domain}.",
   "domain_block_modal.block": "Bllokoje shërbyesin",
   "domain_block_modal.block_account_instead": "Blloko @{name} në vend të kësaj",
   "domain_block_modal.they_can_interact_with_old_posts": "Persona nga ky shërbyes mund të ndërveprojnë me postimet tuaja të vjetra.",
@@ -357,6 +358,7 @@
   "footer.status": "Gjendje",
   "generic.saved": "U ruajt",
   "getting_started.heading": "Si t’ia fillohet",
+  "hashtag.admin_moderation": "Hap ndërfaqe moderimi për #{name}",
   "hashtag.column_header.tag_mode.all": "dhe {additional}",
   "hashtag.column_header.tag_mode.any": "ose {additional}",
   "hashtag.column_header.tag_mode.none": "pa {additional}",
@@ -644,44 +646,21 @@
   "notifications_permission_banner.enable": "Aktivizo njoftime në desktop",
   "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në desktop, pasi të jenë aktivizuar.",
   "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë",
-  "onboarding.action.back": "Kthemëni pas",
-  "onboarding.actions.back": "Kthemëni pas",
-  "onboarding.actions.go_to_explore": "Shihni ç’është në modë",
-  "onboarding.actions.go_to_home": "Kaloni te prurja juaj kryesore",
-  "onboarding.compose.template": "Tungjatjeta #Mastodon!",
+  "onboarding.follows.back": "Mbrapsht",
+  "onboarding.follows.done": "U bë",
   "onboarding.follows.empty": "Mjerisht, s’mund të shfaqen përfundime tani. Mund të provoni të përdorni kërkimin, ose të shfletoni faqen e eksplorimit, që të gjeni persona për ndjekje, ose të riprovoni më vonë.",
-  "onboarding.follows.lead": "Ju kujdeseni për prurjen tuaj. Sa më tepër persona të tjerë të ndiqni, aq më aktive dhe interesante do të bëhet ajo. Këto profile mund të jenë një pikënisje e mirë—mundeni përherë të ndërpritni ndjekjen e tyre më vonë!",
-  "onboarding.follows.title": "Popullore në Mastodon",
+  "onboarding.follows.search": "Kërkoni",
+  "onboarding.follows.title": "Që t’ia filloni, ndiqni persona",
   "onboarding.profile.discoverable": "Bëje profilin tim të zbulueshëm",
   "onboarding.profile.discoverable_hint": "Kur zgjidhni të jeni i zbulueshëm në Mastodon, postimet tuaja mund të shfaqen në përfundime kërkimesh dhe gjëra në modë dhe profili juaj mund t’u sugjerohet njerëzve me interesa të ngjashme me ju.",
   "onboarding.profile.display_name": "Emër në ekran",
   "onboarding.profile.display_name_hint": "Emri juaj i plotë, ose ç’të doni…",
-  "onboarding.profile.lead": "Këtë mund ta plotësoni përherë më vonë, te rregullimet, ku ka edhe më tepër mundësi përshtatjeje.",
   "onboarding.profile.note": "Jetëshkrim",
   "onboarding.profile.note_hint": "Mund të @përmendni persona të tjerë, ose #hashtagë…",
   "onboarding.profile.save_and_continue": "Ruaje dhe vazhdo",
   "onboarding.profile.title": "Udjisje profili",
   "onboarding.profile.upload_avatar": "Ngarkoni foto profili",
   "onboarding.profile.upload_header": "Ngarkoni krye profili",
-  "onboarding.share.lead": "Bëjuni të ditur njerëzve se si mund t’ju gjejnë në Mastodon!",
-  "onboarding.share.message": "Jam {username} në #Mastodon! Ejani dhe ndiqmëni te {url}",
-  "onboarding.share.next_steps": "Hapa pasues të mundshëm:",
-  "onboarding.share.title": "Ndani me të tjerët profilin tuaj",
-  "onboarding.start.lead": "Llogaria juaj e re Mastodon është gati për punë. Ja se si të përfitoni maksimumin prej saj:",
-  "onboarding.start.skip": "Doni të hidheni drejt e në punë?",
-  "onboarding.start.title": "Ia dolët!",
-  "onboarding.steps.follow_people.body": "Ju kujdeseni për prurjen tuaj. Le ta mbushim me persona interesantë.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Përshëndetni botën.",
-  "onboarding.steps.publish_status.title": "Shkruani postimin tuaj të parë",
-  "onboarding.steps.setup_profile.body": "Ka më tepër gjasa që të tjerët të ndërveprojnë me ju, kur keni një profil të plotësuar.",
-  "onboarding.steps.setup_profile.title": "Personalizoni profilin tuaj",
-  "onboarding.steps.share_profile.body": "Bëjuni të ditur shokëve si t’ju gjejnë në Mastodon!",
-  "onboarding.steps.share_profile.title": "Ndani me të tjerët profilin tuaj",
-  "onboarding.tips.2fa": "<strong>E dini?</strong> Mund të siguroni llogarinë tuaj duke ujdisur mirëfilltësim dyfaktorësh, që nga rregullimet e llogarisë tuaj. Funksionon me çfarëdo aplikacioni TOTP që doni, pa pasur nevojë për numër telefoni!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>E dini?</strong> Ngaqë Mastodon-i është i decentralizuar, disa profile që hasni, do të jenë të strehuar në shërbyes të tjerë nga ai i juaji. E megjithatë, mundeni të ndërveproni me ta në mënyrë të pacen! Shërbyesi i tyre gjendet në pjesën e dytë të emrit të përdoruesit të gjithkujt!",
-  "onboarding.tips.migration": "<strong>E dini?</strong> Nëse ju duket se {domain} s’është zgjidhje kushedi për shërbyes për ju në të ardhmen, mund të kaloni te një shërbyes tjetër Mastodon, pa humbur ndjekësit tuaj. Mundeni edhe të strehoni vetë shërbyesin tuaj!",
-  "onboarding.tips.verification": "<strong>E dini?</strong> Mund të verifikoni llogarinë tuaj duke vendosur në sajtin tuaj një lidhje për te profili juaj Mastodon dhe duke shtuar sajtin tuaj te profili juaj. Pa tarifa, apo pa u dashur dokumente!",
   "password_confirmation.exceeds_maxlength": "Fjalëkalimi i ripohuar tejkalon gjatësinë maksimum të fjalëkalimeve",
   "password_confirmation.mismatching": "Fjalëkalimi i ripohuar nuk përkon",
   "picture_in_picture.restore": "Ktheje ku qe",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 5a587f266..3028019a9 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -106,7 +106,6 @@
   "bundle_column_error.routing.body": "Nije moguće pronaći traženu stranicu. Da li ste sigurni da je URL u adresnom polju ispravan?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Zatvori",
-  "bundle_modal_error.message": "Nešto je pošlo naopako tokom učitavanja ove komponente.",
   "bundle_modal_error.retry": "Pokušajte ponovo",
   "closed_registrations.other_server_instructions": "Pošto je Mastodon decentralizovan, možete napraviti nalog na drugom serveru ali i dalje komunicirati sa ovim.",
   "closed_registrations_modal.description": "Kreiranje naloga na {domain} trenutno nije moguće, ali imajte u vidu da vam ne treba nalog zasebno na {domain} da biste koristili Mastodon.",
@@ -198,10 +197,6 @@
   "disabled_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen.",
   "dismissable_banner.community_timeline": "Ovo su najnovije javne objave ljudi čije naloge hostuje {domain}.",
   "dismissable_banner.dismiss": "Odbaci",
-  "dismissable_banner.explore_links": "Ovo su vesti koje se danas najviše dele na društvenoj mreži. Novije vesti koje je objavilo više različitih ljudi su bolje rangirane.",
-  "dismissable_banner.explore_statuses": "Ovo su objave širom društvenog veba koje danas postaju sve popularnije. Novije objave sa više podržavanja i omiljene su rangirane više.",
-  "dismissable_banner.explore_tags": "Ovo su heš oznake koje danas postaju sve popularnije na društvenoj mreži. Heš oznake koje koristi više različitih ljudi su rangirane više.",
-  "dismissable_banner.public_timeline": "Ovo su najnovije javne objave ljudi sa društvenog veba koje ljudi na {domain}-u prate.",
   "domain_block_modal.block": "Blokiraj server",
   "domain_block_modal.block_account_instead": "Umesto toga, blokiraj @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Ljudi sa ovog servera mogu da imaju interakciju sa vašim starim objavama.",
@@ -517,44 +512,17 @@
   "notifications_permission_banner.enable": "Omogućiti obaveštenja na radnoj površini",
   "notifications_permission_banner.how_to_control": "Da biste primali obaveštenja kada Mastodon nije otvoren, omogućite obaveštenja na radnoj površini. Kada su obaveštenja na radnoj površini omogućena vrste interakcija koje ona generišu mogu se podešavati pomoću dugmeta {icon}.",
   "notifications_permission_banner.title": "Nikada ništa ne propustite",
-  "onboarding.action.back": "Vrati me nazad",
-  "onboarding.actions.back": "Vrati me nazad",
-  "onboarding.actions.go_to_explore": "Odvedi me u trending",
-  "onboarding.actions.go_to_home": "Odvedi me na početnu stranicu",
-  "onboarding.compose.template": "Zdravo #Mastodon!",
   "onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
-  "onboarding.follows.lead": "Vaša početna stranica je primarni način da doživite Mastodon. Što više ljudi budete pratili, to će biti aktivnije i zanimljivije. Da biste započeli, evo nekoliko predloga:",
-  "onboarding.follows.title": "Personalizujte svoju početnu stranicu",
   "onboarding.profile.discoverable": "Neka se moj profil može otkriti drugima",
   "onboarding.profile.discoverable_hint": "Kada omogućite mogućnost otkrivanja na Mastodon-u, vaše objave se mogu pojaviti u rezultatima pretrage i u trendu, a vaš profil može biti predložen ljudima sa sličnim interesovanjima.",
   "onboarding.profile.display_name": "Ime za prikaz",
   "onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…",
-  "onboarding.profile.lead": "Ovo možete uvek dovršiti kasnije u podešavanjima, gde je dostupno još više opcija prilagođavanja.",
   "onboarding.profile.note": "Biografija",
   "onboarding.profile.note_hint": "Možete da @pomenete druge ljude ili #heš oznake…",
   "onboarding.profile.save_and_continue": "Sačuvaj i nastavi",
   "onboarding.profile.title": "Podešavanje profila",
   "onboarding.profile.upload_avatar": "Otpremi sliku profila",
   "onboarding.profile.upload_header": "Otpremi zaglavlje profila",
-  "onboarding.share.lead": "Neka ljudi znaju kako mogu da vas pronađu na Mastodon-u!",
-  "onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
-  "onboarding.share.next_steps": "Mogući sledeći koraci:",
-  "onboarding.share.title": "Podelite svoj profil",
-  "onboarding.start.lead": "Sada ste deo Mastodon-a, jedinstvene, decentralizovane platforme društvenih medija na kojoj vi – a ne algoritam – birate svoje iskustvo. Hajde da počnemo na ovoj novoj društvenoj granici:",
-  "onboarding.start.skip": "Ne treba vam pomoć za početak?",
-  "onboarding.start.title": "Uspeli ste!",
-  "onboarding.steps.follow_people.body": "Praćenje zanimljivih ljudi je ono o čemu se radi u Mastodon-u.",
-  "onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
-  "onboarding.steps.publish_status.body": "Pozdravite svet tekstom, slikama, video snimcima ili anketama {emoji}",
-  "onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
-  "onboarding.steps.setup_profile.body": "Pojačajte svoje interakcije tako što ćete imati sveobuhvatan profil.",
-  "onboarding.steps.setup_profile.title": "Personalizujte svoj profil",
-  "onboarding.steps.share_profile.body": "Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u!",
-  "onboarding.steps.share_profile.title": "Podelite svoj Mastodon profil",
-  "onboarding.tips.2fa": "<strong>Da li ste znali?</strong> Možete da zaštitite svoj nalog podešavanjem dvostruke potvrde identiteta u podešavanjima naloga. Radi sa bilo kojom TOTP aplikacijom po vašem izboru, nije potreban broj telefona!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Da li ste znali?</strong> Pošto je Mastodon decentralizovan, neki profili na koje naiđete biće smešteni na serverima različitim od vašeg. A ipak možete da komunicirate sa njima besprekorno! Njihov server je u drugoj polovini njihovog korisničkog imena!",
-  "onboarding.tips.migration": "<strong>Da li ste znali?</strong> Ako smatrate da {domain} nije odličan izbor servera za vas u budućnosti, možete da pređete na drugi Mastodon server bez gubitka pratilaca. Možete čak i da hostujete sopstveni server!",
-  "onboarding.tips.verification": "<strong>Da li ste znali?</strong> Možete da verifikujete svoj nalog tako što ćete staviti vezu do svog Mastodon profila na svoj veb sajt i dodati veb sajt svom profilu. Nisu potrebne nikakve naknade ili dokumenti!",
   "password_confirmation.exceeds_maxlength": "Potvrda lozinke premašuje maksimalnu dužinu lozinke",
   "password_confirmation.mismatching": "Potvrda lozinke se ne podudara",
   "picture_in_picture.restore": "Vrati nazad",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index ea92a3bf1..151453bcf 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -106,7 +106,6 @@
   "bundle_column_error.routing.body": "Није могуће пронаћи тражену страницу. Да ли сте сигурни да је URL у адресном пољу исправан?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Затвори",
-  "bundle_modal_error.message": "Нешто је пошло наопако током учитавања ове компоненте.",
   "bundle_modal_error.retry": "Покушајте поново",
   "closed_registrations.other_server_instructions": "Пошто је Mastodon децентрализован, можете направити налог на другом серверу али и даље комуницирати са овим.",
   "closed_registrations_modal.description": "Креирање налога на {domain} тренутно није могуће, али имајте у виду да вам не треба налог засебно на {domain} да бисте користили Mastodon.",
@@ -198,10 +197,6 @@
   "disabled_account_banner.text": "Ваш налог {disabledAccount} је тренутно онемогућен.",
   "dismissable_banner.community_timeline": "Ово су најновије јавне објаве људи чије налоге хостује {domain}.",
   "dismissable_banner.dismiss": "Одбаци",
-  "dismissable_banner.explore_links": "Ово су вести које се данас највише деле на друштвеној мрежи. Новије вести које је објавило више различитих људи су боље рангиране.",
-  "dismissable_banner.explore_statuses": "Ово су објаве широм друштвеног веба које данас постају све популарније. Новије објаве са више подржавања и омиљене су рангиране више.",
-  "dismissable_banner.explore_tags": "Ово су хеш ознаке које данас постају све популарније на друштвеној мрежи. Хеш ознаке које користи више различитих људи су рангиране више.",
-  "dismissable_banner.public_timeline": "Ово су најновије јавне објаве људи са друштвеног веба које људи на {domain}-у прате.",
   "domain_block_modal.block": "Блокирај сервер",
   "domain_block_modal.block_account_instead": "Уместо тога, блокирај @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "Људи са овог сервера могу да имају интеракцију са вашим старим објавама.",
@@ -517,44 +512,17 @@
   "notifications_permission_banner.enable": "Омогућити обавештења на радној површини",
   "notifications_permission_banner.how_to_control": "Да бисте примали обавештења када Mastodon није отворен, омогућите обавештења на радној површини. Kада су обавештења на радној површини омогућена врсте интеракција које она генеришу могу се подешавати помоћу дугмета {icon}.",
   "notifications_permission_banner.title": "Никада ништа не пропустите",
-  "onboarding.action.back": "Врати ме назад",
-  "onboarding.actions.back": "Врати ме назад",
-  "onboarding.actions.go_to_explore": "Одведи ме у трендинг",
-  "onboarding.actions.go_to_home": "Одведи ме на почетну страницу",
-  "onboarding.compose.template": "Здраво #Mastodon!",
   "onboarding.follows.empty": "Нажалост, тренутно се не могу приказати резултати. Можете покушати са коришћењем претраге или прегледањем странице за истраживање да бисте пронашли људе које ћете пратити или покушајте поново касније.",
-  "onboarding.follows.lead": "Ваша почетна страница је примарни начин да доживите Mastodon. Што више људи будете пратили, то ће бити активније и занимљивије. Да бисте започели, ево неколико предлога:",
-  "onboarding.follows.title": "Персонализујте своју почетну страницу",
   "onboarding.profile.discoverable": "Нека се мој профил може открити другима",
   "onboarding.profile.discoverable_hint": "Када омогућите могућност откривања на Mastodon-у, ваше објаве се могу појавити у резултатима претраге и у тренду, а ваш профил може бити предложен људима са сличним интересовањима.",
   "onboarding.profile.display_name": "Име за приказ",
   "onboarding.profile.display_name_hint": "Ваше пуно име или надимак…",
-  "onboarding.profile.lead": "Ово можете увек довршити касније у подешавањима, где је доступно још више опција прилагођавања.",
   "onboarding.profile.note": "Биографија",
   "onboarding.profile.note_hint": "Можете да @поменете друге људе или #хеш ознаке…",
   "onboarding.profile.save_and_continue": "Сачувај и настави",
   "onboarding.profile.title": "Подешавање профила",
   "onboarding.profile.upload_avatar": "Отпреми слику профила",
   "onboarding.profile.upload_header": "Отпреми заглавље профила",
-  "onboarding.share.lead": "Нека људи знају како могу да вас пронађу на Mastodon-у!",
-  "onboarding.share.message": "Ја сам {username} на #Mastodon-у! Пратите ме на {url}",
-  "onboarding.share.next_steps": "Могући следећи кораци:",
-  "onboarding.share.title": "Поделите свој профил",
-  "onboarding.start.lead": "Сада сте део Mastodon-а, јединствене, децентрализоване платформе друштвених медија на којој ви – а не алгоритам – бирате своје искуство. Хајде да почнемо на овој новој друштвеној граници:",
-  "onboarding.start.skip": "Не треба вам помоћ за почетак?",
-  "onboarding.start.title": "Успели сте!",
-  "onboarding.steps.follow_people.body": "Праћење занимљивих људи је оно о чему се ради у Mastodon-у.",
-  "onboarding.steps.follow_people.title": "Персонализујте своју почетну страницу",
-  "onboarding.steps.publish_status.body": "Поздравите свет текстом, сликама, видео снимцима или анкетама {emoji}",
-  "onboarding.steps.publish_status.title": "Напишите своју прву објаву",
-  "onboarding.steps.setup_profile.body": "Појачајте своје интеракције тако што ћете имати свеобухватан профил.",
-  "onboarding.steps.setup_profile.title": "Персонализујте свој профил",
-  "onboarding.steps.share_profile.body": "Нека ваши пријатељи знају како да вас пронађу на Mastodon-у!",
-  "onboarding.steps.share_profile.title": "Поделите свој Mastodon профил",
-  "onboarding.tips.2fa": "<strong>Да ли сте знали?</strong> Можете да заштитите свој налог подешавањем двоструке потврде идентитета у подешавањима налога. Ради са било којом TOTP апликацијом по вашем избору, није потребан број телефона!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Да ли сте знали?</strong> Пошто је Mastodon децентрализован, неки профили на које наиђете биће смештени на серверима различитим од вашег. А ипак можете да комуницирате са њима беспрекорно! Њихов сервер је у другој половини њиховог корисничког имена!",
-  "onboarding.tips.migration": "<strong>Да ли сте знали?</strong> Ако сматрате да {domain} није одличан избор сервера за вас у будућности, можете да пређете на други Mastodon сервер без губитка пратилаца. Можете чак и да хостујете сопствени сервер!",
-  "onboarding.tips.verification": "<strong>Да ли сте знали?</strong> Можете да верификујете свој налог тако што ћете ставити везу до свог Mastodon профила на свој веб сајт и додати веб сајт свом профилу. Нису потребне никакве накнаде или документи!",
   "password_confirmation.exceeds_maxlength": "Потврда лозинке премашује максималну дужину лозинке",
   "password_confirmation.mismatching": "Потврда лозинке се не подудара",
   "picture_in_picture.restore": "Врати назад",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 0fb714d9a..5c04140e4 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -129,7 +129,6 @@
   "bundle_column_error.routing.body": "Den begärda sidan kunde inte hittas. Är du säker på att adressen angivits korrekt?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Stäng",
-  "bundle_modal_error.message": "Något gick fel när komponenten skulle läsas in.",
   "bundle_modal_error.retry": "Försök igen",
   "closed_registrations.other_server_instructions": "Eftersom Mastodon är decentraliserat kan du skapa ett konto på en annan server och fortfarande interagera med denna.",
   "closed_registrations_modal.description": "Det är för närvarande inte möjligt att skapa ett konto på {domain} men kom ihåg att du inte behöver ett konto specifikt på {domain} för att använda Mastodon.",
@@ -232,10 +231,6 @@
   "disabled_account_banner.text": "Ditt konto {disabledAccount} är för närvarande inaktiverat.",
   "dismissable_banner.community_timeline": "Dessa är de senaste offentliga inläggen från personer vars konton tillhandahålls av {domain}.",
   "dismissable_banner.dismiss": "Avfärda",
-  "dismissable_banner.explore_links": "Dessa nyheter pratas det om just nu, på denna och på andra servrar i det decentraliserade nätverket.",
-  "dismissable_banner.explore_statuses": "Dessa inlägg, från denna och andra servrar i det decentraliserade nätverket, pratas det om just nu på denna server.",
-  "dismissable_banner.explore_tags": "Dessa hashtaggar pratas det om just nu bland folk på denna och andra servrar i det decentraliserade nätverket.",
-  "dismissable_banner.public_timeline": "De här är de aktuella publika inlägg från personer på det sociala nätet som personer i {domain} följer.",
   "domain_block_modal.block": "Blockera server",
   "domain_block_modal.block_account_instead": "Blockera @{name} istället",
   "domain_block_modal.they_can_interact_with_old_posts": "Personer från denna server kan interagera med dina gamla inlägg.",
@@ -625,44 +620,17 @@
   "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar",
   "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.",
   "notifications_permission_banner.title": "Missa aldrig något",
-  "onboarding.action.back": "Ta mig tillbaka",
-  "onboarding.actions.back": "Ta mig tillbaka",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Ta mig till mitt hemflöde",
-  "onboarding.compose.template": "Hallå #Mastodon!",
   "onboarding.follows.empty": "Tyvärr kan inga resultat visas just nu. Du kan prova att använda sökfunktionen eller utforska sidan för att hitta personer att följa, eller försök igen senare.",
-  "onboarding.follows.lead": "Ditt hemflöde är det primära sättet att uppleva Mastodon. Ju fler människor du följer, desto mer aktiv och intressant blir det. För att komma igång, är här några förslag:",
-  "onboarding.follows.title": "Anpassa ditt hemflöde",
   "onboarding.profile.discoverable": "Gör min profil upptäckbar",
   "onboarding.profile.discoverable_hint": "När du väljer att vara upptäckbar på Mastodon kan dina inlägg visas i sök- och trendresultat, och din profil kan föreslås för personer med liknande intressen som du.",
   "onboarding.profile.display_name": "Visningsnamn",
   "onboarding.profile.display_name_hint": "Fullständigt namn eller ditt roliga namn…",
-  "onboarding.profile.lead": "Du kan alltid slutföra detta senare i inställningarna, där ännu fler anpassningsalternativ finns tillgängliga.",
   "onboarding.profile.note": "Bio",
   "onboarding.profile.note_hint": "Du kan @nämna andra personer eller #hashtags…",
   "onboarding.profile.save_and_continue": "Spara och fortsätt",
   "onboarding.profile.title": "Konfiguration av profil",
   "onboarding.profile.upload_avatar": "Ladda upp profilbild",
   "onboarding.profile.upload_header": "Ladda upp profilbanner",
-  "onboarding.share.lead": "Låt folk veta hur de kan hitta dig på Mastodon!",
-  "onboarding.share.message": "Jag är {username} på #Mastodon! Följ mig på {url}",
-  "onboarding.share.next_steps": "Möjliga nästa steg:",
-  "onboarding.share.title": "Dela din profil",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "Du klarade det!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Säg hej till världen med text, foton, videor eller omröstningar {emoji}",
-  "onboarding.steps.publish_status.title": "Gör ditt första inlägg",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Dela din profil",
-  "onboarding.tips.2fa": "<strong>Visste du att?</strong> Du kan säkra ditt konto genom att ställa in tvåfaktorsautentisering i dina kontoinställningar. Det fungerar med valfri TOTP-app; inget telefonnummer behövs!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Visste du att?</strong> Eftersom Mastodon är decentraliserat kommer vissa profiler som du stöter på att finnas på andra servrar än dina. Ändå kan du interagera med dem sömlöst! Deras server är i den andra halvan av deras användarnamn!",
-  "onboarding.tips.migration": "<strong>Visste du?</strong> Om du känner för att {domain} inte är ett bra serverval för dig i framtiden, kan du flytta till en annan Mastodon-server utan att förlora dina följare. Du kan även vara värd för din egen server!",
-  "onboarding.tips.verification": "<strong>Visste du?</strong> Du kan verifiera ditt konto genom att sätta en länk till din Mastodon-profil på din egen webbplats och lägga till webbplatsen i din profil. Inga avgifter eller dokument behövs!",
   "password_confirmation.exceeds_maxlength": "Lösenordsbekräftelsen överskrider den maximala längden på lösenordet",
   "password_confirmation.mismatching": "Lösenordsbekräftelsen matchar inte",
   "picture_in_picture.restore": "Lägg tillbaka det",
diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json
index 404f7e2fd..c9a171984 100644
--- a/app/javascript/mastodon/locales/szl.json
+++ b/app/javascript/mastodon/locales/szl.json
@@ -31,8 +31,6 @@
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No toots here!",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
@@ -75,19 +73,6 @@
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
   "notifications.column_settings.status": "New toots:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 1465fcb51..92fa6b2eb 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -70,7 +70,6 @@
   "bundle_column_error.routing.body": "கேட்கப்பட்ட பக்கத்தைக் காணவில்லை. நீங்கள் உள்ளிட்ட முகவரி சரியனதா?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "மூடுக",
-  "bundle_modal_error.message": "இக்கூற்றை ஏற்றம் செய்யும்பொழுது ஏதோ தவறு ஏற்பட்டுள்ளது.",
   "bundle_modal_error.retry": "மீண்டும் முயற்சி செய்",
   "closed_registrations.other_server_instructions": "மேச்டடான் இரு பரவலாக்கப்பட்ட மென்பொருள் என்பதால், நீங்கள் வேரு ஒரு வழங்கியில் கணக்கை உருவாக்கியிருந்தாலும் இந்த வழங்கியில் பயன்படுத்தலாம்.",
   "closed_registrations_modal.description": "{domain} இல் இப்பொழுது கணக்குகள் உருவாக்க முடியாது. நீங்கள் மேச்டடான் பயன்படுத்த, குறிப்பாக {domain} முகவரியில் கணக்கைத் துவங்க வேண்டும் என்ற அவசியமில்லை என்பதை மனதில் வைத்துக் கொள்ளவும்.",
@@ -144,8 +143,6 @@
   "directory.local": "{domain} களத்திலிருந்து மட்டும்",
   "directory.new_arrivals": "புதிய வரவு",
   "directory.recently_active": "சற்றுமுன் செயல்பாட்டில் இருந்தவர்கள்",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "இந்தப் பதிவை உங்கள் வலைதளத்தில் பொதிக்கக் கீழே உள்ள வரிகளை காப்பி செய்யவும்.",
   "embed.preview": "பார்க்க இப்படி இருக்கும்:",
   "emoji_button.activity": "செயல்பாடு",
@@ -284,19 +281,6 @@
   "notifications.filter.mentions": "குறிப்பிடுகிறார்",
   "notifications.filter.polls": "கருத்துக்கணிப்பு முடிவுகள்",
   "notifications.group": "{count} அறிவிப்புகள்",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "மூடிய",
   "poll.refresh": "பத்துயிர்ப்ப?ட்டு",
   "poll.total_people": "{count, plural, one {# நபர்} other {# நபர்கள்}}",
diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json
index 6a86088fa..0fba9f162 100644
--- a/app/javascript/mastodon/locales/tai.json
+++ b/app/javascript/mastodon/locales/tai.json
@@ -19,8 +19,6 @@
   "compose_form.spoiler.marked": "Î-tû luē-iông kíng-kò",
   "compose_form.spoiler.unmarked": "Tsing-ka luē-iông kíng-kò",
   "confirmations.delete.message": "Lí kám bueh thâi-tiāu tsi̍t-ē huah-siann?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No toots here!",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
@@ -63,19 +61,6 @@
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
   "notifications.column_settings.status": "New toots:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index d58a69163..7a5e1f00f 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -36,7 +36,6 @@
   "boost_modal.combo": "మీరు తదుపరిసారి దీనిని దాటవేయడానికి {combo} నొక్కవచ్చు",
   "bundle_column_error.retry": "మళ్ళీ ప్రయత్నించండి",
   "bundle_modal_error.close": "మూసివేయు",
-  "bundle_modal_error.message": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.",
   "bundle_modal_error.retry": "మళ్ళీ ప్రయత్నించండి",
   "column.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు",
   "column.community": "స్థానిక కాలక్రమం",
@@ -79,8 +78,6 @@
   "confirmations.reply.message": "ఇప్పుడే ప్రత్యుత్తరం ఇస్తే మీరు ప్రస్తుతం వ్రాస్తున్న సందేశం తిరగరాయబడుతుంది. మీరు ఖచ్చితంగా కొనసాగించాలనుకుంటున్నారా?",
   "confirmations.unfollow.confirm": "అనుసరించవద్దు",
   "confirmations.unfollow.message": "{name}ను మీరు ఖచ్చితంగా అనుసరించవద్దనుకుంటున్నారా?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "దిగువ కోడ్ను కాపీ చేయడం ద్వారా మీ వెబ్సైట్లో ఈ స్టేటస్ ని పొందుపరచండి.",
   "embed.preview": "అది ఈ క్రింది విధంగా కనిపిస్తుంది:",
   "emoji_button.activity": "కార్యకలాపాలు",
@@ -194,19 +191,6 @@
   "notifications.filter.mentions": "పేర్కొన్నవి",
   "notifications.filter.polls": "ఎన్నిక ఫలితాలు",
   "notifications.group": "{count} ప్రకటనలు",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "మూసివేయబడినవి",
   "poll.refresh": "నవీకరించు",
   "poll.vote": "ఎన్నుకోండి",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index b9fe9cf33..609caa112 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -87,10 +87,17 @@
   "alert.unexpected.title": "อุปส์!",
   "alt_text_badge.title": "ข้อความแสดงแทน",
   "announcement.announcement": "ประกาศ",
+  "annual_report.summary.archetype.booster": "ผู้ล่าความเจ๋ง",
+  "annual_report.summary.archetype.lurker": "ผู้ซุ่มอ่านข่าว",
+  "annual_report.summary.archetype.oracle": "ผู้ให้คำปรึกษา",
+  "annual_report.summary.archetype.pollster": "ผู้สำรวจความคิดเห็น",
+  "annual_report.summary.archetype.replier": "ผู้ชอบเข้าสังคม",
   "annual_report.summary.followers.followers": "ผู้ติดตาม",
+  "annual_report.summary.followers.total": "รวม {count}",
   "annual_report.summary.highlighted_post.by_favourites": "โพสต์ที่ได้รับการชื่นชอบมากที่สุด",
   "annual_report.summary.highlighted_post.by_reblogs": "โพสต์ที่ได้รับการดันมากที่สุด",
   "annual_report.summary.highlighted_post.by_replies": "โพสต์ที่มีการตอบกลับมากที่สุด",
+  "annual_report.summary.most_used_hashtag.none": "ไม่มี",
   "annual_report.summary.new_posts.new_posts": "โพสต์ใหม่",
   "annual_report.summary.percentile.we_wont_tell_bernie": "เราจะไม่บอก Bernie",
   "annual_report.summary.thanks": "ขอบคุณสำหรับการเป็นส่วนหนึ่งของ Mastodon!",
@@ -117,7 +124,6 @@
   "bundle_column_error.routing.body": "ไม่พบหน้าที่ขอ คุณแน่ใจหรือไม่ว่า URL ในแถบที่อยู่ถูกต้อง?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "ปิด",
-  "bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้",
   "bundle_modal_error.retry": "ลองอีกครั้ง",
   "closed_registrations.other_server_instructions": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถสร้างบัญชีในเซิร์ฟเวอร์อื่นและยังคงโต้ตอบกับเซิร์ฟเวอร์นี้",
   "closed_registrations_modal.description": "ไม่สามารถสร้างบัญชีใน {domain} ได้ในปัจจุบัน แต่โปรดจำไว้ว่าคุณไม่จำเป็นต้องมีบัญชีใน {domain} โดยเฉพาะเพื่อใช้ Mastodon",
@@ -128,13 +134,16 @@
   "column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
   "column.bookmarks": "ที่คั่นหน้า",
   "column.community": "เส้นเวลาในเซิร์ฟเวอร์",
+  "column.create_list": "สร้างรายการ",
   "column.direct": "การกล่าวถึงแบบส่วนตัว",
   "column.directory": "เรียกดูโปรไฟล์",
   "column.domain_blocks": "โดเมนที่ปิดกั้นอยู่",
+  "column.edit_list": "แก้ไขรายการ",
   "column.favourites": "รายการโปรด",
   "column.firehose": "ฟีดสด",
   "column.follow_requests": "คำขอติดตาม",
   "column.home": "หน้าแรก",
+  "column.list_members": "จัดการสมาชิกของรายการ",
   "column.lists": "รายการ",
   "column.mutes": "ผู้ใช้ที่ซ่อนอยู่",
   "column.notifications": "การแจ้งเตือน",
@@ -220,10 +229,6 @@
   "disabled_account_banner.text": "มีการปิดใช้งานบัญชีของคุณ {disabledAccount} ในปัจจุบัน",
   "dismissable_banner.community_timeline": "นี่คือโพสต์สาธารณะล่าสุดจากผู้คนที่บัญชีได้รับการโฮสต์โดย {domain}",
   "dismissable_banner.dismiss": "ปิด",
-  "dismissable_banner.explore_links": "นี่เป็นเรื่องข่าวที่ได้รับการแชร์มากที่สุดในเว็บสังคมวันนี้ เรื่องข่าวที่ใหม่กว่าที่มีคนโพสต์มากกว่าจะได้รับการจัดอันดับที่สูงกว่า",
-  "dismissable_banner.explore_statuses": "นี่คือโพสต์จากทั่วทั้งเว็บสังคมที่กำลังได้รับความสนใจวันนี้ โพสต์ที่ใหม่กว่าที่มีการดันและรายการโปรดมากกว่าจะได้รับการจัดอันดับที่สูงกว่า",
-  "dismissable_banner.explore_tags": "นี่คือแฮชแท็กที่กำลังได้รับความสนใจในเว็บสังคมวันนี้ แฮชแท็กที่มีการใช้โดยผู้คนต่าง ๆ มากกว่าจะได้รับการจัดอันดับที่สูงกว่า",
-  "dismissable_banner.public_timeline": "นี่คือโพสต์สาธารณะล่าสุดจากผู้คนในเว็บสังคมที่ผู้คนใน {domain} ติดตาม",
   "domain_block_modal.block": "ปิดกั้นเซิร์ฟเวอร์",
   "domain_block_modal.block_account_instead": "ปิดกั้น @{name} แทน",
   "domain_block_modal.they_can_interact_with_old_posts": "ผู้คนจากเซิร์ฟเวอร์นี้สามารถโต้ตอบกับโพสต์เก่า ๆ ของคุณ",
@@ -452,11 +457,32 @@
   "link_preview.author": "โดย {name}",
   "link_preview.more_from_author": "เพิ่มเติมจาก {name}",
   "link_preview.shares": "{count, plural, other {{counter} โพสต์}}",
+  "lists.add_member": "เพิ่ม",
+  "lists.add_to_list": "เพิ่มไปยังรายการ",
+  "lists.add_to_lists": "เพิ่ม {name} ไปยังรายการ",
+  "lists.create": "สร้าง",
+  "lists.create_a_list_to_organize": "สร้างรายการใหม่เพื่อจัดระเบียบฟีดหน้าแรกของคุณ",
+  "lists.create_list": "สร้างรายการ",
   "lists.delete": "ลบรายการ",
+  "lists.done": "เสร็จสิ้น",
   "lists.edit": "แก้ไขรายการ",
+  "lists.exclusive": "ซ่อนสมาชิกในหน้าแรก",
+  "lists.exclusive_hint": "หากใครสักคนอยู่ในรายการนี้ ให้ซ่อนเขาในฟีดหน้าแรกของคุณเพื่อหลีกเลี่ยงการเห็นโพสต์ของเขาสองครั้ง",
+  "lists.find_users_to_add": "ค้นหาผู้ใช้ที่จะเพิ่ม",
+  "lists.list_members": "สมาชิกของรายการ",
+  "lists.list_members_count": "{count, plural, other {# สมาชิก}}",
+  "lists.list_name": "ชื่อรายการ",
+  "lists.new_list_name": "ชื่อรายการใหม่",
+  "lists.no_lists_yet": "ยังไม่มีรายการ",
+  "lists.no_members_yet": "ยังไม่มีสมาชิก",
+  "lists.no_results_found": "ไม่พบผลลัพธ์",
+  "lists.remove_member": "เอาออก",
   "lists.replies_policy.followed": "ผู้ใช้ใด ๆ ที่ติดตาม",
   "lists.replies_policy.list": "สมาชิกของรายการ",
   "lists.replies_policy.none": "ไม่มีใคร",
+  "lists.save": "บันทึก",
+  "lists.search_placeholder": "ค้นหาผู้คนที่คุณติดตาม",
+  "lists.show_replies_to": "รวมการตอบกลับจากสมาชิกของรายการถึง",
   "load_pending": "{count, plural, other {# รายการใหม่}}",
   "loading_indicator.label": "กำลังโหลด…",
   "media_gallery.hide": "ซ่อน",
@@ -612,44 +638,17 @@
   "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป",
   "notifications_permission_banner.how_to_control": "เพื่อรับการแจ้งเตือนเมื่อ Mastodon ไม่ได้เปิด เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมชนิดของการโต้ตอบที่สร้างการแจ้งเตือนบนเดสก์ท็อปได้อย่างแม่นยำผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งานการแจ้งเตือน",
   "notifications_permission_banner.title": "ไม่พลาดสิ่งใด",
-  "onboarding.action.back": "นำฉันกลับ",
-  "onboarding.actions.back": "นำฉันกลับ",
-  "onboarding.actions.go_to_explore": "นำฉันไปยังกำลังนิยม",
-  "onboarding.actions.go_to_home": "นำฉันไปยังฟีดหน้าแรกของฉัน",
-  "onboarding.compose.template": "สวัสดี #Mastodon!",
   "onboarding.follows.empty": "น่าเสียดาย ไม่สามารถแสดงผลลัพธ์ได้ในตอนนี้ คุณสามารถลองใช้การค้นหาหรือเรียกดูหน้าสำรวจเพื่อค้นหาผู้คนที่จะติดตาม หรือลองอีกครั้งในภายหลัง",
-  "onboarding.follows.lead": "ฟีดหน้าแรกของคุณเป็นวิธีหลักในการสัมผัส Mastodon ยิ่งคุณติดตามผู้คนมากเท่าไร ฟีดหน้าแรกก็จะยิ่งมีการใช้งานและน่าสนใจมากขึ้นเท่านั้น เพื่อช่วยให้คุณเริ่มต้นใช้งาน นี่คือข้อเสนอแนะบางส่วน:",
-  "onboarding.follows.title": "ปรับแต่งฟีดหน้าแรกของคุณ",
   "onboarding.profile.discoverable": "ทำให้โปรไฟล์ของฉันสามารถค้นพบได้",
   "onboarding.profile.discoverable_hint": "เมื่อคุณเลือกรับความสามารถในการค้นพบใน Mastodon โพสต์ของคุณอาจปรากฏในผลลัพธ์การค้นหาและกำลังนิยม และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้คนที่มีความสนใจคล้ายกับคุณ",
   "onboarding.profile.display_name": "ชื่อที่แสดง",
   "onboarding.profile.display_name_hint": "ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ…",
-  "onboarding.profile.lead": "คุณสามารถทำสิ่งนี้ให้เสร็จสมบูรณ์ในภายหลังได้เสมอในการตั้งค่า ที่ซึ่งตัวเลือกการปรับแต่งเพิ่มเติมพร้อมใช้งาน",
   "onboarding.profile.note": "ชีวประวัติ",
   "onboarding.profile.note_hint": "คุณสามารถ @กล่าวถึง ผู้คนอื่น ๆ หรือ #แฮชแท็ก…",
   "onboarding.profile.save_and_continue": "บันทึกและดำเนินการต่อ",
   "onboarding.profile.title": "การตั้งค่าโปรไฟล์",
   "onboarding.profile.upload_avatar": "อัปโหลดรูปภาพโปรไฟล์",
   "onboarding.profile.upload_header": "อัปโหลดส่วนหัวโปรไฟล์",
-  "onboarding.share.lead": "แจ้งให้ผู้คนทราบวิธีที่เขาสามารถค้นหาคุณใน Mastodon!",
-  "onboarding.share.message": "ฉันคือ {username} ใน #Mastodon! มาติดตามฉันที่ {url}",
-  "onboarding.share.next_steps": "ขั้นตอนถัดไปที่เป็นไปได้:",
-  "onboarding.share.title": "แชร์โปรไฟล์ของคุณ",
-  "onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมแบบกระจายศูนย์ที่มีเอกลักษณ์เฉพาะตัว ที่ซึ่งคุณ ไม่ใช่อัลกอริทึม เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:",
-  "onboarding.start.skip": "ไม่ต้องการความช่วยเหลือในการเริ่มต้นใช้งาน?",
-  "onboarding.start.title": "คุณทำสำเร็จแล้ว!",
-  "onboarding.steps.follow_people.body": "การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ",
-  "onboarding.steps.follow_people.title": "ปรับแต่งฟีดหน้าแรกของคุณ",
-  "onboarding.steps.publish_status.body": "กล่าวสวัสดีชาวโลกด้วยข้อความ, รูปภาพ, วิดีโอ หรือการสำรวจความคิดเห็น {emoji}",
-  "onboarding.steps.publish_status.title": "สร้างโพสต์แรกของคุณ",
-  "onboarding.steps.setup_profile.body": "เพิ่มการโต้ตอบของคุณโดยการมีโปรไฟล์ที่ครอบคลุม",
-  "onboarding.steps.setup_profile.title": "ปรับแต่งโปรไฟล์ของคุณ",
-  "onboarding.steps.share_profile.body": "แจ้งให้เพื่อน ๆ ของคุณทราบวิธีค้นหาคุณใน Mastodon",
-  "onboarding.steps.share_profile.title": "แชร์โปรไฟล์ Mastodon ของคุณ",
-  "onboarding.tips.2fa": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถรักษาความปลอดภัยบัญชีของคุณได้โดยตั้งค่าการรับรองความถูกต้องด้วยสองปัจจัยในการตั้งค่าบัญชีของคุณ การรับรองความถูกต้องด้วยสองปัจจัยทำงานร่วมกับแอป TOTP ใด ๆ ที่คุณเลือก ไม่จำเป็นต้องมีหมายเลขโทรศัพท์!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>คุณทราบหรือไม่?</strong> เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ โปรไฟล์บางส่วนที่คุณเจอจะได้รับการโฮสต์ในเซิร์ฟเวอร์อื่น ๆ ที่ไม่ใช่ของคุณ และคุณยังสามารถโต้ตอบกับเขาได้อย่างไร้รอยต่อ! เซิร์ฟเวอร์ของเขาอยู่ในครึ่งหลังของชื่อผู้ใช้ของเขา!",
-  "onboarding.tips.migration": "<strong>คุณทราบหรือไม่?</strong> หากคุณรู้สึกว่า {domain} ไม่ใช่ตัวเลือกเซิร์ฟเวอร์ที่ยอดเยี่ยมสำหรับคุณในอนาคต คุณสามารถย้ายไปยังเซิร์ฟเวอร์ Mastodon อื่นได้โดยไม่สูญเสียผู้ติดตามของคุณ คุณยังสามารถโฮสต์เซิร์ฟเวอร์ของคุณเองได้อีกด้วย!",
-  "onboarding.tips.verification": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถยืนยันบัญชีของคุณได้โดยใส่ลิงก์ไปยังโปรไฟล์ Mastodon ของคุณในเว็บไซต์ของคุณเองและเพิ่มเว็บไซต์ไปยังโปรไฟล์ของคุณ ไม่จำเป็นต้องมีค่าธรรมเนียมหรือเอกสาร!",
   "password_confirmation.exceeds_maxlength": "การยืนยันรหัสผ่านเกินความยาวรหัสผ่านสูงสุดแล้ว",
   "password_confirmation.mismatching": "การยืนยันรหัสผ่านไม่ตรงกัน",
   "picture_in_picture.restore": "นำหน้าต่างย่อยในหน้าต่างหลักกลับมา",
diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json
index d526c271c..a10d20288 100644
--- a/app/javascript/mastodon/locales/tok.json
+++ b/app/javascript/mastodon/locales/tok.json
@@ -1,13 +1,16 @@
 {
   "about.blocks": "ma lawa",
   "about.contact": "toki:",
+  "about.disclaimer": "ilo Masoton la, jan ale li ken kama jo e ona kepeken mani ala, li ken ante e toki ilo ona. kulupu esun Mastodon li jo e nimi ona. kulupu esun Mastodon li nasin lawa gGmbH.",
   "about.domain_blocks.no_reason_available": "mi sona ala e tan",
   "about.domain_blocks.preamble": "ilo Masoton li ken e ni: sina lukin e toki jan pi ma ilo mute. sina ken toki tawa ona lon kulupu ma. taso, ma ni li ken ala e ni tawa ma ni:",
   "about.domain_blocks.silenced.explanation": "sina lukin ala e toki e jan tan ma ni. taso, sina wile la, sina ken ni.",
   "about.domain_blocks.silenced.title": "ken lili lukin",
   "about.domain_blocks.suspended.title": "weka",
   "about.not_available": "lon kulupu ni la sina ken alasa ala e sona ni.",
+  "about.powered_by": "lipu kulupu pi jan lawa mute tan {mastodon}",
   "about.rules": "lawa kulupu",
+  "account.account_note_header": "sona pi sina taso",
   "account.add_or_remove_from_list": "o ante e lipu jan",
   "account.badges.bot": "ilo nanpa li lawa e ni",
   "account.badges.group": "kulupu",
@@ -19,23 +22,27 @@
   "account.copy": "o pali same e linja pi lipu jan",
   "account.direct": "len la o mu e @{name}",
   "account.disable_notifications": "@{name} li toki la o mu ala e mi",
-  "account.domain_blocked": "ma ni li weka tawa sina",
+  "account.domain_blocked": "sina wile ala lukin e ma ni",
   "account.edit_profile": "o ante e lipu mi",
   "account.enable_notifications": "@{name} li toki la o toki e toki ona tawa mi",
   "account.endorse": "lipu jan la o suli e ni",
   "account.featured_tags.last_status_at": "sitelen pini pi jan ni li lon tenpo {date}",
   "account.featured_tags.last_status_never": "toki ala li lon",
+  "account.featured_tags.title": "{name} la kulupu ni pi toki suli li pona",
   "account.follow": "o kute",
   "account.follow_back": "jan ni li kute e sina. o kute",
   "account.followers": "jan kute",
   "account.followers.empty": "jan ala li kute e jan ni",
+  "account.followers_counter": "{count, plural, other {jan {counter} li kute e ona}}",
   "account.following": "sina kute e jan ni",
+  "account.following_counter": "{count, plural, other {ona li kute e jan {counter}}}",
   "account.follows.empty": "jan ni li kute e jan ala",
   "account.go_to_profile": "o tawa lipu jan",
   "account.hide_reblogs": "o lukin ala e pana toki tan @{name}",
   "account.in_memoriam": "jan ni li moli. pona o tawa ona.",
   "account.joined_short": "li kama",
   "account.languages": "sina wile lukin e sitelen pi toki seme",
+  "account.link_verified_on": "{date} la mi sona e ni: jan seme li jo e lipu ni",
   "account.locked_info": "sina wile kute e jan ni la ona o toki e ken",
   "account.media": "sitelen",
   "account.mention": "o toki e jan @{name}",
@@ -44,6 +51,7 @@
   "account.mute_notifications_short": "o kute ala e mu tan jan ni",
   "account.mute_short": "o kute ala",
   "account.muted": "sina len e jan ni",
+  "account.mutual": "jan pona sona",
   "account.no_bio": "lipu li weka",
   "account.open_original_page": "o open e lipu open",
   "account.posts": "toki suli",
@@ -53,6 +61,7 @@
   "account.requested_follow": "{name} li wile kute e sina",
   "account.share": "o pana e lipu jan @{name}",
   "account.show_reblogs": "o lukin e pana toki tan @{name}",
+  "account.statuses_counter": "{count, plural, other {toki {counter}}}",
   "account.unblock": "o weka ala e jan {name}",
   "account.unblock_domain": "o weka ala e ma {domain}",
   "account.unblock_short": "o pini weka",
@@ -61,18 +70,36 @@
   "account.unmute": "o len ala e @{name}",
   "account.unmute_notifications_short": "o kute e mu tan jan ni",
   "account.unmute_short": "o len ala",
+  "account_note.placeholder": "o luka e ni la sona pi sina taso",
   "admin.dashboard.retention.average": "sama",
   "admin.dashboard.retention.cohort": "tenpo mun open",
   "admin.dashboard.retention.cohort_size": "jan sin",
   "alert.rate_limited.message": "tenpo {retry_time, time, medium} la o pali awen",
   "alert.unexpected.message": "pakala li lon",
   "alert.unexpected.title": "pakala a!",
+  "alt_text_badge.title": "toki sona sitelen",
   "announcement.announcement": "toki suli",
+  "annual_report.summary.archetype.booster": "jan ni li alasa e pona",
+  "annual_report.summary.archetype.lurker": "jan ni li lukin taso",
+  "annual_report.summary.archetype.oracle": "jan ni li sona suli",
+  "annual_report.summary.archetype.pollster": "jan ni li wile sona e pilin jan",
+  "annual_report.summary.archetype.replier": "jan ni li toki tawa jan mute",
+  "annual_report.summary.followers.total": "ale la {count}",
+  "annual_report.summary.here_it_is": "toki lili la tenpo sike nanpa {year} li sama ni tawa sina:",
+  "annual_report.summary.highlighted_post.possessive": "tan jan {name}",
+  "annual_report.summary.most_used_hashtag.none": "ala",
+  "annual_report.summary.new_posts.new_posts": "toki suli sin",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "mi toki ala e ni tawa jan Peni.",
+  "annual_report.summary.thanks": "sina jan pi kulupu Masoton la sina pona a!",
+  "attachments_list.unprocessed": "(nasin open)",
   "audio.hide": "o len e kalama",
   "block_modal.show_less": "o lili e lukin",
   "block_modal.show_more": "o mute e lukin",
   "block_modal.they_cant_mention": "ona li ken ala toki e sina li ken ala alasa e sina",
+  "block_modal.they_cant_see_posts": "ona li ken ala lukin e toki sina. sina ken ala lukin e toki ona.",
+  "block_modal.they_will_know": "ona li sona e ni: sina ala e lukin ona.",
   "block_modal.title": "o weka ala weka e jan",
+  "block_modal.you_wont_see_mentions": "nimi ona li lon toki suli la sina lukin ala e toki ni.",
   "boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama",
   "bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina",
   "bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.",
@@ -85,23 +112,32 @@
   "bundle_modal_error.close": "o pini",
   "bundle_modal_error.message": "ilo li wile kama e ijo ni, taso pakala li lon.",
   "bundle_modal_error.retry": "o ni sin",
+  "closed_registrations.other_server_instructions": "kulupu Masoton li jo e jan lawa mute, la sina ken pali e sijelo lon ma ante, li ken lukin e ijo pi ma ni.",
   "closed_registrations_modal.find_another_server": "o alasa e ma ante",
+  "closed_registrations_modal.title": "sina kama lon kulupu Masoton",
   "column.about": "sona",
   "column.blocks": "kulupu pi jan weka",
   "column.bookmarks": "awen toki",
   "column.community": "linja tenpo pi ma ni",
+  "column.create_list": "o pali e kulupu",
+  "column.directory": "o lukin e jan",
+  "column.domain_blocks": "ma pi wile ala lukin",
+  "column.edit_list": "o ante e kulupu",
   "column.favourites": "ijo pona",
   "column.firehose": "toki pi tenpo ni",
   "column.follow_requests": "wile alasa pi jan ante",
   "column.home": "lipu open",
+  "column.list_members": "o ante e kulupu jan",
   "column.lists": "kulupu lipu",
   "column.mutes": "jan len",
+  "column.notifications": "mu pi sona sin",
   "column.pins": "toki sewi",
   "column_back_button.label": "o tawa monsi",
   "column_header.hide_settings": "o len e lawa",
   "column_header.pin": "o sewi",
   "column_header.show_settings": "o lukin e lawa",
   "column_header.unpin": "o sewi ala",
+  "column_search.cancel": "o ala",
   "column_subheading.settings": "ken ilo",
   "community.column_settings.local_only": "toki tan ni taso",
   "community.column_settings.media_only": "sitelen taso",
@@ -157,10 +193,6 @@
   "disabled_account_banner.text": "sina ken ala kepeken e lipu jan sina pi nimi {disabledAccount}.",
   "dismissable_banner.community_timeline": "ni li toki pi tenpo poka tawa ale tan jan lon ma lawa pi nimi {domain}.",
   "dismissable_banner.dismiss": "o weka",
-  "dismissable_banner.explore_links": "ni li toki pi ijo sin ꞏ jan mute li pana e ni lon tenpo suno ni ꞏ sin la jan mute li pana la ni li kama suli",
-  "dismissable_banner.explore_statuses": "suni ni la jan mute li lukin e toki ni. jan mute li wawa e toki li suli e toki la toki ni li lon sewi. toki li sin la toki ni li lon sewi.",
-  "dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.",
-  "dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.",
   "domain_block_modal.block": "o weka e ma",
   "domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
   "domain_pill.server": "ma",
@@ -257,6 +289,7 @@
   "lists.replies_policy.followed": "jan kute ale",
   "lists.replies_policy.list": "jan pi kulupu ni taso",
   "lists.replies_policy.none": "jan ala",
+  "lists.search_placeholder": "o alasa lon kulupu jan ni: sina kute e ona",
   "load_pending": "{count, plural, other {ijo sin #}}",
   "loading_indicator.label": "ni li kama…",
   "mute_modal.title": "sina wile ala wile kute e jan ni?",
@@ -291,15 +324,9 @@
   "notifications.filter.favourites": "ijo pona",
   "notifications.filter.mentions": "toki pi toki sina",
   "notifications.filter.polls": "pana lon pana ni",
-  "onboarding.action.back": "o tawa monsi",
-  "onboarding.actions.back": "o tawa monsi",
-  "onboarding.compose.template": "toki a, #Mastodon o!",
+  "onboarding.follows.search": "o alasa",
   "onboarding.profile.display_name": "nimi tawa jan ante",
   "onboarding.profile.note": "sona sina",
-  "onboarding.share.lead": "o toki lon nasin Masoton pi alasa sina tawa jan",
-  "onboarding.share.message": "ilo #Mastodon la mi jan {username} a! o kute e mi lon ni: {url}",
-  "onboarding.start.title": "sina o kama pona a!",
-  "onboarding.tips.migration": "<strong>sina sona ala sona e ni?</strong> tenpo kama la sina pilin ike tawa ma {domain} la, sina ken tawa ma ante lon ilo Masoton. jan li kute e sina la jan ni li awen kute e sina. kin la sina ken lawa e ma pi sina taso a!",
   "poll.closed": "ona li pini",
   "poll.total_people": "{count, plural, other {jan #}}",
   "poll.total_votes": "{count, plural, other {pana #}}",
@@ -336,10 +363,17 @@
   "report.unfollow": "o pini kute e {name}",
   "report_notification.categories.legal": "ike tawa nasin lawa",
   "report_notification.categories.other": "ante",
+  "search.no_recent_searches": "alasa ala li lon tenpo poka",
   "search.placeholder": "o alasa",
   "search.quick_action.go_to_account": "o tawa lipu jan {x}",
   "search_popout.language_code": "nimi toki kepeken nasin ISO",
+  "search_popout.recent": "alasa pi tenpo poka",
+  "search_popout.specific_date": "tenpo suno wan",
+  "search_popout.user": "jan",
+  "search_results.accounts": "lipu jan",
   "search_results.all": "ale",
+  "search_results.hashtags": "kulupu pi toki suli",
+  "search_results.nothing_found": "nimi alasa ni la mi lukin e ala",
   "search_results.see_all": "ale",
   "search_results.statuses": "toki",
   "search_results.title": "o alasa e {q}",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 7851da5ec..1cf5a3db1 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "İstenen sayfa bulunamadı. Adres çubuğundaki URL'nin doğru olduğundan emin misiniz?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Kapat",
-  "bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.",
+  "bundle_modal_error.message": "Bu ekran yüklenirken bir şeyler ters gitti.",
   "bundle_modal_error.retry": "Tekrar deneyin",
   "closed_registrations.other_server_instructions": "Mastodon merkeziyetsiz olduğu için, başka bir sunucuda bir hesap oluşturabilir ve bu sunucuyla etkileşimde bulunmaya devam edebilirsiniz.",
   "closed_registrations_modal.description": "{domain} adresinde hesap oluşturmak şu an mümkün değil ancak unutmayın ki Mastodon kullanmak için özellikle {domain} adresinde hesap oluşturmanız gerekmez.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Sabitle",
   "column_header.show_settings": "Ayarları göster",
   "column_header.unpin": "Sabitlemeyi kaldır",
+  "column_search.cancel": "İptal",
   "column_subheading.settings": "Ayarlar",
   "community.column_settings.local_only": "Sadece yerel",
   "community.column_settings.media_only": "Sadece medya",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "{disabledAccount} hesabınız şu an devre dışı.",
   "dismissable_banner.community_timeline": "Bunlar, {domain} sunucusunda hesabı olanların yakın zamandaki herkese açık gönderileridir.",
   "dismissable_banner.dismiss": "Yoksay",
-  "dismissable_banner.explore_links": "Bunlar şimdilerde sosyal ağlarda en çok paylaşılan haberler. Farklı kişilerin yayınladığı daha yeni haberler daha üst sıralarda yer alır.",
-  "dismissable_banner.explore_statuses": "Bunlar, sosyal ağ genelinde bugün ilgi gören gönderiler. Daha çok yinelenen ve favorilenen yeni gönderiler daha üst sıralarda yer alır.",
-  "dismissable_banner.explore_tags": "Bu etiketler, merkeziyetsiz ağda bulunan bu ve diğer sunuculardaki insanların şimdilerde ilgisini çekiyor.",
-  "dismissable_banner.public_timeline": "Bunlar, {domain} üzerindeki insanların, sosyal ağ da takip ettiği insanlarca gönderilen en son ve herkese açık gönderilerdir.",
+  "dismissable_banner.explore_links": "Bu haberler şimdilerde sosyal ağlarda en çok paylaşılıyor. Farklı kişilerin yayınladığı daha yeni haberler daha üst sıralarda yer alır.",
+  "dismissable_banner.explore_statuses": "Fediverse genelinden bu gönderiler bugün ilgi gören gönderiler. Daha çok yinelenen ve favorilenen yeni gönderiler daha üst sıralarda yer alır.",
+  "dismissable_banner.explore_tags": "Bu etiketler, bugün fediverse üzerinde dikkat çekiyorlar. Çok farklı kişiler tarafından kullanılan etiketler üst sıralarda görünür.",
+  "dismissable_banner.public_timeline": "Bunlar, {domain} üzerindeki insanların takip ettiği fediverse üzerindeki kişilerin en son ve herkese açık gönderileridir.",
   "domain_block_modal.block": "Sunucuyu engelle",
   "domain_block_modal.block_account_instead": "Bunun yerine {name} hesabını engelle",
   "domain_block_modal.they_can_interact_with_old_posts": "Bu sunucudan kişiler eski gönderilerinizle etkileşebilirler.",
@@ -362,6 +363,7 @@
   "footer.status": "Durum",
   "generic.saved": "Kaydet",
   "getting_started.heading": "Başlarken",
+  "hashtag.admin_moderation": "#{name} için denetim arayüzünü açın",
   "hashtag.column_header.tag_mode.all": "ve {additional}",
   "hashtag.column_header.tag_mode.any": "ya da {additional}",
   "hashtag.column_header.tag_mode.none": "{additional} olmadan",
@@ -492,6 +494,7 @@
   "lists.replies_policy.none": "Hiç kimse",
   "lists.save": "Kaydet",
   "lists.search_placeholder": "Takip ettiğiniz kişilerde arama yapın",
+  "lists.show_replies_to": "Liste üyelerinin yanıtlarını içer",
   "load_pending": "{count, plural, one {# yeni öğe} other {# yeni öğe}}",
   "loading_indicator.label": "Yükleniyor…",
   "media_gallery.hide": "Gizle",
@@ -648,44 +651,21 @@
   "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir",
   "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.",
   "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın",
-  "onboarding.action.back": "Beni geri götür",
-  "onboarding.actions.back": "Beni geri götür",
-  "onboarding.actions.go_to_explore": "Öne çıkanları gör",
-  "onboarding.actions.go_to_home": "Ana akışına git",
-  "onboarding.compose.template": "Merhaba #Mastodon!",
+  "onboarding.follows.back": "Geri",
+  "onboarding.follows.done": "Tamamlandı",
   "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.",
-  "onboarding.follows.lead": "Kendi ana akışınızı siz düzenliyorsunuz. Siz daha fazla insanı takip ettikçe, daha etkin ve ilgi çekici olacaktır. Bu profiller iyi bir başlangıç olabilir, isterseniz izlemeyi daha sonra bırakabilirsiniz:",
-  "onboarding.follows.title": "Mastodon'da Popüler",
+  "onboarding.follows.search": "Ara",
+  "onboarding.follows.title": "Başlamak için insanları takip edin",
   "onboarding.profile.discoverable": "Profilimi keşfedilebilir yap",
   "onboarding.profile.discoverable_hint": "Mastodon'da keşfedilebilirliği etkinleştirdiğinizde, gönderileriniz arama sonuçlarında ve trendlerde görünebilir aynı zamanda profiliniz sizinle benzer ilgi alanlarına sahip kişilere önerilebilir.",
   "onboarding.profile.display_name": "Görünen isim",
   "onboarding.profile.display_name_hint": "Tam adınız veya kullanıcı adınız…",
-  "onboarding.profile.lead": "Bunu her zaman daha sonra ayarlardan tamamlayabilirsiniz, hatta daha fazla özelleştirme seçeneğine de ulaşabilirsiniz.",
   "onboarding.profile.note": "Kişisel bilgiler",
   "onboarding.profile.note_hint": "Diğer insanlara @değinebilir veya #etiketler kullanabilirsiniz…",
   "onboarding.profile.save_and_continue": "Kaydet ve ilerle",
   "onboarding.profile.title": "Profilini ayarla",
   "onboarding.profile.upload_avatar": "Profil resmi yükle",
   "onboarding.profile.upload_header": "Profil başlığı yükle",
-  "onboarding.share.lead": "Kullanıcılara Mastodon'da size nasıl ulaşabileceklerini ifade edin!",
-  "onboarding.share.message": "#Mastodon'da kullanıcı adım {username}! Beni takip etmek için {url} bağlantısını kullanın",
-  "onboarding.share.next_steps": "Olası sonraki adımlar:",
-  "onboarding.share.title": "Profilinizi paylaşın",
-  "onboarding.start.lead": "Yeni Mastodon hesabınız kullanıma hazır. Ondan nasıl yararlanabilirsiniz:",
-  "onboarding.start.skip": "Şimdilik bunların hepsini atlamak mı istiyorsunuz?",
-  "onboarding.start.title": "Başardınız!",
-  "onboarding.steps.follow_people.body": "Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç kullacılarla dolduralım.",
-  "onboarding.steps.follow_people.title": "{count, plural, one {Bir kişiyi} other {# kişiyi}} takip edin",
-  "onboarding.steps.publish_status.body": "Dünyaya merhaba deyin.",
-  "onboarding.steps.publish_status.title": "İlk gönderinizi oluşturun",
-  "onboarding.steps.setup_profile.body": "Diğer kişiler muhtemelen dolu bir profille etkileşecektir.",
-  "onboarding.steps.setup_profile.title": "Profilinizi özelleştirin",
-  "onboarding.steps.share_profile.body": "Arkadaşlarınıza Mastodon'da size nasıl ulaşabileceklerini söyleyin!",
-  "onboarding.steps.share_profile.title": "Profilinizi paylaşın",
-  "onboarding.tips.2fa": "<strong>Biliyor muydunuz?</strong> Hesabınızı, hesap ayarlarında iki aşamalı doğrılamayı ayarlayarak güvenli kılabilirsiniz. Sizin seçiminiz olan herhangi bir İki Faktörlü TOTP uygulamasıyla çalışır, telefon numarası da gerekmiyor!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Biliyor muydunuz?</strong> Mastodon ademi merkeziyetçi olduğu için, karşılaştığınız bazı profiller sizinkinden farklı bir sunucuda barındırılacaktır. Buna rağmen onlarla sorunsuz bir şekilde etkileşebilirsiniz! Sunucuları, kullanıcı adlarının ikinci yarısıdır!",
-  "onboarding.tips.migration": "<strong>Biliyor muydunuz?</strong> Eğer gelecekte {domain} sunucusunu çok iyi bulmazsanız, takipçilerinizi kaybetmeden başka bir Mastodon sunucusuna taşınabilirsiniz. Kendi sunucunuzu bile oluşturabilirsiniz!",
-  "onboarding.tips.verification": "<strong>Biliyor muydunuz?</strong> Hesabınızı, kendi web sitenize Mastodon profilinize bir bağlantı koyarak, sonra da web sitenizin bağlantısını profilinize ekleyerek doğrulayabilirsiniz. Ne ücret ne de bir belge gerekiyor!",
   "password_confirmation.exceeds_maxlength": "Parola onayı azami parola uzunluğunu aşıyor",
   "password_confirmation.mismatching": "Parola onayı eşleşmiyor",
   "picture_in_picture.restore": "Onu geri koy",
diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json
index 07b9decc1..6b0757f6b 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -82,7 +82,6 @@
   "bundle_column_error.routing.body": "Сорау бите табылмады. URL адресы дөрес күрсәтелгәненә ышанасызмы?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Ябу",
-  "bundle_modal_error.message": "Бу компонентны Йөкләгәндә нәрсәдер дөрес булмаган.",
   "bundle_modal_error.retry": "Тагын сынап кара",
   "closed_registrations.other_server_instructions": "Mastodon үзәкләштерелмәгәнгә, сез бүтән серверда хисап язмасы булдыра аласыз һәм аның белән аралаша аласыз.",
   "closed_registrations_modal.description": "Хисап язмасы булдыру {domain} бу хәзерге вакытта мөмкин түгел, ләкин зинһар, онытмагыз, сезгә махсус хисап кирәк түгел {domain} Мастодонны куллану өчен.",
@@ -159,8 +158,6 @@
   "disabled_account_banner.text": "Сезнең хисап {disabledAccount} хәзерге вакытта инвалид.",
   "dismissable_banner.community_timeline": "Бу счетлары урнаштырылган кешеләрдән иң соңгы җәмәгать хәбәрләре {domain}.",
   "dismissable_banner.dismiss": "Ябу",
-  "dismissable_banner.explore_links": "Бу яңалыклар турында хәзерге вакытта кешеләр һәм башка үзәкләштерелмәгән челтәр серверларында сөйләшәләр.",
-  "dismissable_banner.explore_tags": "Бу хэштеглар хәзерге вакытта үзәкләштерелмәгән челтәрнең бүтән серверларында кешеләр арасында кызыксыну уята.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "Менә ул нинди булыр:",
   "emoji_button.activity": "Активлык",
@@ -311,25 +308,6 @@
   "notifications.group": "{count} искәртү",
   "notifications_permission_banner.enable": "Эш өстәле искәртүләрен кабызу",
   "notifications_permission_banner.title": "Әйберне мәңге югалтмаска",
-  "onboarding.action.back": "Кире кайту",
-  "onboarding.actions.back": "Кире кайту",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "Сәлам #Mastodon!",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.share.message": "Мин #Mastodon-да {username} кулланучы исеме! Миңа иярү өчен {url} адресы кулланыгыз",
-  "onboarding.share.next_steps": "Мөмкин булган киләсе адымнар:",
-  "onboarding.share.title": "Профилегезне уртаклашу",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "picture_in_picture.restore": "Кире кайтару",
   "poll.closed": "Ябык",
   "poll.refresh": "Яңарту",
diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json
index 7e7d6836d..d6e4142f0 100644
--- a/app/javascript/mastodon/locales/ug.json
+++ b/app/javascript/mastodon/locales/ug.json
@@ -16,8 +16,6 @@
   "compose_form.spoiler.marked": "Text is hidden behind warning",
   "compose_form.spoiler.unmarked": "Text is not hidden",
   "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "empty_column.account_timeline": "No toots here!",
   "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
@@ -60,19 +58,6 @@
   "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
   "notification.reblog": "{name} boosted your status",
   "notifications.column_settings.status": "New toots:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index a88c58835..d68eddc5f 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Запитувана сторінка не знайдена. Ви впевнені, що URL-адреса у панелі адрес правильна?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Закрити",
-  "bundle_modal_error.message": "Щось пішло не так під час завантаження цього компоненту.",
+  "bundle_modal_error.message": "Щось пішло не так під час завантаження цього екрану.",
   "bundle_modal_error.retry": "Спробувати ще раз",
   "closed_registrations.other_server_instructions": "Оскільки Mastodon децентралізований, ви можете створити обліковий запис на іншому сервері й досі взаємодіяти з ним.",
   "closed_registrations_modal.description": "Створення облікового запису на {domain} наразі неможливе, але майте на увазі, що вам не потрібен обліковий запис саме на {domain}, щоб використовувати Mastodon.",
@@ -161,6 +161,7 @@
   "column_header.pin": "Закріпити",
   "column_header.show_settings": "Показати налаштування",
   "column_header.unpin": "Відкріпити",
+  "column_search.cancel": "Скасувати",
   "column_subheading.settings": "Налаштування",
   "community.column_settings.local_only": "Лише локальні",
   "community.column_settings.media_only": "Лише з медіа",
@@ -234,10 +235,6 @@
   "disabled_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений.",
   "dismissable_banner.community_timeline": "Це останні публічні дописи від людей, чиї облікові записи розміщені на {domain}.",
   "dismissable_banner.dismiss": "Відхилити",
-  "dismissable_banner.explore_links": "Ці новини, які сьогодні широко поширені на цьому та інших серверах. Новіші новини, написані різними людьми, мають вищий рейтинг.",
-  "dismissable_banner.explore_statuses": "Ці дописи з цього та інших серверів децентралізованої мережі зараз набирають популярності на цьому сервері. Новіші дописи з частішим поширенням та додаванням до вподобаного мають вищий рейтинг.",
-  "dismissable_banner.explore_tags": "Ці хештеги зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі. Хештеги, які використовуються більшою кількістю людей, мають вищий рейтинг.",
-  "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей в соціальній мережі, на які підписані люди в {domain}.",
   "domain_block_modal.block": "Блокувати сервер",
   "domain_block_modal.block_account_instead": "Блокувати @{name} натомість",
   "domain_block_modal.they_can_interact_with_old_posts": "Люди з цього сервера можуть взаємодіяти зі своїми старими дописами.",
@@ -361,6 +358,7 @@
   "footer.status": "Статус",
   "generic.saved": "Збережено",
   "getting_started.heading": "Розпочати",
+  "hashtag.admin_moderation": "Відкрити інтерфейс модерації для #{name}",
   "hashtag.column_header.tag_mode.all": "та {additional}",
   "hashtag.column_header.tag_mode.any": "або {additional}",
   "hashtag.column_header.tag_mode.none": "без {additional}",
@@ -627,44 +625,21 @@
   "notifications_permission_banner.enable": "Увімкнути сповіщення стільниці",
   "notifications_permission_banner.how_to_control": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.",
   "notifications_permission_banner.title": "Не проґавте нічого",
-  "onboarding.action.back": "Повернутися назад",
-  "onboarding.actions.back": "Повернутися назад",
-  "onboarding.actions.go_to_explore": "Переглянути тенденції",
-  "onboarding.actions.go_to_home": "Перейти до вашої домашньої стрічки",
-  "onboarding.compose.template": "Привіт #Mastodon!",
+  "onboarding.follows.back": "Назад",
+  "onboarding.follows.done": "Готово",
   "onboarding.follows.empty": "На жаль, жоден результат не може бути показаний просто зараз. Ви можете спробувати скористатися пошуком або переглядом сторінки огляду, щоб знайти людей для слідкування або повторіть спробу пізніше.",
-  "onboarding.follows.lead": "Ваша домашня стрічка - основний спосіб роботи Mastodon. Чим більше людей, які ви підписані, тим активнішою і цікавою. Ось деякі пропозиції на початок:",
-  "onboarding.follows.title": "Персоналізуйте домашню стрічку",
+  "onboarding.follows.search": "Пошук",
+  "onboarding.follows.title": "Слідкуйте за людьми, щоб почати",
   "onboarding.profile.discoverable": "Зробити мій профіль видимим",
   "onboarding.profile.discoverable_hint": "Якщо ви погоджуєтеся на видимість у Mastodon, ваші дописи можуть з'являтися в результатах пошуку і трендах, і ваш профіль може бути запропоновано людям зі схожими з вашими інтересами.",
   "onboarding.profile.display_name": "Видиме ім'я",
   "onboarding.profile.display_name_hint": "Ваше повне ім'я або ваш псевдонім…",
-  "onboarding.profile.lead": "Ви завжди можете завершити це пізніше в Налаштуваннях, де доступно ще більше опцій налаштування.",
   "onboarding.profile.note": "Біографія",
   "onboarding.profile.note_hint": "Ви можете @згадувати інших людей або #гештеґи…",
   "onboarding.profile.save_and_continue": "Зберегти і продовжити",
   "onboarding.profile.title": "Налаштування профілю",
   "onboarding.profile.upload_avatar": "Завантажити зображення профілю",
   "onboarding.profile.upload_header": "Завантажити заголовок профілю",
-  "onboarding.share.lead": "Розкажіть людям про те, як вони можуть знайти вас на Mastodon!",
-  "onboarding.share.message": "Я {username} на #Mastodon! Стежте за мною на {url}",
-  "onboarding.share.next_steps": "Можливі такі кроки:",
-  "onboarding.share.title": "Поділитися своїм профілем",
-  "onboarding.start.lead": "Тепер ви — частина Mastodon, унікальної децентралізованої платформи соціальних медіа, де ви, а не алгоритми керують вашими вподобаннями. Розпочнімо роботу:",
-  "onboarding.start.skip": "Хочете пропустити?",
-  "onboarding.start.title": "У вас вийшло!",
-  "onboarding.steps.follow_people.body": "Ви керуєте головною стрічкою. Заповнюйте її цікавими людьми.",
-  "onboarding.steps.follow_people.title": "Персоналізуйте домашню стрічку",
-  "onboarding.steps.publish_status.body": "Привітайтеся зі світом, за допомогою тексту, світлин, відео або опитувань {emoji}",
-  "onboarding.steps.publish_status.title": "Напишіть свій перший допис",
-  "onboarding.steps.setup_profile.body": "Інші, ймовірно, швидше взаємодіятимуть з вами, якщо ви заповните профіль.",
-  "onboarding.steps.setup_profile.title": "Персоналізуйте свій профіль",
-  "onboarding.steps.share_profile.body": "Розкажіть друзям, як знайти вас на Mastodon",
-  "onboarding.steps.share_profile.title": "Поділитися своїм профілем Mastodon",
-  "onboarding.tips.2fa": "<strong>Чи знаєте ви?</strong> Ви можете захистити свій обліковий запис, налаштувавши двофакторну автентифікацію в налаштуваннях свого облікового запису. Це працює з будь-яким TOTP-застосунком, без потреби номера телефону!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Чи знаєте ви?</strong> Оскільки Mastodon децентралізований, деякі профілі, які ви відвідуєте, будуть розміщені на інших серверах. І все ж ви можете взаємодіяти з ними! Назва їхнього сервера розміщена у другій половині імені!",
-  "onboarding.tips.migration": "<strong>Чи знаєте ви?</strong> Якщо ви відчуваєте, що {domain} не найкращий вибір сервера в майбутньому, ви можете перейти на інший сервер Mastodon, не втративши при цьому своїх підписників. Ви навіть можете створити власний сервер!",
-  "onboarding.tips.verification": "<strong>Чи знаєте ви?</strong> Ви можете перевірити свій обліковий запис, розмістивши посилання на ваш профіль Mastodon на вашому вебсайті та додавши сайт до вашого профілю. Без плати чи документів!",
   "password_confirmation.exceeds_maxlength": "Підтвердження пароля перевищує максимально допустиму довжину пароля",
   "password_confirmation.mismatching": "Підтвердження пароля не збігається",
   "picture_in_picture.restore": "Повернути назад",
diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json
index 476b8c2af..1d7a7b909 100644
--- a/app/javascript/mastodon/locales/ur.json
+++ b/app/javascript/mastodon/locales/ur.json
@@ -77,7 +77,6 @@
   "bundle_column_error.return": "واپس گھر جاؤ",
   "bundle_column_error.routing.title": "۴۰۴",
   "bundle_modal_error.close": "بند کریں",
-  "bundle_modal_error.message": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.",
   "bundle_modal_error.retry": "دوبارہ کوشش کریں",
   "column.about": "متعلق",
   "column.blocks": "مسدود صارفین",
@@ -141,8 +140,6 @@
   "directory.new_arrivals": "نئے آنے والے",
   "directory.recently_active": "حال میں میں ایکٹیو",
   "dismissable_banner.dismiss": "برخاست کریں",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "embed.preview": "یہ اس طرح نظر آئے گا:",
   "emoji_button.activity": "سرگرمی",
@@ -241,19 +238,6 @@
   "notifications.clear_confirmation": "کیا آپ واقعی اپنی تمام اطلاعات کو صاف کرنا چاہتے ہیں؟",
   "notifications.column_settings.alert": "ڈیسک ٹاپ اطلاعات",
   "notifications.column_settings.status": "New toots:",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json
index dd67fc6c8..53794af36 100644
--- a/app/javascript/mastodon/locales/uz.json
+++ b/app/javascript/mastodon/locales/uz.json
@@ -81,7 +81,6 @@
   "bundle_column_error.routing.body": "Soʻralgan sahifani topib boʻlmadi. Manzil satridagi URL to'g'ri ekanligiga ishonchingiz komilmi?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Yopish",
-  "bundle_modal_error.message": "Ushbu mahsulotni qayta belgilashda xatolik yuz berdi.",
   "bundle_modal_error.retry": "Qayta urinib ko'rish",
   "closed_registrations.other_server_instructions": "Mastodon markazlashtirilmaganligi sababli, siz boshqa serverda hisob yaratishingiz va u bilan o'zaro aloqada bo'lishingiz mumkin.",
   "closed_registrations_modal.description": "{domain} da hisob yaratish hozircha imkonsiz, lekin Mastodondan foydalanish uchun maxsus {domain} hisob qaydnomasi kerak emasligini yodda tuting.",
@@ -155,8 +154,6 @@
   "disabled_account_banner.text": "{disabledAccount} hisobingiz hozirda oʻchirib qoʻyilgan.",
   "dismissable_banner.community_timeline": "Bular akkauntlari {domain} tomonidan joylashtirilgan odamlarning eng soʻnggi ochiq postlari.",
   "dismissable_banner.dismiss": "Bekor qilish",
-  "dismissable_banner.explore_links": "Ushbu yangiliklar haqida hozirda markazlashtirilmagan tarmoqning ushbu va boshqa serverlarida odamlar gaplashmoqda.",
-  "dismissable_banner.explore_tags": "Ushbu hashtaglar hozirda markazlashtirilmagan tarmoqning ushbu va boshqa serverlarida odamlar orasida qiziqish uyg'otmoqda.",
   "embed.instructions": "Quyidagi kodni nusxalash orqali ushbu postni veb-saytingizga joylashtiring.",
   "embed.preview": "Bu qanday ko'rinishda bo'ladi:",
   "emoji_button.activity": "Faoliyat",
@@ -316,19 +313,6 @@
   "not_signed_in_indicator.not_signed_in": "Ushbu manbaga kirish uchun tizimga kirishingiz kerak.",
   "notification.own_poll": "So‘rovingiz tugadi",
   "notification.reblog": "{name} boosted your status",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "privacy.change": "Adjust status privacy",
   "report.placeholder": "Type or paste additional comments",
   "report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 4ba36e054..0c1795302 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "Không thể tìm thấy trang cần tìm. Bạn có chắc URL trong thanh địa chỉ là chính xác?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Đóng",
-  "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.",
+  "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải màn hình này.",
   "bundle_modal_error.retry": "Thử lại",
   "closed_registrations.other_server_instructions": "Tạo tài khoản trên máy chủ khác và vẫn tương tác với máy chủ này.",
   "closed_registrations_modal.description": "{domain} hiện tắt đăng ký, nhưng hãy lưu ý rằng bạn không cần một tài khoản riêng trên {domain} để sử dụng Mastodon.",
@@ -162,6 +162,7 @@
   "column_header.pin": "Ghim",
   "column_header.show_settings": "Hiện bộ lọc",
   "column_header.unpin": "Không ghim",
+  "column_search.cancel": "Hủy bỏ",
   "column_subheading.settings": "Cài đặt",
   "community.column_settings.local_only": "Chỉ máy chủ của bạn",
   "community.column_settings.media_only": "Chỉ hiện tút có media",
@@ -362,6 +363,7 @@
   "footer.status": "Trạng thái",
   "generic.saved": "Đã lưu",
   "getting_started.heading": "Quản lý",
+  "hashtag.admin_moderation": "Mở giao diện quản trị #{name}",
   "hashtag.column_header.tag_mode.all": "và {additional}",
   "hashtag.column_header.tag_mode.any": "hoặc {additional}",
   "hashtag.column_header.tag_mode.none": "mà không {additional}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình",
   "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.",
   "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào",
-  "onboarding.action.back": "Quay lại",
-  "onboarding.actions.back": "Quay lại",
-  "onboarding.actions.go_to_explore": "Xem những gì đang thịnh hành",
-  "onboarding.actions.go_to_home": "Đến trang chủ",
-  "onboarding.compose.template": "Xin chào #Mastodon!",
+  "onboarding.follows.back": "Quay lại",
+  "onboarding.follows.done": "Xong",
   "onboarding.follows.empty": "Không có kết quả có thể được hiển thị lúc này. Bạn có thể thử sử dụng tính năng tìm kiếm hoặc duyệt qua trang khám phá để tìm những người theo dõi hoặc thử lại sau.",
-  "onboarding.follows.lead": "Bạn quản lý bảng tin của riêng bạn. Bạn càng theo dõi nhiều người, nó sẽ càng sôi động và thú vị. Để bắt đầu, đây là vài gợi ý:",
-  "onboarding.follows.title": "Thịnh hành trên Mastodon",
+  "onboarding.follows.search": "Tìm kiếm",
+  "onboarding.follows.title": "Tìm người để theo dõi",
   "onboarding.profile.discoverable": "Bật khám phá cho hồ sơ của tôi",
   "onboarding.profile.discoverable_hint": "Khi bạn bật khám phá trên Mastodon, các tút của bạn có thể xuất hiện trong kết quả tìm kiếm và xu hướng, đồng thời hồ sơ của bạn sẽ được đề xuất cho những người có cùng sở thích với bạn.",
   "onboarding.profile.display_name": "Biệt danh",
   "onboarding.profile.display_name_hint": "Tên đầy đủ hoặc biệt danh đều được…",
-  "onboarding.profile.lead": "Bạn có thể cài đặt lại trong phần cài đặt, nơi thậm chí còn có nhiều tùy chọn hơn.",
   "onboarding.profile.note": "Giới thiệu",
   "onboarding.profile.note_hint": "Bạn có thể @aiđó hoặc #hashtags…",
   "onboarding.profile.save_and_continue": "Lưu và tiếp tục",
   "onboarding.profile.title": "Thiết lập hồ sơ",
   "onboarding.profile.upload_avatar": "Tải lên ảnh đại diện",
   "onboarding.profile.upload_header": "Tải lên ảnh bìa",
-  "onboarding.share.lead": "Hãy cho mọi người biết làm thế nào họ có thể tìm thấy bạn trên Mastodon!",
-  "onboarding.share.message": "Tôi là {username} trên #Mastodon! Hãy theo dõi tôi tại {url}",
-  "onboarding.share.next_steps": "Các bước kế tiếp:",
-  "onboarding.share.title": "Chia sẻ hồ sơ",
-  "onboarding.start.lead": "Tài khoản Mastodon mới của bạn đã sẵn sàng hoạt động. Đây là cách bạn có thể tận dụng tối đa nó:",
-  "onboarding.start.skip": "Muốn bỏ qua luôn?",
-  "onboarding.start.title": "Xong rồi bạn!",
-  "onboarding.steps.follow_people.body": "Theo dõi những người thú vị trên Mastodon.",
-  "onboarding.steps.follow_people.title": "Cá nhân hóa trang chủ",
-  "onboarding.steps.publish_status.body": "Chào cộng đồng bằng lời nói, ảnh hoặc video {emoji}",
-  "onboarding.steps.publish_status.title": "Đăng tút đầu tiên",
-  "onboarding.steps.setup_profile.body": "Tạo sự tương tác bằng một hồ sơ hoàn chỉnh.",
-  "onboarding.steps.setup_profile.title": "Tùy biến hồ sơ",
-  "onboarding.steps.share_profile.body": "Hãy để bạn bè của bạn biết cách tìm thấy bạn trên Mastodon!",
-  "onboarding.steps.share_profile.title": "Chia sẻ hồ sơ Mastodon của bạn",
-  "onboarding.tips.2fa": "<strong>Bạn có biết?</strong> Bạn có thể bảo mật tài khoản của mình bằng cách thiết lập xác thực hai yếu tố trong cài đặt tài khoản của mình. Nó hoạt động với bất kỳ ứng dụng OTP nào bạn chọn, không cần số điện thoại!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>Bạn có biết?</strong> Vì Mastodon liên hợp, một số hồ sơ bạn gặp sẽ được lưu trữ trên các máy chủ không giống bạn. Tuy nhiên, bạn có thể tương tác với họ một cách liền mạch! Máy chủ của họ nằm ở nửa sau tên người dùng của họ!",
-  "onboarding.tips.migration": "<strong>Bạn có biết?</strong> Nếu bạn thấy {domain} không phải là lựa chọn máy chủ tuyệt vời cho bạn trong tương lai, bạn có thể chuyển sang máy chủ Mastodon khác mà không bị mất người theo dõi. Bạn thậm chí có thể lưu trữ máy chủ của riêng bạn!",
-  "onboarding.tips.verification": "<strong>Bạn có biết?</strong> Bạn có thể xác minh tài khoản của mình bằng cách đặt liên kết tới hồ sơ Mastodon trên trang web của riêng bạn và thêm trang web vào hồ sơ của bạn. Không có lệ phí hoặc tài liệu cần thiết!",
   "password_confirmation.exceeds_maxlength": "Mật khẩu vượt quá độ dài mật khẩu tối đa",
   "password_confirmation.mismatching": "Mật khẩu không trùng khớp",
   "picture_in_picture.restore": "Hiển thị bình thường",
diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json
index 73a626d59..80ac67940 100644
--- a/app/javascript/mastodon/locales/zgh.json
+++ b/app/javascript/mastodon/locales/zgh.json
@@ -56,8 +56,6 @@
   "confirmations.unfollow.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⴰⴹⴼⴼⵓⵕ ⵉ {name}?",
   "conversation.delete": "ⴽⴽⵙ ⴰⵎⵙⴰⵡⴰⵍ",
   "conversation.with": "ⴰⴽⴷ {names}",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
   "embed.instructions": "Embed this status on your website by copying the code below.",
   "emoji_button.flags": "ⵉⵛⵏⵢⴰⵍⵏ",
   "emoji_button.food": "ⵓⵜⵛⵉ & ⵜⵉⵙⵙⵉ",
@@ -125,19 +123,6 @@
   "notifications.column_settings.status": "New toots:",
   "notifications.filter.all": "ⴰⴽⴽⵯ",
   "notifications.group": "{count} ⵜⵏⵖⵎⵉⵙⵉⵏ",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
   "poll.closed": "ⵉⵜⵜⵓⵔⴳⵍ",
   "poll.total_people": "{count, plural, one {# ⵓⴼⴳⴰⵏ} other {# ⵉⴼⴳⴰⵏⵏ}}",
   "poll.total_votes": "{count, plural, one {# ⵓⵙⵜⵜⴰⵢ} other {# ⵉⵙⵜⵜⴰⵢⵏ}}",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 16d32417c..937aebeaa 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -26,8 +26,8 @@
   "account.domain_blocked": "域名已屏蔽",
   "account.edit_profile": "修改个人资料",
   "account.enable_notifications": "当 @{name} 发布嘟文时通知我",
-  "account.endorse": "在个人资料中推荐此用户",
-  "account.featured_tags.last_status_at": "最近发言于 {date}",
+  "account.endorse": "在账户页推荐此用户",
+  "account.featured_tags.last_status_at": "上次发言于 {date}",
   "account.featured_tags.last_status_never": "暂无嘟文",
   "account.featured_tags.title": "{name} 的精选标签",
   "account.follow": "关注",
@@ -43,8 +43,8 @@
   "account.in_memoriam": "谨此悼念。",
   "account.joined_short": "加入于",
   "account.languages": "更改订阅语言",
-  "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} 的新账号是:",
@@ -60,9 +60,9 @@
   "account.report": "举报 @{name}",
   "account.requested": "正在等待对方同意。点击取消发送关注请求",
   "account.requested_follow": "{name} 向你发送了关注请求",
-  "account.share": "分享 @{name} 的个人资料页",
+  "account.share": "分享 @{name} 的账户页",
   "account.show_reblogs": "显示来自 @{name} 的转嘟",
-  "account.statuses_counter": "{count, plural, other {{counter} 条嘟文}}",
+  "account.statuses_counter": "{count, plural, other {{counter} 嘟文}}",
   "account.unblock": "取消屏蔽 @{name}",
   "account.unblock_domain": "取消屏蔽 {domain} 域名",
   "account.unblock_short": "取消屏蔽",
@@ -77,7 +77,7 @@
   "admin.dashboard.retention.average": "平均",
   "admin.dashboard.retention.cohort": "注册月份",
   "admin.dashboard.retention.cohort_size": "新用户",
-  "admin.impact_report.instance_accounts": "将要删除的账户资料",
+  "admin.impact_report.instance_accounts": "将被删除的账户",
   "admin.impact_report.instance_followers": "本实例用户即将丢失的关注者",
   "admin.impact_report.instance_follows": "对方实例用户将会丢失的关注者",
   "admin.impact_report.title": "影响摘要",
@@ -93,7 +93,7 @@
   "annual_report.summary.archetype.pollster": "投票狂魔",
   "annual_report.summary.archetype.replier": "评论区原住民",
   "annual_report.summary.followers.followers": "关注者",
-  "annual_report.summary.followers.total": "{count} 人",
+  "annual_report.summary.followers.total": "共 {count} 人",
   "annual_report.summary.here_it_is": "你的 {year} 年度回顾在此:",
   "annual_report.summary.highlighted_post.by_favourites": "最受欢迎嘟嘟",
   "annual_report.summary.highlighted_post.by_reblogs": "传播最广嘟嘟",
@@ -104,8 +104,8 @@
   "annual_report.summary.most_used_hashtag.none": "无",
   "annual_report.summary.new_posts.new_posts": "新嘟嘟",
   "annual_report.summary.percentile.text": "<topLabel>这使你跻身 Mastodon 用户的前</topLabel><percentage></percentage><bottomLabel></bottomLabel>",
-  "annual_report.summary.percentile.we_wont_tell_bernie": "我们打死也不会告诉扣税国王的(他知道的话要来收你发嘟税了)。",
-  "annual_report.summary.thanks": "感谢你这一年与 Mastodon 一路同行!",
+  "annual_report.summary.percentile.we_wont_tell_bernie": "我们打死也不会告诉扣税国王的。",
+  "annual_report.summary.thanks": "谢谢你这一年和 Mastodon 上的大家一起嘟嘟!",
   "attachments_list.unprocessed": "(未处理)",
   "audio.hide": "隐藏音频",
   "block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重你的决定。然而,我们无法保证对方一定遵从,因为某些服务器可能会以不同的方案处理屏蔽操作。公开嘟文仍然可能对未登录的用户可见。",
@@ -129,16 +129,16 @@
   "bundle_column_error.routing.body": "找不到请求的页面。你确定地址栏中的网址输入正确吗?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "关闭",
-  "bundle_modal_error.message": "载入这个组件时发生了错误。",
+  "bundle_modal_error.message": "载入此页面时发生了错误。",
   "bundle_modal_error.retry": "重试",
-  "closed_registrations.other_server_instructions": "基于 Mastodon 去中心化的特性,你可以在其它服务器上创建账号并继续与此服务器互动。",
+  "closed_registrations.other_server_instructions": "基于 Mastodon 的去中心化特性,你可以在其它服务器上创建账号,并与本站用户保持互动。",
   "closed_registrations_modal.description": "你目前无法在 {domain} 上创建账户,但请注意,使用 Mastodon 并非需要专门在 {domain} 上注册账户。",
   "closed_registrations_modal.find_another_server": "查找其他服务器",
   "closed_registrations_modal.preamble": "Mastodon 是去中心化的,所以无论在哪个实例创建账号,都可以关注本服务器上的账号并与之交流。 或者你还可以自己搭建实例!",
   "closed_registrations_modal.title": "注册 Mastodon 账号",
   "column.about": "关于",
   "column.blocks": "屏蔽的用户",
-  "column.bookmarks": "书签",
+  "column.bookmarks": "收藏夹",
   "column.community": "本站时间线",
   "column.create_list": "创建列表",
   "column.direct": "私下提及",
@@ -162,6 +162,7 @@
   "column_header.pin": "置顶",
   "column_header.show_settings": "显示设置",
   "column_header.unpin": "取消置顶",
+  "column_search.cancel": "取消",
   "column_subheading.settings": "设置",
   "community.column_settings.local_only": "仅限本站",
   "community.column_settings.media_only": "仅媒体",
@@ -175,7 +176,7 @@
   "compose_form.encryption_warning": "Mastodon 上的嘟文未经端到端加密。请勿在 Mastodon 上分享敏感信息。",
   "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。",
   "compose_form.lock_disclaimer": "你的账户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。",
-  "compose_form.lock_disclaimer.lock": "开启保护",
+  "compose_form.lock_disclaimer.lock": "锁嘟",
   "compose_form.placeholder": "想写什么?",
   "compose_form.poll.duration": "投票期限",
   "compose_form.poll.multiple": "多选",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "你的账号 {disabledAccount} 目前已被禁用。",
   "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公开嘟文。",
   "dismissable_banner.dismiss": "忽略",
-  "dismissable_banner.explore_links": "这些新闻故事正被本站和分布式网络上其他站点的用户谈论。",
-  "dismissable_banner.explore_statuses": "这些是目前在社交网络上引起关注的嘟文。嘟文的喜欢和转嘟次数越多,排名越高。",
-  "dismissable_banner.explore_tags": "这些标签正在本站和分布式网络上其他站点的用户中引起关注。",
-  "dismissable_banner.public_timeline": "这些是 {domain} 上的用户关注的人的最新公开嘟文。",
+  "dismissable_banner.explore_links": "以下是今天联邦宇宙中的热门资讯。新发布的资讯与被更多用户分享的资讯排名更高。",
+  "dismissable_banner.explore_statuses": "以下是目前在联邦宇宙中引起关注的嘟文。嘟文被转嘟和喜欢的次数越多,排名越高。",
+  "dismissable_banner.explore_tags": "以下是目前在联邦宇宙中引起关注的话题。话题使用人数越多,排名越高。",
+  "dismissable_banner.public_timeline": "以下是联邦宇宙中 {domain} 上的用户关注的人发布的最新公开嘟文。",
   "domain_block_modal.block": "屏蔽服务器",
   "domain_block_modal.block_account_instead": "改为屏蔽 @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "来自该服务器的人可以与你之前的嘟文交互。",
@@ -248,19 +249,19 @@
   "domain_block_modal.you_will_lose_num_followers": "你将失去 {followersCount, plural, other {{followersCountDisplay} 名关注者}}和 {followingCount, plural, other {{followingCountDisplay} 名关注}}。",
   "domain_block_modal.you_will_lose_relationships": "你将失去在此实例上的所有关注和关注者。",
   "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。",
-  "domain_pill.activitypub_lets_connect": "它让你不仅能与 Mastodon 上的人交流互动,还能与其它不同社交应用上的人联系。",
+  "domain_pill.activitypub_lets_connect": "它可以让你与不同社交应用上的人交流互动,而不仅限于 Mastodon。",
   "domain_pill.activitypub_like_language": "ActivityPub 好比 Mastodon 与其它社交网络交流时使用的语言。",
   "domain_pill.server": "服务器",
-  "domain_pill.their_handle": "对方代号:",
+  "domain_pill.their_handle": "对方用户名:",
   "domain_pill.their_server": "对方的数字家园,对方的所有嘟文都存放在那里。",
-  "domain_pill.their_username": "对方在其服务器上的唯一标识符。不同服务器上可能会存在相同用户名的用户。",
+  "domain_pill.their_username": "对方在其服务器上的唯一标识。不同服务器上可能会存在相同用户名的用户。",
   "domain_pill.username": "用户名",
-  "domain_pill.whats_in_a_handle": "代号里都有什么?",
-  "domain_pill.who_they_are": "代号可以表明用户和其所在站点,你可以在社交网络上与<button>由 ActivityPub 驱动的不同平台</button>的人们互动。",
-  "domain_pill.who_you_are": "代号可以表明你自己和你所在站点,社交网络上来自<button>由 ActivityPub 驱动的不同平台</button>的人们因此可以与你互动。",
-  "domain_pill.your_handle": "你的代号:",
-  "domain_pill.your_server": "你的数字家园,你的所有嘟文都存放在这里。不喜欢这个服务器吗?随时带上你的关注者一起迁移到其它服务器。",
-  "domain_pill.your_username": "你在这个服务器上的唯一标识符。不同服务器上可能会存在相同用户名的用户。",
+  "domain_pill.whats_in_a_handle": "用户名的构成",
+  "domain_pill.who_they_are": "用户名可以表明用户的身份和其所在站点,这样你就可以通过<button>基于 ActivityPub 的平台</button>在社交网络和人们互动。",
+  "domain_pill.who_you_are": "用户名可以表明你的身份和你所在的站点,这样人们就可以通过<button>基于 ActivityPub 的平台</button>在社交网络与你互动。",
+  "domain_pill.your_handle": "你的用户名:",
+  "domain_pill.your_server": "你的数字家园,你的所有嘟文都在此存储。不喜欢这里吗?你可以随时迁移到其它服务器,并带上你的关注者。",
+  "domain_pill.your_username": "你在此服务器上的唯一标识。不同服务器上可能存在相同用户名的用户。",
   "embed.instructions": "复制下列代码以在你的网站中嵌入此嘟文。",
   "embed.preview": "这是它的预览效果:",
   "emoji_button.activity": "活动",
@@ -311,31 +312,31 @@
   "explore.trending_links": "新闻",
   "explore.trending_statuses": "嘟文",
   "explore.trending_tags": "话题标签",
-  "filter_modal.added.context_mismatch_explanation": "此过滤器类别不适用访问过嘟文的环境中。如要在此环境中过滤嘟文,你必须编辑此过滤器。",
-  "filter_modal.added.context_mismatch_title": "环境不匹配!",
-  "filter_modal.added.expired_explanation": "此过滤器类别已过期,你需要修改到期日期才能应用。",
-  "filter_modal.added.expired_title": "过滤器已过期!",
-  "filter_modal.added.review_and_configure": "要审核并进一步配置此过滤器分类,请前往{settings_link}。",
-  "filter_modal.added.review_and_configure_title": "过滤器设置",
+  "filter_modal.added.context_mismatch_explanation": "这条过滤规则不适用于你当前访问此嘟文的场景。要在此场景下过滤嘟文,你必须编辑此过滤规则。",
+  "filter_modal.added.context_mismatch_title": "场景不匹配!",
+  "filter_modal.added.expired_explanation": "此过滤规则类别已过期,你需要修改到期日期才能应用。",
+  "filter_modal.added.expired_title": "过滤规则已过期!",
+  "filter_modal.added.review_and_configure": "要检查并进一步配置此过滤规则分类,请前往{settings_link}。",
+  "filter_modal.added.review_and_configure_title": "过滤规则设置",
   "filter_modal.added.settings_link": "设置页面",
-  "filter_modal.added.short_explanation": "此嘟文已添加到以下过滤器类别:{title}。",
-  "filter_modal.added.title": "过滤器已添加 !",
-  "filter_modal.select_filter.context_mismatch": "不适用于此环境",
+  "filter_modal.added.short_explanation": "此嘟文已被添加到以下过滤规则:{title}。",
+  "filter_modal.added.title": "已添加过滤规则 !",
+  "filter_modal.select_filter.context_mismatch": "不适用于此场景",
   "filter_modal.select_filter.expired": "已过期",
-  "filter_modal.select_filter.prompt_new": "新类别:{name}",
+  "filter_modal.select_filter.prompt_new": "新条目:{name}",
   "filter_modal.select_filter.search": "搜索或创建",
-  "filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
+  "filter_modal.select_filter.subtitle": "使用一个已存在条目,或创建新条目",
   "filter_modal.select_filter.title": "过滤此嘟文",
   "filter_modal.title.status": "过滤一条嘟文",
   "filter_warning.matches_filter": "命中过滤规则 “<span>{title}</span>”",
   "filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}",
-  "filtered_notifications_banner.title": "通知(已过滤)",
+  "filtered_notifications_banner.title": "被过滤的通知",
   "firehose.all": "全部",
   "firehose.local": "此服务器",
   "firehose.remote": "其他服务器",
   "follow_request.authorize": "同意",
   "follow_request.reject": "拒绝",
-  "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的站务人员认为你也许会想手动审核审核这些账号的关注请求。",
+  "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的站务人员认为你也许会想手动审核这些账号的关注请求。",
   "follow_suggestions.curated_suggestion": "站务人员精选",
   "follow_suggestions.dismiss": "不再显示",
   "follow_suggestions.featured_longer": "由 {domain} 管理团队精选",
@@ -343,8 +344,8 @@
   "follow_suggestions.hints.featured": "该用户已被 {domain} 管理团队精选。",
   "follow_suggestions.hints.friends_of_friends": "该用户在你关注的人中很受欢迎。",
   "follow_suggestions.hints.most_followed": "该用户是 {domain} 上关注度最高的用户之一。",
-  "follow_suggestions.hints.most_interactions": "该用户最近在 {domain} 上获得了很多关注。",
-  "follow_suggestions.hints.similar_to_recently_followed": "该用户与你最近关注的用户类似。",
+  "follow_suggestions.hints.most_interactions": "该用户最近在 {domain} 获得了很多关注。",
+  "follow_suggestions.hints.similar_to_recently_followed": "该用户与你最近关注的人类似。",
   "follow_suggestions.personalized_suggestion": "个性化建议",
   "follow_suggestions.popular_suggestion": "热门建议",
   "follow_suggestions.popular_suggestion_longer": "在 {domain} 上很受欢迎",
@@ -353,7 +354,7 @@
   "follow_suggestions.who_to_follow": "推荐关注",
   "followed_tags": "已关注话题标签",
   "footer.about": "关于",
-  "footer.directory": "用户目录",
+  "footer.directory": "用户列表",
   "footer.get_app": "获取应用",
   "footer.invite": "邀请",
   "footer.keyboard_shortcuts": "快捷键",
@@ -362,6 +363,7 @@
   "footer.status": "状态",
   "generic.saved": "已保存",
   "getting_started.heading": "开始使用",
+  "hashtag.admin_moderation": "打开 #{name} 的管理界面",
   "hashtag.column_header.tag_mode.all": "以及 {additional}",
   "hashtag.column_header.tag_mode.any": "或是 {additional}",
   "hashtag.column_header.tag_mode.none": "而不用 {additional}",
@@ -390,12 +392,12 @@
   "home.hide_announcements": "隐藏公告",
   "home.pending_critical_update.body": "请尽快更新你的 Mastodon 服务器!",
   "home.pending_critical_update.link": "查看更新",
-  "home.pending_critical_update.title": "紧急安全更新可用!",
+  "home.pending_critical_update.title": "有紧急安全更新!",
   "home.show_announcements": "显示公告",
   "ignore_notifications_modal.disclaimer": "Mastodon无法通知对方用户你忽略了他们的通知。忽略通知不会阻止消息本身的发送。",
   "ignore_notifications_modal.filter_instead": "改为过滤",
   "ignore_notifications_modal.filter_to_act_users": "你仍然可以接受、拒绝或举报用户",
-  "ignore_notifications_modal.filter_to_avoid_confusion": "选择过滤有助于避免潜在的混淆",
+  "ignore_notifications_modal.filter_to_avoid_confusion": "过滤有助于避免潜在的混淆",
   "ignore_notifications_modal.filter_to_review_separately": "你可以单独查看被过滤的通知",
   "ignore_notifications_modal.ignore": "忽略通知",
   "ignore_notifications_modal.limited_accounts_title": "是否忽略来自受限账号的通知?",
@@ -403,17 +405,17 @@
   "ignore_notifications_modal.not_followers_title": "是否忽略未关注你的人的通知?",
   "ignore_notifications_modal.not_following_title": "是否忽略你未关注的人的通知?",
   "ignore_notifications_modal.private_mentions_title": "是否忽略不请自来的私下提及?",
-  "interaction_modal.description.favourite": "只需一个 Mastodon 账号,即可喜欢这条嘟文,对嘟文的作者展示你欣赏的态度,并保存嘟文以供日后使用。",
-  "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你就可以关注 {name} 并在自己的主页上接收对方的新嘟文。",
-  "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你就可以向自己的关注者们转发此嘟文。",
-  "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你就可以回复此嘟文。",
-  "interaction_modal.description.vote": "拥有一个 Mastodon 账号,你就可以参与此投票。",
+  "interaction_modal.description.favourite": "只需一个 Mastodon 账号,即可喜欢这条嘟文,向作者展示你欣赏的态度,并将其保存以供日后查看。",
+  "interaction_modal.description.follow": "只需一个 Mastodon 账号,即可关注 {name} 并在自己的主页接收对方的新嘟文。",
+  "interaction_modal.description.reblog": "只需一个 Mastodon 账号,即可转发此嘟文,向你的关注者分享它。",
+  "interaction_modal.description.reply": "只需一个 Mastodon 账号,即可回复此嘟文。",
+  "interaction_modal.description.vote": "只需一个 Mastodon 账号,即可参与此投票。",
   "interaction_modal.login.action": "转到主页",
   "interaction_modal.login.prompt": "你所入驻的服务器域名,如:mastodon.social",
-  "interaction_modal.no_account_yet": "不在 Mastodon 上?",
+  "interaction_modal.no_account_yet": "还没加入 Mastodon?",
   "interaction_modal.on_another_server": "在另一服务器",
   "interaction_modal.on_this_server": "在此服务器",
-  "interaction_modal.sign_in": "你尚未登录此服务器,你的账号托管在哪?",
+  "interaction_modal.sign_in": "你尚未登录此服务器,你的账号是在哪里注册的?",
   "interaction_modal.sign_in_hint": "提示:这是你注册的网站,如果你不记得了,请在邮箱的收件箱中查找欢迎邮件。你还可以输入完整的用户名!(例如 @Mastodon@mastodon.social)",
   "interaction_modal.title.favourite": "喜欢 {name} 的嘟文",
   "interaction_modal.title.follow": "关注 {name}",
@@ -442,11 +444,11 @@
   "keyboard_shortcuts.local": "打开本站时间线",
   "keyboard_shortcuts.mention": "提及嘟文作者",
   "keyboard_shortcuts.muted": "打开隐藏用户列表",
-  "keyboard_shortcuts.my_profile": "打开你的个人资料",
+  "keyboard_shortcuts.my_profile": "打开你的账户页",
   "keyboard_shortcuts.notifications": "打开通知栏",
   "keyboard_shortcuts.open_media": "打开媒体",
   "keyboard_shortcuts.pinned": "打开置顶嘟文列表",
-  "keyboard_shortcuts.profile": "打开作者的个人资料",
+  "keyboard_shortcuts.profile": "打开作者的账户页",
   "keyboard_shortcuts.reply": "回复嘟文",
   "keyboard_shortcuts.requests": "打开关注请求列表",
   "keyboard_shortcuts.search": "选中搜索框",
@@ -510,7 +512,7 @@
   "navigation_bar.administration": "管理",
   "navigation_bar.advanced_interface": "在高级网页界面中打开",
   "navigation_bar.blocks": "已屏蔽的用户",
-  "navigation_bar.bookmarks": "书签",
+  "navigation_bar.bookmarks": "收藏夹",
   "navigation_bar.community_timeline": "本站时间线",
   "navigation_bar.compose": "撰写新嘟文",
   "navigation_bar.direct": "私下提及",
@@ -526,11 +528,11 @@
   "navigation_bar.logout": "退出登录",
   "navigation_bar.moderation": "审核",
   "navigation_bar.mutes": "已隐藏的用户",
-  "navigation_bar.opened_in_classic_interface": "嘟文、账户和其他特定页面默认在经典网页界面中打开。",
+  "navigation_bar.opened_in_classic_interface": "嘟文页、账户页与其他某些页面默认在经典网页界面中打开。",
   "navigation_bar.personal": "个人",
   "navigation_bar.pins": "置顶嘟文",
   "navigation_bar.preferences": "偏好设置",
-  "navigation_bar.public_timeline": "跨站公共时间线",
+  "navigation_bar.public_timeline": "跨站时间线",
   "navigation_bar.search": "搜索",
   "navigation_bar.security": "安全",
   "not_signed_in_indicator.not_signed_in": "你需要登录才能访问此资源。",
@@ -555,7 +557,7 @@
   "notification.label.reply": "回复",
   "notification.mention": "提及",
   "notification.mentioned_you": "{name} 提到了你",
-  "notification.moderation-warning.learn_more": "了解更多",
+  "notification.moderation-warning.learn_more": "详细了解",
   "notification.moderation_warning": "你收到了一条管理警告",
   "notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。",
   "notification.moderation_warning.action_disable": "你的账号已被禁用。",
@@ -569,9 +571,9 @@
   "notification.reblog": "{name} 转发了你的嘟文",
   "notification.reblog.name_and_others_with_link": "{name} 和 <a>{count, plural, other {另外 # 人}}</a> 转嘟了你的嘟文",
   "notification.relationships_severance_event": "与 {name} 的联系已断开",
-  "notification.relationships_severance_event.account_suspension": "来自 {from} 的管理员封禁了 {target},这意味着你将无法再收到对方的更新或与其互动。",
-  "notification.relationships_severance_event.domain_block": "来自 {from} 的管理员屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。",
-  "notification.relationships_severance_event.learn_more": "了解更多",
+  "notification.relationships_severance_event.account_suspension": "{from} 的管理员封禁了 {target},这意味着你将无法再收到对方的更新或与其互动。",
+  "notification.relationships_severance_event.domain_block": "{from} 的管理员屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。",
+  "notification.relationships_severance_event.learn_more": "详细了解",
   "notification.relationships_severance_event.user_domain_block": "你已经屏蔽了 {target},移除了你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。",
   "notification.status": "{name} 刚刚发布嘟文",
   "notification.update": "{name} 编辑了嘟文",
@@ -587,12 +589,12 @@
   "notification_requests.dismiss_multiple": "{count, plural, other {拒绝 # 个请求…}}",
   "notification_requests.edit_selection": "编辑",
   "notification_requests.exit_selection": "完成",
-  "notification_requests.explainer_for_limited_account": "来自该账户的通知已被过滤,因为该账户已被管理员限制。",
-  "notification_requests.explainer_for_limited_remote_account": "来自该账户的通知已被过滤,因为该账户或其所在的实例已被管理员限制。",
+  "notification_requests.explainer_for_limited_account": "来自此账户的通知已被过滤,因为此账户已被管理员限制。",
+  "notification_requests.explainer_for_limited_remote_account": "来自此账户的通知已被过滤,因为此账户或其所在的服务器已被管理员限制。",
   "notification_requests.maximize": "最大化",
-  "notification_requests.minimize_banner": "最小化被过滤通知的横幅",
+  "notification_requests.minimize_banner": "最小化被过滤通知横幅",
   "notification_requests.notifications_from": "来自 {name} 的通知",
-  "notification_requests.title": "通知(已过滤)",
+  "notification_requests.title": "被过滤的通知",
   "notification_requests.view": "查看通知",
   "notifications.clear": "清空通知列表",
   "notifications.clear_confirmation": "你确定要永久清空通知列表吗?",
@@ -634,59 +636,36 @@
   "notifications.policy.drop": "忽略",
   "notifications.policy.drop_hint": "送入虚空,再也不查看",
   "notifications.policy.filter": "过滤",
-  "notifications.policy.filter_hint": "发送到被过滤通知收件箱",
-  "notifications.policy.filter_limited_accounts_hint": "被实例管理员限制",
+  "notifications.policy.filter_hint": "发送到被过滤通知列表",
+  "notifications.policy.filter_limited_accounts_hint": "被服务器管理员限制的账号",
   "notifications.policy.filter_limited_accounts_title": "受限账号",
-  "notifications.policy.filter_new_accounts.hint": "在 {days, plural, other {# 天}}内创建的账户",
+  "notifications.policy.filter_new_accounts.hint": "注册未满 {days, plural, other {# 天}} 的账号",
   "notifications.policy.filter_new_accounts_title": "新账户",
-  "notifications.policy.filter_not_followers_hint": "包括关注你少于 {days, plural, other {# 天}}的人",
-  "notifications.policy.filter_not_followers_title": "未关注你的人",
-  "notifications.policy.filter_not_following_hint": "直到你手动批准",
+  "notifications.policy.filter_not_followers_hint": "包括关注你未满 {days, plural, other {# 天}}的人",
+  "notifications.policy.filter_not_followers_title": "没有关注你的人",
+  "notifications.policy.filter_not_following_hint": "需要你手动批准",
   "notifications.policy.filter_not_following_title": "你没有关注的人",
-  "notifications.policy.filter_private_mentions_hint": "过滤通知,除非通知是在回复提及你自己的内容,或发送者是你关注的人",
+  "notifications.policy.filter_private_mentions_hint": "过滤通知,除非对应嘟文是在回复你的私下提及,或来自你关注的人。",
   "notifications.policy.filter_private_mentions_title": "不请自来的私下提及",
   "notifications.policy.title": "管理来自 … 的通知",
   "notifications_permission_banner.enable": "启用桌面通知",
   "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。",
   "notifications_permission_banner.title": "精彩不容错过",
-  "onboarding.action.back": "带我返回",
-  "onboarding.actions.back": "带我返回",
-  "onboarding.actions.go_to_explore": "看看有什么新鲜事",
-  "onboarding.actions.go_to_home": "转到主页动态",
-  "onboarding.compose.template": "你好 #Mastodon!",
+  "onboarding.follows.back": "返回",
+  "onboarding.follows.done": "完成",
   "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。你可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。",
-  "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!",
-  "onboarding.follows.title": "定制你的主页动态",
-  "onboarding.profile.discoverable": "让我的资料卡可被他人发现",
-  "onboarding.profile.discoverable_hint": "当你选择在 Mastodon 上启用发现功能时,你的嘟文可能会出现在搜索结果和热门中,你的账户可能会被推荐给与你兴趣相似的人。",
+  "onboarding.follows.search": "搜索",
+  "onboarding.follows.title": "关注用户,玩转 Mastodon",
+  "onboarding.profile.discoverable": "让我的账户可被他人发现",
+  "onboarding.profile.discoverable_hint": "当你在 Mastodon 上启用发现功能时,你的嘟文可能会出现在搜索结果与热门中,你的账户可能会被推荐给与你兴趣相似的人。",
   "onboarding.profile.display_name": "昵称",
   "onboarding.profile.display_name_hint": "你的全名或昵称…",
-  "onboarding.profile.lead": "你可以稍后在设置中完成此操作,设置中有更多的自定义选项。",
   "onboarding.profile.note": "简介",
-  "onboarding.profile.note_hint": "你可以提及 @其他人 或 #标签…",
+  "onboarding.profile.note_hint": "你可以提及 @其他人 或使用 #话题标签…",
   "onboarding.profile.save_and_continue": "保存并继续",
   "onboarding.profile.title": "设置个人资料",
   "onboarding.profile.upload_avatar": "上传头像",
-  "onboarding.profile.upload_header": "上传个人资料背景横幅",
-  "onboarding.share.lead": "让人们知道他们如何在Mastodon找到你!",
-  "onboarding.share.message": "我是来自 #Mastodon 的 {username}!请在 {url} 关注我。",
-  "onboarding.share.next_steps": "可能的下一步:",
-  "onboarding.share.title": "分享你的个人资料",
-  "onboarding.start.lead": "你的新 Mastodon 账户已准备好。下面是如何最大限度地利用它:",
-  "onboarding.start.skip": "想要在前面跳过吗?",
-  "onboarding.start.title": "你已经成功了!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "定制你的主页动态",
-  "onboarding.steps.publish_status.body": "向世界问声好吧。",
-  "onboarding.steps.publish_status.title": "发布你的第一篇嘟文",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "自定义你的个人资料",
-  "onboarding.steps.share_profile.body": "让你的朋友知道怎样在 Mastodon 找到你",
-  "onboarding.steps.share_profile.title": "分享你的个人资料",
-  "onboarding.tips.2fa": "<strong>你知道吗?</strong>你可以在账户设置中配置双因素认证来保护账户安全。可以使用你选择的任何 TOTP 应用,无需电话号码!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>你知道吗?</strong> 既然Mastodon是去中心化的,你所看到的一些账户将被托管在你以外的服务器上。 但你可以无缝地与他们交互!他们的服务器在他们的用户名的后半部分!",
-  "onboarding.tips.migration": "<strong>你知道吗?</strong>如果你将来觉得 {domain} 不再符合您的需求,你可以在保留现有关注者的情况下迁移至其他 Mastodon 服务器。你甚至可以部署自己的服务器!",
-  "onboarding.tips.verification": "<strong>你知道吗?</strong> 你可以通过在自己的网站上放置一个链接到你的 Mastodon 个人资料并将网站添加到你的个人资料来验证你的账户。 无需收费或文书工作!",
+  "onboarding.profile.upload_header": "上传账户页封面图",
   "password_confirmation.exceeds_maxlength": "密码确认超过最大密码长度",
   "password_confirmation.mismatching": "确认密码与密码不一致。",
   "picture_in_picture.restore": "恢复",
@@ -705,9 +684,9 @@
   "privacy.direct.short": "特定的人",
   "privacy.private.long": "仅限你的关注者",
   "privacy.private.short": "关注者",
-  "privacy.public.long": "",
+  "privacy.public.long": "所有 Mastodon 内外的人",
   "privacy.public.short": "公开",
-  "privacy.unlisted.additional": "该模式的行为与“公开”完全相同,只是嘟文不会出现在实时动态、话题标签、探索或 Mastodon 搜索中,即使你已在账户级设置中选择加入。",
+  "privacy.unlisted.additional": "此模式的行为与“公开”类似,只是嘟文不会出现在实时动态、话题标签、探索或 Mastodon 搜索页面中,即使您已全局开启了对应的发现设置。",
   "privacy.unlisted.long": "减少算法影响",
   "privacy.unlisted.short": "悄悄公开",
   "privacy_policy.last_updated": "最近更新于 {date}",
@@ -717,11 +696,11 @@
   "regeneration_indicator.label": "加载中…",
   "regeneration_indicator.sublabel": "你的主页动态正在准备中!",
   "relative_time.days": "{number} 天前",
-  "relative_time.full.days": "{number, plural, one {# 天} other {# 天}}前",
-  "relative_time.full.hours": "{number, plural, one {# 小时} other {# 小时}}前",
+  "relative_time.full.days": "{number, plural, other {# 天}}前",
+  "relative_time.full.hours": "{number, plural, other {# 小时}}前",
   "relative_time.full.just_now": "刚刚",
-  "relative_time.full.minutes": "{number, plural, one {# 分钟} other {# 分钟}}前",
-  "relative_time.full.seconds": "{number, plural, one {# 秒} other {# 秒}}前",
+  "relative_time.full.minutes": "{number, plural, other {# 分钟}}前",
+  "relative_time.full.seconds": "{number, plural, other {# 秒}}前",
   "relative_time.hours": "{number} 小时前",
   "relative_time.just_now": "刚刚",
   "relative_time.minutes": "{number} 分钟前",
@@ -738,7 +717,7 @@
   "report.categories.violation": "内容违反一条或多条服务器规则",
   "report.category.subtitle": "选择最佳匹配",
   "report.category.title": "告诉我们此 {type} 存在的问题",
-  "report.category.title_account": "个人资料",
+  "report.category.title_account": "账户",
   "report.category.title_status": "嘟文",
   "report.close": "完成",
   "report.comment.title": "还有什么你认为我们应该知道的吗?",
@@ -782,11 +761,11 @@
   "report_notification.open": "打开举报",
   "search.no_recent_searches": "无最近搜索",
   "search.placeholder": "搜索",
-  "search.quick_action.account_search": "匹配 {x} 的个人资料",
-  "search.quick_action.go_to_account": "前往 {x} 个人资料",
-  "search.quick_action.go_to_hashtag": "前往标签 {x}",
-  "search.quick_action.open_url": "在 Mastodon 中打开网址",
-  "search.quick_action.status_search": "匹配 {x} 的嘟文",
+  "search.quick_action.account_search": "包含 {x} 的账户",
+  "search.quick_action.go_to_account": "打开 {x} 的账户页",
+  "search.quick_action.go_to_hashtag": "打开话题标签 {x}",
+  "search.quick_action.open_url": "在 Mastodon 中打开此链接",
+  "search.quick_action.status_search": "包含 {x} 的嘟文",
   "search.search_or_paste": "搜索或输入网址",
   "search_popout.full_text_search_disabled_message": "在 {domain} 不可用",
   "search_popout.full_text_search_logged_out_message": "只有登录后才可用。",
@@ -815,15 +794,15 @@
   "sign_in_banner.sso_redirect": "登录或注册",
   "status.admin_account": "打开 @{name} 的管理界面",
   "status.admin_domain": "打开 {domain} 的管理界面",
-  "status.admin_status": "打开此帖的管理界面",
+  "status.admin_status": "在管理界面查看此嘟文",
   "status.block": "屏蔽 @{name}",
-  "status.bookmark": "添加到书签",
-  "status.cancel_reblog_private": "取消转贴",
-  "status.cannot_reblog": "这条嘟文不允许被转嘟",
+  "status.bookmark": "收藏",
+  "status.cancel_reblog_private": "取消转嘟",
+  "status.cannot_reblog": "不能转嘟这条嘟文",
   "status.continued_thread": "上接嘟文串",
   "status.copy": "复制嘟文链接",
   "status.delete": "删除",
-  "status.detailed_status": "详细的对话视图",
+  "status.detailed_status": "对话详情",
   "status.direct": "私下提及 @{name}",
   "status.direct_indicator": "私下提及",
   "status.edit": "编辑",
@@ -838,48 +817,48 @@
   "status.load_more": "加载更多",
   "status.media.open": "点击打开",
   "status.media.show": "点击查看",
-  "status.media_hidden": "已隐藏的媒体内容",
+  "status.media_hidden": "媒体已隐藏",
   "status.mention": "提及 @{name}",
   "status.more": "更多",
   "status.mute": "隐藏 @{name}",
-  "status.mute_conversation": "禁用此对话的消息提醒",
+  "status.mute_conversation": "关闭此对话的通知",
   "status.open": "展开嘟文",
-  "status.pin": "在个人资料页面置顶",
+  "status.pin": "在账户页置顶",
   "status.pinned": "置顶嘟文",
   "status.read_more": "查看更多",
   "status.reblog": "转嘟",
   "status.reblog_private": "以相同可见性转嘟",
   "status.reblogged_by": "{name} 转嘟了",
   "status.reblogs": "{count, plural, other {次转嘟}}",
-  "status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。",
+  "status.reblogs.empty": "还没有人转嘟过此条嘟文。转嘟此嘟文的人会显示在这里。",
   "status.redraft": "删除并重新编辑",
-  "status.remove_bookmark": "移除书签",
-  "status.replied_in_thread": "回复给嘟文串",
-  "status.replied_to": "回复给 {name}",
+  "status.remove_bookmark": "取消收藏",
+  "status.replied_in_thread": "回复嘟文串",
+  "status.replied_to": "回复 {name}",
   "status.reply": "回复",
   "status.replyAll": "回复此嘟文串",
   "status.report": "举报 @{name}",
   "status.sensitive_warning": "敏感内容",
   "status.share": "分享",
-  "status.show_less_all": "隐藏全部内容",
-  "status.show_more_all": "显示全部内容",
+  "status.show_less_all": "全部折叠",
+  "status.show_more_all": "全部展开",
   "status.show_original": "显示原文",
-  "status.title.with_attachments": "{user} 上传了 {attachmentCount, plural, one {一个附件} other {{attachmentCount} 个附件}}",
+  "status.title.with_attachments": "{user} 上传了 {attachmentCount, plural, other {{attachmentCount} 个附件}}",
   "status.translate": "翻译",
   "status.translated_from_with": "由 {provider} 翻译自 {lang}",
   "status.uncached_media_warning": "预览不可用",
   "status.unmute_conversation": "恢复此对话的通知提醒",
-  "status.unpin": "在个人资料页面取消置顶",
+  "status.unpin": "在账户页取消置顶",
   "subscribed_languages.lead": "更改此选择后,只有选定语言的嘟文才会出现在你的主页和列表时间线上。选择「无」将显示所有语言的嘟文。",
   "subscribed_languages.save": "保存更改",
   "subscribed_languages.target": "更改 {target} 的订阅语言",
   "tabs_bar.home": "主页",
   "tabs_bar.notifications": "通知",
-  "time_remaining.days": "剩余 {number, plural, one {# 天} other {# 天}}",
-  "time_remaining.hours": "剩余 {number, plural, one {# 小时} other {# 小时}}",
-  "time_remaining.minutes": "剩余 {number, plural, one {# 分钟} other {# 分钟}}",
+  "time_remaining.days": "剩余 {number, plural, other {# 天}}",
+  "time_remaining.hours": "剩余 {number, plural, other {# 小时}}",
+  "time_remaining.minutes": "剩余 {number, plural, other {# 分钟}}",
   "time_remaining.moments": "即将结束",
-  "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
+  "time_remaining.seconds": "剩余 {number, plural, other {# 秒}}",
   "trends.counter_by_accounts": "过去 {days, plural, other {{days} 天}}有{count, plural, other { {counter} 人}}讨论",
   "trends.trending_now": "当前热门",
   "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。",
@@ -899,12 +878,12 @@
   "upload_form.drag_and_drop.on_drag_start": "已选中媒体附件 {item}。",
   "upload_form.edit": "编辑",
   "upload_form.thumbnail": "更改缩略图",
-  "upload_form.video_description": "为听障人士和视障人士添加文字描述",
+  "upload_form.video_description": "为听障人士与视障人士添加文字描述",
   "upload_modal.analyzing_picture": "正在分析图片…",
   "upload_modal.apply": "应用",
   "upload_modal.applying": "正在应用…",
-  "upload_modal.choose_image": "选择图像",
-  "upload_modal.description_placeholder": "快狐跨懒狗",
+  "upload_modal.choose_image": "选择图片",
+  "upload_modal.description_placeholder": "在这里写下你的描述",
   "upload_modal.detect_text": "从图片中检测文本",
   "upload_modal.edit_media": "编辑媒体",
   "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。",
@@ -912,7 +891,7 @@
   "upload_modal.preview_label": "预览 ({ratio})",
   "upload_progress.label": "上传中…",
   "upload_progress.processing": "正在处理…",
-  "username.taken": "此用户名已被使用。请尝试其他",
+  "username.taken": "此用户名已被占用。请换用其它用户名",
   "video.close": "关闭视频",
   "video.download": "下载文件",
   "video.exit_fullscreen": "退出全屏",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index ff0a124fc..169e789f8 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -106,7 +106,6 @@
   "bundle_column_error.routing.body": "找不到請求的頁面。您確定網址欄中的 URL 正確嗎?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "關閉",
-  "bundle_modal_error.message": "加載本組件出錯。",
   "bundle_modal_error.retry": "重試",
   "closed_registrations.other_server_instructions": "基於Mastodon去中心化的特性,你可以在其他伺服器上創建賬戶並與本站互動。",
   "closed_registrations_modal.description": "目前無法在 {domain} 建立新帳號,但您並不一定需要擁有 {domain} 的帳號亦能使用 Mastodon 。",
@@ -205,10 +204,6 @@
   "disabled_account_banner.text": "您的帳號 {disabledAccount} 目前已停用。",
   "dismissable_banner.community_timeline": "這些是 {domain} 上用戶的最新公開帖文。",
   "dismissable_banner.dismiss": "關閉",
-  "dismissable_banner.explore_links": "這些新聞內容正在被本站以及去中心化網路上其他伺服器的人們熱烈討論。",
-  "dismissable_banner.explore_statuses": "這些是今天在社交網絡上受到關注的帖文。新的帖文如果有較多轉推和最愛會排得更高。",
-  "dismissable_banner.explore_tags": "這些主題標籤正在被本站以及去中心化網路上的人們熱烈討論。",
-  "dismissable_banner.public_timeline": "這些是 {domain} 使用者追蹤的社交網絡上最新的公開帖文。",
   "domain_block_modal.block": "封鎖伺服器",
   "domain_block_modal.block_account_instead": "封鎖 @{name} 即可",
   "domain_block_modal.they_can_interact_with_old_posts": "此伺服器的人們可與你的舊帖文互動。",
@@ -523,44 +518,17 @@
   "notifications_permission_banner.enable": "啟用桌面通知",
   "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。",
   "notifications_permission_banner.title": "不放過任何事情",
-  "onboarding.action.back": "返回",
-  "onboarding.actions.back": "返回",
-  "onboarding.actions.go_to_explore": "See what's trending",
-  "onboarding.actions.go_to_home": "Go to your home feed",
-  "onboarding.compose.template": "哈囉 #Mastodon!",
   "onboarding.follows.empty": "很遺憾,現在無法顯示任何結果。你可以嘗試搜尋或瀏覽探索頁面來找使用者來追蹤,或者稍後再試。",
-  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
-  "onboarding.follows.title": "Popular on Mastodon",
   "onboarding.profile.discoverable": "將個人檔案設為可被搜尋",
   "onboarding.profile.discoverable_hint": "當你在 Mastodon 上選擇可被搜尋時,你的帖文可能會出現在搜尋結果和熱門,你的個人檔案也可能被推薦給與你興趣相似的人。",
   "onboarding.profile.display_name": "顯示名稱",
   "onboarding.profile.display_name_hint": "你的全名或暱稱…",
-  "onboarding.profile.lead": "你可以隨時在設定中完成此動作,那裏有更多自訂選項。",
   "onboarding.profile.note": "簡介",
   "onboarding.profile.note_hint": "你可以 @提及他人 或使用 #標籤…",
   "onboarding.profile.save_and_continue": "儲存並繼續",
   "onboarding.profile.title": "個人檔案設定",
   "onboarding.profile.upload_avatar": "上載個人檔案頭像",
   "onboarding.profile.upload_header": "上載個人檔案橫幅圖片",
-  "onboarding.share.lead": "讓大家知道如何在 Mastodon 上找到你吧!",
-  "onboarding.share.message": "我在 #Mastodon 的使用者名稱是 {username}!快來追蹤我吧 {url}",
-  "onboarding.share.next_steps": "接下來你可以:",
-  "onboarding.share.title": "分享你的個人檔案",
-  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
-  "onboarding.start.skip": "Want to skip right ahead?",
-  "onboarding.start.title": "你做到了!",
-  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
-  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
-  "onboarding.steps.publish_status.body": "Say hello to the world.",
-  "onboarding.steps.publish_status.title": "發佈你的第一篇帖文",
-  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
-  "onboarding.steps.setup_profile.title": "Customize your profile",
-  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
-  "onboarding.steps.share_profile.title": "Share your profile",
-  "onboarding.tips.2fa": "<strong>你知道嗎?</strong>你可以在帳號設定中設定雙重認證來保護帳號。它可以配合你選擇的 TOTP 應用程式使用,毋須提供電話號碼!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>你知道嗎?</strong>由於 Mastodon 是去中心化的,所以你可能會遇到託管在其他伺服器的個人檔案,但你仍然可以無障礙地與他們互動!他們的伺服器名稱,就是使用者名稱的後半部份!",
-  "onboarding.tips.migration": "<strong>你知道嗎?</strong>如果你日後覺得 {domain} 伺服器不是最佳的選擇,你可以轉移到另一個 Mastodon 伺服器而不會失去你的追蹤者。你甚至可以託管你自己的伺服器!",
-  "onboarding.tips.verification": "<strong>你知道嗎?</strong>你可以透過在自己的網站放一條連結到你的 Mastodon 個人檔案,並在你的個人檔案加入該網站來驗證帳號,而毋須支付費用或提供文件!",
   "password_confirmation.exceeds_maxlength": "確認密碼欄超出了密碼長度限制",
   "password_confirmation.mismatching": "密碼確認不符",
   "picture_in_picture.restore": "還原影片播放器",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 355fecac4..0c831e549 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -129,7 +129,7 @@
   "bundle_column_error.routing.body": "找不到請求的頁面。您確定網址列中的 URL 是正確的嗎?",
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "關閉",
-  "bundle_modal_error.message": "載入此元件時發生錯誤。",
+  "bundle_modal_error.message": "載入此畫面時發生錯誤。",
   "bundle_modal_error.retry": "重試",
   "closed_registrations.other_server_instructions": "因為 Mastodon 是去中心化的,所以您也能於其他伺服器上建立帳號,並仍然與這個伺服器互動。",
   "closed_registrations_modal.description": "目前無法於 {domain} 建立新帳號,但也請別忘了,您並不一定需要有 {domain} 伺服器的帳號,也能使用 Mastodon。",
@@ -162,6 +162,7 @@
   "column_header.pin": "釘選",
   "column_header.show_settings": "顯示設定",
   "column_header.unpin": "取消釘選",
+  "column_search.cancel": "取消",
   "column_subheading.settings": "設定",
   "community.column_settings.local_only": "只顯示本站",
   "community.column_settings.media_only": "只顯示媒體",
@@ -235,10 +236,10 @@
   "disabled_account_banner.text": "您的帳號 {disabledAccount} 目前已停用。",
   "dismissable_banner.community_timeline": "這些是託管於 {domain} 上帳號之最新公開嘟文。",
   "dismissable_banner.dismiss": "關閉",
-  "dismissable_banner.explore_links": "這些新聞故事正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的新聞排名更高。",
-  "dismissable_banner.explore_statuses": "這些於此伺服器以及去中心化網路中其他伺服器發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。",
-  "dismissable_banner.explore_tags": "這些主題標籤正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。",
-  "dismissable_banner.public_timeline": "這些是來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。",
+  "dismissable_banner.explore_links": "這些新聞故事正在被聯邦宇宙上的人們熱烈討論著。越多不同人所嘟出的新聞排名更高。",
+  "dismissable_banner.explore_statuses": "這些來自於聯邦宇宙發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。",
+  "dismissable_banner.explore_tags": "這些主題標籤正在被聯邦宇宙上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。",
+  "dismissable_banner.public_timeline": "這些是聯邦宇宙上來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。",
   "domain_block_modal.block": "封鎖伺服器",
   "domain_block_modal.block_account_instead": "改為封鎖 @{name}",
   "domain_block_modal.they_can_interact_with_old_posts": "來自此伺服器之使用者能與您以往的嘟文互動。",
@@ -362,6 +363,7 @@
   "footer.status": "狀態",
   "generic.saved": "已儲存",
   "getting_started.heading": "開始使用",
+  "hashtag.admin_moderation": "開啟 #{name} 的管理介面",
   "hashtag.column_header.tag_mode.all": "以及 {additional}",
   "hashtag.column_header.tag_mode.any": "或是 {additional}",
   "hashtag.column_header.tag_mode.none": "而無需 {additional}",
@@ -471,13 +473,13 @@
   "lists.add_to_list": "新增至列表",
   "lists.add_to_lists": "新增 {name} 至列表",
   "lists.create": "建立",
-  "lists.create_a_list_to_organize": "建立新列表以整理您的首頁動態",
+  "lists.create_a_list_to_organize": "建立新列表以整理您的首頁時間軸",
   "lists.create_list": "建立列表",
   "lists.delete": "刪除列表",
   "lists.done": "完成",
   "lists.edit": "編輯列表",
-  "lists.exclusive": "在首頁隱藏成員",
-  "lists.exclusive_hint": "如果某個帳號於此列表中,將自您的首頁動態中隱藏此帳號,以防重複見到他們的嘟文。",
+  "lists.exclusive": "於首頁隱藏成員",
+  "lists.exclusive_hint": "如果某個帳號於此列表中,將自您的首頁時間軸中隱藏此帳號,以防重複見到他們的嘟文。",
   "lists.find_users_to_add": "尋找欲新增之使用者",
   "lists.list_members": "列表成員",
   "lists.list_members_count": "{count, plural, other {# 個成員}}",
@@ -649,44 +651,21 @@
   "notifications_permission_banner.enable": "啟用桌面通知",
   "notifications_permission_banner.how_to_control": "啟用桌面通知以於 Mastodon 沒有開啟的時候接收通知。啟用桌面通知後,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。",
   "notifications_permission_banner.title": "不要錯過任何東西!",
-  "onboarding.action.back": "返回",
-  "onboarding.actions.back": "返回",
-  "onboarding.actions.go_to_explore": "看看發生什麼新鮮事",
-  "onboarding.actions.go_to_home": "前往您的首頁時間軸",
-  "onboarding.compose.template": "哈囉 #Mastodon!",
+  "onboarding.follows.back": "返回",
+  "onboarding.follows.done": "完成",
   "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。",
-  "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!",
-  "onboarding.follows.title": "客製化您的首頁時間軸",
+  "onboarding.follows.search": "搜尋",
+  "onboarding.follows.title": "開始跟隨一些人吧",
   "onboarding.profile.discoverable": "使我的個人檔案可以被找到",
   "onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會顯示於搜尋結果與趨勢中。您的個人檔案可能會被推薦至與您志趣相投的人。",
   "onboarding.profile.display_name": "顯示名稱",
   "onboarding.profile.display_name_hint": "完整名稱或暱稱...",
-  "onboarding.profile.lead": "您隨時可以稍候於設定中完成此操作,將有更多自訂選項可使用。",
   "onboarding.profile.note": "個人簡介",
   "onboarding.profile.note_hint": "您可以 @mention 其他人或者使用 #主題標籤...",
   "onboarding.profile.save_and_continue": "儲存並繼續",
   "onboarding.profile.title": "個人檔案設定",
   "onboarding.profile.upload_avatar": "上傳個人檔案大頭貼",
   "onboarding.profile.upload_header": "上傳個人檔案封面圖片",
-  "onboarding.share.lead": "讓其他人知道他們如何於 Mastodon 上面找到您!",
-  "onboarding.share.message": "我是 #Mastodon 上的 {username}!歡迎於 {url} 跟隨我",
-  "onboarding.share.next_steps": "可能的下一步:",
-  "onboarding.share.title": "分享您的個人檔案",
-  "onboarding.start.lead": "您現在是 Mastodon 的一份子啦!一個獨特的去中心化社群網路平台,您(而不是演算法)能準備您自己的獨特體驗。以下是您能最有效地使用它的小撇步:",
-  "onboarding.start.skip": "想要直接跳過入門協助嗎?",
-  "onboarding.start.title": "噹噹!完成啦!",
-  "onboarding.steps.follow_people.body": "Mastodon 的趣味就是跟隨些有趣的人們!",
-  "onboarding.steps.follow_people.title": "客製化您的首頁時間軸",
-  "onboarding.steps.publish_status.body": "透過文字、照片、影片或投票 {emoji} 向新世界打聲招呼吧。",
-  "onboarding.steps.publish_status.title": "撰寫您第一則嘟文",
-  "onboarding.steps.setup_profile.body": "若您完整填寫個人檔案,其他人比較願意與您互動。",
-  "onboarding.steps.setup_profile.title": "客製化您的個人檔案",
-  "onboarding.steps.share_profile.body": "讓您的朋友們知道如何於 Mastodon 找到您!",
-  "onboarding.steps.share_profile.title": "分享您的 Mastodon 個人檔案",
-  "onboarding.tips.2fa": "<strong>您知道嗎?</strong> 您可以透過於帳號設定中啟用兩階段驗證以加強您的帳號安全。它適用於任何您偏好的 TOTP 應用程式,不需要電話號碼!",
-  "onboarding.tips.accounts_from_other_servers": "<strong>您知道嗎?</strong> 由於 Mastodon 是去中心化的,有些您巧遇過的個人檔案託管於這邊以外的其他伺服器。即便如此,您也能無縫地與他們互動!他們的伺服器位址是他們帳號的後半部分!",
-  "onboarding.tips.migration": "<strong>您知道嗎?</strong> 若您認為 {domain} 已不再對您的未來使用是好的伺服器選擇,您可以遷移至另一個 Mastodon 伺服器而不流失您現有的跟隨者。您甚至可以運行您自己的伺服器!",
-  "onboarding.tips.verification": "<strong>您知道嗎?</strong> 您可以藉由於您自己的網站上設定 Mastodon 個人檔案連結並於個人檔案中連結該網站的方式以驗證您的帳號。不需要任何費用或是文件!",
   "password_confirmation.exceeds_maxlength": "密碼驗證欄超過最長密碼長度限制",
   "password_confirmation.mismatching": "密碼驗證欄與密碼不一致",
   "picture_in_picture.restore": "還原",
diff --git a/app/javascript/mastodon/models/suggestion.ts b/app/javascript/mastodon/models/suggestion.ts
new file mode 100644
index 000000000..037eed480
--- /dev/null
+++ b/app/javascript/mastodon/models/suggestion.ts
@@ -0,0 +1,12 @@
+import type { ApiSuggestionJSON } from 'mastodon/api_types/suggestions';
+
+export interface Suggestion extends Omit<ApiSuggestionJSON, 'account'> {
+  account_id: string;
+}
+
+export const createSuggestion = (
+  serverJSON: ApiSuggestionJSON,
+): Suggestion => ({
+  sources: serverJSON.sources,
+  account_id: serverJSON.account.id,
+});
diff --git a/app/javascript/mastodon/permissions.ts b/app/javascript/mastodon/permissions.ts
index 8f015610e..d7695d2f5 100644
--- a/app/javascript/mastodon/permissions.ts
+++ b/app/javascript/mastodon/permissions.ts
@@ -1,5 +1,6 @@
 export const PERMISSION_INVITE_USERS = 0x0000000000010000;
 export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
+export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
 export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020;
 
 export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010;
diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts
index aafee19c0..3f3d09b7f 100644
--- a/app/javascript/mastodon/reducers/index.ts
+++ b/app/javascript/mastodon/reducers/index.ts
@@ -35,7 +35,7 @@ import server from './server';
 import settings from './settings';
 import status_lists from './status_lists';
 import statuses from './statuses';
-import suggestions from './suggestions';
+import { suggestionsReducer } from './suggestions';
 import tags from './tags';
 import timelines from './timelines';
 import trends from './trends';
@@ -70,7 +70,7 @@ const reducers = {
   lists: listsReducer,
   filters,
   conversations,
-  suggestions,
+  suggestions: suggestionsReducer,
   polls,
   trends,
   markers: markersReducer,
diff --git a/app/javascript/mastodon/reducers/suggestions.js b/app/javascript/mastodon/reducers/suggestions.js
deleted file mode 100644
index 5b9d983de..000000000
--- a/app/javascript/mastodon/reducers/suggestions.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
-
-import { blockAccountSuccess, muteAccountSuccess } from 'mastodon/actions/accounts';
-import { blockDomainSuccess } from 'mastodon/actions/domain_blocks';
-
-import {
-  SUGGESTIONS_FETCH_REQUEST,
-  SUGGESTIONS_FETCH_SUCCESS,
-  SUGGESTIONS_FETCH_FAIL,
-  SUGGESTIONS_DISMISS,
-} from '../actions/suggestions';
-
-
-const initialState = ImmutableMap({
-  items: ImmutableList(),
-  isLoading: false,
-});
-
-export default function suggestionsReducer(state = initialState, action) {
-  switch(action.type) {
-  case SUGGESTIONS_FETCH_REQUEST:
-    return state.set('isLoading', true);
-  case SUGGESTIONS_FETCH_SUCCESS:
-    return state.withMutations(map => {
-      map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id }))));
-      map.set('isLoading', false);
-    });
-  case SUGGESTIONS_FETCH_FAIL:
-    return state.set('isLoading', false);
-  case SUGGESTIONS_DISMISS:
-    return state.update('items', list => list.filterNot(x => x.get('account') === action.id));
-  case blockAccountSuccess.type:
-  case muteAccountSuccess.type:
-    return state.update('items', list => list.filterNot(x => x.get('account') === action.payload.relationship.id));
-  case blockDomainSuccess.type:
-    return state.update('items', list => list.filterNot(x => action.payload.accounts.includes(x.get('account'))));
-  default:
-    return state;
-  }
-}
diff --git a/app/javascript/mastodon/reducers/suggestions.ts b/app/javascript/mastodon/reducers/suggestions.ts
new file mode 100644
index 000000000..b9da93349
--- /dev/null
+++ b/app/javascript/mastodon/reducers/suggestions.ts
@@ -0,0 +1,60 @@
+import { createReducer, isAnyOf } from '@reduxjs/toolkit';
+
+import {
+  blockAccountSuccess,
+  muteAccountSuccess,
+} from 'mastodon/actions/accounts';
+import { blockDomainSuccess } from 'mastodon/actions/domain_blocks';
+import {
+  fetchSuggestions,
+  dismissSuggestion,
+} from 'mastodon/actions/suggestions';
+import { createSuggestion } from 'mastodon/models/suggestion';
+import type { Suggestion } from 'mastodon/models/suggestion';
+
+interface State {
+  items: Suggestion[];
+  isLoading: boolean;
+}
+
+const initialState: State = {
+  items: [],
+  isLoading: false,
+};
+
+export const suggestionsReducer = createReducer(initialState, (builder) => {
+  builder.addCase(fetchSuggestions.pending, (state) => {
+    state.isLoading = true;
+  });
+
+  builder.addCase(fetchSuggestions.fulfilled, (state, action) => {
+    state.items = action.payload.map(createSuggestion);
+    state.isLoading = false;
+  });
+
+  builder.addCase(fetchSuggestions.rejected, (state) => {
+    state.isLoading = false;
+  });
+
+  builder.addCase(dismissSuggestion.pending, (state, action) => {
+    state.items = state.items.filter(
+      (x) => x.account_id !== action.meta.arg.accountId,
+    );
+  });
+
+  builder.addCase(blockDomainSuccess, (state, action) => {
+    state.items = state.items.filter(
+      (x) =>
+        !action.payload.accounts.some((account) => account.id === x.account_id),
+    );
+  });
+
+  builder.addMatcher(
+    isAnyOf(blockAccountSuccess, muteAccountSuccess),
+    (state, action) => {
+      state.items = state.items.filter(
+        (x) => x.account_id !== action.payload.relationship.id,
+      );
+    },
+  );
+});
diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss
index 3d4539bb9..21da3575f 100644
--- a/app/javascript/styles/mastodon-light/diff.scss
+++ b/app/javascript/styles/mastodon-light/diff.scss
@@ -108,17 +108,6 @@
   background: lighten($white, 4%);
 }
 
-// Change the background colors of status__content__spoiler-link
-.reply-indicator__content .status__content__spoiler-link,
-.status__content .status__content__spoiler-link {
-  background: $ui-base-color;
-
-  &:hover,
-  &:focus {
-    background: lighten($ui-base-color, 4%);
-  }
-}
-
 .account-gallery__item a {
   background-color: $ui-base-color;
 }
@@ -447,17 +436,26 @@
   color: lighten($ui-highlight-color, 8%);
 }
 
-.compose-form .autosuggest-textarea__textarea,
-.compose-form__highlightable,
-.autosuggest-textarea__suggestions,
-.search__input,
-.search__popout,
 .emoji-mart-search input,
 .language-dropdown__dropdown .emoji-mart-search input,
 .poll__option input[type='text'] {
   background: darken($ui-base-color, 10%);
 }
 
+.search__popout__menu__item {
+  &:hover,
+  &:active,
+  &:focus,
+  &.active {
+    color: $white;
+
+    mark,
+    .icon-button {
+      color: $white;
+    }
+  }
+}
+
 .inline-follow-suggestions {
   background-color: rgba($ui-highlight-color, 0.1);
   border-bottom-color: rgba($ui-highlight-color, 0.3);
@@ -525,6 +523,13 @@ a.sparkline {
   }
 }
 
+.notification-group--annual-report {
+  .notification-group__icon,
+  .notification-group__main .link-button {
+    color: var(--indigo-3);
+  }
+}
+
 @supports not selector(::-webkit-scrollbar) {
   html {
     scrollbar-color: rgba($action-button-color, 0.25)
@@ -532,13 +537,8 @@ a.sparkline {
   }
 }
 
-::-webkit-scrollbar-thumb {
-  opacity: 0.25;
-}
-
-.notification-group--annual-report {
-  .notification-group__icon,
-  .notification-group__main .link-button {
-    color: var(--indigo-3);
+.custom-scrollbars {
+  ::-webkit-scrollbar-thumb {
+    opacity: 0.25;
   }
 }
diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss
index 2d5e1b109..23d846ae8 100644
--- a/app/javascript/styles/mastodon-light/variables.scss
+++ b/app/javascript/styles/mastodon-light/variables.scss
@@ -80,4 +80,5 @@ body {
   --rich-text-text-color: rgba(114, 47, 83, 100%);
   --rich-text-decorations-color: rgba(255, 175, 212, 100%);
   --input-placeholder-color: #{transparentize($dark-text-color, 0.5)};
+  --input-background-color: #{darken($ui-base-color, 10%)};
 }
diff --git a/app/javascript/styles/mastodon/_mixins.scss b/app/javascript/styles/mastodon/_mixins.scss
index c2e4acba4..2599cb0e0 100644
--- a/app/javascript/styles/mastodon/_mixins.scss
+++ b/app/javascript/styles/mastodon/_mixins.scss
@@ -4,7 +4,7 @@
   width: 100%;
   box-shadow: none;
   font-family: inherit;
-  background: $ui-base-color;
+  background: var(--input-background-color);
   color: $darker-text-color;
   border-radius: 4px;
   border: 1px solid var(--background-border-color);
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index 48fe9449f..9307c2188 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -31,13 +31,41 @@ $fluid-breakpoint: $maximum-width + 20px;
     padding-inline-start: 3em;
     font-weight: 500;
     counter-increment: list-counter;
+    min-height: 4ch;
+
+    button {
+      background: transparent;
+      border: 0;
+      padding: 0;
+      margin: 0;
+      text-align: start;
+      font: inherit;
+
+      &:hover,
+      &:focus,
+      &:active {
+        background: transparent;
+      }
+
+      &[aria-expanded='false'] .rules-list__hint {
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+
+        @supports (-webkit-line-clamp: 2) {
+          display: -webkit-box;
+          -webkit-line-clamp: 2;
+          -webkit-box-orient: vertical;
+          white-space: normal;
+        }
+      }
+    }
 
     &::before {
       content: counter(list-counter);
       position: absolute;
       inset-inline-start: 0;
-      top: 50%;
-      transform: translateY(-50%);
+      top: 1em;
       background: $highlight-text-color;
       color: $ui-base-color;
       border-radius: 50%;
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 2c6efb71b..a80bf5971 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -44,6 +44,10 @@
     color: $ui-primary-color;
     cursor: default;
   }
+
+  &:focus-visible {
+    outline: $ui-button-icon-focus-outline;
+  }
 }
 
 .button {
@@ -419,10 +423,10 @@ body > [data-popper-placement] {
 
   &__suggestions {
     box-shadow: var(--dropdown-shadow);
-    background: $ui-base-color;
+    background: var(--input-background-color);
     border: 1px solid var(--background-border-color);
     border-radius: 0 0 4px 4px;
-    color: $secondary-text-color;
+    color: var(--on-input-color);
     font-size: 14px;
     padding: 0;
 
@@ -435,7 +439,7 @@ body > [data-popper-placement] {
       font-size: 14px;
       line-height: 20px;
       letter-spacing: 0.25px;
-      color: $secondary-text-color;
+      color: var(--on-input-color);
 
       &:last-child {
         border-radius: 0 0 4px 4px;
@@ -549,7 +553,7 @@ body > [data-popper-placement] {
     transition: border-color 300ms linear;
     min-height: 0;
     position: relative;
-    background: $ui-base-color;
+    background: var(--input-background-color);
     overflow-y: auto;
 
     &.active {
@@ -622,7 +626,7 @@ body > [data-popper-placement] {
     width: 100%;
     margin: 0;
     color: $secondary-text-color;
-    background: $ui-base-color;
+    background: var(--input-background-color);
     font-family: inherit;
     font-size: 14px;
     padding: 12px;
@@ -964,7 +968,7 @@ body > [data-popper-placement] {
   p {
     font-size: 15px;
     line-height: 22px;
-    color: $darker-text-color;
+    color: $secondary-text-color;
     margin-bottom: 20px;
 
     strong {
@@ -1073,26 +1077,6 @@ body > [data-popper-placement] {
     color: $highlight-text-color;
   }
 
-  .status__content__spoiler-link {
-    background: $action-button-color;
-
-    &:hover,
-    &:focus {
-      background: lighten($action-button-color, 7%);
-      text-decoration: none;
-    }
-
-    &::-moz-focus-inner {
-      border: 0;
-    }
-
-    &::-moz-focus-inner,
-    &:focus,
-    &:active {
-      outline: 0 !important;
-    }
-  }
-
   .status__content__text {
     display: none;
 
@@ -1350,21 +1334,6 @@ body > [data-popper-placement] {
   color: $dark-text-color;
 }
 
-.status__content__spoiler-link {
-  display: inline-block;
-  border-radius: 2px;
-  background: transparent;
-  border: 0;
-  color: $inverted-text-color;
-  font-weight: 700;
-  font-size: 11px;
-  padding: 0 6px;
-  text-transform: uppercase;
-  line-height: 20px;
-  cursor: pointer;
-  vertical-align: top;
-}
-
 .status__wrapper--filtered {
   color: $dark-text-color;
   border: 0;
@@ -1732,11 +1701,6 @@ body > [data-popper-placement] {
       height: 24px;
       margin: -1px 0 0;
     }
-
-    .status__content__spoiler-link {
-      line-height: 24px;
-      margin: -1px 0 0;
-    }
   }
 
   .media-gallery,
@@ -2284,17 +2248,6 @@ a.account__display-name {
   .status__avatar {
     opacity: 0.5;
   }
-
-  a.status__content__spoiler-link {
-    background: $ui-base-lighter-color;
-    color: $inverted-text-color;
-
-    &:hover,
-    &:focus {
-      background: lighten($ui-base-lighter-color, 7%);
-      text-decoration: none;
-    }
-  }
 }
 
 .notification__report {
@@ -3247,203 +3200,6 @@ $ui-header-logo-wordmark-width: 99px;
   }
 }
 
-.onboarding__footer {
-  margin-top: 30px;
-  color: $dark-text-color;
-  text-align: center;
-  font-size: 14px;
-
-  .link-button {
-    display: inline-block;
-    color: inherit;
-    font-size: inherit;
-  }
-}
-
-.onboarding__link {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  gap: 10px;
-  color: $highlight-text-color;
-  background: lighten($ui-base-color, 4%);
-  border-radius: 8px;
-  padding: 10px 15px;
-  box-sizing: border-box;
-  font-size: 14px;
-  font-weight: 500;
-  height: 56px;
-  text-decoration: none;
-
-  svg {
-    height: 1.5em;
-  }
-
-  &:hover,
-  &:focus,
-  &:active {
-    background: lighten($ui-base-color, 8%);
-  }
-}
-
-.onboarding__illustration {
-  display: block;
-  margin: 0 auto;
-  margin-bottom: 10px;
-  max-height: 200px;
-  width: auto;
-}
-
-.onboarding__lead {
-  font-size: 16px;
-  line-height: 24px;
-  font-weight: 400;
-  color: $darker-text-color;
-  text-align: center;
-  margin-bottom: 30px;
-
-  strong {
-    font-weight: 700;
-    color: $secondary-text-color;
-  }
-}
-
-.onboarding__links {
-  margin-bottom: 30px;
-
-  & > * {
-    margin-bottom: 2px;
-
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-}
-
-.onboarding__steps {
-  margin-bottom: 30px;
-
-  &__item {
-    background: lighten($ui-base-color, 4%);
-    border: 0;
-    border-radius: 8px;
-    display: flex;
-    width: 100%;
-    box-sizing: border-box;
-    align-items: center;
-    gap: 10px;
-    padding: 10px;
-    padding-inline-end: 15px;
-    margin-bottom: 2px;
-    text-decoration: none;
-    text-align: start;
-
-    &:hover,
-    &:focus,
-    &:active {
-      background: lighten($ui-base-color, 8%);
-    }
-
-    &__icon {
-      flex: 0 0 auto;
-      border-radius: 50%;
-      display: none;
-      align-items: center;
-      justify-content: center;
-      width: 36px;
-      height: 36px;
-      color: $highlight-text-color;
-      font-size: 1.2rem;
-
-      @media screen and (width >= 600px) {
-        display: flex;
-      }
-    }
-
-    &__progress {
-      flex: 0 0 auto;
-      background: $valid-value-color;
-      border-radius: 50%;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      width: 21px;
-      height: 21px;
-      color: $primary-text-color;
-
-      svg {
-        height: 14px;
-        width: auto;
-      }
-    }
-
-    &__go {
-      flex: 0 0 auto;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      width: 21px;
-      height: 21px;
-      color: $highlight-text-color;
-      font-size: 17px;
-
-      svg {
-        height: 1.5em;
-        width: auto;
-      }
-    }
-
-    &__description {
-      flex: 1 1 auto;
-      line-height: 20px;
-
-      h6 {
-        color: $highlight-text-color;
-        font-weight: 500;
-        font-size: 14px;
-      }
-
-      p {
-        color: $darker-text-color;
-        overflow: hidden;
-      }
-    }
-  }
-}
-
-.follow-recommendations {
-  background: darken($ui-base-color, 4%);
-  border-radius: 8px;
-  margin-bottom: 30px;
-
-  .account:last-child {
-    border-bottom: 0;
-  }
-
-  &__empty {
-    text-align: center;
-    color: $darker-text-color;
-    font-weight: 500;
-    padding: 40px;
-  }
-}
-
-.tip-carousel {
-  border: 1px solid transparent;
-  border-radius: 8px;
-  padding: 16px;
-  margin-bottom: 30px;
-
-  &:focus {
-    outline: 0;
-    border-color: $highlight-text-color;
-  }
-
-  .media-modal__pagination {
-    margin-bottom: 0;
-  }
-}
-
 .copy-paste-text {
   background: lighten($ui-base-color, 4%);
   border-radius: 8px;
@@ -3490,9 +3246,10 @@ $ui-header-logo-wordmark-width: 99px;
 .onboarding__profile {
   position: relative;
   margin-bottom: 40px + 20px;
+  margin-top: -20px;
 
   .app-form__avatar-input {
-    border: 2px solid $ui-base-color;
+    border: 2px solid var(--background-color);
     position: absolute;
     inset-inline-start: -2px;
     bottom: -40px;
@@ -5569,7 +5326,7 @@ a.status-card {
     inset-inline-start: 0;
     margin-top: -2px;
     width: 100%;
-    background: $ui-base-color;
+    background: var(--input-background-color);
     border: 1px solid var(--background-border-color);
     border-radius: 0 0 4px 4px;
     box-shadow: var(--dropdown-shadow);
@@ -6041,119 +5798,44 @@ a.status-card {
   }
 }
 
-.onboarding-modal,
-.error-modal,
-.embed-modal {
-  background: $ui-secondary-color;
-  color: $inverted-text-color;
-  border-radius: 8px;
-  overflow: hidden;
-  display: flex;
+.modal-placeholder {
+  width: 588px;
+  min-height: 478px;
   flex-direction: column;
-}
+  background: var(--modal-background-color);
+  backdrop-filter: var(--background-filter);
+  border: 1px solid var(--modal-border-color);
+  border-radius: 16px;
 
-.error-modal__body {
-  height: 80vh;
-  width: 80vw;
-  max-width: 520px;
-  max-height: 420px;
-  position: relative;
-
-  & > div {
-    position: absolute;
-    top: 0;
-    inset-inline-start: 0;
-    width: 100%;
-    height: 100%;
-    box-sizing: border-box;
-    padding: 25px;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
+  &__error {
+    padding: 24px;
     display: flex;
-    opacity: 0;
-    user-select: text;
-  }
-}
+    align-items: center;
+    flex-direction: column;
 
-.error-modal__body {
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  text-align: center;
-}
-
-.onboarding-modal__paginator,
-.error-modal__footer {
-  flex: 0 0 auto;
-  background: darken($ui-secondary-color, 8%);
-  display: flex;
-  padding: 25px;
-
-  & > div {
-    min-width: 33px;
-  }
-
-  .onboarding-modal__nav,
-  .error-modal__nav {
-    color: $lighter-text-color;
-    border: 0;
-    font-size: 14px;
-    font-weight: 500;
-    padding: 10px 25px;
-    line-height: inherit;
-    height: auto;
-    margin: -10px;
-    border-radius: 4px;
-    background-color: transparent;
-
-    &:hover,
-    &:focus,
-    &:active {
-      color: darken($lighter-text-color, 4%);
-      background-color: darken($ui-secondary-color, 16%);
+    &__image {
+      width: 70%;
+      max-width: 350px;
     }
 
-    &.onboarding-modal__done,
-    &.onboarding-modal__next {
-      color: $inverted-text-color;
+    &__message {
+      text-align: center;
+      text-wrap: balance;
+      font-size: 14px;
+      line-height: 20px;
+      letter-spacing: 0.25px;
 
-      &:hover,
-      &:focus,
-      &:active {
-        color: lighten($inverted-text-color, 4%);
+      &__actions {
+        margin-top: 24px;
+        display: flex;
+        gap: 10px;
+        align-items: center;
+        justify-content: center;
       }
     }
   }
 }
 
-.error-modal__footer {
-  justify-content: center;
-}
-
-.display-case {
-  text-align: center;
-  font-size: 15px;
-  margin-bottom: 15px;
-
-  &__label {
-    font-weight: 500;
-    color: $inverted-text-color;
-    margin-bottom: 5px;
-    text-transform: uppercase;
-    font-size: 12px;
-  }
-
-  &__case {
-    background: $ui-base-color;
-    color: $secondary-text-color;
-    font-weight: 500;
-    padding: 10px;
-    border-radius: 4px;
-  }
-}
-
 .safety-action-modal {
   width: 600px;
   flex-direction: column;
@@ -6577,15 +6259,6 @@ a.status-card {
     color: $primary-text-color;
   }
 
-  .status__content__spoiler-link {
-    color: $primary-text-color;
-    background: $ui-primary-color;
-
-    &:hover {
-      background: lighten($ui-primary-color, 8%);
-    }
-  }
-
   .dialog-option {
     align-items: center;
     gap: 12px;
@@ -8192,7 +7865,7 @@ noscript {
       }
 
       .icon-button {
-        border: 1px solid lighten($ui-base-color, 12%);
+        border: 1px solid var(--background-border-color);
         border-radius: 4px;
         box-sizing: content-box;
         padding: 5px;
@@ -10144,6 +9817,30 @@ noscript {
       line-height: 33px;
       font-weight: 700;
     }
+
+    &__buttons {
+      display: flex;
+      align-items: center;
+      gap: 8px;
+
+      .button {
+        flex-shrink: 1;
+        white-space: nowrap;
+        min-width: 80px;
+      }
+
+      .icon-button {
+        border: 1px solid var(--background-border-color);
+        border-radius: 4px;
+        box-sizing: content-box;
+        padding: 5px;
+
+        .icon {
+          width: 24px;
+          height: 24px;
+        }
+      }
+    }
   }
 }
 
@@ -11116,19 +10813,22 @@ noscript {
 
 .column-search-header {
   display: flex;
-  border-radius: 4px 4px 0 0;
+  gap: 12px;
+  align-items: center;
   border: 1px solid var(--background-border-color);
-
-  .column-header__back-button.compact {
-    flex: 0 0 auto;
-    color: $primary-text-color;
-  }
+  border-top: 0;
+  border-bottom: 0;
+  padding: 16px;
+  padding-bottom: 8px;
 
   input {
-    background: transparent;
-    border: 0;
-    color: $primary-text-color;
+    background: var(--input-background-color);
+    border: 1px solid var(--background-border-color);
+    color: var(--on-input-color);
+    padding: 12px;
     font-size: 16px;
+    line-height: normal;
+    border-radius: 4px;
     display: block;
     flex: 1 1 auto;
 
diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss
index 69bd1ca9d..0d7992aba 100644
--- a/app/javascript/styles/mastodon/forms.scss
+++ b/app/javascript/styles/mastodon/forms.scss
@@ -1255,13 +1255,13 @@ code {
 }
 
 .app-form {
-  padding: 20px;
+  padding: 16px;
 
   &__avatar-input,
   &__header-input {
     display: block;
     border-radius: 8px;
-    background: var(--dropdown-background-color);
+    background: var(--surface-variant-background-color);
     position: relative;
     cursor: pointer;
 
@@ -1309,7 +1309,7 @@ code {
     }
 
     &:hover {
-      background-color: var(--dropdown-border-color);
+      background-color: var(--surface-variant-active-background-color);
     }
   }
 
diff --git a/app/javascript/styles/mastodon/reset.scss b/app/javascript/styles/mastodon/reset.scss
index fc0305baf..d1ca4a183 100644
--- a/app/javascript/styles/mastodon/reset.scss
+++ b/app/javascript/styles/mastodon/reset.scss
@@ -59,24 +59,26 @@ table {
   }
 }
 
-::-webkit-scrollbar {
-  width: 8px;
-  height: 8px;
-}
+.custom-scrollbars {
+  ::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+  }
 
-::-webkit-scrollbar-thumb {
-  background-color: $action-button-color;
-  border: 2px var(--background-border-color);
-  border-radius: 12px;
-  width: 6px;
-  box-shadow: inset 0 0 0 2px var(--background-border-color);
-}
+  ::-webkit-scrollbar-thumb {
+    background-color: $action-button-color;
+    border: 2px var(--background-border-color);
+    border-radius: 12px;
+    width: 6px;
+    box-shadow: inset 0 0 0 2px var(--background-border-color);
+  }
 
-::-webkit-scrollbar-track {
-  background-color: var(--background-border-color);
-  border-radius: 0px;
-}
+  ::-webkit-scrollbar-track {
+    background-color: var(--background-border-color);
+    border-radius: 0px;
+  }
 
-::-webkit-scrollbar-corner {
-  background: transparent;
+  ::-webkit-scrollbar-corner {
+    background: transparent;
+  }
 }
diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss
index 2036f01af..2095eb310 100644
--- a/app/javascript/styles/mastodon/variables.scss
+++ b/app/javascript/styles/mastodon/variables.scss
@@ -120,4 +120,6 @@ $font-monospace: 'mastodon-font-monospace' !default;
   --rich-text-text-color: rgba(255, 175, 212, 100%);
   --rich-text-decorations-color: rgba(128, 58, 95, 100%);
   --input-placeholder-color: #{$dark-text-color};
+  --input-background-color: var(--surface-variant-background-color);
+  --on-input-color: #{$secondary-text-color};
 }
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index e1e879746..f46706905 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -82,9 +82,9 @@
 
 .accounts-table {
   width: 100%;
-  table-layout: fixed;
 
   .account {
+    max-width: calc(56px + 30ch);
     padding: 0;
     border: 0;
   }
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index edd1162f4..8a0043268 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -32,24 +32,31 @@ class FeedManager
     "feed:#{type}:#{id}:#{subtype}"
   end
 
+  # The filter result of the status to a particular feed
+  # @param [Symbol] timeline_type
+  # @param [Status] status
+  # @param [Account|List] receiver
+  # @return [void|Symbol] nil, :filter, or :skip_home
+  def filter(timeline_type, status, receiver)
+    case timeline_type
+    when :home
+      filter_from_home(status, receiver.id, build_crutches(receiver.id, [status]), :home)
+    when :list
+      (filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status]), :list)
+    when :mentions
+      filter_from_mentions?(status, receiver.id) ? :filter : nil
+    when :tags
+      filter_from_tags?(status, receiver.id, build_crutches(receiver.id, [status])) ? :filter : nil
+    end
+  end
+
   # Check if the status should not be added to a feed
   # @param [Symbol] timeline_type
   # @param [Status] status
   # @param [Account|List] receiver
   # @return [Boolean]
   def filter?(timeline_type, status, receiver)
-    case timeline_type
-    when :home
-      filter_from_home?(status, receiver.id, build_crutches(receiver.id, [status]), :home)
-    when :list
-      filter_from_list?(status, receiver) || filter_from_home?(status, receiver.account_id, build_crutches(receiver.account_id, [status]), :list)
-    when :mentions
-      filter_from_mentions?(status, receiver.id)
-    when :tags
-      filter_from_tags?(status, receiver.id, build_crutches(receiver.id, [status]))
-    else
-      false
-    end
+    !!filter(timeline_type, status, receiver)
   end
 
   # Add a status to a home feed and send a streaming API update
@@ -58,6 +65,7 @@ class FeedManager
   # @param [Boolean] update
   # @return [Boolean]
   def push_to_home(account, status, update: false)
+    return false unless account.user&.signed_in_recently?
     return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?)
 
     trim(:home, account.id)
@@ -83,7 +91,9 @@ class FeedManager
   # @param [Boolean] update
   # @return [Boolean]
   def push_to_list(list, status, update: false)
-    return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?)
+    return false if filter_from_list?(status, list)
+    return false unless list.account.user&.signed_in_recently?
+    return false unless add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?)
 
     trim(:list, list.id)
     PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}", { 'update' => update }) if push_update_required?("timeline:list:#{list.id}")
@@ -107,6 +117,8 @@ class FeedManager
   # @param [Account] into_account
   # @return [void]
   def merge_into_home(from_account, into_account)
+    return unless into_account.user&.signed_in_recently?
+
     timeline_key = key(:home, into_account.id)
     aggregate    = into_account.user&.aggregates_reblogs?
     query        = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
@@ -120,7 +132,7 @@ class FeedManager
     crutches = build_crutches(into_account.id, statuses)
 
     statuses.each do |status|
-      next if filter_from_home?(status, into_account.id, crutches)
+      next if filter_from_home(status, into_account.id, crutches)
 
       add_to_feed(:home, into_account.id, status, aggregate_reblogs: aggregate)
     end
@@ -133,6 +145,8 @@ class FeedManager
   # @param [List] list
   # @return [void]
   def merge_into_list(from_account, list)
+    return unless list.account.user&.signed_in_recently?
+
     timeline_key = key(:list, list.id)
     aggregate    = list.account.user&.aggregates_reblogs?
     query        = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
@@ -146,7 +160,7 @@ class FeedManager
     crutches = build_crutches(list.account_id, statuses)
 
     statuses.each do |status|
-      next if filter_from_home?(status, list.account_id, crutches) || filter_from_list?(status, list)
+      next if filter_from_home(status, list.account_id, crutches) || filter_from_list?(status, list)
 
       add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate)
     end
@@ -278,7 +292,7 @@ class FeedManager
       crutches = build_crutches(account.id, statuses)
 
       statuses.each do |status|
-        next if filter_from_home?(status, account.id, crutches)
+        next if filter_from_home(status, account.id, crutches)
 
         add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate)
       end
@@ -371,12 +385,12 @@ class FeedManager
   # @param [Status] status
   # @param [Integer] receiver_id
   # @param [Hash] crutches
-  # @return [Boolean]
-  def filter_from_home?(status, receiver_id, crutches, timeline_type = :home)
-    return false if receiver_id == status.account_id
-    return true  if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
-    return true if timeline_type != :list && crutches[:exclusive_list_users][status.account_id].present?
-    return true if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language)
+  # @return [void|Symbol] nil, :skip_home, or :filter
+  def filter_from_home(status, receiver_id, crutches, timeline_type = :home)
+    return            if receiver_id == status.account_id
+    return :filter    if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
+    return :skip_home if timeline_type != :list && crutches[:exclusive_list_users][status.account_id].present?
+    return :filter    if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language)
 
     check_for_blocks = crutches[:active_mentions][status.id] || []
     check_for_blocks.push(status.account_id)
@@ -386,24 +400,22 @@ class FeedManager
       check_for_blocks.concat(crutches[:active_mentions][status.reblog_of_id] || [])
     end
 
-    return true if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] }
-    return true if crutches[:blocked_by][status.account_id]
+    return :filter if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] }
+    return :filter if crutches[:blocked_by][status.account_id]
 
     if status.reply? && !status.in_reply_to_account_id.nil?                                                                      # Filter out if it's a reply
       should_filter   = !crutches[:following][status.in_reply_to_account_id]                                                     # and I'm not following the person it's a reply to
       should_filter &&= receiver_id != status.in_reply_to_account_id                                                             # and it's not a reply to me
       should_filter &&= status.account_id != status.in_reply_to_account_id                                                       # and it's not a self-reply
-
-      return !!should_filter
     elsif status.reblog?                                                                                                         # Filter out a reblog
       should_filter   = crutches[:hiding_reblogs][status.account_id]                                                             # if the reblogger's reblogs are suppressed
       should_filter ||= crutches[:blocked_by][status.reblog.account_id]                                                          # or if the author of the reblogged status is blocking me
       should_filter ||= crutches[:domain_blocking][status.reblog.account.domain]                                                 # or the author's domain is blocked
-
-      return !!should_filter
+    else
+      should_filter = false
     end
 
-    false
+    should_filter ? :filter : nil
   end
 
   # Check if status should not be added to the mentions feed
diff --git a/app/models/concerns/account/avatar.rb b/app/models/concerns/account/avatar.rb
index 5ca8fa862..a60a289d5 100644
--- a/app/models/concerns/account/avatar.rb
+++ b/app/models/concerns/account/avatar.rb
@@ -3,9 +3,8 @@
 module Account::Avatar
   extend ActiveSupport::Concern
 
-  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
-  LIMIT = 2.megabytes
-
+  AVATAR_IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
+  AVATAR_LIMIT = Rails.configuration.x.use_vips ? 8.megabytes : 2.megabytes
   AVATAR_DIMENSIONS = [400, 400].freeze
   AVATAR_GEOMETRY = [AVATAR_DIMENSIONS.first, AVATAR_DIMENSIONS.last].join('x')
 
@@ -22,9 +21,9 @@ module Account::Avatar
   included do
     # Avatar upload
     has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail]
-    validates_attachment_content_type :avatar, content_type: IMAGE_MIME_TYPES
-    validates_attachment_size :avatar, less_than: LIMIT
-    remotable_attachment :avatar, LIMIT, suppress_errors: false
+    validates_attachment_content_type :avatar, content_type: AVATAR_IMAGE_MIME_TYPES
+    validates_attachment_size :avatar, less_than: AVATAR_LIMIT
+    remotable_attachment :avatar, AVATAR_LIMIT, suppress_errors: false
   end
 
   def avatar_original_url
diff --git a/app/models/concerns/account/header.rb b/app/models/concerns/account/header.rb
index 2a47097fc..662ee7caf 100644
--- a/app/models/concerns/account/header.rb
+++ b/app/models/concerns/account/header.rb
@@ -3,16 +3,15 @@
 module Account::Header
   extend ActiveSupport::Concern
 
-  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
-  LIMIT = 2.megabytes
-
+  HEADER_IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
+  HEADER_LIMIT = Rails.configuration.x.use_vips ? 8.megabytes : 2.megabytes
   HEADER_DIMENSIONS = [1500, 500].freeze
   HEADER_GEOMETRY = [HEADER_DIMENSIONS.first, HEADER_DIMENSIONS.last].join('x')
-  MAX_PIXELS = HEADER_DIMENSIONS.first * HEADER_DIMENSIONS.last
+  HEADER_MAX_PIXELS = HEADER_DIMENSIONS.first * HEADER_DIMENSIONS.last
 
   class_methods do
     def header_styles(file)
-      styles = { original: { pixels: MAX_PIXELS, file_geometry_parser: FastGeometryParser } }
+      styles = { original: { pixels: HEADER_MAX_PIXELS, file_geometry_parser: FastGeometryParser } }
       styles[:static] = { format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif'
       styles
     end
@@ -23,9 +22,9 @@ module Account::Header
   included do
     # Header upload
     has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail]
-    validates_attachment_content_type :header, content_type: IMAGE_MIME_TYPES
-    validates_attachment_size :header, less_than: LIMIT
-    remotable_attachment :header, LIMIT, suppress_errors: false
+    validates_attachment_content_type :header, content_type: HEADER_IMAGE_MIME_TYPES
+    validates_attachment_size :header, less_than: HEADER_LIMIT
+    remotable_attachment :header, HEADER_LIMIT, suppress_errors: false
   end
 
   def header_original_url
diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb
index 6f6b8c16d..6e2dc9126 100644
--- a/app/models/concerns/account/interactions.rb
+++ b/app/models/concerns/account/interactions.rb
@@ -88,6 +88,9 @@ module Account::Interactions
       has_many :remote_severed_relationships, foreign_key: 'remote_account_id', inverse_of: :remote_account
     end
 
+    # Hashtag follows
+    has_many :tag_follows, inverse_of: :account, dependent: :destroy
+
     # Account notes
     has_many :account_notes, dependent: :destroy
 
diff --git a/app/models/concerns/account/merging.rb b/app/models/concerns/account/merging.rb
index bd8b16223..181061c37 100644
--- a/app/models/concerns/account/merging.rb
+++ b/app/models/concerns/account/merging.rb
@@ -16,7 +16,7 @@ module Account::Merging
       Follow, FollowRequest, Block, Mute,
       AccountModerationNote, AccountPin, AccountStat, ListAccount,
       PollVote, Mention, AccountDeletionRequest, AccountNote, FollowRecommendationSuppression,
-      Appeal
+      Appeal, TagFollow
     ]
 
     owned_classes.each do |klass|
diff --git a/app/models/concerns/user/has_settings.rb b/app/models/concerns/user/has_settings.rb
index 1202f2033..14d2f22c2 100644
--- a/app/models/concerns/user/has_settings.rb
+++ b/app/models/concerns/user/has_settings.rb
@@ -43,6 +43,10 @@ module User::HasSettings
     settings['web.use_system_font']
   end
 
+  def setting_system_scrollbars_ui
+    settings['web.use_system_scrollbars']
+  end
+
   def setting_noindex
     settings['noindex']
   end
diff --git a/app/models/list_account.rb b/app/models/list_account.rb
index 2ff860571..cfbcdbf0d 100644
--- a/app/models/list_account.rb
+++ b/app/models/list_account.rb
@@ -25,17 +25,16 @@ class ListAccount < ApplicationRecord
   private
 
   def set_follow
-    self.follow = Follow.find_by!(account_id: list.account_id, target_account_id: account.id)
-  rescue ActiveRecord::RecordNotFound
-    self.follow_request = FollowRequest.find_by!(account_id: list.account_id, target_account_id: account.id)
+    self.follow = Follow.find_by(account_id: list.account_id, target_account_id: account.id)
+    self.follow_request = FollowRequest.find_by(account_id: list.account_id, target_account_id: account.id) if follow.nil?
   end
 
   def validate_relationship
-    return if list.account_id == account_id
+    return if list_owner_account_is_account?
 
-    errors.add(:account_id, 'follow relationship missing') if follow_id.nil? && follow_request_id.nil?
-    errors.add(:follow, 'mismatched accounts') if follow_id.present? && follow.target_account_id != account_id
-    errors.add(:follow_request, 'mismatched accounts') if follow_request_id.present? && follow_request.target_account_id != account_id
+    errors.add(:account_id, :must_be_following) if follow_id.nil? && follow_request_id.nil?
+    errors.add(:follow, :invalid) if follow_id.present? && follow.target_account_id != account_id
+    errors.add(:follow_request, :invalid) if follow_request_id.present? && follow_request.target_account_id != account_id
   end
 
   def list_owner_account_is_account?
diff --git a/app/models/relay.rb b/app/models/relay.rb
index 1a8fdebc7..813a861c6 100644
--- a/app/models/relay.rb
+++ b/app/models/relay.rb
@@ -13,7 +13,7 @@
 #
 
 class Relay < ApplicationRecord
-  validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url?
+  validates :inbox_url, presence: true, uniqueness: true, url: true # rubocop:disable Rails/UniqueValidationWithoutIndex
 
   enum :state, { idle: 0, pending: 1, accepted: 2, rejected: 3 }
 
diff --git a/app/models/user.rb b/app/models/user.rb
index c90a78f0c..310ec77a1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -165,6 +165,10 @@ class User < ApplicationRecord
     end
   end
 
+  def signed_in_recently?
+    current_sign_in_at.present? && current_sign_in_at >= ACTIVE_DURATION.ago
+  end
+
   def confirmed?
     confirmed_at.present?
   end
diff --git a/app/models/user_role.rb b/app/models/user_role.rb
index 23cc28b9b..815a89408 100644
--- a/app/models/user_role.rb
+++ b/app/models/user_role.rb
@@ -142,6 +142,10 @@ class UserRole < ApplicationRecord
     other_role.nil? || position > other_role.position
   end
 
+  def bypass_block?(role)
+    overrides?(role) && highlighted? && can?(*Flags::CATEGORIES[:moderation])
+  end
+
   def computed_permissions
     # If called on the everyone role, no further computation needed
     return permissions if everyone?
diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb
index 0ae8ab8ec..7db14407a 100644
--- a/app/models/user_settings.rb
+++ b/app/models/user_settings.rb
@@ -24,6 +24,7 @@ class UserSettings
     setting :use_blurhash, default: true
     setting :use_pending_items, default: false
     setting :use_system_font, default: false
+    setting :use_system_scrollbars, default: false
     setting :disable_swiping, default: false
     setting :disable_hover_cards, default: false
     setting :delete_modal, default: true
diff --git a/app/models/webhook.rb b/app/models/webhook.rb
index 304b2b1f1..f9d6564c9 100644
--- a/app/models/webhook.rb
+++ b/app/models/webhook.rb
@@ -53,7 +53,7 @@ class Webhook < ApplicationRecord
   end
 
   def required_permissions
-    events.map { |event| Webhook.permission_for_event(event) }
+    events.map { |event| Webhook.permission_for_event(event) }.uniq
   end
 
   def self.permission_for_event(event)
diff --git a/app/serializers/rest/tag_serializer.rb b/app/serializers/rest/tag_serializer.rb
index 017b57271..a2bcb5fd1 100644
--- a/app/serializers/rest/tag_serializer.rb
+++ b/app/serializers/rest/tag_serializer.rb
@@ -3,10 +3,14 @@
 class REST::TagSerializer < ActiveModel::Serializer
   include RoutingHelper
 
-  attributes :name, :url, :history
+  attributes :id, :name, :url, :history
 
   attribute :following, if: :current_user?
 
+  def id
+    object.id.to_s
+  end
+
   def url
     tag_url(object)
   end
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 1c7584b76..2ddecb634 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -192,6 +192,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
   def update_mentions!
     previous_mentions = @status.active_mentions.includes(:account).to_a
     current_mentions  = []
+    unresolved_mentions = []
 
     @raw_mentions.each do |href|
       next if href.blank?
@@ -205,6 +206,12 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
       mention ||= account.mentions.new(status: @status)
 
       current_mentions << mention
+    rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
+      # Since previous mentions are about already-known accounts,
+      # they don't try to resolve again and won't fall into this case.
+      # In other words, this failure case is only for new mentions and won't
+      # affect `removed_mentions` so they can safely be retried asynchronously
+      unresolved_mentions << href
     end
 
     current_mentions.each do |mention|
@@ -217,6 +224,11 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
     removed_mentions = previous_mentions - current_mentions
 
     Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty?
+
+    # Queue unresolved mentions for later
+    unresolved_mentions.uniq.each do |uri|
+      MentionResolveWorker.perform_in(rand(30...600).seconds, @status.id, uri, { 'request_id' => @request_id })
+    end
   end
 
   def update_emojis!
diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb
index 0c03267d4..7d06302af 100644
--- a/app/services/delete_account_service.rb
+++ b/app/services/delete_account_service.rb
@@ -50,6 +50,7 @@ class DeleteAccountService < BaseService
     owned_lists
     scheduled_statuses
     status_pins
+    tag_follows
   )
 
   ASSOCIATIONS_ON_DESTROY = %w(
diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb
index 0cf56c5a2..e87e5024f 100644
--- a/app/services/notify_service.rb
+++ b/app/services/notify_service.rb
@@ -134,7 +134,7 @@ class NotifyService < BaseService
     end
 
     def from_staff?
-      @sender.local? && @sender.user.present? && @sender.user_role&.overrides?(@recipient.user_role) && @sender.user_role&.highlighted? && @sender.user_role&.can?(*UserRole::Flags::CATEGORIES[:moderation])
+      @sender.local? && @sender.user.present? && @sender.user_role&.bypass_block?(@recipient.user_role)
     end
 
     def from_self?
diff --git a/app/views/auth/registrations/rules.html.haml b/app/views/auth/registrations/rules.html.haml
index 3a05ed54f..69459c023 100644
--- a/app/views/auth/registrations/rules.html.haml
+++ b/app/views/auth/registrations/rules.html.haml
@@ -19,8 +19,9 @@
   %ol.rules-list
     - @rules.each do |rule|
       %li
-        .rules-list__text= rule.text
-        .rules-list__hint= rule.hint
+        %button{ type: 'button', aria: { expanded: 'false' } }
+          .rules-list__text= rule.text
+          .rules-list__hint= rule.hint
 
   .stacked-actions
     - accept_path = @invite_code.present? ? public_invite_url(invite_code: @invite_code, accept: @accept_token) : new_user_registration_path(accept: @accept_token)
diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml
index 1239b8bcd..08cfea5a4 100644
--- a/app/views/settings/preferences/appearance/show.html.haml
+++ b/app/views/settings/preferences/appearance/show.html.haml
@@ -59,6 +59,7 @@
       = ff.input :'web.disable_swiping', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_swiping')
       = ff.input :'web.disable_hover_cards', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_hover_cards')
       = ff.input :'web.use_system_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_font_ui')
+      = ff.input :'web.use_system_scrollbars', wrapper: :with_label, hint: I18n.t('simple_form.hints.defaults.setting_system_scrollbars_ui'), label: I18n.t('simple_form.labels.defaults.setting_system_scrollbars_ui')
 
     %h4= t 'appearance.discovery'
 
diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml
index 427a4fa95..3815eb7fc 100644
--- a/app/views/settings/profiles/show.html.haml
+++ b/app/views/settings/profiles/show.html.haml
@@ -34,8 +34,8 @@
     .fields-row__column.fields-row__column-6
       .fields-group
         = f.input :avatar,
-                  hint: t('simple_form.hints.defaults.avatar', dimensions: Account::Avatar::AVATAR_GEOMETRY, size: number_to_human_size(Account::Avatar::LIMIT)),
-                  input_html: { accept: Account::Avatar::IMAGE_MIME_TYPES.join(',') },
+                  hint: t('simple_form.hints.defaults.avatar', dimensions: Account::Avatar::AVATAR_GEOMETRY, size: number_to_human_size(Account::Avatar::AVATAR_LIMIT)),
+                  input_html: { accept: Account::Avatar::AVATAR_IMAGE_MIME_TYPES.join(',') },
                   wrapper: :with_block_label
 
     .fields-row__column.fields-row__column-6
@@ -50,8 +50,8 @@
     .fields-row__column.fields-row__column-6
       .fields-group
         = f.input :header,
-                  hint: t('simple_form.hints.defaults.header', dimensions: Account::Header::HEADER_GEOMETRY, size: number_to_human_size(Account::Header::LIMIT)),
-                  input_html: { accept: Account::Header::IMAGE_MIME_TYPES.join(',') },
+                  hint: t('simple_form.hints.defaults.header', dimensions: Account::Header::HEADER_GEOMETRY, size: number_to_human_size(Account::Header::HEADER_LIMIT)),
+                  input_html: { accept: Account::Header::HEADER_IMAGE_MIME_TYPES.join(',') },
                   wrapper: :with_block_label
 
     .fields-row__column.fields-row__column-6
diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb
index fd7dbd30d..e883daf3e 100644
--- a/app/workers/feed_insert_worker.rb
+++ b/app/workers/feed_insert_worker.rb
@@ -29,27 +29,31 @@ class FeedInsertWorker
   private
 
   def check_and_insert
-    if feed_filtered?
+    filter_result = feed_filter
+
+    if filter_result
       perform_unpush if update?
     else
       perform_push
-      perform_notify if notify?
     end
+
+    perform_notify if notify?(filter_result)
   end
 
-  def feed_filtered?
+  def feed_filter
     case @type
     when :home
-      FeedManager.instance.filter?(:home, @status, @follower)
+      FeedManager.instance.filter(:home, @status, @follower)
     when :tags
-      FeedManager.instance.filter?(:tags, @status, @follower)
+      FeedManager.instance.filter(:tags, @status, @follower)
     when :list
-      FeedManager.instance.filter?(:list, @status, @list)
+      FeedManager.instance.filter(:list, @status, @list)
     end
   end
 
-  def notify?
-    return false if @type != :home || @status.reblog? || (@status.reply? && @status.in_reply_to_account_id != @status.account_id)
+  def notify?(filter_result)
+    return false if @type != :home || @status.reblog? || (@status.reply? && @status.in_reply_to_account_id != @status.account_id) ||
+                    filter_result == :filter
 
     Follow.find_by(account: @follower, target_account: @status.account)&.notify?
   end
diff --git a/bin/bundler-audit b/bin/bundler-audit
new file mode 100755
index 000000000..334a73784
--- /dev/null
+++ b/bin/bundler-audit
@@ -0,0 +1,27 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'bundler-audit' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+bundle_binstub = File.expand_path("bundle", __dir__)
+
+if File.file?(bundle_binstub)
+  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
+    load(bundle_binstub)
+  else
+    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
+Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
+  end
+end
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("bundler-audit", "bundler-audit")
diff --git a/bin/haml-lint b/bin/haml-lint
new file mode 100755
index 000000000..bd5573940
--- /dev/null
+++ b/bin/haml-lint
@@ -0,0 +1,27 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'haml-lint' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+bundle_binstub = File.expand_path("bundle", __dir__)
+
+if File.file?(bundle_binstub)
+  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
+    load(bundle_binstub)
+  else
+    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
+Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
+  end
+end
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("haml_lint", "haml-lint")
diff --git a/bin/i18n-tasks b/bin/i18n-tasks
new file mode 100755
index 000000000..22cbc1f1b
--- /dev/null
+++ b/bin/i18n-tasks
@@ -0,0 +1,27 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'i18n-tasks' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+bundle_binstub = File.expand_path("bundle", __dir__)
+
+if File.file?(bundle_binstub)
+  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
+    load(bundle_binstub)
+  else
+    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
+Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
+  end
+end
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("i18n-tasks", "i18n-tasks")
diff --git a/bin/rspec b/bin/rspec
index d738b23c0..cb53ebe5f 100755
--- a/bin/rspec
+++ b/bin/rspec
@@ -1,5 +1,6 @@
 #!/usr/bin/env ruby
 # frozen_string_literal: true
+
 #
 # This file was generated by Bundler.
 #
@@ -7,9 +8,18 @@
 # this file is here to facilitate running it.
 #
 
-require "pathname"
-ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
-  Pathname.new(__FILE__).realpath)
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+bundle_binstub = File.expand_path("bundle", __dir__)
+
+if File.file?(bundle_binstub)
+  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
+    load(bundle_binstub)
+  else
+    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
+Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
+  end
+end
 
 require "rubygems"
 require "bundler/setup"
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 8533935a8..bbdd9e2fc 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -37,6 +37,11 @@ Rails.application.configure do
 
   config.action_controller.forgery_protection_origin_check = ENV['DISABLE_FORGERY_REQUEST_PROTECTION'].nil?
 
+  ActiveSupport::Logger.new($stdout).tap do |logger|
+    logger.formatter = config.log_formatter
+    config.logger = ActiveSupport::TaggedLogging.new(logger)
+  end
+
   # Generate random VAPID keys
   Webpush.generate_key.tap do |vapid_key|
     config.x.vapid_private_key = vapid_key.private_key
diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml
index 221be3f68..198029ac0 100644
--- a/config/locales/activerecord.bg.yml
+++ b/config/locales/activerecord.bg.yml
@@ -39,6 +39,11 @@ bg:
           attributes:
             data:
               malformed: е деформиран
+        list_account:
+          attributes:
+            account_id:
+              taken: е вече в списъка
+          must_be_following: трябва да е последван акаунт
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml
index 9fa0f704b..ad7c63b38 100644
--- a/config/locales/activerecord.ca.yml
+++ b/config/locales/activerecord.ca.yml
@@ -39,6 +39,11 @@ ca:
           attributes:
             data:
               malformed: està mal format
+        list_account:
+          attributes:
+            account_id:
+              taken: ja és a la llista
+          must_be_following: ha de ser un compte que seguiu
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.cy.yml b/config/locales/activerecord.cy.yml
index 0ad257db5..3620c1c2f 100644
--- a/config/locales/activerecord.cy.yml
+++ b/config/locales/activerecord.cy.yml
@@ -39,6 +39,11 @@ cy:
           attributes:
             data:
               malformed: wedi'i gamffurfio
+        list_account:
+          attributes:
+            account_id:
+              taken: eisoes ar y rhestr
+          must_be_following: rhaid iddo fod yn gyfrif dilyn
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml
index 35151f477..56dd3aa2c 100644
--- a/config/locales/activerecord.da.yml
+++ b/config/locales/activerecord.da.yml
@@ -39,6 +39,11 @@ da:
           attributes:
             data:
               malformed: har ugyldigt format
+        list_account:
+          attributes:
+            account_id:
+              taken: er allerede på listen
+          must_be_following: skal være konto, der følges
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml
index b4bcd660d..bdd916634 100644
--- a/config/locales/activerecord.de.yml
+++ b/config/locales/activerecord.de.yml
@@ -39,6 +39,11 @@ de:
           attributes:
             data:
               malformed: ist fehlerhaft
+        list_account:
+          attributes:
+            account_id:
+              taken: befindet sich bereits auf der Liste
+          must_be_following: muss ein gefolgtes Konto sein
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml
index e13585603..569c4c4d6 100644
--- a/config/locales/activerecord.en.yml
+++ b/config/locales/activerecord.en.yml
@@ -39,6 +39,11 @@ en:
           attributes:
             data:
               malformed: is malformed
+        list_account:
+          attributes:
+            account_id:
+              taken: is already on the list
+          must_be_following: must be a followed account
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml
index 45149cd11..d07a717d3 100644
--- a/config/locales/activerecord.eo.yml
+++ b/config/locales/activerecord.eo.yml
@@ -39,6 +39,11 @@ eo:
           attributes:
             data:
               malformed: estas misformita
+        list_account:
+          attributes:
+            account_id:
+              taken: jam estas sur la listo
+          must_be_following: devas esti sekvata konto
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml
index ba4d148c8..57b782b33 100644
--- a/config/locales/activerecord.es-AR.yml
+++ b/config/locales/activerecord.es-AR.yml
@@ -39,6 +39,11 @@ es-AR:
           attributes:
             data:
               malformed: está malformado
+        list_account:
+          attributes:
+            account_id:
+              taken: ya está en la lista
+          must_be_following: debe ser una cuenta que sigas
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml
index 4d2cba3a2..f5c808018 100644
--- a/config/locales/activerecord.es-MX.yml
+++ b/config/locales/activerecord.es-MX.yml
@@ -39,10 +39,15 @@ es-MX:
           attributes:
             data:
               malformed: tiene un formato incorrecto
+        list_account:
+          attributes:
+            account_id:
+              taken: ya está en la lista
+          must_be_following: debe ser una cuenta seguida
         status:
           attributes:
             reblog:
-              taken: del estado ya existe
+              taken: de la publicación ya existe
         user:
           attributes:
             email:
diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml
index 16e2c66cb..081f87ef1 100644
--- a/config/locales/activerecord.es.yml
+++ b/config/locales/activerecord.es.yml
@@ -39,6 +39,11 @@ es:
           attributes:
             data:
               malformed: tiene un formato incorrecto
+        list_account:
+          attributes:
+            account_id:
+              taken: ya está en la lista
+          must_be_following: debe ser una cuenta que sigas
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.eu.yml b/config/locales/activerecord.eu.yml
index a67c1403c..6e388b4a5 100644
--- a/config/locales/activerecord.eu.yml
+++ b/config/locales/activerecord.eu.yml
@@ -33,6 +33,11 @@ eu:
           attributes:
             data:
               malformed: gaizki eratua dago
+        list_account:
+          attributes:
+            account_id:
+              taken: dagoeneko zerrendan dago
+          must_be_following: jarraitutako kontua izan behar da
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml
index b4d91a5f1..e64c2fb80 100644
--- a/config/locales/activerecord.fi.yml
+++ b/config/locales/activerecord.fi.yml
@@ -39,6 +39,11 @@ fi:
           attributes:
             data:
               malformed: on väärin muodostettu
+        list_account:
+          attributes:
+            account_id:
+              taken: on jo listassa
+          must_be_following: on oltava seurattu tili
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.fo.yml b/config/locales/activerecord.fo.yml
index 61b924e5b..349148011 100644
--- a/config/locales/activerecord.fo.yml
+++ b/config/locales/activerecord.fo.yml
@@ -39,6 +39,11 @@ fo:
           attributes:
             data:
               malformed: er avskeplað
+        list_account:
+          attributes:
+            account_id:
+              taken: er longu á listanum
+          must_be_following: má verða ein konta, sum verður fylgd
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.fr-CA.yml b/config/locales/activerecord.fr-CA.yml
index 8deeeee01..7699adc43 100644
--- a/config/locales/activerecord.fr-CA.yml
+++ b/config/locales/activerecord.fr-CA.yml
@@ -39,6 +39,11 @@ fr-CA:
           attributes:
             data:
               malformed: est malformé
+        list_account:
+          attributes:
+            account_id:
+              taken: est déjà sur la liste
+          must_be_following: dois être un compte suivi
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml
index 2f74b16d5..423540485 100644
--- a/config/locales/activerecord.fr.yml
+++ b/config/locales/activerecord.fr.yml
@@ -39,6 +39,11 @@ fr:
           attributes:
             data:
               malformed: est mal formé
+        list_account:
+          attributes:
+            account_id:
+              taken: est déjà sur la liste
+          must_be_following: dois être un compte suivi
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.ga.yml b/config/locales/activerecord.ga.yml
index 4f83bc40a..5b36d80d7 100644
--- a/config/locales/activerecord.ga.yml
+++ b/config/locales/activerecord.ga.yml
@@ -39,6 +39,11 @@ ga:
           attributes:
             data:
               malformed: míchumtha
+        list_account:
+          attributes:
+            account_id:
+              taken: cheana féin ar an liosta
+          must_be_following: ní mór cuntas a leanúint
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml
index 961c96edb..0c4941f04 100644
--- a/config/locales/activerecord.gl.yml
+++ b/config/locales/activerecord.gl.yml
@@ -39,6 +39,11 @@ gl:
           attributes:
             data:
               malformed: ten formato incorrecto
+        list_account:
+          attributes:
+            account_id:
+              taken: xa está na lista
+          must_be_following: ten que ser unha conta que segues
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.he.yml b/config/locales/activerecord.he.yml
index 1729084a4..3696b4ce1 100644
--- a/config/locales/activerecord.he.yml
+++ b/config/locales/activerecord.he.yml
@@ -39,6 +39,11 @@ he:
           attributes:
             data:
               malformed: בתצורה לא תואמת
+        list_account:
+          attributes:
+            account_id:
+              taken: כבר ברשימה
+          must_be_following: חייב להיות חשבון נעקב
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml
index 6e376dd67..27ca9018d 100644
--- a/config/locales/activerecord.hu.yml
+++ b/config/locales/activerecord.hu.yml
@@ -39,6 +39,11 @@ hu:
           attributes:
             data:
               malformed: hibás
+        list_account:
+          attributes:
+            account_id:
+              taken: már szerepel a listán
+          must_be_following: követett fióknak kell lennie
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.ia.yml b/config/locales/activerecord.ia.yml
index 809b8fd58..fcb3f6827 100644
--- a/config/locales/activerecord.ia.yml
+++ b/config/locales/activerecord.ia.yml
@@ -39,6 +39,11 @@ ia:
           attributes:
             data:
               malformed: es mal formate
+        list_account:
+          attributes:
+            account_id:
+              taken: jam es in le lista
+          must_be_following: debe esser un conto sequite
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml
index e274cc0a9..4d90a7d80 100644
--- a/config/locales/activerecord.is.yml
+++ b/config/locales/activerecord.is.yml
@@ -39,6 +39,11 @@ is:
           attributes:
             data:
               malformed: er rangt formað
+        list_account:
+          attributes:
+            account_id:
+              taken: er þegar á listanum
+          must_be_following: verður að vera aðgangur sem fylgst er með
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml
index 6d437b72b..80bc19f7a 100644
--- a/config/locales/activerecord.ko.yml
+++ b/config/locales/activerecord.ko.yml
@@ -39,6 +39,11 @@ ko:
           attributes:
             data:
               malformed: 데이터가 올바르지 않습니다
+        list_account:
+          attributes:
+            account_id:
+              taken: 이미 목록에 존재합니다
+          must_be_following: 팔로우한 계정이어야 합니다
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.lt.yml b/config/locales/activerecord.lt.yml
index 2e4b54c62..86c9be521 100644
--- a/config/locales/activerecord.lt.yml
+++ b/config/locales/activerecord.lt.yml
@@ -39,6 +39,11 @@ lt:
           attributes:
             data:
               malformed: yra netaisyklinga.
+        list_account:
+          attributes:
+            account_id:
+              taken: jau yra sąraše.
+          must_be_following: turi būti sekama paskyra.
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.nan.yml b/config/locales/activerecord.nan.yml
new file mode 100644
index 000000000..512c65fe8
--- /dev/null
+++ b/config/locales/activerecord.nan.yml
@@ -0,0 +1 @@
+nan:
diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml
index ee3c8bf26..b25da381f 100644
--- a/config/locales/activerecord.nl.yml
+++ b/config/locales/activerecord.nl.yml
@@ -39,6 +39,11 @@ nl:
           attributes:
             data:
               malformed: heeft de verkeerde opmaak
+        list_account:
+          attributes:
+            account_id:
+              taken: staat al in de lijst
+          must_be_following: moet een gevolgd account zijn
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml
index d0e6dda58..58f2b9ac1 100644
--- a/config/locales/activerecord.pl.yml
+++ b/config/locales/activerecord.pl.yml
@@ -39,6 +39,11 @@ pl:
           attributes:
             data:
               malformed: jest uszkodzona
+        list_account:
+          attributes:
+            account_id:
+              taken: jest już na liście
+          must_be_following: musi być obserwowanym kontem
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml
index 52f2b6ee8..9e6ef9636 100644
--- a/config/locales/activerecord.pt-BR.yml
+++ b/config/locales/activerecord.pt-BR.yml
@@ -38,7 +38,12 @@ pt-BR:
         import:
           attributes:
             data:
-              malformed: está malformado
+              malformed: Está malformado
+        list_account:
+          attributes:
+            account_id:
+              taken: já está na lista
+          must_be_following: deve ser uma conta seguida
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml
index 203d8e2c3..b49a13561 100644
--- a/config/locales/activerecord.ru.yml
+++ b/config/locales/activerecord.ru.yml
@@ -39,6 +39,11 @@ ru:
           attributes:
             data:
               malformed: неверный формат
+        list_account:
+          attributes:
+            account_id:
+              taken: уже в списке
+          must_be_following: должен быть пользователем, на которого вы подписаны
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml
index 888a17a1c..9e3780668 100644
--- a/config/locales/activerecord.sq.yml
+++ b/config/locales/activerecord.sq.yml
@@ -39,6 +39,11 @@ sq:
           attributes:
             data:
               malformed: janë të keqformuara
+        list_account:
+          attributes:
+            account_id:
+              taken: gjendet tashmë në listë
+          must_be_following: duhet të jetë një llogari e ndjekur
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.tok.yml b/config/locales/activerecord.tok.yml
index 9862a7f95..c0004f12a 100644
--- a/config/locales/activerecord.tok.yml
+++ b/config/locales/activerecord.tok.yml
@@ -4,11 +4,67 @@ tok:
     attributes:
       poll:
         expires_at: pini tenpo
+        options: wile
+      user:
+        agreement: nasin lawa
+        email: nimi ilo pi pana lipu
+        locale: toki
+        password: nimi len sijelo
       user/account:
         username: nimi jan
+      user/invite_request:
+        text: tan
     errors:
+      attributes:
+        domain:
+          invalid: li nimi ilo ike
+      messages:
+        invalid_domain_on_line: nimi "%{value}" li nimi ilo ike
+        too_many_lines: la %{limit} o mute nanpa wan pi linja sitelen
       models:
         account:
           attributes:
             username:
-              reserved: jan ante li jo e nimi ni
+              invalid: 'la ni taso li ken lon: sitelen nimi, en sitelen nanpa, en sitelen pi linja anpa'
+              reserved: la jan ante li jo e nimi ni
+        admin/webhook:
+          attributes:
+            url:
+              invalid: li nimi ike pi lipu ilo
+        doorkeeper/application:
+          attributes:
+            website:
+              invalid: li nimi ike pi lipu ilo
+        import:
+          attributes:
+            data:
+              malformed: li nasin ike
+        list_account:
+          attributes:
+            account_id:
+              taken: li lon kulupu
+          must_be_following: o jan pi kute sina
+        status:
+          attributes:
+            reblog:
+              taken: pi toki ni li lon
+        user:
+          attributes:
+            email:
+              blocked: la kulupu ni pi nimi ilo li ike
+              unreachable: li lon ala tawa mi
+            role_id:
+              elevated: o anpa sina
+        user_role:
+          attributes:
+            permissions_as_keys:
+              dangerous: la jan pi wawa ala o jo ala e ken pi mute ni
+              elevated: la sina jo ala e ken la ken ni o lon ala
+              own_role: la sina wawa lili la sina ken ala ante e ona
+            position:
+              elevated: o anpa sina
+              own_role: la sina wawa lili la sina ken ala ante e ona
+        webhook:
+          attributes:
+            events:
+              invalid_permissions: la sina ken ala lon tenpo namako la tenpo ni li ken ala lon
diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml
index 505289470..e780e366b 100644
--- a/config/locales/activerecord.tr.yml
+++ b/config/locales/activerecord.tr.yml
@@ -39,6 +39,11 @@ tr:
           attributes:
             data:
               malformed: bozulmuştur
+        list_account:
+          attributes:
+            account_id:
+              taken: zaten listede var
+          must_be_following: takip edilen bir hesap olmalı
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml
index c9a4c8e1e..118ca7b8f 100644
--- a/config/locales/activerecord.uk.yml
+++ b/config/locales/activerecord.uk.yml
@@ -39,6 +39,10 @@ uk:
           attributes:
             data:
               malformed: неправильний
+        list_account:
+          attributes:
+            account_id:
+              taken: вже в списку
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml
index b48510c2e..878ba2770 100644
--- a/config/locales/activerecord.vi.yml
+++ b/config/locales/activerecord.vi.yml
@@ -39,6 +39,11 @@ vi:
           attributes:
             data:
               malformed: bị hỏng
+        list_account:
+          attributes:
+            account_id:
+              taken: đã có trong danh sách
+          must_be_following: phải theo dõi từ trước
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml
index f62015836..ef08304c3 100644
--- a/config/locales/activerecord.zh-CN.yml
+++ b/config/locales/activerecord.zh-CN.yml
@@ -39,6 +39,11 @@ zh-CN:
           attributes:
             data:
               malformed: 格式错误
+        list_account:
+          attributes:
+            account_id:
+              taken: 已经被加入到列表了
+          must_be_following: 需要是你关注的账户
         status:
           attributes:
             reblog:
diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml
index 113d881ae..aaa700731 100644
--- a/config/locales/activerecord.zh-TW.yml
+++ b/config/locales/activerecord.zh-TW.yml
@@ -39,6 +39,11 @@ zh-TW:
           attributes:
             data:
               malformed: 資料不正確
+        list_account:
+          attributes:
+            account_id:
+              taken: 已於列表中
+          must_be_following: 必須為已跟隨之帳號
         status:
           attributes:
             reblog:
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 20ee1f6c6..7ff595b41 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -61,6 +61,7 @@ bg:
       demote: Понижаване
       destroyed_msg: Данните на %{username} вече са на опашка за незабавно изтриване
       disable: Замразяване
+      disable_sign_in_token_auth: Изключване на удостоверяването с маркер по е-поща
       disable_two_factor_authentication: Изключване на 2факт. удостов.
       disabled: Замразено
       display_name: Име на показ
@@ -69,6 +70,7 @@ bg:
       email: Имейл
       email_status: Състояние на имейл
       enable: Размразяване
+      enable_sign_in_token_auth: Задействане на удостоверяването с маркер по е-поща
       enabled: Включено
       enabled_msg: Успешно размразяване на акаунта на %{username}
       followers: Последователи
@@ -133,6 +135,7 @@ bg:
       resubscribe: Абониране пак
       role: Роля
       search: Търсене
+      search_same_email_domain: Други потребители със същия домейн за е-поща
       search_same_ip: Други потребители със същия IP
       security: Сигурност
       security_measures:
@@ -173,10 +176,12 @@ bg:
         approve_appeal: Одобряване на обжалването
         approve_user: Одобряване на потребител
         assigned_to_self_report: Назначете доклад
+        change_email_user: Промяна на имейл за потребител
         change_role_user: Промяна на роля за потребител
         confirm_user: Потвърждаване на потребител
         create_account_warning: Създаване на предупреждение
         create_announcement: Създаване на оповестяване
+        create_canonical_email_block: Сътворяване на блоккиране за е-поща
         create_custom_emoji: Създаване на персонализирано емоджи
         create_domain_allow: Създаване на позволение за домейна
         create_domain_block: Създаване на блокиране за домейна
@@ -226,20 +231,26 @@ bg:
         approve_appeal_html: "%{name} одобри обжалването на решение за модериране от %{target}"
         approve_user_html: "%{name} одобри регистрирането от %{target}"
         assigned_to_self_report_html: "%{name} възложи на себе си доклад %{target}"
+        change_email_user_html: "%{name} промени адреса на имейла на потребителя %{target}"
         change_role_user_html: "%{name} промени ролята на %{target}"
+        confirm_user_html: "%{name} потвърди адреса на имейла на потребителя %{target}"
         create_account_warning_html: "%{name} изпрати предупреждение до %{target}"
         create_announcement_html: "%{name} създаде ново оповестяване %{target}"
+        create_canonical_email_block_html: "%{name} блокира имейл с хеш %{target}"
         create_custom_emoji_html: "%{name} качи ново емоджи %{target}"
         create_domain_allow_html: "%{name} позволи федерирането с домейн %{target}"
         create_domain_block_html: "%{name} блокира домейн %{target}"
+        create_email_domain_block_html: "%{name} блокира домейн за е-поща %{target}"
         create_ip_block_html: "%{name} създаде правило за IP %{target}"
         create_unavailable_domain_html: "%{name} спря доставянето до домейн %{target}"
         create_user_role_html: "%{name} създаде роля %{target}"
         demote_user_html: "%{name} понижи потребителя %{target}"
         destroy_announcement_html: "%{name} изтри оповестяване %{target}"
+        destroy_canonical_email_block_html: "%{name} отблокира имейла с хеш %{target}"
         destroy_custom_emoji_html: "%{name} изтри емоджито %{target}"
         destroy_domain_allow_html: "%{name} забрани федерирация с домейн %{target}"
         destroy_domain_block_html: "%{name} отблокира домейн %{target}"
+        destroy_email_domain_block_html: "%{name} отблокира домейн за е-поща %{target}"
         destroy_instance_html: "%{name} прочисти домейн %{target}"
         destroy_ip_block_html: "%{name} изтри правило за IP %{target}"
         destroy_status_html: "%{name} премахна публикация от %{target}"
@@ -249,6 +260,7 @@ bg:
         disable_custom_emoji_html: "%{name} изключи емоджито %{target}"
         disable_user_html: "%{name} изключи влизането за потребител %{target}"
         enable_custom_emoji_html: "%{name} включи емоджито %{target}"
+        enable_sign_in_token_auth_user_html: "%{name} задейства удостоверението с код по е-поща за %{target}"
         enable_user_html: "%{name} включи влизането за потребител %{target}"
         memorialize_account_html: "%{name} превърна акаунта на %{target} във възпоменателна страница"
         promote_user_html: "%{name} повиши потребителя %{target}"
@@ -256,6 +268,7 @@ bg:
         reject_user_html: "%{name} отхвърли регистрирането от %{target}"
         remove_avatar_user_html: "%{name} премахна аватара на %{target}"
         reopen_report_html: "%{name} отвори пак доклада на %{target}"
+        resend_user_html: "%{name} изпрати пак е-писмо за потвърждение за %{target}"
         reset_password_user_html: "%{name} нулира паролата на потребител %{target}"
         resolve_report_html: "%{name} разреши случая с доклада от %{target}"
         sensitive_account_html: "%{name} означи мултимедия на %{target} като деликатна"
@@ -428,6 +441,7 @@ bg:
         title: Блокиране на нов домейн на имейл
       no_email_domain_block_selected: Няма промяна, тъй като няма избрани блокирания на домейн на имейл
       not_permitted: Няма позволение
+      resolved_dns_records_hint_html: Името на домейна се разрешава в следните MX домейни, които в крайна сметка са отговорни за приемането на е-писма. Блокирането на MX домейн блокира регистрациите от всеки имейл, използващ същия MX домейн, дори видимото име на домейна да е различно. <strong>Внимавайте и не блокирайте главните доставчици на е-поща.</strong>
       resolved_through_html: Преобразувано чрез %{domain}
       title: Блокирани домейни на имейл
     export_domain_allows:
@@ -583,7 +597,9 @@ bg:
         resolve_description_html: Няма да се предприеме действие срещу докладвания акаунт, няма да се записва нарушение и докладът ще се затвори.
         silence_description_html: Профилът ще е видим само за последователите му или търсещите го ръчно, което драстично ограничава обсега му. Настройката може да бъде отменена по всяко време. Затваря всички доклади срещу акаунта.
         suspend_description_html: Акаунтът и неговото съдържание ще бъдат недостъпни и евентуално изтрити и взаимодействието с него ще е невъзможно. Обрамотимо до 30 дни. Затваря всички доклади срещу този акаунт.
+      actions_description_html: Решете какво действие може да се предприеме, за да се отхвърли докладът. Ако предприемете наказателно действие срещу докладвания акаунт, към лицето ще се изпрати известие по имейл, освен ако не е била избрана категорията <strong>Спам</strong>.
       actions_description_remote_html: Преценете с какво действие да решите този доклад. Това ще има ефекет върху това как <strong>вашият</strong> сървър комуникира с този отдалечен акаунт и се справя с неговото съдържание.
+      actions_no_posts: Този доклад няма никакви свързани публикации за изтриване
       add_to_report: Добавяне на още към доклада
       already_suspended_badges:
         local: Вече е спряно на този сървър
@@ -647,6 +663,7 @@ bg:
         delete_data_html: Изтриване на профила и съдържанието на <strong>@%{acct}</strong> за 30 дни от сега, освен ако междувременно не получи спиране
         preview_preamble_html: "<strong>@%{acct}</strong> ще получи предупреждение със следното съдържание:"
         record_strike_html: Запис на предупреждение против <strong>@%{acct}</strong>, за да ви помогне при изострянето на бъдещи нарушения от този акаунт
+        send_email_html: Изпращане на предупредително е-писмо на <strong>@%{acct}</strong>
         warning_placeholder: Незадължителни допълнителни причини за модераторско действие.
       target_origin: Произход на докладвания акаунт
       title: Доклади
@@ -686,6 +703,7 @@ bg:
         manage_appeals: Управление на жалбите
         manage_appeals_description: Позволява на потребителите да разглеждат обжалвания срещу модераторски действия
         manage_blocks: Управляване на блокиранията
+        manage_blocks_description: Позволява на потребителите да блокират доставчици на е-поща и IP адреси
         manage_custom_emojis: Управляване на персонализирани емоджита
         manage_custom_emojis_description: Позволява на потребителите да управляват персонализирани емоджита в сървъра
         manage_federation: Управление на Федерацията
@@ -703,6 +721,7 @@ bg:
         manage_taxonomies: Управление на класификации
         manage_taxonomies_description: Позволяване на потребителите да преглеждат нашумяло съдържание и да обновяват настройките за хаштагове
         manage_user_access: Управление на потребителския достъп
+        manage_user_access_description: Позволява потребителите да изключват за другите потребители двуфакторното удостоверяване, да променят имейл адресите и да си задават нови пароли
         manage_users: Управление на потребителите
         manage_users_description: Позволяване на потребителите да виждат подробностите за други потребители и да извършват модераторски действия срещу тях
         manage_webhooks: Управление на уебкуките
@@ -777,6 +796,7 @@ bg:
       destroyed_msg: Успешно изтриване на качването на сайта!
     software_updates:
       critical_update: Критично важно - обновете бързо
+      description: Препоръчва се да държите осъвременена инсталацията си на Mastodon, за да се възползвате от най-новите поправки и функции. Освен това, понякога е много важно да се осъвременява навреме Mastodon, за да се избегнат проблеми със сигурността. Заради тези причини Mastodon проверява за обновление на всеки 30 минути и ще ви извести според предпочитанията ви за известяване по имейл.
       documentation_link: Научете повече
       release_notes: Бележки към изданието
       title: Налични обновявания
@@ -792,8 +812,10 @@ bg:
       back_to_account: Назад към страницата на акаунта
       back_to_report: Назад към страницата на доклада
       batch:
+        add_to_report: 'Добавяне към доклад #%{id}'
         remove_from_report: Премахване от доклада
         report: Докладване
+      contents: Съдържание
       deleted: Изтрито
       favourites: Харесвани
       history: История на версиите
@@ -802,13 +824,17 @@ bg:
       media:
         title: Мултимедия
       metadata: Метаданни
+      no_history: Тази публикация не е била редактирана
       no_status_selected: Няма промяна, тъй като няма избрани публикации
       open: Отваряне на публикация
       original_status: Първообразна публикация
       reblogs: Блогване пак
+      replied_to_html: Отговорено до %{acct_link}
       status_changed: Публикацията променена
+      status_title: Публикация от @%{name}
       title: Публикации на акаунт - @%{name}
       trending: Изгряващи
+      view_publicly: Преглед като публично
       visibility: Видимост
       with_media: С мултимедия
     strikes:
@@ -895,6 +921,8 @@ bg:
         allow_provider: Позволяване на публикуващия
         confirm_allow: Наистина ли искате да позволите избраните връзки?
         confirm_allow_provider: Наистина ли искате да позволите избраните доставчици?
+        confirm_disallow: Наистина ли искате да забраните избраните връзки?
+        confirm_disallow_provider: Наистина ли искате да забраните избраните доставчици?
         description_html: Това са връзки, които в момента са много пъти споделяни от акаунти, чиито публикации сървърът ви вижда. Може да помогне на потребителите ви да разберат какво се случва по света. Никоя връзка няма да се показва публично, докато не одобрите публикуващия. Може още и да одобрявате или отхвърляте отделни връзки.
         disallow: Забранявам връзката
         disallow_provider: Забраняване на публикуващия
@@ -920,13 +948,15 @@ bg:
         allow_account: Позволяване на автора
         confirm_allow: Наистина ли искате да позволите избраните статуси?
         confirm_allow_account: Наистина ли искате да позволите избраните акаунти?
-        description_html: Това са публикации, за които сървърът ви знае, че са често споделяни или харесвани в момента. Това може да помогне на вашите нови и завръщащи се потребители да открият повече хора за следване. Никоя от публикациите няма да бъде показана публично, докато не одобрите автора и докато авторът не позволи акаунтът му да бъде предлган на другите. Също така можете да позволявате или отхвърляте отделни публикации.
+        confirm_disallow: Наистина ли искате да забраните избраните статуси?
+        confirm_disallow_account: Наистина ли искате да забраните избраните акаунти?
+        description_html: Има публикации, за които сървърът ви знае, че в момента са често споделяни или любими. Биха помогнали на вашите нови и завръщащи се потребители да открият повече хора за последване. Никоя от публикациите няма да се показва публично, докато не одобрите автора и докато авторът не позволи акаунтът му да се предлага на другите. Може също така да позволявате или отхвърляте отделни публикации.
         disallow: Забраняване на публикацията
         disallow_account: Забрана на автора
         no_status_selected: Няма промяна, тъй като няма избрана нашумяла публикация
         not_discoverable: Авторът не е избрал да е откриваем
         shared_by:
-          one: Споделено или харесано веднъж
+          one: Еднократно споделено или любимо
           other: Споделено или харесано %{friendly_count} пъти
         title: Налагащи се публикации
       tags:
@@ -952,6 +982,7 @@ bg:
         used_by_over_week:
           one: Употребено от един човек през последната седмица
           other: Използвано от %{count} души през последната седмица
+      title: Препоръки и насоки на развитие
       trending: Изгряващи
     warning_presets:
       add_new: Добавяне на ново
@@ -1038,6 +1069,7 @@ bg:
   application_mailer:
     notification_preferences: Промяна на предпочитанията за е-поща
     salutation: "%{name},"
+    settings: 'Промяна на предпочитанията за имейл: %{link}'
     unsubscribe: Стоп на абонамента
     view: 'Преглед:'
     view_profile: Преглед на профила
@@ -1048,7 +1080,7 @@ bg:
     logout: Излизане
     regenerate_token: Регенериране на кода за достъп
     token_regenerated: Успешно генериране на код за достъп
-    warning: Бъдете внимателни с тези данни. Никога не ги споделяйте с никого!
+    warning: Много внимавайте с тези данни. Никога не ги споделяйте с никого!
     your_token: Вашият код за достъп
   auth:
     apply_for_account: Заявка за акаунт
@@ -1057,6 +1089,7 @@ bg:
       hint_html: Просто още едно нещо! Трябва да потвърдим, че сте човек (това е с цел предпазване на нежелани съобщения!). Разгадайте капчата долу и щракнете на "Продължаване".
       title: Проверка за сигурност
     confirmations:
+      awaiting_review: Вашият адрес на е-поща е потвърден! Служителите на %{domain} сега разглеждат регистрацията ви. Ще получите е-писмо, ако одобрят акаунта ви!
       awaiting_review_title: Вашата регистрация се преглежда
       clicking_this_link: щракване на тази връзка
       login_link: влизане
@@ -1064,6 +1097,7 @@ bg:
       redirect_to_app_html: Трябва да сте пренасочени към приложението <strong>%{app_name}</strong>. Ако не се случи това, то опитайте %{clicking_this_link} или ръчно се върнете към приложението.
       registration_complete: Вашата регистрация на %{domain} вече завърши!
       welcome_title: Добре дошли, %{name}!
+      wrong_email_hint: Ако този адрес на е-поща не е правилен, то може да го промените в настройките на акаунта.
     delete_account: Изтриване на акаунта
     delete_account_html: Ако желаете да изтриете акаунта си, може <a href="%{path}">да сторите това тук</a>. Ще ви се поиска потвърждение.
     description:
@@ -1402,10 +1436,20 @@ bg:
       action: Да, да се спре абонамента
       complete: Спрян абонамент
       confirmation_html: Наистина ли искате да спрете абонамента от получаването на %{type} за Mastodon в %{domain} към имейла си при %{email}? Може винаги пак да се абонирате от своите <a href="%{settings_path}">настройки за известяване по е-поща</a>.
+      emails:
+        notification_emails:
+          favourite: е-писма за известия с любими
+          follow: е-писма с известия за последване
+          follow_request: е-писма със заявки за следване
+          mention: е-писма с известия за споменаване
+          reblog: е-писма с известия за подсилване
+      resubscribe_html: Ако погрешка сте спрели абонамента, то може пак да се абонирате от своите <a href="%{settings_path}">настройки за известия по е-поща</a>.
+      success_html: Повече няма да получавате %{type} за Mastodon на %{domain} към имейла си при %{email}.
       title: Спиране на абонамента
   media_attachments:
     validations:
       images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения
+      not_found: Мултимедията %{ids} не е намерена или вече е прикачена към друга публикация
       not_ready: Не е възможно закачането на файлове, който все още се обработват. Опитайте отново след малко!
       too_many: Не мога да прикача повече от 4 файла
   migrations:
@@ -1454,8 +1498,8 @@ bg:
       sign_up:
         subject: "%{name} се регистрира"
     favourite:
-      body: 'Вашата публикация беше харесана от %{name}:'
-      subject: "%{name} хареса вашата публикация"
+      body: 'Ваша публикация е любима за %{name}:'
+      subject: "%{name} означи като любима ваша публикация"
       title: Нова харесана публикация
     follow:
       body: "%{name} те последва!"
@@ -1483,6 +1527,7 @@ bg:
       subject: "%{name} промени публикация"
   notifications:
     administration_emails: Известия за администратори по е-поща
+    email_events: Събития за известяване по имейл
     email_events_hint: 'Изберете събития, за които искате да получавате известия:'
   number:
     human:
@@ -1636,6 +1681,7 @@ bg:
     delete: Изтриване на акаунта
     development: Разработка
     edit_profile: Редактирай профила си
+    export: Изнасяне
     featured_tags: Актуални хаштагове
     import: Импортиране
     import_and_export: Импортиране и експортиране
@@ -1715,8 +1761,8 @@ bg:
     keep_polls_hint: Не изтрива запитвания
     keep_self_bookmark: Запазване на публикации, добавени в отметки
     keep_self_bookmark_hint: Не се изтриват ваши публикации, ако сте ги добавили към отметки
-    keep_self_fav: Задържане на публикации, които сте харесали
-    keep_self_fav_hint: Не се изтриват публикации, които сте харесали
+    keep_self_fav: Задържане на любимите ви публикации
+    keep_self_fav_hint: Да не се изтриват ваши публикации, ако са ви любими
     min_age:
       '1209600': 2 седмици
       '15778476': 6 месеца
@@ -1727,7 +1773,7 @@ bg:
       '63113904': 2 години
       '7889238': 3 месеца
     min_age_label: Възрастов праг
-    min_favs: Запазване на харесани публикации поне
+    min_favs: Задържане поне на любимите публикации
     min_favs_hint: Не се изтрива никоя от публикациите, които сте харесали поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя харесвания
     min_reblogs: Запазване на публикации с поне толкова раздувания
     min_reblogs_hint: Не се изтриват ваши публикации, споделени поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя на техния раздувания
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index b1af2d95d..28caa1d1f 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -826,8 +826,10 @@ ca:
       back_to_account: Torna a la pàgina del compte
       back_to_report: Torna a la pàgina de l'informe
       batch:
+        add_to_report: 'Afegiu a l''informe #%{id}'
         remove_from_report: Treu de l'informe
         report: Denuncia
+      contents: Continguts
       deleted: Eliminada
       favourites: Favorits
       history: Històric de versions
@@ -836,12 +838,17 @@ ca:
       media:
         title: Contingut multimèdia
       metadata: Metadada
+      no_history: Aquesta publicació no s'ha editat
       no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
       open: Obre la publicació
       original_status: Publicació original
       reblogs: Impulsos
+      replied_to_html: En resposta a %{acct_link}
       status_changed: Publicació canviada
+      status_title: Publicació de @%{name}
+      title: Publicacions del compte - @%{name}
       trending: Tendència
+      view_publicly: Vegeu en públic
       visibility: Visibilitat
       with_media: Amb contingut multimèdia
     strikes:
@@ -1173,8 +1180,11 @@ ca:
     use_security_key: Usa clau de seguretat
   author_attribution:
     example_title: Text d'exemple
+    hint_html: Escriviu notícies o un blog fora de Mastodon? Controleu quin crèdit rebeu quan es comparteixen aquí.
+    instructions: 'Assegureu-vos que aquest codi és a l''HTML de l''article:'
     more_from_html: Més de %{name}
     s_blog: Blog de %{name}
+    then_instructions: Després, afegiu el nom del domini de la publicació aquí sota.
     title: Atribució d'autor
   challenge:
     confirm: Continua
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 0daa793f9..3d376bc4b 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -882,8 +882,10 @@ cy:
       back_to_account: Nôl i dudalen y cyfrif
       back_to_report: Nôl i dudalen yr adroddiad
       batch:
+        add_to_report: 'Ychwanegu at yr adroddiad #%{id}'
         remove_from_report: Dileu o'r adroddiad
         report: Adroddiad
+      contents: Cynnwys
       deleted: Dilëwyd
       favourites: Ffefrynnau
       history: Hanes fersiynau
@@ -892,12 +894,17 @@ cy:
       media:
         title: Cyfryngau
       metadata: Metadata
+      no_history: Nid yw'r postiad hwn wedi'i olygu
       no_status_selected: Heb newid postiad gan na ddewiswyd dim un
       open: Agor postiad
       original_status: Postiad gwreiddiol
       reblogs: Ailflogiadau
+      replied_to_html: Wedi ymateb i %{acct_link}
       status_changed: Postiad wedi'i newid
+      status_title: Postiad gan @%{name}
+      title: Postiadau cyfrif - @%{name}
       trending: Yn trendio
+      view_publicly: Gweld yn gyhoeddus
       visibility: Gwelededd
       with_media: Gyda chyfryngau
     strikes:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 26ccc8f3e..0faee920b 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1180,12 +1180,12 @@ de:
     use_security_key: Sicherheitsschlüssel verwenden
   author_attribution:
     example_title: Beispieltext
-    hint_html: Schreibst du außerhalb von Mastodon Nachrichtenartikel oder betreibst du einen Blog? Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest.
-    instructions: 'Der nachfolgende Code muss im HTML-Code deines Artikels sein:'
+    hint_html: Schreibst du außerhalb von Mastodon journalistische Artikel oder andere Texte, beispielsweise in einem Blog? Lege hier fest, wann auf dein Profil verwiesen werden soll, wenn Links zu deinen Werken auf Mastodon geteilt werden.
+    instructions: 'Der nachfolgende Code muss im HTML-Header deines zu verlinkenden Textes stehen:'
     more_from_html: Mehr von %{name}
     s_blog: Blog von %{name}
-    then_instructions: Ergänze die Domain, auf der deine Inhalte veröffentlicht werden in das unten stehende Feld.
-    title: Anerkennung als Autor*in
+    then_instructions: Ergänze anschließend im unteren Feld die Domain, auf der sich deine Inhalte befinden.
+    title: Verifizierung als Autor*in
   challenge:
     confirm: Fortfahren
     hint_html: "<strong>Hinweis:</strong> Wir werden dich für die nächste Stunde nicht erneut nach deinem Passwort fragen."
@@ -1563,7 +1563,7 @@ de:
     follow_request:
       action: Follower-Anfragen verwalten
       body: "%{name} möchte dir folgen"
-      subject: 'Ausstehende Folgeanfragen: %{name}'
+      subject: 'Ausstehende Follower-Anfragen: %{name}'
       title: Neue Follower-Anfrage
     mention:
       action: Antworten
@@ -1625,7 +1625,7 @@ de:
     posting_defaults: Standardeinstellungen für Beiträge
     public_timelines: Öffentliche Timelines
   privacy:
-    hint_html: "<strong>Bestimme, wie dein Profil und deine Beiträge gefunden werden sollen.</strong> Eine Vielzahl von Funktionen in Mastodon können dir helfen, eine größere Reichweite zu erlangen, wenn sie aktiviert sind. Nimm dir einen Moment Zeit, um diese Einstellungen zu überprüfen und sicherzustellen, dass sie für deinen Anwendungsfall geeignet sind."
+    hint_html: "<strong>Bestimme selbst, wie dein Profil und deine Beiträge gefunden werden sollen.</strong> Zahlreiche Mastodon-Funktionen können dir für eine größere Reichweite behilflich sein. Nimm dir einen Moment Zeit, um diese Einstellungen zu überprüfen."
     privacy: Datenschutz
     privacy_hint_html: Bestimme, wie viele Informationen du für andere preisgeben möchtest. Viele Menschen entdecken interessante Profile und coole Apps, indem sie die Follower anderer Profile durchstöbern und die Apps sehen, über die Beiträge veröffentlicht wurden – möglicherweise möchtest du diese Informationen ausblenden.
     reach: Reichweite
@@ -1801,7 +1801,7 @@ de:
     enabled: Alte Beiträge automatisch entfernen
     enabled_hint: Löscht automatisch deine Beiträge, sobald sie die angegebene Altersgrenze erreicht haben, es sei denn, sie entsprechen einer der unten angegebenen Ausnahmen
     exceptions: Ausnahmen
-    explanation: Damit Mastodon nicht durch das Löschen von Beiträgen ausgebremst wird, wartet der Server damit, bis wenig los ist. Aus diesem Grund werden deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht.
+    explanation: Damit der Server nicht durch das Löschen von Beiträgen ausgebremst wird, wartet die Mastodon-Software, bis wenig(er) los ist. Deshalb könnten deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht werden.
     ignore_favs: Favoriten ignorieren
     ignore_reblogs: Geteilte Beiträge ignorieren
     interaction_exceptions: Ausnahmen basierend auf Interaktionen
@@ -1980,13 +1980,13 @@ de:
     seamless_external_login: Du bist über einen externen Dienst angemeldet, daher sind Passwort- und E-Mail-Einstellungen nicht verfügbar.
     signed_in_as: 'Angemeldet als:'
   verification:
-    extra_instructions_html: <strong>Hinweis:</strong> Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist <code>rel="me"</code>, wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein <code>link</code>-Tag statt <code>a</code> im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein.
+    extra_instructions_html: <strong>Hinweis:</strong> Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist <code>rel="me"</code>. Du kannst auch den Tag <code>link</code> im <code>head</code> (statt <code>a</code> im <code>body</code>) verwenden, jedoch muss die Internetseite ohne JavaScript abrufbar sein.
     here_is_how: So funktioniert’s
     hint_html: "<strong>Alle können ihre Identität auf Mastodon verifizieren.</strong> Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an."
     instructions_html: Kopiere den unten stehenden Code und füge ihn in den HTML-Code deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“.
     verification: Verifizierung
-    verified_links: Deine verifizierten Links
-    website_verification: Website-Verifizierung
+    verified_links: Deine verifizierten Domains
+    website_verification: Verifizierung einer Website
   webauthn_credentials:
     add: Sicherheitsschlüssel hinzufügen
     create:
diff --git a/config/locales/devise.nan.yml b/config/locales/devise.nan.yml
new file mode 100644
index 000000000..512c65fe8
--- /dev/null
+++ b/config/locales/devise.nan.yml
@@ -0,0 +1 @@
+nan:
diff --git a/config/locales/devise.tok.yml b/config/locales/devise.tok.yml
index d15ecd21b..0b21d839f 100644
--- a/config/locales/devise.tok.yml
+++ b/config/locales/devise.tok.yml
@@ -1 +1,11 @@
+---
 tok:
+  devise:
+    confirmations:
+      confirmed: sina lon e nimi ilo sina pi pana lipu.
+    failure:
+      already_authenticated: sina lon sijelo a.
+      inactive: sijelo sina li open ala ken.
+      locked: sijelo sina li pini ken.
+      pending: jan lawa li awen alasa sona e pona sina.
+      timeout: ilo li pini sona e sina. o kama sin lon sijelo.
diff --git a/config/locales/doorkeeper.nan.yml b/config/locales/doorkeeper.nan.yml
new file mode 100644
index 000000000..512c65fe8
--- /dev/null
+++ b/config/locales/doorkeeper.nan.yml
@@ -0,0 +1 @@
+nan:
diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml
index 848b0d6b6..50705932e 100644
--- a/config/locales/doorkeeper.zh-CN.yml
+++ b/config/locales/doorkeeper.zh-CN.yml
@@ -125,11 +125,11 @@ zh-CN:
         admin/reports: 举报管理
         all: 完全访问你的Mastodon账户
         blocks: 屏蔽
-        bookmarks: 书签
+        bookmarks: 收藏
         conversations: 会话
         crypto: 端到端加密
         favourites: 喜欢
-        filters: 过滤器
+        filters: 过滤规则
         follow: 关注,隐藏与屏蔽
         follows: 关注
         lists: 列表
@@ -167,14 +167,14 @@ zh-CN:
       admin:write:reports: 对举报执行管理操作
       crypto: 使用端到端加密
       follow: 关注或屏蔽用户
-      profile: 仅读取你账号的个人资料信息
+      profile: 仅读取你账户的个人资料信息
       push: 接收你的账户的推送通知
       read: 读取你的账户数据
       read:accounts: 查看账号信息
       read:blocks: 查看你的屏蔽列表
-      read:bookmarks: 查看你的书签
+      read:bookmarks: 查看你的收藏夹
       read:favourites: 查看喜欢的嘟文
-      read:filters: 查看你的过滤器
+      read:filters: 查看你的过滤规则
       read:follows: 查看你的关注
       read:lists: 查看你的列表
       read:mutes: 查看你的隐藏列表
@@ -185,10 +185,10 @@ zh-CN:
       write: 修改你的账号数据
       write:accounts: 修改你的个人资料
       write:blocks: 屏蔽账号和域名
-      write:bookmarks: 为嘟文添加书签
+      write:bookmarks: 收藏嘟文
       write:conversations: 静音并删除会话
       write:favourites: 喜欢嘟文
-      write:filters: 创建过滤器
+      write:filters: 创建过滤规则
       write:follows: 关注其他人
       write:lists: 创建列表
       write:media: 上传媒体文件
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 76a16aa9d..9d535e322 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -21,6 +21,7 @@ en-GB:
       one: Post
       other: Posts
     posts_tab_heading: Posts
+    self_follow_error: Following your own account is not allowed
   admin:
     account_actions:
       action: Perform action
@@ -186,6 +187,7 @@ en-GB:
         create_domain_block: Create Domain Block
         create_email_domain_block: Create Email Domain Block
         create_ip_block: Create IP rule
+        create_relay: Create Relay
         create_unavailable_domain: Create Unavailable Domain
         create_user_role: Create Role
         demote_user: Demote User
@@ -197,14 +199,17 @@ en-GB:
         destroy_email_domain_block: Delete Email Domain Block
         destroy_instance: Purge Domain
         destroy_ip_block: Delete IP rule
+        destroy_relay: Delete Relay
         destroy_status: Delete Post
         destroy_unavailable_domain: Delete Unavailable Domain
         destroy_user_role: Destroy Role
         disable_2fa_user: Disable 2FA
         disable_custom_emoji: Disable Custom Emoji
+        disable_relay: Disable Relay
         disable_sign_in_token_auth_user: Disable Email Token Authentication for User
         disable_user: Disable User
         enable_custom_emoji: Enable Custom Emoji
+        enable_relay: Enable Relay
         enable_sign_in_token_auth_user: Enable Email Token Authentication for User
         enable_user: Enable User
         memorialize_account: Memorialise Account
@@ -246,6 +251,7 @@ en-GB:
         create_domain_block_html: "%{name} blocked domain %{target}"
         create_email_domain_block_html: "%{name} blocked email domain %{target}"
         create_ip_block_html: "%{name} created rule for IP %{target}"
+        create_relay_html: "%{name} created a relay %{target}"
         create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
         create_user_role_html: "%{name} created %{target} role"
         demote_user_html: "%{name} demoted user %{target}"
@@ -257,14 +263,17 @@ en-GB:
         destroy_email_domain_block_html: "%{name} unblocked email domain %{target}"
         destroy_instance_html: "%{name} purged domain %{target}"
         destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
+        destroy_relay_html: "%{name} deleted the relay %{target}"
         destroy_status_html: "%{name} removed post by %{target}"
         destroy_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
         destroy_user_role_html: "%{name} deleted %{target} role"
         disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
         disable_custom_emoji_html: "%{name} disabled emoji %{target}"
+        disable_relay_html: "%{name} disabled the relay %{target}"
         disable_sign_in_token_auth_user_html: "%{name} disabled email token authentication for %{target}"
         disable_user_html: "%{name} disabled login for user %{target}"
         enable_custom_emoji_html: "%{name} enabled emoji %{target}"
+        enable_relay_html: "%{name} enabled the relay %{target}"
         enable_sign_in_token_auth_user_html: "%{name} enabled email token authentication for %{target}"
         enable_user_html: "%{name} enabled login for user %{target}"
         memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
@@ -817,8 +826,10 @@ en-GB:
       back_to_account: Back to account page
       back_to_report: Back to report page
       batch:
+        add_to_report: 'Add to report #%{id}'
         remove_from_report: Remove from report
         report: Report
+      contents: Contents
       deleted: Deleted
       favourites: Favourites
       history: Version history
@@ -827,12 +838,17 @@ en-GB:
       media:
         title: Media
       metadata: Metadata
+      no_history: This post hasn't been edited
       no_status_selected: No posts were changed as none were selected
       open: Open post
       original_status: Original post
       reblogs: Reblogs
+      replied_to_html: Replied to %{acct_link}
       status_changed: Post changed
+      status_title: Post by @%{name}
+      title: Account posts - @%{name}
       trending: Trending
+      view_publicly: View publicly
       visibility: Visibility
       with_media: With media
     strikes:
@@ -1164,8 +1180,11 @@ en-GB:
     use_security_key: Use security key
   author_attribution:
     example_title: Sample text
+    hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon.
+    instructions: 'Make sure this code is in your article''s HTML:'
     more_from_html: More from %{name}
     s_blog: "%{name}'s Blog"
+    then_instructions: Then, add the domain name of the publication in the field below.
     title: Author attribution
   challenge:
     confirm: Continue
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 120df142b..ad1396e4e 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -817,6 +817,7 @@ eo:
       batch:
         remove_from_report: Forigi de raporto
         report: Raporti
+      contents: Enhavoj
       deleted: Forigita
       favourites: Stelumoj
       history: Versia historio
@@ -825,12 +826,16 @@ eo:
       media:
         title: Aŭdovidaĵoj
       metadata: Metadatumoj
+      no_history: Ĉi tiu afiŝo ne estis redaktita
       no_status_selected: Neniu afiŝo estis ŝanĝita ĉar neniu estis elektita
       open: Malfermi afiŝojn
       original_status: Originala afiŝo
       reblogs: Reblogaĵoj
+      replied_to_html: Respondis al %{acct_link}
       status_changed: Afiŝo ŝanĝiĝis
+      title: Afiŝoj de konto - @%{name}
       trending: Popularaĵoj
+      view_publicly: Vidu publike
       visibility: Videbleco
       with_media: Kun aŭdovidaĵoj
     strikes:
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index 09163c2e4..170c16f09 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -187,7 +187,7 @@ es-AR:
         create_domain_block: Crear bloqueo de dominio
         create_email_domain_block: Crear bloqueo de dominio de correo electrónico
         create_ip_block: Crear regla de dirección IP
-        create_relay: Crear Relé
+        create_relay: Crear relé
         create_unavailable_domain: Crear dominio no disponible
         create_user_role: Crear rol
         demote_user: Descender usuario
@@ -199,17 +199,17 @@ es-AR:
         destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico
         destroy_instance: Purgar dominio
         destroy_ip_block: Eliminar regla de dirección IP
-        destroy_relay: Eliminar Relé
+        destroy_relay: Eliminar relé
         destroy_status: Eliminar mensaje
         destroy_unavailable_domain: Eliminar dominio no disponible
         destroy_user_role: Destruir rol
         disable_2fa_user: Deshabilitar 2FA
         disable_custom_emoji: Deshabilitar emoji personalizado
-        disable_relay: Desactivar Relé
+        disable_relay: Deshabilitar relé
         disable_sign_in_token_auth_user: Deshabilitar autenticación de token por correo electrónico para el usuario
         disable_user: Deshabilitar usuario
         enable_custom_emoji: Habilitar emoji personalizado
-        enable_relay: Activar Relé
+        enable_relay: Habilitar relé
         enable_sign_in_token_auth_user: Habilitar autenticación de token por correo electrónico para el usuario
         enable_user: Habilitar usuario
         memorialize_account: Convertir en cuenta conmemorativa
@@ -251,7 +251,7 @@ es-AR:
         create_domain_block_html: "%{name} bloqueó el dominio %{target}"
         create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}"
         create_ip_block_html: "%{name} creó la regla para la dirección IP %{target}"
-        create_relay_html: "%{name} creó un relé %{target}"
+        create_relay_html: "%{name} creó el relé %{target}"
         create_unavailable_domain_html: "%{name} detuvo la entrega al dominio %{target}"
         create_user_role_html: "%{name} creó el rol %{target}"
         demote_user_html: "%{name} bajó de nivel al usuario %{target}"
@@ -269,11 +269,11 @@ es-AR:
         destroy_user_role_html: "%{name} eliminó el rol %{target}"
         disable_2fa_user_html: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}"
         disable_custom_emoji_html: "%{name} deshabilitó el emoji %{target}"
-        disable_relay_html: "%{name} desactivó el relé %{target}"
+        disable_relay_html: "%{name} deshabilitó el relé %{target}"
         disable_sign_in_token_auth_user_html: "%{name} deshabilitó la autenticación de token por correo electrónico para %{target}"
         disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
         enable_custom_emoji_html: "%{name} habilitó el emoji %{target}"
-        enable_relay_html: "%{name} activó el relé %{target}"
+        enable_relay_html: "%{name} eliminó el relé %{target}"
         enable_sign_in_token_auth_user_html: "%{name} habilitó la autenticación de token por correo electrónico para %{target}"
         enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
         memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa"
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 53557c091..25a7be891 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -18,9 +18,9 @@ es-MX:
     pin_errors:
       following: Debes estar siguiendo a la persona a la que quieres aprobar
     posts:
-      one: Toot
-      other: Toots
-    posts_tab_heading: Toots
+      one: Publicación
+      other: Publicaciones
+    posts_tab_heading: Publicaciones
     self_follow_error: No se permite seguir tu propia cuenta
   admin:
     account_actions:
@@ -57,18 +57,18 @@ es-MX:
       confirming: Confirmando
       custom: Personalizado
       delete: Eliminar datos
-      deleted: Borrado
+      deleted: Eliminado
       demote: Degradar
       destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente
       disable: Deshabilitar
       disable_sign_in_token_auth: Deshabilitar la autenticación por token de correo electrónico
       disable_two_factor_authentication: Desactivar autenticación de dos factores
       disabled: Deshabilitada
-      display_name: Nombre
+      display_name: Nombre para mostrar
       domain: Dominio
       edit: Editar
-      email: E-mail
-      email_status: E-mail Status
+      email: Correo electrónico
+      email_status: Estado del correo electrónico
       enable: Habilitar
       enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico
       enabled: Habilitada
@@ -86,8 +86,8 @@ es-MX:
         local: Local
         remote: Remoto
         title: Localización
-      login_status: Estado del login
-      media_attachments: Multimedia
+      login_status: Estado de la sesión
+      media_attachments: Archivos multimedia
       memorialize: Convertir en memorial
       memorialized: Cuenta conmemorativa
       memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa"
@@ -149,7 +149,7 @@ es-MX:
         targeted_reports: Reportes hechos sobre esta cuenta
       silence: Silenciar
       silenced: Silenciado
-      statuses: Estados
+      statuses: Publicaciones
       strikes: Amonestaciones previas
       subscribe: Suscribir
       suspend: Suspender
@@ -200,7 +200,7 @@ es-MX:
         destroy_instance: Purgar dominio
         destroy_ip_block: Eliminar regla IP
         destroy_relay: Eliminar Relé
-        destroy_status: Eliminar Estado
+        destroy_status: Eliminar Publicación
         destroy_unavailable_domain: Eliminar Dominio No Disponible
         destroy_user_role: Destruir Rol
         disable_2fa_user: Deshabilitar 2FA
@@ -234,7 +234,7 @@ es-MX:
         update_domain_block: Actualizar el Bloqueo de Dominio
         update_ip_block: Actualizar regla IP
         update_report: Actualizar informe
-        update_status: Actualizar Estado
+        update_status: Actualizar Publicación
         update_user_role: Actualizar Rol
       actions:
         approve_appeal_html: "%{name} aprobó la solicitud de moderación de %{target}"
@@ -264,7 +264,7 @@ es-MX:
         destroy_instance_html: "%{name} purgó el dominio %{target}"
         destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}"
         destroy_relay_html: "%{name} eliminó el relé %{target}"
-        destroy_status_html: "%{name} eliminó el estado por %{target}"
+        destroy_status_html: "%{name} eliminó la publicación por %{target}"
         destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}"
         destroy_user_role_html: "%{name} eliminó el rol %{target}"
         disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}"
@@ -298,7 +298,7 @@ es-MX:
         update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}"
         update_ip_block_html: "%{name} cambió la regla para la IP %{target}"
         update_report_html: "%{name} actualizó el informe %{target}"
-        update_status_html: "%{name} actualizó el estado de %{target}"
+        update_status_html: "%{name} actualizó la publicación de %{target}"
         update_user_role_html: "%{name} cambió el rol %{target}"
       deleted_account: cuenta eliminada
       empty: No se encontraron registros.
@@ -581,11 +581,11 @@ es-MX:
     relays:
       add_new: Añadir un nuevo relés
       delete: Borrar
-      description_html: Un <strong>relés de federation</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores pequeños y medianos a descubir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manialmente a personas de servidores remotos.
+      description_html: Un <strong>relés de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de publicaciones públicas entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores pequeños y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos.
       disable: Deshabilitar
       disabled: Deshabilitado
       enable: Hablitar
-      enable_hint: Una vez conectado, tu servidor se suscribirá a todos los toots públicos de este relés, y comenzará a enviar los toots públicos de este servidor hacia él.
+      enable_hint: Una vez conectado, tu servidor se suscribirá a todas las publicaciones públicas de este relé, y comenzará a enviar las publicaciones públicas de este servidor hacia él.
       enabled: Habilitado
       inbox_url: URL del relés
       pending: Esperando la aprobación del relés
@@ -605,8 +605,8 @@ es-MX:
       action_log: Registro de auditoría
       action_taken_by: Acción tomada por
       actions:
-        delete_description_html: Los mensajes denunciados serán eliminados y se registrará una amonestación para ayudarte a escalar en futuras infracciones por la misma cuenta.
-        mark_as_sensitive_description_html: Los archivos multimedia en los mensajes informados se marcarán como sensibles y se aplicará una amonestación para ayudarte a escalar las futuras infracciones de la misma cuenta.
+        delete_description_html: Las publicaciones denunciadas serán eliminadas y se registrará una amonestación para ayudarte a escalar en futuras infracciones por la misma cuenta.
+        mark_as_sensitive_description_html: Los archivos multimedia en las publicaciones reportadas se marcarán como sensibles y se aplicará una amonestación para ayudarte a escalar las futuras infracciones de la misma cuenta.
         other_description_html: Ver más opciones para controlar el comportamiento de la cuenta y personalizar la comunicación de la cuenta reportada.
         resolve_description_html: No se tomarán medidas contra la cuenta denunciada, no se registrará la amonestación, y se cerrará el informe.
         silence_description_html: La cuenta será visible sólo para aquellos que ya la sigan o la busquen manualmente, limitando severamente su visibilidad. Siempre puede ser revertido. Cierra todos los reportes contra esta cuenta.
@@ -839,13 +839,13 @@ es-MX:
         title: Multimedia
       metadata: Metadatos
       no_history: Esta publicación no ha sido editada
-      no_status_selected: No se cambió ningún estado al no seleccionar ninguno
+      no_status_selected: No se cambió ninguna publicación al no seleccionar ninguna
       open: Abrir publicación
       original_status: Publicación original
       reblogs: Impulsos
-      replied_to_html: Respondió a %{acct_link}
+      replied_to_html: En respuesta a %{acct_link}
       status_changed: Publicación cambiada
-      status_title: Publicación de @%{name}
+      status_title: Publicado por %{name}
       title: Publicaciones de la cuenta - @%{name}
       trending: En tendencia
       view_publicly: Ver públicamente
@@ -924,7 +924,7 @@ es-MX:
       review: Estado de revisión
       search: Buscar
       title: Etiquetas
-      updated_msg: Hashtags actualizados exitosamente
+      updated_msg: Etiquetas actualizadas exitosamente
     title: Administración
     trends:
       allow: Permitir
@@ -983,7 +983,7 @@ es-MX:
           tag_servers_dimension: Servidores principales
           tag_servers_measure: diferentes servidores
           tag_uses_measure: usuarios totales
-        description_html: Estos son etiquetas que están apareciendo en muchos posts que tu servidor ve. Pueden ayudar a tus usuarios a averiguar de qué habla más gente en estos momentos. No hay hashtags que se muestren públicamente hasta que los apruebes.
+        description_html: Estos son etiquetas que están apareciendo en muchas publicaciones que tu servidor ve. Pueden ayudar a tus usuarios a averiguar de qué habla más gente en estos momentos. No hay etiquetas que se muestren públicamente hasta que los apruebes.
         listable: Pueden ser recomendadas
         no_tag_selected: No se cambió ninguna etiqueta ya que no se seleccionó ninguna
         not_listable: No serán recomendadas
@@ -1032,9 +1032,9 @@ es-MX:
       subject: Los registros para %{instance} han sido cambiados automáticamente para requerir aprobación
     new_appeal:
       actions:
-        delete_statuses: para eliminar sus mensajes
+        delete_statuses: para eliminar sus publicaciones
         disable: para congelar su cuenta
-        mark_statuses_as_sensitive: para marcar sus mensajes como sensibles
+        mark_statuses_as_sensitive: para marcar sus publicaciones como sensibles
         none: una alvertencia
         sensitive: para marcar su cuenta como sensible
         silence: para limitar su cuenta
@@ -1073,7 +1073,7 @@ es-MX:
     remove: Desvincular alias
   appearance:
     advanced_web_interface: Interfaz web avanzada
-    advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.'
+    advanced_web_interface_hint: 'Si quieres aprovechar todo el ancho de tu pantalla, la interfaz web avanzada te permite configurar muchas columnas diferentes para ver toda la información que quieras al mismo tiempo: Inicio, notificaciones, cronología federada, cualquier número de listas y etiquetas.'
     animations_and_accessibility: Animaciones y accesibilidad
     confirmation_dialogs: Diálogos de confirmación
     discovery: Descubrir
@@ -1089,7 +1089,7 @@ es-MX:
     unsubscribe: Cancelar suscripción
     view: 'Vista:'
     view_profile: Ver perfil
-    view_status: Ver estado
+    view_status: Ver publicación
   applications:
     created: Aplicación creada exitosamente
     destroyed: Apicación eliminada exitosamente
@@ -1115,7 +1115,7 @@ es-MX:
       welcome_title: "¡Bienvenido, %{name}!"
       wrong_email_hint: Si esa dirección de correo electrónico no es correcta, puedes cambiarla en la configuración de la cuenta.
     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.
+    delete_account_html: Si deseas eliminar tu cuenta, puedes <a href="%{path}">proceder aquí</a>. Se te pedirá una confirmación.
     description:
       prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!"
       prefix_sign_up: "¡Únete a Mastodon hoy!"
@@ -1251,7 +1251,7 @@ es-MX:
       title_actions:
         delete_statuses: Eliminación de publicación
         disable: Congelación de la cuenta
-        mark_statuses_as_sensitive: Marcando los mensajes como sensibles
+        mark_statuses_as_sensitive: Marcando las publicaciones como sensibles
         none: Advertencia
         sensitive: Marcando la cuenta como sensible
         silence: Limitación de cuenta
@@ -1285,7 +1285,7 @@ es-MX:
     archive_takeout:
       date: Fecha
       download: Descargar tu archivo
-      hint_html: Puedes solicitar un archivo de tus <strong>toots y archivos multimedia subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
+      hint_html: Puedes solicitar un archivo de tus <strong>publicaciones y archivos multimedia subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible. Puedes solicitar un archivo cada 7 días.
       in_progress: Recopilando tu archivo...
       request: Solicitar tu archivo
       size: Tamaño
@@ -1299,7 +1299,7 @@ es-MX:
   featured_tags:
     add_new: Añadir nuevo
     errors:
-      limit: Ya has alcanzado la cantidad máxima de hashtags
+      limit: Ya has alcanzado la cantidad máxima de etiquetas
     hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
   filters:
     contexts:
@@ -1503,7 +1503,7 @@ es-MX:
       title: Cancelar suscripción
   media_attachments:
     validations:
-      images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes
+      images_and_video: No se puede adjuntar un video a una publicación que ya contenga imágenes
       not_found: Archivos multimedia %{ids} no encontrados, o ya se encuentran adjuntos a otra publicación
       not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Inténtalo de nuevo en un momento!
       too_many: No se pueden adjuntar más de 4 archivos
@@ -1553,8 +1553,8 @@ es-MX:
       sign_up:
         subject: "%{name} se registró"
     favourite:
-      body: 'Tu estado fue marcado como favorito por %{name}:'
-      subject: "%{name} marcó como favorito tu estado"
+      body: 'Tu publicación fue marcada como favorita por %{name}:'
+      subject: "%{name} marcó como favorita tu publicación"
       title: Nuevo favorito
     follow:
       body: "¡%{name} te está siguiendo!"
@@ -1674,8 +1674,8 @@ es-MX:
       account: Publicaciones públicas de @%{acct}
       tag: 'Publicaciones públicas etiquetadas con #%{hashtag}'
   scheduled_statuses:
-    over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día
-    over_total_limit: Ha superado el límite de %{limit} toots programados
+    over_daily_limit: Has superado el límite de %{limit} publicaciones programadas para ese día
+    over_total_limit: Has superado el límite de %{limit} publicaciones programadas
     too_soon: La fecha programada debe estar en el futuro
   self_destruct:
     lead_html: Desafortunadamente, <strong>%{domain}</strong> está cerrando de manera permanente. Si tenías una cuenta ahí, no puedes continuar utilizándolo, pero puedes solicitar un respaldo de tus datos.
@@ -1737,7 +1737,7 @@ es-MX:
     development: Desarrollo
     edit_profile: Editar perfil
     export: Exportar
-    featured_tags: Hashtags destacados
+    featured_tags: Etiquetas destacadas
     import: Importar
     import_and_export: Importar y exportar
     migrate: Migración de cuenta
@@ -1777,16 +1777,16 @@ es-MX:
     content_warning: 'Alerta de contenido: %{warning}'
     default_language: Igual que el idioma de la interfaz
     disallowed_hashtags:
-      one: 'contenía un hashtag no permitido: %{tags}'
-      other: 'contenía los hashtags no permitidos: %{tags}'
+      one: 'contenía una etiqueta no permitida: %{tags}'
+      other: 'contenía las etiquetas no permitidas: %{tags}'
     edited_at_html: Editado %{date}
     errors:
-      in_reply_not_found: El estado al que intentas responder no existe.
+      in_reply_not_found: La publicación a la que estás intentando responder no existe.
     over_character_limit: Límite de caracteres de %{max} superado
     pin_errors:
       direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse
       limit: Ya has fijado el número máximo de publicaciones
-      ownership: El toot de alguien más no puede fijarse
+      ownership: La publicación de alguien más no puede fijarse
       reblog: No se puede fijar una publicación impulsada
     title: "%{name}: «%{quote}»"
     visibilities:
@@ -1906,9 +1906,9 @@ es-MX:
         spam: Spam
         violation: El contenido viola las siguientes directrices de la comunidad
       explanation:
-        delete_statuses: Se ha determinado que algunos de tus mensajes violan una o más directrices de la comunidad y han sido por tanto eliminados por los moderadores de %{instance}.
+        delete_statuses: Se ha determinado que algunas de tus publicaciones violan una o más directrices de la comunidad y han sido, por tanto, eliminados por los moderadores de %{instance}.
         disable: Ya no puedes usar tu cuenta, pero tu perfil y el resto de datos permanecen intactos. Puedes solicitar una copia de seguridad de tus datos, cambiar la configuración de tu cuenta o eliminarla.
-        mark_statuses_as_sensitive: Algunos de tus mensajes han sido marcados como sensibles por los moderadores de %{instance}. Esto significa que la gente tendrá que pulsar los archivos multimedia en las publicaciones antes de que se muestre una vista previa. Puedes marcar los archivos multimedia como sensibles tú mismo cuando publiques en el futuro.
+        mark_statuses_as_sensitive: Algunas de tus publicaciones han sido marcadas como sensibles por los moderadores de %{instance}. Esto significa que la gente tendrá que pulsar los archivos multimedia en las publicaciones antes de que se muestre una vista previa. Puedes marcar los archivos multimedia como sensibles tú mismo cuando publiques en el futuro.
         sensitive: A partir de ahora, todos los archivos multimedia que subas serán marcados como sensibles y ocultos tras una advertencia que habrá que clicar.
         silence: Aún puedes usar tu cuenta, pero solo las personas que te están siguiendo verán tus publicaciones en este servidor, y puedes ser excluido de varias funcionalidades de descubrimiento. Sin embargo, otras cuentas podrán empezar a seguirte manualmente.
         suspend: Ya no puedes utilizar tu cuenta, y tu perfil y el resto de datos ya no son accesibles. Todavía puedes iniciar sesión para solicitar una copia de seguridad de tus datos, hasta que estos sean eliminados por completo en unos 30 días, aunque conservaremos algunos datos básicos para impedir que esquives la suspensión.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 22123e430..921db752a 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -1073,7 +1073,7 @@ es:
     remove: Desvincular alias
   appearance:
     advanced_web_interface: Interfaz web avanzada
-    advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.'
+    advanced_web_interface_hint: 'Si quieres aprovechar todo el ancho de tu pantalla, la interfaz web avanzada te permite configurar muchas columnas diferentes para ver toda la información que quieras al mismo tiempo: Inicio, notificaciones, cronología federada, cualquier número de listas y etiquetas.'
     animations_and_accessibility: Animaciones y accesibilidad
     confirmation_dialogs: Diálogos de confirmación
     discovery: Descubrir
@@ -1115,7 +1115,7 @@ es:
       welcome_title: "¡Te damos la bienvenida, %{name}!"
       wrong_email_hint: Si esa dirección de correo electrónico no es correcta, puedes cambiarla en la configuración de la cuenta.
     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.
+    delete_account_html: Si deseas eliminar tu cuenta, puedes <a href="%{path}">hacerlo aquí</a>. Se te pedirá una confirmación.
     description:
       prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!"
       prefix_sign_up: "¡Únete a Mastodon hoy!"
@@ -1157,7 +1157,7 @@ es:
     set_new_password: Establecer nueva contraseña
     setup:
       email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal.
-      email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo.
+      email_settings_hint_html: Haz clic en el enlace que te hemos enviado para verificar %{email}. Te esperamos aquí.
       link_not_received: "¿No recibiste un enlace?"
       new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
       title: Revisa tu bandeja de entrada
@@ -1299,7 +1299,7 @@ es:
   featured_tags:
     add_new: Añadir nuevo
     errors:
-      limit: Ya has alcanzado la cantidad máxima de hashtags
+      limit: Ya has alcanzado la cantidad máxima de etiquetas
     hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
   filters:
     contexts:
@@ -1352,7 +1352,7 @@ es:
       one: "<strong>%{count}</strong> elemento que coincide con su búsqueda está seleccionado."
       other: Todos los <strong>%{count}</strong> elementos que coinciden con su búsqueda están seleccionados.
     cancel: Cancelar
-    changes_saved_msg: "¡Cambios guardados con éxito!"
+    changes_saved_msg: "¡Los cambios se han guardado correctamente!"
     confirm: Confirmar
     copy: Copiar
     delete: Eliminar
@@ -1376,7 +1376,7 @@ es:
       too_large: El archivo es demasiado grande
     failures: Fallos
     imported: Importado
-    mismatched_types_warning: Parece que podrías haber seleccionado el tipo incorrecto para esta importación, por favor vuelve a verificarlo.
+    mismatched_types_warning: Parece que has seleccionado el tipo incorrecto para esta importación, vuelve a comprobarlo.
     modes:
       merge: Unir
       merge_long: Mantener registros existentes y añadir nuevos
@@ -1737,7 +1737,7 @@ es:
     development: Desarrollo
     edit_profile: Editar perfil
     export: Exportar
-    featured_tags: Hashtags destacados
+    featured_tags: Etiquetas destacadas
     import: Importar
     import_and_export: Importar y exportar
     migrate: Migración de cuenta
@@ -1777,8 +1777,8 @@ es:
     content_warning: 'Alerta de contenido: %{warning}'
     default_language: Igual que el idioma de la interfaz
     disallowed_hashtags:
-      one: 'contenía un hashtag no permitido: %{tags}'
-      other: 'contenía los hashtags no permitidos: %{tags}'
+      one: 'contenía una etiqueta no permitida: %{tags}'
+      other: 'contenía las etiquetas no permitidas: %{tags}'
     edited_at_html: Editado %{date}
     errors:
       in_reply_not_found: La publicación a la que intentas responder no existe.
@@ -1803,9 +1803,9 @@ es:
     exceptions: Excepciones
     explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado.
     ignore_favs: Ignorar favoritos
-    ignore_reblogs: Ignorar reblogueos
+    ignore_reblogs: Ignorar impulsos
     interaction_exceptions: Excepciones basadas en interacciones
-    interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento.
+    interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de impulsos si los han superado en algún momento.
     keep_direct: Mantener mensajes directos
     keep_direct_hint: No elimina ninguno de tus mensajes directos
     keep_media: Mantener publicaciones con multimedia adjunto
@@ -1831,7 +1831,7 @@ es:
     min_favs: Mantener mensajes con un número de favoritos mayor que
     min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos
     min_reblogs: Mantener publicaciones reblogueadas más de
-    min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos
+    min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido impulsadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de impulsos
   stream_entries:
     sensitive_content: Contenido sensible
   strikes:
@@ -1982,7 +1982,7 @@ es:
   verification:
     extra_instructions_html: <strong>Consejo:</strong> El enlace en tu web puede ser invisible. La parte importante es <code>rel="me"</code>, que evita la suplantación de identidad en sitios con contenido generado por el usuario. Puedes incluso usar una etiqueta <code>enlace</code> en el encabezado de la página en vez de <code>a</code>, pero el HTML debe ser accesible sin ejecutar JavaScript.
     here_is_how: Así es como se hace
-    hint_html: "<strong>Verificar tu identidad en Mastodon es para todos.</strong> Basado en estándares web abiertos, ahora y para siempre. Todo lo que necesitas es un sitio web propio que la gente reconozca. Cuando enlaces a este sitio web desde tu perfil, comprobaremos que el sitio web se enlaza a tu perfil y mostraremos un indicador visual en él."
+    hint_html: "<strong>Verificar tu identidad en Mastodon es para todos.</strong> Basado en estándares web abiertos, ahora y siempre gratis. Todo lo que necesitas es un sitio web personal por el que la gente te reconozca. Cuando enlaces a este sitio web desde tu perfil, comprobaremos que el sitio web enlaza con tu perfil y mostraremos un indicador visual en él."
     instructions_html: Copia y pega el siguiente código en el HTML de tu sitio web. A continuación, añade la dirección de su sitio web en uno de los campos extra de tu perfil desde la pestaña "Editar perfil" y guarda los cambios.
     verification: Verificación
     verified_links: Tus enlaces verificados
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index d7755d23b..7b8b28097 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -281,7 +281,7 @@ fi:
         reject_appeal_html: "%{name} hylkäsi käyttäjän %{target} valituksen moderointipäätöksestä"
         reject_user_html: "%{name} hylkäsi käyttäjän %{target} rekisteröitymisen"
         remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan"
-        reopen_report_html: "%{name} avasi uudelleen raportin %{target}"
+        reopen_report_html: "%{name} avasi raportin %{target} uudelleen"
         resend_user_html: "%{name} lähetti vahvistussähköpostiviestin uudelleen käyttäjälle %{target}"
         reset_password_user_html: "%{name} palautti käyttäjän %{target} salasanan"
         resolve_report_html: "%{name} ratkaisi raportin %{target}"
@@ -342,8 +342,8 @@ fi:
       enabled: Käytössä
       enabled_msg: Emoji otettiin käyttöön onnistuneesti
       image_hint: PNG tai GIF, enintään %{size}
-      list: Lisää listalle
-      listed: Listalla
+      list: Lisää listaan
+      listed: Listassa
       new:
         title: Lisää uusi mukautettu emoji
       no_emoji_selected: Emojeita ei muutettu, koska yhtään ei ollut valittuna
@@ -353,8 +353,8 @@ fi:
       shortcode_hint: Vähintään 2 merkkiä, vain kirjaimia, numeroita ja alaviivoja
       title: Mukautetut emojit
       uncategorized: Luokittelematon
-      unlist: Poista listalta
-      unlisted: Ei listalla
+      unlist: Poista listasta
+      unlisted: Ei listassa
       update_failed_msg: Emojin päivitys epäonnistui
       updated_msg: Emojin päivitys onnistui!
       upload: Lähetä
@@ -828,7 +828,7 @@ fi:
       batch:
         add_to_report: Lisää raporttiin nro %{id}
         remove_from_report: Poista raportista
-        report: Raportti
+        report: Raportoi
       contents: Sisältö
       deleted: Poistettu
       favourites: Suosikit
@@ -1274,7 +1274,7 @@ fi:
       title: Turvallisuusvahvistus epäonnistui
     '429': Rajoitettu
     '500':
-      content: Valitettavasti jokin meni pieleen meidän päässämme.
+      content: Valitettavasti jotain meni pieleen meidän päässämme.
       title: Sivu ei ole oikein
     '503': Sivua ei voitu näyttää palvelimen väliaikaisen vian vuoksi.
     noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin <a href="%{apps_path}">natiivisovelluksia</a>.
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 5243cf476..513583f66 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -102,8 +102,8 @@ he:
         pending: בהמתנה
         silenced: מוגבלים
         suspended: מושהים
-        title: ניהול קהילה
-      moderation_notes: הודעות מנחה
+        title: ניהול דיון
+      moderation_notes: הודעות מנחה דיונים
       most_recent_activity: פעילות עדכנית
       most_recent_ip: כתובות אחרונות
       no_account_selected: לא בוצעו שינויים בחשבונות ל שכן לא נבחרו חשבונות
@@ -562,7 +562,7 @@ he:
       moderation:
         all: הכל
         limited: מוגבלים
-        title: ניהול קהילה
+        title: ניהול דיון
       private_comment: הערה פרטית
       public_comment: תגובה פומבית
       purge: טיהור
@@ -670,7 +670,7 @@ he:
         delete: מחיקה
         placeholder: תאר/י אילו פעולות ננקטו, או עדכונים קשורים אחרים...
         title: הערות
-      notes_description_html: צפייה והשארת הערות למנחים אחרים או לעצמך העתידי
+      notes_description_html: צפייה והשארת הערות למנחים אחרים או לעצמך לעתיד
       processed_msg: דיווח %{id} עוּבָּד בהצלחה
       quick_actions_description_html: 'נקוט/י פעולה מהירה או גלול/י למטה לצפייה בתוכן המדווח:'
       remote_user_placeholder: המשתמש המרוחק מ-%{instance}
@@ -721,7 +721,7 @@ he:
         administration: ניהול מערכת
         devops: DevOps
         invites: הזמנות
-        moderation: פיקוח
+        moderation: ניהול דיון
         special: מיוחדים
       delete: מחיקה
       description_html: באמצעות <strong>תפקידי משתמש</strong>, תוכלו להתאים אישית לאילו פונקציות ואזורים של מסטודון המשתמשים יוכלו לגשת
@@ -743,7 +743,7 @@ he:
         manage_announcements: ניהול הכרזות
         manage_announcements_description: מאפשר למשתמשים לנהל הכרזות של השרת
         manage_appeals: ניהול ערעורים
-        manage_appeals_description: מאפשר למשתמשים לסקור ערעורים כנגד פעולות מודרציה
+        manage_appeals_description: מאפשר למשתמשים לסקור ערעורים כנגד פעולות ניהול דיון
         manage_blocks: ניהול חסימות
         manage_blocks_description: מאפשר למשתמשים לחסום ספקי דוא"ל וכתובות IP
         manage_custom_emojis: ניהול סמלונים בהתאמה אישית
@@ -753,7 +753,7 @@ he:
         manage_invites: ניהול הזמנות
         manage_invites_description: מאפשר למשתמשים לעלעל ב ולבטל קישורי הזמנה
         manage_reports: ניהול דו"חות
-        manage_reports_description: מאפשר למשתמשים לסקור דו"חות ולבצע פעולות מודרציה בהתבסס עליהם
+        manage_reports_description: מאפשר למשתמשים לסקור דו"חות ולבצע פעולות ניהול דיון בהתבסס עליהם
         manage_roles: ניהול תפקידים
         manage_roles_description: מאפשר למשתמשים לנהל ולמנות אחרים לתפקידים נמוכים יותר משלהם.
         manage_rules: ניהול כללים
@@ -765,7 +765,7 @@ he:
         manage_user_access: ניהול גישת משתמשים
         manage_user_access_description: מאפשר למשתמשים לבטל אימות דו-שלבי של משתמשים אחרים, לשנות את כתובות הדוא"ל שלהם, ולאפס את סיסמתם
         manage_users: ניהול משתמשים
-        manage_users_description: מאפשר למשתמשים לצפות בפרטים של משתמשים אחרים ולבצע פעולות מודרציה לפיהם
+        manage_users_description: מאפשר למשתמשים לצפות בפרטים של משתמשים אחרים ולבצע פעולות ניהול דיון לפיהם
         manage_webhooks: ניהול Webhooks
         manage_webhooks_description: מאפשר למשתמשים להגדיר Webhooks לאירועים מנהלתיים
         view_audit_log: צפייה בלוג ביקורת
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index f23711d40..9c3f7f03b 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -826,8 +826,10 @@ hu:
       back_to_account: Vissza a fiók oldalára
       back_to_report: Vissza a bejelentés oldalra
       batch:
+        add_to_report: 'Hozzáadás ehhez a jelentéshez: #%{id}'
         remove_from_report: Eltávolítás a bejelentésből
         report: Bejelentés
+      contents: Tartalom
       deleted: Törölve
       favourites: Kedvencek
       history: Verziótörténet
@@ -836,12 +838,17 @@ hu:
       media:
         title: Média
       metadata: Metaadatok
+      no_history: Ez a bejegyzés szerkesztve lett
       no_status_selected: Nem változtattunk meg egy bejegyzést sem, mert semmi sem volt kiválasztva
       open: Bejegyzés megnyitása
       original_status: Eredeti bejegyzés
       reblogs: Megosztások
+      replied_to_html: 'Válasz neki: %{acct_link}'
       status_changed: A bejegyzés megváltozott
+      status_title: 'Szerző: @%{name}'
+      title: Fiók bejegyzései – @%{name}
       trending: Felkapott
+      view_publicly: Megtekintés nyilvánosan
       visibility: Láthatóság
       with_media: Médiával
     strikes:
@@ -1945,7 +1952,7 @@ hu:
       feature_moderation_title: Moderálás, ahogy annak lennie kell
       follow_action: Követés
       follow_step: A Mastodon az érdekes emberek követéséről szól.
-      follow_title: Saját hírfolyam testreszabása
+      follow_title: Kezdőlapi hírfolyam testreszabása
       follows_subtitle: Jól ismert fiókok követése
       follows_title: Kit érdemes követni
       follows_view_more: További követendő személyek megtekintése
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 3e44adbf4..d6f44cad5 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -190,6 +190,7 @@ lv:
         create_domain_block: Izveidot Domēna Bloku
         create_email_domain_block: Izveidot e-pasta domēna liegumu
         create_ip_block: Izveidot IP noteikumu
+        create_relay: Izveidot retranslāciju
         create_unavailable_domain: Izveidot Nepieejamu Domēnu
         create_user_role: Izveidot lomu
         demote_user: Pazemināt Lietotāju
@@ -201,14 +202,17 @@ lv:
         destroy_email_domain_block: Izdzēst e-pasta domēna liegumu
         destroy_instance: Attīrīt domēnu
         destroy_ip_block: Dzēst IP noteikumu
+        destroy_relay: Izdzēst retranslāciju
         destroy_status: Izdzēst Rakstu
         destroy_unavailable_domain: Dzēst Nepieejamu Domēnu
         destroy_user_role: Iznīcināt lomu
         disable_2fa_user: Atspējot 2FA
         disable_custom_emoji: Atspējot pielāgotu emocijzīmi
+        disable_relay: Atspējot retranslāciju
         disable_sign_in_token_auth_user: Atspējot autentificēšanos ar e-pasta pilnvaru lietotājam
         disable_user: Atspējot Lietotāju
         enable_custom_emoji: Iespējot pielāgotu emocijzīmi
+        enable_relay: Iespējot retranslāciju
         enable_sign_in_token_auth_user: Iespējot autentificēšanos ar e-pasta pilnvaru lietotājam
         enable_user: Ieslēgt Lietotāju
         memorialize_account: Saglabāt Kontu Piemiņai
@@ -244,9 +248,11 @@ lv:
         confirm_user_html: "%{name} apstiprināja lietotāja %{target} e-pasta adresi"
         create_account_warning_html: "%{name} nosūtīja brīdinājumu %{target}"
         create_announcement_html: "%{name} izveidoja jaunu paziņojumu %{target}"
+        create_canonical_email_block_html: "%{name} liedza e-pasta adresi ar jaucējkodu %{target}"
         create_custom_emoji_html: "%{name} augšupielādēja jaunu emocijzīmi %{target}"
         create_domain_allow_html: "%{name} atļāva federāciju ar domēnu %{target}"
         create_domain_block_html: "%{name} bloķēja domēnu %{target}"
+        create_email_domain_block_html: "%{name} liedza e-pasta domēnu %{target}"
         create_ip_block_html: "%{name} izveidoja nosacījumu priekš IP %{target}"
         create_unavailable_domain_html: "%{name} apturēja piegādi uz domēnu %{target}"
         create_user_role_html: "%{name} nomainīja %{target} lomu"
@@ -817,6 +823,7 @@ lv:
       batch:
         remove_from_report: Noņemt no ziņojuma
         report: Ziņojums
+      contents: Saturs
       deleted: Dzēstie
       favourites: Izlase
       history: Versiju vēsture
diff --git a/config/locales/nan.yml b/config/locales/nan.yml
new file mode 100644
index 000000000..512c65fe8
--- /dev/null
+++ b/config/locales/nan.yml
@@ -0,0 +1 @@
+nan:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 048214eca..d5d60bc31 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -187,6 +187,7 @@ nl:
         create_domain_block: Domeinblokkade aanmaken
         create_email_domain_block: E-maildomeinblokkade aanmaken
         create_ip_block: IP-regel aanmaken
+        create_relay: Relay aanmaken
         create_unavailable_domain: Niet beschikbaar domein aanmaken
         create_user_role: Rol aanmaken
         demote_user: Gebruiker degraderen
@@ -198,14 +199,17 @@ nl:
         destroy_email_domain_block: Blokkade van e-maildomein verwijderen
         destroy_instance: Domein volledig verwijderen
         destroy_ip_block: IP-regel verwijderen
+        destroy_relay: Relay verwijderen
         destroy_status: Toot verwijderen
         destroy_unavailable_domain: Niet beschikbaar domein verwijderen
         destroy_user_role: Rol permanent verwijderen
         disable_2fa_user: Tweestapsverificatie uitschakelen
         disable_custom_emoji: Lokale emojij uitschakelen
+        disable_relay: Relay uitschakelen
         disable_sign_in_token_auth_user: Verificatie met een toegangscode via e-mail voor de gebruiker uitschakelen
         disable_user: Gebruiker uitschakelen
         enable_custom_emoji: Lokale emoji inschakelen
+        enable_relay: Relay inschakelen
         enable_sign_in_token_auth_user: Verificatie met een toegangscode via e-mail voor de gebruiker inschakelen
         enable_user: Gebruiker inschakelen
         memorialize_account: Het account in een In memoriam veranderen
@@ -247,6 +251,7 @@ nl:
         create_domain_block_html: Domein %{target} is door %{name} geblokkeerd
         create_email_domain_block_html: "%{name} heeft het e-maildomein %{target} geblokkeerd"
         create_ip_block_html: "%{name} maakte regel aan voor IP %{target}"
+        create_relay_html: "%{name} heeft een relay aangemaakt %{target}"
         create_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} beëindigd"
         create_user_role_html: "%{name} maakte de rol %{target} aan"
         demote_user_html: Gebruiker %{target} is door %{name} gedegradeerd
@@ -258,14 +263,17 @@ nl:
         destroy_email_domain_block_html: "%{name} heeft het e-maildomein %{target} gedeblokkeerd"
         destroy_instance_html: "%{name} verwijderde het domein %{target} volledig"
         destroy_ip_block_html: "%{name} verwijderde regel voor IP %{target}"
+        destroy_relay_html: "%{name} heeft de relay %{target} verwijderd"
         destroy_status_html: Bericht van %{target} is door %{name} verwijderd
         destroy_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} hervat"
         destroy_user_role_html: "%{name} verwijderde de rol %{target}"
         disable_2fa_user_html: De vereiste tweestapsverificatie voor %{target} is door %{name} uitgeschakeld
         disable_custom_emoji_html: Emoji %{target} is door %{name} uitgeschakeld
+        disable_relay_html: "%{name} heeft de relay %{target} uitgeschakeld"
         disable_sign_in_token_auth_user_html: "%{name} heeft verificatie met een toegangscode via e-mail uitgeschakeld voor %{target}"
         disable_user_html: Inloggen voor %{target} is door %{name} uitgeschakeld
         enable_custom_emoji_html: Emoji %{target} is door %{name} ingeschakeld
+        enable_relay_html: "%{name} heeft de relay %{target} ingeschakeld"
         enable_sign_in_token_auth_user_html: "%{name} heeft verificatie met een toegangscode via e-mail ingeschakeld voor %{target}"
         enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld
         memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd
@@ -835,10 +843,12 @@ nl:
       open: Bericht tonen
       original_status: Oorspronkelijk bericht
       reblogs: Boosts
+      replied_to_html: Reageerde op %{acct_link}
       status_changed: Bericht veranderd
       status_title: Bericht van @%{name}
       title: Accountberichten - @%{name}
       trending: Trending
+      view_publicly: In het openbaar bekijken
       visibility: Zichtbaarheid
       with_media: Met media
     strikes:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 537dee5f7..bbeca8490 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -1389,6 +1389,9 @@ pt-BR:
       bookmarks_html:
         one: Você está prestes a <strong>substituir seus salvos</strong> por até <strong>%{count} publicação</strong> de <strong>%{filename}</strong>.
         other: Você está prestes a <strong>substituir seus salvos</strong> por até <strong>%{count} publicações</strong> de <strong>%{filename}</strong>.
+      domain_blocking_html:
+        one: Você está prestes a <strong>substituir seu bloco de lista do domínio</strong> com <strong>%{count} domínio</strong> de <strong>%{filename}</strong>.
+        other: Você está prestes a <strong>substituir sua lista de bloqueio de domínio</strong> com <strong>domínios%{count}</strong> de <strong>%{filename}</strong>.
     preambles:
       muting_html:
         one: Você está prestes a <strong>silenciar</strong> <strong>%{count}  conta</strong> de <strong>%{filename}</strong>.
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index d9bf96c62..ade13952c 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -854,8 +854,10 @@ ru:
       back_to_account: Назад к учётной записи
       back_to_report: Вернуться к жалобе
       batch:
+        add_to_report: Добавить к жалобе №%{id}
         remove_from_report: Убрать из жалобы
         report: Пожаловаться
+      contents: Содержание
       deleted: Удалено
       favourites: Избранное
       history: История версий
@@ -864,12 +866,17 @@ ru:
       media:
         title: Файлы мультимедиа
       metadata: Метаданные
+      no_history: Этот пост не редактировался
       no_status_selected: Ничего не изменилось, так как ни один пост не был выделен
       open: Открыть запись
       original_status: Оригинальный пост
       reblogs: Продвинули
+      replied_to_html: Ответ пользователю %{acct_link}
       status_changed: Пост изменен
+      status_title: Пост пользователя @%{name}
+      title: Посты пользователя - @%{name}
       trending: Популярное
+      view_publicly: Открыть по публичной ссылке
       visibility: Видимость
       with_media: С файлами
     strikes:
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index defb13325..3a70c4109 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -3,6 +3,7 @@ ca:
   simple_form:
     hints:
       account:
+        attribution_domains_as_text: Un per línia. Protegeix de falses atribucions.
         discoverable: El teu perfil i els teus tuts públics poden aparèixer o ser recomanats en diverses àreas de Mastodon i el teu perfil pot ser suggerit a altres usuaris.
         display_name: El teu nom complet o el teu nom divertit.
         fields: La teva pàgina d'inici, pronoms, edat, el que vulguis.
@@ -143,6 +144,7 @@ ca:
         url: On els esdeveniments seran enviats
     labels:
       account:
+        attribution_domains_as_text: Webs que us poden donar crèdit
         discoverable: Permet el perfil i el tuts en els algorismes de descobriment
         fields:
           name: Etiqueta
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 08d533115..d6d653673 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -144,7 +144,7 @@ de:
         url: Wohin Ereignisse gesendet werden
     labels:
       account:
-        attribution_domains_as_text: Websites, die dich anerkennen dürfen
+        attribution_domains_as_text: Websites, die auf dich verweisen dürfen
         discoverable: Profil und Beiträge in Suchalgorithmen berücksichtigen
         fields:
           name: Beschriftung
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index ef252d8ae..aa1184a02 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -3,12 +3,14 @@ en-GB:
   simple_form:
     hints:
       account:
+        attribution_domains_as_text: One per line. Protects from false attributions.
         discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users.
         display_name: Your full name or your fun name.
         fields: Your homepage, pronouns, age, anything you want.
         indexable: Your public posts may appear in search results on Mastodon. People who have interacted with your posts may be able to search them regardless.
         note: 'You can @mention other people or #hashtags.'
         show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless.
+        unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and choose whether to accept or reject new followers.
       account_alias:
         acct: Specify the username@domain of the account you want to move from
       account_migration:
@@ -142,6 +144,7 @@ en-GB:
         url: Where events will be sent to
     labels:
       account:
+        attribution_domains_as_text: Websites allowed to credit you
         discoverable: Feature profile and posts in discovery algorithms
         fields:
           name: Label
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index f451c780b..b6b048136 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -60,6 +60,7 @@ en:
         setting_display_media_default: Hide media marked as sensitive
         setting_display_media_hide_all: Always hide media
         setting_display_media_show_all: Always show media
+        setting_system_scrollbars_ui: Applies only to desktop browsers based on Safari and Chrome
         setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details
         setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed
         username: You can use letters, numbers, and underscores
@@ -223,6 +224,7 @@ en:
         setting_hide_network: Hide your social graph
         setting_reduce_motion: Reduce motion in animations
         setting_system_font_ui: Use system's default font
+        setting_system_scrollbars_ui: Use system's default scrollbar
         setting_theme: Site theme
         setting_trends: Show today's trends
         setting_unfollow_modal: Show confirmation dialog before unfollowing someone
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 3c340b300..23e41d77a 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -5,18 +5,18 @@ es-MX:
       account:
         attribution_domains_as_text: Uno por línea. Protege contra atribuciones falsas.
         discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios.
-        display_name: Tu nombre completo o tu nick.
-        fields: Tu página de inicio, pronombres, edad, todo lo que quieras.
+        display_name: Tu nombre completo o tu apodo.
+        fields: Tu página de inicio, pronombres, edad, lo que quieras.
         indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden buscarlas en cualquier momento.
-        note: 'Puedes @mencionar a otra gente o #hashtags.'
+        note: 'Puedes @mencionar a otra gente o #etiquetas.'
         show_collections: Las personas pueden navegar a través de tus seguidos y seguidores. Las personas que te siguen pueden ver que las sigues.
-        unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
+        unlocked: La gente podrá seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
       account_alias:
         acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar
       account_migration:
-        acct: Especifique el nombre de usuario@dominio de la cuenta a la cual desea migrar
+        acct: Especifica el nombre de usuario@dominio de la cuenta a la cual desea migrar
       account_warning_preset:
-        text: Puede usar sintaxis de publicaciones, como URLs, etiquetas y menciones
+        text: Puedes usar sintaxis de publicaciones, como URLs, etiquetas y menciones
         title: Opcional. No visible para el destinatario
       admin_account_action:
         include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia
@@ -51,17 +51,17 @@ es-MX:
         inbox_url: Copia la URL de la página principal del relés que quieres utilizar
         irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
         locale: El idioma de la interfaz de usuario, correos y notificaciones push
-        password: Utilice al menos 8 caracteres
+        password: Utiliza al menos 8 caracteres
         phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación
         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
         setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a las publicaciones recibidas recientemente)
         setting_always_send_emails: Normalmente las notificaciones por correo electrónico no se enviarán cuando estés usando Mastodon activamente
-        setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click
+        setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un clic
         setting_display_media_default: Ocultar contenido multimedia marcado como sensible
         setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
         setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
         setting_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
+        setting_use_pending_items: Ocultar las publicaciones de la línea de tiempo tras un clic en lugar de desplazar automáticamente el feed
         username: Puedes usar letras, números y guiones bajos
         whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra
       domain_allow:
@@ -193,7 +193,7 @@ es-MX:
         email: Dirección de correo electrónico
         expires_in: Expirar tras
         fields: Metadatos de perfil
-        header: Img. cabecera
+        header: Imagen de encabezado
         honeypot: "%{label} (no rellenar)"
         inbox_url: URL de la entrada de relés
         irreversible: Dejar en lugar de ocultar
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index a0338a302..56e9b33ee 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -10,13 +10,13 @@ es:
         indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden ser capaces de buscarlas sin importar su visibilidad.
         note: Puedes mencionar a otras personas o etiquetas.
         show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo.
-        unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
+        unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores.
       account_alias:
         acct: Especifica el nombre_de_usuario@dominio de la cuenta desde donde deseas migrar
       account_migration:
         acct: Especifica el nombre_de_usuario@dominio de la cuenta hacia la que quieres migrar
       account_warning_preset:
-        text: Puede usar sintaxis de publicaciones, como URLs, hashtags y menciones
+        text: Puede usar sintaxis de publicaciones, como URLs, etiquetas y menciones
         title: Opcional. No es visible para el destinatario
       admin_account_action:
         include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia
@@ -46,12 +46,12 @@ es:
         current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual
         current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual
         digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
-        email: Se le enviará un correo de confirmación
+        email: Te enviaremos un correo electrónico de confirmación
         header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
         inbox_url: Copia la URL de la página principal del relés que quieres utilizar
         irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
         locale: El idioma de la interfaz de usuario, correos y notificaciones push
-        password: Utilice al menos 8 caracteres
+        password: Utiliza al menos 8 caracteres
         phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación
         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
         setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a los impulsos recibidos recientemente)
@@ -101,7 +101,7 @@ es:
         thumbnail: Una imagen de aproximadamente 2:1 se muestra junto a la información de tu servidor.
         timeline_preview: Los visitantes no registrados podrán navegar por los mensajes públicos más recientes disponibles en el servidor.
         trendable_by_default: Omitir la revisión manual del contenido en tendencia. Los elementos individuales aún podrán eliminarse de las tendencias.
-        trends: Las tendencias muestran qué mensajes, etiquetas y noticias están ganando tracción en tu servidor.
+        trends: Las tendencias muestran qué publicaciones, etiquetas y noticias están ganando tracción en tu servidor.
         trends_as_landing_page: Mostrar contenido en tendencia para usuarios y visitantes en lugar de una descripción de este servidor. Requiere que las tendencias estén habilitadas.
       form_challenge:
         current_password: Estás entrando en un área segura
@@ -193,7 +193,7 @@ es:
         email: Dirección de correo electrónico
         expires_in: Expirar tras
         fields: Metadatos de perfil
-        header: Img. cabecera
+        header: Imagen de encabezado
         honeypot: "%{label} (no rellenar)"
         inbox_url: URL de la entrada de relés
         irreversible: Rechazar en lugar de ocultar
@@ -208,7 +208,7 @@ es:
         setting_aggregate_reblogs: Agrupar impulsos en las líneas de tiempo
         setting_always_send_emails: Enviar siempre notificaciones por correo
         setting_auto_play_gif: Reproducir automáticamente los GIFs animados
-        setting_boost_modal: Mostrar ventana de confirmación antes de impulsar
+        setting_boost_modal: Mostrar diálogo de confirmación antes de impulsar una publicación
         setting_default_language: Idioma de publicación
         setting_default_privacy: Privacidad de publicaciones
         setting_default_sensitive: Marcar siempre imágenes como sensibles
@@ -339,5 +339,5 @@ es:
       text: necesario
     title:
       sessions:
-        webauthn: Utilice una de sus claves de seguridad para iniciar sesión
+        webauthn: Utiliza una de sus claves de seguridad para iniciar sesión
     'yes': Sí
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index 9872de222..8b3674910 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -124,7 +124,7 @@ fa:
     labels:
       account:
         attribution_domains_as_text: پابگاه‌های وبی که اجازهٔ اعتبار دهی به شما را دارند
-        discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف
+        discoverable: مشخص کردن مشخصات و فرسته‌ها در الگوریتم‌های اکتشاف
         fields:
           name: برچسب
           value: محتوا
diff --git a/config/locales/simple_form.nan.yml b/config/locales/simple_form.nan.yml
new file mode 100644
index 000000000..512c65fe8
--- /dev/null
+++ b/config/locales/simple_form.nan.yml
@@ -0,0 +1 @@
+nan:
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 0ba54e26c..f8f4d3f11 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -10,6 +10,7 @@ th:
         indexable: โพสต์สาธารณะของคุณอาจปรากฏในผลลัพธ์การค้นหาใน Mastodon ผู้คนที่ได้โต้ตอบกับโพสต์ของคุณอาจสามารถค้นหาโพสต์เหล่านั้นได้ไม่ว่าอย่างไรก็ตาม
         note: 'คุณสามารถ @กล่าวถึง ผู้คนอื่น ๆ หรือ #แฮชแท็ก'
         show_collections: ผู้คนจะสามารถเรียกดูการติดตามและผู้ติดตามของคุณ ผู้คนที่คุณติดตามจะเห็นว่าคุณติดตามเขาไม่ว่าอย่างไรก็ตาม
+        unlocked: ผู้คนจะสามารถติดตามคุณได้โดยไม่ต้องขอการอนุมัติ เลิกกาเครื่องหมายหากคุณต้องการตรวจทานคำขอติดตามและเลือกว่าจะยอมรับหรือปฏิเสธผู้ติดตามใหม่
       account_alias:
         acct: ระบุ username@domain ของบัญชีที่คุณต้องการย้ายจาก
       account_migration:
diff --git a/config/locales/simple_form.tok.yml b/config/locales/simple_form.tok.yml
index 37b0ee765..8d9aa9585 100644
--- a/config/locales/simple_form.tok.yml
+++ b/config/locales/simple_form.tok.yml
@@ -3,7 +3,15 @@ tok:
   simple_form:
     hints:
       account:
+        attribution_domains_as_text: linja sitelen wan la wan taso o lon. ni la, sona pona pi jan pali li lon.
         display_name: nimi sina ale anu nimi sina musi.
+        fields: lipu open sina, en nimi pi kon sina, en suli tenpo sina, en ijo ante ale pi wile sina.
+        note: 'sina ken @mu e jan ante, li ken lon e #kulupu toki suli.'
+        show_collections: 'jan li ken lukin e ni: sina kute e jan seme, jan seme li kute e sina. ale la, sina kute e jan la ona li sona.'
+      account_alias:
+        acct: o toki e nimi@ma pi sijelo tan
+      account_migration:
+        acct: o toki e nimi@ma pi sijelo tawa
       defaults:
         setting_display_media_hide_all: sitelen ale li len
         setting_display_media_show_all: sitelen ale li len ala
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index 5aed56662..599b63ea6 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -60,6 +60,7 @@ tr:
         setting_display_media_default: Hassas olarak işaretlenmiş medyayı gizle
         setting_display_media_hide_all: Medyayı her zaman gizle
         setting_display_media_show_all: Medyayı her zaman göster
+        setting_system_scrollbars_ui: Yalnızca Safari ve Chrome tabanlı masaüstü tarayıcılar için geçerlidir
         setting_use_blurhash: Gradyenler gizli görsellerin renklerine dayanır, ancak detayları gizler
         setting_use_pending_items: Akışı otomatik olarak kaydırmak yerine, zaman çizelgesi güncellemelerini tek bir tıklamayla gizleyin
         username: Harfleri, sayıları veya alt çizgi kullanabilirsiniz
@@ -223,6 +224,7 @@ tr:
         setting_hide_network: Sosyal grafiğini gizle
         setting_reduce_motion: Animasyonlarda hareketi azalt
         setting_system_font_ui: Sistemin varsayılan yazı tipini kullan
+        setting_system_scrollbars_ui: Sistemin varsayılan kaydırma çubuğunu kullan
         setting_theme: Site teması
         setting_trends: Bugünün gündemini göster
         setting_unfollow_modal: Birini takip etmeden önce onay iletişim kutusu göster
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 04c23f170..f0f1bf15c 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -42,14 +42,14 @@ zh-CN:
         autofollow: 通过邀请链接注册的用户将会自动关注你
         avatar: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px
         bot: 来自这个账户的绝大多数操作都是自动进行的,并且可能无人监控
-        context: 过滤器的应用环境
+        context: 过滤规则将被应用到的一个或多个场景
         current_password: 为了安全起见,请输入当前账号的密码
         current_username: 请输入当前账号的用户名以确认
         digest: 仅在你长时间未登录,且收到了私信时发送
         email: 我们会向你发送一封确认邮件
-        header: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px
+        header: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。分辨率将被压缩至 %{dimensions}px
         inbox_url: 从你想要使用的中继站的主页上复制 URL
-        irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样
+        irreversible: 被过滤的嘟文会永久消失,移除过滤规则后也不会恢复
         locale: 在用户界面、电子邮件和推送通知中使用的语言
         password: 至少需要8个字符
         phrase: 匹配将忽略嘟文或内容警告里的字母大小写
@@ -72,10 +72,10 @@ zh-CN:
       featured_tag:
         name: 以下是你最近使用过的标签:
       filters:
-        action: 选择在嘟文命中过滤器时要执行的操作
+        action: 选择在嘟文命中过滤规则时要执行的操作
         actions:
-          hide: 彻底屏蔽过滤内容,犹如它不曾存在过一般
-          warn: 在警告中提及过滤器标题后,隐藏过滤内容
+          hide: 彻底隐藏过滤内容,就像它从未存在过一样
+          warn: 显示带有过滤规则标题的警告,并隐藏过滤内容
       form_admin_settings:
         activity_api_enabled: 本站每周的嘟文数、活跃用户数和新注册用户数
         app_icon: WEBP、PNG、GIF 或 JPG。使用自定义图标覆盖移动设备上的默认应用图标。
@@ -125,7 +125,7 @@ zh-CN:
         otp: 输入你手机应用上生成的双因素认证代码,或者任意一个恢复代码:
         webauthn: 如果是 USB 密钥,请确保将其插入,如有必要,请点击它。
       settings:
-        indexable: 你的个人资料页面可能会出现在Google、Bing等搜索结果中。
+        indexable: 你的账户页可能会出现在Google、Bing等的搜索结果中。
         show_application: 无论如何,你始终可以看到是哪个应用发布了你的嘟文。
       tag:
         name: 你只能改变字母的大小写,让它更易读
@@ -145,12 +145,12 @@ zh-CN:
     labels:
       account:
         attribution_domains_as_text: 授权展示你的署名的网站
-        discoverable: 在发现算法中展示你的个人资料和嘟文
+        discoverable: 在发现算法中展示你的账户与嘟文
         fields:
           name: 标签
           value: 内容
         indexable: 将公开嘟文纳入搜索范围
-        show_collections: 在个人资料中显示关注和关注者
+        show_collections: 在账户页显示关注和关注者
         unlocked: 自动接受新关注者
       account_alias:
         acct: 处理旧账号
@@ -183,17 +183,17 @@ zh-CN:
         autofollow: 让被邀请人关注你的账户
         avatar: 头像
         bot: 这是一个机器人账户
-        chosen_languages: 语言过滤
+        chosen_languages: 过滤语言
         confirm_new_password: 确认新密码
         confirm_password: 确认密码
-        context: 过滤环境
+        context: 过滤规则生效场景
         current_password: 当前密码
         data: 数据文件
         display_name: 昵称
         email: 邮箱地址
         expires_in: 失效时间
         fields: 个人资料附加信息
-        header: 个人资料页横幅图片
+        header: 封面图
         honeypot: "%{label} (请勿填写)"
         inbox_url: 中继站收件箱的 URL
         irreversible: 丢弃而非隐藏
@@ -213,7 +213,7 @@ zh-CN:
         setting_default_privacy: 嘟文默认可见范围
         setting_default_sensitive: 始终标记媒体为敏感内容
         setting_delete_modal: 在删除嘟文前询问我
-        setting_disable_hover_cards: 禁用悬停资料预览
+        setting_disable_hover_cards: 禁用悬停资料卡预览
         setting_disable_swiping: 禁用滑动动作
         setting_display_media: 媒体显示
         setting_display_media_default: 默认
@@ -242,7 +242,7 @@ zh-CN:
       filters:
         actions:
           hide: 完全隐藏
-          warn: 隐藏时显示警告信息
+          warn: 隐藏时显示警告
       form_admin_settings:
         activity_api_enabled: 在 API 中发布有关用户活动的汇总统计数据
         app_icon: 应用图标
@@ -310,8 +310,8 @@ zh-CN:
         hint: 补充信息
         text: 规则
       settings:
-        indexable: 允许搜索引擎索引个人资料页面
-        show_application: 显示
+        indexable: 允许搜索引擎索引账户页
+        show_application: 显示你发嘟所用的应用
       tag:
         listable: 允许这个话题标签在用户目录中显示
         name: 话题标签
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 5178506ba..6834f8ac2 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -184,6 +184,7 @@ th:
         create_domain_block: สร้างการปิดกั้นโดเมน
         create_email_domain_block: สร้างการปิดกั้นโดเมนอีเมล
         create_ip_block: สร้างกฎ IP
+        create_relay: สร้างรีเลย์
         create_unavailable_domain: สร้างโดเมนที่ไม่พร้อมใช้งาน
         create_user_role: สร้างบทบาท
         demote_user: ลดขั้นผู้ใช้
@@ -195,14 +196,17 @@ th:
         destroy_email_domain_block: ลบการปิดกั้นโดเมนอีเมล
         destroy_instance: ล้างข้อมูลโดเมน
         destroy_ip_block: ลบกฎ IP
+        destroy_relay: ลบรีเลย์
         destroy_status: ลบโพสต์
         destroy_unavailable_domain: ลบโดเมนที่ไม่พร้อมใช้งาน
         destroy_user_role: ทำลายบทบาท
         disable_2fa_user: ปิดใช้งาน 2FA
         disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง
+        disable_relay: ปิดใช้งานรีเลย์
         disable_sign_in_token_auth_user: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้
         disable_user: ปิดใช้งานผู้ใช้
         enable_custom_emoji: เปิดใช้งานอีโมจิที่กำหนดเอง
+        enable_relay: เปิดใช้งานรีเลย์
         enable_sign_in_token_auth_user: เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้
         enable_user: เปิดใช้งานผู้ใช้
         memorialize_account: ทำให้บัญชีเป็นอนุสรณ์
@@ -244,6 +248,7 @@ th:
         create_domain_block_html: "%{name} ได้ปิดกั้นโดเมน %{target}"
         create_email_domain_block_html: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}"
         create_ip_block_html: "%{name} ได้สร้างกฎสำหรับ IP %{target}"
+        create_relay_html: "%{name} ได้สร้างรีเลย์ %{target}"
         create_unavailable_domain_html: "%{name} ได้หยุดการจัดส่งไปยังโดเมน %{target}"
         create_user_role_html: "%{name} ได้สร้างบทบาท %{target}"
         demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}"
@@ -255,14 +260,17 @@ th:
         destroy_email_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}"
         destroy_instance_html: "%{name} ได้ล้างข้อมูลโดเมน %{target}"
         destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}"
+        destroy_relay_html: "%{name} ได้ลบรีเลย์ %{target}"
         destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก"
         destroy_unavailable_domain_html: "%{name} ได้ทำการจัดส่งไปยังโดเมน %{target} ต่อ"
         destroy_user_role_html: "%{name} ได้ลบบทบาท %{target}"
         disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}"
         disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}"
+        disable_relay_html: "%{name} ได้ปิดใช้งานรีเลย์ %{target}"
         disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}"
         disable_user_html: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
         enable_custom_emoji_html: "%{name} ได้เปิดใช้งานอีโมจิ %{target}"
+        enable_relay_html: "%{name} ได้เปิดใช้งานรีเลย์ %{target}"
         enable_sign_in_token_auth_user_html: "%{name} ได้เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}"
         enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
         memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์"
@@ -804,8 +812,10 @@ th:
       back_to_account: กลับไปที่หน้าบัญชี
       back_to_report: กลับไปที่หน้ารายงาน
       batch:
+        add_to_report: 'เพิ่มไปยังรายงาน #%{id}'
         remove_from_report: เอาออกจากรายงาน
         report: รายงาน
+      contents: เนื้อหา
       deleted: ลบแล้ว
       favourites: รายการโปรด
       history: ประวัติรุ่น
@@ -814,12 +824,17 @@ th:
       media:
         title: สื่อ
       metadata: ข้อมูลอภิพันธุ์
+      no_history: ไม่มีการแก้ไขโพสต์นี้
       no_status_selected: ไม่มีการเปลี่ยนแปลงโพสต์เนื่องจากไม่มีการเลือก
       open: เปิดโพสต์
       original_status: โพสต์ดั้งเดิม
       reblogs: การดัน
+      replied_to_html: ตอบกลับ %{acct_link}
       status_changed: เปลี่ยนโพสต์แล้ว
+      status_title: โพสต์โดย @%{name}
+      title: โพสต์ของบัญชี - @%{name}
       trending: กำลังนิยม
+      view_publicly: ดูแบบสาธารณะ
       visibility: การมองเห็น
       with_media: มีสื่อ
     strikes:
diff --git a/config/locales/tok.yml b/config/locales/tok.yml
index 9f962d2b5..2cb8429ac 100644
--- a/config/locales/tok.yml
+++ b/config/locales/tok.yml
@@ -1,5 +1,37 @@
 ---
 tok:
+  about:
+    about_mastodon_html: ilo toki pi tenpo kama. sitelen esun li lon ala, jan li lawa ala e sina, jan pali li jo ala e wile ike. kin la, jan lawa li wan taso ala a! ilo Masoton la, sona sina li ken ijo pi sina taso!
+    contact_missing: lon ala
+    contact_unavailable: sona ala
+    hosted_on: lipu Masoton pi ma %{domain}
+    title: sona suli
+  accounts:
+    followers:
+      other: jan ni li kute e sina
+    following: sina kute e jan ni
+    instance_actor_flash: sijelo ni li lon ala, li jan wan taso ala, li kulupu jan. ona li pona e nasin pi lawa mute. jan lawa o weka ala e sijelo ni.
+    last_active: tenpo poka
+    link_verified_on: "%{date} la mi sona e ni: jan seme li jo e lipu ni"
+    nothing_here: ala li lon ni a!
+    pin_errors:
+      following: sina wile toki e pona jan la, sina o kute e ona
+    posts:
+      other: toki suli
+    posts_tab_heading: toki suli
+    self_follow_error: sina ken ala kute e sina
   admin:
+    account_actions:
+      action: o ijo
+      already_silenced: jan ni li jo e ken lili lon tenpo ni.
     accounts:
+      approve: o wile
       are_you_sure: ni li pona ala pona?
+      delete: o ala e sona
+      deleted: jan li ala e ni
+      demote: o lili e ken
+      search: o alasa
+    tags:
+      search: o alasa
+  privacy:
+    search: o alasa
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 1623f39ad..9f4b75104 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -1,7 +1,7 @@
 ---
 zh-CN:
   about:
-    about_mastodon_html: 来自未来的社交网络:无广告、无监视、去中心化、合乎道德!使用 Mastodon 夺回你的数据!
+    about_mastodon_html: 来自未来的社交网络:无广告、无监视、去中心化、合乎道德!加入 Mastodon,掌控自己的数据!
     contact_missing: 未设定
     contact_unavailable: 未公开
     hosted_on: 运行在 %{domain} 上的 Mastodon 实例
@@ -11,8 +11,8 @@ zh-CN:
       other: 关注者
     following: 正在关注
     instance_actor_flash: 该账号用来代表虚拟角色,并不代表个人用户,仅代表服务器本身。该账号用于联合目的,不应该被停用。
-    last_active: 最近活动
-    link_verified_on: 此链接的所有权已在 %{date} 检查
+    last_active: 上次活跃
+    link_verified_on: 此链接的所有权已在 %{date} 验证
     nothing_here: 空空如也!
     pin_errors:
       following: 你必须关注你要推荐的人
@@ -25,7 +25,7 @@ zh-CN:
       action: 执行操作
       already_silenced: 此账户已受限。
       already_suspended: 此账户已被封禁。
-      title: 在 %{acct} 上执行管理操作
+      title: 对 %{acct} 执行管理操作
     account_moderation_notes:
       create: 新建记录
       created_msg: 管理记录创建成功!
@@ -56,7 +56,7 @@ zh-CN:
       custom: 自定义
       delete: 删除数据
       deleted: 已删除
-      demote: 降任
+      demote: 取消管理员
       destroyed_msg: "%{username} 的数据已被安排至删除队列"
       disable: 冻结
       disable_sign_in_token_auth: 禁用邮件令牌身份验证
@@ -73,7 +73,7 @@ zh-CN:
       enabled_msg: 成功解冻 %{username} 的账号
       followers: 粉丝
       follows: 关注
-      header: 个人资料页横幅图片
+      header: 封面图
       inbox_url: 收件箱(Inbox)URL
       invite_request_text: 加入理由
       invited_by: 邀请者为
@@ -82,7 +82,7 @@ zh-CN:
       location:
         all: 全部
         local: 本站
-        remote: 远端实例
+        remote: 外站
         title: 位置
       login_status: 登录状态
       media_attachments: 媒体文件
@@ -109,20 +109,20 @@ zh-CN:
       previous_strikes: 既往处罚
       previous_strikes_description_html:
         other: 此账号已有<strong>%{count}</strong>次处罚。
-      promote: 升任
+      promote: 设为管理员
       protocol: 协议
       public: 公开页面
       push_subscription_expires: PuSH 订阅过期时间
-      redownload: 刷新个人资料
-      redownloaded_msg: 成功从来源处刷新 %{username} 的用户资料
+      redownload: 刷新账户信息
+      redownloaded_msg: 成功从来源站点刷新 %{username} 的账户信息
       reject: 拒绝
       rejected_msg: 已拒绝 %{username} 的注册申请
       remote_suspension_irreversible: 此账户的数据已被不可逆转地删除。
       remote_suspension_reversible_hint_html: 账号已在他们的服务器上封禁,数据将在 %{date} 完全删除。 在此之前,远程服务器仍可恢复此账号,并且没有任何不良影响。 如果你想立即移除该账号的所有数据,可以在下面进行。
       remove_avatar: 删除头像
-      remove_header: 删除横幅图片
+      remove_header: 移除封面图
       removed_avatar_msg: 成功删除 %{username} 的头像
-      removed_header_msg: 成功删除了 %{username} 的横幅图片
+      removed_header_msg: 成功移除 %{username} 的封面图
       resend_confirmation:
         already_confirmed: 该用户已被确认
         send: 重新发送确认链接
@@ -187,7 +187,7 @@ zh-CN:
         create_relay: 创建中继站
         create_unavailable_domain: 创建不可用域名
         create_user_role: 创建角色
-        demote_user: 给用户降职
+        demote_user: 取消管理员
         destroy_announcement: 删除公告
         destroy_canonical_email_block: 解除邮箱封禁
         destroy_custom_emoji: 删除自定义表情符号
@@ -210,7 +210,7 @@ zh-CN:
         enable_sign_in_token_auth_user: 为用户启用邮件令牌身份验证
         enable_user: 启用用户
         memorialize_account: 设为追悼账户
-        promote_user: 给用户升任
+        promote_user: 指派管理员
         reject_appeal: 驳回申诉
         reject_user: 拒绝用户
         remove_avatar_user: 移除头像
@@ -251,7 +251,7 @@ zh-CN:
         create_relay_html: "%{name} 添加了中继站 %{target}"
         create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
         create_user_role_html: "%{name} 创建了 %{target} 角色"
-        demote_user_html: "%{name} 对用户 %{target} 进行了降任操作"
+        demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限"
         destroy_announcement_html: "%{name} 删除了公告 %{target}"
         destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址"
         destroy_custom_emoji_html: "%{name} 删除了自定义表情 %{target}"
@@ -274,7 +274,7 @@ zh-CN:
         enable_sign_in_token_auth_user_html: "%{name} 为 %{target} 启用了邮件令牌身份验证"
         enable_user_html: "%{name} 将用户 %{target} 设置为允许登录"
         memorialize_account_html: "%{name} 将 %{target} 设置为追悼账户"
-        promote_user_html: "%{name} 对用户 %{target} 进行了升任操作"
+        promote_user_html: "%{name} 将用户 %{target} 设为管理员"
         reject_appeal_html: "%{name} 驳回了 %{target} 对审核结果的申诉"
         reject_user_html: "%{name} 拒绝了用户 %{target} 的注册"
         remove_avatar_user_html: "%{name} 删除了 %{target} 的头像"
@@ -299,8 +299,8 @@ zh-CN:
         update_user_role_html: "%{name} 更改了 %{target} 角色"
       deleted_account: 账号已注销
       empty: 没有找到日志
-      filter_by_action: 根据行为过滤
-      filter_by_user: 根据用户过滤
+      filter_by_action: 根据操作筛选
+      filter_by_user: 根据用户筛选
       title: 审核日志
       unavailable_instance: "(域名不可用)"
     announcements:
@@ -547,7 +547,7 @@ zh-CN:
       filter:
         all: 全部
         available: 可用
-        expired: 已失效
+        expired: 已过期
         title: 筛选
       title: 邀请用户
     ip_blocks:
@@ -637,7 +637,7 @@ zh-CN:
       notes_description_html: 查看备注或向其他监察员留言
       processed_msg: '举报 #%{id} 处理成功'
       quick_actions_description_html: 快捷选择操作或向下滚动以查看举报内容:
-      remote_user_placeholder: 来自 %{instance} 的远程实例用户
+      remote_user_placeholder: 来自 %{instance} 的外站用户
       reopen: 重开举报
       report: '举报 #%{id}'
       reported_account: 举报用户
@@ -673,7 +673,7 @@ zh-CN:
       unknown_action_msg: 未知操作:%{action}
       unresolved: 未处理
       updated_at: 更新时间
-      view_profile: 查看资料
+      view_profile: 查看账户
     roles:
       add_new: 添加角色
       assigned_users:
@@ -786,7 +786,7 @@ zh-CN:
           open: 开放注册
         warning_hint: 我们建议使用“注册必须经过批准”,除非你确信你的管理团队能够及时处理骚扰和恶意注册。
       security:
-        authorized_fetch: 需要跨站认证
+        authorized_fetch: 与外站联合时要求身份验证
         authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账户。
         authorized_fetch_overridden_hint: 由于此设置被环境变量覆盖,目前无法更改。
         federation_authentication: 联合时强制要求身份验证
@@ -819,7 +819,7 @@ zh-CN:
       deleted: 已删除
       favourites: 喜欢
       history: 版本历史记录
-      in_reply_to: 回复给
+      in_reply_to: 回复
       language: 语言
       media:
         title: 媒体文件
@@ -829,7 +829,7 @@ zh-CN:
       open: 展开嘟文
       original_status: 原始嘟文
       reblogs: 转发
-      replied_to_html: 回复给 %{acct_link}
+      replied_to_html: 回复 %{acct_link}
       status_changed: 嘟文已编辑
       status_title: "@%{name} 的嘟文"
       title: 该账号的嘟文 - @%{name}
@@ -1055,7 +1055,7 @@ zh-CN:
     remove: 取消关联别名
   appearance:
     advanced_web_interface: 高级 Web 界面
-    advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许你配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间线、任意数量的列表和话题标签。
+    advanced_web_interface_hint: 在高级网页界面支持自定义多栏显示,你可以利用整个屏幕的宽度,同时查看首页、通知、跨站时间线及任意数量的列表和话题。
     animations_and_accessibility: 动画与可访问性
     confirmation_dialogs: 确认对话框
     discovery: 发现
@@ -1070,7 +1070,7 @@ zh-CN:
     settings: 更改邮件偏好: %{link}
     unsubscribe: 取消订阅
     view: 点此链接查看详情:
-    view_profile: 查看个人资料页
+    view_profile: 查看账户页
     view_status: 查看嘟文
   applications:
     created: 应用创建成功
@@ -1091,16 +1091,16 @@ zh-CN:
       awaiting_review_title: 你的注册申请正在审核中
       clicking_this_link: 点击此链接
       login_link: 登录
-      proceed_to_login_html: 现在你可以继续前往 %{login_link} 。
-      redirect_to_app_html: 你应该已被重定向到 <strong>%{app_name}</strong> 应用程序。如果没有,请尝试 %{clicking_this_link} 或手动返回应用程序。
+      proceed_to_login_html: 你现在可以继续 %{login_link} 。
+      redirect_to_app_html: 你应该已经跳转到 <strong>%{app_name}</strong>。如果没有,请尝试 %{clicking_this_link} 或手动返回 App。
       registration_complete: 你在 %{domain} 上的注册现已完成!
       welcome_title: 欢迎你,%{name}!
-      wrong_email_hint: 如果该邮箱地址不正确,你可以在账户设置中进行更改。
+      wrong_email_hint: 如果这个邮箱地址不正确,你可以在账户设置中更改。
     delete_account: 删除账户
-    delete_account_html: 如果你想删除你的账户,请<a href="%{path}">点击这里继续</a>。你需要确认你的操作。
+    delete_account_html: 如果你想删除你的账户,请<a href="%{path}">点击此处继续</a>。你需要确认你的操作。
     description:
       prefix_invited_by_user: "@%{name} 邀请你加入这个Mastodon服务器!"
-      prefix_sign_up: 现在就注册 Mastodon!
+      prefix_sign_up: 现在就注册 Mastodon 吧!
       suffix: 注册一个账号,你就可以关注他人、发布嘟文、并和其它任何 Mastodon 服务器上的用户交流,而且还有其它更多功能!
     didnt_get_confirmation: 没有收到确认链接?
     dont_have_your_security_key: 没有你的安全密钥?
@@ -1117,7 +1117,7 @@ zh-CN:
     privacy_policy_agreement_html: 我已阅读并同意 <a href="%{privacy_policy_path}" target="_blank">隐私政策</a>
     progress:
       confirm: 确认邮箱
-      details: 你的详情
+      details: 你的详细信息
       review: 我们的审核
       rules: 接受规则
     providers:
@@ -1130,15 +1130,15 @@ zh-CN:
     rules:
       accept: 接受
       back: 返回
-      invited_by: 你可以加入%{domain},这是由于你收到了他人的邀请,邀请来自:
-      preamble: 这些由 %{domain} 监察员设置和执行。
+      invited_by: 欢迎加入%{domain},你是通过以下用户的邀请加入的:
+      preamble: 以下规则由 %{domain} 的管理员设定并执行。
       preamble_invited: 在你继续之前,请考虑 %{domain} 的管理员设定的基本规则。
       title: 一些基本规则。
-      title_invited: 你已经被邀请。
+      title_invited: 通过邀请加入
     security: 账户安全
     set_new_password: 设置新密码
     setup:
-      email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求再发送一次。如果你的邮箱地址不正确,你可以更正它。
+      email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求重新发送邮件。如果你填写的邮箱地址有误,请更正。
       email_settings_hint_html: 请点击我们发送给 %{email} 地址中的确认链接。我在这儿等着你。
       link_not_received: 没有收到链接?
       new_confirmation_instructions_sent: 你将在几分钟内收到一封带有确认链接的新邮件!
@@ -1157,7 +1157,7 @@ zh-CN:
       pending: 站务人员正在审核你的申请。这需要花点时间。在申请被批准后,你将收到一封邮件。
       redirecting_to: 你的账户无效,因为它已被设置为跳转到 %{acct}
       self_destruct: 由于 %{domain} 即将关闭,你只能获得对你本人账号的有限访问权限。
-      view_strikes: 查看针对你账号的记录
+      view_strikes: 查看针对你账号的处罚记录
     too_fast: 表单提交过快,请重试。
     use_security_key: 使用安全密钥
   author_attribution:
@@ -1217,7 +1217,7 @@ zh-CN:
       appeal: 申诉
       appeal_approved: 此次处罚已申诉成功并不再生效
       appeal_rejected: 此次申诉已被驳回
-      appeal_submitted_at: 已提出申诉
+      appeal_submitted_at: 申诉已提交
       appealed_msg: 你的申诉已经提交。如果申诉通过,你将收到通知。
       appeals:
         submit: 提交申诉
@@ -1239,7 +1239,7 @@ zh-CN:
         silence: 账号限制
         suspend: 账号封禁
       your_appeal_approved: 你的申诉已被批准
-      your_appeal_pending: 你已提交申诉
+      your_appeal_pending: 你已经提交了一次申诉
       your_appeal_rejected: 你的申诉已被驳回
   edit_profile:
     basic_information: 基本信息
@@ -1247,18 +1247,18 @@ zh-CN:
     other: 其他
   errors:
     '400': 你提交的请求无效或格式不正确。
-    '403': 你没有访问这个页面的权限。
+    '403': 你没有访问此页面的权限。
     '404': 无法找到你所要访问的页面。
-    '406': 页面无法处理请求。
-    '410': 你所要访问的页面此处已不存在。
+    '406': 无法以要求的格式显示此页面。
+    '410': 你要查看的页面已不存在。
     '422':
-      content: 无法确认登录信息。你是不是屏蔽了 Cookie?
-      title: 无法确认登录信息
-    '429': 请求被限制
+      content: 安全验证未通过。请检查是否禁用了 Cookie。
+      title: 安全验证未通过
+    '429': 请求过于频繁
     '500':
-      content: 抱歉,我们的后台出错了。
-      title: 这个页面有问题
-    '503': 服务暂时不可用,无法请求该页面。
+      content: 抱歉,服务器出现了一些故障。
+      title: 页面无法正确加载
+    '503': 服务器出现临时故障,无法加载页面。
     noscript_html: 使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 <a href="%{apps_path}">Mastodon 应用</a>。
   existing_username_validator:
     not_found: 在本站找不到此用户
@@ -1272,7 +1272,7 @@ zh-CN:
       request: 请求你的存档
       size: 大小
     blocks: 屏蔽的用户
-    bookmarks: 书签
+    bookmarks: 收藏
     csv: CSV
     domain_blocks: 域名屏蔽
     lists: 列表
@@ -1285,8 +1285,8 @@ zh-CN:
     hint_html: "<strong>什么是精选话题标签?</strong> 它们被显示在你的公开个人资料中的突出位置,人们可以在这些标签下浏览你的公共嘟文。 它们是跟踪创作或长期项目的进度的重要工具。"
   filters:
     contexts:
-      account: 个人资料
-      home: 主页时间线
+      account: 账户
+      home: 主页与列表
       notifications: 通知
       public: 公共时间线
       thread: 对话
@@ -1294,33 +1294,33 @@ zh-CN:
       add_keyword: 添加关键词
       keywords: 关键词
       statuses: 个别嘟文
-      statuses_hint_html: 无论是否匹配下列关键词,此过滤器适用于选用个别嘟文。<a href="%{path}">从过滤器中审核嘟文或移除嘟文</a>。
-      title: 编辑过滤器
+      statuses_hint_html: 无论是否匹配下列关键词,此过滤规则均适用于选中的个别嘟文。<a href="%{path}">在过滤规则页面检查或移除这些嘟文</a>
+      title: 编辑过滤规则
     errors:
-      deprecated_api_multiple_keywords: 这些参数不能从此应用程序更改,因为它们应用于一个以上的过滤关键字。 使用较新的应用程序或网页界面。
-      invalid_context: 提供的过滤器环境没有或无效
+      deprecated_api_multiple_keywords: 不能在此应用中更改这些参数,因为它们应用于不止一个过滤关键词。请使用较新的应用程序或网页界面。
+      invalid_context: 过滤规则生效场景为空或无效
     index:
-      contexts: 在 %{contexts} 中的过滤器
+      contexts: 过滤 %{contexts}
       delete: 删除
-      empty: 你没有过滤器。
-      expires_in: 在 %{distance} 后过期
-      expires_on: "%{date} 后到期"
+      empty: 你没有过滤规则。
+      expires_in: "%{distance} 后到期"
+      expires_on: 在 %{date} 到期
       keywords:
-        other: "%{count} 关键词"
+        other: "%{count} 个关键词"
       statuses:
         other: "%{count} 条嘟文"
       statuses_long:
-        other: "%{count} 条个别嘟文已隐藏"
-      title: 过滤器
+        other: 已隐藏 %{count} 条个别嘟文
+      title: 过滤规则
     new:
-      save: 保存新过滤器
-      title: 添加新的过滤器
+      save: 保存过滤规则
+      title: 新建过滤规则
     statuses:
-      back_to_filter: 返回过滤器
+      back_to_filter: 返回过滤规则
       batch:
-        remove: 从过滤器中移除
+        remove: 从过滤规则中移除
       index:
-        hint: 无论其他条件如何,此过滤器适用于选用个别嘟文。你可以从网页界面中向此过滤器加入更多嘟文。
+        hint: 此过滤规则适用于选中的个别嘟文,不受其它条件限制。你可以通过网页界面向此过滤规则添加更多嘟文。
         title: 过滤的嘟文
   generic:
     all: 全部
@@ -1361,7 +1361,7 @@ zh-CN:
       blocking_html:
         other: 你即将使用来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 个</strong>账户<strong>替换你的屏蔽列表</strong>。
       bookmarks_html:
-        other: 你即将使用来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 条</strong>嘟文<strong>替换你的书签</strong>。
+        other: 你即将使用来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 条</strong>嘟文<strong>替换你的收藏列表</strong>。
       domain_blocking_html:
         other: 你即将使用来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 个</strong>域名<strong>替换你的域名屏蔽列表</strong>。
       following_html:
@@ -1374,7 +1374,7 @@ zh-CN:
       blocking_html:
         other: 你即将<strong>屏蔽</strong>来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 个账号</strong>。
       bookmarks_html:
-        other: 你即将把来自<strong> %{filename} </strong>的<strong> %{count} 篇嘟文</strong>添加到你的<strong>书签</strong>中。
+        other: 你即将把来自<strong> %{filename} </strong>的<strong> %{count} 篇嘟文</strong>添加到你的<strong>收藏夹</strong>中。
       domain_blocking_html:
         other: 你即将<strong>屏蔽</strong>来自 <strong>%{filename}</strong> 的最多 <strong>%{count} 个域名</strong>。
       following_html:
@@ -1395,18 +1395,18 @@ zh-CN:
     time_started: 开始于
     titles:
       blocking: 正在导入被屏蔽的账户
-      bookmarks: 正在导入书签
+      bookmarks: 正在导入收藏
       domain_blocking: 正在导入被屏蔽的域名
       following: 正在导入关注的账户
       lists: 导入列表
       muting: 正在导入隐藏的账户
     type: 导入类型
     type_groups:
-      constructive: 关注和书签
+      constructive: 关注与收藏
       destructive: 屏蔽与隐藏
     types:
       blocking: 屏蔽列表
-      bookmarks: 书签
+      bookmarks: 收藏
       domain_blocking: 域名屏蔽列表
       following: 关注列表
       lists: 列表
@@ -1752,29 +1752,29 @@ zh-CN:
       private: 仅关注者
       private_long: 只有关注你的用户能看到
       public: 公开
-      public_long: 所有人可见,并会出现在公共时间线上
+      public_long: 所有人可见
       unlisted: 悄悄公开
       unlisted_long: 对所有人可见,但不出现在公共时间线上
   statuses_cleanup:
     enabled: 自动删除旧嘟文
-    enabled_hint: 达到指定过期时间后自动删除你的嘟文,除非满足下列条件之一
+    enabled_hint: 自动删除你发布的超过指定期限的嘟文,除非满足下列条件之一
     exceptions: 例外
-    explanation: 删除嘟文是一个消耗系统资源的耗时操作,所以这个操作会在服务器空闲时完成。因此,你的嘟文可能会在达到过期阈值之后一段时间才会被删除。
-    ignore_favs: 取消喜欢
-    ignore_reblogs: 忽略转嘟
+    explanation: 删除嘟文会占用大量服务器资源,所以这个操作将在服务器空闲时完成。因此,你的嘟文可能会在达到删除期限之后一段时间才会被删除。
+    ignore_favs: 喜欢数阈值
+    ignore_reblogs: 转嘟数阈值
     interaction_exceptions: 基于互动的例外
-    interaction_exceptions_explanation: 请注意,如果嘟文超出转嘟和喜欢的阈值之后,又降到阈值以下,则可能不会被删除。
+    interaction_exceptions_explanation: 请注意,如果嘟文的转嘟数和喜欢数超过保留阈值之后,又降到阈值以下,则可能不会被删除。
     keep_direct: 保留私信
-    keep_direct_hint: 不会删除你的任何私信
+    keep_direct_hint: 不删除你的任何私信
     keep_media: 保留带媒体附件的嘟文
-    keep_media_hint: 不会删除任何包含媒体附件的嘟文
+    keep_media_hint: 不删除任何包含媒体附件的嘟文
     keep_pinned: 保留置顶嘟文
-    keep_pinned_hint: 不会删除你的任何置顶嘟文
+    keep_pinned_hint: 不删除你的任何置顶嘟文
     keep_polls: 保留投票
-    keep_polls_hint: 不会删除你的任何投票
-    keep_self_bookmark: 保存被你加入书签的嘟文
-    keep_self_bookmark_hint: 如果你已将自己的嘟文添加书签,就不会删除这些嘟文
-    keep_self_fav: 保留你点赞的嘟文
+    keep_polls_hint: 不删除你的任何投票
+    keep_self_bookmark: 保存你收藏的的嘟文
+    keep_self_bookmark_hint: 不删除你收藏的嘟文
+    keep_self_fav: 保留你喜欢的嘟文
     keep_self_fav_hint: 如果你喜欢了自己的嘟文,则不会删除这些嘟文
     min_age:
       '1209600': 2周
@@ -1786,8 +1786,8 @@ zh-CN:
       '63113904': 两年
       '7889238': 3个月
     min_age_label: 过期阈值
-    min_favs: 保留如下嘟文:点赞数超过
-    min_favs_hint: 点赞数超过该阈值的的嘟文都不会被删除。如果留空,则无论嘟文获得多少点赞,都将被删除。
+    min_favs: 保留如下嘟文:喜欢数超过
+    min_favs_hint: 获得喜欢数超过该阈值的的嘟文都不会被删除。如果留空,则无论嘟文获得多少点赞,都将被删除。
     min_reblogs: 保留如下嘟文:转嘟数超过
     min_reblogs_hint: 转嘟数超过该阈值的的嘟文不会被删除。如果留空,则无论嘟文获得多少转嘟,都将被删除。
   stream_entries:
@@ -1899,18 +1899,18 @@ zh-CN:
       edit_profile_step: 完善个人资料,提升你的互动体验。
       edit_profile_title: 个性化你的个人资料
       explanation: 下面是几个小贴士,希望它们能帮到你
-      feature_action: 了解更多
+      feature_action: 详细了解
       feature_audience: Mastodon 为你提供了无需中间商即可管理受众的独特可能。Mastodon 可被部署在你自己的基础设施上,允许你关注其它任何 Mastodon 在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。
       feature_audience_title: 自由吸引你的受众
       feature_control: 你最清楚你想在你自己的主页中看到什么动态。没有算法或广告浪费你的时间。你可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让你的互联网的角落更合自己的心意。
       feature_control_title: 掌控自己的时间线
       feature_creativity: Mastodon 支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。
-      feature_creativity_title: 无与伦比的创造力
+      feature_creativity_title: 尽情发挥创造力
       feature_moderation: Mastodon 将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。
       feature_moderation_title: 管理,本应如此
       follow_action: 关注
       follow_step: 关注有趣的人,这就是 Mastodon 的意义所在。
-      follow_title: 个性化你的首页动态
+      follow_title: 个性化你的主页动态
       follows_subtitle: 关注知名账户
       follows_title: 推荐关注
       follows_view_more: 查看更多可关注的人
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 701ea0ea5..d14bfee1b 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -1904,7 +1904,7 @@ zh-TW:
       feature_action: 了解更多
       feature_audience: Mastodon 為您打開了一扇獨特的門,使您不受平台干擾,自由地管理您的受眾。只需將 Mastodon 部署於您自己的基礎設施上,您便能與線上任何 Mastodon 伺服器互動,而且控制權只在您手中。
       feature_audience_title: 自信地建立您的受眾
-      feature_control: 您最清楚自己想於首頁動態看到什麼內容,別讓演算法與廣告浪費您寶貴的時間。自同一帳號跟隨任何 Mastodon 伺服器上的任何一個人,依時間順序接收他們的嘟文,建立屬於自己的網路小角落。
+      feature_control: 您最清楚自己想於首頁時間軸看到什麼內容,別讓演算法與廣告浪費您寶貴的時間。自同一帳號跟隨任何 Mastodon 伺服器上的任何一個人,依時間順序接收他們的嘟文,建立屬於自己的網路小角落。
       feature_control_title: 掌控自己的時間軸
       feature_creativity: Mastodon 支援音訊、影片及圖片嘟文、無障礙說明文字、投票、內容警告、動畫大頭貼、自訂 emoji 表情符號、縮圖裁剪控制等等,協助您表達自我。無論是發佈藝術作品、音樂,或是 podcast,Mastodon 將隨時陪伴著您。
       feature_creativity_title: 無與倫比的創意
diff --git a/lib/mastodon/cli/feeds.rb b/lib/mastodon/cli/feeds.rb
index 39affd5e8..3879751d0 100644
--- a/lib/mastodon/cli/feeds.rb
+++ b/lib/mastodon/cli/feeds.rb
@@ -5,6 +5,7 @@ require_relative 'base'
 module Mastodon::CLI
   class Feeds < Base
     include Redisable
+    include DatabaseHelper
 
     option :all, type: :boolean, default: false
     option :concurrency, type: :numeric, default: 5, aliases: [:c]
@@ -44,6 +45,38 @@ module Mastodon::CLI
       say('OK', :green)
     end
 
+    desc 'vacuum', 'Remove home feeds of inactive users from Redis'
+    long_desc <<-LONG_DESC
+      Running this task should not be needed in most cases, as Mastodon will
+      automatically clean up feeds from inactive accounts every day.
+
+      However, this task is more aggressive in order to clean up feeds that
+      may have been missed because of bugs or database mishaps.
+    LONG_DESC
+    def vacuum
+      with_read_replica do
+        say('Deleting orphaned home feeds…')
+        redis.scan_each(match: 'feed:home:*').each_slice(1000) do |keys|
+          ids = keys.map { |key| key.split(':')[2] }.compact_blank
+
+          known_ids = User.confirmed.signed_in_recently.where(account_id: ids).pluck(:account_id)
+
+          keys_to_delete = keys.filter { |key| known_ids.exclude?(key.split(':')[2]&.to_i) }
+          redis.del(keys_to_delete)
+        end
+
+        say('Deleting orphaned list feeds…')
+        redis.scan_each(match: 'feed:list:*').each_slice(1000) do |keys|
+          ids = keys.map { |key| key.split(':')[2] }.compact_blank
+
+          known_ids = List.where(account_id: User.confirmed.signed_in_recently.select(:account_id)).where(id: ids).pluck(:id)
+
+          keys_to_delete = keys.filter { |key| known_ids.exclude?(key.split(':')[2]&.to_i) }
+          redis.del(keys_to_delete)
+        end
+      end
+    end
+
     private
 
     def active_user_accounts
diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb
index 0b84047a1..532fbc328 100644
--- a/lib/mastodon/cli/maintenance.rb
+++ b/lib/mastodon/cli/maintenance.rb
@@ -43,6 +43,7 @@ module Mastodon::CLI
     class BulkImport < ApplicationRecord; end
     class SoftwareUpdate < ApplicationRecord; end
     class SeveredRelationship < ApplicationRecord; end
+    class TagFollow < ApplicationRecord; end
 
     class DomainBlock < ApplicationRecord
       enum :severity, { silence: 0, suspend: 1, noop: 2 }
@@ -102,6 +103,7 @@ module Mastodon::CLI
         owned_classes << AccountIdentityProof if db_table_exists?(:account_identity_proofs)
         owned_classes << Appeal if db_table_exists?(:appeals)
         owned_classes << BulkImport if db_table_exists?(:bulk_imports)
+        owned_classes << TagFollow if db_table_exists?(:tag_follows)
 
         owned_classes.each do |klass|
           klass.where(account_id: other_account.id).find_each do |record|
diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb
index 7387807e4..c264548eb 100644
--- a/lib/sanitize_ext/sanitize_config.rb
+++ b/lib/sanitize_ext/sanitize_config.rb
@@ -64,6 +64,44 @@ class Sanitize
       current_node.wrap('<p></p>')
     end
 
+    # We assume that incomming <math> nodes are of the form
+    # <math><semantics>...<annotation>...</annotation></semantics></math>
+    # according to the [FEP]. We try to grab the most relevant plain-text
+    # annotation from the semantics node, and use it to display a representation
+    # of the mathematics.
+    #
+    # FEP: https://codeberg.org/fediverse/fep/src/branch/main/fep/dc88/fep-dc88.md
+    MATH_TRANSFORMER = lambda do |env|
+      math = env[:node]
+      return if env[:is_allowlisted]
+      return unless math.element? && env[:node_name] == 'math'
+
+      semantics = math.element_children[0]
+      return if semantics.nil? || semantics.name != 'semantics'
+
+      # next, we find the plain-text description
+      is_annotation_with_encoding = lambda do |encoding, node|
+        return false unless node.name == 'annotation'
+
+        node.attributes['encoding'].value == encoding
+      end
+
+      annotation = semantics.children.find(&is_annotation_with_encoding.curry['application/x-tex'])
+      if annotation
+        text = if math.attributes['display']&.value == 'block'
+                 "$$#{annotation.text}$$"
+               else
+                 "$#{annotation.text}$"
+               end
+        math.replace(math.document.create_text_node(text))
+        return
+      end
+      # Don't bother surrounding 'text/plain' annotations with dollar signs,
+      # since it isn't LaTeX
+      annotation = semantics.children.find(&is_annotation_with_encoding.curry['text/plain'])
+      math.replace(math.document.create_text_node(annotation.text)) unless annotation.nil?
+    end
+
     MASTODON_STRICT = freeze_config(
       elements: %w(p br span a del s pre blockquote code b strong u i em ul ol li ruby rt rp),
 
@@ -86,6 +124,7 @@ class Sanitize
       transformers: [
         ALLOWED_CLASS_TRANSFORMER,
         TRANSLATE_TRANSFORMER,
+        MATH_TRANSFORMER,
         UNSUPPORTED_ELEMENTS_TRANSFORMER,
         UNSUPPORTED_HREF_TRANSFORMER,
       ]
diff --git a/lint-staged.config.js b/lint-staged.config.js
index 6740def51..1ee6962c2 100644
--- a/lint-staged.config.js
+++ b/lint-staged.config.js
@@ -3,7 +3,7 @@ const config = {
   'Capfile|Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a',
   '*.{js,jsx,ts,tsx}': 'eslint --fix',
   '*.{css,scss}': 'stylelint --fix',
-  '*.haml': 'bundle exec haml-lint -a',
+  '*.haml': 'bin/haml-lint -a',
   '**/*.ts?(x)': () => 'tsc -p tsconfig.json --noEmit',
 };
 
diff --git a/package.json b/package.json
index 4eb95d438..3b828ce3f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@mastodon/mastodon",
   "license": "AGPL-3.0-or-later",
-  "packageManager": "yarn@4.5.2",
+  "packageManager": "yarn@4.5.3",
   "engines": {
     "node": ">=18"
   },
@@ -43,7 +43,7 @@
     "@babel/preset-typescript": "^7.21.5",
     "@babel/runtime": "^7.22.3",
     "@dnd-kit/core": "^6.1.0",
-    "@dnd-kit/sortable": "^8.0.0",
+    "@dnd-kit/sortable": "^9.0.0",
     "@dnd-kit/utilities": "^3.2.2",
     "@formatjs/intl-pluralrules": "^5.2.2",
     "@gamestdio/websocket": "^0.3.2",
diff --git a/public/embed.js b/public/embed.js
index 53372a389..bc1fac386 100644
--- a/public/embed.js
+++ b/public/embed.js
@@ -1,8 +1,5 @@
 // @ts-check
-
-const allowedPrefixes = (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.dataset.allowedPrefixes) ? document.currentScript.dataset.allowedPrefixes.split(' ') : [];
-
-(function () {
+(function (allowedPrefixes) {
   'use strict';
 
   /**
@@ -127,4 +124,4 @@ const allowedPrefixes = (document.currentScript && document.currentScript.tagNam
       container.appendChild(iframe);
     });
   });
-})();
+})((document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.dataset.allowedPrefixes) ? document.currentScript.dataset.allowedPrefixes.split(' ') : []);
diff --git a/public/robots.txt b/public/robots.txt
index 6672eeba1..cccfa58f2 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -6,3 +6,4 @@ Disallow: /
 User-agent: *
 Disallow: /media_proxy/
 Disallow: /interact/
+Disallow: /api/v1/instance/domain_blocks
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 557d08e85..942cc5103 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -5,12 +5,20 @@ require 'rails_helper'
 RSpec.describe ApplicationHelper do
   describe 'body_classes' do
     context 'with a body class string from a controller' do
-      before { helper.extend controller_helpers }
+      before do
+        user = Fabricate :user
+        user.settings['web.use_system_font'] = true
+        user.settings['web.reduce_motion'] = true
+        user.save
 
-      it 'uses the controller body classes in the result' do
+        helper.extend controller_helpers
+      end
+
+      it 'uses the current theme and user settings classes in the result' do
         expect(helper.body_classes)
-          .to match(/modal-layout compose-standalone/)
-          .and match(/theme-default/)
+          .to match(/theme-default/)
+          .and match(/system-font/)
+          .and match(/reduce-motion/)
       end
 
       it 'includes values set via content_for' do
@@ -24,10 +32,8 @@ RSpec.describe ApplicationHelper do
 
       def controller_helpers
         Module.new do
-          def body_class_string = 'modal-layout compose-standalone'
-
           def current_account
-            @current_account ||= Fabricate(:account)
+            @current_account ||= Fabricate(:account, user: User.last)
           end
 
           def current_theme = 'default'
diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb
index afb007af4..1d3123d34 100644
--- a/spec/lib/feed_manager_spec.rb
+++ b/spec/lib/feed_manager_spec.rb
@@ -164,6 +164,7 @@ RSpec.describe FeedManager do
         allow(List).to receive(:where).and_return(list)
         status = Fabricate(:status, text: 'I post a lot', account: bob)
         expect(subject.filter?(:home, status, alice)).to be true
+        expect(subject.filter(:home, status, alice)).to be :skip_home
       end
 
       it 'returns true for reblog from followee on exclusive list' do
@@ -174,6 +175,7 @@ RSpec.describe FeedManager do
         status = Fabricate(:status, text: 'I post a lot', account: bob)
         reblog = Fabricate(:status, reblog: status, account: jeff)
         expect(subject.filter?(:home, reblog, alice)).to be true
+        expect(subject.filter(:home, reblog, alice)).to be :skip_home
       end
 
       it 'returns false for post from followee on non-exclusive list' do
diff --git a/spec/lib/sanitize/config_spec.rb b/spec/lib/sanitize/config_spec.rb
index 17b78a95f..b1cab8582 100644
--- a/spec/lib/sanitize/config_spec.rb
+++ b/spec/lib/sanitize/config_spec.rb
@@ -57,5 +57,25 @@ RSpec.describe Sanitize::Config do
     it 'keeps a with supported scheme and no host' do
       expect(Sanitize.fragment('<a href="dweb:/a/foo">Test</a>', subject)).to eq '<a href="dweb:/a/foo" rel="nofollow noopener noreferrer" target="_blank">Test</a>'
     end
+
+    it 'sanitizes math to LaTeX' do
+      mathml = '<math><semantics><mrow><msup><mi>x</mi><mi>n</mi></msup><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x^n+y</annotation></semantics></math>'
+      expect(Sanitize.fragment(mathml, subject)).to eq '$x^n+y$'
+    end
+
+    it 'sanitizes math blocks to LaTeX' do
+      mathml = '<math display="block"><semantics><mrow><msup><mi>x</mi><mi>n</mi></msup><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x^n+y</annotation></semantics></math>'
+      expect(Sanitize.fragment(mathml, subject)).to eq '$$x^n+y$$'
+    end
+
+    it 'math sanitizer falls back to plaintext' do
+      mathml = '<math><semantics><msqrt><mi>x</mi></msqrt><annotation encoding="text/plain">sqrt(x)</annotation></semantics></math>'
+      expect(Sanitize.fragment(mathml, subject)).to eq 'sqrt(x)'
+    end
+
+    it 'prefers latex' do
+      mathml = '<math><semantics><msqrt><mi>x</mi></msqrt><annotation encoding="text/plain">sqrt(x)</annotation><annotation encoding="application/x-tex">\\sqrt x</annotation></semantics></math>'
+      expect(Sanitize.fragment(mathml, subject)).to eq '$\sqrt x$'
+    end
   end
 end
diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb
index afbc42024..18b791a73 100644
--- a/spec/models/custom_filter_spec.rb
+++ b/spec/models/custom_filter_spec.rb
@@ -27,4 +27,28 @@ RSpec.describe CustomFilter do
       it { is_expected.to normalize(:context).from(['home', 'notifications', 'public    ', '']).to(%w(home notifications public)) }
     end
   end
+
+  describe '#expires_in' do
+    subject { custom_filter.expires_in }
+
+    let(:custom_filter) { Fabricate.build(:custom_filter, expires_at: expires_at) }
+
+    context 'when expires_at is nil' do
+      let(:expires_at) { nil }
+
+      it { is_expected.to be_nil }
+    end
+
+    context 'when expires is beyond the end of the range' do
+      let(:expires_at) { described_class::EXPIRATION_DURATIONS.last.from_now + 2.days }
+
+      it { is_expected.to be_nil }
+    end
+
+    context 'when expires is before the start of the range' do
+      let(:expires_at) { described_class::EXPIRATION_DURATIONS.first.from_now - 10.minutes }
+
+      it { is_expected.to eq(described_class::EXPIRATION_DURATIONS.first) }
+    end
+  end
 end
diff --git a/spec/models/preview_card_trend_spec.rb b/spec/models/preview_card_trend_spec.rb
index 6edd24b69..a5cb159af 100644
--- a/spec/models/preview_card_trend_spec.rb
+++ b/spec/models/preview_card_trend_spec.rb
@@ -3,20 +3,9 @@
 require 'rails_helper'
 
 RSpec.describe PreviewCardTrend do
+  include_examples 'RankedTrend'
+
   describe 'Associations' do
     it { is_expected.to belong_to(:preview_card).required }
   end
-
-  describe '.locales' do
-    before do
-      Fabricate :preview_card_trend, language: 'en'
-      Fabricate :preview_card_trend, language: 'en'
-      Fabricate :preview_card_trend, language: 'es'
-    end
-
-    it 'returns unique set of languages' do
-      expect(described_class.locales)
-        .to eq(['en', 'es'])
-    end
-  end
 end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index b4fbea437..e62b2e909 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -127,6 +127,28 @@ RSpec.describe Report do
     end
   end
 
+  describe '#unresolved_siblings?' do
+    subject { Fabricate :report }
+
+    context 'when the target account has other unresolved reports' do
+      before { Fabricate :report, action_taken_at: nil, target_account: subject.target_account }
+
+      it { is_expected.to be_unresolved_siblings }
+    end
+
+    context 'when the target account has a resolved report' do
+      before { Fabricate :report, action_taken_at: 3.days.ago, target_account: subject.target_account }
+
+      it { is_expected.to_not be_unresolved_siblings }
+    end
+
+    context 'when the target account has no other reports' do
+      before { described_class.where(target_account: subject.target_account).destroy_all }
+
+      it { is_expected.to_not be_unresolved_siblings }
+    end
+  end
+
   describe 'validations' do
     let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
 
diff --git a/spec/models/status_trend_spec.rb b/spec/models/status_trend_spec.rb
index 34522493c..50fb9b5f5 100644
--- a/spec/models/status_trend_spec.rb
+++ b/spec/models/status_trend_spec.rb
@@ -3,21 +3,10 @@
 require 'rails_helper'
 
 RSpec.describe StatusTrend do
+  include_examples 'RankedTrend'
+
   describe 'Associations' do
     it { is_expected.to belong_to(:account).required }
     it { is_expected.to belong_to(:status).required }
   end
-
-  describe '.locales' do
-    before do
-      Fabricate :status_trend, language: 'en'
-      Fabricate :status_trend, language: 'en'
-      Fabricate :status_trend, language: 'es'
-    end
-
-    it 'returns unique set of languages' do
-      expect(described_class.locales)
-        .to eq(['en', 'es'])
-    end
-  end
 end
diff --git a/spec/models/user_role_spec.rb b/spec/models/user_role_spec.rb
index 4ab66c326..4ad7e0421 100644
--- a/spec/models/user_role_spec.rb
+++ b/spec/models/user_role_spec.rb
@@ -3,9 +3,69 @@
 require 'rails_helper'
 
 RSpec.describe UserRole do
-  subject { described_class.create(name: 'Foo', position: 1) }
+  describe 'Validations' do
+    describe 'name' do
+      context 'when everyone' do
+        subject { described_class.everyone }
+
+        it { is_expected.to_not validate_presence_of(:name) }
+      end
+
+      context 'when not everyone' do
+        subject { Fabricate.build :user_role }
+
+        it { is_expected.to validate_presence_of(:name) }
+      end
+    end
+
+    describe 'color' do
+      it { is_expected.to allow_values('#112233', '#aabbcc', '').for(:color) }
+      it { is_expected.to_not allow_values('x', '112233445566', '#xxyyzz').for(:color) }
+    end
+
+    context 'when current_account is set' do
+      subject { Fabricate :user_role }
+
+      let(:account) { Fabricate :account }
+
+      before { subject.current_account = account }
+
+      it { is_expected.to_not allow_value(999_999).for(:position).with_message(:elevated) }
+
+      it { is_expected.to_not allow_value(999_999).for(:permissions).against(:permissions_as_keys).with_message(:elevated) }
+
+      context 'when current_account is changing their own role' do
+        let(:account) { Fabricate :account, user: Fabricate(:user, role: subject) }
+
+        it { is_expected.to_not allow_value(100).for(:permissions).against(:permissions_as_keys).with_message(:own_role) }
+        it { is_expected.to_not allow_value(100).for(:position).with_message(:own_role) }
+      end
+    end
+  end
+
+  describe 'Callback for position' do
+    context 'when everyone' do
+      subject { Fabricate.build :user_role, id: described_class::EVERYONE_ROLE_ID }
+
+      it 'sets the position to nobody position' do
+        expect { subject.valid? }
+          .to change(subject, :position).to(described_class::NOBODY_POSITION)
+      end
+    end
+
+    context 'when not everyone' do
+      subject { Fabricate.build :user_role }
+
+      it 'does not change the position' do
+        expect { subject.valid? }
+          .to_not change(subject, :position)
+      end
+    end
+  end
 
   describe '#can?' do
+    subject { Fabricate :user_role }
+
     context 'with a single flag' do
       it 'returns true if any of them are present' do
         subject.permissions = described_class::FLAGS[:manage_reports]
@@ -92,6 +152,8 @@ RSpec.describe UserRole do
   end
 
   describe '#computed_permissions' do
+    subject { Fabricate :user_role }
+
     context 'when the role is nobody' do
       subject { described_class.nobody }
 
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 9a5a070d2..f39b80c94 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -33,14 +33,12 @@ RSpec.describe User do
     end
   end
 
-  describe 'validations' do
+  describe 'Associations' do
     it { is_expected.to belong_to(:account).required }
+  end
 
-    it 'is invalid without a valid email' do
-      user = Fabricate.build(:user, email: 'john@')
-      user.valid?
-      expect(user).to model_have_error_on_field(:email)
-    end
+  describe 'Validations' do
+    it { is_expected.to_not allow_value('john@').for(:email) }
 
     it 'is valid with an invalid e-mail that has already been saved' do
       user = Fabricate.build(:user, email: 'invalid-email')
@@ -48,11 +46,7 @@ RSpec.describe User do
       expect(user.valid?).to be true
     end
 
-    it 'is valid with a localhost e-mail address' do
-      user = Fabricate.build(:user, email: 'admin@localhost')
-      user.valid?
-      expect(user.valid?).to be true
-    end
+    it { is_expected.to allow_value('admin@localhost').for(:email) }
   end
 
   describe 'Normalizations' do
@@ -183,6 +177,39 @@ RSpec.describe User do
     end
   end
 
+  describe '#update_sign_in!' do
+    context 'with an existing user' do
+      let!(:user) { Fabricate :user, last_sign_in_at: 10.days.ago, current_sign_in_at: 1.hour.ago, sign_in_count: 123 }
+
+      context 'with new sign in false' do
+        it 'updates timestamps but not counts' do
+          expect { user.update_sign_in!(new_sign_in: false) }
+            .to change(user, :last_sign_in_at)
+            .and change(user, :current_sign_in_at)
+            .and not_change(user, :sign_in_count)
+        end
+      end
+
+      context 'with new sign in true' do
+        it 'updates timestamps and counts' do
+          expect { user.update_sign_in!(new_sign_in: true) }
+            .to change(user, :last_sign_in_at)
+            .and change(user, :current_sign_in_at)
+            .and change(user, :sign_in_count).by(1)
+        end
+      end
+    end
+
+    context 'with a new user' do
+      let(:user) { Fabricate.build :user }
+
+      it 'does not persist the user' do
+        expect { user.update_sign_in! }
+          .to_not change(user, :persisted?).from(false)
+      end
+    end
+  end
+
   describe '#confirmed?' do
     it 'returns true when a confirmed_at is set' do
       user = Fabricate.build(:user, confirmed_at: Time.now.utc)
diff --git a/spec/models/webhook_spec.rb b/spec/models/webhook_spec.rb
index 03ef1dcc6..18a6047dd 100644
--- a/spec/models/webhook_spec.rb
+++ b/spec/models/webhook_spec.rb
@@ -6,20 +6,28 @@ RSpec.describe Webhook do
   let(:webhook) { Fabricate(:webhook) }
 
   describe 'Validations' do
+    subject { Fabricate.build :webhook }
+
     it { is_expected.to validate_presence_of(:events) }
 
-    it 'requires non-empty events value' do
-      record = described_class.new(events: [])
-      record.valid?
+    it { is_expected.to_not allow_values([], %w(account.invalid)).for(:events) }
 
-      expect(record).to model_have_error_on_field(:events)
-    end
+    it { is_expected.to_not allow_values('{{account }').for(:template) }
 
-    it 'requires valid events value from EVENTS' do
-      record = described_class.new(events: ['account.invalid'])
-      record.valid?
+    context 'when current_account is assigned' do
+      subject { Fabricate.build :webhook, current_account: account }
 
-      expect(record).to model_have_error_on_field(:events)
+      context 'with account that has permissions' do
+        let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
+
+        it { is_expected.to allow_values(%w(account.created)).for(:events) }
+      end
+
+      context 'with account lacking permissions' do
+        let(:account) { Fabricate :account }
+
+        it { is_expected.to_not allow_values(%w(account.created)).for(:events) }
+      end
     end
   end
 
@@ -29,6 +37,96 @@ RSpec.describe Webhook do
     end
   end
 
+  describe 'Callbacks' do
+    describe 'Generating a secret' do
+      context 'when secret exists already' do
+        subject { described_class.new(secret: 'secret') }
+
+        it 'does not override' do
+          expect { subject.valid? }
+            .to_not change(subject, :secret)
+        end
+      end
+
+      context 'when secret does not exist' do
+        subject { described_class.new(secret: nil) }
+
+        it 'does not override' do
+          expect { subject.valid? }
+            .to change(subject, :secret)
+        end
+      end
+    end
+  end
+
+  describe '.permission_for_event' do
+    subject { described_class.permission_for_event(event) }
+
+    context 'with a nil value' do
+      let(:event) { nil }
+
+      it { is_expected.to be_nil }
+    end
+
+    context 'with an account approved event' do
+      let(:event) { 'account.approved' }
+
+      it { is_expected.to eq(:manage_users) }
+    end
+
+    context 'with an account created event' do
+      let(:event) { 'account.created' }
+
+      it { is_expected.to eq(:manage_users) }
+    end
+
+    context 'with an account updated event' do
+      let(:event) { 'account.updated' }
+
+      it { is_expected.to eq(:manage_users) }
+    end
+
+    context 'with an report created event' do
+      let(:event) { 'report.created' }
+
+      it { is_expected.to eq(:manage_reports) }
+    end
+
+    context 'with an report updated event' do
+      let(:event) { 'report.updated' }
+
+      it { is_expected.to eq(:manage_reports) }
+    end
+
+    context 'with an status created event' do
+      let(:event) { 'status.created' }
+
+      it { is_expected.to eq(:view_devops) }
+    end
+
+    context 'with an status updated event' do
+      let(:event) { 'status.updated' }
+
+      it { is_expected.to eq(:view_devops) }
+    end
+  end
+
+  describe '#required_permissions' do
+    subject { described_class.new(events:).required_permissions }
+
+    context 'with empty events' do
+      let(:events) { [] }
+
+      it { is_expected.to eq([]) }
+    end
+
+    context 'with multiple event types' do
+      let(:events) { %w(account.created account.updated status.created) }
+
+      it { is_expected.to eq %i(manage_users view_devops) }
+    end
+  end
+
   describe '#rotate_secret!' do
     it 'changes the secret' do
       expect { webhook.rotate_secret! }
diff --git a/spec/requests/api/v1/lists/accounts_spec.rb b/spec/requests/api/v1/lists/accounts_spec.rb
index 3911d1f28..da815f063 100644
--- a/spec/requests/api/v1/lists/accounts_spec.rb
+++ b/spec/requests/api/v1/lists/accounts_spec.rb
@@ -95,7 +95,7 @@ RSpec.describe 'Accounts' do
       it 'does not add the account to the list', :aggregate_failures do
         subject
 
-        expect(response).to have_http_status(404)
+        expect(response).to have_http_status(422)
         expect(response.content_type)
           .to start_with('application/json')
         expect(list.accounts).to_not include(bob)
diff --git a/spec/requests/api/v1/push/subscriptions_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb
index 8ad672c95..15d469d7a 100644
--- a/spec/requests/api/v1/push/subscriptions_spec.rb
+++ b/spec/requests/api/v1/push/subscriptions_spec.rb
@@ -135,6 +135,23 @@ RSpec.describe 'API V1 Push Subscriptions' do
     end
   end
 
+  describe 'GET /api/v1/push/subscription' do
+    subject { get '/api/v1/push/subscription', headers: headers }
+
+    before { create_subscription_with_token }
+
+    it 'shows subscription details' do
+      subject
+
+      expect(response)
+        .to have_http_status(200)
+      expect(response.content_type)
+        .to start_with('application/json')
+      expect(response.parsed_body)
+        .to include(endpoint: endpoint)
+    end
+  end
+
   describe 'DELETE /api/v1/push/subscription' do
     subject { delete '/api/v1/push/subscription', headers: headers }
 
diff --git a/spec/support/examples/models/concerns/ranked_trend.rb b/spec/support/examples/models/concerns/ranked_trend.rb
new file mode 100644
index 000000000..827165cc8
--- /dev/null
+++ b/spec/support/examples/models/concerns/ranked_trend.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'RankedTrend' do
+  describe 'Scopes' do
+    describe '.by_rank' do
+      let!(:lower_rank) { Fabricate factory_name, rank: 5 }
+      let!(:higher_rank) { Fabricate factory_name, rank: 50 }
+
+      it 'returns records ordered by rank' do
+        expect(described_class.by_rank)
+          .to eq([higher_rank, lower_rank])
+      end
+    end
+
+    describe '.ranked_below' do
+      let!(:low_rank) { Fabricate factory_name, rank: 5 }
+      let!(:med_rank) { Fabricate factory_name, rank: 50 }
+      let!(:high_rank) { Fabricate factory_name, rank: 500 }
+
+      it 'returns records ordered by rank' do
+        expect(described_class.ranked_below(100))
+          .to include(low_rank)
+          .and include(med_rank)
+          .and not_include(high_rank)
+      end
+    end
+  end
+
+  describe '.locales' do
+    before do
+      Fabricate.times 2, factory_name, language: 'en'
+      Fabricate factory_name, language: 'es'
+    end
+
+    it 'returns unique set of languages' do
+      expect(described_class.locales)
+        .to eq(['en', 'es'])
+    end
+  end
+
+  describe '.recalculate_ordered_rank' do
+    let!(:low_score) { Fabricate factory_name, score: 5, rank: 123 }
+    let!(:high_score) { Fabricate factory_name, score: 10, rank: 456 }
+
+    it 'ranks records based on their score' do
+      expect { described_class.recalculate_ordered_rank }
+        .to change { low_score.reload.rank }.to(2)
+        .and change { high_score.reload.rank }.to(1)
+    end
+  end
+
+  def factory_name
+    described_class.name.underscore.to_sym
+  end
+end
diff --git a/spec/workers/feed_insert_worker_spec.rb b/spec/workers/feed_insert_worker_spec.rb
index 92ae304d0..9d1279bb8 100644
--- a/spec/workers/feed_insert_worker_spec.rb
+++ b/spec/workers/feed_insert_worker_spec.rb
@@ -32,7 +32,7 @@ RSpec.describe FeedInsertWorker do
 
     context 'when there are real records' do
       it 'skips the push when there is a filter' do
-        instance = instance_double(FeedManager, push_to_home: nil, filter?: true)
+        instance = instance_double(FeedManager, push_to_home: nil, filter?: true, filter: :filter)
         allow(FeedManager).to receive(:instance).and_return(instance)
         result = subject.perform(status.id, follower.id)
 
@@ -41,7 +41,7 @@ RSpec.describe FeedInsertWorker do
       end
 
       it 'pushes the status onto the home timeline without filter' do
-        instance = instance_double(FeedManager, push_to_home: nil, filter?: false)
+        instance = instance_double(FeedManager, push_to_home: nil, filter?: false, filter: nil)
         allow(FeedManager).to receive(:instance).and_return(instance)
         result = subject.perform(status.id, follower.id, :home)
 
@@ -50,7 +50,7 @@ RSpec.describe FeedInsertWorker do
       end
 
       it 'pushes the status onto the tags timeline without filter' do
-        instance = instance_double(FeedManager, push_to_home: nil, filter?: false)
+        instance = instance_double(FeedManager, push_to_home: nil, filter?: false, filter: nil)
         allow(FeedManager).to receive(:instance).and_return(instance)
         result = subject.perform(status.id, follower.id, :tags)
 
@@ -59,7 +59,7 @@ RSpec.describe FeedInsertWorker do
       end
 
       it 'pushes the status onto the list timeline without filter' do
-        instance = instance_double(FeedManager, push_to_list: nil, filter?: false)
+        instance = instance_double(FeedManager, push_to_list: nil, filter?: false, filter: nil)
         allow(FeedManager).to receive(:instance).and_return(instance)
         result = subject.perform(status.id, list.id, :list)
 
diff --git a/streaming/Dockerfile b/streaming/Dockerfile
index f94c04e7a..f56c1a42b 100644
--- a/streaming/Dockerfile
+++ b/streaming/Dockerfile
@@ -1,4 +1,4 @@
-# syntax=docker/dockerfile:1.10
+# syntax=docker/dockerfile:1.12
 
 # Please see https://docs.docker.com/engine/reference/builder for information about
 # the extended buildx capabilities used in this file.
diff --git a/streaming/package.json b/streaming/package.json
index 521544f42..e40d26237 100644
--- a/streaming/package.json
+++ b/streaming/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@mastodon/streaming",
   "license": "AGPL-3.0-or-later",
-  "packageManager": "yarn@4.5.2",
+  "packageManager": "yarn@4.5.3",
   "engines": {
     "node": ">=18"
   },
diff --git a/yarn.lock b/yarn.lock
index 20d00347b..ecb7421a9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1503,7 +1503,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.4":
+"@csstools/css-parser-algorithms@npm:^3.0.4":
   version: 3.0.4
   resolution: "@csstools/css-parser-algorithms@npm:3.0.4"
   peerDependencies:
@@ -1512,23 +1512,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.3":
+"@csstools/css-tokenizer@npm:^3.0.3":
   version: 3.0.3
   resolution: "@csstools/css-tokenizer@npm:3.0.3"
   checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5
   languageName: node
   linkType: hard
 
-"@csstools/media-query-list-parser@npm:^3.0.1":
-  version: 3.0.1
-  resolution: "@csstools/media-query-list-parser@npm:3.0.1"
-  peerDependencies:
-    "@csstools/css-parser-algorithms": ^3.0.1
-    "@csstools/css-tokenizer": ^3.0.1
-  checksum: 10c0/fca1935cabf9fb94128da87f72c34aa2cfce8eb0beba4c78d685c7b42aaba3521067710afc6905b7347fc41fe53947536ce15a7ef3387b48763d8f7d71778d5e
-  languageName: node
-  linkType: hard
-
 "@csstools/media-query-list-parser@npm:^4.0.2":
   version: 4.0.2
   resolution: "@csstools/media-query-list-parser@npm:4.0.2"
@@ -1837,7 +1827,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-random-function@npm:^1.0.0":
+"@csstools/postcss-random-function@npm:^1.0.1":
   version: 1.0.1
   resolution: "@csstools/postcss-random-function@npm:1.0.1"
   dependencies:
@@ -1876,16 +1866,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-sign-functions@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "@csstools/postcss-sign-functions@npm:1.0.0"
+"@csstools/postcss-sign-functions@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "@csstools/postcss-sign-functions@npm:1.1.0"
   dependencies:
     "@csstools/css-calc": "npm:^2.1.0"
     "@csstools/css-parser-algorithms": "npm:^3.0.4"
     "@csstools/css-tokenizer": "npm:^3.0.3"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/ec745b2f1e714ffead43ade5964234dfc1750c3a71d2e29df862ab3f79ba4a1275187b270b4c226bbb1155bee8e9e63c35597b4f4cb3effaa632e5e07e422344
+  checksum: 10c0/503bbaa8fe1d1a619880d5d6b838f07f1898a5820889e5db3c4e02bb8b340dab18b88f439f9f1da44c6669bab2d4ba3f9543643ccc459d8a21191c5d22109c9b
   languageName: node
   linkType: hard
 
@@ -1945,15 +1935,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/selector-specificity@npm:^4.0.0":
-  version: 4.0.0
-  resolution: "@csstools/selector-specificity@npm:4.0.0"
-  peerDependencies:
-    postcss-selector-parser: ^6.1.0
-  checksum: 10c0/6f4d4ecfdcd37f950100de8ffe0b4c1b1cc8c004aab2c2ebaa5c3e2bca2412d15b17d4628435f47a62d2c56db41bcbf985cb9c69e74b89964d48e421e93e75ba
-  languageName: node
-  linkType: hard
-
 "@csstools/selector-specificity@npm:^5.0.0":
   version: 5.0.0
   resolution: "@csstools/selector-specificity@npm:5.0.0"
@@ -1979,41 +1960,41 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@dnd-kit/accessibility@npm:^3.1.0":
-  version: 3.1.0
-  resolution: "@dnd-kit/accessibility@npm:3.1.0"
+"@dnd-kit/accessibility@npm:^3.1.1":
+  version: 3.1.1
+  resolution: "@dnd-kit/accessibility@npm:3.1.1"
   dependencies:
     tslib: "npm:^2.0.0"
   peerDependencies:
     react: ">=16.8.0"
-  checksum: 10c0/4f9d24e801d66d4fbb551ec389ed90424dd4c5bbdf527000a618e9abb9833cbd84d9a79e362f470ccbccfbd6d00217a9212c92f3cef66e01c951c7f79625b9d7
+  checksum: 10c0/be0bf41716dc58f9386bc36906ec1ce72b7b42b6d1d0e631d347afe9bd8714a829bd6f58a346dd089b1519e93918ae2f94497411a61a4f5e4d9247c6cfd1fef8
   languageName: node
   linkType: hard
 
 "@dnd-kit/core@npm:^6.1.0":
-  version: 6.1.0
-  resolution: "@dnd-kit/core@npm:6.1.0"
+  version: 6.2.0
+  resolution: "@dnd-kit/core@npm:6.2.0"
   dependencies:
-    "@dnd-kit/accessibility": "npm:^3.1.0"
+    "@dnd-kit/accessibility": "npm:^3.1.1"
     "@dnd-kit/utilities": "npm:^3.2.2"
     tslib: "npm:^2.0.0"
   peerDependencies:
     react: ">=16.8.0"
     react-dom: ">=16.8.0"
-  checksum: 10c0/c793eb97cb59285ca8937ebcdfcd27cff09d750ae06722e36ca5ed07925e41abc36a38cff98f9f6056f7a07810878d76909826142a2968330e7e22060e6be584
+  checksum: 10c0/478d6bb027441b0e5fa5ecd9a4da8a5876811505147303de1a5a0783a4418c5f7f464bd3eb07b4be77ef7626364d1b905dc2a4f9055093b845cf39e1d6f13b73
   languageName: node
   linkType: hard
 
-"@dnd-kit/sortable@npm:^8.0.0":
-  version: 8.0.0
-  resolution: "@dnd-kit/sortable@npm:8.0.0"
+"@dnd-kit/sortable@npm:^9.0.0":
+  version: 9.0.0
+  resolution: "@dnd-kit/sortable@npm:9.0.0"
   dependencies:
     "@dnd-kit/utilities": "npm:^3.2.2"
     tslib: "npm:^2.0.0"
   peerDependencies:
-    "@dnd-kit/core": ^6.1.0
+    "@dnd-kit/core": ^6.2.0
     react: ">=16.8.0"
-  checksum: 10c0/a6066c652b892c6a11320c7d8f5c18fdf723e721e8eea37f4ab657dee1ac5e7ca710ac32ce0712a57fe968bc07c13bcea5d5599d90dfdd95619e162befd4d2fb
+  checksum: 10c0/30566ec05371bd59729c0fb87537d78cd1760f08e4b49b5fa8298ebd3cb9f29fc258a48425c6a060b9efeca88e36a059000e770d630681986626abcc3589e97a
   languageName: node
   linkType: hard
 
@@ -2843,7 +2824,7 @@ __metadata:
     "@babel/preset-typescript": "npm:^7.21.5"
     "@babel/runtime": "npm:^7.22.3"
     "@dnd-kit/core": "npm:^6.1.0"
-    "@dnd-kit/sortable": "npm:^8.0.0"
+    "@dnd-kit/sortable": "npm:^9.0.0"
     "@dnd-kit/utilities": "npm:^3.2.2"
     "@formatjs/cli": "npm:^6.1.1"
     "@formatjs/intl-pluralrules": "npm:^5.2.2"
@@ -5156,13 +5137,13 @@ __metadata:
   linkType: hard
 
 "axios@npm:^1.4.0":
-  version: 1.7.7
-  resolution: "axios@npm:1.7.7"
+  version: 1.7.8
+  resolution: "axios@npm:1.7.8"
   dependencies:
     follow-redirects: "npm:^1.15.6"
     form-data: "npm:^4.0.0"
     proxy-from-env: "npm:^1.1.0"
-  checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7
+  checksum: 10c0/23ae2d0105aea9170c34ac9b6f30d9b2ab2fa8b1370205d2f7ce98b9f9510ab420148c13359ee837ea5a4bf2fb028ff225bd2fc92052fb0c478c6b4a836e2d5f
   languageName: node
   linkType: hard
 
@@ -6699,13 +6680,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"css-tree@npm:^3.0.0":
-  version: 3.0.0
-  resolution: "css-tree@npm:3.0.0"
+"css-tree@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "css-tree@npm:3.0.1"
   dependencies:
-    mdn-data: "npm:2.10.0"
+    mdn-data: "npm:2.12.1"
     source-map-js: "npm:^1.0.1"
-  checksum: 10c0/43d44fdf7004ae91d73d486f17894fef77efa33747a6752b9241cf0f5fb47fabc16ec34a96a993651d9014dfdeee803d7c5fcd3548214252ee19f4e5c98999b2
+  checksum: 10c0/9f117f3067e68e9edb0b3db0134f420db1a62bede3e84d8835767ecfaa6f8ced5e87989cf39b65ffe65d788c134c8ea9abd7393d7c35838a9da84326adf57a9b
   languageName: node
   linkType: hard
 
@@ -9534,11 +9515,11 @@ __metadata:
   linkType: hard
 
 "husky@npm:^9.0.11":
-  version: 9.1.6
-  resolution: "husky@npm:9.1.6"
+  version: 9.1.7
+  resolution: "husky@npm:9.1.7"
   bin:
     husky: bin.js
-  checksum: 10c0/705673db4a247c1febd9c5df5f6a3519106cf0335845027bb50a15fba9b1f542cb2610932ede96fd08008f6d9f49db0f15560509861808b0031cdc0e7c798bac
+  checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f
   languageName: node
   linkType: hard
 
@@ -11315,10 +11296,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"known-css-properties@npm:^0.34.0":
-  version: 0.34.0
-  resolution: "known-css-properties@npm:0.34.0"
-  checksum: 10c0/8549969f02b1858554e89faf4548ece37625d0d21b42e8d54fa53184e68e1512ef2531bb15941575ad816361ab7447b598c1b18c1b96ce0a868333d1a68f2e2c
+"known-css-properties@npm:^0.35.0":
+  version: 0.35.0
+  resolution: "known-css-properties@npm:0.35.0"
+  checksum: 10c0/04a4a2859d62670bb25b5b28091a1f03f6f0d3298a5ed3e7476397c5287b98c434f6dd9c004a0c67a53b7f21acc93f83c972e98c122f568d4d0bd21fd2b90fb6
   languageName: node
   linkType: hard
 
@@ -11772,10 +11753,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"mdn-data@npm:2.10.0":
-  version: 2.10.0
-  resolution: "mdn-data@npm:2.10.0"
-  checksum: 10c0/f6f1a6a6eb092bab250d06f6f6c7cb1733a77a17e7119aac829ad67d4322bbf6a30df3c6d88686e71942e66bd49274b2ddfede22a1d3df0d6c49a56fbd09eb7c
+"mdn-data@npm:2.12.1":
+  version: 2.12.1
+  resolution: "mdn-data@npm:2.12.1"
+  checksum: 10c0/1a09f441bdd423f2b0ab712665a1a3329fe7b15e9a2dad8c1c10c521ddb204ed186e7ac91052fd53a5ae0a07ac6eae53b5bcbb59ba8a1fb654268611297eea4a
   languageName: node
   linkType: hard
 
@@ -13850,8 +13831,8 @@ __metadata:
   linkType: hard
 
 "postcss-preset-env@npm:^10.0.0":
-  version: 10.1.0
-  resolution: "postcss-preset-env@npm:10.1.0"
+  version: 10.1.1
+  resolution: "postcss-preset-env@npm:10.1.1"
   dependencies:
     "@csstools/postcss-cascade-layers": "npm:^5.0.1"
     "@csstools/postcss-color-function": "npm:^4.0.6"
@@ -13877,10 +13858,10 @@ __metadata:
     "@csstools/postcss-normalize-display-values": "npm:^4.0.0"
     "@csstools/postcss-oklab-function": "npm:^4.0.6"
     "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
-    "@csstools/postcss-random-function": "npm:^1.0.0"
+    "@csstools/postcss-random-function": "npm:^1.0.1"
     "@csstools/postcss-relative-color-syntax": "npm:^3.0.6"
     "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1"
-    "@csstools/postcss-sign-functions": "npm:^1.0.0"
+    "@csstools/postcss-sign-functions": "npm:^1.1.0"
     "@csstools/postcss-stepped-value-functions": "npm:^4.0.5"
     "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1"
     "@csstools/postcss-trigonometric-functions": "npm:^4.0.5"
@@ -13918,7 +13899,7 @@ __metadata:
     postcss-selector-not: "npm:^8.0.1"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/bd157dbed38c3c125b3bf86f5437a8094539ec5bf24428487c7bbf29da393731e48053afc695494cc9dbe4d182cfe405c398fcf0b22eb326b6db395e7315f892
+  checksum: 10c0/99931117735a66827c7318be023ddb614990457617ccbe7fd2fdc1f10345554652df180d4842768d68d57e14fc0be4d86d0b413c65e77e02db5511e57ed07c4f
   languageName: node
   linkType: hard
 
@@ -14051,7 +14032,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.47":
+"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.49":
   version: 8.4.49
   resolution: "postcss@npm:8.4.49"
   dependencies:
@@ -14137,11 +14118,11 @@ __metadata:
   linkType: hard
 
 "prettier@npm:^3.3.3":
-  version: 3.3.3
-  resolution: "prettier@npm:3.3.3"
+  version: 3.4.1
+  resolution: "prettier@npm:3.4.1"
   bin:
     prettier: bin/prettier.cjs
-  checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26
+  checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c
   languageName: node
   linkType: hard
 
@@ -16641,19 +16622,19 @@ __metadata:
   linkType: hard
 
 "stylelint@npm:^16.0.2":
-  version: 16.10.0
-  resolution: "stylelint@npm:16.10.0"
+  version: 16.11.0
+  resolution: "stylelint@npm:16.11.0"
   dependencies:
-    "@csstools/css-parser-algorithms": "npm:^3.0.1"
-    "@csstools/css-tokenizer": "npm:^3.0.1"
-    "@csstools/media-query-list-parser": "npm:^3.0.1"
-    "@csstools/selector-specificity": "npm:^4.0.0"
+    "@csstools/css-parser-algorithms": "npm:^3.0.4"
+    "@csstools/css-tokenizer": "npm:^3.0.3"
+    "@csstools/media-query-list-parser": "npm:^4.0.2"
+    "@csstools/selector-specificity": "npm:^5.0.0"
     "@dual-bundle/import-meta-resolve": "npm:^4.1.0"
     balanced-match: "npm:^2.0.0"
     colord: "npm:^2.9.3"
     cosmiconfig: "npm:^9.0.0"
     css-functions-list: "npm:^3.2.3"
-    css-tree: "npm:^3.0.0"
+    css-tree: "npm:^3.0.1"
     debug: "npm:^4.3.7"
     fast-glob: "npm:^3.3.2"
     fastest-levenshtein: "npm:^1.0.16"
@@ -16665,16 +16646,16 @@ __metadata:
     ignore: "npm:^6.0.2"
     imurmurhash: "npm:^0.1.4"
     is-plain-object: "npm:^5.0.0"
-    known-css-properties: "npm:^0.34.0"
+    known-css-properties: "npm:^0.35.0"
     mathml-tag-names: "npm:^2.1.3"
     meow: "npm:^13.2.0"
     micromatch: "npm:^4.0.8"
     normalize-path: "npm:^3.0.0"
-    picocolors: "npm:^1.0.1"
-    postcss: "npm:^8.4.47"
+    picocolors: "npm:^1.1.1"
+    postcss: "npm:^8.4.49"
     postcss-resolve-nested-selector: "npm:^0.1.6"
     postcss-safe-parser: "npm:^7.0.1"
-    postcss-selector-parser: "npm:^6.1.2"
+    postcss-selector-parser: "npm:^7.0.0"
     postcss-value-parser: "npm:^4.2.0"
     resolve-from: "npm:^5.0.0"
     string-width: "npm:^4.2.3"
@@ -16684,7 +16665,7 @@ __metadata:
     write-file-atomic: "npm:^5.0.1"
   bin:
     stylelint: bin/stylelint.mjs
-  checksum: 10c0/d07dd156c225d16c740995daacd78090f7fc317602e87bda2fca323a4ae427a8526d724f3089df3b2185df4520f987547668ceea9b30985988ccbc514034aa21
+  checksum: 10c0/65638247fb4e5eacb032e3a98412a13ad8b343d2d58e22d61b96ada72808b5b7e736c845937b3bcfde04c0bfa2120383b507e530afe876dafe824a93c337258f
   languageName: node
   linkType: hard