about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.eslintrc.yml12
-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
-rw-r--r--config/locales/activerecord.eu.yml4
-rw-r--r--config/locales/ar.yml12
-rw-r--r--config/locales/co.yml83
-rw-r--r--config/locales/devise.eu.yml77
-rw-r--r--config/locales/devise.nl.yml2
-rw-r--r--config/locales/devise.zh-HK.yml8
-rw-r--r--config/locales/doorkeeper.co.yml1
-rw-r--r--config/locales/doorkeeper.eu.yml114
-rw-r--r--config/locales/eu.yml825
-rw-r--r--config/locales/gl.yml8
-rw-r--r--config/locales/ko.yml6
-rw-r--r--config/locales/nl.yml6
-rw-r--r--config/locales/oc.yml6
-rw-r--r--config/locales/pt-BR.yml16
-rw-r--r--config/locales/pt.yml8
-rw-r--r--config/locales/simple_form.co.yml4
-rw-r--r--config/locales/simple_form.de.yml3
-rw-r--r--config/locales/simple_form.en.yml2
-rw-r--r--config/locales/simple_form.eu.yml60
-rw-r--r--config/locales/simple_form.it.yml18
-rw-r--r--config/locales/simple_form.ko.yml2
-rw-r--r--config/locales/simple_form.sk.yml12
-rw-r--r--config/locales/sk.yml11
-rw-r--r--config/locales/sl.yml1
-rw-r--r--config/locales/zh-HK.yml26
-rw-r--r--config/routes.rb1
-rw-r--r--db/migrate/20180528141303_fix_accounts_unique_index.rb92
-rw-r--r--db/schema.rb5
-rw-r--r--lib/mastodon/version.rb4
-rw-r--r--lib/tasks/mastodon.rake25
-rw-r--r--package.json10
-rw-r--r--spec/controllers/settings/migrations_controller_spec.rb79
-rw-r--r--spec/models/account_spec.rb31
-rw-r--r--spec/models/glitch/keyword_mute_spec.rb8
-rw-r--r--spec/models/status_spec.rb14
-rw-r--r--yarn.lock164
122 files changed, 2602 insertions, 824 deletions
diff --git a/.eslintrc.yml b/.eslintrc.yml
index da12088b4..e48e3a12e 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -118,13 +118,23 @@ rules:
   jsx-a11y/accessible-emoji: warn
   jsx-a11y/alt-text: warn
   jsx-a11y/anchor-has-content: warn
+  jsx-a11y/anchor-is-valid:
+  - warn
+  - components:
+    - Link
+    - NavLink
+    specialLink:
+    - to
+    aspect:
+    - noHref
+    - invalidHref
+    - preferButton
   jsx-a11y/aria-activedescendant-has-tabindex: warn
   jsx-a11y/aria-props: warn
   jsx-a11y/aria-proptypes: warn
   jsx-a11y/aria-role: warn
   jsx-a11y/aria-unsupported-elements: warn
   jsx-a11y/heading-has-content: warn
-  jsx-a11y/href-no-hash: warn
   jsx-a11y/html-has-lang: warn
   jsx-a11y/iframe-has-title: warn
   jsx-a11y/img-redundant-alt: warn
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
diff --git a/config/locales/activerecord.eu.yml b/config/locales/activerecord.eu.yml
index 7b0ebe0b0..64c8bc04e 100644
--- a/config/locales/activerecord.eu.yml
+++ b/config/locales/activerecord.eu.yml
@@ -7,3 +7,7 @@ eu:
           attributes:
             username:
               invalid: letrak, zenbakiak eta gidoi baxuak besterik ez
+        status:
+          attributes:
+            reblog:
+              taken: mezu honentzat bazegoen aurretik
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index e2d057b96..ad194a17c 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -166,7 +166,7 @@ ar:
         disable_custom_emoji: "%{name} قام بتعطيل الإيموجي %{target}"
         disable_user: "%{name} لقد قام بتعطيل تسجيل الدخول للمستخدِم %{target}"
         enable_custom_emoji: "%{name} قام بتنشيط الإيموجي %{target}"
-        enable_user: "%{name} لقد قام بتنشيط تسجيل الدخول للمستخدِم %{target}"
+        enable_user: لقد قام %{name} بتنشيط تسجيل الدخول للمستخدِم %{target}
         memorialize_account: لقد قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية
         promote_user: "%{name} قام بترقية المستخدم %{target}"
         remove_avatar_user: تمت إزالة٪ {name} الصورة الرمزية٪ {target}
@@ -474,6 +474,7 @@ ar:
   followers:
     domain: النطاق
     followers_count: عدد المتابِعين
+    lock_link: قم بتجميد حسابك
     purge: تنحية من بين متابعيك
     unlocked_warning_title: إنّ حسابك غير مقفل
   generic:
@@ -499,6 +500,7 @@ ar:
       '21600': 6 ساعات
       '3600': ساعة
       '43200': 12 ساعة
+      '604800': أسبوع
       '86400': يوم واحد
     expires_in_prompt: أبدا
     generate: توليد
@@ -528,6 +530,7 @@ ar:
     title: الإشراف
   notification_mailer:
     digest:
+      action: معاينة كافة الإشعارات
       body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في  %{since}
       mention: "%{name} أشار إليك في :"
       new_followers_summary:
@@ -550,6 +553,7 @@ ar:
       subject: 'متابع مُعلّق : %{name}'
       title: طلب متابَعة جديد
     mention:
+      action: الرد
       body: 'أشار إليك %{name} في :'
       subject: لقد قام %{name} بذِكرك
     reblog:
@@ -584,7 +588,7 @@ ar:
     proceed: أكمل المتابعة
     prompt: 'إنك  بصدد متابعة :'
   remote_unfollow:
-    error: ''
+    error: خطأ
     title: ''
   sessions:
     activity: آخر نشاط
@@ -623,13 +627,13 @@ ar:
       windows: ويندوز
       windows_mobile: ويندوز موبايل
       windows_phone: ويندوز فون
-    revoke: ''
+    revoke: إبطال
     revoke_success: تم إبطال الجلسة بنجاح
     title: الجلسات
   settings:
     authorized_apps: التطبيقات المرخص لها
     back: عودة إلى ماستدون
-    delete: ''
+    delete: حذف الحسابات
     development: التطوير
     edit_profile: تعديل الملف الشخصي
     export: تصدير البيانات
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 32661b2c5..6608f05a9 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -40,6 +40,7 @@ co:
     following: Abbunamenti
     media: Media
     moved_html: "%{name} hà cambiatu di contu, avà hè nant’à %{new_profile_link}:"
+    network_hidden: St'infurmazione ùn hè micca dispunibule
     nothing_here: Ùn c’hè nunda quì!
     people_followed_by: Seguitati da %{name}
     people_who_follow: Seguitanu %{name}
@@ -49,6 +50,7 @@ co:
     reserved_username: Stu cugnome hè riservatu
     roles:
       admin: Amministratore
+      bot: Bot
       moderator: Muderatore
     unfollow: Ùn siguità più
   admin:
@@ -281,7 +283,7 @@ co:
         create_and_resolve: Chjude cù una nota
         create_and_unresolve: Riapre cù una nota
         delete: Toglie
-        placeholder: Per parlà di l’azzione piglate, o altre messe à ghjornu nant’à u signalamentu…
+        placeholder: Per parlà di l’azzione pigliate, o altre messe à ghjornu nant’à u signalamentu…
       reopen: Riapre u signalamentu
       report: 'Signalamente #%{id}'
       report_contents: Cuntenuti
@@ -667,6 +669,7 @@ co:
       video:
         one: "%{count} filmettu"
         other: "%{count} filmetti"
+    boosted_from_html: Spartutu dapoi à %{acct_link}
     content_warning: 'Avertimentu: %{warning}'
     disallowed_hashtags:
       one: 'cuntene l’hashtag disattivatu: %{tags}'
@@ -693,87 +696,11 @@ co:
     reblogged: spartutu
     sensitive_content: Cuntenutu sensibile
   terms:
-    body_html: |
-      <h2>Privacy Policy</h2>
-      <h3 id="collect">What information do we collect?</h3>
-
-      <ul>
-        <li><em>Basic account information</em>: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.</li>
-        <li><em>Posts, following and other public information</em>: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.</li>
-        <li><em>Direct and followers-only posts</em>: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it’s important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. <em>Please keep in mind that the operators of the server and any receiving server may view such messages</em>, and that recipients may screenshot, copy or otherwise re-share them. <em>Do not share any dangerous information over Mastodon.</em></li>
-        <li><em>IPs and other metadata</em>: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.</li>
-      </ul>
-
-      <hr class="spacer" />
-
-      <h3 id="use">What do we use your information for?</h3>
-
-      <p>Any of the information we collect from you may be used in the following ways:</p>
-
-      <ul>
-        <li>To provide the core functionality of Mastodon. You can only interact with other people’s content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.</li>
-        <li>To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.</li>
-        <li>The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.</li>
-      </ul>
-
-      <hr class="spacer" />
-
-      <h3 id="protect">How do we protect your information?</h3>
-
-      <p>We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.</p>
-
-      <hr class="spacer" />
-
-      <h3 id="data-retention">What is our data retention policy?</h3>
-
-      <p>We will make a good faith effort to:</p>
-
-      <ul>
-        <li>Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.</li>
-        <li>Retain the IP addresses associated with registered users no more than 12 months.</li>
-      </ul>
-
-      <p>You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.</p>
-
-      <p>You may irreversibly delete your account at any time.</p>
-
-      <hr class="spacer"/>
-
-      <h3 id="cookies">Do we use cookies?</h3>
-
-      <p>Yes. Cookies are small files that a site or its service provider transfers to your computer’s hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.</p>
-
-      <p>We use cookies to understand and save your preferences for future visits.</p>
-
-      <hr class="spacer" />
-
-      <h3 id="disclose">Do we disclose any information to outside parties?</h3>
-
-      <p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.</p>
-
-      <p>Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.</p>
-
-      <p>When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.</p>
-
-      <hr class="spacer" />
-
-      <h3 id="coppa">Children’s Online Privacy Protection Act Compliance</h3>
-
-      <p>Our site, products and services are all directed to people who are at least 13 years old. If this server is in the USA, and you are under the age of 13, per the requirements of COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children’s Online Privacy Protection Act</a>) do not use this site.</p>
-
-      <hr class="spacer" />
-
-      <h3 id="changes">Changes to our Privacy Policy</h3>
-
-      <p>If we decide to change our privacy policy, we will post those changes on this page.</p>
-
-      <p>This document is CC-BY-SA. It was last updated March 7, 2018.</p>
-
-      <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
     title: Termini d’usu è di cunfidenzialità per %{instance}
   themes:
     contrast: Cuntrastu altu
     default: Mastodon
+    mastodon-light: Mastodon (chjaru)
   time:
     formats:
       default: "%d %b %Y, %H:%M"
diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml
index 215b72e52..8905822a7 100644
--- a/config/locales/devise.eu.yml
+++ b/config/locales/devise.eu.yml
@@ -1,5 +1,82 @@
 ---
 eu:
   devise:
+    confirmations:
+      confirmed: Zure e-mail helbidea ongi baieztatu da.
+      send_instructions: E-mail mezu bat jasoko duzu minutu batzuk barru zure e-mail helbidea baieztatzeko argibideekin. Egiaztatu zure spam karpeta ez baduzu e-mail hau jasotzen.
+      send_paranoid_instructions: Zure e-mail helbidea aurretik gure datu-basean bazegoen, e-mail mezu bat jasoko duzu minutu batzuk barru zure e-mail helbidea baieztatzeko argibideekin. Egiaztatu zure spam karpeta ez baduzu e-mail hau jasotzen.
     failure:
       already_authenticated: Saioa hasi duzu jada.
+      inactive: Zure kontua ez dago oraindik aktibo.
+      invalid: Baliogabeko %{authentication_keys} edo pasahitza.
+      last_attempt: Saiakera bat geratzen zaizu zure kontua giltzapetu aurretik.
+      locked: Zure kontua giltzapetuta dago.
+      not_found_in_database: Baliogabeko %{authentication_keys} edo pasahitza.
+      timeout: Zure saioa iraungitu da. Hasi saioa berriro jarraitzeko.
+      unauthenticated: Saioa hasi edo izena eman behar duzu jarraitu aurretik.
+      unconfirmed: Zure e-mail helbidea baieztatu behar duzu jarraitu aurretik.
+    mailer:
+      confirmation_instructions:
+        action: Baieztatu e-mail helbidea
+        explanation: Kontu bat sortu duzu %{host} ostalarian e-mail helbide honekin. Aktibatzeko klik bat falta zaizu. Ez baduzu zuk sortu, ez egin ezer e-mail honekin.
+        extra_html: Egiaztatu <a href="%{terms_path}">instantziaren arauak</a> eta <a href="%{policy_path}">zerbitzuaren erabilera baldintzak</a>.
+        subject: 'Mastodon: %{instance} instantziaren argibideak baieztapenerako'
+        title: Baieztatu e-mail helbidea
+      email_changed:
+        explanation: 'Zure kontuaren e-mail helbidea honetara aldatuko da:'
+        extra: Ez baduzu e-mail helbidea aldatu, agian baten bat zure kontura sartzea lortu du. Aldatu zure pasahitza berehala edo jarri instantziako administratzailearekin kontaktuan zure kontura sartzerik ez baduzu.
+        subject: 'Mastodon: E-mail helbidea aldatuta'
+        title: E-mail helbide berria
+      password_change:
+        explanation: Zure kontuaren pasahitza aldatu da.
+        extra: Ez baduzu pasahitza aldatu, agian baten bat zure kontura sartzea lortu du. Aldatu zure pasahitza berehala edo jarri instantziako administratzailearekin kontaktuan zure kontura sartzerik ez baduzu.
+        subject: 'Mastodon: Pasahitza aldatuta'
+        title: Pasahitza aldatuta
+      reconfirmation_instructions:
+        explanation: Baieztatu helbide berria zure e-maila aldatzeko.
+        extra: Aldaketa hau ez baduzu zuk eskatu, ezikusi e-mail hau. Mastodon kontuaren e-mail helbidea ez da aldatuko goiko estekan sartzen ez bazara.
+        subject: 'Mastodon: Baieztatu %{instance} instantziarako e-mail helbidea'
+        title: Baieztatu e-mail helbidea
+      reset_password_instructions:
+        action: Aldatu pasahitza
+        explanation: Pasahitza berria eskatu duzu zure konturako.
+        extra: Ez baduzu hau eskatu, mesedez ezikusi e-mail hau. Zure pasahitza ez da aldatuko goiko estekara sartu eta berri bat sortzen ez baduzu.
+        subject: 'Mastodon: Pasahitza berrezartzeko argibideak'
+        title: Pasahitza berrezartzea
+      unlock_instructions:
+        subject: 'Mastodon: Desblokeatzeko argibideak'
+    omniauth_callbacks:
+      failure: Ezin izan zaizu %{kind} motatik autentifikatu arrazoia "%{reason}" dela.
+      success: Ongi egin da autentifikazioa %{kind}  kontuarekin.
+    passwords:
+      no_token: Ezin zara orri honetara sartu ez bazatoz pasahitza aldatzeko e-mail batetik. Pasahitza aldatzeko e-mail batetik bazatoz egiaztatu emandako URL osoa erabiltzen duzula mesedez.
+      send_instructions: Zure e-mail helbidea gure datu-basean badago, pasahitza berreskuratzeko esteka bat duen e-mail bat jasoko duzu minutu gutxi barru. Egiaztatu spam karpeta e-mail hau jasotzen ez baduzu.
+      send_paranoid_instructions: Zure e-mail helbidea gure datu-basean badago, pasahitza berreskuratzeko esteka bat duen e-mail bat jasoko duzu minutu gutxi barru. Egiaztatu spam karpeta e-mail hau jasotzen ez baduzu.
+      updated: Zure pasahitza ongi aldatu da. Saioa hasi duzu.
+      updated_not_active: Zure pasahitza ongi aldatu da.
+    registrations:
+      destroyed: Agur! Zure kontua ongi ezeztatu da. Ea laster berriro ikusten garen.
+      signed_up: Ongi etorri! Ongi hasi duzu saioa.
+      signed_up_but_inactive: Ongi eman duzu izena. Hala ere, ezin duzu saioa hasi zure kontua oraindik ez dagoelako aktibatuta.
+      signed_up_but_locked: Ongi eman duzu izena. Hala ere, ezin duzu saioa hasi zure kontua giltzapetuta dagoelako.
+      signed_up_but_unconfirmed: Baieztapen esteka bat duen e-mail bidali zaizu. Jarraitu esteka zure kontua aktibatzeko. Egiaztatu spam karpeta ez baduzu e-mail hau jaso.
+      update_needs_confirmation: Zure kontua ongi eguneratu duzu, baina zure email helbide berria egiaztatu behar dugu. Baieztapen esteka bat duen e-mail bidali zaizu, jarraitu esteka zure e-mal helbide berria baieztatzeko. Egiaztatu spam karpeta ez baduzu e-mail hau jaso.
+      updated: Zure kontua ongi eguneratu da.
+    sessions:
+      already_signed_out: Ongi amaitu duzu saioa.
+      signed_in: Ongi hasi duzu saioa.
+      signed_out: Ongi amaitu duzu saioa.
+    unlocks:
+      send_instructions: Kontua desblokeatzeko argibideak dituen e-mail jasoko duzu minutu gutxi barru. Egiaztatu spam karpeta ez baduzu e-mail hau jaso.
+      send_paranoid_instructions: Zure kontua existitzen bada, hau desblokeatzeko argibideak dituen e-mail bat jasoko duzu minutu gutxi barru. Egiaztatu spam karpeta ez baduzu mezu hau jasotzen.
+      unlocked: Zure kontua ongi desblokeatu da. Hasi saioa jarraitzeko.
+  errors:
+    messages:
+      already_confirmed: ba<zegoen baieztatuta, saiatu saioa hasten
+      confirmation_period_expired: baieztapena %{period} barruan egin behar zen, eskatu berri bat mesedez
+      expired: iraungitua, eskatu beste bat
+      not_found: ez da aurkitu
+      not_locked: ez zegoen giltzapetuta
+      not_saved:
+        one: 'Errore batek %{resource} hau gordetzea eragotzi du:'
+        other: "%{count} errorek %{resource} hau gordetzea eragotzi dute:"
diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml
index ce87c393f..b21798deb 100644
--- a/config/locales/devise.nl.yml
+++ b/config/locales/devise.nl.yml
@@ -20,7 +20,7 @@ nl:
       confirmation_instructions:
         action: E-mailadres verifiëren
         explanation: Je hebt een account op %{host} aangemaakt en met één klik kun je deze activeren. Wanneer jij dit account niet hebt aangemaakt, mag je deze e-mail negeren.
