about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock6
-rw-r--r--app/helpers/settings_helper.rb3
-rw-r--r--app/javascript/mastodon/components/media_gallery.js10
-rw-r--r--app/javascript/mastodon/components/scrollable_list.js28
-rw-r--r--app/javascript/mastodon/components/status.js67
-rw-r--r--app/javascript/mastodon/components/status_action_bar.js22
-rw-r--r--app/javascript/mastodon/features/compose/components/compose_form.js2
-rw-r--r--app/javascript/mastodon/features/notifications/components/notification.js32
-rw-r--r--app/javascript/mastodon/features/status/components/action_bar.js21
-rw-r--r--app/javascript/mastodon/features/status/components/card.js5
-rw-r--r--app/javascript/mastodon/features/video/index.js4
-rw-r--r--app/javascript/mastodon/locales/ar.json2
-rw-r--r--app/javascript/mastodon/locales/ast.json2
-rw-r--r--app/javascript/mastodon/locales/bg.json2
-rw-r--r--app/javascript/mastodon/locales/ca.json2
-rw-r--r--app/javascript/mastodon/locales/co.json2
-rw-r--r--app/javascript/mastodon/locales/cs.json26
-rw-r--r--app/javascript/mastodon/locales/cy.json26
-rw-r--r--app/javascript/mastodon/locales/da.json2
-rw-r--r--app/javascript/mastodon/locales/de.json20
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json10
-rw-r--r--app/javascript/mastodon/locales/el.json18
-rw-r--r--app/javascript/mastodon/locales/en.json1
-rw-r--r--app/javascript/mastodon/locales/eo.json2
-rw-r--r--app/javascript/mastodon/locales/es.json2
-rw-r--r--app/javascript/mastodon/locales/eu.json6
-rw-r--r--app/javascript/mastodon/locales/fa.json2
-rw-r--r--app/javascript/mastodon/locales/fi.json2
-rw-r--r--app/javascript/mastodon/locales/fr.json2
-rw-r--r--app/javascript/mastodon/locales/gl.json2
-rw-r--r--app/javascript/mastodon/locales/he.json2
-rw-r--r--app/javascript/mastodon/locales/hr.json2
-rw-r--r--app/javascript/mastodon/locales/hu.json2
-rw-r--r--app/javascript/mastodon/locales/hy.json2
-rw-r--r--app/javascript/mastodon/locales/id.json2
-rw-r--r--app/javascript/mastodon/locales/io.json2
-rw-r--r--app/javascript/mastodon/locales/it.json6
-rw-r--r--app/javascript/mastodon/locales/ja.json1
-rw-r--r--app/javascript/mastodon/locales/ka.json2
-rw-r--r--app/javascript/mastodon/locales/ko.json2
-rw-r--r--app/javascript/mastodon/locales/lv.json264
-rw-r--r--app/javascript/mastodon/locales/ms.json2
-rw-r--r--app/javascript/mastodon/locales/nl.json2
-rw-r--r--app/javascript/mastodon/locales/no.json2
-rw-r--r--app/javascript/mastodon/locales/oc.json4
-rw-r--r--app/javascript/mastodon/locales/pl.json1
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json2
-rw-r--r--app/javascript/mastodon/locales/pt.json2
-rw-r--r--app/javascript/mastodon/locales/ro.json2
-rw-r--r--app/javascript/mastodon/locales/ru.json2
-rw-r--r--app/javascript/mastodon/locales/sk.json44
-rw-r--r--app/javascript/mastodon/locales/sl.json4
-rw-r--r--app/javascript/mastodon/locales/sq.json360
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json2
-rw-r--r--app/javascript/mastodon/locales/sr.json2
-rw-r--r--app/javascript/mastodon/locales/sv.json2
-rw-r--r--app/javascript/mastodon/locales/ta.json2
-rw-r--r--app/javascript/mastodon/locales/te.json8
-rw-r--r--app/javascript/mastodon/locales/th.json2
-rw-r--r--app/javascript/mastodon/locales/tr.json2
-rw-r--r--app/javascript/mastodon/locales/uk.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_sq.json2
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json2
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json2
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json2
-rw-r--r--app/services/suspend_account_service.rb10
-rw-r--r--app/validators/email_mx_validator.rb1
-rw-r--r--app/workers/activitypub/low_priority_delivery_worker.rb5
-rw-r--r--config/application.rb3
-rw-r--r--config/locales/activerecord.sq.yml13
-rw-r--r--config/locales/ar.yml1
-rw-r--r--config/locales/co.yml3
-rw-r--r--config/locales/cs.yml102
-rw-r--r--config/locales/cy.yml133
-rw-r--r--config/locales/devise.cs.yml10
-rw-r--r--config/locales/devise.cy.yml9
-rw-r--r--config/locales/devise.sk.yml14
-rw-r--r--config/locales/devise.sq.yml83
-rw-r--r--config/locales/doorkeeper.cs.yml2
-rw-r--r--config/locales/doorkeeper.sq.yml142
-rw-r--r--config/locales/el.yml6
-rw-r--r--config/locales/eu.yml61
-rw-r--r--config/locales/ga.yml4
-rw-r--r--config/locales/id.yml53
-rw-r--r--config/locales/it.yml2
-rw-r--r--config/locales/ja.yml3
-rw-r--r--config/locales/ko.yml6
-rw-r--r--config/locales/lt.yml182
-rw-r--r--config/locales/simple_form.cs.yml6
-rw-r--r--config/locales/simple_form.cy.yml14
-rw-r--r--config/locales/simple_form.eu.yml1
-rw-r--r--config/locales/simple_form.gl.yml2
-rw-r--r--config/locales/simple_form.sk.yml16
-rw-r--r--config/locales/simple_form.sl.yml2
-rw-r--r--config/locales/simple_form.sq.yml1
-rw-r--r--config/locales/sk.yml42
-rw-r--r--config/locales/sl.yml269
-rw-r--r--config/locales/sq.yml612
-rw-r--r--config/locales/sr.yml10
-rw-r--r--spec/validators/email_mx_validator_spec.rb38
101 files changed, 2587 insertions, 351 deletions
diff --git a/Gemfile b/Gemfile
index fcf97b028..bc51e7694 100644
--- a/Gemfile
+++ b/Gemfile
@@ -128,7 +128,7 @@ group :development do
   gem 'letter_opener', '~> 1.7'
   gem 'letter_opener_web', '~> 1.3'
   gem 'memory_profiler'
-  gem 'rubocop', '~> 0.63', require: false
+  gem 'rubocop', '~> 0.64', require: false
   gem 'brakeman', '~> 4.4', require: false
   gem 'bundler-audit', '~> 0.6', require: false
   gem 'scss_lint', '~> 0.57', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 957ca70a6..a37ff9989 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -38,7 +38,7 @@ GEM
       erubi (~> 1.4)
       rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.0.3)
-    active_model_serializers (0.10.8)
+    active_model_serializers (0.10.9)
       actionpack (>= 4.1, < 6)
       activemodel (>= 4.1, < 6)
       case_transform (>= 0.2)
@@ -527,7 +527,7 @@ GEM
       rspec-core (~> 3.0, >= 3.0.0)
       sidekiq (>= 2.4.0)
     rspec-support (3.8.0)
-    rubocop (0.63.1)
+    rubocop (0.64.0)
       jaro_winkler (~> 1.5.1)
       parallel (~> 1.10)
       parser (>= 2.5, != 2.5.1.1)
@@ -749,7 +749,7 @@ DEPENDENCIES
   rqrcode (~> 0.10)
   rspec-rails (~> 3.8)
   rspec-sidekiq (~> 3.0)
-  rubocop (~> 0.63)
+  rubocop (~> 0.64)
   sanitize (~> 5.0)
   scss_lint (~> 0.57)
   sidekiq (~> 5.2)
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index 0e957e946..7a3ceca78 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -30,7 +30,9 @@ module SettingsHelper
     ja: '日本語',
     ka: 'ქართული',
     ko: '한국어',
+    lv: 'Latviešu valoda',
     ml: 'മലയാളം',
+    ms: 'بهاس ملايو',
     nl: 'Nederlands',
     no: 'Norsk',
     oc: 'Occitan',
@@ -41,6 +43,7 @@ module SettingsHelper
     ru: 'Русский',
     sk: 'Slovenčina',
     sl: 'Slovenščina',
+    sq: 'Shqip',
     sr: 'Српски',
     'sr-Latn': 'Srpski (latinica)',
     sv: 'Svenska',
diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js
index c507920d0..a2bc95255 100644
--- a/app/javascript/mastodon/components/media_gallery.js
+++ b/app/javascript/mastodon/components/media_gallery.js
@@ -194,6 +194,8 @@ class MediaGallery extends React.PureComponent {
     height: PropTypes.number.isRequired,
     onOpenMedia: PropTypes.func.isRequired,
     intl: PropTypes.object.isRequired,
+    defaultWidth: PropTypes.number,
+    cacheWidth: PropTypes.func,
   };
 
   static defaultProps = {
@@ -202,6 +204,7 @@ class MediaGallery extends React.PureComponent {
 
   state = {
     visible: displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all',
+    width: this.props.defaultWidth,
   };
 
   componentWillReceiveProps (nextProps) {
@@ -221,6 +224,7 @@ class MediaGallery extends React.PureComponent {
   handleRef = (node) => {
     if (node /*&& this.isStandaloneEligible()*/) {
       // offsetWidth triggers a layout, so only calculate when we need to
+      if (this.props.cacheWidth) this.props.cacheWidth(node.offsetWidth);
       this.setState({
         width: node.offsetWidth,
       });
@@ -233,8 +237,10 @@ class MediaGallery extends React.PureComponent {
   }
 
   render () {
-    const { media, intl, sensitive, height } = this.props;
-    const { width, visible } = this.state;
+    const { media, intl, sensitive, height, defaultWidth } = this.props;
+    const { visible } = this.state;
+
+    const width = this.state.width || defaultWidth;
 
     let children;
 
diff --git a/app/javascript/mastodon/components/scrollable_list.js b/app/javascript/mastodon/components/scrollable_list.js
index fec06e263..0376cf85a 100644
--- a/app/javascript/mastodon/components/scrollable_list.js
+++ b/app/javascript/mastodon/components/scrollable_list.js
@@ -40,6 +40,7 @@ export default class ScrollableList extends PureComponent {
 
   state = {
     fullscreen: null,
+    cachedMediaWidth: 250, // Default media/card width using default Mastodon theme
   };
 
   intersectionObserverWrapper = new IntersectionObserverWrapper();
@@ -130,6 +131,20 @@ export default class ScrollableList extends PureComponent {
     this.handleScroll();
   }
 
+  getScrollPosition = () => {
+    if (this.node && (this.node.scrollTop > 0 || this.mouseMovedRecently)) {
+      return { height: this.node.scrollHeight, top: this.node.scrollTop };
+    } else {
+      return null;
+    }
+  }
+
+  updateScrollBottom = (snapshot) => {
+    const newScrollTop = this.node.scrollHeight - snapshot;
+
+    this.setScrollTop(newScrollTop);
+  }
+
   getSnapshotBeforeUpdate (prevProps) {
     const someItemInserted = React.Children.count(prevProps.children) > 0 &&
       React.Children.count(prevProps.children) < React.Children.count(this.props.children) &&
@@ -150,6 +165,12 @@ export default class ScrollableList extends PureComponent {
     }
   }
 
+  cacheMediaWidth = (width) => {
+    if (width && this.state.cachedMediaWidth !== width) {
+      this.setState({ cachedMediaWidth: width });
+    }
+  }
+
   componentWillUnmount () {
     this.clearMouseIdleTimer();
     this.detachScrollListener();
@@ -239,7 +260,12 @@ export default class ScrollableList extends PureComponent {
                 intersectionObserverWrapper={this.intersectionObserverWrapper}
                 saveHeightKey={trackScroll ? `${this.context.router.route.location.key}:${scrollKey}` : null}
               >
-                {child}
+                {React.cloneElement(child, {
+                  getScrollPosition: this.getScrollPosition,
+                  updateScrollBottom: this.updateScrollBottom,
+                  cachedMediaWidth: this.state.cachedMediaWidth,
+                  cacheMediaWidth: this.cacheMediaWidth,
+                })}
               </IntersectionObserverArticleContainer>
             ))}
 
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index 2be6c4b36..386404b57 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -69,6 +69,10 @@ class Status extends ImmutablePureComponent {
     onMoveUp: PropTypes.func,
     onMoveDown: PropTypes.func,
     showThread: PropTypes.bool,
+    getScrollPosition: PropTypes.func,
+    updateScrollBottom: PropTypes.func,
+    cacheMediaWidth: PropTypes.func,
+    cachedMediaWidth: PropTypes.number,
   };
 
   // Avoid checking props that are functions (and whose equality will always
@@ -80,6 +84,43 @@ class Status extends ImmutablePureComponent {
     'hidden',
   ];
 
+  // Track height changes we know about to compensate scrolling
+  componentDidMount () {
+    this.didShowCard = !this.props.muted && !this.props.hidden && this.props.status.get('card');
+  }
+
+  getSnapshotBeforeUpdate () {
+    if (this.props.getScrollPosition) {
+      return this.props.getScrollPosition();
+    } else {
+      return null;
+    }
+  }
+
+  // Compensate height changes
+  componentDidUpdate (prevProps, prevState, snapshot) {
+    const doShowCard  = !this.props.muted && !this.props.hidden && this.props.status.get('card');
+    if (doShowCard && !this.didShowCard) {
+      this.didShowCard = true;
+      if (snapshot !== null && this.props.updateScrollBottom) {
+        if (this.node && this.node.offsetTop < snapshot.top) {
+          this.props.updateScrollBottom(snapshot.height - snapshot.top);
+        }
+      }
+    }
+  }
+
+  componentWillUnmount() {
+    if (this.node && this.props.getScrollPosition) {
+      const position = this.props.getScrollPosition();
+      if (position !== null && this.node.offsetTop < position.top) {
+        requestAnimationFrame(() => {
+          this.props.updateScrollBottom(position.height - position.top);
+        });
+      }
+    }
+  }
+
   handleClick = () => {
     if (this.props.onClick) {
       this.props.onClick();
@@ -166,6 +207,10 @@ class Status extends ImmutablePureComponent {
     }
   }
 
+  handleRef = c => {
+    this.node = c;
+  }
+
   render () {
     let media = null;
     let statusAvatar, prepend, rebloggedByText;
@@ -180,7 +225,7 @@ class Status extends ImmutablePureComponent {
 
     if (hidden) {
       return (
-        <div>
+        <div ref={this.handleRef}>
           {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}
           {status.get('content')}
         </div>
@@ -195,7 +240,7 @@ class Status extends ImmutablePureComponent {
 
       return (
         <HotKeys handlers={minHandlers}>
-          <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0'>
+          <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}>
             <FormattedMessage id='status.filtered' defaultMessage='Filtered' />
           </div>
         </HotKeys>
@@ -243,11 +288,12 @@ class Status extends ImmutablePureComponent {
                 preview={video.get('preview_url')}
                 src={video.get('url')}
                 alt={video.get('description')}
-                width={239}
+                width={this.props.cachedMediaWidth}
                 height={110}
                 inline
                 sensitive={status.get('sensitive')}
                 onOpenVideo={this.handleOpenVideo}
+                cacheWidth={this.props.cacheMediaWidth}
               />
             )}
           </Bundle>
@@ -255,7 +301,16 @@ class Status extends ImmutablePureComponent {
       } else {
         media = (
           <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>
-            {Component => <Component media={status.get('media_attachments')} sensitive={status.get('sensitive')} height={110} onOpenMedia={this.props.onOpenMedia} />}
+            {Component => (
+              <Component
+                media={status.get('media_attachments')}
+                sensitive={status.get('sensitive')}
+                height={110}
+                onOpenMedia={this.props.onOpenMedia}
+                cacheWidth={this.props.cacheMediaWidth}
+                defaultWidth={this.props.cachedMediaWidth}
+              />
+            )}
           </Bundle>
         );
       }
@@ -265,6 +320,8 @@ class Status extends ImmutablePureComponent {
           onOpenMedia={this.props.onOpenMedia}
           card={status.get('card')}
           compact
+          cacheWidth={this.props.cacheMediaWidth}
+          defaultWidth={this.props.cachedMediaWidth}
         />
       );
     }
@@ -291,7 +348,7 @@ class Status extends ImmutablePureComponent {
 
     return (
       <HotKeys handlers={handlers}>
-        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText, !status.get('hidden'))}>
+        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText, !status.get('hidden'))} ref={this.handleRef}>
           {prepend}
 
           <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}>
diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js
index 0995a1490..16c7caf1c 100644
--- a/app/javascript/mastodon/components/status_action_bar.js
+++ b/app/javascript/mastodon/components/status_action_bar.js
@@ -32,6 +32,7 @@ const messages = defineMessages({
   embed: { id: 'status.embed', defaultMessage: 'Embed' },
   admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },
   admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },
+  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },
 });
 
 const obfuscatedCount = count => {
@@ -141,6 +142,25 @@ class StatusActionBar extends ImmutablePureComponent {
     this.props.onMuteConversation(this.props.status);
   }
 
+  handleCopy = () => {
+    const url      = this.props.status.get('url');
+    const textarea = document.createElement('textarea');
+
+    textarea.textContent    = url;
+    textarea.style.position = 'fixed';
+
+    document.body.appendChild(textarea);
+
+    try {
+      textarea.select();
+      document.execCommand('copy');
+    } catch (e) {
+
+    } finally {
+      document.body.removeChild(textarea);
+    }
+  }
+
   render () {
     const { status, intl, withDismiss } = this.props;
 
@@ -156,6 +176,7 @@ class StatusActionBar extends ImmutablePureComponent {
     menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen });
 
     if (publicStatus) {
+      menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });
       menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
     }
 
@@ -184,6 +205,7 @@ class StatusActionBar extends ImmutablePureComponent {
       menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });
       menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });
       menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });
+
       if (isStaff) {
         menu.push(null);
         menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });
diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js
index 07faa4132..8909b39fd 100644
--- a/app/javascript/mastodon/features/compose/components/compose_form.js
+++ b/app/javascript/mastodon/features/compose/components/compose_form.js
@@ -181,7 +181,7 @@ class ComposeForm extends ImmutablePureComponent {
         <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' ref={this.setSpoilerText} />
+            <input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} tabIndex={this.props.spoiler ? 0 : -1} type='text' className='spoiler-input__input'  id='cw-spoiler-input' ref={this.setSpoilerText} />
           </label>
         </div>
 
diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js
index 0bd8d47c3..9669b6e7d 100644
--- a/app/javascript/mastodon/features/notifications/components/notification.js
+++ b/app/javascript/mastodon/features/notifications/components/notification.js
@@ -35,6 +35,10 @@ class Notification extends ImmutablePureComponent {
     onToggleHidden: PropTypes.func.isRequired,
     status: PropTypes.option,
     intl: PropTypes.object.isRequired,
+    getScrollPosition: PropTypes.func,
+    updateScrollBottom: PropTypes.func,
+    cacheMediaWidth: PropTypes.func,
+    cachedMediaWidth: PropTypes.number,
   };
 
   handleMoveUp = () => {
@@ -129,6 +133,10 @@ class Notification extends ImmutablePureComponent {
         onMoveDown={this.handleMoveDown}
         onMoveUp={this.handleMoveUp}
         contextType='notifications'
+        getScrollPosition={this.props.getScrollPosition}
+        updateScrollBottom={this.props.updateScrollBottom}
+        cachedMediaWidth={this.props.cachedMediaWidth}
+        cacheMediaWidth={this.props.cacheMediaWidth}
       />
     );
   }
@@ -149,7 +157,17 @@ class Notification extends ImmutablePureComponent {
             </span>
           </div>
 
-          <StatusContainer id={notification.get('status')} account={notification.get('account')} muted withDismiss hidden={!!this.props.hidden} />
+          <StatusContainer
+            id={notification.get('status')}
+            account={notification.get('account')}
+            muted
+            withDismiss
+            hidden={!!this.props.hidden}
+            getScrollPosition={this.props.getScrollPosition}
+            updateScrollBottom={this.props.updateScrollBottom}
+            cachedMediaWidth={this.props.cachedMediaWidth}
+            cacheMediaWidth={this.props.cacheMediaWidth}
+          />
         </div>
       </HotKeys>
     );
@@ -171,7 +189,17 @@ class Notification extends ImmutablePureComponent {
             </span>
           </div>
 
-          <StatusContainer id={notification.get('status')} account={notification.get('account')} muted withDismiss hidden={this.props.hidden} />
+          <StatusContainer
+            id={notification.get('status')}
+            account={notification.get('account')}
+            muted
+            withDismiss
+            hidden={this.props.hidden}
+            getScrollPosition={this.props.getScrollPosition}
+            updateScrollBottom={this.props.updateScrollBottom}
+            cachedMediaWidth={this.props.cachedMediaWidth}
+            cacheMediaWidth={this.props.cacheMediaWidth}
+          />
         </div>
       </HotKeys>
     );
diff --git a/app/javascript/mastodon/features/status/components/action_bar.js b/app/javascript/mastodon/features/status/components/action_bar.js
index d3b725283..73be1fc5f 100644
--- a/app/javascript/mastodon/features/status/components/action_bar.js
+++ b/app/javascript/mastodon/features/status/components/action_bar.js
@@ -28,6 +28,7 @@ const messages = defineMessages({
   embed: { id: 'status.embed', defaultMessage: 'Embed' },
   admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },
   admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },
+  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },
 });
 
 export default @injectIntl
@@ -113,6 +114,25 @@ class ActionBar extends React.PureComponent {
     this.props.onEmbed(this.props.status);
   }
 
+  handleCopy = () => {
+    const url      = this.props.status.get('url');
+    const textarea = document.createElement('textarea');
+
+    textarea.textContent    = url;
+    textarea.style.position = 'fixed';
+
+    document.body.appendChild(textarea);
+
+    try {
+      textarea.select();
+      document.execCommand('copy');
+    } catch (e) {
+
+    } finally {
+      document.body.removeChild(textarea);
+    }
+  }
+
   render () {
     const { status, intl } = this.props;
 
@@ -122,6 +142,7 @@ class ActionBar extends React.PureComponent {
     let menu = [];
 
     if (publicStatus) {
+      menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });
       menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
       menu.push(null);
     }
