about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/api/v1/trends_controller.rb17
-rw-r--r--app/javascript/flavours/glitch/components/status.js5
-rw-r--r--app/javascript/flavours/glitch/components/status_action_bar.js2
-rw-r--r--app/javascript/flavours/glitch/components/status_icons.js8
-rw-r--r--app/javascript/flavours/glitch/features/status/components/action_bar.js2
-rw-r--r--app/javascript/flavours/glitch/styles/components/index.scss4
-rw-r--r--app/javascript/flavours/glitch/styles/components/status.scss7
-rw-r--r--app/javascript/flavours/glitch/styles/variables.scss2
-rw-r--r--app/javascript/mastodon/actions/trends.js32
-rw-r--r--app/javascript/mastodon/components/collapsable.js22
-rw-r--r--app/javascript/mastodon/components/hashtag.js41
-rw-r--r--app/javascript/mastodon/features/account/components/action_bar.js28
-rw-r--r--app/javascript/mastodon/features/account/components/header.js11
-rw-r--r--app/javascript/mastodon/features/compose/components/compose_form.js17
-rw-r--r--app/javascript/mastodon/features/compose/components/search_results.js62
-rw-r--r--app/javascript/mastodon/features/compose/containers/search_results_container.js8
-rw-r--r--app/javascript/mastodon/features/compose/index.js2
-rw-r--r--app/javascript/mastodon/features/domain_blocks/index.js2
-rw-r--r--app/javascript/mastodon/features/getting_started/index.js102
-rw-r--r--app/javascript/mastodon/features/trends/index.js66
-rw-r--r--app/javascript/mastodon/features/ui/index.js3
-rw-r--r--app/javascript/mastodon/locales/ar.json12
-rw-r--r--app/javascript/mastodon/locales/bg.json12
-rw-r--r--app/javascript/mastodon/locales/ca.json12
-rw-r--r--app/javascript/mastodon/locales/co.json16
-rw-r--r--app/javascript/mastodon/locales/de.json12
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json125
-rw-r--r--app/javascript/mastodon/locales/el.json12
-rw-r--r--app/javascript/mastodon/locales/en.json13
-rw-r--r--app/javascript/mastodon/locales/eo.json14
-rw-r--r--app/javascript/mastodon/locales/es.json12
-rw-r--r--app/javascript/mastodon/locales/eu.json116
-rw-r--r--app/javascript/mastodon/locales/fa.json12
-rw-r--r--app/javascript/mastodon/locales/fi.json24
-rw-r--r--app/javascript/mastodon/locales/fr.json12
-rw-r--r--app/javascript/mastodon/locales/gl.json14
-rw-r--r--app/javascript/mastodon/locales/he.json12
-rw-r--r--app/javascript/mastodon/locales/hr.json12
-rw-r--r--app/javascript/mastodon/locales/hu.json12
-rw-r--r--app/javascript/mastodon/locales/hy.json12
-rw-r--r--app/javascript/mastodon/locales/id.json12
-rw-r--r--app/javascript/mastodon/locales/io.json12
-rw-r--r--app/javascript/mastodon/locales/it.json26
-rw-r--r--app/javascript/mastodon/locales/ja.json15
-rw-r--r--app/javascript/mastodon/locales/ko.json14
-rw-r--r--app/javascript/mastodon/locales/nl.json12
-rw-r--r--app/javascript/mastodon/locales/no.json12
-rw-r--r--app/javascript/mastodon/locales/oc.json12
-rw-r--r--app/javascript/mastodon/locales/pl.json11
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json12
-rw-r--r--app/javascript/mastodon/locales/pt.json12
-rw-r--r--app/javascript/mastodon/locales/ru.json12
-rw-r--r--app/javascript/mastodon/locales/sk.json18
-rw-r--r--app/javascript/mastodon/locales/sl.json12
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json12
-rw-r--r--app/javascript/mastodon/locales/sr.json12
-rw-r--r--app/javascript/mastodon/locales/sv.json12
-rw-r--r--app/javascript/mastodon/locales/te.json12
-rw-r--r--app/javascript/mastodon/locales/th.json12
-rw-r--r--app/javascript/mastodon/locales/tr.json12
-rw-r--r--app/javascript/mastodon/locales/uk.json12
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json12
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json34
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json12
-rw-r--r--app/javascript/mastodon/reducers/contexts.js27
-rw-r--r--app/javascript/mastodon/reducers/domain_lists.js4
-rw-r--r--app/javascript/mastodon/reducers/index.js2
-rw-r--r--app/javascript/mastodon/reducers/settings.js4
-rw-r--r--app/javascript/mastodon/reducers/trends.js13
-rw-r--r--app/javascript/mastodon/service_worker/entry.js2
-rw-r--r--app/javascript/styles/mastodon/components.scss113
-rw-r--r--app/lib/activitypub/activity/create.rb2
-rw-r--r--app/models/concerns/account_interactions.rb11
-rw-r--r--app/models/favourite.rb25
-rw-r--r--app/models/glitch/keyword_mute.rb72
-rw-r--r--app/models/status.rb51
-rw-r--r--app/models/trending_tags.rb23
-rw-r--r--app/services/batched_remove_status_service.rb9
-rw-r--r--app/services/fan_out_on_write_service.rb4
-rw-r--r--app/services/process_hashtags_service.rb2
-rw-r--r--app/services/remove_status_service.rb4
-rw-r--r--app/services/suspend_account_service.rb7
-rw-r--r--app/workers/maintenance/destroy_media_worker.rb14
-rw-r--r--app/workers/maintenance/redownload_account_media_worker.rb16
-rw-r--r--app/workers/maintenance/uncache_media_worker.rb18
85 files changed, 1059 insertions, 607 deletions
diff --git a/app/controllers/api/v1/trends_controller.rb b/app/controllers/api/v1/trends_controller.rb
deleted file mode 100644
index bcea9857e..000000000
--- a/app/controllers/api/v1/trends_controller.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-class Api::V1::TrendsController < Api::BaseController
-  before_action :set_tags
-
-  respond_to :json
-
-  def index
-    render json: @tags, each_serializer: REST::TagSerializer
-  end
-
-  private
-
-  def set_tags
-    @tags = TrendingTags.get(limit_param(10))
-  end
-end
diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js
index c93705266..a90ff491e 100644
--- a/app/javascript/flavours/glitch/components/status.js
+++ b/app/javascript/flavours/glitch/components/status.js
@@ -153,6 +153,11 @@ export default class Status extends ImmutablePureComponent {
       muted,
       prepend,
     } = this.props;
+
+    // Prevent a crash when node is undefined. Not completely sure why this
+    // happens, might be because status === null.
+    if (node === undefined) return;
+
     const autoCollapseSettings = settings.getIn(['collapsed', 'auto']);
 
     if (function () {
diff --git a/app/javascript/flavours/glitch/components/status_action_bar.js b/app/javascript/flavours/glitch/components/status_action_bar.js
index 6ae4bc08d..5bc5d8406 100644
--- a/app/javascript/flavours/glitch/components/status_action_bar.js
+++ b/app/javascript/flavours/glitch/components/status_action_bar.js
@@ -188,7 +188,7 @@ export default class StatusActionBar extends ImmutablePureComponent {
         <IconButton className='status__action-bar-button' disabled={reblogDisabled} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogDisabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblogMessage)} icon={reblogIcon} onClick={this.handleReblogClick} />
         <IconButton className='status__action-bar-button star-icon' disabled={anonymousAccess} animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />
         {shareButton}
-        <IconButton className='status__action-bar-button' disabled={anonymousAccess} active={status.get('bookmarked')} pressed={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} />
+        <IconButton className='status__action-bar-button bookmark-icon' disabled={anonymousAccess} active={status.get('bookmarked')} pressed={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} />
 
         <div className='status__action-bar-dropdown'>
           <DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel={intl.formatMessage(messages.more)} />
diff --git a/app/javascript/flavours/glitch/components/status_icons.js b/app/javascript/flavours/glitch/components/status_icons.js
index e354c45e4..c9747650f 100644
--- a/app/javascript/flavours/glitch/components/status_icons.js
+++ b/app/javascript/flavours/glitch/components/status_icons.js
@@ -47,9 +47,15 @@ export default class StatusIcons extends React.PureComponent {
 
     return (
       <div className='status__info__icons'>
+        {status.get('in_reply_to_id', null) !== null ? (
+          <i
+            className={`fa fa-fw fa-comment status__reply-icon`}
+            aria-hidden='true'
+          />
+        ) : null}
         {mediaIcon ? (
           <i
-            className={`fa fa-fw fa-${mediaIcon}`}
+            className={`fa fa-fw fa-${mediaIcon} status__media-icon`}
             aria-hidden='true'
           />
         ) : null}
diff --git a/app/javascript/flavours/glitch/features/status/components/action_bar.js b/app/javascript/flavours/glitch/features/status/components/action_bar.js
index ef8805377..976d7ba76 100644
--- a/app/javascript/flavours/glitch/features/status/components/action_bar.js
+++ b/app/javascript/flavours/glitch/features/status/components/action_bar.js
@@ -159,7 +159,7 @@ export default class ActionBar extends React.PureComponent {
         <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblog_message)} icon={reblogIcon} onClick={this.handleReblogClick} /></div>
         <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>
         {shareButton}
-        <div className='detailed-status__button'><IconButton active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>
+        <div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>
 
         <div className='detailed-status__action-bar-dropdown'>
           <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' ariaLabel='More' />
diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss
index 0fa940766..487bb7ffb 100644
--- a/app/javascript/flavours/glitch/styles/components/index.scss
+++ b/app/javascript/flavours/glitch/styles/components/index.scss
@@ -248,6 +248,10 @@
   color: $gold-star;
 }
 
+.bookmark-icon.active {
+  color: $red-bookmark;
+}
+
 .notification__display-name {
   color: inherit;
   font-weight: 500;
diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss
index 733845c5f..2b31e2dcb 100644
--- a/app/javascript/flavours/glitch/styles/components/status.scss
+++ b/app/javascript/flavours/glitch/styles/components/status.scss
@@ -331,8 +331,13 @@
   height: 1em;
   color: $action-button-color;
 
-  .status__visibility-icon {
+  .status__media-icon {
     padding-left: 6px;
+    padding-right: 1px;
+  }
+
+  .status__visibility-icon {
+    padding-left: 4px;
   }
 }
 
diff --git a/app/javascript/flavours/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss
index cc08fd06f..bde808fe2 100644
--- a/app/javascript/flavours/glitch/styles/variables.scss
+++ b/app/javascript/flavours/glitch/styles/variables.scss
@@ -6,6 +6,8 @@ $error-red: #df405a;        // Cerise
 $warning-red: #ff5050;      // Sunset Orange
 $gold-star: #ca8f04;        // Dark Goldenrod
 
+$red-bookmark: $warning-red;
+
 // Values from the classic Mastodon UI
 $classic-base-color: #282c37;         // Midnight Express
 $classic-primary-color: #9baec8;      // Echo Blue
diff --git a/app/javascript/mastodon/actions/trends.js b/app/javascript/mastodon/actions/trends.js
deleted file mode 100644
index 853e4f60a..000000000
--- a/app/javascript/mastodon/actions/trends.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import api from '../api';
-
-export const TRENDS_FETCH_REQUEST = 'TRENDS_FETCH_REQUEST';
-export const TRENDS_FETCH_SUCCESS = 'TRENDS_FETCH_SUCCESS';
-export const TRENDS_FETCH_FAIL    = 'TRENDS_FETCH_FAIL';
-
-export const fetchTrends = () => (dispatch, getState) => {
-  dispatch(fetchTrendsRequest());
-
-  api(getState)
-    .get('/api/v1/trends')
-    .then(({ data }) => dispatch(fetchTrendsSuccess(data)))
-    .catch(err => dispatch(fetchTrendsFail(err)));
-};
-
-export const fetchTrendsRequest = () => ({
-  type: TRENDS_FETCH_REQUEST,
-  skipLoading: true,
-});
-
-export const fetchTrendsSuccess = trends => ({
-  type: TRENDS_FETCH_SUCCESS,
-  trends,
-  skipLoading: true,
-});
-
-export const fetchTrendsFail = error => ({
-  type: TRENDS_FETCH_FAIL,
-  error,
-  skipLoading: true,
-  skipAlert: true,
-});
diff --git a/app/javascript/mastodon/components/collapsable.js b/app/javascript/mastodon/components/collapsable.js
deleted file mode 100644
index d5d431186..000000000
--- a/app/javascript/mastodon/components/collapsable.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import Motion from '../features/ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
-import PropTypes from 'prop-types';
-
-const Collapsable = ({ fullHeight, isVisible, children }) => (
-  <Motion defaultStyle={{ opacity: !isVisible ? 0 : 100, height: isVisible ? fullHeight : 0 }} style={{ opacity: spring(!isVisible ? 0 : 100), height: spring(!isVisible ? 0 : fullHeight) }}>
-    {({ opacity, height }) => (
-      <div style={{ height: `${height}px`, overflow: 'hidden', opacity: opacity / 100, display: Math.floor(opacity) === 0 ? 'none' : 'block' }}>
-        {children}
-      </div>
-    )}
-  </Motion>
-);
-
-Collapsable.propTypes = {
-  fullHeight: PropTypes.number.isRequired,
-  isVisible: PropTypes.bool.isRequired,
-  children: PropTypes.node.isRequired,
-};
-
-export default Collapsable;
diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js
new file mode 100644
index 000000000..cc37a91e2
--- /dev/null
+++ b/app/javascript/mastodon/components/hashtag.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import { Sparklines, SparklinesCurve } from 'react-sparklines';
+import { Link } from 'react-router-dom';
+import { FormattedMessage, FormattedNumber } from 'react-intl';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+
+const shortNumberFormat = number => {
+  if (number < 1000) {
+    return <FormattedNumber value={number} />;
+  } else {
+    return <React.Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</React.Fragment>;
+  }
+};
+
+const Hashtag = ({ hashtag }) => (
+  <div className='trends__item'>
+    <div className='trends__item__name'>
+      <Link to={`/timelines/tag/${hashtag.get('name')}`}>
+        #<span>{hashtag.get('name')}</span>
+      </Link>
+
+      <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} />
+    </div>
+
+    <div className='trends__item__current'>
+      {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']))}
+    </div>
+
+    <div className='trends__item__sparkline'>
+      <Sparklines width={50} height={28} data={hashtag.get('history').reverse().map(day => day.get('uses')).toArray()}>
+        <SparklinesCurve style={{ fill: 'none' }} />
+      </Sparklines>
+    </div>
+  </div>
+);
+
+Hashtag.propTypes = {
+  hashtag: ImmutablePropTypes.map.isRequired,
+};
+
+export default Hashtag;
diff --git a/app/javascript/mastodon/features/account/components/action_bar.js b/app/javascript/mastodon/features/account/components/action_bar.js
index 23dbf32bc..3a1f92811 100644
--- a/app/javascript/mastodon/features/account/components/action_bar.js
+++ b/app/javascript/mastodon/features/account/components/action_bar.js
@@ -23,6 +23,14 @@ const messages = defineMessages({
   unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
   hideReblogs: { id: 'account.hide_reblogs', defaultMessage: 'Hide boosts from @{name}' },
   showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show boosts from @{name}' },
+  pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },
+  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
+  follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
+  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
+  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
+  blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
+  domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
+  mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
 });
 
 @injectIntl
@@ -54,17 +62,29 @@ export default class ActionBar extends React.PureComponent {
     let menu = [];
     let extraInfo = '';
 
-    menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.props.onMention });
-    menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.props.onDirect });
+    if (account.get('id') !== me) {
+      menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.props.onMention });
+      menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.props.onDirect });
+      menu.push(null);
+    }
 
     if ('share' in navigator) {
       menu.push({ text: intl.formatMessage(messages.share, { name: account.get('username') }), action: this.handleShare });
+      menu.push(null);
     }
 