-        extra_html: Bekijk ook de <a href="%{terms_path}">regels van de Mastodonserver</a> en <a href="%{policy_path}">onze gebruikersvoorwaarden</a>.
+        extra_html: Bekijk ook de <a href="%{terms_path}">regels van de Mastodonserver</a> en <a href="%{policy_path}">onze gebruiksvoorwaarden</a>.
         subject: 'Mastodon: E-mail bevestigen voor %{instance}'
         title: E-mailadres verifiëren
       email_changed:
diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml
index ca16e06aa..79e5a3d25 100644
--- a/config/locales/devise.zh-HK.yml
+++ b/config/locales/devise.zh-HK.yml
@@ -2,15 +2,15 @@
 zh-HK:
   devise:
     confirmations:
-      confirmed: 你的電郵地址確認成功
+      confirmed: 你的電郵地址成功確認。
       send_instructions: 你將會在幾分鐘內收到確認指示電郵,上面有確認你電郵地址的指示。
       send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將會在幾分鐘內收到電郵,確認你電郵地址的指示。
     failure:
       already_authenticated: 你之前已經登入了。
-      inactive: 你的用戶並未啟用。
+      inactive: 您的帳號尚未啟用。
       invalid: 不正確的 %{authentication_keys} 或密碼。
-      last_attempt: 若你再一次嘗試失敗,我們將鎖定你的用戶,以察安全。
-      locked: 你的用戶已被鎖定
+      last_attempt: 若你再一次嘗試失敗,我們將鎖定你的帳號,以策安全。
+      locked: 你的帳號已被鎖定。
       not_found_in_database: 不正確的 %{authentication_keys} 或密碼。
       timeout: 你的登入階段已經過期,請重新登入以繼續使用。
       unauthenticated: 你必須先登入或登記,以繼續使用。
diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml
index 31080d153..52777eaf0 100644
--- a/config/locales/doorkeeper.co.yml
+++ b/config/locales/doorkeeper.co.yml
@@ -115,5 +115,6 @@ co:
         title: Auturizazione OAuth riquestata
     scopes:
       follow: bluccà, sbluccà, è reghje l’abbunamenti
+      push: Riceve nutificazione push per u vostru contu
       read: leghje l’infurmazione di u vostru contu
       write: mandà missaghji per voi
diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml
index a51b1dc8b..9fe6ea961 100644
--- a/config/locales/doorkeeper.eu.yml
+++ b/config/locales/doorkeeper.eu.yml
@@ -4,3 +4,117 @@ eu:
     attributes:
       doorkeeper/application:
         name: Aplikazioaren izena
+        redirect_uri: Birbideratu URIa
+        scopes: Esparruak
+        website: Aplikazioaren webgunea
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: ezin du zati bat eduki.
+              invalid_uri: baliozko URI bat izan behar du.
+              relative_uri: URI absolutu bat izan behar du.
+              secured_uri: HTTPS/SSL URI bat izan behar du.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Baimendu
+        cancel: Utzi
+        destroy: Suntsitu
+        edit: Editatu
+        submit: Bidali
+      confirmations:
+        destroy: Ziur zaude?
+      edit:
+        title: Editatu aplikazioa
+      form:
+        error: Ene! Egiaztatu formularioan errorerik dagoen
+      help:
+        native_redirect_uri: Erabili %{native_redirect_uri} proba lokaletarako
+        redirect_uri: Erabili lerro bat URI bakoitzeko
+        scopes: Banandu esparruak espazioekin. Laga hutsik lehenetsitako esparruak erabiltzeko.
+      index:
+        application: Aplikazioa
+        callback_url: Itzulera URLa
+        delete: Ezabatu
+        name: Izena
+        new: Aplikazio berria
+        scopes: Esparruak
+        show: Erakutsi
+        title: Zure aplikazioak
+      new:
+        title: Aplikazio berria
+      show:
+        actions: Ekintzak
+        application_id: Bezeroaren gakoa
+        callback_urls: Itzulera URL-ak
+        scopes: Esparruak
+        secret: Bezeroaren sekretua
+        title: 'Aplikazioa: %{name}'
+    authorizations:
+      buttons:
+        authorize: Baimendu
+        deny: Ukatu
+      error:
+        title: Errore bat gertatu da
+      new:
+        able_to: Egin ahal izango du
+        prompt: "%{client_name} aplikazioak zure kontua atzitzea eskatu du"
+        title: Baimena behar da
+      show:
+        title: Kopiatu baimen kode hau eta itsatsi aplikazioan.
+    authorized_applications:
+      buttons:
+        revoke: Indargabetu
+      confirmations:
+        revoke: Ziur zaude?
+      index:
+        application: Aplikazioa
+        created_at: Baimenduta
+        date_format: "%Y-%m-%d %H:%M:%S"
+        scopes: Esparruak
+        title: Zuk baimendutako aplikazioak
+    errors:
+      messages:
+        access_denied: Baliabidearen jabeak edo baimenaren zerbitzariak eskaria ukatu du.
+        credential_flow_not_configured: Baliabidearen jabearen pasahitza kredentzialen fluxuak huts egin du Doorkeeper.configure.resource_owner_from_credentials konfiguratu gabe dagoelako.
+        invalid_client: Bezeroaren autentifikazioak huts egin du bezero ezezaguna delako, ez delako bezero autentifikazioa txertatu, edo autentifikazio metodoa ez delako onartzen.
+        invalid_grant: Emandako autorizatzea baliogabea da, iraungitu da, indargabetu da. ez dator bat autorizatze eskarian erabilitako URI-arekin, edo beste bezero batek sortu du.
+        invalid_redirect_uri: Sartutako birbideratze URI-a baliogabea da.
+        invalid_request: Eskaerak beharrezkoa den parametro bat falta du, onartu gabeko parametro-balio bat du, edo beste moduren batean gaizki osatua dago.
+        invalid_resource_owner: Emandako baliabidearen jabearen kredentzialak baliogabeak dira, edo baliabidearen jabea ez da aurkitu
+        invalid_scope: Eskatutako esparrua baliogabea da, ezezaguna, edo gaizki osatua dago.
+        invalid_token:
+          expired: Sarbide token-a iraungitu da
+          revoked: Sarbide token-a indargabetua izan da
+          unknown: Sarbide token-a baliogabea da
+        resource_owner_authenticator_not_configured: Baliabidearen jabearen bilaketak huts egin du Doorkeeper.configure.resource_owner_authenticator konfiguratu gabe dagoelako.
+        server_error: Autorizatze zerbitzariak eskaera betetzea eragotzi duen ustekabeko baldintza bat aurkitu du.
+        temporarily_unavailable: Autorizatze zerbitzariak ezin du orain eskaera bete  une batez zerbitzariak gainezka egin duelako edo mantentze lanetan dagoelako.
+        unauthorized_client: Bezeroak ez du eskaera hau metodo hau erabiliz egiteko baimenik.
+        unsupported_grant_type: Autorizatze mota ez da onartzen autorizatze zerbitzarian.
+        unsupported_response_type: Autorizatze zerbitzari honek ez du onartzen erantzun mota hau.
+    flash:
+      applications:
+        create:
+          notice: Aplikazioa sortuta.
+        destroy:
+          notice: Aplikazioa ezabatuta.
+        update:
+          notice: Aplikazioa eguneratuta.
+      authorized_applications:
+        destroy:
+          notice: Aplikazioa indargabetuta.
+    layouts:
+      admin:
+        nav:
+          applications: Aplikazioak
+          oauth2_provider: OAuth2 hornitzailea
+      application:
+        title: OAuth autorizazioa behar da
+    scopes:
+      follow: jarraitu kontuak, blokeatu, utzi jarraitzeari eta desblokeatu
+      push: jaso zure kontuaren push jakinarazpenak
+      read: irakurri zure kontuko datuak
+      write: argitaratu zure izenean
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index fc8916ab9..c0b824c9a 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -1,11 +1,832 @@
 ---
 eu:
   about:
+    about_hashtag_html: Hauek  <strong>#%{hashtag}</strong> traola duten toot publikoak dira. Fedibertsoko edozein kontu baduzu harremanetan jarri zaitezke.
+    about_mastodon_html: Mastodon web protokolo ireki eta libreak darabiltzan gizarte sare bat da. E-mail sarea bezala deszentralizatua da.
     about_this: Honi buruz
     administered_by: 'Administratzailea(k):'
+    closed_registrations: Harpidetza itxita dago orain instantzia honetan. Hala ere, beste instantzia bat aurkitu dezakezu kontua egiteko eta hona ere sarbidea izan.
     contact: Kontaktua
     contact_missing: Ezarri gabe
     contact_unavailable: E/E
     description_headline: Zer da %{domain}?
