about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorReverite <github@reverite.sh>2019-10-05 12:13:22 -0700
committerReverite <github@reverite.sh>2019-10-05 12:13:22 -0700
commit46ada47e09af0da9c776ef83c0ff034c720a83d6 (patch)
tree54fd4b1d5fba6d592f328955ef5968608bbe716f /app
parent333b5e25f0a615a9518d402ef10dceb70190a52f (diff)
parent3921125e5578fb3871fdcae0e8e8a77179f1ad72 (diff)
Merge branch 'glitch' into production
Diffstat (limited to 'app')
-rw-r--r--app/chewy/statuses_index.rb8
-rw-r--r--app/controllers/accounts_controller.rb8
-rw-r--r--app/controllers/api/v1/accounts_controller.rb2
-rw-r--r--app/helpers/settings_helper.rb15
-rw-r--r--app/javascript/flavours/glitch/features/account_gallery/components/media_item.js4
-rw-r--r--app/javascript/flavours/glitch/features/account_gallery/index.js4
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/search.js16
-rw-r--r--app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js45
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/audio_modal.js53
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/embed_modal.js17
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/media_modal.js2
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/modal_root.js2
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/mute_modal.js2
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/video_modal.js13
-rw-r--r--app/javascript/flavours/glitch/features/ui/index.js2
-rw-r--r--app/javascript/flavours/glitch/reducers/conversations.js3
-rw-r--r--app/javascript/flavours/glitch/styles/about.scss21
-rw-r--r--app/javascript/flavours/glitch/styles/components/index.scss9
-rw-r--r--app/javascript/flavours/glitch/styles/components/media.scss10
-rw-r--r--app/javascript/flavours/glitch/styles/components/modal.scss4
-rw-r--r--app/javascript/flavours/glitch/styles/components/status.scss4
-rw-r--r--app/javascript/flavours/glitch/styles/containers.scss14
-rw-r--r--app/javascript/flavours/glitch/styles/mastodon-light/diff.scss15
-rw-r--r--app/javascript/flavours/glitch/styles/mastodon-light/variables.scss2
-rw-r--r--app/javascript/flavours/glitch/styles/rtl.scss35
-rw-r--r--app/javascript/mastodon/components/error_boundary.js40
-rw-r--r--app/javascript/mastodon/features/account_gallery/components/media_item.js3
-rw-r--r--app/javascript/mastodon/features/account_gallery/index.js4
-rw-r--r--app/javascript/mastodon/features/compose/components/search.js13
-rw-r--r--app/javascript/mastodon/features/direct_timeline/components/conversation.js45
-rw-r--r--app/javascript/mastodon/features/favourites/index.js27
-rw-r--r--app/javascript/mastodon/features/reblogs/index.js27
-rw-r--r--app/javascript/mastodon/features/ui/components/audio_modal.js76
-rw-r--r--app/javascript/mastodon/features/ui/components/embed_modal.js19
-rw-r--r--app/javascript/mastodon/features/ui/components/media_modal.js2
-rw-r--r--app/javascript/mastodon/features/ui/components/modal_root.js2
-rw-r--r--app/javascript/mastodon/features/ui/components/mute_modal.js2
-rw-r--r--app/javascript/mastodon/features/ui/components/video_modal.js13
-rw-r--r--app/javascript/mastodon/features/ui/index.js2
-rw-r--r--app/javascript/mastodon/locales/ar.json12
-rw-r--r--app/javascript/mastodon/locales/ast.json8
-rw-r--r--app/javascript/mastodon/locales/bg.json8
-rw-r--r--app/javascript/mastodon/locales/bn.json8
-rw-r--r--app/javascript/mastodon/locales/br.json8
-rw-r--r--app/javascript/mastodon/locales/ca.json44
-rw-r--r--app/javascript/mastodon/locales/co.json10
-rw-r--r--app/javascript/mastodon/locales/cs.json10
-rw-r--r--app/javascript/mastodon/locales/cy.json12
-rw-r--r--app/javascript/mastodon/locales/da.json8
-rw-r--r--app/javascript/mastodon/locales/de.json10
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json121
-rw-r--r--app/javascript/mastodon/locales/el.json14
-rw-r--r--app/javascript/mastodon/locales/en.json10
-rw-r--r--app/javascript/mastodon/locales/eo.json14
-rw-r--r--app/javascript/mastodon/locales/es-AR.json232
-rw-r--r--app/javascript/mastodon/locales/es.json12
-rw-r--r--app/javascript/mastodon/locales/et.json8
-rw-r--r--app/javascript/mastodon/locales/eu.json8
-rw-r--r--app/javascript/mastodon/locales/fa.json10
-rw-r--r--app/javascript/mastodon/locales/fi.json140
-rw-r--r--app/javascript/mastodon/locales/fr.json12
-rw-r--r--app/javascript/mastodon/locales/ga.json8
-rw-r--r--app/javascript/mastodon/locales/gl.json22
-rw-r--r--app/javascript/mastodon/locales/he.json28
-rw-r--r--app/javascript/mastodon/locales/hi.json8
-rw-r--r--app/javascript/mastodon/locales/hr.json8
-rw-r--r--app/javascript/mastodon/locales/hu.json12
-rw-r--r--app/javascript/mastodon/locales/hy.json8
-rw-r--r--app/javascript/mastodon/locales/id.json120
-rw-r--r--app/javascript/mastodon/locales/io.json8
-rw-r--r--app/javascript/mastodon/locales/it.json12
-rw-r--r--app/javascript/mastodon/locales/ja.json28
-rw-r--r--app/javascript/mastodon/locales/ka.json8
-rw-r--r--app/javascript/mastodon/locales/kk.json8
-rw-r--r--app/javascript/mastodon/locales/ko.json16
-rw-r--r--app/javascript/mastodon/locales/lt.json8
-rw-r--r--app/javascript/mastodon/locales/lv.json8
-rw-r--r--app/javascript/mastodon/locales/mk.json425
-rw-r--r--app/javascript/mastodon/locales/ms.json8
-rw-r--r--app/javascript/mastodon/locales/nl.json10
-rw-r--r--app/javascript/mastodon/locales/nn.json8
-rw-r--r--app/javascript/mastodon/locales/no.json8
-rw-r--r--app/javascript/mastodon/locales/oc.json12
-rw-r--r--app/javascript/mastodon/locales/pl.json8
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json26
-rw-r--r--app/javascript/mastodon/locales/pt-PT.json8
-rw-r--r--app/javascript/mastodon/locales/ro.json8
-rw-r--r--app/javascript/mastodon/locales/ru.json42
-rw-r--r--app/javascript/mastodon/locales/sk.json14
-rw-r--r--app/javascript/mastodon/locales/sl.json8
-rw-r--r--app/javascript/mastodon/locales/sq.json8
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json8
-rw-r--r--app/javascript/mastodon/locales/sr.json8
-rw-r--r--app/javascript/mastodon/locales/sv.json118
-rw-r--r--app/javascript/mastodon/locales/ta.json8
-rw-r--r--app/javascript/mastodon/locales/te.json8
-rw-r--r--app/javascript/mastodon/locales/th.json10
-rw-r--r--app/javascript/mastodon/locales/tr.json26
-rw-r--r--app/javascript/mastodon/locales/uk.json8
-rw-r--r--app/javascript/mastodon/locales/whitelist_mk.json2
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json8
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json8
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json80
-rw-r--r--app/javascript/mastodon/reducers/conversations.js3
-rw-r--r--app/javascript/styles/mastodon-light/diff.scss80
-rw-r--r--app/javascript/styles/mastodon-light/variables.scss2
-rw-r--r--app/javascript/styles/mastodon/about.scss21
-rw-r--r--app/javascript/styles/mastodon/basics.scss74
-rw-r--r--app/javascript/styles/mastodon/components.scss27
-rw-r--r--app/javascript/styles/mastodon/containers.scss14
-rw-r--r--app/javascript/styles/mastodon/rtl.scss35
-rw-r--r--app/models/account.rb2
-rw-r--r--app/models/account_stat.rb24
-rw-r--r--app/models/application_record.rb6
-rw-r--r--app/models/concerns/attachmentable.rb4
-rw-r--r--app/models/favourite.rb2
-rw-r--r--app/models/media_attachment.rb33
-rw-r--r--app/models/status.rb12
-rw-r--r--app/models/tag.rb2
-rw-r--r--app/presenters/instance_presenter.rb2
-rw-r--r--app/serializers/nodeinfo/serializer.rb6
-rw-r--r--app/services/app_sign_up_service.rb7
-rw-r--r--app/services/bootstrap_timeline_service.rb8
-rw-r--r--app/services/fetch_link_card_service.rb6
-rw-r--r--app/services/update_account_service.rb2
-rw-r--r--app/views/about/_domain_blocks.html.haml6
-rw-r--r--app/views/admin/tags/show.html.haml11
-rw-r--r--app/views/invites/_form.html.haml3
-rw-r--r--app/views/invites/_invite.html.haml3
-rw-r--r--app/views/invites/index.html.haml1
-rw-r--r--app/workers/move_worker.rb2
131 files changed, 2205 insertions, 692 deletions
diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb
index b7365d5ca..f5735421c 100644
--- a/app/chewy/statuses_index.rb
+++ b/app/chewy/statuses_index.rb
@@ -31,19 +31,19 @@ class StatusesIndex < Chewy::Index
     },
   }
 
-  define_type ::Status.unscoped.without_reblogs.includes(:media_attachments) do
+  define_type ::Status.unscoped.kept.without_reblogs.includes(:media_attachments), delete_if: ->(status) { status.searchable_by.empty? } do
     crutch :mentions do |collection|
-      data = ::Mention.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id)
+      data = ::Mention.where(status_id: collection.map(&:id)).where(account: Account.local).pluck(:status_id, :account_id)
       data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) }
     end
 
     crutch :favourites do |collection|
-      data = ::Favourite.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id)
+      data = ::Favourite.where(status_id: collection.map(&:id)).where(account: Account.local).pluck(:status_id, :account_id)
       data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) }
     end
 
     crutch :reblogs do |collection|
-      data = ::Status.where(reblog_of_id: collection.map(&:id)).pluck(:reblog_of_id, :account_id)
+      data = ::Status.where(reblog_of_id: collection.map(&:id)).where(account: Account.local).pluck(:reblog_of_id, :account_id)
       data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) }
     end
 
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 1c36813d0..c4ee22847 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -9,7 +9,7 @@ class AccountsController < ApplicationController
   before_action :set_cache_headers
   before_action :set_body_classes
 
-  skip_around_action :set_locale, if: -> { request.format == :json }
+  skip_around_action :set_locale, if: -> { [:json, :rss].include?(request.format) }
   skip_before_action :require_functional!
 
   def show
@@ -39,7 +39,7 @@ class AccountsController < ApplicationController
       end
 
       format.rss do
-        expires_in 0, public: true
+        expires_in 1.minute, public: true
 
         @statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE)
         @statuses = cache_collection(@statuses, Status)
@@ -130,11 +130,11 @@ class AccountsController < ApplicationController
   end
 
   def media_requested?
-    request.path.ends_with?('/media')
+    request.path.ends_with?('/media') && !tag_requested?
   end
 
   def replies_requested?
-    request.path.ends_with?('/with_replies')
+    request.path.ends_with?('/with_replies') && !tag_requested?
   end
 
   def tag_requested?
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index c12e1c12e..d68d2715f 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -78,7 +78,7 @@ class Api::V1::AccountsController < Api::BaseController
   end
 
   def account_params
-    params.permit(:username, :email, :password, :agreement, :locale)
+    params.permit(:username, :email, :password, :agreement, :locale, :reason)
   end
 
   def check_enabled_registrations
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index ecc73baf5..aa0a4d467 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -2,11 +2,11 @@
 
 module SettingsHelper
   HUMAN_LOCALES = {
-    en: 'English',
     ar: 'العربية',
     ast: 'Asturianu',
     bg: 'Български',
     bn: 'বাংলা',
+    br: 'Breton',
     ca: 'Català',
     co: 'Corsu',
     cs: 'Čeština',
@@ -14,8 +14,11 @@ module SettingsHelper
     da: 'Dansk',
     de: 'Deutsch',
     el: 'Ελληνικά',
+    en: 'English',
     eo: 'Esperanto',
+    'es-AR': 'Español (Argentina)',
     es: 'Español',
+    et: 'Eesti',
     eu: 'Euskara',
     fa: 'فارسی',
     fi: 'Suomi',
@@ -36,32 +39,34 @@ module SettingsHelper
     ko: '한국어',
     lt: 'Lietuvių',
     lv: 'Latviešu',
+    mk: 'Македонски',
     ml: 'മലയാളം',
     ms: 'Bahasa Melayu',
     nl: 'Nederlands',
+    nn: 'Nynorsk',
     no: 'Norsk',
     oc: 'Occitan',
     pl: 'Polski',
-    pt: 'Português',
-    'pt-PT': 'Português (Portugal)',
     'pt-BR': 'Português (Brasil)',
+    'pt-PT': 'Português (Portugal)',
+    pt: 'Português',
     ro: 'Română',
     ru: 'Русский',
     sk: 'Slovenčina',
     sl: 'Slovenščina',
     sq: 'Shqip',
-    sr: 'Српски',
     'sr-Latn': 'Srpski (latinica)',
+    sr: 'Српски',
     sv: 'Svenska',
     ta: 'தமிழ்',
     te: 'తెలుగు',
     th: 'ไทย',
     tr: 'Türkçe',
     uk: 'Українська',
-    zh: '中文',
     'zh-CN': '简体中文',
     'zh-HK': '繁體中文(香港)',
     'zh-TW': '繁體中文(臺灣)',
+    zh: '中文',
   }.freeze
 
   def human_locale(locale)