-    menu.push(null);
-
     if (account.get('id') === me) {
       menu.push({ text: intl.formatMessage(messages.edit_profile), href: '/settings/profile' });
+      menu.push({ text: intl.formatMessage(messages.preferences), href: '/settings/preferences' });
+      menu.push({ text: intl.formatMessage(messages.pins), to: '/pinned' });
+      menu.push(null);
+      menu.push({ text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' });
+      menu.push({ text: intl.formatMessage(messages.favourites), to: '/favourites' });
+      menu.push({ text: intl.formatMessage(messages.lists), to: '/lists' });
+      menu.push(null);
+      menu.push({ text: intl.formatMessage(messages.mutes), to: '/mutes' });
+      menu.push({ text: intl.formatMessage(messages.blocks), to: '/blocks' });
+      menu.push({ text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' });
     } else {
       if (account.getIn(['relationship', 'following'])) {
         if (account.getIn(['relationship', 'showing_reblogs'])) {
diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js
index 7358053da..dd2cd406b 100644
--- a/app/javascript/mastodon/features/account/components/header.js
+++ b/app/javascript/mastodon/features/account/components/header.js
@@ -14,6 +14,7 @@ const messages = defineMessages({
   follow: { id: 'account.follow', defaultMessage: 'Follow' },
   requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' },
   unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
+  edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
 });
 
 class Avatar extends ImmutablePureComponent {
@@ -74,6 +75,10 @@ export default class Header extends ImmutablePureComponent {
     intl: PropTypes.object.isRequired,
   };
 
+  openEditProfile = () => {
+    window.open('/settings/profile', '_blank');
+  }
+
   render () {
     const { account, intl } = this.props;
 
@@ -118,6 +123,12 @@ export default class Header extends ImmutablePureComponent {
           </div>
         );
       }
+    } else {
+      actionBtn = (
+        <div className='account--action-button'>
+          <IconButton size={26} icon='pencil' title={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />
+        </div>
+      );
     }
 
     if (account.get('moved') && !account.getIn(['relationship', 'following'])) {
diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js
index 6cc594c88..60485e3c6 100644
--- a/app/javascript/mastodon/features/compose/components/compose_form.js
+++ b/app/javascript/mastodon/features/compose/components/compose_form.js
@@ -7,7 +7,6 @@ import ReplyIndicatorContainer from '../containers/reply_indicator_container';
 import AutosuggestTextarea from '../../../components/autosuggest_textarea';
 import UploadButtonContainer from '../containers/upload_button_container';
 import { defineMessages, injectIntl } from 'react-intl';
-import Collapsable from '../../../components/collapsable';
 import SpoilerButtonContainer from '../containers/spoiler_button_container';
 import PrivacyDropdownContainer from '../containers/privacy_dropdown_container';
 import SensitiveButtonContainer from '../containers/sensitive_button_container';
@@ -160,17 +159,15 @@ export default class ComposeForm extends ImmutablePureComponent {
       <div className='compose-form'>
         <WarningContainer />
 
-        <Collapsable isVisible={this.props.spoiler} fullHeight={50}>
-          <div className='spoiler-input'>
-            <label>
-              <span style={{ display: 'none' }}>{intl.formatMessage(messages.spoiler_placeholder)}</span>
-              <input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type='text' className='spoiler-input__input'  id='cw-spoiler-input' />
-            </label>
-          </div>
-        </Collapsable>
-
         <ReplyIndicatorContainer />
 
+        <div className={`spoiler-input ${this.props.spoiler ? 'spoiler-input--visible' : ''}`}>
+          <label>
+            <span style={{ display: 'none' }}>{intl.formatMessage(messages.spoiler_placeholder)}</span>
+            <input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type='text' className='spoiler-input__input'  id='cw-spoiler-input' />
+          </label>
+        </div>
+
         <div className='compose-form__autosuggest-wrapper'>
           <AutosuggestTextarea
             ref={this.setAutosuggestTextarea}
diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js
index 445bf27bb..c351b84bb 100644
--- a/app/javascript/mastodon/features/compose/components/search_results.js
+++ b/app/javascript/mastodon/features/compose/components/search_results.js
@@ -1,77 +1,23 @@
 import React from 'react';
-import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, FormattedNumber } from 'react-intl';
+import { FormattedMessage } from 'react-intl';
 import AccountContainer from '../../../containers/account_container';
 import StatusContainer from '../../../containers/status_container';
-import { Link } from 'react-router-dom';
 import ImmutablePureComponent from 'react-immutable-pure-component';
-import { Sparklines, SparklinesCurve } from 'react-sparklines';
-
-const shortNumberFormat = number => {
-  if (number < 1000) {
-    return <FormattedNumber value={number} />;
-  } else {
-    return <React.Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</React.Fragment>;
-  }
-};
-
-const renderHashtag = hashtag => (
-  <div className='trends__item' key={hashtag.get('name')}>
-    <div className='trends__item__name'>
-      <Link to={`/timelines/tag/${hashtag.get('name')}`}>
-        #<span>{hashtag.get('name')}</span>
-      </Link>
-
-      <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} />
-    </div>
-
-    <div className='trends__item__current'>
-      {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']))}
-    </div>
-
-    <div className='trends__item__sparkline'>
-      <Sparklines width={50} height={28} data={hashtag.get('history').reverse().map(day => day.get('uses')).toArray()}>
-        <SparklinesCurve style={{ fill: 'none' }} />
-      </Sparklines>
-    </div>
-  </div>
-);
+import Hashtag from '../../../components/hashtag';
 
 export default class SearchResults extends ImmutablePureComponent {
 
   static propTypes = {
     results: ImmutablePropTypes.map.isRequired,
-    trends: ImmutablePropTypes.list,
-    fetchTrends: PropTypes.func.isRequired,
   };
 
-  componentDidMount () {
-    const { fetchTrends } = this.props;
-    fetchTrends();
-  }
-
   render () {
-    const { results, trends } = this.props;
+    const { results } = this.props;
 
     let accounts, statuses, hashtags;
     let count = 0;
 
-    if (results.isEmpty()) {
-      return (
-        <div className='search-results'>
-          <div className='trends'>
-            <div className='trends__header'>
-              <i className='fa fa-fire fa-fw' />
-              <FormattedMessage id='trends.header' defaultMessage='Trending now' />
-            </div>
-
-            {trends && trends.map(hashtag => renderHashtag(hashtag))}
-          </div>
-        </div>
-      );
-    }
-
     if (results.get('accounts') && results.get('accounts').size > 0) {
       count   += results.get('accounts').size;
       accounts = (
@@ -100,7 +46,7 @@ export default class SearchResults extends ImmutablePureComponent {
         <div className='search-results__section'>
           <h5><i className='fa fa-fw fa-hashtag' /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5>
 
-          {results.get('hashtags').map(hashtag => renderHashtag(hashtag))}
+          {results.get('hashtags').map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
         </div>
       );
     }
diff --git a/app/javascript/mastodon/features/compose/containers/search_results_container.js b/app/javascript/mastodon/features/compose/containers/search_results_container.js
index 7273460e2..16d95d417 100644
--- a/app/javascript/mastodon/features/compose/containers/search_results_container.js
+++ b/app/javascript/mastodon/features/compose/containers/search_results_container.js
@@ -1,14 +1,8 @@
 import { connect } from 'react-redux';
 import SearchResults from '../components/search_results';
-import { fetchTrends } from '../../../actions/trends';
 
 const mapStateToProps = state => ({
   results: state.getIn(['search', 'results']),
-  trends: state.get('trends'),
 });
 
-const mapDispatchToProps = dispatch => ({
-  fetchTrends: () => dispatch(fetchTrends()),
-});
-
-export default connect(mapStateToProps, mapDispatchToProps)(SearchResults);
+export default connect(mapStateToProps)(SearchResults);
diff --git a/app/javascript/mastodon/features/compose/index.js b/app/javascript/mastodon/features/compose/index.js
index d8e9ad9ee..df1ec4915 100644
--- a/app/javascript/mastodon/features/compose/index.js
+++ b/app/javascript/mastodon/features/compose/index.js
@@ -75,7 +75,7 @@ export default class Compose extends React.PureComponent {
       const { columns } = this.props;
       header = (
         <nav className='drawer__header'>
-          <Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)} aria-label={intl.formatMessage(messages.start)}><i role='img' className='fa fa-fw fa-asterisk' /></Link>
+          <Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)} aria-label={intl.formatMessage(messages.start)}><i role='img' className='fa fa-fw fa-bars' /></Link>
           {!columns.some(column => column.get('id') === 'HOME') && (
             <Link to='/timelines/home' className='drawer__tab' title={intl.formatMessage(messages.home_timeline)} aria-label={intl.formatMessage(messages.home_timeline)}><i role='img' className='fa fa-fw fa-home' /></Link>
           )}
diff --git a/app/javascript/mastodon/features/domain_blocks/index.js b/app/javascript/mastodon/features/domain_blocks/index.js
index 3b29e2a26..b8a942d6c 100644
--- a/app/javascript/mastodon/features/domain_blocks/index.js
+++ b/app/javascript/mastodon/features/domain_blocks/index.js
@@ -28,7 +28,7 @@ export default class Blocks extends ImmutablePureComponent {
   static propTypes = {
     params: PropTypes.object.isRequired,
     dispatch: PropTypes.func.isRequired,
-    domains: ImmutablePropTypes.list,
+    domains: ImmutablePropTypes.orderedSet,
     intl: PropTypes.object.isRequired,
   };
 
diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js
index 4a249f301..115dfd2b9 100644
--- a/app/javascript/mastodon/features/getting_started/index.js
+++ b/app/javascript/mastodon/features/getting_started/index.js
@@ -10,34 +10,32 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
 import { me } from '../../initial_state';
 import { fetchFollowRequests } from '../../actions/accounts';
 import { List as ImmutableList } from 'immutable';
+import { Link } from 'react-router-dom';
+import NavigationBar from '../compose/components/navigation_bar';
 
 const messages = defineMessages({
-  heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' },
   home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },
   notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },
   public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },
-  navigation_subheading: { id: 'column_subheading.navigation', defaultMessage: 'Navigation' },
   settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },
   community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },
   direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },
   preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
   follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
-  sign_out: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },
   favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
   blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
   domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
   mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
-  info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' },
   pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },
   lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
-  keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' },
+  discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },
+  personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },
+  security: { id: 'navigation_bar.security', defaultMessage: 'Security' },
 });
 
 const mapStateToProps = state => ({
   myAccount: state.getIn(['accounts', me]),
-  columns: state.getIn(['settings', 'columns']),
   unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,
-  unreadNotifications: state.getIn(['notifications', 'unread']),
 });
 
 const mapDispatchToProps = dispatch => ({
@@ -77,65 +75,73 @@ export default class GettingStarted extends ImmutablePureComponent {
   }
 
   render () {
-    const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications } = this.props;
+    const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props;
 
     const navItems = [];
+    let i = 1;
+    let height = 0;
 
     if (multiColumn) {
-      if (!columns.find(item => item.get('id') === 'HOME')) {
-        navItems.push(<ColumnLink key='0' icon='home' text={intl.formatMessage(messages.home_timeline)} to='/timelines/home' />);
-      }
-
-      if (!columns.find(item => item.get('id') === 'NOTIFICATIONS')) {
-        navItems.push(<ColumnLink key='1' icon='bell' text={intl.formatMessage(messages.notifications)} badge={badgeDisplay(unreadNotifications)} to='/notifications' />);
-      }
-
-      if (!columns.find(item => item.get('id') === 'COMMUNITY')) {
-        navItems.push(<ColumnLink key='2' icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />);
-      }
-
-      if (!columns.find(item => item.get('id') === 'PUBLIC')) {
-        navItems.push(<ColumnLink key='3' icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />);
-      }
-    }
-
-    if (!multiColumn || !columns.find(item => item.get('id') === 'DIRECT')) {
-      navItems.push(<ColumnLink key='4' icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />);
+      navItems.push(
+        <ColumnSubheading key={i++} text={intl.formatMessage(messages.discover)} />,
+        <ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />,
+        <ColumnLink key={i++} icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />,
+        <ColumnSubheading key={i++} text={intl.formatMessage(messages.personal)} />
+      );
+
+      height += 34*2 + 48*2;
     }
 
     navItems.push(
-      <ColumnLink key='5' icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />,
-      <ColumnLink key='6' icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' />
+      <ColumnLink key={i++} icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />,
+      <ColumnLink key={i++} icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />,
+      <ColumnLink key={i++} icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' />
     );
 
+    height += 48*3;
+
     if (myAccount.get('locked')) {
-      navItems.push(<ColumnLink key='7' icon='users' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);
+      navItems.push(<ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);
+      height += 48;
     }
 
-    if (multiColumn) {
-      navItems.push(<ColumnLink key='8' icon='question' text={intl.formatMessage(messages.keyboard_shortcuts)} to='/keyboard-shortcuts' />);
-    }
+    if (!multiColumn) {
+      navItems.push(
+        <ColumnSubheading key={i++} text={intl.formatMessage(messages.settings_subheading)} />,
+        <ColumnLink key={i++} icon='gears' text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />,
+        <ColumnLink key={i++} icon='lock' text={intl.formatMessage(messages.security)} href='/auth/edit' />
+      );
 
-    navItems.push(<ColumnLink key='9' icon='book' text={intl.formatMessage(messages.info)} href='/about/more' />);
+      height += 34 + 48*2;
+    }
 
     return (
-      <Column icon='asterisk' heading={intl.formatMessage(messages.heading)} hideHeadingOnMobile>
-        <div className='getting-started__wrapper'>
-          <ColumnSubheading text={intl.formatMessage(messages.navigation_subheading)} />
+      <Column>
+        {multiColumn && <div className='column-header__wrapper'>
+          <h1 className='column-header'>
+            <button>
+              <i className='fa fa-bars fa-fw column-header__icon' />
+              <FormattedMessage id='getting_started.heading' defaultMessage='Getting started' />
+            </button>
+          </h1>
+        </div>}
+
+        <div className='getting-started__wrapper' style={{ height }}>
+          {!multiColumn && <NavigationBar account={myAccount} />}
           {navItems}
-          <ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} />
-          <ColumnLink icon='thumb-tack' text={intl.formatMessage(messages.pins)} to='/pinned' />
-          <ColumnLink icon='volume-off' text={intl.formatMessage(messages.mutes)} to='/mutes' />
-          <ColumnLink icon='ban' text={intl.formatMessage(messages.blocks)} to='/blocks' />
-          <ColumnLink icon='minus-circle' text={intl.formatMessage(messages.domain_blocks)} to='/domain_blocks' />
-          <ColumnLink icon='cog' text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />
-          <ColumnLink icon='sign-out' text={intl.formatMessage(messages.sign_out)} href='/auth/sign_out' method='delete' />
         </div>
 
-        <div className='static-content getting-started'>
-          <p>
-            <a href='https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/FAQ.md' rel='noopener' target='_blank'><FormattedMessage id='getting_started.faq' defaultMessage='FAQ' /></a> • <a href='https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/User-guide.md' rel='noopener' target='_blank'><FormattedMessage id='getting_started.userguide' defaultMessage='User Guide' /></a> • <a href='https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md' rel='noopener' target='_blank'><FormattedMessage id='getting_started.appsshort' defaultMessage='Apps' /></a>
-          </p>
+        {!multiColumn && <div className='flex-spacer' />}
+
+        <div className='getting-started getting-started__footer'>
+          <ul>
+            {multiColumn && <li><Link to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link> · </li>}
+            <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this instance' /></a> · </li>
+            <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li>
+            <li><a href='https://github.com/tootsuite/documentation#documentation' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li>
+            <li><a href='/auth/sign_out' data-method='delete'><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li>
+          </ul>
+
           <p>
             <FormattedMessage
               id='getting_started.open_source_notice'
diff --git a/app/javascript/mastodon/features/trends/index.js b/app/javascript/mastodon/features/trends/index.js
new file mode 100644
index 000000000..f33af3e2e
--- /dev/null
+++ b/app/javascript/mastodon/features/trends/index.js
@@ -0,0 +1,66 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { connect } from 'react-redux';
+import { injectIntl, defineMessages } from 'react-intl';
+import Column from '../ui/components/column';
+import ColumnHeader from '../../components/column_header';
+import Hashtag from '../../components/hashtag';
+import classNames from 'classnames';
+import { fetchTrends } from '../../actions/trends';
+
+const messages = defineMessages({
+  title: { id: 'trends.header', defaultMessage: 'Trending now' },
+  refreshTrends: { id: 'trends.refresh', defaultMessage: 'Refresh trends' },
+});
+
+const mapStateToProps = state => ({
+  trends: state.getIn(['trends', 'items']),
+  loading: state.getIn(['trends', 'isLoading']),
+});
+
+const mapDispatchToProps = dispatch => ({
+  fetchTrends: () => dispatch(fetchTrends()),
+});
+
+@connect(mapStateToProps, mapDispatchToProps)
+@injectIntl
+export default class Trends extends ImmutablePureComponent {
+
+  static propTypes = {
+    intl: PropTypes.object.isRequired,
+    trends: ImmutablePropTypes.list,
+    fetchTrends: PropTypes.func.isRequired,
+    loading: PropTypes.bool,
+  };
+
+  componentDidMount () {
+    this.props.fetchTrends();
+  }
+
+  handleRefresh = () => {
+    this.props.fetchTrends();
+  }
+
+  render () {
+    const { trends, loading, intl } = this.props;
+
+    return (
+      <Column>
+        <ColumnHeader
+          icon='fire'
+          title={intl.formatMessage(messages.title)}
+          extraButton={(
+            <button className='column-header__button' title={intl.formatMessage(messages.refreshTrends)} aria-label={intl.formatMessage(messages.refreshTrends)} onClick={this.handleRefresh}><i className={classNames('fa', 'fa-refresh', { 'fa-spin': loading })} /></button>
+          )}
+        />
+
+        <div className='scrollable'>
+          {trends && trends.map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
+        </div>
+      </Column>
+    );
+  }
+
+}
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index adb856b92..f1409b946 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -132,11 +132,12 @@ class SwitchingColumnsArea extends React.PureComponent {
   render () {
     const { children } = this.props;
     const { mobile } = this.state;
+    const redirect = mobile ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />;
 
     return (
       <ColumnsAreaContainer ref={this.setRef} singleColumn={mobile}>
         <WrappedSwitch>
-          <Redirect from='/' to='/getting-started' exact />
+          {redirect}
           <WrappedRoute path='/getting-started' component={GettingStarted} content={children} />
           <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />
           <WrappedRoute path='/timelines/home' component={HomeTimeline} content={children} />
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index c8e37a366..c007cd26f 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -58,7 +58,6 @@
   "column_header.pin": "تدبيس",
   "column_header.show_settings": "عرض الإعدادات",
   "column_header.unpin": "فك التدبيس",
-  "column_subheading.navigation": "التصفح",
   "column_subheading.settings": "الإعدادات",
   "compose_form.direct_message_warning": "لن يَظهر هذا التبويق إلا للمستخدمين المذكورين.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "لا يوجد أي شيء هنا ! قم بنشر شيء ما للعامة، أو إتبع مستخدمين آخرين في الخوادم المثيلة الأخرى لملء خيط المحادثات العام",
   "follow_request.authorize": "ترخيص",
   "follow_request.reject": "رفض",
-  "getting_started.appsshort": "تطبيقات",
-  "getting_started.faq": "أسئلة وأجوبة شائعة",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "إستعدّ للبدء",
   "getting_started.open_source_notice": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على جيت هب {github}.",
-  "getting_started.userguide": "دليل المستخدم",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "متقدمة",
   "home.column_settings.basic": "أساسية",
   "home.column_settings.filter_regex": "تصفية حسب التعبيرات العادية",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "الحسابات المحجوبة",
   "navigation_bar.community_timeline": "الخيط العام المحلي",
   "navigation_bar.direct": "الرسائل المباشِرة",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "النطاقات المخفية",
   "navigation_bar.edit_profile": "تعديل الملف الشخصي",
   "navigation_bar.favourites": "المفضلة",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "القوائم",
   "navigation_bar.logout": "خروج",
   "navigation_bar.mutes": "الحسابات المكتومة",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "التبويقات المثبتة",
   "navigation_bar.preferences": "التفضيلات",
   "navigation_bar.public_timeline": "الخيط العام الموحد",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} أعجب بمنشورك",
   "notification.follow": "{name} يتابعك",
   "notification.mention": "{name} ذكرك",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "البحث",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
   "upload_area.title": "إسحب ثم أفلت للرفع",
   "upload_button.label": "إضافة وسائط",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 9ac5aad9e..80c72ac98 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Settings",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Първи стъпки",
   "getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {github}.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Advanced",
   "home.column_settings.basic": "Basic",
   "home.column_settings.filter_regex": "Filter out by regular expressions",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.community_timeline": "Local timeline",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Редактирай профил",
   "navigation_bar.favourites": "Favourites",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Излизане",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Предпочитания",
   "navigation_bar.public_timeline": "Публичен канал",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} хареса твоята публикация",
   "notification.follow": "{name} те последва",
   "notification.mention": "{name} те спомена",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Добави медия",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 8fd42ca34..9598a2796 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fixa",
   "column_header.show_settings": "Mostra la configuració",
   "column_header.unpin": "No fixis",
-  "column_subheading.navigation": "Navegació",
   "column_subheading.settings": "Configuració",
   "compose_form.direct_message_warning": "Aquest toot només serà enviat als usuaris esmentats. De totes maneres, els operadors de la teva o de qualsevol de les instàncies receptores poden inspeccionar aquest missatge.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "No hi ha res aquí! Escriu alguna cosa públicament o segueix manualment usuaris d'altres instàncies per omplir-ho",
   "follow_request.authorize": "Autoritzar",
   "follow_request.reject": "Rebutjar",
-  "getting_started.appsshort": "Aplicacions",
-  "getting_started.faq": "PMF",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Començant",
   "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir o informar de problemes a GitHub a {github}.",
-  "getting_started.userguide": "Guia de l'usuari",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avançat",
   "home.column_settings.basic": "Bàsic",
   "home.column_settings.filter_regex": "Filtrar per expressió regular",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Usuaris bloquejats",
   "navigation_bar.community_timeline": "Línia de temps Local",
   "navigation_bar.direct": "Missatges directes",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Dominis ocults",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favorits",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Llistes",
   "navigation_bar.logout": "Tancar sessió",
   "navigation_bar.mutes": "Usuaris silenciats",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Toots fixats",
   "navigation_bar.preferences": "Preferències",
   "navigation_bar.public_timeline": "Línia de temps federada",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} ha afavorit el teu estat",
   "notification.follow": "{name} et segueix",
   "notification.mention": "{name} t'ha esmentat",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Cerca",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
   "upload_area.title": "Arrossega i deixa anar per carregar",
   "upload_button.label": "Afegir multimèdia",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index bc75813ea..d5e2b2ede 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Puntarulà",
   "column_header.show_settings": "Mustrà i parametri",
   "column_header.unpin": "Spuntarulà",
-  "column_subheading.navigation": "Navigazione",
   "column_subheading.settings": "Parametri",
   "compose_form.direct_message_warning": "Solu l'utilizatori mintuvati puderenu vede stu statutu.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altre istanze per empie a linea pubblica",
   "follow_request.authorize": "Auturizà",
   "follow_request.reject": "Righjittà",
-  "getting_started.appsshort": "Applicazione",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Per principià",
   "getting_started.open_source_notice": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitHub: {github}.",
-  "getting_started.userguide": "Guida d'utilizazione",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avanzati",
   "home.column_settings.basic": "Bàsichi",
   "home.column_settings.filter_regex": "Filtrà cù spressione regulare (regex)",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Utilizatori bluccati",
   "navigation_bar.community_timeline": "Linea pubblica lucale",
   "navigation_bar.direct": "Missaghji diretti",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Duminii piattati",
   "navigation_bar.edit_profile": "Mudificà u prufile",
   "navigation_bar.favourites": "Favuriti",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Liste",
   "navigation_bar.logout": "Scunnettassi",
   "navigation_bar.mutes": "Utilizatori piattati",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Statuti puntarulati",
   "navigation_bar.preferences": "Preferenze",
   "navigation_bar.public_timeline": "Linea pubblica glubale",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
   "notification.follow": "{name} v'hà seguitatu",
   "notification.mention": "{name} v'hà mintuvatu",
@@ -219,7 +220,7 @@
   "privacy.unlisted.long": "Ùn mette micca nant'a linea pubblica (ma tutt'u mondu pò vede u statutu nant'à u vostru prufile)",
   "privacy.unlisted.short": "Micca listatu",
   "regeneration_indicator.label": "Caricamentu…",
-  "regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta",
+  "regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
   "relative_time.just_now": "avà",
@@ -282,12 +283,15 @@
   "tabs_bar.search": "Cercà",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
   "upload_area.title": "Drag & drop per caricà un fugliale",
   "upload_button.label": "Aghjunghje un media",
   "upload_form.description": "Discrive per i malvistosi",
   "upload_form.focus": "Riquatrà",
-  "upload_form.undo": "Annullà",
+  "upload_form.undo": "Sguassà",
   "upload_progress.label": "Caricamentu...",
   "video.close": "Chjudà a video",
   "video.exit_fullscreen": "Caccià u pienu screnu",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 29756aff0..e770c74eb 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Anheften",
   "column_header.show_settings": "Einstellungen anzeigen",
   "column_header.unpin": "Lösen",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Einstellungen",
   "compose_form.direct_message_warning": "Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Instanzen, um die Zeitleiste aufzufüllen",
   "follow_request.authorize": "Erlauben",
   "follow_request.reject": "Ablehnen",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "Häufig gestellte Fragen",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Erste Schritte",
   "getting_started.open_source_notice": "Mastodon ist quelloffene Software. Du kannst auf GitHub unter {github} dazu beitragen oder Probleme melden.",
-  "getting_started.userguide": "Bedienungsanleitung",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Erweitert",
   "home.column_settings.basic": "Einfach",
   "home.column_settings.filter_regex": "Mit regulären Ausdrücken filtern",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blockierte Profile",
   "navigation_bar.community_timeline": "Lokale Zeitleiste",
   "navigation_bar.direct": "Direktnachrichten",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Versteckte Domains",
   "navigation_bar.edit_profile": "Profil bearbeiten",
   "navigation_bar.favourites": "Favoriten",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listen",
   "navigation_bar.logout": "Abmelden",
   "navigation_bar.mutes": "Stummgeschaltete Profile",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Angeheftete Beiträge",
   "navigation_bar.preferences": "Einstellungen",
   "navigation_bar.public_timeline": "Föderierte Zeitleiste",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} hat deinen Beitrag favorisiert",
   "notification.follow": "{name} folgt dir",
   "notification.mention": "{name} hat dich erwähnt",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Suchen",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
   "upload_area.title": "Zum Hochladen hereinziehen",
   "upload_button.label": "Mediendatei hinzufügen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index ef2a796a3..e3b749e86 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -121,6 +121,15 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "{count} {rawCount, plural, one {person} other {people}} talking",
+        "id": "trends.count_by_accounts"
+      }
+    ],
+    "path": "app/javascript/mastodon/components/hashtag.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Load more",
         "id": "status.load_more"
       }
@@ -501,6 +510,38 @@
         "id": "account.show_reblogs"
       },
       {
+        "defaultMessage": "Pinned toots",
+        "id": "navigation_bar.pins"
+      },
+      {
+        "defaultMessage": "Preferences",
+        "id": "navigation_bar.preferences"
+      },
+      {
+        "defaultMessage": "Follow requests",
+        "id": "navigation_bar.follow_requests"
+      },
+      {
+        "defaultMessage": "Favourites",
+        "id": "navigation_bar.favourites"
+      },
+      {
+        "defaultMessage": "Lists",
+        "id": "navigation_bar.lists"
+      },
+      {
+        "defaultMessage": "Blocked users",
+        "id": "navigation_bar.blocks"
+      },
+      {
+        "defaultMessage": "Hidden domains",
+        "id": "navigation_bar.domain_blocks"
+      },
+      {
+        "defaultMessage": "Muted users",
+        "id": "navigation_bar.mutes"
+      },
+      {
         "defaultMessage": "Information below may reflect the user's profile incompletely.",
         "id": "account.disclaimer_full"
       },