-    domain_count_after: beste instantziak
-    domain_count_before: 'Hona konektatuta:'
+    domain_count_after: instantzia desberdinetara
+    domain_count_before: Konektatuta
+    extended_description_html: |
+      <h3>Arauentzako toki egoki bat</h3>
+      <p>Azalpen luzea ez da ezarri oraindik.</p>
+    features:
+      humane_approach_body: Beste sareen akatsetatik ikasiz, Mastodon diseinu erabaki etikoak hartzen saiatzen da gizarte sareen erabilera okerrak borrokatzeko.
+      humane_approach_title: Ikuspuntu humanoago bat
+      not_a_product_body: Mastodon ez da sare komertzial bat. Ez du iragarkirik, eta ditu datuak mehatzen, ez da hormaz babestutako lorategi bat. Ez dago autoritate zentralik.
+      not_a_product_title: Pertsona bat zara, ez produktu bat
+      real_conversation_body: 500 karaktere dituzu eskura, edukia xehetasunez kudeatu daiteke eta multimediari abisuak jarri, adierazi zure burua zure erara.
+      real_conversation_title: Egiazko elkarrizketarako eraikia
+      within_reach_body: iOS, Android eta beste plataformetarako aplikazio ugari, eta garatzaileentzako erabilterraza den API ekosistema bati esker beste plataforma batzuetako lagunekin aritzeko aukera.
+      within_reach_title: Beti eskura
+    generic_description: "%{domain} sareko zerbitzari bat da"
+    hosted_on: Mastodon %{domain} domeinuan ostatatua
+    learn_more: Ikasi gehiago
+    other_instances: Instantzien zerrenda
+    source_code: Iturburu kodea
+    status_count_after: mezu
+    status_count_before: Idatzi dituzte
+    user_count_after: erabiltzaile
+    user_count_before: Baditugu
+    what_is_mastodon: Zer da Mastodon?
+  accounts:
+    follow: Jarraitu
+    followers: Jarraitzaile
+    following: Jarraitzen
+    media: Multimedia
+    moved_html: "%{name} hona lekualdatu da %{new_profile_link}:"
+    network_hidden: Informazio hau ez dago eskuragarri
+    nothing_here: Ez dago ezer hemen!
+    people_followed_by: "%{name}(e)k jarraitzen dituenak"
+    people_who_follow: "%{name} jarraitzen dutenak"
+    posts: Toot-ak
+    posts_with_replies: Toot eta erantzunak
+    remote_follow: Jarraitu urrunetik
+    reserved_username: Erabiltzaile-izena erreserbatuta dago
+    roles:
+      admin: Administratzailea
+      bot: Bot-a
+      moderator: Moderatzailea
+    unfollow: Utzi jarraitzeari
+  admin:
+    account_moderation_notes:
+      create: Sortu oharra
+      created_msg: Moderazio oharra ongi sortu da!
+      delete: Ezabatu
+      destroyed_msg: Moderazio ohara ongi suntsitu da!
+    accounts:
+      are_you_sure: Ziur zaude?
+      avatar: Abatarra
+      by_domain: Domeinua
+      change_email:
+        changed_msg: e-mail kontua ongi aldatu da!
+        current_email: Uneko e-mail helbidea
+        label: Aldatu e-mail helbidea
+        new_email: E-mail berria
+        submit: Aldatu e-mail helbidea
+        title: Aldatu %{username}(r)en e-mail helbidea
+      confirm: Berretsi
+      confirmed: Berretsita
+      confirming: Berresten
+      demote: Jaitsi mailaz
+      disable: Desgaitu
+      disable_two_factor_authentication: Desgaitu 2FA
+      disabled: Desgaituta
+      display_name: Pantaila-izena
+      domain: Domeinua
+      edit: Editatu
+      email: E-mail
+      email_status: Posta elektronikoaren egoera
+      enable: Gaitu
+      enabled: Gaituta
+      feed_url: Jarioaren URL-a
+      followers: Jarraitzaileak
+      followers_url: Jarraitzaileen URL-a
+      follows: Jarraitzen du
+      inbox_url: Sarrera ontziaren URL-a
+      ip: IP
+      location:
+        all: Denak
+        local: Lokala
+        remote: Urrunekoa
+        title: Kokalekua
+      login_status: Saioaren egoera
+      media_attachments: Multimedia eranskinak
+      memorialize: Bihurtu memoriala
+      moderation:
+        all: Denak
+        silenced: Isilarazita
+        suspended: Kanporatua
+        title: Moderazioa
+      moderation_notes: Moderazio oharrak
+      most_recent_activity: Azken jarduera
+      most_recent_ip: Azken IP-a
+      not_subscribed: Harpidetu gabe
+      order:
+        alphabetic: Alfabetikoa
+        most_recent: Azkena
+        title: Ordena
+      outbox_url: Irteera ontziaren URL-a
+      perform_full_suspension: Aplikatu kanporatze osoa
+      profile_url: Profilaren URL-a
+      promote: Sustatu
+      protocol: Protokoloa
+      public: Publikoa
+      push_subscription_expires: Push harpidetzaren iraugitzea
+      redownload: Freskatu abatarra
+      remove_avatar: Kendu abatarra
+      resend_confirmation:
+        already_confirmed: Erabiltzaile hau berretsita dago
+        send: Birbidali baieztapen e-maila
+        success: Baieztapen e-maila ongi bidali da!
+      reset: Berrezarri
+      reset_password: Berrezarri pasahitza
+      resubscribe: Berriro harpidetu
+      role: Baimenak
+      roles:
+        admin: Administratzailea
+        moderator: Moderatzailea
+        staff: Langilea
+        user: Erabiltzailea
+      salmon_url: Salmon URL-a
+      search: Bilatu
+      shared_inbox_url: Partekatutako sarrera ontziaren URL-a
+      show:
+        created_reports: Kontu honek sortutako txostenak
+        report: salatu
+        targeted_reports: Kontu honek egindako salaketak
+      silence: Isilarazi
+      statuses: Mezuak
+      subscribe: Harpidetu
+      title: Kontuak
+      unconfirmed_email: Baieztatu gabeko e-mail helbidea
+      undo_silenced: Utzi isilarazteari
+      undo_suspension: Desegin kanporatzea
+      unsubscribe: Kendu harpidetza
+      username: Erabiltzaile-izena
+      web: Web
+    action_logs:
+      actions:
+        assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio"
+        change_email_user: "%{name}(e)k %{target}(r)en helbide elektronikoa aldatu du"
+        confirm_user: "%{name}(e)k %{target}(r)en helbide elektronikoa berretsi du"
+        create_custom_emoji: "%{name}(e)k emoji berria kargatu du %{target}"
+        create_domain_block: "%{name}(e)k %{target} domeinua blokeatu du"
+        create_email_domain_block: "%{name}(e)k %{target} helbide elektronikoen domeinua zerrenda beltzean sartu du"
+        demote_user: "%{name}(e)k %{target} mailaz jaitsi du"
+        destroy_domain_block: "%{name}(e)k %{target} domeinua desblokeatu du"
+        destroy_email_domain_block: "%{name}(e)k %{target} helbide elektronikoen domeinua zerrenda zurian sartu du"
+        destroy_status: "%{name}(e)k %{target}(e)n egoera kendu du"
+        disable_2fa_user: "%{name}(e)k %{target}(r)i bi faktoreetako eskaera kendu dio"
+        disable_custom_emoji: "%{name}(e)k %{target} emoji-a desgaitu du"
+        disable_user: "%{name}(e)k %{target}(r)en saioa desgaitu du"
+        enable_custom_emoji: "%{name}(e)k %{target} emoji-a gaitu du"
+        enable_user: "%{name}(e)k %{target} erabiltzailearen saioa gaitu du"
+        memorialize_account: "%{name}(e)k %{target}(r)en kontua memoriala bihurtu du"
+        promote_user: "%{name}(e)k %{target}(r)en kategoria igo du"
+        remove_avatar_user: "%{name}(e)k %{target}(r)en abatarra kendu du"
+        reopen_report: "%{name}(e)k %{target}(r)en salaketa berrireki du"
+        reset_password_user: "%{name}(e)k %{target}(r)en pasahitza berrezarri du"
+        resolve_report: "%{name}(e)k %{target}(r)en salaketa konpondu du"
+        silence_account: "%{name}(e)k %{target}(r)en kontua isilarazi du"
+        suspend_account: "%{name}(e)k %{target} kontua kanporatu du"
+        unassigned_report: "%{name}(e)k %{target} txotenaren esleipena atzera bota du"
+        unsilence_account: "%{name}(e)k %{target} isilarazteko agindua kendu du"
+        unsuspend_account: "%{name}(e)k %{target} kontuaren kanporaketa atzera bota du"
+        update_custom_emoji: "%{name}(e)k %{target} emoji-a eguneratu du"
+        update_status: "%{name} (e)k %{target}(r)en mezua aldatu du"
+      title: Auditoria-egunkaria
+    custom_emojis:
+      by_domain: Domeinua
+      copied_msg: Ongi sortu da emoji-aren kopia lokala
+      copy: Kopiatu
+      copy_failed_msg: Ezin izan da emoji-aren kopia lokal bat sortu
+      created_msg: Emoji-a ongi sortu da!
+      delete: Ezabatu
+      destroyed_msg: Emoji-a ongi suntsitu da!
+      disable: Desgaitu
+      disabled_msg: Emoji-a ongi desgaitu da
+      emoji: Emoji
+      enable: Gaitu
+      enabled_msg: Emoji hori ongi gaitu da
+      image_hint: PNG gehienez 50KB
+      listed: Zerrendatua
+      new:
+        title: Gehitu emoji pertsonal berria
+      overwrite: Gainidatzi
+      shortcode: Laster-kodea
+      shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarra  besterik ez
+      title: Emoji pertsonalak
+      unlisted: Zerrendatu gabea
+      update_failed_msg: Ezin izan da emoji hori eguneratu
+      updated_msg: Emoji-a ongi eguneratu da!
+      upload: Igo
+    domain_blocks:
+      add_new: Gehitu berria
+      created_msg: Domeinuaren blokeoa orain prozesatzen ari da
+      destroyed_msg: Domeinuaren blokeoa desegin da
+      domain: Domeinua
+      new:
+        create: Sortu blokeoa
+        hint: Domeinuaren blokeoak ez du eragotziko kontuen sarrerak sortzea datu-basean, baina automatikoki ezarriko zaizkie moderazio metodo bereziak iraganeko mezuetan ere.
+        severity:
+          desc_html: "<strong>Isilarazi</strong>-k kontuko mezuak jarraitzaileek besterik ez ikustea eragingo du. <strong>Kanporatu</strong>-k kontuaren edukia, multimedia eta profileko datuak ezabatuko ditu. <strong>Bat ere ez</strong> nahi duzun guztia multimedia fitxategiak ukatzea bada."
+          noop: Bat ere ez
+          silence: Isilarazi
+          suspend: Kanporatu
+        title: Domeinu blokeo berria
+      reject_media: Ukatu multimedia fitxategiak
+      reject_media_hint: Lokalki gordetako multimedia fitxategiak ezabatzen ditu eta etorkizunean fitxategi berriak deskargatzeari uko egingo dio. Ez du garrantzirik kanporaketetan
+      severities:
+        noop: Bat ere ez
+        silence: Isilarazi
+        suspend: Kanporatu
+      severity: Larritasuna
+      show:
+        affected_accounts:
+          one: Datu-baseko kontu bati eragiten dio
+          other: Datu-baseko %{count} kontuei eragiten die
+        retroactive:
+          silence: Kendu isilarazteko agindua domeinu honetako kontu guztiei
+          suspend: Kendu kanporatzeko agindua domeinu honetako kontu guztiei
+        title: Desegin %{domain} domeinuko blokeoa
+        undo: Desegin
+      title: Domeinuen blokeoak
+      undo: Desegin
+    email_domain_blocks:
+      add_new: Gehitu berria
+      created_msg: Ongi gehitu da e-mail helbidea domeinuen zerrenda beltzera
+      delete: Ezabatu
+      destroyed_msg: Ongi ezabatu da e-mail domeinua zerrenda beltzetik
+      domain: Domeinua
+      new:
+        create: Gehitu domeinua
+        title: Sarrera berria e-mail zerrenda beltzean
+      title: E-mail zerrenda beltza
+    instances:
+      account_count: Kontu ezagunak
+      domain_name: Domeinua
+      reset: Berrezarri
+      search: Bilatu
+      title: Instantzia ezagunak
+    invites:
+      filter:
+        all: Denak
+        available: Eskuragarri
+        expired: Iraungitua
+        title: Iragazi
+      title: Gonbidapenak
+    report_notes:
+      created_msg: Salaketa oharra ongi sortu da!
+      destroyed_msg: Salaketa oharra ongi ezabatu da!
+    reports:
+      account:
+        note: oharra
+        report: salaketa
+      action_taken_by: Neurrien hartzailea
+      are_you_sure: Ziur zaude?
+      assign_to_self: Esleitu niri
+      assigned: Esleitutako moderatzailea
+      comment:
+        none: Bat ere ez
+      created_at: Salatua
+      id: ID
+      mark_as_resolved: Markatu konpondutako gisa
+      mark_as_unresolved: Markatu konpondu gabeko gisa
+      notes:
+        create: Gehitu oharra
+        create_and_resolve: Konpondu ohar batekin
+        create_and_unresolve: Berrireki ohar batekin
+        delete: Ezabatu
+        placeholder: Azaldu hartutako neurriak, edo erlazioa duten bestelako berriak...
+      reopen: Berrireki salaketa
+      report: 'Salaketa #%{id}'
+      report_contents: Edukiak
+      reported_account: Salatutako kontua
+      reported_by: Salatzailea
+      resolved: Konponduta
+      resolved_msg: Salaketa ongi konpondu da!
+      silence_account: Isilarazi kontua
+      status: Mezua
+      suspend_account: Kanporatu kontua
+      target: Helburua
+      title: Salaketak
+      unassign: Kendu esleipena
+      unresolved: Konpondu gabea
+      updated_at: Eguneratua
+      view: Ikusi
+    settings:
+      activity_api_enabled:
+        desc_html: Lokalki bidalitako mezu kopurua, erabiltzaile aktiboak, eta izen emate berriak asteko
+        title: Argitaratu erabiltzaile-jardueraren estatistikak
+      bootstrap_timeline_accounts:
+        desc_html: Banandu erabiltzaile-izenak koma bitartez. Giltzapetu gabeko kontu lokalekin dabil bakarrik. Hutsik dagoenean lehenetsitakoa admin lokal guztiak da.
+        title: Lehenetsitako jarraipena erabiltzaile berrientzat
+      contact_information:
+        email: Laneko e-mail helbidea
+        username: Kontaktuaren erabiltzaile-izena
+      hero:
+        desc_html: Azaleko orrian bistaratua. Gutxienez 600x100px aholkatzen da. Ezartzen ez bada, instantziaren irudia hartuko du
+        title: Azaleko irudia
+      peers_api_enabled:
+        desc_html: Instantzia honek fedibertsuan aurkitutako domeinu-izenak
+        title: Argitaratu aurkitutako instantzien zerrenda
+      registrations:
+        closed_message:
+          desc_html: Azaleko orrian bistaratua izen ematea ixten denean. HTML etiketak erabili ditzakezu
+          title: Izen emate itxiaren mezua
+        deletion:
+          desc_html: Baimendu edonori bere kontua ezabatzea
+          title: Ireki kontu ezabaketa
+        min_invite_role:
+          disabled: Inor ez
+          title: Baimendu hauen gobidapenak
+        open:
+          desc_html: Baimendu edonori kontu bat sortzea
+          title: Ireki izen ematea
+      show_known_fediverse_at_about_page:
+        desc_html: Txandakatzean, fedibertsu ezagun osoko toot-ak bistaratuko ditu aurrebistan. Bestela, toot lokalak besterik ez ditu erakutsiko.
+        title: Erakutsi fedibertsu ezagun osoko denbora-lerroa aurrebistan
+      show_staff_badge:
+        desc_html: Erakutsi langile banda erabiltzailearen orrian
+        title: Erakutsi langile banda
+      site_description:
+        desc_html: Azaleko orrian eta meta etiketetan agertuko den sarrera paragrafoa. HTML etiketak erabili ditzakezu, zehazki <code>&lt;a&gt;</code> eta <code>&lt;em&gt;</code>.
+        title: Instantziaren deskripzioa
+      site_description_extended:
+        desc_html: Zure jokabide-koderako  toki on bat, arauak, gidalerroak eta zure instantzia desberdin egiten duten bestelakoak. HTML etiketak erabili ditzakezu
+        title: Informazio hedatu pertsonalizatua
+      site_terms:
+        desc_html: Zure pribatutasun politika, erabilera baldintzak eta bestelako testu legalak idatzi ditzakezu. HTML etiketak erabili ditzakezu
+        title: Erabilera baldintza pertsonalizatuak
+      site_title: Instantziaren izena
+      thumbnail:
+        desc_html: Aurrebistetarako erabilia OpenGraph eta API bidez. 1200x630px aholkatzen da
+        title: Instantziaren iruditxoa
+      timeline_preview:
+        desc_html: Bistaratu denbora-lerro publikoa hasiera orrian
+        title: Denbora-lerroaren aurrebista
+      title: Gunearen ezarpenak
+    statuses:
+      back_to_account: Atzera kontuaren orrira
+      batch:
+        delete: Ezabatu
+        nsfw_off: Markatu ez mingarri gisa
+        nsfw_on: Markatu mingarri gisa
+      failed_to_execute: Ezin izan da burutu
+      media:
+        title: Multimedia
+      no_media: Multimediarik ez
+      title: Kontuaren mezuak
+      with_media: Multimediarekin
+    subscriptions:
+      callback_url: Itzulera URL-a
+      confirmed: Berretsita
+      expires_in: Iraungitzea
+      last_delivery: Azken bidalketa
+      title: WebSub
+      topic: Mintzagaia
+    title: Administrazioa
+  admin_mailer:
+    new_report:
+      body: "%{reporter}(e)k %{target} salatu du"
+      body_remote: "%{domain} domeinuko norbaitek %{target} salatu du"
+      subject: Salaketa berria %{instance} instantzian (#%{id})
+  application_mailer:
+    notification_preferences: Aldatu e-mail hobespenak
+    salutation: "%{name},"
+    settings: 'Aldatu e-mail hobespenak: %{link}'
+    view: 'Ikusi:'
+    view_profile: Ikusi profila
+    view_status: Ikusi mezua
+  applications:
+    created: Aplikazioa ongi sortu da
+    destroyed: Aplikazioa ongi ezabatu da
+    invalid_url: Emandako URL-a baliogabea da
+    regenerate_token: Birsortu sarbide token-a
+    token_regenerated: Sarbide token-a ongi birsortu da
+    warning: Kontuz datu hauekin, ez partekatu inoiz inorekin!
+    your_token: Zure sarbide token-a
+  auth:
+    agreement_html: Izena emanez<a href="%{rules_path}">instantziaren arauak</a> eta <a href="%{terms_path}">erabilera baldintzak</a> onartzen dituzu.
+    change_password: Pasahitza
+    confirm_email: Berretsi e-mail helbidea
+    delete_account: Ezabatu kontua
+    delete_account_html: Kontua ezabatu nahi baduzu, <a href="%{path}">jarraitu hemen</a>. Berrestea eskatuko zaizu.
+    didnt_get_confirmation: Ez dituzu berresteko argibideak jaso?
+    forgot_password: Pasahitza ahaztu duzu?
+    invalid_reset_password_token: Pasahitza berrezartzeko token-a baliogabea da edo iraungitu du. Eskatu beste bat.
+    login: Hasi saioa
+    logout: Amaitu saioa
+    migrate_account: Lekualdatu beste kontu batera
+    migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu.
+    or: edo
+    or_log_in_with: Edo hasi saioa honekin
+    providers:
+      cas: CAS
+      saml: SAML
+    register: Eman izena
+    register_elsewhere: Eman izena beste zerbitzari batean
+    resend_confirmation: Birbidali berresteko argibideak
+    reset_password: Berrezarri pasahitza
+    security: Segurtasuna
+    set_new_password: Ezarri pasahitza berria
+  authorize_follow:
+    already_following: Kontu hau aurretik jarraitzen duzu
+    error: Zoritxarrez, urruneko kontua bilatzean errore bat gertatu da
+    follow: Jarraitu
+    follow_request: 'Jarraitzeko eskari bat bidali duzu hona:'
+    following: 'Ongi! Orain jarraitzen duzu:'
+    post_follow:
+      close: Edo, leiho hau besterik gabe itxi dezakezu.
+      return: Itzuli erabiltzailearen profilera
+      web: Joan webera
+    title: Jarraitu %{acct}
+  datetime:
+    distance_in_words:
+      about_x_hours: "%{count}h"
+      about_x_months: "%{count} hilabete"
+      about_x_years: "%{count} urte"
+      almost_x_years: "%{count} urte"
+      half_a_minute: Oraintxe
+      less_than_x_minutes: "%{count}m"
+      less_than_x_seconds: Oraintxe
+      over_x_years: "%{count} urte"
+      x_days: "%{count} egun"
+      x_minutes: "%{count}m"
+      x_months: "%{count} hilabete"
+      x_seconds: "%{count}s"
+  deletes:
+    bad_password_msg: Saiakera ona hacker! Pasahitz okerra
+    confirm_password: Sartu zure oraingo pasahitza zure identitatea baieztatzeko
+    description_html: Honek <strong>behin betirako eta atzera egiteko aukera gabe</strong> zure kontuko edukia kendu eta hau desaktibatuko du. Zure erabiltzaile-izena erreserbatuko da etorkizunean inork zure itxurak ez egiteko.
+    proceed: Ezabatu kontua
+    success_msg: Zure kontua ongi ezabatu da
+    warning_html: Instantzia honetako edukiak ezabatzea besterik ezin da bermatu. Asko partekatu den edukiaren arrastoak geratzea izan liteke. Deskonektatuta dauden zerbitzariak edo zure eguneraketetatik harpidetza kendu duten zerbitzariek ez dituzte beraien datu-baseak eguneratuko.
+    warning_title: Sakabanatutako edukiaren eskuragarritasuna
+  errors:
+    '403': Ez duzu orri hau ikusteko baimenik.
+    '404': Bilatu duzun orria ez da existitzen.
+    '410': Bilatu duzun orria ez da existitzen jada.
+    '422':
+      content: Segurtasun egiaztaketak huts egin du. Cookie-ak blokeatzen dituzu?
+      title: Segurtasun egiaztaketak huts egin du
+    '429': Itoa
+    '500':
+      content: Sentitzen dugu, zerbait okerra gertatu da gure aldean.
+      title: Orri hau ez da zuzena
+    noscript_html: Mastodon web aplikazioa erabiltzeko, gaitu JavaScript. Bestela, probatu Mastodon plataformarako <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">aplikazio natibo</a>ren bat.
+  exports:
+    archive_takeout:
+      date: Data
+      download: Deskargatu zure artxiboa
+      hint_html: Zure <strong>toot eta igotako multimedia</strong>ren artxibo bat eskatu dezakezu. Esportatutako datuak ActivityPub formatua izango dute, bateragarria den edozein programarekin irakurtzeko. Artxiboa 7 egunetan behin eska dezakezu.
+      in_progress: Zure artxiboa biltzen...
+      request: Eskatu zure artxiboa
+      size: Tamaina
+    blocks: Zuk blokeatutakoak
+    csv: CSV
+    follows: Zuk jarraitutakoak
+    mutes: Zuk mututukoak
+    storage: Multimedia biltegiratzea
+  followers:
+    domain: Domeinua
+    explanation_html: Zure mezuen pribatutasuna bermatu nahi baduzu, nork jarraitzen zaituen jakin behar duzu. <strong>Zure mezu pribatuak zure jarraitzaileak dituzten instantzia guztietara bidaltzen dira</strong>.  Instantzia bateko langileek edo softwareak zure pribatutasunari dagokion begirunea ez dutela izango uste baduzu, berrikusi eta kendu jarraitzaileak.
+    followers_count: Jarraitzaile kopurua
+    lock_link: Giltzapetu zure kontua
+    purge: Kendu jarraitzaileetatik
+    success:
+      one: Domeinu bateko jarraitzaileei blokeo leuna ezartzen...
+      other: "%{count} domeinuetako jarraitzaileei blokeo leuna ezartzen..."
+    true_privacy_html: Kontuan izan <strong>egiazko pribatutasuna lortzeko muturretik muturrerako zifratzea ezinbestekoa dela</strong>.
+    unlocked_warning_html: Edonork jarraitu zaitzake eta berehala zure mezu pribatuak ikusi. %{lock_link} jarraitzaileak berrikusi eta ukatu ahal izateko.
+    unlocked_warning_title: Zure kontua ez dago giltzapetuta
+  generic:
+    changes_saved_msg: Aldaketak ongi gorde dira!
+    powered_by: eskerrak %{link}
+    save_changes: Gorde aldaketak
+    validation_errors:
+      one: Zerbait ez dabil ongi! Egiaztatu beheko errorea mesedez
+      other: Zerbait ez dabil ongi! Egiaztatu beheko %{count}  erroreak mesedez
+  imports:
+    preface: Beste instantzia bateko datuak inportatu ditzakezu, esaterako jarraitzen duzun edo blokeatu duzun jendearen zerrenda.
+    success: Zure datuak ongi igo dira eta dagokionean prozesatuko dira
+    types:
+      blocking: Blokeatutakoen zerrenda
+      following: Jarraitutakoen zerrenda
+      muting: Mutututakoen zerrenda
+    upload: Igo
+  in_memoriam_html: Memoriala.
+  invites:
+    delete: Desaktibatu
+    expired: Iraungitua
+    expires_in:
+      '1800': 30 minutu
+      '21600': 6 ordu
+      '3600': Ordu 1
+      '43200': 12 ordu
+      '604800': Astebete
+      '86400': Egun 1
+    expires_in_prompt: Inoiz ez
+    generate: Sortu
+    max_uses:
+      one: Erabilera 1
+      other: "%{count} erabilera"
+    max_uses_prompt: Mugagabea
+    prompt: Sortu eta partekatu estekak instantzia onetara sarbidea emateko
+    table:
+      expires_at: Iraungitzea
+      uses: Erabilerak
+    title: Gonbidatu jendea
+  landing_strip_html: "<strong>%{name}</strong> %{link_to_root_path} instantziako erabiltzailea da. Fedibertsoko edozein tokitan kontua baduzu jarraitu dezakezu eta harremanetan jarri."
+  landing_strip_signup_html: Ez baduzu, <a href="%{sign_up_path}">hemen izena eman</a> dezakezu.
+  lists:
+    errors:
+      limit: Gehieneko zerrenda kopurura heldu zara
+  media_attachments:
+    validations:
+      images_and_video: Ezin da irudiak dituen mezu batean bideo bat erantsi
+      too_many: Ezin dira 4 fitxategi baino gehiago erantsi
+  migrations:
+    acct: Kontu berriaren erabiltzaile@domeinua
+    currently_redirecting: 'Zure profila hona birbideratzeko ezarri da:'
+    proceed: Gorde
+    updated_msg: Kontuaren migrazio-ezarpenak ongi eguneratu dira!
+  moderation:
+    title: Moderazioa
+  notification_mailer:
+    digest:
+      action: Ikusi jakinarazpen guztiak
+      body: Hona zure %{since}(e)ko azken bisitatik galdu dituzun mezuen laburpen bat
+      mention: "%{name}(e)k aipatu zaitu:"
+      new_followers_summary:
+        one: Kanpoan zeundela jarraitzaile berri bat gehitu zaizu!
+        other: Kanpoan zeundela %{count} jarraitzaile berri bat gehitu zaizkizu!
+      subject:
+        one: "Jakinarazpen berri bat azken bisitatik \U0001F418"
+        other: "%{count} jakinarazpen berri azken bisitatik \U0001F418"
+      title: Kanpoan zeundela...
+    favourite:
+      body: "%{name}(e)k zure mezua gogoko du:"
+      subject: "%{name}(e)k zure mezua gogoko du"
+      title: Gogoko berria
+    follow:
+      body: "%{name}(e)k jarraitzen zaitu!"
+      subject: "%{name}(e)k jarraitzen zaitu"
+      title: Jarraitzaile berria
+    follow_request:
+      action: Kudeatu jarraitzeko eskaerak
+      body: "%{name}(e)k zu jarraitzeko eskaera egin du"
+      subject: 'Onartzeke dagoen erabiltzailea: %{name}'
+      title: Jarraitzeko eskaera berria
+    mention:
+      action: Erantzun
+      body: "%{name}(e)k aipatu zaitu:"
+      subject: "%{name}(e)k aipatu zaitu"
+      title: Aipamen berria
+    reblog:
+      body: "%{name}(e)k bultzada eman dio zure mezuari:"
+      subject: "%{name}(e)k bultzada eman dio zure mezuari"
+      title: Bultzada berria
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: B
+          million: M
+          quadrillion: Q
+          thousand: K
+          trillion: T
+          unit: "."
+  pagination:
+    newer: Berriagoa
+    next: Hurrengoa
+    older: Zaharragoa
+    prev: Aurrekoa
+    truncate: "&hellip;"
+  preferences:
+    languages: Hizkuntzak
+    other: Beste bat
+    publishing: Argitaratzea
+    web: Web
+  remote_follow:
+    acct: Sartu jarraitzeko erabili nahi duzun erabiltzaile@domeinua
+    missing_resource: Ezin izan da zure konturako behar den birbideratze URL-a
+    proceed: Ekin jarraitzeari
+    prompt: 'Hau jarraituko duzu:'
+  remote_unfollow:
+    error: Errorea
+    title: Izenburua
+    unfollowed: Jarraitzeari utzita
+  sessions:
+    activity: Azken jarduera
+    browser: Nabigatzailea
+    browsers:
+      alipay: Alipay
+      blackberry: Blackberry
+      chrome: Chrome
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
+      generic: Nabigatzaile ezezaguna
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Nokia S40 Ovi nabigatzailea
+      opera: Opera
+      otter: Otter
+      phantom_js: PhantomJS
+      qq: QQ nabigatzailea
+      safari: Safari
+      uc_browser: UCBrowser
+      weibo: Weibo
+    current_session: Uneko saioa
+    description: "%{browser} - %{platform}"
+    explanation: Zure Mastodon kontuan saioa hasita duten nabigatzaileak daude.
+    ip: IP
+    platforms:
+      adobe_air: Adobe Air
+      android: Android
+      blackberry: Blackberry
+      chrome_os: ChromeOS
+      firefox_os: Firefox OS
+      ios: iOS
+      linux: Linux
+      mac: Mac
+      other: plataforma ezezaguna
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
+    revoke: Indargabetu
+    revoke_success: Saioa ongi indargabetu da
+    title: Saioak
+  settings:
+    authorized_apps: Baimendutako aplikazioak
+    back: Itzuli Mastodon-era
+    delete: Kontuaren ezabaketa
+    development: Garapena
+    edit_profile: Aldatu profila
+    export: Datuen esportazioa
+    followers: Baimendutako jarraitzaileak
+    import: Inportazioa
+    migrate: Kontuaren migrazioa
+    notifications: Jakinarazpenak
+    preferences: Hobespenak
+    settings: Ezarpenak
+    two_factor_authentication: Bi faktoreetako autentifikazioa
+    your_apps: Zure aplikazioak
+  statuses:
+    attached:
+      description: 'Erantsita: %{attached}'
+      image:
+        one: irudi %{count}
+        other: "%{count} irudi"
+      video:
+        one: bideo %{count}
+        other: "%{count} bideo"
+    boosted_from_html: "%{acct_link}(e)tik bultzatua"
+    content_warning: 'Edukiaren abisua: %{warning}'
+    disallowed_hashtags:
+      one: 'debekatutako traola bat zuen: %{tags}'
+      other: 'debekatutako traola hauek zituen: %{tags}'
+    open_in_web: Ireki web-ean
+    over_character_limit: "%{max}eko karaktere muga gaindituta"
+    pin_errors:
+      limit: Gehienez finkatu daitekeen toot kopurua finkatu duzu jada
+      ownership: Ezin duzu beste norbaiten toot bat finkatu
+      private: Ezin dira publikoak ez diren toot-ak finkatu
+      reblog: Bultzada bat ezin da finkatu
+    show_more: Erakutsi gehiago
+    title: '%{name}: "%{quote}"'
+    visibilities:
+      private: Jarraitzaileak besterik ez
+      private_long: Erakutsi jarraitzaileei besterik ez
+      public: Publikoa
+      public_long: Edonork ikusi dezake
+      unlisted: Zerrendatu gabea
+      unlisted_long: Edonork ikusi dezake, baina ez da denbora-lerro publikoetan agertzen
+  stream_entries:
+    click_to_show: Klik erakusteko
+    pinned: Finkatutako toot-a
+    reblogged: bultzatua
+    sensitive_content: Eduki mingarria
+  terms:
+    body_html: |
+      <h2>Pribatutasun politika</h2>
+      <h3 id="collect">Zer informazio biltzen dugu?</h3>
+
+      <ul>
+        <li><em>Kontuaren oinarrizko informazioa</em>: Zerbitzari honetan izena ematen baduzu, erabiltzaile-izena, e-mail helbidea eta pasahitza sartzea galdetu dakizuke.  Profilean bestelako informazioa sartu dezakezu esaterako pantaila.-izena eta biografia, eta profileko eta goiburuko irudiak igo ditzakezu. Erabiltzaile-izena, pantaiula-izena, biografia, profileko irudia eta goiburuko irudia beti dira publikoak.</li>
+        <li><em>Mezuak, jarraitzea eta beste informazioa</em>: Jarraitzen duzun jendearen zerrenda publikoa da, baita zure jarraitzaileena.  Mezu bat bidaltzean, data eta ordua eta mezua bidaltzeko erabilitako aplikazioa gordetzen dira. Mezuen eranskinak izan ditzakete, esaterako irudiak eta bideoak. Mezu publikoak eta zerrendatu gabeak publikoki ikusi daitezke. Zure profilean mezu bat sustatzen duzunean, informazio hori ere publikoki eskuragarri dago. Zure mezuak zure jarraitzaileei bidaltzen zaie, kasu batzuetan honek esan nahi du beste zerbitzari batzuetara bidaltzen dela eta han kopiak gordetzen dituzte. Mezuak ezabatzen dituzunean, hau zure jarraitzaileei bidaltzen zaie ere, beste mezu batzuk zabaltzea edo gogoko izatea beti da informazio publikoa.</li>
+        <li><em>mezu zuzenak eta soilik jarraitzaileentzako mezuak</em>: Mezu guztiak zerbitzarian gorde eta prozesatzen dira. Soilik jarraitzaileentzako diren mezuak  zure jarraitzaileei bidaltzen zaie eta bertan aipatutako erabiltzaileei, mezu zuzenak soilik aipatutako erabiltzaileei bidaltzen zaie. Honek esan nahi du kasu batzuetan beste zerbitzari batzuetara bidaltzen dela mezua eta han kopiak gordetzen direla. Borondate oneko ahalegin bat egiten dugu mezuok soilik baimena duten pertsonek ikus ditzaten, baina beste zerbitzariek agian ez. Hortaz,  zure jarraitzaileen zerbitzaria zein den egiaztatzea garrantzitsua da.  Jarraitzaileak eskuz onartu eta ukatzeko aukera aldatu dezakezu. <em>Kontuan izan zerbitzariaren operadoreak eta mezua jasotzen duen edozein zerbitzarik operadoreek mezuok ikus ditzaketela. <em>Ez partekatu informazio arriskutsua Mastodon bidez.</em></li>
+        <li><em>IP-ak eta bestelako meta-datuak</em>: Saioa hasten duzunean, zure IP helbidea gordetzen dugu, eta erabiltzen duzun nabigatzaile edo aplikazioa. Hasitako saio guztiak zuk ikusteko mopduan daude eta ezarpenetan indargabetu ditzakezu. Erabilitako azken IP helbidea 12 hilabetez gordetzen da. Gure zerbitzariak jasotako eskari guztiak eta IP-a duten zerbitzariko egunkariak gorde genitzake.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">Zertarako erabiltzen dugu zure informazioa?</h3>
+
+      <p>Biltzen dugun informazio guztia honela erabiltzen da:</p>
+
+      <ul>
+        <li>Mastodon zerbitzuko funtzio nagusietarako. Beste pertsonen edukiarekin harremanetan sartzeko edo zure edukia argitaratzeko saioa hasi behar duzu. Adibidez, beste pertsona batzuk jarraitu ditzakezu zure denbora-lerro pertsonalizatu bat izateko.</li>
+        <li>Komunitatearen moderazioari laguntzeko, esaterako zure IP-a ezagutzen ditugun beste batzuekin alderatu dezakegu, debekuak ekiditea edo bestelako arau-urraketak eragozteko.</li>
+        <li>Emandako e-mail helbidea informazioa bidaltzeko erabili genezake, beste pertsonek zure edukiekin harremanetan jartzean jakinarazteko, edo mezu bat bidaltzen dizutenean, galderak erantzutean eta bestelako eskari eta galderetarako.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">Nola babesten dugu zure informazioa?</h3>
+
+      <p>Hainbat segurtasun neurri hartzen ditugu zure informazio pertsonalaren segurtasuna babesteko, informazio pertsonala sartzen duzunean, bidaltzen duzunean edo atzitzen duzunean. Besteak beste zure nabigatzailearen saioa eta zure aplikazioen eta API-aren arteko trafikoa, SSL bidez babesten da, eta zure pasahitza alde bateko algoritmo sendo batekin hash-eatzen da. Bi faktoreetako autentifikazioa gaitu dezakezu zure kontuaren segurtasuna areagotzeko.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">Zein da gure datuak biltzeko politika?</h3>
+
+      <p>Borondate oneko ahalegina egingo dugu honetarako:</p>
+
+      <ul>
+        <li>Zerbitzari honetara egindako eskari guztien egunkaria IP helbidearekin, 90 egunez gehienez.</li>
+        <li>Izena eman duten erabiltzaileen eskariekin lotutako IP helbideak, 12 hilabetez gehienez..</li>
+      </ul>
+
+      <p>Zure edukiaren kopia duen artxibo bat eskatu eta deskargatu dezakezu, bertan mezuak multimedia eranskinak, profileko irudia eta goiburuko irudia daude.</p>
+
+      <p>Zure kontua behin betirako ezabatu dezakezu nahi duzunean.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">Cookie-ak erabiltzen ditugu?</h3>
+
+      <p>Bai. Cookie-ak gune edo zerbitzu hornitzaile baten zure ordenagailuko disko gogorrera bidaltzen dituen fitxategi txikiak dira (Zuk baimentzen baduzu). Cookie hauek guneari zure nabigatzailea identifikatzea, konturik duzun jakin, eta erregistratutako kontuarekin erlazionatzea ahalbidetzen diote.</p>
+
+      <p>Cookie-ak erabiltzen ditugu zure hobespenak ulertu eta hurrengo saioetarako gordetzeko</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">Informazioa kanpoko inorekin partekatzen dugu?</h3>
+
+      <p>Ez dugu identifikatu zaitzakeen informazio pertsonala, saltzen, trukatzen edo kanpora bidaltzen. Salbuespena konfidatzako hiirugarrengoak dira, gunea martxan izaten laguntzen digutenak, negozioa aurrera eramateko aholkua ematen digutenak edo zuri zerbitzua ematen laguntzen digutenak, hauek informazioaren konfidentzialtasuna errespetatzea onartzen dutenean., Agian legearekin betetzeko beharrezkoa den informazioa ere eman genezake, gunearen politika indarrean jartzeko behar dena, edo gure eskubideak, jabetzak, edo segurtasuna babesteko beharrezkoa dena.</p>
+
+      <p>Zure eduki publikoak sareko beste zerbitzariek deskargatu dezakete. Zure mezu publikoak eta soilik jarraitzaileentzat diren mezuak zure jarraitzaileen zerbitzarietara bidaltzen dira, jarraitzaile edo hartzaile horiek beste zerbitzari batean badute kontua.</p>
+
+      <p>Aplikazio bati zure kontua erabiltzeko baimena ematen diozunean, onartutako baimen esparruaren arabera, zure profileko informazio publikoa atzitu lezake, zuk jarraitutakoen zerrenda, zure jarraitzaileen zerrenda, zure mezu guztiak eta zure gogokoak. Aplikazioen ezin dute inoiz zure e-mail helbidea edo pasahitza atzitu.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">Umeek gunea erabiltzea</h3>
+
+      <p>Zerbitzari hau Europar Batasunean edo Europako Ekonomia-Eremuan badago: Gure gunea, produktua eta zerbitzuak 16 urte edo gehiago dituztenei zuzenduta daude. 16 urte baino gazteagoa bazara, GDPR legearen arabera ezin duzu gune hau erabili (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) </p>
+
+      <p>Zerbitzari hau Amerikako Estatu Batuetan badago:  Gure gunea, produktua eta zerbitzuak 13 urte edo gehiago dituztenei zuzenduta daude. 13 urte baino gazteagoa bazara, COPPA legearen arabera ezin duzu gune hau erabili (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>).</p>
+
+      <p>Zerbitzari hau beste eremu legal batean badago, legearen eskariak desberdinak izan daitezke.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">Aldaketak gure pribatutasun politikan</h3>
+
+      <p>Guire pribatutasun politika aldatzea erabakitzen badugu, aldaketak orri honetan argitaratuko ditugu.</p>
+
+      <p>Dokumentu honek CC-BY-SA lizentzia du. Eta azkenekoz 2019ko martxoak 7an eguneratu zen</p>
+
+      <p>Jatorrian <a href="https://github.com/discourse/discourse">Discourse sarearen pribatutasun politikatik</a> moldatua.</p>
+    title: "%{instance} instantziaren erabilera baldintzak eta pribatutasun politika"
+  themes:
+    contrast: Kontraste altua
+    default: Mastodon
+    mastodon-light: Mastodon (argia)
+  time:
+    formats:
+      default: "%Y(e)ko %b %d, %H:%M"
+  two_factor_authentication:
+    code_hint: Sartu zure autentifikazio aplikazioak sortutako kodea berresteko
+    description_html: "<strong>Bi faktoreetako autentifikazioa</strong> gaitzen baduzu, saioa hasteko telefonoa eskura izan beharko duzu, honek zuk sartu behar dituzun kodeak sortuko dituelako."
+    disable: Desgaitu
+    enable: Gaitu
+    enabled: Bi faktoreetako autentifikazioa gaituta dago
+    enabled_success: Bi faktoreetako autentifikazioa ongi gaitu da
+    generate_recovery_codes: Sortu berreskuratze kodeak
+    instructions_html: "<strong>Eskaneatu QR kode hau Google Authentiocator edo antzeko TOTTP aplikazio batekin zure telefonoan</strong>. Hortik aurrera, aplikazio horrek saioa hasteko sartu behar dituzun kodeak sortuko ditu."
+    lost_recovery_codes: Berreskuratze kodeek telefonoa galtzen baduzu kontura sarbidea berreskuratzea ahalbideko dizute. Berreskuratze kodeak galdu badituzu, hemen birsortu ditzakezu. Zure berreskuratze kode zaharrak indargabetuko dira,.
+    manual_instructions: 'Ezin baduzu QR kodea eskaneatu eta eskuz sartu behar baduzu, hona sekretua testu hutsean:'
+    recovery_codes: Berreskuratze kodeen babes-kopia
+    recovery_codes_regenerated: Berreskuratze kodeak ongi sortu dira
+    recovery_instructions_html: Zure telefonora sarbidea galtzen baduzu, beheko berreskuratze kode bat erabili dezakezu kontura berriro sartu ahal izateko. <strong>Gore barreskuratze kodeak toki seguruan</strong>. Adibidez inprimatu eta dokumentu garrantzitsuekin batera gorde.
+    setup: Ezarri
+    wrong_code: Sartutako kodea baliogabea da! Zerbitzariaren eta gailuaren erlojuak ondo ezarrita daude?
+  user_mailer:
+    backup_ready:
+      explanation: Zure Mastodon kontuaren babes-kopia osoa eskatu duzu. Deskargatzeko prest dago!
+      subject: Zure artxiboa deskargatzeko prest dago
+      title: Artxiboa jasotzea
+    welcome:
+      edit_profile_action: Ezarri profila
+      edit_profile_step: Pertsonalizatu profila abatar bat igoz, goiburu bat, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik gainbegiratu nahi badituzu, kontua giltzaperatu dezakezu.
+      explanation: Hona hasteko aholku batzuk
+      final_action: Hasi mezuak bidaltzen
+      final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure mezu publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.'
+      full_handle: Zure erabiltzaile-izen osoa
+      full_handle_hint: Hau da lagunei esango zeniena beste instantzia batetik zu jarraitzeko edo zuri mezuak bidaltzeko.
+      review_preferences_action: Aldatu hobespenak
+      review_preferences_step: Ziurtatu hobespenak ezartzen dituzula, jaso nahi dituzu e-mail mezuak, lehenetsitako pribatutasuna mezu berrietarako. Mareatzen ez bazaitu GIF-ak automatikoki abiatzea ezarri dezakezu ere.
+      subject: Ongi etorri Mastodon-era
+      tip_bridge_html: Twitter-etik bazatoz, Mastodon-en lagunak aurkitu ditzakezu <a href="%{bridge_url}">zubi aplikazioa</a> erabiliz. Beraiek ere zubi aplikazioa erabili badute dabil besterik ez!
+      tip_federated_timeline: Federatutako denbora-lerroan Mastodon sarearen trafikoa ikusten da. Baina zure instantziako auzokideak jarraitutakoak besterik ez daude hor, ez da osoa.
+      tip_following: Lehenetsita zerbitzariko administratzailea jarraitzen duzu. Jende interesgarri gehiago aurkitzeko, egiaztatu denbora-lerro lokala eta federatua.
+      tip_local_timeline: Denbora-lerro lokalean %{instance} instantziako trafikoa ikusten da. Hauek zure instantziako auzokideak dira!
+      tip_mobile_webapp: Zure mugikorreko nabigatzaileak Mastodon hasiera pantailan gehitzea eskaintzen badizu, push jakinarazpenak jaso ditzakezu. Aplikazio natiboaren parekoa da zentzu askotan!
+      tips: Aholkuak
+      title: Ongi etorri, %{name}!
+  users:
+    invalid_email: E-mail helbidea baliogabea da
+    invalid_otp_token: Bi faktoreetako kode baliogabea
+    otp_lost_help_html: 'Bietara sarbidea galdu baduzu, jarri kontaktuan hemen: %{email}'
+    seamless_external_login: Kanpo zerbitzu baten bidez hasi duzu saioa, beraz pasahitza eta e-mail ezarpenak ez daude eskuragarri.
+    signed_in_as: 'Saioa honela hasita:'
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 82636618a..640f822c5 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -760,9 +760,13 @@ gl:
 
       <hr class="spacer" />
 
-      <h3 id="coppa">Children's Online Privacy Protection Act Compliance</h3>
+      <h3 id="children">Utilización do sitio web por menores</h3>
 
-      <p>O noso sitio, productos e servizos diríxense a persoas que teñen un mínimo de 13 anos. Si este servidor está en EEUU, e ten vostede menos de 13 anos, a requerimento da COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) non utilice este sitio.</p>
+      <p>Si este servidor está na UE ou no EEE: a nosa web, productos e servizos están dirixidos a persoas de 16 ou máis anos. Si ten menos de 16 anos, a requerimento da GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) non utilice esta web.</p>
+
+      <p>Si este servidor está nos EEUU: a nosa web, productos e servizos están dirixidos a persoas de 13 ou máis anos. Si non ten 13 anos de idade, a requerimento de COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) non utilice esta web.</p>
+
+      <p>Os requerimentos legais poden ser diferentes si este servidor está baixo outra xurisdición.</p>
 
       <hr class="spacer" />
 
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 38f411dd5..14fc3d2fe 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -40,6 +40,7 @@ ko:
     following: 팔로잉
     media: 미디어
     moved_html: "%{name}은 %{new_profile_link}으로 이동되었습니다:"
