about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/api/v1/streaming_controller.rb6
-rw-r--r--app/controllers/concerns/signature_verification.rb2
-rw-r--r--app/controllers/tags_controller.rb11
-rw-r--r--app/helpers/application_helper.rb4
-rw-r--r--app/helpers/email_helper.rb2
-rw-r--r--app/helpers/jsonld_helper.rb4
-rw-r--r--app/javascript/flavours/glitch/components/autosuggest_input.js4
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/compose_form.js1
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/poll_form.js1
-rw-r--r--app/javascript/flavours/glitch/features/follow_requests/index.js12
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/link_footer.js16
-rw-r--r--app/javascript/flavours/glitch/initial_state.js1
-rw-r--r--app/javascript/flavours/glitch/styles/components/modal.scss1
-rw-r--r--app/javascript/mastodon/components/autosuggest_input.js4
-rw-r--r--app/javascript/mastodon/features/compose/components/compose_form.js1
-rw-r--r--app/javascript/mastodon/features/compose/components/poll_form.js1
-rw-r--r--app/javascript/mastodon/features/compose/components/upload.js5
-rw-r--r--app/javascript/mastodon/features/follow_requests/index.js12
-rw-r--r--app/javascript/mastodon/features/ui/components/link_footer.js16
-rw-r--r--app/javascript/mastodon/initial_state.js1
-rw-r--r--app/javascript/mastodon/locales/af.json1
-rw-r--r--app/javascript/mastodon/locales/an.json1
-rw-r--r--app/javascript/mastodon/locales/ar.json1
-rw-r--r--app/javascript/mastodon/locales/ast.json27
-rw-r--r--app/javascript/mastodon/locales/be.json7
-rw-r--r--app/javascript/mastodon/locales/bg.json1
-rw-r--r--app/javascript/mastodon/locales/bn.json1
-rw-r--r--app/javascript/mastodon/locales/br.json1
-rw-r--r--app/javascript/mastodon/locales/bs.json1
-rw-r--r--app/javascript/mastodon/locales/ca.json5
-rw-r--r--app/javascript/mastodon/locales/ckb.json1
-rw-r--r--app/javascript/mastodon/locales/co.json1
-rw-r--r--app/javascript/mastodon/locales/cs.json1
-rw-r--r--app/javascript/mastodon/locales/csb.json1
-rw-r--r--app/javascript/mastodon/locales/cy.json1
-rw-r--r--app/javascript/mastodon/locales/da.json1
-rw-r--r--app/javascript/mastodon/locales/de.json55
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json4
-rw-r--r--app/javascript/mastodon/locales/el.json1
-rw-r--r--app/javascript/mastodon/locales/en-GB.json1
-rw-r--r--app/javascript/mastodon/locales/en.json1
-rw-r--r--app/javascript/mastodon/locales/eo.json7
-rw-r--r--app/javascript/mastodon/locales/es-AR.json1
-rw-r--r--app/javascript/mastodon/locales/es-MX.json1
-rw-r--r--app/javascript/mastodon/locales/es.json1
-rw-r--r--app/javascript/mastodon/locales/et.json1
-rw-r--r--app/javascript/mastodon/locales/eu.json1
-rw-r--r--app/javascript/mastodon/locales/fa.json1
-rw-r--r--app/javascript/mastodon/locales/fi.json1
-rw-r--r--app/javascript/mastodon/locales/fo.json1
-rw-r--r--app/javascript/mastodon/locales/fr-QC.json11
-rw-r--r--app/javascript/mastodon/locales/fr.json43
-rw-r--r--app/javascript/mastodon/locales/fy.json1
-rw-r--r--app/javascript/mastodon/locales/ga.json1
-rw-r--r--app/javascript/mastodon/locales/gd.json1
-rw-r--r--app/javascript/mastodon/locales/gl.json1
-rw-r--r--app/javascript/mastodon/locales/he.json1
-rw-r--r--app/javascript/mastodon/locales/hi.json1
-rw-r--r--app/javascript/mastodon/locales/hr.json1
-rw-r--r--app/javascript/mastodon/locales/hu.json1
-rw-r--r--app/javascript/mastodon/locales/hy.json1
-rw-r--r--app/javascript/mastodon/locales/id.json1
-rw-r--r--app/javascript/mastodon/locales/ig.json1
-rw-r--r--app/javascript/mastodon/locales/io.json1
-rw-r--r--app/javascript/mastodon/locales/is.json1
-rw-r--r--app/javascript/mastodon/locales/it.json1
-rw-r--r--app/javascript/mastodon/locales/ja.json5
-rw-r--r--app/javascript/mastodon/locales/ka.json1
-rw-r--r--app/javascript/mastodon/locales/kab.json1
-rw-r--r--app/javascript/mastodon/locales/kk.json1
-rw-r--r--app/javascript/mastodon/locales/kn.json1
-rw-r--r--app/javascript/mastodon/locales/ko.json23
-rw-r--r--app/javascript/mastodon/locales/ku.json1
-rw-r--r--app/javascript/mastodon/locales/kw.json1
-rw-r--r--app/javascript/mastodon/locales/la.json1
-rw-r--r--app/javascript/mastodon/locales/lt.json1
-rw-r--r--app/javascript/mastodon/locales/lv.json1
-rw-r--r--app/javascript/mastodon/locales/mk.json1
-rw-r--r--app/javascript/mastodon/locales/ml.json1
-rw-r--r--app/javascript/mastodon/locales/mr.json1
-rw-r--r--app/javascript/mastodon/locales/ms.json1
-rw-r--r--app/javascript/mastodon/locales/my.json65
-rw-r--r--app/javascript/mastodon/locales/nl.json1
-rw-r--r--app/javascript/mastodon/locales/nn.json3
-rw-r--r--app/javascript/mastodon/locales/no.json1
-rw-r--r--app/javascript/mastodon/locales/oc.json1
-rw-r--r--app/javascript/mastodon/locales/pa.json1
-rw-r--r--app/javascript/mastodon/locales/pl.json1
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json1
-rw-r--r--app/javascript/mastodon/locales/pt-PT.json1
-rw-r--r--app/javascript/mastodon/locales/ro.json1
-rw-r--r--app/javascript/mastodon/locales/ru.json9
-rw-r--r--app/javascript/mastodon/locales/sa.json1
-rw-r--r--app/javascript/mastodon/locales/sc.json1
-rw-r--r--app/javascript/mastodon/locales/sco.json1
-rw-r--r--app/javascript/mastodon/locales/si.json1
-rw-r--r--app/javascript/mastodon/locales/sk.json1
-rw-r--r--app/javascript/mastodon/locales/sl.json1
-rw-r--r--app/javascript/mastodon/locales/sq.json1
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json1
-rw-r--r--app/javascript/mastodon/locales/sr.json1
-rw-r--r--app/javascript/mastodon/locales/sv.json1
-rw-r--r--app/javascript/mastodon/locales/szl.json41
-rw-r--r--app/javascript/mastodon/locales/ta.json1
-rw-r--r--app/javascript/mastodon/locales/tai.json1
-rw-r--r--app/javascript/mastodon/locales/te.json1
-rw-r--r--app/javascript/mastodon/locales/th.json1
-rw-r--r--app/javascript/mastodon/locales/tr.json3
-rw-r--r--app/javascript/mastodon/locales/tt.json1
-rw-r--r--app/javascript/mastodon/locales/ug.json1
-rw-r--r--app/javascript/mastodon/locales/uk.json1
-rw-r--r--app/javascript/mastodon/locales/ur.json1
-rw-r--r--app/javascript/mastodon/locales/uz.json1
-rw-r--r--app/javascript/mastodon/locales/vi.json1
-rw-r--r--app/javascript/mastodon/locales/zgh.json1
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json1
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json1
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json1
-rw-r--r--app/javascript/mastodon/reducers/compose.js2
-rw-r--r--app/javascript/styles/mastodon/components.scss1
-rw-r--r--app/lib/activitypub/activity.rb7
-rw-r--r--app/lib/activitypub/activity/create.rb8
-rw-r--r--app/lib/delivery_failure_tracker.rb2
-rw-r--r--app/lib/extractor.rb2
-rw-r--r--app/lib/link_details_extractor.rb2
-rw-r--r--app/lib/scope_transformer.rb2
-rw-r--r--app/lib/vacuum/access_tokens_vacuum.rb4
-rw-r--r--app/models/account_suggestions/setting_source.rb4
-rw-r--r--app/models/concerns/omniauthable.rb3
-rw-r--r--app/models/concerns/remotable.rb4
-rw-r--r--app/models/form/admin_settings.rb2
-rw-r--r--app/models/session_activation.rb2
-rw-r--r--app/models/setting.rb3
-rw-r--r--app/models/trends/history.rb4
-rw-r--r--app/models/user.rb2
-rw-r--r--app/presenters/instance_presenter.rb4
-rw-r--r--app/serializers/initial_state_serializer.rb1
-rw-r--r--app/serializers/rest/account_serializer.rb4
-rw-r--r--app/serializers/rest/instance_serializer.rb3
-rw-r--r--app/services/activitypub/fetch_featured_collection_service.rb2
-rw-r--r--app/services/activitypub/fetch_remote_account_service.rb2
-rw-r--r--app/services/activitypub/fetch_remote_actor_service.rb2
-rw-r--r--app/services/activitypub/fetch_remote_key_service.rb2
-rw-r--r--app/services/activitypub/fetch_remote_status_service.rb13
-rw-r--r--app/services/activitypub/fetch_replies_service.rb4
-rw-r--r--app/services/activitypub/process_collection_service.rb6
-rw-r--r--app/services/activitypub/process_status_update_service.rb2
-rw-r--r--app/services/fetch_link_card_service.rb2
-rw-r--r--app/services/fetch_oembed_service.rb2
-rw-r--r--app/services/fetch_remote_status_service.rb4
-rw-r--r--app/services/fetch_resource_service.rb2
-rw-r--r--app/services/keys/claim_service.rb2
-rw-r--r--app/services/keys/query_service.rb2
-rw-r--r--app/services/resolve_account_service.rb2
-rw-r--r--app/services/resolve_url_service.rb2
-rw-r--r--app/services/verify_link_service.rb4
-rw-r--r--app/views/admin/settings/about/show.html.haml3
-rw-r--r--app/workers/activitypub/fetch_replies_worker.rb4
-rw-r--r--app/workers/activitypub/processing_worker.rb2
-rw-r--r--app/workers/fetch_reply_worker.rb4
-rw-r--r--app/workers/import/relationship_worker.rb2
-rw-r--r--app/workers/scheduler/user_cleanup_scheduler.rb2
-rw-r--r--app/workers/thread_resolve_worker.rb4
163 files changed, 382 insertions, 256 deletions
diff --git a/app/controllers/api/v1/streaming_controller.rb b/app/controllers/api/v1/streaming_controller.rb
index 7cd60615a..b23a60170 100644
--- a/app/controllers/api/v1/streaming_controller.rb
+++ b/app/controllers/api/v1/streaming_controller.rb
@@ -2,10 +2,10 @@
 
 class Api::V1::StreamingController < Api::BaseController
   def index
-    if Rails.configuration.x.streaming_api_base_url != request.host
-      redirect_to streaming_api_url, status: 301
-    else
+    if Rails.configuration.x.streaming_api_base_url == request.host
       not_found
+    else
+      redirect_to streaming_api_url, status: 301
     end
   end
 
diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb
index a9950d21f..9c04ab4ca 100644
--- a/app/controllers/concerns/signature_verification.rb
+++ b/app/controllers/concerns/signature_verification.rb
@@ -227,7 +227,7 @@ module SignatureVerification
   end
 
   def to_header_name(name)
-    name.split(/-/).map(&:capitalize).join('-')
+    name.split('-').map(&:capitalize).join('-')
   end
 
   def missing_required_signature_parameters?
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 65017acba..750e15fa3 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -11,7 +11,7 @@ class TagsController < ApplicationController
   before_action :authenticate_user!, if: :whitelist_mode?
   before_action :set_local
   before_action :set_tag
-  before_action :set_statuses
+  before_action :set_statuses, if: -> { request.format == :rss }
   before_action :set_instance_presenter
 
   skip_before_action :require_functional!, unless: :whitelist_mode?
@@ -44,12 +44,7 @@ class TagsController < ApplicationController
   end
 
   def set_statuses
-    case request.format&.to_sym
-    when :json
-      @statuses = cache_collection(TagFeed.new(@tag, current_account, local: @local).get(PAGE_SIZE, params[:max_id], params[:since_id], params[:min_id]), Status)
-    when :rss
-      @statuses = cache_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status)
-    end
+    @statuses = cache_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status)
   end
 
   def set_instance_presenter
@@ -64,8 +59,6 @@ class TagsController < ApplicationController
     ActivityPub::CollectionPresenter.new(
       id: tag_url(@tag),
       type: :ordered,
-      size: @tag.statuses.count,
-      items: @statuses.map { |status| ActivityPub::TagManager.instance.uri_for(status) }
     )
   end
 end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index af453825b..774643625 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -67,7 +67,7 @@ module ApplicationHelper
   def link_to_login(name = nil, html_options = nil, &block)
     target = new_user_session_path
 
-    html_options = name if block_given?
+    html_options = name if block
 
     if omniauth_only? && Devise.mappings[:user].omniauthable? && User.omniauth_providers.size == 1
       target = omniauth_authorize_path(:user, User.omniauth_providers[0])
@@ -75,7 +75,7 @@ module ApplicationHelper
       html_options[:method] = :post
     end
 
-    if block_given?
+    if block
       link_to(target, html_options, &block)
     else
       link_to(name, target, html_options)
diff --git a/app/helpers/email_helper.rb b/app/helpers/email_helper.rb
index 360783c62..0800601f9 100644
--- a/app/helpers/email_helper.rb
+++ b/app/helpers/email_helper.rb
@@ -7,7 +7,7 @@ module EmailHelper
 
   def email_to_canonical_email(str)
     username, domain = str.downcase.split('@', 2)
-    username, = username.gsub('.', '').split('+', 2)
+    username, = username.delete('.').split('+', 2)
 
     "#{username}@#{domain}"
   end
diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb
index 102e4b132..e5787fd47 100644
--- a/app/helpers/jsonld_helper.rb
+++ b/app/helpers/jsonld_helper.rb
@@ -213,7 +213,7 @@ module JsonLdHelper
     end
   end
 
-  def load_jsonld_context(url, _options = {}, &_block)
+  def load_jsonld_context(url, _options = {}, &block)
     json = Rails.cache.fetch("jsonld:context:#{url}", expires_in: 30.days, raw: true) do
       request = Request.new(:get, url)
       request.add_headers('Accept' => 'application/ld+json')
@@ -226,6 +226,6 @@ module JsonLdHelper
 
     doc = JSON::LD::API::RemoteDocument.new(json, documentUrl: url)
 
-    block_given? ? yield(doc) : doc
+    block ? yield(doc) : doc
   end
 end
diff --git a/app/javascript/flavours/glitch/components/autosuggest_input.js b/app/javascript/flavours/glitch/components/autosuggest_input.js
index 4d751e281..1a030fb85 100644
--- a/app/javascript/flavours/glitch/components/autosuggest_input.js
+++ b/app/javascript/flavours/glitch/components/autosuggest_input.js
@@ -51,6 +51,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
     searchTokens: PropTypes.arrayOf(PropTypes.string),
     maxLength: PropTypes.number,
     lang: PropTypes.string,
+    spellCheck: PropTypes.string,
   };
 
   static defaultProps = {
@@ -186,7 +187,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
   };
 
   render () {
-    const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength, lang } = this.props;
+    const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength, lang, spellCheck } = this.props;
     const { suggestionsHidden } = this.state;
 
     return (
@@ -212,6 +213,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
             className={className}
             maxLength={maxLength}
             lang={lang}
+            spellCheck={spellCheck}
           />
         </label>
 
diff --git a/app/javascript/flavours/glitch/features/compose/components/compose_form.js b/app/javascript/flavours/glitch/features/compose/components/compose_form.js
index 9f57d7b1b..696188f31 100644
--- a/app/javascript/flavours/glitch/features/compose/components/compose_form.js
+++ b/app/javascript/flavours/glitch/features/compose/components/compose_form.js
@@ -332,6 +332,7 @@ class ComposeForm extends ImmutablePureComponent {
             className='spoiler-input__input'
             lang={this.props.lang}
             autoFocus={false}
+            spellCheck
           />
         </div>
 
diff --git a/app/javascript/flavours/glitch/features/compose/components/poll_form.js b/app/javascript/flavours/glitch/features/compose/components/poll_form.js
index 13b7322d3..cb6b577bf 100644
--- a/app/javascript/flavours/glitch/features/compose/components/poll_form.js
+++ b/app/javascript/flavours/glitch/features/compose/components/poll_form.js
@@ -72,6 +72,7 @@ class Option extends React.PureComponent {
             maxLength={pollLimits.max_option_chars}
             value={title}
             lang={lang}
+            spellCheck
             onChange={this.handleOptionTitleChange}
             suggestions={this.props.suggestions}
             onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
diff --git a/app/javascript/flavours/glitch/features/follow_requests/index.js b/app/javascript/flavours/glitch/features/follow_requests/index.js
index 7b35e3ec9..aa60bd7b8 100644
--- a/app/javascript/flavours/glitch/features/follow_requests/index.js
+++ b/app/javascript/flavours/glitch/features/follow_requests/index.js
@@ -3,7 +3,6 @@ import { connect } from 'react-redux';
 import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import { debounce } from 'lodash';
-import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
 import Column from 'flavours/glitch/features/ui/components/column';
 import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
 import AccountAuthorizeContainer from './containers/account_authorize_container';
@@ -53,16 +52,8 @@ class FollowRequests extends ImmutablePureComponent {
   render () {
     const { intl, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props;
 
-    if (!accountIds) {
-      return (
-        <Column name='follow-requests'>
-          <LoadingIndicator />
-        </Column>
-      );
-    }
-
     const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage="You don't have any follow requests yet. When you receive one, it will show up here." />;
-    const unlockedPrependMessage = locked ? null : (
+    const unlockedPrependMessage = !locked && accountIds.size > 0 && (
       <div className='follow_requests-unlocked_explanation'>
         <FormattedMessage
           id='follow_requests.unlocked_explanation'
@@ -81,6 +72,7 @@ class FollowRequests extends ImmutablePureComponent {
           onLoadMore={this.handleLoadMore}
           hasMore={hasMore}
           isLoading={isLoading}
+          showLoading={isLoading && accountIds.size === 0}
           emptyMessage={emptyMessage}
           bindToDocument={!multiColumn}
           prepend={unlockedPrependMessage}
diff --git a/app/javascript/flavours/glitch/features/ui/components/link_footer.js b/app/javascript/flavours/glitch/features/ui/components/link_footer.js
index c4bea9f31..0d1d4040f 100644
--- a/app/javascript/flavours/glitch/features/ui/components/link_footer.js
+++ b/app/javascript/flavours/glitch/features/ui/components/link_footer.js
@@ -3,7 +3,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
 import { Link } from 'react-router-dom';
-import { domain, version, source_url, profile_directory as profileDirectory } from 'flavours/glitch/initial_state';
+import { domain, version, source_url, statusPageUrl, profile_directory as profileDirectory } from 'flavours/glitch/initial_state';
 import { logOut } from 'flavours/glitch/utils/log_out';
 import { openModal } from 'flavours/glitch/actions/modal';
 import { PERMISSION_INVITE_USERS } from 'flavours/glitch/permissions';
@@ -59,21 +59,27 @@ class LinkFooter extends React.PureComponent {
         <p>
           <strong>{domain}</strong>:
           {' '}
-          <Link key='about' to='/about'><FormattedMessage id='footer.about' defaultMessage='About' /></Link>
+          <Link to='/about'><FormattedMessage id='footer.about' defaultMessage='About' /></Link>
+          {statusPageUrl && (
+            <>
+              {DividingCircle}
+              <a href={statusPageUrl} target='_blank' rel='noopener'><FormattedMessage id='footer.status' defaultMessage='Status' /></a>
+            </>
+          )}
           {canInvite && (
             <>
               {DividingCircle}
-              <a key='invites' href='/invites' target='_blank'><FormattedMessage id='footer.invite' defaultMessage='Invite people' /></a>
+              <a href='/invites' target='_blank'><FormattedMessage id='footer.invite' defaultMessage='Invite people' /></a>
             </>
           )}
           {canProfileDirectory && (
             <>
               {DividingCircle}
-              <Link key='directory' to='/directory'><FormattedMessage id='footer.directory' defaultMessage='Profiles directory' /></Link>
+              <Link to='/directory'><FormattedMessage id='footer.directory' defaultMessage='Profiles directory' /></Link>
             </>
           )}
           {DividingCircle}
-          <Link key='privacy-policy' to='/privacy-policy'><FormattedMessage id='footer.privacy_policy' defaultMessage='Privacy policy' /></Link>
+          <Link to='/privacy-policy'><FormattedMessage id='footer.privacy_policy' defaultMessage='Privacy policy' /></Link>
         </p>
 
         <p>
diff --git a/app/javascript/flavours/glitch/initial_state.js b/app/javascript/flavours/glitch/initial_state.js
index eefbdca80..c4b249db8 100644
--- a/app/javascript/flavours/glitch/initial_state.js
+++ b/app/javascript/flavours/glitch/initial_state.js
@@ -142,6 +142,7 @@ export const usePendingItems = getMeta('use_pending_items');
 export const version = getMeta('version');
 export const translationEnabled = getMeta('translation_enabled');
 export const languages = initialState?.languages;
+export const statusPageUrl = getMeta('status_page_url');
 
 // Glitch-soc-specific settings
 export const maxChars = (initialState && initialState.max_toot_chars) || 500;
diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss
index 972e01e7d..69d237dec 100644
--- a/app/javascript/flavours/glitch/styles/components/modal.scss
+++ b/app/javascript/flavours/glitch/styles/components/modal.scss
@@ -1071,6 +1071,7 @@
   &__container {
     padding: 30px;
     pointer-events: all;
+    overflow-y: auto;
   }
 
   .status__content {
diff --git a/app/javascript/mastodon/components/autosuggest_input.js b/app/javascript/mastodon/components/autosuggest_input.js
index 817a41b93..8d2ddb411 100644
--- a/app/javascript/mastodon/components/autosuggest_input.js
+++ b/app/javascript/mastodon/components/autosuggest_input.js
@@ -51,6 +51,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
     searchTokens: PropTypes.arrayOf(PropTypes.string),
     maxLength: PropTypes.number,
     lang: PropTypes.string,
+    spellCheck: PropTypes.string,
   };
 
   static defaultProps = {
@@ -186,7 +187,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
   };
 
   render () {
-    const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength, lang } = this.props;
+    const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength, lang, spellCheck } = this.props;
     const { suggestionsHidden } = this.state;
 
     return (
@@ -212,6 +213,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
             className={className}
             maxLength={maxLength}
             lang={lang}
+            spellCheck={spellCheck}
           />
         </label>
 
diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js
index a8379c59c..8df144dcc 100644
--- a/app/javascript/mastodon/features/compose/components/compose_form.js
+++ b/app/javascript/mastodon/features/compose/components/compose_form.js
@@ -243,6 +243,7 @@ class ComposeForm extends ImmutablePureComponent {
             id='cw-spoiler-input'
             className='spoiler-input__input'
             lang={this.props.lang}
+            spellCheck
           />
         </div>
 
diff --git a/app/javascript/mastodon/features/compose/components/poll_form.js b/app/javascript/mastodon/features/compose/components/poll_form.js
index a8bc7d0ac..379ae6821 100644
--- a/app/javascript/mastodon/features/compose/components/poll_form.js
+++ b/app/javascript/mastodon/features/compose/components/poll_form.js
@@ -93,6 +93,7 @@ class Option extends React.PureComponent {
             maxLength={100}
             value={title}
             lang={lang}
+            spellCheck
             onChange={this.handleOptionTitleChange}
             suggestions={this.props.suggestions}
             onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
diff --git a/app/javascript/mastodon/features/compose/components/upload.js b/app/javascript/mastodon/features/compose/components/upload.js
index 20f58ee75..f114680b9 100644
--- a/app/javascript/mastodon/features/compose/components/upload.js
+++ b/app/javascript/mastodon/features/compose/components/upload.js
@@ -31,6 +31,11 @@ export default class Upload extends ImmutablePureComponent {
 
   render () {
     const { media } = this.props;
+
+    if (!media) {
+      return null;
+    }
+
     const focusX = media.getIn(['meta', 'focus', 'x']);
     const focusY = media.getIn(['meta', 'focus', 'y']);
     const x = ((focusX /  2) + .5) * 100;
diff --git a/app/javascript/mastodon/features/follow_requests/index.js b/app/javascript/mastodon/features/follow_requests/index.js
index d16aa7737..526ae4cde 100644
--- a/app/javascript/mastodon/features/follow_requests/index.js
+++ b/app/javascript/mastodon/features/follow_requests/index.js
@@ -5,7 +5,6 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
 import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import { debounce } from 'lodash';
-import LoadingIndicator from '../../components/loading_indicator';
 import Column from '../ui/components/column';
 import ColumnBackButtonSlim from '../../components/column_back_button_slim';
 import AccountAuthorizeContainer from './containers/account_authorize_container';
@@ -53,16 +52,8 @@ class FollowRequests extends ImmutablePureComponent {
   render () {
     const { intl, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props;
 
-    if (!accountIds) {
-      return (
-        <Column>
-          <LoadingIndicator />
-        </Column>
-      );
-    }
-
     const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage="You don't have any follow requests yet. When you receive one, it will show up here." />;
-    const unlockedPrependMessage = locked ? null : (
+    const unlockedPrependMessage = !locked && accountIds.size > 0 && (
       <div className='follow_requests-unlocked_explanation'>
         <FormattedMessage
           id='follow_requests.unlocked_explanation'
@@ -80,6 +71,7 @@ class FollowRequests extends ImmutablePureComponent {
           onLoadMore={this.handleLoadMore}
           hasMore={hasMore}
           isLoading={isLoading}
+          showLoading={isLoading && accountIds.size === 0}
           emptyMessage={emptyMessage}
           bindToDocument={!multiColumn}
           prepend={unlockedPrependMessage}
diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js
index db5945d6a..be2111207 100644
--- a/app/javascript/mastodon/features/ui/components/link_footer.js
+++ b/app/javascript/mastodon/features/ui/components/link_footer.js
@@ -3,7 +3,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
 import { Link } from 'react-router-dom';
-import { domain, version, source_url, profile_directory as profileDirectory } from 'mastodon/initial_state';
+import { domain, version, source_url, statusPageUrl, profile_directory as profileDirectory } from 'mastodon/initial_state';
 import { logOut } from 'mastodon/utils/log_out';
 import { openModal } from 'mastodon/actions/modal';
 import { PERMISSION_INVITE_USERS } from 'mastodon/permissions';
@@ -59,21 +59,27 @@ class LinkFooter extends React.PureComponent {
         <p>
           <strong>{domain}</strong>:
           {' '}
-          <Link key='about' to='/about'><FormattedMessage id='footer.about' defaultMessage='About' /></Link>
+          <Link to='/about'><FormattedMessage id='footer.about' defaultMessage='About' /></Link>
+          {statusPageUrl && (
+            <>
+              {DividingCircle}
+              <a href={statusPageUrl} target='_blank' rel='noopener'><FormattedMessage id='footer.status' defaultMessage='Status' /></a>
+            </>
+          )}
           {canInvite && (
             <>
               {DividingCircle}
-              <a key='invites' href='/invites' target='_blank'><FormattedMessage id='footer.invite' defaultMessage='Invite people' /></a>
+              <a href='/invites' target='_blank'><FormattedMessage id='footer.invite' defaultMessage='Invite people' /></a>
             </>
           )}
           {canProfileDirectory && (
             <>
               {DividingCircle}
-              <Link key='directory' to='/directory'><FormattedMessage id='footer.directory' defaultMessage='Profiles directory' /></Link>
+              <Link to='/directory'><FormattedMessage id='footer.directory' defaultMessage='Profiles directory' /></Link>
             </>
           )}
           {DividingCircle}
-          <Link key='privacy-policy' to='/privacy-policy'><FormattedMessage id='footer.privacy_policy' defaultMessage='Privacy policy' /></Link>
+          <Link to='/privacy-policy'><FormattedMessage id='footer.privacy_policy' defaultMessage='Privacy policy' /></Link>
         </p>
 
         <p>
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js
index f58b4eb0e..c9c3a7647 100644
--- a/app/javascript/mastodon/initial_state.js
+++ b/app/javascript/mastodon/initial_state.js
@@ -134,6 +134,7 @@ export const usePendingItems = getMeta('use_pending_items');
 export const version = getMeta('version');
 export const translationEnabled = getMeta('translation_enabled');
 export const languages = initialState?.languages;
+export const statusPageUrl = getMeta('status_page_url');
 
 // Glitch-soc-specific settings
 export const maxChars = (initialState && initialState.max_toot_chars) || 500;
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
index b5bb1a055..7d7724618 100644
--- a/app/javascript/mastodon/locales/af.json
+++ b/app/javascript/mastodon/locales/af.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Kortpadsleutels",
   "footer.privacy_policy": "Privaatheidsbeleid",
   "footer.source_code": "Wys bronkode",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Kom aan die gang",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json
index 9ffaa0c59..389c512fe 100644
--- a/app/javascript/mastodon/locales/an.json
+++ b/app/javascript/mastodon/locales/an.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Alcorces de teclau",
   "footer.privacy_policy": "Politica de privacidat",
   "footer.source_code": "Veyer codigo fuent",
+  "footer.status": "Status",
   "generic.saved": "Alzau",
   "getting_started.heading": "Primers pasos",
   "hashtag.column_header.tag_mode.all": "y {additional}",
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 746af3f1e..3e6c989ce 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "اختصارات لوحة المفاتيح",
   "footer.privacy_policy": "سياسة الخصوصية",
   "footer.source_code": "الاطلاع على الشفرة المصدرية",
+  "footer.status": "Status",
   "generic.saved": "تم الحفظ",
   "getting_started.heading": "استعدّ للبدء",
   "hashtag.column_header.tag_mode.all": "و {additional}",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 18ef12933..fcdabdc6c 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -34,7 +34,7 @@
   "account.followers.empty": "No one follows this user yet.",
   "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
   "account.following": "Following",
-  "account.following_counter": "{count, plural,one {Siguiendo a {counter}} other {Siguiendo a {counter}}}",
+  "account.following_counter": "{count, plural,one {Sigue a {counter}} other {Sigue a {counter}}}",
   "account.follows.empty": "Esti perfil entá nun sigue a naide.",
   "account.follows_you": "Síguete",
   "account.go_to_profile": "Go to profile",
@@ -59,7 +59,7 @@
   "account.show_reblogs": "Amosar los artículos compartíos de @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} artículu} other {{counter} artículos}}",
   "account.unblock": "Unblock @{name}",
-  "account.unblock_domain": "Unblock domain {domain}",
+  "account.unblock_domain": "Desbloquiar el dominiu «{domain}»",
   "account.unblock_short": "Unblock",
   "account.unendorse": "Dexar de destacar nel perfil",
   "account.unfollow": "Dexar de siguir",
@@ -108,7 +108,7 @@
   "column.favourites": "Favourites",
   "column.follow_requests": "Solicitúes de siguimientu",
   "column.home": "Home",
-  "column.lists": "Lists",
+  "column.lists": "Llistes",
   "column.mutes": "Muted users",
   "column.notifications": "Avisos",
   "column.pins": "Artículos fixaos",
@@ -179,10 +179,10 @@
   "conversation.with": "Con {names}",
   "copypaste.copied": "Copióse",
   "copypaste.copy": "Copiar",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "directory.federated": "Del fediversu conocíu",
+  "directory.local": "De «{domain}» namás",
+  "directory.new_arrivals": "Cuentes nueves",
+  "directory.recently_active": "Con actividá recién",
   "disabled_account_banner.account_settings": "Account settings",
   "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}.",
@@ -268,10 +268,11 @@
   "footer.about": "Tocante a",
   "footer.directory": "Direutoriu de perfiles",
   "footer.get_app": "Consiguir l'aplicación",
-  "footer.invite": "Invite people",
+  "footer.invite": "Convidar a persones",
   "footer.keyboard_shortcuts": "Atayos del tecláu",
   "footer.privacy_policy": "Política de privacidá",
   "footer.source_code": "Ver el códigu fonte",
+  "footer.status": "Estáu",
   "generic.saved": "Guardóse",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "y {additional}",
@@ -352,13 +353,13 @@
   "lists.edit": "Editar la llista",
   "lists.edit.submit": "Change title",
   "lists.new.create": "Amestar la llista",
-  "lists.new.title_placeholder": "New list title",
+  "lists.new.title_placeholder": "Títulu",
   "lists.replies_policy.followed": "Cualesquier perfil siguíu",
   "lists.replies_policy.list": "Miembros de la llista",
   "lists.replies_policy.none": "Naide",
   "lists.replies_policy.title": "Show replies to:",
   "lists.search": "Search among people you follow",
-  "lists.subheading": "Your lists",
+  "lists.subheading": "Les tos llistes",
   "load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
   "loading_indicator.label": "Cargando…",
   "media_gallery.toggle_visible": "{number, plural, one {Anubrir la imaxe} other {Anubrir les imáxenes}}",
@@ -542,7 +543,7 @@
   "server_banner.learn_more": "Saber más",
   "server_banner.server_stats": "Estadístiques del sirvidor:",
   "sign_in_banner.create_account": "Crear una cuenta",
-  "sign_in_banner.sign_in": "Sign in",
+  "sign_in_banner.sign_in": "Aniciar la sesión",
   "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.",
   "status.admin_account": "Open moderation interface for @{name}",
   "status.admin_domain": "Open moderation interface for {domain}",
@@ -579,7 +580,7 @@
   "status.reblog_private": "Boost with original visibility",
   "status.reblogged_by": "{name} compartió",
   "status.reblogs.empty": "Naide nun compartió esti artículu entá. Cuando daquién lo faiga, apaez equí.",
-  "status.redraft": "Delete & re-draft",
+  "status.redraft": "Desaniciar ya reeditar",
   "status.remove_bookmark": "Remove bookmark",
   "status.replied_to": "En rempuesta a {name}",
   "status.reply": "Responder",
@@ -616,7 +617,7 @@
   "timeline_hint.resources.followers": "Siguidores",
   "timeline_hint.resources.follows": "Follows",
   "timeline_hint.resources.statuses": "Artículos antiguos",
-  "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
+  "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} {days, plural, one {nel últimu día} other {nos últimos {days} díes}}",
   "trends.trending_now": "En tendencia",
   "ui.beforeunload": "El borrador piérdese si coles de Mastodon.",
   "units.short.billion": "{count} MM",
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 7b422dc94..f4a10a795 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -3,7 +3,7 @@
   "about.contact": "Кантакт:",
   "about.disclaimer": "Mastodon - свабоднае праграмнае забеспячэнне, з адкрытым зыходным кодам, і гандлёвай маркай Mastodon gGmbH.",
   "about.domain_blocks.no_reason_available": "Прычына недаступная",
-  "about.domain_blocks.preamble": "Mastodon звычайна дазваляе вам бачыць змесціва і камунікаваць з карыстальнікамі з іншых сервераў федэсвету. Гэта выключэнні, якія былі зробленыя на гэтым канкрэтным серверы.",
+  "about.domain_blocks.preamble": "Mastodon, у асноўным, дазваляе вам праглядаць кантэнт і ўзаемадзейнічаць з карыстальнікамі з іншых сервераў у федэсвету. Гэтыя выключэнні былі зроблены дакладна на гэтым серверы.",
   "about.domain_blocks.silenced.explanation": "Вы не будзеце бачыць профілі і змесціва гэтага серверу, калі не шукаеце іх мэтанакіравана ці не падпісаны на карыстальнікаў адтуль.",
   "about.domain_blocks.silenced.title": "Абмежаваны",
   "about.domain_blocks.suspended.explanation": "Ніякая інфармацыя з гэтага сервера не будзе апрацавана, захавана або абменена, узаемадзеянне або камунікацыя з карыстальнікамі гэтага сервера немагчымы.",
@@ -21,7 +21,7 @@
   "account.browse_more_on_origin_server": "Глядзіце больш у арыгінальным профілі",
   "account.cancel_follow_request": "Скасаваць запыт на падпіску",
   "account.direct": "Асабістае паведамленне @{name}",
-  "account.disable_notifications": "Не апавяшчаць мяне пра допісы @{name}",
+  "account.disable_notifications": "Не паведамляць мне пра публікацыі @{name}",
   "account.domain_blocked": "Дамен заблакаваны",
   "account.edit_profile": "Рэдагаваць профіль",
   "account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Спалучэнні клавіш",
   "footer.privacy_policy": "Палітыка прыватнасці",
   "footer.source_code": "Прагледзець зыходны код",
+  "footer.status": "Статус",
   "generic.saved": "Захавана",
   "getting_started.heading": "Пачатак працы",
   "hashtag.column_header.tag_mode.all": "і {additional}",
@@ -605,7 +606,7 @@
   "suggestions.header": "Гэта можа Вас зацікавіць…",
   "tabs_bar.federated_timeline": "Глабальнае",
   "tabs_bar.home": "Галоўная",
-  "tabs_bar.local_timeline": "Мясцовае",
+  "tabs_bar.local_timeline": "Тутэйшыя",
   "tabs_bar.notifications": "Апавяшчэнні",
   "time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
   "time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 5ddeedeba..cf5df140e 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Клавишни комбинации",
   "footer.privacy_policy": "Политика за поверителност",
   "footer.source_code": "Преглед на изходния код",
+  "footer.status": "Status",
   "generic.saved": "Запазено",
   "getting_started.heading": "Първи стъпки",
   "hashtag.column_header.tag_mode.all": "и {additional}",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 985958cf1..07609a478 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "সংরক্ষণ হয়েছে",
   "getting_started.heading": "শুরু করা",
   "hashtag.column_header.tag_mode.all": "এবং {additional}",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index 6ded74115..bb19a0452 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Berradennoù klavier",
   "footer.privacy_policy": "Reolennoù prevezded",
   "footer.source_code": "Gwelet kod mammenn",
+  "footer.status": "Status",
   "generic.saved": "Enrollet",
   "getting_started.heading": "Loc'hañ",
   "hashtag.column_header.tag_mode.all": "ha {additional}",
diff --git a/app/javascript/mastodon/locales/bs.json b/app/javascript/mastodon/locales/bs.json
index 73fb3404c..bd89ec9fd 100644
--- a/app/javascript/mastodon/locales/bs.json
+++ b/app/javascript/mastodon/locales/bs.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 5adec87f7..8dba6bb2c 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -32,9 +32,9 @@
   "account.follow": "Segueix",
   "account.followers": "Seguidors",
   "account.followers.empty": "A aquest usuari encara no el segueix ningú.",
-  "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidors}}",
+  "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} Seguidors}}",
   "account.following": "Seguint",
-  "account.following_counter": "{count, plural, other {Seguint-ne {counter}}}",
+  "account.following_counter": "{count, plural, other {{counter} Seguint-ne}}",
   "account.follows.empty": "Aquest usuari encara no segueix ningú.",
   "account.follows_you": "Et segueix",
   "account.go_to_profile": "Vés al perfil",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Dreceres de teclat",
   "footer.privacy_policy": "Política de privadesa",
   "footer.source_code": "Mostra el codi font",
+  "footer.status": "Estat",
   "generic.saved": "Desat",
   "getting_started.heading": "Primeres passes",
   "hashtag.column_header.tag_mode.all": "i {additional}",
diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json
index 306764002..8349e34bc 100644
--- a/app/javascript/mastodon/locales/ckb.json
+++ b/app/javascript/mastodon/locales/ckb.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "پاشکەوتکرا",
   "getting_started.heading": "دەست پێکردن",
   "hashtag.column_header.tag_mode.all": "و {additional}",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 4d94dd2ba..9b75ceeb1 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Salvatu",
   "getting_started.heading": "Per principià",
   "hashtag.column_header.tag_mode.all": "è {additional}",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 7ff5aa221..e07ad6ae1 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Klávesové zkratky",
   "footer.privacy_policy": "Zásady ochrany osobních údajů",
   "footer.source_code": "Zobrazit zdrojový kód",
+  "footer.status": "Stav",
   "generic.saved": "Uloženo",
   "getting_started.heading": "Začínáme",
   "hashtag.column_header.tag_mode.all": "a {additional}",
diff --git a/app/javascript/mastodon/locales/csb.json b/app/javascript/mastodon/locales/csb.json
index fbb103d2c..884020da1 100644
--- a/app/javascript/mastodon/locales/csb.json
+++ b/app/javascript/mastodon/locales/csb.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 407f5dd92..e193919d1 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Bysellau brys",
   "footer.privacy_policy": "Polisi preifatrwydd",
   "footer.source_code": "Gweld y cod ffynhonnell",
+  "footer.status": "Statws",
   "generic.saved": "Wedi'i Gadw",
   "getting_started.heading": "Dechrau",
   "hashtag.column_header.tag_mode.all": "a {additional}",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index bec230000..1db8b030d 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tastaturgenveje",
   "footer.privacy_policy": "Fortrolighedspolitik",
   "footer.source_code": "Vis kildekode",
+  "footer.status": "Status",
   "generic.saved": "Gemt",
   "getting_started.heading": "Startmenu",
   "hashtag.column_header.tag_mode.all": "og {additional}",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 2cdaebe2a..ff3f38c96 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -78,7 +78,7 @@
   "alert.unexpected.title": "Ups!",
   "announcement.announcement": "Ankündigung",
   "attachments_list.unprocessed": "(ausstehend)",
-  "audio.hide": "Audio verbergen",
+  "audio.hide": "Audio ausblenden",
   "autosuggest_hashtag.per_week": "{count} pro Woche",
   "boost_modal.combo": "Mit {combo} wird dieses Fenster beim nächsten Mal nicht mehr angezeigt",
   "bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren",
@@ -114,7 +114,7 @@
   "column.pins": "Angeheftete Beiträge",
   "column.public": "Föderierte Timeline",
   "column_back_button.label": "Zurück",
-  "column_header.hide_settings": "Einstellungen verbergen",
+  "column_header.hide_settings": "Einstellungen ausblenden",
   "column_header.moveLeft_settings": "Diese Spalte nach links verschieben",
   "column_header.moveRight_settings": "Diese Spalte nach rechts verschieben",
   "column_header.pin": "Anheften",
@@ -247,7 +247,7 @@
   "filter_modal.added.expired_explanation": "Diese Filterkategorie ist abgelaufen. Du musst das Ablaufdatum für diese Kategorie ändern.",
   "filter_modal.added.expired_title": "Abgelaufener Filter!",
   "filter_modal.added.review_and_configure": "Um diesen Filter zu überprüfen oder noch weiter zu konfigurieren, rufe die {settings_link} auf.",
-  "filter_modal.added.review_and_configure_title": "Filtereinstellungen",
+  "filter_modal.added.review_and_configure_title": "Filter-Einstellungen",
   "filter_modal.added.settings_link": "Einstellungen",
   "filter_modal.added.short_explanation": "Dieser Post wurde folgender Filterkategorie hinzugefügt: {title}.",
   "filter_modal.added.title": "Filter hinzugefügt!",
@@ -260,7 +260,7 @@
   "filter_modal.title.status": "Beitrag per Filter ausblenden",
   "follow_recommendations.done": "Fertig",
   "follow_recommendations.heading": "Folge Leuten, deren Beiträge du sehen möchtest! Hier sind einige Vorschläge.",
-  "follow_recommendations.lead": "Beiträge von Personen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Hab keine Angst, Fehler zu machen, du kannst den Leuten jederzeit wieder entfolgen!",
+  "follow_recommendations.lead": "Beiträge von Profilen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Sei unbesorgt, mal Fehler zu begehen. Du kannst diesen Konten ganz einfach und jederzeit wieder entfolgen.",
   "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.",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tastenkombinationen",
   "footer.privacy_policy": "Datenschutzerklärung",
   "footer.source_code": "Quellcode anzeigen",
+  "footer.status": "Status",
   "generic.saved": "Gespeichert",
   "getting_started.heading": "Auf geht's!",
   "hashtag.column_header.tag_mode.all": "und {additional}",
@@ -279,16 +280,16 @@
   "hashtag.column_header.tag_mode.none": "ohne {additional}",
   "hashtag.column_settings.select.no_options_message": "Keine Vorschläge gefunden",
   "hashtag.column_settings.select.placeholder": "Hashtags eingeben …",
-  "hashtag.column_settings.tag_mode.all": "All diese",
+  "hashtag.column_settings.tag_mode.all": "Alle",
   "hashtag.column_settings.tag_mode.any": "Eines von diesen",
   "hashtag.column_settings.tag_mode.none": "Keines von diesen",
-  "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen",
+  "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags dieser Spalte hinzufügen",
   "hashtag.follow": "Hashtag folgen",
   "hashtag.unfollow": "Hashtag entfolgen",
   "home.column_settings.basic": "Einfach",
   "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
   "home.column_settings.show_replies": "Antworten anzeigen",
-  "home.hide_announcements": "Ankündigungen verbergen",
+  "home.hide_announcements": "Ankündigungen ausblenden",
   "home.show_announcements": "Ankündigungen anzeigen",
   "interaction_modal.description.favourite": "Mit einem Mastodon-Konto kannst du diesen Beitrag favorisieren, um deine Wertschätzung auszudrücken, und ihn für einen späteren Zeitpunkt speichern.",
   "interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.",
@@ -308,7 +309,7 @@
   "keyboard_shortcuts.back": "zurücknavigieren",
   "keyboard_shortcuts.blocked": "Liste gesperrter Profile öffnen",
   "keyboard_shortcuts.boost": "Beitrag teilen",
-  "keyboard_shortcuts.column": "Spalte fokussieren",
+  "keyboard_shortcuts.column": "Auf die aktuelle Spalte fokussieren",
   "keyboard_shortcuts.compose": "Eingabefeld fokussieren",
   "keyboard_shortcuts.description": "Beschreibung",
   "keyboard_shortcuts.direct": "Direktnachrichten öffnen",
@@ -332,16 +333,16 @@
   "keyboard_shortcuts.reply": "auf Beitrag antworten",
   "keyboard_shortcuts.requests": "Liste der Follower-Anfragen öffnen",
   "keyboard_shortcuts.search": "Suchleiste fokussieren",
-  "keyboard_shortcuts.spoilers": "Inhaltswarnung anzeigen/verbergen",
+  "keyboard_shortcuts.spoilers": "Inhaltswarnung anzeigen/ausblenden",
   "keyboard_shortcuts.start": "„Erste Schritte“-Spalte öffnen",
-  "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/verbergen",
+  "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden",
   "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/verbergen",
   "keyboard_shortcuts.toot": "neuen Beitrag erstellen",
   "keyboard_shortcuts.unfocus": "Eingabefeld/Suche nicht mehr fokussieren",
   "keyboard_shortcuts.up": "sich in der Liste hinaufbewegen",
   "lightbox.close": "Schließen",
-  "lightbox.compress": "Bildansicht komprimieren",
-  "lightbox.expand": "Bildansicht erweitern",
+  "lightbox.compress": "Bildansicht verkleinern",
+  "lightbox.expand": "Bildansicht vergrößern",
   "lightbox.next": "Vor",
   "lightbox.previous": "Zurück",
   "limited_account_hint.action": "Profil trotzdem anzeigen",
@@ -366,7 +367,7 @@
   "missing_indicator.sublabel": "Der Inhalt konnte nicht gefunden werden",
   "moved_to_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert, weil du zu {movedToAccount} umgezogen bist.",
   "mute_modal.duration": "Dauer",
-  "mute_modal.hide_notifications": "Benachrichtigungen dieses Profils verbergen?",
+  "mute_modal.hide_notifications": "Benachrichtigungen dieses Profils ausblenden?",
   "mute_modal.indefinite": "Unbegrenzt",
   "navigation_bar.about": "Über",
   "navigation_bar.blocks": "Gesperrte Profile",
@@ -377,7 +378,7 @@
   "navigation_bar.discover": "Entdecken",
   "navigation_bar.domain_blocks": "Gesperrte Domains",
   "navigation_bar.edit_profile": "Profil bearbeiten",
-  "navigation_bar.explore": "Entdecken",
+  "navigation_bar.explore": "Erforschen",
   "navigation_bar.favourites": "Favoriten",
   "navigation_bar.filters": "Stummgeschaltete Wörter",
   "navigation_bar.follow_requests": "Follower-Anfragen",
@@ -393,7 +394,7 @@
   "navigation_bar.search": "Suche",
   "navigation_bar.security": "Sicherheit",
   "not_signed_in_indicator.not_signed_in": "Du musst dich anmelden, um auf diesen Inhalt zugreifen zu können.",
-  "notification.admin.report": "{target} wurde von {name} gemeldet",
+  "notification.admin.report": "{name} meldete {target}",
   "notification.admin.sign_up": "{name} registrierte sich",
   "notification.favourite": "{name} hat deinen Beitrag favorisiert",
   "notification.follow": "{name} folgt dir jetzt",
@@ -451,7 +452,7 @@
   "poll.votes": "{votes, plural, one {# Stimme} other {# Stimmen}}",
   "poll_button.add_poll": "Umfrage erstellen",
   "poll_button.remove_poll": "Umfrage entfernen",
-  "privacy.change": "Sichtbarkeit des Beitrags anpassen",
+  "privacy.change": "Sichtbarkeit anpassen",
   "privacy.direct.long": "Nur für die genannten Profile sichtbar",
   "privacy.direct.short": "Nur erwähnte Profile",
   "privacy.private.long": "Nur für deine Follower sichtbar",
@@ -465,16 +466,16 @@
   "refresh": "Aktualisieren",
   "regeneration_indicator.label": "Wird geladen …",
   "regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!",
-  "relative_time.days": "{number}T",
+  "relative_time.days": "{number} T.",
   "relative_time.full.days": "vor {number, plural, one {# Tag} other {# Tagen}}",
   "relative_time.full.hours": "vor {number, plural, one {# Stunde} other {# Stunden}}",
   "relative_time.full.just_now": "soeben",
   "relative_time.full.minutes": "vor {number, plural, one {# Minute} other {# Minuten}}",
   "relative_time.full.seconds": "vor {number, plural, one {1 Sekunde} other {# Sekunden}}",
-  "relative_time.hours": "{number} Std",
+  "relative_time.hours": "{number} Std.",
   "relative_time.just_now": "jetzt",
-  "relative_time.minutes": "{number} min",
-  "relative_time.seconds": "{number} sek",
+  "relative_time.minutes": "{number} Min.",
+  "relative_time.seconds": "{number} Sek.",
   "relative_time.today": "heute",
   "reply_indicator.cancel": "Abbrechen",
   "report.block": "Sperren",
@@ -530,7 +531,7 @@
   "search_results.accounts": "Profile",
   "search_results.all": "Alles",
   "search_results.hashtags": "Hashtags",
-  "search_results.nothing_found": "Nichts für diese Suchbegriffe gefunden",
+  "search_results.nothing_found": "Nichts zu diesen Suchbegriffen gefunden",
   "search_results.statuses": "Beiträge",
   "search_results.statuses_fts_disabled": "Die Suche nach Beitragsinhalten ist auf diesem Mastodon-Server deaktiviert.",
   "search_results.title": "Suchergebnisse für {q}",
@@ -544,9 +545,9 @@
   "sign_in_banner.create_account": "Konto erstellen",
   "sign_in_banner.sign_in": "Anmelden",
   "sign_in_banner.text": "Melde dich an, um Profilen oder Hashtags zu folgen, Beiträge zu favorisieren, zu teilen und auf sie zu antworten. Du kannst auch von deinem Konto aus auf einem anderen Server interagieren.",
-  "status.admin_account": "Moderationsoberfläche für @{name} öffnen",
-  "status.admin_domain": "Moderationsoberfläche für {domain} öffnen",
-  "status.admin_status": "Diesen Beitrag in der Moderationsoberfläche öffnen",
+  "status.admin_account": "@{name} moderieren",
+  "status.admin_domain": "{domain} moderieren",
+  "status.admin_status": "Beitrag moderieren",
   "status.block": "@{name} blockieren",
   "status.bookmark": "Beitrag als Lesezeichen setzen",
   "status.cancel_reblog_private": "Teilen des Beitrags rückgängig machen",
@@ -595,7 +596,7 @@
   "status.show_original": "Ursprünglichen Beitrag anzeigen",
   "status.translate": "Übersetzen",
   "status.translated_from_with": "Aus {lang} mittels {provider} übersetzt",
-  "status.uncached_media_warning": "Nicht verfügbar",
+  "status.uncached_media_warning": "Medien-Datei auf diesem Server noch nicht verfügbar",
   "status.unmute_conversation": "Stummschaltung der Unterhaltung aufheben",
   "status.unpin": "Vom Profil lösen",
   "subscribed_languages.lead": "Nach der Änderung werden nur noch Beiträge in den ausgewählten Sprachen in den Timelines deiner Startseite und deiner Listen angezeigt. Wähle keine Sprache aus, um alle Beiträge zu sehen.",
@@ -646,11 +647,11 @@
   "upload_progress.label": "Wird hochgeladen …",
   "upload_progress.processing": "Wird verarbeitet…",
   "video.close": "Video schließen",
-  "video.download": "Datei herunterladen",
+  "video.download": "Video-Datei herunterladen",
   "video.exit_fullscreen": "Vollbild verlassen",
   "video.expand": "Video vergrößern",
   "video.fullscreen": "Vollbild",
-  "video.hide": "Video verbergen",
+  "video.hide": "Video ausblenden",
   "video.mute": "Stummschalten",
   "video.pause": "Pausieren",
   "video.play": "Abspielen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index f36929df5..c09411f65 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -4076,6 +4076,10 @@
         "id": "footer.about"
       },
       {
+        "defaultMessage": "Status",
+        "id": "footer.status"
+      },
+      {
         "defaultMessage": "Invite people",
         "id": "footer.invite"
       },
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 1ea158054..5c41b7547 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Συντομεύσεις πληκτρολογίου",
   "footer.privacy_policy": "Πολιτική απορρήτου",
   "footer.source_code": "Προβολή πηγαίου κώδικα",
+  "footer.status": "Κατάσταση",
   "generic.saved": "Αποθηκεύτηκε",
   "getting_started.heading": "Αφετηρία",
   "hashtag.column_header.tag_mode.all": "και {additional}",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index a787a747b..4ce198b90 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 5707e1035..534428d52 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -276,6 +276,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 99f455e03..fde163628 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -3,7 +3,7 @@
   "about.contact": "Kontakto:",
   "about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.",
   "about.domain_blocks.no_reason_available": "Kialo ne disponebla",
-  "about.domain_blocks.preamble": "Mastodono ebligas vidi la enhavojn de uzantoj el aliaj serviloj en la Fediverso, kaj komuniki kun ili. Jen la limigoj deciditaj de tiu ĉi servilo mem.",
+  "about.domain_blocks.preamble": "Mastodon ĝenerale rajtigas vidi la enhavojn de uzantoj el aliaj serviloj en la fediverso, kaj komuniki kun ili. Jen la limigoj deciditaj de tiu ĉi servilo mem.",
   "about.domain_blocks.silenced.explanation": "Vi ne ĝenerale vidos profilojn kaj enhavojn de ĉi tiu servilo, krom se vi eksplice trovas aŭ estas permesita de via sekvato.",
   "about.domain_blocks.silenced.title": "Limigita",
   "about.domain_blocks.suspended.explanation": "Neniuj datumoj el tiu servilo estos prilaboritaj, konservitaj, aŭ interŝanĝitaj, do neeblas interagi aŭ komuniki kun uzantoj de tiu servilo.",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Fulmoklavoj",
   "footer.privacy_policy": "Politiko de privateco",
   "footer.source_code": "Montri fontkodon",
+  "footer.status": "Stato",
   "generic.saved": "Konservita",
   "getting_started.heading": "Por komenci",
   "hashtag.column_header.tag_mode.all": "kaj {additional}",
@@ -460,7 +461,7 @@
   "privacy.public.short": "Publika",
   "privacy.unlisted.long": "Videbla por ĉiuj, sed ekskluzive el la funkcio de esploro",
   "privacy.unlisted.short": "Nelistigita",
-  "privacy_policy.last_updated": "Laste ĝisdatigita sur {date}",
+  "privacy_policy.last_updated": "Laste ĝisdatigita en {date}",
   "privacy_policy.title": "Politiko de privateco",
   "refresh": "Refreŝigu",
   "regeneration_indicator.label": "Ŝargado…",
@@ -487,7 +488,7 @@
   "report.category.title_account": "profilo",
   "report.category.title_status": "afiŝo",
   "report.close": "Farita",
-  "report.comment.title": "Ĉu estas io alia kion vi pensas ke ni devas scii?",
+  "report.comment.title": "Ĉu estas ajn ion alian kiun vi pensas ke ni devus scii?",
   "report.forward": "Plusendi al {target}",
   "report.forward_hint": "La konto estas de alia servilo. Ĉu vi volas sendi anoniman kopion de la raporto ankaŭ al tie?",
   "report.mute": "Silentigi",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index f490d29cb..c37d8f62d 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atajos de teclado",
   "footer.privacy_policy": "Política de privacidad",
   "footer.source_code": "Ver código fuente",
+  "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Inicio de Mastodon",
   "hashtag.column_header.tag_mode.all": "y {additional}",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index c932c1af2..b371e0e9e 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atajos de teclado",
   "footer.privacy_policy": "Política de privacidad",
   "footer.source_code": "Ver código fuente",
+  "footer.status": "Status",
   "generic.saved": "Guardado",
   "getting_started.heading": "Primeros pasos",
   "hashtag.column_header.tag_mode.all": "y {additional}",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index e9ba8f102..61800fd6b 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atajos de teclado",
   "footer.privacy_policy": "Política de privacidad",
   "footer.source_code": "Ver código fuente",
+  "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Primeros pasos",
   "hashtag.column_header.tag_mode.all": "y {additional}",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index de0f9d971..0f9f33080 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Kiirklahvid",
   "footer.privacy_policy": "Isikuandmete kaitse",
   "footer.source_code": "Lähtekood",
+  "footer.status": "Olek",
   "generic.saved": "Salvestatud",
   "getting_started.heading": "Alustamine",
   "hashtag.column_header.tag_mode.all": "ja {additional}",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 845606972..39eaeda02 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Lasterbideak",
   "footer.privacy_policy": "Pribatutasun politika",
   "footer.source_code": "Ikusi iturburu kodea",
+  "footer.status": "Egoera",
   "generic.saved": "Gordea",
   "getting_started.heading": "Menua",
   "hashtag.column_header.tag_mode.all": "eta {osagarria}",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 6fc890410..10c1b12fb 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "میان‌برهای صفحه‌کلید",
   "footer.privacy_policy": "سیاست محرمانگی",
   "footer.source_code": "نمایش کد مبدأ",
+  "footer.status": "Status",
   "generic.saved": "ذخیره شده",
   "getting_started.heading": "آغاز کنید",
   "hashtag.column_header.tag_mode.all": "و {additional}",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index daaab3857..a1decf1ed 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Pikanäppäimet",
   "footer.privacy_policy": "Tietosuojakäytäntö",
   "footer.source_code": "Näytä lähdekoodi",
+  "footer.status": "Tila",
   "generic.saved": "Tallennettu",
   "getting_started.heading": "Näin pääset alkuun",
   "hashtag.column_header.tag_mode.all": "ja {additional}",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index 60d82ccd8..adcb3aae0 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Knappasnarvegir",
   "footer.privacy_policy": "Privatlívspolitikkur",
   "footer.source_code": "Vís keldukotuna",
+  "footer.status": "Støða",
   "generic.saved": "Goymt",
   "getting_started.heading": "At byrja",
   "hashtag.column_header.tag_mode.all": "og {additional}",
diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json
index 050fd9002..1ad8e9353 100644
--- a/app/javascript/mastodon/locales/fr-QC.json
+++ b/app/javascript/mastodon/locales/fr-QC.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Rechercher des langues…",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
   "compose_form.encryption_warning": "Les publications sur Mastodon ne sont pas chiffrées de bout en bout. Veuillez ne partager aucune information sensible sur Mastodon.",
-  "compose_form.hashtag_warning": "Ce message n'apparaîtra pas dans les listes de hashtags, car il n'est pas public. Seuls les messages publics peuvent appaître dans les recherches par hashtags.",
+  "compose_form.hashtag_warning": "Ce message n'apparaîtra pas dans les listes de hashtags, car il n'est pas public. Seuls les messages publics peuvent apparaître dans les recherches par hashtags.",
   "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos publications privés.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "À quoi pensez-vous?",
@@ -221,7 +221,7 @@
   "empty_column.favourites": "Personne n’a encore ajouté cette publication à ses favoris. Lorsque quelqu’un le fera, elle apparaîtra ici.",
   "empty_column.follow_recommendations": "Il semble qu’aucune suggestion n’ait pu être générée pour vous. Vous pouvez essayer d’utiliser la recherche pour découvrir des personnes que vous pourriez connaître ou explorer les hashtags populaires.",
   "empty_column.follow_requests": "Vous n’avez pas encore de demande d'abonnement. Lorsque vous en recevrez une, elle apparaîtra ici.",
-  "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.",
+  "empty_column.followed_tags": "Vous n'avez pas encore suivi d'hashtags. Lorsque vous le ferez, ils apparaîtront ici.",
   "empty_column.hashtag": "Il n’y a pas encore de contenu associé à ce hashtag.",
   "empty_column.home": "Votre fil d'accueil est vide! Suivez plus de personnes pour la remplir. {suggestions}",
   "empty_column.home.suggestions": "Voir quelques suggestions",
@@ -264,7 +264,7 @@
   "follow_request.authorize": "Autoriser",
   "follow_request.reject": "Rejeter",
   "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.",
-  "followed_tags": "Followed hashtags",
+  "followed_tags": "Hashtags suivis",
   "footer.about": "À propos",
   "footer.directory": "Annuaire des profils",
   "footer.get_app": "Télécharger l’application",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Raccourcis clavier",
   "footer.privacy_policy": "Politique de confidentialité",
   "footer.source_code": "Voir le code source",
+  "footer.status": "Status",
   "generic.saved": "Sauvegardé",
   "getting_started.heading": "Pour commencer",
   "hashtag.column_header.tag_mode.all": "et {additional}",
@@ -381,7 +382,7 @@
   "navigation_bar.favourites": "Favoris",
   "navigation_bar.filters": "Mots masqués",
   "navigation_bar.follow_requests": "Demandes d'abonnements",
-  "navigation_bar.followed_tags": "Followed hashtags",
+  "navigation_bar.followed_tags": "Hashtags suivis",
   "navigation_bar.follows_and_followers": "Abonnements et abonnés",
   "navigation_bar.lists": "Listes",
   "navigation_bar.logout": "Se déconnecter",
@@ -543,7 +544,7 @@
   "server_banner.server_stats": "Statistiques du serveur:",
   "sign_in_banner.create_account": "Créer un compte",
   "sign_in_banner.sign_in": "Se connecter",
-  "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.",
+  "sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des messages. Vous pouvez également interagir depuis votre compte sur un autre serveur.",
   "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
   "status.admin_domain": "Ouvrir l’interface de modération pour {domain}",
   "status.admin_status": "Ouvrir ce message dans l’interface de modération",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 0dc5dcb1d..1dcf41c85 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -6,7 +6,7 @@
   "about.domain_blocks.preamble": "Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateur⋅rice⋅s de n'importe quel autre serveur dans le fédiverse. Voici les exceptions qui ont été faites sur ce serveur en particulier.",
   "about.domain_blocks.silenced.explanation": "Vous ne verrez généralement pas les profils et le contenu de ce serveur, à moins que vous ne les recherchiez explicitement ou que vous ne choisissiez de les suivre.",
   "about.domain_blocks.silenced.title": "Limité",
-  "about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, enregistrée ou échangée, rendant impossible toute interaction ou communication avec les utilisateurs de ce serveur.",
+  "about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, enregistrée ou échangée, rendant impossible toute interaction ou communication avec les comptes de ce serveur.",
   "about.domain_blocks.suspended.title": "Suspendu",
   "about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.",
   "about.powered_by": "Réseau social décentralisé propulsé par {mastodon}",
@@ -45,7 +45,7 @@
   "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.",
   "account.media": "Médias",
   "account.mention": "Mentionner @{name}",
-  "account.moved_to": "{name} a indiqué que son nouveau compte est maintenant  :",
+  "account.moved_to": "{name} a indiqué que son nouveau compte est maintenant :",
   "account.mute": "Masquer @{name}",
   "account.mute_notifications": "Masquer les notifications de @{name}",
   "account.muted": "Masqué·e",
@@ -71,7 +71,7 @@
   "admin.dashboard.monthly_retention": "Taux de rétention des utilisateur·rice·s par mois après inscription",
   "admin.dashboard.retention.average": "Moyenne",
   "admin.dashboard.retention.cohort": "Mois d'inscription",
-  "admin.dashboard.retention.cohort_size": "Nouveaux utilisateurs",
+  "admin.dashboard.retention.cohort_size": "Nouveaux comptes",
   "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.",
   "alert.rate_limited.title": "Nombre de requêtes limité",
   "alert.unexpected.message": "Une erreur inattendue s’est produite.",
@@ -96,7 +96,7 @@
   "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.",
   "closed_registrations_modal.find_another_server": "Trouver un autre serveur",
-  "closed_registrations_modal.preamble": "Mastodon est décentralisé : peu importe où vous créez votre votre, vous serez en mesure de suivre et d'interagir avec quiconque sur ce serveur. Vous pouvez même l'héberger !",
+  "closed_registrations_modal.preamble": "Mastodon est décentralisé : peu importe où vous créez votre compte, vous serez en mesure de suivre et d'interagir avec quiconque sur ce serveur. Vous pouvez même l'héberger !",
   "closed_registrations_modal.title": "Inscription sur Mastodon",
   "column.about": "À propos",
   "column.blocks": "Comptes bloqués",
@@ -128,8 +128,8 @@
   "compose.language.search": "Rechercher des langues …",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
   "compose_form.encryption_warning": "Les messages sur Mastodon ne sont pas chiffrés de bout en bout. Ne partagez aucune information sensible sur Mastodon.",
-  "compose_form.hashtag_warning": "Ce message n'apparaîtra pas dans les listes de hashtags, car il n'est pas public. Seuls les messages publics peuvent appaître dans les recherches par hashtags.",
-  "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos messages privés.",
+  "compose_form.hashtag_warning": "Ce message n'apparaîtra pas dans les listes de hashtags, car il n'est pas public. Seuls les messages publics peuvent apparaître dans les recherches par hashtags.",
+  "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre pour voir vos messages réservés à vos abonné⋅e⋅s.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "Qu’avez-vous en tête ?",
   "compose_form.poll.add_option": "Ajouter un choix",
@@ -185,12 +185,12 @@
   "directory.recently_active": "Actif·ve·s récemment",
   "disabled_account_banner.account_settings": "Paramètres du compte",
   "disabled_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé.",
-  "dismissable_banner.community_timeline": "Voici les messages publics les plus récents des personnes dont les comptes sont hébergés par {domain}.",
+  "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 publications depuis les serveurs du réseau décentralisé, dont celui-ci, sont actuellement en train de gagner de l'ampleur sur ce serveur.",
   "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": "Voici les publications publiques les plus récentes des personnes de ce serveur et des autres du réseau décentralisé que ce serveur connait.",
+  "dismissable_banner.public_timeline": "Voici les messages publics les plus récents des personnes de cette instance et des autres instances du réseau décentralisé connues par ce serveur.",
   "embed.instructions": "Intégrez ce message à votre site en copiant le code ci-dessous.",
   "embed.preview": "Il apparaîtra comme cela :",
   "emoji_button.activity": "Activités",
@@ -246,7 +246,7 @@
   "filter_modal.added.context_mismatch_title": "Incompatibilité du contexte !",
   "filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.",
   "filter_modal.added.expired_title": "Filtre expiré !",
-  "filter_modal.added.review_and_configure": "Pour passer en revue et approfondir la configuration de cette catégorie de filtre, aller sur le {settings_link}.",
+  "filter_modal.added.review_and_configure": "Pour examiner et affiner la configuration de cette catégorie de filtre, allez à {settings_link}.",
   "filter_modal.added.review_and_configure_title": "Paramètres du filtre",
   "filter_modal.added.settings_link": "page des paramètres",
   "filter_modal.added.short_explanation": "Ce message a été ajouté à la catégorie de filtre suivante : {title}.",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Raccourcis clavier",
   "footer.privacy_policy": "Politique de confidentialité",
   "footer.source_code": "Voir le code source",
+  "footer.status": "État",
   "generic.saved": "Sauvegardé",
   "getting_started.heading": "Pour commencer",
   "hashtag.column_header.tag_mode.all": "et {additional}",
@@ -290,17 +291,17 @@
   "home.column_settings.show_replies": "Afficher les réponses",
   "home.hide_announcements": "Masquer les annonces",
   "home.show_announcements": "Afficher les annonces",
-  "interaction_modal.description.favourite": "Avec un compte Mastodon, vous pouvez ajouter ce post aux favoris pour informer l'auteur que vous l'appréciez et le sauvegarder pour plus tard.",
+  "interaction_modal.description.favourite": "Avec un compte Mastodon, vous pouvez ajouter ce message à vos favoris pour informer l'auteur⋅rice que vous l'appréciez et pour le sauvegarder pour plus tard.",
   "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 booster ce message pour le partager avec vos propres abonnés.",
+  "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.on_another_server": "Sur un autre serveur",
   "interaction_modal.on_this_server": "Sur ce serveur",
-  "interaction_modal.other_server_instructions": "Copiez et collez cette URL dans le champ de recherche de votre application Mastodon préférée ou l'interface web de votre serveur Mastodon.",
+  "interaction_modal.other_server_instructions": "Copiez et collez cette URL dans le champ de recherche de votre application Mastodon préférée ou de l'interface web de votre serveur Mastodon.",
   "interaction_modal.preamble": "Puisque Mastodon est décentralisé, vous pouvez utiliser votre compte existant hébergé par un autre serveur Mastodon ou une plateforme compatible si vous n'avez pas de compte sur celui-ci.",
-  "interaction_modal.title.favourite": "Ajouter de post de {name} aux favoris",
+  "interaction_modal.title.favourite": "Ajouter le message de {name} aux favoris",
   "interaction_modal.title.follow": "Suivre {name}",
-  "interaction_modal.title.reblog": "Partager la publication de {name}",
+  "interaction_modal.title.reblog": "Partager le message de {name}",
   "interaction_modal.title.reply": "Répondre au message de {name}",
   "intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
   "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
@@ -364,7 +365,7 @@
   "media_gallery.toggle_visible": "{number, plural, one {Cacher l’image} other {Cacher les images}}",
   "missing_indicator.label": "Non trouvé",
   "missing_indicator.sublabel": "Ressource introuvable",
-  "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous avez déplacé vers {movedToAccount}.",
+  "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous l'avez déplacé à {movedToAccount}.",
   "mute_modal.duration": "Durée",
   "mute_modal.hide_notifications": "Masquer les notifications de cette personne ?",
   "mute_modal.indefinite": "Indéfinie",
@@ -395,7 +396,7 @@
   "not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
   "notification.admin.report": "{name} a signalé {target}",
   "notification.admin.sign_up": "{name} s'est inscrit",
-  "notification.favourite": "{name} a aimé votre publication",
+  "notification.favourite": "{name} a ajouté votre message à ses favoris",
   "notification.follow": "{name} vous suit",
   "notification.follow_request": "{name} a demandé à vous suivre",
   "notification.mention": "{name} vous a mentionné·e :",
@@ -522,10 +523,10 @@
   "search.placeholder": "Rechercher",
   "search.search_or_paste": "Rechercher ou saisir une URL",
   "search_popout.search_format": "Recherche avancée",
-  "search_popout.tips.full_text": "Un texte normal retourne les messages que vous avez écrits, ajoutés à vos favoris, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondants.",
+  "search_popout.tips.full_text": "Faire une recherche textuelle retrouve les messages que vous avez écrits, ajoutés à vos favoris, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondants.",
   "search_popout.tips.hashtag": "hashtag",
   "search_popout.tips.status": "message",
-  "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants",
+  "search_popout.tips.text": "Faire une recherche textuelle retrouve les noms affichés, les identifiants et les hashtags correspondants",
   "search_popout.tips.user": "utilisateur",
   "search_results.accounts": "Comptes",
   "search_results.all": "Tous les résultats",
@@ -562,7 +563,7 @@
   "status.favourite": "Ajouter aux favoris",
   "status.filter": "Filtrer ce message",
   "status.filtered": "Filtré",
-  "status.hide": "Masquer la publication",
+  "status.hide": "Masquer le message",
   "status.history.created": "créé par {name} {date}",
   "status.history.edited": "édité par {name} {date}",
   "status.load_more": "Charger plus",
@@ -615,7 +616,7 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} des autres serveurs ne sont pas affichés.",
   "timeline_hint.resources.followers": "Les abonnés",
   "timeline_hint.resources.follows": "Les abonnements",
-  "timeline_hint.resources.statuses": "Les messages plus anciens",
+  "timeline_hint.resources.statuses": "Messages plus anciens",
   "trends.counter_by_accounts": "{count, plural, one {{counter} personne} other {{counter} personnes}} au cours {days, plural, one {des dernières 24h} other {des {days} derniers jours}}",
   "trends.trending_now": "Tendance en ce moment",
   "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
@@ -627,7 +628,7 @@
   "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
   "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
   "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
-  "upload_form.description": "Décrire pour les malvoyants",
+  "upload_form.description": "Décrire pour les malvoyant·e·s",
   "upload_form.description_missing": "Description manquante",
   "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 cd7232e27..61273f58f 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Fluchtoetsen",
   "footer.privacy_policy": "Privacybelied",
   "footer.source_code": "Boarnekoade besjen",
+  "footer.status": "Steat",
   "generic.saved": "Bewarre",
   "getting_started.heading": "Uteinsette",
   "hashtag.column_header.tag_mode.all": "en {additional}",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 61759475d..9212d16bd 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Aicearraí méarchláir",
   "footer.privacy_policy": "Polasaí príobháideachais",
   "footer.source_code": "Féach ar an gcód foinseach",
+  "footer.status": "Status",
   "generic.saved": "Sábháilte",
   "getting_started.heading": "Ag tosú amach",
   "hashtag.column_header.tag_mode.all": "agus {additional}",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
index 40d7e77e5..8355f2019 100644
--- a/app/javascript/mastodon/locales/gd.json
+++ b/app/javascript/mastodon/locales/gd.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir",
   "footer.privacy_policy": "Poileasaidh prìobhaideachd",
   "footer.source_code": "Seall am bun-tùs",
+  "footer.status": "Status",
   "generic.saved": "Chaidh a shàbhaladh",
   "getting_started.heading": "Toiseach",
   "hashtag.column_header.tag_mode.all": "agus {additional}",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 25756ea59..1033e6d7d 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atallos do teclado",
   "footer.privacy_policy": "Política de privacidade",
   "footer.source_code": "Ver código fonte",
+  "footer.status": "Estado",
   "generic.saved": "Gardado",
   "getting_started.heading": "Primeiros pasos",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index c1e5eee97..7e3cee334 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "קיצורי מקלדת",
   "footer.privacy_policy": "מדיניות פרטיות",
   "footer.source_code": "צפיה בקוד המקור",
+  "footer.status": "מצב",
   "generic.saved": "נשמר",
   "getting_started.heading": "בואו נתחיל",
   "hashtag.column_header.tag_mode.all": "ו- {additional}",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index 9ed822e57..3ac57d50d 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "कीबोर्ड शॉर्टकट",
   "footer.privacy_policy": "प्राइवेसी पालिसी",
   "footer.source_code": "सोर्स कोड देखें",
+  "footer.status": "Status",
   "generic.saved": "सेव्ड",
   "getting_started.heading": "पहले कदम रखें",
   "hashtag.column_header.tag_mode.all": "और {additional}",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 77364d4fa..9be500a7e 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tipkovni prečaci",
   "footer.privacy_policy": "Pravila o zaštiti privatnosti",
   "footer.source_code": "Prikaz izvornog koda",
+  "footer.status": "Status",
   "generic.saved": "Spremljeno",
   "getting_started.heading": "Počnimo",
   "hashtag.column_header.tag_mode.all": "i {additional}",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 2b999fcf5..b5ca1ef3b 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Billentyűparancsok",
   "footer.privacy_policy": "Adatvédelmi szabályzat",
   "footer.source_code": "Forráskód megtekintése",
+  "footer.status": "Állapot",
   "generic.saved": "Elmentve",
   "getting_started.heading": "Első lépések",
   "hashtag.column_header.tag_mode.all": "és {additional}",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 253dea6f4..cb1dd1bd2 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Ստեղնաշարի կարճատներ",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Պահպանուած է",
   "getting_started.heading": "Ինչպէս սկսել",
   "hashtag.column_header.tag_mode.all": "եւ {additional}",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 584ce4c4c..a6db3207d 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Pintasan papan ketik",
   "footer.privacy_policy": "Kebijakan privasi",
   "footer.source_code": "Lihat kode sumber",
+  "footer.status": "Status",
   "generic.saved": "Disimpan",
   "getting_started.heading": "Mulai",
   "hashtag.column_header.tag_mode.all": "dan {additional}",
diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json
index e088d08f2..69e4ae08a 100644
--- a/app/javascript/mastodon/locales/ig.json
+++ b/app/javascript/mastodon/locales/ig.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Iwu nzuzu",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Mbido",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 49ae3fc71..fedabed58 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Sparesis",
   "getting_started.heading": "Debuto",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index 8e1f3b6bf..56ef257c9 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Flýtileiðir á lyklaborði",
   "footer.privacy_policy": "Persónuverndarstefna",
   "footer.source_code": "Skoða frumkóða",
+  "footer.status": "Staða",
   "generic.saved": "Vistað",
   "getting_started.heading": "Komast í gang",
   "hashtag.column_header.tag_mode.all": "og {additional}",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 41c404c14..e7b480814 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Scorciatoie da tastiera",
   "footer.privacy_policy": "Politica sulla privacy",
   "footer.source_code": "Visualizza il codice sorgente",
+  "footer.status": "Stato",
   "generic.saved": "Salvato",
   "getting_started.heading": "Per iniziare",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index aca58c145..e5c752f32 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -45,7 +45,7 @@
   "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。",
   "account.media": "メディア",
   "account.mention": "@{name}さんにメンション",
-  "account.moved_to": "{name} さんがアカウントを引っ越しました:",
+  "account.moved_to": "{name}さんがアカウントを引っ越しました:",
   "account.mute": "@{name}さんをミュート",
   "account.mute_notifications": "@{name}さんからの通知を受け取らない",
   "account.muted": "ミュート済み",
@@ -54,7 +54,7 @@
   "account.posts_with_replies": "投稿と返信",
   "account.report": "@{name}さんを通報",
   "account.requested": "フォロー承認待ちです。クリックしてキャンセル",
-  "account.requested_follow": "{name} さんがあなたにフォローリクエストしました",
+  "account.requested_follow": "{name}さんがあなたにフォローリクエストしました",
   "account.share": "@{name}さんのプロフィールを共有する",
   "account.show_reblogs": "@{name}さんからのブーストを表示",
   "account.statuses_counter": "{counter} 投稿",
@@ -276,6 +276,7 @@
   "footer.keyboard_shortcuts": "キーボードショートカット",
   "footer.privacy_policy": "プライバシーポリシー",
   "footer.source_code": "ソースコードを表示",
+  "footer.status": "ステータス",
   "generic.saved": "保存しました",
   "getting_started.heading": "スタート",
   "hashtag.column_header.tag_mode.all": "と{additional}",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 714de6dad..2158a8e0f 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "დაწყება",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json
index 3db7a397f..fc0efa7ea 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Inegzumen n unasiw",
   "footer.privacy_policy": "Tasertit tabaḍnit",
   "footer.source_code": "Wali tangalt taɣbalut",
+  "footer.status": "Status",
   "generic.saved": "Yettwasekles",
   "getting_started.heading": "Bdu",
   "hashtag.column_header.tag_mode.all": "d {additional}",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 47f4f104d..297885a19 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Сақталды",
   "getting_started.heading": "Желіде",
   "hashtag.column_header.tag_mode.all": "және {additional}",
diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json
index 7f9574b3f..4c7ed9a84 100644
--- a/app/javascript/mastodon/locales/kn.json
+++ b/app/javascript/mastodon/locales/kn.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 7332dca16..9ff4910ef 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -1,8 +1,8 @@
 {
   "about.blocks": "제한된 서버들",
   "about.contact": "연락처:",
-  "about.disclaimer": "마스토돈은 자유 오픈소스 소프트웨어이며, Mastodon gGmbH의 상표입니다",
-  "about.domain_blocks.no_reason_available": "이유 비공개",
+  "about.disclaimer": "Mastodon은 자유 오픈소스 소프트웨어이며, Mastodon gGmbH의 상표입니다",
+  "about.domain_blocks.no_reason_available": "사유를 밝히지 않음",
   "about.domain_blocks.preamble": "마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 사용자와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다.",
   "about.domain_blocks.silenced.explanation": "명시적으로 찾아보거나 팔로우를 하기 전까지는, 이 서버에 있는 프로필이나 게시물 등을 일반적으로 볼 수 없습니다.",
   "about.domain_blocks.silenced.title": "제한됨",
@@ -66,7 +66,7 @@
   "account.unmute": "@{name} 뮤트 해제",
   "account.unmute_notifications": "@{name}의 알림 뮤트 해제",
   "account.unmute_short": "뮤트 해제",
-  "account_note.placeholder": "클릭해서 노트 추가",
+  "account_note.placeholder": "클릭하여 노트 추가",
   "admin.dashboard.daily_retention": "가입 후 일별 사용자 유지율",
   "admin.dashboard.monthly_retention": "가입 후 월별 사용자 유지율",
   "admin.dashboard.retention.average": "평균",
@@ -138,8 +138,8 @@
   "compose_form.poll.remove_option": "이 항목 삭제",
   "compose_form.poll.switch_to_multiple": "다중 선택이 가능한 투표로 변경",
   "compose_form.poll.switch_to_single": "단일 선택 투표로 변경",
-  "compose_form.publish": "뿌우",
-  "compose_form.publish_form": "뿌우",
+  "compose_form.publish": "게시",
+  "compose_form.publish_form": "게시",
   "compose_form.publish_loud": "{publish}!",
   "compose_form.save_changes": "변경사항 저장",
   "compose_form.sensitive.hide": "미디어를 민감함으로 설정하기",
@@ -209,7 +209,7 @@
   "emoji_button.symbols": "기호",
   "emoji_button.travel": "여행과 장소",
   "empty_column.account_suspended": "계정 정지됨",
-  "empty_column.account_timeline": "여긴 게시물이 없어요!",
+  "empty_column.account_timeline": "이곳에는 게시물이 없습니다!",
   "empty_column.account_unavailable": "프로필 사용 불가",
   "empty_column.blocks": "아직 아무도 차단하지 않았습니다.",
   "empty_column.bookmarked_statuses": "아직 북마크에 저장한 게시물이 없습니다. 게시물을 북마크 지정하면 여기에 나타납니다.",
@@ -219,7 +219,7 @@
   "empty_column.explore_statuses": "아직 유행하는 것이 없습니다. 나중에 다시 확인하세요!",
   "empty_column.favourited_statuses": "아직 마음에 들어한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.",
   "empty_column.favourites": "아직 아무도 이 게시물을 마음에 들어하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.",
-  "empty_column.follow_recommendations": "제안을 만들 수 없었습니다. 알 수 있는 사람을 찾아보거나 유행하는 해시태그를 둘러보세요.",
+  "empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.",
   "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.",
   "empty_column.followed_tags": "아직 아무 해시태그도 팔로우하고 있지 않습니다. 해시태그를 팔로우하면, 여기에 표시됩니다.",
   "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "키보드 단축키",
   "footer.privacy_policy": "개인정보 정책",
   "footer.source_code": "소스코드 보기",
+  "footer.status": "상태",
   "generic.saved": "저장됨",
   "getting_started.heading": "시작하기",
   "hashtag.column_header.tag_mode.all": "및 {additional}",
@@ -280,7 +281,7 @@
   "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.any": "어느것이든",
   "hashtag.column_settings.tag_mode.none": "이것들을 제외하고",
   "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다",
   "hashtag.follow": "해시태그 팔로우",
@@ -400,11 +401,11 @@
   "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
   "notification.mention": "{name} 님이 언급하였습니다",
   "notification.own_poll": "내 투표가 끝났습니다",
-  "notification.poll": "당신이 참여 한 투표가 종료되었습니다",
+  "notification.poll": "참여했던 투표가 끝났습니다.",
   "notification.reblog": "{name} 님이 부스트했습니다",
   "notification.status": "{name} 님이 방금 게시물을 올렸습니다",
   "notification.update": "{name} 님이 게시물을 수정했습니다",
-  "notifications.clear": "알림 지우기",
+  "notifications.clear": "알림 비우기",
   "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?",
   "notifications.column_settings.admin.report": "새 신고:",
   "notifications.column_settings.admin.sign_up": "새로운 가입:",
@@ -617,7 +618,7 @@
   "timeline_hint.resources.follows": "팔로우",
   "timeline_hint.resources.statuses": "이전 게시물",
   "trends.counter_by_accounts": "이전 {days}일 동안 {counter} 명의 사용자",
-  "trends.trending_now": "지금 유행중",
+  "trends.trending_now": "지금 유행 중",
   "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
   "units.short.billion": "{count}B",
   "units.short.million": "{count}B",
diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json
index 4b12ab6be..ad53c3577 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Kurteriyên klavyeyê",
   "footer.privacy_policy": "Peymana nepeniyê",
   "footer.source_code": "Koda çavkanî nîşan bide",
+  "footer.status": "Status",
   "generic.saved": "Tomarkirî",
   "getting_started.heading": "Destpêkirin",
   "hashtag.column_header.tag_mode.all": "û {additional}",
diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json
index 1a8e20035..db4f0022e 100644
--- a/app/javascript/mastodon/locales/kw.json
+++ b/app/javascript/mastodon/locales/kw.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Gwithys",
   "getting_started.heading": "Dhe dhalleth",
   "hashtag.column_header.tag_mode.all": "ha(g) {additional}",
diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json
index 2cbafae22..2634a6f06 100644
--- a/app/javascript/mastodon/locales/la.json
+++ b/app/javascript/mastodon/locales/la.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "servavit",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index ea53932f3..c7a27873d 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index bb6bfbc82..f54a92378 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Īsinājumtaustiņi",
   "footer.privacy_policy": "Privātuma politika",
   "footer.source_code": "Skatīt pirmkodu",
+  "footer.status": "Statuss",
   "generic.saved": "Saglabāts",
   "getting_started.heading": "Darba sākšana",
   "hashtag.column_header.tag_mode.all": "un {additional}",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index c2d2bbfbe..b9e5cda1e 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Започни",
   "hashtag.column_header.tag_mode.all": "и {additional}",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index f3a13938b..3574ede02 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "സംരക്ഷിച്ചു",
   "getting_started.heading": "തുടക്കം കുറിക്കുക",
   "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ",
diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json
index 5004f5209..1ba6aa957 100644
--- a/app/javascript/mastodon/locales/mr.json
+++ b/app/javascript/mastodon/locales/mr.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index 593690408..3f971026e 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Pintasan papan kekunci",
   "footer.privacy_policy": "Dasar privasi",
   "footer.source_code": "Lihat kod sumber",
+  "footer.status": "Status",
   "generic.saved": "Disimpan",
   "getting_started.heading": "Mari bermula",
   "hashtag.column_header.tag_mode.all": "dan {additional}",
diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json
index c0fa7822e..9086f0eec 100644
--- a/app/javascript/mastodon/locales/my.json
+++ b/app/javascript/mastodon/locales/my.json
@@ -1,47 +1,47 @@
 {
-  "about.blocks": "Moderated servers",
-  "about.contact": "Contact:",
-  "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.",
-  "about.domain_blocks.no_reason_available": "Reason not available",
-  "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.",
-  "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.",
-  "about.domain_blocks.silenced.title": "Limited",
-  "about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.",
-  "about.domain_blocks.suspended.title": "Suspended",
-  "about.not_available": "This information has not been made available on this server.",
-  "about.powered_by": "Decentralized social media powered by {mastodon}",
-  "about.rules": "Server rules",
-  "account.account_note_header": "Note",
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "about.blocks": "ထိန်းချုပ်ထားသော ဆာဗာများ",
+  "about.contact": "ဆက်သွယ်ရန်:",
+  "about.disclaimer": "Mastodon သည် အခမဲ့ဖြစ်ပြီး open-source software နှင့် Mastodon gGmbH ၏ ကုန်အမှတ်တံဆိပ်တစ်ခုဖြစ်သည်။",
+  "about.domain_blocks.no_reason_available": "အကြောင်းပြချက်မရရှိပါ",
+  "about.domain_blocks.preamble": "Mastodon သည် ယေဘူယျအားဖြင့် သင့်အား အစုအဝေးရှိ အခြားဆာဗာများမှ အသုံးပြုသူများထံမှ အကြောင်းအရာများကို ကြည့်ရှုပြီး အပြန်အလှန် တုံ့ပြန်နိုင်စေပါသည်။ ဤအရာများသည် ဤအထူးဆာဗာတွင် ပြုလုပ်ထားသော ခြွင်းချက်ဖြစ်သည်။",
+  "about.domain_blocks.silenced.explanation": "ရှင်းရှင်းလင်းလင်း ရှာကြည့်ခြင်း သို့မဟုတ် လိုက်ကြည့်ခြင်းဖြင့် ၎င်းကို ရွေးချယ်ခြင်းမှလွဲ၍ ဤဆာဗာမှ ပရိုဖိုင်များနှင့် အကြောင်းအရာများကို ယေဘုယျအားဖြင့် သင်သည် မမြင်ရပါ။",
+  "about.domain_blocks.silenced.title": "ကန့်သတ်ထားသော",
+  "about.domain_blocks.suspended.explanation": "ဤဆာဗာမှ ဒေတာများကို စီမံဆောင်ရွက်ခြင်း၊ သိမ်းဆည်းခြင်း သို့မဟုတ် ဖလှယ်ခြင်း မပြုဘဲ၊ ဤဆာဗာမှ အသုံးပြုသူများနှင့် အပြန်အလှန် ဆက်သွယ်မှု သို့မဟုတ် ဆက်သွယ်မှုတို့ကို မဖြစ်နိုင်အောင် ပြုလုပ်ပေးမည်မဟုတ်ပါ။",
+  "about.domain_blocks.suspended.title": "ရပ်ဆိုင်းထားသည်။",
+  "about.not_available": "ဤအချက်အလက်ကို ဤဆာဗာတွင် မရရှိနိုင်ပါ။",
+  "about.powered_by": "{mastodon} မှ ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ဆိုရှယ်မီဒီယာ",
+  "about.rules": "ဆာဗာစည်းမျဉ်းများ\n",
+  "account.account_note_header": "မှတ်ချက်",
+  "account.add_or_remove_from_list": "စာရင်းများမှ ထည့်ပါ သို့မဟုတ် ဖယ်ရှားပါ။\n",
   "account.badges.bot": "Bot",
-  "account.badges.group": "Group",
-  "account.block": "Block @{name}",
-  "account.block_domain": "Block domain {domain}",
-  "account.blocked": "Blocked",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.badges.group": "အုပ်စု",
+  "account.block": "@{name} ကိုဘလော့မည်",
+  "account.block_domain": " {domain} ဒိုမိန်းကိုပိတ်မည်",
+  "account.blocked": "ဘလော့ထားသည်",
+  "account.browse_more_on_origin_server": "မူရင်းပရိုဖိုင်တွင် ပိုမိုကြည့်ရှုပါ။",
   "account.cancel_follow_request": "Withdraw follow request",
-  "account.direct": "Direct message @{name}",
-  "account.disable_notifications": "Stop notifying me when @{name} posts",
-  "account.domain_blocked": "Domain blocked",
+  "account.direct": "@{name} ကိုတိုက်ရိုက်စာပို့မည်",
+  "account.disable_notifications": "@{name} ပို့စ်တင်သည့်အခါ ကျွန်ုပ်ကို အသိပေးခြင်းရပ်ပါ။",
+  "account.domain_blocked": "ဒိုမိန်း ပိတ်ပင်ထားခဲ့သည်\n",
   "account.edit_profile": "ကိုယ်ရေးမှတ်တမ်းပြင်ဆင်မည်",
-  "account.enable_notifications": "Notify me when @{name} posts",
+  "account.enable_notifications": "@{name} ပို့စ်တင်သည့်အခါ ကျွန်ုပ်ကို အကြောင်းကြားပါ။",
   "account.endorse": "Feature on profile",
-  "account.featured_tags.last_status_at": "Last post on {date}",
+  "account.featured_tags.last_status_at": "{date} တွင် နောက်ဆုံးပို့စ်",
   "account.featured_tags.last_status_never": "No posts",
   "account.featured_tags.title": "{name}'s featured hashtags",
   "account.follow": "စောင့်ကြည့်မည်",
-  "account.followers": "Followers",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers": "စောင့်ကြည့်သူများ",
+  "account.followers.empty": "ဤသူကို စောင့်ကြည့်သူ မရှိသေးပါ။",
   "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
   "account.following": "စောင့်ကြည့်နေသည်",
   "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
-  "account.follows_you": "Follows you",
-  "account.go_to_profile": "Go to profile",
-  "account.hide_reblogs": "Hide boosts from @{name}",
-  "account.joined_short": "Joined",
+  "account.follows.empty": "ဤသူသည် မည်သူ့ကိုမျှ စောင့်ကြည့်ခြင်း မရှိသေးပါ။",
+  "account.follows_you": "သင့်ကို စောင့်ကြည့်နေသည်",
+  "account.go_to_profile": "ပရိုဖိုင်းသို့ သွားရန်",
+  "account.hide_reblogs": "@{name} ၏ မျှဝေမှုကို ဝှက်ထားရန်",
+  "account.joined_short": "ပူးပေါင်း",
   "account.languages": "Change subscribed languages",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.link_verified_on": "ဤလင့်ခ်၏ ပိုင်ဆိုင်မှုကို {date} က စစ်ဆေးခဲ့သည်။",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
   "account.media": "မီဒီယာ",
   "account.mention": "Mention @{name}",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 5b753cf2a..91ca4ebf2 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Sneltoetsen",
   "footer.privacy_policy": "Privacybeleid",
   "footer.source_code": "Broncode bekijken",
+  "footer.status": "Status",
   "generic.saved": "Opgeslagen",
   "getting_started.heading": "Aan de slag",
   "hashtag.column_header.tag_mode.all": "en {additional}",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index b645ce087..9ed91cc34 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Snøggtastar",
   "footer.privacy_policy": "Personvernsreglar",
   "footer.source_code": "Vis kjeldekode",
+  "footer.status": "Status",
   "generic.saved": "Gøymt",
   "getting_started.heading": "Kom i gang",
   "hashtag.column_header.tag_mode.all": "og {additional}",
@@ -381,7 +382,7 @@
   "navigation_bar.favourites": "Favorittar",
   "navigation_bar.filters": "Målbundne ord",
   "navigation_bar.follow_requests": "Fylgjeførespurnader",
-  "navigation_bar.followed_tags": "Followed hashtags",
+  "navigation_bar.followed_tags": "Fulgte emneknagger",
   "navigation_bar.follows_and_followers": "Fylgje og fylgjarar",
   "navigation_bar.lists": "Lister",
   "navigation_bar.logout": "Logg ut",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index e67cd61ea..0cc3f121b 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Hurtigtaster",
   "footer.privacy_policy": "Personvernregler",
   "footer.source_code": "Vis kildekode",
+  "footer.status": "Status",
   "generic.saved": "Lagret",
   "getting_started.heading": "Kom i gang",
   "hashtag.column_header.tag_mode.all": "og {additional}",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 65a3e8852..4bce24d07 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Acorchis clavièr",
   "footer.privacy_policy": "Politica de confidencialitat",
   "footer.source_code": "Veire lo còdi font",
+  "footer.status": "Estat",
   "generic.saved": "Enregistrat",
   "getting_started.heading": "Per començar",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index 08145fe8c..e22ab1f22 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 359328865..50966c266 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -276,6 +276,7 @@
   "footer.keyboard_shortcuts": "Skróty klawiszowe",
   "footer.privacy_policy": "Polityka prywatności",
   "footer.source_code": "Zobacz kod źródłowy",
+  "footer.status": "Status",
   "generic.saved": "Zapisano",
   "getting_started.heading": "Rozpocznij",
   "hashtag.column_header.tag_mode.all": "i {additional}",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 34098d5a0..02804f0f6 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atalhos de teclado",
   "footer.privacy_policy": "Política de privacidade",
   "footer.source_code": "Exibir código-fonte",
+  "footer.status": "Status",
   "generic.saved": "Salvo",
   "getting_started.heading": "Primeiros passos",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index f544e1eb7..ae0a2df31 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Atalhos do teclado",
   "footer.privacy_policy": "Política de privacidade",
   "footer.source_code": "Ver código-fonte",
+  "footer.status": "Estado",
   "generic.saved": "Guardado",
   "getting_started.heading": "Primeiros passos",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index f6348e2f3..683924c70 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Comenzi rapide de la tastatură",
   "footer.privacy_policy": "Politica de confidenţialitate",
   "footer.source_code": "Vizualizează codul sursă",
+  "footer.status": "Status",
   "generic.saved": "Salvat",
   "getting_started.heading": "Primii pași",
   "hashtag.column_header.tag_mode.all": "și {additional}",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index d4bfe11e7..75e6f7edf 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -221,7 +221,7 @@
   "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.",
   "empty_column.follow_recommendations": "Похоже, у нас нет предложений для вас. Вы можете попробовать поискать людей, которых уже знаете, или изучить актуальные хэштеги.",
   "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
-  "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.",
+  "empty_column.followed_tags": "Вы еще не подписались ни на один хэштег. Когда вы это сделаете, они появятся здесь.",
   "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.",
   "empty_column.home": "Ваша лента совсем пуста! Подпишитесь на других, чтобы заполнить её. {suggestions}",
   "empty_column.home.suggestions": "Посмотреть некоторые предложения",
@@ -264,7 +264,7 @@
   "follow_request.authorize": "Авторизовать",
   "follow_request.reject": "Отказать",
   "follow_requests.unlocked_explanation": "Хотя ваша учетная запись не закрыта, команда {domain} подумала, что вы захотите просмотреть запросы от этих учетных записей вручную.",
-  "followed_tags": "Followed hashtags",
+  "followed_tags": "Отслеживаемые хэштеги",
   "footer.about": "О проекте",
   "footer.directory": "Каталог профилей",
   "footer.get_app": "Скачать приложение",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Сочетания клавиш",
   "footer.privacy_policy": "Политика конфиденциальности",
   "footer.source_code": "Исходный код",
+  "footer.status": "Статус",
   "generic.saved": "Сохранено",
   "getting_started.heading": "Начать",
   "hashtag.column_header.tag_mode.all": "и {additional}",
@@ -381,7 +382,7 @@
   "navigation_bar.favourites": "Избранное",
   "navigation_bar.filters": "Игнорируемые слова",
   "navigation_bar.follow_requests": "Запросы на подписку",
-  "navigation_bar.followed_tags": "Followed hashtags",
+  "navigation_bar.followed_tags": "Отслеживаемые хэштеги",
   "navigation_bar.follows_and_followers": "Подписки и подписчики",
   "navigation_bar.lists": "Списки",
   "navigation_bar.logout": "Выйти",
@@ -543,7 +544,7 @@
   "server_banner.server_stats": "Статистика сервера:",
   "sign_in_banner.create_account": "Создать учётную запись",
   "sign_in_banner.sign_in": "Войти",
-  "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.",
+  "sign_in_banner.text": "Войдите, чтобы отслеживать профили, хэштеги или избранное, делиться сообщениями и отвечать на них. Вы также можете взаимодействовать с вашей учётной записью на другом сервере.",
   "status.admin_account": "Открыть интерфейс модератора для @{name}",
   "status.admin_domain": "Открыть интерфейс модерации {domain}",
   "status.admin_status": "Открыть этот пост в интерфейсе модератора",
diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json
index ba8340300..e9deab43d 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index f06e02c17..100f8ecbd 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Polìtica de riservadesa",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Sarvadu",
   "getting_started.heading": "Comente cumintzare",
   "hashtag.column_header.tag_mode.all": "e {additional}",
diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json
index bb3389f90..c428d6683 100644
--- a/app/javascript/mastodon/locales/sco.json
+++ b/app/javascript/mastodon/locales/sco.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboord shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View the soorce code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Gettin stertit",
   "hashtag.column_header.tag_mode.all": "an {additional}",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
index e6c9fccab..a5ffbc615 100644
--- a/app/javascript/mastodon/locales/si.json
+++ b/app/javascript/mastodon/locales/si.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "සුරැකිණි",
   "getting_started.heading": "පටන් ගන්න",
   "hashtag.column_header.tag_mode.all": "සහ {additional}",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index a341c4291..ba50e846a 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Klávesové skratky",
   "footer.privacy_policy": "Zásady súkromia",
   "footer.source_code": "Zobraziť zdrojový kód",
+  "footer.status": "Stav",
   "generic.saved": "Uložené",
   "getting_started.heading": "Začni tu",
   "hashtag.column_header.tag_mode.all": "a {additional}",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 26c7376b3..d706eac77 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tipkovne bližnjice",
   "footer.privacy_policy": "Pravilnik o zasebnosti",
   "footer.source_code": "Pokaži izvorno kodo",
+  "footer.status": "Stanje",
   "generic.saved": "Shranjeno",
   "getting_started.heading": "Kako začeti",
   "hashtag.column_header.tag_mode.all": "in {additional}",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index f1ac38fdf..927cf7659 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Shkurtore tastiere",
   "footer.privacy_policy": "Rregulla privatësie",
   "footer.source_code": "Shihni kodin burim",
+  "footer.status": "Gjendje",
   "generic.saved": "U ruajt",
   "getting_started.heading": "Si t’ia fillohet",
   "hashtag.column_header.tag_mode.all": "dhe {additional}",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 34e7b20de..a3ffb413c 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tasterske prečice",
   "footer.privacy_policy": "Politika privatnosti",
   "footer.source_code": "Prikaži izvorni kod",
+  "footer.status": "Status",
   "generic.saved": "Sačuvano",
   "getting_started.heading": "Prvi koraci",
   "hashtag.column_header.tag_mode.all": "i {additional}",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index be36045c2..ea39d230a 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Тастерске пречице",
   "footer.privacy_policy": "Политика приватности",
   "footer.source_code": "Прикажи изворни код",
+  "footer.status": "Статус",
   "generic.saved": "Сачувано",
   "getting_started.heading": "Први кораци",
   "hashtag.column_header.tag_mode.all": "и {additional}",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 2d6cd4ab1..75a9467be 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Tangentbordsgenvägar",
   "footer.privacy_policy": "Integritetspolicy",
   "footer.source_code": "Visa källkod",
+  "footer.status": "Status",
   "generic.saved": "Sparad",
   "getting_started.heading": "Kom igång",
   "hashtag.column_header.tag_mode.all": "och {additional}",
diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json
index 08145fe8c..9d23c3dd0 100644
--- a/app/javascript/mastodon/locales/szl.json
+++ b/app/javascript/mastodon/locales/szl.json
@@ -1,28 +1,28 @@
 {
-  "about.blocks": "Moderated servers",
-  "about.contact": "Contact:",
-  "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.",
-  "about.domain_blocks.no_reason_available": "Reason not available",
-  "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.",
-  "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.",
-  "about.domain_blocks.silenced.title": "Limited",
-  "about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.",
-  "about.domain_blocks.suspended.title": "Suspended",
-  "about.not_available": "This information has not been made available on this server.",
+  "about.blocks": "Moderowane serwery",
+  "about.contact": "Kōntakt:",
+  "about.disclaimer": "Mastodōn je wolnym a ôtwartozdrzōdłowym ôprogramowaniym ôraz znakiym towarowym ôd Mastodon gGmbH.",
+  "about.domain_blocks.no_reason_available": "Grund niydostympny",
+  "about.domain_blocks.preamble": "Mastodōn normalniy pozwŏlŏ na ôglōndaniy treściōw a interakcyje ze używŏczami inkszych serwerōw we fediverse, ale sōm ôd tygo wyjōntki, kere bōły poczyniōne na tym serwerze.",
+  "about.domain_blocks.silenced.explanation": "Normalniy niy bydziesz widzieć profilōw a treściōw ze tygo serwera. Ôboczysz je ino jak specjalniy bydziesz ich szukać abo jak je zaôbserwujesz.",
+  "about.domain_blocks.silenced.title": "Ôgraniczone",
+  "about.domain_blocks.suspended.explanation": "Żŏdne dane ze tygo serwera niy bydōm przetwarzane, przechowywane abo wymieniane, beztoż wszelakŏ interakcyjŏ abo komunikacyjŏ ze używŏczami tygo serwera bydzie niymożliwŏ.",
+  "about.domain_blocks.suspended.title": "Zawiyszōne",
+  "about.not_available": "Ta informacyjŏ niy bōła udostympniōna na tym serwerze.",
   "about.powered_by": "Decentralized social media powered by {mastodon}",
-  "about.rules": "Server rules",
-  "account.account_note_header": "Note",
+  "about.rules": "Zasady serwera",
+  "account.account_note_header": "Notatka",
   "account.add_or_remove_from_list": "Add or Remove from lists",
   "account.badges.bot": "Bot",
-  "account.badges.group": "Group",
-  "account.block": "Block @{name}",
-  "account.block_domain": "Block domain {domain}",
+  "account.badges.group": "Grupa",
+  "account.block": "Zablokuj @{name}",
+  "account.block_domain": "Zablokuj domena {domain}",
   "account.blocked": "Blocked",
-  "account.browse_more_on_origin_server": "Browse more on the original profile",
+  "account.browse_more_on_origin_server": "Ôbocz wiyncyj we ôryginalnym profilu",
   "account.cancel_follow_request": "Withdraw follow request",
   "account.direct": "Direct message @{name}",
   "account.disable_notifications": "Stop notifying me when @{name} posts",
-  "account.domain_blocked": "Domain blocked",
+  "account.domain_blocked": "Domena zablokowanŏ",
   "account.edit_profile": "Edit profile",
   "account.enable_notifications": "Notify me when @{name} posts",
   "account.endorse": "Feature on profile",
@@ -43,11 +43,11 @@
   "account.languages": "Change subscribed languages",
   "account.link_verified_on": "Ownership of this link was checked on {date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
-  "account.media": "Media",
+  "account.media": "Mydia",
   "account.mention": "Mention @{name}",
   "account.moved_to": "{name} has indicated that their new account is now:",
-  "account.mute": "Mute @{name}",
-  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.mute": "Wycisz @{name}",
+  "account.mute_notifications": "Wycisz powiadōmiynia ôd @{name}",
   "account.muted": "Muted",
   "account.open_original_page": "Open original page",
   "account.posts": "Toots",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 06e169da5..0cd309ed8 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "சேமிக்கப்பட்டது",
   "getting_started.heading": "முதன்மைப் பக்கம்",
   "hashtag.column_header.tag_mode.all": "மற்றும் {additional}",
diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json
index 43b30eb9a..875a8c944 100644
--- a/app/javascript/mastodon/locales/tai.json
+++ b/app/javascript/mastodon/locales/tai.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 3fdd55233..f4e3b7ff2 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "మొదలుపెడదాం",
   "hashtag.column_header.tag_mode.all": "మరియు {additional}",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 9598c6a19..aaac5b784 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "แป้นพิมพ์ลัด",
   "footer.privacy_policy": "นโยบายความเป็นส่วนตัว",
   "footer.source_code": "ดูโค้ดต้นฉบับ",
+  "footer.status": "สถานะ",
   "generic.saved": "บันทึกแล้ว",
   "getting_started.heading": "เริ่มต้นใช้งาน",
   "hashtag.column_header.tag_mode.all": "และ {additional}",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 60cb03a84..5d085495b 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -58,7 +58,7 @@
   "account.share": "@{name} adlı kişinin profilini paylaş",
   "account.show_reblogs": "@{name} kişisinin boostlarını göster",
   "account.statuses_counter": "{count, plural, one {{counter} Gönderi} other {{counter} Gönderi}}",
-  "account.unblock": "@{name}'in engelini kaldır",
+  "account.unblock": "@{name} adlı kişinin engelini kaldır",
   "account.unblock_domain": "{domain} alan adının engelini kaldır",
   "account.unblock_short": "Engeli kaldır",
   "account.unendorse": "Profilimde öne çıkarma",
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Klavye kısayolları",
   "footer.privacy_policy": "Gizlilik politikası",
   "footer.source_code": "Kaynak kodu görüntüle",
+  "footer.status": "Durum",
   "generic.saved": "Kaydedildi",
   "getting_started.heading": "Başlarken",
   "hashtag.column_header.tag_mode.all": "ve {additional}",
diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json
index 1922e5890..76009ba1e 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Клавиатура кыска юллары",
   "footer.privacy_policy": "Хосусыйлык сәясәте",
   "footer.source_code": "Чыганак кодын карау",
+  "footer.status": "Status",
   "generic.saved": "Сакланды",
   "getting_started.heading": "Эшкә урнашу",
   "hashtag.column_header.tag_mode.all": "һәм {additional}",
diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json
index 08145fe8c..e22ab1f22 100644
--- a/app/javascript/mastodon/locales/ug.json
+++ b/app/javascript/mastodon/locales/ug.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "and {additional}",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 0528c3c2a..7f509d039 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Комбінації клавіш",
   "footer.privacy_policy": "Політика приватності",
   "footer.source_code": "Перегляд програмного коду",
+  "footer.status": "Статус",
   "generic.saved": "Збережено",
   "getting_started.heading": "Розпочати",
   "hashtag.column_header.tag_mode.all": "та {additional}",
diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json
index cd94b3275..8980ca531 100644
--- a/app/javascript/mastodon/locales/ur.json
+++ b/app/javascript/mastodon/locales/ur.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "آغاز کریں",
   "hashtag.column_header.tag_mode.all": "اور {additional}",
diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json
index 118d8be0c..0f450b32a 100644
--- a/app/javascript/mastodon/locales/uz.json
+++ b/app/javascript/mastodon/locales/uz.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Klaviatura yorliqlari",
   "footer.privacy_policy": "Maxfiylik siyosati",
   "footer.source_code": "Kodini ko'rish",
+  "footer.status": "Status",
   "generic.saved": "Saqlandi",
   "getting_started.heading": "Ishni boshlash",
   "hashtag.column_header.tag_mode.all": "va {additional}",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 0798d7b26..4ee65e72a 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Phím tắt",
   "footer.privacy_policy": "Chính sách bảo mật",
   "footer.source_code": "Mã nguồn",
+  "footer.status": "Trạng thái",
   "generic.saved": "Đã lưu",
   "getting_started.heading": "Quản lý",
   "hashtag.column_header.tag_mode.all": "và {additional}",
diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json
index 35b6b7200..4f190a4bc 100644
--- a/app/javascript/mastodon/locales/zgh.json
+++ b/app/javascript/mastodon/locales/zgh.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "Keyboard shortcuts",
   "footer.privacy_policy": "Privacy policy",
   "footer.source_code": "View source code",
+  "footer.status": "Status",
   "generic.saved": "Saved",
   "getting_started.heading": "Getting started",
   "hashtag.column_header.tag_mode.all": "ⴷ {additional}",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index ea1ae3179..2cfed5224 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "快捷键列表",
   "footer.privacy_policy": "隐私政策",
   "footer.source_code": "查看源代码",
+  "footer.status": "状态",
   "generic.saved": "已保存",
   "getting_started.heading": "开始使用",
   "hashtag.column_header.tag_mode.all": "以及 {additional}",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 931221484..f99a1c00c 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "鍵盤快速鍵",
   "footer.privacy_policy": "私隱政策",
   "footer.source_code": "查看原始碼",
+  "footer.status": "Status",
   "generic.saved": "已儲存",
   "getting_started.heading": "開始使用",
   "hashtag.column_header.tag_mode.all": "以及{additional}",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 63ee6ec6b..1e8dd8051 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -272,6 +272,7 @@
   "footer.keyboard_shortcuts": "鍵盤快速鍵",
   "footer.privacy_policy": "隱私權政策",
   "footer.source_code": "檢視原始碼",
+  "footer.status": "狀態",
   "generic.saved": "已儲存",
   "getting_started.heading": "開始使用",
   "hashtag.column_header.tag_mode.all": "以及 {additional}",
diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js
index 77faa96a4..783d748ae 100644
--- a/app/javascript/mastodon/reducers/compose.js
+++ b/app/javascript/mastodon/reducers/compose.js
@@ -330,6 +330,8 @@ export default function compose(state = initialState, action) {
       map.set('preselectDate', new Date());
       map.set('idempotencyKey', uuid());
 
+      map.update('media_attachments', list => list.filter(media => media.get('unattached')));
+
       if (action.status.get('language') && !action.status.has('translation')) {
         map.set('language', action.status.get('language'));
       } else {
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 32a387a4e..25cbbf000 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -5798,6 +5798,7 @@ a.status-card.compact:hover {
   &__container {
     padding: 30px;
     pointer-events: all;
+    overflow-y: auto;
   }
 
   .status__content {
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index f4c67cccd..900428e92 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -106,7 +106,8 @@ class ActivityPub::Activity
       actor_id = value_or_id(first_of_value(@object['attributedTo']))
 
       if actor_id == @account.uri
-        return ActivityPub::Activity.factory({ 'type' => 'Create', 'actor' => actor_id, 'object' => @object }, @account).perform
+        virtual_object = { 'type' => 'Create', 'actor' => actor_id, 'object' => @object }
+        return ActivityPub::Activity.factory(virtual_object, @account, request_id: @options[:request_id]).perform
       end
     end
 
@@ -152,9 +153,9 @@ class ActivityPub::Activity
   def fetch_remote_original_status
     if object_uri.start_with?('http')
       return if ActivityPub::TagManager.instance.local_uri?(object_uri)
-      ActivityPub::FetchRemoteStatusService.new.call(object_uri, id: true, on_behalf_of: @account.followers.local.first)
+      ActivityPub::FetchRemoteStatusService.new.call(object_uri, id: true, on_behalf_of: @account.followers.local.first, request_id: @options[:request_id])
     elsif @object['url'].present?
-      ::FetchRemoteStatusService.new.call(@object['url'])
+      ::FetchRemoteStatusService.new.call(@object['url'], request_id: @options[:request_id])
     end
   end
 
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 4dfbfc665..bda6e9c8b 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -285,7 +285,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 
     media_attachments
   rescue Addressable::URI::InvalidURIError => e
-    Rails.logger.debug "Invalid URL in attachment: #{e}"
+    Rails.logger.debug { "Invalid URL in attachment: #{e}" }
     media_attachments
   end
 
@@ -327,18 +327,18 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
   def resolve_thread(status)
     return unless status.reply? && status.thread.nil? && Request.valid_url?(in_reply_to_uri)
 
-    ThreadResolveWorker.perform_async(status.id, in_reply_to_uri)
+    ThreadResolveWorker.perform_async(status.id, in_reply_to_uri, { 'request_id' => @options[:request_id]})
   end
 
   def fetch_replies(status)
     collection = @object['replies']
     return if collection.nil?
 
-    replies = ActivityPub::FetchRepliesService.new.call(status, collection, false)
+    replies = ActivityPub::FetchRepliesService.new.call(status, collection, allow_synchronous_requests: false, request_id: @options[:request_id])
     return unless replies.nil?
 
     uri = value_or_id(collection)
-    ActivityPub::FetchRepliesWorker.perform_async(status.id, uri) unless uri.nil?
+    ActivityPub::FetchRepliesWorker.perform_async(status.id, uri, { 'request_id' => @options[:request_id]}) unless uri.nil?
   end
 
   def conversation_from_uri(uri)
diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb
index 66c1fd8c0..c90716632 100644
--- a/app/lib/delivery_failure_tracker.rb
+++ b/app/lib/delivery_failure_tracker.rb
@@ -6,7 +6,7 @@ class DeliveryFailureTracker
   FAILURE_DAYS_THRESHOLD = 7
 
   def initialize(url_or_host)
-    @host = url_or_host.start_with?('https://') || url_or_host.start_with?('http://') ? Addressable::URI.parse(url_or_host).normalized_host : url_or_host
+    @host = url_or_host.start_with?('https://', 'http://') ? Addressable::URI.parse(url_or_host).normalized_host : url_or_host
   end
 
   def track_failure!
diff --git a/app/lib/extractor.rb b/app/lib/extractor.rb
index aea60dae5..ead4cdddd 100644
--- a/app/lib/extractor.rb
+++ b/app/lib/extractor.rb
@@ -18,7 +18,7 @@ module Extractor
     return [] if entities.empty?
 
     entities = remove_overlapping_entities(entities)
-    entities.each(&block) if block_given?
+    entities.each(&block) if block
     entities
   end
 
diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb
index b0c4e4f42..2e0672abe 100644
--- a/app/lib/link_details_extractor.rb
+++ b/app/lib/link_details_extractor.rb
@@ -248,7 +248,7 @@ class LinkDetailsExtractor
 
         structured_data
       rescue Oj::ParseError, EncodingError
-        Rails.logger.debug("Invalid JSON-LD in #{@original_url}")
+        Rails.logger.debug { "Invalid JSON-LD in #{@original_url}" }
         next
       end.first
     end
diff --git a/app/lib/scope_transformer.rb b/app/lib/scope_transformer.rb
index fdfc6cf13..adcb711f8 100644
--- a/app/lib/scope_transformer.rb
+++ b/app/lib/scope_transformer.rb
@@ -28,7 +28,7 @@ class ScopeTransformer < Parslet::Transform
     def merge!(other_scope)
       raise ArgumentError unless other_scope.namespace == namespace && other_scope.term == term
 
-      @access.concat(other_scope.instance_variable_get('@access'))
+      @access.concat(other_scope.instance_variable_get(:@access))
       @access.uniq!
       @access.sort!
 
diff --git a/app/lib/vacuum/access_tokens_vacuum.rb b/app/lib/vacuum/access_tokens_vacuum.rb
index 4f3878027..7b91f74a5 100644
--- a/app/lib/vacuum/access_tokens_vacuum.rb
+++ b/app/lib/vacuum/access_tokens_vacuum.rb
@@ -9,10 +9,10 @@ class Vacuum::AccessTokensVacuum
   private
 
   def vacuum_revoked_access_tokens!
-    Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
+    Doorkeeper::AccessToken.where.not(revoked_at: nil).where('revoked_at < NOW()').delete_all
   end
 
   def vacuum_revoked_access_grants!
-    Doorkeeper::AccessGrant.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
+    Doorkeeper::AccessGrant.where.not(revoked_at: nil).where('revoked_at < NOW()').delete_all
   end
 end
diff --git a/app/models/account_suggestions/setting_source.rb b/app/models/account_suggestions/setting_source.rb
index be9eff233..7b8873e0c 100644
--- a/app/models/account_suggestions/setting_source.rb
+++ b/app/models/account_suggestions/setting_source.rb
@@ -54,7 +54,7 @@ class AccountSuggestions::SettingSource < AccountSuggestions::Source
 
       next if username.blank?
 
-      [username, domain]
+      [username.downcase, domain&.downcase]
     end.compact
   end
 
@@ -63,6 +63,6 @@ class AccountSuggestions::SettingSource < AccountSuggestions::Source
   end
 
   def to_ordered_list_key(account)
-    [account.username, account.domain]
+    [account.username.downcase, account.domain&.downcase]
   end
 end
diff --git a/app/models/concerns/omniauthable.rb b/app/models/concerns/omniauthable.rb
index feac0a1f5..7d54e9d6d 100644
--- a/app/models/concerns/omniauthable.rb
+++ b/app/models/concerns/omniauthable.rb
@@ -97,8 +97,7 @@ module Omniauthable
     def ensure_valid_username(starting_username)
       starting_username = starting_username.split('@')[0]
       temp_username = starting_username.gsub(/[^a-z0-9_]+/i, '')
-      validated_username = temp_username.truncate(30, omission: '')
-      validated_username
+      temp_username.truncate(30, omission: '')
     end
   end
 end
diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb
index ffe8a7565..cb8f46e68 100644
--- a/app/models/concerns/remotable.rb
+++ b/app/models/concerns/remotable.rb
@@ -27,11 +27,11 @@ module Remotable
             public_send("#{attachment_name}=", ResponseWithLimit.new(response, limit))
           end
         rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e
-          Rails.logger.debug "Error fetching remote #{attachment_name}: #{e}"
+          Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" }
           public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present?
           raise e unless suppress_errors
         rescue Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Paperclip::Error, Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => e
-          Rails.logger.debug "Error fetching remote #{attachment_name}: #{e}"
+          Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" }
           public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present?
         end
 
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index f76ee42e7..62a96528d 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -40,6 +40,7 @@ class Form::AdminSettings
     media_cache_retention_period
     content_cache_retention_period
     backups_retention_period
+    status_page_url
   ).freeze
 
   INTEGER_KEYS = %i(
@@ -85,6 +86,7 @@ class Form::AdminSettings
   validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks_rationale) }
   validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true, if: -> { defined?(@media_cache_retention_period) || defined?(@content_cache_retention_period) || defined?(@backups_retention_period) }
   validates :site_short_description, length: { maximum: 200 }, if: -> { defined?(@site_short_description) }
+  validates :status_page_url, url: true, allow_blank: true
   validate :validate_site_uploads
 
   KEYS.each do |key|
diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb
index 3a59bad93..0b7fa6fe4 100644
--- a/app/models/session_activation.rb
+++ b/app/models/session_activation.rb
@@ -59,7 +59,7 @@ class SessionActivation < ApplicationRecord
     end
 
     def exclusive(id)
-      where('session_id != ?', id).destroy_all
+      where.not(session_id: id).destroy_all
     end
   end
 
diff --git a/app/models/setting.rb b/app/models/setting.rb
index 4bcaa060f..c6558d692 100644
--- a/app/models/setting.rb
+++ b/app/models/setting.rb
@@ -23,7 +23,7 @@ class Setting < RailsSettings::Base
     def [](key)
       return super(key) unless rails_initialized?
 
-      val = Rails.cache.fetch(cache_key(key, nil)) do
+      Rails.cache.fetch(cache_key(key, nil)) do
         db_val = object(key)
 
         if db_val
@@ -35,7 +35,6 @@ class Setting < RailsSettings::Base
           default_settings[key]
         end
       end
-      val
     end
 
     def all_as_records
diff --git a/app/models/trends/history.rb b/app/models/trends/history.rb
index 74723e35c..83532e7bc 100644
--- a/app/models/trends/history.rb
+++ b/app/models/trends/history.rb
@@ -87,8 +87,8 @@ class Trends::History
   end
 
   def each(&block)
-    if block_given?
-      (0...7).map { |i| block.call(get(i.days.ago)) }
+    if block
+      (0...7).map { |i| yield(get(i.days.ago)) }
     else
       to_enum(:each)
     end
diff --git a/app/models/user.rb b/app/models/user.rb
index a813ac83c..5ac1f663c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -266,7 +266,7 @@ class User < ApplicationRecord
   end
 
   def inactive_message
-    !approved? ? :pending : super
+    approved? ? super : :pending
   end
 
   def approve!
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index fba3cc734..e3ba984f7 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -38,6 +38,10 @@ class InstancePresenter < ActiveModelSerializers::Model
     Setting.site_terms
   end
 
+  def status_page_url
+    Setting.status_page_url
+  end
+
   def domain
     Rails.configuration.x.local_domain
   end
diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb
index c45de4e06..8243a103f 100644
--- a/app/serializers/initial_state_serializer.rb
+++ b/app/serializers/initial_state_serializer.rb
@@ -47,6 +47,7 @@ class InitialStateSerializer < ActiveModel::Serializer
       single_user_mode: Rails.configuration.x.single_user_mode,
       translation_enabled: TranslationService.configured?,
       trends_as_landing_page: Setting.trends_as_landing_page,
+      status_page_url: Setting.status_page_url,
     }
 
     if object.current_account
diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb
index c4e281b80..b95a61e89 100644
--- a/app/serializers/rest/account_serializer.rb
+++ b/app/serializers/rest/account_serializer.rb
@@ -129,10 +129,10 @@ class REST::AccountSerializer < ActiveModel::Serializer
   end
 
   def roles
-    if object.suspended?
+    if object.suspended? || object.user.nil?
       []
     else
-      [object.user.role].compact.filter { |role| role.highlighted? }
+      [object.user.role].compact.filter(&:highlighted?)
     end
   end
 
diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb
index 24a1c1ae6..c97db9c5f 100644
--- a/app/serializers/rest/instance_serializer.rb
+++ b/app/serializers/rest/instance_serializer.rb
@@ -45,6 +45,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
     {
       urls: {
         streaming: Rails.configuration.x.streaming_api_base_url,
+        status: object.status_page_url,
       },
 
       accounts: {
@@ -97,8 +98,6 @@ class REST::InstanceSerializer < ActiveModel::Serializer
   def registrations_message
     if Setting.closed_registrations_message.present?
       markdown.render(Setting.closed_registrations_message)
-    else
-      nil
     end
   end
 
diff --git a/app/services/activitypub/fetch_featured_collection_service.rb b/app/services/activitypub/fetch_featured_collection_service.rb
index a746ef4d6..1208820df 100644
--- a/app/services/activitypub/fetch_featured_collection_service.rb
+++ b/app/services/activitypub/fetch_featured_collection_service.rb
@@ -53,7 +53,7 @@ class ActivityPub::FetchFeaturedCollectionService < BaseService
 
       status.id
     rescue ActiveRecord::RecordInvalid => e
-      Rails.logger.debug "Invalid pinned status #{uri}: #{e.message}"
+      Rails.logger.debug { "Invalid pinned status #{uri}: #{e.message}" }
       nil
     end
 
diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb
index 7aba8269e..567dd8a14 100644
--- a/app/services/activitypub/fetch_remote_account_service.rb
+++ b/app/services/activitypub/fetch_remote_account_service.rb
@@ -6,7 +6,7 @@ class ActivityPub::FetchRemoteAccountService < ActivityPub::FetchRemoteActorServ
     actor = super
     return actor if actor.nil? || actor.is_a?(Account)
 
-    Rails.logger.debug "Fetching account #{uri} failed: Expected Account, got #{actor.class.name}"
+    Rails.logger.debug { "Fetching account #{uri} failed: Expected Account, got #{actor.class.name}" }
     raise Error, "Expected Account, got #{actor.class.name}" unless suppress_errors
   end
 end
diff --git a/app/services/activitypub/fetch_remote_actor_service.rb b/app/services/activitypub/fetch_remote_actor_service.rb
index 4f60ea5e8..8908d21e2 100644
--- a/app/services/activitypub/fetch_remote_actor_service.rb
+++ b/app/services/activitypub/fetch_remote_actor_service.rb
@@ -38,7 +38,7 @@ class ActivityPub::FetchRemoteActorService < BaseService
 
     ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key, verified_webfinger: !only_key, request_id: request_id)
   rescue Error => e
-    Rails.logger.debug "Fetching actor #{uri} failed: #{e.message}"
+    Rails.logger.debug { "Fetching actor #{uri} failed: #{e.message}" }
     raise unless suppress_errors
   end
 
diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb
index 32e82b47a..8eb97c1e6 100644
--- a/app/services/activitypub/fetch_remote_key_service.rb
+++ b/app/services/activitypub/fetch_remote_key_service.rb
@@ -38,7 +38,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService
 
     find_actor(owner_uri, @owner, suppress_errors)
   rescue Error => e
-    Rails.logger.debug "Fetching key #{uri} failed: #{e.message}"
+    Rails.logger.debug { "Fetching key #{uri} failed: #{e.message}" }
     raise unless suppress_errors
   end
 
diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb
index 21b9242f8..936737bf6 100644
--- a/app/services/activitypub/fetch_remote_status_service.rb
+++ b/app/services/activitypub/fetch_remote_status_service.rb
@@ -2,10 +2,13 @@
 
 class ActivityPub::FetchRemoteStatusService < BaseService
   include JsonLdHelper
+  include Redisable
+
+  DISCOVERIES_PER_REQUEST = 1000
 
   # Should be called when uri has already been checked for locality
   def call(uri, id: true, prefetched_body: nil, on_behalf_of: nil, expected_actor_uri: nil, request_id: nil)
-    @request_id = request_id
+    @request_id = request_id || "#{Time.now.utc.to_i}-status-#{uri}"
     @json = begin
       if prefetched_body.nil?
         fetch_resource(uri, id, on_behalf_of)
@@ -42,7 +45,13 @@ class ActivityPub::FetchRemoteStatusService < BaseService
     # activity as an update rather than create
     activity_json['type'] = 'Update' if equals_or_includes_any?(activity_json['type'], %w(Create)) && Status.where(uri: object_uri, account_id: actor.id).exists?
 
-    ActivityPub::Activity.factory(activity_json, actor, request_id: request_id).perform
+    with_redis do |redis|
+      discoveries = redis.incr("status_discovery_per_request:#{@request_id}")
+      redis.expire("status_discovery_per_request:#{@request_id}", 5.minutes.seconds)
+      return nil if discoveries > DISCOVERIES_PER_REQUEST
+    end
+
+    ActivityPub::Activity.factory(activity_json, actor, request_id: @request_id).perform
   end
 
   private
diff --git a/app/services/activitypub/fetch_replies_service.rb b/app/services/activitypub/fetch_replies_service.rb
index 8cb309e52..18a27e851 100644
--- a/app/services/activitypub/fetch_replies_service.rb
+++ b/app/services/activitypub/fetch_replies_service.rb
@@ -3,14 +3,14 @@
 class ActivityPub::FetchRepliesService < BaseService
   include JsonLdHelper
 
-  def call(parent_status, collection_or_uri, allow_synchronous_requests = true)
+  def call(parent_status, collection_or_uri, allow_synchronous_requests: true, request_id: nil)
     @account = parent_status.account
     @allow_synchronous_requests = allow_synchronous_requests
 
     @items = collection_items(collection_or_uri)
     return if @items.nil?
 
-    FetchReplyWorker.push_bulk(filtered_replies)
+    FetchReplyWorker.push_bulk(filtered_replies) { |reply_uri| [reply_uri, { 'request_id' => request_id}] }
 
     @items
   end
diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb
index fffe30195..52f48bd49 100644
--- a/app/services/activitypub/process_collection_service.rb
+++ b/app/services/activitypub/process_collection_service.rb
@@ -11,7 +11,7 @@ class ActivityPub::ProcessCollectionService < BaseService
     begin
       @json = compact(@json) if @json['signature'].is_a?(Hash)
     rescue JSON::LD::JsonLdError => e
-      Rails.logger.debug "Error when compacting JSON-LD document for #{value_or_id(@json['actor'])}: #{e.message}"
+      Rails.logger.debug { "Error when compacting JSON-LD document for #{value_or_id(@json['actor'])}: #{e.message}" }
       @json = original_json.without('signature')
     end
 
@@ -71,8 +71,8 @@ class ActivityPub::ProcessCollectionService < BaseService
     @account = ActivityPub::LinkedDataSignature.new(@json).verify_actor!
     @account = nil unless @account.is_a?(Account)
     @account
-  rescue JSON::LD::JsonLdError => e
-    Rails.logger.debug "Could not verify LD-Signature for #{value_or_id(@json['actor'])}: #{e.message}"
+  rescue JSON::LD::JsonLdError, RDF::WriterError => e
+    Rails.logger.debug { "Could not verify LD-Signature for #{value_or_id(@json['actor'])}: #{e.message}" }
     nil
   end
 end
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 11b38ab92..1dc393e28 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -94,7 +94,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
 
         @next_media_attachments << media_attachment
       rescue Addressable::URI::InvalidURIError => e
-        Rails.logger.debug "Invalid URL in attachment: #{e}"
+        Rails.logger.debug { "Invalid URL in attachment: #{e}" }
       end
     end
 
diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb
index e5b5b730e..4d55aa5e2 100644
--- a/app/services/fetch_link_card_service.rb
+++ b/app/services/fetch_link_card_service.rb
@@ -30,7 +30,7 @@ class FetchLinkCardService < BaseService
 
     attach_card if @card&.persisted?
   rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e
-    Rails.logger.debug "Error fetching link #{@original_url}: #{e}"
+    Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" }
     nil
   end
 
diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb
index 7d0879c79..9851ac098 100644
--- a/app/services/fetch_oembed_service.rb
+++ b/app/services/fetch_oembed_service.rb
@@ -82,7 +82,7 @@ class FetchOEmbedService
     return if @endpoint_url.blank?
 
     body = Request.new(:get, @endpoint_url).perform do |res|
-      res.code != 200 ? nil : res.body_with_limit
+      res.code == 200 ? res.body_with_limit : nil
     end
 
     validate(parse_for_format(body)) if body.present?
diff --git a/app/services/fetch_remote_status_service.rb b/app/services/fetch_remote_status_service.rb
index eafde4d4a..08c2d24ba 100644
--- a/app/services/fetch_remote_status_service.rb
+++ b/app/services/fetch_remote_status_service.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 class FetchRemoteStatusService < BaseService
-  def call(url, prefetched_body = nil)
+  def call(url, prefetched_body: nil, request_id: nil)
     if prefetched_body.nil?
       resource_url, resource_options = FetchResourceService.new.call(url)
     else
@@ -9,6 +9,6 @@ class FetchRemoteStatusService < BaseService
       resource_options = { prefetched_body: prefetched_body }
     end
 
-    ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options) unless resource_url.nil?
+    ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options.merge(request_id: request_id)) unless resource_url.nil?
   end
 end
diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb
index 73204e55d..4470fca01 100644
--- a/app/services/fetch_resource_service.rb
+++ b/app/services/fetch_resource_service.rb
@@ -12,7 +12,7 @@ class FetchResourceService < BaseService
 
     process(url)
   rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e
-    Rails.logger.debug "Error fetching resource #{@url}: #{e}"
+    Rails.logger.debug { "Error fetching resource #{@url}: #{e}" }
     nil
   end
 
diff --git a/app/services/keys/claim_service.rb b/app/services/keys/claim_service.rb
index ae9e24a24..0451c3cb1 100644
--- a/app/services/keys/claim_service.rb
+++ b/app/services/keys/claim_service.rb
@@ -58,7 +58,7 @@ class Keys::ClaimService < BaseService
 
     @result = Result.new(@target_account, @device_id, key_id: json['id'], key: json['publicKeyBase64'], signature: json.dig('signature', 'signatureValue'))
   rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error => e
-    Rails.logger.debug "Claiming one-time key for #{@target_account.acct}:#{@device_id} failed: #{e}"
+    Rails.logger.debug { "Claiming one-time key for #{@target_account.acct}:#{@device_id} failed: #{e}" }
     nil
   end
 
diff --git a/app/services/keys/query_service.rb b/app/services/keys/query_service.rb
index ac3388bdc..404854c9f 100644
--- a/app/services/keys/query_service.rb
+++ b/app/services/keys/query_service.rb
@@ -73,7 +73,7 @@ class Keys::QueryService < BaseService
       Device.new(device_id: device['id'], name: device['name'], identity_key: device.dig('identityKey', 'publicKeyBase64'), fingerprint_key: device.dig('fingerprintKey', 'publicKeyBase64'), claim_url: device['claim'])
     end
   rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error => e
-    Rails.logger.debug "Querying devices for #{@account.acct} failed: #{e}"
+    Rails.logger.debug { "Querying devices for #{@account.acct} failed: #{e}" }
     nil
   end
 end
diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb
index d8b81a7b9..1ba372cd6 100644
--- a/app/services/resolve_account_service.rb
+++ b/app/services/resolve_account_service.rb
@@ -54,7 +54,7 @@ class ResolveAccountService < BaseService
 
     fetch_account!
   rescue Webfinger::Error => e
-    Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}"
+    Rails.logger.debug { "Webfinger query for #{@uri} failed: #{e}" }
     raise unless @options[:suppress_errors]
   end
 
diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb
index 52f35daf3..d8e795f3b 100644
--- a/app/services/resolve_url_service.rb
+++ b/app/services/resolve_url_service.rb
@@ -25,7 +25,7 @@ class ResolveURLService < BaseService
     if equals_or_includes_any?(type, ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES)
       ActivityPub::FetchRemoteActorService.new.call(resource_url, prefetched_body: body)
     elsif equals_or_includes_any?(type, ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES)
-      status = FetchRemoteStatusService.new.call(resource_url, body)
+      status = FetchRemoteStatusService.new.call(resource_url, prefetched_body: body)
       authorize_with @on_behalf_of, status, :show? unless status.nil?
       status
     end
diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb
index 9708cdd73..707aeb4e0 100644
--- a/app/services/verify_link_service.rb
+++ b/app/services/verify_link_service.rb
@@ -11,7 +11,7 @@ class VerifyLinkService < BaseService
 
     field.mark_verified!
   rescue OpenSSL::SSL::SSLError, HTTP::Error, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e
-    Rails.logger.debug "Error fetching link #{@url}: #{e}"
+    Rails.logger.debug { "Error fetching link #{@url}: #{e}" }
     nil
   end
 
@@ -19,7 +19,7 @@ class VerifyLinkService < BaseService
 
   def perform_request!
     @body = Request.new(:get, @url).add_headers('Accept' => 'text/html').perform do |res|
-      res.code != 200 ? nil : res.body_with_limit
+      res.code == 200 ? res.body_with_limit : nil
     end
   end
 
diff --git a/app/views/admin/settings/about/show.html.haml b/app/views/admin/settings/about/show.html.haml
index 6ee719e36..cbba20faa 100644
--- a/app/views/admin/settings/about/show.html.haml
+++ b/app/views/admin/settings/about/show.html.haml
@@ -24,6 +24,9 @@
       = f.input :show_domain_blocks_rationale, wrapper: :with_label, collection: %i(disabled users all), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
 
   .fields-group
+    = f.input :status_page_url, wrapper: :with_block_label, input_html: { placeholder: "https://status.#{Rails.configuration.x.local_domain}" }
+
+  .fields-group
     = f.input :site_terms, wrapper: :with_block_label, as: :text, input_html: { rows: 8 }
 
   .actions
diff --git a/app/workers/activitypub/fetch_replies_worker.rb b/app/workers/activitypub/fetch_replies_worker.rb
index 54d98f228..d72bad745 100644
--- a/app/workers/activitypub/fetch_replies_worker.rb
+++ b/app/workers/activitypub/fetch_replies_worker.rb
@@ -6,8 +6,8 @@ class ActivityPub::FetchRepliesWorker
 
   sidekiq_options queue: 'pull', retry: 3
 
-  def perform(parent_status_id, replies_uri)
-    ActivityPub::FetchRepliesService.new.call(Status.find(parent_status_id), replies_uri)
+  def perform(parent_status_id, replies_uri, options = {})
+    ActivityPub::FetchRepliesService.new.call(Status.find(parent_status_id), replies_uri, **options.deep_symbolize_keys)
   rescue ActiveRecord::RecordNotFound
     true
   end
diff --git a/app/workers/activitypub/processing_worker.rb b/app/workers/activitypub/processing_worker.rb
index 5e36fab51..1bb94b7f2 100644
--- a/app/workers/activitypub/processing_worker.rb
+++ b/app/workers/activitypub/processing_worker.rb
@@ -15,6 +15,6 @@ class ActivityPub::ProcessingWorker
 
     ActivityPub::ProcessCollectionService.new.call(body, actor, override_timestamps: true, delivered_to_account_id: delivered_to_account_id, delivery: true)
   rescue ActiveRecord::RecordInvalid => e
-    Rails.logger.debug "Error processing incoming ActivityPub object: #{e}"
+    Rails.logger.debug { "Error processing incoming ActivityPub object: #{e}" }
   end
 end
diff --git a/app/workers/fetch_reply_worker.rb b/app/workers/fetch_reply_worker.rb
index f7aa25e81..68a7414be 100644
--- a/app/workers/fetch_reply_worker.rb
+++ b/app/workers/fetch_reply_worker.rb
@@ -6,7 +6,7 @@ class FetchReplyWorker
 
   sidekiq_options queue: 'pull', retry: 3
 
-  def perform(child_url)
-    FetchRemoteStatusService.new.call(child_url)
+  def perform(child_url, options = {})
+    FetchRemoteStatusService.new.call(child_url, **options.deep_symbolize_keys)
   end
 end
diff --git a/app/workers/import/relationship_worker.rb b/app/workers/import/relationship_worker.rb
index 6791b15c3..c2728c196 100644
--- a/app/workers/import/relationship_worker.rb
+++ b/app/workers/import/relationship_worker.rb
@@ -49,7 +49,7 @@ class Import::RelationshipWorker
         .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
         .run
     else
-      block.call
+      yield
     end
   end
 end
diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb
index 63f9ed78c..45cfbc62e 100644
--- a/app/workers/scheduler/user_cleanup_scheduler.rb
+++ b/app/workers/scheduler/user_cleanup_scheduler.rb
@@ -15,7 +15,7 @@ class Scheduler::UserCleanupScheduler
   def clean_unconfirmed_accounts!
     User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).reorder(nil).find_in_batches do |batch|
       # We have to do it separately because of missing database constraints
-      AccountModerationNote.where(account_id: batch.map(&:account_id)).delete_all
+      AccountModerationNote.where(target_account_id: batch.map(&:account_id)).delete_all
       Account.where(id: batch.map(&:account_id)).delete_all
       User.where(id: batch.map(&:id)).delete_all
     end
diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb
index 1b77dfdd9..3206c45f6 100644
--- a/app/workers/thread_resolve_worker.rb
+++ b/app/workers/thread_resolve_worker.rb
@@ -6,9 +6,9 @@ class ThreadResolveWorker
 
   sidekiq_options queue: 'pull', retry: 3
 
-  def perform(child_status_id, parent_url)
+  def perform(child_status_id, parent_url, options = {})
     child_status  = Status.find(child_status_id)
-    parent_status = FetchRemoteStatusService.new.call(parent_url)
+    parent_status = FetchRemoteStatusService.new.call(parent_url, **options.deep_symbolize_keys)
 
     return if parent_status.nil?