@@ -542,6 +583,10 @@
         "id": "account.unblock"
       },
       {
+        "defaultMessage": "Edit profile",
+        "id": "account.edit_profile"
+      },
+      {
         "defaultMessage": "Follows you",
         "id": "account.follows_you"
       },
@@ -760,6 +805,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Trending now",
+        "id": "trends.header"
+      },
+      {
         "defaultMessage": "People",
         "id": "search_results.accounts"
       },
@@ -990,10 +1039,23 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Getting started",
-        "id": "getting_started.heading"
+        "defaultMessage": "Refresh",
+        "id": "trends.refresh"
+      },
+      {
+        "defaultMessage": "Trending now",
+        "id": "trends.header"
       },
       {
+        "defaultMessage": "Load more",
+        "id": "status.load_more"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/getting_started/components/trends.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Home",
         "id": "tabs_bar.home"
       },
@@ -1006,10 +1068,6 @@
         "id": "navigation_bar.public_timeline"
       },
       {
-        "defaultMessage": "Navigation",
-        "id": "column_subheading.navigation"
-      },
-      {
         "defaultMessage": "Settings",
         "id": "column_subheading.settings"
       },
@@ -1030,10 +1088,6 @@
         "id": "navigation_bar.follow_requests"
       },
       {
-        "defaultMessage": "Logout",
-        "id": "navigation_bar.logout"
-      },
-      {
         "defaultMessage": "Favourites",
         "id": "navigation_bar.favourites"
       },
@@ -1050,10 +1104,6 @@
         "id": "navigation_bar.mutes"
       },
       {
-        "defaultMessage": "Extended information",
-        "id": "navigation_bar.info"
-      },
-      {
         "defaultMessage": "Pinned toots",
         "id": "navigation_bar.pins"
       },
@@ -1062,20 +1112,40 @@
         "id": "navigation_bar.lists"
       },
       {
-        "defaultMessage": "Keyboard shortcuts",
+        "defaultMessage": "Discover",
+        "id": "navigation_bar.discover"
+      },
+      {
+        "defaultMessage": "Personal",
+        "id": "navigation_bar.personal"
+      },
+      {
+        "defaultMessage": "Security",
+        "id": "navigation_bar.security"
+      },
+      {
+        "defaultMessage": "Getting started",
+        "id": "getting_started.heading"
+      },
+      {
+        "defaultMessage": "Hotkeys",
         "id": "navigation_bar.keyboard_shortcuts"
       },
       {
-        "defaultMessage": "FAQ",
-        "id": "getting_started.faq"
+        "defaultMessage": "About this instance",
+        "id": "navigation_bar.info"
+      },
+      {
+        "defaultMessage": "Terms of service",
+        "id": "getting_started.terms"
       },
       {
-        "defaultMessage": "User Guide",
-        "id": "getting_started.userguide"
+        "defaultMessage": "Documentation",
+        "id": "getting_started.documentation"
       },
       {
-        "defaultMessage": "Apps",
-        "id": "getting_started.appsshort"
+        "defaultMessage": "Logout",
+        "id": "navigation_bar.logout"
       },
       {
         "defaultMessage": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
@@ -1540,6 +1610,19 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Trending now",
+        "id": "trends.header"
+      },
+      {
+        "defaultMessage": "Refresh trends",
+        "id": "trends.refresh"
+      }
+    ],
+    "path": "app/javascript/mastodon/features/trends/index.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "Boost",
         "id": "status.reblog"
       },
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index bb48fe93f..9efc0e1bd 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Καρφίτσωμα",
   "column_header.show_settings": "Εμφάνιση ρυθμίσεων",
   "column_header.unpin": "Ξεκαρφίτσωμα",
-  "column_subheading.navigation": "Πλοήγηση",
   "column_subheading.settings": "Ρυθμίσεις",
   "compose_form.direct_message_warning": "Αυτό το τουτ θα σταλεί μόνο στους αναφερόμενους χρήστες.",
   "compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα",
@@ -112,11 +111,10 @@
   "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλα instances για να τη γεμίσεις",
   "follow_request.authorize": "Ενέκρινε",
   "follow_request.reject": "Απέρριψε",
-  "getting_started.appsshort": "Εφαρμογές",
-  "getting_started.faq": "Συχνές Ερωτήσεις",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Ξεκινώντας",
   "getting_started.open_source_notice": "Το Mastodon είναι ελεύθερο λογισμικό. Μπορείς να συνεισφέρεις ή να αναφέρεις ζητήματα στο GitHub στο {github}.",
-  "getting_started.userguide": "Οδηγός Χρήσης",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Προχωρημένα",
   "home.column_settings.basic": "Βασικά",
   "home.column_settings.filter_regex": "Φιλτράρετε μέσω regular expressions",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
   "navigation_bar.community_timeline": "Local timeline",
   "navigation_bar.direct": "Απευθείας μηνύματα",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Edit profile",
   "navigation_bar.favourites": "Favourites",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Αποσύνδεση",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Προτιμήσεις",
   "navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
+  "navigation_bar.security": "Security",
   "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
   "notification.follow": "Ο/Η {name} σε ακολούθησε",
   "notification.mention": "Ο/Η {name} σε ανέφερε",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 690904236..b5ce82050 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -115,11 +115,10 @@
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Getting started",
   "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Advanced",
   "home.column_settings.basic": "Basic",
   "home.column_settings.filter_regex": "Filter out by regular expressions",
@@ -163,19 +162,22 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.community_timeline": "Local timeline",
   "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.follow_requests": "Follow requests",
   "navigation_bar.info": "About this instance",
-  "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
   "navigation_bar.lists": "Lists",
   "navigation_bar.misc": "Misc",
   "navigation_bar.logout": "Logout",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -286,6 +288,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index bb27099b7..8740c396e 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Alpingli",
   "column_header.show_settings": "Montri agordojn",
   "column_header.unpin": "Depingli",
-  "column_subheading.navigation": "Navigado",
   "column_subheading.settings": "Agordado",
   "compose_form.direct_message_warning": "Tiu mesaĝo estos sendita nur al menciitaj uzantoj.",
   "compose_form.direct_message_warning_learn_more": "Lerni pli",
@@ -112,11 +111,10 @@
   "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj nodoj por plenigi la publikan tempolinion",
   "follow_request.authorize": "Rajtigi",
   "follow_request.reject": "Rifuzi",
-  "getting_started.appsshort": "Aplikaĵoj",
-  "getting_started.faq": "Oftaj demandoj",
+  "getting_started.documentation": "Dokumentado",
   "getting_started.heading": "Por komenci",
   "getting_started.open_source_notice": "Mastodon estas malfermitkoda programo. Vi povas kontribui aŭ raporti problemojn en GitHub je {github}.",
-  "getting_started.userguide": "Gvidilo de uzo",
+  "getting_started.terms": "Uzkondiĉoj",
   "home.column_settings.advanced": "Precizaj agordoj",
   "home.column_settings.basic": "Bazaj agordoj",
   "home.column_settings.filter_regex": "Filtri per regulesprimoj",
@@ -160,18 +158,21 @@
   "navigation_bar.blocks": "Blokitaj uzantoj",
   "navigation_bar.community_timeline": "Loka tempolinio",
   "navigation_bar.direct": "Rektaj mesaĝoj",
+  "navigation_bar.discover": "Esplori",
   "navigation_bar.domain_blocks": "Kaŝitaj domajnoj",
   "navigation_bar.edit_profile": "Redakti profilon",
   "navigation_bar.favourites": "Stelumoj",
   "navigation_bar.follow_requests": "Petoj de sekvado",
   "navigation_bar.info": "Pri ĉi tiu nodo",
-  "navigation_bar.keyboard_shortcuts": "Klavaraj mallongigoj",
+  "navigation_bar.keyboard_shortcuts": "Rapidklavoj",
   "navigation_bar.lists": "Listoj",
   "navigation_bar.logout": "Elsaluti",
   "navigation_bar.mutes": "Silentigitaj uzantoj",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Alpinglitaj mesaĝoj",
   "navigation_bar.preferences": "Preferoj",
   "navigation_bar.public_timeline": "Fratara tempolinio",
+  "navigation_bar.security": "Sekureco",
   "notification.favourite": "{name} stelumis vian mesaĝon",
   "notification.follow": "{name} eksekvis vin",
   "notification.mention": "{name} menciis vin",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Serĉi",
   "timeline.media": "Aŭdovidaĵoj",
   "timeline.posts": "Mesaĝoj",
+  "trends.count_by_accounts": "{count} {rawCount, pluraj, unu {person} alia(j) {people}} parolas",
+  "trends.header": "Nun furoras",
+  "trends.refresh": "Aktualigi",
   "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
   "upload_area.title": "Altreni kaj lasi por alŝuti",
   "upload_button.label": "Aldoni aŭdovidaĵon",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 6092630c4..4386786cb 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fijar",
   "column_header.show_settings": "Mostrar ajustes",
   "column_header.unpin": "Dejar de fijar",
-  "column_subheading.navigation": "Navegación",
   "column_subheading.settings": "Ajustes",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
-  "getting_started.appsshort": "Aplicaciones",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Primeros pasos",
   "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.",
-  "getting_started.userguide": "Guía de usuario",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avanzado",
   "home.column_settings.basic": "Básico",
   "home.column_settings.filter_regex": "Filtrar con expresiones regulares",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Usuarios bloqueados",
   "navigation_bar.community_timeline": "Historia local",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favoritos",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Cerrar sesión",
   "navigation_bar.mutes": "Usuarios silenciados",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Toots fijados",
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Historia federada",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te ha mencionado",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
   "upload_area.title": "Arrastra y suelta para subir",
   "upload_button.label": "Subir multimedia",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 636c51f6f..508e4d988 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -3,7 +3,7 @@
   "account.block": "Blokeatu @{name}",
   "account.block_domain": "Ezkutatu {domain} domeinuko guztia",
   "account.blocked": "Blokeatuta",
-  "account.direct": "Mezu zuzena @{name} erabiltzaileari",
+  "account.direct": "Mezu zuzena @{name}(r)i",
   "account.disclaimer_full": "Baliteke beheko informazioak erabiltzailearen profilaren zati bat baino ez erakustea.",
   "account.domain_blocked": "Ezkutatutako domeinua",
   "account.edit_profile": "Profila aldatu",
@@ -11,24 +11,24 @@
   "account.followers": "Jarraitzaileak",
   "account.follows": "Jarraitzen",
   "account.follows_you": "Jarraitzen dizu",
-  "account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak",
+  "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
   "account.media": "Media",
   "account.mention": "@{name} aipatu",
   "account.moved_to": "{name} hona lekualdatu da:",
-  "account.mute": "@{name} isilarazi",
-  "account.mute_notifications": "Mututu @{name} erabiltzailearen jakinarazpenak",
-  "account.muted": "Isilarazita",
+  "account.mute": "Mututu @{name}",
+  "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
+  "account.muted": "Mutututa",
   "account.posts": "Toot-ak",
   "account.posts_with_replies": "Toot eta erantzunak",
   "account.report": "@{name} salatu",
   "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
   "account.share": "@{name}(e)ren profila elkarbanatu",
-  "account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak",
+  "account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
   "account.unblock": "Desblokeatu @{name}",
   "account.unblock_domain": "Berriz erakutsi {domain}",
   "account.unfollow": "Jarraitzeari utzi",
   "account.unmute": "Desmututu @{name}",
-  "account.unmute_notifications": "Desmututu @{name} erabiltzailearen jakinarazpenak",
+  "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
   "account.view_full_profile": "Ikusi profil osoa",
   "alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
   "alert.unexpected.title": "Ene!",
@@ -45,7 +45,7 @@
   "column.domain_blocks": "Domeinu ezkutuak",
   "column.favourites": "Gogokoak",
   "column.follow_requests": "Jarraitzeko eskariak",
-  "column.home": "Home",
+  "column.home": "Hasiera",
   "column.lists": "Zerrendak",
   "column.mutes": "Mutututako erabiltzaileak",
   "column.notifications": "Jakinarazpenak",
@@ -58,13 +58,12 @@
   "column_header.pin": "Finkatu",
   "column_header.show_settings": "Erakutsi ezarpenak",
   "column_header.unpin": "Desfinkatu",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Ezarpenak",
   "compose_form.direct_message_warning": "Toot hau aipatutako erabiltzaileei besterik ez zaie bidaliko.",
   "compose_form.direct_message_warning_learn_more": "Ikasi gehiago",
   "compose_form.hashtag_warning": "Toot hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan toot publikoak besterik ez dira agertzen.",
   "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren mezuak ikusteko.",
-  "compose_form.lock_disclaimer.lock": "blokeatuta",
+  "compose_form.lock_disclaimer.lock": "giltzapetuta",
   "compose_form.placeholder": "Zer duzu buruan?",
   "compose_form.publish": "Toot",
   "compose_form.publish_loud": "{publish}!",
@@ -77,24 +76,24 @@
   "confirmations.block.confirm": "Block",
   "confirmations.block.message": "Ziur {name} blokeatu nahi duzula?",
   "confirmations.delete.confirm": "Delete",
-  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete.message": "Ziur mezu hau ezabatu nahi duzula?",
   "confirmations.delete_list.confirm": "Delete",
   "confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?",
   "confirmations.domain_block.confirm": "Ezkutatu domeinu osoa",
-  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
+  "confirmations.domain_block.message": "Ziur, erabat ziur, {domain} domeinu osoa blokeatu nahi duzula? Gehienetan gutxi batzuk blokeatu edo mututzearekin nahikoa da.",
   "confirmations.mute.confirm": "Mututu",
   "confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
   "confirmations.unfollow.confirm": "Utzi jarraitzeari",
   "confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
-  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.",
   "embed.preview": "Hau da izango duen itxura:",
   "emoji_button.activity": "Jarduera",
   "emoji_button.custom": "Pertsonalizatua",
   "emoji_button.flags": "Banderak",
   "emoji_button.food": "Janari eta edaria",
-  "emoji_button.label": "Insert emoji",
+  "emoji_button.label": "Txertatu emoji-a",
   "emoji_button.nature": "Natura",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "Emojirik ez!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objektuak",
   "emoji_button.people": "Jendea",
   "emoji_button.recent": "Maiz erabiliak",
@@ -102,21 +101,20 @@
   "emoji_button.search_results": "Bilaketaren emaitzak",
   "emoji_button.symbols": "Sinboloak",
   "emoji_button.travel": "Bidaiak eta tokiak",