diff --git a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
index bd3baa5c3..6d07ec48c 100644
--- a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
+++ b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
@@ -118,6 +118,7 @@ export default class MediaItem extends ImmutablePureComponent {
       );
     } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) {
       const autoPlay = !isIOS() && autoPlayGif;
+      const label    = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF';
 
       thumbnail = (
         <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>
@@ -133,7 +134,8 @@ export default class MediaItem extends ImmutablePureComponent {
             loop
             muted
           />
-          <span className='media-gallery__gifv__label'>GIF</span>
+
+          <span className='media-gallery__gifv__label'>{label}</span>
         </div>
       );
     }
diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js
index 597196567..ff39764bb 100644
--- a/app/javascript/flavours/glitch/features/account_gallery/index.js
+++ b/app/javascript/flavours/glitch/features/account_gallery/index.js
@@ -111,8 +111,10 @@ class AccountGallery extends ImmutablePureComponent {
   }
 
   handleOpenMedia = attachment => {
-    if (['video', 'audio'].includes(attachment.get('type'))) {
+    if (attachment.get('type') === 'video') {
       this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') }));
+    } else if (attachment.get('type') === 'audio') {
+      this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') }));
     } else {
       const media = attachment.getIn(['status', 'media_attachments']);
       const index = media.findIndex(x => x.get('id') === attachment.get('id'));
diff --git a/app/javascript/flavours/glitch/features/compose/components/search.js b/app/javascript/flavours/glitch/features/compose/components/search.js
index 29d195ecd..12d839637 100644
--- a/app/javascript/flavours/glitch/features/compose/components/search.js
+++ b/app/javascript/flavours/glitch/features/compose/components/search.js
@@ -73,12 +73,17 @@ class Search extends React.PureComponent {
     onShow: PropTypes.func.isRequired,
     openInRoute: PropTypes.bool,
     intl: PropTypes.object.isRequired,
+    singleColumn: PropTypes.bool,
   };
 
   state = {
     expanded: false,
   };
 
+  setRef = c => {
+    this.searchForm = c;
+  }
+
   handleChange = (e) => {
     const { onChange } = this.props;
     if (onChange) {
@@ -103,10 +108,14 @@ class Search extends React.PureComponent {
   }
 
   handleFocus = () => {
-    const { onShow } = this.props;
     this.setState({ expanded: true });
-    if (onShow) {
-      onShow();
+    this.props.onShow();
+
+    if (this.searchForm && !this.props.singleColumn) {
+      const { left, right } = this.searchForm.getBoundingClientRect();
+      if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) {
+        this.searchForm.scrollIntoView();
+      }
     }
   }
 
@@ -135,6 +144,7 @@ class Search extends React.PureComponent {
         <label>
           <span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>
           <input
+            ref={this.setRef}
             className='search__input'
             type='text'
             placeholder={intl.formatMessage(messages.placeholder)}
diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js
index 17487b202..a80fa824b 100644
--- a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js
+++ b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js
@@ -11,6 +11,7 @@ import Permalink from 'flavours/glitch/components/permalink';
 import IconButton from 'flavours/glitch/components/icon_button';
 import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';
 import { HotKeys } from 'react-hotkeys';
+import { autoPlayGif } from 'flavours/glitch/util/initial_state';
 
 const messages = defineMessages({
   more: { id: 'status.more', defaultMessage: 'More' },
@@ -37,6 +38,7 @@ class Conversation extends ImmutablePureComponent {
     onMoveUp: PropTypes.func,
     onMoveDown: PropTypes.func,
     markRead: PropTypes.func.isRequired,
+    delete: PropTypes.func.isRequired,
     intl: PropTypes.object.isRequired,
   };
 
@@ -63,6 +65,43 @@ class Conversation extends ImmutablePureComponent {
     }
   }
 
+  _updateEmojis () {
+    const node = this.namesNode;
+
+    if (!node || autoPlayGif) {
+      return;
+    }
+
+    const emojis = node.querySelectorAll('.custom-emoji');
+
+    for (var i = 0; i < emojis.length; i++) {
+      let emoji = emojis[i];
+      if (emoji.classList.contains('status-emoji')) {
+        continue;
+      }
+      emoji.classList.add('status-emoji');
+
+      emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);
+      emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);
+    }
+  }
+
+  componentDidMount () {
+    this._updateEmojis();
+  }
+
+  componentDidUpdate () {
+    this._updateEmojis();
+  }
+
+  handleEmojiMouseEnter = ({ target }) => {
+    target.src = target.getAttribute('data-original');
+  }
+
+  handleEmojiMouseLeave = ({ target }) => {
+    target.src = target.getAttribute('data-static');
+  }
+
   handleClick = () => {
     if (!this.context.router) {
       return;
@@ -111,6 +150,10 @@ class Conversation extends ImmutablePureComponent {
     this.setState({ isExpanded: value });
   }
 
+  setNamesRef = (c) => {
+    this.namesNode = c;
+  }
+
   render () {
     const { accounts, lastStatus, unread, intl } = this.props;
     const { isExpanded } = this.state;
@@ -161,7 +204,7 @@ class Conversation extends ImmutablePureComponent {
                 <RelativeTimestamp timestamp={lastStatus.get('created_at')} />
               </div>
 
-              <div className='conversation__content__names'>
+              <div className='conversation__content__names' ref={this.setNamesRef}>
                 <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} />
               </div>
             </div>
diff --git a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js
new file mode 100644
index 000000000..08fbddc91
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js
@@ -0,0 +1,53 @@
+import React from 'react';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import PropTypes from 'prop-types';
+import Audio from 'flavours/glitch/features/audio';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { FormattedMessage } from 'react-intl';
+import classNames from 'classnames';
+import Icon from 'flavours/glitch/components/icon';
+
+export default class AudioModal extends ImmutablePureComponent {
+
+  static propTypes = {
+    media: ImmutablePropTypes.map.isRequired,
+    status: ImmutablePropTypes.map,
+    onClose: PropTypes.func.isRequired,
+  };
+
+  static contextTypes = {
+    router: PropTypes.object,
+  };
+
+  handleStatusClick = e => {
+    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
+      e.preventDefault();
+      this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
+    }
+  }
+
+  render () {
+    const { media, status } = this.props;
+
+    return (
+      <div className='modal-root__modal audio-modal'>
+        <div className='audio-modal__container'>
+          <Audio
+            src={media.get('url')}
+            alt={media.get('description')}
+            duration={media.getIn(['meta', 'original', 'duration'], 0)}
+            height={135}
+            preload
+          />
+        </div>
+
+        {status && (
+          <div className={classNames('media-modal__meta')}>
+            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+          </div>
+        )}
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/flavours/glitch/features/ui/components/embed_modal.js b/app/javascript/flavours/glitch/features/ui/components/embed_modal.js
index 47c1c7925..b6f5e628d 100644
--- a/app/javascript/flavours/glitch/features/ui/components/embed_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/embed_modal.js
@@ -1,8 +1,13 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { FormattedMessage, injectIntl } from 'react-intl';
+import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
 import api from 'flavours/glitch/util/api';
+import IconButton from 'flavours/glitch/components/icon_button';
+
+const messages = defineMessages({
+  close: { id: 'lightbox.close', defaultMessage: 'Close' },
+});
 
 export default @injectIntl
 class EmbedModal extends ImmutablePureComponent {
@@ -50,13 +55,17 @@ class EmbedModal extends ImmutablePureComponent {
   }
 
   render () {
+    const { intl, onClose } = this.props;
     const { oembed } = this.state;
 
     return (
-      <div className='modal-root__modal embed-modal'>
-        <h4><FormattedMessage id='status.embed' defaultMessage='Embed' /></h4>
+      <div className='modal-root__modal report-modal embed-modal'>
+        <div className='report-modal__target'>
+          <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
+          <FormattedMessage id='status.embed' defaultMessage='Embed' />
+        </div>
 
-        <div className='embed-modal__container'>
+        <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}>
           <p className='hint'>
             <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' />
           </p>
diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
index 5d60c8a08..d61c69f69 100644
--- a/app/javascript/flavours/glitch/features/ui/components/media_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
@@ -208,7 +208,7 @@ class MediaModal extends ImmutablePureComponent {
 
           {status && (
             <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}>
-              <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+              <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
             </div>
           )}
 
diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
index 0941ce9c8..117ce4c55 100644
--- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js
+++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
@@ -9,6 +9,7 @@ import MediaModal from './media_modal';
 import VideoModal from './video_modal';
 import BoostModal from './boost_modal';
 import FavouriteModal from './favourite_modal';
+import AudioModal from './audio_modal';
 import DoodleModal from './doodle_modal';
 import ConfirmationModal from './confirmation_modal';
 import FocalPointModal from './focal_point_modal';
@@ -28,6 +29,7 @@ const MODAL_COMPONENTS = {
   'MEDIA': () => Promise.resolve({ default: MediaModal }),
   'ONBOARDING': OnboardingModal,
   'VIDEO': () => Promise.resolve({ default: VideoModal }),
+  'AUDIO': () => Promise.resolve({ default: AudioModal }),
   'BOOST': () => Promise.resolve({ default: BoostModal }),
   'FAVOURITE': () => Promise.resolve({ default: FavouriteModal }),
   'DOODLE': () => Promise.resolve({ default: DoodleModal }),
diff --git a/app/javascript/flavours/glitch/features/ui/components/mute_modal.js b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js
index dec6413c3..2aab82751 100644
--- a/app/javascript/flavours/glitch/features/ui/components/mute_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js
@@ -82,7 +82,7 @@ class MuteModal extends React.PureComponent {
           <p className='mute-modal__explanation'>
             <FormattedMessage
               id='confirmations.mute.explanation'
-              defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts follow you.'
+              defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.'
             />
           </p>
           <div className='setting-toggle'>
diff --git a/app/javascript/flavours/glitch/features/ui/components/video_modal.js b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
index 3f742c260..ef69f60f4 100644
--- a/app/javascript/flavours/glitch/features/ui/components/video_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
@@ -4,6 +4,8 @@ import PropTypes from 'prop-types';
 import Video from 'flavours/glitch/features/video';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import { FormattedMessage } from 'react-intl';
+import classNames from 'classnames';
+import Icon from 'mastodon/components/icon';
 
 export default class VideoModal extends ImmutablePureComponent {
 
@@ -28,22 +30,25 @@ export default class VideoModal extends ImmutablePureComponent {
   render () {
     const { media, status, time, onClose } = this.props;
 
-    const link = status && <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>;
-
     return (
       <div className='modal-root__modal video-modal'>
-        <div>
+        <div className='video-modal__container'>
           <Video
             preview={media.get('preview_url')}
             blurhash={media.get('blurhash')}
             src={media.get('url')}
             startTime={time}
             onCloseVideo={onClose}
-            link={link}
             detailed
             alt={media.get('description')}
           />
         </div>
+
+        {status && (
+          <div className={classNames('media-modal__meta')}>
+            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+          </div>
+        )}
       </div>
     );
   }
diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js
index 6cc1b1cde..c201cd93d 100644
--- a/app/javascript/flavours/glitch/features/ui/index.js
+++ b/app/javascript/flavours/glitch/features/ui/index.js
@@ -320,7 +320,7 @@ class UI extends React.Component {
   }
 
   dataTransferIsText = (dataTransfer) => {
-    return (dataTransfer && Array.from(dataTransfer.types).includes('text/plain') && dataTransfer.items.length === 1);
+    return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);
   }
 
   closeUploadModal = () => {
diff --git a/app/javascript/flavours/glitch/reducers/conversations.js b/app/javascript/flavours/glitch/reducers/conversations.js
index 8fcc2cc79..fba0308bc 100644
--- a/app/javascript/flavours/glitch/reducers/conversations.js
+++ b/app/javascript/flavours/glitch/reducers/conversations.js
@@ -7,6 +7,7 @@ import {
   CONVERSATIONS_FETCH_FAIL,
   CONVERSATIONS_UPDATE,
   CONVERSATIONS_READ,
+  CONVERSATIONS_DELETE_SUCCESS,
 } from '../actions/conversations';
 import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'flavours/glitch/actions/accounts';
 import { DOMAIN_BLOCK_SUCCESS } from 'flavours/glitch/actions/domain_blocks';
@@ -107,6 +108,8 @@ export default function conversations(state = initialState, action) {
     return filterConversations(state, [action.relationship.id]);
   case DOMAIN_BLOCK_SUCCESS:
     return filterConversations(state, action.accounts);
+  case CONVERSATIONS_DELETE_SUCCESS:
+    return state.update('items', list => list.filterNot(item => item.get('id') === action.id));
   default:
     return state;
   }
diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss
index 7c129674d..a38ca99b4 100644
--- a/app/javascript/flavours/glitch/styles/about.scss
+++ b/app/javascript/flavours/glitch/styles/about.scss
@@ -145,8 +145,6 @@ $small-breakpoint: 960px;
 
     thead tr,
     tbody tr {
-      break-after: auto;
-      break-inside: avoid;
       border-bottom: 1px solid lighten($ui-base-color, 4%);
       font-size: 1em;
       line-height: 1.625;
@@ -167,12 +165,25 @@ $small-breakpoint: 960px;
       padding: 8px;
       align-self: start;
       align-items: start;
+      word-break: break-all;
 
       &.nowrap {
-        white-space: nowrap;
-        overflow: hidden;
-        text-overflow: ellipsis;
         width: 25%;
+        position: relative;
+
+        &::before {
+          content: '&nbsp;';
+          visibility: hidden;
+        }
+
+        span {
+          position: absolute;
+          left: 8px;
+          right: 8px;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
       }
     }
   }
diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss
index 848ef78df..6f0d4c0be 100644
--- a/app/javascript/flavours/glitch/styles/components/index.scss
+++ b/app/javascript/flavours/glitch/styles/components/index.scss
@@ -1454,7 +1454,6 @@
     flex: 1 1 auto;
     padding: 10px 5px;
     padding-right: 15px;
-    word-break: break-all;
     overflow: hidden;
 
     &__info {
@@ -1477,8 +1476,8 @@
       overflow: hidden;
       text-overflow: ellipsis;
       margin-bottom: 4px;
-      flex-basis: 170px;
-      flex-shrink: 1000;
+      flex-basis: 90px;
+      flex-grow: 1;
 
       a {
         color: $primary-text-color;
@@ -1525,6 +1524,10 @@ noscript {
         text-decoration: none;
       }
     }
+
+    a {
+      word-break: break-word;
+    }
   }
 }
 
diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss
index 85982d938..366759847 100644
--- a/app/javascript/flavours/glitch/styles/components/media.scss
+++ b/app/javascript/flavours/glitch/styles/components/media.scss
@@ -179,10 +179,13 @@
   position: absolute;
 }
 
-.video-modal {
+.video-modal__container {
   max-width: 100vw;
   max-height: 100vh;
-  position: relative;
+}
+
+.audio-modal__container {
+  width: 50vw;
 }
 
 .media-modal {
@@ -282,6 +285,7 @@
   }
 
   a {
+    pointer-events: auto;
     text-decoration: none;
     font-weight: 500;
     color: $ui-secondary-color;
@@ -339,6 +343,7 @@
   background: darken($ui-base-color, 8%);
   border-radius: 4px;
   padding-bottom: 44px;
+  direction: ltr;
 
   &.editable {
     border-radius: 0;
@@ -386,6 +391,7 @@
   max-width: 100%;
   border-radius: 4px;
   box-sizing: border-box;
+  direction: ltr;
 
   &.editable {
     border-radius: 0;
diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss
index 4f3e5babf..716796af9 100644
--- a/app/javascript/flavours/glitch/styles/components/modal.scss
+++ b/app/javascript/flavours/glitch/styles/components/modal.scss
@@ -736,6 +736,7 @@
   &:focus,
   &:active {
     color: darken($lighter-text-color, 4%);
+    background-color: transparent;
   }
 }
 
@@ -804,6 +805,7 @@
 }
 
 .embed-modal {
+  width: auto;
   max-width: 80vw;
   max-height: 80vh;
 
@@ -834,6 +836,7 @@
       font-size: 14px;
       margin: 0;
       margin-bottom: 15px;
+      border-radius: 4px;
 
       &::-moz-focus-inner {
         border: 0;
@@ -859,6 +862,7 @@
       max-width: 100%;
       overflow: hidden;
       border: 0;
+      border-radius: 4px;
     }
   }
 }
diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss
index ae89ac0a8..ded423afa 100644
--- a/app/javascript/flavours/glitch/styles/components/status.scss
+++ b/app/javascript/flavours/glitch/styles/components/status.scss
@@ -640,6 +640,10 @@ a.status__display-name,
   color: inherit;
 }
 
+.detailed-status .button.logo-button {
+  margin-bottom: 15px;
+}
+
 .detailed-status__display-name {
   color: $secondary-text-color;
   display: block;
diff --git a/app/javascript/flavours/glitch/styles/containers.scss b/app/javascript/flavours/glitch/styles/containers.scss
index 6a48ff354..e2f291b69 100644
--- a/app/javascript/flavours/glitch/styles/containers.scss
+++ b/app/javascript/flavours/glitch/styles/containers.scss
@@ -414,6 +414,20 @@
     }
   }
 
+  .directory__card {
+    border-radius: 4px;
+
+    @media screen and (max-width: $no-gap-breakpoint) {
+      border-radius: 0;
+    }
+  }
+
+  .page-header {
+    @media screen and (max-width: $no-gap-breakpoint) {
+      border-bottom: 0;
+    }
+  }
+
   .public-account-header {
     overflow: hidden;
     margin-bottom: 10px;
diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
index 5c7fa87da..3b4ffdf3c 100644
--- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
+++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
@@ -230,8 +230,19 @@
 .report-modal,
 .embed-modal,
 .error-modal,
-.onboarding-modal {
-  background: $ui-base-color;
+.onboarding-modal,
+.report-modal__comment .setting-text__wrapper,
+.report-modal__comment .setting-text {
+  background: $white;
+  border: 1px solid lighten($ui-base-color, 8%);
+}
+
+.report-modal__comment {
+  border-right-color: lighten($ui-base-color, 8%);
+}
+
+.report-modal__container {
+  border-top-color: lighten($ui-base-color, 8%);
 }
 
 .boost-modal__action-bar,
diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss
index 1b060b58d..312f5e314 100644
--- a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss
+++ b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss
@@ -18,6 +18,8 @@ $darker-text-color: $classic-base-color !default;
 $dark-text-color: #444b5d;
 $action-button-color: #606984;
 
+$success-green: lighten(#3c754d, 8%);
+
 $base-overlay-background: $white !default;
 
 $inverted-text-color: $black !default;
diff --git a/app/javascript/flavours/glitch/styles/rtl.scss b/app/javascript/flavours/glitch/styles/rtl.scss
index 8a275d82f..2375bac90 100644
--- a/app/javascript/flavours/glitch/styles/rtl.scss
+++ b/app/javascript/flavours/glitch/styles/rtl.scss
@@ -7,6 +7,34 @@ body.rtl {
     padding-right: 15px;
   }
 
+  .radio-button__input {
+    margin-right: 0;
+    margin-left: 10px;
+  }
+
+  .directory__card__bar .display-name {
+    margin-left: 0;
+    margin-right: 15px;
+  }
+
+  .display-name {
+    text-align: right;
+  }
+
+  .notification__message {
+    margin-left: 0;
+    margin-right: 68px;
+  }
+
+  .drawer__inner__mastodon > img {
+    transform: scaleX(-1);
+  }
+
+  .notification__favourite-icon-wrapper {
+    left: auto;
+    right: -26px;
+  }
+
   .landing-page__logo {
     margin-right: 0;
     margin-left: 20px;
@@ -152,7 +180,6 @@ body.rtl {
   }
 
   .status__action-bar {
-
     &__counter {
       margin-right: 0;
       margin-left: 11px;
@@ -345,6 +372,12 @@ body.rtl {
     }
   }
 
+  .columns-area--mobile .column,
+  .columns-area--mobile .drawer {
+    padding-left: 0;
+    padding-right: 0;
+  }
+
   .public-layout {
     .header {
       .nav-button {
diff --git a/app/javascript/mastodon/components/error_boundary.js b/app/javascript/mastodon/components/error_boundary.js
index d1ca5bf75..82543e118 100644
--- a/app/javascript/mastodon/components/error_boundary.js
+++ b/app/javascript/mastodon/components/error_boundary.js
@@ -1,6 +1,7 @@
 import React from 'react';
 import PropTypes from 'prop-types';
-import illustration from '../../images/elephant_ui_disappointed.svg';
+import { FormattedMessage } from 'react-intl';
+import { version, source_url } from 'mastodon/initial_state';
 
 export default class ErrorBoundary extends React.PureComponent {
 
@@ -12,26 +13,53 @@ export default class ErrorBoundary extends React.PureComponent {
     hasError: false,
     stackTrace: undefined,
     componentStack: undefined,
-  }
+  };
 
-  componentDidCatch(error, info) {
+  componentDidCatch (error, info) {
     this.setState({
       hasError: true,
       stackTrace: error.stack,
       componentStack: info && info.componentStack,
+      copied: false,
     });
   }
 
+  handleCopyStackTrace = () => {
+    const { stackTrace } = this.state;
+    const textarea = document.createElement('textarea');
+
+    textarea.textContent    = stackTrace;
+    textarea.style.position = 'fixed';
+
+    document.body.appendChild(textarea);
+
+    try {
+      textarea.select();
+      document.execCommand('copy');
+    } catch (e) {
+
+    } finally {
+      document.body.removeChild(textarea);
+    }
+
+    this.setState({ copied: true });
+    setTimeout(() => this.setState({ copied: false }), 700);
+  }
+
   render() {
-    const { hasError } = this.state;
+    const { hasError, copied } = this.state;
 
     if (!hasError) {
       return this.props.children;
     }
 
     return (
-      <div>
-        <img src={illustration} alt='' />
+      <div className='error-boundary'>
+        <div>
+          <p className='error-boundary__error'><FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /></p>
+          <p><FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /></p>
+          <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied && 'copied'}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p>
+        </div>
       </div>
     );
   }
diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.js b/app/javascript/mastodon/features/account_gallery/components/media_item.js
index d1b3c3bd4..b6eec2243 100644
--- a/app/javascript/mastodon/features/account_gallery/components/media_item.js
+++ b/app/javascript/mastodon/features/account_gallery/components/media_item.js
@@ -119,6 +119,7 @@ export default class MediaItem extends ImmutablePureComponent {
       );
     } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) {
       const autoPlay = !isIOS() && autoPlayGif;
+      const label    = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF';
 
       thumbnail = (
         <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>
@@ -135,7 +136,7 @@ export default class MediaItem extends ImmutablePureComponent {
             muted
           />
 
-          <span className='media-gallery__gifv__label'>GIF</span>
+          <span className='media-gallery__gifv__label'>{label}</span>
         </div>
       );
     }
diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js
index f3bf7a2bd..de481075c 100644
--- a/app/javascript/mastodon/features/account_gallery/index.js
+++ b/app/javascript/mastodon/features/account_gallery/index.js
@@ -100,8 +100,10 @@ class AccountGallery extends ImmutablePureComponent {
   }
 
   handleOpenMedia = attachment => {
-    if (['video', 'audio'].includes(attachment.get('type'))) {
+    if (attachment.get('type') === 'video') {
       this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') }));
+    } else if (attachment.get('type') === 'audio') {
+      this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') }));
     } else {
       const media = attachment.getIn(['status', 'media_attachments']);
       const index = media.findIndex(x => x.get('id') === attachment.get('id'));
diff --git a/app/javascript/mastodon/features/compose/components/search.js b/app/javascript/mastodon/features/compose/components/search.js
index 7f9edfeee..3e36a922b 100644
--- a/app/javascript/mastodon/features/compose/components/search.js
+++ b/app/javascript/mastodon/features/compose/components/search.js
@@ -60,12 +60,17 @@ class Search extends React.PureComponent {
     onShow: PropTypes.func.isRequired,
     openInRoute: PropTypes.bool,
     intl: PropTypes.object.isRequired,
+    singleColumn: PropTypes.bool,
   };
 
   state = {
     expanded: false,
   };
 
+  setRef = c => {
+    this.searchForm = c;
+  }
+
   handleChange = (e) => {
     this.props.onChange(e.target.value);
   }
@@ -95,6 +100,13 @@ class Search extends React.PureComponent {
   handleFocus = () => {
     this.setState({ expanded: true });
     this.props.onShow();
+
+    if (this.searchForm && !this.props.singleColumn) {
+      const { left, right } = this.searchForm.getBoundingClientRect();
+      if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) {
+        this.searchForm.scrollIntoView();
+      }
+    }
   }
 
   handleBlur = () => {
@@ -111,6 +123,7 @@ class Search extends React.PureComponent {
         <label>
           <span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>
           <input
+            ref={this.setRef}
             className='search__input'
             type='text'
             placeholder={intl.formatMessage(messages.placeholder)}
diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.js b/app/javascript/mastodon/features/direct_timeline/components/conversation.js
index cc3faf0de..2cbaa0791 100644
--- a/app/javascript/mastodon/features/direct_timeline/components/conversation.js
+++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.js
@@ -11,6 +11,7 @@ import Permalink from 'mastodon/components/permalink';
 import IconButton from 'mastodon/components/icon_button';
 import RelativeTimestamp from 'mastodon/components/relative_timestamp';
 import { HotKeys } from 'react-hotkeys';
+import { autoPlayGif } from 'mastodon/initial_state';
 
 const messages = defineMessages({
   more: { id: 'status.more', defaultMessage: 'More' },
@@ -37,9 +38,47 @@ class Conversation extends ImmutablePureComponent {
     onMoveUp: PropTypes.func,
     onMoveDown: PropTypes.func,
     markRead: PropTypes.func.isRequired,
+    delete: PropTypes.func.isRequired,
     intl: PropTypes.object.isRequired,
   };
 
+  _updateEmojis () {
+    const node = this.namesNode;
+
+    if (!node || autoPlayGif) {
+      return;
+    }
+
+    const emojis = node.querySelectorAll('.custom-emoji');
+
+    for (var i = 0; i < emojis.length; i++) {
+      let emoji = emojis[i];
+      if (emoji.classList.contains('status-emoji')) {
+        continue;
+      }
+      emoji.classList.add('status-emoji');
+
+      emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);
+      emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);
+    }
+  }
+
+  componentDidMount () {
+    this._updateEmojis();
+  }
+
+  componentDidUpdate () {
+    this._updateEmojis();
+  }
+
+  handleEmojiMouseEnter = ({ target }) => {
+    target.src = target.getAttribute('data-original');
+  }
+
+  handleEmojiMouseLeave = ({ target }) => {
+    target.src = target.getAttribute('data-static');
+  }
+
   handleClick = () => {
     if (!this.context.router) {
       return;
@@ -82,6 +121,10 @@ class Conversation extends ImmutablePureComponent {
     this.props.onToggleHidden(this.props.lastStatus);
   }
 
+  setNamesRef = (c) => {
+    this.namesNode = c;
+  }
+
   render () {
     const { accounts, lastStatus, unread, intl } = this.props;
 
@@ -126,7 +169,7 @@ class Conversation extends ImmutablePureComponent {
                 <RelativeTimestamp timestamp={lastStatus.get('created_at')} />
               </div>
 
-              <div className='conversation__content__names'>
+              <div className='conversation__content__names' ref={this.setNamesRef}>
                 <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} />
               </div>
             </div>
diff --git a/app/javascript/mastodon/features/favourites/index.js b/app/javascript/mastodon/features/favourites/index.js
index 90c26f0c3..249e6a044 100644
--- a/app/javascript/mastodon/features/favourites/index.js
+++ b/app/javascript/mastodon/features/favourites/index.js
@@ -5,17 +5,23 @@ import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import LoadingIndicator from '../../components/loading_indicator';
 import { fetchFavourites } from '../../actions/interactions';
-import { FormattedMessage } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import AccountContainer from '../../containers/account_container';
 import Column from '../ui/components/column';
-import ColumnBackButton from '../../components/column_back_button';
 import ScrollableList from '../../components/scrollable_list';
+import Icon from 'mastodon/components/icon';
+import ColumnHeader from '../../components/column_header';
+
+const messages = defineMessages({
+  refresh: { id: 'refresh', defaultMessage: 'Refresh' },
+});
 
 const mapStateToProps = (state, props) => ({
   accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),
 });
 
 export default @connect(mapStateToProps)
+@injectIntl
 class Favourites extends ImmutablePureComponent {
 
   static propTypes = {
@@ -24,6 +30,7 @@ class Favourites extends ImmutablePureComponent {
     shouldUpdateScroll: PropTypes.func,
     accountIds: ImmutablePropTypes.list,
     multiColumn: PropTypes.bool,
+    intl: PropTypes.object.isRequired,
   };
 
   componentWillMount () {
@@ -38,8 +45,12 @@ class Favourites extends ImmutablePureComponent {
     }
   }
 
+  handleRefresh = () => {
+    this.props.dispatch(fetchFavourites(this.props.params.statusId));
+  }
+
   render () {
-    const { shouldUpdateScroll, accountIds, multiColumn } = this.props;
+    const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props;
 
     if (!accountIds) {
       return (
@@ -52,8 +63,14 @@ class Favourites extends ImmutablePureComponent {
     const emptyMessage = <FormattedMessage id='empty_column.favourites' defaultMessage='No one has favourited this toot yet. When someone does, they will show up here.' />;
 
     return (
-      <Column>
-        <ColumnBackButton multiColumn={multiColumn} />
+      <Column bindToDocument={!multiColumn}>
+        <ColumnHeader
+          showBackButton
+          multiColumn={multiColumn}
+          extraButton={(
+            <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>
+          )}
+        />
 
         <ScrollableList
           scrollKey='favourites'
diff --git a/app/javascript/mastodon/features/reblogs/index.js b/app/javascript/mastodon/features/reblogs/index.js
index 7edcf1968..9179e51db 100644
--- a/app/javascript/mastodon/features/reblogs/index.js
+++ b/app/javascript/mastodon/features/reblogs/index.js
@@ -5,17 +5,23 @@ import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import LoadingIndicator from '../../components/loading_indicator';
 import { fetchReblogs } from '../../actions/interactions';
-import { FormattedMessage } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import AccountContainer from '../../containers/account_container';
 import Column from '../ui/components/column';
-import ColumnBackButton from '../../components/column_back_button';
 import ScrollableList from '../../components/scrollable_list';
+import Icon from 'mastodon/components/icon';
+import ColumnHeader from '../../components/column_header';
+
+const messages = defineMessages({
+  refresh: { id: 'refresh', defaultMessage: 'Refresh' },
+});
 
 const mapStateToProps = (state, props) => ({
   accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),
 });
 
 export default @connect(mapStateToProps)
+@injectIntl
 class Reblogs extends ImmutablePureComponent {
 
   static propTypes = {
@@ -24,6 +30,7 @@ class Reblogs extends ImmutablePureComponent {
     shouldUpdateScroll: PropTypes.func,
     accountIds: ImmutablePropTypes.list,
     multiColumn: PropTypes.bool,
+    intl: PropTypes.object.isRequired,
   };
 
   componentWillMount () {
@@ -38,8 +45,12 @@ class Reblogs extends ImmutablePureComponent {
     }
   }
 
+  handleRefresh = () => {
+    this.props.dispatch(fetchReblogs(this.props.params.statusId));
+  }
+
   render () {
-    const { shouldUpdateScroll, accountIds, multiColumn } = this.props;
+    const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props;
 
     if (!accountIds) {
       return (
@@ -52,8 +63,14 @@ class Reblogs extends ImmutablePureComponent {
     const emptyMessage = <FormattedMessage id='status.reblogs.empty' defaultMessage='No one has boosted this toot yet. When someone does, they will show up here.' />;
 
     return (
-      <Column>
-        <ColumnBackButton multiColumn={multiColumn} />
+      <Column bindToDocument={!multiColumn}>
+        <ColumnHeader
+          showBackButton
+          multiColumn={multiColumn}
+          extraButton={(
+            <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>
+          )}
+        />
 
         <ScrollableList
           scrollKey='reblogs'
diff --git a/app/javascript/mastodon/features/ui/components/audio_modal.js b/app/javascript/mastodon/features/ui/components/audio_modal.js
new file mode 100644
index 000000000..2300453d7
--- /dev/null
+++ b/app/javascript/mastodon/features/ui/components/audio_modal.js
@@ -0,0 +1,76 @@
+import React from 'react';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import PropTypes from 'prop-types';
+import Audio from 'mastodon/features/audio';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { FormattedMessage } from 'react-intl';
+import { previewState } from './video_modal';
+import classNames from 'classnames';
+import Icon from 'mastodon/components/icon';
+
+export default class AudioModal extends ImmutablePureComponent {
+
+  static propTypes = {
+    media: ImmutablePropTypes.map.isRequired,
+    status: ImmutablePropTypes.map,
+    onClose: PropTypes.func.isRequired,
+  };
+
+  static contextTypes = {
+    router: PropTypes.object,
+  };
+
+  componentDidMount () {
+    if (this.context.router) {
+      const history = this.context.router.history;
+
+      history.push(history.location.pathname, previewState);
+
+      this.unlistenHistory = history.listen(() => {
+        this.props.onClose();
+      });
+    }
+  }
+
+  componentWillUnmount () {
+    if (this.context.router) {
+      this.unlistenHistory();
+
+      if (this.context.router.history.location.state === previewState) {
+        this.context.router.history.goBack();
+      }
+    }
+  }
+
+  handleStatusClick = e => {
+    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
+      e.preventDefault();
+      this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
+    }
+  }
+
+  render () {
+    const { media, status } = this.props;
+
+    return (
+      <div className='modal-root__modal audio-modal'>
+        <div className='audio-modal__container'>
+          <Audio
+            src={media.get('url')}
+            alt={media.get('description')}
+            duration={media.getIn(['meta', 'original', 'duration'], 0)}
+            height={135}
+            preload
+          />
+        </div>
+
+        {status && (
+          <div className={classNames('media-modal__meta')}>
+            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+          </div>
+        )}
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/mastodon/features/ui/components/embed_modal.js b/app/javascript/mastodon/features/ui/components/embed_modal.js
index 982781db0..4679c9650 100644
--- a/app/javascript/mastodon/features/ui/components/embed_modal.js
+++ b/app/javascript/mastodon/features/ui/components/embed_modal.js
@@ -1,8 +1,13 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { FormattedMessage, injectIntl } from 'react-intl';
-import api from '../../../api';
+import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
+import api from 'mastodon/api';
+import IconButton from 'mastodon/components/icon_button';
+
+const messages = defineMessages({
+  close: { id: 'lightbox.close', defaultMessage: 'Close' },
+});
 
 export default @injectIntl
 class EmbedModal extends ImmutablePureComponent {
@@ -50,13 +55,17 @@ class EmbedModal extends ImmutablePureComponent {
   }
 
   render () {
+    const { intl, onClose } = this.props;
     const { oembed } = this.state;
 
     return (
-      <div className='modal-root__modal embed-modal'>
-        <h4><FormattedMessage id='status.embed' defaultMessage='Embed' /></h4>
+      <div className='modal-root__modal report-modal embed-modal'>
+        <div className='report-modal__target'>
+          <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
+          <FormattedMessage id='status.embed' defaultMessage='Embed' />
+        </div>
 
-        <div className='embed-modal__container'>
+        <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}>
           <p className='hint'>
             <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' />
           </p>
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js
index da2ac5f26..98ebd4b41 100644
--- a/app/javascript/mastodon/features/ui/components/media_modal.js
+++ b/app/javascript/mastodon/features/ui/components/media_modal.js
@@ -228,7 +228,7 @@ class MediaModal extends ImmutablePureComponent {
 
           {status && (
             <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}>
-              <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+              <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
             </div>
           )}
 
diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js
index 58d3ba8db..5cf70a0cc 100644
--- a/app/javascript/mastodon/features/ui/components/modal_root.js
+++ b/app/javascript/mastodon/features/ui/components/modal_root.js
@@ -9,6 +9,7 @@ import ActionsModal from './actions_modal';
 import MediaModal from './media_modal';
 import VideoModal from './video_modal';
 import BoostModal from './boost_modal';
+import AudioModal from './audio_modal';
 import ConfirmationModal from './confirmation_modal';
 import FocalPointModal from './focal_point_modal';
 import {
@@ -23,6 +24,7 @@ import {
 const MODAL_COMPONENTS = {
   'MEDIA': () => Promise.resolve({ default: MediaModal }),
   'VIDEO': () => Promise.resolve({ default: VideoModal }),
+  'AUDIO': () => Promise.resolve({ default: AudioModal }),
   'BOOST': () => Promise.resolve({ default: BoostModal }),
   'CONFIRM': () => Promise.resolve({ default: ConfirmationModal }),
   'MUTE': MuteModal,
diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.js b/app/javascript/mastodon/features/ui/components/mute_modal.js
index c364c5ba2..852830c3c 100644
--- a/app/javascript/mastodon/features/ui/components/mute_modal.js
+++ b/app/javascript/mastodon/features/ui/components/mute_modal.js
@@ -82,7 +82,7 @@ class MuteModal extends React.PureComponent {
           <p className='mute-modal__explanation'>
             <FormattedMessage
               id='confirmations.mute.explanation'
-              defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts follow you.'
+              defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.'
             />
           </p>
           <div className='setting-toggle'>
diff --git a/app/javascript/mastodon/features/ui/components/video_modal.js b/app/javascript/mastodon/features/ui/components/video_modal.js
index 213d31316..f37fc796f 100644
--- a/app/javascript/mastodon/features/ui/components/video_modal.js
+++ b/app/javascript/mastodon/features/ui/components/video_modal.js
@@ -4,6 +4,8 @@ import PropTypes from 'prop-types';
 import Video from 'mastodon/features/video';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import { FormattedMessage } from 'react-intl';
+import classNames from 'classnames';
+import Icon from 'mastodon/components/icon';
 
 export const previewState = 'previewVideoModal';
 
@@ -52,22 +54,25 @@ export default class VideoModal extends ImmutablePureComponent {
   render () {
     const { media, status, time, onClose } = this.props;
 
-    const link = status && <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>;
-
     return (
       <div className='modal-root__modal video-modal'>
-        <div>
+        <div className='video-modal__container'>
           <Video
             preview={media.get('preview_url')}
             blurhash={media.get('blurhash')}
             src={media.get('url')}
             startTime={time}
             onCloseVideo={onClose}
-            link={link}
             detailed
             alt={media.get('description')}
           />
         </div>
+
+        {status && (
+          <div className={classNames('media-modal__meta')}>
+            <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
+          </div>
+        )}
       </div>
     );
   }
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index f5e48ed31..791ff9a2e 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -327,7 +327,7 @@ class UI extends React.PureComponent {
   }
 
   dataTransferIsText = (dataTransfer) => {
-    return (dataTransfer && Array.from(dataTransfer.types).includes('text/plain') && dataTransfer.items.length === 1);
+    return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);
   }
 
   closeUploadModal = () => {
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 8e2efe136..1a558e3b8 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -38,7 +38,7 @@
   "account.unfollow": "إلغاء المتابعة",
   "account.unmute": "إلغاء الكتم عن @{name}",
   "account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
   "alert.unexpected.title": "المعذرة!",
@@ -63,7 +63,6 @@
   "column.notifications": "الإخطارات",
   "column.pins": "التبويقات المثبتة",
   "column.public": "الخيط العام الموحد",
-  "column.status": "تبويق",
   "column_back_button.label": "العودة",
   "column_header.hide_settings": "إخفاء الإعدادات",
   "column_header.moveLeft_settings": "نقل القائمة إلى اليسار",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "خروج",
   "confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
   "confirmations.mute.confirm": "أكتم",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟",
   "confirmations.redraft.confirm": "إزالة و إعادة الصياغة",
   "confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته ؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
@@ -116,7 +116,7 @@
   "conversation.open": "اعرض المحادثة",
   "conversation.with": "بـ {names}",
   "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
+  "directory.local": "مِن {domain} فقط",
   "directory.new_arrivals": "الوافدون الجُدد",
   "directory.recently_active": "نشط مؤخرا",
   "embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.",
   "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
   "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "ترخيص",
   "follow_request.reject": "رفض",
   "getting_started.developers": "المُطوِّرون",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} إشعارات",
   "poll.closed": "انتهى",
   "poll.refresh": "تحديث",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}",
   "poll.vote": "صَوّت",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "للعامة",
   "privacy.unlisted.long": "لا تقم بإدراجه على الخيوط العامة",
   "privacy.unlisted.short": "غير مدرج",
+  "refresh": "أنعِش",
   "regeneration_indicator.label": "جارٍ التحميل…",
   "regeneration_indicator.sublabel": "جارٍ تجهيز تغذية صفحتك الرئيسية!",
   "relative_time.days": "{number}ي",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 76721749c..64c12db42 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -63,7 +63,6 @@
   "column.notifications": "Avisos",
   "column.pins": "Toots fixaos",
   "column.public": "Llinia temporal federada",
-  "column.status": "Toot",
   "column_back_button.label": "Atrás",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Mover la columna a la esquierda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "¿De xuru que quies silenciar a {name}?",
   "confirmations.redraft.confirm": "Desaniciar y reeditar",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Entá nun silenciesti a dengún usuariu.",
   "empty_column.notifications": "Entá nun tienes dengún avisu. Interactua con otros p'aniciar la conversación.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Refugar",
   "getting_started.developers": "Desendolcadores",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} avisos",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Cargando…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index b230d1863..207d0cfc3 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -63,7 +63,6 @@
   "column.notifications": "Известия",
   "column.pins": "Pinned toot",
   "column.public": "Публичен канал",
-  "column.status": "Toot",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 8109d97eb..240ff17e8 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -63,7 +63,6 @@
   "column.notifications": "প্রজ্ঞাপনগুলো",
   "column.pins": "পিন করা টুট",
   "column.public": "যুক্ত সময়রেখা",
-  "column.status": "Toot",
   "column_back_button.label": "পেছনে",
   "column_header.hide_settings": "সেটিংগুলো সরান",
   "column_header.moveLeft_settings": "কলমটা বামে সরান",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "সরিয়ে ফেলুন",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "আপনি কি নিশ্চিত {name} সরিয়ে ফেলতে চান ?",
   "confirmations.redraft.confirm": "মুছে ফেলুন এবং আবার সম্পাদন করুন",
   "confirmations.redraft.message": "আপনি কি নিশ্চিত এটি মুছে ফেলে  এবং আবার সম্পাদন করতে চান ? এটাতে যা পছন্দিত, সমর্থন বা মতামত আছে সেগুলো নতুন লেখার সাথে যুক্ত থাকবে না।",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "আপনি এখনো কোনো ব্যবহারকারীকে সরাননি।",
   "empty_column.notifications": "আপনার এখনো কোনো প্রজ্ঞাপন নেই। কথোপকথন শুরু করতে,  অন্যদের সাথে মেলামেশা করতে পারেন।",
   "empty_column.public": "এখানে এখনো কিছু নেই! প্রকাশ্য ভাবে কিছু লিখুন বা অন্য সার্ভার থেকে কাওকে অনুসরণ করে এই জায়গা ভরে ফেলুন",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "অনুমতি দিন",
   "follow_request.reject": "প্রত্যাখ্যান করুন",
   "getting_started.developers": "তৈরিকারকদের জন্য",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} প্রজ্ঞাপন",
   "poll.closed": "বন্ধ",
   "poll.refresh": "বদলেছে কিনা দেখতে",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# ভোট} other {# ভোট}}",
   "poll.vote": "ভোট",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "সর্বজনীন প্রকাশ্য",
   "privacy.unlisted.long": "সর্বজনীন প্রকাশ্য সময়রেখাতে না দেখাতে",
   "privacy.unlisted.short": "প্রকাশ্য নয়",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "আসছে…",
   "regeneration_indicator.sublabel": "আপনার বাড়ির-সময়রেখা প্রস্তূত করা হচ্ছে!",
   "relative_time.days": "{number} দিন",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index fbe8020bd..b8cd5e479 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 5b05c09d5..8e647691b 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -16,7 +16,7 @@
   "account.follows.empty": "Aquest usuari encara no segueix a ningú.",
   "account.follows_you": "Et segueix",
   "account.hide_reblogs": "Amaga els impulsos de @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Darrer actiu",
   "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}",
   "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.",
   "account.media": "Mèdia",
@@ -25,7 +25,7 @@
   "account.mute": "Silencia @{name}",
   "account.mute_notifications": "Notificacions desactivades de @{name}",
   "account.muted": "Silenciat",
-  "account.never_active": "Never",
+  "account.never_active": "Mai",
   "account.posts": "Toots",
   "account.posts_with_replies": "Toots i respostes",
   "account.report": "Informe @{name}",
@@ -38,8 +38,8 @@
   "account.unfollow": "Deixa de seguir",
   "account.unmute": "Treure silenci de @{name}",
   "account.unmute_notifications": "Activar notificacions de @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
+  "alert.rate_limited.message": "Si us plau torna-ho a provar després de {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Límit de freqüència",
   "alert.unexpected.message": "S'ha produït un error inesperat.",
   "alert.unexpected.title": "Vaja!",
   "autosuggest_hashtag.per_week": "{count} per setmana",
@@ -53,7 +53,7 @@
   "column.blocks": "Usuaris bloquejats",
   "column.community": "Línia de temps local",
   "column.direct": "Missatges directes",
-  "column.directory": "Browse profiles",
+  "column.directory": "Navega els perfils",
   "column.domain_blocks": "Dominis ocults",
   "column.favourites": "Favorits",
   "column.follow_requests": "Peticions per seguir-te",
@@ -63,7 +63,6 @@
   "column.notifications": "Notificacions",
   "column.pins": "Toots fixats",
   "column.public": "Línia de temps federada",
-  "column.status": "Toot",
   "column_back_button.label": "Enrere",
   "column_header.hide_settings": "Amaga la configuració",
   "column_header.moveLeft_settings": "Mou la columna cap a l'esquerra",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?",
   "confirmations.domain_block.confirm": "Amaga tot el domini",
   "confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut d’aquest domini en cap de les línies públiques ni en les notificacions. Els teus seguidors d’aquest domini seran eliminats.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "Tancar sessió",
+  "confirmations.logout.message": "Segur que vols tancar la sessió?",
   "confirmations.mute.confirm": "Silencia",
+  "confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen però encara els permetrà veure les teves i seguir-te.",
   "confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
   "confirmations.redraft.confirm": "Esborrar i refer",
   "confirmations.redraft.message": "Estàs segur que vols esborrar aquest toot i tornar a redactar-lo? Perderàs totes els impulsos i favorits, i les respostes al toot original es quedaran orfes.",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "Responen ara es sobreescriurà el missatge que estàs editant. Estàs segur que vols continuar?",
   "confirmations.unfollow.confirm": "Deixa de seguir",
   "confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "conversation.delete": "Elimina la conversa",
+  "conversation.mark_as_read": "Marca com a llegida",
+  "conversation.open": "Veure conversa",
+  "conversation.with": "Amb {names}",
+  "directory.federated": "Del fedivers conegut",
+  "directory.local": "Només de {domain}",
+  "directory.new_arrivals": "Arribades noves",
+  "directory.recently_active": "Recentment actius",
   "embed.instructions": "Incrusta aquest toot al lloc web copiant el codi a continuació.",
   "embed.preview": "Aquí tenim quin aspecte tindrá:",
   "emoji_button.activity": "Activitat",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Encara no has silenciat cap usuari.",
   "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
   "empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho",
+  "error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina no podria ser mostrada correctament.",
+  "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda encara pots ser capaç d'utilitzar Mastodont a través d'un navegador diferent o app nativa.",
+  "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls",
+  "errors.unexpected_crash.report_issue": "Informa d'un problema",
   "follow_request.authorize": "Autoritzar",
   "follow_request.reject": "Rebutjar",
   "getting_started.developers": "Desenvolupadors",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} notificacions",
   "poll.closed": "Finalitzada",
   "poll.refresh": "Actualitza",
+  "poll.total_people": "{count, plural, one {# persona} other {# persones}}",
   "poll.total_votes": "{count, plural, one {# vot} other {# vots}}",
   "poll.vote": "Vota",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Vas votar per aquesta resposta",
   "poll_button.add_poll": "Afegeix una enquesta",
   "poll_button.remove_poll": "Elimina l'enquesta",
   "privacy.change": "Ajusta l'estat de privacitat",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Públic",
   "privacy.unlisted.long": "No publicar en línies de temps públiques",
   "privacy.unlisted.short": "No llistat",
+  "refresh": "Actualitza",
   "regeneration_indicator.label": "Carregant…",
   "regeneration_indicator.sublabel": "S'està preparant la línia de temps Inici!",
   "relative_time.days": "fa {number} dies",
@@ -374,7 +380,7 @@
   "status.show_more": "Mostra més",
   "status.show_more_all": "Mostra més per a tot",
   "status.show_thread": "Mostra el fil",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "No està disponible",
   "status.unmute_conversation": "Activar conversació",
   "status.unpin": "Deslliga del perfil",
   "suggestions.dismiss": "Descartar suggeriment",
@@ -390,7 +396,7 @@
   "time_remaining.moments": "Moments restants",
   "time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
-  "trends.trending_now": "Trending now",
+  "trends.trending_now": "Ara en tendència",
   "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
   "upload_area.title": "Arrossega i deixa anar per a carregar",
   "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 7ebe08cf5..3b059459c 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -63,7 +63,6 @@
   "column.notifications": "Nutificazione",
   "column.pins": "Statuti puntarulati",
   "column.public": "Linea pubblica glubale",
-  "column.status": "Statutu",
   "column_back_button.label": "Ritornu",
   "column_header.hide_settings": "Piattà i parametri",
   "column_header.moveLeft_settings": "Spiazzà à manca",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Scunnettassi",
   "confirmations.logout.message": "Site sicuru·a che vulete scunnettà vi?",
   "confirmations.mute.confirm": "Piattà",
+  "confirmations.mute.explanation": "Quessu hà da piattà i statuti da sta persona è i posti chì a mintuvanu, mà ellu·a puderà sempre vede i vostri statuti è siguità vi.",
   "confirmations.mute.message": "Site sicuru·a che vulete piattà @{name}?",
   "confirmations.redraft.confirm": "Sguassà è riscrive",
   "confirmations.redraft.message": "Site sicuru·a chè vulete sguassà stu statutu è riscrivelu? I favuriti è spartere saranu persi, è e risposte diventeranu orfane.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Per avà ùn avete manc'un utilizatore piattatu.",
   "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.",
   "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica",
+  "error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.",
+  "error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.",
+  "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta",
+  "errors.unexpected_crash.report_issue": "Palisà prublemu",
   "follow_request.authorize": "Auturizà",
   "follow_request.reject": "Righjittà",
   "getting_started.developers": "Sviluppatori",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} nutificazione",
   "poll.closed": "Chjosu",
   "poll.refresh": "Attualizà",
+  "poll.total_people": "{count, plural, one {# persona} other {# persone}}",
   "poll.total_votes": "{count, plural, one {# votu} other {# voti}}",
   "poll.vote": "Vutà",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Avete vutatu per sta risposta",
   "poll_button.add_poll": "Aghjunghje",
   "poll_button.remove_poll": "Toglie u scandagliu",
   "privacy.change": "Mudificà a cunfidenzialità di u statutu",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Pubblicu",
   "privacy.unlisted.long": "Ùn mette micca nant'à e linee pubbliche",
   "privacy.unlisted.short": "Micca listatu",
+  "refresh": "Attualizà",
   "regeneration_indicator.label": "Caricamentu…",
   "regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!",
   "relative_time.days": "{number}ghj",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 94a659435..c783fbe77 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -63,7 +63,6 @@
   "column.notifications": "Oznámení",
   "column.pins": "Připnuté tooty",
   "column.public": "Federovaná časová osa",
-  "column.status": "Toot",
   "column_back_button.label": "Zpět",
   "column_header.hide_settings": "Skrýt nastavení",
   "column_header.moveLeft_settings": "Posunout sloupec doleva",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Odhlásit",
   "confirmations.logout.message": "Jste si jistý/á, že se chcete odhlásit?",
   "confirmations.mute.confirm": "Skrýt",
+  "confirmations.mute.explanation": "Tohle skryje jeho příspěvky a příspěvky, které ho zmiňují, ale uživatel pořád bude moci vidět vaše příspěvky a sledovat vás.",
   "confirmations.mute.message": "Jste si jistý/á, že chcete skrýt uživatele {name}?",
   "confirmations.redraft.confirm": "Smazat a přepsat",
   "confirmations.redraft.message": "Jste si jistý/á, že chcete smazat a přepsat tento toot? Oblíbení a boosty budou ztraceny a odpovědi na původní příspěvek budou opuštěny.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Ještě jste neskryl/a žádné uživatele.",
   "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
   "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
+  "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.",
+  "error.unexpected_crash.next_steps": "Zkuste obnovit stránku. Pokud to nepomůže, budete možná moci dále používat Mastodon pomocí jiného prohlížeče nebo nativní aplikace.",
+  "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
+  "errors.unexpected_crash.report_issue": "Nahlásit problém",
   "follow_request.authorize": "Autorizovat",
   "follow_request.reject": "Odmítnout",
   "getting_started.developers": "Vývojáři",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} oznámení",
   "poll.closed": "Uzavřena",
   "poll.refresh": "Obnovit",
+  "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}",
   "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasu} other {# hlasů}}",
   "poll.vote": "Hlasovat",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Pro tuto odpověď jste hlasoval/a",
   "poll_button.add_poll": "Přidat anketu",
   "poll_button.remove_poll": "Odstranit anketu",
   "privacy.change": "Změnit soukromí tootu",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Veřejný",
   "privacy.unlisted.long": "Neodeslat na veřejné časové osy",
   "privacy.unlisted.short": "Neuvedený",
+  "refresh": "Obnovit",
   "regeneration_indicator.label": "Načítám…",
   "regeneration_indicator.sublabel": "Váš domovský proud se připravuje!",
   "relative_time.days": "{number} d",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index c7f679b22..b9dad4062 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -63,7 +63,6 @@
   "column.notifications": "Hysbysiadau",
   "column.pins": "Tŵtiau wedi eu pinio",
   "column.public": "Ffrwd y ffederasiwn",
-  "column.status": "Tŵt",
   "column_back_button.label": "Nôl",
   "column_header.hide_settings": "Cuddio dewisiadau",
   "column_header.moveLeft_settings": "Symud y golofn i'r chwith",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Allgofnodi",
   "confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
   "confirmations.mute.confirm": "Tawelu",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ydych chi'n sicr eich bod am ddistewi {name}?",
   "confirmations.redraft.confirm": "Dileu & ailddrafftio",
   "confirmations.redraft.message": "Ydych chi'n siwr eich bod eisiau dileu y tŵt hwn a'i ailddrafftio? Bydd ffefrynnau a bwstiau'n cael ei colli, a bydd ymatebion i'r tŵt gwreiddiol yn cael eu hamddifadu.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Nid ydych wedi tawelu unrhyw ddefnyddwyr eto.",
   "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.",
   "empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o achosion eraill i'w lenwi",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Caniatau",
   "follow_request.reject": "Gwrthod",
   "getting_started.developers": "Datblygwyr",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Syml",
   "home.column_settings.show_reblogs": "Dangos bŵstiau",
   "home.column_settings.show_replies": "Dangos ymatebion",
-  "home.column_settings.update_live": "Diweddariad mewn amser real",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}",
   "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}",
   "intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Dewisiadau",
   "navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
   "navigation_bar.security": "Diogelwch",
-  "notification.and_n_others": "a {count, plural, one {# arall} other {# eraill}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "hoffodd {name} eich tŵt",
   "notification.follow": "dilynodd {name} chi",
   "notification.mention": "Soniodd {name} amdanoch chi",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} o hysbysiadau",
   "poll.closed": "Ar gau",
   "poll.refresh": "Adnewyddu",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# bleidlais} other {# o bleidleisiau}}",
   "poll.vote": "Pleidleisio",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Cyhoeddus",
   "privacy.unlisted.long": "Peidio a chyhoeddi i ffrydiau cyhoeddus",
   "privacy.unlisted.short": "Heb ei restru",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Llwytho…",
   "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!",
   "relative_time.days": "{number}dydd",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 852b6d157..2362db471 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifikationer",
   "column.pins": "Fastgjorte trut",
   "column.public": "Fælles tidslinje",
-  "column.status": "Toot",
   "column_back_button.label": "Tilbage",
   "column_header.hide_settings": "Skjul indstillinger",
   "column_header.moveLeft_settings": "Flyt kolonne til venstre",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log ud",
   "confirmations.logout.message": "Er du sikker på du vil logge ud?",
   "confirmations.mute.confirm": "Dæmp",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?",
   "confirmations.redraft.confirm": "Slet & omskriv",
   "confirmations.redraft.message": "Er du sikker på, du vil slette denne status og omskrive den? Favoritter og fremhævelser vil gå tabt og svar til det oprindelige opslag vil blive forældreløse.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Du har endnu ikke dæmpet nogen som helst bruger.",
   "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.",
   "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Godkend",
   "follow_request.reject": "Afvis",
   "getting_started.developers": "Udviklere",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifikationer",
   "poll.closed": "Lukket",
   "poll.refresh": "Opdatér",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}",
   "poll.vote": "Stem",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Offentligt",
   "privacy.unlisted.long": "Udgiv ikke på offentlige tidslinjer",
   "privacy.unlisted.short": "Ikke listet",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Indlæser…",
   "regeneration_indicator.sublabel": "Din startside er ved at blive forberedt!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 08b75c9ec..193fcebd4 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -63,7 +63,6 @@
   "column.notifications": "Mitteilungen",
   "column.pins": "Angeheftete Beiträge",
   "column.public": "Föderierte Zeitleiste",
-  "column.status": "Beitrag",
   "column_back_button.label": "Zurück",
   "column_header.hide_settings": "Einstellungen verbergen",
   "column_header.moveLeft_settings": "Spalte nach links verschieben",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Abmelden",
   "confirmations.logout.message": "Bist du sicher, dass du dich abmelden möchtest?",
   "confirmations.mute.confirm": "Stummschalten",
+  "confirmations.mute.explanation": "Dies wird Beiträge von dieser Person und Beiträge, die diese Person erwähnen, ausblenden, aber es wird der Person trotzdem erlauben, deine Beiträge zu sehen und dir zu folgen.",
   "confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?",
   "confirmations.redraft.confirm": "Löschen und neu erstellen",
   "confirmations.redraft.message": "Bist du dir sicher, dass du diesen Beitrag löschen und neu erstellen möchtest? Favorisierungen, geteilte Beiträge und Antworten werden verloren gehen.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
   "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
   "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen",
+  "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.",
+  "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.",
+  "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren",
+  "errors.unexpected_crash.report_issue": "Problem melden",
   "follow_request.authorize": "Erlauben",
   "follow_request.reject": "Ablehnen",
   "getting_started.developers": "Entwickler",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} Benachrichtigungen",
   "poll.closed": "Geschlossen",
   "poll.refresh": "Aktualisieren",
+  "poll.total_people": "{count, plural, one {# Person} other {# Personen}}",
   "poll.total_votes": "{count, plural, one {# Stimme} other {# Stimmen}}",
   "poll.vote": "Abstimmen",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Du hast dafür gestimmt",
   "poll_button.add_poll": "Eine Umfrage erstellen",
   "poll_button.remove_poll": "Umfrage entfernen",
   "privacy.change": "Sichtbarkeit des Beitrags anpassen",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Öffentlich",
   "privacy.unlisted.long": "Wird in öffentlichen Zeitleisten nicht gezeigt",
   "privacy.unlisted.short": "Nicht gelistet",
+  "refresh": "Aktualisieren",
   "regeneration_indicator.label": "Laden…",
   "regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index efefafe55..fb58e43b5 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -151,6 +151,27 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+        "id": "error.unexpected_crash.explanation"
+      },
+      {
+        "defaultMessage": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+        "id": "error.unexpected_crash.next_steps"
+      },
+      {
+        "defaultMessage": "Report issue",
+        "id": "errors.unexpected_crash.report_issue"
+      },
+      {
+        "defaultMessage": "Copy stacktrace to clipboard",
+        "id": "errors.unexpected_crash.copy_stacktrace"
+      }
+    ],
+    "path": "app/javascript/mastodon/components/error_boundary.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "{count} {rawCount, plural, one {person} other {people}} talking",
         "id": "trends.count_by_accounts"
       }
@@ -239,16 +260,20 @@
         "id": "poll.voted"
       },
       {
+        "defaultMessage": "{count, plural, one {# person} other {# people}}",
+        "id": "poll.total_people"
+      },
+      {
+        "defaultMessage": "{count, plural, one {# vote} other {# votes}}",
+        "id": "poll.total_votes"
+      },
+      {
         "defaultMessage": "Vote",
         "id": "poll.vote"
       },
       {
         "defaultMessage": "Refresh",
         "id": "poll.refresh"
-      },
-      {
-        "defaultMessage": "{count, plural, one {# vote} other {# votes}}",
-        "id": "poll.total_votes"
       }
     ],
     "path": "app/javascript/mastodon/components/poll.json"
@@ -499,24 +524,12 @@
         "id": "confirmations.redraft.message"
       },
       {
-        "defaultMessage": "Block",
-        "id": "confirmations.block.confirm"
-      },
-      {
         "defaultMessage": "Reply",
         "id": "confirmations.reply.confirm"
       },
       {
         "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
         "id": "confirmations.reply.message"
-      },
-      {
-        "defaultMessage": "Block & Report",
-        "id": "confirmations.block.block_and_report"
-      },
-      {
-        "defaultMessage": "Are you sure you want to block {name}?",
-        "id": "confirmations.block.message"
       }
     ],
     "path": "app/javascript/mastodon/containers/status_container.json"
@@ -554,26 +567,14 @@
         "id": "confirmations.unfollow.confirm"
       },
       {
-        "defaultMessage": "Block",
-        "id": "confirmations.block.confirm"
-      },
-      {
         "defaultMessage": "Hide entire domain",
         "id": "confirmations.domain_block.confirm"
       },
       {
-        "defaultMessage": "Block & Report",
-        "id": "confirmations.block.block_and_report"
-      },
-      {
         "defaultMessage": "Are you sure you want to unfollow {name}?",
         "id": "confirmations.unfollow.message"
       },
       {
-        "defaultMessage": "Are you sure you want to block {name}?",
-        "id": "confirmations.block.message"
-      },
-      {
         "defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
         "id": "confirmations.domain_block.message"
       }
@@ -1483,6 +1484,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Refresh",
+        "id": "refresh"
+      },
+      {
         "defaultMessage": "Profile unavailable",
         "id": "empty_column.account_unavailable"
       },
@@ -2156,6 +2161,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Refresh",
+        "id": "refresh"
+      },
+      {
         "defaultMessage": "No one has boosted this toot yet. When someone does, they will show up here.",
         "id": "status.reblogs.empty"
       }
@@ -2274,24 +2283,12 @@
         "id": "confirmations.redraft.message"
       },
       {
-        "defaultMessage": "Block",
-        "id": "confirmations.block.confirm"
-      },
-      {
         "defaultMessage": "Reply",
         "id": "confirmations.reply.confirm"
       },
       {
         "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
         "id": "confirmations.reply.message"
-      },
-      {
-        "defaultMessage": "Block & Report",
-        "id": "confirmations.block.block_and_report"
-      },
-      {
-        "defaultMessage": "Are you sure you want to block {name}?",
-        "id": "confirmations.block.message"
       }
     ],
     "path": "app/javascript/mastodon/features/status/containers/detailed_status_container.json"
@@ -2315,10 +2312,6 @@
         "id": "confirmations.redraft.message"
       },
       {
-        "defaultMessage": "Block",
-        "id": "confirmations.block.confirm"
-      },
-      {
         "defaultMessage": "Show more for all",
         "id": "status.show_more_all"
       },
@@ -2337,21 +2330,39 @@
       {
         "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
         "id": "confirmations.reply.message"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/status/index.json"
+  },
+  {
+    "descriptors": [
+      {
+        "defaultMessage": "View context",
+        "id": "lightbox.view_context"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/ui/components/audio_modal.json"
+  },
+  {
+    "descriptors": [
+      {
+        "defaultMessage": "Are you sure you want to block {name}?",
+        "id": "confirmations.block.message"
       },
       {
-        "defaultMessage": "Block & Report",
-        "id": "confirmations.block.block_and_report"
+        "defaultMessage": "Cancel",
+        "id": "confirmation_modal.cancel"
       },
       {
-        "defaultMessage": "Toot",
-        "id": "column.status"
+        "defaultMessage": "Block & Report",
+        "id": "confirmations.block.block_and_report"
       },
       {
-        "defaultMessage": "Are you sure you want to block {name}?",
-        "id": "confirmations.block.message"
+        "defaultMessage": "Block",
+        "id": "confirmations.block.confirm"
       }
     ],
-    "path": "app/javascript/mastodon/features/status/index.json"
+    "path": "app/javascript/mastodon/features/ui/components/block_modal.json"
   },
   {
     "descriptors": [
@@ -2438,6 +2449,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Close",
+        "id": "lightbox.close"
+      },
+      {
         "defaultMessage": "Embed",
         "id": "status.embed"
       },
@@ -2583,6 +2598,10 @@
         "id": "confirmations.mute.message"
       },
       {
+        "defaultMessage": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+        "id": "confirmations.mute.explanation"
+      },
+      {
         "defaultMessage": "Hide notifications from this user?",
         "id": "mute_modal.hide_notifications"
       },
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 9425c3f12..7e5e1490d 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -63,7 +63,6 @@
   "column.notifications": "Ειδοποιήσεις",
   "column.pins": "Καρφιτσωμένα τουτ",
   "column.public": "Ομοσπονδιακή ροή",
-  "column.status": "Τουτ",
   "column_back_button.label": "Πίσω",
   "column_header.hide_settings": "Απόκρυψη ρυθμίσεων",
   "column_header.moveLeft_settings": "Μεταφορά κολώνας αριστερά",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Αποσύνδεση",
   "confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;",
   "confirmations.mute.confirm": "Αποσιώπηση",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Σίγουρα θες να αποσιωπήσεις {name};",
   "confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
   "confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την κατάσταση και να την ξαναγράψεις; Οι αναφορές και τα αγαπημένα της θα χαθούν ενώ οι απαντήσεις προς αυτή θα μείνουν ορφανές.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Δεν έχεις αποσιωπήσει κανένα χρήστη ακόμα.",
   "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.",
   "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Ενέκρινε",
   "follow_request.reject": "Απέρριψε",
   "getting_started.developers": "Ανάπτυξη",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Βασικές ρυθμίσεις",
   "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
   "home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
-  "home.column_settings.update_live": "Ενημέρωση σε πραγματικό χρόνο",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
   "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
   "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Προτιμήσεις",
   "navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
   "navigation_bar.security": "Ασφάλεια",
-  "notification.and_n_others": "και {count, plural, one {# άλλη} other {# άλλες}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
   "notification.follow": "Ο/Η {name} σε ακολούθησε",
   "notification.mention": "Ο/Η {name} σε ανέφερε",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} ειδοποιήσεις",
   "poll.closed": "Κλειστή",
   "poll.refresh": "Ανανέωση",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# ψήφος} other {# ψήφοι}}",
   "poll.vote": "Ψήφισε",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Ψηφίσατε αυτήν την απάντηση",
   "poll_button.add_poll": "Προσθήκη δημοσκόπησης",
   "poll_button.remove_poll": "Αφαίρεση δημοσκόπησης",
   "privacy.change": "Προσαρμογή ιδιωτικότητας δημοσίευσης",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Δημόσιο",
   "privacy.unlisted.long": "Μην δημοσιεύσεις στις δημόσιες ροές",
   "privacy.unlisted.short": "Μη καταχωρημένα",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Φορτώνει…",
   "regeneration_indicator.sublabel": "Η αρχική σου ροή ετοιμάζεται!",
   "relative_time.days": "{number}η",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 27121d121..272f40c3a 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toots",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -108,6 +107,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -156,6 +156,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -164,7 +168,7 @@
   "getting_started.heading": "Getting started",
   "getting_started.invite": "Invite people",
   "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.security": "Security",
+  "getting_started.security": "Account settings",
   "getting_started.terms": "Terms of service",
   "hashtag.column_header.tag_mode.all": "and {additional}",
   "hashtag.column_header.tag_mode.any": "or {additional}",
@@ -302,6 +306,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -316,6 +321,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not post to public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index bf08a08fb..5aeb605bd 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -63,7 +63,6 @@
   "column.notifications": "Sciigoj",
   "column.pins": "Alpinglitaj mesaĝoj",
   "column.public": "Fratara tempolinio",
-  "column.status": "Mesaĝo",
   "column_back_button.label": "Reveni",
   "column_header.hide_settings": "Kaŝi agordojn",
   "column_header.moveLeft_settings": "Movi kolumnon maldekstren",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Elsaluti",
   "confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?",
   "confirmations.mute.confirm": "Silentigi",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?",
   "confirmations.redraft.confirm": "Forigi kaj reskribi",
   "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.",
   "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.",
   "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Raporti problemon",
   "follow_request.authorize": "Rajtigi",
   "follow_request.reject": "Rifuzi",
   "getting_started.developers": "Programistoj",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Bazaj agordoj",
   "home.column_settings.show_reblogs": "Montri diskonigojn",
   "home.column_settings.show_replies": "Montri respondojn",
-  "home.column_settings.update_live": "Tuje ĝisdatigi",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}",
   "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Preferoj",
   "navigation_bar.public_timeline": "Fratara tempolinio",
   "navigation_bar.security": "Sekureco",
-  "notification.and_n_others": "kaj {count, plural, one {# alia} other {# aliaj}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} stelumis vian mesaĝon",
   "notification.follow": "{name} eksekvis vin",
   "notification.mention": "{name} menciis vin",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} sciigoj",
   "poll.closed": "Finita",
   "poll.refresh": "Aktualigi",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}",
   "poll.vote": "Voĉdoni",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Vi elektis por ĉi tiu respondo",
   "poll_button.add_poll": "Aldoni balotenketon",
   "poll_button.remove_poll": "Forigi balotenketon",
   "privacy.change": "Agordi mesaĝan privatecon",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publika",
   "privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj",
   "privacy.unlisted.short": "Nelistigita",
+  "refresh": "Refreŝigu",
   "regeneration_indicator.label": "Ŝargado…",
   "regeneration_indicator.sublabel": "Via hejma fluo pretiĝas!",
   "relative_time.days": "{number}t",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 89ddcbf51..825a67178 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificaciones",
   "column.pins": "Toots fijados",
   "column.public": "Línea temporal federada",
-  "column.status": "Toot",
   "column_back_button.label": "Volver",
   "column_header.hide_settings": "Ocultar configuración",
   "column_header.moveLeft_settings": "Mover columna a la izquierda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Cerrar sesión",
   "confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?",
   "confirmations.mute.confirm": "Silenciar",
+  "confirmations.mute.explanation": "Esto ocultará mensajes de ellos y mensajes que los mencionen, pero todavía les permitirá ver tus mensajes o seguirte.",
   "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?",
   "confirmations.redraft.confirm": "Eliminar toot original y editarlo",
   "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volverlo a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Todavía no silenciaste a ningún usuario.",
   "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.",
   "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.",
+  "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.",
+  "error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.",
+  "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles",
+  "errors.unexpected_crash.report_issue": "Informar problema",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
   "getting_started.developers": "Desarrolladores",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Configuración",
   "navigation_bar.public_timeline": "Línea temporal federada",
   "navigation_bar.security": "Seguridad",
-  "notification.and_n_others": "y {count, plural, one {# otro} other {# otros}}",
+  "notification.and_n_others": "y {count, plural, one {otro} other {otros #}}",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te mencionó",
@@ -297,123 +301,125 @@
   "notifications.group": "{count} notificaciones",
   "poll.closed": "Cerrada",
   "poll.refresh": "Refrescar",
+  "poll.total_people": "{count, plural, one {# persona} other {# personas}}",
   "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
   "poll.vote": "Votar",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
-  "privacy.change": "Adjust status privacy",
-  "privacy.direct.long": "Post to mentioned users only",
-  "privacy.direct.short": "Direct",
-  "privacy.private.long": "Post to followers only",
-  "privacy.private.short": "Followers-only",
-  "privacy.public.long": "Post to public timelines",
-  "privacy.public.short": "Public",
-  "privacy.unlisted.long": "Do not show in public timelines",
-  "privacy.unlisted.short": "Unlisted",
-  "regeneration_indicator.label": "Loading…",
-  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "poll.voted": "Votaste esta opción",
+  "poll_button.add_poll": "Agregar una encuesta",
+  "poll_button.remove_poll": "Quitar encuesta",
+  "privacy.change": "Configurar privacidad de estado",
+  "privacy.direct.long": "Enviar entrada sólo a los usuarios mencionados",
+  "privacy.direct.short": "Directo",
+  "privacy.private.long": "Enviar entrada sólo a los seguidores",
+  "privacy.private.short": "Sólo a seguidores",
+  "privacy.public.long": "Enviar entrada a las líneas temporales públicas",
+  "privacy.public.short": "Público",
+  "privacy.unlisted.long": "No enviar entrada a las líneas temporales públicas",
+  "privacy.unlisted.short": "No listado",
+  "refresh": "Refrescar",
+  "regeneration_indicator.label": "Cargando…",
+  "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
-  "relative_time.just_now": "now",
+  "relative_time.just_now": "recién",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
-  "reply_indicator.cancel": "Cancel",
-  "report.forward": "Forward to {target}",
-  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
-  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
-  "report.placeholder": "Additional comments",
-  "report.submit": "Submit",
-  "report.target": "Report {target}",
-  "search.placeholder": "Search",
-  "search_popout.search_format": "Advanced search format",
-  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
-  "search_popout.tips.hashtag": "hashtag",
-  "search_popout.tips.status": "status",
-  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
-  "search_popout.tips.user": "user",
-  "search_results.accounts": "People",
-  "search_results.hashtags": "Hashtags",
+  "reply_indicator.cancel": "Cancelar",
+  "report.forward": "Reenviar a {target}",
+  "report.forward_hint": "La cuenta es de otro servidor. ¿Querés enviar una copia anonimizada del informe también ahí?",
+  "report.hint": "La denuncia se enviará a los moderadores de tu servidor. Podés proporcionar una explicación de por qué estás denunciando esta cuenta, a continuación:",
+  "report.placeholder": "Comentarios adicionales",
+  "report.submit": "Enviar",
+  "report.target": "Denunciando a {target}",
+  "search.placeholder": "Buscar",
+  "search_popout.search_format": "Formato de búsqueda avanzada",
+  "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los estados que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres usuarios, nombres mostrados y etiquetas.",
+  "search_popout.tips.hashtag": "etiqueta",
+  "search_popout.tips.status": "estado",
+  "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan",
+  "search_popout.tips.user": "usuario",
+  "search_results.accounts": "Gente",
+  "search_results.hashtags": "Etiquetas",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
-  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
-  "status.block": "Block @{name}",
-  "status.cancel_reblog_private": "Unboost",
-  "status.cannot_reblog": "This post cannot be boosted",
-  "status.copy": "Copy link to status",
-  "status.delete": "Delete",
-  "status.detailed_status": "Detailed conversation view",
-  "status.direct": "Direct message @{name}",
-  "status.embed": "Embed",
-  "status.favourite": "Favourite",
-  "status.filtered": "Filtered",
-  "status.load_more": "Load more",
-  "status.media_hidden": "Media hidden",
-  "status.mention": "Mention @{name}",
-  "status.more": "More",
-  "status.mute": "Mute @{name}",
-  "status.mute_conversation": "Mute conversation",
-  "status.open": "Expand this status",
-  "status.pin": "Pin on profile",
-  "status.pinned": "Pinned toot",
-  "status.read_more": "Read more",
-  "status.reblog": "Boost",
-  "status.reblog_private": "Boost to original audience",
-  "status.reblogged_by": "{name} boosted",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
-  "status.redraft": "Delete & re-draft",
-  "status.reply": "Reply",
-  "status.replyAll": "Reply to thread",
-  "status.report": "Report @{name}",
-  "status.sensitive_warning": "Sensitive content",
-  "status.share": "Share",
-  "status.show_less": "Show less",
-  "status.show_less_all": "Show less for all",
-  "status.show_more": "Show more",
-  "status.show_more_all": "Show more for all",
-  "status.show_thread": "Show thread",
-  "status.uncached_media_warning": "Not available",
-  "status.unmute_conversation": "Unmute conversation",
-  "status.unpin": "Unpin from profile",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
-  "tabs_bar.federated_timeline": "Federated",
-  "tabs_bar.home": "Home",
+  "search_results.statuses_fts_disabled": "No se puede buscar toots por contenido en este servidor de Mastodon.",
+  "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
+  "status.admin_account": "Abrir interface de moderación para @{name}",
+  "status.admin_status": "Abrir este estado en la interface de moderación",
+  "status.block": "Bloquear a @{name}",
+  "status.cancel_reblog_private": "Quitar retoot",
+  "status.cannot_reblog": "No se puede retootear este toot",
+  "status.copy": "Copiar enlace al estado",
+  "status.delete": "Eliminar",
+  "status.detailed_status": "Vista de conversación detallada",
+  "status.direct": "Mensaje directo a @{name}",
+  "status.embed": "Insertar",
+  "status.favourite": "Favorito",
+  "status.filtered": "Filtrado",
+  "status.load_more": "Cargar más",
+  "status.media_hidden": "Medios ocultos",
+  "status.mention": "Mencionar a @{name}",
+  "status.more": "Más",
+  "status.mute": "Silenciar a @{name}",
+  "status.mute_conversation": "Silenciar conversación",
+  "status.open": "Expandir este estado",
+  "status.pin": "Pin en el perfil",
+  "status.pinned": "Toot fijado",
+  "status.read_more": "Leer más",
+  "status.reblog": "Retootear",
+  "status.reblog_private": "Retootear a la audiencia original",
+  "status.reblogged_by": "Retooteado por {name}",
+  "status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.",
+  "status.redraft": "Eliminar toot original y editarlo",
+  "status.reply": "Responder",
+  "status.replyAll": "Responder al hilo",
+  "status.report": "Denunciar a @{name}",
+  "status.sensitive_warning": "Contenido sensible",
+  "status.share": "Compartir",
+  "status.show_less": "Mostrar menos",
+  "status.show_less_all": "Mostrar menos para todo",
+  "status.show_more": "Mostrar más",
+  "status.show_more_all": "Mostrar más para todo",
+  "status.show_thread": "Mostrar hilo",
+  "status.uncached_media_warning": "No disponible",
+  "status.unmute_conversation": "Dejar de silenciar conversación",
+  "status.unpin": "Desmarcar del perfil",
+  "suggestions.dismiss": "Descartar sugerencia",
+  "suggestions.header": "Es posible que te interese…",
+  "tabs_bar.federated_timeline": "Federado",
+  "tabs_bar.home": "Principal",
   "tabs_bar.local_timeline": "Local",
-  "tabs_bar.notifications": "Notifications",
-  "tabs_bar.search": "Search",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
-  "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
-  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
-  "trends.trending_now": "Trending now",
-  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
-  "upload_area.title": "Drag & drop to upload",
-  "upload_button.label": "Add media ({formats})",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
-  "upload_form.description": "Describe for the visually impaired",
-  "upload_form.edit": "Edit",
-  "upload_form.undo": "Delete",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
-  "video.close": "Close video",
-  "video.exit_fullscreen": "Exit full screen",
-  "video.expand": "Expand video",
-  "video.fullscreen": "Full screen",
-  "video.hide": "Hide video",
-  "video.mute": "Mute sound",
-  "video.pause": "Pause",
-  "video.play": "Play",
-  "video.unmute": "Unmute sound"
+  "tabs_bar.notifications": "Notificaciones",
+  "tabs_bar.search": "Buscar",
+  "time_remaining.days": "{number, plural,one {queda # día} other {quedan # días}}",
+  "time_remaining.hours": "{number, plural,one {queda # hora} other {quedan # horas}}",
+  "time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}",
+  "time_remaining.moments": "Momentos restantes",
+  "time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando",
+  "trends.trending_now": "Tendencia ahora",
+  "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
+  "upload_area.title": "Para subir, arrastrá y soltá",
+  "upload_button.label": "Agregar medios ({formats})",
+  "upload_error.limit": "Se excedió el límite de subida de archivos.",
+  "upload_error.poll": "No se permite la subida de archivos en encuestas.",
+  "upload_form.description": "Agregar descripción para los usuarios con dificultades visuales",
+  "upload_form.edit": "Editar",
+  "upload_form.undo": "Eliminar",
+  "upload_modal.analyzing_picture": "Analizando imagen…",
+  "upload_modal.apply": "Aplicar",
+  "upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.",
+  "upload_modal.detect_text": "Detectar texto de la imagen",
+  "upload_modal.edit_media": "Editar medio",
+  "upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
+  "upload_modal.preview_label": "Previsualización ({ratio})",
+  "upload_progress.label": "Subiendo…",
+  "video.close": "Cerrar video",
+  "video.exit_fullscreen": "Salir de pantalla completa",
+  "video.expand": "Expandir vídeo",
+  "video.fullscreen": "Pantalla completa",
+  "video.hide": "Ocultar video",
+  "video.mute": "Silenciar sonido",
+  "video.pause": "Pausar",
+  "video.play": "Reproducir",
+  "video.unmute": "Dejar de silenciar sonido"
 }
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 63be0e4c3..8a88b0c5b 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificaciones",
   "column.pins": "Toots fijados",
   "column.public": "Línea de tiempo federada",
-  "column.status": "Toot",
   "column_back_button.label": "Atrás",
   "column_header.hide_settings": "Ocultar configuración",
   "column_header.moveLeft_settings": "Mover columna a la izquierda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Cerrar sesión",
   "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?",
   "confirmations.mute.confirm": "Silenciar",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
   "confirmations.redraft.confirm": "Borrar y volver a borrador",
   "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
   "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
   "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
   "getting_started.developers": "Desarrolladores",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar retoots",
   "home.column_settings.show_replies": "Mostrar respuestas",
-  "home.column_settings.update_live": "Actualizar en tiempo real",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Historia federada",
   "navigation_bar.security": "Seguridad",
-  "notification.and_n_others": "y {count, plural, one {# otro} other {# otros}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te ha mencionado",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notificaciones",
   "poll.closed": "Cerrada",
   "poll.refresh": "Actualizar",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
   "poll.vote": "Votar",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Público",
   "privacy.unlisted.long": "No mostrar en la historia federada",
   "privacy.unlisted.short": "No listado",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Cargando…",
   "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index 5d3b080de..bd43c1475 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -63,7 +63,6 @@
   "column.notifications": "Teated",
   "column.pins": "Kinnitatud upitused",
   "column.public": "Föderatiivne ajajoon",
-  "column.status": "Toot",
   "column_back_button.label": "Tagasi",
   "column_header.hide_settings": "Peida sätted",
   "column_header.moveLeft_settings": "Liiguta tulp vasakule",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Vaigista",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Oled kindel, et soovid {name} vaigistada?",
   "confirmations.redraft.confirm": "Kustuta & taasalusta",
   "confirmations.redraft.message": "Oled kindel, et soovid selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.",
   "empty_column.notifications": "Sul ei ole veel teateid. Suhtle teistega alustamaks vestlust.",
   "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autoriseeri",
   "follow_request.reject": "Hülga",
   "getting_started.developers": "Arendajad",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} teated",
   "poll.closed": "Suletud",
   "poll.refresh": "Värskenda",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# hääl} other {# hääli}}",
   "poll.vote": "Hääleta",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Avalik",
   "privacy.unlisted.long": "Ära postita avalikele ajajoontele",
   "privacy.unlisted.short": "Määramata",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Laeb…",
   "regeneration_indicator.sublabel": "Sinu kodu voog on ettevalmistamisel!",
   "relative_time.days": "{number}p",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 0d272c223..a8b10513d 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -63,7 +63,6 @@
   "column.notifications": "Jakinarazpenak",
   "column.pins": "Pinned toot",
   "column.public": "Federatutako denbora-lerroa",
-  "column.status": "Toot",
   "column_back_button.label": "Atzera",
   "column_header.hide_settings": "Ezkutatu ezarpenak",
   "column_header.moveLeft_settings": "Eraman zutabea ezkerrera",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Amaitu saioa",
   "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
   "confirmations.mute.confirm": "Mututu",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
   "confirmations.redraft.confirm": "Ezabatu eta berridatzi",
   "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.",
   "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
   "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Baimendu",
   "follow_request.reject": "Ukatu",
   "getting_started.developers": "Garatzaileak",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} jakinarazpen",
   "poll.closed": "Itxita",
   "poll.refresh": "Berritu",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {boto #} other {# boto}}",
   "poll.vote": "Bozkatu",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publikoa",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Zerrendatu gabea",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Kargatzen…",
   "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!",
   "relative_time.days": "{number}e",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 70c1734cb..97b7dc00d 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -63,7 +63,6 @@
   "column.notifications": "اعلان‌ها",
   "column.pins": "نوشته‌های ثابت",
   "column.public": "نوشته‌های همه‌جا",
-  "column.status": "بوق",
   "column_back_button.label": "بازگشت",
   "column_header.hide_settings": "نهفتن تنظیمات",
   "column_header.moveLeft_settings": "انتقال ستون به راست",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "خروج",
   "confirmations.logout.message": "آیا مطمئنید که می‌خواهید خارج شوید؟",
   "confirmations.mute.confirm": "بی‌صدا کن",
+  "confirmations.mute.explanation": "این کار نوشته‌های آن‌ها و نوشته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند نوشته‌های شما را ببینند و شما را پی بگیرند.",
   "confirmations.mute.message": "آیا واقعاً می‌خواهید {name} را بی‌صدا کنید؟",
   "confirmations.redraft.confirm": "پاک‌کردن و بازنویسی",
   "confirmations.redraft.message": "آیا واقعاً می‌خواهید این نوشته را پاک کنید و آن را از نو بنویسید؟ با این کار بازبوق‌ها و پسندیده‌شدن‌های آن از دست می‌رود و پاسخ‌ها به آن بی‌مرجع می‌شود.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "شما هنوز هیچ کاربری را بی‌صدا نکرده‌اید.",
   "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشته‌های دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
   "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران سرورهای دیگر را پی بگیرید تا این‌جا پر شود",
+  "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.",
+  "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر آن هم کمکی نکرد، همچنان شاید بتوانید با ماستدون از راه یکی از اپ‌های آن کار کنید.",
+  "errors.unexpected_crash.copy_stacktrace": "کپی جزئیات اشکال",
+  "errors.unexpected_crash.report_issue": "گزارش اشکال",
   "follow_request.authorize": "اجازه دهید",
   "follow_request.reject": "اجازه ندهید",
   "getting_started.developers": "برای برنامه‌نویسان",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} اعلان",
   "poll.closed": "پایان‌یافته",
   "poll.refresh": "به‌روزرسانی",
+  "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}",
   "poll.total_votes": "{count, plural, one {# رأی} other {# رأی}}",
   "poll.vote": "رأی",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "شما به این گزینه رأی دادید",
   "poll_button.add_poll": "افزودن نظرسنجی",
   "poll_button.remove_poll": "حذف نظرسنجی",
   "privacy.change": "تنظیم حریم خصوصی نوشته‌ها",
@@ -311,6 +316,7 @@
   "privacy.public.short": "عمومی",
   "privacy.unlisted.long": "عمومی، ولی فهرست نکن",
   "privacy.unlisted.short": "فهرست‌نشده",
+  "refresh": "به‌روزرسانی",
   "regeneration_indicator.label": "در حال باز شدن…",
   "regeneration_indicator.sublabel": "این فهرست دارد آماده می‌شود!",
   "relative_time.days": "{number} روز",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 93b770fca..d3c68b757 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -4,19 +4,19 @@
   "account.block": "Estä @{name}",
   "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
   "account.blocked": "Estetty",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.cancel_follow_request": "Peruuta seurauspyyntö",
   "account.direct": "Viesti käyttäjälle @{name}",
   "account.domain_blocked": "Verkko-osoite piilotettu",
   "account.edit_profile": "Muokkaa",
   "account.endorse": "Suosittele profiilissasi",
   "account.follow": "Seuraa",
-  "account.followers": "Seuraajia",
+  "account.followers": "Seuraajaa",
   "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.",
   "account.follows": "Seuraa",
   "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.",
   "account.follows_you": "Seuraa sinua",
   "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Aktiivinen viimeksi",
   "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}",
   "account.locked_info": "Tämän tili on yksityinen. Käyttäjä vahvistaa itse kuka voi seurata häntä.",
   "account.media": "Media",
@@ -25,7 +25,7 @@
   "account.mute": "Mykistä @{name}",
   "account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}",
   "account.muted": "Mykistetty",
-  "account.never_active": "Never",
+  "account.never_active": "Ei koskaan",
   "account.posts": "Tuuttaukset",
   "account.posts_with_replies": "Tuuttaukset ja vastaukset",
   "account.report": "Raportoi @{name}",
@@ -38,11 +38,11 @@
   "account.unfollow": "Lakkaa seuraamasta",
   "account.unmute": "Poista käyttäjän @{name} mykistys",
   "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "Tapahtui odottamaton virhe.",
   "alert.unexpected.title": "Hups!",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "autosuggest_hashtag.per_week": "{count} viikossa",
   "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
   "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.",
   "bundle_column_error.retry": "Yritä uudestaan",
@@ -53,7 +53,7 @@
   "column.blocks": "Estetyt käyttäjät",
   "column.community": "Paikallinen aikajana",
   "column.direct": "Viestit",
-  "column.directory": "Browse profiles",
+  "column.directory": "Selaa profiileja",
   "column.domain_blocks": "Piilotetut verkkotunnukset",
   "column.favourites": "Suosikit",
   "column.follow_requests": "Seuraamispyynnöt",
@@ -63,7 +63,6 @@
   "column.notifications": "Ilmoitukset",
   "column.pins": "Kiinnitetty tuuttaus",
   "column.public": "Yleinen aikajana",
-  "column.status": "Toot",
   "column_back_button.label": "Takaisin",
   "column_header.hide_settings": "Piilota asetukset",
   "column_header.moveLeft_settings": "Siirrä saraketta vasemmalle",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?",
   "confirmations.domain_block.confirm": "Piilota koko verkko-osoite",
   "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "Kirjaudu ulos",
+  "confirmations.logout.message": "Oletko varma, että haluat kirjautua ulos?",
   "confirmations.mute.confirm": "Mykistä",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?",
   "confirmations.redraft.confirm": "Poista & palauta muokattavaksi",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?",
   "confirmations.unfollow.confirm": "Lakkaa seuraamasta",
   "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "conversation.delete": "Poista keskustelu",
+  "conversation.mark_as_read": "Merkitse luetuksi",
+  "conversation.open": "Näytä keskustelu",
+  "conversation.with": "{names} kanssa",
+  "directory.federated": "Koko tunnettu fediverse",
+  "directory.local": "Vain palvelimelta {domain}",
+  "directory.new_arrivals": "Äskettäin saapuneet",
+  "directory.recently_active": "Hiljattain aktiiviset",
   "embed.instructions": "Upota statuspäivitys sivullesi kopioimalla alla oleva koodi.",
   "embed.preview": "Se tulee näyttämään tältä:",
   "emoji_button.activity": "Aktiviteetit",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
   "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.",
   "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä",
+  "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.",
+  "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
   "follow_request.authorize": "Valtuuta",
   "follow_request.reject": "Hylkää",
   "getting_started.developers": "Kehittäjille",
@@ -223,14 +227,14 @@
   "keyboard_shortcuts.search": "siirry hakukenttään",
   "keyboard_shortcuts.start": "avaa \"Aloitus\" -sarake",
   "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media",
   "keyboard_shortcuts.toot": "ala kirjoittaa uutta tuuttausta",
   "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä",
   "keyboard_shortcuts.up": "siirry listassa ylöspäin",
   "lightbox.close": "Sulje",
   "lightbox.next": "Seuraava",
   "lightbox.previous": "Edellinen",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "Näytä kontekstissa",
   "lists.account.add": "Lisää listaan",
   "lists.account.remove": "Poista listasta",
   "lists.delete": "Poista lista",
@@ -240,7 +244,7 @@
   "lists.new.title_placeholder": "Uuden listan nimi",
   "lists.search": "Etsi seuraamistasi henkilöistä",
   "lists.subheading": "Omat listat",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}",
   "loading_indicator.label": "Ladataan...",
   "media_gallery.toggle_visible": "Säädä näkyvyyttä",
   "missing_indicator.label": "Ei löytynyt",
@@ -251,19 +255,19 @@
   "navigation_bar.community_timeline": "Paikallinen aikajana",
   "navigation_bar.compose": "Kirjoita uusi tuuttaus",
   "navigation_bar.direct": "Viestit",
-  "navigation_bar.discover": "Discover",
+  "navigation_bar.discover": "Löydä uutta",
   "navigation_bar.domain_blocks": "Piilotetut verkkotunnukset",
   "navigation_bar.edit_profile": "Muokkaa profiilia",
   "navigation_bar.favourites": "Suosikit",
   "navigation_bar.filters": "Mykistetyt sanat",
   "navigation_bar.follow_requests": "Seuraamispyynnöt",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat",
   "navigation_bar.info": "Tietoa tästä instanssista",
   "navigation_bar.keyboard_shortcuts": "Näppäinkomennot",
   "navigation_bar.lists": "Listat",
   "navigation_bar.logout": "Kirjaudu ulos",
   "navigation_bar.mutes": "Mykistetyt käyttäjät",
-  "navigation_bar.personal": "Personal",
+  "navigation_bar.personal": "Henkilökohtaiset",
   "navigation_bar.pins": "Kiinnitetyt tuuttaukset",
   "navigation_bar.preferences": "Asetukset",
   "navigation_bar.public_timeline": "Yleinen aikajana",
@@ -272,36 +276,37 @@
   "notification.favourite": "{name} tykkäsi tilastasi",
   "notification.follow": "{name} seurasi sinua",
   "notification.mention": "{name} mainitsi sinut",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.poll": "Kysely, johon osallistuit, on päättynyt",
   "notification.reblog": "{name} buustasi tilaasi",
   "notifications.clear": "Tyhjennä ilmoitukset",
   "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
   "notifications.column_settings.alert": "Työpöytäilmoitukset",
   "notifications.column_settings.favourite": "Tykkäykset:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "Näytä kaikki kategoriat",
+  "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki",
+  "notifications.column_settings.filter_bar.show": "Näytä",
   "notifications.column_settings.follow": "Uudet seuraajat:",
   "notifications.column_settings.mention": "Maininnat:",
-  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.poll": "Kyselyn tulokset:",
   "notifications.column_settings.push": "Push-ilmoitukset",
   "notifications.column_settings.reblog": "Buustit:",
   "notifications.column_settings.show": "Näytä sarakkeessa",
   "notifications.column_settings.sound": "Äänimerkki",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
-  "notifications.group": "{count} notifications",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "notifications.filter.all": "Kaikki",
+  "notifications.filter.boosts": "Buustit",
+  "notifications.filter.favourites": "Suosikit",
+  "notifications.filter.follows": "Seuraa",
+  "notifications.filter.mentions": "Maininnat",
+  "notifications.filter.polls": "Kyselyn tulokset",
+  "notifications.group": "{count} ilmoitusta",
+  "poll.closed": "Suljettu",
+  "poll.refresh": "Päivitä",
+  "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}",
+  "poll.total_votes": "{count, plural, one {# ääni} other {# ääntä}}",
+  "poll.vote": "Äänestä",
+  "poll.voted": "Äänestit tätä vastausta",
+  "poll_button.add_poll": "Lisää kysely",
+  "poll_button.remove_poll": "Poista kysely",
   "privacy.change": "Säädä tuuttauksen näkyvyyttä",
   "privacy.direct.long": "Julkaise vain mainituille käyttäjille",
   "privacy.direct.short": "Suora viesti",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Julkinen",
   "privacy.unlisted.long": "Älä julkaise julkisilla aikajanoilla",
   "privacy.unlisted.short": "Listaamaton julkinen",
+  "refresh": "Päivitä",
   "regeneration_indicator.label": "Ladataan…",
   "regeneration_indicator.sublabel": "Kotinäkymääsi valmistellaan!",
   "relative_time.days": "{number} pv",
@@ -328,23 +334,23 @@
   "search.placeholder": "Hae",
   "search_popout.search_format": "Tarkennettu haku",
   "search_popout.tips.full_text": "Tekstihaku palauttaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.",
-  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.hashtag": "hashtagit",
   "search_popout.tips.status": "tila",
   "search_popout.tips.text": "Tekstihaku palauttaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit",
   "search_popout.tips.user": "käyttäjä",
   "search_results.accounts": "Ihmiset",
   "search_results.hashtags": "Hashtagit",
   "search_results.statuses": "Tuuttaukset",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
-  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "search_results.statuses_fts_disabled": "Tuuttausten haku sisällön perusteella ei ole käytössä tällä Mastodon-serverillä.",
+  "search_results.total": "{count, number} {count, plural, one {tulos} other {tulosta}}",
+  "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}",
+  "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä",
   "status.block": "Estä @{name}",
   "status.cancel_reblog_private": "Peru buustaus",
   "status.cannot_reblog": "Tätä julkaisua ei voi buustata",
-  "status.copy": "Copy link to status",
+  "status.copy": "Kopioi linkki tilapäivitykseen",
   "status.delete": "Poista",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
   "status.direct": "Viesti käyttäjälle @{name}",
   "status.embed": "Upota",
   "status.favourite": "Tykkää",
@@ -362,7 +368,7 @@
   "status.reblog": "Buustaa",
   "status.reblog_private": "Buustaa alkuperäiselle yleisölle",
   "status.reblogged_by": "{name} buustasi",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä tuuttausta. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
   "status.redraft": "Poista & palauta muokattavaksi",
   "status.reply": "Vastaa",
   "status.replyAll": "Vastaa ketjuun",
@@ -373,35 +379,35 @@
   "status.show_less_all": "Näytä vähemmän kaikista",
   "status.show_more": "Näytä lisää",
   "status.show_more_all": "Näytä lisää kaikista",
-  "status.show_thread": "Show thread",
-  "status.uncached_media_warning": "Not available",
+  "status.show_thread": "Näytä ketju",
+  "status.uncached_media_warning": "Ei saatavilla",
   "status.unmute_conversation": "Poista keskustelun mykistys",
   "status.unpin": "Irrota profiilista",
   "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
+  "suggestions.header": "Saatat olla kiinnostunut myös…",
   "tabs_bar.federated_timeline": "Yleinen",
   "tabs_bar.home": "Koti",
   "tabs_bar.local_timeline": "Paikallinen",
   "tabs_bar.notifications": "Ilmoitukset",
   "tabs_bar.search": "Hae",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
-  "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
-  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
-  "trends.trending_now": "Trending now",
+  "time_remaining.days": "{number, plural, one {# päivä} other {# päivää}} jäljellä",
+  "time_remaining.hours": "{number, plural, one {# tunti} other {# tuntia}} jäljellä",
+  "time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä",
+  "time_remaining.moments": "Hetki jäljellä",
+  "time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {henkilö} other {henkilöä}} keskustelee",
+  "trends.trending_now": "Suosittua nyt",
   "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
   "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
   "upload_button.label": "Lisää mediaa",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_error.limit": "Tiedostolatauksien raja ylitetty.",
+  "upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.",
   "upload_form.description": "Anna kuvaus näkörajoitteisia varten",
-  "upload_form.edit": "Edit",
+  "upload_form.edit": "Muokkaa",
   "upload_form.undo": "Peru",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.analyzing_picture": "Analysoidaan kuvaa…",
+  "upload_modal.apply": "Käytä",
+  "upload_modal.description_placeholder": "Eräänä jäätävänä ja pimeänä yönä gorilla ratkaisi sudokun kahdessa minuutissa",
   "upload_modal.detect_text": "Detect text from picture",
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 5120d6bcc..daa4cc529 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pouets épinglés",
   "column.public": "Fil public global",
-  "column.status": "Pouet",
   "column_back_button.label": "Retour",
   "column_header.hide_settings": "Masquer les paramètres",
   "column_header.moveLeft_settings": "Déplacer la colonne vers la gauche",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Déconnexion",
   "confirmations.logout.message": "Êtes-vous sûr de vouloir vous déconnecter ?",
   "confirmations.mute.confirm": "Masquer",
+  "confirmations.mute.explanation": "Cela masquera leurs messages et les messages les mentionnant, mais cela leur permettra quand même de voir vos messages et vous suivre.",
   "confirmations.mute.message": "Êtes-vous sûr·e de vouloir masquer {name} ?",
   "confirmations.redraft.confirm": "Effacer et ré-écrire",
   "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Vous n’avez pas encore mis d'utilisateur·rice·s en silence.",
   "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
   "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour le remplir",
+  "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec le navigateur, cette page n’a pas pu être affichée correctement.",
+  "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
+  "errors.unexpected_crash.copy_stacktrace": "Copier la trace de pile dans le presse-papier",
+  "errors.unexpected_crash.report_issue": "Signaler un bogue",
   "follow_request.authorize": "Accepter",
   "follow_request.reject": "Rejeter",
   "getting_started.developers": "Développeur·euse·s",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Base",
   "home.column_settings.show_reblogs": "Afficher les partages",
   "home.column_settings.show_replies": "Afficher les réponses",
-  "home.column_settings.update_live": "Mettre à jour en temps réel",
+  "home.column_settings.update_live": "Mise à jour en temps réel",
   "intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
   "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Fermé",
   "poll.refresh": "Actualiser",
+  "poll.total_people": "{count, plural, one {# personne} other {# personnes}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Voter",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Vous avez voté pour cette réponse",
   "poll_button.add_poll": "Ajouter un sondage",
   "poll_button.remove_poll": "Supprimer le sondage",
   "privacy.change": "Ajuster la confidentialité du message",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Ne pas afficher dans les fils publics",
   "privacy.unlisted.short": "Non listé",
+  "refresh": "Actualiser",
   "regeneration_indicator.label": "Chargement…",
   "regeneration_indicator.sublabel": "Le flux de votre page principale est en cours de préparation !",
   "relative_time.days": "{number} j",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 35639893e..433e9a3a5 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index c5f670b91..b91925770 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificacións",
   "column.pins": "Mensaxes fixadas",
   "column.public": "Liña temporal federada",
-  "column.status": "Toot",
   "column_back_button.label": "Atrás",
   "column_header.hide_settings": "Agochar axustes",
   "column_header.moveLeft_settings": "Mover a columna hacia a esquerda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Desconectar",
   "confirmations.logout.message": "Seguro que desexa desconectar?",
   "confirmations.mute.confirm": "Acalar",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Está segura de que quere acalar a {name}?",
   "confirmations.redraft.confirm": "Eliminar e reescribir",
   "confirmations.redraft.message": "Está segura de querer eliminar este estado e voltalo a escribir? Perderá réplicas e favoritas, e as respostas ao orixinal quedarán orfas.",
@@ -111,10 +111,10 @@
   "confirmations.reply.message": "Respostando agora sobreescribirá a mensaxe que está a compoñer. Segura de querer proceder?",
   "confirmations.unfollow.confirm": "Deixar de seguir",
   "confirmations.unfollow.message": "Quere deixar de seguir a {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
+  "conversation.delete": "Eliminar conversa",
+  "conversation.mark_as_read": "Marcar como lido",
+  "conversation.open": "Ver conversa",
+  "conversation.with": "Con {names}",
   "directory.federated": "Desde o fediverso coñecido",
   "directory.local": "Só desde {domain}",
   "directory.new_arrivals": "Novas achegas",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Non acalou ningunha usuaria polo de agora.",
   "empty_column.notifications": "Aínda non ten notificacións. Interactúe con outras para iniciar unha conversa.",
   "empty_column.public": "Nada por aquí! Escriba algo de xeito público, ou siga manualmente usuarias de outros servidores para ir enchéndoa",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rexeitar",
   "getting_started.developers": "Desenvolvedoras",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar repeticións",
   "home.column_settings.show_replies": "Mostrar respostas",
-  "home.column_settings.update_live": "Actualizar en tempo real",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural,one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Liña temporal federada",
   "navigation_bar.security": "Seguridade",
-  "notification.and_n_others": "e {count, plural, one {# outro} other {# outros}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcou como favorito o seu estado",
   "notification.follow": "{name} está a seguila",
   "notification.mention": "{name} mencionoute",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} notificacións",
   "poll.closed": "Pechado",
   "poll.refresh": "Actualizar",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# voto} outros {# votos}}",
   "poll.vote": "Votar",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Votou por esta opción",
   "poll_button.add_poll": "Engadir sondaxe",
   "poll_button.remove_poll": "Eliminar sondaxe",
   "privacy.change": "Axustar a intimidade do estado",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Pública",
   "privacy.unlisted.long": "Non publicar en liñas temporais públicas",
   "privacy.unlisted.short": "Non listada",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Cargando…",
   "regeneration_indicator.sublabel": "Estase a preparar a súa liña temporal de inicio!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 80a072dcc..6ad96da4f 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -1,23 +1,23 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
-  "account.badges.bot": "Bot",
+  "account.add_or_remove_from_list": "הוסף או הסר מהרשימות",
+  "account.badges.bot": "בוט",
   "account.block": "חסימת @{name}",
   "account.block_domain": "להסתיר הכל מהקהילה {domain}",
-  "account.blocked": "Blocked",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.blocked": "חסום",
+  "account.cancel_follow_request": "בטל בקשת מעקב",
   "account.direct": "Direct Message @{name}",
-  "account.domain_blocked": "Domain hidden",
+  "account.domain_blocked": "הדומיין חסוי",
   "account.edit_profile": "עריכת פרופיל",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "הצג בפרופיל",
   "account.follow": "מעקב",
   "account.followers": "עוקבים",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.",
   "account.follows": "נעקבים",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.",
   "account.follows_you": "במעקב אחריך",
   "account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
-  "account.last_status": "Last active",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.last_status": "פעילות אחרונה",
+  "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}",
   "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
   "account.media": "מדיה",
   "account.mention": "אזכור של @{name}",
@@ -63,7 +63,6 @@
   "column.notifications": "התראות",
   "column.pins": "Pinned toot",
   "column.public": "בפרהסיה",
-  "column.status": "Toot",
   "column_back_button.label": "חזרה",
   "column_header.hide_settings": "הסתרת העדפות",
   "column_header.moveLeft_settings": "הזחת טור לשמאל",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "להשתיק",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "להשתיק את {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.",
   "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "קבלה",
   "follow_request.reject": "דחיה",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "פומבי",
   "privacy.unlisted.long": "לא יופיע בפידים הציבוריים המשותפים",
   "privacy.unlisted.short": "לא לפיד הכללי",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index 18e68ce7c..3f685d968 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index dcfb92df5..bf5322607 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifikacije",
   "column.pins": "Pinned toot",
   "column.public": "Federalni timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Natrag",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Utišaj",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.",
   "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autoriziraj",
   "follow_request.reject": "Odbij",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Javno",
   "privacy.unlisted.long": "Ne prikazuj u javnim timelineovima",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 3dd88c078..8a483d686 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -63,7 +63,6 @@
   "column.notifications": "Értesítések",
   "column.pins": "Kitűzött tülkök",
   "column.public": "Nyilvános idővonal",
-  "column.status": "Tülk",
   "column_back_button.label": "Vissza",
   "column_header.hide_settings": "Beállítások elrejtése",
   "column_header.moveLeft_settings": "Oszlop elmozdítása balra",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Kijelentkezés",
   "confirmations.logout.message": "Biztosan ki akar jelentkezni?",
   "confirmations.mute.confirm": "Némítás",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Biztos, hogy némítani szeretnéd {name}?",
   "confirmations.redraft.confirm": "Törlés és újraírás",
   "confirmations.redraft.message": "Biztos, hogy ezt a tülköt szeretnéd törölni és újraírni? Minden megtolást és kedvencnek jelölést elvesztesz, az eredetire adott válaszok pedig elárvulnak.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Még egy felhasználót sem némítottál le.",
   "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.",
   "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Engedélyezés",
   "follow_request.reject": "Visszautasítás",
   "getting_started.developers": "Fejlesztőknek",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Alapértelmezések",
   "home.column_settings.show_reblogs": "Megtolások mutatása",
   "home.column_settings.show_replies": "Válaszok mutatása",
-  "home.column_settings.update_live": "Frissítés valós időben",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
   "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
   "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Beállítások",
   "navigation_bar.public_timeline": "Föderációs idővonal",
   "navigation_bar.security": "Biztonság",
-  "notification.and_n_others": "és {count, plural, one {# másik} other {# másik}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} kedvencnek jelölte egy tülködet",
   "notification.follow": "{name} követ téged",
   "notification.mention": "{name} megemlített",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} értesítés",
   "poll.closed": "Lezárva",
   "poll.refresh": "Frissítés",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}",
   "poll.vote": "Szavazás",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Nyilvános",
   "privacy.unlisted.long": "Ne mutassuk nyilvános idővonalon",
   "privacy.unlisted.short": "Listázatlan",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Töltődik…",
   "regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
   "relative_time.days": "{number}nap",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 54077dc05..d167552f5 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -63,7 +63,6 @@
   "column.notifications": "Ծանուցումներ",
   "column.pins": "Ամրացված թթեր",
   "column.public": "Դաշնային հոսք",
-  "column.status": "Toot",
   "column_back_button.label": "Ետ",
   "column_header.hide_settings": "Թաքցնել կարգավորումները",
   "column_header.moveLeft_settings": "Տեղաշարժել սյունը ձախ",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Լռեցնել",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր մյուսներին՝ խոսակցությունը սկսելու համար։",
   "empty_column.public": "Այստեղ բան չկա՛։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգույցներից էակների՝ այն լցնելու համար։",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Վավերացնել",
   "follow_request.reject": "Մերժել",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Հրապարակային",
   "privacy.unlisted.long": "Չթթել հրապարակային հոսքերում",
   "privacy.unlisted.short": "Ծածուկ",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}օր",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 21fe401b8..4846cfe9f 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -4,7 +4,7 @@
   "account.block": "Blokir @{name}",
   "account.block_domain": "Sembunyikan segalanya dari {domain}",
   "account.blocked": "Terblokir",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.cancel_follow_request": "Batalkan permintaan ikuti",
   "account.direct": "Direct Message @{name}",
   "account.domain_blocked": "Domain disembunyikan",
   "account.edit_profile": "Ubah profil",
@@ -16,7 +16,7 @@
   "account.follows.empty": "Pengguna ini belum mengikuti siapapun.",
   "account.follows_you": "Mengikuti anda",
   "account.hide_reblogs": "Sembunyikan boosts dari @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Terakhir aktif",
   "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}",
   "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikuti mereka.",
   "account.media": "Media",
@@ -25,7 +25,7 @@
   "account.mute": "Bisukan @{name}",
   "account.mute_notifications": "Sembunyikan notifikasi dari @{name}",
   "account.muted": "Dibisukan",
-  "account.never_active": "Never",
+  "account.never_active": "Tak pernah",
   "account.posts": "Toot",
   "account.posts_with_replies": "Postingan dengan balasan",
   "account.report": "Laporkan @{name}",
@@ -38,11 +38,11 @@
   "account.unfollow": "Berhenti mengikuti",
   "account.unmute": "Berhenti membisukan @{name}",
   "account.unmute_notifications": "Munculkan notifikasi dari @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
   "alert.unexpected.title": "Oops!",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "autosuggest_hashtag.per_week": "{count} per minggu",
   "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
   "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.",
   "bundle_column_error.retry": "Coba lagi",
@@ -53,7 +53,7 @@
   "column.blocks": "Pengguna diblokir",
   "column.community": "Linimasa Lokal",
   "column.direct": "Pesan langsung",
-  "column.directory": "Browse profiles",
+  "column.directory": "Jelajahi profil",
   "column.domain_blocks": "Topik tersembunyi",
   "column.favourites": "Favorit",
   "column.follow_requests": "Permintaan mengikuti",
@@ -63,7 +63,6 @@
   "column.notifications": "Notifikasi",
   "column.pins": "Pinned toot",
   "column.public": "Linimasa gabungan",
-  "column.status": "Toot",
   "column_back_button.label": "Kembali",
   "column_header.hide_settings": "Sembunyikan pengaturan",
   "column_header.moveLeft_settings": "Pindahkan kolom ke kiri",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "Apakah anda yakin untuk menghapus daftar ini secara permanen?",
   "confirmations.domain_block.confirm": "Sembunyikan keseluruhan domain",
   "confirmations.domain_block.message": "Apakah anda benar benar yakin untuk memblokir keseluruhan {domain}? Dalam kasus tertentu beberapa pemblokiran atau penyembunyian lebih baik.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "Keluar",
+  "confirmations.logout.message": "Apakah anda yakin ingin keluar?",
   "confirmations.mute.confirm": "Bisukan",
+  "confirmations.mute.explanation": "Ini akan menyembunyikan pos dari mereka dan pos yang menyebut mereka, tapi ini tetap mengizinkan mereka melihat posmu dan mengikutimu.",
   "confirmations.mute.message": "Apa anda yakin ingin membisukan {name}?",
   "confirmations.redraft.confirm": "Hapus dan konsep ulang",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "Membalas sekarang akan menimpa pesan yang sedang Anda buat. Anda yakin ingin melanjutkan?",
   "confirmations.unfollow.confirm": "Berhenti mengikuti",
   "confirmations.unfollow.message": "Apakah anda ingin berhenti mengikuti {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
+  "conversation.delete": "Hapus percakapan",
+  "conversation.mark_as_read": "Tandai sudah dibaca",
+  "conversation.open": "Lihat percakapan",
+  "conversation.with": "Dengan {names}",
+  "directory.federated": "Dari fediverse yang dikenal",
+  "directory.local": "Dari {domain} saja",
   "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "directory.recently_active": "Baru-baru ini aktif",
   "embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.",
   "embed.preview": "Seperti ini nantinya:",
   "emoji_button.activity": "Aktivitas",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Anda belum membisukan siapapun.",
   "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.",
   "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini",
+  "error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.",
+  "error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.",
+  "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip",
+  "errors.unexpected_crash.report_issue": "Laporkan masalah",
   "follow_request.authorize": "Izinkan",
   "follow_request.reject": "Tolak",
   "getting_started.developers": "Pengembang",
@@ -167,64 +171,64 @@
   "hashtag.column_header.tag_mode.none": "tanpa {additional}",
   "hashtag.column_settings.select.no_options_message": "Tidak ada saran yang ditemukan",
   "hashtag.column_settings.select.placeholder": "Masukkan tagar…",
-  "hashtag.column_settings.tag_mode.all": "All of these",
-  "hashtag.column_settings.tag_mode.any": "Any of these",
-  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_mode.all": "Semua ini",
+  "hashtag.column_settings.tag_mode.any": "Semua ini",
+  "hashtag.column_settings.tag_mode.none": "Tak satu pun",
   "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
   "home.column_settings.basic": "Dasar",
   "home.column_settings.show_reblogs": "Tampilkan boost",
   "home.column_settings.show_replies": "Tampilkan balasan",
   "home.column_settings.update_live": "Update in real-time",
-  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
-  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
-  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
+  "intervals.full.days": "{number, plural, other {# hari}}",
+  "intervals.full.hours": "{number, plural, other {# jam}}",
+  "intervals.full.minutes": "{number, plural, other {# menit}}",
+  "introduction.federation.action": "Selanjutnya",
+  "introduction.federation.federated.headline": "Gabungan",
+  "introduction.federation.federated.text": "Pos publik dari server fediverse lain akan muncul di linimasa gabungan.",
+  "introduction.federation.home.headline": "Beranda",
+  "introduction.federation.home.text": "Pos dari orang yang Anda ikuti akan muncul di beranda. Anda dapat mengikuti siapa pun dari server mana pun!",
+  "introduction.federation.local.headline": "Lokal",
+  "introduction.federation.local.text": "Pos publik dari orang yang ada di server sama denganmu akan muncul di linimasa lokal.",
   "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
+  "introduction.interactions.favourite.headline": "Favorit",
+  "introduction.interactions.favourite.text": "Anda dapat menyimpan toot untuk dibaca nanti, biarkan penulis tahu Anda menyukainya, dengan memfavoritkannya.",
   "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
+  "introduction.interactions.reblog.text": "Anda dapat membagikan toot orang lain kepada pengikut Anda dengan mem-boost-nya.",
+  "introduction.interactions.reply.headline": "Balas",
+  "introduction.interactions.reply.text": "Anda dapat membalas toot Anda dan orang lain, yang akan menjalin dalam satu percakapan.",
+  "introduction.welcome.action": "Ayo!",
+  "introduction.welcome.headline": "Langkah pertama",
+  "introduction.welcome.text": "Selamat datang di fediverse! Beberapa saat lagi, Anda dapat menyiarkan pesan dan berbincang dengan teman lintas server. Namun server ini, {domain}, spesial--ia menyimpan profil Anda, jadi ingatlah namanya.",
   "keyboard_shortcuts.back": "untuk kembali",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "buka daftar pengguna terblokir",
   "keyboard_shortcuts.boost": "untuk menyebarkan",
   "keyboard_shortcuts.column": "untuk fokus kepada sebuah status di sebuah kolom",
   "keyboard_shortcuts.compose": "untuk fokus ke area penulisan",
   "keyboard_shortcuts.description": "Deskripsi",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "buka kolom pesan langsung",
   "keyboard_shortcuts.down": "untuk pindah ke bawah dalam sebuah daftar",
   "keyboard_shortcuts.enter": "untuk membuka status",
   "keyboard_shortcuts.favourite": "untuk memfavoritkan",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "buka daftar favorit",
+  "keyboard_shortcuts.federated": "buka linimasa gabungan",
   "keyboard_shortcuts.heading": "Pintasan keyboard",
-  "keyboard_shortcuts.home": "to open home timeline",
-  "keyboard_shortcuts.hotkey": "Hotkey",
-  "keyboard_shortcuts.legend": "to display this legend",
-  "keyboard_shortcuts.local": "to open local timeline",
-  "keyboard_shortcuts.mention": "to mention author",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
-  "keyboard_shortcuts.reply": "to reply",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.home": "buka linimasa beranda",
+  "keyboard_shortcuts.hotkey": "Pintasan",
+  "keyboard_shortcuts.legend": "tampilkan legenda ini",
+  "keyboard_shortcuts.local": "buka linimasa lokal",
+  "keyboard_shortcuts.mention": "sebut pencipta",
+  "keyboard_shortcuts.muted": "buka daftar pengguna terbisukan",
+  "keyboard_shortcuts.my_profile": "buka profil Anda",
+  "keyboard_shortcuts.notifications": "buka kolom notifikasi",
+  "keyboard_shortcuts.pinned": "buka daftar toot tersemat",
+  "keyboard_shortcuts.profile": "buka profil pencipta",
+  "keyboard_shortcuts.reply": "balas",
+  "keyboard_shortcuts.requests": "buka daftar permintaan ikuti",
   "keyboard_shortcuts.search": "untuk fokus mencari",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
-  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.start": "buka kolom \"memulai\"",
+  "keyboard_shortcuts.toggle_hidden": "tampilkan/sembunyikan teks di belakang CW",
+  "keyboard_shortcuts.toggle_sensitivity": "tampilkan/sembunyikan media",
+  "keyboard_shortcuts.toot": "mulai toot baru",
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
   "keyboard_shortcuts.up": "to move up in the list",
   "lightbox.close": "Tutup",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publik",
   "privacy.unlisted.long": "Tidak ditampilkan di linimasa publik",
   "privacy.unlisted.short": "Tak Terdaftar",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Linimasa anda sedang disiapkan!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 092b163fb..07e7f6380 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -63,7 +63,6 @@
   "column.notifications": "Savigi",
   "column.pins": "Pinned toot",
   "column.public": "Federata tempolineo",
-  "column.status": "Toot",
   "column_back_button.label": "Retro",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.",
   "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Yurizar",
   "follow_request.reject": "Refuzar",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publike",
   "privacy.unlisted.long": "Ne montrar en publika tempolinei",
   "privacy.unlisted.short": "Ne enlistigota",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 1f2f6e0e6..8d0a52b12 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifiche",
   "column.pins": "Toot fissati in cima",
   "column.public": "Timeline federata",
-  "column.status": "Toot",
   "column_back_button.label": "Indietro",
   "column_header.hide_settings": "Nascondi impostazioni",
   "column_header.moveLeft_settings": "Sposta colonna a sinistra",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Esci",
   "confirmations.logout.message": "Sei sicuro di voler uscire?",
   "confirmations.mute.confirm": "Silenzia",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Sei sicuro di voler silenziare {name}?",
   "confirmations.redraft.confirm": "Cancella e riscrivi",
   "confirmations.redraft.message": "Sei sicuro di voler cancellare questo stato e riscriverlo? Perderai tutte le risposte, condivisioni e preferiti.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Non hai ancora silenziato nessun utente.",
   "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
   "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizza",
   "follow_request.reject": "Rifiuta",
   "getting_started.developers": "Sviluppatori",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Semplice",
   "home.column_settings.show_reblogs": "Mostra post condivisi",
   "home.column_settings.show_replies": "Mostra risposte",
-  "home.column_settings.update_live": "Aggiorna in tempo reale",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Impostazioni",
   "navigation_bar.public_timeline": "Timeline federata",
   "navigation_bar.security": "Sicurezza",
-  "notification.and_n_others": "e {count, plural, one {# other} other {# others}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ha apprezzato il tuo post",
   "notification.follow": "{name} ha iniziato a seguirti",
   "notification.mention": "{name} ti ha menzionato",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifiche",
   "poll.closed": "Chiuso",
   "poll.refresh": "Aggiorna",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# voto} other {# voti}}",
   "poll.vote": "Vota",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Pubblico",
   "privacy.unlisted.long": "Non mostrare sulla timeline pubblica",
   "privacy.unlisted.short": "Non elencato",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Caricamento in corso…",
   "regeneration_indicator.sublabel": "Stiamo preparando il tuo home feed!",
   "relative_time.days": "{number}g",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index d59b2c7f2..19038aaef 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -38,7 +38,7 @@
   "account.unfollow": "フォロー解除",
   "account.unmute": "@{name}さんのミュートを解除",
   "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
-  "alert.rate_limited.message": "{retry_time, time, medium} 以降に再試行してください。",
+  "alert.rate_limited.message": "{retry_time, time, medium} 以降に再度実行してください。",
   "alert.rate_limited.title": "制限に達しました",
   "alert.unexpected.message": "不明なエラーが発生しました。",
   "alert.unexpected.title": "エラー!",
@@ -63,7 +63,6 @@
   "column.notifications": "通知",
   "column.pins": "固定されたトゥート",
   "column.public": "連合タイムライン",
-  "column.status": "トゥート",
   "column_back_button.label": "戻る",
   "column_header.hide_settings": "設定を隠す",
   "column_header.moveLeft_settings": "カラムを左に移動する",
@@ -108,6 +107,7 @@
   "confirmations.logout.confirm": "ログアウト",
   "confirmations.logout.message": "本当にログアウトしますか?",
   "confirmations.mute.confirm": "ミュート",
+  "confirmations.mute.explanation": "これにより相手のトゥートと返信は見えなくなりますが、引き続きあなたをフォローしトゥートを見ることはできます。",
   "confirmations.mute.message": "本当に{name}さんをミュートしますか?",
   "confirmations.redraft.confirm": "削除して下書きに戻す",
   "confirmations.redraft.message": "本当にこのトゥートを削除して下書きに戻しますか? このトゥートへのお気に入り登録やブーストは失われ、返信は孤立することになります。",
@@ -115,7 +115,7 @@
   "confirmations.reply.message": "今返信すると現在作成中のメッセージが上書きされます。本当に実行しますか?",
   "confirmations.unfollow.confirm": "フォロー解除",
   "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?",
-  "conversation.delete": "このやりとりを削除",
+  "conversation.delete": "この会話を削除",
   "conversation.mark_as_read": "既読にする",
   "conversation.open": "会話を表示",
   "conversation.with": "{names}",
@@ -156,6 +156,10 @@
   "empty_column.mutes": "まだ誰もミュートしていません。",
   "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。",
   "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のサーバーのユーザーをフォローしたりしていっぱいにしましょう",
+  "error.unexpected_crash.explanation": "不具合かブラウザの互換性問題のため、このページを正しく表示できませんでした。",
+  "error.unexpected_crash.next_steps": "ページの再読み込みをお試しください。それでも解決しない場合、別のブラウザかアプリを使えば使用できることがあります。",
+  "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー",
+  "errors.unexpected_crash.report_issue": "問題を報告",
   "follow_request.authorize": "許可",
   "follow_request.reject": "拒否",
   "getting_started.developers": "開発",
@@ -164,7 +168,7 @@
   "getting_started.heading": "スタート",
   "getting_started.invite": "招待",
   "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub ( {github} ) から開発に参加したり、問題を報告したりできます。",
-  "getting_started.security": "セキュリティ",
+  "getting_started.security": "アカウント設定",
   "getting_started.terms": "プライバシーポリシー",
   "hashtag.column_header.tag_mode.all": "と {additional}",
   "hashtag.column_header.tag_mode.any": "か {additional}",
@@ -178,7 +182,7 @@
   "home.column_settings.basic": "基本設定",
   "home.column_settings.show_reblogs": "ブースト表示",
   "home.column_settings.show_replies": "返信表示",
-  "home.column_settings.update_live": "リアルタイムで更新",
+  "home.column_settings.update_live": "リアルタイム更新",
   "intervals.full.days": "{number}日",
   "intervals.full.hours": "{number}時間",
   "intervals.full.minutes": "{number}分",
@@ -273,7 +277,7 @@
   "navigation_bar.public_timeline": "連合タイムライン",
   "navigation_bar.misc": "その他",
   "navigation_bar.security": "セキュリティ",
-  "notification.and_n_others": "と、他 {count} 件",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
   "notification.follow": "{name}さんにフォローされました",
   "notification.mention": "{name}さんがあなたに返信しました",
@@ -302,9 +306,10 @@
   "notifications.group": "{count} 件の通知",
   "poll.closed": "終了",
   "poll.refresh": "更新",
+  "poll.total_people": "{count}人",
   "poll.total_votes": "{count}票",
   "poll.vote": "投票",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "この項目に投票しました",
   "poll_button.add_poll": "アンケートを追加",
   "poll_button.remove_poll": "アンケートを削除",
   "privacy.change": "公開範囲を変更",
@@ -316,6 +321,7 @@
   "privacy.public.short": "公開",
   "privacy.unlisted.long": "公開TLで表示しない",
   "privacy.unlisted.short": "未収載",
+  "refresh": "更新",
   "regeneration_indicator.label": "読み込み中…",
   "regeneration_indicator.sublabel": "ホームタイムラインは準備中です!",
   "relative_time.days": "{number}日前",
@@ -340,7 +346,7 @@
   "search_results.accounts": "人々",
   "search_results.hashtags": "ハッシュタグ",
   "search_results.statuses": "トゥート",
-  "search_results.statuses_fts_disabled": "このサーバーではトゥート本文での検索は利用できません。",
+  "search_results.statuses_fts_disabled": "このサーバーではトゥート本文の検索は利用できません。",
   "search_results.total": "{count, number}件の結果",
   "status.admin_account": "@{name} のモデレーション画面を開く",
   "status.admin_status": "このトゥートをモデレーション画面で開く",
@@ -395,7 +401,7 @@
   "time_remaining.moments": "まもなく終了",
   "time_remaining.seconds": "残り{number}秒",
   "trends.count_by_accounts": "{count}人がトゥート",
-  "trends.trending_now": "トレンド",
+  "trends.trending_now": "トレンドタグ",
   "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
   "upload_area.title": "ドラッグ&ドロップでアップロード",
   "upload_button.label": "メディアを追加 ({formats})",
@@ -406,10 +412,10 @@
   "upload_form.undo": "削除",
   "upload_modal.analyzing_picture": "画像を解析中…",
   "upload_modal.apply": "適用",
-  "upload_modal.description_placeholder": "素早い茶色の狐はのろまな犬を飛び越える",
+  "upload_modal.description_placeholder": "あのイーハトーヴォのすきとおった風",
   "upload_modal.detect_text": "画像からテキストを検出",
   "upload_modal.edit_media": "メディアを編集",
-  "upload_modal.hint": "画像をクリックするか円をドラッグすると全てのサムネイルの中心点を決めることができます",
+  "upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。",
   "upload_modal.preview_label": "プレビュー ({ratio})",
   "upload_progress.label": "アップロード中...",
   "video.close": "動画を閉じる",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 51b7deb5e..1c579aa8f 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -63,7 +63,6 @@
   "column.notifications": "შეტყობინებები",
   "column.pins": "აპინული ტუტები",
   "column.public": "ფედერალური თაიმლაინი",
-  "column.status": "Toot",
   "column_back_button.label": "უკან",
   "column_header.hide_settings": "პარამეტრების დამალვა",
   "column_header.moveLeft_settings": "სვეტის მარცხნივ გადატანა",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "გაჩუმება",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "დარწმუნებული ხართ, გსურთ გააჩუმოთ {name}?",
   "confirmations.redraft.confirm": "გაუქმება და გადანაწილება",
   "confirmations.redraft.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი და გადაანაწილოთ? დაკარგავთ ყველა პასუხს, ბუსტს და მასზედ არსებულ ფავორიტს.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.",
   "empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "ავტორიზაცია",
   "follow_request.reject": "უარყოფა",
   "getting_started.developers": "დეველოპერები",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} შეტყობინება",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "საჯარო",
   "privacy.unlisted.long": "არ დაიპოსტოს საჯარო თაიმლაინებზე",
   "privacy.unlisted.short": "ჩამოუთვლელი",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "იტვირთება…",
   "regeneration_indicator.sublabel": "თქვენი სახლის ლენტა მზადდება!",
   "relative_time.days": "{number}დღ",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 13f2d23d2..37b63f13a 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -63,7 +63,6 @@
   "column.notifications": "Ескертпелер",
   "column.pins": "Жабыстырылған жазбалар",
   "column.public": "Жаһандық желі",
-  "column.status": "Toot",
   "column_back_button.label": "Артқа",
   "column_header.hide_settings": "Баптауларды жасыр",
   "column_header.moveLeft_settings": "Бағананы солға жылжыту",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Үнсіз қылу",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "{name} атты қолданушы үнсіз болсын ба?",
   "confirmations.redraft.confirm": "Өшіруді құптау",
   "confirmations.redraft.message": "Бұл жазбаны өшіріп, нобайларға жібереміз бе? Барлық жауаптар мен лайктарды жоғалтасыз.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Әзірше ешқандай үнсізге қойылған қолданушы жоқ.",
   "empty_column.notifications": "Әзірше ешқандай ескертпе жоқ. Басқалармен араласуды бастаңыз және пікірталастарға қатысыңыз.",
   "empty_column.public": "Ештеңе жоқ бұл жерде! Өзіңіз бастап жазып көріңіз немесе басқаларға жазылыңыз",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Авторизация",
   "follow_request.reject": "Қабылдамау",
   "getting_started.developers": "Жасаушылар тобы",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} ескертпе",
   "poll.closed": "Жабық",
   "poll.refresh": "Жаңарту",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# дауыс} other {# дауыс}}",
   "poll.vote": "Дауыс беру",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Ашық",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Тізімсіз",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Жүктеу…",
   "regeneration_indicator.sublabel": "Жергілікті желі құрылуда!",
   "relative_time.days": "{number}күн",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 60a197126..047071136 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -63,7 +63,6 @@
   "column.notifications": "알림",
   "column.pins": "고정된 툿",
   "column.public": "연합 타임라인",
-  "column.status": "툿",
   "column_back_button.label": "돌아가기",
   "column_header.hide_settings": "설정 숨기기",
   "column_header.moveLeft_settings": "왼쪽으로 이동",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "로그아웃",
   "confirmations.logout.message": "정말로 로그아웃 하시겠습니까?",
   "confirmations.mute.confirm": "뮤트",
+  "confirmations.mute.explanation": "이 동작은 그의 게시물, 그를 멘션하는 게시물을 숨깁니다, 하지만 여전히 그가 당신의 게시물을 보고 팔로우 할 수 있습니다.",
   "confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
   "confirmations.redraft.confirm": "삭제하고 다시 쓰기",
   "confirmations.redraft.message": "정말로 이 포스트를 삭제하고 다시 쓰시겠습니까? 해당 포스트에 대한 부스트와 즐겨찾기를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
@@ -114,7 +114,7 @@
   "conversation.delete": "대화 삭제",
   "conversation.mark_as_read": "읽은 상태로 표시",
   "conversation.open": "대화 보기",
-  "conversation.with": "{names} 와 함께",
+  "conversation.with": "{names} 님과",
   "directory.federated": "알려진 연합우주로부터",
   "directory.local": "{domain}에서만",
   "directory.new_arrivals": "새로운 사람들",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "아직 아무도 뮤트하지 않았습니다.",
   "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.",
   "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 유저를 팔로우 해서 채워보세요",
+  "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 올바르게 표시할 수 없습니다.",
+  "error.unexpected_crash.next_steps": "페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.",
+  "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사",
+  "errors.unexpected_crash.report_issue": "문제 신고",
   "follow_request.authorize": "허가",
   "follow_request.reject": "거부",
   "getting_started.developers": "개발자",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "기본 설정",
   "home.column_settings.show_reblogs": "부스트 표시",
   "home.column_settings.show_replies": "답글 표시",
-  "home.column_settings.update_live": "실시간 갱신",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number} 일",
   "intervals.full.hours": "{number} 시간",
   "intervals.full.minutes": "{number} 분",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "사용자 설정",
   "navigation_bar.public_timeline": "연합 타임라인",
   "navigation_bar.security": "보안",
-  "notification.and_n_others": "그리고 {count}개의 기타 항목",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}님이 즐겨찾기 했습니다",
   "notification.follow": "{name}님이 나를 팔로우 했습니다",
   "notification.mention": "{name}님이 답글을 보냈습니다",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} 개의 알림",
   "poll.closed": "마감됨",
   "poll.refresh": "새로고침",
+  "poll.total_people": "{count}명",
   "poll.total_votes": "{count} 표",
   "poll.vote": "투표",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "이 답변에 투표했습니다",
   "poll_button.add_poll": "투표 추가",
   "poll_button.remove_poll": "투표 삭제",
   "privacy.change": "포스트의 프라이버시 설정을 변경",
@@ -311,6 +316,7 @@
   "privacy.public.short": "공개",
   "privacy.unlisted.long": "공개 타임라인에 표시하지 않음",
   "privacy.unlisted.short": "타임라인에 비표시",
+  "refresh": "새로고침",
   "regeneration_indicator.label": "불러오는 중…",
   "regeneration_indicator.sublabel": "당신의 홈 피드가 준비되는 중입니다!",
   "relative_time.days": "{number}일 전",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 35639893e..433e9a3a5 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index b837cc42b..01d8fe03b 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -63,7 +63,6 @@
   "column.notifications": "Paziņojumi",
   "column.pins": "Piespraustie ziņojumi",
   "column.public": "Federatīvā laika līnija",
-  "column.status": "Toot",
   "column_back_button.label": "Atpakaļ",
   "column_header.hide_settings": "Paslēpt iestatījumus",
   "column_header.moveLeft_settings": "Pārvietot kolonu pa kreisi",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Apklusināt",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Vai Tu tiešām velies apklusināt {name}?",
   "confirmations.redraft.confirm": "Dzēst un pārrakstīt",
   "confirmations.redraft.message": "Vai tiešām vēlies dzēst un pārrakstīt šo ierakstu? Favorīti un paceltie ieraksti tiks dzēsti, kā arī atbildes tiks atsaistītas no šī ieraksta.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Tu neesi nevienu apklusinājis.",
   "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.",
   "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizēt",
   "follow_request.reject": "Noraidīt",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
new file mode 100644
index 000000000..06a976271
--- /dev/null
+++ b/app/javascript/mastodon/locales/mk.json
@@ -0,0 +1,425 @@
+{
+  "account.add_or_remove_from_list": "Додади или одстрани од листа",
+  "account.badges.bot": "Бот",
+  "account.block": "Блокирај @{name}",
+  "account.block_domain": "Сокријај се од {domain}",
+  "account.blocked": "Блокиран",
+  "account.cancel_follow_request": "Одкажи барање за следење",
+  "account.direct": "Директна порана @{name}",
+  "account.domain_blocked": "Скриен домен",
+  "account.edit_profile": "Измени профил",
+  "account.endorse": "Карактеристики на профилот",
+  "account.follow": "Следи",
+  "account.followers": "Следбеници",
+  "account.followers.empty": "Никој не го следи овој корисник сеуште.",
+  "account.follows": "Следи",
+  "account.follows.empty": "Корисникот не следи никој сеуште.",
+  "account.follows_you": "Те следи тебе",
+  "account.hide_reblogs": "Сокриј буст од @{name}",
+  "account.last_status": "Последно активен",
+  "account.link_verified_on": "Сопстевноста на овај линк беше проверен на {date}",
+  "account.locked_info": "Статусот на приватност на овај корисник е сетиран како заклучен. Корисникот одлучува кој можи да го следи него.",
+  "account.media": "Медија",
+  "account.mention": "Спомни @{name}",
+  "account.moved_to": "{name} се пресели во:",
+  "account.mute": "Зачути го @{name}",
+  "account.mute_notifications": "Исклучи известувања од @{name}",
+  "account.muted": "Зачутено",
+  "account.never_active": "Никогаш",
+  "account.posts": "Тутови",
+  "account.posts_with_replies": "Тутови и реплики",
+  "account.report": "Пријави @{name}",
+  "account.requested": "Се чека одобрување. Кликни за да одкажиш барање за следење",
+  "account.share": "Сподели @{name} профил",
+  "account.show_reblogs": "Прикажи бустови од @{name}",
+  "account.unblock": "Одблокирај @{name}",
+  "account.unblock_domain": "Прикажи {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Одследи",
+  "account.unmute": "Зачути го @{name}",
+  "account.unmute_notifications": "Исклучи известувања од @{name}",
+  "alert.rate_limited.message": "Обидете се повторно после {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Rate limited",
+  "alert.unexpected.message": "Неочекувана грешка.",
+  "alert.unexpected.title": "Упс!",
+  "autosuggest_hashtag.per_week": "{count} неделно",
+  "boost_modal.combo": "Кликни {combo} за да го прескокниш ова нареден пат",
+  "bundle_column_error.body": "Се случи проблем при вчитувањето.",
+  "bundle_column_error.retry": "Обидете се повторно",
+  "bundle_column_error.title": "Мрежна грешка",
+  "bundle_modal_error.close": "Затвори",
+  "bundle_modal_error.message": "Настана грешка при прикажувањето на оваа веб-страница.",
+  "bundle_modal_error.retry": "Обидете се повторно",
+  "column.blocks": "Блокирани корисници",
+  "column.community": "Local timeline",
+  "column.direct": "Директна порака",
+  "column.directory": "Browse profiles",
+  "column.domain_blocks": "Hidden domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Дома",
+  "column.lists": "Листа",
+  "column.mutes": "Muted users",
+  "column.notifications": "Известувања",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Назад",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.media_only": "Media only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.poll.add_option": "Add a choice",
+  "compose_form.poll.duration": "Poll duration",
+  "compose_form.poll.option_placeholder": "Choice {number}",
+  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.marked": "Media is marked as sensitive",
+  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.confirm": "Блокирај",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.logout.confirm": "Log out",
+  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "Reply",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "conversation.delete": "Delete conversation",
+  "conversation.mark_as_read": "Mark as read",
+  "conversation.open": "View conversation",
+  "conversation.with": "With {names}",
+  "directory.federated": "From known fediverse",
+  "directory.local": "From {domain} only",
+  "directory.new_arrivals": "New arrivals",
+  "directory.recently_active": "Recently active",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no hidden domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.hashtag": "There is nothing in this hashtag yet.",
+  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "getting_started.developers": "Developers",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "hashtag.column_header.tag_mode.all": "and {additional}",
+  "hashtag.column_header.tag_mode.any": "or {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.select.no_options_message": "No suggestions found",
+  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
+  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.any": "Any of these",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "home.column_settings.update_live": "Update in real-time",
+  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
+  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
+  "introduction.federation.action": "Next",
+  "introduction.federation.federated.headline": "Federated",
+  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
+  "introduction.federation.home.headline": "Home",
+  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
+  "introduction.federation.local.headline": "Local",
+  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
+  "introduction.interactions.action": "Finish toot-orial!",
+  "introduction.interactions.favourite.headline": "Favourite",
+  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
+  "introduction.interactions.reblog.headline": "Boost",
+  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
+  "introduction.interactions.reply.headline": "Reply",
+  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
+  "introduction.welcome.action": "Let's go!",
+  "introduction.welcome.headline": "First steps",
+  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lightbox.view_context": "View context",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.edit.submit": "Change title",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "Toggle visibility",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.mention": "{name} mentioned you",
+  "notification.poll": "A poll you have voted in has ended",
+  "notification.reblog": "{name} boosted your status",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.filter.all": "All",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.polls": "Poll results",
+  "notifications.group": "{count} notifications",
+  "poll.closed": "Closed",
+  "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.vote": "Vote",
+  "poll.voted": "You voted for this answer",
+  "poll_button.add_poll": "Add a poll",
+  "poll_button.remove_poll": "Remove poll",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Post to mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Post to followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Post to public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Do not show in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost to original audience",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.uncached_media_warning": "Not available",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
+  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
+  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.moments": "Moments remaining",
+  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.trending_now": "Trending now",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add media ({formats})",
+  "upload_error.limit": "File upload limit exceeded.",
+  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.edit": "Edit",
+  "upload_form.undo": "Delete",
+  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.apply": "Apply",
+  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.edit_media": "Edit media",
+  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_progress.label": "Uploading...",
+  "video.close": "Close video",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index da7ddfc80..8805c0e0b 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column.status": "Toot",
   "column_back_button.label": "Back",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Are you sure you want to mute {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index edba37434..f9e8457a0 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -63,7 +63,6 @@
   "column.notifications": "Meldingen",
   "column.pins": "Vastgezette toots",
   "column.public": "Globale tijdlijn",
-  "column.status": "Toot",
   "column_back_button.label": "Terug",
   "column_header.hide_settings": "Instellingen verbergen",
   "column_header.moveLeft_settings": "Kolom naar links verplaatsen",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Uitloggen",
   "confirmations.logout.message": "Weet je zeker dat je wilt uitloggen?",
   "confirmations.mute.confirm": "Negeren",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Weet je het zeker dat je {name} wilt negeren?",
   "confirmations.redraft.confirm": "Verwijderen en herschrijven",
   "confirmations.redraft.message": "Weet je zeker dat je deze toot wilt verwijderen en herschrijven? Je verliest wel de boosts en favorieten, en reacties op de originele toot zitten niet meer aan de nieuwe toot vast.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Jij hebt nog geen gebruikers genegeerd.",
   "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.",
   "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren",
+  "errors.unexpected_crash.report_issue": "Technisch probleem melden",
   "follow_request.authorize": "Goedkeuren",
   "follow_request.reject": "Afkeuren",
   "getting_started.developers": "Ontwikkelaars",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} meldingen",
   "poll.closed": "Gesloten",
   "poll.refresh": "Vernieuwen",
+  "poll.total_people": "{count, plural, one {# persoon} other {# mensen}}",
   "poll.total_votes": "{count, plural, one {# stem} other {# stemmen}}",
   "poll.vote": "Stemmen",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Je hebt hier op gestemd",
   "poll_button.add_poll": "Poll toevoegen",
   "poll_button.remove_poll": "Poll verwijderen",
   "privacy.change": "Zichtbaarheid toot aanpassen",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Openbaar",
   "privacy.unlisted.long": "Niet op openbare tijdlijnen tonen",
   "privacy.unlisted.short": "Minder openbaar",
+  "refresh": "Vernieuwen",
   "regeneration_indicator.label": "Aan het laden…",
   "regeneration_indicator.sublabel": "Jouw tijdlijn wordt aangemaakt!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index c4003193e..53c5610c1 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -63,7 +63,6 @@
   "column.notifications": "Varslinger",
   "column.pins": "Festa tuter",
   "column.public": "Federert samtid",
-  "column.status": "Toot",
   "column_back_button.label": "Tilbake",
   "column_header.hide_settings": "Skjul innstillingar",
   "column_header.moveLeft_settings": "Flytt feltet til venstre",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Logg ut",
   "confirmations.logout.message": "Er du sikker på at du vill logge ut?",
   "confirmations.mute.confirm": "Målbind",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Er du sikker på at d vill målbinde {name}?",
   "confirmations.redraft.confirm": "Slett & gjennopprett",
   "confirmations.redraft.message": "Er du sikker på at du vill slette statusen og gjennoprette den? Favoritter og framhevinger vill bli borte, og svar til den originale posten vill bli einstøing.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Unlisted",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 8fe7c9cfd..54b92181b 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -63,7 +63,6 @@
   "column.notifications": "Varsler",
   "column.pins": "Pinned toot",
   "column.public": "Felles tidslinje",
-  "column.status": "Toot",
   "column_back_button.label": "Tilbake",
   "column_header.hide_settings": "Gjem  innstillinger",
   "column_header.moveLeft_settings": "Flytt feltet til venstre",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Demp",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Er du sikker på at du vil dempe {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.",
   "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorisér",
   "follow_request.reject": "Avvis",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Offentlig",
   "privacy.unlisted.long": "Ikke vis i offentlige tidslinjer",
   "privacy.unlisted.short": "Uoppført",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Laster…",
   "regeneration_indicator.sublabel": "Dine startside forberedes!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 550057f23..37a3a45e7 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificacions",
   "column.pins": "Tuts penjats",
   "column.public": "Flux public global",
-  "column.status": "Tut",
   "column_back_button.label": "Tornar",
   "column_header.hide_settings": "Amagar los paramètres",
   "column_header.moveLeft_settings": "Desplaçar la colomna a man drecha",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Desconnexion",
   "confirmations.logout.message": "Volètz vertadièrament vos desconnectar ?",
   "confirmations.mute.confirm": "Rescondre",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Volètz vertadièrament rescondre {name} ?",
   "confirmations.redraft.confirm": "Escafar & tornar formular",
   "confirmations.redraft.message": "Volètz vertadièrament escafar aqueste estatut e lo reformular ? Totes sos partiments e favorits seràn perduts, e sas responsas seràn orfanèlas.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Encara avètz pas mes en silenci degun.",
   "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.",
   "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autres servidors per garnir lo flux public",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Acceptar",
   "follow_request.reject": "Regetar",
   "getting_started.developers": "Desvelopaires",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Mostrar los partatges",
   "home.column_settings.show_replies": "Mostrar las responsas",
-  "home.column_settings.update_live": "Actualizacion en dirècte",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Preferéncias",
   "navigation_bar.public_timeline": "Flux public global",
   "navigation_bar.security": "Seguretat",
-  "notification.and_n_others": "e {count, plural, un {# autre} other {# autres}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a ajustat a sos favorits",
   "notification.follow": "{name} vos sèc",
   "notification.mention": "{name} vos a mencionat",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notificacions",
   "poll.closed": "Tampat",
   "poll.refresh": "Actualizar",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}",
   "poll.vote": "Votar",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Mostrar pas dins los fluxes publics",
   "privacy.unlisted.short": "Pas-listat",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Cargament…",
   "regeneration_indicator.sublabel": "Sèm a preparar vòstre flux d’acuèlh !",
   "relative_time.days": "fa {number}d",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index b5af4a49a..cd3284c72 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -63,7 +63,6 @@
   "column.notifications": "Powiadomienia",
   "column.pins": "Przypięte wpisy",
   "column.public": "Globalna oś czasu",
-  "column.status": "Toot",
   "column_back_button.label": "Wróć",
   "column_header.hide_settings": "Ukryj ustawienia",
   "column_header.moveLeft_settings": "Przesuń kolumnę w lewo",
@@ -108,6 +107,7 @@
   "confirmations.logout.confirm": "Wyloguj",
   "confirmations.logout.message": "Czy na pewno chcesz się wylogować?",
   "confirmations.mute.confirm": "Wycisz",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?",
   "confirmations.redraft.confirm": "Usuń i przeredaguj",
   "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.",
@@ -156,6 +156,10 @@
   "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.",
   "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.",
   "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autoryzuj",
   "follow_request.reject": "Odrzuć",
   "getting_started.developers": "Dla programistów",
@@ -302,6 +306,7 @@
   "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}",
   "poll.closed": "Zamknięte",
   "poll.refresh": "Odśwież",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}",
   "poll.vote": "Zagłosuj",
   "poll.voted": "You voted for this answer",
@@ -316,6 +321,7 @@
   "privacy.public.short": "Publiczny",
   "privacy.unlisted.long": "Niewidoczny na publicznych osiach czasu",
   "privacy.unlisted.short": "Niewidoczny",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Ładuję…",
   "regeneration_indicator.sublabel": "Twoja oś czasu jest przygotowywana!",
   "relative_time.days": "{number} dni",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 4bc703206..bb1477c52 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -39,7 +39,7 @@
   "account.unmute": "Não silenciar @{name}",
   "account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
   "alert.rate_limited.message": "Por favor tente novamente após {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
+  "alert.rate_limited.title": "Limite de tentativas",
   "alert.unexpected.message": "Um erro inesperado ocorreu.",
   "alert.unexpected.title": "Eita!",
   "autosuggest_hashtag.per_week": "{count} por semana",
@@ -63,7 +63,6 @@
   "column.notifications": "Notificações",
   "column.pins": "Postagens fixadas",
   "column.public": "Global",
-  "column.status": "Publicar",
   "column_back_button.label": "Voltar",
   "column_header.hide_settings": "Esconder configurações",
   "column_header.moveLeft_settings": "Mover coluna para a esquerda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Sair",
   "confirmations.logout.message": "Tem certeza que deseja encerrar a sessão?",
   "confirmations.mute.confirm": "Silenciar",
+  "confirmations.mute.explanation": "Isto irá esconder postagens e postagens que mencionam, mas ainda vai permitir que eles vejam suas publicações e sigam você.",
   "confirmations.mute.message": "Você tem certeza de que quer silenciar {name}?",
   "confirmations.redraft.confirm": "Apagar & usar como rascunho",
   "confirmations.redraft.message": "Você tem certeza que deseja apagar esse status e usá-lo como rascunho? Seus compartilhamentos e favoritos serão perdidos e as respostas ao toot original ficarão desconectadas.",
@@ -116,7 +116,7 @@
   "conversation.open": "Ver conversa",
   "conversation.with": "Com {names}",
   "directory.federated": "De fediverso conhecido",
-  "directory.local": "From {domain} only",
+  "directory.local": "De {domain} apenas",
   "directory.new_arrivals": "Acabaram de chegar",
   "directory.recently_active": "Reverta esta propriedade para seu valor padrão",
   "embed.instructions": "Incorpore esta postagem em seu site copiando o código abaixo.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Você ainda não silenciou nenhum usuário.",
   "empty_column.notifications": "Você ainda não possui notificações. Interaja com outros usuários para começar a conversar.",
   "empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias",
+  "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou a um problema de compatibilidade do navegador, esta página não pode ser exibida corretamente.",
+  "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, você ainda pode usar Mastodon através de um navegador diferente ou aplicativo nativo.",
+  "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para a área de transferência",
+  "errors.unexpected_crash.report_issue": "Reportar problema",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rejeitar",
   "getting_started.developers": "Desenvolvedores",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar compartilhamentos",
   "home.column_settings.show_replies": "Mostrar as respostas",
-  "home.column_settings.update_live": "Atualizar em tempo real",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Preferências",
   "navigation_bar.public_timeline": "Global",
   "navigation_bar.security": "Segurança",
-  "notification.and_n_others": "and {count, plural, one {# outro} other {# outros}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} adicionou a sua postagem aos favoritos",
   "notification.follow": "{name} te seguiu",
   "notification.mention": "{name} te mencionou",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} notificações",
   "poll.closed": "Fechada",
   "poll.refresh": "Atualizar",
+  "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}",
   "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
   "poll.vote": "Votar",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Você votou nesta resposta",
   "poll_button.add_poll": "Adicionar uma enquete",
   "poll_button.remove_poll": "Remover enquete",
   "privacy.change": "Ajustar a privacidade da mensagem",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Pública",
   "privacy.unlisted.long": "Não publicar em feeds públicos",
   "privacy.unlisted.short": "Não listada",
+  "refresh": "Atualizar",
   "regeneration_indicator.label": "Carregando…",
   "regeneration_indicator.sublabel": "Sua página inicial está sendo preparada!",
   "relative_time.days": "{number}d",
@@ -374,7 +380,7 @@
   "status.show_more": "Mostrar mais",
   "status.show_more_all": "Mostrar mais para todas as mensagens",
   "status.show_thread": "Mostrar sequência",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "Não disponível",
   "status.unmute_conversation": "Desativar silêncio desta conversa",
   "status.unpin": "Desafixar do perfil",
   "suggestions.dismiss": "Ignorar a sugestão",
@@ -403,9 +409,9 @@
   "upload_modal.apply": "Aplicar",
   "upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente",
   "upload_modal.detect_text": "Detectar texto da imagem",
-  "upload_modal.edit_media": "Edit media",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.edit_media": "Editar mídia",
+  "upload_modal.hint": "Clique ou arraste o círculo na visualização para escolher o ponto focal que sempre será visto em todas as miniaturas.",
+  "upload_modal.preview_label": "Prévia ({ratio})",
   "upload_progress.label": "Salvando...",
   "video.close": "Fechar vídeo",
   "video.exit_fullscreen": "Sair da tela cheia",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index b286dd622..2320223e8 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificações",
   "column.pins": "Publicações fixas",
   "column.public": "Cronologia federada",
-  "column.status": "Toot",
   "column_back_button.label": "Voltar",
   "column_header.hide_settings": "Esconder configurações",
   "column_header.moveLeft_settings": "Mover coluna para a esquerda",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Silenciar",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "De certeza que queres silenciar {name}?",
   "confirmations.redraft.confirm": "Apagar & redigir",
   "confirmations.redraft.message": "Tens a certeza que queres apagar e redigir esta publicação?  Os favoritos e as partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.",
   "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
   "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rejeitar",
   "getting_started.developers": "Responsáveis pelo desenvolvimento",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notificações",
   "poll.closed": "Fechado",
   "poll.refresh": "Recarregar",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}",
   "poll.vote": "Votar",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Público",
   "privacy.unlisted.long": "Não publicar nos feeds públicos",
   "privacy.unlisted.short": "Não listar",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "A carregar…",
   "regeneration_indicator.sublabel": "A tua home está a ser preparada!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index 8bda8c060..5118ce39a 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notificări",
   "column.pins": "Postări fixate",
   "column.public": "Flux global",
-  "column.status": "Toot",
   "column_back_button.label": "Înapoi",
   "column_header.hide_settings": "Ascunde setările",
   "column_header.moveLeft_settings": "Mută coloana la stânga",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Oprește",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ești sigur că vrei să oprești {name}?",
   "confirmations.redraft.confirm": "Șterge și salvează ca ciornă",
   "confirmations.redraft.message": "Ești sigur că vrei să faci asta? Tot ce ține de această postare, inclusiv răspunsurile vor fi deconectate.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Nu ai oprit nici un utilizator incă.",
   "empty_column.notifications": "Nu ai nici o notificare încă. Interacționează cu alții pentru a începe o conversație.",
   "empty_column.public": "Nu este nimci aici încă! Scrie ceva public, sau urmărește alți utilizatori din alte instanțe pentru a porni fluxul",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizează",
   "follow_request.reject": "Respinge",
   "getting_started.developers": "Dezvoltatori",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notificări",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Nu afisa in fluxul public",
   "privacy.unlisted.short": "Nelistat",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Încărcare…",
   "regeneration_indicator.sublabel": "Fluxul tău este în preparare!",
   "relative_time.days": "{number}z",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 82194d2c6..2cf216971 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -16,7 +16,7 @@
   "account.follows.empty": "Этот пользователь ни на кого не подписан.",
   "account.follows_you": "Подписан(а) на вас",
   "account.hide_reblogs": "Скрыть реблоги от @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Последняя активность",
   "account.link_verified_on": "Владение этой ссылкой было проверено {date}",
   "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.",
   "account.media": "Медиа",
@@ -25,7 +25,7 @@
   "account.mute": "Скрыть @{name}",
   "account.mute_notifications": "Скрыть уведомления от @{name}",
   "account.muted": "Скрыт",
-  "account.never_active": "Never",
+  "account.never_active": "Никогда",
   "account.posts": "Посты",
   "account.posts_with_replies": "Посты с ответами",
   "account.report": "Пожаловаться",
@@ -38,8 +38,8 @@
   "account.unfollow": "Отписаться",
   "account.unmute": "Снять глушение",
   "account.unmute_notifications": "Показывать уведомления от @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
+  "alert.rate_limited.message": "Пожалуйста, повторите через {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Скорость ограничена",
   "alert.unexpected.message": "Что-то пошло не так.",
   "alert.unexpected.title": "Ой!",
   "autosuggest_hashtag.per_week": "{count} / неделю",
@@ -53,7 +53,7 @@
   "column.blocks": "Список блокировки",
   "column.community": "Локальная лента",
   "column.direct": "Личные сообщения",
-  "column.directory": "Browse profiles",
+  "column.directory": "Просмотр профилей",
   "column.domain_blocks": "Скрытые домены",
   "column.favourites": "Понравившееся",
   "column.follow_requests": "Запросы на подписку",
@@ -63,7 +63,6 @@
   "column.notifications": "Уведомления",
   "column.pins": "Закреплённый пост",
   "column.public": "Глобальная лента",
-  "column.status": "Toot",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Скрыть настройки",
   "column_header.moveLeft_settings": "Передвинуть колонку влево",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?",
   "confirmations.domain_block.confirm": "Блокировать весь домен",
   "confirmations.domain_block.message": "Вы на самом деле уверены, что хотите блокировать весь {domain}? В большинстве случаев нескольких отдельных блокировок или глушений достаточно.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "Выйти",
+  "confirmations.logout.message": "Вы уверены, что хотите выйти?",
   "confirmations.mute.confirm": "Заглушить",
+  "confirmations.mute.explanation": "Будут скрыты их посты и те, где они упоминаются, но они при этом смогут видеть ваши посты и подписываться на вас.",
   "confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?",
   "confirmations.redraft.confirm": "Удалить и исправить",
   "confirmations.redraft.message": "Вы уверены, что хотите удалить этот статус и превратить в черновик? Вы потеряете все ответы, продвижения и отметки 'нравится' к нему.",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "При ответе текст набираемого сообщения будет перезаписан. Продолжить?",
   "confirmations.unfollow.confirm": "Отписаться",
   "confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "conversation.delete": "Удалить беседу",
+  "conversation.mark_as_read": "Пометить прочитанным",
+  "conversation.open": "Просмотр беседы",
+  "conversation.with": "С {names}",
+  "directory.federated": "Со всей федерации",
+  "directory.local": "Только из {domain}",
+  "directory.new_arrivals": "Новички",
+  "directory.recently_active": "Недавно активные",
   "embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.",
   "embed.preview": "Так это будет выглядеть:",
   "emoji_button.activity": "Занятия",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Вы ещё никого не скрывали.",
   "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.",
   "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
+  "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.",
+  "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.",
+  "errors.unexpected_crash.copy_stacktrace": "Копировать стектрейс в буфер обмена",
+  "errors.unexpected_crash.report_issue": "Сообщить о проблеме",
   "follow_request.authorize": "Авторизовать",
   "follow_request.reject": "Отказать",
   "getting_started.developers": "Разработчикам",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} уведомл.",
   "poll.closed": "Завершён",
   "poll.refresh": "Обновить",
+  "poll.total_people": "{count, plural, one {# человек} few {# человека} many {# человек} other {# человек}}",
   "poll.total_votes": "{count, plural, one {# голос} few {# голоса} many {# голосов} other {# голосов}}",
   "poll.vote": "Голосовать",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Вы проголосовали за этот вариант",
   "poll_button.add_poll": "Добавить опрос",
   "poll_button.remove_poll": "Удалить опрос",
   "privacy.change": "Изменить видимость статуса",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Публичный",
   "privacy.unlisted.long": "Не показывать в лентах",
   "privacy.unlisted.short": "Скрытый",
+  "refresh": "Обновить",
   "regeneration_indicator.label": "Загрузка…",
   "regeneration_indicator.sublabel": "Ваша домашняя лента готовится!",
   "relative_time.days": "{number}д",
@@ -374,7 +380,7 @@
   "status.show_more": "Развернуть",
   "status.show_more_all": "Развернуть для всех",
   "status.show_thread": "Показать обсуждение",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "Недоступно",
   "status.unmute_conversation": "Снять глушение с обсуждения",
   "status.unpin": "Открепить от профиля",
   "suggestions.dismiss": "Удалить предложение",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 07616931f..946ccfa26 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -63,7 +63,6 @@
   "column.notifications": "Oboznámenia",
   "column.pins": "Pripnuté príspevky",
   "column.public": "Federovaná časová os",
-  "column.status": "Príspevok",
   "column_back_button.label": "Späť",
   "column_header.hide_settings": "Skryť nastavenia",
   "column_header.moveLeft_settings": "Presuň stĺpec doľava",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Odhlás sa",
   "confirmations.logout.message": "Si si istý/á, že sa chceš odhlásiť?",
   "confirmations.mute.confirm": "Ignoruj",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Naozaj chceš ignorovať {name}?",
   "confirmations.redraft.confirm": "Vyčisti a prepíš",
   "confirmations.redraft.message": "Si si istý/á, že chceš premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Ešte si nestĺmil žiadných užívateľov.",
   "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.",
   "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Nahlás problém",
   "follow_request.authorize": "Povoľ prístup",
   "follow_request.reject": "Odmietni",
   "getting_started.developers": "Vývojári",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Voľby",
   "navigation_bar.public_timeline": "Federovaná časová os",
   "navigation_bar.security": "Zabezbečenie",
-  "notification.and_n_others": "a {count, plural,one {# ostatné} other {# ostatných}}",
+  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} si obľúbil/a tvoj príspevok",
   "notification.follow": "{name} ťa začal/a následovať",
   "notification.mention": "{name} ťa spomenul/a",
@@ -296,10 +300,11 @@
   "notifications.filter.polls": "Výsledky ankiet",
   "notifications.group": "{count} oboznámení",
   "poll.closed": "Uzatvorená",
-  "poll.refresh": "Obnov",
+  "poll.refresh": "Občerstvi",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}",
   "poll.vote": "Hlasuj",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Hlasoval/a si za túto voľbu",
   "poll_button.add_poll": "Pridaj anketu",
   "poll_button.remove_poll": "Odstráň anketu",
   "privacy.change": "Uprav súkromie príspevku",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Verejné",
   "privacy.unlisted.long": "Neposielaj do verejných časových osí",
   "privacy.unlisted.short": "Verejne, ale nezobraziť v osi",
+  "refresh": "Občerstvi",
   "regeneration_indicator.label": "Načítava sa…",
   "regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!",
   "relative_time.days": "{number}dní",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 86091e4a7..d9d032891 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -63,7 +63,6 @@
   "column.notifications": "Obvestila",
   "column.pins": "Pripeti tuti",
   "column.public": "Združena časovnica",
-  "column.status": "Toot",
   "column_back_button.label": "Nazaj",
   "column_header.hide_settings": "Skrij nastavitve",
   "column_header.moveLeft_settings": "Premakni stolpec na levo",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Utišanje",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ali ste prepričani, da želite utišati {name}?",
   "confirmations.redraft.confirm": "Izbriši in preoblikuj",
   "confirmations.redraft.message": "Ali ste prepričani, da želite izbrisati ta status in ga preoblikovati? Vzljubi in spodbude bodo izgubljeni, odgovori na izvirno objavo pa bodo osiroteli.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Niste utišali še nobenega uporabnika.",
   "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.",
   "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Overi",
   "follow_request.reject": "Zavrni",
   "getting_started.developers": "Razvijalci",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} obvestil",
   "poll.closed": "Zaprto",
   "poll.refresh": "Osveži",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural,one {# glas} other {# glasov}}",
   "poll.vote": "Glasuj",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Javno",
   "privacy.unlisted.long": "Ne objavi na javne časovnice",
   "privacy.unlisted.short": "Ni prikazano",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Nalaganje…",
   "regeneration_indicator.sublabel": "Vaš domači vir se pripravlja!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 66b939682..e97ab0155 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -63,7 +63,6 @@
   "column.notifications": "Njoftime",
   "column.pins": "Mesazhe të fiksuar",
   "column.public": "Rrjedhë kohore e federuar",
-  "column.status": "Toot",
   "column_back_button.label": "Mbrapsht",
   "column_header.hide_settings": "Fshihi rregullimet",
   "column_header.moveLeft_settings": "Shpjere shtyllën majtas",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Heshtoje",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Jeni i sigurt se doni të heshtohet {name}?",
   "confirmations.redraft.confirm": "Fshijeni & rihartojeni",
   "confirmations.redraft.message": "Jeni i sigurt se doni të fshihet kjo gjendje dhe të rihartohet? Parapëlqimet dhe boosts do të humbin, ndërsa përgjigjet te postimi origjinal do të bëhen jetime.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "S’keni heshtuar ende ndonjë përdorues.",
   "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.",
   "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Autorizoje",
   "follow_request.reject": "Hidhe tej",
   "getting_started.developers": "Zhvillues",
@@ -297,6 +301,7 @@
   "notifications.group": "{count}s njoftime",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publike",
   "privacy.unlisted.long": "Mos e postoni në rrjedha publike kohore",
   "privacy.unlisted.short": "Jo në lista",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Po ngarkohet…",
   "regeneration_indicator.sublabel": "Prurja juaj vetjake po përgatiteet!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index f9144348d..77ec96d97 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -63,7 +63,6 @@
   "column.notifications": "Obaveštenja",
   "column.pins": "Prikačeni tutovi",
   "column.public": "Federisana lajna",
-  "column.status": "Toot",
   "column_back_button.label": "Nazad",
   "column_header.hide_settings": "Sakrij postavke",
   "column_header.moveLeft_settings": "Pomeri kolonu ulevo",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Ućutkaj",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Da li stvarno želite da ućutkate korisnika {name}?",
   "confirmations.redraft.confirm": "Delete & redraft",
   "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "Trenutno nemate obaveštenja. Družite se malo da započnete razgovore.",
   "empty_column.public": "Ovde nema ničega! Napišite nešto javno, ili nađite korisnike sa drugih instanci koje ćete zapratiti da popunite ovu prazninu",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Odobri",
   "follow_request.reject": "Odbij",
   "getting_started.developers": "Developers",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Javno",
   "privacy.unlisted.long": "Ne objavljuj na javnim lajnama",
   "privacy.unlisted.short": "Neizlistano",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Loading…",
   "regeneration_indicator.sublabel": "Your home feed is being prepared!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index c7adda11a..a84e3c610 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -63,7 +63,6 @@
   "column.notifications": "Обавештења",
   "column.pins": "Прикачене трубе",
   "column.public": "Здружена временска линија",
-  "column.status": "Toot",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Сакриј поставке",
   "column_header.moveLeft_settings": "Помери колону улево",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "Ућуткај",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Да ли стварно желите да ућуткате корисника {name}?",
   "confirmations.redraft.confirm": "Избриши и преправи",
   "confirmations.redraft.message": "Да ли сте сигурни да желите да избришете овај статус и да га преправите? Сва стављања у омиљене трубе, као и подршке ће бити изгубљене, а одговори на оригинални пост ће бити поништени.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Још увек немате ућутканих корисника.",
   "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.",
   "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Одобри",
   "follow_request.reject": "Одбиј",
   "getting_started.developers": "Програмери",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} обавештења",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Јавно",
   "privacy.unlisted.long": "Не објављуј на јавним временским линијама",
   "privacy.unlisted.short": "Неизлистано",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Учитавање…",
   "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 449b226f0..4e305eeff 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -4,7 +4,7 @@
   "account.block": "Blockera @{name}",
   "account.block_domain": "Dölj allt från {domain}",
   "account.blocked": "Blockerad",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.cancel_follow_request": "Avbryt förfrågan att följa",
   "account.direct": "Skicka ett direktmeddelande till @{name}",
   "account.domain_blocked": "Domän dold",
   "account.edit_profile": "Redigera profil",
@@ -16,16 +16,16 @@
   "account.follows.empty": "Den här användaren följer inte någon ännu.",
   "account.follows_you": "Följer dig",
   "account.hide_reblogs": "Dölj knuffar från @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Senast aktiv",
   "account.link_verified_on": "Ägarskapet för det här kontot kontrollerades den {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.locked_info": "Detta konto har en låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.",
   "account.media": "Media",
   "account.mention": "Nämna @{name}",
   "account.moved_to": "{name} har flyttat till:",
   "account.mute": "Tysta @{name}",
   "account.mute_notifications": "Stäng av notifieringar från @{name}",
   "account.muted": "Tystad",
-  "account.never_active": "Never",
+  "account.never_active": "Aldrig",
   "account.posts": "Inlägg",
   "account.posts_with_replies": "Toots och svar",
   "account.report": "Rapportera @{name}",
@@ -38,11 +38,11 @@
   "account.unfollow": "Sluta följa",
   "account.unmute": "Sluta tysta @{name}",
   "account.unmute_notifications": "Återaktivera notifikationer från @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
+  "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.",
+  "alert.rate_limited.title": "Begränsad mängd",
   "alert.unexpected.message": "Ett oväntat fel uppstod.",
   "alert.unexpected.title": "Hoppsan!",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "autosuggest_hashtag.per_week": "{count} per vecka",
   "boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång",
   "bundle_column_error.body": "Något gick fel när du laddade denna komponent.",
   "bundle_column_error.retry": "Försök igen",
@@ -53,7 +53,7 @@
   "column.blocks": "Blockerade användare",
   "column.community": "Lokal tidslinje",
   "column.direct": "Direktmeddelanden",
-  "column.directory": "Browse profiles",
+  "column.directory": "Bläddra bland profiler",
   "column.domain_blocks": "Dolda domäner",
   "column.favourites": "Favoriter",
   "column.follow_requests": "Följförfrågningar",
@@ -63,7 +63,6 @@
   "column.notifications": "Meddelanden",
   "column.pins": "Nålade toots",
   "column.public": "Förenad tidslinje",
-  "column.status": "Toot",
   "column_back_button.label": "Tillbaka",
   "column_header.hide_settings": "Dölj inställningar",
   "column_header.moveLeft_settings": "Flytta kolumnen till vänster",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
   "confirmations.domain_block.confirm": "Dölj hela domänen",
   "confirmations.domain_block.message": "Är du verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer sluta se innehåll från {domain}-domänen i den allmänna tidslinjen och i dina egna notifieringar. Du kommer även sluta följa alla eventuella följare du har från {domain}.",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "Logga ut",
+  "confirmations.logout.message": "Är du säker på att du vill logga ut?",
   "confirmations.mute.confirm": "Tysta",
+  "confirmations.mute.explanation": "Detta kommer dölja postningar från dem och postningar som nämner dem, men fortfarande tillåta dem att se dina postningar och följa dig.",
   "confirmations.mute.message": "Är du säker du vill tysta ner {name}?",
   "confirmations.redraft.confirm": "Radera och gör om",
   "confirmations.redraft.message": "Är du säker på att du vill radera meddelandet och göra om det? Du kommer förlora alla svar, knuffar och favoriter som hänvisar till meddelandet.",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "Om du svarar nu kommer det att ersätta meddelandet du håller på att skriva. Är du säker på att du vill fortsätta?",
   "confirmations.unfollow.confirm": "Sluta följa",
   "confirmations.unfollow.message": "Är du säker på att du vill sluta följa {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "conversation.delete": "Radera konversation",
+  "conversation.mark_as_read": "Markera som läst",
+  "conversation.open": "Se konversation",
+  "conversation.with": "Med {names}",
+  "directory.federated": "Från känt fediverse",
+  "directory.local": "Endast från {domain}",
+  "directory.new_arrivals": "Nyanlända",
+  "directory.recently_active": "Nyligen aktiva",
   "embed.instructions": "Bädda in den här statusen på din webbplats genom att kopiera koden nedan.",
   "embed.preview": "Så här kommer det att se ut:",
   "emoji_button.activity": "Aktivitet",
@@ -141,17 +141,21 @@
   "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!",
   "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot ett kommer det att dyka upp här.",
   "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.favourited_statuses": "Du har inga favoritmarkerade toots än. När du favoritmarkerar en kommer den synas här.",
+  "empty_column.favourites": "Ingen har favoritmarkerat den här tooten än. När någon gör det kommer de synas här.",
+  "empty_column.follow_requests": "Du har inga följförfrågningar än. När du får en kommer den synas här.",
   "empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
   "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.",
   "empty_column.home.public_timeline": "den publika tidslinjen",
   "empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+  "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.",
   "empty_column.mutes": "Du har ännu inte tystat några användare.",
   "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.",
   "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det",
+  "error.unexpected_crash.explanation": "På grund av en bugg i vår kod eller kompatiblitetsproblem i webbläsaren kan den här sidan inte visas korrekt.",
+  "error.unexpected_crash.next_steps": "Prova att ladda om sidan. Om det inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller app.",
+  "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp",
+  "errors.unexpected_crash.report_issue": "Rapportera problem",
   "follow_request.authorize": "Godkänn",
   "follow_request.reject": "Avvisa",
   "getting_started.developers": "Utvecklare",
@@ -179,21 +183,21 @@
   "intervals.full.hours": "{hours, plural, one {# timme} other {# timmar}}",
   "intervals.full.minutes": "{minutes, plural, one {1 minut} other {# minuter}}",
   "introduction.federation.action": "Nästa",
-  "introduction.federation.federated.headline": "Federated",
+  "introduction.federation.federated.headline": "Federerad",
   "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
   "introduction.federation.home.headline": "Hem",
   "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
+  "introduction.federation.local.headline": "Lokal",
   "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
   "introduction.interactions.action": "Slutför introduktionsguide!",
-  "introduction.interactions.favourite.headline": "Favourite",
+  "introduction.interactions.favourite.headline": "Favorit",
   "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
+  "introduction.interactions.reblog.headline": "Knuffa",
   "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
+  "introduction.interactions.reply.headline": "Svara",
   "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
   "introduction.welcome.action": "Sätt igång!",
-  "introduction.welcome.headline": "First steps",
+  "introduction.welcome.headline": "Första stegen",
   "introduction.welcome.text": "Välkommen till fediverse! Om några ögonblick kommer du kunna sända ut meddelanden och prata med dina vänner över en mängd servrar. Men den här servern, {domain}, är speciell — den är hem åt din profil, så kom ihåg vad den heter.",
   "keyboard_shortcuts.back": "för att gå bakåt",
   "keyboard_shortcuts.blocked": "för att öppna listan över blockerade användare",
@@ -230,7 +234,7 @@
   "lightbox.close": "Stäng",
   "lightbox.next": "Nästa",
   "lightbox.previous": "Tidigare",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "Visa kontext",
   "lists.account.add": "Lägg till i lista",
   "lists.account.remove": "Ta bort från lista",
   "lists.delete": "Radera lista",
@@ -249,21 +253,21 @@
   "navigation_bar.apps": "Mobilappar",
   "navigation_bar.blocks": "Blockerade användare",
   "navigation_bar.community_timeline": "Lokal tidslinje",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Författa ny toot",
   "navigation_bar.direct": "Direktmeddelanden",
   "navigation_bar.discover": "Upptäck",
   "navigation_bar.domain_blocks": "Dolda domäner",
   "navigation_bar.edit_profile": "Redigera profil",
   "navigation_bar.favourites": "Favoriter",
-  "navigation_bar.filters": "Muted words",
+  "navigation_bar.filters": "Tystade ord",
   "navigation_bar.follow_requests": "Följförfrågningar",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "Följer och följare",
   "navigation_bar.info": "Om denna instans",
   "navigation_bar.keyboard_shortcuts": "Kortkommandon",
   "navigation_bar.lists": "Listor",
   "navigation_bar.logout": "Logga ut",
   "navigation_bar.mutes": "Tystade användare",
-  "navigation_bar.personal": "Personal",
+  "navigation_bar.personal": "Personligt",
   "navigation_bar.pins": "Nålade inlägg (toots)",
   "navigation_bar.preferences": "Inställningar",
   "navigation_bar.public_timeline": "Förenad tidslinje",
@@ -272,36 +276,37 @@
   "notification.favourite": "{name} favoriserade din status",
   "notification.follow": "{name} följer dig",
   "notification.mention": "{name} nämnde dig",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.poll": "En omröstning du röstat i har avslutats",
   "notification.reblog": "{name} knuffade din status",
   "notifications.clear": "Rensa meddelanden",
   "notifications.clear_confirmation": "Är du säker på att du vill radera alla dina meddelanden permanent?",
   "notifications.column_settings.alert": "Skrivbordsmeddelanden",
   "notifications.column_settings.favourite": "Favoriter:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier",
+  "notifications.column_settings.filter_bar.category": "Snabbfilter",
+  "notifications.column_settings.filter_bar.show": "Visa",
   "notifications.column_settings.follow": "Nya följare:",
   "notifications.column_settings.mention": "Omnämningar:",
-  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.poll": "Omröstningsresultat:",
   "notifications.column_settings.push": "Push meddelanden",
   "notifications.column_settings.reblog": "Knuffar:",
   "notifications.column_settings.show": "Visa i kolumnen",
   "notifications.column_settings.sound": "Spela upp ljud",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.all": "Alla",
+  "notifications.filter.boosts": "Knuffar",
   "notifications.filter.favourites": "Favoriter",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
+  "notifications.filter.follows": "Följer",
+  "notifications.filter.mentions": "Omnämningar",
+  "notifications.filter.polls": "Omröstningsresultat",
   "notifications.group": "{count} aviseringar",
-  "poll.closed": "Closed",
+  "poll.closed": "Stängd",
   "poll.refresh": "Ladda om",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
+  "poll.total_people": "{persons, plural, one {# person} other {# personer}}",
+  "poll.total_votes": "{count, plural, one {1 röst} other {# röster}}",
   "poll.vote": "Rösta",
-  "poll.voted": "You voted for this answer",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "poll.voted": "Du röstade för detta svar",
+  "poll_button.add_poll": "Lägg till en omröstning",
+  "poll_button.remove_poll": "Ta bort omröstning",
   "privacy.change": "Justera sekretess",
   "privacy.direct.long": "Skicka endast till nämnda användare",
   "privacy.direct.short": "Direkt",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Publik",
   "privacy.unlisted.long": "Skicka inte till publik tidslinje",
   "privacy.unlisted.short": "Olistad",
+  "refresh": "Läs om",
   "regeneration_indicator.label": "Laddar…",
   "regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!",
   "relative_time.days": "{number}d",
@@ -333,22 +339,22 @@
   "search_popout.tips.text": "Enkel text returnerar matchande visningsnamn, användarnamn och hashtags",
   "search_popout.tips.user": "användare",
   "search_results.accounts": "Människor",
-  "search_results.hashtags": "Hashtags",
+  "search_results.hashtags": "Hashtaggar",
   "search_results.statuses": "Toots",
   "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
   "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
   "status.admin_account": "Open moderation interface for @{name}",
   "status.admin_status": "Open this status in the moderation interface",
-  "status.block": "Block @{name}",
+  "status.block": "Blockera @{name}",
   "status.cancel_reblog_private": "Ta bort knuff",
   "status.cannot_reblog": "Detta inlägg kan inte knuffas",
-  "status.copy": "Copy link to status",
+  "status.copy": "Kopiera länk till status",
   "status.delete": "Ta bort",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direktmeddela @{name}",
   "status.embed": "Bädda in",
   "status.favourite": "Favorit",
-  "status.filtered": "Filtered",
+  "status.filtered": "Filtrerat",
   "status.load_more": "Ladda fler",
   "status.media_hidden": "Media dold",
   "status.mention": "Omnämn @{name}",
@@ -374,7 +380,7 @@
   "status.show_more": "Visa mer",
   "status.show_more_all": "Visa mer för alla",
   "status.show_thread": "Visa tråd",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "Ej tillgängligt",
   "status.unmute_conversation": "Öppna konversation",
   "status.unpin": "Ångra fäst i profil",
   "suggestions.dismiss": "Dismiss suggestion",
@@ -397,10 +403,10 @@
   "upload_error.limit": "File upload limit exceeded.",
   "upload_error.poll": "File upload not allowed with polls.",
   "upload_form.description": "Beskriv för synskadade",
-  "upload_form.edit": "Edit",
+  "upload_form.edit": "Redigera",
   "upload_form.undo": "Ta bort",
   "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
+  "upload_modal.apply": "Verkställ",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Detect text from picture",
   "upload_modal.edit_media": "Edit media",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index c020bafb3..3e019f0cb 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -63,7 +63,6 @@
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "கூட்டாட்சி காலக்கெடு",
-  "column.status": "Toot",
   "column_back_button.label": "ஆதரி",
   "column_header.hide_settings": "அமைப்புகளை மறை",
   "column_header.moveLeft_settings": "நெடுவரிசையை இடதுபுறமாக நகர்த்தவும்",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "ஊமையான",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "நிச்சயமாக நீங்கள் முடக்க விரும்புகிறீர்களா {name}?",
   "confirmations.redraft.confirm": "நீக்கு & redraft",
   "confirmations.redraft.message": "நிச்சயமாக இந்த நிலையை நீக்கி, அதை மறுபடியும் உருவாக்க வேண்டுமா? பிடித்தவை மற்றும் ஊக்கங்கள் இழக்கப்படும், மற்றும் அசல் இடுகையில் பதில்கள் அனாதையான இருக்கும்.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "நீங்கள் இதுவரை எந்த பயனர்களையும் முடக்கியிருக்கவில்லை.",
   "empty_column.notifications": "உங்களிடம் எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் தொடங்க பிறருடன் தொடர்புகொள்ளவும்.",
   "empty_column.public": "இங்கே எதுவும் இல்லை! பகிரங்கமாக ஒன்றை எழுதவும் அல்லது மற்ற நிகழ்வுகளிலிருந்து பயனர்களை அதை நிரப்புவதற்கு கைமுறையாக பின்பற்றவும்",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "அதிகாரமளி",
   "follow_request.reject": "விலக்கு",
   "getting_started.developers": "உருவாக்குநர்கள்",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} notifications",
   "poll.closed": "மூடிய",
   "poll.refresh": "பத்துயிர்ப்ப?ட்டு",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} மற்ற {# votes}}",
   "poll.vote": "வாக்களி",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "பட்டியலிடப்படாத",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "சுமையேற்றம்…",
   "regeneration_indicator.sublabel": "உங்கள் வீட்டு ஊட்டம் தயார் செய்யப்படுகிறது!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index ad99afcf4..720798d13 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -63,7 +63,6 @@
   "column.notifications": "ప్రకటనలు",
   "column.pins": "Pinned toot",
   "column.public": "సమాఖ్య కాలక్రమం",
-  "column.status": "Toot",
   "column_back_button.label": "వెనక్కి",
   "column_header.hide_settings": "అమర్పులను దాచిపెట్టు",
   "column_header.moveLeft_settings": "నిలువు వరుసను ఎడమకి తరలించు",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "మ్యూట్ చేయి",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "{name}ను మీరు ఖచ్చితంగా మ్యూట్ చేయాలనుకుంటున్నారా?",
   "confirmations.redraft.confirm": "తొలగించు & తిరగరాయు",
   "confirmations.redraft.message": "మీరు ఖచ్చితంగా ఈ స్టేటస్ ని తొలగించి తిరగరాయాలనుకుంటున్నారా? ఈ స్టేటస్ యొక్క బూస్ట్ లు మరియు ఇష్టాలు పోతాయి,మరియు ప్రత్యుత్తరాలు అనాధలు అయిపోతాయి.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "మీరు ఇంకా ఏ వినియోగదారులనూ మ్యూట్ చేయలేదు.",
   "empty_column.notifications": "మీకు ఇంకా ఏ నోటిఫికేషన్లు లేవు. సంభాషణను ప్రారంభించడానికి ఇతరులతో ప్రతిస్పందించండి.",
   "empty_column.public": "ఇక్కడ ఏమీ లేదు! దీన్ని నింపడానికి బహిరంగంగా ఏదైనా వ్రాయండి, లేదా ఇతర సేవికల నుండి వినియోగదారులను అనుసరించండి",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "అనుమతించు",
   "follow_request.reject": "తిరస్కరించు",
   "getting_started.developers": "డెవలపర్లు",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} ప్రకటనలు",
   "poll.closed": "మూసివేయబడినవి",
   "poll.refresh": "నవీకరించు",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "ఎన్నుకోండి",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "ప్రజా",
   "privacy.unlisted.long": "ప్రజా కాలక్రమాలలో చూపించవద్దు",
   "privacy.unlisted.short": "జాబితా చేయబడనిది",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "లోడ్ అవుతోంది…",
   "regeneration_indicator.sublabel": "మీ హోమ్ ఫీడ్ సిద్ధమవుతోంది!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index da57280ce..aeeebb090 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -63,7 +63,6 @@
   "column.notifications": "การแจ้งเตือน",
   "column.pins": "โพสต์ที่ปักหมุด",
   "column.public": "เส้นเวลาที่ติดต่อกับภายนอก",
-  "column.status": "โพสต์",
   "column_back_button.label": "ย้อนกลับ",
   "column_header.hide_settings": "ซ่อนการตั้งค่า",
   "column_header.moveLeft_settings": "ย้ายคอลัมน์ไปทางซ้าย",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "ออกจากระบบ",
   "confirmations.logout.message": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?",
   "confirmations.mute.confirm": "ปิดเสียง",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "คุณแน่ใจหรือไม่ว่าต้องการปิดเสียง {name}?",
   "confirmations.redraft.confirm": "ลบแล้วร่างใหม่",
   "confirmations.redraft.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้แล้วร่างใหม่? รายการโปรดและการดันจะหายไป และการตอบกลับโพสต์ดั้งเดิมจะไม่มีความเกี่ยวพัน",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "คุณยังไม่ได้ปิดเสียงผู้ใช้ใด ๆ",
   "empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา",
   "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "อนุญาต",
   "follow_request.reject": "ปฏิเสธ",
   "getting_started.developers": "นักพัฒนา",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "พื้นฐาน",
   "home.column_settings.show_reblogs": "แสดงการดัน",
   "home.column_settings.show_replies": "แสดงการตอบกลับ",
-  "home.column_settings.update_live": "อัปเดตตามเวลาจริง",
+  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, other {# วัน}}",
   "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}",
   "intervals.full.minutes": "{number, plural, other {# นาที}}",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} การแจ้งเตือน",
   "poll.closed": "ปิดแล้ว",
   "poll.refresh": "รีเฟรช",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, other {# การลงคะแนน}}",
   "poll.vote": "ลงคะแนน",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "สาธารณะ",
   "privacy.unlisted.long": "ไม่โพสต์ไปยังเส้นเวลาสาธารณะ",
   "privacy.unlisted.short": "ไม่อยู่ในรายการ",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "กำลังโหลด…",
   "regeneration_indicator.sublabel": "กำลังเตรียมฟีดหน้าแรกของคุณ!",
   "relative_time.days": "{number} วัน",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 1b5ce07d5..364b98c89 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -63,7 +63,6 @@
   "column.notifications": "Bildirimler",
   "column.pins": "Sabitlenmiş gönderi",
   "column.public": "Federe zaman tüneli",
-  "column.status": "Toot",
   "column_back_button.label": "Geri",
   "column_header.hide_settings": "Ayarları gizle",
   "column_header.moveLeft_settings": "Sütunu sola taşı",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Çıkış Yap",
   "confirmations.logout.message": "Çıkış yapmak istediğinize emin misiniz?",
   "confirmations.mute.confirm": "Sessize al",
+  "confirmations.mute.explanation": "Bu onlardan gelen ve onlardan bahseden gönderileri gizleyecek, fakat yine de onların gönderilerinizi görmelerine ve sizi takip etmelerine izin verecektir.",
   "confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?",
   "confirmations.redraft.confirm": "Sil ve yeniden tasarla",
   "confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.",
@@ -111,11 +111,11 @@
   "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?",
   "confirmations.unfollow.confirm": "Takibi kaldır",
   "confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
+  "conversation.delete": "Konuşmayı sil",
+  "conversation.mark_as_read": "Okunmuş olarak işaretle",
+  "conversation.open": "Konuşmayı görüntüle",
+  "conversation.with": "{names} ile",
+  "directory.federated": "Bilinen fediverse'lerden",
   "directory.local": "Yalnızca {domain} adresinden",
   "directory.new_arrivals": "Yeni gelenler",
   "directory.recently_active": "Son zamanlarda aktif",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.",
   "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.",
   "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin",
+  "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.",
+  "error.unexpected_crash.next_steps": "Sayfayı yenilemeyi deneyin. Eğer bu yardımcı olmazsa, Mastodon'u farklı bir tarayıcı ya da yerel uygulama üzerinden kullanabilirsiniz.",
+  "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala",
+  "errors.unexpected_crash.report_issue": "Sorun bildir",
   "follow_request.authorize": "Yetkilendir",
   "follow_request.reject": "Reddet",
   "getting_started.developers": "Geliştiriciler",
@@ -174,7 +178,7 @@
   "home.column_settings.basic": "Temel",
   "home.column_settings.show_reblogs": "Boost edilenleri göster",
   "home.column_settings.show_replies": "Cevapları göster",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.update_live": "Gerçek zamanlı güncelle",
   "intervals.full.days": "{number, plural, one {# gün} other {# gün}}",
   "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}",
   "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}",
@@ -268,7 +272,7 @@
   "navigation_bar.preferences": "Tercihler",
   "navigation_bar.public_timeline": "Federe zaman tüneli",
   "navigation_bar.security": "Güvenlik",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
+  "notification.and_n_others": "ve {count, plural, one {# diğeri} other {# diğerleri}}",
   "notification.favourite": "{name} senin durumunu favorilere ekledi",
   "notification.follow": "{name} seni takip ediyor",
   "notification.mention": "{name} senden bahsetti",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} bildirim",
   "poll.closed": "Kapandı",
   "poll.refresh": "Yenile",
+  "poll.total_people": "{count, plural, one {# kişi} other {# kişi}}",
   "poll.total_votes": "{count, plural, one {# oy} other {# oy}}",
   "poll.vote": "Oy ver",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Bu cevap için oy kullandınız",
   "poll_button.add_poll": "Bir anket ekleyin",
   "poll_button.remove_poll": "Anket kaldır",
   "privacy.change": "Gönderi gizliliğini ayarla",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Herkese açık",
   "privacy.unlisted.long": "Herkese açık zaman tüneline gönderme",
   "privacy.unlisted.short": "Listelenmemiş",
+  "refresh": "Yenile",
   "regeneration_indicator.label": "Yükleniyor…",
   "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!",
   "relative_time.days": "{number}g",
@@ -360,7 +366,7 @@
   "status.pinned": "Sabitlenmiş gönderi",
   "status.read_more": "Daha dazla oku",
   "status.reblog": "Boostla",
-  "status.reblog_private": "Boost to original audience",
+  "status.reblog_private": "Orjinal kitleye yinele",
   "status.reblogged_by": "{name} boost etti",
   "status.reblogs.empty": "Kimse bu gönderiyi boostlamadı. Biri yaptığında burada gözükecek.",
   "status.redraft": "Sil & tekrar taslakla",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 9a64b857f..ec56c1484 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -63,7 +63,6 @@
   "column.notifications": "Сповіщення",
   "column.pins": "Закріплені дмухи",
   "column.public": "Глобальна стрічка",
-  "column.status": "Toot",
   "column_back_button.label": "Назад",
   "column_header.hide_settings": "Приховати налаштування",
   "column_header.moveLeft_settings": "Змістити колонку вліво",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Вийти",
   "confirmations.logout.message": "Ви впевнені, що хочете вийти?",
   "confirmations.mute.confirm": "Заглушити",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?",
   "confirmations.redraft.confirm": "Видалити та перестворити",
   "confirmations.redraft.message": "Ви впевнені, що хочете видалити допис і перестворити його? Ви втратите всі відповіді, передмухи та вподобайки допису.",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "Ви ще не заглушили жодного користувача.",
   "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
   "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "Авторизувати",
   "follow_request.reject": "Відмовити",
   "getting_started.developers": "Розробникам",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} сповіщень",
   "poll.closed": "Закрито",
   "poll.refresh": "Оновити",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# голос} few {# голоси} many {# голосів} other {# голосів}}",
   "poll.vote": "Проголосувати",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "Публічно",
   "privacy.unlisted.long": "Не показувати у публічних стрічках",
   "privacy.unlisted.short": "Прихований",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "Завантаження…",
   "regeneration_indicator.sublabel": "Ваша домашня стрічка готується!",
   "relative_time.days": "{number}д",
diff --git a/app/javascript/mastodon/locales/whitelist_mk.json b/app/javascript/mastodon/locales/whitelist_mk.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_mk.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 4057fefa9..402f7acae 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -63,7 +63,6 @@
   "column.notifications": "通知",
   "column.pins": "置顶嘟文",
   "column.public": "跨站公共时间轴",
-  "column.status": "Toot",
   "column_back_button.label": "返回",
   "column_header.hide_settings": "隐藏设置",
   "column_header.moveLeft_settings": "将此栏左移",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "隐藏",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "你确定要隐藏 {name} 吗?",
   "confirmations.redraft.confirm": "删除并重新编辑",
   "confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和收藏都会被清除,回复将会失去关联。",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "你没有隐藏任何用户。",
   "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。",
   "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "同意",
   "follow_request.reject": "拒绝",
   "getting_started.developers": "开发",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} 条通知",
   "poll.closed": "已关闭",
   "poll.refresh": "刷新",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count} 票",
   "poll.vote": "投票",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "公开",
   "privacy.unlisted.long": "所有人可见,但不会出现在公共时间轴上",
   "privacy.unlisted.short": "不公开",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "加载中……",
   "regeneration_indicator.sublabel": "你的主页时间轴正在准备中!",
   "relative_time.days": "{number}天",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 93439a3a1..9e07e7995 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -63,7 +63,6 @@
   "column.notifications": "通知",
   "column.pins": "置頂文章",
   "column.public": "跨站時間軸",