diff --git a/app/javascript/mastodon/features/status/components/card.js b/app/javascript/mastodon/features/status/components/card.js
index 8237de84d..0eff54411 100644
--- a/app/javascript/mastodon/features/status/components/card.js
+++ b/app/javascript/mastodon/features/status/components/card.js
@@ -61,6 +61,8 @@ export default class Card extends React.PureComponent {
     maxDescription: PropTypes.number,
     onOpenMedia: PropTypes.func.isRequired,
     compact: PropTypes.bool,
+    defaultWidth: PropTypes.number,
+    cacheWidth: PropTypes.func,
   };
 
   static defaultProps = {
@@ -69,7 +71,7 @@ export default class Card extends React.PureComponent {
   };
 
   state = {
-    width: 280,
+    width: this.props.defaultWidth || 280,
     embedded: false,
   };
 
@@ -112,6 +114,7 @@ export default class Card extends React.PureComponent {
 
   setRef = c => {
     if (c) {
+      if (this.props.cacheWidth) this.props.cacheWidth(c.offsetWidth);
       this.setState({ width: c.offsetWidth });
     }
   }
diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js
index 15a5de4b8..894fe78d9 100644
--- a/app/javascript/mastodon/features/video/index.js
+++ b/app/javascript/mastodon/features/video/index.js
@@ -100,6 +100,7 @@ class Video extends React.PureComponent {
     onCloseVideo: PropTypes.func,
     detailed: PropTypes.bool,
     inline: PropTypes.bool,
+    cacheWidth: PropTypes.func,
     intl: PropTypes.object.isRequired,
   };
 
@@ -109,7 +110,7 @@ class Video extends React.PureComponent {
     volume: 0.5,
     paused: true,
     dragging: false,
-    containerWidth: false,
+    containerWidth: this.props.width,
     fullscreen: false,
     hovered: false,
     muted: false,
@@ -129,6 +130,7 @@ class Video extends React.PureComponent {
     this.player = c;
 
     if (c) {
+      if (this.props.cacheWidth) this.props.cacheWidth(this.player.offsetWidth);
       this.setState({
         containerWidth: c.offsetWidth,
       });
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 1486272e2..78e63e5e6 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "إلغاء الترقية",
   "status.cannot_reblog": "تعذرت ترقية هذا المنشور",
+  "status.copy": "Copy link to status",
   "status.delete": "إحذف",
   "status.detailed_status": "تفاصيل المحادثة",
   "status.direct": "رسالة خاصة إلى @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
   "upload_area.title": "إسحب ثم أفلت للرفع",
   "upload_button.label": "إضافة وسائط (JPEG، PNG، GIF، WebM، MP4، MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "وصف للمعاقين بصريا",
   "upload_form.focus": "قص",
   "upload_form.undo": "حذف",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index a9407e82d..a94e23572 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -297,6 +297,7 @@
   "status.block": "Bloquiar a @{name}",
   "status.cancel_reblog_private": "Dexar de compartir",
   "status.cannot_reblog": "Esti artículu nun pue compartise",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Unviar un mensaxe direutu a @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "El borrador va perdese si coles de Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descripción pa discapacitaos visuales",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Desaniciar",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index a812f5cb1..a5ab165b7 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Изтриване",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Добави медия",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Отмяна",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 07a4f0174..8519590b7 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Desfer l'impuls",
   "status.cannot_reblog": "Aquesta publicació no pot ser retootejada",
+  "status.copy": "Copy link to status",
   "status.delete": "Esborrar",
   "status.detailed_status": "Visualització detallada de la conversa",
   "status.direct": "Missatge directe @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descriure els problemes visuals",
   "upload_form.focus": "Modificar la previsualització",
   "upload_form.undo": "Esborra",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 496f13e7d..b4d8f9781 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -297,6 +297,7 @@
   "status.block": "Bluccà @{name}",
   "status.cancel_reblog_private": "Ùn sparte più",
   "status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu",
+  "status.copy": "Copy link to status",
   "status.delete": "Toglie",
   "status.detailed_status": "Vista in ditagliu di a cunversazione",
   "status.direct": "Mandà un missaghju @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Discrive per i malvistosi",
   "upload_form.focus": "Cambià a vista",
   "upload_form.undo": "Sguassà",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index e11e0be93..508b5debe 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -10,7 +10,7 @@
   "account.edit_profile": "Upravit profil",
   "account.endorse": "Představit na profilu",
   "account.follow": "Sledovat",
-  "account.followers": "Sledovatelé",
+  "account.followers": "Sledující",
   "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
   "account.follows": "Sledovaní",
   "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
@@ -70,8 +70,8 @@
   "compose_form.direct_message_warning": "Tento toot bude odeslán pouze zmíněným uživatelům.",
   "compose_form.direct_message_warning_learn_more": "Zjistit více",
   "compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.",
-  "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledovatele.",
-  "compose_form.lock_disclaimer.lock": "zamčený",
+  "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledující.",
+  "compose_form.lock_disclaimer.lock": "uzamčen",
   "compose_form.placeholder": "Co máte na mysli?",
   "compose_form.publish": "Tootnout",
   "compose_form.publish_loud": "{publish}!",
@@ -88,7 +88,7 @@
   "confirmations.delete_list.confirm": "Smazat",
   "confirmations.delete_list.message": "Jste si jistý/á, že chcete tento seznam navždy vymazat?",
   "confirmations.domain_block.confirm": "Skrýt celou doménu",
-  "confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou {domain}? Ve většině případů stačí zablokovat nebo ignorovat pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledovatelé z této domény budou odstraněni.",
+  "confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo ignorovat pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
   "confirmations.mute.confirm": "Ignorovat",
   "confirmations.mute.message": "Jste si jistý/á, že chcete ignorovat uživatele {name}?",
   "confirmations.redraft.confirm": "Vymazat a přepsat",
@@ -128,7 +128,7 @@
   "empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.",
   "empty_column.mutes": "Ještě neignorujete žádné uživatele.",
   "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
-  "empty_column.public": "Tady nic není! Napište něco veřejně, nebo manuálně začněte sledovat uživatele z jiných instancí, aby tu něco přibylo",
+  "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
   "follow_request.authorize": "Autorizovat",
   "follow_request.reject": "Odmítnout",
   "getting_started.developers": "Vývojáři",
@@ -160,7 +160,7 @@
   "introduction.interactions.favourite.headline": "Oblíbení",
   "introduction.interactions.favourite.text": "Oblíbením si můžete uložit toot na později a dát jeho autorovi vědět, že se vám líbí.",
   "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "Boostnutím můžete sdílet tooty jiných lidí s vašimi sledovately.",
+  "introduction.interactions.reblog.text": "Boostnutím můžete sdílet tooty jiných lidí s vašimi sledujícími.",
   "introduction.interactions.reply.headline": "Odpověď",
   "introduction.interactions.reply.text": "Můžete odpovídat na tooty jiných lidí i vaše vlastní, což je propojí do konverzace.",
   "introduction.welcome.action": "Jdeme na to!",
@@ -224,10 +224,10 @@
   "navigation_bar.favourites": "Oblíbené",
   "navigation_bar.filters": "Skrytá slova",
   "navigation_bar.follow_requests": "Požadavky o sledování",
-  "navigation_bar.info": "O této instanci",
+  "navigation_bar.info": "O tomto serveru",
   "navigation_bar.keyboard_shortcuts": "Klávesové zkratky",
   "navigation_bar.lists": "Seznamy",
-  "navigation_bar.logout": "Odhlásit se",
+  "navigation_bar.logout": "Odhlásit",
   "navigation_bar.mutes": "Ignorovaní uživatelé",
   "navigation_bar.personal": "Osobní",
   "navigation_bar.pins": "Připnuté tooty",
@@ -245,7 +245,7 @@
   "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
   "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
   "notifications.column_settings.filter_bar.show": "Zobrazit",
-  "notifications.column_settings.follow": "Noví sledovatelé:",
+  "notifications.column_settings.follow": "Noví sledující:",
   "notifications.column_settings.mention": "Zmínky:",
   "notifications.column_settings.push": "Push oznámení",
   "notifications.column_settings.reblog": "Boosty:",
@@ -260,8 +260,8 @@
   "privacy.change": "Změnit soukromí příspěvku",
   "privacy.direct.long": "Odeslat pouze zmíněným uživatelům",
   "privacy.direct.short": "Přímý",
-  "privacy.private.long": "Odeslat pouze sledovatelům",
-  "privacy.private.short": "Pouze pro sledovatele",
+  "privacy.private.long": "Odeslat pouze sledujícím",
+  "privacy.private.short": "Pouze pro sledující",
   "privacy.public.long": "Odeslat na veřejné časové osy",
   "privacy.public.short": "Veřejný",
   "privacy.unlisted.long": "Neodeslat na veřejné časové osy",
@@ -276,7 +276,7 @@
   "reply_indicator.cancel": "Zrušit",
   "report.forward": "Přeposlat na {target}",
   "report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
-  "report.hint": "Toto nahlášení bude zasláno moderátorům vaší instance. Níže můžete uvést, proč tento účet nahlašujete:",
+  "report.hint": "Toto nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
   "report.placeholder": "Dodatečné komentáře",
   "report.submit": "Odeslat",
   "report.target": "Nahlášení uživatele {target}",
@@ -297,6 +297,7 @@
   "status.block": "Zablokovat uživatele @{name}",
   "status.cancel_reblog_private": "Zrušit boost",
   "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
+  "status.copy": "Copy link to status",
   "status.delete": "Smazat",
   "status.detailed_status": "Detailní zobrazení konverzace",
   "status.direct": "Poslat přímou zprávu uživateli @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.",
   "upload_area.title": "Přetažením nahrajete",
   "upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Popis pro zrakově postižené",
   "upload_form.focus": "Změnit náhled",
   "upload_form.undo": "Smazat",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index f35b96244..df08b907c 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -1,5 +1,5 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau",
   "account.badges.bot": "Bot",
   "account.block": "Blocio @{name}",
   "account.block_domain": "Cuddio popeth rhag {domain}",
@@ -17,7 +17,7 @@
   "account.follows_you": "Yn eich dilyn chi",
   "account.hide_reblogs": "Cuddio bwstiau o @{name}",
   "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i gloi. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.",
   "account.media": "Cyfryngau",
   "account.mention": "Crybwyll @{name}",
   "account.moved_to": "Mae @{name} wedi symud i:",
@@ -132,7 +132,7 @@
   "follow_request.authorize": "Caniatau",
   "follow_request.reject": "Gwrthod",
   "getting_started.developers": "Datblygwyr",
-  "getting_started.directory": "Profile directory",
+  "getting_started.directory": "Cyfeiriadur proffil",
   "getting_started.documentation": "Dogfennaeth",
   "getting_started.heading": "Dechrau",
   "getting_started.invite": "Gwahodd pobl",
@@ -156,15 +156,15 @@
   "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
   "introduction.federation.local.headline": "Local",
   "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish tutorial!",
+  "introduction.interactions.action": "Gorffen tiwtorial!",
   "introduction.interactions.favourite.headline": "Ffefryn",
   "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
   "introduction.interactions.reblog.headline": "Hwb",
   "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
   "introduction.interactions.reply.headline": "Ateb",
   "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
+  "introduction.welcome.action": "Awn ni!",
+  "introduction.welcome.headline": "Camau cyntaf",
   "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "i lywio nôl",
   "keyboard_shortcuts.blocked": "i agor rhestr defnyddwyr a flociwyd",
@@ -242,8 +242,8 @@
   "notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?",
   "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith",
   "notifications.column_settings.favourite": "Ffefrynnau:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.advanced": "Dangos pob categori",
+  "notifications.column_settings.filter_bar.category": "Bar hidlo",
   "notifications.column_settings.filter_bar.show": "Dangos",
   "notifications.column_settings.follow": "Dilynwyr newydd:",
   "notifications.column_settings.mention": "Crybwylliadau:",
@@ -255,7 +255,7 @@
   "notifications.filter.boosts": "Hybiadau",
   "notifications.filter.favourites": "Ffefrynnau",
   "notifications.filter.follows": "Yn dilyn",
-  "notifications.filter.mentions": "Mentions",
+  "notifications.filter.mentions": "Crybwylliadau",
   "notifications.group": "{count} o hysbysiadau",
   "privacy.change": "Addasu preifatrwdd y tŵt",
   "privacy.direct.long": "Cyhoeddi i'r defnyddwyr sy'n cael eu crybwyll yn unig",
@@ -290,13 +290,14 @@
   "search_results.accounts": "Pobl",
   "search_results.hashtags": "Hanshnodau",
   "search_results.statuses": "Tŵtiau",
-  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "search_results.total": "{count, number} {count, plural, one {result} arall {results}}",
   "standalone.public_title": "Golwg tu fewn...",
   "status.admin_account": "Open moderation interface for @{name}",
   "status.admin_status": "Open this tŵt in the moderation interface",
   "status.block": "Blocio @{name}",
   "status.cancel_reblog_private": "Dadfŵstio",
   "status.cannot_reblog": "Ni ellir sbarduno'r tŵt hwn",
+  "status.copy": "Copy link to status",
   "status.delete": "Dileu",
   "status.detailed_status": "Golwg manwl o'r sgwrs",
   "status.direct": "Neges breifat @{name}",
@@ -331,8 +332,8 @@
   "status.show_thread": "Dangos edefyn",
   "status.unmute_conversation": "Dad-dawelu sgwrs",
   "status.unpin": "Dadbinio o'r proffil",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
+  "suggestions.dismiss": "Diswyddo",
+  "suggestions.header": "Efallai y bydd gennych ddiddordeb mewn…",
   "tabs_bar.federated_timeline": "Ffederasiwn",
   "tabs_bar.home": "Hafan",
   "tabs_bar.local_timeline": "Lleol",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
   "upload_area.title": "Llusgwch & gollwing i uwchlwytho",
   "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
   "upload_form.focus": "Newid rhagolwg",
   "upload_form.undo": "Dileu",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 60315211a..f418d26f7 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -297,6 +297,7 @@
   "status.block": "Bloker @{name}",
   "status.cancel_reblog_private": "Fremhæv ikke længere",
   "status.cannot_reblog": "Denne post kan ikke fremhæves",
+  "status.copy": "Copy link to status",
   "status.delete": "Slet",
   "status.detailed_status": "Detaljeret visning af samtale",
   "status.direct": "Send direkte besked til @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
   "upload_area.title": "Træk og slip for at uploade",
   "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Beskriv for de svagtseende",
   "upload_form.focus": "Beskær",
   "upload_form.undo": "Slet",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 3a55f26a7..e7cfd48b7 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -150,20 +150,20 @@
   "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
   "home.column_settings.show_replies": "Antworten anzeigen",
   "introduction.federation.action": "Weiter",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Öffentliche Beiträge von anderen Servern im Fediverse werden in der föderierten Zeitleiste erscheinen.",
+  "introduction.federation.federated.headline": "Föderiert",
+  "introduction.federation.federated.text": "Öffentliche Beiträge von anderen Servern im Fediverse erscheinen in der föderierten Zeitleiste.",
   "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Beiträge von Leuten, denen du folgst werden in deiner Startseite erscheinen. Du kannst jedem auf irgendeinen Server folgen!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du werden in der lokalen Zeitleiste erscheinen.",
+  "introduction.federation.home.text": "Beiträge von Leuten, denen du folgst, erscheinen in deiner Start-Zeitleiste. Du kannst Menschen auf beliebigen Servern folgen!",
+  "introduction.federation.local.headline": "Lokal",
+  "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.",
   "introduction.interactions.action": "Tutorial beenden!",
   "introduction.interactions.favourite.headline": "Favorisieren",
-  "introduction.interactions.favourite.text": "Du kannst einen Beitrag für später speichern und dem Autor wissen lassen, dass du ihn magst, indem du ihn favorisierst.",
+  "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre AutorInnen wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
   "introduction.interactions.reblog.headline": "Teilen",
-  "introduction.interactions.reblog.text": "Du kannst Beiträge von anderen Leuten an deine Follower teilen.",
+  "introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie boostest.",
   "introduction.interactions.reply.headline": "Antworten",
-  "introduction.interactions.reply.text": "Du kannst auf die Beiträge von anderen Leuten antworten und die Beiträge werden dann in eine Konversation zusammengebunden.",
-  "introduction.welcome.action": "Lasst uns loslegen!",
+  "introduction.interactions.reply.text": "Du kannst auf die Beiträge anderer antworten und die Beiträge werden dann in einer Unterhaltung zusammengefasst.",
+  "introduction.welcome.action": "Lass uns loslegen!",
   "introduction.welcome.headline": "Erste Schritte",
   "introduction.welcome.text": "Willkommen im Fediverse! In wenigen Momenten wirst du in der Lage sein Nachrichten zu versenden und mit deinen Freunden über Server hinweg in Kontakt zu treten. Aber dieser Server, {domain}, ist sehr speziell — er hostet dein Profil, also merke dir den Namen.",
   "keyboard_shortcuts.back": "zurück navigieren",
@@ -297,6 +297,7 @@
   "status.block": "Blockiere @{name}",
   "status.cancel_reblog_private": "Nicht mehr teilen",
   "status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
+  "status.copy": "Copy link to status",
   "status.delete": "Löschen",
   "status.detailed_status": "Detaillierte Ansicht der Konversation",
   "status.direct": "Direktnachricht @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
   "upload_area.title": "Zum Hochladen hereinziehen",
   "upload_button.label": "Mediendatei hinzufügen (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
   "upload_form.focus": "Thumbnail bearbeiten",
   "upload_form.undo": "Löschen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index eb3a7bbde..6db3061aa 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -319,6 +319,10 @@
       {
         "defaultMessage": "Open this status in the moderation interface",
         "id": "status.admin_status"
+      },
+      {
+        "defaultMessage": "Copy link to status",
+        "id": "status.copy"
       }
     ],
     "path": "app/javascript/mastodon/components/status_action_bar.json"
@@ -1955,6 +1959,10 @@
       {
         "defaultMessage": "Open this status in the moderation interface",
         "id": "status.admin_status"
+      },
+      {
+        "defaultMessage": "Copy link to status",
+        "id": "status.copy"
       }
     ],
     "path": "app/javascript/mastodon/features/status/components/action_bar.json"
@@ -2307,4 +2315,4 @@
     ],
     "path": "app/javascript/mastodon/features/video/index.json"
   }
-]
+]
\ No newline at end of file
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 7b4852271..165f90f0c 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -7,7 +7,7 @@
   "account.direct": "Προσωπικό μήνυμα προς @{name}",
   "account.disclaimer_full": "Οι παρακάτω πληροφορίες μπορει να μην αντανακλούν το προφίλ του χρήστη επαρκως.",
   "account.domain_blocked": "Κρυμμένος τομέας",
-  "account.edit_profile": "Επεξεργάσου το προφίλ",
+  "account.edit_profile": "Επεξεργασία προφίλ",
   "account.endorse": "Προβολή στο προφίλ",
   "account.follow": "Ακολούθησε",
   "account.followers": "Ακόλουθοι",
@@ -145,16 +145,16 @@
   "hashtag.column_settings.tag_mode.all": "Όλα αυτα",
   "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά",
   "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά",
-  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",
   "home.column_settings.basic": "Βασικά",
   "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
   "home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
   "introduction.federation.action": "Επόμενο",
-  "introduction.federation.federated.headline": "Federated",
+  "introduction.federation.federated.headline": "Ομοσπονδιακή",
   "introduction.federation.federated.text": "Οι δημόσιες αναρτήσεις από άλλους κόμβους του fediverse θα εμφανίζονται στην ομοσπονδιακή ροή.",
-  "introduction.federation.home.headline": "Home",
+  "introduction.federation.home.headline": "Αρχική",
   "introduction.federation.home.text": "Οι αναρτήσεις όσων ακολουθείς θα εμφανίζονται στην αρχική ροή. Μπορείς να ακολουθήσεις όποιον θέλεις σε οποιονδήποτε κόμβο!",
-  "introduction.federation.local.headline": "Local",
+  "introduction.federation.local.headline": "Τοπική",
   "introduction.federation.local.text": "Οι δημόσιες αναρτήσεις από άτομα στον ίδιο κόμβο με εσένα θα εμφανίζονται στην τοπική ροή.",
   "introduction.interactions.action": "Τέλος μαθήματος!",
   "introduction.interactions.favourite.headline": "Αγαπημένο",
@@ -165,7 +165,7 @@
   "introduction.interactions.reply.text": "Μπορείς να απαντήσεις στα τουτ άλλων αλλά ακόμα και στα δικά σου, δένοντας τα όλα μαζί σε μια συζήτηση.",
   "introduction.welcome.action": "Ας ξεκινήσουμε!",
   "introduction.welcome.headline": "Πρώτα βήματα",
-  "introduction.welcome.text": "Καλώς ήρθες στο fediverse! Σε πολύ λίγο θα μπορείς να στέλνεις δημοσιεύσεις και να μιλάς με τους φίλους σου σε πολλούς, διαφορετικούς κόμβους. Ο κόμβος {domain} όμως είναι ξεχωριστός — φιλοξενεί τον λογαριασμό σου, για αυτό μα θυμάσαι το όνομά του.",
+  "introduction.welcome.text": "Καλώς ήρθες στο fediverse! Σε πολύ λίγο θα μπορείς να στέλνεις δημοσιεύσεις και να μιλάς με τους φίλους σου σε πολλούς, διαφορετικούς κόμβους. Ο κόμβος {domain} όμως είναι ξεχωριστός — φιλοξενεί τον λογαριασμό σου, για αυτό να θυμάσαι το όνομά του.",
   "keyboard_shortcuts.back": "επιστροφή",
   "keyboard_shortcuts.blocked": "άνοιγμα λίστας αποκλεισμένων χρηστών",
   "keyboard_shortcuts.boost": "προώθηση",
@@ -292,11 +292,12 @@
   "search_results.statuses": "Τουτ",
   "search_results.total": "{count, number} {count, plural, ένα {result} υπόλοιπα {results}}",
   "standalone.public_title": "Μια πρώτη γεύση...",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
+  "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
   "status.block": "Αποκλεισμός @{name}",
   "status.cancel_reblog_private": "Ακύρωσε την προώθηση",
   "status.cannot_reblog": "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί",
+  "status.copy": "Copy link to status",
   "status.delete": "Διαγραφή",
   "status.detailed_status": "Προβολή λεπτομερειών συζήτησης",
   "status.direct": "Προσωπικό μήνυμα προς @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
   "upload_area.title": "Drag & drop για να ανεβάσεις",
   "upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
   "upload_form.focus": "Αλλαγή προεπισκόπησης",
   "upload_form.undo": "Διαγραφή",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index b079f256d..8bc69b424 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -302,6 +302,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 8be964a52..759eed46a 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -297,6 +297,7 @@
   "status.block": "Bloki @{name}",
   "status.cancel_reblog_private": "Eksdiskonigi",
   "status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas",
+  "status.copy": "Copy link to status",
   "status.delete": "Forigi",
   "status.detailed_status": "Detala konversacia vido",
   "status.direct": "Rekte mesaĝi @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Priskribi por misvidantaj homoj",
   "upload_form.focus": "Stuci",
   "upload_form.undo": "Forigi",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 4f73dbba2..43bfe039c 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Des-impulsar",
   "status.cannot_reblog": "Este toot no puede retootearse",
+  "status.copy": "Copy link to status",
   "status.delete": "Borrar",
   "status.detailed_status": "Vista de conversación detallada",
   "status.direct": "Mensaje directo a @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
   "upload_area.title": "Arrastra y suelta para subir",
   "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describir para los usuarios con dificultad visual",
   "upload_form.focus": "Recortar",
   "upload_form.undo": "Borrar",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 0602fbf9e..747348e71 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -292,11 +292,12 @@
   "search_results.statuses": "Toot-ak",
   "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
   "standalone.public_title": "Begiradatxo bat...",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
+  "status.admin_status": "Ireki mezu hau moderazio interfazean",
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Kendu bultzada",
   "status.cannot_reblog": "Mezu honi ezin zaio bultzada eman",
+  "status.copy": "Copy link to status",
   "status.delete": "Ezabatu",
   "status.detailed_status": "Elkarrizketaren ikuspegi xehetsua",
   "status.direct": "Mezu zuzena @{name}(r)i",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
   "upload_area.title": "Arrastatu eta jaregin igotzeko",
   "upload_button.label": "Gehitu multimedia  (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
   "upload_form.focus": "Aldatu aurrebista",
   "upload_form.undo": "Ezabatu",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index b11d88d87..44c39802a 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -297,6 +297,7 @@
   "status.block": "مسدودسازی @{name}",
   "status.cancel_reblog_private": "حذف بازبوق",
   "status.cannot_reblog": "این نوشته را نمی‌شود بازبوقید",
+  "status.copy": "Copy link to status",
   "status.delete": "پاک‌کردن",
   "status.detailed_status": "نمایش کامل گفتگو",
   "status.direct": "پیغام مستقیم به @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.",
   "upload_area.title": "برای بارگذاری به این‌جا بکشید",
   "upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان",
   "upload_form.focus": "بریدن لبه‌ها",
   "upload_form.undo": "حذف",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index c8d258672..6e878d7ff 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -297,6 +297,7 @@
   "status.block": "Estä @{name}",
   "status.cancel_reblog_private": "Peru buustaus",
   "status.cannot_reblog": "Tätä julkaisua ei voi buustata",
+  "status.copy": "Copy link to status",
   "status.delete": "Poista",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Viesti käyttäjälle @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
   "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
   "upload_button.label": "Lisää mediaa",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Anna kuvaus näkörajoitteisia varten",
   "upload_form.focus": "Rajaa",
   "upload_form.undo": "Peru",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 762896887..24182c00b 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Dé-booster",
   "status.cannot_reblog": "Cette publication ne peut être boostée",
+  "status.copy": "Copy link to status",
   "status.delete": "Effacer",
   "status.detailed_status": "Vue détaillée de la conversation",
   "status.direct": "Envoyer un message direct à @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Décrire pour les malvoyant·e·s",
   "upload_form.focus": "Modifier l’aperçu",
   "upload_form.undo": "Supprimer",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index c1ece163d..45bc2d36c 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Non promover",
   "status.cannot_reblog": "Esta mensaxe non pode ser promovida",
+  "status.copy": "Copy link to status",
   "status.delete": "Eliminar",
   "status.detailed_status": "Vista detallada da conversa",
   "status.direct": "Mensaxe directa @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "O borrador perderase se sae de Mastodon.",
   "upload_area.title": "Arrastre e solte para subir",
   "upload_button.label": "Engadir medios (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describa para deficientes visuais",
   "upload_form.focus": "Cambiar vista previa",
   "upload_form.undo": "Eliminar",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index e27e7f09e..13278382f 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "לא ניתן להדהד הודעה זו",
+  "status.copy": "Copy link to status",
   "status.delete": "מחיקה",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
   "upload_area.title": "ניתן להעלות על ידי Drag & drop",
   "upload_button.label": "הוספת מדיה",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "תיאור לכבדי ראיה",
   "upload_form.focus": "Crop",
   "upload_form.undo": "ביטול",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 71dd5319e..a4aafd8fb 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Ovaj post ne može biti boostan",
+  "status.copy": "Copy link to status",
   "status.delete": "Obriši",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Poništi",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index c2842aea7..41734b58d 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Ezen státusz nem rebloggolható",
+  "status.copy": "Copy link to status",
   "status.delete": "Törlés",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Mégsem",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 691994887..2169bb990 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -297,6 +297,7 @@
   "status.block": "Արգելափակել @{name}֊ին",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Այս թութը չի կարող տարածվել",
+  "status.copy": "Copy link to status",
   "status.delete": "Ջնջել",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
   "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
   "upload_button.label": "Ավելացնել մեդիա",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Հետարկել",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index eed61af70..c8cd2b3d2 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Hapus",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
   "upload_area.title": "Seret & lepaskan untuk mengunggah",
   "upload_button.label": "Tambahkan media",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
   "upload_form.focus": "Potong",
   "upload_form.undo": "Undo",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index b26fa6c4a..17f74cbab 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Efacar",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Tranar faligar por kargar",
   "upload_button.label": "Adjuntar kontenajo",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Desfacar",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 1f52d3724..423efdbc3 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -292,11 +292,12 @@
   "search_results.statuses": "Toot",
   "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}",
   "standalone.public_title": "Un'occhiata all'interno...",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "Apri interfaccia di moderazione per @{name}",
+  "status.admin_status": "Apri questo status nell'interfaccia di moderazione",
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Annulla condivisione",
   "status.cannot_reblog": "Questo post non può essere condiviso",
+  "status.copy": "Copy link to status",
   "status.delete": "Elimina",
   "status.detailed_status": "Vista conversazione dettagliata",
   "status.direct": "Messaggio diretto @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
   "upload_area.title": "Trascina per caricare",
   "upload_button.label": "Aggiungi file multimediale",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descrizione per utenti con disabilità visive",
   "upload_form.focus": "Modifica anteprima",
   "upload_form.undo": "Cancella",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 4bcc11d70..35ccfe739 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -302,6 +302,7 @@
   "status.block": "@{name}さんをブロック",
   "status.cancel_reblog_private": "ブースト解除",
   "status.cannot_reblog": "この投稿はブーストできません",
+  "status.copy": "Copy link to status",
   "status.delete": "削除",
   "status.detailed_status": "詳細な会話ビュー",
   "status.direct": "@{name}さんにダイレクトメッセージ",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 93a11027a..e2e7306fd 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -297,6 +297,7 @@
   "status.block": "დაბლოკე @{name}",
   "status.cancel_reblog_private": "ბუსტის მოშორება",
   "status.cannot_reblog": "ეს პოსტი ვერ დაიბუსტება",
+  "status.copy": "Copy link to status",
   "status.delete": "წაშლა",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "პირდაპირი წერილი @{name}-ს",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
   "upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
   "upload_button.label": "მედიის დამატება",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
   "upload_form.focus": "კროპი",
   "upload_form.undo": "გაუქმება",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index ceb474a3e..6d607068e 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -297,6 +297,7 @@
   "status.block": "@{name} 차단",
   "status.cancel_reblog_private": "부스트 취소",
   "status.cannot_reblog": "이 포스트는 부스트 할 수 없습니다",
+  "status.copy": "Copy link to status",
   "status.delete": "삭제",
   "status.detailed_status": "대화 자세히 보기",
   "status.direct": "@{name}에게 다이렉트 메시지",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
   "upload_area.title": "드래그 & 드롭으로 업로드",
   "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "시각장애인을 위한 설명",
   "upload_form.focus": "미리보기 변경",
   "upload_form.undo": "삭제",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index 0d510d011..dbea1d6dc 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -1,136 +1,136 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