-  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!",
+  "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.",
   "empty_column.hashtag": "Ez dago ezer traola honetan oraindik.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+  "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.",
   "empty_column.home.public_timeline": "denbora-lerro publikoa",
-  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
-  "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",
+  "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek mezu berriak argitaratzean, hemen agertuko dira.",
+  "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 instantzia batzuetako erabiltzailean hau betetzeko",
   "follow_request.authorize": "Baimendu",
   "follow_request.reject": "Ukatu",
-  "getting_started.appsshort": "Aplikazioak",
-  "getting_started.faq": "FAQ",
-  "getting_started.heading": "Lehen urratsak",
-  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.userguide": "Erabiltzaile gida",
+  "getting_started.documentation": "Dokumentazioa",
+  "getting_started.heading": "Abiapuntua",
+  "getting_started.open_source_notice": "Mastodon software librea da. Ekarpenak egin ditzakezu edo akatsen berri eman GitHub bidez: {github}.",
+  "getting_started.terms": "Erabilera baldintzak",
   "home.column_settings.advanced": "Aurreratua",
   "home.column_settings.basic": "Oinarrizkoa",
   "home.column_settings.filter_regex": "Iragazi adierazpen erregularren bidez",
@@ -125,8 +123,8 @@
   "home.settings": "Zutabearen ezarpenak",
   "keyboard_shortcuts.back": "atzera nabigatzeko",
   "keyboard_shortcuts.boost": "bultzada ematea",
-  "keyboard_shortcuts.column": "to focus a status in one of the columns",
-  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.column": "mezu bat zutabe batean fokatzea",
+  "keyboard_shortcuts.compose": "testua konposatzeko arean fokatzea",
   "keyboard_shortcuts.description": "Description",
   "keyboard_shortcuts.down": "zerrendan behera mugitzea",
   "keyboard_shortcuts.enter": "to open status",
@@ -137,9 +135,9 @@
   "keyboard_shortcuts.mention": "egilea aipatzea",
   "keyboard_shortcuts.reply": "erantzutea",
   "keyboard_shortcuts.search": "bilaketan fokua jartzea",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
   "keyboard_shortcuts.toot": "toot berria hastea",
-  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
   "keyboard_shortcuts.up": "zerrendan gora mugitzea",
   "lightbox.close": "Itxi",
   "lightbox.next": "Hurrengoa",
@@ -160,22 +158,25 @@
   "navigation_bar.blocks": "Blokeatutako erabiltzaileak",
   "navigation_bar.community_timeline": "Denbora-lerro lokala",
   "navigation_bar.direct": "Mezu zuzenak",
+  "navigation_bar.discover": "Aurkitu",
   "navigation_bar.domain_blocks": "Domeinu ezkutuak",
-  "navigation_bar.edit_profile": "Editatu profila",
+  "navigation_bar.edit_profile": "Aldatu profila",
   "navigation_bar.favourites": "Gogokoak",
   "navigation_bar.follow_requests": "Jarraitzeko eskariak",
-  "navigation_bar.info": "Extended information",
-  "navigation_bar.keyboard_shortcuts": "Teklatu laster-bideak",
+  "navigation_bar.info": "Instantzia honi buruz",
+  "navigation_bar.keyboard_shortcuts": "Laster-teklak",
   "navigation_bar.lists": "Zerrendak",
   "navigation_bar.logout": "Amaitu saioa",
   "navigation_bar.mutes": "Mutututako erabiltzaileak",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Finkatutako toot-ak",
   "navigation_bar.preferences": "Hobespenak",
   "navigation_bar.public_timeline": "Federatutako denbora-lerroa",
-  "notification.favourite": "{name} favourited your status",
-  "notification.follow": "{name} erabiltzaileak jarraitzen zaitu",
-  "notification.mention": "{name} erabiltzaileak aipatu zaitu",
-  "notification.reblog": "{name} boosted your status",
+  "navigation_bar.security": "Segurtasuna",
+  "notification.favourite": "{name}(e)k zure mezua gogoko du",
+  "notification.follow": "{name}(e)k jarraitzen zaitu",
+  "notification.mention": "{name}(e)k aipatu zaitu",
+  "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari",
   "notifications.clear": "Garbitu jakinarazpenak",
   "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?",
   "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak",
@@ -190,10 +191,10 @@
   "notifications.group": "{count} jakinarazpen",
   "onboarding.done": "Egina",
   "onboarding.next": "Hurrengoa",
-  "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
+  "onboarding.page_five.public_timelines": "Denbora-lerro lokalak {domain} domeinuko guztien mezu publikoak erakusten ditu. Federatutako denbora-lerroak {domain} domeinuko edonork jarraitutakoen mezu publikoak erakusten ditu. Hauek denbora-lerro publikoak dira, jende berria ezagutzeko primerakoak.",
   "onboarding.page_four.home": "Hasierako denbora-lerroak jarraitzen duzun jendearen mezuak erakusten ditu.",
   "onboarding.page_four.notifications": "Jakinarazpenen  zutabeak besteek zurekin hasitako hartu-emanak erakusten ditu.",
-  "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
+  "onboarding.page_one.federation": "Mastodon lotutako zerbitzari independenteez eraikitako gizarte sare bat da. Zerbitzari hauei instantzia deitzen diegu.",
   "onboarding.page_one.full_handle": "Zure erabiltzaile-izen osoa",
   "onboarding.page_one.handle_hint": "Hau da zure lagunei zu aurkitzeko emango zeniena.",
   "onboarding.page_one.welcome": "Ongi etorri Mastodon-era!",
@@ -201,15 +202,15 @@
   "onboarding.page_six.almost_done": "Ia eginda...",
   "onboarding.page_six.appetoot": "Bon Appetoot!",
   "onboarding.page_six.apps_available": "{apps} eskuragarri daude iOS, Android eta beste plataformetarako.",
-  "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
+  "onboarding.page_six.github": "Mastodon software librea da. Akatsen berri eman ezakezu, ezaugarriak eskatu, edo kodea proposatu hemen:  {github}.",
   "onboarding.page_six.guidelines": "komunitatearen gida-lerroak",
   "onboarding.page_six.read_guidelines": "Irakurri {domain} {guidelines} mesedez!",
   "onboarding.page_six.various_app": "mugikorrerako aplikazioak",
-  "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
-  "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
-  "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
+  "onboarding.page_three.profile": "Editatu zure profila zure abatarra, biografia eta pantaila-izena aldatzeko. Han hobespen gehiago daude ere.",
+  "onboarding.page_three.search": "Erabili bilaketa-barra jendea aurkitzeko eta traolak begiratzeko, esaterako {illustration} edo {introductions}. Instantzia honetan ez dagoen pertsona bat bilatzeko , erabili erabiltzaile-izen osoa.",
+  "onboarding.page_two.compose": "Idatzi mezuak konposizio-zutabean. Irudiak igo ditzakezu, pribatutasun ezarpenak aldatu, eta edukiei abisuak gehitu beheko ikonoekin.",
   "onboarding.skip": "Saltatu",
-  "privacy.change": "Adjust status privacy",
+  "privacy.change": "Doitu mezuaren pribatutasuna",
   "privacy.direct.long": "Bidali aipatutako erabiltzaileei besterik ez",
   "privacy.direct.short": "Zuzena",
   "privacy.private.long": "Bidali jarraitzaileei besterik ez",
@@ -227,17 +228,17 @@
   "relative_time.seconds": "{number}s",
   "reply_indicator.cancel": "Utzi",
   "report.forward": "Birbidali hona: {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 instance moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.forward_hint": "Kontu hau beste zerbitzari batekoa da. Bidali txostenaren kopia anonimo hara ere?",
+  "report.hint": "Txostena zure instantziaren moderatzaileei bidaliko zaio. Kontu hau zergatik salatzen duzun behean azaldu dezakezu:",
   "report.placeholder": "Iruzkin gehigarriak",
   "report.submit": "Submit",
-  "report.target": "Report {target}",
+  "report.target": "{target} salatzen",
   "search.placeholder": "Bilatu",
   "search_popout.search_format": "Bilaketa aurreratuaren formatua",
-  "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.full_text": "Testu hutsarekin zuk idatzitako mezuak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.",
   "search_popout.tips.hashtag": "traola",
   "search_popout.tips.status": "status",
-  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.text": "Testu hutsak pantaila-izenak, erabiltzaile-izenak eta traolak bilatzen ditu",
   "search_popout.tips.user": "erabiltzailea",
   "search_results.accounts": "Jendea",
   "search_results.hashtags": "Traolak",
@@ -248,7 +249,7 @@
   "status.cancel_reblog_private": "Kendu bultzada",
   "status.cannot_reblog": "Mezu honi ezin zaio bultzada eman",
   "status.delete": "Delete",
-  "status.direct": "Mezu zuzena @{name} erabiltzaileari",
+  "status.direct": "Mezu zuzena @{name}(r)i",
   "status.embed": "Txertatu",
   "status.favourite": "Gogokoa",
   "status.load_more": "Kargatu gehiago",
@@ -257,16 +258,16 @@
   "status.more": "Gehiago",
   "status.mute": "Mututu @{name}",
   "status.mute_conversation": "Mututu elkarrizketa",
-  "status.open": "Expand this status",
+  "status.open": "Hedatu mezu hau",
   "status.pin": "Finkatu profilean",
   "status.pinned": "Finkatutako toot-a",
   "status.reblog": "Bultzada",
   "status.reblog_private": "Bultzada jatorrizko hartzaileei",
-  "status.reblogged_by": "{name} erabiltzailearen bultzada",
+  "status.reblogged_by": "{name}(r)en bultzada",
   "status.reply": "Erantzun",
   "status.replyAll": "Erantzun harian",
-  "status.report": "Report @{name}",
-  "status.sensitive_toggle": "Click to view",
+  "status.report": "Salatu @{name}",
+  "status.sensitive_toggle": "Egin klik ikusteko",
   "status.sensitive_warning": "Eduki mingarria",
   "status.share": "Partekatu",
   "status.show_less": "Erakutsi gutxiago",
@@ -276,12 +277,15 @@
   "status.unmute_conversation": "Desmututu elkarrizketa",
   "status.unpin": "Desfinkatu profiletik",
   "tabs_bar.federated_timeline": "Federatua",
-  "tabs_bar.home": "Home",
-  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.home": "Hasiera",
+  "tabs_bar.local_timeline": "Lokala",
   "tabs_bar.notifications": "Jakinarazpenak",
   "tabs_bar.search": "Bilatu",
   "timeline.media": "Media",
   "timeline.posts": "Toot-ak",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten",
+  "trends.header": "Joera orain",
+  "trends.refresh": "Freskatu",
   "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
   "upload_area.title": "Arrastatu eta jaregin igotzeko",
   "upload_button.label": "Gehitu multimedia",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 6c0f34a11..82f3af3cd 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -58,7 +58,6 @@
   "column_header.pin": "ثابت‌کردن",
   "column_header.show_settings": "نمایش تنظیمات",
   "column_header.unpin": "رهاکردن",
-  "column_subheading.navigation": "گشت و گذار",
   "column_subheading.settings": "تنظیمات",
   "compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.",
   "compose_form.direct_message_warning_learn_more": "بیشتر بدانید",
@@ -112,11 +111,10 @@
   "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران دیگر را پی بگیرید تا این‌جا پر شود",
   "follow_request.authorize": "اجازه دهید",
   "follow_request.reject": "اجازه ندهید",
-  "getting_started.appsshort": "اپ‌ها",
-  "getting_started.faq": "پرسش‌های رایج",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "آغاز کنید",
   "getting_started.open_source_notice": "ماستدون یک نرم‌افزار آزاد است. می‌توانید در ساخت آن مشارکت کنید یا مشکلاتش را در {github} گزارش دهید.",
-  "getting_started.userguide": "راهنمای کاربری",
+  "getting_started.terms": "شرایط استفاده",
   "home.column_settings.advanced": "پیشرفته",
   "home.column_settings.basic": "اصلی",
   "home.column_settings.filter_regex": "با عبارت‌های باقاعده (regexp) فیلتر کنید",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "کاربران مسدودشده",
   "navigation_bar.community_timeline": "نوشته‌های محلی",
   "navigation_bar.direct": "پیغام‌های خصوصی",
+  "navigation_bar.discover": "گشت و گذار",
   "navigation_bar.domain_blocks": "دامین‌های پنهان‌شده",
   "navigation_bar.edit_profile": "ویرایش نمایه",
   "navigation_bar.favourites": "پسندیده‌ها",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "فهرست‌ها",
   "navigation_bar.logout": "خروج",
   "navigation_bar.mutes": "کاربران بی‌صداشده",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "نوشته‌های ثابت",
   "navigation_bar.preferences": "ترجیحات",
   "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
+  "navigation_bar.security": "امنیت",
   "notification.favourite": "‫{name}‬ نوشتهٔ شما را پسندید",
   "notification.follow": "‫{name}‬ پیگیر شما شد",
   "notification.mention": "‫{name}‬ از شما نام برد",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "جستجو",
   "timeline.media": "عکس و ویدیو",
   "timeline.posts": "بوق‌ها",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}",
+  "trends.header": "موضوعات داغ",
+  "trends.refresh": "به‌روزرسانی",
   "ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.",
   "upload_area.title": "برای بارگذاری به این‌جا بکشید",
   "upload_button.label": "افزودن تصویر",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index d04e0230a..fa8565431 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -1,9 +1,9 @@
 {
-  "account.badges.bot": "Bot",
+  "account.badges.bot": "Botti",
   "account.block": "Estä @{name}",
   "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
   "account.blocked": "Estetty",
-  "account.direct": "Direct message @{name}",
+  "account.direct": "Viesti käyttäjälle @{name}",
   "account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.",
   "account.domain_blocked": "Verkko-osoite piilotettu",
   "account.edit_profile": "Muokkaa",
@@ -41,7 +41,7 @@
   "bundle_modal_error.retry": "Yritä uudestaan",
   "column.blocks": "Estetyt käyttäjät",
   "column.community": "Paikallinen aikajana",
-  "column.direct": "Direct messages",
+  "column.direct": "Viestit",
   "column.domain_blocks": "Piilotetut verkkotunnukset",
   "column.favourites": "Suosikit",
   "column.follow_requests": "Seuraamispyynnöt",
@@ -58,10 +58,9 @@
   "column_header.pin": "Kiinnitä",
   "column_header.show_settings": "Näytä asetukset",
   "column_header.unpin": "Poista kiinnitys",
-  "column_subheading.navigation": "Navigaatio",
   "column_subheading.settings": "Asetukset",
   "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.direct_message_warning_learn_more": "Lisätietoja",
   "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.",
   "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.",
   "compose_form.lock_disclaimer.lock": "lukittu",
@@ -103,7 +102,7 @@
   "emoji_button.symbols": "Symbolit",
   "emoji_button.travel": "Matkailu",
   "empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.",
   "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.",
   "empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.",
   "empty_column.home.public_timeline": "yleinen aikajana",
@@ -112,11 +111,10 @@
   "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt manuaalisesti seuraamassa muiden instanssien käyttäjiä",
   "follow_request.authorize": "Valtuuta",
   "follow_request.reject": "Hylkää",
-  "getting_started.appsshort": "Sovellukset",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Aloitus",
   "getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.",
-  "getting_started.userguide": "Käyttöopas",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Lisäasetukset",
   "home.column_settings.basic": "Perusasetukset",
   "home.column_settings.filter_regex": "Suodata säännöllisillä lausekkeilla",
@@ -159,7 +157,8 @@
   "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
   "navigation_bar.blocks": "Estetyt käyttäjät",
   "navigation_bar.community_timeline": "Paikallinen aikajana",
-  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.direct": "Viestit",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Piilotetut verkkotunnukset",
   "navigation_bar.edit_profile": "Muokkaa profiilia",
   "navigation_bar.favourites": "Suosikit",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listat",
   "navigation_bar.logout": "Kirjaudu ulos",
   "navigation_bar.mutes": "Mykistetyt käyttäjät",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Kiinnitetyt tuuttaukset",
   "navigation_bar.preferences": "Asetukset",
   "navigation_bar.public_timeline": "Yleinen aikajana",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} tykkäsi tilastasi",
   "notification.follow": "{name} seurasi sinua",
   "notification.mention": "{name} mainitsi sinut",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Hae",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
   "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
   "upload_button.label": "Lisää mediaa",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 24b771efa..0190c7562 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Épingler",
   "column_header.show_settings": "Afficher les paramètres",
   "column_header.unpin": "Retirer",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Paramètres",
   "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé qu'aux personnes mentionnées. Cependant, l'administration de votre instance et des instances réceptrices pourront inspecter ce message.",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
@@ -112,11 +111,10 @@
   "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour remplir le fil public",
   "follow_request.authorize": "Accepter",
   "follow_request.reject": "Rejeter",
-  "getting_started.appsshort": "Applications",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Pour commencer",
   "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer et envoyer vos commentaires et rapports de bogues via {github} sur GitHub.",
-  "getting_started.userguide": "Guide d’utilisation",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avancé",
   "home.column_settings.basic": "Basique",
   "home.column_settings.filter_regex": "Filtrer avec une expression rationnelle",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Comptes bloqués",
   "navigation_bar.community_timeline": "Fil public local",
   "navigation_bar.direct": "Messages directs",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Domaines cachés",
   "navigation_bar.edit_profile": "Modifier le profil",
   "navigation_bar.favourites": "Favoris",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listes",
   "navigation_bar.logout": "Déconnexion",
   "navigation_bar.mutes": "Comptes masqués",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pouets épinglés",
   "navigation_bar.preferences": "Préférences",
   "navigation_bar.public_timeline": "Fil public global",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} a ajouté à ses favoris :",
   "notification.follow": "{name} vous suit",
   "notification.mention": "{name} vous a mentionné⋅e :",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Chercher",
   "timeline.media": "Media",
   "timeline.posts": "Pouets",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
   "upload_area.title": "Glissez et déposez pour envoyer",
   "upload_button.label": "Joindre un média",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index f2f0fc260..7af9a0426 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Mostras axustes",
   "column_header.unpin": "Soltar",
-  "column_subheading.navigation": "Navegación",
   "column_subheading.settings": "Axustes",
   "compose_form.direct_message_warning": "Este toot enviarase só as usuarias mencionadas. Porén, a súa proveedora de internet e calquera das instancias receptoras poderían examinar esta mensaxe.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Nada por aquí! Escriba algo de xeito público, ou siga manualmente usuarias de outras instancias para ir enchéndoa",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rexeitar",
-  "getting_started.appsshort": "Aplicacións",
-  "getting_started.faq": "PMF",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Comezando",
   "getting_started.open_source_notice": "Mastodon é software de código aberto. Pode contribuír ou informar de fallos en GitHub en {github}.",
-  "getting_started.userguide": "Guía de usuaria",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avanzado",
   "home.column_settings.basic": "Básico",
   "home.column_settings.filter_regex": "Filtrar expresións regulares",
@@ -160,18 +158,21 @@
   "navigation_bar.blocks": "Usuarias bloqueadas",
   "navigation_bar.community_timeline": "Liña temporal local",
   "navigation_bar.direct": "Mensaxes directas",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Dominios agochados",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favoritas",
   "navigation_bar.follow_requests": "Peticións de seguimento",
   "navigation_bar.info": "Sobre esta instancia",