+    network_hidden: 이 정보는 사용할 수 없습니다
     nothing_here: 아무 것도 없습니다!
     people_followed_by: "%{name} 님이 팔로우 중인 계정"
     people_who_follow: "%{name} 님을 팔로우 중인 계정"
@@ -284,7 +285,7 @@ ko:
         create_and_resolve: 기록을 작성하고 해결됨으로 표시
         create_and_unresolve: 기록 작성과 함께 미해결로 표시
         delete: 삭제
-        placeholder: 이 리포트에 대한 조치, 다른 업데이트 사항에 대해 설명합니다…
+        placeholder: 이 리포트에 대한 조치, 기타 관련 된 사항에 대해 설명합니다…
       reopen: 리포트 다시 열기
       report: '신고 #%{id}'
       report_contents: 내용
@@ -551,7 +552,7 @@ ko:
       subject:
         one: "1건의 새로운 알림 \U0001F418"
         other: "%{count}건의 새로운 알림 \U0001F418"
-      title: 당신이 없는 동안에…
+      title: 당신이 없는 동안에...
     favourite:
       body: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다:"
       subject: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다"
@@ -670,6 +671,7 @@ ko:
       video:
         one: "%{count} 영상"
         other: "%{count} 영상"
+    boosted_from_html: "%{acct_link} 님이 부스트"
     content_warning: '열람 주의: %{warning}'
     disallowed_hashtags:
       one: '허용 되지 않은 해시태그를 포함하고 있습니다: %{tags}'
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 1fe3b5472..ea827091c 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -342,8 +342,8 @@ nl:
         desc_html: Wordt op de uitgebreide informatiepagina weergegeven<br>Je kan ook hier HTML gebruiken
         title: Uitgebreide omschrijving Mastodonserver
       site_terms:
-        desc_html: Je kan hier jouw eigen privacybeleid, gebruikersvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken
-        title: Aangepaste gebruikersvoorwaarden
+        desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken
+        title: Aangepaste gebruiksvoorwaarden
       site_title: Naam Mastodonserver
       thumbnail:
         desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen
@@ -393,7 +393,7 @@ nl:
     warning: Wees voorzichtig met deze gegevens. Deel het nooit met iemand anders!
     your_token: Jouw toegangscode
   auth:
-    agreement_html: Wanneer je op registreren klikt ga je akkoord met het opvolgen van <a href="%{rules_path}">de regels van deze server</a> en <a href="%{terms_path}">onze gebruikersvoorwaarden</a>.
+    agreement_html: Wanneer je op registreren klikt ga je akkoord met het opvolgen van <a href="%{rules_path}">de regels van deze server</a> en <a href="%{terms_path}">onze gebruiksvoorwaarden</a>.
     change_password: Wachtwoord
     confirm_email: E-mail bevestigen
     delete_account: Account verwijderen
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index faf4f6d17..80ee227d6 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -164,9 +164,9 @@ oc:
         destroy_email_domain_block: "%{name} botèt a la lista blanca lo domeni de corrièl %{target}"
         destroy_status: "%{name} levèt l‘estatut a %{target}"
         disable_2fa_user: "%{name} desactivèt l’autentificacion en dos temps per %{target}"