-  "account.badges.bot": "Bot",
-  "account.block": "Block @{name}",
-  "account.block_domain": "Hide everything from {domain}",
-  "account.blocked": "Blocked",
-  "account.direct": "Direct message @{name}",
-  "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
-  "account.domain_blocked": "Domain hidden",
-  "account.edit_profile": "Edit profile",
-  "account.endorse": "Feature on profile",
-  "account.follow": "Follow",
-  "account.followers": "Followers",
-  "account.followers.empty": "No one follows this user yet.",
-  "account.follows": "Follows",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
-  "account.follows_you": "Follows you",
-  "account.hide_reblogs": "Hide boosts from @{name}",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
-  "account.media": "Media",
-  "account.mention": "Mention @{name}",
-  "account.moved_to": "{name} has moved to:",
-  "account.mute": "Mute @{name}",
-  "account.mute_notifications": "Mute notifications from @{name}",
-  "account.muted": "Muted",
-  "account.posts": "Toots",
-  "account.posts_with_replies": "Toots and replies",
-  "account.report": "Report @{name}",
-  "account.requested": "Awaiting approval. Click to cancel follow request",
-  "account.share": "Share @{name}'s profile",
-  "account.show_reblogs": "Show boosts from @{name}",
-  "account.unblock": "Unblock @{name}",
-  "account.unblock_domain": "Unhide {domain}",
-  "account.unendorse": "Don't feature on profile",
-  "account.unfollow": "Unfollow",
-  "account.unmute": "Unmute @{name}",
-  "account.unmute_notifications": "Unmute notifications from @{name}",
-  "account.view_full_profile": "View full profile",
-  "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
-  "boost_modal.combo": "You can press {combo} to skip this next time",
-  "bundle_column_error.body": "Something went wrong while loading this component.",
-  "bundle_column_error.retry": "Try again",
-  "bundle_column_error.title": "Network error",
-  "bundle_modal_error.close": "Close",
-  "bundle_modal_error.message": "Something went wrong while loading this component.",
-  "bundle_modal_error.retry": "Try again",
-  "column.blocks": "Blocked users",
-  "column.community": "Local timeline",
-  "column.direct": "Direct messages",
-  "column.domain_blocks": "Hidden domains",
-  "column.favourites": "Favourites",
-  "column.follow_requests": "Follow requests",
-  "column.home": "Home",
-  "column.lists": "Lists",
-  "column.mutes": "Muted users",
-  "column.notifications": "Notifications",
-  "column.pins": "Pinned toot",
-  "column.public": "Federated timeline",
-  "column_back_button.label": "Back",
-  "column_header.hide_settings": "Hide settings",
-  "column_header.moveLeft_settings": "Move column to the left",
-  "column_header.moveRight_settings": "Move column to the right",
-  "column_header.pin": "Pin",
-  "column_header.show_settings": "Show settings",
-  "column_header.unpin": "Unpin",
-  "column_subheading.settings": "Settings",
-  "community.column_settings.media_only": "Media Only",
-  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
-  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
-  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
-  "compose_form.lock_disclaimer.lock": "locked",
-  "compose_form.placeholder": "What is on your mind?",
-  "compose_form.publish": "Toot",
+  "account.add_or_remove_from_list": "Pievienot vai noņemt no saraksta",
+  "account.badges.bot": "Bots",
+  "account.block": "Bloķēt @{name}",
+  "account.block_domain": "Slēpt visu no {domain}",
+  "account.blocked": "Bloķēts",
+  "account.direct": "Privātā ziņa @{name}",
+  "account.disclaimer_full": "Informācija zemāk var nepilnīgi atspoguļot lietotāja profilu.",
+  "account.domain_blocked": "Domēns ir paslēpts",
+  "account.edit_profile": "Labot profilu",
+  "account.endorse": "Izcelts profilā",
+  "account.follow": "Sekot",
+  "account.followers": "Sekotāji",
+  "account.followers.empty": "Šim lietotājam nav sekotāju.",
+  "account.follows": "Seko",
+  "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.",
+  "account.follows_you": "Seko tev",
+  "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}",
+  "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}",
+  "account.locked_info": "Šī konta privātuma status ir iestatīts slēgts. Īpašnieks izskatīs un izvēlēsies kas viņam drīkst sekot.",
+  "account.media": "Mēdiji",
+  "account.mention": "Piemin @{name}",
+  "account.moved_to": "{name} ir pārvācies uz:",
+  "account.mute": "Apklusināt @{name}",
+  "account.mute_notifications": "Nerādīt paziņojumus no @{name}",
+  "account.muted": "Apklusināts",
+  "account.posts": "Ieraksti",
+  "account.posts_with_replies": "Ieraksti un atbildes",
+  "account.report": "Ziņot par lietotāju @{name}",
+  "account.requested": "Gaidām apstiprinājumu. Nospied lai atceltu sekošanas pieparasījumu",
+  "account.share": "Dalīties ar lietotāja @{name}'s profilu",
+  "account.show_reblogs": "Parādīt lietotāja @{name} paceltos ierakstus",
+  "account.unblock": "Atbloķēt lietotāju @{name}",
+  "account.unblock_domain": "Atbloķēt domēnu {domain}",
+  "account.unendorse": "Neizcelt profilā",
+  "account.unfollow": "Nesekot",
+  "account.unmute": "Noņemt apklusinājumu no lietotāja @{name}",
+  "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}",
+  "account.view_full_profile": "Apskatīt pilnu profilu",
+  "alert.unexpected.message": "Negaidīta kļūda.",
+  "alert.unexpected.title": "Ups!",
+  "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz",
+  "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.",
+  "bundle_column_error.retry": "Mēģini vēlreiz",
+  "bundle_column_error.title": "Tīkla kļūda",
+  "bundle_modal_error.close": "Aizvērt",
+  "bundle_modal_error.message": "Kaut kas nogāja greizi ielādējot šo komponenti.",
+  "bundle_modal_error.retry": "Mēģini vēlreiz",
+  "column.blocks": "Bloķētie lietotāji",
+  "column.community": "Lokālā laika līnija",
+  "column.direct": "Privātās ziņas",
+  "column.domain_blocks": "Paslēptie domēni",
+  "column.favourites": "Favorīti",
+  "column.follow_requests": "Sekotāju pieprasījumi",
+  "column.home": "Sākums",
+  "column.lists": "Saraksti",
+  "column.mutes": "Apklusinātie lietotāji",
+  "column.notifications": "Paziņojumi",
+  "column.pins": "Piespraustie ziņojumi",
+  "column.public": "Federatīvā laika līnija",
+  "column_back_button.label": "Atpakaļ",
+  "column_header.hide_settings": "Paslēpt iestatījumus",
+  "column_header.moveLeft_settings": "Pārvietot kolonu pa kreisi",
+  "column_header.moveRight_settings": "Pārvietot kolonu pa labi",
+  "column_header.pin": "Piespraust",
+  "column_header.show_settings": "Rādīt iestatījumus",
+  "column_header.unpin": "Atspraust",
+  "column_subheading.settings": "Iestatījumi",
+  "community.column_settings.media_only": "Tikai mēdiji",
+  "compose_form.direct_message_warning": "Šis ziņojums tiks nosūtīts tikai pieminētajiem lietotājiem.",
+  "compose_form.direct_message_warning_learn_more": "Papildus informācija",
+  "compose_form.hashtag_warning": "Ziņojumu nebūs iespējams atrast zem haštagiem jo tas nav publisks. Tikai publiskos ziņojumus ir iespējams meklēt pēc tiem.",
+  "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot lai apskatītu tikai sekotājiem paredzētos ziņojumus.",
+  "compose_form.lock_disclaimer.lock": "slēgts",
+  "compose_form.placeholder": "Ko vēlies publicēt?",
+  "compose_form.publish": "Publicēt",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.marked": "Media is marked as sensitive",
-  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
-  "compose_form.spoiler.marked": "Text is hidden behind warning",
-  "compose_form.spoiler.unmarked": "Text is not hidden",
-  "compose_form.spoiler_placeholder": "Write your warning here",
-  "confirmation_modal.cancel": "Cancel",
-  "confirmations.block.confirm": "Block",
-  "confirmations.block.message": "Are you sure you want to block {name}?",
-  "confirmations.delete.confirm": "Delete",
-  "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "confirmations.delete_list.confirm": "Delete",
-  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
-  "confirmations.domain_block.confirm": "Hide entire domain",
-  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
-  "confirmations.mute.confirm": "Mute",
-  "confirmations.mute.message": "Are you sure you want to mute {name}?",
-  "confirmations.redraft.confirm": "Delete & redraft",
-  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
-  "confirmations.reply.confirm": "Reply",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
-  "confirmations.unfollow.confirm": "Unfollow",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
-  "embed.instructions": "Embed this status on your website by copying the code below.",
-  "embed.preview": "Here is what it will look like:",
-  "emoji_button.activity": "Activity",
-  "emoji_button.custom": "Custom",
-  "emoji_button.flags": "Flags",
-  "emoji_button.food": "Food & Drink",
-  "emoji_button.label": "Insert emoji",
-  "emoji_button.nature": "Nature",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
-  "emoji_button.objects": "Objects",
-  "emoji_button.people": "People",
-  "emoji_button.recent": "Frequently used",
-  "emoji_button.search": "Search...",
-  "emoji_button.search_results": "Search results",
-  "emoji_button.symbols": "Symbols",
-  "emoji_button.travel": "Travel & Places",
-  "empty_column.account_timeline": "No toots here!",
-  "empty_column.blocks": "You haven't blocked any users yet.",
-  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
-  "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
-  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
-  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
-  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
-  "follow_request.authorize": "Authorize",
-  "follow_request.reject": "Reject",
+  "compose_form.sensitive.marked": "Mēdijs ir atzīmēts kā sensitīvs",
+  "compose_form.sensitive.unmarked": "Mēdijs nav atzīmēts kā sensitīvs",
+  "compose_form.spoiler.marked": "Teksts ir paslēpts aiz brīdinājuma",
+  "compose_form.spoiler.unmarked": "Teksts nav paslēpts",
+  "compose_form.spoiler_placeholder": "Ieraksti Savu brīdinājuma tekstu šeit",
+  "confirmation_modal.cancel": "Atcelt",
+  "confirmations.block.confirm": "Bloķēt",
+  "confirmations.block.message": "Vai tiešām vēlies bloķēt lietotāju {name}?",
+  "confirmations.delete.confirm": "Dzēst",
+  "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?",
+  "confirmations.delete_list.confirm": "Dzēst",
+  "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?",
+  "confirmations.domain_block.confirm": "Paslēpt visu domēnu",
+  "confirmations.domain_block.message": "Vai tu tiešām, tiešam vēlies bloķēt visu domēnu {domain}? Lielākajā daļā gadījumu pietiek ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.",
+  "confirmations.mute.confirm": "Apklusināt",
+  "confirmations.mute.message": "Vai Tu tiešām velies apklusināt {name}?",
+  "confirmations.redraft.confirm": "Dzēst un pārrakstīt",
+  "confirmations.redraft.message": "Vai tiešām vēlies dzēst un pārrakstīt šo ierakstu? Favorīti un paceltie ieraksti tiks dzēsti, kā arī atbildes tiks atsaistītas no šī ieraksta.",
+  "confirmations.reply.confirm": "Atbildēt",
+  "confirmations.reply.message": "Atbildot tagad tava ziņa ko šobrīd raksti tiks pārrakstīta. Vai tiešām vēlies turpināt?",
+  "confirmations.unfollow.confirm": "Nesekot",
+  "confirmations.unfollow.message": "Vai tiešam vairs nevēlies sekot lietotājam {name}?",
+  "embed.instructions": "Iegul šo ziņojumu savā mājaslapā kopējot kodu zemāk.",
+  "embed.preview": "Tas izskatīsies šādi:",
+  "emoji_button.activity": "Aktivitāte",
+  "emoji_button.custom": "Pielāgots",
+  "emoji_button.flags": "Karogi",
+  "emoji_button.food": "Ēdieni un dzērieni",
+  "emoji_button.label": "Ielikt emoji smaidiņu",
+  "emoji_button.nature": "Daba",
+  "emoji_button.not_found": "Nekādu emodžīšu!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objekti",
+  "emoji_button.people": "Cilvēki",
+  "emoji_button.recent": "Biežāk lietotie",
+  "emoji_button.search": "Meklēt...",
+  "emoji_button.search_results": "Meklēšanas rezultāti",
+  "emoji_button.symbols": "Simboli",
+  "emoji_button.travel": "Ceļošana & Vietas",
+  "empty_column.account_timeline": "Šeit ziņojumu nav!",
+  "empty_column.blocks": "Tu neesi vēl nevienu bloķējis.",
+  "empty_column.community": "Lokālā laika līnija ir tukša. :/ Ieraksti kaut ko lai sākas rosība!",
+  "empty_column.direct": "Tev nav privāto ziņu. Tiklīdz saņemsi tās šeit parādīsies.",
+  "empty_column.domain_blocks": "Slēpto domēnu vēl nav.",
+  "empty_column.favourited_statuses": "Tev vēl nav iemīļoto ziņojumu. Kad Tev tādu būs tie šeit parādīsies.",
+  "empty_column.favourites": "Neviens šo ziņojumu nav pievienojis favorītiem. Kad tādu būs tie šeit parādīsies.",
+  "empty_column.follow_requests": "Šobrīd neviens nav pieteicies tev sekot. Kad kāds pieteiksies tas parādīsies šeit.",
+  "empty_column.hashtag": "Ar šo haštagu nekas nav atrodams.",
+  "empty_column.home": "Tava laika līnija ir tukša! Apmeklē federatīvo laika līniju vai uzmeklē kādu meklētājā lai satiktu citus.",
+  "empty_column.home.public_timeline": "publiskā laika līnija",
+  "empty_column.list": "Šis saraksts ir tukšs. Kad šī saraksta dalībnieki atjaunos statusu tas parādīsies šeit.",
+  "empty_column.lists": "Tev nav neviena saraksta. Kad tādu būs tie parādīsies šeit.",
+  "empty_column.mutes": "Tu neesi nevienu apklusinājis.",
+  "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.",
+  "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances",
+  "follow_request.authorize": "Autorizēt",
+  "follow_request.reject": "Noraidīt",
   "getting_started.developers": "Developers",
   "getting_started.directory": "Profile directory",
   "getting_started.documentation": "Documentation",
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Delete",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index 0d510d011..602a59ca0 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Delete",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 871142195..92f94ddc0 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -297,6 +297,7 @@
   "status.block": "Blokkeer @{name}",
   "status.cancel_reblog_private": "Niet langer boosten",
   "status.cannot_reblog": "Deze toot kan niet geboost worden",
+  "status.copy": "Copy link to status",
   "status.delete": "Verwijderen",
   "status.detailed_status": "Uitgebreide gespreksweergave",
   "status.direct": "Directe toot @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
   "upload_area.title": "Hierin slepen om te uploaden",
   "upload_button.label": "Media toevoegen (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",
   "upload_form.focus": "Voorvertoning aanpassen",
   "upload_form.undo": "Verwijderen",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index fa08e8d73..f6910f0e6 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Denne posten kan ikke fremheves",
+  "status.copy": "Copy link to status",
   "status.delete": "Slett",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Beskriv for synshemmede",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Angre",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index c28e9f5b8..8250d59bd 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -251,7 +251,7 @@
   "notifications.column_settings.reblog": "Partatges :",
   "notifications.column_settings.show": "Mostrar dins la colomna",
   "notifications.column_settings.sound": "Emetre un son",
-  "notifications.filter.all": "Totes",
+  "notifications.filter.all": "Totas",
   "notifications.filter.boosts": "Partages",
   "notifications.filter.favourites": "Favorits",
   "notifications.filter.follows": "Seguiments",
@@ -297,6 +297,7 @@
   "status.block": "Blocar @{name}",
   "status.cancel_reblog_private": "Quitar de partejar",
   "status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
+  "status.copy": "Copy link to status",
   "status.delete": "Escafar",
   "status.detailed_status": "Vista detalhada de la convèrsa",
   "status.direct": "Messatge per @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descripcion pels mal vesents",
   "upload_form.focus": "Modificar l’apercebut",
   "upload_form.undo": "Suprimir",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index e9e0c768d..4dd887e3c 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -302,6 +302,7 @@
   "status.block": "Zablokuj @{name}",
   "status.cancel_reblog_private": "Cofnij podbicie",
   "status.cannot_reblog": "Ten wpis nie może zostać podbity",
+  "status.copy": "Copy link to status",
   "status.delete": "Usuń",
   "status.detailed_status": "Szczegółowy widok konwersacji",
   "status.direct": "Wyślij wiadomość bezpośrednią do @{name}",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 392e7f485..bc3682921 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Desfazer compartilhamento",
   "status.cannot_reblog": "Esta postagem não pode ser compartilhada",
+  "status.copy": "Copy link to status",
   "status.delete": "Excluir",
   "status.detailed_status": "Visão detalhada da conversa",
   "status.direct": "Enviar mensagem direta a @{name}",
@@ -342,6 +343,7 @@
   "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 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descreva a imagem para deficientes visuais",
   "upload_form.focus": "Ajustar foco",
   "upload_form.undo": "Remover",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index d4126704a..edcfd2fa2 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Este post não pode ser partilhado",
+  "status.copy": "Copy link to status",
   "status.delete": "Eliminar",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Anular",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index a1a514f49..3be3214ee 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -297,6 +297,7 @@
   "status.block": "Blochează @{name}",
   "status.cancel_reblog_private": "Nedistribuit",
   "status.cannot_reblog": "Această postare nu poate fi redistribuită",
+  "status.copy": "Copy link to status",
   "status.delete": "Șterge",
   "status.detailed_status": "Conversația detailată",
   "status.direct": "Mesaj direct @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.",
   "upload_area.title": "Trage și eliberează pentru a încărca",
   "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere",
   "upload_form.focus": "Schimbă previzualizarea",
   "upload_form.undo": "Șterge",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index cb6010898..db9e732c0 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -297,6 +297,7 @@
   "status.block": "Заблокировать @{name}",
   "status.cancel_reblog_private": "Не продвигать",
   "status.cannot_reblog": "Этот статус не может быть продвинут",
+  "status.copy": "Copy link to status",
   "status.delete": "Удалить",
   "status.detailed_status": "Подробный просмотр обсуждения",
   "status.direct": "Написать @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
   "upload_area.title": "Перетащите сюда, чтобы загрузить",
   "upload_button.label": "Добавить медиаконтент",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Описать для людей с нарушениями зрения",
   "upload_form.focus": "Обрезать",
   "upload_form.undo": "Отменить",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index a3467785a..8ca913245 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -13,7 +13,7 @@
   "account.followers": "Sledujúci",
   "account.followers.empty": "Tohto užívateľa ešte nikto nenásleduje.",
   "account.follows": "Následuje",
-  "account.follows.empty": "Tento užívateľ tu ešte nikoho nenásleduje.",
+  "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.",
   "account.follows_you": "Následuje ťa",
   "account.hide_reblogs": "Skryť povýšenia od @{name}",
   "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}",
@@ -35,7 +35,7 @@
   "account.unendorse": "Nezobrazuj na profile",
   "account.unfollow": "Prestaň následovať",
   "account.unmute": "Prestaň ignorovať @{name}",
-  "account.unmute_notifications": "Odtĺm oboznámenia od @{name}",
+  "account.unmute_notifications": "Zrušiť stlmenie oznámení od @{name}",
   "account.view_full_profile": "Pozri celý profil",
   "alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
   "alert.unexpected.title": "Oops!",
@@ -60,9 +60,9 @@
   "column.public": "Federovaná časová os",
   "column_back_button.label": "Späť",
   "column_header.hide_settings": "Skryť nastavenia",
-  "column_header.moveLeft_settings": "Presunúť stĺpec doľava",
-  "column_header.moveRight_settings": "Presunúť stĺpec doprava",
-  "column_header.pin": "Pripnúť",
+  "column_header.moveLeft_settings": "Presuň stĺpec doľava",
+  "column_header.moveRight_settings": "Presuň stĺpec doprava",
+  "column_header.pin": "Pripni",
   "column_header.show_settings": "Ukáž nastavenia",
   "column_header.unpin": "Odopnúť",
   "column_subheading.settings": "Nastavenia",
@@ -79,14 +79,14 @@
   "compose_form.sensitive.unmarked": "Médiálny obsah nieje označený ako chúlostivý",
   "compose_form.spoiler.marked": "Text je ukrytý za varovaním",
   "compose_form.spoiler.unmarked": "Text nieje ukrytý",
-  "compose_form.spoiler_placeholder": "Sem napíšte vaše varovanie",
-  "confirmation_modal.cancel": "Zrušiť",
-  "confirmations.block.confirm": "Blokovať",
-  "confirmations.block.message": "Si si istý, že chcete blokovať {name}?",
-  "confirmations.delete.confirm": "Zmazať",
-  "confirmations.delete.message": "Si si naozaj istá/ý, že chceš vymazať túto správu?",
-  "confirmations.delete_list.confirm": "Vymazať",
-  "confirmations.delete_list.message": "Si si istý/á, že chceš navždy vymazať tento zoznam?",
+  "compose_form.spoiler_placeholder": "Sem napíš tvoje varovanie",
+  "confirmation_modal.cancel": "Zruš",
+  "confirmations.block.confirm": "Blokuj",
+  "confirmations.block.message": "Si si istý/á, že chceš blokovať {name}?",
+  "confirmations.delete.confirm": "Vymaž",
+  "confirmations.delete.message": "Si si istý/á, že chceš vymazať túto správu?",
+  "confirmations.delete_list.confirm": "Vymaž",
+  "confirmations.delete_list.message": "Si si istý/á, že chceš natrvalo vymazať tento zoznam?",
   "confirmations.domain_block.confirm": "Skryť celú doménu",
   "confirmations.domain_block.message": "Si si naozaj istý, že chceš blokovať celú {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.",
   "confirmations.mute.confirm": "Ignoruj",
@@ -162,7 +162,7 @@
   "introduction.interactions.reblog.headline": "Povýš",
   "introduction.interactions.reblog.text": "Môžeš zdieľať príspevky iných ľudí s vašimi následovateľmi tým, že ich povýšiš.",
   "introduction.interactions.reply.headline": "Odpovedz",
-  "introduction.interactions.reply.text": "Odpovedať môžeš na príspevky iných ľudí, aj na svoje vlastné, čím sa sspolu prepoja do konverzácie.",
+  "introduction.interactions.reply.text": "Odpovedať môžeš na príspevky iných ľudí, aj na svoje vlastné, čím sa spolu prepoja do konverzácie.",
   "introduction.welcome.action": "Poďme do toho!",
   "introduction.welcome.headline": "Prvé kroky",
   "introduction.welcome.text": "Vitaj vo fediverse! Za malú chvíľu budeš môcť posielať správy a rozpovedať sa so svojími priateľmi cez širokú škálu rôznorodých serverov. Ale tento server, {domain}, je špeciálny v tom, že ukladá tvoj profil, takže si jeho názov zapametaj.",
@@ -212,7 +212,7 @@
   "media_gallery.toggle_visible": "Zapnúť/Vypnúť viditeľnosť",
   "missing_indicator.label": "Nenájdené",
   "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť",
-  "mute_modal.hide_notifications": "Skryť oboznámenia od tohoto užívateľa?",
+  "mute_modal.hide_notifications": "Skryť oznámenia od tohto používateľa?",
   "navigation_bar.apps": "Mobilné aplikácie",
   "navigation_bar.blocks": "Blokovaní užívatelia",
   "navigation_bar.community_timeline": "Lokálna časová os",
@@ -220,11 +220,11 @@
   "navigation_bar.direct": "Súkromné správy",
   "navigation_bar.discover": "Objavuj",
   "navigation_bar.domain_blocks": "Skryté domény",
-  "navigation_bar.edit_profile": "Uprav profil",
+  "navigation_bar.edit_profile": "Upraviť profil",
   "navigation_bar.favourites": "Obľúbené",
   "navigation_bar.filters": "Utĺmené slová",
   "navigation_bar.follow_requests": "Žiadosti o sledovanie",
-  "navigation_bar.info": "O tomto Mastodon serveri",
+  "navigation_bar.info": "O tomto serveri",
   "navigation_bar.keyboard_shortcuts": "Klávesové skratky",
   "navigation_bar.lists": "Zoznamy",
   "navigation_bar.logout": "Odhlás sa",
@@ -255,10 +255,10 @@
   "notifications.filter.boosts": "Vyzdvihnutia",
   "notifications.filter.favourites": "Obľúbené",
   "notifications.filter.follows": "Sledovania",
-  "notifications.filter.mentions": "Spomenutia",
-  "notifications.group": "{count} oznámenia",
-  "privacy.change": "Zmeňiť viditeľnosť statusu",
-  "privacy.direct.long": "Poslať priamo iba spomenutým používateľom",
+  "notifications.filter.mentions": "Iba spomenutia",
+  "notifications.group": "{count} oboznámení",
+  "privacy.change": "Uprav súkromie príspevku",
+  "privacy.direct.long": "Pošli iba spomenutým používateľom",
   "privacy.direct.short": "Súkromne",
   "privacy.private.long": "Poslať iba následovateľom",
   "privacy.private.short": "Iba pre sledujúcich",
@@ -297,6 +297,7 @@
   "status.block": "Blokovať @{name}",
   "status.cancel_reblog_private": "Nezdieľaj",
   "status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý",
+  "status.copy": "Copy link to status",
   "status.delete": "Zmazať",
   "status.detailed_status": "Podrobný náhľad celej konverzácie",
   "status.direct": "Súkromná správa @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
   "upload_area.title": "Pretiahni a pusť pre nahratie",
   "upload_button.label": "Pridať médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Opis pre slabo vidiacich",
   "upload_form.focus": "Pozmeň náhľad",
   "upload_form.undo": "Vymaž",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index cabad737d..8e5e3deb9 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -1,5 +1,5 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.add_or_remove_from_list": "Dodaj ali odstrani iz seznama",
   "account.badges.bot": "Robot",
   "account.block": "Blokiraj @{name}",
   "account.block_domain": "Skrij vse iz {domain}",
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.",
   "upload_area.title": "Povlecite in spustite za pošiljanje",
   "upload_button.label": "Dodaj medij",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Opišite za slabovidne",
   "upload_form.focus": "Obreži",
   "upload_form.undo": "Izbriši",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
new file mode 100644
index 000000000..3dd7fb443
--- /dev/null
+++ b/app/javascript/mastodon/locales/sq.json
@@ -0,0 +1,360 @@
+{
+  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.badges.bot": "Bot",
+  "account.block": "Block @{name}",
+  "account.block_domain": "Hide everything from {domain}",
+  "account.blocked": "Blocked",
+  "account.direct": "Direct message @{name}",
+  "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
+  "account.domain_blocked": "Domain hidden",
+  "account.edit_profile": "Edit profile",
+  "account.endorse": "Feature on profile",
+  "account.follow": "Follow",
+  "account.followers": "Followers",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.follows": "Follows",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.link_verified_on": "Ownership of this link was checked on {date}",
+  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.media": "Media",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "Mute @{name}",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "Report @{name}",
+  "account.requested": "Awaiting approval. Click to cancel follow request",
+  "account.share": "Share @{name}'s profile",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.unblock": "Unblock @{name}",
+  "account.unblock_domain": "Unhide {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account.view_full_profile": "View full profile",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "Oops!",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "Try again",
+  "bundle_column_error.title": "Network error",
+  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "Try again",
+  "column.blocks": "Blocked users",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.domain_blocks": "Hidden domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Home",
+  "column.lists": "Lists",
+  "column.mutes": "Muted users",
+  "column.notifications": "Notifications",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Back",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.media_only": "Media Only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.marked": "Media is marked as sensitive",
+  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.confirm": "Block",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.reply.confirm": "Reply",
+  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.account_timeline": "No toots here!",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no hidden domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.hashtag": "There is nothing in this hashtag yet.",
+  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "getting_started.developers": "Developers",
+  "getting_started.directory": "Profile directory",
+  "getting_started.documentation": "Documentation",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "hashtag.column_header.tag_mode.all": "and {additional}",
+  "hashtag.column_header.tag_mode.any": "or {additional}",
+  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.any": "Any of these",
+  "hashtag.column_settings.tag_mode.none": "None of these",
+  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "introduction.federation.action": "Next",
+  "introduction.federation.federated.headline": "Federated",
+  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
+  "introduction.federation.home.headline": "Home",
+  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
+  "introduction.federation.local.headline": "Local",
+  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
+  "introduction.interactions.action": "Finish toot-orial!",
+  "introduction.interactions.favourite.headline": "Favourite",
+  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
+  "introduction.interactions.reblog.headline": "Boost",
+  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
+  "introduction.interactions.reply.headline": "Reply",
+  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
+  "introduction.welcome.action": "Let's go!",
+  "introduction.welcome.headline": "First steps",
+  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "Toggle visibility",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.info": "About this server",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.mention": "{name} mentioned you",
+  "notification.reblog": "{name} boosted your status",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.filter_bar.advanced": "Display all categories",
+  "notifications.column_settings.filter_bar.category": "Quick filter bar",
+  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.filter.all": "All",
+  "notifications.filter.boosts": "Boosts",
+  "notifications.filter.favourites": "Favourites",
+  "notifications.filter.follows": "Follows",
+  "notifications.filter.mentions": "Mentions",
+  "notifications.group": "{count} notifications",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Post to mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Post to followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Post to public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Do not show in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "standalone.public_title": "A look inside...",
+  "status.admin_account": "Open moderation interface for @{name}",
+  "status.admin_status": "Open this status in the moderation interface",
+  "status.block": "Block @{name}",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.read_more": "Read more",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost to original audience",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_toggle": "Click to view",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.show_thread": "Show thread",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "suggestions.dismiss": "Dismiss suggestion",
+  "suggestions.header": "You might be interested in…",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.focus": "Crop",
+  "upload_form.undo": "Delete",
+  "upload_progress.label": "Uploading...",
+  "video.close": "Close video",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index c8513dbe1..484e2690d 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Ovaj status ne može da se podrži",
+  "status.copy": "Copy link to status",
   "status.delete": "Obriši",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.",
   "upload_area.title": "Prevucite ovde da otpremite",
   "upload_button.label": "Dodaj multimediju",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Opiši za slabovide osobe",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Opozovi",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 6e0ac6eca..284ceab47 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -297,6 +297,7 @@
   "status.block": "Блокирај @{name}",
   "status.cancel_reblog_private": "Уклони подршку",
   "status.cannot_reblog": "Овај статус не може да се подржи",
+  "status.copy": "Copy link to status",
   "status.delete": "Обриши",
   "status.detailed_status": "Детаљни преглед разговора",
   "status.direct": "Директна порука @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
   "upload_area.title": "Превуците овде да отпремите",
   "upload_button.label": "Додај мултимедију (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Опишите за особе са оштећеним видом",
   "upload_form.focus": "Подесите",
   "upload_form.undo": "Обриши",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 47ce8497a..9acf2428e 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Ta bort knuff",
   "status.cannot_reblog": "Detta inlägg kan inte knuffas",
+  "status.copy": "Copy link to status",
   "status.delete": "Ta bort",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direktmeddela @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Beskriv för synskadade",
   "upload_form.focus": "Beskär",
   "upload_form.undo": "Ta bort",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 0d510d011..602a59ca0 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Delete",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 7306ec001..b118c189f 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -132,7 +132,7 @@
   "follow_request.authorize": "అనుమతించు",
   "follow_request.reject": "తిరస్కరించు",
   "getting_started.developers": "డెవలపర్లు",
-  "getting_started.directory": "ప్రొఫైల్ డైరెక్టరీProfile directory",
+  "getting_started.directory": "ప్రొఫైల్ డైరెక్టరీ",
   "getting_started.documentation": "డాక్యుమెంటేషన్",
   "getting_started.heading": "మొదలుపెడదాం",
   "getting_started.invite": "వ్యక్తులను ఆహ్వానించండి",
@@ -292,11 +292,12 @@
   "search_results.statuses": "టూట్లు",
   "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
   "standalone.public_title": "లోపలికి ఒక చూపు...",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు",
+  "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి",
   "status.block": "@{name} ను బ్లాక్ చేయి",
   "status.cancel_reblog_private": "బూస్ట్ను తొలగించు",
   "status.cannot_reblog": "ఈ పోస్ట్ను బూస్ట్ చేయడం సాధ్యం కాదు",
+  "status.copy": "Copy link to status",
   "status.delete": "తొలగించు",
   "status.detailed_status": "వివరణాత్మక సంభాషణ వీక్షణ",
   "status.direct": "@{name}కు నేరుగా సందేశం పంపు",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "మీరు మాస్టొడొన్ను వదిలివేస్తే మీ డ్రాఫ్ట్లు పోతాయి.",
   "upload_area.title": "అప్లోడ్ చేయడానికి డ్రాగ్ & డ్రాప్ చేయండి",
   "upload_button.label": "మీడియాను జోడించండి (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "దృష్టి లోపమున్న వారి కోసం వివరించండి",
   "upload_form.focus": "ప్రివ్యూను మార్చు",
   "upload_form.undo": "తొలగించు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 2683284f4..2b0fc40e2 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "This post cannot be boosted",
+  "status.copy": "Copy link to status",
   "status.delete": "Delete",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
   "upload_area.title": "Drag & drop to upload",
   "upload_button.label": "Add media",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Undo",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 5d8fc229e..30dc06d8c 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Bu gönderi boost edilemez",
+  "status.copy": "Copy link to status",
   "status.delete": "Sil",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "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",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.focus": "Crop",
   "upload_form.undo": "Geri al",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 606dda89f..5dfda4933 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -297,6 +297,7 @@
   "status.block": "Block @{name}",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Цей допис не може бути передмухнутий",
+  "status.copy": "Copy link to status",
   "status.delete": "Видалити",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.",
   "upload_area.title": "Перетягніть сюди, щоб завантажити",
   "upload_button.label": "Додати медіаконтент",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "Опишіть для людей з вадами зору",
   "upload_form.focus": "Обрізати",
   "upload_form.undo": "Видалити",
diff --git a/app/javascript/mastodon/locales/whitelist_sq.json b/app/javascript/mastodon/locales/whitelist_sq.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_sq.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index dfa261d6e..0cfa3f712 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -297,6 +297,7 @@
   "status.block": "屏蔽 @{name}",
   "status.cancel_reblog_private": "取消转嘟",
   "status.cannot_reblog": "无法转嘟这条嘟文",
+  "status.copy": "Copy link to status",
   "status.delete": "删除",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "发送私信给 @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
   "upload_area.title": "将文件拖放到此处开始上传",
   "upload_button.label": "上传媒体文件",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "为视觉障碍人士添加文字说明",
   "upload_form.focus": "剪裁",
   "upload_form.undo": "取消上传",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index e57aa6d96..999ca3216 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -297,6 +297,7 @@
   "status.block": "封鎖 @{name}",
   "status.cancel_reblog_private": "取消轉推",
   "status.cannot_reblog": "這篇文章無法被轉推",
+  "status.copy": "Copy link to status",
   "status.delete": "刪除",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "私訊 @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
   "upload_area.title": "將檔案拖放至此上載",
   "upload_button.label": "上載媒體檔案",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "為視覺障礙人士添加文字說明",
   "upload_form.focus": "裁切",
   "upload_form.undo": "刪除",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 0cbe5da5a..26328e12e 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -297,6 +297,7 @@
   "status.block": "封鎖 @{name}",
   "status.cancel_reblog_private": "取消轉嘟",
   "status.cannot_reblog": "這篇嘟文無法被轉嘟",
+  "status.copy": "Copy link to status",
   "status.delete": "刪除",
   "status.detailed_status": "對話的詳細內容",
   "status.direct": "發送私訊給 @{name}",
@@ -342,6 +343,7 @@
   "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
   "upload_area.title": "拖放來上傳",
   "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "File upload limit exceeded.",
   "upload_form.description": "為視障人士增加文字說明",
   "upload_form.focus": "裁切",
   "upload_form.undo": "刪除",
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 1bc2314de..fc3bc03a5 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -102,6 +102,10 @@ class SuspendAccountService < BaseService
     ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url|
       [delete_actor_json, @account.id, inbox_url]
     end
+
+    ActivityPub::LowPriorityDeliveryWorker.push_bulk(low_priority_delivery_inboxes) do |inbox_url|
+      [delete_actor_json, @account.id, inbox_url]
+    end
   end
 
   def delete_actor_json
@@ -117,7 +121,11 @@ class SuspendAccountService < BaseService
   end
 
   def delivery_inboxes
-    Account.inboxes + Relay.enabled.pluck(:inbox_url)
+    @delivery_inboxes ||= @account.followers.inboxes + Relay.enabled.pluck(:inbox_url)
+  end
+
+  def low_priority_delivery_inboxes
+    Account.inboxes - delivery_inboxes
   end
 
   def associations_for_destruction
diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb
index 5b4c684b2..96fbedcfc 100644
--- a/app/validators/email_mx_validator.rb
+++ b/app/validators/email_mx_validator.rb
@@ -24,6 +24,7 @@ class EmailMxValidator < ActiveModel::Validator
 
       ([domain] + hostnames).uniq.each do |hostname|
         ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s })
+        ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::AAAA).to_a.map { |e| e.address.to_s })
       end
     end
 
diff --git a/app/workers/activitypub/low_priority_delivery_worker.rb b/app/workers/activitypub/low_priority_delivery_worker.rb
new file mode 100644
index 000000000..a141b8f78
--- /dev/null
+++ b/app/workers/activitypub/low_priority_delivery_worker.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class ActivityPub::LowPriorityDeliveryWorker < ActivityPub::DeliveryWorker
+  sidekiq_options queue: 'pull', retry: 8, dead: false
+end
diff --git a/config/application.rb b/config/application.rb
index 06ff8ed36..69ed1627a 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -65,6 +65,8 @@ module Mastodon
       :ja,
       :ka,
       :ko,
+      :lv,
+      :ms,
       :nl,
       :no,
       :oc,
@@ -75,6 +77,7 @@ module Mastodon
       :ru,
       :sk,
       :sl,
+      :sq,
       :sr,
       :'sr-Latn',
       :sv,
diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml
new file mode 100644
index 000000000..e52345978
--- /dev/null
+++ b/config/locales/activerecord.sq.yml
@@ -0,0 +1,13 @@
+---
+sq:
+  activerecord:
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: vetëm shkronja, numra dhe nënvija
+        status:
+          attributes:
+            reblog:
+              taken: e gjendjes ekziston tashmë
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 08f5578ba..ec8b15cba 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -195,6 +195,7 @@ ar:
         assigned_to_self_report: قام %{name} بتعيين التقرير %{target} لأنفسهم
         change_email_user: غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target}
         confirm_user: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}"
+        create_account_warning: قام %{name} بإرسال تحذير إلى %{target}
         create_custom_emoji: "%{name} قام برفع إيموجي جديد %{target}"
         create_domain_block: "%{name} قام بحجب نطاق %{target}"
         create_email_domain_block: "%{name} قد قام بحظر نطاق البريد الإلكتروني %{target}"
diff --git a/config/locales/co.yml b/config/locales/co.yml
index a7264e754..5f961b466 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -553,8 +553,11 @@ co:
     warning_title: Dispunibilità di i cuntenuti sparsi
   directories:
     directory: Annuariu di i prufili
+    enabled: Site inscrittu·a indè l'annuariu.
+    enabled_but_waiting: Avete sceltu d'esse inscrittu·a indè l'annuariu, mà ùn avete micca ancu u numeru minimale d'abbunati (%{min_followers}) per esse listatu·a.
     explanation: Scopre utilizatori à partesi di i so centri d'interessu
     explore_mastodon: Scopre à %{title}
+    how_to_enable: Ùn site micca ancu inscrittu·a indè l'annuariu. Pudete inscrive vi quì sottu. Utilizate qualchi hashtag indè a vostra biugrafia per esse listatu·a indè tag specifichi!
     people:
       one: "%{count} persona"
       other: "%{count} persone"
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 424ec3dab..d1f11261c 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -3,11 +3,11 @@ cs:
   about:
     about_hashtag_html: Tohle jsou veřejné tooty označené hashtagem <strong>#%{hashtag}</strong>. Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
     about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentralizovaná jako e-mail.
-    about_this: O této instanci
-    administered_by: 'Instanci spravuje:'
+    about_this: O tomto serveru
+    administered_by: 'Server spravuje:'
     api: API
     apps: Mobilní aplikace
-    closed_registrations: Registrace na této instanci jsou momentálně uzavřené. Ale pozor! Můžete si najít jinou instanci, vytvořit si na ní účet a získat z ní přístup do naprosto stejné sítě.
+    closed_registrations: Registrace na tomto serveru jsou momentálně uzavřené. Ale pozor! Můžete si najít jiný server, vytvořit si na něm účet a získat z něj přístup do naprosto stejné sítě.
     contact: Kontakt
     contact_missing: Nenastaveno
     contact_unavailable: Neuvedeno
@@ -25,9 +25,9 @@ cs:
       within_reach_body: Několik aplikací pro iOS, Android a jiné platformy vám díky jednoduchému API ekosystému dovolují držet krok s vašimi přáteli, ať už jste kdekoliv.
       within_reach_title: Vždy v dosahu
     generic_description: "%{domain} je jedním ze serverů v síti"
-    hosted_on: Instance Mastodon na adrese %{domain}
+    hosted_on: Server Mastodon na adrese %{domain}
     learn_more: Zjistit více
-    other_instances: Seznam instancí
+    other_instances: Seznam serverů
     privacy_policy: Zásady soukromí
     source_code: Zdrojový kód
     status_count_after:
@@ -47,8 +47,8 @@ cs:
     follow: Sledovat
     followers:
       few: Sledovatelé
-      one: Sledovatel
-      other: Sledovatelů
+      one: Sledující
+      other: Sledujících
     following: Sledovaných
     joined: Připojil/a se v %{date}
     last_active: naposledy aktivní
@@ -109,8 +109,8 @@ cs:
       enable: Povolit
       enabled: Povoleno
       feed_url: URL proudu
-      followers: Sledovatelé
-      followers_url: URL sledovatelů
+      followers: Sledující
+      followers_url: URL sledujících
       follows: Sledovaní
       header: Hlavička
       inbox_url: URL přijatých zpráv
@@ -157,7 +157,7 @@ cs:
       roles:
         admin: Administrátor
         moderator: Moderátor
-        staff: Personál
+        staff: Člen personálu
         user: Uživatel
       salmon_url: URL Salmon
       search: Hledat
@@ -305,7 +305,7 @@ cs:
       title: Černá listina e-mailů
     followers:
       back_to_account: Zpět na účet
-      title: Sledovatelé uživatele %{acct}
+      title: Sledující uživatele %{acct}
     instances:
       delivery_available: Doručení je k dispozici
       known_accounts:
@@ -318,9 +318,9 @@ cs:
         title: Moderace
       title: Federace
       total_blocked_by_us: Blokované námi
-      total_followed_by_them: Sledované jím
+      total_followed_by_them: Sledované jimi
       total_followed_by_us: Sledované námi
-      total_reported: Nahlášení o něm
+      total_reported: Nahlášení o nich
       total_storage: Mediální přílohy
     invites:
       deactivate_all: Deaktivovat vše
@@ -392,14 +392,14 @@ cs:
         desc_html: Pozměnit vzhled pomocí šablony CSS načtené na každé stránce
         title: Vlastní CSS
       hero:
-        desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 600x100 px. Pokud toto není nastaveno, bude zobrazena miniatura instance
+        desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 600x100 px. Pokud toto není nastaveno, bude zobrazena miniatura serveru
         title: Hlavní obrázek
       mascot:
         desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 293x205 px. Pokud toto není nastaveno, bude zobrazen výchozí maskot
         title: Obrázek maskota
       peers_api_enabled:
-        desc_html: Domény, na které tato instance narazila ve fediverse
-        title: Zveřejnit seznam objevených instancí
+        desc_html: Domény, na které tento server narazil ve fediverse
+        title: Zveřejnit seznam objevených serverů
       preview_sensitive_media:
         desc_html: Náhledy odkazů na jiných stránkách budou zobrazeny i pokud jsou media označena jako citlivá
         title: Zobrazovat v náhledech OpenGraph i citlivá média
@@ -427,20 +427,20 @@ cs:
         title: Zobrazit odznak personálu
       site_description:
         desc_html: Úvodní odstavec na hlavní straně. Popište, díky čemu je tento server Mastodon zvláštní, a cokoliv jiného, co je důležité. Můžete zde používat HTML značky, hlavně <code>&lt;a&gt;</code> a <code>&lt;em&gt;</code>.
-        title: Popis instance
+        title: Popis serveru
       site_description_extended:
-        desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které vaši instanci odlišují od ostatních. Lze použít HTML značky
+        desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které váš server odlišují od ostatních. Lze použít HTML značky
         title: Vlastní doplňující informace
       site_short_description:
-        desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní v jediném odstavci. Je-li tohle prázdné, zobrazí se popis instance.
-        title: Krátký popis instance
+        desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní v jediném odstavci. Je-li tohle prázdné, zobrazí se popis serveru.
+        title: Krátký popis serveru
       site_terms:
         desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. Můžete použít HTML značky
         title: Vlastní podmínky používání
-      site_title: Název instance
+      site_title: Název serveru
       thumbnail:
         desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučuje se rozlišení 1200x630px
-        title: Miniatura instance
+        title: Miniatura serveru
       timeline_preview:
         desc_html: Zobrazit na hlavní straně veřejnou časovou osu
         title: Náhled časové osy
@@ -501,7 +501,7 @@ cs:
     warning: Buďte s těmito daty velmi opatrní. Nikdy je s nikým nesdílejte!
     your_token: Váš přístupový token
   auth:
-    agreement_html: Kliknutím na tlačítko „Registrovat“ souhlasíte s následováním <a href="%{rules_path}">pravidel této instance</a> a <a href="%{terms_path}">našich podmínek používání</a>.
+    agreement_html: Kliknutím na tlačítko „Registrovat“ souhlasíte s následováním <a href="%{rules_path}">pravidel tohoto serveru</a> a <a href="%{terms_path}">našich podmínek používání</a>.
     change_password: Heslo
     confirm_email: Potvrdit e-mail
     delete_account: Odstranit účet
@@ -555,12 +555,12 @@ cs:
     description_html: Tímto <strong>trvale a nenávratně</strong> odstraníte obsah z vašeho účtu a deaktivujete ho. Vaše uživatelské jméno zůstane rezervované pro zabránění budoucím napodobováním.
     proceed: Odstranit účet
     success_msg: Váš účet byl úspěšně odstraněn
-    warning_html: Pouze vymazání obsahu z této konkrétní instance je zaručeno. Obsah, který byl široce sdílen, po sobě pravděpodobně zanechá stopy. U offline serverů a serverů, které vaše aktualizace již neodebírají, nebudou databáze aktualizovány.
+    warning_html: Pouze vymazání obsahu z tohoto konkrétního serveru je zaručeno. Obsah, který byl široce sdílen, po sobě pravděpodobně zanechá stopy. U offline serverů a serverů, které vaše aktualizace již neodebírají, nebudou databáze aktualizovány.
     warning_title: Dostupnost rozšířeného obsahu
   directories:
     directory: Adresář profilů
     enabled: Aktuálně jste v adresáři uveden/a.
-    enabled_but_waiting: Přihlásil/a jste se k uvedení v adresáři, ale ještě nemáte minimální počet sledovatelů (%{min_followers}) pro uvedení.
+    enabled_but_waiting: Přihlásil/a jste se k uvedení v adresáři, ale ještě nemáte minimální počet sledujících (%{min_followers}) pro uvedení.
     explanation: Objevujte uživatele podle jejich zájmů
     explore_mastodon: Prozkoumejte %{title}
     how_to_enable: Aktuálně nejste přihlášen/a do adresáře. Přihlásit se můžete níže. Použijte ve svém popisu profilu hashtagy, abyste mohl/a být uveden/a pod konkrétními hashtagy!
@@ -613,17 +613,17 @@ cs:
       title: Přidat nový filtr
   followers:
     domain: Doména
-    explanation_html: Chcete-li zaručit soukromí vašich příspěvků, musíte mít na vědomí, kdo vás sleduje. <strong>Vaše soukromé příspěvky jsou doručeny na všechny instance, kde máte sledovatele</strong>. Nejspíš si je budete chtít zkontrolovat a odstranit sledovatele na instancích, jejichž personálu či softwaru nedůvěřujete s respektováním vašeho soukromí.
-    followers_count: Počet sledovatelů
+    explanation_html: Chcete-li zaručit soukromí vašich příspěvků, musíte mít na vědomí, kdo vás sleduje. <strong>Vaše soukromé příspěvky jsou doručeny na všechny servery, kde máte sledující</strong>. Nejspíš si je budete chtít zkontrolovat a odstranit sledující na serverech, jejichž provozovatelům či softwaru nedůvěřujete s respektováním vašeho soukromí.
+    followers_count: Počet sledujících
     lock_link: Zamkněte svůj účet
-    purge: Odstranit ze sledovatelů
+    purge: Odstranit ze sledujících
     success:
       few: V průběhu blokování sledovatelů ze %{count} domén...
-      one: V průběhu blokování sledovatelů z jedné domény...
-      other: V průběhu blokování sledovatelů z %{count} domén...
+      one: V průběhu blokování sledujících z jedné domény...
+      other: V průběhu blokování sledujících z %{count} domén...
     true_privacy_html: Berte prosím na vědomí, že <strong>skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování</strong>.
-    unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele.
-    unlocked_warning_title: Váš účet není zamknutý
+    unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a kontrolovat a odmítat sledující.
+    unlocked_warning_title: Váš účet není uzamčen
   footer:
     developers: Vývojáři
     more: Více…
@@ -637,7 +637,7 @@ cs:
       one: Něco ještě není úplně v pořádku! Prosím zkontrolujte chybu níže
       other: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže
   imports:
-    preface: Můžete importovat data, která jste exportoval/a z jiné instance, jako například seznam lidí, které sledujete či blokujete.
+    preface: Můžete importovat data, která jste exportoval/a z jiného serveru, jako například seznam lidí, které sledujete či blokujete.
     success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas
     types:
       blocking: Seznam blokovaných
@@ -663,7 +663,7 @@ cs:
       one: 1 použití
       other: "%{count} použití"
     max_uses_prompt: Bez limitu
-    prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tuto instanci
+    prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tento server
     table:
       expires_at: Vyprší
       uses: Použití
@@ -689,8 +689,8 @@ cs:
       mention: "%{name} vás zmínil/a v:"
       new_followers_summary:
         few: Navíc jste získal/a %{count} nové sledovatele, zatímco jste byl/a pryč! Skvělé!
-        one: Navíc jste získal/a jednoho nového sledovatele, zatímco jste byl/a pryč! Hurá!
-        other: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Úžasné!
+        one: Navíc jste získal/a jednoho nového sledujícího, zatímco jste byl/a pryč! Hurá!
+        other: Navíc jste získal/a %{count} nových sledujících, zatímco jste byl/a pryč! Úžasné!
       subject:
         few: "%{count} nová oznámení od vaší poslední návštěvy \U0001F418"
         one: "1 nové oznámení od vaší poslední návštěvy \U0001F418"
@@ -703,11 +703,11 @@ cs:
     follow:
       body: "%{name} vás nyní sleduje!"
       subject: "%{name} vás nyní sleduje"
-      title: Nový sledovatel
+      title: Nový sledující
     follow_request:
       action: Spravovat požadavky o sledování
       body: "%{name} požádal/a o povolení vás sledovat"
-      subject: 'Čekající sledovatel: %{name}'
+      subject: 'Čekající sledující: %{name}'
       title: Nový požadavek o sledování
     mention:
       action: Odpovědět
@@ -812,7 +812,7 @@ cs:
     development: Vývoj
     edit_profile: Upravit profil
     export: Export dat
-    followers: Autorizovaní sledovatelé
+    followers: Autorizovaní sledující
     import: Import
     migrate: Přesunutí účtu
     notifications: Oznámení
@@ -849,8 +849,8 @@ cs:
     sign_in_to_participate: Chcete-li se účastnit této konverzace, přihlaste se
     title: "%{name}: „%{quote}“"
     visibilities:
-      private: Pouze pro sledovatele
-      private_long: Zobrazit pouze sledovatelům
+      private: Pouze pro sledující
+      private_long: Zobrazit pouze sledujícím
       public: Veřejné
       public_long: Všichni mohou vidět
       unlisted: Neuvedené
@@ -866,8 +866,8 @@ cs:
 
       <ul>
         <li><em>Základní informace o účtu</em>: Pokud se na tomto serveru zaregistrujete, můžeme vás požádat o zadání uživatelského jména, e-mailové adresy a hesla. Můžete také zadat dodatečné profilové informace, jako například zobrazované jméno a krátký životopis, a nahrát si profilovou fotografii a hlavičkový obrázek. Uživatelské i zobrazované jméno, životopis, profilová fotografie a hlavičkový obrázek jsou vždy uvedeny veřejně.</li>
-        <li><em>Příspěvky, sledovatelé a další veřejné informace</em>: Seznam lidí, které sledujete, je uveden veřejně, totéž platí i pro vaše sledovatele. Když sem nahrajete zprávu, bude uloženo datum a čas, společně s aplikací, ze které jste zprávu odeslali. Zprávy mohou obsahovat mediální přílohy, jako jsou obrázky a videa. Veřejné a neuvedené příspěvky jsou dostupné veřejně. Pokud na vašem profilu uvedete příspěvek, je to také veřejně dostupná informace. Vaše příspěvky jsou doručeny vašim sledovatelům, což v některých případech znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Pokud příspěvky smažete, bude tohle taktéž doručeno vašim sledovatelům. Akce znovusdílení nebo oblíbení jiného příspěvku je vždy veřejná.</li>
-        <li><em>Příspěvky přímé a pouze pro sledovatele</em>: Všechny příspěvky jsou uloženy a zpracovány na serveru. Příspěvky pouze pro sledovatele jsou doručeny vašim sledovatelům a uživatelům v nich zmíněným a přímé příspěvky jsou doručeny pouze uživatelům v nich zmíněným. V některých případech tohle znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Snažíme se omezit přístup k těmto příspěvkům pouze na autorizované uživatele, ovšem jiné servery tak nemusejí učinit. Proto je důležité posoudit servery, ke kterým vaši sledovatelé patří. V nastavení si můžete zapnout volbu pro manuální schvalování či odmítnutí nových sledovatelů. <em>Prosím mějte na paměti, že operátoři tohoto serveru a kteréhokoliv přijímacího serveru mohou tyto zprávy vidět</em> a příjemci mohou vytvořit jejich snímek, zkopírovat je, nebo je jinak sdílet. <em>Nesdílejte přes Mastodon jakékoliv nebezpečné informace.</em></li>
+        <li><em>Příspěvky, sledující a další veřejné informace</em>: Seznam lidí, které sledujete, je uveden veřejně, totéž platí i pro vaše sledující. Když sem nahrajete zprávu, bude uloženo datum a čas, společně s aplikací, ze které jste zprávu odeslali. Zprávy mohou obsahovat mediální přílohy, jako jsou obrázky a videa. Veřejné a neuvedené příspěvky jsou dostupné veřejně. Pokud na vašem profilu uvedete příspěvek, je to také veřejně dostupná informace. Vaše příspěvky jsou doručeny vašim sledujícím, což v některých případech znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Pokud příspěvky smažete, bude tohle taktéž doručeno vašim sledujícím. Akce znovusdílení nebo oblíbení jiného příspěvku je vždy veřejná.</li>
+        <li><em>Příspěvky přímé a pouze pro sledující</em>: Všechny příspěvky jsou uloženy a zpracovány na serveru. Příspěvky pouze pro sledující jsou doručeny vašim sledujícím a uživatelům v nich zmíněným a přímé příspěvky jsou doručeny pouze uživatelům v nich zmíněným. V některých případech tohle znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Snažíme se omezit přístup k těmto příspěvkům pouze na autorizované uživatele, ovšem jiné servery tak nemusejí učinit. Proto je důležité posoudit servery, ke kterým vaši sledující patří. V nastavení si můžete zapnout volbu pro manuální schvalování či odmítnutí nových sledujících. <em>Prosím mějte na paměti, že operátoři tohoto serveru a kteréhokoliv přijímacího serveru mohou tyto zprávy vidět</em> a příjemci mohou vytvořit jejich snímek, zkopírovat je, nebo je jinak sdílet. <em>Nesdílejte přes Mastodon jakékoliv nebezpečné informace.</em></li>
         <li><em>IP adresy a další metadata</em>: Když se přihlásíte, zaznamenáváme IP adresu, ze které se přihlašujete, jakožto i název vašeho webového prohlížeče. Všechny vaše webové relace jsou v nastavení přístupné k vašemu posouzení a odvolání. Nejpozdější IP adresa použita je uložena maximálně do 12 měsíců. Můžeme také uchovávat serverové záznamy, které obsahují IP adresy každého požadavku odeslaného na náš server.</li>
       </ul>
 
@@ -908,7 +908,7 @@ cs:
 
       <h3 id="cookies">Používáme cookies?</h3>
 
-      <p>Ano. Cookies jsou malé soubory, které stránka nebo její poskytovatel uloží na pevný disk vašeho počítače (pokud to dovolíte). Tyto cookies umožňují stránce rozpoznat váš prohlížeč a, pokud máte registrovaný účet, přidružit ho s vaším registrovaným účtem.</p>
+      <p>Ano. Cookies jsou malé soubory, které stránka nebo její poskytovatel uloží na pevný disk vašeho počítače (pokud to dovolíte). Tyto cookies umožňují stránce rozpoznat váš prohlížeč, a pokud máte registrovaný účet, přidružit ho s vaším registrovaným účtem.</p>
 
       <p>Používáme cookies pro pochopení a ukládání vašich předvoleb pro budoucí návštěvy.</p>
 
@@ -918,15 +918,15 @@ cs:
 
       <p>Vaše osobně identifikovatelné informace neprodáváme, neobchodujeme s nimi, ani je nijak nepřenášíme vnějším stranám. Do tohoto se nepočítají důvěryhodné třetí strany, které nám pomáhají provozovat naši stránku, podnikat, nebo vás obsluhovat, pokud tyto strany souhlasí se zachováním důvěrnosti těchto informací. Můžeme také uvolnit vaše informace, pokud věříme, že je to nutné pro soulad se zákonem, prosazování našich zásad, nebo ochranu práv, majetku, či bezpečnost nás či ostatních.</p>
 
-      <p>Váš veřejný obsah může být stažen jinými servery na síti. Vaše příspěvky veřejné a pouze pro sledovatele budou doručeny na servery vašich sledovatelů a přímé zprávy budou doručeny na servery příjemců, pokud jsou tito sledovatelé nebo příjemci zaregistrováni na jiném serveru, než je tento.</p>
+      <p>Váš veřejný obsah může být stažen jinými servery na síti. Vaše příspěvky veřejné a pouze pro sledující budou doručeny na servery vašich sledujících a přímé zprávy budou doručeny na servery příjemců, pokud jsou tito sledující nebo příjemci zaregistrováni na jiném serveru, než je tento.</p>
 
-      <p>Když autorizujete aplikaci, aby používala váš účet, může, v závislosti na rozsahu oprávnění, které jí udělíte, přistupovat k vašim veřejným profilovým informacím, seznamu lidí, které sledujete, vašim sledovatelům, vašim seznamům, všem vašim příspěvkům a příspěvkům, které jste si oblíbili. Aplikace nikdy nemohou získat vaši e-mailovou adresu či heslo.</p>
+      <p>Když autorizujete aplikaci, aby používala váš účet, může, v závislosti na rozsahu oprávnění, které jí udělíte, přistupovat k vašim veřejným profilovým informacím, seznamu lidí, které sledujete, vašim sledujícím, vašim seznamům, všem vašim příspěvkům a příspěvkům, které jste si oblíbili. Aplikace nikdy nemohou získat vaši e-mailovou adresu či heslo.</p>
 
       <hr class="spacer" />
 
       <h3 id="children">Používání stránky dětmi</h3>
 
-      <p>Pokud se tento server nachází v EU nebo EHP: Naše stránka, produkty a služby jsou všechny směřovány na lidi, kterým je alespoň 16 let. Pokud je vám méně než 16, dle požadavků nařízení GDPR (<a href="https://cs.wikipedia.org/wiki/Obecn%C3%A9_na%C5%99%C3%ADzen%C3%AD_o_ochran%C4%9B_osobn%C3%ADch_%C3%BAdaj%C5%AF">Obecné nařízení o ochraně sobních údajů</a>) tuto stránku nepoužívejte.</p>
+      <p>Pokud se tento server nachází v EU nebo EHP: Naše stránka, produkty a služby jsou všechny směřovány na lidi, kterým je alespoň 16 let. Pokud je vám méně než 16, dle požadavků nařízení GDPR (<a href="https://cs.wikipedia.org/wiki/Obecn%C3%A9_na%C5%99%C3%ADzen%C3%AD_o_ochran%C4%9B_osobn%C3%ADch_%C3%BAdaj%C5%AF">Obecné nařízení o ochraně osobních údajů</a>) tuto stránku nepoužívejte.</p>
 
       <p>Pokud se tento server nachází v USA: Naše stránka, produkty a služby jsou všechny směřovány na lidi, kterým je alespoň 13 let. Pokud je vám méně než 13, dle požadavků zákona COPPA (<a href="https://cs.wikipedia.org/wiki/Children%27s_online_privacy_protection_act">Children's Online Privacy Protection Act</a>) tuto stránku nepoužívejte.</p>
 
@@ -975,7 +975,7 @@ cs:
       explanation:
         disable: Zatímco je váš účet zmražen, zůstávají data vašeho účtu nedotčená, ale nemůžete vykonávat žádné akce, dokud nebude odemčen.
         silence: Zatímco je váš účet omezen, mohou vaše tooty na tomto serveru vidět pouze lidé, kteří váš již sledují, a můžete být vyloučen/a z různých veřejných výpisů. Ostatní vás však pořád mohou manuálně sledovat.
-        suspend: Váš účet byl pozastaven a všechny vaše tooty a vaše nahrané mediální soubory byly nenávratně odstraněny z tohoto serveru a serverů, na kterých jste měl/a sledovatele.
+        suspend: Váš účet byl pozastaven a všechny vaše tooty a vaše nahrané mediální soubory byly nenávratně odstraněny z tohoto serveru a serverů, na kterých jste měl/a sledující.
       review_server_policies: Posoudit politiku serveru
       subject:
         disable: Váš účet %{acct} byl zmražen
@@ -989,12 +989,12 @@ cs:
         suspend: Účet pozastaven
     welcome:
       edit_profile_action: Nastavit profil
-      edit_profile_step: Můžete si přizpůsobit svůj profil nahráním avataru a obrázku na hlavičce, změnou zobrazovaného jména a dalších. Chcete-li posoudit nové sledovatele předtím, než vás mohou sledovat, můžete svůj účet uzamknout.
+      edit_profile_step: Můžete si přizpůsobit svůj profil nahráním avataru a obrázku na hlavičce, změnou zobrazovaného jména a dalších. Chcete-li posoudit nové sledující předtím, než vás mohou sledovat, můžete svůj účet uzamknout.
       explanation: Zde je pár tipů na začátek
       final_action: Začněte přispívat
-      final_step: 'Začněte přispívat! I když nemáte sledovatele, mohou vaše zprávy vidět jiní lidé, například na místní časové ose a mezi hashtagy. Můžete se ostatním představit pomocí hashtagu #introductions.'
+      final_step: 'Začněte přispívat! I když nemáte sledující, mohou vaše zprávy vidět jiní lidé, například na místní časové ose a mezi hashtagy. Můžete se ostatním představit pomocí hashtagu #introductions.'
       full_handle: Vaše celá adresa profilu
-      full_handle_hint: Tohle je, co byste řekl/a svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiné instance.
+      full_handle_hint: Tohle je, co byste řekl/a svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru.
       review_preferences_action: Změnit nastavení
       review_preferences_step: Nezapomeňte si nastavit své volby, například jaké e-maily chcete přijímat či jak soukromé mají být vaše příspěvky ve výchozím stavu. Nemáte-li epilepsii, můžete si nastavit automatické přehrávání obrázků GIF.
       subject: Vítejte na Mastodonu
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 53b474c16..f225cc086 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -60,6 +60,7 @@ cy:
       zero: Dilynwyr
     following: Yn dilyn
     joined: Ymunodd %{date}
+    last_active: diweddaraf
     link_verified_on: Gwiriwyd perchnogaeth y ddolen yma ar %{date}
     media: Cyfryngau
     moved_html: 'Mae %{name} wedi symud i %{new_profile_link}:'
@@ -87,6 +88,7 @@ cy:
   admin:
     account_actions:
       action: Cyflawni gweithred
+      title: Perfformio cymedroli ar %{acct}
     account_moderation_notes:
       create: Gadael nodyn
       created_msg: Crewyd nodyn cymedroli yn llwyddiannus!
@@ -155,6 +157,7 @@ cy:
       push_subscription_expires: Tanysgrifiad PuSH yn dod i ben
       redownload: Adnewyddu proffil
       remove_avatar: Dileu afatar
+      remove_header: Dileu pennawd
       resend_confirmation:
         already_confirmed: Mae'r defnyddiwr hwn wedi ei gadarnhau yn barod
         send: Ailanfonwch e-bost cadarnhad
@@ -172,8 +175,8 @@ cy:
       search: Chwilio
       shared_inbox_url: URL Mewnflwch wedi ei rannu
       show:
-        created_reports: Adroddiadau a grewyd gan y cyfri hwn
-        targeted_reports: Adroddiadau am y cyfri hwn
+        created_reports: Adroddiadau a wnaed
+        targeted_reports: Adroddwyd gan eraill
       silence: Tawelu
       silenced: Tawelwyd
       statuses: Statysau
@@ -192,6 +195,7 @@ cy:
         assigned_to_self_report: Aseiniodd %{name} adroddiad %{target} i'w hunan
         change_email_user: Newidodd %{name} gyfeiriad e-bost y defnyddiwr %{target}
         confirm_user: Cadarnhaodd %{name} gyfeiriad e-bost y defnyddiwr %{target}
+        create_account_warning: Anfonwyd rhybudd i %{target} gan %{name}
         create_custom_emoji: Uwchlwythodd %{name} emoji newydd %{target}
         create_domain_block: Blociodd %{name} y parth %{target}
         create_email_domain_block: Cosbrestrwyd parth e-bost %{target} gan %{name}
@@ -250,6 +254,7 @@ cy:
       config: Cyfluniad
       feature_deletions: Dileadau cyfrif
       feature_invites: Dolenni gwahodd
+      feature_profile_directory: Cyfeiriadur proffil
       feature_registrations: Cofrestriadau
       feature_relay: Relái ffederasiwn
       features: Nodweddion
@@ -267,7 +272,7 @@ cy:
       week_users_active: gweithredol yr wythnos hon
       week_users_new: defnyddwyr yr wythnos hon
     domain_blocks:
-      add_new: Ychwanegu
+      add_new: Ychwanegu bloc parth newydd
       created_msg: Mae'r bloc parth nawr yn cael ei brosesu
       destroyed_msg: Mae'r bloc parth wedi ei ddadwneud
       domain: Parth
@@ -284,14 +289,25 @@ cy:
       reject_media_hint: Dileu dogfennau cyfryngau wedi eu cadw yn lleol ac yn gwrthod i lawrlwytho unrhyw rai yn y dyfodol. Amherthnasol i ataliadau
       reject_reports: Gwrthod adroddiadau
       reject_reports_hint: Anwybyddu'r holl adroddiadau sy'n dod o'r parth hwn. Amherthnasol i ataliadau
+      rejecting_media: Yn gwrthod ffeiliau cyfryngau
+      rejecting_reports: Yn gwrthod adroddiadau
+      severity:
+        silence: tawelu
+        suspend: ataliedig
       show:
-        affected_accounts: "%{count} o gyfrifoedd yn y bas data wedi eu hefeithio"
+        affected_accounts:
+          few: Effeithiwyd ar %{count} gyfrifon
+          many: Effeithiwyd ar %{count} gyfrifon
+          one: Effeithiwyd ar un cyfrif
+          other: Effeithiwyd ar %{count} gyfrifon
+          two: Effeithiwyd ar %{count} gyfrifon
+          zero: Effeithiwyd ar %{count} gyfrifon
         retroactive:
           silence: Dad-dawelu pob cyfri presennol o'r parth hwn
           suspend: Dad-atal pob cyfrif o'r parth hwn sy'n bodoli
         title: Dadwneud blocio parth ar gyfer %{domain}
         undo: Dadwneud
-      undo: Dadwneud
+      undo: Dadwneud bloc parth
     email_domain_blocks:
       add_new: Ychwanegu
       created_msg: Llwyddwyd i ychwanegu parth e-bost i'r gosbrestr
@@ -302,11 +318,28 @@ cy:
         create: Ychwanegu parth
         title: Cofnod newydd yng nghosbrestr e-byst
       title: Cosbrestr e-bost
+    followers:
+      back_to_account: Nôl i'r gyfrif
+      title: Dilynwyr %{acct}
     instances:
+      delivery_available: Mae'r cyflenwad ar gael
+      known_accounts:
+        few: "%{count} cyfrifon hysbys"
+        many: "%{count} cyfrifon hysbys"
+        one: "%{count} cyfrif hysbys"
+        other: "%{count} cyfrifon hysbys"
+        two: "%{count} cyfrifon hysbys"
+        zero: "%{count} cyfrifon hysbys"
       moderation:
         all: Pob
         limited: Gyfyngedig
+        title: Cymedroli
       title: Ffederasiwn
+      total_blocked_by_us: Wedi'i bloc gan ni
+      total_followed_by_them: Yn dilyn ganynt
+      total_followed_by_us: Yn dilyn ganom ni
+      total_reported: Adroddiadau amdanynt
+      total_storage: Atodiadau cyfryngau
     invites:
       deactivate_all: Diffodd pob un
       filter:
@@ -388,6 +421,9 @@ cy:
       preview_sensitive_media:
         desc_html: Bydd rhagolygon ar wefannau eraill yn dangos ciplun hyd yn oed os oes na gyfryngau wedi eu marcio'n sensitif
         title: Dangos cyfryngau sensitif mewn rhagolygon OpenGraph
+      profile_directory:
+        desc_html: Caniatáu i ddefnyddwyr gael eu gweld
+        title: Galluogi cyfeiriadur proffil
       registrations:
         closed_message:
           desc_html: I'w arddangos ar y dudalen flaen wedi i gofrestru cau. Mae modd defnyddio tagiau HTML
@@ -450,9 +486,14 @@ cy:
     tags:
       accounts: Cyfrifon
       hidden: Cudd
+      hide: Cuddio o gyfeiriadur
       name: Hashnod
+      title: Hashnodau
+      unhide: Dangoswch yn y cyfeiriadur
+      visible: Gweladwy
     title: Gweinyddiaeth
     warning_presets:
+      add_new: Ychwanegu newydd
       delete: Dileu
       edit: Golygu
   admin_mailer:
@@ -532,6 +573,20 @@ cy:
     success_msg: Llwyddwyd i ddileu eich cyfrif
     warning_html: Dim ond dileu cynnwys o'r achos hwn ellid bod yn sicr ei fod wedi ei ddileu. Mae cynnwys sydd wedi ei rannu'n eang yn debygol o adael olion. Ni fydd gweinyddwyr all-lein a gweinyddwyr sydd wedi dad-danysgrifio o'ch diwedderiadau ddim yn diweddaru eu cronfeydd data.
     warning_title: Argaeledd cynnwys wedi'i rannu
+  directories:
+    directory: Cyfeiriadur proffil
+    enabled: Rydych chi wedi'ch rhestru yn y cyfeiriadur ar hyn o bryd.
+    enabled_but_waiting: Rydych wedi dewis i chi gael eich rhestru yn y cyfeiriadur, ond nid oes gennych y nifer lleiaf o ddilynwyr (%{min_followers}) i'w rhestru eto.
+    explanation: Darganfod defnyddwyr yn seiliedig ar eu diddordebau
+    explore_mastodon: Archwilio %{title}
+    how_to_enable: Ar hyn o bryd nid ydych chi wedi dewis y cyfeiriadur. Gallwch ddewis i mewn isod. Defnyddiwch hashnodau yn eich bio-destun i'w restru dan hashnodau penodol!
+    people:
+      few: "%{count} personau"
+      many: "%{count} personau"
+      one: "%{count} person"
+      other: "%{count} personau"
+      two: "%{count} personau"
+      zero: "%{count} personau"
   errors:
     '403': Nid oes gennych ganiatad i weld y dudalen hon.
     '404': Nid yw'r dudalen yr oeddech yn chwilio amdani'n bodoli.
@@ -554,7 +609,9 @@ cy:
       size: Maint
     blocks: Yr ydych yn blocio
     csv: CSV
+    domain_blocks: Blociau parth
     follows: Yr ydych yn dilyn
+    lists: Rhestrau
     mutes: Yr ydych yn tawelu
     storage: Storio cyfryngau
   filters:
@@ -579,7 +636,13 @@ cy:
     followers_count: Nifer y dilynwyr
     lock_link: Cloi eich cyfrif
     purge: Dileu o dilynwyr
-    success: Yn y broses o ysgafn-flocio dilynwyr o %{count} parth...
+    success:
+      few: Yn y broses o ysgafn-flocio defnyddwyr o %{count} parth...
+      many: Yn y broses o ysgafn-flocio defnyddwyr o %{count} parth...
+      one: Yn y broses o ysgafn-flocio dilynwyr o un parth...
+      other: Yn y broses o ysgafn-flocio defnyddwyr o %{count} parth...
+      two: Yn y broses o ysgafn-flocio defnyddwyr o %{count} parth...
+      zero: Yn y broses o ysgafn-flocio defnyddwyr o %{count} parth...
     true_privacy_html: Cofiwch <strong>mai ond amgryptio pen-i-ben all sicrhau gwir breifatrwydd</strong>.
     unlocked_warning_html: Gall unrhywun eich dilyn yn syth i weld eich tŵtiau preifat. %{lock_link} i gael adolygu a gwrthod dilynwyr.
     unlocked_warning_title: Nid yw eich cyfrif wedi ei gloi
@@ -591,7 +654,13 @@ cy:
     changes_saved_msg: Llwyddwyd i gadw y newidiadau!
     copy: Copïo
     save_changes: Cadw newidiadau
-    validation_errors: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
+    validation_errors:
+      few: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
+      many: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
+      one: Mae rhywbeth o'i le o hyd! Edrychwch ar y gwall isod os gwelwch yn dda
+      other: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
+      two: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
+      zero: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
   imports:
     preface: Mae modd mewnforio data yr ydych wedi allforio o achos arall, megis rhestr o bobl yr ydych yn ei ddilyn neu yn blocio.
     success: Uwchlwythwyd eich data yn llwyddiannus ac fe fydd yn cael ei brosesu mewn da bryd
@@ -614,7 +683,13 @@ cy:
     expires_in_prompt: Byth
     generate: Cynhyrchu
     invited_by: 'Cawsoch eich gwahodd gan:'
-    max_uses: "%{count} defnydd"
+    max_uses:
+      few: "%{count} defnydd"
+      many: "%{count} defnydd"
+      one: 1 iws
+      other: "%{count} defnydd"
+      two: "%{count} defnydd"
+      zero: "%{count} defnydd"
     max_uses_prompt: Dim terfyn
     prompt: Cynhyrchwch a rhannwch ddolenni gyda eraill i ganiatau mynediad i'r achos hwn
     table:
@@ -640,8 +715,20 @@ cy:
       action: Gweld holl hysbysiadau
       body: Dyma grynodeb byr o'r holl negeseuon golloch chi ers eich ymweliad diwethaf ar %{since}
       mention: 'Soniodd %{name} amdanoch chi:'
-      new_followers_summary: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
-      subject: "%{count} hysbysiad newydd ers eich ymweliad diwethaf \U0001F418"
+      new_followers_summary:
+        few: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+        many: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+        one: Yr ydych wedi ennill dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+        other: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+        two: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+        zero: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê!
+      subject:
+        few: "%{count} hysbysiad newydd ers eich ymweliad diwethaf"
+        many: "%{count} hysbysiad newydd ers eich ymweliad diwethaf"
+        one: 1 hysbysiad newydd ers eich ymweliad diwethaf
+        other: "%{count} hysbysiad newydd ers eich ymweliad diwethaf"
+        two: "%{count} hysbysiad newydd ers eich ymweliad diwethaf"
+        zero: "%{count} hysbysiad newydd ers eich ymweliad diwethaf"
       title: Yn eich absenoldeb...
     favourite:
       body: 'Cafodd eich statws ei hoffi gan %{name}:'
@@ -755,7 +842,13 @@ cy:
   statuses:
     attached:
       description: 'Ynghlwm: %{attached}'
-      image: "%{count} o luniau"
+      image:
+        few: "%{count} o luniau"
+        many: "%{count} o luniau"
+        one: "%{count} llun"
+        other: "%{count} o luniau"
+        two: "%{count} o luniau"
+        zero: "%{count} o luniau"
       video:
         few: "%{count} fideo"
         many: "%{count} fideo"
@@ -765,7 +858,13 @@ cy:
         zero: "%{count} fideo"
     boosted_from_html: Wedi ei fŵstio %{acct_link}
     content_warning: 'Rhybudd cynnwys: %{warning}'
-    disallowed_hashtags: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
+    disallowed_hashtags:
+      few: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
+      many: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
+      one: 'yn cynnwys hashnod gwaharddedig: %{tags}'
+      other: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
+      two: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
+      zero: 'yn cynnwys yr hashnod gwaharddedig: %{tags}'
     language_detection: Canfod iaith yn awtomataidd
     open_in_web: Agor yn y wê
     over_character_limit: wedi mynd heibio'r uchafswm nodyn o %{max}
@@ -901,6 +1000,14 @@ cy:
       subject: Mae eich archif yn barod i'w lawrlwytho
       title: Allfudo archif
     warning:
+      explanation:
+        disable: Er bod eich cyfrif wedi'i rewi, mae eich data cyfrif yn parhau i fod yn gyfan, ond ni allwch chi berfformio unrhyw gamau nes ei ddatgloi.
+      review_server_policies: Adolygu polisïau'r gweinydd
+      subject:
+        disable: Mae'ch cyfrif %{acct} wedi'i rewi
+        none: Rhybudd am %{acct}
+        silence: Mae'ch cyfrif %{acct} wedi bod yn gyfyngedig
+        suspend: Mae'ch cyfrif %{acct} wedi'i atal
       title:
         disable: Cyfrif wedi'i rewi
         none: Rhybudd
@@ -912,7 +1019,7 @@ cy:
       explanation: Dyma ambell nodyn i'ch helpu i ddechrau
       final_action: Dechrau postio
       final_step: 'Dechrau postio! Hyd yn oed heb ddilynwyr mae''n bosib i eraill weld eich negeseuon cyhoeddus, er enghraifft at y ffrwd leol ac mewn hashnodau. Mae''n bosib yr hoffech hi gyflwyno''ch hun ar yr hashnod #introductions.'
-      full_handle: Eich enw Mastodon llawn
+      full_handle: Eich enw llawn
       full_handle_hint: Dyma'r hyn y bysech yn dweud wrth eich ffrindiau er mwyn iddyn nhw gael anfon neges atoch o achos arall.
       review_preferences_action: Newid dewisiadau
       review_preferences_step: Gwnewch yn siŵr i chi osod eich dewisiadau, megis pa e-byst hoffech eu derbyn, neu ba lefel preifatrwydd hoffech eich tŵtiau ragosod i. Os nad oes gennych salwch symud, gallwch ddewis i ganiatau chwarae GIFs yn awtomatig.
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index 850ff1fe8..83534cccd 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -20,17 +20,17 @@ cs:
         action: Potvrdit e-mailovou adresu
         action_with_app: Potvrdit a navrátit se do %{app}
         explanation: S touto e-mailovou adresou jste si vytvořil/a účet na %{host}. K jeho aktivaci vám zbývá jedno kliknutí. Pokud jste to nebyl/a vy, ignorujte této e-mail.
-        extra_html: Prosím podívejte se také na <a href="%{terms_path}">pravidla této instance</a> a <a href="%{policy_path}">naše podmínky používání</a>.
+        extra_html: Prosím podívejte se také na <a href="%{terms_path}">pravidla tohoto serveru</a> a <a href="%{policy_path}">naše podmínky používání</a>.
         subject: 'Mastodon: Potvrzovací instrukce pro %{instance}'
         title: Potvrďte e-mailovou adresu
       email_changed:
         explanation: 'E-mailová adresa vašeho účtu byla změněna na:'
-        extra: Pokud jste si e-mail nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora instance.
+        extra: Pokud jste si e-mail nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora serveru.
         subject: 'Mastodon: E-mail byl změněn'
         title: Nová e-mailová adresa
       password_change:
         explanation: Heslo k vašemu účtu bylo změněno.
-        extra: Pokud jste si heslo nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora instance.
+        extra: Pokud jste si heslo nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora serveru.
         subject: 'Mastodon: Heslo bylo změněno'
         title: Heslo bylo změněno
       reconfirmation_instructions:
@@ -60,8 +60,8 @@ cs:
       signed_up: Vítejte! Registroval/a jste se úspěšně.
       signed_up_but_inactive: Registroval/a jste se úspěšně. Nemohli jsme vás však přihlásit, protože váš účet ještě není aktivován.
       signed_up_but_locked: Registroval/a jste se úspěšně. Nemohli jsme vás však přihlásit, protože váš účet je uzamčen.
-      signed_up_but_unconfirmed: Na vaši e-mailovou adresu byla poslána zpráva s potvrzovacím odkazem. Pro aktivaci účtu přejděte na danou adresu. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
-      update_needs_confirmation: Váš účet byl úspěšně aktualizován, ale je potřeba ověřit vaši novou e-mailovou adresu. Prosím zkontrolujte si e-mail a klikněte na odkaz pro potvrzení vaši nové e-mailové adresy. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+      signed_up_but_unconfirmed: Na vaši e-mailovou adresu byla poslána zpráva s potvrzovacím odkazem. Pro aktivaci účtu přejděte na danou adresu. Pokud jste tento e-mail neobdržel/a, prosím zkontrolujte si složku spam.
+      update_needs_confirmation: Váš účet byl úspěšně aktualizován, ale je potřeba ověřit vaši novou e-mailovou adresu. Prosím zkontrolujte si e-mail a klikněte na odkaz pro potvrzení vaši nové e-mailové adresy. Pokud jste tento e-mail neobdržel/a, prosím zkontrolujte si složku spam.
       updated: Váš účet byl úspěšně aktualizován.
     sessions:
       already_signed_out: Odhlášení proběhlo úspěšně.
diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml
index 7d96e57f9..8ea7e1b4f 100644
--- a/config/locales/devise.cy.yml
+++ b/config/locales/devise.cy.yml
@@ -18,6 +18,7 @@ cy:
     mailer:
       confirmation_instructions:
         action: Gwiriwch eich cyfeiriad e-bost
+        action_with_app: Cadarnhau a dychwelyd i %{app}
         explanation: Yr ydych wedi creu cyfrif ar %{host} gyda'r cyfrif e-bost hwn. Dim ond un clic sydd angen i'w wneud yn weithredol. Os nad chi oedd hyn, anwybyddwch yr e-bost hwn os gwelwch yn dda.
         extra_html: Gwnewch yn siŵr i edrych ar <a href="%{terms_path}">reolau'r achos</a> a <a href="%{policy_path}">ein telerau gwasanaeth</a>.
         subject: 'Mastodon: Canllawiau cadarnhau i %{instance}'
@@ -77,4 +78,10 @@ cy:
       expired: wedi dod i ben, gwnewch gais am un newydd os gwelwch yn dda
       not_found: heb ei ganfod
       not_locked: heb ei gloi
-      not_saved: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
+      not_saved:
+        few: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
+        many: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
+        one: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd 1 gwall:'
+        other: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
+        two: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
+        zero: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:'
diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml
index 16cd9262e..e054efb30 100644
--- a/config/locales/devise.sk.yml
+++ b/config/locales/devise.sk.yml
@@ -2,9 +2,9 @@
 sk:
   devise:
     confirmations:
-      confirmed: Váš účet bol úspešne overený.
-      send_instructions: O niekoľko minút obdržíte email s inštrukciami ako potvrdiť váš účet.
-      send_paranoid_instructions: Ak sa váš email nachádza v našej databáze, obdržíte email s inštrukciami ako potvrdiť váš účet.
+      confirmed: Tvoja emailová adresa bola úspešne overená.
+      send_instructions: O niekoľko minút obdržíš email s inštrukciami ako potvrdiť svoj účet. Prosím, skontroluj si aj zložku spam, ak sa k tebe toto potvrdenie nedostalo.
+      send_paranoid_instructions: Ak sa tvoja emailová adresa nachádza v našej databázi, o niekoľko minút obdržíš email s pokynmi ako potvrdiť svoj účet. Prosím, skontroluj aj zložku spam, ak sa k tebe toto potvrdenie nedostalo.
     failure:
       already_authenticated: Už si prihlásený/á.
       inactive: Tvoj účet ešte nebol potvrdený.
@@ -51,15 +51,15 @@ sk:
       success: Úspešné overenie z účtu %{kind}.
     passwords:
       no_token: Túto stránku nemôžete navštíviť pokiaľ neprichádzate z emailu s inštrukciami na obnovu hesla. Pokiaľ prichádzate z tohto emailu, prosím uistite sa že ste použili celú URL z emailu.
-      send_instructions: Ak zadaný email existuje v našej databázi, tak o niekoľko minút obdržíte email s inštrukciami ako nastaviť nové heslo.
-      send_paranoid_instructions: Ak zadaný email existuje v našej databázi, zachvíľu obdržíte odkaz na obnovu hesla na svoj email. Skontrolujte aj spam ak tento email nevidíte.
+      send_instructions: Pokiaľ sa tvoja emailová adresa nachádza v databázi, tak o niekoľko minút obdržíš email s inštrukciami ako nastaviť nové heslo. Ak máš pocit, že si email neobdržal/a, prosím skontroluj aj svoju spam zložku.
+      send_paranoid_instructions: Ak sa tvoja emailová adresa nachádza v databázi, za chvíľu obdržíš odkaz pre obnovu hesla na svoj email. Skontroluj ale prosím aj svoj spam, ak tento email nevidíš.
       updated: Tvoje heslo bolo úspešne zmenené. Teraz si prihlásený/á.
       updated_not_active: Tvoje heslo bolo úspešne zmenené.
     registrations:
       destroyed: Dovidenia! Tvoj účet bol úspešne zrušený. Dúfame ale, že ťa tu opäť niekedy uvidíme.
       signed_up: Vitaj! Tvoja registrácia bola úspešná.
-      signed_up_but_inactive: Registrácia bola úspešná. Avšak, účet ešte nebol aktivovaný, takže ťa nemôžeme prihlásiť.
-      signed_up_but_locked: Prihlasovanie úspešné. Avšak tvoj účet je zamknutý, takže ťa nieje možné prihlásiť.
+      signed_up_but_inactive: Registrácia bola úspešná. Avšak, účet ešte nebol aktivovaný, takže ťa nemožno prihlásiť.
+      signed_up_but_locked: Registroval/a si sa úspešné. Avšak, tvoj účet je zamknutý, takže ťa nemožno prihlásiť.
       signed_up_but_unconfirmed: Správa s odkazom na potvrdenie registrácie bola odoslaná na tvoj email. Pre aktváciu účtu, klikni prosím na daný odkaz. Takisto ale skontroluj aj svoju spam zložku, pokiaľ sa ti zdá, že si tento email nedostal/a.
       update_needs_confirmation: Účet bol úspešne zmenený ale ešte potrebujeme overiť tvoju novú emailovú adresu. Pre overenie prosím klikni na link v správe ktorú si dostal/a na email. Takisto ale skontroluj aj svoju spam zložku, ak sa ti zdá, že si tento email nedostal/a.
       updated: Tvoj účet bol úspešne aktualizovaný.
diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml
new file mode 100644
index 000000000..906bece81
--- /dev/null
+++ b/config/locales/devise.sq.yml
@@ -0,0 +1,83 @@
+---
+sq:
+  devise:
+    confirmations:
+      confirmed: Adresa juaj email u ripohua me sukses.
+      send_instructions: Brenda pak minutash, do të merrni një email me udhëzime se si të ripohoni adresën tuaj email. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      send_paranoid_instructions: Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, do të merrni një email me udhëzime se si të ripohoni adresën tuaj email. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+    failure:
+      already_authenticated: Jeni tashmë i futur.
+      inactive: Llogaria juaj s’është aktivizuar ende.
+      invalid: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
+      last_attempt: Mund të provoni edhe një herë, përpara se llogaria juaj të kyçet.
+      locked: Llogaria juaj është e kyçur.
+      not_found_in_database: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
+      timeout: Sesioni juaj ka skaduar. Ju lutemi, që të vazhdohet, ribëni hyrjen.
+      unauthenticated: Përpara se të vazhdohet më tej, lypset të bëni hyrjen ose të regjistroheni.
+      unconfirmed: Përpara se të vazhdohet, lypset të ripohoni adresën tuaj email.
+    mailer:
+      confirmation_instructions:
+        action: Verifikoni adresë email
+        action_with_app: Ripohojeni dhe kthehuni te %{app}
+        explanation: Keni krijuar një llogari te %{host}, me këtë adresë email. Jeni një klikim larg aktivizimit të saj. Nëse s’jeni ju, shpërfilleni këtë email.
+        extra_html: Ju lutemi, shihni edhe <a href="%{terms_path}">rregullat e instancës</a> dhe <a href="%{policy_path}">kushtet tona të shërbimit</a>.
+        subject: 'Mastodon: Udhëzime ripohimi për %{instance}'
+        title: Verifikoni adresë email
+      email_changed:
+        explanation: 'Adresa email për llogarinë tuaj po ndryshohet në:'
+        extra: Nëse email-in tuaj nuk e ndryshuat ju, gjasat janë që dikush tjetër ka arritur të hyjë në llogarinë tuaj. Ju lutemi, ndryshoni menjëherë fjalëkalimin tuaj ose lidhuni me përgjegjësin e instancës, nëse jeni kyçur jashtë llogarisë tuaj.
+        subject: 'Mastodon: Email-i u ndryshua'
+        title: Adresë email e re
+      password_change:
+        explanation: Fjalëkalimi për llogarinë tuaj u ndryshua.
+        extra: Nëse fjalëkalimin tuaj nuk e ndryshuat ju, gjasat janë që dikush tjetër ka arritur të hyjë në llogarinë tuaj. Ju lutemi, ndryshoni menjëherë fjalëkalimin tuaj ose lidhuni me përgjegjësin e instancës, nëse jeni kyçur jashtë llogarisë tuaj.
+        subject: 'Mastodon: Fjalëkalimi u ndryshua'
+        title: Fjalëkalimi u ndryshua
+      reconfirmation_instructions:
+        explanation: Që të ndryshohet email-i juaj, ripohoni adresën e re.
+        extra: Nëse ky ndryshim s’qe filluar prej jush, ju lutemi, shpërfilleni këtë email. Adresa email për llogarinë Mastodon s’do të ndryshojë, para se të hyni në lidhjen më sipër.
+        subject: 'Mastodon: Ripohoni email-in për %{instance}'
+        title: Verifikoni adresë email
+      reset_password_instructions:
+        action: Ndryshoni fjalëkalimin
+        explanation: Kërkuat një fjalëkalim të ri për këtë llogari.
+        extra: Nëse këtë s’e kërkuat ju, ju lutemi, shpërfilleni këtë email. Fjalëkalimi juaj s’do të ndryshohet pa hyrë në lidhjen më sipër dhe krijimin e një të riu.
+        subject: 'Mastodon: Udhëzime ricaktimi fjalëkalimi'
+        title: Ricaktim fjalëkalimi
+      unlock_instructions:
+        subject: 'Mastodon: Udhëzime shkyçjeje'
+    omniauth_callbacks:
+      failure: S’u bë dot mirëfilltësimi juaj nga %{kind}, sepse "%{reason}".
+      success: Mirëfilltësimi nga llogaria %{kind} u bë me sukses.
+    passwords:
+      no_token: S’mund të hyni në këtë faqe paardhur nga një email ricaktimi fjalëkalimi. Nëse vini nga një email ricaktimi fjalëkalimi, ju lutemi, sigurohuni se përdorët URL-në e plotë dhënë për ju.
+      send_instructions: Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, te adresa juaj email do të merrni një lidhje rimarrjeje fjalëkalimi. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      send_paranoid_instructions: Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, te adresa juaj email do të merrni një lidhje rimarrjeje fjalëkalimi. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      updated: Fjalëkalimi juaj u ndryshua me sukses. Tani jeni i futur.
+      updated_not_active: Fjalëkalimi juaj u ndryshua me sukses.
+    registrations:
+      destroyed: Shëndet! Llogaria juaj u fshi me sukses. Shpresojmë t’ju rishohim së shpejti.
+      signed_up: Mirë se vini! U regjistruat me sukses.
+      signed_up_but_inactive: U regjistruat me sukses. Megjithatë, s’u bë dot hyrja juaj, ngaqë llogaria juaj s’është aktivizuar ende.
+      signed_up_but_locked: U regjistruat me sukses. Megjithatë, s’u bë dot hyrja juaj, ngaqë llogaria juaj është kyçur.
+      signed_up_but_unconfirmed: Te adresa juaj email u dërgua një mesazh me një lidhje ripohimi. Ju lutemi, që të aktivizoni llogarinë tuaj, ndiqni lidhjen. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      update_needs_confirmation: E përditësuat me sukses llogarinë tuaj, por na duhet të verifikojmë adresën tuaj të re email. Ju lutemi, që të ripohoni adresën tuaj të re email, kontrolloni email-in tuaj dhe ndiqni lidhjen. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      updated: Llogaria juaj u përditësua me sukses.
+    sessions:
+      already_signed_out: Dolët me sukses.
+      signed_in: Hytë me sukses.
+      signed_out: Dolët me sukses.
+    unlocks:
+      send_instructions: Brenda pak minutash, do të merrni një email me udhëzime se si të shkyçni llogarinë tuaj. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      send_paranoid_instructions: Nëse llogaria juaj ekziston, brenda pak minutash, do të merrni një email me udhëzime se si të shkyçni llogarinë tuaj. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email.
+      unlocked: Llogaria juaj u shkyç me sukses. Ju lutemi, që të vazhdohet, bëni hyrjen.
+  errors:
+    messages:
+      already_confirmed: qe e ripohuar tashmë, ju lutemi, provoni të bëni hyrjen
+      confirmation_period_expired: lyp të ripohohet brenda %{period}, ju lutemi, kërkoni një të ri
+      expired: ka skaduar, ju lutemi, kërkoni një të ri
+      not_found: s’u gjet
+      not_locked: s’qe kyçur
+      not_saved:
+        one: 'Ruajtjen e këtij %{resource} e pengoi 1 gabim:'
+        other: 'Ruajtjen e këtij %{resource} e penguan %{count} gabime:'
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index b9e9bc034..03b66a0fa 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -54,7 +54,7 @@ cs:
         title: 'Aplikace: %{name}'
     authorizations:
       buttons:
-        authorize: Ověřit
+        authorize: Autorizovat
         deny: Zamítnout
       error:
         title: Vyskytla se chyba
diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml
new file mode 100644
index 000000000..a1f2121f9
--- /dev/null
+++ b/config/locales/doorkeeper.sq.yml
@@ -0,0 +1,142 @@
+---
+sq:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Emër aplikacioni
+        redirect_uri: URI Ridrejtimi
+        scopes: Fushëveprime
+        website: Sajt aplikacioni
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: s’mund të përmbajë një fragment.
+              invalid_uri: duhet të jetë një URI e vlefshme.
+              relative_uri: duhet të jetë një URI absolute.
+              secured_uri: duhet të jetë një URI HTTPS/SSL.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Autorizoje
+        cancel: Anuloje
+        destroy: Asgjësoje
+        edit: Përpunoni
+        submit: Parashtroje
+      confirmations:
+        destroy: A jeni i sigurt?
+      edit:
+        title: Përpunoni aplikacion
+      form:
+        error: Oh! Kontrolloni formularin tuaj për gabime të mundshme
+      help:
+        native_redirect_uri: Përdor %{native_redirect_uri} për teste vendore
+        redirect_uri: Përdorni një URI për rresht
+        scopes: Ndajini fushëveprimet me hapësira. Që të përdoren fushëveprimet parazgjedhje, lëreni të zbrazët.
+      index:
+        application: Aplikacion
+        callback_url: URL Callback-u
+        delete: Fshije
+        name: Emër
+        new: Aplikacion i ri
+        scopes: Fushëveprime
+        show: Shfaqe
+        title: Aplikacionet tuaja
+      new:
+        title: Aplikacion i ri
+      show:
+        actions: Veprime
+        application_id: Kyç klienti
+        callback_urls: URL-ra Callback
+        scopes: Fushëveprime
+        secret: E fshehtë klienti
+        title: 'Aplikacion: %{name}'
+    authorizations:
+      buttons:
+        authorize: Autorizoje
+        deny: Mohoje
+      error:
+        title: Ndodhi një gabim
+      new:
+        able_to: Do të jetë në gjendje të
+        prompt: "%{client_name} kërkesa hyrjeje aplikacionesh te llogaria juaj"
+        title: Lypset autorizim
+      show:
+        title: Kopjojeni këtë kod autorizimi dhe ngjiteni te aplikacioni.
+    authorized_applications:
+      buttons:
+        revoke: Shfuqizoje
+      confirmations:
+        revoke: A jeni i sigurt?
+      index:
+        application: Aplikacion
+        created_at: I autorizuar
+        date_format: "%d.%m.%Y, %H:%M:%S"
+        scopes: Fushëveprime
+        title: Aplikacionet tuaja të autorizuara
+    errors:
+      messages:
+        access_denied: I zoti i burimit ose shërbyesi i autorizimit e hodhi poshtë kërkesën.
+        credential_flow_not_configured: Rrjedha e Kredencialeve të Fjalëkalimit të të Zotit të Burimit dështoi për shkak se Doorkeeper.configure.resource_owner_from_credentials është i paformësuar.
+        invalid_client: Mirëfilltësimi i klientit dështoi për shkak klienti të panjohur, mospërfshirjeje mirëfilltësimi klienti, ose metode të pambuluar mirëfilltësimi.
+        invalid_grant: Autorizimi i dhënë është i pavlefshëm, ka skaduar, është shfuqizuar, nuk përputhet me URI-n e ridrejtimit të përdorur te kërkesa e autorizimit, ose është emetuar për klient tjetër.
+        invalid_redirect_uri: URI e ridrejtimit s’është e vlefshme.
+        invalid_request: Kërkesës i mungon një parametër i domosdoshëm, përfshin një vlerë të pambuluar parametri, ose përndryshe është e keqformuar.
+        invalid_resource_owner: Kredencialet e dhëna për të zotin e burimit s’janë të vlefshme, ose s’gjendet i zoti i burimit
+        invalid_scope: Fushëveprimi i kërkuar është i pavlefshëm, i panjohur ose i keqformuar.
+        invalid_token:
+          expired: Token-i i hyrjeve skadoi
+          revoked: Token-i i hyrjeve u shfuqizua
+          unknown: Token-i i hyrjeve është i pavlefshëm
+        resource_owner_authenticator_not_configured: Gjetja e të Zotit të Burimit dështoi, ngaqë Doorkeeper.configure.resource_owner_authenticator s’është i formësuar.
+        server_error: Shërbyesi i autorizimit hasi një kusht të papritur, i cili e pengoi të plotësonte kërkesën.
+        temporarily_unavailable: Shërbyesi i mirëfilltësimeve hëpërhë s’është në gjendje të trajtojë kërkesën, për shkak të një mbingarkese të përkohshme ose ndonjë mirëmbajtjeje të shërbyesit.
+        unauthorized_client: Klienti s’është i autorizuar të kryejë këtë kërkesë duke përdorur këtë metodë.
+        unsupported_grant_type: Lloji i autorizimit të dhënë nuk mbulohet nga shërbyesi i autorizimeve.
+        unsupported_response_type: Shërbyesi i autorizimeve nuk e mbulon këtë lloj përgjigjeje.
+    flash:
+      applications:
+        create:
+          notice: Aplikacioni u krijua.
+        destroy:
+          notice: Aplikacioni u fshi.
+        update:
+          notice: Aplikacioni u përditësua.
+      authorized_applications:
+        destroy:
+          notice: Aplikacioni u shfuqizua.
+    layouts:
+      admin:
+        nav:
+          applications: Aplikacione
+          oauth2_provider: Furnizues OAuth2
+      application:
+        title: Lypset autorizim OAuth
+    scopes:
+      follow: të ndryshojë marrëdhënies llogarish
+      push: të marrë njoftime push për ju
+      read: të lexojë krejt të dhënat e llogarisë tuaj
+      read:accounts: të shohë të dhëna llogarish
+      read:blocks: të shohë blloqet tuaja
+      read:favourites: të shohë të parapëlqyerit tuaj
+      read:filters: të shohë filtrat tuaj
+      read:follows: të shohë ndjekësit tuaj
+      read:lists: të shohë listat tuaja
+      read:mutes: të shohë ç’keni heshtuar
+      read:notifications: të shohë njoftimet tuaja
+      read:reports: të shohë raportet tuaja
+      read:search: të bëjë kërkime në emrin tuaj
+      read:statuses: të shohë krejt gjendjet
+      write: të ndryshojë krejt të dhënat e llogarisë tuaj
+      write:accounts: të ndryshojë profilin tuaj
+      write:blocks: të bllokojë llogari dhe përkatësi
+      write:favourites: të parapëlqejë gjendje
+      write:filters: të krijojë filtra
+      write:follows: të ndjekë persona
+      write:lists: të krijojë lista
+      write:media: të ngarkojë kartela media
+      write:mutes: të heshtojë persona dhe biseda
+      write:notifications: të pastrojë njoftimet tuaja
+      write:reports: të raportojë persona të tjerë
+      write:statuses: të botojë gjendje
diff --git a/config/locales/el.yml b/config/locales/el.yml
index c29b8301e..95a72571d 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -115,7 +115,7 @@ el:
       joined: Γράφτηκε
       location:
         all: Όλες
-        local: Τοπικά
+        local: Τοπική
         remote: Απομακρυσμένα
         title: Τοποθεσία
       login_status: Κατάσταση σύνδεσης
@@ -556,7 +556,7 @@ el:
     enabled: Περιλαμβάνεσαι στον κατάλογο.
     enabled_but_waiting: Έχεις επιλέξει να εμφανίζεσαι στον κατάλογο μεν, αλλά ακόμα δεν έχεις τον ελάχιστο αριθμό ακόλουθων (%{min_followers}) που απαιτείται για να συμπεριληφθείς.
     explanation: Βρες χρήστες βάσει των ενδιαφερόντων τους
-    explore_mastodon: Εξερεύνησε %{title}
+    explore_mastodon: Εξερεύνησε το %{title}
     how_to_enable: Δεν έχεις επιλέξει να συμπεριληφθείς στον καταλογο. Μπορείς να επιλέξεις παρακάτω. Χρησιμοποίησε ταμπέλες στο κείμενο του βιογραφικού σου για να εμφανίζεσαι κάτω από συγκεκριμένες ταμπέλες!
     people:
       one: "%{count} άτομο"
@@ -657,7 +657,7 @@ el:
     table:
       expires_at: Λήγει
       uses: Χρήσεις
-    title: Προσκάλεσε άτομα
+    title: Προσκάλεσε κόσμο
   lists:
     errors:
       limit: Έχεις φτάσει το μέγιστο πλήθος επιτρεπτών λιστών
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 6abf15201..84fbbbaf7 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -92,6 +92,7 @@ eu:
       confirm: Berretsi
       confirmed: Berretsita
       confirming: Berresten
+      deleted: Ezabatua
       demote: Jaitsi mailaz
       disable: Desgaitu
       disable_two_factor_authentication: Desgaitu 2FA
@@ -109,7 +110,9 @@ eu:
       follows: Jarraitzen du
       header: Goiburua
       inbox_url: Sarrera ontziaren URL-a
+      invited_by: 'Honek gonbidatua:'
       ip: IP
+      joined: Elkartuta
       location:
         all: Denak
         local: Lokala
@@ -136,7 +139,7 @@ eu:
       protocol: Protokoloa
       public: Publikoa
       push_subscription_expires: Push harpidetzaren iraugitzea
-      redownload: Freskatu abatarra
+      redownload: Freskatu profila
       remove_avatar: Kendu abatarra
       remove_header: Kendu goiburua
       resend_confirmation:
@@ -156,8 +159,8 @@ eu:
       search: Bilatu
       shared_inbox_url: Partekatutako sarrera ontziaren URL-a
       show:
-        created_reports: Kontu honek sortutako txostenak
-        targeted_reports: Kontu honek egindako salaketak
+        created_reports: Sortutako txostenak
+        targeted_reports: Besteen salaketak
       silence: Isilarazi
       silenced: Isilarazita
       statuses: Mezuak
@@ -169,6 +172,7 @@ eu:
       undo_suspension: Desegin kanporatzea
       unsubscribe: Kendu harpidetza
       username: Erabiltzaile-izena
+      warn: Abisatu
       web: Web
     action_logs:
       actions:
@@ -252,7 +256,7 @@ eu:
       week_users_active: aktibo aste honetan
       week_users_new: erabiltzaile aste honetan
     domain_blocks:
-      add_new: Gehitu berria
+      add_new: Gehitu domeinuaren blokeo berria
       created_msg: Domeinuaren blokeoa orain prozesatzen ari da
       destroyed_msg: Domeinuaren blokeoa desegin da
       domain: Domeinua
@@ -264,11 +268,16 @@ eu:
           noop: Bat ere ez
           silence: Isilarazi
           suspend: Kanporatu
-        title: Domeinu blokeo berria
+        title: Domeinuaren 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
       reject_reports: Errefusatu salaketak
       reject_reports_hint: Ezikusi domeinu honetatik jasotako salaketak. Kanporatzeentzako garrantzirik gabekoa
+      rejecting_media: errefusatu multimedia fitxategiak
+      rejecting_reports: txostenak errefusatzen
+      severity:
+        silence: isilarazia
+        suspend: kanporatua
       show:
         affected_accounts:
           one: Datu-baseko kontu bati eragiten dio
@@ -278,7 +287,7 @@ eu:
           suspend: Kendu kanporatzeko agindua domeinu honetako kontu guztiei
         title: Desegin %{domain} domeinuko blokeoa
         undo: Desegin
-      undo: Desegin
+      undo: Desegin domeinuaren blokeoa
     email_domain_blocks:
       add_new: Gehitu berria
       created_msg: Ongi gehitu da e-mail helbidea domeinuen zerrenda beltzera
@@ -293,7 +302,20 @@ eu:
       back_to_account: Itzuli kontura
       title: "%{acct} kontuaren jarraitzaileak"
     instances:
-      title: Instantzia ezagunak
+      delivery_available: Bidalketa eskuragarri dago
+      known_accounts:
+        one: Kontu ezagun %{count}
+        other: "%{count} kontu ezagun"
+      moderation:
+        all: Denak
+        limited: Mugatua
+        title: Moderazioa
+      title: Federazioa
+      total_blocked_by_us: Guk blokeatuta
+      total_followed_by_them: Haiek jarraitua
+      total_followed_by_us: Guk jarraitua
+      total_reported: Heiei buruzko txostenak
+      total_storage: Multimedia eranskinak
     invites:
       deactivate_all: Desgaitu guztiak
       filter:
@@ -531,8 +553,11 @@ eu:
     warning_title: Sakabanatutako edukiaren eskuragarritasuna
   directories:
     directory: Profilen direktorioa
+    enabled: Direktorioan zerrendatuta zaude orain.
+    enabled_but_waiting: Direktorioan zerrendatuta izatea aukeratu duzu, baina ez duzu oraindik gutxieneko jarraitzaile kopurua (%{min_followers}) zerrendan agertzeko.
     explanation: Deskubritu erabiltzaileak interesen arabera
     explore_mastodon: Esploratu %{title}
+    how_to_enable: Ez duzu aukeratu direktorioan zerrendatua izatea aukeratu. Behean aukeratu dezakezu. Erabili traolak zure biografiaren testuan traola zehatzetan agertzeko!
     people:
       one: pertsona %{count}
       other: "%{count} pertsona"
@@ -558,7 +583,9 @@ eu:
       size: Tamaina
     blocks: Zuk blokeatutakoak
     csv: CSV
+    domain_blocks: Domeinuen blokeoak
     follows: Zuk jarraitutakoak
+    lists: Zerrendak
     mutes: Zuk mututukoak
     storage: Multimedia biltegiratzea
   filters:
@@ -707,10 +734,25 @@ eu:
     no_account_html: Ez duzu konturik? <a href='%{sign_up_path}' target='_blank'>Izena eman</a> dezakezu
     proceed: Ekin jarraitzeari
     prompt: 'Hau jarraituko duzu:'
+    reason_html: "<strong>Zergaitik eman behar da urrats hau?</strong><code>%{instance}</code> agian ez da izena eman duzun zerbitzaria, eta zure hasiera-zerbitzarira eraman behar zaitugu aurretik."
+  remote_interaction:
+    favourite:
+      proceed: Bihurtu gogoko
+      prompt: 'Toot hau gogoko bihurtu nahi duzu:'
+    reblog:
+      proceed: Eman bultzada
+      prompt: 'Toot honi bultzada eman nahi diozu:'
+    reply:
+      proceed: Ekin erantzuteari
+      prompt: 'Toot honi erantzun nahi diozu:'
   remote_unfollow:
     error: Errorea
     title: Izenburua
     unfollowed: Jarraitzeari utzita
+  scheduled_statuses:
+    over_daily_limit: Egun horretarako programatutako toot kopuruaren muga gainditu duzu (%{limit})
+    over_total_limit: Programatutako toot kopuruaren muga gainditu duzu (%{limit})
+    too_soon: Programatutako data etorkizunean egon behar du
   sessions:
     activity: Azken jarduera
     browser: Nabigatzailea
@@ -919,15 +961,18 @@ eu:
       explanation:
         disable: Zure kontua izoztuta dagoen bitartean, zure kontua bere horretan dirau, baina ezin duzu ekintzarik burutu desblokeatzen den arte.
         silence: Zure kontua murriztua dagoen bitartean, jada zu jarraitzen zaituztenak besterik ez dituzte zure Toot-ak ikusiko zerbitzari honetan, eta agian zerrenda publikoetatik kenduko zaizu. Hala ere besteek oraindik zu jarraitu zaitzakete.
+        suspend: Zure kontua kanporatua izan da, zure toot guztiak eta multimedia fitxategiak behin betiko ezabatu dira zerbitzari honetatik, eta zure jarraitzaileen zerbitzarietatik.
       review_server_policies: Berrikusi zerbitzariko politikak
       subject:
         disable: Zure  %{acct} kontua izoztu da
         none: "%{acct} konturako abisua"
         silence: Zure  %{acct} kontua murriztu da
+        suspend: Zure %{acct} kontua kanporatua izan da
       title:
         disable: Kontu izoztua
         none: Abisua
         silence: Kontu murriztua
+        suspend: Kontu kanporatua
     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.
@@ -935,7 +980,7 @@ eu:
       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.
+      full_handle_hint: Hau da lagunei esango zeniekeena 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
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
new file mode 100644
index 000000000..9f586aa37
--- /dev/null
+++ b/config/locales/ga.yml
@@ -0,0 +1,4 @@
+---
+ga:
+  about:
+    about_hashtag_html: Is toots phoiblí iad seo atá clibáilte le <strong>#%{hashtag}</strong>. Is féidir leat idirghníomhú leo má tá cuntas agat áit ar bith sa fediverse.
diff --git a/config/locales/id.yml b/config/locales/id.yml
index fabf2746e..d155ab0a7 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -4,6 +4,7 @@ id:
     about_hashtag_html: Ini adalah toot public yang ditandai dengan <strong>#%{hashtag}</strong>. Anda bisa berinteraksi dengan mereka jika anda memiliki akun dimanapun di fediverse.
     about_mastodon_html: Mastodon adalah sebuah jejaring sosial <em>terbuka, open-source</em. Sebuah alternatif <em>desentralisasi</em> dari platform komersial, menjauhkan anda resiko dari sebuah perusahaan yang memonopoli komunikasi anda. Pilih server yang anda percayai &mdash; apapun yang anda pilih, anda tetap dapat berinteraksi dengan semua orang. Semua orang dapat menjalankan server Mastodon sendiri dan berpartisipasi dalam <em>jejaring sosial</em> dengan mudah.
     about_this: Tentang server ini
+    administered_by: 'Dikelola oleh:'
     api: API
     apps: Aplikasi hp
     closed_registrations: Pendaftaran untuk server ini sedang ditutup. Tetapi, anda bisa mencari server lain untuk membuat akun dan mendapatkan akses dari jaringan yang sama di sana.
@@ -70,52 +71,104 @@ id:
   admin:
     account_actions:
       action: Lakukan aksi
+      title: Lakukan moderasi pada %{acct}
+    account_moderation_notes:
+      create: Beri catatan
+      created_msg: Catatan moderasi berhasil dibuat!
+      delete: Hapus
+      destroyed_msg: Catatan moderasi berhasil dihapus!
     accounts:
       are_you_sure: Anda yakin?
+      avatar: Avatar
+      by_domain: Domain
+      change_email:
+        changed_msg: Email akun ini berhasil diubah!
+        current_email: Email saat ini
+        label: Ganti email
+        new_email: Email baru
+        submit: Ganti email
+        title: Ganti email untuk %{username}
       confirm: Konfirmasi
       confirmed: Dikonfirmasi
       confirming: Mengkonfirmasi
+      deleted: Terhapus
+      disable: Nonaktifkan
+      disable_two_factor_authentication: Nonaktifkan 2FA
+      disabled: Dinonaktifkan
       display_name: Nama
       domain: Domain
       edit: Ubah
       email: E-mail
       email_status: Status Email
+      enable: Aktifkan
+      enabled: Diaktifkan
       feed_url: URL Feed
       followers: Pengikut
+      followers_url: URL pengikut
       follows: Mengikut
+      inbox_url: URL Kotak masuk
+      invited_by: Diundang oleh
+      ip: IP
+      joined: Bergabung
       location:
         all: Semua
         local: Lokal
         remote: Remote
         title: Lokasi
+      login_status: Status login
       media_attachments: Lampiran media
+      memorialize: Ubah menjadi memoriam
       moderation:
+        active: Aktif
         all: Semua
         silenced: Didiamkan
         suspended: Disuspen
         title: Moderasi
+      moderation_notes: Catatan moderasi
       most_recent_activity: Aktivitas terbaru
       most_recent_ip: IP terbaru
+      no_limits_imposed: Tidak ada batasan
       not_subscribed: Tidak berlangganan
+      outbox_url: URL Kotak keluar
       perform_full_suspension: Lakukan suspen penuh
       profile_url: URL profil
+      promote: Promosikan
+      protocol: Protokol
       public: Publik
       push_subscription_expires: Langganan PuSH telah kadaluarsa
+      redownload: Muat ulang profil
+      remove_avatar: Hapus avatar
+      remove_header: Hapus header
       resend_confirmation:
         already_confirmed: Pengguna ini sudah dikonfirmasi
         send: Kirim ulang email konfirmasi
         success: Email konfirmasi berhasil dikirim!
+      reset: Reset
       reset_password: Reset kata sandi
+      resubscribe: Langganan ulang
+      role: Hak akses
+      roles:
+        admin: Administrator
+        moderator: Moderator
+        staff: Staf
+        user: Pengguna
       salmon_url: URL Salmon
+      search: Cari
       show:
         created_reports: Laporan yang dibuat oleh akun ini
         targeted_reports: Laporan yang dibuat tentang akun ini
       silence: Diam
+      silenced: Didiamkan
       statuses: Status
+      subscribe: Langganan
+      suspended: Disuspen
       title: Akun
+      unconfirmed_email: Email belum dikonfirmasi
       undo_silenced: Undo mendiamkan
       undo_suspension: Undo suspen
+      unsubscribe: Berhenti langganan
       username: Nama pengguna
+      warn: Beri Peringatan
       web: Web
     domain_blocks:
       add_new: Tambah
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 339dadaf4..fea39b1fd 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -28,7 +28,7 @@ it:
     hosted_on: Mastodon ospitato su %{domain}
     learn_more: Scopri altro
     other_instances: Elenco istanze
-    privacy_policy: Policy su la Privacy
+    privacy_policy: Politica della privacy
     source_code: Codice sorgente
     status_count_after:
       one: status
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index e16ce31a9..598726c57 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -941,7 +941,8 @@ ja:
       <p>オリジナルの出典: <a href="https://github.com/discourse/discourse">Discourse privacy policy</a></p>
     title: "%{instance} 利用規約・プライバシーポリシー"
   themes:
-    default: Mastodon
+    contrast: Mastodon (ハイコントラスト)
+    default: Mastodon (ダーク)
     mastodon-light: Mastodon (ライト)
   time:
     formats:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index bf6a8b770..0e95adf7b 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -93,7 +93,7 @@ ko:
       confirmed: 확인됨
       confirming: 확인 중
       deleted: 삭제됨
-      demote: 모더레이터 강등
+      demote: 강등
       disable: 비활성화
       disable_two_factor_authentication: 2단계 인증을 비활성화
       disabled: 비활성화된
@@ -135,7 +135,7 @@ ko:
       outbox_url: 발신함 URL
       perform_full_suspension: 정지시키기
       profile_url: 프로필 URL
-      promote: 모더레이터로 승급
+      promote: 승급
       protocol: 프로토콜
       public: 전체 공개
       push_subscription_expires: PuSH 구독 기간 만료
@@ -350,7 +350,7 @@ ko:
         report: 리포트
       action_taken_by: 신고 처리자
       are_you_sure: 정말로 실행하시겠습니까?
-      assign_to_self: 나에게 할당 됨
+      assign_to_self: 나에게 할당하기
       assigned: 할당 된 모더레이터
       comment:
         none: 없음
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
new file mode 100644
index 000000000..52aa868a6
--- /dev/null
+++ b/config/locales/lt.yml
@@ -0,0 +1,182 @@
+---
+lt:
+  about:
+    about_hashtag_html: Čia visiems prieinamas įrankis <strong>#%{hashtag}</strong>. Jūs galite juo naudotis bet kur, jeigu turite paskyra fedi-visatoje.
+    about_mastodon_html: Mastodon, tai socialinis tinklas pagrįstas atviro kodo programavimu, ir atvirais web protokolais. Visiškai nemokamas. Ši sistema decantrilizuota kaip jūsų elektroninis paštas.
+    about_this: Apie
+    administered_by: 'Administruoja:'
+    api: API
+    apps: Mobilioji Aplikacija
+    closed_registrations: Registracija šiuo metu uždaryta prie šito tinklo.  Jūs galite rasti kitą būdą susikurti paskyrą ir gauti prieeiga prie to paties tinklo.
+    contact: Kontaktai
+    contact_missing: Nenustatyta
+    contact_unavailable: N/A
+    documentation: Dokumentacija
+    extended_description_html: |
+      <h3>Taisyklės</h3>
+      <p>Ilgas aprašymas dar nėra sudartyas</p>
+    features:
+      humane_approach_body: Mokantis iš kitų socialinių tinklų, bei jų daromu klaidų, Mastodon siekia sukurti etiška dizainą, kovojant su netinkamu socialinių tinklų naudojimu.
+      humane_approach_title: Humaniškesnis metodas
+      not_a_product_body: Mastodon nėra komercinis tinklas. Jokių reklamų, privačios informacijos rinkimo. Čia nėra vieno žmogaus, kuris už viską atsako.
+      not_a_product_title: Tu esi žmogus, o ne produktas
+      real_conversation_body: Su 500 simbolių limitu, ir galimybe pažymėti savo įkeliama informacija su įspėjamaisiais ženklais, galite išsireikšti kaip tik norite.
+      real_conversation_title: Sukurtas tikram bendravimui
+      within_reach_body: Mobiliosios aplikacijos skirtos iOS, Android, ir kitoms platformoms. Draugiškos API ekosistemos dėka, Jūs galite palaikyti pokalbi su draugais bet kur.
+      within_reach_title: Visada pasiekama
+    generic_description: "%{domain} yra vienas serveris tinkle"
+    hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu
+    learn_more: Daugiau
+    privacy_policy: Privatumo Politika
+    source_code: Šaltinio kodas
+    status_count_after:
+      few: statusai
+      one: statusas
+      other: statusai
+    status_count_before: Autorius
+    terms: Naudojimo sąlygos
+    user_count_after:
+      few: vartotojai
+      one: vartotojas
+      other: vartotojai
+    user_count_before: Namai
+    what_is_mastodon: Kas tai, Mastodon?
+  accounts:
+    choices_html: "%{name} pasirinkimai:"
+    follow: Sekti
+    followers:
+      few: Sekėjai
+      one: Sekėjas
+      other: Sekėjai
+    following: Sekami
+    joined: Prisijungiai %{date}
+    last_active: paskutinį kartą aktyvus
+    link_verified_on: Nuorodos nuosavybė paskutinį kartą tikrinta %{date}
+    media: Medija
+    moved_html: "%{name} persikėlė į %{new_profile_link}:"
+    network_hidden: Ši informacija neprieinama
+    nothing_here: Čia nieko nėra!
+    people_followed_by: Žmonės, kuriuos %{name} seka
+    people_who_follow: Žmonės kurie seka %{name}
+    pin_errors:
+      following: Privalai sekti žmogų kurį nori pagerbti
+    posts:
+      few: Tootai
+      one: Tootas
+      other: Tootai
+    posts_tab_heading: Tootai
+    posts_with_replies: Tootai ir atsakymai
+    reserved_username: Vartotojo vardas rezervuotas
+    roles:
+      admin: Administratorius
+      bot: Bot'as
+      moderator: Moderatorius
+    unfollow: Nesekti
+  admin:
+    account_actions:
+      action: Veiksmas
+      title: Moderuoti %{acct}
+    account_moderation_notes:
+      create: Palikti žinutę
+      created_msg: Moderavimo žinutė sėkimngai sukurta!
+      delete: Ištrinti
+      destroyed_msg: Moderacijos žinutė sėkmingai ištrinta!
+    accounts:
+      are_you_sure: Ar esate įsitikinęs?
+      avatar: Profilio nuotrauka
+      by_domain: Domenas
+      change_email:
+        changed_msg: Paskyros el paštas sėkmingai pakeistas!
+        current_email: Dabartinis el paštas
+        label: Pakeisti el pašto adresą
+        new_email: Naujas el pašto adresas
+        submit: Pakeisti el pašto adresą
+        title: Pakeisti el pašto adresą vartotojui %{username}
+      confirm: Patvirtinti
+      confirmed: Patvirtinta
+      confirming: Tvirtinama
+      deleted: Ištrinti
+      demote: Pažeminti
+      disable: Išjungti
+      disable_two_factor_authentication: Išjungti 2 faktorių autentifikaciją
+      disabled: Išjungta
+      display_name: Matomas vardas
+      domain: Domenas
+      edit: Keisti
+      email: El paštas
+      email_status: El pašto statusas
+      enable: Įjungti
+      enabled: Įjungta
+      followers: Sekėjai
+      followers_url: Sekėjų URL
+      follows: Seka
+      header: Antraštė
+      inbox_url: Gautųjų URL
+      invited_by: Pakvietė
+      ip: IP
+      joined: Prisijungė
+      location:
+        all: Visi
+        local: Lokali
+        title: Lokacija
+      login_status: Prisijungimo statusas
+      media_attachments: Prisegti medijos failai
+      memorialize: Paversti į memorija
+      moderation:
+        active: Aktyvus
+        all: Visi
+        silenced: Užtildytas
+        suspended: Užrakintas
+        title: Moderacija
+      moderation_notes: Medaracijos žinutės
+      most_recent_activity: Paskutinioji veikla
+      most_recent_ip: Paskutinis IP
+      no_limits_imposed: Be limitu
+      not_subscribed: Ne prenumeruota
+      outbox_url: Išsiustųjų URL
+      perform_full_suspension: Užrakinti
+      profile_url: Profilio URL
+      promote: Paaukštinti
+      protocol: Protokolas
+      public: Viešas
+      push_subscription_expires: PuSH prenumeramivas pasibaigė
+      redownload: Perkrauti profilį
+      remove_avatar: Panaikinti profilio nuotrauką
+      remove_header: Panaikinti antraštę
+      resend_confirmation:
+        already_confirmed: Šis vartotojas jau patvirtintas
+        send: Dar kartą išsiųsti patvirtinimo žinutę
+        success: Patvirtinimo laiškas sėkmingai išsiųstas!
+      reset: Iš naujo
+      reset_password: Atkurti slaptažodį
+      resubscribe: Per prenumeruoti
+      role: Leidimai
+      roles:
+        admin: Administratorius
+        moderator: Moderatorius
+        staff: Personalas
+        user: Vartotojas
+      salmon_url: Lašišos URL
+      search: Ieškoti
+      shared_inbox_url: Bendroji gautųjų URL
+      show:
+        created_reports: Parašyti raportai
+        targeted_reports: Reportuotas kitų
+      silence: Tyla
+      silenced: Užtildytas
+      statuses: Statusai
+      subscribe: Prenumeruoti
+      suspended: Užrakintas
+      title: Vartotojai
+      unconfirmed_email: Nepatvirtintas el pašto adresas
+      undo_silenced: Atšaukti užtildymą
+      undo_suspension: Atšaukti užrakinimą
+      unsubscribe: Nebeprenumeruoti
+      username: Slapyvardis
+      warn: Įspėti
+      web: Web
+    action_logs:
+      actions:
+        assigned_to_self_report: "%{name} paskyrė reportą %{target} saviems"
+        change_email_user: "%{name} pakeitė el pašto adresą vartotojui %{target}"
+        confirm_user: "%{name} patvirtino el pašto adresą vartotojui %{target}"
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 0e255e4dc..99127c2b6 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -15,14 +15,14 @@ cs:
         bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován
         context: Jedno či více kontextů, ve kterých má být filtr uplatněn
         digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy
-        discoverable_html: <a href="%{path}" target="_blank">Adresář</a> dovoluje lidem najít účty podle zájmů a aktivity. Vyžaduje alespoň %{min_followers} sledovatelů
+        discoverable_html: <a href="%{path}" target="_blank">Adresář</a> dovoluje lidem najít účty podle zájmů a aktivity. Vyžaduje alespoň %{min_followers} sledujících
         email: Bude vám poslán potvrzovací e-mail
         fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka
         header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px
         inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít
         irreversible: Filtrované tooty nenávratně zmizí, i pokud bude filtr později odstraněn
         locale: Jazyk uživatelského rozhraní, e-mailů a oznámení push
-        locked: Vyžaduje manuální schvalování sledovatelů
+        locked: Vyžaduje, abyste ručně schvaloval/a sledující
         password: Použijte alespoň 8 znaků
         phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu
         scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom.
@@ -37,7 +37,7 @@ cs:
         username: Vaše uživatelské jméno bude na %{domain} unikátní
         whole_word: Je-li klíčové slovo či fráze pouze alfanumerická, bude aplikována pouze, pokud se shoduje s celým slovem
       imports:
-        data: Soubor CSV exportován z jiné instance Mastodon
+        data: Soubor CSV exportovaný z jiného serveru Mastodon
       sessions:
         otp: 'Napište dvoufaktorový kód vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
       user:
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index d3f9cb340..24ae49a2a 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -38,6 +38,18 @@ cy:
         fields:
           name: Label
           value: Cynnwys
+      account_warning_preset:
+        text: Testun rhagosodedig
+      admin_account_action:
+        send_email_notification: Hysbysu'r defnyddiwr trwy e-bost
+        text: Rhybudd wedi'i addasu
+        type: Gweithredu
+        types:
+          disable: Analluogi
+          none: Gwneud dim
+          silence: Tawelwch
+          suspend: Dileu data cyfrif
+        warning_preset_id: Defnyddiwch ragnod rhag rhybudd
       defaults:
         autofollow: Gwahodd i ddilyn eich cyfrif
         avatar: Afatar
@@ -48,6 +60,7 @@ cy:
         context: Hidlo cyd-destunau
         current_password: Cyfrinair presennol
         data: Data
+        discoverable: Rhestrwch y cyfrif hwn ar y cyfeiriadur
         display_name: Enw arddangos
         email: Cyfeiriad e-bost
         expires_in: Yn dod i ben ar ôl
@@ -63,6 +76,7 @@ cy:
         otp_attempt: Côd dau gam
         password: Cyfrinair
         phrase: Allweddair neu ymadrodd
+        setting_aggregate_reblogs: Grŵp hybiau mewn llinellau amser
         setting_auto_play_gif: Chwarae GIFs wedi'u hanimeiddio yn awtomatig
         setting_boost_modal: Dangos deialog cadarnhad cyn bŵstio
         setting_default_language: Cyhoeddi iaith
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 0ffc22b53..2b9c2bb81 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -57,6 +57,7 @@ eu:
           disable: Desaktibatu
           none: Ez egin ezer
           silence: Isiltarazi
+          suspend: Kanporatu eta behin betiko ezabatu kontuko datuak
         warning_preset_id: Erabili aurre-ezarritako abisu bat
       defaults:
         autofollow: Gonbidatu zure kontua jarraitzera
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index d5e0ef574..aebab5247 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -41,7 +41,7 @@ gl:
       sessions:
         otp: 'Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación:'
       user:
-        chosen_languages: Si se marca, só os toots nos idiomas seleccionados serán mostrados en liñas temporais públicas
+        chosen_languages: Se ten marca, só os toots nos idiomas seleccionados serán mostrados en liñas temporais públicas
     labels:
       account:
         fields:
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index f2d26cf02..41d045a4a 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -14,7 +14,7 @@ sk:
         avatar: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px
         bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný
         context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené
-        digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdŕžal/a nejaké osobné správy kým si bol/a preč
+        digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdržal/a nejaké osobné správy kým si bol/a preč
         discoverable_html: Táto <a href="%{path}" target="_blank">databáza</a> umožňuje ľudom nájsť profily podľa záujmu a aktívnosti. Vyžaduje aby mali aspoň %{min_followers} sledovateľov
         email: Bude ti odoslaný potvrdzujúci email
         fields: Až štyri položky môžeš mať na svojom profile zobrazené vo forme tabuľky
@@ -22,7 +22,7 @@ sk:
         inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať
         irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš
         locale: Jazyk užívateľského rozhrania, emailových, a nástenkových oboznámení
-        locked: Vyžaduje, aby si manuálne schvaľoval/a následovateľov
+        locked: Vyžaduje sa manuálne schvaľovanie sledujúcich
         password: Zadaj aspoň osem znakov
         phrase: Zhoda sa nájde nezávisle od toho, či je text napísaný, veľkými, alebo malými písmenami, či už v tele, alebo v hlavičke
         scopes: Ktoré API budú povolené aplikácii pre prístup. Ak vyberieš vrcholný stupeň, nemusíš už potom vyberať po jednom.
@@ -69,8 +69,8 @@ sk:
         context: Triedenie kontextov
         current_password: Súčasné heslo
         data: Dáta
-        discoverable: Zaraď tento účet do databázy
-        display_name: Meno
+        discoverable: Zaraď tento účet do databázy profilov
+        display_name: Zobrazované meno
         email: Emailová adresa
         expires_in: Expirovať po
         fields: Metadáta profilu
@@ -99,8 +99,8 @@ sk:
         setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o obsahu
         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_reduce_motion: Mierni pohyb pri animáciách
+        setting_system_font_ui: Použi základné systémové písmo
         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ť
@@ -109,8 +109,8 @@ sk:
         username_or_email: Prezívka, alebo email
         whole_word: Celé slovo
       interactions:
-        must_be_follower: Blokuj oboznámenia ohľadom užívateľov, ktorí ťa nesledujú
-        must_be_following: Blokuj oboznámenia ohľadom ľudí ktorých nesleduješ
+        must_be_follower: Blokovať oznámenia od nesledujúcich
+        must_be_following: Blokovať oznámenia od ľudí, ktorých nesleduješ
         must_be_following_dm: Blokuj súkromné správy od ľudí ktorých nesleduješ
       notification_emails:
         digest: Posielaj súhrnné emaily
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index 890cbac41..781485864 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -96,7 +96,7 @@ sl:
         follow_request: Pošlji e-pošto, ko vam nekdo želi slediti
         mention: Pošlji e-pošto, ko vas nekdo omeni
         reblog: Pošlji e-pošto, ko nekdo sune vaše stanje
-        report: Pošlji e-pošto, ko je oddano novo poročilo
+        report: Pošlji e-pošto, ko je oddana nova prijava
     'no': Ne
     required:
       mark: "*"
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/config/locales/simple_form.sq.yml
@@ -0,0 +1 @@
+{}
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 393e1ae93..4f89e7162 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -3,7 +3,7 @@ sk:
   about:
     about_hashtag_html: Toto sú verejné príspevky otagované pod <strong>#%{hashtag}</strong>. Ak máš účet hocikde v rámci fediversa, môžeš ich využívať.
     about_mastodon_html: Mastodon je sociálna sieť založená na otvorených webových protokoloch a na slobodnom softvéri. Je decentralizovaná, podobne ako email.
-    about_this: O tejto instancii
+    about_this: O tomto serveri
     administered_by: 'Správcom je:'
     api: API
     apps: Aplikácie
@@ -126,7 +126,7 @@ sk:
       media_attachments: Prílohy
       memorialize: Zmeniť na "Navždy budeme spomínať"
       moderation:
-        active: Aktívny/a
+        active: Aktívny
         all: Všetko
         silenced: Umlčané
         suspended: Vylúčený/á
@@ -215,8 +215,8 @@ sk:
     custom_emojis:
       by_domain: Doména
       copied_msg: Lokálna kópia emoji úspešne vytvorená
-      copy: Kopírovať
-      copy_failed_msg: Nebolo možné vytvoriť lokálnu kópiu tohto emoji
+      copy: Kopíruj
+      copy_failed_msg: Nebolo možné vytvoriť miestnu kópiu tohto emoji
       created_msg: Emoji úspešne vytvorené!
       delete: Zmazať
       destroyed_msg: Emojo úspešne zničený!
@@ -398,10 +398,10 @@ sk:
         desc_html: Zobrazované na viacerých stránkach. Odporúčaná veľkosť aspoň 293×205px. Pokiaľ nieje nahraté, bude zobrazený základný maskot
         title: Obrázok maskota
       peers_api_enabled:
-        desc_html: Domény na ktoré táto instancia už vo fediverse natrafila
-        title: Zverejniť zoznam objavených instancií
+        desc_html: Domény, na ktoré tento server už vo fediverse natrafil
+        title: Zverejni zoznam objavených serverov
       preview_sensitive_media:
-        desc_html: Náhľad adresy z iných instancií, bude zobrazený aj vtedy, keď sú dané médiá označené ako senzitívne
+        desc_html: Náhľad odkazov z iných serverov, bude zobrazený aj vtedy, keď sú médiá označené ako senzitívne
         title: Ukazuj aj chúlostivé médiá v náhľadoch OpenGraph
       profile_directory:
         desc_html: Povoliť užívateľom aby boli nájdení
@@ -429,13 +429,13 @@ sk:
         desc_html: Oboznamujúci paragraf na hlavnej stránke a pri meta tagoch. Opíš, čo robí tento Mastodon server špecifickým, a ďalej hocičo iné, čo považuješ za dôležité. Môžeš použiť HTML kód, hlavne <code>&lt; a &gt;</code>, ale tiež <code>&lt;&gt;</code>.
         title: Popis instancie
       site_description_extended:
-        desc_html: Toto je vhodné miesto pre vaše pravidlá, oboznámenia a iné veci, ktorými je vaša instancia špecifická. Je možné tu používať HTML kód
+        desc_html: Toto je vhodné miesto pre tvoje pravidlá o prevádzke, pokyny a iné veci, ktorými je tvoja instancia špecifická. Je možné tu používať HTML kód
         title: Vlastné doplňujúce informácie
       site_short_description:
         desc_html: Zobrazené na bočnom paneli a pri meta tagoch. Popíš čo je Mastodon, a čo robí tento server iným, v jednom paragrafe. Pokiaľ toto necháš prázdne, bude tu zobrazený základný popis instancie.
         title: Krátky popis instancie
       site_terms:
-        desc_html: Môžete si napísať vaše vlastné pravidla o súkromí, prevádzke, alebo aj iné legality. Môžete tu používať HTML kód
+        desc_html: Môžeš si napísať svoje vlastné pravidla o súkromí, prevádzke, alebo aj iné legality. Môžeš tu používať HTML kód
         title: Vlastné pravidlá prevádzky
       site_title: Názov instancie
       thumbnail:
@@ -506,13 +506,13 @@ sk:
     confirm_email: Potvrdiť email
     delete_account: Vymazať účet
     delete_account_html: Pokiaľ chceš vymazať svoj účet, môžeš tak <a href="%{path}">urobiť tu</a>. Budeš požiadaný/á o potvrdenie tohto kroku.
-    didnt_get_confirmation: Neobdŕžal/a si kroky pre potvrdenie?
+    didnt_get_confirmation: Neobdržal/a si kroky pre potvrdenie?
     forgot_password: Zabudnuté heslo?
     invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový.
     login: Prihlás sa
     logout: Odhlás sa
-    migrate_account: Presunúť sa na iný účet
-    migrate_account_html: Pokiaľ si želáš presmerovať tento účet na nejaký iný, môžeš to <a href="%{path}">urobiť tu</a>.
+    migrate_account: Presúvam sa na iný účet
+    migrate_account_html: Pokiaľ si želáš presmerovať tento účet na nejaký iný, môžeš si to <a href="%{path}">nastaviť tu</a>.
     or: alebo
     or_log_in_with: Alebo prihlásiť z
     providers:
@@ -598,7 +598,7 @@ sk:
   filters:
     contexts:
       home: Domáca os
-      notifications: Oboznámenia
+      notifications: Oznámenia
       public: Verejné osi
       thread: Konverzácie
     edit:
@@ -814,8 +814,8 @@ sk:
     export: Exportovať dáta
     followers: Povolení následovatelia
     import: Importovať
-    migrate: Presunúť účet
-    notifications: Oboznámenia
+    migrate: Presunutie účtu
+    notifications: Oznámenia
     preferences: Voľby
     settings: Nastavenia
     two_factor_authentication: Dvoj-faktorové overenie
@@ -878,7 +878,15 @@ sk:
 
       <hr class="spacer" />
 
-      <h3 id="use">
+      <h3 id="use">Načo sú tvoje údaje používané?</h3>
+
+      <p>Hociktorá z informácií, ktoré sú o tebe zozbierané, môže byť použité následujúcimi spôsobmi:</p>
+
+      <ul>
+        <li>Pre zabezpečenie základného fungovania Mastodonu. 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>Pre lepšie moderovanie komunity sa napríklad môže tvoja IP adresa porovnať s ostatnými už známimi adresami, aby bolo možné zistiť, či nedochádza napríklad k obchádzaniu vylúčenia, aleb k iným porušeniam pravidiel.</li>
+        <li>Emailová adresa ktorú poskytneš môže byť použitá na zasielanie informácií, oboznámení keď ostatní užívatelia interaktujú s tvojím obsahom, alebo na posielanie správ, odpovedí na otázky a iné požiadavky.</li>
+      </ul>
     title: Podmienky užívania, a pravidlá súkromia pre %{instance}
   themes:
     default: Mastodon
@@ -929,7 +937,7 @@ sk:
       edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a hlavičky, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet.
       explanation: Tu nájdeš nejaké tipy do začiatku
       final_action: Začni prispievať
-      final_step: 'Začnite písať! Aj bez následovníkov budú vaše verejné správy videné ostatnými, napríklad na lokálnej osi a pod haštagmi. Môžete sa ostatným predstaviť pod haštagom #introductions.'
+      final_step: 'Začni písať! Aj bez následovateľov budú tvoje verejné príspevky videné ostatnými, napríklad na miestnej osi a pod haštagmi. Ak chceš, môžeš sa ostatným predstaviť pod haštagom #introductions.'
       full_handle: Adresa tvojho profilu v celom formáte
       full_handle_hint: Toto je čo musíš dať vedieť svojím priateľom aby ti mohli posielať správy, alebo ťa následovať z inej instancie.
       review_preferences_action: Zmeniť nastavenia
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 594c58acc..35cba927b 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -54,6 +54,7 @@ sl:
       two: Sledilci
     following: Sledim
     joined: Se je pridružil na %{date}
+    last_active: zadnji aktivni
     link_verified_on: Lastništvo te povezave je bilo preverjeno na %{date}
     media: Medij
     moved_html: "%{name} se je prestavil na %{new_profile_link}:"
@@ -77,8 +78,11 @@ sl:
       moderator: Mod
     unfollow: Prenehaj slediti
   admin:
+    account_actions:
+      action: Izvedi dejanje
+      title: Izvedi moderirano dejanje %{acct}
     account_moderation_notes:
-      create: Pusti sporočilo
+      create: Pusti opombo
       created_msg: Uspešno ustvarjena opomba moderiranja!
       delete: Izbriši
       destroyed_msg: Moderirana opomba je uspešno uničena!
@@ -96,6 +100,7 @@ sl:
       confirm: Potrdi
       confirmed: Potrjeno
       confirming: Potrjujem
+      deleted: Izbrisano
       demote: Ponižaj
       disable: Onemogoči
       disable_two_factor_authentication: Onemogoči 2FA
@@ -111,8 +116,11 @@ sl:
       followers: Sledilci
       followers_url: URL sledilci
       follows: Sledi
+      header: Glava
       inbox_url: URl v mapi "Prejeto"
+      invited_by: Povabljen od
       ip: IP
+      joined: Pridružil
       location:
         all: Vse
         local: Lokalno
@@ -122,6 +130,7 @@ sl:
       media_attachments: Medijske priloge
       memorialize: Spremenite v spomin
       moderation:
+        active: Dejaven
         all: Vse
         silenced: Utišan
         suspended: Suspendiran
@@ -129,7 +138,265 @@ sl:
       moderation_notes: Opombe moderiranja
       most_recent_activity: Zadnja aktivnost
       most_recent_ip: Zadnji IP
+      no_limits_imposed: Brez omejitev
+      not_subscribed: Ni naročeno
+      outbox_url: URl za pošiljanje
+      perform_full_suspension: Začasno ustavi
+      profile_url: URL profila
       promote: Spodbujanje
+      protocol: Protokol
+      public: Javen
+      push_subscription_expires: Naročnina PuSH preteče
+      redownload: Osveži profil
+      remove_avatar: Odstrani podobo
+      remove_header: Odstrani glavo
+      resend_confirmation:
+        already_confirmed: Ta uporabnik je že potrjen
+        send: Ponovno pošlji potrditveno e-pošto
+        success: Potrditvena e-pošta je uspešno poslana!
+      reset: Ponastavi
+      reset_password: Ponastavi geslo
+      resubscribe: Ponovno se naroči
+      role: Dovoljenja
+      roles:
+        admin: Skrbnik
+        moderator: Moderator
+        staff: Osebje
+        user: Uporabnik
+      salmon_url: Salmon URL
+      search: Poišči
+      shared_inbox_url: URL mape "Prejeto v skupni rabi"
+      show:
+        created_reports: Narejene prijave
+        targeted_reports: Prijavili drugi
+      silence: Utišaj
+      silenced: Utišan
+      statuses: Stanja
+      subscribe: Naroči
+      suspended: Suspendiran
+      title: Računi
+      unconfirmed_email: Nepotrjena e-pošta
+      undo_silenced: Razveljavi utišanje
+      undo_suspension: Razveljavi suspendiranje
+      unsubscribe: Odjavi se od naročnine
+      username: Uporabniško ime
+      warn: Opozori
+      web: Splet
+    action_logs:
+      actions:
+        assigned_to_self_report: "%{name} je prijavil %{target} sebi"
+        change_email_user: "%{name} je spremenil naslov e-pošte uporabnika %{target}"
+        confirm_user: "%{name} je potrdil naslov e-pošte uporabnika %{target}"
+        create_account_warning: "%{name} je poslal opozorilo %{target}"
+        create_custom_emoji: "%{name} je poslal nove emotikone %{target}"
+        create_domain_block: "%{name} je blokiral domeno %{target}"
+        create_email_domain_block: "%{name} je dal na črni seznam e-pošto domene %{target}"
+        demote_user: "%{name} je degradiral uporabnika %{target}"
+        destroy_custom_emoji: "%{name} je uničil emotikon %{target}"
+        destroy_domain_block: "%{name} je odblokiral domeno %{target}"
+        destroy_email_domain_block: "%{name} je dal na beli seznam e-pošto domene %{target}"
+        destroy_status: "%{name} je odstranil stanje od %{target}"
+        disable_2fa_user: "%{name} je onemogočil dvofaktorsko zahtevo za uporabnika %{target}"
+        disable_custom_emoji: "%{name} je onemogočil emotikon %{target}"
+        disable_user: "%{name} je onemogočil prijavo za uporabnika %{target}"
+        enable_custom_emoji: "%{name} je omogočil emotikon %{target}"
+        enable_user: "%{name} je omogočil prijavo za uporabnika %{target}"
+        memorialize_account: "%{name} je spremenil račun od %{target} v stran spominov"
+        promote_user: "%{name} je spodbudil uporabnika %{target}"
+        remove_avatar_user: "%{name} je odstranil podobo od %{target}"
+        reopen_report: "%{name} je ponovno odprl prijavo %{target}"
+        reset_password_user: "%{name} je ponastavil geslo od uporabnika %{target}"
+        resolve_report: "%{name} je razrešil prijavo %{target}"
+        silence_account: "%{name} je utišal račun od %{target}"
+        suspend_account: "%{name} je začasno ustavil račun od %{target}"
+        unassigned_report: "%{name} je nedodeljeno prijavil %{target}"
+        unsilence_account: "%{name} je preklical utišanje računa od %{target}"
+        unsuspend_account: "%{name} je aktiviral račun od %{target}"
+        update_custom_emoji: "%{name} je posodobil emotikone %{target}"
+        update_status: "%{name} je posodobil stanje od %{target}"
+      deleted_status: "(izbrisano stanje)"
+      title: Dnevnik revizije
+    custom_emojis:
+      by_domain: Domena
+      copied_msg: Lokalna kopija emotikona je bila uspešno ustvarjena
+      copy: Kopiraj
+      copy_failed_msg: Lokalne kopije emotikona ni bilo mogoče ustvariti
+      created_msg: Emotikon je uspešno ustvarjen!
+      delete: Izbriši
+      destroyed_msg: Emotikon je uspešno uničen!
+      disable: Onemogoči
+      disabled_msg: Ta emotikon je uspešno onemogočen
+      emoji: Emotikon
+      enable: Omogoči
+      enabled_msg: Ta emotikon je uspešno omogočen
+      image_hint: PNG do 50KB
+      listed: Navedeno
+      new:
+        title: Dodaj nove emotikone
+      overwrite: Prepiši
+      shortcode: Kratka koda
+      shortcode_hint: Najmanj 2 znaka, samo alfanumerični znaki in podčrtaji
+      title: Emotikoni po meri
+      unlisted: Neuvrščeni
+      update_failed_msg: Tega emotikona ni bilo mogoče posodobiti
+      updated_msg: Emotikon je uspešno posodobljen!
+      upload: Pošlji
+    dashboard:
+      backlog: Zaostala opravila
+      config: Nastavitve
+      feature_deletions: Brisanje računov
+      feature_invites: Poveza povabil
+      feature_profile_directory: Mapa profila
+      feature_registrations: Registracije
+      feature_relay: Rele federacije
+      features: Zmožnosti
+      hidden_service: Federacija s skritimi storitvami
+      open_reports: odprte prijave
+      recent_users: Nedavni uporabniki
+      search: Iskanje po celotnem besedilu
+      single_user_mode: Način enega uporabnika
+      software: Programska oprema
+      space: Uporaba prostora
+      title: Nadzorna plošča
+      total_users: Skupaj uporabnikov
+      trends: Trendi
+      week_interactions: interakcije ta teden
+      week_users_active: aktivni ta teden
+      week_users_new: uporabniki ta teden
+    domain_blocks:
+      add_new: Dodaj nov domenski blok
+      created_msg: Domenski blok se sedaj obdeluje
+      destroyed_msg: Domenski blok je bil razveljavljen
+      domain: Domena
+      new:
+        create: Ustvari blok
+        hint: Domenski blok ne bo preprečil ustvarjanja vnosov računov v zbirko podatkov, ampak bo retroaktivno in samodejno uporabil posebne metode moderiranja na teh računih.
+        severity:
+          desc_html: "<strong>Utišaj</strong> bo vse objave računa naredil nevidne vsem, ki jih ne sledijo. <strong>Suspendiraj</strong> bo odstranil vso vsebino, medije in podatke profila računa. Uporabi <strong>nič</strong>, če želite le zavrniti predstavnostne datoteke."
+          noop: Nič
+          silence: Utišaj
+          suspend: Suspendiraj
+        title: Nov domenski blok
+      reject_media: Zavrni predstavnostne datoteke
+      reject_media_hint: Odstrani lokalno shranjene predstavnostne datoteke in zavrača prenašanje le-teh v prihodnosti. Za suspenzije ni pomembno
+      reject_reports: Zavrnjene prijave
+      reject_reports_hint: Prezri vse prijave, ki pridejo iz te domene. Za suspenzije ni pomembno
+      rejecting_media: zavrnitev predstavnostnih datotek
+      rejecting_reports: zavrnitev prijav
+      severity:
+        silence: utišani
+        suspend: suspendirani
+      show:
+        affected_accounts:
+          few: "%{count} računov v bazi podatkov so prizadeti"
+          one: En račun v bazi podatkov je prizadet
+          other: "%{count} računov v bazi podatkov so prizadeti"
+          two: "%{count} računov v bazi podatkov so prizadeti"
+        retroactive:
+          silence: Prekliči utišanje za vse obstoječe račune iz te domene
+          suspend: Odsuspendiraj vse obstoječe račune iz te domene
+        title: Razveljavi domenski blok za %{domain}
+        undo: Razveljavi
+      undo: Razveljavi domenski blok
+    email_domain_blocks:
+      add_new: Dodaj novo
+      created_msg: Domena e-pošte je bila uspešno dodana na črni seznam
+      delete: Izbriši
+      destroyed_msg: Domena e-pošte je bila uspešno izbrisana iz črnega seznama
+      domain: Domena
+      new:
+        create: Dodaj domeno
+        title: Nov vnos e-pošte na črni seznam
+      title: Črni seznam e-pošte
+    followers:
+      back_to_account: Nazaj na račun
+      title: Sledilci od %{acct}
+    instances:
+      delivery_available: Na voljo je dostava
+      known_accounts:
+        few: "%{count} znanih računov"
+        one: "%{count} znan račun"
+        other: "%{count} znanih računov"
+        two: "%{count} znanih računov"
+      moderation:
+        all: Vse
+        limited: Omejeno
+        title: Moderiranje
+      title: Federacija
+      total_blocked_by_us: Blokirano iz naše strani
+      total_followed_by_them: Oni ti sledijo
+      total_followed_by_us: Mi ti sledimo
+      total_reported: Poročila o njih
+      total_storage: Predstavnostne priloge
+    invites:
+      deactivate_all: Onemogoči vse
+      filter:
+        all: Vse
+        available: Razpoložljivo
+        expired: Potekel
+        title: Filter
+      title: Povabila
+    relays:
+      add_new: Dodaj nov rele
+      delete: Izbriši
+      description_html: "<strong>Rele federacije</strong> je posredniški strežnik, ki si izmenjuje velike količine javnih trobov med strežniki, ki so se naročili in objavili na njem. <strong>Majhnim in srednjim strežnikom lahko pomaga pri odkrivanju vsebine iz sistema fediverse</strong>, kar bi sicer zahtevalo, da lokalni uporabniki ročno sledijo druge osebe na oddaljenih strežnikih."
+      disable: Onemogoči
+      disabled: Onemogočeno
+      enable: Omogoči
+      enable_hint: Ko je omogočen, se bo vaš strežnik naročil na vse javne trobe iz tega releja in začel pošiljati javne trobe tega strežnika.
+      enabled: Omogočeno
+      inbox_url: URL releja
+      pending: Čakanje na odobritev releja
+      save_and_enable: Shrani in omogoči
+      setup: Nastavi povezavo releja
+      status: Stanje
+      title: Releji
+    report_notes:
+      created_msg: Opomba o prijavi je uspešno ustvarjena!
+      destroyed_msg: Opomba o prijavi je uspešno izbrisana!
+    reports:
+      account:
+        note: opomba
+        report: prijava
+      action_taken_by: Dejanje, ki ga je sprejel
+      are_you_sure: Ali ste prepričani?
+      assign_to_self: Dodeli meni
+      assigned: Dodeljen moderator
+      comment:
+        none: Nič
+      created_at: Prijavljeno
+      mark_as_resolved: Označi kot rešeno
+      mark_as_unresolved: Označi kot nerešeno
+      notes:
+        create: Dodaj opombo
+        create_and_resolve: Razreši z opombo
+        create_and_unresolve: Ponovo odpri z opombo
+        delete: Izbriši
+        placeholder: Opišite dejanja, ki ste jih izvedli, ali katere koli druge posodobitve...
+      reopen: Ponovno odpri prijavo
+      report: 'Prijavi #%{id}'
+      reported_account: Prijavljeni račun
+      reported_by: Prijavljen od
+      resolved: Razrešeno
+      resolved_msg: Prijava je uspešno razrešena!
+      status: Stanje
+      title: Prijave
+      unassign: Odstopi
+      unresolved: Nerešeno
+      updated_at: Posodobljen
+    settings:
+      activity_api_enabled:
+        desc_html: Številke lokalno objavljenih stanj, aktivnih uporabnikov in novih registracij na tedenskih seznamih
+        title: Objavi združeno statistiko o dejavnosti uporabnikov
+      bootstrap_timeline_accounts:
+        desc_html: Več uporabniških imen ločite z vejico. Deluje samo na lokalnih in odklenjenih računih. Privzeto, ko je prazno, pri vseh lokalnih skrbnikih.
+        title: Privzeta sledenja za nove uporabnike
+      contact_information:
+        email: Poslovna e-pošta
+        username: Uporabniško ime stika
+      custom_css:
+        desc_html: Spremeni videz z naloženim CSS na vsaki strani
+        title: CSS po meri
   statuses:
     pin_errors:
       ownership: Trob nekoga drugega ne more biti pripet
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
new file mode 100644
index 000000000..e583b9309
--- /dev/null
+++ b/config/locales/sq.yml
@@ -0,0 +1,612 @@
+---
+sq:
+  about:
+    about_this: Mbi
+    administered_by: 'Administruar nga:'
+    api: API
+    apps: Aplikacione për celular
+    contact: Kontakt
+    contact_missing: I parregulluar
+    contact_unavailable: N/A
+    documentation: Dokumentim
+    features:
+      humane_approach_title: Një trajtim më njerëzor
+      not_a_product_title: Jeni një person, jo një produkt
+      real_conversation_title: Ndërtuar për bashkëbisedim të njëmendtë
+      within_reach_title: Përherë i kapshëm
+    generic_description: "%{domain} është një shërbyes te rrjeti"
+    hosted_on: Mastodon i strehuar në %{domain}
+    learn_more: Mësoni më tepër
+    other_instances: Listë instancash
+    privacy_policy: Rregulla privatësie
+    source_code: Kod burim
+    status_count_after:
+      one: gjendje
+      other: gjendje
+    status_count_before: Cili krijoi
+    terms: Kushte shërbimi
+    user_count_after:
+      one: përdorues
+      other: përdorues
+    what_is_mastodon: Ç’është Mastodon-i?
+  accounts:
+    choices_html: 'Zgjedhje të %{name}:'
+    follow: Ndiqeni
+    followers:
+      one: Ndjekës
+      other: Ndjekës
+    following: Ndjekje
+    joined: U bë pjesë më %{date}
+    last_active: aktiv së fundi
+    media: Media
+    nothing_here: S’ka gjë këtu!
+    people_followed_by: Persona të ndjekur nga %{name}
+    people_who_follow: Persona që ndjekin %{name}
+    reserved_username: Emri i përdoruesit është i ruajtur për dikë
+    roles:
+      admin: Përgjegjës
+      bot: Bot
+      moderator: Mod
+    unfollow: Resht së ndjekuri
+  admin:
+    account_actions:
+      action: Kryeje veprimin
+    account_moderation_notes:
+      create: Lini një shënim
+      created_msg: Shënimi i moderimit u krijua me sukses!
+      delete: Fshije
+      destroyed_msg: Shënimi i moderimit u asgjësua me sukses!
+    accounts:
+      are_you_sure: A jeni i sigurt?
+      avatar: Avatar
+      by_domain: Përkatësi
+      change_email:
+        changed_msg: Email-i i llogarisë u ndryshua me sukses!
+        current_email: Email-i i tanishëm
+        label: Ndrysho email-in
+        new_email: Email i ri
+        submit: Ndrysho email-in
+        title: Ndrysho email-in për %{username}
+      confirm: Ripohojeni
+      confirmed: U ripohua
+      confirming: Po ripohohet
+      deleted: U fshi
+      demote: Zhgradoje
+      disable: Çaktivizoje
+      disable_two_factor_authentication: Çaktivizoni 2FA
+      disabled: E çaktivizuar
+      display_name: Emër në ekran
+      domain: Përkatësi
+      edit: Përpunojeni
+      email: Email
+      email_status: Gjendje email-i
+      enable: Aktivizoje
+      enabled: E aktivizuar
+      feed_url: URL prurjeje
+      followers: Ndjekës
+      followers_url: URL Ndjekësish
+      follows: Ndjekje
+      header: Krye
+      inbox_url: URL Mesazhesh të Marrë
+      invited_by: Ftuar nga
+      ip: IP
+      joined: U bë pjesë
+      location:
+        all: Krejt
+        local: Vendore
+        remote: E largët
+        title: Vendndodhje
+      login_status: Gjendje hyrjeje
+      media_attachments: Bashkëngjitje media
+      moderation:
+        active: Aktiv
+        all: Krejt
+        suspended: Të pezulluara
+        title: Moderim
+      moderation_notes: Shënime moderimesh
+      most_recent_activity: Veprimtaria më e freskët
+      most_recent_ip: IP-ja më e freskët
+      no_limits_imposed: Pa imponim kufijsh
+      not_subscribed: Jo i  pajtuar
+      outbox_url: URL Mesazhesh të Dërguar
+      perform_full_suspension: Pezulloje
+      profile_url: URL profili
+      protocol: Protokoll
+      public: Publike
+      push_subscription_expires: Pajtimi PuSH skadon më
+      redownload: Rifresko profilin
+      remove_avatar: Hiqe avatarin
+      remove_header: Hiqe kryen
+      resend_confirmation:
+        already_confirmed: Ky përdorues është i ripohuar tashmë
+        send: Ridërgo email ripohimi
+        success: Email-i i ripohimit u dërgua me sukses!
+      reset_password: Ricaktoni fjalëkalimin
+      resubscribe: Ripajtohuni
+      role: Leje
+      roles:
+        admin: Përgjegjës
+        moderator: Moderator
+        staff: Staf
+        user: Përdorues
+      search: Kërkoni
+      show:
+        created_reports: Ka bërë raporte
+        targeted_reports: Raportuar nga të tjerë
+      silence: Heshtje
+      statuses: Gjendje
+      subscribe: Pajtomë
+      suspended: Të pezulluara
+      title: Llogari
+      unconfirmed_email: Email i paripohuar
+      undo_silenced: Zhbëje heshtjen
+      undo_suspension: Zhbëje pezullimin
+      unsubscribe: Shpajtohuni
+      username: Emër përdoruesi
+      warn: Sinjalizoje
+      web: Web
+    action_logs:
+      actions:
+        change_email_user: "%{name} ndryshoi adresën email të përdoruesit %{target}"
+        confirm_user: "%{name} ripohoi adresën email të përdoruesit %{target}"
+        create_account_warning: "%{name} dërgoi një sinjalizim për %{target}"
+        create_custom_emoji: "%{name} ngarkoi emotikon të ri %{target}"
+        create_domain_block: "%{name} bllokoi përkatësinë %{target}"
+        create_email_domain_block: "%{name} e shtoi në listë bllokimesh përkatësinë %{target}"
+        demote_user: "%{name} zhgradoi përdoruesin %{target}"
+        destroy_custom_emoji: "%{name} asgjësoi emotikonin %{target}"
+        destroy_domain_block: "%{name} zhbllokoi përkatësinë %{target}"
+        disable_2fa_user: "%{name} çaktivizoi domosdoshmëritë për dyfaktorësh për përdoruesin %{target}"
+        disable_custom_emoji: "%{name} çaktivizoi emotikonin %{target}"
+        disable_user: "%{name} çaktivizoi hyrje për përdoruesin %{target}"
+        enable_custom_emoji: "%{name} aktivizoi emotikonin %{target}"
+        enable_user: "%{name} aktivizoi hyrje për përdoruesin %{target}"
+        promote_user: "%{name} gradoi përdoruesin %{target}"
+        remove_avatar_user: "%{name} hoqi avatarin e %{target}"
+        reopen_report: "%{name} rihapi raportin %{target}"
+        reset_password_user: "%{name} ricaktoi fjalëkalimi për përdoruesin %{target}"
+        silence_account: "%{name} heshtoi llogarinë e %{target}"
+        suspend_account: "%{name} pezulloi llogarinë e %{target}"
+        unsilence_account: "%{name} hoqi heshtimin për llogarinë %{target}"
+        unsuspend_account: "%{name} hoqi pezullimin për llogarinë e %{target}"
+        update_custom_emoji: "%{name} përditësoi emotikonin %{target}"
+    custom_emojis:
+      by_domain: Përkatësi
+      copy: Kopjoje
+      created_msg: Emotikoni u krijua me sukses!
+      delete: Fshije
+      destroyed_msg: Emotikoni u asgjësua me sukses!
+      disable: Çaktivizoje
+      disabled_msg: Ai emotikon u çaktivizua me sukses
+      emoji: Emotikon
+      enable: Aktivizoje
+      enabled_msg: Ai emotikon u aktivizua me sukses
+      image_hint: PNG deri 50KB
+      new:
+        title: Shtoni emotikon të ri vetjak
+      overwrite: Mbishkruaje
+      shortcode: Kod i shkurtër
+      title: Emotikone vetjake
+      update_failed_msg: S’u përditësua dot ai emotikon
+      updated_msg: Emotikoni u përditësua me sukses!
+      upload: Ngarkoje
+    dashboard:
+      config: Formësim
+      feature_invites: Lidhje ftesash
+      feature_profile_directory: Drejtori profilesh
+      feature_registrations: Regjistrime
+      feature_relay: Rele federimi
+      features: Veçori
+      search: Kërko tekstin e plotë
+      single_user_mode: Mënyrë me përdorues të vetëm
+      software: Software
+      space: Përdorim hapësire
+      title: Pult
+      total_users: përdorues gjithsej
+      trends: Tendenca
+      week_interactions: Ndërveprime këtë javë
+      week_users_active: aktivë këtë javë
+      week_users_new: përdorues këtë javë
+    domain_blocks:
+      add_new: Shtoni bllokim të ri përkatësie
+      created_msg: Bllokimi i përkatësisë tani po përpunohet
+      destroyed_msg: Bllokimi i përkatësisë u hoq
+      domain: Përkatësi
+      new:
+        create: Krijoni bllokim
+        severity:
+          noop: Asnjë
+          silence: Heshtje
+          suspend: Pezulloje
+        title: Shtoni Bllokim i ri përkatësie
+      show:
+        affected_accounts: Pat ndikim te një llogari në bazën e të dhënave
+        undo: Zhbëje
+      undo: Zhbëje bllokimin e përkatësisë
+    email_domain_blocks:
+      add_new: Shtoni të ri
+      delete: Fshije
+      domain: Përkatësi
+      new:
+        create: Shtoni përkatësi
+    followers:
+      back_to_account: Mbrapsht Te Llogaria
+      title: Ndjekës të %{acct}
+    instances:
+      moderation:
+        all: Krejt
+        limited: E kufizuar
+        title: Moderim
+      title: Federim
+      total_blocked_by_us: Bllokuar nga ne
+      total_followed_by_them: Ndjekur prej tyre
+      total_followed_by_us: Ndjekur nga ne
+      total_reported: Raportime rreth tyre
+      total_storage: Bashkëngjitje media
+    invites:
+      deactivate_all: Çaktivizoji krejt
+      filter:
+        all: Krejt
+        expired: Ka skaduar
+        title: Filtër
+      title: Ftesa
+    relays:
+      add_new: Shtoni rele të re
+      delete: Fshije
+      disable: Çaktivizoje
+      disabled: E çaktivizuar
+      enable: Aktivizoje
+      enabled: E aktivizuar
+      inbox_url: URL releje
+      pending: Në pritje të miratimit të relesë
+      save_and_enable: Ruaje dhe aktivizoje
+      setup: Ujdisni një lidhje rele
+      status: Gjendje
+      title: Rele
+    report_notes:
+      created_msg: Shënimi i raportimit u krijua me sukses!
+      destroyed_msg: Shënimi i raportimit u fshi me sukses!
+    reports:
+      account:
+        note: shënim
+        report: Raportoje
+      action_taken_by: 'Veprimi i ndërmarrë nga '
+      are_you_sure: A jeni i sigurt?
+      assign_to_self: Caktojani vetes
+      comment:
+        none: Asnjë
+      created_at: Raportuar më
+      mark_as_resolved: Vëri shenjë si i zgjidhur
+      mark_as_unresolved: Vëri shenjë si të pazgjidhur
+      notes:
+        create: Shtoni shënim
+        create_and_resolve: Zgjidhe me shënim
+        create_and_unresolve: Rihape me shënim
+        delete: Fshije
+      reopen: Rihape raportimin
+      report: 'Raportim #%{id}'
+      reported_account: Llogari e raportuar
+      reported_by: Raportuar nga
+      status: Gjendje
+      title: Raportime
+      unresolved: Të pazgjidhur
+      updated_at: U përditësua më
+    settings:
+      custom_css:
+        title: CSS Vetjake
+      mascot:
+        title: Figurë simboli
+      peers_api_enabled:
+        title: Boto listë instancash të zbuluara
+      profile_directory:
+        desc_html: Lejoju përdoruesve të jenë të zbulueshëm
+        title: Aktivizo drejtori profilesh
+      registrations:
+        open:
+          title: Hap regjistrim
+      show_staff_badge:
+        desc_html: Shfaq një stemë stafi në faqen e një përdoruesi
+        title: Shfaq stemë stafi
+      site_description:
+        title: Përshkrim instance
+      site_terms:
+        title: Kushte vetjake shërbimi
+      site_title: Emër instance
+      thumbnail:
+        title: Miniaturë instance
+      timeline_preview:
+        title: Paraparje rrjedhe kohore
+      title: Rregullime sajti
+    statuses:
+      back_to_account: Mbrapsht te faqja e llogarisë
+      batch:
+        delete: Fshije
+        nsfw_off: Vëri shenjë si jo rezervat
+        nsfw_on: Vëri shenjë si rezervat
+      failed_to_execute: S’u arrit të përmbushej
+      media:
+        title: Media
+      no_media: S’ka media
+      no_status_selected: S’u ndryshua ndonjë gjendje, ngaqë s’u përzgjodh ndonjë e tillë
+      title: Gjendje llogarish
+      with_media: Me media
+    subscriptions:
+      callback_url: URL Callback-u
+      expires_in: Skadon më
+      topic: Temë
+    tags:
+      accounts: Llogari
+      hidden: Fshehur
+      hide: Fshihe prej drejtorie
+      name: Hashtag
+      title: Hashtage
+      unhide: Shfaqe në drejtori
+      visible: E dukshme
+    title: Administrim
+    warning_presets:
+      add_new: Shtoni të ri
+      delete: Fshije
+      edit: Përpunoni
+  admin_mailer:
+    new_report:
+      body: "%{reporter} ka raportuar %{target}"
+      subject: Raport i ri për %{instance} (#%{id})
+  application_mailer:
+    notification_preferences: Ndryshoni parapëlqime email-i
+    salutation: "%{name},"
+    settings: 'Ndryshoni parapëlqime email-i: %{link}'
+    view: 'Parje:'
+    view_profile: Shihni Profilin
+    view_status: Shihini gjendjen
+  applications:
+    created: Aplikacioni u krijua me sukses
+    destroyed: Aplikacioni u fshi me sukses
+    invalid_url: URL-ja e dhënë është e pavlefshme
+    regenerate_token: Riprodho token hyrjesh
+    your_token: Token-i juaj për hyrje
+  auth:
+    change_password: Fjalëkalim
+    confirm_email: Ripohoni email-in
+    delete_account: Fshije llogarinë
+    didnt_get_confirmation: S’morët udhëzime ripohimi?
+    forgot_password: Harruat fjalëkalimin tuaj?
+    login: Hyni
+    logout: Dalje
+    migrate_account: Kaloni në një tjetër llogari
+    migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund <a href="%{path}">ta formësoni këtu</a>.
+    or: ose
+    or_log_in_with: Ose bëni hyrjen me
+    providers:
+      cas: CAS
+    register: Regjistrohuni
+    register_elsewhere: Regjistrohuni në një tjetër shërbyes
+    resend_confirmation: Ridërgo udhëzime ripohimi
+    reset_password: Ricaktoni fjalëkalimin
+    security: Siguri
+    set_new_password: Caktoni fjalëkalim të ri
+  authorize_follow:
+    already_following: E ndiqni tashmë këtë llogari
+    follow: Ndiqeni
+    follow_request: 'Keni dërguar një kërkesë ndjekjeje te:'
+    following: 'Sukses! Tani e ndiqni:'
+    post_follow:
+      return: Shfaq profilin e përdoruesit
+    title: Ndiq %{acct}
+  datetime:
+    distance_in_words:
+      about_x_hours: "%{count}o"
+      about_x_months: "%{count}mj"
+      about_x_years: "%{count}v"
+      almost_x_years: "%{count}v"
+      half_a_minute: Mu tani
+      less_than_x_minutes: "%{count}m"
+      less_than_x_seconds: Mu tani
+      over_x_years: "%{count}v"
+      x_days: "%{count}d"
+      x_minutes: "%{count}m"
+      x_months: "%{count}mj"
+      x_seconds: "%{count}s"
+  deletes:
+    proceed: Fshini llogarinë
+  directories:
+    directory: Drejtori profilesh
+    explore_mastodon: Eksploroni %{title}
+    people:
+      one: "%{count} person"
+      other: "%{count} persona"
+  errors:
+    '403': S’keni leje të shihni këtë faqe.
+    '404': Faqja që po kërkonit, nuk ekziston.
+    '410': Faqja që po kërkonit, nuk ekziston më.
+    '422':
+      title: Verifikimi i sigurisë dështoi
+    '500':
+      title: Kjo faqe s’është e saktë
+  exports:
+    archive_takeout:
+      date: Datë
+      size: Madhësi
+    csv: CSV
+    lists: Lista
+    storage: Depozitim për media
+  filters:
+    contexts:
+      notifications: Njoftime
+      thread: Biseda
+    edit:
+      title: Përpunoni filtër
+    index:
+      delete: Fshije
+      title: Filtra
+    new:
+      title: Shtoni filtër të ri
+  followers:
+    domain: Përkatësi
+    followers_count: Numër ndjekësish
+    purge: Hiqe nga ndjekësit
+    unlocked_warning_title: Llogaria juaj s’është kyçur
+  footer:
+    developers: Zhvillues
+    more: Më tepër…
+    resources: Burime
+  generic:
+    changes_saved_msg: Ndryshimet u ruajtën me sukses!
+    copy: Kopjoje
+    save_changes: Ruaji ndryshimet
+  imports:
+    types:
+      blocking: Listë bllokimesh
+  invites:
+    expires_in:
+      '1800': 30 minuta
+      '21600': 6 orë
+      '3600': 1 orë
+      '43200': 12 orë
+      '604800': 1 javë
+      '86400': 1 ditë
+    expires_in_prompt: Kurrë
+    generate: Prodhoje
+    invited_by: 'Qetë ftuar nga:'
+    max_uses:
+      one: 1 përdorim
+      other: "%{count} përdorime"
+    max_uses_prompt: Pa kufi
+    table:
+      expires_at: Skadon më
+      uses: Përdorime
+    title: Ftoni njerëz
+  migrations:
+    proceed: Ruaje
+  moderation:
+    title: Moderim
+  notification_mailer:
+    digest:
+      action: Shihini krejt njoftimet
+    favourite:
+      title: E parapëlqyer e re
+    follow:
+      title: Ndjekës i ri
+    mention:
+      body: 'U përmendët nga %{name} në:'
+      subject: U përmendët nga %{name}
+      title: Përmendje e re
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: B
+          million: M
+          quadrillion: K
+          thousand: K
+          trillion: T
+  pagination:
+    truncate: "&hellip;"
+  preferences:
+    languages: Gjuhë
+    other: Tjetër
+    publishing: Publikim
+    web: Web
+  remote_unfollow:
+    error: Gabim
+    title: Titull
+  sessions:
+    activity: Veprimtaria e fundit
+    browser: Shfletues
+    browsers:
+      blackberry: Blackberry
+      chrome: Chrome
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
+      generic: Shfletues i panjohur
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Shfletues Nokia S40 Ovi
+      opera: Opera
+      otter: Otter
+      phantom_js: PhantomJS
+      qq: QQ Browser
+      safari: Safari
+      uc_browser: UCBrowser
+      weibo: Weibo
+    current_session: Sesioni i tanishëm
+    description: "%{browser} në %{platform}"
+    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: platformë e panjohur
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
+    revoke: Shfuqizoje
+    title: Sesione
+  settings:
+    authorized_apps: Aplikacione të autorizuara
+    back: Mbrapsht te Mastodon
+    delete: Fshirje llogarie
+    development: Zhvillim
+    edit_profile: Përpunoni profilin
+    export: Eksportim të dhënash
+    followers: Ndjekës të autorizuar
+    import: Importo
+    migrate: Migrim llogarie
+    notifications: Njoftime
+    preferences: Parapëlqime
+    settings: Rregullime
+    your_apps: Aplikacionet tuaja
+  statuses:
+    attached:
+      image:
+        one: "%{count} figurë"
+        other: "%{count} figura"
+      video:
+        one: "%{count} video"
+        other: "%{count} video"
+    content_warning: 'Sinjalizim lënde: %{warning}'
+    show_more: Shfaq më tepër
+    title: '%{name}: "%{quote}"'
+    visibilities:
+      private: Vetëm ndjekësve
+      private_long: Shfaqua vetëm ndjekësve
+      public: Publike
+      public_long: Mund ta shohë kushdo
+  themes:
+    contrast: Me kontrast të lartë
+    default: Mastodon
+    mastodon-light: Mastodon (light)
+  time:
+    formats:
+      default: "%d %b, %Y, %H:%M"
+      month: "%b %Y"
+  two_factor_authentication:
+    disable: Çaktivizoje
+    enable: Aktivizoje
+    enabled_success: Mirëfilltësimi dyfaktorësh u aktivizua me sukses
+  user_mailer:
+    backup_ready:
+      subject: Arkivi juaj është gati për shkarkim
+    warning:
+      subject:
+        disable: Llogaria juaj %{acct} është ngrirë
+        none: Sinjalizim për %{acct}
+        silence: Llogaria juaj %{acct} është kufizuar
+    welcome:
+      explanation: Ja disa ndihmëza, sa për t’ia filluar
+      final_action: Filloni të postoni
+      subject: Mirë se vini te Mastodon-i
+      tips: Ndihmëza
+      title: Mirë se vini, %{name}!
+  users:
+    invalid_email: Adresa email është e pavlefshme
+    invalid_otp_token: Kod dyfaktorësh i pavlefshëm
+    signed_in_as: 'I futur si:'
+  verification:
+    verification: Verifikim
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 1d373ed67..331ec3f80 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -34,14 +34,14 @@ sr:
       few: статуси
       many: статуси
       one: статус
-      other: статуси
+      other: статуса
     status_count_before: Који су написали
     terms: Услови коришћења
     user_count_after:
       few: корисници
       many: корисници
       one: корисник
-      other: корисници
+      other: корисника
     user_count_before: Дом за
     what_is_mastodon: Шта је Мастодон?
   accounts:
@@ -54,7 +54,7 @@ sr:
       other: Пратиоци
     following: Пратим
     joined: Придружио/ла се %{date}
-    last_active: последњи активни
+    last_active: последњи пут активни
     link_verified_on: Власништво над овом везом је проверено %{date}
     media: Медији
     moved_html: "%{name} је прешао на %{new_profile_link}:"
@@ -570,8 +570,8 @@ sr:
     people:
       few: "%{count} људе"
       many: "%{count} људе"
-      one: "%{count} особу"
-      other: "%{count} људе"
+      one: "%{count} особа/е"
+      other: "%{count} људи"
   errors:
     '403': Немате дозвола да видите ову страну.
     '404': Страна коју сте тражили не постоји.
diff --git a/spec/validators/email_mx_validator_spec.rb b/spec/validators/email_mx_validator_spec.rb
index bc68f63cf..48e17a4f1 100644
--- a/spec/validators/email_mx_validator_spec.rb
+++ b/spec/validators/email_mx_validator_spec.rb
@@ -11,6 +11,7 @@ describe EmailMxValidator do
 
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
       allow(resolver).to receive(:timeouts=).and_return(nil)
       allow(Resolv::DNS).to receive(:open).and_yield(resolver)
 
@@ -23,7 +24,9 @@ describe EmailMxValidator do
 
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')])
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
       allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
       allow(resolver).to receive(:timeouts=).and_return(nil)
       allow(Resolv::DNS).to receive(:open).and_yield(resolver)
 
@@ -37,6 +40,21 @@ describe EmailMxValidator do
 
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '1.2.3.4')])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
+      allow(resolver).to receive(:timeouts=).and_return(nil)
+      allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+
+      subject.validate(user)
+      expect(user.errors).to have_received(:add)
+    end
+
+    it 'adds an error if the AAAA record is blacklisted' do
+      EmailDomainBlock.create!(domain: 'fd00::1')
+      resolver = double
+
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([double(address: 'fd00::1')])
       allow(resolver).to receive(:timeouts=).and_return(nil)
       allow(Resolv::DNS).to receive(:open).and_yield(resolver)
 
@@ -50,7 +68,25 @@ describe EmailMxValidator do
 
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')])
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
       allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '2.3.4.5')])
+      allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
+      allow(resolver).to receive(:timeouts=).and_return(nil)
+      allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+
+      subject.validate(user)
+      expect(user.errors).to have_received(:add)
+    end
+
+    it 'adds an error if the MX IPv6 record is blacklisted' do
+      EmailDomainBlock.create!(domain: 'fd00::2')
+      resolver = double
+
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
+      allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([double(address: 'fd00::2')])
       allow(resolver).to receive(:timeouts=).and_return(nil)
       allow(Resolv::DNS).to receive(:open).and_yield(resolver)
 
@@ -64,7 +100,9 @@ describe EmailMxValidator do
 
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')])
       allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
+      allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
       allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '2.3.4.5')])
+      allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([double(address: 'fd00::2')])
       allow(resolver).to receive(:timeouts=).and_return(nil)
       allow(Resolv::DNS).to receive(:open).and_yield(resolver)