-  "navigation_bar.keyboard_shortcuts": "Atallos do teclado",
+  "navigation_bar.keyboard_shortcuts": "Atallos",
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Sair",
   "navigation_bar.mutes": "Usuarias acaladas",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Mensaxes fixadas",
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Liña temporal federada",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} marcou como favorito o seu estado",
   "notification.follow": "{name} está a seguila",
   "notification.mention": "{name} mencionoute",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Buscar",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "O borrador perderase se sae de Mastodon.",
   "upload_area.title": "Arrastre e solte para subir",
   "upload_button.label": "Engadir medios",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 361beebcc..343edec42 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -58,7 +58,6 @@
   "column_header.pin": "קיבוע",
   "column_header.show_settings": "הצגת העדפות",
   "column_header.unpin": "שחרור קיבוע",
-  "column_subheading.navigation": "ניווט",
   "column_subheading.settings": "אפשרויות",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות",
   "follow_request.authorize": "קבלה",
   "follow_request.reject": "דחיה",
-  "getting_started.appsshort": "יישומונים לניידים",
-  "getting_started.faq": "שאלות ותשובות",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "בואו נתחיל",
   "getting_started.open_source_notice": "מסטודון היא תוכנה חופשית (בקוד פתוח). ניתן לתרום או לדווח על בעיות בגיטהאב: {github}.",
-  "getting_started.userguide": "מדריך למשתמשים",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "למתקדמים",
   "home.column_settings.basic": "למתחילים",
   "home.column_settings.filter_regex": "סינון באמצעות ביטויים רגולריים (regular expressions)",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "חסימות",
   "navigation_bar.community_timeline": "ציר זמן מקומי",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "עריכת פרופיל",
   "navigation_bar.favourites": "חיבובים",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "יציאה",
   "navigation_bar.mutes": "השתקות",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "חיצרוצים מקובעים",
   "navigation_bar.preferences": "העדפות",
   "navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
+  "navigation_bar.security": "Security",
   "notification.favourite": "חצרוצך חובב על ידי {name}",
   "notification.follow": "{name} במעקב אחרייך",
   "notification.mention": "אוזכרת על ידי {name}",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
   "upload_area.title": "ניתן להעלות על ידי Drag & drop",
   "upload_button.label": "הוספת מדיה",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 93dc1c17d..d350cb6e1 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigacija",
   "column_subheading.settings": "Postavke",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio",
   "follow_request.authorize": "Autoriziraj",
   "follow_request.reject": "Odbij",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Počnimo",
   "getting_started.open_source_notice": "Mastodon je softver otvorenog koda. Možeš pridonijeti ili prijaviti probleme na GitHubu  {github}.",
-  "getting_started.userguide": "Upute za korištenje",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Napredno",
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.filter_regex": "Filtriraj s regularnim izrazima",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blokirani korisnici",
   "navigation_bar.community_timeline": "Lokalni timeline",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Uredi profil",
   "navigation_bar.favourites": "Favoriti",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Odjavi se",
   "navigation_bar.mutes": "Utišani korisnici",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Postavke",
   "navigation_bar.public_timeline": "Federalni timeline",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} je lajkao tvoj status",
   "notification.follow": "{name} te sada slijedi",
   "notification.mention": "{name} te je spomenuo",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Povuci i spusti kako bi uploadao",
   "upload_button.label": "Dodaj media",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 158c0fe41..7164951bf 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Kitűz",
   "column_header.show_settings": "Beállítások mutatása",
   "column_header.unpin": "Kitűzés eltávolítása",
-  "column_subheading.navigation": "Navigáció",
   "column_subheading.settings": "Beállítások",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Jelenleg semmi nincs itt! Írj valamit publikusan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
   "follow_request.authorize": "Engedélyez",
   "follow_request.reject": "Visszautasít",
-  "getting_started.appsshort": "Applikációk",
-  "getting_started.faq": "GYIK",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Első lépések",
   "getting_started.open_source_notice": "Mastodon egy nyílt forráskódú szoftver. Hozzájárulás vagy problémák jelentése a GitHub-on {github}.",
-  "getting_started.userguide": "Használati Útmutató",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Fejlett",
   "home.column_settings.basic": "Alap",
   "home.column_settings.filter_regex": "Szűrje ki reguláris kifejezésekkel",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Tiltott felhasználók",
   "navigation_bar.community_timeline": "Helyi idővonal",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Profil szerkesztése",
   "navigation_bar.favourites": "Kedvencek",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listák",
   "navigation_bar.logout": "Kijelentkezés",
   "navigation_bar.mutes": "Némított felhasználók",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Kitűzött tülkök",
   "navigation_bar.preferences": "Beállítások",
   "navigation_bar.public_timeline": "Nyilvános időfolyam",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} kedvencnek jelölte az állapotod",
   "notification.follow": "{name} követ téged",
   "notification.mention": "{name} megemlített",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.",
   "upload_area.title": "Húzza ide a feltöltéshez",
   "upload_button.label": "Média hozzáadása",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 76b3a9c12..9f3885076 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Ամրացնել",
   "column_header.show_settings": "Ցուցադրել կարգավորումները",
   "column_header.unpin": "Հանել",
-  "column_subheading.navigation": "Նավարկություն",
   "column_subheading.settings": "Կարգավորումներ",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Այստեղ բան չկա՛։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգույցներից էակների՝ այն լցնելու համար։",
   "follow_request.authorize": "Վավերացնել",
   "follow_request.reject": "Մերժել",
-  "getting_started.appsshort": "Հավելվածներ",
-  "getting_started.faq": "ՀՏՀ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Ինչպես սկսել",
   "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {github}։",
-  "getting_started.userguide": "Ձեռնարկ",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Առաջադեմ",
   "home.column_settings.basic": "Հիմնական",
   "home.column_settings.filter_regex": "Զտել օրինաչափ արտահայտությամբ",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Արգելափակված օգտատերեր",
   "navigation_bar.community_timeline": "Տեղական հոսք",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Խմբագրել անձնական էջը",
   "navigation_bar.favourites": "Հավանածներ",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Ցանկեր",
   "navigation_bar.logout": "Դուրս գալ",
   "navigation_bar.mutes": "Լռեցրած օգտատերեր",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Ամրացված թթեր",
   "navigation_bar.preferences": "Նախապատվություններ",
   "navigation_bar.public_timeline": "Դաշնային հոսք",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} հավանեց թութդ",
   "notification.follow": "{name} սկսեց հետեւել քեզ",
   "notification.mention": "{name} նշեց քեզ",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
   "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
   "upload_button.label": "Ավելացնել մեդիա",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 00240530d..9683e69a7 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Sematkan",
   "column_header.show_settings": "Tampilkan pengaturan",
   "column_header.unpin": "Lepaskan",
-  "column_subheading.navigation": "Navigasi",
   "column_subheading.settings": "Pengaturan",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini",
   "follow_request.authorize": "Izinkan",
   "follow_request.reject": "Tolak",
-  "getting_started.appsshort": "Aplikasi",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Mulai",
   "getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {github}.",
-  "getting_started.userguide": "Panduan Pengguna",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Tingkat Lanjut",
   "home.column_settings.basic": "Dasar",
   "home.column_settings.filter_regex": "Saring dengan regular expressions",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Pengguna diblokir",
   "navigation_bar.community_timeline": "Linimasa lokal",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Ubah profil",
   "navigation_bar.favourites": "Favorit",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Keluar",
   "navigation_bar.mutes": "Pengguna dibisukan",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Pengaturan",
   "navigation_bar.public_timeline": "Linimasa gabungan",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} menyukai status anda",
   "notification.follow": "{name} mengikuti anda",
   "notification.mention": "{name} mentioned you",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
   "upload_area.title": "Seret & lepaskan untuk mengunggah",
   "upload_button.label": "Tambahkan media",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index d20ee0f62..d63225783 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Settings",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.",
   "follow_request.authorize": "Yurizar",
   "follow_request.reject": "Refuzar",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Debuto",
   "getting_started.open_source_notice": "Mastodon esas programaro kun apertita kodexo. Tu povas kontributar o signalar problemi en GitHub ye {github}.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Komplexa",
   "home.column_settings.basic": "Simpla",
   "home.column_settings.filter_regex": "Ekfiltrar per reguloza expresuri",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blokusita uzeri",
   "navigation_bar.community_timeline": "Lokala tempolineo",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Modifikar profilo",
   "navigation_bar.favourites": "Favorati",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Ekirar",
   "navigation_bar.mutes": "Celita uzeri",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Preferi",
   "navigation_bar.public_timeline": "Federata tempolineo",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favorizis tua mesajo",
   "notification.follow": "{name} sequeskis tu",
   "notification.mention": "{name} mencionis tu",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Tranar faligar por kargar",
   "upload_button.label": "Adjuntar kontenajo",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index cc0551b14..87ff78469 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fissa in cima",
   "column_header.show_settings": "Mostra impostazioni",
   "column_header.unpin": "Non fissare in cima",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Impostazioni",
   "compose_form.direct_message_warning": "Questo toot sarà mandato solo a tutti gli utenti menzionati.",
   "compose_form.direct_message_warning_learn_more": "Per saperne di piu'",
@@ -112,11 +111,10 @@
   "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio",
   "follow_request.authorize": "Autorizza",
   "follow_request.reject": "Rifiuta",
-  "getting_started.appsshort": "App",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Come iniziare",
   "getting_started.open_source_notice": "Mastodon è un software open source. Puoi contribuire o segnalare errori su GitHub all'indirizzo {github}.",
-  "getting_started.userguide": "Manuale utente",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avanzato",
   "home.column_settings.basic": "Semplice",
   "home.column_settings.filter_regex": "Filtra con espressioni regolari",
@@ -127,12 +125,12 @@
   "keyboard_shortcuts.boost": "per condividere",
   "keyboard_shortcuts.column": "per portare il focus su uno status in una delle colonne",
   "keyboard_shortcuts.compose": "per portare il focus nell'area di composizione",
-  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.description": "Descrizione",
   "keyboard_shortcuts.down": "per spostarsi in basso nella lista",
-  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.enter": "per aprire lo status",
   "keyboard_shortcuts.favourite": "per segnare come apprezzato",
-  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
-  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.heading": "Tasti di scelta rapida",
+  "keyboard_shortcuts.hotkey": "Tasto di scelta rapida",
   "keyboard_shortcuts.legend": "per mostrare questa spiegazione",
   "keyboard_shortcuts.mention": "per menzionare l'autore",
   "keyboard_shortcuts.reply": "per rispondere",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Utenti bloccati",
   "navigation_bar.community_timeline": "Timeline locale",
   "navigation_bar.direct": "Messaggi diretti",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Domini nascosti",
   "navigation_bar.edit_profile": "Modifica profilo",
   "navigation_bar.favourites": "Apprezzati",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Liste",
   "navigation_bar.logout": "Esci",
   "navigation_bar.mutes": "Utenti silenziati",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Toot fissati in cima",
   "navigation_bar.preferences": "Impostazioni",
   "navigation_bar.public_timeline": "Timeline federata",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} ha apprezzato il tuo post",
   "notification.follow": "{name} ha iniziato a seguirti",
   "notification.mention": "{name} ti ha menzionato",
@@ -234,10 +235,10 @@
   "report.target": "Invio la segnalazione {target}",
   "search.placeholder": "Cerca",
   "search_popout.search_format": "Formato di ricerca avanzato",
-  "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.full_text": "Testo semplice per trovare gli status che hai scritto, segnato come apprezzati, condiviso o in cui sei stato citato, e inoltre i nomi utente, nomi visualizzati e hashtag che lo contengono.",
   "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.text": "Testo semplice per trovare nomi visualizzati, nomi utente e hashtag che lo contengono",
   "search_popout.tips.user": "utente",
   "search_results.accounts": "Gente",
   "search_results.hashtags": "Hashtag",
@@ -261,7 +262,7 @@
   "status.pin": "Fissa in cima sul profilo",
   "status.pinned": "Toot fissato in cima",
   "status.reblog": "Condividi",
-  "status.reblog_private": "Boost to original audience",
+  "status.reblog_private": "Condividi con i destinatari iniziali",
   "status.reblogged_by": "{name} ha condiviso",
   "status.reply": "Rispondi",
   "status.replyAll": "Rispondi alla conversazione",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Cerca",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
   "upload_area.title": "Trascina per caricare",
   "upload_button.label": "Aggiungi file multimediale",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 8de92db16..fc1a314e8 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -115,11 +115,10 @@
   "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のインスタンスのユーザーをフォローしたりしていっぱいにしましょう",
   "follow_request.authorize": "許可",
   "follow_request.reject": "拒否",
-  "getting_started.appsshort": "アプリ",
-  "getting_started.faq": "よくある質問",
+  "getting_started.documentation": "ドキュメント",
   "getting_started.heading": "スタート",
   "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub({github})から開発に参加したり、問題を報告したりできます。",
-  "getting_started.userguide": "ユーザーガイド",
+  "getting_started.terms": "プライバシーポリシー",
   "home.column_settings.advanced": "高度な設定",
   "home.column_settings.basic": "基本設定",
   "home.column_settings.filter_regex": "正規表現でフィルター",
@@ -163,19 +162,22 @@
   "navigation_bar.blocks": "ブロックしたユーザー",
   "navigation_bar.community_timeline": "ローカルタイムライン",
   "navigation_bar.direct": "ダイレクトメッセージ",
+  "navigation_bar.discover": "見つける",
   "navigation_bar.domain_blocks": "非表示にしたドメイン",
   "navigation_bar.edit_profile": "プロフィールを編集",
   "navigation_bar.favourites": "お気に入り",
   "navigation_bar.follow_requests": "フォローリクエスト",
   "navigation_bar.info": "このインスタンスについて",
-  "navigation_bar.keyboard_shortcuts": "キーボードショートカット",
+  "navigation_bar.keyboard_shortcuts": "ホットキー",
   "navigation_bar.lists": "リスト",
   "navigation_bar.logout": "ログアウト",
   "navigation_bar.mutes": "ミュートしたユーザー",
+  "navigation_bar.personal": "個人用",
   "navigation_bar.pins": "固定したトゥート",
   "navigation_bar.preferences": "ユーザー設定",
   "navigation_bar.public_timeline": "連合タイムライン",
   "navigation_bar.misc": "その他",
+  "navigation_bar.security": "セキュリティ",
   "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
   "notification.follow": "{name}さんにフォローされました",
   "notification.mention": "{name}さんがあなたに返信しました",
@@ -284,8 +286,11 @@
   "tabs_bar.local_timeline": "ローカル",
   "tabs_bar.notifications": "通知",
   "tabs_bar.search": "検索",
-  "timeline.media": "Media",
+  "timeline.media": "メディア",
   "timeline.posts": "投稿",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {人} other {人}} がトゥート",
+  "trends.header": "トレンドタグ",
+  "trends.refresh": "更新",
   "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
   "upload_area.title": "ドラッグ&ドロップでアップロード",
   "upload_button.label": "メディアを追加",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index edcf5f817..65c6319b4 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -58,7 +58,6 @@
   "column_header.pin": "고정하기",
   "column_header.show_settings": "설정 보이기",
   "column_header.unpin": "고정 해제",
-  "column_subheading.navigation": "내비게이션",
   "column_subheading.settings": "설정",
   "compose_form.direct_message_warning": "이 툿은 멘션 된 유저들에게만 보여집니다.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 인스턴스의 유저를 팔로우 해서 채워보세요",
   "follow_request.authorize": "허가",
   "follow_request.reject": "거부",
-  "getting_started.appsshort": "애플리케이션",
-  "getting_started.faq": "자주 있는 질문",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "시작",
   "getting_started.open_source_notice": "Mastodon은 오픈 소스 소프트웨어입니다. 누구나 GitHub({github})에서 개발에 참여하거나, 문제를 보고할 수 있습니다.",
-  "getting_started.userguide": "사용자 가이드",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "고급 사용자용",
   "home.column_settings.basic": "기본 설정",
   "home.column_settings.filter_regex": "정규 표현식으로 필터링",
@@ -160,18 +158,21 @@
   "navigation_bar.blocks": "차단한 사용자",
   "navigation_bar.community_timeline": "로컬 타임라인",
   "navigation_bar.direct": "다이렉트 메시지",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "숨겨진 도메인",
   "navigation_bar.edit_profile": "프로필 편집",
   "navigation_bar.favourites": "즐겨찾기",
   "navigation_bar.follow_requests": "팔로우 요청",
   "navigation_bar.info": "이 인스턴스에 대해서",
-  "navigation_bar.keyboard_shortcuts": "키보드 단축키",
+  "navigation_bar.keyboard_shortcuts": "단축키",
   "navigation_bar.lists": "리스트",
   "navigation_bar.logout": "로그아웃",
   "navigation_bar.mutes": "뮤트 중인 사용자",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "고정된 툿",
   "navigation_bar.preferences": "사용자 설정",
   "navigation_bar.public_timeline": "연합 타임라인",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name}님이 즐겨찾기 했습니다",
   "notification.follow": "{name}님이 나를 팔로우 했습니다",
   "notification.mention": "{name}님이 답글을 보냈습니다",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "검색",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
   "upload_area.title": "드래그 & 드롭으로 업로드",
   "upload_button.label": "미디어 추가",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index ee4d9de47..664cebac0 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Vastmaken",
   "column_header.show_settings": "Instellingen tonen",
   "column_header.unpin": "Losmaken",
-  "column_subheading.navigation": "Navigatie",
   "column_subheading.settings": "Instellingen",
   "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd. Echter, de beheerders en moderatoren van jouw en de ontvangende Mastodonserver(s) kunnen dit bericht mogelijk wel bekijken.",
   "compose_form.direct_message_warning_learn_more": "Meer leren",
@@ -112,11 +111,10 @@
   "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen",
   "follow_request.authorize": "Goedkeuren",
   "follow_request.reject": "Afkeuren",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentatie",
   "getting_started.heading": "Aan de slag",
   "getting_started.open_source_notice": "Mastodon is vrije software. Je kunt bijdragen of problemen melden op GitHub via {github}.",
-  "getting_started.userguide": "Gebruikersgids",
+  "getting_started.terms": "Voorwaarden",
   "home.column_settings.advanced": "Geavanceerd",
   "home.column_settings.basic": "Algemeen",
   "home.column_settings.filter_regex": "Wegfilteren met reguliere expressies",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Geblokkeerde gebruikers",
   "navigation_bar.community_timeline": "Lokale tijdlijn",
   "navigation_bar.direct": "Directe berichten",
+  "navigation_bar.discover": "Ontdekken",
   "navigation_bar.domain_blocks": "Verborgen domeinen",
   "navigation_bar.edit_profile": "Profiel bewerken",
   "navigation_bar.favourites": "Favorieten",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lijsten",
   "navigation_bar.logout": "Afmelden",
   "navigation_bar.mutes": "Genegeerde gebruikers",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Vastgezette toots",
   "navigation_bar.preferences": "Instellingen",
   "navigation_bar.public_timeline": "Globale tijdlijn",
+  "navigation_bar.security": "Beveiliging",
   "notification.favourite": "{name} markeerde jouw toot als favoriet",
   "notification.follow": "{name} volgt jou nu",
   "notification.mention": "{name} vermeldde jou",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Zoeken",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
+  "trends.header": "Trends",
+  "trends.refresh": "Vernieuwen",
   "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
   "upload_area.title": "Hierin slepen om te uploaden",
   "upload_button.label": "Media toevoegen",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index d8de2ad4b..8aaf4de42 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fest",
   "column_header.show_settings": "Vis innstillinger",
   "column_header.unpin": "Løsne",
-  "column_subheading.navigation": "Navigasjon",
   "column_subheading.settings": "Innstillinger",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp",
   "follow_request.authorize": "Autorisér",
   "follow_request.reject": "Avvis",
-  "getting_started.appsshort": "Apper",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Kom i gang",
   "getting_started.open_source_notice": "Mastodon er fri programvare. Du kan bidra eller rapportere problemer på GitHub på {github}.",
-  "getting_started.userguide": "Brukerguide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avansert",
   "home.column_settings.basic": "Enkel",
   "home.column_settings.filter_regex": "Filtrér med regulære uttrykk",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blokkerte brukere",
   "navigation_bar.community_timeline": "Lokal tidslinje",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Rediger profil",
   "navigation_bar.favourites": "Favoritter",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lister",
   "navigation_bar.logout": "Logg ut",
   "navigation_bar.mutes": "Dempede brukere",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Festa tuter",
   "navigation_bar.preferences": "Preferanser",
   "navigation_bar.public_timeline": "Felles tidslinje",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} likte din status",
   "notification.follow": "{name} fulgte deg",
   "notification.mention": "{name} nevnte deg",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
   "upload_area.title": "Dra og slipp for å laste opp",
   "upload_button.label": "Legg til media",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 3ad5b3d95..4056ec2db 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Penjar",
   "column_header.show_settings": "Mostrar los paramètres",
   "column_header.unpin": "Despenjar",
-  "column_subheading.navigation": "Navigacion",
   "column_subheading.settings": "Paramètres",
   "compose_form.direct_message_warning": "Sols los mencionats poiràn veire aqueste tut.",
   "compose_form.direct_message_warning_learn_more": "Ne saber mai",
@@ -112,11 +111,10 @@
   "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autras instàncias per garnir lo flux public",
   "follow_request.authorize": "Acceptar",
   "follow_request.reject": "Regetar",
-  "getting_started.appsshort": "Aplicacions",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Per començar",
   "getting_started.open_source_notice": "Mastodon es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {github} sus GitHub.",
-  "getting_started.userguide": "Guida d’utilizacion",
+  "getting_started.terms": "Condicions d’utilizacion",
   "home.column_settings.advanced": "Avançat",
   "home.column_settings.basic": "Basic",
   "home.column_settings.filter_regex": "Filtrar amb una expression racionala",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Personas blocadas",
   "navigation_bar.community_timeline": "Flux public local",
   "navigation_bar.direct": "Messatges dirèctes",
+  "navigation_bar.discover": "Descobrir",
   "navigation_bar.domain_blocks": "Domenis resconduts",
   "navigation_bar.edit_profile": "Modificar lo perfil",
   "navigation_bar.favourites": "Favorits",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Desconnexion",
   "navigation_bar.mutes": "Personas rescondudas",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Tuts penjats",
   "navigation_bar.preferences": "Preferéncias",
   "navigation_bar.public_timeline": "Flux public global",
+  "navigation_bar.security": "Seguretat",
   "notification.favourite": "{name} a ajustat a sos favorits",
   "notification.follow": "{name} vos sèc",
   "notification.mention": "{name} vos a mencionat",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Recèrcas",
   "timeline.media": "Media",
   "timeline.posts": "Tuts",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
+  "trends.header": "Tendéncia actuala",
+  "trends.refresh": "Actualizar",
   "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
   "upload_area.title": "Lisatz e depausatz per mandar",
   "upload_button.label": "Ajustar un mèdia",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index cca48eaf6..b62d5b065 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -115,11 +115,10 @@
   "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych instancji, aby to wyświetlić",
   "follow_request.authorize": "Autoryzuj",
   "follow_request.reject": "Odrzuć",
-  "getting_started.appsshort": "Aplikacje",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Dokumentacja",
   "getting_started.heading": "Rozpocznij",
   "getting_started.open_source_notice": "Mastodon jest oprogramowaniem o otwartym źródle. Możesz pomóc w rozwoju lub zgłaszać błędy na GitHubie tutaj: {github}.",
-  "getting_started.userguide": "Podręcznik użytkownika",
+  "getting_started.terms": "Zasady użytkowania",
   "home.column_settings.advanced": "Zaawansowane",
   "home.column_settings.basic": "Podstawowe",
   "home.column_settings.filter_regex": "Filtruj z użyciem wyrażeń regularnych",
@@ -163,6 +162,7 @@
   "navigation_bar.blocks": "Zablokowani użytkownicy",
   "navigation_bar.community_timeline": "Lokalna oś czasu",
   "navigation_bar.direct": "Wiadomości bezpośrednie",
+  "navigation_bar.discover": "Odkrywaj",
   "navigation_bar.domain_blocks": "Ukryte domeny",
   "navigation_bar.edit_profile": "Edytuj profil",
   "navigation_bar.favourites": "Ulubione",
@@ -173,9 +173,11 @@
   "navigation_bar.logout": "Wyloguj",
   "navigation_bar.misc": "Różne",
   "navigation_bar.mutes": "Wyciszeni użytkownicy",
+  "navigation_bar.personal": "Osobiste",
   "navigation_bar.pins": "Przypięte wpisy",
   "navigation_bar.preferences": "Preferencje",
   "navigation_bar.public_timeline": "Globalna oś czasu",
+  "navigation_bar.security": "Bezpieczeństwo",
   "notification.favourite": "{name} dodał Twój wpis do ulubionych",
   "notification.follow": "{name} zaczął Cię śledzić",
   "notification.mention": "{name} wspomniał o tobie",
@@ -286,6 +288,9 @@
   "tabs_bar.search": "Szukaj",
   "timeline.media": "Zawartość multimedialna",
   "timeline.posts": "Wpisy",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
+  "trends.header": "Na czasie",
+  "trends.refresh": "Odśwież",
   "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
   "upload_area.title": "Przeciągnij i upuść aby wysłać",
   "upload_button.label": "Dodaj zawartość multimedialną",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index c8441df29..fc07266a8 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Mostrar configurações",
   "column_header.unpin": "Desafixar",
-  "column_subheading.navigation": "Navegação",
   "column_subheading.settings": "Configurações",
   "compose_form.direct_message_warning": "Este toot só será enviado aos usuários mencionados. A mensagem não é encriptada e será armazenada nos servidores dos usuários mencionados.",
   "compose_form.direct_message_warning_learn_more": "Saber mais",
@@ -112,11 +111,10 @@
   "empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rejeitar",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Primeiros passos",
   "getting_started.open_source_notice": "Mastodon é um software de código aberto. Você pode contribuir ou reportar problemas na página do GitHub do projeto: {github}.",
-  "getting_started.userguide": "Guia de usuário",
+  "getting_started.terms": "Termos de serviço",
   "home.column_settings.advanced": "Avançado",
   "home.column_settings.basic": "Básico",
   "home.column_settings.filter_regex": "Filtrar com uma expressão regular",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Usuários bloqueados",
   "navigation_bar.community_timeline": "Local",
   "navigation_bar.direct": "Mensagens diretas",
+  "navigation_bar.discover": "Descobrir",
   "navigation_bar.domain_blocks": "Domínios escondidos",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favoritos",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Sair",
   "navigation_bar.mutes": "Usuários silenciados",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Postagens fixadas",
   "navigation_bar.preferences": "Preferências",
   "navigation_bar.public_timeline": "Global",
+  "navigation_bar.security": "Segurança",
   "notification.favourite": "{name} adicionou a sua postagem aos favoritos",
   "notification.follow": "{name} te seguiu",
   "notification.mention": "{name} te mencionou",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Buscar",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre",
+  "trends.header": "Hashtags do momento",
+  "trends.refresh": "Atualizar",
   "ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
   "upload_area.title": "Arraste e solte para enviar",
   "upload_button.label": "Adicionar mídia",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index 18d66be7f..b1e760954 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fixar",
   "column_header.show_settings": "Mostrar preferências",
   "column_header.unpin": "Desafixar",
-  "column_subheading.navigation": "Navegação",
   "column_subheading.settings": "Preferências",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rejeitar",
-  "getting_started.appsshort": "Aplicações",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Primeiros passos",
   "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {github}.",
-  "getting_started.userguide": "Guia do utilizador",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avançado",
   "home.column_settings.basic": "Básico",
   "home.column_settings.filter_regex": "Filtrar com uma expressão regular",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Utilizadores bloqueados",
   "navigation_bar.community_timeline": "Local",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favoritos",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listas",
   "navigation_bar.logout": "Sair",
   "navigation_bar.mutes": "Utilizadores silenciados",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Posts fixos",
   "navigation_bar.preferences": "Preferências",
   "navigation_bar.public_timeline": "Global",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} adicionou o teu post aos favoritos",
   "notification.follow": "{name} seguiu-te",
   "notification.mention": "{name} mencionou-te",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "O teu rascunho vai ser perdido se abandonares o Mastodon.",
   "upload_area.title": "Arraste e solte para enviar",
   "upload_button.label": "Adicionar media",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 577ec9921..48bcbf0fb 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Закрепить",
   "column_header.show_settings": "Показать настройки",
   "column_header.unpin": "Открепить",
-  "column_subheading.navigation": "Навигация",
   "column_subheading.settings": "Настройки",
   "compose_form.direct_message_warning": "Этот статус будет виден только упомянутым пользователям.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
   "follow_request.authorize": "Авторизовать",
   "follow_request.reject": "Отказать",
-  "getting_started.appsshort": "Приложения",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Добро пожаловать",
   "getting_started.open_source_notice": "Mastodon - программа с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.",
-  "getting_started.userguide": "Руководство",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Дополнительные",
   "home.column_settings.basic": "Основные",
   "home.column_settings.filter_regex": "Отфильтровать регулярным выражением",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Список блокировки",
   "navigation_bar.community_timeline": "Локальная лента",
   "navigation_bar.direct": "Личные сообщения",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Скрытые домены",
   "navigation_bar.edit_profile": "Изменить профиль",
   "navigation_bar.favourites": "Понравившееся",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Списки",
   "navigation_bar.logout": "Выйти",
   "navigation_bar.mutes": "Список глушения",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Закреплённые посты",
   "navigation_bar.preferences": "Опции",
   "navigation_bar.public_timeline": "Глобальная лента",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} понравился Ваш статус",
   "notification.follow": "{name} подписался(-лась) на Вас",
   "notification.mention": "{name} упомянул(а) Вас",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Поиск",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
   "upload_area.title": "Перетащите сюда, чтобы загрузить",
   "upload_button.label": "Добавить медиаконтент",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index b85ba1318..416816c60 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -58,10 +58,9 @@
   "column_header.pin": "Pripnúť",
   "column_header.show_settings": "Ukáž nastavenia",
   "column_header.unpin": "Odopnúť",
-  "column_subheading.navigation": "Navigácia",
   "column_subheading.settings": "Nastavenia",
   "compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi. Ber ale na vedomie že správci tvojej a všetkých iných zahrnutých instancií majú možnosť skontrolovať túto správu.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.direct_message_warning_learn_more": "Zistiť viac",
   "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.",
   "compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
   "compose_form.lock_disclaimer.lock": "zamknutý",
@@ -112,11 +111,10 @@
   "empty_column.public": "Ešte tu nič nie je. Napíšte niečo verejne alebo začnite sledovať používateľov z iných Mastodon serverov aby tu niečo pribudlo",
   "follow_request.authorize": "Povoľ prístup",
   "follow_request.reject": "Odmietni",
-  "getting_started.appsshort": "Aplikácie",
-  "getting_started.faq": "Časté otázky",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Začni tu",
   "getting_started.open_source_notice": "Mastodon má otvorený kód. Nahlásiť chyby, alebo prispieť môžeš na GitHube v {github}.",
-  "getting_started.userguide": "Používateľská príručka",
+  "getting_started.terms": "Podmienky prevozu",
   "home.column_settings.advanced": "Pokročilé",
   "home.column_settings.basic": "Základné",
   "home.column_settings.filter_regex": "Filtrovať použitím regulárnych výrazov",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blokovaní užívatelia",
   "navigation_bar.community_timeline": "Lokálna časová os",
   "navigation_bar.direct": "Súkromné správy",
+  "navigation_bar.discover": "Objavuj",
   "navigation_bar.domain_blocks": "Skryté domény",
   "navigation_bar.edit_profile": "Upraviť profil",
   "navigation_bar.favourites": "Obľúbené",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Zoznamy",
   "navigation_bar.logout": "Odhlásiť",
   "navigation_bar.mutes": "Ignorovaní užívatelia",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pripnuté tooty",
   "navigation_bar.preferences": "Voľby",
   "navigation_bar.public_timeline": "Federovaná časová os",
+  "navigation_bar.security": "Zabezbečenie",
   "notification.favourite": "{name} sa páči tvoj status",
   "notification.follow": "{name} ťa začal/a následovať",
   "notification.mention": "{name} ťa spomenul/a",
@@ -187,7 +188,7 @@
   "notifications.column_settings.reblog": "Boosty:",
   "notifications.column_settings.show": "Zobraziť v stĺpci",
   "notifications.column_settings.sound": "Prehrať zvuk",
-  "notifications.group": "{count} notifications",
+  "notifications.group": "{count} oznámenia",
   "onboarding.done": "Koniec",
   "onboarding.next": "Ďalej",
   "onboarding.page_five.public_timelines": "Lokálna časová os zobrazuje verejné správy od všetkých na {domain}. Federovaná časová os zobrazuje verejné správy od všetkých tých, čo následujú užívatrľov {domain} z iných serverov. Tieto sú takzvané Verejné Časové Osi, výborná možnosť ako nájsť a spoznať nových ľudí.",
@@ -281,7 +282,10 @@
   "tabs_bar.notifications": "Notifikácie",
   "tabs_bar.search": "Hľadaj",
   "timeline.media": "Media",
-  "timeline.posts": "Toots",
+  "timeline.posts": "Príspevky",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Čo máte rozpísané sa stratí, ak opustíte Mastodon.",
   "upload_area.title": "Ťahaj a pusti pre nahratie",
   "upload_button.label": "Pridať médiá",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 3cc7389ae..3caa26f50 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pripni",
   "column_header.show_settings": "Prikaži nastavitve",
   "column_header.unpin": "Odpni",
-  "column_subheading.navigation": "Navigacija",
   "column_subheading.settings": "Nastavitve",
   "compose_form.direct_message_warning": "Ta tut bo viden le vsem omenjenim uporabnikom.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih vozlišč",
   "follow_request.authorize": "Odobri",
   "follow_request.reject": "Zavrni",
-  "getting_started.appsshort": "Aplikacije",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Prvi koraki",
   "getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. V GitHubu na {github} lahko prispevate ali poročate o napakah.",
-  "getting_started.userguide": "Navodila za uporabo",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Napredno",
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.filter_regex": "Filtrirajte z navadnimi izrazi",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.community_timeline": "Local timeline",
   "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",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Logout",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pripeti tuti",
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Poišči",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.",
   "upload_area.title": "Povlecite in spustite za pošiljanje",
   "upload_button.label": "Dodaj medij",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index e2b55c179..45971e9d4 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Prikači",
   "column_header.show_settings": "Prikaži postavke",
   "column_header.unpin": "Otkači",
-  "column_subheading.navigation": "Navigacija",
   "column_subheading.settings": "Postavke",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "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",
   "follow_request.authorize": "Odobri",
   "follow_request.reject": "Odbij",
-  "getting_started.appsshort": "Aplikacije",
-  "getting_started.faq": "ČPP",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Da počnete",
   "getting_started.open_source_notice": "Mastodont je softver otvorenog koda. Možete mu doprineti ili prijaviti probleme preko GitHub-a na {github}.",
-  "getting_started.userguide": "Korisničko uputstvo",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Napredno",
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.filter_regex": "Filtriraj regularnim izrazima",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blokirani korisnici",
   "navigation_bar.community_timeline": "Lokalna lajna",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Izmeni profil",
   "navigation_bar.favourites": "Omiljeni",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Liste",
   "navigation_bar.logout": "Odjava",
   "navigation_bar.mutes": "Ućutkani korisnici",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Prikačeni tutovi",
   "navigation_bar.preferences": "Podešavanja",
   "navigation_bar.public_timeline": "Federisana lajna",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} je stavio Vaš status kao omiljeni",
   "notification.follow": "{name} Vas je zapratio",
   "notification.mention": "{name} Vas je pomenuo",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.",
   "upload_area.title": "Prevucite ovde da otpremite",
   "upload_button.label": "Dodaj multimediju",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 09efb985c..a9e7aca82 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Прикачи",
   "column_header.show_settings": "Прикажи поставке",
   "column_header.unpin": "Откачи",
-  "column_subheading.navigation": "Навигација",
   "column_subheading.settings": "Поставке",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину",
   "follow_request.authorize": "Одобри",
   "follow_request.reject": "Одбиј",
-  "getting_started.appsshort": "Апликације",
-  "getting_started.faq": "ЧПП",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Да почнете",
   "getting_started.open_source_notice": "Мастoдонт је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко GitHub-а на {github}.",
-  "getting_started.userguide": "Корисничко упутство",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Напредно",
   "home.column_settings.basic": "Основно",
   "home.column_settings.filter_regex": "Филтрирај регуларним изразима",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Блокирани корисници",
   "navigation_bar.community_timeline": "Локална лајна",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Измени профил",
   "navigation_bar.favourites": "Омиљени",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Листе",
   "navigation_bar.logout": "Одјава",
   "navigation_bar.mutes": "Ућуткани корисници",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Прикачени тутови",
   "navigation_bar.preferences": "Подешавања",
   "navigation_bar.public_timeline": "Федерисана лајна",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} је ставио Ваш статус као омиљени",
   "notification.follow": "{name} Вас је запратио",
   "notification.mention": "{name} Вас је поменуо",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
   "upload_area.title": "Превуците овде да отпремите",
   "upload_button.label": "Додај мултимедију",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index d2af13bfb..11bd92a87 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Fäst",
   "column_header.show_settings": "Visa inställningar",
   "column_header.unpin": "Ångra fäst",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Inställningar",
   "compose_form.direct_message_warning": "Denna toot kommer endast att skickas nämnda nämnda användare.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det",
   "follow_request.authorize": "Godkänn",
   "follow_request.reject": "Avvisa",
-  "getting_started.appsshort": "Appar",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Kom igång",
   "getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.",
-  "getting_started.userguide": "Användarguide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Avancerad",
   "home.column_settings.basic": "Grundläggande",
   "home.column_settings.filter_regex": "Filtrera ut med regelbundna uttryck",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blockerade användare",
   "navigation_bar.community_timeline": "Lokal tidslinje",
   "navigation_bar.direct": "Direktmeddelanden",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Dolda domäner",
   "navigation_bar.edit_profile": "Redigera profil",
   "navigation_bar.favourites": "Favoriter",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Listor",
   "navigation_bar.logout": "Logga ut",
   "navigation_bar.mutes": "Tystade användare",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Nålade inlägg (toots)",
   "navigation_bar.preferences": "Inställningar",
   "navigation_bar.public_timeline": "Förenad tidslinje",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favoriserade din status",
   "notification.follow": "{name} följer dig",
   "notification.mention": "{name} nämnde dig",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Sök",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.",
   "upload_area.title": "Dra & släpp för att ladda upp",
   "upload_button.label": "Lägg till media",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index ce0d4b9cc..b82ce1f6c 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Settings",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Getting started",
   "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Advanced",
   "home.column_settings.basic": "Basic",
   "home.column_settings.filter_regex": "Filter out by regular expressions",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.community_timeline": "Local timeline",
   "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",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Logout",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index f0ba25ec3..229189b56 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Settings",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
   "follow_request.authorize": "Authorize",
   "follow_request.reject": "Reject",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Getting started",
   "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Advanced",
   "home.column_settings.basic": "Basic",
   "home.column_settings.filter_regex": "Filter out by regular expressions",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Blocked users",
   "navigation_bar.community_timeline": "Local timeline",
   "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",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Logout",
   "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 89f00fd3b..30409a803 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Navigasyon",
   "column_subheading.settings": "Ayarlar",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Burada hiçbir gönderi yok! Herkese açık bir şeyler yazın, veya diğer sunucudaki insanları takip ederek bu alanın dolmasını sağlayın",
   "follow_request.authorize": "Yetkilendir",
   "follow_request.reject": "Reddet",
-  "getting_started.appsshort": "Apps",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Başlangıç",
   "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.",
-  "getting_started.userguide": "User Guide",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Gelişmiş",
   "home.column_settings.basic": "Temel",
   "home.column_settings.filter_regex": "Regex kullanarak filtrele",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Engellenen kullanıcılar",
   "navigation_bar.community_timeline": "Yerel zaman tüneli",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Profili düzenle",
   "navigation_bar.favourites": "Favoriler",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Çıkış",
   "navigation_bar.mutes": "Sessize alınmış kullanıcılar",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Tercihler",
   "navigation_bar.public_timeline": "Federe zaman tüneli",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} senin durumunu favorilere ekledi",
   "notification.follow": "{name} seni takip ediyor",
   "notification.mention": "{name} mentioned you",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Upload için sürükle bırak yapınız",
   "upload_button.label": "Görsel ekle",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index e81476541..5c6394b61 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -58,7 +58,6 @@
   "column_header.pin": "Pin",
   "column_header.show_settings": "Show settings",
   "column_header.unpin": "Unpin",
-  "column_subheading.navigation": "Навігація",
   "column_subheading.settings": "Налаштування",
   "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку.",
   "follow_request.authorize": "Авторизувати",
   "follow_request.reject": "Відмовити",
-  "getting_started.appsshort": "Додатки",
-  "getting_started.faq": "FAQ",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "Ласкаво просимо",
   "getting_started.open_source_notice": "Mastodon - програма з відкритим вихідним кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.",
-  "getting_started.userguide": "Посібник",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "Додаткові",
   "home.column_settings.basic": "Основні",
   "home.column_settings.filter_regex": "Відфільтрувати регулярним виразом",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "Заблоковані користувачі",
   "navigation_bar.community_timeline": "Локальна стрічка",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "Hidden domains",
   "navigation_bar.edit_profile": "Редагувати профіль",
   "navigation_bar.favourites": "Вподобане",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "Lists",
   "navigation_bar.logout": "Вийти",
   "navigation_bar.mutes": "Заглушені користувачі",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "Pinned toots",
   "navigation_bar.preferences": "Налаштування",
   "navigation_bar.public_timeline": "Глобальна стрічка",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} сподобався ваш допис",
   "notification.follow": "{name} підписався(-лась) на Вас",
   "notification.mention": "{name} згадав(-ла) Вас",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Перетягніть сюди, щоб завантажити",
   "upload_button.label": "Додати медіаконтент",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index b67afd29f..854c9fcdd 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -58,7 +58,6 @@
   "column_header.pin": "固定",
   "column_header.show_settings": "显示设置",
   "column_header.unpin": "取消固定",
-  "column_subheading.navigation": "导航",
   "column_subheading.settings": "设置",
   "compose_form.direct_message_warning": "这条嘟文仅对所有被提及的用户可见。",
   "compose_form.direct_message_warning_learn_more": "了解详情",
@@ -112,11 +111,10 @@
   "empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户后,这里就会有嘟文出现了哦!",
   "follow_request.authorize": "同意",
   "follow_request.reject": "拒绝",
-  "getting_started.appsshort": "应用",
-  "getting_started.faq": "常见问题",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "开始使用",
   "getting_started.open_source_notice": "Mastodon 是一个开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。",
-  "getting_started.userguide": "用户指南",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "高级设置",
   "home.column_settings.basic": "基本设置",
   "home.column_settings.filter_regex": "使用正则表达式(regex)过滤",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "已屏蔽的用户",
   "navigation_bar.community_timeline": "本站时间轴",
   "navigation_bar.direct": "私信",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "已屏蔽的网站",
   "navigation_bar.edit_profile": "修改个人资料",
   "navigation_bar.favourites": "收藏的内容",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "列表",
   "navigation_bar.logout": "注销",
   "navigation_bar.mutes": "已隐藏的用户",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "置顶嘟文",
   "navigation_bar.preferences": "首选项",
   "navigation_bar.public_timeline": "跨站公共时间轴",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name} 收藏了你的嘟文",
   "notification.follow": "{name} 开始关注你",
   "notification.mention": "{name} 提及你",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "搜索",
   "timeline.media": "媒体",
   "timeline.posts": "嘟文",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
   "upload_area.title": "将文件拖放到此处开始上传",
   "upload_button.label": "上传媒体文件",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index cad53c69a..1fea2ced3 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -58,10 +58,9 @@
   "column_header.pin": "固定",
   "column_header.show_settings": "顯示設定",
   "column_header.unpin": "取下",
-  "column_subheading.navigation": "瀏覽",
   "column_subheading.settings": "設定",
   "compose_form.direct_message_warning": "這文章只有被提及的用戶才可以看到。",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.direct_message_warning_learn_more": "了解更多",
   "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。",
   "compose_form.lock_disclaimer": "你的用戶狀態為「{locked}」,任何人都能立即關注你,然後看到「只有關注者能看」的文章。",
   "compose_form.lock_disclaimer.lock": "公共",
@@ -94,7 +93,7 @@
   "emoji_button.food": "飲飲食食",
   "emoji_button.label": "加入表情符號",
   "emoji_button.nature": "自然",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "沒有表情符號!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "物品",
   "emoji_button.people": "人物",
   "emoji_button.recent": "常用",
@@ -112,11 +111,10 @@
   "empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。",
   "follow_request.authorize": "批准",
   "follow_request.reject": "拒絕",
-  "getting_started.appsshort": "手機應用",
-  "getting_started.faq": "常見問題",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "開始使用",
   "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub ({github}) 貢獻或者回報問題。",
-  "getting_started.userguide": "使用指南",
+  "getting_started.terms": "服務條款",
   "home.column_settings.advanced": "進階",
   "home.column_settings.basic": "基本",
   "home.column_settings.filter_regex": "使用正規表達式 (regular expression) 過濾",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "被你封鎖的用戶",
   "navigation_bar.community_timeline": "本站時間軸",
   "navigation_bar.direct": "個人訊息",
+  "navigation_bar.discover": "探索",
   "navigation_bar.domain_blocks": "隱藏的服務站",
   "navigation_bar.edit_profile": "修改個人資料",
   "navigation_bar.favourites": "最愛的內容",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "列表",
   "navigation_bar.logout": "登出",
   "navigation_bar.mutes": "被你靜音的用戶",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "置頂文章",
   "navigation_bar.preferences": "偏好設定",
   "navigation_bar.public_timeline": "跨站時間軸",
+  "navigation_bar.security": "安全",
   "notification.favourite": "{name} 收藏了你的文章",
   "notification.follow": "{name} 開始關注你",
   "notification.mention": "{name} 提及你",
@@ -187,20 +188,20 @@
   "notifications.column_settings.reblog": "轉推你的文章:",
   "notifications.column_settings.show": "在通知欄顯示",
   "notifications.column_settings.sound": "播放音效",
-  "notifications.group": "{count} notifications",
+  "notifications.group": "{count} 條通知",
   "onboarding.done": "開始使用",
   "onboarding.next": "繼續",
   "onboarding.page_five.public_timelines": "「本站時間軸」顯示在 {domain} 各用戶的公開文章。「跨站時間軸」顯示在 {domain} 各人關注的所有用戶(包括其他服務站)的公開文章。這些都是「公共時間軸」,是認識新朋友的好地方。",
-  "onboarding.page_four.home": "「主頁」顯示你所關注用戶的文章",
+  "onboarding.page_four.home": "「主頁」顯示你所關注用戶的文章。",
   "onboarding.page_four.notifications": "「通知」欄顯示你和其他人的互動。",
-  "onboarding.page_one.federation": "Mastodon(萬象社交)是由一批獨立網站組成的龐大網絡,我們將這些獨立又互連網站稱為「服務站」(instance)",
+  "onboarding.page_one.federation": "Mastodon(萬象社交)是由一批獨立網站組成的龐大網絡,我們將這些獨立又互連網站稱為「服務站」(instance) 。",
   "onboarding.page_one.full_handle": "你的帳號全名",
-  "onboarding.page_one.handle_hint": "朋友可以從這個帳號全名找到你",
-  "onboarding.page_one.welcome": "歡迎使用 Mastodon(萬象社交)",
-  "onboarding.page_six.admin": "你服務站的管理員是{admin}",
+  "onboarding.page_one.handle_hint": "朋友可以從這個帳號全名找到你。",
+  "onboarding.page_one.welcome": "歡迎使用 Mastodon(萬象社交)!",
+  "onboarding.page_six.admin": "你服務站的管理員是{admin}。",
   "onboarding.page_six.almost_done": "差不多了……",
   "onboarding.page_six.appetoot": "手機,你好!",
-  "onboarding.page_six.apps_available": "目前支援 Mastodon 的{apps}已經支援 iOS、Android 和其他系統平台",
+  "onboarding.page_six.apps_available": "目前支援 Mastodon 的{apps}已經支援 iOS、Android 和其他系統平台。",
   "onboarding.page_six.github": "Mastodon (萬象)是一個開源的程式,你可以在 {github} 上回報問題、提議新功能、或者參與開發貢獻。",
   "onboarding.page_six.guidelines": "社群守則",
   "onboarding.page_six.read_guidelines": "請留意閱讀 {domain} 的 {guidelines}!",
@@ -237,7 +238,7 @@
   "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的用戶名稱,帳號名稱和標籤。",
   "search_popout.tips.hashtag": "標籤",
   "search_popout.tips.status": "文章",
-  "search_popout.tips.text": "輸入簡單的文字,搜索符合的用戶名稱,帳號名稱和標籤。",
+  "search_popout.tips.text": "輸入簡單的文字,搜索符合的用戶名稱,帳號名稱和標籤",
   "search_popout.tips.user": "用戶",
   "search_results.accounts": "使用者",
   "search_results.hashtags": "標籤",
@@ -281,7 +282,10 @@
   "tabs_bar.notifications": "通知",
   "tabs_bar.search": "搜尋",
   "timeline.media": "Media",
-  "timeline.posts": "Toots",
+  "timeline.posts": "文章",
+  "trends.count_by_accounts": "{count} 位用戶在討論",
+  "trends.header": "現時趨勢",
+  "trends.refresh": "重新載入",
   "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
   "upload_area.title": "將檔案拖放至此上載",
   "upload_button.label": "上載媒體檔案",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 91b44012f..3f1bc19be 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -58,7 +58,6 @@
   "column_header.pin": "固定",
   "column_header.show_settings": "顯示設定",
   "column_header.unpin": "取下",
-  "column_subheading.navigation": "瀏覽",
   "column_subheading.settings": "設定",
   "compose_form.direct_message_warning": "此則推文只會被所有提到的使用者看見。",
   "compose_form.direct_message_warning_learn_more": "Learn more",
@@ -112,11 +111,10 @@
   "empty_column.public": "這裡什麼都沒有!公開寫些什麼,或是關注其他副本的使用者。",
   "follow_request.authorize": "授權",
   "follow_request.reject": "拒絕",
-  "getting_started.appsshort": "應用程式",
-  "getting_started.faq": "常見問答",
+  "getting_started.documentation": "Documentation",
   "getting_started.heading": "馬上開始",
   "getting_started.open_source_notice": "Mastodon 是開源軟體。你可以在 GitHub {github} 上做出貢獻或是回報問題。",
-  "getting_started.userguide": "使用者指南",
+  "getting_started.terms": "Terms of service",
   "home.column_settings.advanced": "進階",
   "home.column_settings.basic": "基本",
   "home.column_settings.filter_regex": "以正規表示式過濾",
@@ -160,6 +158,7 @@
   "navigation_bar.blocks": "封鎖的使用者",
   "navigation_bar.community_timeline": "本地時間軸",
   "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
   "navigation_bar.domain_blocks": "隱藏的域名",
   "navigation_bar.edit_profile": "編輯用者資訊",
   "navigation_bar.favourites": "最愛",
@@ -169,9 +168,11 @@
   "navigation_bar.lists": "名單",
   "navigation_bar.logout": "登出",
   "navigation_bar.mutes": "消音的使用者",
+  "navigation_bar.personal": "Personal",
   "navigation_bar.pins": "置頂貼文",
   "navigation_bar.preferences": "偏好設定",
   "navigation_bar.public_timeline": "聯盟時間軸",
+  "navigation_bar.security": "Security",
   "notification.favourite": "{name}收藏了你的狀態",
   "notification.follow": "{name}關注了你",
   "notification.mention": "{name}提到了你",
@@ -282,6 +283,9 @@
   "tabs_bar.search": "Search",
   "timeline.media": "Media",
   "timeline.posts": "Toots",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "trends.header": "Trending now",
+  "trends.refresh": "Refresh",
   "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
   "upload_area.title": "拖放來上傳",
   "upload_button.label": "增加媒體",
diff --git a/app/javascript/mastodon/reducers/contexts.js b/app/javascript/mastodon/reducers/contexts.js
index 53e70b58e..4c2d6cc8a 100644
--- a/app/javascript/mastodon/reducers/contexts.js
+++ b/app/javascript/mastodon/reducers/contexts.js
@@ -5,6 +5,7 @@ import {
 import { CONTEXT_FETCH_SUCCESS } from '../actions/statuses';
 import { TIMELINE_DELETE, TIMELINE_UPDATE } from '../actions/timelines';
 import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
+import compareId from '../compare_id';
 
 const initialState = ImmutableMap({
   inReplyTos: ImmutableMap(),
@@ -15,27 +16,27 @@ const normalizeContext = (immutableState, id, ancestors, descendants) => immutab
   state.update('inReplyTos', immutableAncestors => immutableAncestors.withMutations(inReplyTos => {
     state.update('replies', immutableDescendants => immutableDescendants.withMutations(replies => {
       function addReply({ id, in_reply_to_id }) {
-        if (in_reply_to_id) {
-          const siblings = replies.get(in_reply_to_id, ImmutableList());
+        if (in_reply_to_id && !inReplyTos.has(id)) {
 
-          if (!siblings.includes(id)) {
-            const index = siblings.findLastIndex(sibling => sibling.id < id);
-            replies.set(in_reply_to_id, siblings.insert(index + 1, id));
-          }
+          replies.update(in_reply_to_id, ImmutableList(), siblings => {
+            const index = siblings.findLastIndex(sibling => compareId(sibling, id) < 0);
+            return siblings.insert(index + 1, id);
+          });
 
           inReplyTos.set(id, in_reply_to_id);
         }
       }
 
-      if (ancestors[0]) {
-        addReply({ id, in_reply_to_id: ancestors[0].id });
-      }
+      // We know in_reply_to_id of statuses but `id` itself.
+      // So we assume that the status of the id replies to last ancestors.
 
-      if (descendants[0]) {
-        addReply({ id: descendants[0].id, in_reply_to_id: id });
+      ancestors.forEach(addReply);
+
+      if (ancestors[0]) {
+        addReply({ id, in_reply_to_id: ancestors[ancestors.length - 1].id });
       }
 
-      [ancestors, descendants].forEach(statuses => statuses.forEach(addReply));
+      descendants.forEach(addReply);
     }));
   }));
 });
@@ -80,7 +81,7 @@ const updateContext = (state, status) => {
       mutable.setIn(['inReplyTos', status.id], status.in_reply_to_id);
 
       if (!replies.includes(status.id)) {
-        mutable.setIn(['replies', status.id], replies.push(status.id));
+        mutable.setIn(['replies', status.in_reply_to_id], replies.push(status.id));
       }
     });
   }
diff --git a/app/javascript/mastodon/reducers/domain_lists.js b/app/javascript/mastodon/reducers/domain_lists.js
index a9e3519f3..eff97fbd6 100644
--- a/app/javascript/mastodon/reducers/domain_lists.js
+++ b/app/javascript/mastodon/reducers/domain_lists.js
@@ -6,7 +6,9 @@ import {
 import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet } from 'immutable';
 
 const initialState = ImmutableMap({
-  blocks: ImmutableMap(),
+  blocks: ImmutableMap({
+    items: ImmutableOrderedSet(),
+  }),
 });
 
 export default function domainLists(state = initialState, action) {
diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js
index 019c1f466..3d9a6a132 100644
--- a/app/javascript/mastodon/reducers/index.js
+++ b/app/javascript/mastodon/reducers/index.js
@@ -26,7 +26,6 @@ import height_cache from './height_cache';
 import custom_emojis from './custom_emojis';
 import lists from './lists';
 import listEditor from './list_editor';
-import trends from './trends';
 
 const reducers = {
   dropdown_menu,
@@ -56,7 +55,6 @@ const reducers = {
   custom_emojis,
   lists,
   listEditor,
-  trends,
 };
 
 export default combineReducers(reducers);
diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js
index de8865e43..0a034d739 100644
--- a/app/javascript/mastodon/reducers/settings.js
+++ b/app/javascript/mastodon/reducers/settings.js
@@ -64,6 +64,10 @@ const initialState = ImmutableMap({
       body: '',
     }),
   }),
+
+  trends: ImmutableMap({
+    show: true,
+  }),
 });
 
 const defaultColumns = fromJS([
diff --git a/app/javascript/mastodon/reducers/trends.js b/app/javascript/mastodon/reducers/trends.js
deleted file mode 100644
index 95cf8f284..000000000
--- a/app/javascript/mastodon/reducers/trends.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { TRENDS_FETCH_SUCCESS } from '../actions/trends';
-import { fromJS } from 'immutable';
-
-const initialState = null;
-
-export default function trendsReducer(state = initialState, action) {
-  switch(action.type) {
-  case TRENDS_FETCH_SUCCESS:
-    return fromJS(action.trends);
-  default:
-    return state;
-  }
-};
diff --git a/app/javascript/mastodon/service_worker/entry.js b/app/javascript/mastodon/service_worker/entry.js
index c1854c1cd..2435da117 100644
--- a/app/javascript/mastodon/service_worker/entry.js
+++ b/app/javascript/mastodon/service_worker/entry.js
@@ -33,7 +33,7 @@ self.addEventListener('fetch', function(event) {
 
     event.respondWith(asyncResponse.then(
       response => asyncCache.then(cache => cache.put('/', response.clone()))
-                            .then(() => response),
+        .then(() => response),
       () => asyncCache.then(cache => cache.match('/'))));
   } else if (url.pathname === '/auth/sign_out') {
     const asyncResponse = fetch(event.request);
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 712b6f813..a261b582b 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -251,7 +251,7 @@
 
   .compose-form__warning {
     color: $inverted-text-color;
-    margin-bottom: 15px;
+    margin-bottom: 10px;
     background: $ui-primary-color;
     box-shadow: 0 2px 6px rgba($base-shadow-color, 0.3);
     padding: 8px 10px;
@@ -298,6 +298,19 @@
     position: relative;
   }
 
+  .spoiler-input {
+    height: 0;
+    transform-origin: bottom;
+    opacity: 0.0;
+    transition: all 0.4s ease;
+
+    &.spoiler-input--visible {
+      height: 47px;
+      opacity: 1.0;
+      transition: all 0.4s ease;
+    }
+  }
+
   .autosuggest-textarea__textarea,
   .spoiler-input__input {
     display: block;
@@ -569,9 +582,8 @@
 }
 
 .reply-indicator {
-  border-radius: 4px 4px 0 0;
-  position: relative;
-  bottom: -2px;
+  border-radius: 4px;
+  margin-bottom: 10px;
   background: $ui-primary-color;
   padding: 10px;
 }
@@ -1663,24 +1675,6 @@ a.account__display-name {
   vertical-align: middle;
 }
 
-.static-content {
-  padding: 10px;
-  padding-top: 20px;
-  color: $dark-text-color;
-
-  h1 {
-    font-size: 16px;
-    font-weight: 500;
-    margin-bottom: 40px;
-    text-align: center;
-  }
-
-  p {
-    font-size: 13px;
-    margin-bottom: 20px;
-  }
-}
-
 .columns-area {
   display: flex;
   flex: 1 1 auto;
@@ -1772,6 +1766,8 @@ a.account__display-name {
     margin-bottom: 0;
   }
 
+  .getting-started__wrapper,
+  .getting-started__trends,
   .search {
     margin-bottom: 10px;
   }
@@ -2175,25 +2171,82 @@ a.account__display-name {
 }
 
 .getting-started__wrapper,
-.getting_started {
+.getting-started,
+.flex-spacer {
   background: $ui-base-color;
 }
 
 .getting-started__wrapper {
-  position: relative;
-  overflow-y: auto;
+  flex: 0 0 auto;
+}
+
+.flex-spacer {
+  flex: 1 1 auto;
 }
 
 .getting-started {
-  background: $ui-base-color;
-  flex: 1 0 auto;
+  color: $dark-text-color;
 
   p {
-    color: $secondary-text-color;
+    color: $dark-text-color;
+    font-size: 13px;
+    margin-bottom: 20px;
+
+    a {
+      color: $dark-text-color;
+      text-decoration: underline;
+    }
   }
 
   a {
-    color: $dark-text-color;
+    text-decoration: none;
+    color: $darker-text-color;
+
+    &:hover,
+    &:focus,
+    &:active {
+      text-decoration: underline;
+    }
+  }
+
+  &__footer {
+    flex: 0 0 auto;
+    padding: 10px;
+    padding-top: 20px;
+
+    ul {
+      margin-bottom: 10px;
+    }
+
+    ul li {
+      display: inline;
+    }
+  }
+
+  &__trends {
+    background: $ui-base-color;
+    flex: 0 1 auto;
+
+    @media screen and (max-height: 810px) {
+      .trends__item:nth-child(3) {
+        display: none;
+      }
+    }
+
+    @media screen and (max-height: 720px) {
+      .trends__item:nth-child(2) {
+        display: none;
+      }
+    }
+
+    @media screen and (max-height: 670px) {
+      display: none;
+    }
+  }
+
+  &__scrollable {
+    max-height: 100%;
+    overflow-y: auto;
   }
 }
 
@@ -2420,8 +2473,10 @@ a.status-card {
   line-height: inherit;
   margin: 0;
   padding: 15px;
+  box-sizing: border-box;
   width: 100%;
   clear: both;
+  text-decoration: none;
 
   &:hover {
     background: lighten($ui-base-color, 2%);
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 869749f1e..00479fd9a 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -83,7 +83,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     return if status.tags.include?(hashtag)
 
     status.tags << hashtag
-    TrendingTags.record_use!(hashtag, status.account, status.created_at)
+    TrendingTags.record_use!(hashtag, status.account, status.created_at) if status.public_visibility?
   rescue ActiveRecord::RecordInvalid
     nil
   end
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index a064248d9..d067415fd 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -187,4 +187,15 @@ module AccountInteractions
   def pinned?(status)
     status_pins.where(status: status).exists?
   end
+
+  def followers_for_local_distribution
+    followers.local
+             .joins(:user)
+             .where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago)
+  end
+
+  def lists_for_local_distribution
+    lists.joins(account: :user)
+         .where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago)
+  end
 end
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index c998a67eb..0fce82f6f 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -16,7 +16,7 @@ class Favourite < ApplicationRecord
   update_index('statuses#status', :status) if Chewy.enabled?
 
   belongs_to :account, inverse_of: :favourites
-  belongs_to :status,  inverse_of: :favourites, counter_cache: true
+  belongs_to :status,  inverse_of: :favourites
 
   has_one :notification, as: :activity, dependent: :destroy
 
@@ -25,4 +25,27 @@ class Favourite < ApplicationRecord
   before_validation do
     self.status = status.reblog if status&.reblog?
   end
+
+  after_create :increment_cache_counters
+  after_destroy :decrement_cache_counters
+
+  private
+
+  def increment_cache_counters
+    if association(:status).loaded?
+      status.update_attribute(:favourites_count, status.favourites_count + 1)
+    else
+      Status.where(id: status_id).update_all('favourites_count = COALESCE(favourites_count, 0) + 1')
+    end
+  end
+
+  def decrement_cache_counters
+    return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?)
+
+    if association(:status).loaded?
+      status.update_attribute(:favourites_count, [status.favourites_count - 1, 0].max)
+    else
+      Status.where(id: status_id).update_all('favourites_count = GREATEST(COALESCE(favourites_count, 0) - 1, 0)')
+    end
+  end
 end
diff --git a/app/models/glitch/keyword_mute.rb b/app/models/glitch/keyword_mute.rb
index 17ebc5b5e..7d0002afd 100644
--- a/app/models/glitch/keyword_mute.rb
+++ b/app/models/glitch/keyword_mute.rb
@@ -33,68 +33,74 @@ class Glitch::KeywordMute < ApplicationRecord
     Rails.cache.delete(TagMatcher.cache_key(account_id))
   end
 
-  class RegexpMatcher
+  class CachedKeywordMute
+    attr_reader :keyword
+    attr_reader :whole_word
+
+    def initialize(keyword, whole_word)
+      @keyword = keyword
+      @whole_word = whole_word
+    end
+
+    def boundary_regex_for_keyword
+      sb = keyword =~ /\A[[:word:]]/ ? '\b' : ''
+      eb = keyword =~ /[[:word:]]\Z/ ? '\b' : ''
+
+      /(?mix:#{sb}#{Regexp.escape(keyword)}#{eb})/
+    end
+
+    def matches?(str)
+      str =~ (whole_word ? boundary_regex_for_keyword : /#{Regexp.escape(keyword)}/i)
+    end
+  end
+
+  class Matcher
     attr_reader :account_id
-    attr_reader :regex
+    attr_reader :words
 
     def initialize(account_id)
       @account_id = account_id
-      regex_text = Rails.cache.fetch(self.class.cache_key(account_id)) { make_regex_text }
-      @regex = /#{regex_text}/
+      @words = Rails.cache.fetch(self.class.cache_key(account_id)) { fetch_keywords }
     end
 
     protected
 
-    def keywords
-      Glitch::KeywordMute.where(account_id: account_id).pluck(:whole_word, :keyword)
+    def fetch_keywords
+      Glitch::KeywordMute.where(account_id: account_id).pluck(:whole_word, :keyword).map do |whole_word, keyword|
+        CachedKeywordMute.new(transform_keyword(keyword), whole_word)
+      end
     end
 
-    def boundary_regex_for_keyword(keyword)
-      sb = keyword =~ /\A[[:word:]]/ ? '\b' : ''
-      eb = keyword =~ /[[:word:]]\Z/ ? '\b' : ''
-
-      /(?mix:#{sb}#{Regexp.escape(keyword)}#{eb})/
+    def transform_keyword(keyword)
+      keyword
     end
   end
 
-  class TextMatcher < RegexpMatcher
+  class TextMatcher < Matcher
     def self.cache_key(account_id)
       format('keyword_mutes:regex:text:%s', account_id)
     end
 
     def matches?(str)
-      !!(regex =~ str)
-    end
-
-    private
-
-    def make_regex_text
-      kws = keywords.map! do |whole_word, keyword|
-        whole_word ? boundary_regex_for_keyword(keyword) : /(?i:#{Regexp.escape(keyword)})/
-      end
-
-      Regexp.union(kws).source
+      words.any? { |w| w.matches?(str) }
     end
   end
 
-  class TagMatcher < RegexpMatcher
+  class TagMatcher < Matcher
     def self.cache_key(account_id)
       format('keyword_mutes:regex:tag:%s', account_id)
     end
 
     def matches?(tags)
-      tags.pluck(:name).any? { |n| regex =~ n }
+      tags.pluck(:name).any? do |n|
+        words.any? { |w| w.matches?(n) }
+      end
     end
 
-    private
-
-    def make_regex_text
-      kws = keywords.map! do |whole_word, keyword|
-        term = (Tag::HASHTAG_RE =~ keyword) ? $1 : keyword
-        whole_word ? boundary_regex_for_keyword(term) : term
-      end
+    protected
 
-      Regexp.union(kws).source
+    def transform_keyword(kw)
+      Tag::HASHTAG_RE =~ kw ? $1 : kw
     end
   end
 end
diff --git a/app/models/status.rb b/app/models/status.rb
index c6d6453df..69fae2eb6 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -43,12 +43,12 @@ class Status < ApplicationRecord
 
   belongs_to :application, class_name: 'Doorkeeper::Application', optional: true
 
-  belongs_to :account, inverse_of: :statuses, counter_cache: true
+  belongs_to :account, inverse_of: :statuses
   belongs_to :in_reply_to_account, foreign_key: 'in_reply_to_account_id', class_name: 'Account', optional: true
   belongs_to :conversation, optional: true
 
   belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true
-  belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, counter_cache: :reblogs_count, optional: true
+  belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true
 
   has_many :favourites, inverse_of: :status, dependent: :destroy
   has_many :bookmarks, inverse_of: :status, dependent: :destroy
@@ -172,6 +172,17 @@ class Status < ApplicationRecord
     @emojis ||= CustomEmoji.from_text([spoiler_text, text].join(' '), account.domain)
   end
 
+  def mark_for_mass_destruction!
+    @marked_for_mass_destruction = true
+  end
+
+  def marked_for_mass_destruction?
+    @marked_for_mass_destruction
+  end
+
+  after_create  :increment_counter_caches
+  after_destroy :decrement_counter_caches
+
   after_create_commit :store_uri, if: :local?
   after_create_commit :update_statistics, if: :local?
 
@@ -414,4 +425,40 @@ class Status < ApplicationRecord
     return unless public_visibility? || unlisted_visibility?
     ActivityTracker.increment('activity:statuses:local')
   end
+
+  def increment_counter_caches
+    return if direct_visibility?
+
+    if association(:account).loaded?
+      account.update_attribute(:statuses_count, account.statuses_count + 1)
+    else
+      Account.where(id: account_id).update_all('statuses_count = COALESCE(statuses_count, 0) + 1')
+    end
+
+    return unless reblog?
+
+    if association(:reblog).loaded?
+      reblog.update_attribute(:reblogs_count, reblog.reblogs_count + 1)
+    else
+      Status.where(id: reblog_of_id).update_all('reblogs_count = COALESCE(reblogs_count, 0) + 1')
+    end
+  end
+
+  def decrement_counter_caches
+    return if direct_visibility? || marked_for_mass_destruction?
+
+    if association(:account).loaded?
+      account.update_attribute(:statuses_count, [account.statuses_count - 1, 0].max)
+    else
+      Account.where(id: account_id).update_all('statuses_count = GREATEST(COALESCE(statuses_count, 0) - 1, 0)')
+    end
+
+    return unless reblog?
+
+    if association(:reblog).loaded?
+      reblog.update_attribute(:reblogs_count, [reblog.reblogs_count - 1, 0].max)
+    else
+      Status.where(id: reblog_of_id).update_all('reblogs_count = GREATEST(COALESCE(reblogs_count, 0) - 1, 0)')
+    end
+  end
 end
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index eedd92644..c3641d7fd 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -1,33 +1,18 @@
 # frozen_string_literal: true
 
 class TrendingTags
-  KEY                  = 'trending_tags'
-  HALF_LIFE            = 1.day.to_i
-  MAX_ITEMS            = 500
   EXPIRE_HISTORY_AFTER = 7.days.seconds
 
   class << self
     def record_use!(tag, account, at_time = Time.now.utc)
-      return if disallowed_hashtags.include?(tag.name) || account.silenced?
+      return if disallowed_hashtags.include?(tag.name) || account.silenced? || account.bot?
 
-      increment_vote!(tag.id, at_time)
       increment_historical_use!(tag.id, at_time)
       increment_unique_use!(tag.id, account.id, at_time)
     end
 
-    def get(limit)
-      tag_ids = redis.zrevrange(KEY, 0, limit).map(&:to_i)
-      tags    = Tag.where(id: tag_ids).to_a.map { |tag| [tag.id, tag] }.to_h
-      tag_ids.map { |tag_id| tags[tag_id] }.compact
-    end
-
     private
 
-    def increment_vote!(tag_id, at_time)
-      redis.zincrby(KEY, (2**((at_time.to_i - epoch) / HALF_LIFE)).to_f, tag_id.to_s)
-      redis.zremrangebyrank(KEY, 0, -MAX_ITEMS) if rand < (2.to_f / MAX_ITEMS)
-    end
-
     def increment_historical_use!(tag_id, at_time)
       key = "activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}"
       redis.incrby(key, 1)
@@ -40,12 +25,6 @@ class TrendingTags
       redis.expire(key, EXPIRE_HISTORY_AFTER)
     end
 
-    # The epoch needs to be 2.5 years in the future if the half-life is one day
-    # While dynamic, it will always be the same within one year
-    def epoch
-      @epoch ||= Date.new(Date.current.year + 2.5, 10, 1).to_datetime.to_i
-    end
-
     def disallowed_hashtags
       return @disallowed_hashtags if defined?(@disallowed_hashtags)
 
diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb
index ace51a1fc..ebb4034aa 100644
--- a/app/services/batched_remove_status_service.rb
+++ b/app/services/batched_remove_status_service.rb
@@ -21,7 +21,10 @@ class BatchedRemoveStatusService < BaseService
     @activity_xml          = {}
 
     # Ensure that rendered XML reflects destroyed state
-    statuses.each(&:destroy)
+    statuses.each do |status|
+      status.mark_for_mass_destruction!
+      status.destroy
+    end
 
     # Batch by source account
     statuses.group_by(&:account_id).each_value do |account_statuses|
@@ -53,7 +56,7 @@ class BatchedRemoveStatusService < BaseService
   end
 
   def unpush_from_home_timelines(account, statuses)
-    recipients = account.followers.local.to_a
+    recipients = account.followers_for_local_distribution.to_a
 
     recipients << account if account.local?
 
@@ -65,7 +68,7 @@ class BatchedRemoveStatusService < BaseService
   end
 
   def unpush_from_list_timelines(account, statuses)
-    account.lists.select(:id, :account_id).each do |list|
+    account.lists_for_local_distribution.select(:id, :account_id).each do |list|
       statuses.each do |status|
         FeedManager.instance.unpush_from_list(list, status)
       end
diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb
index 8b3630229..5efd3edb2 100644
--- a/app/services/fan_out_on_write_service.rb
+++ b/app/services/fan_out_on_write_service.rb
@@ -38,7 +38,7 @@ class FanOutOnWriteService < BaseService
   def deliver_to_followers(status)
     Rails.logger.debug "Delivering status #{status.id} to followers"
 
-    status.account.followers.where(domain: nil).joins(:user).where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago).select(:id).reorder(nil).find_in_batches do |followers|
+    status.account.followers_for_local_distribution.select(:id).reorder(nil).find_in_batches do |followers|
       FeedInsertWorker.push_bulk(followers) do |follower|
         [status.id, follower.id, :home]
       end
@@ -48,7 +48,7 @@ class FanOutOnWriteService < BaseService
   def deliver_to_lists(status)
     Rails.logger.debug "Delivering status #{status.id} to lists"
 
-    status.account.lists.joins(account: :user).where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago).select(:id).reorder(nil).find_in_batches do |lists|
+    status.account.lists_for_local_distribution.select(:id).reorder(nil).find_in_batches do |lists|
       FeedInsertWorker.push_bulk(lists) do |list|
         [status.id, list.id, :list]
       end
diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb
index 0695922b8..cf7471c98 100644
--- a/app/services/process_hashtags_service.rb
+++ b/app/services/process_hashtags_service.rb
@@ -7,7 +7,7 @@ class ProcessHashtagsService < BaseService
     tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name|
       tag = Tag.where(name: name).first_or_create(name: name)
       status.tags << tag
-      TrendingTags.record_use!(tag, status.account, status.created_at)
+      TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility?
     end
   end
 end
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index 8c3e18444..b9631077c 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -43,13 +43,13 @@ class RemoveStatusService < BaseService
   end
 
   def remove_from_followers
-    @account.followers.local.find_each do |follower|
+    @account.followers_for_local_distribution.find_each do |follower|
       FeedManager.instance.unpush_from_home(follower, @status)
     end
   end
 
   def remove_from_lists
-    @account.lists.select(:id, :account_id).find_each do |list|
+    @account.lists_for_local_distribution.select(:id, :account_id).find_each do |list|
       FeedManager.instance.unpush_from_list(list, @status)
     end
   end
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 56fa2d8dd..708d15e37 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -41,9 +41,10 @@ class SuspendAccountService < BaseService
   end
 
   def purge_profile!
-    @account.suspended    = true
-    @account.display_name = ''
-    @account.note         = ''
+    @account.suspended      = true
+    @account.display_name   = ''
+    @account.note           = ''
+    @account.statuses_count = 0
     @account.avatar.destroy
     @account.header.destroy
     @account.save!
diff --git a/app/workers/maintenance/destroy_media_worker.rb b/app/workers/maintenance/destroy_media_worker.rb
new file mode 100644
index 000000000..5f052983b
--- /dev/null
+++ b/app/workers/maintenance/destroy_media_worker.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class Maintenance::DestroyMediaWorker
+  include Sidekiq::Worker
+
+  sidekiq_options queue: 'pull'
+
+  def perform(media_attachment_id)
+    media = MediaAttachment.find(media_attachment_id)
+    media.destroy
+  rescue ActiveRecord::RecordNotFound
+    true
+  end
+end
diff --git a/app/workers/maintenance/redownload_account_media_worker.rb b/app/workers/maintenance/redownload_account_media_worker.rb
new file mode 100644
index 000000000..fc26815f2
--- /dev/null
+++ b/app/workers/maintenance/redownload_account_media_worker.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class Maintenance::RedownloadAccountMediaWorker
+  include Sidekiq::Worker
+
+  sidekiq_options queue: 'pull', retry: false
+
+  def perform(account_id)
+    account = Account.find(account_id)
+    account.reset_avatar!
+    account.reset_header!
+    account.save
+  rescue ActiveRecord::RecordNotFound
+    true
+  end
+end
diff --git a/app/workers/maintenance/uncache_media_worker.rb b/app/workers/maintenance/uncache_media_worker.rb
new file mode 100644
index 000000000..f6a51a1b8
--- /dev/null
+++ b/app/workers/maintenance/uncache_media_worker.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class Maintenance::UncacheMediaWorker
+  include Sidekiq::Worker
+
+  sidekiq_options queue: 'pull'
+
+  def perform(media_attachment_id)
+    media = MediaAttachment.find(media_attachment_id)
+
+    return unless media.file.exists?
+
+    media.file.destroy
+    media.save
+  rescue ActiveRecord::RecordNotFound
+    true
+  end
+end