-        disable_custom_emoji: "%{name} desactivèt l‘emoji %{target}"
+        disable_custom_emoji: "%{name} desactivèt l’emoji %{target}"
         disable_user: "%{name} desactivèt la connexion per %{target}"
-        enable_custom_emoji: "%{name} activèt l‘emoji %{target}"
+        enable_custom_emoji: "%{name} activèt l’emoji %{target}"
         enable_user: "%{name} activèt la connexion per %{target}"
         memorialize_account: "%{name} transformèt en memorial la pagina de perfil a %{target}"
         promote_user: "%{name} promoguèt %{target}"
@@ -286,7 +286,7 @@ oc:
         delete: Escafar
         placeholder: Explicatz las accions que son estadas menadas o quicòm de ligat al senhalament…
       reopen: Tornar dobrir lo rapòrt
-      report: 'senhalament #%{id}'
+      report: 'Senhalament #%{id}'
       report_contents: Contengut
       reported_account: Compte senhalat
       reported_by: Senhalat per
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 89cc26cf3..4c7f82f49 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -81,7 +81,7 @@ pt-BR:
       domain: Domínio
       edit: Editar
       email: E-mail
-      email_status: Estado del correo electrónico
+      email_status: Estado do e-mail
       enable: Ativar
       enabled: Ativado
       feed_url: URL do feed
@@ -121,9 +121,9 @@ pt-BR:
       redownload: Atualizar avatar
       remove_avatar: Remover avatar
       resend_confirmation:
-        already_confirmed: Este usuario ya está confirmado
-        send: Reenviar el correo electrónico de confirmación
-        success: "¡Correo electrónico de confirmación enviado con éxito!"
+        already_confirmed: Este usuário já está confirmado
+        send: Re-enviar o email de confirmação
+        success: E-mail de confirmação enviado com sucesso!
       reset: Anular
       reset_password: Modificar senha
       resubscribe: Reinscrever-se
@@ -759,9 +759,13 @@ pt-BR:
 
       <hr class="spacer" />
 
-      <h3 id="coppa">Conformidade com a COPPA (Children's Online Privacy Protection Act)</h3>
+      <h3 id="children">Uso desse site por crianças</h3>
 
-      <p>Nosso site, produto e serviços são direcionados à pessoas que tem ao menos 13 anos de idade. Se esse servidor está hospedado nos EUA e você tem menos de 13 anos, de acordo com os requerimentos da COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) não use este site.</p>
+      <p>Se este servidor está na UE ou no EEE: Nosso site, produto e serviços são direcionados à pessoas que tem ao menos 16 anos de idade. Se você tem menos de 16 anos, de acordo com os requisitos da RGPD (<a href="https://pt.wikipedia.org/wiki/Regulamento_Geral_sobre_a_Prote%C3%A7%C3%A3o_de_Dados">Regulamento Geral sobre a Proteção de Dados</a>) não use este site.</p>
+
+      <p>Se este servidor está hospedado nos EUA: Nosso site, produto e serviços são direcionados à pessoas que tem ao menos 13 anos de idade. Se você tem menos de 13 anos, de acordo com os requerimentos da COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) não use este site</p>
+
+      <p>Os requisitos da lei podem ser diferentes se esse servidor estiver em outra jurisdição</p>
 
       <hr class="spacer" />
 
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index a1370c91d..3a6f2c993 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -70,7 +70,7 @@ pt:
       domain: Domínio
       edit: Editar
       email: E-mail
-      email_status: État de la messagerie
+      email_status: Estado do correio electrónico
       enable: Ativar
       enabled: Ativado
       feed_url: URL do Feed
@@ -109,9 +109,9 @@ pt:
       push_subscription_expires: A Inscrição PuSH expira
       redownload: Atualizar avatar
       resend_confirmation:
-        already_confirmed: Cet utilisateur est déjà confirmé
-        send: Renvoyer un courriel de confirmation
-        success: Email de confirmation envoyé avec succès!
+        already_confirmed: Este usuário já está confirmado
+        send: Reenviar um email de confirmação
+        success: Email de confirmação enviado com sucesso!
       reset: Restaurar
       reset_password: Reset palavra-passe
       resubscribe: Reinscrever
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index 8d2470435..25d4a05fb 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -4,7 +4,7 @@ co:
     hints:
       defaults:
         avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à 400x400px
-        bot: Avisa a ghjente chì stu contu ùn riprisenta micca una parsona
+        bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu
         digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti
         display_name:
           one: Ci ferma <span class="name-counter">1</span> caratteru
@@ -15,6 +15,7 @@ co:
         note:
           one: Ci ferma <span class="name-counter">1</span> caratteru
           other: Ci fermanu <span class="name-counter">%{count}</span> caratteri
+        setting_hide_network: I vostri abbunati è abbunamenti ùn saranu micca mustrati nant’à u vostru prufile
         setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti
         setting_theme: Tocca à l’apparenza di Mastodon quandu site cunnettatu·a da qualch’apparechju.
       imports:
@@ -54,6 +55,7 @@ co:
         setting_default_sensitive: Sempre cunsiderà media cum’è sensibili
         setting_delete_modal: Mustrà une cunfirmazione per toglie un statutu
         setting_display_sensitive_media: Sempre mustrà media marcati cum’è sensibili
+        setting_hide_network: Piattà a vostra rete
         setting_noindex: Dumandà à i motori di ricerca internet d’un pudè micca esse truvatu·a cusì
         setting_reduce_motion: Fà chì l’animazione vanu più pianu
         setting_system_font_ui: Pulizza di caratteri di u sistemu
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 1bf1cbf78..c0a451000 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -4,7 +4,7 @@ de:
     hints:
       defaults:
         avatar: PNG, GIF oder JPG. Maximal 2 MB. Wird auf 400×400 px herunterskaliert
-        bot: Warnt Besucher das dieser Nutzer keine echte Person darstellt
+        bot: Dieser Account führt hauptsächlich automatische Aktionen aus und wird möglicherweise nicht überwacht
         digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt
         display_name:
           one: <span class="name-counter">1</span> Zeichen verbleibt
@@ -15,6 +15,7 @@ de:
         note:
           one: <span class="note-counter">1</span> Zeichen verbleibt
           other: <span class="note-counter">%{count}</span> Zeichen verbleiben
+        setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt
         setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge
         setting_theme: Wirkt sich darauf aus, wie Mastodon aussieht, egal auf welchem Gerät du eingeloggt bist.
       imports:
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 851b678e1..74c2084d5 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -55,7 +55,7 @@ en:
         setting_default_sensitive: Always mark media as sensitive
         setting_delete_modal: Show confirmation dialog before deleting a toot
         setting_display_sensitive_media: Always show media marked as sensitive
-        setting_favourite_modal: Show confirmation dialog before favouriting
+        setting_favourite_modal: Show confirmation dialog before favouriting (applies to Glitch flavour only)
         setting_hide_network: Hide your network
         setting_noindex: Opt-out of search engine indexing
         setting_reduce_motion: Reduce motion in animations
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 22b71bac1..a2720ac5d 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -4,36 +4,78 @@ eu:
     hints:
       defaults:
         avatar: PNG, GIF edo JPG. Gehienez 2MB. 400x400px neurrira eskalatuko da
+        bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen
+        digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu
+        display_name:
+          one: Karaktere <span class="name-counter">1</span> geratzen da
+          other: <span class="name-counter">%{count}</span> karaktere geratzen dira
+        fields: 4 elementu bistaratu ditzakezu taula batean zure profilean
+        header: PNG, GIF edo JPG. Gehienez 2MB. 700x335px eskalara txikituko da
         locked: Jarraitzaileak eskuz onartu behar dituzu
         note:
-          other: <span class="note-counter"> %{count}</span> karaktere faltan
-        setting_noindex: Zure profil publiko eta egoera orrietan eragina du
+          one: Karaktere<span class="note-counter">1</span> geratzen da
+          other: <span class="note-counter"> %{count}</span> karaktere geratzen dira
+        setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean
+        setting_noindex: Zure profil publiko eta toot orrietan eragina du
         setting_theme: Edozein gailutik konektatzean Mastodon-en itxuran eragiten du.
       imports:
-        data: Mastodon-en beste instantzia batetik CSV fitxategia esportatu da
+        data: Beste Mastodon instantzia batetik esportatutako CSV fitxategia
+      sessions:
+        otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:'
       user:
-        filtered_languages: Aukeratutako hizkuntzak timeline publikotik filtratuko dira
+        filtered_languages: Ez dira aukeratutako hizkuntzak erakutsiko zure denbora-lerro publikoetan
     labels:
       account:
         fields:
           name: Etiketa
           value: Edukia
       defaults:
-        confirm_new_password: Pasahitz berria berretsi
-        confirm_password: Pasahitza berretsi
+        avatar: Abatarra
+        bot: Hau bot kontu bat da
+        confirm_new_password: Berretsi pasahitz berria
+        confirm_password: Berretsi pasahitza
         current_password: Oraingo pasahitza
-        display_name: Izena erakutsi
+        data: Datuak
+        display_name: Pantaila-izena
         email: Helbide elektronikoa
+        expires_in: Iraungitzea
         fields: Profilaren metadatuak
         filtered_languages: Iragazitako hizkuntzak
+        header: Goiburua
         locale: Hizkuntza
+        locked: Giltzapetu kontua
+        max_uses: Gehieneko erabiltzaile kopurua
         new_password: Pasahitz berria
         note: Biografia
+        otp_attempt: Bi faktoreetako kodea
         password: Pasahitza
+        setting_auto_play_gif: Automatikoki abiatu GIF animatuak
         setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik
-        setting_default_privacy: Mezuaren pribatutasuna
+        setting_default_privacy: Mezuen pribatutasuna
+        setting_default_sensitive: Beti markatu edukiak mingarri gisa
+        setting_delete_modal: Erakutsi baieztapen elkarrizketa-koadroa toot bat ezabatu aurretik
+        setting_display_sensitive_media: Beti erakutsi mingarri marka duen edukia
+        setting_hide_network: Ezkutatu zure sarea
+        setting_noindex: Atera bilaketa motorraren idexaziotik
+        setting_reduce_motion: Murriztu animazioen mugimenduak
+        setting_system_font_ui: Erabili sistemako tipografia lehenetsia
+        setting_theme: Gunearen gaia
+        setting_unfollow_modal: Erakutsi baieztapen elkarrizketa-koadroa inor jarraitzeari utzi aurretik
+        severity: Larritasuna
+        type: Inportazio mota
+        username: Erabiltzaile-izena
+        username_or_email: Erabiltzaile-izena edo e-mail helbidea
+      interactions:
+        must_be_follower: Blokeatu jarraitzaile ez direnen jakinarazpenak
+        must_be_following: Blokeatu zuk jarraitzen ez dituzunen jakinarazpenak
+        must_be_following_dm: Blokeatu zuk jarraitzen ez dituzunen mezu zuzenak
       notification_emails:
-        reblog: Bidali e-mail mezua norbaitek zure mezuari bultzada ematen badio
+        digest: Bidali laburpenak e-mail bidez
+        favourite: Bidali e-mail bat norbaitek zure mezua gogoko duenean
+        follow: Bidali e-mail bat norbaitek jarraitzen zaituenean
+        follow_request: Bidali e-mail bat norbaitek zu jarraitzea eskatzen duenean
+        mention: Bidali e-mail bat norbaitek zu aipatzean
+        reblog: Bidali e-mail bat norbaitek zure mezuari bultzada ematen badio
     'no': Ez
     required:
       mark: "*"
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 59a4cf525..cd77bffe3 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -4,8 +4,8 @@ it:
     hints:
       defaults:
         avatar: PNG, GIF o JPG. Al massimo 2MB. Verranno scalate a 400x400px
-        bot: Avverte che l'account non rappresenta una persona
-        digest: Inviata solo dopo un lungo periodo di intattività e solo se hai ricevuto qualsiasi messaggio personale in tua assenza
+        bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona
+        digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza
         display_name:
           one: <span class="name-counter">1</span> carattere rimanente
           other: <span class="name-counter">%{count}</span> caratteri rimanenti
@@ -15,15 +15,15 @@ it:
         note:
           one: <span class="note-counter">1</span> carattere rimanente
           other: <span class="note-counter">%{count}</span> caratteri rimanenti
-        setting_hide_network: Chi segui e chi segue te no saranno mostrati sul tuo profilo
-        setting_noindex: Coinvolge il tuo profilo pubblico e le pagine di stato
-        setting_theme: Coinvolge il modo in cui Mastodon verrà visualizzato quando sarai collegato da qualsiasi dispositivo.
+        setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo
+        setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status
+        setting_theme: Ha effetto sul modo in cui Mastodon verrà visualizzato quando sarai collegato da qualsiasi dispositivo.
       imports:
-        data: File CSV esportato da un altra istanza di Mastodon
+        data: File CSV esportato da un'altra istanza di Mastodon
       sessions:
         otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:'
       user:
-        filtered_languages: Le lingue selezionate verranno filtrate dalla timeline pubblica per te
+        filtered_languages: Le lingue selezionate verranno filtrate dalla tua timeline pubblica
     labels:
       account:
         fields:
@@ -39,7 +39,7 @@ it:
         display_name: Nome visualizzato
         email: Indirizzo email
         expires_in: Scade dopo
-        fields: Metadata profilo
+        fields: Metadati del profilo
         filtered_languages: Lingue filtrate
         header: Header
         locale: Lingua
@@ -51,7 +51,7 @@ it:
         password: Password
         setting_auto_play_gif: Play automatico GIF animate
         setting_boost_modal: Mostra dialogo di conferma prima del boost
-        setting_default_privacy: Privacy post
+        setting_default_privacy: Privacy dei post
         setting_default_sensitive: Segna sempre i media come sensibili
         setting_delete_modal: Mostra dialogo di conferma prima di eliminare un toot
         setting_display_sensitive_media: Mostra sempre i media segnati come sensibili
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 9120b58c7..b9954e0ad 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -15,6 +15,7 @@ ko:
         note:
           one: <span class="note-counter">1</span> 글자 남음
           other: <span class="note-counter">%{count}</span> 글자 남음
+        setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들이 내 프로필에 표시되지 않게 합니다
         setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다
         setting_theme: 로그인중인 모든 디바이스에 적용되는 디자인입니다.
       imports:
@@ -54,6 +55,7 @@ ko:
         setting_default_sensitive: 미디어를 언제나 민감한 컨텐츠로 설정
         setting_delete_modal: 툿 삭제 전 확인 창을 표시
         setting_display_sensitive_media: 열람주의로 설정 된 이미지도 항상 보여주기
+        setting_hide_network: 내 네트워크 숨기기
         setting_noindex: 검색엔진의 인덱싱을 거절
         setting_reduce_motion: 애니메이션 줄이기
         setting_system_font_ui: 시스템의 초기 설정 폰트를 사용
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index c6887a363..ae0dc6af5 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -25,7 +25,7 @@ sk:
       sessions:
         otp: 'Napíš sem dvoj-faktorový kód z telefónu, alebo použi jeden z tvojích obnovovacích kódov:'
       user:
-        filtered_languages: Zaškrtnuté jazyky budú pre teba vynechané nebudú z verejnej časovej osi
+        filtered_languages: Zaškrtnuté jazyky budú pre teba vynechané z verejnej časovej osi
     labels:
       account:
         fields:
@@ -42,7 +42,7 @@ sk:
         email: Emailová adresa
         expires_in: Expirovať po
         fields: Metadáta profilu