-  "column.status": "Toot",
   "column_back_button.label": "返回",
   "column_header.hide_settings": "隱藏設定",
   "column_header.moveLeft_settings": "將欄左移",
@@ -104,6 +103,7 @@
   "confirmations.logout.confirm": "Log out",
   "confirmations.logout.message": "Are you sure you want to log out?",
   "confirmations.mute.confirm": "靜音",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "你確定要將{name}靜音嗎?",
   "confirmations.redraft.confirm": "刪除並編輯",
   "confirmations.redraft.message": "你確定要刪除並重新編輯嗎?所有相關的回覆、轉推與最愛都會被刪除。",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "You haven't muted any users yet.",
   "empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。",
   "empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "批准",
   "follow_request.reject": "拒絕",
   "getting_started.developers": "開發者",
@@ -297,6 +301,7 @@
   "notifications.group": "{count} 條通知",
   "poll.closed": "Closed",
   "poll.refresh": "Refresh",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
   "poll.voted": "You voted for this answer",
@@ -311,6 +316,7 @@
   "privacy.public.short": "公共",
   "privacy.unlisted.long": "公開,但不在公共時間軸顯示",
   "privacy.unlisted.short": "公開",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "載入中……",
   "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!",
   "relative_time.days": "{number}日",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index b88d1b60d..deb5a3e27 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -1,10 +1,10 @@
 {
-  "account.add_or_remove_from_list": "從列表新增或移除",
+  "account.add_or_remove_from_list": "從名單中新增或移除",
   "account.badges.bot": "機器人",
   "account.block": "封鎖 @{name}",
   "account.block_domain": "隱藏來自 {domain} 的所有內容",
   "account.blocked": "已封鎖",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.cancel_follow_request": "取消關注請求",
   "account.direct": "傳私訊給 @{name}",
   "account.domain_blocked": "已隱藏網域",
   "account.edit_profile": "編輯個人資料",
@@ -16,7 +16,7 @@
   "account.follows.empty": "這位使用者尚未關注任何使用者。",
   "account.follows_you": "關注了你",
   "account.hide_reblogs": "隱藏來自 @{name} 的轉推",
-  "account.last_status": "Last active",
+  "account.last_status": "上次活躍",
   "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限",
   "account.locked_info": "這隻帳戶的隱私狀態被設成鎖定。該擁有者會手動審核能關注這隻帳號的人。",
   "account.media": "媒體",
@@ -25,7 +25,7 @@
   "account.mute": "靜音 @{name}",
   "account.mute_notifications": "靜音來自 @{name} 的通知",
   "account.muted": "已靜音",
-  "account.never_active": "Never",
+  "account.never_active": "永不",
   "account.posts": "嘟文",
   "account.posts_with_replies": "嘟文與回覆",
   "account.report": "檢舉 @{name}",
@@ -38,11 +38,11 @@
   "account.unfollow": "取消關注",
   "account.unmute": "取消靜音 @{name}",
   "account.unmute_notifications": "重新接收來自 @{name} 的通知",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Rate limited",
+  "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試",
+  "alert.rate_limited.title": "已限速",
   "alert.unexpected.message": "發生了非預期的錯誤。",
   "alert.unexpected.title": "哎呀!",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "autosuggest_hashtag.per_week": "{count} / 週",
   "boost_modal.combo": "下次您可以按 {combo} 跳過",
   "bundle_column_error.body": "載入此元件時發生錯誤。",
   "bundle_column_error.retry": "重試",
@@ -53,7 +53,7 @@
   "column.blocks": "封鎖的使用者",
   "column.community": "本機時間軸",
   "column.direct": "私訊",
-  "column.directory": "Browse profiles",
+  "column.directory": "瀏覽個人資料",
   "column.domain_blocks": "隱藏的網域",
   "column.favourites": "收藏",
   "column.follow_requests": "關注請求",
@@ -63,7 +63,6 @@
   "column.notifications": "通知",
   "column.pins": "釘選的嘟文",
   "column.public": "聯邦時間軸",
-  "column.status": "Toot",
   "column_back_button.label": "上一頁",
   "column_header.hide_settings": "隱藏設定",
   "column_header.moveLeft_settings": "將欄位向左移動",
@@ -85,14 +84,14 @@
   "compose_form.poll.remove_option": "移除此選擇",
   "compose_form.publish": "嘟出去",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.hide": "標記媒體為敏感內容",
   "compose_form.sensitive.marked": "此媒體被標記為敏感內容",
   "compose_form.sensitive.unmarked": "此媒體未標記為敏感內容",
   "compose_form.spoiler.marked": "正文已隱藏到警告之後",
   "compose_form.spoiler.unmarked": "正文未被隱藏",
   "compose_form.spoiler_placeholder": "請在此處寫入警告訊息",
   "confirmation_modal.cancel": "取消",
-  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.block_and_report": "封鎖並檢舉",
   "confirmations.block.confirm": "封鎖",
   "confirmations.block.message": "確定封鎖 {name} ?",
   "confirmations.delete.confirm": "刪除",
@@ -101,9 +100,10 @@
   "confirmations.delete_list.message": "確定永久刪除此名單?",
   "confirmations.domain_block.confirm": "隱藏整個網域",
   "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。",
-  "confirmations.logout.confirm": "Log out",
-  "confirmations.logout.message": "Are you sure you want to log out?",
+  "confirmations.logout.confirm": "登出",
+  "confirmations.logout.message": "確定要登出嗎?",
   "confirmations.mute.confirm": "靜音",
+  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
   "confirmations.mute.message": "確定靜音 {name} ?",
   "confirmations.redraft.confirm": "刪除並重新編輯",
   "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。",
@@ -111,14 +111,14 @@
   "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?",
   "confirmations.unfollow.confirm": "取消關注",
   "confirmations.unfollow.message": "真的要取消關注 {name} 嗎?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "conversation.delete": "刪除對話",
+  "conversation.mark_as_read": "標為已讀",
+  "conversation.open": "檢視對話",
+  "conversation.with": "與 {names}",
+  "directory.federated": "來自已知聯邦宇宙",
+  "directory.local": "僅來自 {domain}",
+  "directory.new_arrivals": "新貨",
+  "directory.recently_active": "最近活躍",
   "embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。",
   "embed.preview": "他會顯示成這樣:",
   "emoji_button.activity": "活動",
@@ -136,7 +136,7 @@
   "emoji_button.symbols": "符號",
   "emoji_button.travel": "旅遊與地點",
   "empty_column.account_timeline": "這裡還沒有嘟文!",
-  "empty_column.account_unavailable": "Profile unavailable",
+  "empty_column.account_unavailable": "無法取得個人資料",
   "empty_column.blocks": "你還沒有封鎖任何使用者。",
   "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!",
   "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
@@ -152,6 +152,10 @@
   "empty_column.mutes": "你尚未靜音任何使用者。",
   "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。",
   "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了",
+  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
+  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.report_issue": "Report issue",
   "follow_request.authorize": "授權",
   "follow_request.reject": "拒絕",
   "getting_started.developers": "開發者",
@@ -223,14 +227,14 @@
   "keyboard_shortcuts.search": "將焦點移至搜尋框",
   "keyboard_shortcuts.start": "開啟「開始使用」欄位",
   "keyboard_shortcuts.toggle_hidden": "顯示/隱藏在內容警告之後的正文",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體",
   "keyboard_shortcuts.toot": "開始發出新嘟文",
   "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點",
   "keyboard_shortcuts.up": "往上移動名單項目",
   "lightbox.close": "關閉",
   "lightbox.next": "下一步",
   "lightbox.previous": "上一步",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "檢視內文",
   "lists.account.add": "新增至名單",
   "lists.account.remove": "從名單中移除",
   "lists.delete": "刪除名單",
@@ -240,7 +244,7 @@
   "lists.new.title_placeholder": "新名單標題",
   "lists.search": "搜尋您關注的使用者",
   "lists.subheading": "您的名單",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, other {# 個新項目}}",
   "loading_indicator.label": "讀取中...",
   "media_gallery.toggle_visible": "切換可見性",
   "missing_indicator.label": "找不到",
@@ -257,7 +261,7 @@
   "navigation_bar.favourites": "收藏",
   "navigation_bar.filters": "靜音詞彙",
   "navigation_bar.follow_requests": "關注請求",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "關注及關注者",
   "navigation_bar.info": "關於此伺服器",
   "navigation_bar.keyboard_shortcuts": "快速鍵",
   "navigation_bar.lists": "名單",
@@ -297,9 +301,10 @@
   "notifications.group": "{count} 條通知",
   "poll.closed": "已關閉",
   "poll.refresh": "重新整理",
+  "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}",
   "poll.vote": "投票",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "你已對此問題投票",
   "poll_button.add_poll": "建立投票",
   "poll_button.remove_poll": "移除投票",
   "privacy.change": "調整隱私狀態",
@@ -311,6 +316,7 @@
   "privacy.public.short": "公開",
   "privacy.unlisted.long": "公開,但不會顯示在公開時間軸",
   "privacy.unlisted.short": "不公開",
+  "refresh": "Refresh",
   "regeneration_indicator.label": "載入中…",
   "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!",
   "relative_time.days": "{number} 天",
@@ -335,7 +341,7 @@
   "search_results.accounts": "使用者",
   "search_results.hashtags": "主題標籤",
   "search_results.statuses": "嘟文",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。",
   "search_results.total": "{count, number} 項結果",
   "status.admin_account": "開啟 @{name} 的管理介面",
   "status.admin_status": "在管理介面開啟此嘟文",
@@ -374,7 +380,7 @@
   "status.show_more": "顯示更多",
   "status.show_more_all": "顯示更多這類嘟文",
   "status.show_thread": "顯示討論串",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "無法使用",
   "status.unmute_conversation": "解除此對話的靜音",
   "status.unpin": "解除置頂",
   "suggestions.dismiss": "關閉建議",
@@ -390,22 +396,22 @@
   "time_remaining.moments": "剩餘時間",
   "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}",
   "trends.count_by_accounts": "{count} 位使用者在討論",
-  "trends.trending_now": "Trending now",
+  "trends.trending_now": "目前趨勢",
   "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
   "upload_area.title": "拖放來上傳",
   "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_error.limit": "已達到檔案上傳限制。",
   "upload_error.poll": "不允許在投票上傳檔案。",
   "upload_form.description": "為視障人士增加文字說明",
-  "upload_form.edit": "Edit",
+  "upload_form.edit": "編輯",
   "upload_form.undo": "刪除",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
-  "upload_modal.apply": "Apply",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
+  "upload_modal.analyzing_picture": "正在分析圖片…",
+  "upload_modal.apply": "套用",
+  "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗",
+  "upload_modal.detect_text": "從圖片偵測文字",
+  "upload_modal.edit_media": "編輯媒體",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.preview_label": "預覽 ({ratio})",
   "upload_progress.label": "上傳中...",
   "video.close": "關閉影片",
   "video.exit_fullscreen": "退出全螢幕",
diff --git a/app/javascript/mastodon/reducers/conversations.js b/app/javascript/mastodon/reducers/conversations.js
index 390658239..975418eda 100644
--- a/app/javascript/mastodon/reducers/conversations.js
+++ b/app/javascript/mastodon/reducers/conversations.js
@@ -7,6 +7,7 @@ import {
   CONVERSATIONS_FETCH_FAIL,
   CONVERSATIONS_UPDATE,
   CONVERSATIONS_READ,
+  CONVERSATIONS_DELETE_SUCCESS,
 } from '../actions/conversations';
 import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'mastodon/actions/accounts';
 import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks';
@@ -107,6 +108,8 @@ export default function conversations(state = initialState, action) {
     return filterConversations(state, [action.relationship.id]);
   case DOMAIN_BLOCK_SUCCESS:
     return filterConversations(state, action.accounts);
+  case CONVERSATIONS_DELETE_SUCCESS:
+    return state.update('items', list => list.filterNot(item => item.get('id') === action.id));
   default:
     return state;
   }
diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss
index 45305d696..05e52966b 100644
--- a/app/javascript/styles/mastodon-light/diff.scss
+++ b/app/javascript/styles/mastodon-light/diff.scss
@@ -14,15 +14,49 @@ html {
   }
 }
 
+.status-card__actions button,
+.status-card__actions a {
+  color: rgba($white, 0.8);
+
+  &:hover,
+  &:active,
+  &:focus {
+    color: $white;
+  }
+}
+
 // Change default background colors of columns
 .column > .scrollable,
 .getting-started,
-.column-inline-form {
+.column-inline-form,
+.error-column,
+.regeneration-indicator {
   background: $white;
   border: 1px solid lighten($ui-base-color, 8%);
   border-top: 0;
 }
 
+.directory__card__img {
+  background: lighten($ui-base-color, 12%);
+}
+
+.filter-form,
+.directory__card__bar {
+  background: $white;
+  border-bottom: 1px solid lighten($ui-base-color, 8%);
+}
+
+.scrollable .directory__list {
+  width: calc(100% + 2px);
+  margin-left: -1px;
+  margin-right: -1px;
+}
+
+.directory__card,
+.table-of-contents {
+  border: 1px solid lighten($ui-base-color, 8%);
+}
+
 .column-back-button,
 .column-header {
   background: $white;
@@ -33,16 +67,16 @@ html {
   }
 
   &--slim-button {
-    border: 0;
-    top: -49px;
-    right: 1px;
+    top: -50px;
+    right: 0;
   }
 }
 
 .column-header__back-button,
 .column-header__button,
 .column-header__button.active,
-.account__header__bar {
+.account__header__bar,
+.directory__card__extra {
   background: $white;
 }
 
@@ -66,6 +100,19 @@ html {
   text-decoration: underline;
 }
 
+.confirmation-modal__secondary-button,
+.confirmation-modal__cancel-button,
+.mute-modal__cancel-button,
+.block-modal__cancel-button {
+  color: lighten($ui-base-color, 26%);
+
+  &:hover,
+  &:focus,
+  &:active {
+    color: $primary-text-color;
+  }
+}
+
 .column-subheading {
   background: darken($ui-base-color, 4%);
   border-bottom: 1px solid lighten($ui-base-color, 8%);
@@ -314,8 +361,19 @@ html {
 .report-modal,
 .embed-modal,
 .error-modal,
-.onboarding-modal {
-  background: $ui-base-color;
+.onboarding-modal,
+.report-modal__comment .setting-text__wrapper,
+.report-modal__comment .setting-text {
+  background: $white;
+  border: 1px solid lighten($ui-base-color, 8%);
+}
+
+.report-modal__comment {
+  border-right-color: lighten($ui-base-color, 8%);
+}
+
+.report-modal__container {
+  border-top-color: lighten($ui-base-color, 8%);
 }
 
 .column-header__collapsible-inner {
@@ -324,6 +382,10 @@ html {
   border-top: 0;
 }
 
+.focal-point__preview strong {
+  color: $white;
+}
+
 .boost-modal__action-bar,
 .confirmation-modal__action-bar,
 .mute-modal__action-bar,
@@ -348,9 +410,11 @@ html {
 
 .embed-modal .embed-modal__container .embed-modal__html {
   background: $white;
+  border: 1px solid lighten($ui-base-color, 8%);
 
   &:focus {
-    background: darken($ui-base-color, 6%);
+    border-color: lighten($ui-base-color, 12%);
+    background: $white;
   }
 }
 
diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss
index 01748148f..c68944528 100644
--- a/app/javascript/styles/mastodon-light/variables.scss
+++ b/app/javascript/styles/mastodon-light/variables.scss
@@ -8,7 +8,7 @@ $classic-secondary-color: #d9e1e8;
 $classic-highlight-color: #2b90d9;
 
 // Differences
-$success-green: #3c754d;
+$success-green: lighten(#3c754d, 8%);
 
 $base-overlay-background: $white !default;
 $valid-value-color: $success-green !default;
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index 1dd8b7954..cf16b54ac 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -145,8 +145,6 @@ $small-breakpoint: 960px;
 
     thead tr,
     tbody tr {
-      break-after: auto;
-      break-inside: avoid;
       border-bottom: 1px solid lighten($ui-base-color, 4%);
       font-size: 1em;
       line-height: 1.625;
@@ -167,12 +165,25 @@ $small-breakpoint: 960px;
       padding: 8px;
       align-self: start;
       align-items: start;
+      word-break: break-all;
 
       &.nowrap {
-        white-space: nowrap;
-        overflow: hidden;
-        text-overflow: ellipsis;
         width: 25%;
+        position: relative;
+
+        &::before {
+          content: '&nbsp;';
+          visibility: hidden;
+        }
+
+        span {
+          position: absolute;
+          left: 8px;
+          right: 8px;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
       }
     }
   }
diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss
index 1f3ef7da2..2b10b5ad3 100644
--- a/app/javascript/styles/mastodon/basics.scss
+++ b/app/javascript/styles/mastodon/basics.scss
@@ -135,13 +135,18 @@ button {
 
 .app-holder {
   &,
-  & > div {
+  & > div,
+  & > noscript {
     display: flex;
     width: 100%;
     align-items: center;
     justify-content: center;
     outline: 0 !important;
   }
+
+  & > noscript {
+    height: 100vh;
+  }
 }
 
 .layout-single-column .app-holder {
@@ -157,3 +162,70 @@ button {
     height: 100%;
   }
 }
+
+.error-boundary,
+.app-holder noscript {
+  flex-direction: column;
+  font-size: 16px;
+  font-weight: 400;
+  line-height: 1.7;
+  color: lighten($error-red, 4%);
+  text-align: center;
+
+  & > div {
+    max-width: 500px;
+  }
+
+  p {
+    margin-bottom: .85em;
+
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+
+  a {
+    color: $highlight-text-color;
+
+    &:hover,
+    &:focus,
+    &:active {
+      text-decoration: none;
+    }
+  }
+
+  &__footer {
+    color: $dark-text-color;
+    font-size: 13px;
+
+    a {
+      color: $dark-text-color;
+    }
+  }
+
+  button {
+    display: inline;
+    border: 0;
+    background: transparent;
+    color: $dark-text-color;
+    font: inherit;
+    padding: 0;
+    margin: 0;
+    line-height: inherit;
+    cursor: pointer;
+    outline: 0;
+    transition: color 300ms linear;
+    text-decoration: underline;
+
+    &:hover,
+    &:focus,
+    &:active {
+      text-decoration: none;
+    }
+
+    &.copied {
+      color: $valid-value-color;
+      transition: none;
+    }
+  }
+}
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 645a917ee..eaccb008c 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -1486,6 +1486,10 @@ a.account__display-name {
   color: inherit;
 }
 
+.detailed-status .button.logo-button {
+  margin-bottom: 15px;
+}
+
 .detailed-status__display-name {
   color: $secondary-text-color;
   display: block;
@@ -4267,10 +4271,13 @@ a.status-card.compact:hover {
   z-index: 9999;
 }
 
-.video-modal {
+.video-modal__container {
   max-width: 100vw;
   max-height: 100vh;
-  position: relative;
+}
+
+.audio-modal__container {
+  width: 50vw;
 }
 
 .media-modal {
@@ -4370,6 +4377,7 @@ a.status-card.compact:hover {
   }
 
   a {
+    pointer-events: auto;
     text-decoration: none;
     font-weight: 500;
     color: $ui-secondary-color;
@@ -4854,6 +4862,7 @@ a.status-card.compact:hover {
   &:focus,
   &:active {
     color: darken($lighter-text-color, 4%);
+    background-color: transparent;
   }
 }
 
@@ -5120,6 +5129,7 @@ a.status-card.compact:hover {
   background: darken($ui-base-color, 8%);
   border-radius: 4px;
   padding-bottom: 44px;
+  direction: ltr;
 
   &.editable {
     border-radius: 0;
@@ -5167,6 +5177,7 @@ a.status-card.compact:hover {
   max-width: 100%;
   border-radius: 4px;
   box-sizing: border-box;
+  direction: ltr;
 
   &.editable {
     border-radius: 0;
@@ -5850,6 +5861,7 @@ noscript {
 }
 
 .embed-modal {
+  width: auto;
   max-width: 80vw;
   max-height: 80vh;
 
@@ -5880,6 +5892,7 @@ noscript {
       font-size: 14px;
       margin: 0;
       margin-bottom: 15px;
+      border-radius: 4px;
 
       &::-moz-focus-inner {
         border: 0;
@@ -5905,6 +5918,7 @@ noscript {
       max-width: 100%;
       overflow: hidden;
       border: 0;
+      border-radius: 4px;
     }
   }
 }
@@ -6450,7 +6464,6 @@ noscript {
     flex: 1 1 auto;
     padding: 10px 5px;
     padding-right: 15px;
-    word-break: break-all;
     overflow: hidden;
 
     &__info {
@@ -6473,8 +6486,8 @@ noscript {
       overflow: hidden;
       text-overflow: ellipsis;
       margin-bottom: 4px;
-      flex-basis: 170px;
-      flex-shrink: 1000;
+      flex-basis: 90px;
+      flex-grow: 1;
 
       a {
         color: $primary-text-color;
@@ -6487,5 +6500,9 @@ noscript {
         }
       }
     }
+
+    a {
+      word-break: break-word;
+    }
   }
 }
diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss
index 2d1bf1abd..319f8c94d 100644
--- a/app/javascript/styles/mastodon/containers.scss
+++ b/app/javascript/styles/mastodon/containers.scss
@@ -412,6 +412,20 @@
     }
   }
 
+  .directory__card {
+    border-radius: 4px;
+
+    @media screen and (max-width: $no-gap-breakpoint) {
+      border-radius: 0;
+    }
+  }
+
+  .page-header {
+    @media screen and (max-width: $no-gap-breakpoint) {
+      border-bottom: 0;
+    }
+  }
+
   .public-account-header {
     overflow: hidden;
     margin-bottom: 10px;
diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss
index 58bc53b14..ecd166253 100644
--- a/app/javascript/styles/mastodon/rtl.scss
+++ b/app/javascript/styles/mastodon/rtl.scss
@@ -7,6 +7,34 @@ body.rtl {
     padding-right: 15px;
   }
 
+  .radio-button__input {
+    margin-right: 0;
+    margin-left: 10px;
+  }
+
+  .directory__card__bar .display-name {
+    margin-left: 0;
+    margin-right: 15px;
+  }
+
+  .display-name {
+    text-align: right;
+  }
+
+  .notification__message {
+    margin-left: 0;
+    margin-right: 68px;
+  }
+
+  .drawer__inner__mastodon > img {
+    transform: scaleX(-1);
+  }
+
+  .notification__favourite-icon-wrapper {
+    left: auto;
+    right: -26px;
+  }
+
   .landing-page__logo {
     margin-right: 0;
     margin-left: 20px;
@@ -135,7 +163,6 @@ body.rtl {
   }
 
   .status__action-bar {
-
     &__counter {
       margin-right: 0;
       margin-left: 11px;
@@ -328,6 +355,12 @@ body.rtl {
     }
   }
 
+  .columns-area--mobile .column,
+  .columns-area--mobile .drawer {
+    padding-left: 0;
+    padding-right: 0;
+  }
+
   .public-layout {
     .header {
       .nav-button {
diff --git a/app/models/account.rb b/app/models/account.rb
index e1593fe81..52ce9a676 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -133,7 +133,7 @@ class Account < ApplicationRecord
 
   delegate :chosen_languages, to: :user, prefix: false, allow_nil: true
 
-  update_index('accounts#account', :self) if Chewy.enabled?
+  update_index('accounts#account', :self)
 
   def local?
     domain.nil?
diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb
index 6d1097cec..c84e4217c 100644
--- a/app/models/account_stat.rb
+++ b/app/models/account_stat.rb
@@ -11,19 +11,36 @@
 #  created_at      :datetime         not null
 #  updated_at      :datetime         not null
 #  last_status_at  :datetime
+#  lock_version    :integer          default(0), not null
 #
 
 class AccountStat < ApplicationRecord
   belongs_to :account, inverse_of: :account_stat
 
-  update_index('accounts#account', :account) if Chewy.enabled?
+  update_index('accounts#account', :account)
 
   def increment_count!(key)
     update(attributes_for_increment(key))
+  rescue ActiveRecord::StaleObjectError
+    begin
+      reload_with_id
+    rescue ActiveRecord::RecordNotFound
+      # Nothing to do
+    else
+      retry
+    end
   end
 
   def decrement_count!(key)
     update(key => [public_send(key) - 1, 0].max)
+  rescue ActiveRecord::StaleObjectError
+    begin
+      reload_with_id
+    rescue ActiveRecord::RecordNotFound
+      # Nothing to do
+    else
+      retry
+    end
   end
 
   private
@@ -33,4 +50,9 @@ class AccountStat < ApplicationRecord
     attrs[:last_status_at] = Time.now.utc if key == :statuses_count
     attrs
   end
+
+  def reload_with_id
+    self.id = find_by!(account: account).id if new_record?
+    reload
+  end
 end
diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index c1b873da6..5d7d3a096 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -5,6 +5,12 @@ class ApplicationRecord < ActiveRecord::Base
 
   include Remotable
 
+  class << self
+    def update_index(_type_name, *_args, &_block)
+      super if Chewy.enabled?
+    end
+  end
+
   def boolean_with_default(key, default_value)
     value = attributes[key]
 
diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb
index 246c2c27c..3bbc6453c 100644
--- a/app/models/concerns/attachmentable.rb
+++ b/app/models/concerns/attachmentable.rb
@@ -6,6 +6,7 @@ module Attachmentable
   extend ActiveSupport::Concern
 
   MAX_MATRIX_LIMIT = 16_777_216 # 4096x4096px or approx. 16MB
+  GIF_MATRIX_LIMIT = 921_600    # 1280x720px
 
   included do
     before_post_process :set_file_extensions
@@ -42,8 +43,9 @@ module Attachmentable
       next if attachment.blank? || !/image.*/.match?(attachment.content_type) || attachment.queued_for_write[:original].blank?
 
       width, height = FastImage.size(attachment.queued_for_write[:original].path)
+      matrix_limit  = attachment.content_type == 'image/gif' ? GIF_MATRIX_LIMIT : MAX_MATRIX_LIMIT
 
-      raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported, must be below #{MAX_MATRIX_LIMIT} sqpx" if width.present? && height.present? && (width * height >= MAX_MATRIX_LIMIT)
+      raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height > matrix_limit)
     end
   end
 
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index 17f8c9fa6..bf0ec4449 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -13,7 +13,7 @@
 class Favourite < ApplicationRecord
   include Paginable
 
-  update_index('statuses#status', :status) if Chewy.enabled?
+  update_index('statuses#status', :status)
 
   belongs_to :account, inverse_of: :favourites
   belongs_to :status,  inverse_of: :favourites
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index cbe23810b..4f06a40cf 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -65,6 +65,17 @@ class MediaAttachment < ApplicationRecord
       file_geometry_parser: FastGeometryParser,
       blurhash: BLURHASH_OPTIONS,
     },
+
+    original: {
+      keep_same_format: true,
+      convert_options: {
+        output: {
+          'map_metadata' => '-1',
+          'c:v' => 'copy',
+          'c:a' => 'copy',
+        },
+      },
+    },
   }.freeze
 
   AUDIO_STYLES = {
@@ -86,14 +97,15 @@ class MediaAttachment < ApplicationRecord
       output: {
         'loglevel' => 'fatal',
         'movflags' => 'faststart',
-        'pix_fmt'  => 'yuv420p',
-        'vf'       => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'',
-        'vsync'    => 'cfr',
-        'c:v'      => 'h264',
-        'b:v'      => '500K',
-        'maxrate'  => '1300K',
-        'bufsize'  => '1300K',
-        'crf'      => 18,
+        'pix_fmt' => 'yuv420p',
+        'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'',
+        'vsync' => 'cfr',
+        'c:v' => 'h264',
+        'maxrate' => '1300K',
+        'bufsize' => '1300K',
+        'frames:v' => 60 * 60 * 3,
+        'crf' => 18,
+        'map_metadata' => '-1',
       },
     },
   }.freeze
@@ -103,7 +115,7 @@ class MediaAttachment < ApplicationRecord
     original: VIDEO_FORMAT,
   }.freeze
 
-  IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 8.megabytes).to_i
+  IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 10.megabytes).to_i
   VIDEO_LIMIT = (ENV['MAX_VIDEO_SIZE'] || 40.megabytes).to_i
 
   belongs_to :account,          inverse_of: :media_attachments, optional: true
@@ -244,7 +256,9 @@ class MediaAttachment < ApplicationRecord
 
   def set_meta
     meta = populate_meta
+
     return if meta == {}
+
     file.instance_write :meta, meta
   end
 
@@ -287,6 +301,7 @@ class MediaAttachment < ApplicationRecord
 
   def reset_parent_cache
     return if status_id.nil?
+
     Rails.cache.delete("statuses/#{status_id}")
   end
 end
diff --git a/app/models/status.rb b/app/models/status.rb
index 202434db3..7ac0fb5bd 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -42,7 +42,7 @@ class Status < ApplicationRecord
   # will be based on current time instead of `created_at`
   attr_accessor :override_timestamps
 
-  update_index('statuses#status', :proper) if Chewy.enabled?
+  update_index('statuses#status', :proper)
 
   enum visibility: [:public, :unlisted, :private, :direct, :limited], _suffix: :visibility
 
@@ -136,12 +136,14 @@ class Status < ApplicationRecord
   REAL_TIME_WINDOW = 6.hours
 
   def searchable_by(preloaded = nil)
-    ids = [account_id]
+    ids = []
+
+    ids << account_id if local?
 
     if preloaded.nil?
-      ids += mentions.pluck(:account_id)
-      ids += favourites.pluck(:account_id)
-      ids += reblogs.pluck(:account_id)
+      ids += mentions.where(account: Account.local).pluck(:account_id)
+      ids += favourites.where(account: Account.local).pluck(:account_id)
+      ids += reblogs.where(account: Account.local).pluck(:account_id)
     else
       ids += preloaded.mentions[id] || []
       ids += preloaded.favourites[id] || []
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 9aca3983f..82786daa8 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -49,7 +49,7 @@ class Tag < ApplicationRecord
 
   after_save :save_account_tag_stat
 
-  update_index('tags#tag', :self) if Chewy.enabled?
+  update_index('tags#tag', :self)
 
   def account_tag_stat
     super || build_account_tag_stat
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index 2b3849bd9..ee559037f 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -21,7 +21,7 @@ class InstancePresenter
   end
 
   def active_user_count(weeks = 4)
-    Rails.cache.fetch('active_user_count') { Redis.current.pfcount(*(0...weeks).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) }
+    Rails.cache.fetch("active_user_count/#{weeks}") { Redis.current.pfcount(*(0...weeks).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) }
   end
 
   def status_count
diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb
index 1a7d7a911..7ff8aabec 100644
--- a/app/serializers/nodeinfo/serializer.rb
+++ b/app/serializers/nodeinfo/serializer.rb
@@ -3,7 +3,7 @@
 class NodeInfo::Serializer < ActiveModel::Serializer
   include RoutingHelper
 
-  attributes :version, :software, :protocols, :usage
+  attributes :version, :software, :protocols, :usage, :open_registrations
 
   def version
     '2.0'
@@ -33,6 +33,10 @@ class NodeInfo::Serializer < ActiveModel::Serializer
     }
   end
 
+  def open_registrations
+    Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode
+  end
+
   private
 
   def instance_presenter
diff --git a/app/services/app_sign_up_service.rb b/app/services/app_sign_up_service.rb
index 6dee9cd81..c9739c77d 100644
--- a/app/services/app_sign_up_service.rb
+++ b/app/services/app_sign_up_service.rb
@@ -4,9 +4,10 @@ class AppSignUpService < BaseService
   def call(app, params)
     return unless allowed_registrations?
 
-    user_params    = params.slice(:email, :password, :agreement, :locale)
-    account_params = params.slice(:username)
-    user           = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params))
+    user_params           = params.slice(:email, :password, :agreement, :locale)
+    account_params        = params.slice(:username)
+    invite_request_params = { text: params[:reason] }
+    user                  = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params))
 
     Doorkeeper::AccessToken.create!(application: app,
                                     resource_owner_id: user.id,
diff --git a/app/services/bootstrap_timeline_service.rb b/app/services/bootstrap_timeline_service.rb
index db2c83e5d..c489601c1 100644
--- a/app/services/bootstrap_timeline_service.rb
+++ b/app/services/bootstrap_timeline_service.rb
@@ -17,7 +17,11 @@ class BootstrapTimelineService < BaseService
 
   def autofollow_bootstrap_timeline_accounts!
     bootstrap_timeline_accounts.each do |target_account|
-      FollowService.new.call(@source_account, target_account)
+      begin
+        FollowService.new.call(@source_account, target_account)
+      rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
+        nil
+      end
     end
   end
 
@@ -40,7 +44,9 @@ class BootstrapTimelineService < BaseService
 
   def local_unlocked_accounts(usernames)
     Account.local
+           .without_suspended
            .where(username: usernames)
            .where(locked: false)
+           .where(moved_to_account_id: nil)
   end
 end
diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb
index ac5503d46..f0b1169db 100644
--- a/app/services/fetch_link_card_service.rb
+++ b/app/services/fetch_link_card_service.rb
@@ -39,12 +39,6 @@ class FetchLinkCardService < BaseService
   def process_url
     @card ||= PreviewCard.new(url: @url)
 
-    failed = Request.new(:head, @url).perform do |res|
-      res.code != 405 && res.code != 501 && (res.code != 200 || res.mime_type != 'text/html')
-    end
-
-    return if failed
-
     Request.new(:get, @url).perform do |res|
       if res.code == 200 && res.mime_type == 'text/html'
         @html = res.body_with_limit
diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb
index ebf24be37..4172d5774 100644
--- a/app/services/update_account_service.rb
+++ b/app/services/update_account_service.rb
@@ -21,7 +21,7 @@ class UpdateAccountService < BaseService
 
   def authorize_all_follow_requests(account)
     follow_requests = FollowRequest.where(target_account: account)
-    follow_requests = follow_requests.select { |req| !req.account.silenced? }
+    follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? }
     AuthorizeFollowWorker.push_bulk(follow_requests) do |req|
       [req.account_id, req.target_account_id]
     end
diff --git a/app/views/about/_domain_blocks.html.haml b/app/views/about/_domain_blocks.html.haml
index 940bcb934..e0c5df41d 100644
--- a/app/views/about/_domain_blocks.html.haml
+++ b/app/views/about/_domain_blocks.html.haml
@@ -6,5 +6,7 @@
   %tbody
     - domain_blocks.each do |domain_block|
       %tr
-        %td.nowrap= domain_block.domain
-        %td= domain_block.public_comment if display_blocks_rationale?
+        %td.nowrap
+          %span{ title: domain_block.domain }= domain_block.domain
+        %td
+          = domain_block.public_comment if display_blocks_rationale?
diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml
index 1d970d637..5799e5973 100644
--- a/app/views/admin/tags/show.html.haml
+++ b/app/views/admin/tags/show.html.haml
@@ -11,9 +11,14 @@
       .dashboard__counters__num= number_with_delimiter @accounts_week
       .dashboard__counters__label= t 'admin.tags.accounts_week'
   %div
-    = link_to explore_hashtag_path(@tag) do
-      .dashboard__counters__num= number_with_delimiter @tag.accounts_count
-      .dashboard__counters__label= t 'admin.tags.directory'
+    - if @tag.accounts_count > 0
+      = link_to explore_hashtag_path(@tag) do
+        .dashboard__counters__num= number_with_delimiter @tag.accounts_count
+        .dashboard__counters__label= t 'admin.tags.directory'
+    - else
+      %div
+        .dashboard__counters__num= number_with_delimiter @tag.accounts_count
+        .dashboard__counters__label= t 'admin.tags.directory'
 
 %hr.spacer/
 
diff --git a/app/views/invites/_form.html.haml b/app/views/invites/_form.html.haml
index b19f70539..3a2a5ef0e 100644
--- a/app/views/invites/_form.html.haml
+++ b/app/views/invites/_form.html.haml
@@ -10,8 +10,5 @@
   .fields-group
     = f.input :autofollow, wrapper: :with_label
 
-  .fields-group
-    = f.input :comment, wrapper: :with_label, input_html: { maxlength: 420 }
-
   .actions
     = f.button :button, t('invites.generate'), type: :submit
diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml
index 03050c868..62799ca5b 100644
--- a/app/views/invites/_invite.html.haml
+++ b/app/views/invites/_invite.html.haml
@@ -21,8 +21,5 @@
       = t('invites.expired')
 
   %td
-    = invite.comment
-
-  %td
     - if invite.valid_for_use? && policy(invite).destroy?
       = table_link_to 'times', t('invites.delete'), invite_path(invite), method: :delete
diff --git a/app/views/invites/index.html.haml b/app/views/invites/index.html.haml
index 62065d6ae..61420ab1e 100644
--- a/app/views/invites/index.html.haml
+++ b/app/views/invites/index.html.haml
@@ -15,7 +15,6 @@
         %th
         %th= t('invites.table.uses')
         %th= t('invites.table.expires_at')
-        %th= t('invites.table.comment')
         %th
     %tbody
       = render @invites
diff --git a/app/workers/move_worker.rb b/app/workers/move_worker.rb
index 22788716f..83f7090ee 100644
--- a/app/workers/move_worker.rb
+++ b/app/workers/move_worker.rb
@@ -22,7 +22,7 @@ class MoveWorker
     @source_account.passive_relationships
                    .where(account: Account.local)
                    .in_batches
-                   .update_all(target_account: @target_account)
+                   .update_all(target_account_id: @target_account.id)
   end
 
   def queue_follow_unfollows!