-        filtered_languages: Filtrované jazyky
+        filtered_languages: Vynechanie jazykov
         header: Obrázok v hlavičke
         locale: Jazyk
         locked: Zamknúť účet
@@ -53,16 +53,16 @@ sk:
         password: Heslo
         setting_auto_play_gif: Automaticky prehrávať animované GIFy
         setting_boost_modal: Zobrazovať potvrdzovacie okno pred re-toot
-        setting_default_privacy: Nastavenie súkromia príspevkov
+        setting_default_privacy: Súkromie príspevkov
         setting_default_sensitive: Označ všetky mediálne súbory ako chúlostivé
         setting_delete_modal: Zobrazuj potvrdzovacie okno pred vymazaním toot-u
-        setting_display_sensitive_media: Vždy zobraz médiá označené ako chúlostivé
+        setting_display_sensitive_media: Vždy zobrazuj médiá ktoré sú označené ako chúlostivé
         setting_hide_network: Ukri svoju sieť kontaktov
         setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče
         setting_reduce_motion: Redukovať pohyb v animáciách
         setting_system_font_ui: Použiť základné systémové písmo
-        setting_theme: Vzhľad stránky
-        setting_unfollow_modal: Zobraziť potvrdzovacie okno pred skončením sledovania iného užívateľa
+        setting_theme: Vzhľad webu
+        setting_unfollow_modal: Zobrazuj potvrdzovacie okno pred skončením sledovania iného užívateľa
         severity: Závažnosť
         type: Typ importu
         username: Prezývka
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index d887d2de2..e2f6b7947 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -44,8 +44,8 @@ sk:
     nothing_here: Nič tu nie je!
     people_followed_by: Ľudia, ktorých %{name} sleduje
     people_who_follow: Ľudia sledujúci %{name}
-    posts: Tooty
-    posts_with_replies: Toot príspevky s odpoveďami
+    posts: Príspevky
+    posts_with_replies: Príspevky s odpoveďami
     remote_follow: Sleduj vzdialeného
     reserved_username: Prihlasovacie meno je rezervované
     roles:
@@ -696,11 +696,12 @@ sk:
     manual_instructions: 'Pokiaľ nemôžeš oskenovať daný QR kód, a potrebuješ ho zadať ručne, tu je tajomstvo v textovom formáte:'
     recovery_codes: Zálohuj kódy pre obnovu
     recovery_codes_regenerated: Zálohové kódy boli úspešne zvova vygenerované
-    setup: Nastavenie
-    wrong_code: Zadaný kód bol neplatný. Je serverový čas a čas na zariadení správny?
+    recovery_instructions_html: Keď hocikedy stratíš prístup k svojmu telefónu, môžeš použiť jeden z prístupových kódov nižšie pre obnovenie prístupu k svojmu účtu. <strong>Skladuj tieto prístupové kódy na bezpečnom mieste</strong>. Napríklad ich môžeš vytlačiť a uložiť ich spolu s inými dôležitými dokumentami.
+    setup: Nastav
+    wrong_code: Zadaný kód bol neplatný! Je serverový čas a čas na zariadení správny?
   user_mailer:
     backup_ready:
-      explanation: Vyžiadal/a si si úplnú zálohu tvojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie!
+      explanation: Vyžiadal/a si si úplnú zálohu svojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie!
       subject: Tvoj archív je pripravený na stiahnutie
       title: Odber archívu
     welcome:
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 00c4d8fb7..43c31b3b7 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -36,6 +36,7 @@ sl:
     following: Sledim
     media: Medij
     moved_html: "%{name} se je prestavil na %{new_profile_link}:"
+    network_hidden: Te informacije niso na voljo
     nothing_here: Nič ni tukaj!
     people_followed_by: Ljudje, ki jim sledi %{name}
     people_who_follow: Ljudje, ki sledijo %{name}
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index c489d8bd4..dd6541cc9 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -9,7 +9,7 @@ zh-HK:
     contact: 聯絡
     contact_missing: 未設定
     contact_unavailable: 未公開
-    description_headline: 關於 %{domain}
+    description_headline: 甚麼是 %{domain} ?
     domain_count_after: 個其他服務站
     domain_count_before: 已連接至
     extended_description_html: |
@@ -41,7 +41,7 @@ zh-HK:
     media: 媒體
     moved_html: "%{name} 已經轉移到 %{new_profile_link}:"
     network_hidden: 此信息不可用
-    nothing_here: 暫時未有內容可以顯示
+    nothing_here: 暫時未有內容可以顯示。
     people_followed_by: "%{name} 關注的人"
     people_who_follow: 關注 %{name} 的人
     posts: 文章
@@ -215,7 +215,7 @@ zh-HK:
         create: 新增域名阻隔
         hint: "「域名阻隔」不會隔絕該域名用戶的用戶進入本站資料庫,而是會在時候自動套用特定的審批操作。"
         severity:
-          desc_html: "「<strong>自動靜音</strong>」令該域名用戶的文章,設為只對關注者顯示,沒有關注的人會看不到。 「<strong>自動刪除</strong>」會自動將該域名用戶的文章、媒體檔案、個人資料自本服務站刪除。"
+          desc_html: "「<strong>自動靜音</strong>」令該域名下用戶的文章,設為只對關注者顯示,沒有關注的人會看不到。 「<strong>自動刪除</strong>」會刪除將該域名下用戶的文章、媒體檔案和個人資料。「<strong>無</strong>」則會拒絕接收來自該域名的媒體檔案。"
           noop: 無
           silence: 自動靜音
           suspend: 自動刪除
@@ -374,7 +374,7 @@ zh-HK:
     title: 管理
   admin_mailer:
     new_report:
-      body: "%{reporter} 舉報了用戶 %{target}。"
+      body: "%{reporter} 舉報了用戶 %{target}"
       body_remote: 來自 %{domain} 的用戶舉報了用戶 %{target}
       subject: 來自 %{instance} 的用戶舉報(#%{id})
   application_mailer:
@@ -423,7 +423,7 @@ zh-HK:
     follow_request: 關注請求已發送给:
     following: 成功!你正在關注:
     post_follow:
-      close: 你也可以直接關閉這個頁面
+      close: 你也可以直接關閉這個頁面。
       return: 返回至個人資料頁
       web: 返回本站
     title: 關注 %{acct}
@@ -450,9 +450,9 @@ zh-HK:
     warning_html: 我們只能保證本服務站上的內容將會被徹底刪除。對於已經被廣泛傳播的內容,它們在本服務站以外的某些地方可能仍然可見。此外,失去連接的服務站以及停止接收訂閱的服務站所存儲的數據亦無法刪除。
     warning_title: 關於已傳播的內容的警告
   errors:
-    '403': 你沒有觀看本頁的權限
-    '404': 找不到內容
-    '410': 內容已被刪除
+    '403': 你沒有觀看本頁的權限。
+    '404': 找不到內容。
+    '410': 內容已被刪除。
     '422':
       content: 無法確認登入資訊。會不會你阻擋了本站使用 Cookies 的權限?
       title: 無法確認登入資訊
@@ -487,7 +487,7 @@ zh-HK:
     unlocked_warning_html: 目前任何人都可以看到你的私人文章,若%{lock_link}的話,你將可以審批關注者。
     unlocked_warning_title: 你的用戶目前為「公共」
   generic:
-    changes_saved_msg: 已成功儲存修改
+    changes_saved_msg: 已成功儲存修改。
     powered_by: 網站由 %{link} 開發
     save_changes: 儲存修改
     validation_errors:
@@ -552,7 +552,7 @@ zh-HK:
         other: "自從上次登入以來,你收到 %{count} 則新的通知 \U0001F418"
       title: 在你不在的這段時間……
     favourite:
-      body: 你的文章是 %{name} 的最愛!
+      body: 您的文章被 %{name} 收藏:
       subject: "%{name} 收藏了你的文章"
       title: 新的收藏
     follow:
@@ -570,7 +570,7 @@ zh-HK:
       subject: "%{name} 在文章中提及你"
       title: 新的提及
     reblog:
-      body: 你的文章得到 %{name} 的轉推
+      body: 您的文章被 %{name} 轉推:
       subject: "%{name} 轉推了你的文章"
       title: 新的轉推
   number:
@@ -640,7 +640,7 @@ zh-HK:
       windows_mobile: Windows Mobile
       windows_phone: Windows Phone
     revoke: 取消
-    revoke_success: 作業階段取消成功。
+    revoke_success: 作業階段成功取消
     title: 作業階段
   settings:
     authorized_apps: 授權應用程式
@@ -714,7 +714,7 @@ zh-HK:
     manual_instructions: 如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰
     recovery_codes: 備份恢復驗證碼
     recovery_codes_regenerated: 成功產生新的備用驗證碼
-    recovery_instructions_html: 如果你遺失了安裝認證器的裝置(如︰你的電話),你可以使用備用驗證碼進行登入。請確保將備用驗證碼收藏穩當,(如列印出來,和你其他重要文件一起存放)
+    recovery_instructions_html: 如果你遺失了安裝認證器的裝置(如︰你的電話),你可以使用備用驗證碼進行登入。請確保將備用驗證碼收藏穩當,(如列印出來,和你其他重要文件一起存放)。
     setup: 設定
     wrong_code: 你輸入的認證碼並不正確!可能伺服器時間和你手機不一致,請檢查你手機的時鐘,或與本站管理員聯絡。
   user_mailer:
diff --git a/config/routes.rb b/config/routes.rb
index 6dd9975b4..3370f01c3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -271,7 +271,6 @@ Rails.application.routes.draw do
       resources :favourites, only: [:index]
       resources :bookmarks,  only: [:index]
       resources :reports,    only: [:index, :create]
-      resources :trends,     only: [:index]
 
       namespace :apps do
         get :verify_credentials, to: 'credentials#show'
diff --git a/db/migrate/20180528141303_fix_accounts_unique_index.rb b/db/migrate/20180528141303_fix_accounts_unique_index.rb
new file mode 100644
index 000000000..96cee37f9
--- /dev/null
+++ b/db/migrate/20180528141303_fix_accounts_unique_index.rb
@@ -0,0 +1,92 @@
+class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    say ''
+    say 'WARNING: This migration may take a *long* time for large instances'
+    say 'It will *not* lock tables for any significant time, but it may run'
+    say 'for a very long time. We will pause for 10 seconds to allow you to'
+    say 'interrupt this migration if you are not ready.'
+    say ''
+    say 'This migration will irreversibly delete user accounts with duplicate'
+    say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
+    say 'task to manually deal with such accounts before running this migration.'
+
+    10.downto(1) do |i|
+      say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
+      sleep 1
+    end
+
+    duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_hash
+
+    duplicates.each do |row|
+      deduplicate_account!(row['ids'].split(','))
+    end
+
+    remove_index :accounts, name: 'index_accounts_on_username_and_domain_lower' if index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower')
+    safety_assured { execute 'CREATE UNIQUE INDEX CONCURRENTLY index_accounts_on_username_and_domain_lower ON accounts (lower(username), lower(domain))' }
+    remove_index :accounts, name: 'index_accounts_on_username_and_domain' if index_name_exists?(:accounts, 'index_accounts_on_username_and_domain')
+  end
+
+  def down
+    raise ActiveRecord::IrreversibleMigration
+  end
+
+  private
+
+  def deduplicate_account!(account_ids)
+    accounts          = Account.where(id: account_ids).to_a
+    accounts          = accounts.first.local? ? accounts.sort_by(&:created_at) : accounts.sort_by(&:updated_at).reverse
+    reference_account = accounts.shift
+
+    say_with_time "Deduplicating @#{reference_account.acct} (#{accounts.size} duplicates)..." do
+      accounts.each do |other_account|
+        if other_account.public_key == reference_account.public_key
+          # The accounts definitely point to the same resource, so
+          # it's safe to re-attribute content and relationships
+          merge_accounts!(reference_account, other_account)
+        elsif other_account.local?
+          # Since domain is in the GROUP BY clause, both accounts
+          # are always either going to be local or not local, so only
+          # one check is needed. Since we cannot support two users with
+          # the same username locally, one has to go. 😢
+          other_account.user&.destroy
+        end
+
+        other_account.destroy
+      end
+    end
+  end
+
+  def merge_accounts!(main_account, duplicate_account)
+    [Status, Mention, StatusPin, StreamEntry].each do |klass|
+      klass.where(account_id: duplicate_account.id).in_batches.update_all(account_id: main_account.id)
+    end
+
+    # Since it's the same remote resource, the remote resource likely
+    # already believes we are following/blocking, so it's safe to
+    # re-attribute the relationships too. However, during the presence
+    # of the index bug users could have *also* followed the reference
+    # account already, therefore mass update will not work and we need
+    # to check for (and skip past) uniqueness errors
+    [Favourite, Follow, FollowRequest, Block, Mute].each do |klass|
+      klass.where(account_id: duplicate_account.id).find_each do |record|
+        begin
+          record.update_attribute(:account_id, main_account.id)
+        rescue ActiveRecord::RecordNotUnique
+          next
+        end
+      end
+    end
+
+    [Follow, FollowRequest, Block, Mute].each do |klass|
+      klass.where(target_account_id: duplicate_account.id).find_each do |record|
+        begin
+          record.update_attribute(:target_account_id, main_account.id)
+        rescue ActiveRecord::RecordNotUnique
+          next
+        end
+      end
+    end
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index def0505a6..796924123 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2018_05_14_140000) do
+ActiveRecord::Schema.define(version: 2018_05_28_141303) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -77,10 +77,9 @@ ActiveRecord::Schema.define(version: 2018_05_14_140000) do
     t.jsonb "fields"
     t.string "actor_type"
     t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
-    t.index "lower((username)::text), lower((domain)::text)", name: "index_accounts_on_username_and_domain_lower"
+    t.index "lower((username)::text), lower((domain)::text)", name: "index_accounts_on_username_and_domain_lower", unique: true
     t.index ["uri"], name: "index_accounts_on_uri"
     t.index ["url"], name: "index_accounts_on_url"
-    t.index ["username", "domain"], name: "index_accounts_on_username_and_domain", unique: true
   end
 
   create_table "admin_action_logs", force: :cascade do |t|
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 9a7d49674..622103ea4 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -13,7 +13,7 @@ module Mastodon
     end
 
     def patch
-      0
+      1
     end
 
     def pre
@@ -21,7 +21,7 @@ module Mastodon
     end
 
     def flags
-      ''
+      'rc1'
     end
 
     def to_a
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 00a85fa5e..8ff29ea9e 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -502,18 +502,17 @@ namespace :mastodon do
 
     desc 'Remove media attachments attributed to silenced accounts'
     task remove_silenced: :environment do
-      MediaAttachment.where(account: Account.silenced).find_each(&:destroy)
+      MediaAttachment.where(account: Account.silenced).select(:id).find_in_batches do |media_attachments|
+        Maintenance::DestroyMediaWorker.push_bulk(media_attachments.map(&:id))
+      end
     end
 
     desc 'Remove cached remote media attachments that are older than NUM_DAYS. By default 7 (week)'
     task remove_remote: :environment do
       time_ago = ENV.fetch('NUM_DAYS') { 7 }.to_i.days.ago
 
-      MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).find_each do |media|
-        next unless media.file.exists?
-
-        media.file.destroy
-        media.save
+      MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).find_in_batches do |media_attachments|
+        Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
       end
     end
 
@@ -529,14 +528,8 @@ namespace :mastodon do
       accounts = Account.remote
       accounts = accounts.where(domain: ENV['DOMAIN']) if ENV['DOMAIN'].present?
 
-      accounts.find_each do |account|
-        begin
-          account.reset_avatar!
-          account.reset_header!
-          account.save
-        rescue Paperclip::Error
-          puts "Error resetting avatar and header for account #{username}@#{domain}"
-        end
+      accounts.select(:id).find_in_batches do |accounts_batch|
+        Maintenance::RedownloadAccountMediaWorker.push_bulk(accounts_batch.map(&:id))
       end
     end
   end
@@ -568,8 +561,8 @@ namespace :mastodon do
 
     desc 'Generates home timelines for users who logged in in the past two weeks'
     task build: :environment do
-      User.active.includes(:account).find_each do |u|
-        PrecomputeFeedService.new.call(u.account)
+      User.active.select(:account_id).find_in_batches do |users|
+        RegenerationWorker.push_bulk(users.map(&:account_id))
       end
     end
   end
diff --git a/package.json b/package.json
index a5be28b84..86fa9333d 100644
--- a/package.json
+++ b/package.json
@@ -126,14 +126,14 @@
     "whatwg-url": "^6.4.1"
   },
   "devDependencies": {
-    "babel-eslint": "^8.2.1",
+    "babel-eslint": "^8.2.3",
     "enzyme": "^3.2.0",
     "enzyme-adapter-react-16": "^1.1.0",
-    "eslint": "^4.15.0",
+    "eslint": "^4.19.1",
     "eslint-plugin-import": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^5.1.1",
-    "eslint-plugin-promise": "^3.7.0",
-    "eslint-plugin-react": "^7.5.1",
+    "eslint-plugin-jsx-a11y": "^6.0.3",
+    "eslint-plugin-promise": "^3.8.0",
+    "eslint-plugin-react": "^7.8.2",
     "jest": "^21.2.1",
     "raf": "^3.4.0",
     "react-intl-translations-manager": "^5.0.0",
diff --git a/spec/controllers/settings/migrations_controller_spec.rb b/spec/controllers/settings/migrations_controller_spec.rb
new file mode 100644
index 000000000..a621bcf1c
--- /dev/null
+++ b/spec/controllers/settings/migrations_controller_spec.rb
@@ -0,0 +1,79 @@
+require 'rails_helper'
+
+describe Settings::MigrationsController do
+  render_views
+
+  shared_examples 'authenticate user' do
+    it 'redirects to sign_in page' do
+      is_expected.to redirect_to new_user_session_path
+    end
+  end
+
+  describe 'GET #show' do
+
+    context 'when user is not sign in' do
+      subject { get :show }
+
+      it_behaves_like 'authenticate user'
+    end
+
+    context 'when user is sign in' do
+      subject { get :show }
+
+      let(:user) { Fabricate(:user, account: account) }
+      let(:account) { Fabricate(:account, moved_to_account: moved_to_account) }
+      before { sign_in user, scope: :user }
+
+      context 'when user does not have moved to account' do
+        let(:moved_to_account) { nil }
+
+        it 'renders show page' do
+          is_expected.to have_http_status 200
+          is_expected.to render_template :show
+        end
+      end
+
+      context 'when user does not have moved to account' do
+        let(:moved_to_account) { Fabricate(:account) }
+
+        it 'renders show page' do
+          is_expected.to have_http_status 200
+          is_expected.to render_template :show
+        end
+      end
+    end
+  end
+
+  describe 'PUT #update' do
+
+    context 'when user is not sign in' do
+      subject { put :update }
+
+      it_behaves_like 'authenticate user'
+    end
+
+    context 'when user is sign in' do
+      subject { put :update, params: { migration: { acct: acct } } }
+
+      let(:user) { Fabricate(:user) }
+      before { sign_in user, scope: :user }
+
+      context 'when migration account is changed' do
+        let(:acct) { Fabricate(:account) }
+
+        it 'updates moved to account' do
+          is_expected.to redirect_to settings_migration_path
+          expect(user.account.reload.moved_to_account_id).to eq acct.id
+        end
+      end
+
+      context 'when acct is a current account' do
+        let(:acct) { user.account }
+
+        it 'renders show' do
+          is_expected.to render_template :show
+        end
+      end
+    end
+  end
+end
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index a88b11482..512b6e661 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -525,6 +525,37 @@ RSpec.describe Account, type: :model do
     end
   end
 
+  describe '#statuses_count' do
+    subject { Fabricate(:account) }
+
+    it 'counts statuses' do
+      Fabricate(:status, account: subject)
+      Fabricate(:status, account: subject)
+      expect(subject.statuses_count).to eq 2
+    end
+
+    it 'does not count direct statuses' do
+      Fabricate(:status, account: subject, visibility: :direct)
+      expect(subject.statuses_count).to eq 0
+    end
+
+    it 'is decremented when status is removed' do
+      status = Fabricate(:status, account: subject)
+      expect(subject.statuses_count).to eq 1
+      status.destroy
+      expect(subject.statuses_count).to eq 0
+    end
+
+    it 'is decremented when status is removed when account is not preloaded' do
+      status = Fabricate(:status, account: subject)
+      expect(subject.reload.statuses_count).to eq 1
+      clean_status = Status.find(status.id)
+      expect(clean_status.association(:account).loaded?).to be false
+      clean_status.destroy
+      expect(subject.reload.statuses_count).to eq 0
+    end
+  end
+
   describe '.following_map' do
     it 'returns an hash' do
       expect(Account.following_map([], 1)).to be_a Hash
diff --git a/spec/models/glitch/keyword_mute_spec.rb b/spec/models/glitch/keyword_mute_spec.rb
index 79225e3b9..443832ac7 100644
--- a/spec/models/glitch/keyword_mute_spec.rb
+++ b/spec/models/glitch/keyword_mute_spec.rb
@@ -79,12 +79,18 @@ RSpec.describe Glitch::KeywordMute, type: :model do
         expect(matcher.matches?('(hot take)')).to be_truthy
       end
 
-      it 'escapes metacharacters in keywords' do
+      it 'escapes metacharacters in whole-word keywords' do
         Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)')
 
         expect(matcher.matches?('(hot take)')).to be_truthy
       end
 
+      it 'escapes metacharacters in non-whole-word keywords' do
+        Glitch::KeywordMute.create!(account: alice, keyword: '(-', whole_word: false)
+
+        expect(matcher.matches?('bad (-)')).to be_truthy
+      end
+
       it 'uses case-folding rules appropriate for more than just English' do
         Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern')
 
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index 03d1a94de..14233e824 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -175,6 +175,13 @@ RSpec.describe Status, type: :model do
 
       expect(subject.reblogs_count).to eq 2
     end
+
+    it 'is decremented when reblog is removed' do
+      reblog = Fabricate(:status, account: bob, reblog: subject)
+      expect(subject.reblogs_count).to eq 1
+      reblog.destroy
+      expect(subject.reblogs_count).to eq 0
+    end
   end
 
   describe '#favourites_count' do
@@ -184,6 +191,13 @@ RSpec.describe Status, type: :model do
 
       expect(subject.favourites_count).to eq 2
     end
+
+    it 'is decremented when favourite is removed' do
+      favourite = Fabricate(:favourite, account: bob, status: subject)
+      expect(subject.favourites_count).to eq 1
+      favourite.destroy
+      expect(subject.favourites_count).to eq 0
+    end
   end
 
   describe '#proper' do
diff --git a/yarn.lock b/yarn.lock
index 4a9d182e7..4525ec2af 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10,6 +10,22 @@
     esutils "^2.0.2"
     js-tokens "^3.0.0"
 
+"@babel/code-frame@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"
+  dependencies:
+    "@babel/highlight" "7.0.0-beta.44"
+
+"@babel/generator@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42"
+  dependencies:
+    "@babel/types" "7.0.0-beta.44"
+    jsesc "^2.5.1"
+    lodash "^4.2.0"
+    source-map "^0.5.0"
+    trim-right "^1.0.1"
+
 "@babel/helper-function-name@7.0.0-beta.36":
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
@@ -18,12 +34,40 @@
     "@babel/template" "7.0.0-beta.36"
     "@babel/types" "7.0.0-beta.36"
 
+"@babel/helper-function-name@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd"
+  dependencies:
+    "@babel/helper-get-function-arity" "7.0.0-beta.44"
+    "@babel/template" "7.0.0-beta.44"
+    "@babel/types" "7.0.0-beta.44"
+
 "@babel/helper-get-function-arity@7.0.0-beta.36":
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
   dependencies:
     "@babel/types" "7.0.0-beta.36"
 
+"@babel/helper-get-function-arity@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15"
+  dependencies:
+    "@babel/types" "7.0.0-beta.44"
+
+"@babel/helper-split-export-declaration@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc"
+  dependencies:
+    "@babel/types" "7.0.0-beta.44"
+
+"@babel/highlight@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5"
+  dependencies:
+    chalk "^2.0.0"
+    esutils "^2.0.2"
+    js-tokens "^3.0.0"
+
 "@babel/template@7.0.0-beta.36":
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
@@ -33,6 +77,15 @@
     babylon "7.0.0-beta.36"
     lodash "^4.2.0"
 
+"@babel/template@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f"
+  dependencies:
+    "@babel/code-frame" "7.0.0-beta.44"
+    "@babel/types" "7.0.0-beta.44"
+    babylon "7.0.0-beta.44"
+    lodash "^4.2.0"
+
 "@babel/traverse@7.0.0-beta.36":
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
@@ -46,6 +99,21 @@
     invariant "^2.2.0"
     lodash "^4.2.0"
 
+"@babel/traverse@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966"
+  dependencies:
+    "@babel/code-frame" "7.0.0-beta.44"
+    "@babel/generator" "7.0.0-beta.44"
+    "@babel/helper-function-name" "7.0.0-beta.44"
+    "@babel/helper-split-export-declaration" "7.0.0-beta.44"
+    "@babel/types" "7.0.0-beta.44"
+    babylon "7.0.0-beta.44"
+    debug "^3.1.0"
+    globals "^11.1.0"
+    invariant "^2.2.0"
+    lodash "^4.2.0"
+
 "@babel/types@7.0.0-beta.36":
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
@@ -54,6 +122,14 @@
     lodash "^4.2.0"
     to-fast-properties "^2.0.0"
 
+"@babel/types@7.0.0-beta.44":
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757"
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.2.0"
+    to-fast-properties "^2.0.0"
+
 "@types/node@*":
   version "8.0.53"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8"
@@ -103,9 +179,9 @@ acorn@^5.0.0, acorn@^5.1.1:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
 
-acorn@^5.2.1:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
+acorn@^5.5.0:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.0.tgz#572bedb377a1c61b7a289e72b8c5cfeb7baaf0bf"
 
 adjust-sourcemap-loader@^1.1.0:
   version "1.1.0"
@@ -450,7 +526,7 @@ babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0:
     slash "^1.0.0"
     source-map "^0.5.6"
 
-babel-eslint@^8.0.1, babel-eslint@^8.2.1:
+babel-eslint@^8.0.1:
   version "8.2.1"
   resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
   dependencies:
@@ -461,6 +537,17 @@ babel-eslint@^8.0.1, babel-eslint@^8.2.1:
     eslint-scope "~3.7.1"
     eslint-visitor-keys "^1.0.0"
 
+babel-eslint@^8.2.3:
+  version "8.2.3"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf"
+  dependencies:
+    "@babel/code-frame" "7.0.0-beta.44"
+    "@babel/traverse" "7.0.0-beta.44"
+    "@babel/types" "7.0.0-beta.44"
+    babylon "7.0.0-beta.44"
+    eslint-scope "~3.7.1"
+    eslint-visitor-keys "^1.0.0"
+
 babel-generator@^6.18.0, babel-generator@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
@@ -1093,6 +1180,10 @@ babylon@7.0.0-beta.36:
   version "7.0.0-beta.36"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
 
+babylon@7.0.0-beta.44:
+  version "7.0.0-beta.44"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
+
 babylon@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
@@ -2125,7 +2216,7 @@ doctrine@1.5.0:
     esutils "^2.0.2"
     isarray "^1.0.0"
 
-doctrine@^2.0.0, doctrine@^2.0.2:
+doctrine@^2.0.2, doctrine@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
   dependencies:
@@ -2425,9 +2516,9 @@ eslint-plugin-import@^2.8.0:
     minimatch "^3.0.3"
     read-pkg-up "^2.0.0"
 
-eslint-plugin-jsx-a11y@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
+eslint-plugin-jsx-a11y@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5"
   dependencies:
     aria-query "^0.7.0"
     array-includes "^3.0.3"
@@ -2435,19 +2526,19 @@ eslint-plugin-jsx-a11y@^5.1.1:
     axobject-query "^0.1.0"
     damerau-levenshtein "^1.0.0"
     emoji-regex "^6.1.0"
-    jsx-ast-utils "^1.4.0"
+    jsx-ast-utils "^2.0.0"
 
-eslint-plugin-promise@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz#f4bde5c2c77cdd69557a8f69a24d1ad3cfc9e67e"
+eslint-plugin-promise@^3.8.0:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621"
 
-eslint-plugin-react@^7.5.1:
-  version "7.5.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b"
+eslint-plugin-react@^7.8.2:
+  version "7.8.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.8.2.tgz#e95c9c47fece55d2303d1a67c9d01b930b88a51d"
   dependencies:
-    doctrine "^2.0.0"
+    doctrine "^2.0.2"
     has "^1.0.1"
-    jsx-ast-utils "^2.0.0"
+    jsx-ast-utils "^2.0.1"
     prop-types "^15.6.0"
 
 eslint-scope@^3.7.1, eslint-scope@~3.7.1:
@@ -2461,9 +2552,9 @@ eslint-visitor-keys@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
 
-eslint@^4.15.0:
-  version "4.15.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.15.0.tgz#89ab38c12713eec3d13afac14e4a89e75ef08145"
+eslint@^4.19.1:
+  version "4.19.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
   dependencies:
     ajv "^5.3.0"
     babel-code-frame "^6.22.0"
@@ -2471,10 +2562,10 @@ eslint@^4.15.0:
     concat-stream "^1.6.0"
     cross-spawn "^5.1.0"
     debug "^3.1.0"
-    doctrine "^2.0.2"
+    doctrine "^2.1.0"
     eslint-scope "^3.7.1"
     eslint-visitor-keys "^1.0.0"
-    espree "^3.5.2"
+    espree "^3.5.4"
     esquery "^1.0.0"
     esutils "^2.0.2"
     file-entry-cache "^2.0.0"
@@ -2496,18 +2587,19 @@ eslint@^4.15.0:
     path-is-inside "^1.0.2"
     pluralize "^7.0.0"
     progress "^2.0.0"
+    regexpp "^1.0.1"
     require-uncached "^1.0.3"
     semver "^5.3.0"
     strip-ansi "^4.0.0"
     strip-json-comments "~2.0.1"
-    table "^4.0.1"
+    table "4.0.2"
     text-table "~0.2.0"
 
-espree@^3.5.2:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
+espree@^3.5.4:
+  version "3.5.4"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
   dependencies:
-    acorn "^5.2.1"
+    acorn "^5.5.0"
     acorn-jsx "^3.0.0"
 
 esprima@^2.6.0:
@@ -4097,6 +4189,10 @@ jsesc@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
 
+jsesc@^2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+
 jsesc@~0.5.0:
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -4162,11 +4258,7 @@ jsprim@^1.2.2:
     json-schema "0.2.3"
     verror "1.10.0"
 
-jsx-ast-utils@^1.4.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
-
-jsx-ast-utils@^2.0.0:
+jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
   dependencies:
@@ -6370,6 +6462,10 @@ regex-parser@^2.2.1:
   version "2.2.8"
   resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.8.tgz#da4c0cda5a828559094168930f455f532b6ffbac"
 
+regexpp@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
+
 regexpu-core@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
@@ -6916,7 +7012,7 @@ source-map@^0.4.2, source-map@^0.4.4:
   dependencies:
     amdefine ">=0.0.4"
 
-source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6:
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
 
@@ -7165,7 +7261,7 @@ symbol-tree@^3.2.1:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
 
-table@^4.0.1:
+table@4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
   dependencies: