about summary refs log tree commit diff
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2023-01-13 12:26:34 +0100
committerGitHub <noreply@github.com>2023-01-13 12:26:34 +0100
commitafd0d424da4928b9e20a3c7a943f970252ed3a29 (patch)
tree98641aa5df145b1a025ff29940c2d8814f6b7b2f
parent932a22219ae99a285bdd0b69f02627f029327db3 (diff)
parentb52dc5f69d27ce2fcc84b3929840f2d8704ae48a (diff)
Merge pull request #2080 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
-rw-r--r--app/javascript/flavours/glitch/actions/dropdown_menu.js4
-rw-r--r--app/javascript/flavours/glitch/components/dropdown_menu.js102
-rw-r--r--app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js5
-rw-r--r--app/javascript/flavours/glitch/containers/dropdown_menu_container.js5
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/dropdown.js47
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js46
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js39
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/language_dropdown.js81
-rw-r--r--app/javascript/flavours/glitch/features/compose/components/search.js51
-rw-r--r--app/javascript/flavours/glitch/reducers/dropdown_menu.js4
-rw-r--r--app/javascript/flavours/glitch/styles/components/compose_form.scss2
-rw-r--r--app/javascript/flavours/glitch/styles/components/emoji.scss2
-rw-r--r--app/javascript/flavours/glitch/styles/components/index.scss85
-rw-r--r--app/javascript/flavours/glitch/styles/components/modal.scss1
-rw-r--r--app/javascript/flavours/glitch/styles/mastodon-light/diff.scss18
-rw-r--r--app/javascript/mastodon/actions/dropdown_menu.js4
-rw-r--r--app/javascript/mastodon/components/dropdown_menu.js102
-rw-r--r--app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js5
-rw-r--r--app/javascript/mastodon/containers/dropdown_menu_container.js5
-rw-r--r--app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js39
-rw-r--r--app/javascript/mastodon/features/compose/components/language_dropdown.js81
-rw-r--r--app/javascript/mastodon/features/compose/components/privacy_dropdown.js85
-rw-r--r--app/javascript/mastodon/features/compose/components/search.js51
-rw-r--r--app/javascript/mastodon/locales/af.json2
-rw-r--r--app/javascript/mastodon/locales/an.json2
-rw-r--r--app/javascript/mastodon/locales/ar.json6
-rw-r--r--app/javascript/mastodon/locales/ast.json2
-rw-r--r--app/javascript/mastodon/locales/be.json6
-rw-r--r--app/javascript/mastodon/locales/bg.json72
-rw-r--r--app/javascript/mastodon/locales/bn.json2
-rw-r--r--app/javascript/mastodon/locales/br.json2
-rw-r--r--app/javascript/mastodon/locales/ca.json32
-rw-r--r--app/javascript/mastodon/locales/ckb.json2
-rw-r--r--app/javascript/mastodon/locales/co.json2
-rw-r--r--app/javascript/mastodon/locales/cs.json6
-rw-r--r--app/javascript/mastodon/locales/cy.json4
-rw-r--r--app/javascript/mastodon/locales/da.json4
-rw-r--r--app/javascript/mastodon/locales/de.json4
-rw-r--r--app/javascript/mastodon/locales/el.json4
-rw-r--r--app/javascript/mastodon/locales/en-GB.json2
-rw-r--r--app/javascript/mastodon/locales/eo.json6
-rw-r--r--app/javascript/mastodon/locales/es-AR.json4
-rw-r--r--app/javascript/mastodon/locales/es-MX.json6
-rw-r--r--app/javascript/mastodon/locales/es.json6
-rw-r--r--app/javascript/mastodon/locales/et.json114
-rw-r--r--app/javascript/mastodon/locales/eu.json2
-rw-r--r--app/javascript/mastodon/locales/fa.json2
-rw-r--r--app/javascript/mastodon/locales/fi.json26
-rw-r--r--app/javascript/mastodon/locales/fo.json4
-rw-r--r--app/javascript/mastodon/locales/fr-QC.json6
-rw-r--r--app/javascript/mastodon/locales/fr.json6
-rw-r--r--app/javascript/mastodon/locales/fy.json4
-rw-r--r--app/javascript/mastodon/locales/ga.json14
-rw-r--r--app/javascript/mastodon/locales/gd.json2
-rw-r--r--app/javascript/mastodon/locales/gl.json4
-rw-r--r--app/javascript/mastodon/locales/he.json6
-rw-r--r--app/javascript/mastodon/locales/hi.json8
-rw-r--r--app/javascript/mastodon/locales/hr.json162
-rw-r--r--app/javascript/mastodon/locales/hu.json4
-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/is.json4
-rw-r--r--app/javascript/mastodon/locales/it.json4
-rw-r--r--app/javascript/mastodon/locales/ja.json4
-rw-r--r--app/javascript/mastodon/locales/ka.json2
-rw-r--r--app/javascript/mastodon/locales/kab.json2
-rw-r--r--app/javascript/mastodon/locales/kk.json2
-rw-r--r--app/javascript/mastodon/locales/kn.json2
-rw-r--r--app/javascript/mastodon/locales/ko.json4
-rw-r--r--app/javascript/mastodon/locales/ku.json2
-rw-r--r--app/javascript/mastodon/locales/kw.json2
-rw-r--r--app/javascript/mastodon/locales/lt.json2
-rw-r--r--app/javascript/mastodon/locales/lv.json4
-rw-r--r--app/javascript/mastodon/locales/mk.json2
-rw-r--r--app/javascript/mastodon/locales/ml.json2
-rw-r--r--app/javascript/mastodon/locales/mr.json2
-rw-r--r--app/javascript/mastodon/locales/ms.json2
-rw-r--r--app/javascript/mastodon/locales/nl.json4
-rw-r--r--app/javascript/mastodon/locales/nn.json10
-rw-r--r--app/javascript/mastodon/locales/no.json34
-rw-r--r--app/javascript/mastodon/locales/oc.json12
-rw-r--r--app/javascript/mastodon/locales/pa.json2
-rw-r--r--app/javascript/mastodon/locales/pl.json6
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json2
-rw-r--r--app/javascript/mastodon/locales/pt-PT.json234
-rw-r--r--app/javascript/mastodon/locales/ro.json2
-rw-r--r--app/javascript/mastodon/locales/ru.json6
-rw-r--r--app/javascript/mastodon/locales/sa.json2
-rw-r--r--app/javascript/mastodon/locales/sc.json2
-rw-r--r--app/javascript/mastodon/locales/sco.json2
-rw-r--r--app/javascript/mastodon/locales/si.json2
-rw-r--r--app/javascript/mastodon/locales/sk.json28
-rw-r--r--app/javascript/mastodon/locales/sl.json2
-rw-r--r--app/javascript/mastodon/locales/sq.json6
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json4
-rw-r--r--app/javascript/mastodon/locales/sr.json4
-rw-r--r--app/javascript/mastodon/locales/sv.json4
-rw-r--r--app/javascript/mastodon/locales/szl.json2
-rw-r--r--app/javascript/mastodon/locales/ta.json2
-rw-r--r--app/javascript/mastodon/locales/tai.json2
-rw-r--r--app/javascript/mastodon/locales/te.json2
-rw-r--r--app/javascript/mastodon/locales/th.json6
-rw-r--r--app/javascript/mastodon/locales/tr.json6
-rw-r--r--app/javascript/mastodon/locales/tt.json2
-rw-r--r--app/javascript/mastodon/locales/ug.json2
-rw-r--r--app/javascript/mastodon/locales/uk.json8
-rw-r--r--app/javascript/mastodon/locales/ur.json2
-rw-r--r--app/javascript/mastodon/locales/vi.json2
-rw-r--r--app/javascript/mastodon/locales/zgh.json2
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json4
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json2
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json4
-rw-r--r--app/javascript/mastodon/reducers/dropdown_menu.js4
-rw-r--r--app/javascript/styles/mastodon-light/diff.scss18
-rw-r--r--app/javascript/styles/mastodon/components.scss89
-rw-r--r--app/lib/request.rb14
-rw-r--r--app/lib/vacuum/feeds_vacuum.rb8
-rw-r--r--app/lib/vacuum/statuses_vacuum.rb5
-rw-r--r--app/models/status.rb31
-rw-r--r--app/services/batched_remove_status_service.rb2
-rw-r--r--app/services/verify_link_service.rb2
-rw-r--r--app/views/admin/trends/tags/index.html.haml2
-rw-r--r--config/locales/activerecord.bg.yml2
-rw-r--r--config/locales/activerecord.de.yml16
-rw-r--r--config/locales/activerecord.et.yml10
-rw-r--r--config/locales/bg.yml112
-rw-r--r--config/locales/ca.yml104
-rw-r--r--config/locales/de.yml8
-rw-r--r--config/locales/devise.bg.yml36
-rw-r--r--config/locales/devise.et.yml72
-rw-r--r--config/locales/doorkeeper.bg.yml8
-rw-r--r--config/locales/doorkeeper.ca.yml10
-rw-r--r--config/locales/doorkeeper.en.yml4
-rw-r--r--config/locales/doorkeeper.es.yml18
-rw-r--r--config/locales/doorkeeper.et.yml28
-rw-r--r--config/locales/et.yml136
-rw-r--r--config/locales/fi.yml20
-rw-r--r--config/locales/fr.yml2
-rw-r--r--config/locales/ga.yml7
-rw-r--r--config/locales/gl.yml4
-rw-r--r--config/locales/oc.yml2
-rw-r--r--config/locales/pt-PT.yml586
-rw-r--r--config/locales/ru.yml17
-rw-r--r--config/locales/simple_form.bg.yml30
-rw-r--r--config/locales/simple_form.ca.yml36
-rw-r--r--config/locales/simple_form.de.yml48
-rw-r--r--config/locales/simple_form.en-GB.yml37
-rw-r--r--config/locales/simple_form.et.yml42
-rw-r--r--config/locales/simple_form.fi.yml8
-rw-r--r--config/locales/simple_form.pt-PT.yml18
-rw-r--r--config/locales/simple_form.uk.yml2
-rw-r--r--config/locales/sk.yml7
-rw-r--r--lib/sanitize_ext/sanitize_config.rb2
-rw-r--r--lib/tasks/mastodon.rake61
-rw-r--r--package.json16
-rw-r--r--spec/lib/request_spec.rb5
-rw-r--r--spec/lib/sanitize_config_spec.rb4
-rw-r--r--spec/services/verify_link_service_spec.rb27
-rw-r--r--yarn.lock205
160 files changed, 1990 insertions, 1803 deletions
diff --git a/app/javascript/flavours/glitch/actions/dropdown_menu.js b/app/javascript/flavours/glitch/actions/dropdown_menu.js
index fb6e55612..023151d4b 100644
--- a/app/javascript/flavours/glitch/actions/dropdown_menu.js
+++ b/app/javascript/flavours/glitch/actions/dropdown_menu.js
@@ -1,8 +1,8 @@
 export const DROPDOWN_MENU_OPEN = 'DROPDOWN_MENU_OPEN';
 export const DROPDOWN_MENU_CLOSE = 'DROPDOWN_MENU_CLOSE';
 
-export function openDropdownMenu(id, placement, keyboard, scroll_key) {
-  return { type: DROPDOWN_MENU_OPEN, id, placement, keyboard, scroll_key };
+export function openDropdownMenu(id, keyboard, scroll_key) {
+  return { type: DROPDOWN_MENU_OPEN, id, keyboard, scroll_key };
 }
 
 export function closeDropdownMenu(id) {
diff --git a/app/javascript/flavours/glitch/components/dropdown_menu.js b/app/javascript/flavours/glitch/components/dropdown_menu.js
index 036e0b909..7c70f750f 100644
--- a/app/javascript/flavours/glitch/components/dropdown_menu.js
+++ b/app/javascript/flavours/glitch/components/dropdown_menu.js
@@ -2,9 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import IconButton from './icon_button';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from '../features/ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { supportsPassiveEvents } from 'detect-passive-events';
 import classNames from 'classnames';
 import { CircularProgress } from 'flavours/glitch/components/loading_indicator';
@@ -24,9 +22,6 @@ class DropdownMenu extends React.PureComponent {
     scrollable: PropTypes.bool,
     onClose: PropTypes.func.isRequired,
     style: PropTypes.object,
-    placement: PropTypes.string,
-    arrowOffsetLeft: PropTypes.string,
-    arrowOffsetTop: PropTypes.string,
     openedViaKeyboard: PropTypes.bool,
     renderItem: PropTypes.func,
     renderHeader: PropTypes.func,
@@ -35,11 +30,6 @@ class DropdownMenu extends React.PureComponent {
 
   static defaultProps = {
     style: {},
-    placement: 'bottom',
-  };
-
-  state = {
-    mounted: false,
   };
 
   handleDocumentClick = e => {
@@ -56,8 +46,6 @@ class DropdownMenu extends React.PureComponent {
     if (this.focusedItem && this.props.openedViaKeyboard) {
       this.focusedItem.focus({ preventScroll: true });
     }
-
-    this.setState({ mounted: true });
   }
 
   componentWillUnmount () {
@@ -139,40 +127,28 @@ class DropdownMenu extends React.PureComponent {
   }
 
   render () {
-    const { items, style, placement, arrowOffsetLeft, arrowOffsetTop, scrollable, renderHeader, loading } = this.props;
-    const { mounted } = this.state;
+    const { items, scrollable, renderHeader, loading } = this.props;
 
     let renderItem = this.props.renderItem || this.renderItem;
 
     return (
-      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div className={`dropdown-menu ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} ref={this.setRef}>
-            <div className={`dropdown-menu__arrow ${placement}`} style={{ left: arrowOffsetLeft, top: arrowOffsetTop }} />
-
-            <div className={classNames('dropdown-menu__container', { 'dropdown-menu__container--loading': loading })}>
-              {loading && (
-                <CircularProgress size={30} strokeWidth={3.5} />
-              )}
-
-              {!loading && renderHeader && (
-                <div className='dropdown-menu__container__header'>
-                  {renderHeader(items)}
-                </div>
-              )}
-
-              {!loading && (
-                <ul className={classNames('dropdown-menu__container__list', { 'dropdown-menu__container__list--scrollable': scrollable })}>
-                  {items.map((option, i) => renderItem(option, i, { onClick: this.handleClick, onKeyPress: this.handleItemKeyPress }))}
-                </ul>
-              )}
-            </div>
+      <div className={classNames('dropdown-menu__container', { 'dropdown-menu__container--loading': loading })} ref={this.setRef}>
+        {loading && (
+          <CircularProgress size={30} strokeWidth={3.5} />
+        )}
+
+        {!loading && renderHeader && (
+          <div className='dropdown-menu__container__header'>
+            {renderHeader(items)}
           </div>
         )}
-      </Motion>
+
+        {!loading && (
+          <ul className={classNames('dropdown-menu__container__list', { 'dropdown-menu__container__list--scrollable': scrollable })}>
+            {items.map((option, i) => renderItem(option, i, { onClick: this.handleClick, onKeyPress: this.handleItemKeyPress }))}
+          </ul>
+        )}
+      </div>
     );
   }
 
@@ -197,7 +173,6 @@ export default class Dropdown extends React.PureComponent {
     isUserTouching: PropTypes.func,
     onOpen: PropTypes.func.isRequired,
     onClose: PropTypes.func.isRequired,
-    dropdownPlacement: PropTypes.string,
     openDropdownId: PropTypes.number,
     openedViaKeyboard: PropTypes.bool,
     renderItem: PropTypes.func,
@@ -213,13 +188,11 @@ export default class Dropdown extends React.PureComponent {
     id: id++,
   };
 
-  handleClick = ({ target, type }) => {
+  handleClick = ({ type }) => {
     if (this.state.id === this.props.openDropdownId) {
       this.handleClose();
     } else {
-      const { top } = target.getBoundingClientRect();
-      const placement = top * 2 < innerHeight ? 'bottom' : 'top';
-      this.props.onOpen(this.state.id, this.handleItemClick, placement, type !== 'click');
+      this.props.onOpen(this.state.id, this.handleItemClick, type !== 'click');
     }
   }
 
@@ -303,7 +276,6 @@ export default class Dropdown extends React.PureComponent {
       disabled,
       loading,
       scrollable,
-      dropdownPlacement,
       openDropdownId,
       openedViaKeyboard,
       children,
@@ -314,7 +286,6 @@ export default class Dropdown extends React.PureComponent {
     const open = this.state.id === openDropdownId;
 
     const button = children ? React.cloneElement(React.Children.only(children), {
-      ref: this.setTargetRef,
       onClick: this.handleClick,
       onMouseDown: this.handleMouseDown,
       onKeyDown: this.handleButtonKeyDown,
@@ -326,7 +297,6 @@ export default class Dropdown extends React.PureComponent {
         active={open}
         disabled={disabled}
         size={size}
-        ref={this.setTargetRef}
         onClick={this.handleClick}
         onMouseDown={this.handleMouseDown}
         onKeyDown={this.handleButtonKeyDown}
@@ -336,19 +306,27 @@ export default class Dropdown extends React.PureComponent {
 
     return (
       <React.Fragment>
-        {button}
-
-        <Overlay show={open} placement={dropdownPlacement} target={this.findTarget}>
-          <DropdownMenu
-            items={items}
-            loading={loading}
-            scrollable={scrollable}
-            onClose={this.handleClose}
-            openedViaKeyboard={openedViaKeyboard}
-            renderItem={renderItem}
-            renderHeader={renderHeader}
-            onItemClick={this.handleItemClick}
-          />
+        <span ref={this.setTargetRef}>
+          {button}
+        </span>
+        <Overlay show={open} offset={[5, 5]} placement={'bottom'} flip target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, arrowProps, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation dropdown-menu ${placement}`}>
+                <div className={`dropdown-menu__arrow ${placement}`} {...arrowProps} />
+                <DropdownMenu
+                  items={items}
+                  loading={loading}
+                  scrollable={scrollable}
+                  onClose={this.handleClose}
+                  openedViaKeyboard={openedViaKeyboard}
+                  renderItem={renderItem}
+                  renderHeader={renderHeader}
+                  onItemClick={this.handleItemClick}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </React.Fragment>
     );
diff --git a/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js b/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js
index 8b73663d4..a1519757d 100644
--- a/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js
+++ b/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js
@@ -4,7 +4,6 @@ import { fetchHistory } from 'flavours/glitch/actions/history';
 import DropdownMenu from 'flavours/glitch/components/dropdown_menu';
 
 const mapStateToProps = (state, { statusId }) => ({
-  dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),
   openDropdownId: state.getIn(['dropdown_menu', 'openId']),
   openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),
   items: state.getIn(['history', statusId, 'items']),
@@ -13,9 +12,9 @@ const mapStateToProps = (state, { statusId }) => ({
 
 const mapDispatchToProps = (dispatch, { statusId }) => ({
 
-  onOpen (id, onItemClick, dropdownPlacement, keyboard) {
+  onOpen (id, onItemClick, keyboard) {
     dispatch(fetchHistory(statusId));
-    dispatch(openDropdownMenu(id, dropdownPlacement, keyboard));
+    dispatch(openDropdownMenu(id, keyboard));
   },
 
   onClose (id) {
diff --git a/app/javascript/flavours/glitch/containers/dropdown_menu_container.js b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js
index b2dff63db..43ce8ca63 100644
--- a/app/javascript/flavours/glitch/containers/dropdown_menu_container.js
+++ b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js
@@ -5,18 +5,17 @@ import DropdownMenu from 'flavours/glitch/components/dropdown_menu';
 import { isUserTouching } from '../is_mobile';
 
 const mapStateToProps = state => ({
-  dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),
   openDropdownId: state.getIn(['dropdown_menu', 'openId']),
   openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),
 });
 
 const mapDispatchToProps = (dispatch, { status, items, scrollKey }) => ({
-  onOpen(id, onItemClick, dropdownPlacement, keyboard) {
+  onOpen(id, onItemClick, keyboard) {
     dispatch(isUserTouching() ? openModal('ACTIONS', {
       status,
       actions: items,
       onClick: onItemClick,
-    }) : openDropdownMenu(id, dropdownPlacement, keyboard, scrollKey));
+    }) : openDropdownMenu(id, keyboard, scrollKey));
   },
 
   onClose(id) {
diff --git a/app/javascript/flavours/glitch/features/compose/components/dropdown.js b/app/javascript/flavours/glitch/features/compose/components/dropdown.js
index 3de198c45..d98b311d9 100644
--- a/app/javascript/flavours/glitch/features/compose/components/dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/dropdown.js
@@ -2,7 +2,7 @@
 import classNames from 'classnames';
 import PropTypes from 'prop-types';
 import React from 'react';
-import Overlay from 'react-overlays/lib/Overlay';
+import Overlay from 'react-overlays/Overlay';
 
 //  Components.
 import IconButton from 'flavours/glitch/components/icon_button';
@@ -45,7 +45,7 @@ export default class ComposerOptionsDropdown extends React.PureComponent {
   };
 
   //  Toggles opening and closing the dropdown.
-  handleToggle = ({ target, type }) => {
+  handleToggle = ({ type }) => {
     const { onModalOpen } = this.props;
     const { open } = this.state;
 
@@ -59,11 +59,9 @@ export default class ComposerOptionsDropdown extends React.PureComponent {
         }
       }
     } else {
-      const { top } = target.getBoundingClientRect();
       if (this.state.open && this.activeElement) {
         this.activeElement.focus({ preventScroll: true });
       }
-      this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
       this.setState({ open: !this.state.open, openedViaKeyboard: type !== 'click' });
     }
   }
@@ -158,6 +156,18 @@ export default class ComposerOptionsDropdown extends React.PureComponent {
     };
   }
 
+  setTargetRef = c => {
+    this.target = c;
+  }
+
+  findTarget = () => {
+    return this.target;
+  }
+
+  handleOverlayEnter = (state) => {
+    this.setState({ placement: state.placement });
+  }
+
   //  Rendering.
   render () {
     const {
@@ -179,6 +189,7 @@ export default class ComposerOptionsDropdown extends React.PureComponent {
       <div
         className={classNames('privacy-dropdown', placement, { active: open })}
         onKeyDown={this.handleKeyDown}
+        ref={this.setTargetRef}
       >
         <div className={classNames('privacy-dropdown__value', { active })}>
           <IconButton
@@ -204,18 +215,26 @@ export default class ComposerOptionsDropdown extends React.PureComponent {
           containerPadding={20}
           placement={placement}
           show={open}
-          target={this}
+          flip
+          target={this.findTarget}
           container={container}
+          popperConfig={{ strategy: 'fixed', onFirstUpdate: this.handleOverlayEnter }}
         >
-          <DropdownMenu
-            items={items}
-            renderItemContents={renderItemContents}
-            onChange={onChange}
-            onClose={this.handleClose}
-            value={value}
-            openedViaKeyboard={this.state.openedViaKeyboard}
-            closeOnChange={closeOnChange}
-          />
+          {({ props, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation privacy-dropdown__dropdown ${placement}`}>
+                <DropdownMenu
+                  items={items}
+                  renderItemContents={renderItemContents}
+                  onChange={onChange}
+                  onClose={this.handleClose}
+                  value={value}
+                  openedViaKeyboard={this.state.openedViaKeyboard}
+                  closeOnChange={closeOnChange}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js b/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js
index 09e8fc35a..c4895dfd0 100644
--- a/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js
+++ b/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js
@@ -1,7 +1,6 @@
 //  Package imports.
 import PropTypes from 'prop-types';
 import React from 'react';
-import spring from 'react-motion/lib/spring';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import classNames from 'classnames';
 
@@ -10,15 +9,8 @@ import Icon from 'flavours/glitch/components/icon';
 
 //  Utils.
 import { withPassive } from 'flavours/glitch/utils/dom_helpers';
-import Motion from '../../ui/util/optional_motion';
 import { assignHandlers } from 'flavours/glitch/utils/react_helpers';
 
-//  The spring to use with our motion.
-const springMotion = spring(1, {
-  damping: 35,
-  stiffness: 400,
-});
-
 //  The component.
 export default class ComposerOptionsDropdownContent extends React.PureComponent {
 
@@ -44,7 +36,6 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent
   };
 
   state = {
-    mounted: false,
     value: this.props.openedViaKeyboard ? this.props.items[0].name : undefined,
   };
 
@@ -56,7 +47,7 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent
   }
 
   //  Stores our node in `this.node`.
-  handleRef = (node) => {
+  setRef = (node) => {
     this.node = node;
   }
 
@@ -69,7 +60,6 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent
     } else {
       this.node.firstChild.focus({ preventScroll: true });
     }
-    this.setState({ mounted: true });
   }
 
   //  On unmounting, we remove our listeners.
@@ -191,7 +181,6 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent
 
   //  Rendering.
   render () {
-    const { mounted } = this.state;
     const {
       items,
       onChange,
@@ -201,36 +190,9 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent
 
     //  The result.
     return (
-      <Motion
-        defaultStyle={{
-          opacity: 0,
-          scaleX: 0.85,
-          scaleY: 0.75,
-        }}
-        style={{
-          opacity: springMotion,
-          scaleX: springMotion,
-          scaleY: springMotion,
-        }}
-      >
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div
-            className='privacy-dropdown__dropdown'
-            ref={this.handleRef}
-            role='listbox'
-            style={{
-              ...style,
-              opacity: opacity,
-              transform: mounted ? `scale(${scaleX}, ${scaleY})` : null,
-            }}
-          >
-            {!!items && items.map((item, i) => this.renderItem(item, i))}
-          </div>
-        )}
-      </Motion>
+      <div style={{ ...style }} role='listbox' ref={this.setRef}>
+        {!!items && items.map((item, i) => this.renderItem(item, i))}
+      </div>
     );
   }
 
diff --git a/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
index 546d398a0..38c735551 100644
--- a/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
@@ -2,7 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';
-import Overlay from 'react-overlays/lib/Overlay';
+import Overlay from 'react-overlays/Overlay';
 import classNames from 'classnames';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import { supportsPassiveEvents } from 'detect-passive-events';
@@ -155,9 +155,6 @@ class EmojiPickerMenu extends React.PureComponent {
     onClose: PropTypes.func.isRequired,
     onPick: PropTypes.func.isRequired,
     style: PropTypes.object,
-    placement: PropTypes.string,
-    arrowOffsetLeft: PropTypes.string,
-    arrowOffsetTop: PropTypes.string,
     intl: PropTypes.object.isRequired,
     skinTone: PropTypes.number.isRequired,
     onSkinTone: PropTypes.func.isRequired,
@@ -326,14 +323,13 @@ class EmojiPickerDropdown extends React.PureComponent {
   state = {
     active: false,
     loading: false,
-    placement: null,
   };
 
   setRef = (c) => {
     this.dropdown = c;
   }
 
-  onShowDropdown = ({ target }) => {
+  onShowDropdown = () => {
     this.setState({ active: true });
 
     if (!EmojiPicker) {
@@ -348,9 +344,6 @@ class EmojiPickerDropdown extends React.PureComponent {
         this.setState({ loading: false, active: false });
       });
     }
-
-    const { top } = target.getBoundingClientRect();
-    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
   }
 
   onHideDropdown = () => {
@@ -384,7 +377,7 @@ class EmojiPickerDropdown extends React.PureComponent {
   render () {
     const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props;
     const title = intl.formatMessage(messages.emoji);
-    const { active, loading, placement } = this.state;
+    const { active, loading } = this.state;
 
     return (
       <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>
@@ -396,16 +389,22 @@ class EmojiPickerDropdown extends React.PureComponent {
           />}
         </div>
 
-        <Overlay show={active} placement={placement} target={this.findTarget}>
-          <EmojiPickerMenu
-            custom_emojis={this.props.custom_emojis}
-            loading={loading}
-            onClose={this.onHideDropdown}
-            onPick={onPickEmoji}
-            onSkinTone={onSkinTone}
-            skinTone={skinTone}
-            frequentlyUsedEmojis={frequentlyUsedEmojis}
-          />
+        <Overlay show={active} placement={'bottom'} target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, placement })=> (
+            <div {...props} style={{ ...props.style, width: 299 }}>
+              <div className={`dropdown-animation ${placement}`}>
+                <EmojiPickerMenu
+                  custom_emojis={this.props.custom_emojis}
+                  loading={loading}
+                  onClose={this.onHideDropdown}
+                  onPick={onPickEmoji}
+                  onSkinTone={onSkinTone}
+                  skinTone={skinTone}
+                  frequentlyUsedEmojis={frequentlyUsedEmojis}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js
index a3256aa9b..3a1fa0226 100644
--- a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js
@@ -2,9 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { injectIntl, defineMessages } from 'react-intl';
 import TextIconButton from './text_icon_button';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from 'flavours/glitch/features/ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { supportsPassiveEvents } from 'detect-passive-events';
 import classNames from 'classnames';
 import { languages as preloadedLanguages } from 'flavours/glitch/initial_state';
@@ -22,10 +20,8 @@ const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
 class LanguageDropdownMenu extends React.PureComponent {
 
   static propTypes = {
-    style: PropTypes.object,
     value: PropTypes.string.isRequired,
     frequentlyUsedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,
-    placement: PropTypes.string.isRequired,
     onClose: PropTypes.func.isRequired,
     onChange: PropTypes.func.isRequired,
     languages: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
@@ -37,7 +33,6 @@ class LanguageDropdownMenu extends React.PureComponent {
   };
 
   state = {
-    mounted: false,
     searchValue: '',
   };
 
@@ -50,7 +45,6 @@ class LanguageDropdownMenu extends React.PureComponent {
   componentDidMount () {
     document.addEventListener('click', this.handleDocumentClick, false);
     document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);
-    this.setState({ mounted: true });
 
     // Because of https://github.com/react-bootstrap/react-bootstrap/issues/2614 we need
     // to wait for a frame before focusing
@@ -222,29 +216,22 @@ class LanguageDropdownMenu extends React.PureComponent {
   }
 
   render () {
-    const { style, placement, intl } = this.props;
-    const { mounted, searchValue } = this.state;
+    const { intl } = this.props;
+    const { searchValue } = this.state;
     const isSearching = searchValue !== '';
     const results = this.search();
 
     return (
-      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div className={`language-dropdown__dropdown ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} ref={this.setRef}>
-            <div className='emoji-mart-search'>
-              <input type='search' value={searchValue} onChange={this.handleSearchChange} onKeyDown={this.handleSearchKeyDown} placeholder={intl.formatMessage(messages.search)} />
-              <button className='emoji-mart-search-icon' disabled={!isSearching} aria-label={intl.formatMessage(messages.clear)} onClick={this.handleClear}>{!isSearching ? loupeIcon : deleteIcon}</button>
-            </div>
+      <div ref={this.setRef}>
+        <div className='emoji-mart-search'>
+          <input type='search' value={searchValue} onChange={this.handleSearchChange} onKeyDown={this.handleSearchKeyDown} placeholder={intl.formatMessage(messages.search)} />
+          <button type='button' className='emoji-mart-search-icon' disabled={!isSearching} aria-label={intl.formatMessage(messages.clear)} onClick={this.handleClear}>{!isSearching ? loupeIcon : deleteIcon}</button>
+        </div>
 
-            <div className='language-dropdown__dropdown__results emoji-mart-scroll' role='listbox' ref={this.setListRef}>
-              {results.map(this.renderItem)}
-            </div>
-          </div>
-        )}
-      </Motion>
+        <div className='language-dropdown__dropdown__results emoji-mart-scroll' role='listbox' ref={this.setListRef}>
+          {results.map(this.renderItem)}
+        </div>
+      </div>
     );
   }
 
@@ -266,14 +253,11 @@ class LanguageDropdown extends React.PureComponent {
     placement: 'bottom',
   };
 
-  handleToggle = ({ target }) => {
-    const { top } = target.getBoundingClientRect();
-
+  handleToggle = () => {
     if (this.state.open && this.activeElement) {
       this.activeElement.focus({ preventScroll: true });
     }
 
-    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
     this.setState({ open: !this.state.open });
   }
 
@@ -293,13 +277,25 @@ class LanguageDropdown extends React.PureComponent {
     onChange(value);
   }
 
+  setTargetRef = c => {
+    this.target = c;
+  }
+
+  findTarget = () => {
+    return this.target;
+  }
+
+  handleOverlayEnter = (state) => {
+    this.setState({ placement: state.placement });
+  }
+
   render () {
     const { value, intl, frequentlyUsedLanguages } = this.props;
     const { open, placement } = this.state;
 
     return (
-      <div className={classNames('privacy-dropdown', { active: open })}>
-        <div className='privacy-dropdown__value'>
+      <div className={classNames('privacy-dropdown', placement, { active: open })}>
+        <div className='privacy-dropdown__value' ref={this.setTargetRef} >
           <TextIconButton
             className='privacy-dropdown__value-icon'
             label={value && value.toUpperCase()}
@@ -309,15 +305,20 @@ class LanguageDropdown extends React.PureComponent {
           />
         </div>
 
-        <Overlay show={open} placement={placement} target={this}>
-          <LanguageDropdownMenu
-            value={value}
-            frequentlyUsedLanguages={frequentlyUsedLanguages}
-            onClose={this.handleClose}
-            onChange={this.handleChange}
-            placement={placement}
-            intl={intl}
-          />
+        <Overlay show={open} placement={'bottom'} flip target={this.findTarget} popperConfig={{ strategy: 'fixed', onFirstUpdate: this.handleOverlayEnter }}>
+          {({ props, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation language-dropdown__dropdown ${placement}`} >
+                <LanguageDropdownMenu
+                  value={value}
+                  frequentlyUsedLanguages={frequentlyUsedLanguages}
+                  onClose={this.handleClose}
+                  onChange={this.handleChange}
+                  intl={intl}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/flavours/glitch/features/compose/components/search.js b/app/javascript/flavours/glitch/features/compose/components/search.js
index 9f90a767d..e5874de75 100644
--- a/app/javascript/flavours/glitch/features/compose/components/search.js
+++ b/app/javascript/flavours/glitch/features/compose/components/search.js
@@ -3,13 +3,12 @@ import classNames from 'classnames';
 import PropTypes from 'prop-types';
 import React from 'react';
 import { connect } from 'react-redux';
-import spring from 'react-motion/lib/spring';
 import {
   injectIntl,
   FormattedMessage,
   defineMessages,
 } from 'react-intl';
-import Overlay from 'react-overlays/lib/Overlay';
+import Overlay from 'react-overlays/Overlay';
 
 //  Components.
 import Icon from 'flavours/glitch/components/icon';
@@ -17,7 +16,6 @@ import Icon from 'flavours/glitch/components/icon';
 //  Utils.
 import { focusRoot } from 'flavours/glitch/utils/dom_helpers';
 import { searchEnabled } from 'flavours/glitch/initial_state';
-import Motion from '../../ui/util/optional_motion';
 
 const messages = defineMessages({
   placeholder: { id: 'search.placeholder', defaultMessage: 'Search' },
@@ -26,31 +24,20 @@ const messages = defineMessages({
 
 class SearchPopout extends React.PureComponent {
 
-  static propTypes = {
-    style: PropTypes.object,
-  };
-
   render () {
-    const { style } = this.props;
     const extraInformation = searchEnabled ? <FormattedMessage id='search_popout.tips.full_text' defaultMessage='Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.' /> : <FormattedMessage id='search_popout.tips.text' defaultMessage='Simple text returns matching display names, usernames and hashtags' />;
     return (
-      <div style={{ ...style, position: 'absolute', width: 285, zIndex: 2 }}>
-        <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-          {({ opacity, scaleX, scaleY }) => (
-            <div className='search-popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>
-              <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>
-
-              <ul>
-                <li><em>#example</em> <FormattedMessage id='search_popout.tips.hashtag' defaultMessage='hashtag' /></li>
-                <li><em>@username@domain</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
-                <li><em>URL</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
-                <li><em>URL</em> <FormattedMessage id='search_popout.tips.status' defaultMessage='status' /></li>
-              </ul>
-
-              {extraInformation}
-            </div>
-          )}
-        </Motion>
+      <div className='search-popout'>
+        <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>
+
+        <ul>
+          <li><em>#example</em> <FormattedMessage id='search_popout.tips.hashtag' defaultMessage='hashtag' /></li>
+          <li><em>@username@domain</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
+          <li><em>URL</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
+          <li><em>URL</em> <FormattedMessage id='search_popout.tips.status' defaultMessage='status' /></li>
+        </ul>
+
+        {extraInformation}
       </div>
     );
   }
@@ -136,6 +123,10 @@ class Search extends React.PureComponent {
     }
   }
 
+  findTarget = () => {
+    return this.searchForm;
+  }
+
   render () {
     const { intl, value, submitted } = this.props;
     const { expanded } = this.state;
@@ -161,8 +152,14 @@ class Search extends React.PureComponent {
           <Icon id='search' className={hasValue ? '' : 'active'} />
           <Icon id='times-circle' className={hasValue ? 'active' : ''} />
         </div>
-        <Overlay show={expanded && !hasValue} placement='bottom' target={this} container={this}>
-          <SearchPopout />
+        <Overlay show={expanded && !hasValue} placement='bottom' target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, placement }) => (
+            <div {...props} style={{ ...props.style, width: 285, zIndex: 2 }}>
+              <div className={`dropdown-animation ${placement}`}>
+                <SearchPopout />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/flavours/glitch/reducers/dropdown_menu.js b/app/javascript/flavours/glitch/reducers/dropdown_menu.js
index a78a11acc..51bf9375b 100644
--- a/app/javascript/flavours/glitch/reducers/dropdown_menu.js
+++ b/app/javascript/flavours/glitch/reducers/dropdown_menu.js
@@ -4,12 +4,12 @@ import {
   DROPDOWN_MENU_CLOSE,
 } from '../actions/dropdown_menu';
 
-const initialState = Immutable.Map({ openId: null, placement: null, keyboard: false, scroll_key: null });
+const initialState = Immutable.Map({ openId: null, keyboard: false, scroll_key: null });
 
 export default function dropdownMenu(state = initialState, action) {
   switch (action.type) {
   case DROPDOWN_MENU_OPEN:
-    return state.merge({ openId: action.id, placement: action.placement, keyboard: action.keyboard, scroll_key: action.scroll_key });
+    return state.merge({ openId: action.id, keyboard: action.keyboard, scroll_key: action.scroll_key });
   case DROPDOWN_MENU_CLOSE:
     return state.get('openId') === action.id ? state.set('openId', null).set('scroll_key', null) : state;
   default:
diff --git a/app/javascript/flavours/glitch/styles/components/compose_form.scss b/app/javascript/flavours/glitch/styles/components/compose_form.scss
index 72d3aad1d..aa2d52ed0 100644
--- a/app/javascript/flavours/glitch/styles/components/compose_form.scss
+++ b/app/javascript/flavours/glitch/styles/components/compose_form.scss
@@ -586,7 +586,6 @@
 }
 
 .privacy-dropdown__dropdown {
-  position: absolute;
   border-radius: 4px;
   box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
   background: $simple-background-color;
@@ -653,7 +652,6 @@
 
 .language-dropdown {
   &__dropdown {
-    position: absolute;
     background: $simple-background-color;
     box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
     border-radius: 4px;
diff --git a/app/javascript/flavours/glitch/styles/components/emoji.scss b/app/javascript/flavours/glitch/styles/components/emoji.scss
index 9dfee346a..c037e03f9 100644
--- a/app/javascript/flavours/glitch/styles/components/emoji.scss
+++ b/app/javascript/flavours/glitch/styles/components/emoji.scss
@@ -13,7 +13,7 @@
 
 .emoji-picker-dropdown__menu {
   background: $simple-background-color;
-  position: absolute;
+  position: relative;
   box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4);
   border-radius: 4px;
   margin-top: 5px;
diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss
index b7a54cd2b..d50316366 100644
--- a/app/javascript/flavours/glitch/styles/components/index.scss
+++ b/app/javascript/flavours/glitch/styles/components/index.scss
@@ -346,9 +346,8 @@
   }
 }
 
-.dropdown-menu {
-  position: absolute;
-  transform-origin: 50% 0;
+body > [data-popper-placement] {
+  z-index: 3;
 }
 
 .invisible {
@@ -532,6 +531,42 @@
   }
 }
 
+.dropdown-animation {
+  animation: dropdown 300ms cubic-bezier(0.1, 0.7, 0.1, 1);
+
+  @keyframes dropdown {
+    from {
+      opacity: 0;
+      transform: scaleX(0.85) scaleY(0.75);
+    }
+
+    to {
+      opacity: 1;
+      transform: scaleX(1) scaleY(1);
+    }
+  }
+
+  &.top {
+    transform-origin: bottom;
+  }
+
+  &.right {
+    transform-origin: left;
+  }
+
+  &.bottom {
+    transform-origin: top;
+  }
+
+  &.left {
+    transform-origin: right;
+  }
+
+  .reduce-motion & {
+    animation: none;
+  }
+}
+
 .dropdown {
   display: inline-block;
 }
@@ -600,36 +635,42 @@
 
 .dropdown-menu__arrow {
   position: absolute;
-  width: 0;
-  height: 0;
-  border: 0 solid transparent;
 
-  &.left {
-    right: -5px;
-    margin-top: -5px;
-    border-width: 5px 0 5px 5px;
-    border-left-color: $ui-secondary-color;
+  &::before {
+    content: '';
+    display: block;
+    width: 14px;
+    height: 5px;
+    background-color: $ui-secondary-color;
+    mask-image: url("data:image/svg+xml;utf8,<svg width='14' height='5' xmlns='http://www.w3.org/2000/svg'><path d='M7 0L0 5h14L7 0z' fill='white'/></svg>");
   }
 
   &.top {
     bottom: -5px;
-    margin-left: -7px;
-    border-width: 5px 7px 0;
-    border-top-color: $ui-secondary-color;
+
+    &::before {
+      transform: rotate(180deg);
+    }
+  }
+
+  &.right {
+    left: -9px;
+
+    &::before {
+      transform: rotate(-90deg);
+    }
   }
 
   &.bottom {
     top: -5px;
-    margin-left: -7px;
-    border-width: 0 7px 5px;
-    border-bottom-color: $ui-secondary-color;
   }
 
-  &.right {
-    left: -5px;
-    margin-top: -5px;
-    border-width: 5px 5px 5px 0;
-    border-right-color: $ui-secondary-color;
+  &.left {
+    right: -9px;
+
+    &::before {
+      transform: rotate(90deg);
+    }
   }
 }
 
diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss
index 8ba8bec10..972e01e7d 100644
--- a/app/javascript/flavours/glitch/styles/components/modal.scss
+++ b/app/javascript/flavours/glitch/styles/components/modal.scss
@@ -37,7 +37,6 @@
 .modal-root__modal {
   pointer-events: auto;
   display: flex;
-  z-index: 9999;
 }
 
 .media-modal__zoom-button {
diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
index 9fc1aed2a..2ec2da833 100644
--- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
+++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
@@ -285,22 +285,8 @@ html {
 .dropdown-menu {
   background: $white;
 
-  &__arrow {
-    &.left {
-      border-left-color: $white;
-    }
-
-    &.top {
-      border-top-color: $white;
-    }
-
-    &.bottom {
-      border-bottom-color: $white;
-    }
-
-    &.right {
-      border-right-color: $white;
-    }
+  &__arrow::before {
+    background-color: $white;
   }
 
   &__item {
diff --git a/app/javascript/mastodon/actions/dropdown_menu.js b/app/javascript/mastodon/actions/dropdown_menu.js
index fb6e55612..023151d4b 100644
--- a/app/javascript/mastodon/actions/dropdown_menu.js
+++ b/app/javascript/mastodon/actions/dropdown_menu.js
@@ -1,8 +1,8 @@
 export const DROPDOWN_MENU_OPEN = 'DROPDOWN_MENU_OPEN';
 export const DROPDOWN_MENU_CLOSE = 'DROPDOWN_MENU_CLOSE';
 
-export function openDropdownMenu(id, placement, keyboard, scroll_key) {
-  return { type: DROPDOWN_MENU_OPEN, id, placement, keyboard, scroll_key };
+export function openDropdownMenu(id, keyboard, scroll_key) {
+  return { type: DROPDOWN_MENU_OPEN, id, keyboard, scroll_key };
 }
 
 export function closeDropdownMenu(id) {
diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js
index 4b4ad8355..5897aada8 100644
--- a/app/javascript/mastodon/components/dropdown_menu.js
+++ b/app/javascript/mastodon/components/dropdown_menu.js
@@ -2,9 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import IconButton from './icon_button';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from '../features/ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { supportsPassiveEvents } from 'detect-passive-events';
 import classNames from 'classnames';
 import { CircularProgress } from 'mastodon/components/loading_indicator';
@@ -24,9 +22,6 @@ class DropdownMenu extends React.PureComponent {
     scrollable: PropTypes.bool,
     onClose: PropTypes.func.isRequired,
     style: PropTypes.object,
-    placement: PropTypes.string,
-    arrowOffsetLeft: PropTypes.string,
-    arrowOffsetTop: PropTypes.string,
     openedViaKeyboard: PropTypes.bool,
     renderItem: PropTypes.func,
     renderHeader: PropTypes.func,
@@ -35,11 +30,6 @@ class DropdownMenu extends React.PureComponent {
 
   static defaultProps = {
     style: {},
-    placement: 'bottom',
-  };
-
-  state = {
-    mounted: false,
   };
 
   handleDocumentClick = e => {
@@ -56,8 +46,6 @@ class DropdownMenu extends React.PureComponent {
     if (this.focusedItem && this.props.openedViaKeyboard) {
       this.focusedItem.focus({ preventScroll: true });
     }
-
-    this.setState({ mounted: true });
   }
 
   componentWillUnmount () {
@@ -139,40 +127,28 @@ class DropdownMenu extends React.PureComponent {
   }
 
   render () {
-    const { items, style, placement, arrowOffsetLeft, arrowOffsetTop, scrollable, renderHeader, loading } = this.props;
-    const { mounted } = this.state;
+    const { items, scrollable, renderHeader, loading } = this.props;
 
     let renderItem = this.props.renderItem || this.renderItem;
 
     return (
-      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div className={`dropdown-menu ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} ref={this.setRef}>
-            <div className={`dropdown-menu__arrow ${placement}`} style={{ left: arrowOffsetLeft, top: arrowOffsetTop }} />
-
-            <div className={classNames('dropdown-menu__container', { 'dropdown-menu__container--loading': loading })}>
-              {loading && (
-                <CircularProgress size={30} strokeWidth={3.5} />
-              )}
-
-              {!loading && renderHeader && (
-                <div className='dropdown-menu__container__header'>
-                  {renderHeader(items)}
-                </div>
-              )}
-
-              {!loading && (
-                <ul className={classNames('dropdown-menu__container__list', { 'dropdown-menu__container__list--scrollable': scrollable })}>
-                  {items.map((option, i) => renderItem(option, i, { onClick: this.handleClick, onKeyPress: this.handleItemKeyPress }))}
-                </ul>
-              )}
-            </div>
+      <div className={classNames('dropdown-menu__container', { 'dropdown-menu__container--loading': loading })} ref={this.setRef}>
+        {loading && (
+          <CircularProgress size={30} strokeWidth={3.5} />
+        )}
+
+        {!loading && renderHeader && (
+          <div className='dropdown-menu__container__header'>
+            {renderHeader(items)}
           </div>
         )}
-      </Motion>
+
+        {!loading && (
+          <ul className={classNames('dropdown-menu__container__list', { 'dropdown-menu__container__list--scrollable': scrollable })}>
+            {items.map((option, i) => renderItem(option, i, { onClick: this.handleClick, onKeyPress: this.handleItemKeyPress }))}
+          </ul>
+        )}
+      </div>
     );
   }
 
@@ -197,7 +173,6 @@ export default class Dropdown extends React.PureComponent {
     isUserTouching: PropTypes.func,
     onOpen: PropTypes.func.isRequired,
     onClose: PropTypes.func.isRequired,
-    dropdownPlacement: PropTypes.string,
     openDropdownId: PropTypes.number,
     openedViaKeyboard: PropTypes.bool,
     renderItem: PropTypes.func,
@@ -213,13 +188,11 @@ export default class Dropdown extends React.PureComponent {
     id: id++,
   };
 
-  handleClick = ({ target, type }) => {
+  handleClick = ({ type }) => {
     if (this.state.id === this.props.openDropdownId) {
       this.handleClose();
     } else {
-      const { top } = target.getBoundingClientRect();
-      const placement = top * 2 < innerHeight ? 'bottom' : 'top';
-      this.props.onOpen(this.state.id, this.handleItemClick, placement, type !== 'click');
+      this.props.onOpen(this.state.id, this.handleItemClick, type !== 'click');
     }
   }
 
@@ -303,7 +276,6 @@ export default class Dropdown extends React.PureComponent {
       disabled,
       loading,
       scrollable,
-      dropdownPlacement,
       openDropdownId,
       openedViaKeyboard,
       children,
@@ -314,7 +286,6 @@ export default class Dropdown extends React.PureComponent {
     const open = this.state.id === openDropdownId;
 
     const button = children ? React.cloneElement(React.Children.only(children), {
-      ref: this.setTargetRef,
       onClick: this.handleClick,
       onMouseDown: this.handleMouseDown,
       onKeyDown: this.handleButtonKeyDown,
@@ -326,7 +297,6 @@ export default class Dropdown extends React.PureComponent {
         active={open}
         disabled={disabled}
         size={size}
-        ref={this.setTargetRef}
         onClick={this.handleClick}
         onMouseDown={this.handleMouseDown}
         onKeyDown={this.handleButtonKeyDown}
@@ -336,19 +306,27 @@ export default class Dropdown extends React.PureComponent {
 
     return (
       <React.Fragment>
-        {button}
-
-        <Overlay show={open} placement={dropdownPlacement} target={this.findTarget}>
-          <DropdownMenu
-            items={items}
-            loading={loading}
-            scrollable={scrollable}
-            onClose={this.handleClose}
-            openedViaKeyboard={openedViaKeyboard}
-            renderItem={renderItem}
-            renderHeader={renderHeader}
-            onItemClick={this.handleItemClick}
-          />
+        <span ref={this.setTargetRef}>
+          {button}
+        </span>
+        <Overlay show={open} offset={[5, 5]} placement={'bottom'} flip target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, arrowProps, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation dropdown-menu ${placement}`}>
+                <div className={`dropdown-menu__arrow ${placement}`} {...arrowProps} />
+                <DropdownMenu
+                  items={items}
+                  loading={loading}
+                  scrollable={scrollable}
+                  onClose={this.handleClose}
+                  openedViaKeyboard={openedViaKeyboard}
+                  renderItem={renderItem}
+                  renderHeader={renderHeader}
+                  onItemClick={this.handleItemClick}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </React.Fragment>
     );
diff --git a/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js b/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js
index e30c18372..16fe77a73 100644
--- a/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js
+++ b/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js
@@ -4,7 +4,6 @@ import { fetchHistory } from 'mastodon/actions/history';
 import DropdownMenu from 'mastodon/components/dropdown_menu';
 
 const mapStateToProps = (state, { statusId }) => ({
-  dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),
   openDropdownId: state.getIn(['dropdown_menu', 'openId']),
   openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),
   items: state.getIn(['history', statusId, 'items']),
@@ -13,9 +12,9 @@ const mapStateToProps = (state, { statusId }) => ({
 
 const mapDispatchToProps = (dispatch, { statusId }) => ({
 
-  onOpen (id, onItemClick, dropdownPlacement, keyboard) {
+  onOpen (id, onItemClick, keyboard) {
     dispatch(fetchHistory(statusId));
-    dispatch(openDropdownMenu(id, dropdownPlacement, keyboard));
+    dispatch(openDropdownMenu(id, keyboard));
   },
 
   onClose (id) {
diff --git a/app/javascript/mastodon/containers/dropdown_menu_container.js b/app/javascript/mastodon/containers/dropdown_menu_container.js
index c45bab40b..bedd1c63f 100644
--- a/app/javascript/mastodon/containers/dropdown_menu_container.js
+++ b/app/javascript/mastodon/containers/dropdown_menu_container.js
@@ -6,13 +6,12 @@ import DropdownMenu from '../components/dropdown_menu';
 import { isUserTouching } from '../is_mobile';
 
 const mapStateToProps = state => ({
-  dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),
   openDropdownId: state.getIn(['dropdown_menu', 'openId']),
   openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),
 });
 
 const mapDispatchToProps = (dispatch, { status, items, scrollKey }) => ({
-  onOpen(id, onItemClick, dropdownPlacement, keyboard) {
+  onOpen(id, onItemClick, keyboard) {
     if (status) {
       dispatch(fetchRelationships([status.getIn(['account', 'id'])]));
     }
@@ -21,7 +20,7 @@ const mapDispatchToProps = (dispatch, { status, items, scrollKey }) => ({
       status,
       actions: items,
       onClick: onItemClick,
-    }) : openDropdownMenu(id, dropdownPlacement, keyboard, scrollKey));
+    }) : openDropdownMenu(id, keyboard, scrollKey));
   },
 
   onClose(id) {
diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js
index 8cca8af2a..76c9cda81 100644
--- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js
+++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js
@@ -2,7 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';
-import Overlay from 'react-overlays/lib/Overlay';
+import Overlay from 'react-overlays/Overlay';
 import classNames from 'classnames';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import { supportsPassiveEvents } from 'detect-passive-events';
@@ -154,9 +154,6 @@ class EmojiPickerMenu extends React.PureComponent {
     onClose: PropTypes.func.isRequired,
     onPick: PropTypes.func.isRequired,
     style: PropTypes.object,
-    placement: PropTypes.string,
-    arrowOffsetLeft: PropTypes.string,
-    arrowOffsetTop: PropTypes.string,
     intl: PropTypes.object.isRequired,
     skinTone: PropTypes.number.isRequired,
     onSkinTone: PropTypes.func.isRequired,
@@ -324,14 +321,13 @@ class EmojiPickerDropdown extends React.PureComponent {
   state = {
     active: false,
     loading: false,
-    placement: null,
   };
 
   setRef = (c) => {
     this.dropdown = c;
   }
 
-  onShowDropdown = ({ target }) => {
+  onShowDropdown = () => {
     this.setState({ active: true });
 
     if (!EmojiPicker) {
@@ -346,9 +342,6 @@ class EmojiPickerDropdown extends React.PureComponent {
         this.setState({ loading: false, active: false });
       });
     }
-
-    const { top } = target.getBoundingClientRect();
-    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
   }
 
   onHideDropdown = () => {
@@ -382,7 +375,7 @@ class EmojiPickerDropdown extends React.PureComponent {
   render () {
     const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props;
     const title = intl.formatMessage(messages.emoji);
-    const { active, loading, placement } = this.state;
+    const { active, loading } = this.state;
 
     return (
       <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>
@@ -394,16 +387,22 @@ class EmojiPickerDropdown extends React.PureComponent {
           />}
         </div>
 
-        <Overlay show={active} placement={placement} target={this.findTarget}>
-          <EmojiPickerMenu
-            custom_emojis={this.props.custom_emojis}
-            loading={loading}
-            onClose={this.onHideDropdown}
-            onPick={onPickEmoji}
-            onSkinTone={onSkinTone}
-            skinTone={skinTone}
-            frequentlyUsedEmojis={frequentlyUsedEmojis}
-          />
+        <Overlay show={active} placement={'bottom'} target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, placement })=> (
+            <div {...props} style={{ ...props.style, width: 299 }}>
+              <div className={`dropdown-animation ${placement}`}>
+                <EmojiPickerMenu
+                  custom_emojis={this.props.custom_emojis}
+                  loading={loading}
+                  onClose={this.onHideDropdown}
+                  onPick={onPickEmoji}
+                  onSkinTone={onSkinTone}
+                  skinTone={skinTone}
+                  frequentlyUsedEmojis={frequentlyUsedEmojis}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/mastodon/features/compose/components/language_dropdown.js b/app/javascript/mastodon/features/compose/components/language_dropdown.js
index bf56fd0fa..2dd406b4b 100644
--- a/app/javascript/mastodon/features/compose/components/language_dropdown.js
+++ b/app/javascript/mastodon/features/compose/components/language_dropdown.js
@@ -2,9 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { injectIntl, defineMessages } from 'react-intl';
 import TextIconButton from './text_icon_button';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from 'mastodon/features/ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { supportsPassiveEvents } from 'detect-passive-events';
 import classNames from 'classnames';
 import { languages as preloadedLanguages } from 'mastodon/initial_state';
@@ -22,10 +20,8 @@ const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
 class LanguageDropdownMenu extends React.PureComponent {
 
   static propTypes = {
-    style: PropTypes.object,
     value: PropTypes.string.isRequired,
     frequentlyUsedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,
-    placement: PropTypes.string.isRequired,
     onClose: PropTypes.func.isRequired,
     onChange: PropTypes.func.isRequired,
     languages: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
@@ -37,7 +33,6 @@ class LanguageDropdownMenu extends React.PureComponent {
   };
 
   state = {
-    mounted: false,
     searchValue: '',
   };
 
@@ -50,7 +45,6 @@ class LanguageDropdownMenu extends React.PureComponent {
   componentDidMount () {
     document.addEventListener('click', this.handleDocumentClick, false);
     document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);
-    this.setState({ mounted: true });
 
     // Because of https://github.com/react-bootstrap/react-bootstrap/issues/2614 we need
     // to wait for a frame before focusing
@@ -222,29 +216,22 @@ class LanguageDropdownMenu extends React.PureComponent {
   }
 
   render () {
-    const { style, placement, intl } = this.props;
-    const { mounted, searchValue } = this.state;
+    const { intl } = this.props;
+    const { searchValue } = this.state;
     const isSearching = searchValue !== '';
     const results = this.search();
 
     return (
-      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div className={`language-dropdown__dropdown ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} ref={this.setRef}>
-            <div className='emoji-mart-search'>
-              <input type='search' value={searchValue} onChange={this.handleSearchChange} onKeyDown={this.handleSearchKeyDown} placeholder={intl.formatMessage(messages.search)} />
-              <button type='button' className='emoji-mart-search-icon' disabled={!isSearching} aria-label={intl.formatMessage(messages.clear)} onClick={this.handleClear}>{!isSearching ? loupeIcon : deleteIcon}</button>
-            </div>
+      <div ref={this.setRef}>
+        <div className='emoji-mart-search'>
+          <input type='search' value={searchValue} onChange={this.handleSearchChange} onKeyDown={this.handleSearchKeyDown} placeholder={intl.formatMessage(messages.search)} />
+          <button type='button' className='emoji-mart-search-icon' disabled={!isSearching} aria-label={intl.formatMessage(messages.clear)} onClick={this.handleClear}>{!isSearching ? loupeIcon : deleteIcon}</button>
+        </div>
 
-            <div className='language-dropdown__dropdown__results emoji-mart-scroll' role='listbox' ref={this.setListRef}>
-              {results.map(this.renderItem)}
-            </div>
-          </div>
-        )}
-      </Motion>
+        <div className='language-dropdown__dropdown__results emoji-mart-scroll' role='listbox' ref={this.setListRef}>
+          {results.map(this.renderItem)}
+        </div>
+      </div>
     );
   }
 
@@ -266,14 +253,11 @@ class LanguageDropdown extends React.PureComponent {
     placement: 'bottom',
   };
 
-  handleToggle = ({ target }) => {
-    const { top } = target.getBoundingClientRect();
-
+  handleToggle = () => {
     if (this.state.open && this.activeElement) {
       this.activeElement.focus({ preventScroll: true });
     }
 
-    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
     this.setState({ open: !this.state.open });
   }
 
@@ -293,13 +277,25 @@ class LanguageDropdown extends React.PureComponent {
     onChange(value);
   }
 
+  setTargetRef = c => {
+    this.target = c;
+  }
+
+  findTarget = () => {
+    return this.target;
+  }
+
+  handleOverlayEnter = (state) => {
+    this.setState({ placement: state.placement });
+  }
+
   render () {
     const { value, intl, frequentlyUsedLanguages } = this.props;
     const { open, placement } = this.state;
 
     return (
-      <div className={classNames('privacy-dropdown', { active: open })}>
-        <div className='privacy-dropdown__value'>
+      <div className={classNames('privacy-dropdown', placement, { active: open })}>
+        <div className='privacy-dropdown__value' ref={this.setTargetRef} >
           <TextIconButton
             className='privacy-dropdown__value-icon'
             label={value && value.toUpperCase()}
@@ -309,15 +305,20 @@ class LanguageDropdown extends React.PureComponent {
           />
         </div>
 
-        <Overlay show={open} placement={placement} target={this}>
-          <LanguageDropdownMenu
-            value={value}
-            frequentlyUsedLanguages={frequentlyUsedLanguages}
-            onClose={this.handleClose}
-            onChange={this.handleChange}
-            placement={placement}
-            intl={intl}
-          />
+        <Overlay show={open} placement={'bottom'} flip target={this.findTarget} popperConfig={{ strategy: 'fixed', onFirstUpdate: this.handleOverlayEnter }}>
+          {({ props, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation language-dropdown__dropdown ${placement}`} >
+                <LanguageDropdownMenu
+                  value={value}
+                  frequentlyUsedLanguages={frequentlyUsedLanguages}
+                  onClose={this.handleClose}
+                  onChange={this.handleChange}
+                  intl={intl}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
index 1f0e998d3..545b67eda 100644
--- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
+++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
@@ -2,9 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { injectIntl, defineMessages } from 'react-intl';
 import IconButton from '../../../components/icon_button';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from '../../ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { supportsPassiveEvents } from 'detect-passive-events';
 import classNames from 'classnames';
 import Icon from 'mastodon/components/icon';
@@ -29,15 +27,10 @@ class PrivacyDropdownMenu extends React.PureComponent {
     style: PropTypes.object,
     items: PropTypes.array.isRequired,
     value: PropTypes.string.isRequired,
-    placement: PropTypes.string.isRequired,
     onClose: PropTypes.func.isRequired,
     onChange: PropTypes.func.isRequired,
   };
 
-  state = {
-    mounted: false,
-  };
-
   handleDocumentClick = e => {
     if (this.node && !this.node.contains(e.target)) {
       this.props.onClose();
@@ -101,7 +94,6 @@ class PrivacyDropdownMenu extends React.PureComponent {
     document.addEventListener('click', this.handleDocumentClick, false);
     document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);
     if (this.focusedItem) this.focusedItem.focus({ preventScroll: true });
-    this.setState({ mounted: true });
   }
 
   componentWillUnmount () {
@@ -118,31 +110,23 @@ class PrivacyDropdownMenu extends React.PureComponent {
   }
 
   render () {
-    const { mounted } = this.state;
-    const { style, items, placement, value } = this.props;
+    const { style, items, value } = this.props;
 
     return (
-      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-        {({ opacity, scaleX, scaleY }) => (
-          // It should not be transformed when mounting because the resulting
-          // size will be used to determine the coordinate of the menu by
-          // react-overlays
-          <div className={`privacy-dropdown__dropdown ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} role='listbox' ref={this.setRef}>
-            {items.map(item => (
-              <div role='option' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>
-                <div className='privacy-dropdown__option__icon'>
-                  <Icon id={item.icon} fixedWidth />
-                </div>
-
-                <div className='privacy-dropdown__option__content'>
-                  <strong>{item.text}</strong>
-                  {item.meta}
-                </div>
-              </div>
-            ))}
+      <div style={{ ...style }} role='listbox' ref={this.setRef}>
+        {items.map(item => (
+          <div role='option' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>
+            <div className='privacy-dropdown__option__icon'>
+              <Icon id={item.icon} fixedWidth />
+            </div>
+
+            <div className='privacy-dropdown__option__content'>
+              <strong>{item.text}</strong>
+              {item.meta}
+            </div>
           </div>
-        )}
-      </Motion>
+        ))}
+      </div>
     );
   }
 
@@ -168,7 +152,7 @@ class PrivacyDropdown extends React.PureComponent {
     placement: 'bottom',
   };
 
-  handleToggle = ({ target }) => {
+  handleToggle = () => {
     if (this.props.isUserTouching && this.props.isUserTouching()) {
       if (this.state.open) {
         this.props.onModalClose();
@@ -179,11 +163,9 @@ class PrivacyDropdown extends React.PureComponent {
         });
       }
     } else {
-      const { top } = target.getBoundingClientRect();
       if (this.state.open && this.activeElement) {
         this.activeElement.focus({ preventScroll: true });
       }
-      this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
       this.setState({ open: !this.state.open });
     }
   }
@@ -247,6 +229,18 @@ class PrivacyDropdown extends React.PureComponent {
     }
   }
 
+  setTargetRef = c => {
+    this.target = c;
+  }
+
+  findTarget = () => {
+    return this.target;
+  }
+
+  handleOverlayEnter = (state) => {
+    this.setState({ placement: state.placement });
+  }
+
   render () {
     const { value, container, disabled, intl } = this.props;
     const { open, placement } = this.state;
@@ -255,7 +249,7 @@ class PrivacyDropdown extends React.PureComponent {
 
     return (
       <div className={classNames('privacy-dropdown', placement, { active: open })} onKeyDown={this.handleKeyDown}>
-        <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === (placement === 'bottom' ? 0 : (this.options.length - 1)) })}>
+        <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === (placement === 'bottom' ? 0 : (this.options.length - 1)) })} ref={this.setTargetRef}>
           <IconButton
             className='privacy-dropdown__value-icon'
             icon={valueOption.icon}
@@ -272,14 +266,19 @@ class PrivacyDropdown extends React.PureComponent {
           />
         </div>
 
-        <Overlay show={open} placement={placement} target={this} container={container}>
-          <PrivacyDropdownMenu
-            items={this.options}
-            value={value}
-            onClose={this.handleClose}
-            onChange={this.handleChange}
-            placement={placement}
-          />
+        <Overlay show={open} placement={'bottom'} flip target={this.findTarget} container={container} popperConfig={{ strategy: 'fixed', onFirstUpdate: this.handleOverlayEnter }}>
+          {({ props, placement }) => (
+            <div {...props}>
+              <div className={`dropdown-animation privacy-dropdown__dropdown ${placement}`}>
+                <PrivacyDropdownMenu
+                  items={this.options}
+                  value={value}
+                  onClose={this.handleClose}
+                  onChange={this.handleChange}
+                />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/mastodon/features/compose/components/search.js b/app/javascript/mastodon/features/compose/components/search.js
index 8254fb607..5820f8ca2 100644
--- a/app/javascript/mastodon/features/compose/components/search.js
+++ b/app/javascript/mastodon/features/compose/components/search.js
@@ -1,9 +1,7 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import Overlay from 'react-overlays/lib/Overlay';
-import Motion from '../../ui/util/optional_motion';
-import spring from 'react-motion/lib/spring';
+import Overlay from 'react-overlays/Overlay';
 import { searchEnabled } from '../../../initial_state';
 import Icon from 'mastodon/components/icon';
 
@@ -14,31 +12,20 @@ const messages = defineMessages({
 
 class SearchPopout extends React.PureComponent {
 
-  static propTypes = {
-    style: PropTypes.object,
-  };
-
   render () {
-    const { style } = this.props;
     const extraInformation = searchEnabled ? <FormattedMessage id='search_popout.tips.full_text' defaultMessage='Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.' /> : <FormattedMessage id='search_popout.tips.text' defaultMessage='Simple text returns matching display names, usernames and hashtags' />;
     return (
-      <div style={{ ...style, position: 'absolute', width: 285, zIndex: 2 }}>
-        <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
-          {({ opacity, scaleX, scaleY }) => (
-            <div className='search-popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>
-              <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>
-
-              <ul>
-                <li><em>#example</em> <FormattedMessage id='search_popout.tips.hashtag' defaultMessage='hashtag' /></li>
-                <li><em>@username@domain</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
-                <li><em>URL</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
-                <li><em>URL</em> <FormattedMessage id='search_popout.tips.status' defaultMessage='status' /></li>
-              </ul>
-
-              {extraInformation}
-            </div>
-          )}
-        </Motion>
+      <div className='search-popout'>
+        <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>
+
+        <ul>
+          <li><em>#example</em> <FormattedMessage id='search_popout.tips.hashtag' defaultMessage='hashtag' /></li>
+          <li><em>@username@domain</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
+          <li><em>URL</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>
+          <li><em>URL</em> <FormattedMessage id='search_popout.tips.status' defaultMessage='status' /></li>
+        </ul>
+
+        {extraInformation}
       </div>
     );
   }
@@ -115,6 +102,10 @@ class Search extends React.PureComponent {
     this.setState({ expanded: false });
   }
 
+  findTarget = () => {
+    return this.searchForm;
+  }
+
   render () {
     const { intl, value, submitted } = this.props;
     const { expanded } = this.state;
@@ -140,8 +131,14 @@ class Search extends React.PureComponent {
           <Icon id='search' className={hasValue ? '' : 'active'} />
           <Icon id='times-circle' className={hasValue ? 'active' : ''} aria-label={intl.formatMessage(messages.placeholder)} />
         </div>
-        <Overlay show={expanded && !hasValue} placement='bottom' target={this} container={this}>
-          <SearchPopout />
+        <Overlay show={expanded && !hasValue} placement='bottom' target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
+          {({ props, placement }) => (
+            <div {...props} style={{ ...props.style, width: 285, zIndex: 2 }}>
+              <div className={`dropdown-animation ${placement}`}>
+                <SearchPopout />
+              </div>
+            </div>
+          )}
         </Overlay>
       </div>
     );
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
index 8065c8b68..abd664fc8 100644
--- a/app/javascript/mastodon/locales/af.json
+++ b/app/javascript/mastodon/locales/af.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Soek tale...",
   "compose_form.direct_message_warning_learn_more": "Leer meer",
   "compose_form.encryption_warning": "Plasings op Mastodon is nie van punt tot punt versleutel nie. Moet geen sensitiewe inligting op Mastodon deel nie.",
-  "compose_form.hashtag_warning": "Hierdie plasing is ongelys en sal dus onder geen hutsetiket verskyn nie. Slegs openbare plasings is vindbaar wanneer daar na hutsetikette gesoek word.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Jou rekening is nie {locked} nie. Enigiemand kan jou volg en sien wat jy vir jou volgers plaas.",
   "compose_form.lock_disclaimer.lock": "gesluit",
   "compose_form.placeholder": "Wat wil jy deel?",
diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json
index 22fc58b0b..0a86e32ef 100644
--- a/app/javascript/mastodon/locales/an.json
+++ b/app/javascript/mastodon/locales/an.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Buscar idiomas...",
   "compose_form.direct_message_warning_learn_more": "Aprender mas",
   "compose_form.encryption_warning": "Las publicacions en Mastodon no son zifradas de cabo a cabo. No comparta garra información sensible en Mastodon.",
-  "compose_form.hashtag_warning": "Esta publicación no s'amostrará baixo garra hashtag perque no ye listada. Nomás las publicacions publicas se pueden buscar per hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "La tuya cuenta no ye {locked}. Totz pueden seguir-te pa veyer las tuyas publicacions nomás pa seguidores.",
   "compose_form.lock_disclaimer.lock": "blocau",
   "compose_form.placeholder": "En qué yes pensando?",
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index f7cdc977e..87804ab07 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -128,7 +128,7 @@
   "compose.language.search": "البحث عن لغة…",
   "compose_form.direct_message_warning_learn_more": "تَعَلَّم المَزيد",
   "compose_form.encryption_warning": "إنّ المنشورات على ماستدون ليست مشفرة من النهاية إلى النهاية. لا تشارك أي معلومات حساسة عبر ماستدون.",
-  "compose_form.hashtag_warning": "لن يُدرَج هذا المنشور تحت أي وسم بما أنَّه غير مُدرَج. فقط المنشورات العامة يُمكن البحث عنها بواسطة الوسم.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "حسابُك غير {locked}. يُمكن لأي شخص مُتابعتك لرؤية (منشورات المتابعين فقط).",
   "compose_form.lock_disclaimer.lock": "مُقفَل",
   "compose_form.placeholder": "فِيمَ تُفكِّر؟",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "تسجيل الدخول",
   "sign_in_banner.text": "قم بالولوج بحسابك لمتابعة الصفحات الشخصية أو الوسوم، أو لإضافة الرسائل إلى المفضلة ومشاركتها والرد عليها أو التفاعل بواسطة حسابك المتواجد على خادم مختلف.",
   "status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "فتح واجهة الإشراف لـ {domain}",
   "status.admin_status": "افتح هذا المنشور على واجهة الإشراف",
   "status.block": "احجب @{name}",
   "status.bookmark": "أضفه إلى الفواصل المرجعية",
@@ -559,7 +559,7 @@
   "status.favourite": "أضف إلى المفضلة",
   "status.filter": "تصفية هذه الرسالة",
   "status.filtered": "مُصفّى",
-  "status.hide": "Hide post",
+  "status.hide": "إخفاء المنشور",
   "status.history.created": "أنشأه {name} {date}",
   "status.history.edited": "عدله {name} {date}",
   "status.load_more": "حمّل المزيد",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 5631d4486..484a263cf 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -559,7 +559,7 @@
   "status.favourite": "Favourite",
   "status.filter": "Filter this post",
   "status.filtered": "Filtered",
-  "status.hide": "Hide post",
+  "status.hide": "Anubrir l'artículu",
   "status.history.created": "{name} creó {date}",
   "status.history.edited": "{name} editó {date}",
   "status.load_more": "Cargar más",
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 17ea029fa..ff99ec6e4 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Шукаць мовы...",
   "compose_form.direct_message_warning_learn_more": "Даведацца больш",
   "compose_form.encryption_warning": "Допісы ў Mastodon не абаронены скразным шыфраваннем. Не дзяліцеся ніякай канфідэнцыяльнай інфармацыяй в Mastodon.",
-  "compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, так як ён мае тып \"Не паказваць у стужках\". Толькі публічныя допісы могуць быць знойдзены па хэштэгу.",
+  "compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, бо ён не публічны. Толькі публічныя допісы можна знайсці па хэштэгу.",
   "compose_form.lock_disclaimer": "Ваш уліковы запіс не {locked}. Усе могуць падпісацца на вас, каб бачыць допісы толькі для падпісчыкаў.",
   "compose_form.lock_disclaimer.lock": "закрыты",
   "compose_form.placeholder": "Што здарылася?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Увайсці",
   "sign_in_banner.text": "Увайдзіце, каб падпісацца на людзей і тэгі, каб адказваць на допісы, дзяліцца імі і падабаць іх, альбо кантактаваць з вашага ўліковага запісу на іншым серверы.",
   "status.admin_account": "Адкрыць інтэрфейс мадэратара для @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Адкрыць інтэрфейс мадэратара для {domain}",
   "status.admin_status": "Адкрыць гэты допіс у інтэрфейсе мадэрацыі",
   "status.block": "Заблакаваць @{name}",
   "status.bookmark": "Дадаць закладку",
@@ -559,7 +559,7 @@
   "status.favourite": "Упадабаць",
   "status.filter": "Фільтраваць гэты допіс",
   "status.filtered": "Адфільтравана",
-  "status.hide": "Hide post",
+  "status.hide": "Схаваць допіс",
   "status.history.created": "Створана {name} {date}",
   "status.history.edited": "Адрэдагавана {name} {date}",
   "status.load_more": "Загрузіць яшчэ",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 925b19c8e..284d162b1 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -38,7 +38,7 @@
   "account.follows.empty": "Потребителят още никого не следва.",
   "account.follows_you": "Следва ви",
   "account.go_to_profile": "Към профила",
-  "account.hide_reblogs": "Скриване на споделяния от @{name}",
+  "account.hide_reblogs": "Скриване на подсилвания от @{name}",
   "account.joined_short": "Дата на присъединяване",
   "account.languages": "Промяна на езиците, за които сте абонирани",
   "account.link_verified_on": "Собствеността върху тази връзка е проверена на {date}",
@@ -49,14 +49,14 @@
   "account.mute": "Заглушаване на @{name}",
   "account.mute_notifications": "Заглушаване на известия от @{name}",
   "account.muted": "Заглушено",
-  "account.open_original_page": "Отваряне на оригиналната страница",
+  "account.open_original_page": "Отваряне на първообразната страница",
   "account.posts": "Публикации",
   "account.posts_with_replies": "Публ. и отговори",
   "account.report": "Докладване на @{name}",
   "account.requested": "Чака се одобрение. Щракнете за отмяна на заявката за последване",
   "account.requested_follow": "{name} поиска да ви последва",
   "account.share": "Споделяне на профила на @{name}",
-  "account.show_reblogs": "Показване на споделяния от @{name}",
+  "account.show_reblogs": "Показване на подсилвания от @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} публикация} other {{counter} публикации}}",
   "account.unblock": "Отблокиране на @{name}",
   "account.unblock_domain": "Отблокиране на домейн {domain}",
@@ -128,14 +128,14 @@
   "compose.language.search": "Търсене на езици...",
   "compose_form.direct_message_warning_learn_more": "Още информация",
   "compose_form.encryption_warning": "Публикациите в Mastodon не са криптирани от край до край. Не споделяйте никаква чувствителна информация там.",
-  "compose_form.hashtag_warning": "Тази публикация няма да бъде изброена под нито един хаштаг, тъй като е скрита. Само публични публикации могат да се търсят по хаштаг.",
-  "compose_form.lock_disclaimer": "Вашият акаунт не е {locked}. Всеки може да ви последва, за да прегледа вашите публикации само за последователи.",
+  "compose_form.hashtag_warning": "Тази публикация няма да се вписва под никакъв хаштаг, тъй като не е обществена. Само публични публикации могат да се търсят по хаштаг.",
+  "compose_form.lock_disclaimer": "Вашият акаунт не е в положение {locked}. Всеки може да ви последва, за да разглежда публикациите ви само за последователи.",
   "compose_form.lock_disclaimer.lock": "заключено",
   "compose_form.placeholder": "Какво мислите?",
   "compose_form.poll.add_option": "Добавяне на избор",
   "compose_form.poll.duration": "Времетраене на анкетата",
   "compose_form.poll.option_placeholder": "Избор {number}",
-  "compose_form.poll.remove_option": "Премахване на избора",
+  "compose_form.poll.remove_option": "Премахване на този избор",
   "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора",
   "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор",
   "compose_form.publish": "Публикуване",
@@ -168,7 +168,7 @@
   "confirmations.mute.explanation": "Това ще скрие публикациите от тях и публикации, които ги споменават, но все още ще им позволява да виждат публикациите ви и да ви следват.",
   "confirmations.mute.message": "Наистина ли искате да заглушите {name}?",
   "confirmations.redraft.confirm": "Изтриване и преработване",
-  "confirmations.redraft.message": "Сигурни ли сте, че искате да изтриете тази публикация и да я върнете в чернова? Ще загубите споделянията и маркиранията като любима, и отговорите към оригинала ще останат висящи.",
+  "confirmations.redraft.message": "Сигурни ли сте, че искате да изтриете тази публикация и да я върнете в чернова? Ще загубите подсилванията и означаванията като любима, и отговорите към оригинала ще останат висящи.",
   "confirmations.reply.confirm": "Отговор",
   "confirmations.reply.message": "Отговарянето сега ще замени съобщението, което в момента съставяте. Сигурни ли сте, че искате да продължите?",
   "confirmations.unfollow.confirm": "Без следване",
@@ -224,7 +224,7 @@
   "empty_column.hashtag": "Още няма нищо в този хаштаг.",
   "empty_column.home": "Вашата начална часова ос е празна! Последвайте повече хора, за да я запълните. {suggestions}",
   "empty_column.home.suggestions": "Преглед на някои предложения",
-  "empty_column.list": "Още няма нищо в този списък. Когато членовете на списъка публикуват нови публикации, то те ще се появят тук.",
+  "empty_column.list": "Все още списъкът е празен. Членуващите на списъка, публикуващи нови публикации, ще се появят тук.",
   "empty_column.lists": "Все още нямате списъци. Когато създадете такъв, той ще се покаже тук.",
   "empty_column.mutes": "Още не сте заглушавали потребители.",
   "empty_column.notifications": "Все още нямате известия. Взаимодействайте с другите, за да започнете разговора.",
@@ -284,35 +284,35 @@
   "hashtag.follow": "Следване на хаштаг",
   "hashtag.unfollow": "Спиране на следване на хаштаг",
   "home.column_settings.basic": "Основно",
-  "home.column_settings.show_reblogs": "Показване на споделяния",
+  "home.column_settings.show_reblogs": "Показване на подсилванията",
   "home.column_settings.show_replies": "Показване на отговорите",
   "home.hide_announcements": "Скриване на оповестяванията",
   "home.show_announcements": "Показване на оповестяванията",
   "interaction_modal.description.favourite": "С акаунт в Mastodon може да направите тази публикация като любима, за да известите автора, че я цените, и да я запазите за по-късно.",
-  "interaction_modal.description.follow": "Ако имате регистрация в Mastodon, то може да последвате {name}, за да виждате публикациите от този акаунт в началния си инфопоток.",
-  "interaction_modal.description.reblog": "Ако имате профил в Mastodon, можете да споделите тази публикация със своите последователи.",
-  "interaction_modal.description.reply": "Ако имате профил в Mastodon, можете да добавите отговор към тази публикация.",
+  "interaction_modal.description.follow": "С акаунт в Mastodon може да последвате {name}, за да получавате публикациите от този акаунт в началния си инфоканал.",
+  "interaction_modal.description.reblog": "С акаунт в Mastodon може да подсилите тази публикация, за да я споделите с последователите си.",
+  "interaction_modal.description.reply": "С акаунт в Mastodon може да добавите отговор към тази публикация.",
   "interaction_modal.on_another_server": "На различен сървър",
   "interaction_modal.on_this_server": "На този сървър",
   "interaction_modal.other_server_instructions": "Копипейстнете този URL адрес в полето за търсене на любимото си приложение Mastodon или мрежови интерфейс на своя Mastodon сървър.",
   "interaction_modal.preamble": "Откак Mastodon е децентрализиран, може да употребявате съществуващ акаунт, разположен на друг сървър на Mastodon или съвместима платформа, ако нямате акаунт на този сървър.",
   "interaction_modal.title.favourite": "Любими публикации на {name}",
   "interaction_modal.title.follow": "Последване на {name}",
-  "interaction_modal.title.reblog": "Споделете публикацията от {name}",
+  "interaction_modal.title.reblog": "Подсилване на публикацията на {name}",
   "interaction_modal.title.reply": "Отговаряне на публикацията на {name}",
   "intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
   "intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
   "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}",
   "keyboard_shortcuts.back": "Навигиране назад",
   "keyboard_shortcuts.blocked": "Отваряне на списъка с блокирани потребители",
-  "keyboard_shortcuts.boost": "за споделяне",
+  "keyboard_shortcuts.boost": "Подсилване на публикация",
   "keyboard_shortcuts.column": "Съсредоточение на колона",
   "keyboard_shortcuts.compose": "Фокус на текстовата зона за съставяне",
   "keyboard_shortcuts.description": "Опис",
   "keyboard_shortcuts.direct": "за отваряне на колоната с лични съобщения",
   "keyboard_shortcuts.down": "Преместване надолу в списъка",
   "keyboard_shortcuts.enter": "Отваряне на публикация",
-  "keyboard_shortcuts.favourite": "Любима публикация",
+  "keyboard_shortcuts.favourite": "Към любими публикации",
   "keyboard_shortcuts.favourites": "Отваряне на списъка с любими",
   "keyboard_shortcuts.federated": "Отваряне на федерирания инфопоток",
   "keyboard_shortcuts.heading": "Клавишни съчетания",
@@ -389,7 +389,7 @@
   "navigation_bar.public_timeline": "Федеративна хронология",
   "navigation_bar.search": "Търсене",
   "navigation_bar.security": "Сигурност",
-  "not_signed_in_indicator.not_signed_in": "Трябва да влезете за достъп до този ресурс.",
+  "not_signed_in_indicator.not_signed_in": "Трябва да влезете, за да имате достъп до този ресурс.",
   "notification.admin.report": "{name} докладва {target}",
   "notification.admin.sign_up": "{name} се регистрира",
   "notification.favourite": "{name} сложи в любими ваша публикация",
@@ -398,7 +398,7 @@
   "notification.mention": "{name} ви спомена",
   "notification.own_poll": "Анкетата ви приключи",
   "notification.poll": "Анкета, в която гласувахте, приключи",
-  "notification.reblog": "{name} сподели вашата публикация",
+  "notification.reblog": "{name} подсили ваша публикация",
   "notification.status": "{name} току-що публикува",
   "notification.update": "{name} промени публикация",
   "notifications.clear": "Изчистване на известията",
@@ -415,7 +415,7 @@
   "notifications.column_settings.mention": "Споменавания:",
   "notifications.column_settings.poll": "Резултати от анкета:",
   "notifications.column_settings.push": "Изскачащи известия",
-  "notifications.column_settings.reblog": "Споделяния:",
+  "notifications.column_settings.reblog": "Подсилвания:",
   "notifications.column_settings.show": "Показване в колоната",
   "notifications.column_settings.sound": "Пускане на звук",
   "notifications.column_settings.status": "Нови публикации:",
@@ -423,7 +423,7 @@
   "notifications.column_settings.unread_notifications.highlight": "Изтъкване на непрочетените известия",
   "notifications.column_settings.update": "Промени:",
   "notifications.filter.all": "Всичко",
-  "notifications.filter.boosts": "Споделяния",
+  "notifications.filter.boosts": "Подсилвания",
   "notifications.filter.favourites": "Любими",
   "notifications.filter.follows": "Последвания",
   "notifications.filter.mentions": "Споменавания",
@@ -486,7 +486,7 @@
   "report.close": "Готово",
   "report.comment.title": "Има ли нещо друго, което смятате, че трябва да знаем?",
   "report.forward": "Препращане до {target}",
-  "report.forward_hint": "Акаунтът е от друг сървър. Ще изпратите ли анонимно копие на доклада и там?",
+  "report.forward_hint": "Акаунтът е от друг сървър. Ще изпратите ли безимено копие на доклада и там?",
   "report.mute": "Заглушаване",
   "report.mute_explanation": "Няма да виждате публикациите на това лице. То още може да ви следва и да вижда публикациите ви и няма да знае, че е заглушено.",
   "report.next": "Напред",
@@ -496,13 +496,13 @@
   "report.reasons.other": "Нещо друго е",
   "report.reasons.other_description": "Проблемът не попада в нито една от другите категории",
   "report.reasons.spam": "Спам е",
-  "report.reasons.spam_description": "Зловредни връзки, фалшиви взаимодействия, или повтарящи се отговори",
+  "report.reasons.spam_description": "Зловредни връзки, фалшиви ангажименти, или повтарящи се отговори",
   "report.reasons.violation": "Нарушава правилата на сървъра",
   "report.reasons.violation_description": "Знаете, че нарушава особени правила",
   "report.rules.subtitle": "Изберете всичко, което да се прилага",
   "report.rules.title": "Кои правила са нарушени?",
   "report.statuses.subtitle": "Изберете всичко, което да се прилага",
-  "report.statuses.title": "Има ли някакви публикации, подкрепящи този доклад?",
+  "report.statuses.title": "Има ли някакви публикации, подкрепящи доклада?",
   "report.submit": "Подаване",
   "report.target": "Докладване на {target}",
   "report.thanks.take_action": "Ето възможностите ви за управление какво виждате в Mastodon:",
@@ -511,7 +511,7 @@
   "report.thanks.title_actionable": "Благодарности за докладването, ще го прегледаме.",
   "report.unfollow": "Стоп на следването на @{name}",
   "report.unfollow_explanation": "Последвали сте този акаунт. За да не виждате повече публикациите му в началния си инфопоток, спрете да го следвате.",
-  "report_notification.attached_statuses": "прикачено {count, plural, one {{count} публикация} other {{count} публикации}}",
+  "report_notification.attached_statuses": "{count, plural, one {прикаченa {count} публикация} other {прикачени {count} публикации}}",
   "report_notification.categories.other": "Друго",
   "report_notification.categories.spam": "Спам",
   "report_notification.categories.violation": "Нарушение на правилото",
@@ -542,12 +542,12 @@
   "sign_in_banner.sign_in": "Вход",
   "sign_in_banner.text": "Влезте, за да последвате профили или хаштагове, любимо, споделяне и отговаряне на публикации или взаимодействие от акаунта ви на друг сървър.",
   "status.admin_account": "Отваряне на интерфейс за модериране за @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
-  "status.admin_status": "Отваряне на тази публикация в интерфейс на модериране",
+  "status.admin_domain": "Отваряне на модериращия интерфейс за {domain}",
+  "status.admin_status": "Отваряне на публикацията в интерфейса за модериране",
   "status.block": "Блокиране на @{name}",
   "status.bookmark": "Отмятане",
-  "status.cancel_reblog_private": "Отсподеляне",
-  "status.cannot_reblog": "Тази публикация не може да бъде споделена",
+  "status.cancel_reblog_private": "Край на подсилването",
+  "status.cannot_reblog": "Публикация не може да се подсили",
   "status.copy": "Копиране на връзката към публикация",
   "status.delete": "Изтриване",
   "status.detailed_status": "Подробен изглед на разговора",
@@ -559,7 +559,7 @@
   "status.favourite": "Любимо",
   "status.filter": "Филтриране на публ.",
   "status.filtered": "Филтрирано",
-  "status.hide": "Hide post",
+  "status.hide": "Скриване на публ.",
   "status.history.created": "{name} създаде {date}",
   "status.history.edited": "{name} редактира {date}",
   "status.load_more": "Зареждане на още",
@@ -572,17 +572,17 @@
   "status.pin": "Закачане в профила",
   "status.pinned": "Закачена публикация",
   "status.read_more": "Още за четене",
-  "status.reblog": "Споделяне",
-  "status.reblog_private": "Споделяне с оригинална видимост",
-  "status.reblogged_by": "{name} сподели",
-  "status.reblogs.empty": "Все още никой не е споделил тази публикация. Когато някой го направи, ще се покаже тук.",
+  "status.reblog": "Подсилване",
+  "status.reblog_private": "Подсилване с оригиналната видимост",
+  "status.reblogged_by": "{name} подсили",
+  "status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.",
   "status.redraft": "Изтриване и преработване",
   "status.remove_bookmark": "Премахване на отметката",
   "status.replied_to": "В отговор до {name}",
   "status.reply": "Отговор",
   "status.replyAll": "Отговор на нишка",
   "status.report": "Докладване на @{name}",
-  "status.sensitive_warning": "Чувствително съдържание",
+  "status.sensitive_warning": "Деликатно съдържание",
   "status.share": "Споделяне",
   "status.show_filter_reason": "Покажи въпреки това",
   "status.show_less": "Показване на по-малко",
@@ -600,7 +600,7 @@
   "subscribed_languages.target": "Смяна на езика за {target}",
   "suggestions.dismiss": "Отхвърляне на предложение",
   "suggestions.header": "Може да имате интерес от…",
-  "tabs_bar.federated_timeline": "Федерална",
+  "tabs_bar.federated_timeline": "Федеративен",
   "tabs_bar.home": "Начало",
   "tabs_bar.local_timeline": "Местни",
   "tabs_bar.notifications": "Известия",
@@ -621,7 +621,7 @@
   "units.short.thousand": "{count}хил",
   "upload_area.title": "Влачене и пускане за качване",
   "upload_button.label": "Добавете файл с образ, видео или звук",
-  "upload_error.limit": "Превишено ограничение за качване на файлове.",
+  "upload_error.limit": "Превишено ограничението за качване на файлове.",
   "upload_error.poll": "Качването на файлове не е позволено с анкети.",
   "upload_form.audio_description": "Опишете за хора, които са глухи или трудно чуват",
   "upload_form.description": "Опишете за хора, които са слепи или имат слабо зрение",
@@ -636,7 +636,7 @@
   "upload_modal.choose_image": "Избор на образ",
   "upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита",
   "upload_modal.detect_text": "Откриване на текст от картина",
-  "upload_modal.edit_media": "Редакция на мултимедия",
+  "upload_modal.edit_media": "Промяна на мултимедия",
   "upload_modal.hint": "Щракнете или плъзнете кръга на визуализацията, за да изберете фокусна точка, която винаги ще бъде видима на всички миниатюри.",
   "upload_modal.preparing_ocr": "Подготовка за оптично разпознаване на знаци…",
   "upload_modal.preview_label": "Нагледно ({ratio})",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 2d6a3b47f..e4e240423 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "আরো জানুন",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "কোনো হ্যাশট্যাগের ভেতরে এই টুটটি থাকবেনা কারণ এটি তালিকাবহির্ভূত। শুধুমাত্র প্রকাশ্য ঠোটগুলো হ্যাশট্যাগের ভেতরে খুঁজে পাওয়া যাবে।",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "আপনার নিবন্ধনে তালা দেওয়া নেই, যে কেও আপনাকে অনুসরণ করতে পারবে এবং অনুশারকদের জন্য লেখা দেখতে পারবে।",
   "compose_form.lock_disclaimer.lock": "তালা দেওয়া",
   "compose_form.placeholder": "আপনি কি ভাবছেন ?",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index 79cc8539e..51523ab22 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Klask yezhoù...",
   "compose_form.direct_message_warning_learn_more": "Gouzout hiroc'h",
   "compose_form.encryption_warning": "Toudoù war Mastodon na vezont ket sifret penn-da-benn. Na rannit ket titouroù kizidik dre Mastodon.",
-  "compose_form.hashtag_warning": "Ne vo ket listennet an toud-mañ dindan gerioù-klik ebet dre m'eo anlistennet. N'eus nemet an toudoù foran a c'hall bezañ klasket dre c'her-klik.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "N'eo ket {locked} ho kont. An holl a c'hal ho heuliañ evit gwelet ho toudoù prevez.",
   "compose_form.lock_disclaimer.lock": "prennet",
   "compose_form.placeholder": "Petra emaoc'h o soñjal e-barzh ?",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index af829fe06..dbc1af4b1 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -21,13 +21,13 @@
   "account.browse_more_on_origin_server": "Navega més en el perfil original",
   "account.cancel_follow_request": "Retira la sol·licitud de seguiment",
   "account.direct": "Missatge directe a @{name}",
-  "account.disable_notifications": "No em notifiquis les publicacions de @{name}",
+  "account.disable_notifications": "Deixa de notificar-me els tuts de @{name}",
   "account.domain_blocked": "Domini blocat",
   "account.edit_profile": "Edita el perfil",
-  "account.enable_notifications": "Notifica'm les publicacions de @{name}",
+  "account.enable_notifications": "Notifica'm els tuts de @{name}",
   "account.endorse": "Recomana en el perfil",
   "account.featured_tags.last_status_at": "Darrera publicació el {date}",
-  "account.featured_tags.last_status_never": "No hi ha publicacions",
+  "account.featured_tags.last_status_never": "No hi ha tuts",
   "account.featured_tags.title": "etiquetes destacades de {name}",
   "account.follow": "Segueix",
   "account.followers": "Seguidors",
@@ -57,7 +57,7 @@
   "account.requested_follow": "{name} ha demanat de seguir-te",
   "account.share": "Comparteix el perfil de @{name}",
   "account.show_reblogs": "Mostra els impulsos de @{name}",
-  "account.statuses_counter": "{count, plural, one {{counter} Publicació} other {{counter} Publicacions}}",
+  "account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}",
   "account.unblock": "Desbloca @{name}",
   "account.unblock_domain": "Desbloca el domini {domain}",
   "account.unblock_short": "Desbloca",
@@ -128,8 +128,8 @@
   "compose.language.search": "Cerca idiomes...",
   "compose_form.direct_message_warning_learn_more": "Més informació",
   "compose_form.encryption_warning": "Els tuts a Mastodon no estant xifrats punt a punt. No comparteixis informació sensible mitjançant Mastodon.",
-  "compose_form.hashtag_warning": "Aquest tut no es mostrarà en cap etiqueta, ja que no està llistat. Només els tuts públics es poden cercar per etiqueta.",
-  "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure les publicacions de només per a seguidors.",
+  "compose_form.hashtag_warning": "Aquest tut no es mostrarà en cap etiqueta, ja que no és públic. Només els tuts públics es poden cercar per etiqueta.",
+  "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure els tuts de només per a seguidors.",
   "compose_form.lock_disclaimer.lock": "blocat",
   "compose_form.placeholder": "Què et passa pel cap?",
   "compose_form.poll.add_option": "Afegeix una opció",
@@ -165,7 +165,7 @@
   "confirmations.logout.confirm": "Tanca la sessió",
   "confirmations.logout.message": "Segur que vols tancar la sessió?",
   "confirmations.mute.confirm": "Silencia",
-  "confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen, però encara els permetrà veure les teves i seguir-te.",
+  "confirmations.mute.explanation": "Això amagarà els tuts d'ells i els d'els que els mencionin, però encara els permetrà veure els teus tuts i seguir-te.",
   "confirmations.mute.message": "Segur que vols silenciar {name}?",
   "confirmations.redraft.confirm": "Elimina i reescriu-la",
   "confirmations.redraft.message": "Segur que vols eliminar aquesta publicació i tornar-la a escriure? Es perdran tots els impulsos i els favorits, i les respostes a la publicació original quedaran aïllades.",
@@ -185,7 +185,7 @@
   "directory.recently_active": "Actius recentment",
   "disabled_account_banner.account_settings": "Paràmetres del compte",
   "disabled_account_banner.text": "El teu compte {disabledAccount} està desactivat.",
-  "dismissable_banner.community_timeline": "Aquestes són les publicacions més recents d'usuaris amb el compte a {domain}.",
+  "dismissable_banner.community_timeline": "Aquests són els tuts públics més recents d'usuaris amb els seus comptes a {domain}.",
   "dismissable_banner.dismiss": "Ometre",
   "dismissable_banner.explore_links": "Gent d'aquest i d'altres servidors de la xarxa descentralitzada estan comentant ara mateix aquestes notícies.",
   "dismissable_banner.explore_statuses": "Aquests tuts d'aquest i altres servidors de la xarxa descentralitzada estan guanyant l'atenció ara mateix en aquest servidor.",
@@ -259,7 +259,7 @@
   "filter_modal.title.status": "Filtra un tut",
   "follow_recommendations.done": "Fet",
   "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure els seus tuts! Aquí hi ha algunes recomanacions.",
-  "follow_recommendations.lead": "Les publicacions dels usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps d'Inici. No tinguis por de cometre errors, pots deixar de seguir-los en qualsevol moment!",
+  "follow_recommendations.lead": "Els tuts dels usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!",
   "follow_request.authorize": "Autoritza",
   "follow_request.reject": "Rebutja",
   "follow_requests.unlocked_explanation": "Tot i que el teu compte no està blocat, el personal de {domain} ha pensat que és possible que vulguis revisar manualment les sol·licituds de seguiment d’aquests comptes.",
@@ -289,7 +289,7 @@
   "home.hide_announcements": "Amaga els anuncis",
   "home.show_announcements": "Mostra els anuncis",
   "interaction_modal.description.favourite": "Amb un compte a Mastodon pots afavorir aquesta publicació, que l'autor sàpiga que t'ha agradat i desar-la per a més endavant.",
-  "interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre les seves publicacions en la teva línia de temps d'Inici.",
+  "interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.",
   "interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquesta publicació per a compartir-la amb els teus seguidors.",
   "interaction_modal.description.reply": "Amb un compte a Mastodon, pots respondre aquest tut.",
   "interaction_modal.on_another_server": "A un altre servidor",
@@ -418,7 +418,7 @@
   "notifications.column_settings.reblog": "Impulsos:",
   "notifications.column_settings.show": "Mostra a la columna",
   "notifications.column_settings.sound": "Reprodueix so",
-  "notifications.column_settings.status": "Noves publicacions:",
+  "notifications.column_settings.status": "Nous tuts:",
   "notifications.column_settings.unread_notifications.category": "Notificacions no llegides",
   "notifications.column_settings.unread_notifications.highlight": "Destaca les notificacions no llegides",
   "notifications.column_settings.update": "Edicions:",
@@ -475,7 +475,7 @@
   "relative_time.today": "avui",
   "reply_indicator.cancel": "Cancel·la",
   "report.block": "Bloca",
-  "report.block_explanation": "No veuràs les seves publicacions. Ell no podran veure les teves ni seguir-te. Podran saber que estan blocats.",
+  "report.block_explanation": "No veuràs els seus tuts. Ells no podran veure els teus tuts ni et podran seguir. Podran saber que estan blocats.",
   "report.categories.other": "Altres",
   "report.categories.spam": "Brossa",
   "report.categories.violation": "El contingut viola una o més regles del servidor",
@@ -488,7 +488,7 @@
   "report.forward": "Reenvia a {target}",
   "report.forward_hint": "El compte és d'un altre servidor. Vols enviar-hi també una còpia anònima de l'informe?",
   "report.mute": "Silencia",
-  "report.mute_explanation": "No veuràs les seves publicacions. Encara pot seguir-te i veure les teves publicacions, però no sabrà que ha estat silenciat.",
+  "report.mute_explanation": "No veuràs els seus tuts. Encara poden seguir-te i veure els teus tuts, però no sabran que han estat silenciats.",
   "report.next": "Següent",
   "report.placeholder": "Comentaris addicionals",
   "report.reasons.dislike": "No m'agrada",
@@ -510,7 +510,7 @@
   "report.thanks.title": "No ho vols veure?",
   "report.thanks.title_actionable": "Gràcies per informar, ho investigarem.",
   "report.unfollow": "Deixa de seguir @{name}",
-  "report.unfollow_explanation": "Segueixes aquest compte. Per no veure les seves publicacions a la teva línia de temps d'Inici deixa de seguir-lo.",
+  "report.unfollow_explanation": "Estàs seguint aquest compte. Per no veure els seus tuts a la teva línia de temps d'Inici, deixa de seguir-lo.",
   "report_notification.attached_statuses": "{count, plural, one {{count} tut} other {{count} tuts}} adjunts",
   "report_notification.categories.other": "Altres",
   "report_notification.categories.spam": "Brossa",
@@ -540,9 +540,9 @@
   "server_banner.server_stats": "Estadístiques del servidor:",
   "sign_in_banner.create_account": "Registra'm",
   "sign_in_banner.sign_in": "Inicia sessió",
-  "sign_in_banner.text": "Inicia la sessió per seguir perfils o etiquetes, afavorir, compartir i respondre a publicacions o interactuar des del teu compte en un servidor diferent.",
+  "sign_in_banner.text": "Inicia la sessió per a seguir perfils o etiquetes, afavorir, compartir i respondre tuts o interactuar des del teu compte en un servidor diferent.",
   "status.admin_account": "Obre la interfície de moderació per a @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Obre la interfície de moderació per a @{domain}",
   "status.admin_status": "Obrir aquest tut a la interfície de moderació",
   "status.block": "Bloca @{name}",
   "status.bookmark": "Marca",
diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json
index 64d1e0c00..62c24583d 100644
--- a/app/javascript/mastodon/locales/ckb.json
+++ b/app/javascript/mastodon/locales/ckb.json
@@ -128,7 +128,7 @@
   "compose.language.search": "گەڕان بە زمانەکان...",
   "compose_form.direct_message_warning_learn_more": "زیاتر فێربه",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "ئەم توتە لە ژێر هیچ هاشتاگییەک دا ناکرێت وەک ئەوەی لە لیستەکەدا نەریزراوە. تەنها توتی گشتی دەتوانرێت بە هاشتاگی بگەڕێت.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "هەژمێرەکەی لە حاڵەتی {locked}. هەر کەسێک دەتوانێت شوێنت بکەوێت بۆ پیشاندانی بابەتەکانی تەنها دوایخۆی.",
   "compose_form.lock_disclaimer.lock": "قفڵ دراوە",
   "compose_form.placeholder": "چی لە مێشکتدایە?",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 6c81b1e27..1820e511c 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Amparà di più",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Stu statutu ùn hè \"Micca listatu\" è ùn sarà micca listatu indè e circate da hashtag. Per esse vistu in quesse, u statutu deve esse \"Pubblicu\".",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.",
   "compose_form.lock_disclaimer.lock": "privatu",
   "compose_form.placeholder": "À chè pensate?",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 0d68e144c..0559cebf8 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Prohledat jazyky...",
   "compose_form.direct_message_warning_learn_more": "Zjistit více",
   "compose_form.encryption_warning": "Příspěvky na Mastodonu nejsou end-to-end šifrovány. Nesdílejte přes Mastodon žádné citlivé informace.",
-  "compose_form.hashtag_warning": "Tento příspěvek nebude zobrazen pod žádným hashtagem, neboť je neveřejný. Pouze veřejné příspěvky mohou být vyhledány podle hashtagu.",
+  "compose_form.hashtag_warning": "Tento příspěvek nebude zobrazen pod žádným hashtagem, protože není veřejný. Podle hashtagu lze vyhledávat jen veřejné příspěvky.",
   "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky učené pouze pro sledující.",
   "compose_form.lock_disclaimer.lock": "zamčený",
   "compose_form.placeholder": "Co se vám honí hlavou?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Přihlásit se",
   "sign_in_banner.text": "Přihlaste se pro sledování profilů nebo hashtagů, oblíbení, sdílení a odpovědí na příspěvky nebo interakci z vašeho účtu na jiném serveru.",
   "status.admin_account": "Otevřít moderátorské rozhraní pro @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Otevřít moderátorské rozhraní pro {domain}",
   "status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní",
   "status.block": "Blokovat @{name}",
   "status.bookmark": "Přidat do záložek",
@@ -559,7 +559,7 @@
   "status.favourite": "Oblíbit",
   "status.filter": "Filtrovat tento příspěvek",
   "status.filtered": "Filtrováno",
-  "status.hide": "Hide post",
+  "status.hide": "Skrýt příspěvek",
   "status.history.created": "Uživatel {name} vytvořil {date}",
   "status.history.edited": "Uživatel {name} upravil {date}",
   "status.load_more": "Načíst více",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 9d6b839fe..c854501fa 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Chwilio ieithoedd...",
   "compose_form.direct_message_warning_learn_more": "Dysgu mwy",
   "compose_form.encryption_warning": "Dyw postiadau ar Mastodon ddim wedi'u hamgryptio o ben i ben. Peidiwch â rhannu unrhyw wybodaeth sensitif dros Mastodon.",
-  "compose_form.hashtag_warning": "Ni fydd y post hwn wedi ei restru o dan unrhyw hashnod gan ei fod heb ei restru. Dim ond postiadau cyhoeddus gellid chwilio amdanynt drwy hashnod.",
+  "compose_form.hashtag_warning": "Ni fydd y postiad hwn wedi ei restru o dan unrhyw hashnod gan nad yw'n gyhoeddus. Dim ond postiadau cyhoeddus y mae modd eu chwilio drwy hashnod.",
   "compose_form.lock_disclaimer": "Nid yw eich cyfri wedi'i {locked}. Gall unrhyw un eich dilyn i weld eich postiadau dilynwyr-yn-unig.",
   "compose_form.lock_disclaimer.lock": "wedi ei gloi",
   "compose_form.placeholder": "Beth sydd ar eich meddwl?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Mewngofnodi",
   "sign_in_banner.text": "Mewngofnodwch i ddilyn proffiliau neu hashnodau, ffefrynnau, rhannu ac ymateb i bostiadau, neu ryngweithio o'ch cyfrif ar weinydd gwahanol.",
   "status.admin_account": "Agor rhyngwyneb cymedroli ar gyfer @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Agor rhyngwyneb cymedroli {domain}",
   "status.admin_status": "Agor y post hwn yn y rhyngwyneb goruwchwylio",
   "status.block": "Blocio @{name}",
   "status.bookmark": "Nod Tudalen",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 62bd7fd47..743822366 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Søg efter sprog...",
   "compose_form.direct_message_warning_learn_more": "Få mere at vide",
   "compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende krypteret. Del derfor ikke sensitiv information via Mastodon.",
-  "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, idet kun offentlige indlæg kan søges via hashtags.",
+  "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, da kun offentlige indlæg er søgbare via hashtags.",
   "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Hvad tænker du på?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Log ind",
   "sign_in_banner.text": "Log ind for at følge profiler eller hashtags, markere som favorit, dele og svare på indlæg eller interagere fra din konto på en anden server.",
   "status.admin_account": "Åbn modereringsbrugerflade for @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Åbn modereringsbrugerflade for {domain}",
   "status.admin_status": "Åbn dette indlæg i modereringsbrugerfladen",
   "status.block": "Blokér @{name}",
   "status.bookmark": "Bogmærk",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index cf339e20c..6659fb07f 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Sprachen suchen …",
   "compose_form.direct_message_warning_learn_more": "Mehr erfahren",
   "compose_form.encryption_warning": "Beiträge auf Mastodon sind nicht Ende-zu-Ende-verschlüsselt. Teile keine sensiblen Informationen über Mastodon.",
-  "compose_form.hashtag_warning": "Dieser Beitrag ist über Hashtags nicht zu finden, weil er nicht gelistet ist. Nur öffentliche Beiträge tauchen in den Hashtag-Timelines auf.",
+  "compose_form.hashtag_warning": "Dieser Beitrag wird unter keinem Hashtag sichtbar sein, weil er nicht öffentlich ist. Nur öffentliche Beiträge können nach Hashtags durchsucht werden.",
   "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Andere können dir folgen und deine Beiträge sehen, die nur für Follower bestimmt sind.",
   "compose_form.lock_disclaimer.lock": "geschützt",
   "compose_form.placeholder": "Was gibt's Neues?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Anmelden",
   "sign_in_banner.text": "Melde dich an, um Profilen oder Hashtags zu folgen, Beiträge zu favorisieren, zu teilen und auf sie zu antworten oder um von deinem Konto aus auf einem anderen Server zu interagieren.",
   "status.admin_account": "Moderationsoberfläche für @{name} öffnen",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Moderationsoberfläche für {domain} öffnen",
   "status.admin_status": "Diesen Beitrag in der Moderationsoberfläche öffnen",
   "status.block": "@{name} blockieren",
   "status.bookmark": "Beitrag als Lesezeichen setzen",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 0b46b954b..ad88129e9 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Αναζήτηση γλωσσών...",
   "compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα",
   "compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μην μοιράζεστε ευαίσθητες πληροφορίες μέσω του Mastodon.",
-  "compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
   "compose_form.lock_disclaimer.lock": "κλειδωμένο",
   "compose_form.placeholder": "Τι σκέφτεσαι;",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Σύνδεση",
   "sign_in_banner.text": "Συνδεθείτε για να ακολουθήσετε προφίλ ή ταμπέλες, αγαπημένα, να μοιραστείτε και να απαντήσετε σε δημοσιεύσεις ή να αλληλεπιδράσετε από το λογαριασμό σας σε διαφορετικό διακομιστή.",
   "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Άνοιγμα λειτουργίας διαμεσολάβησης για {domain}",
   "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
   "status.block": "Αποκλεισμός @{name}",
   "status.bookmark": "Σελιδοδείκτης",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index ecc84a5cf..242569c4d 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -295,7 +295,7 @@
   "interaction_modal.on_another_server": "On a different server",
   "interaction_modal.on_this_server": "On this server",
   "interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.",
-  "interaction_modal.preamble": "Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.",
+  "interaction_modal.preamble": "Since Mastodon is decentralised, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.",
   "interaction_modal.title.favourite": "Favourite {name}'s post",
   "interaction_modal.title.follow": "Follow {name}",
   "interaction_modal.title.reblog": "Boost {name}'s post",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index e875352bd..de2f7e670 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -81,7 +81,7 @@
   "audio.hide": "Kaŝi aŭdion",
   "autosuggest_hashtag.per_week": "po {count} por semajno",
   "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
-  "bundle_column_error.copy_stacktrace": "Kopii la raporto de error",
+  "bundle_column_error.copy_stacktrace": "Kopii la eraran raporton",
   "bundle_column_error.error.body": "La petita paĝo ne povas redonitis. Eble estas eraro.",
   "bundle_column_error.error.title": "Ho, ve!",
   "bundle_column_error.network.body": "Okazis eraro dum ŝarĝado de ĉi tiu paĝo. Tion povas kaŭzi portempa problemo pri via retkonektado aŭ pri ĉi tiu servilo.",
@@ -92,7 +92,7 @@
   "bundle_column_error.routing.title": "404",
   "bundle_modal_error.close": "Fermi",
   "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
-  "bundle_modal_error.retry": "Provu refoje",
+  "bundle_modal_error.retry": "Bonvolu reprovi",
   "closed_registrations.other_server_instructions": "Ĉar Mastodon estas malcentraliza, vi povas krei konton ĉe alia servilo kaj ankoraŭ komuniki kun ĉi tiu.",
   "closed_registrations_modal.description": "Krei konton ĉe {domain} aktuale ne eblas, tamen bonvole rimarku, ke vi ne bezonas konton specife ĉe {domain} por uzi Mastodon.",
   "closed_registrations_modal.find_another_server": "Trovi alian servilon",
@@ -128,7 +128,7 @@
   "compose.language.search": "Serĉi lingvojn...",
   "compose_form.direct_message_warning_learn_more": "Lerni pli",
   "compose_form.encryption_warning": "La afiŝoj en Mastodon ne estas tutvoje ĉifritaj. Ne kunhavigu tiklajn informojn ĉe Mastodon.",
-  "compose_form.hashtag_warning": "Ĉi tiu afiŝo ne estos listigita per ajna kradvorto. Nur publikaj afiŝoj estas serĉeblaj per kradvortoj.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Via konto ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn afiŝojn nur al la sekvantoj.",
   "compose_form.lock_disclaimer.lock": "ŝlosita",
   "compose_form.placeholder": "Kion vi pensas?",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 8bb9c4ae5..cd6e91e67 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Iniciar sesión",
   "sign_in_banner.text": "Iniciá sesión para seguir cuentas o etiquetas, marcar mensajes como favoritos, compartirlos y responderlos o interactuar desde tu cuenta en un servidor diferente.",
   "status.admin_account": "Abrir interface de moderación para @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Abrir interface de moderación para {domain}",
   "status.admin_status": "Abrir este mensaje en la interface de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Marcar",
@@ -559,7 +559,7 @@
   "status.favourite": "Marcar como favorito",
   "status.filter": "Filtrar este mensaje",
   "status.filtered": "Filtrado",
-  "status.hide": "Hide post",
+  "status.hide": "Ocultar mensaje",
   "status.history.created": "Creado por {name} el {date}",
   "status.history.edited": "Editado por {name} el {date}",
   "status.load_more": "Cargar más",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index 88938785d..00c815554 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Buscar idiomas...",
   "compose_form.direct_message_warning_learn_more": "Aprender mas",
   "compose_form.encryption_warning": "Las publicaciones en Mastodon no están cifradas de extremo a extremo. No comparta ninguna información sensible en Mastodon.",
-  "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.",
+  "compose_form.hashtag_warning": "Este toot no será listado bajo ningún hashtag dado que no es público. Solo toots públicos pueden ser buscados por hashtag.",
   "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
   "compose_form.lock_disclaimer.lock": "bloqueado",
   "compose_form.placeholder": "¿En qué estás pensando?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Iniciar sesión",
   "sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, marcar favorito, compartir y responder a publicaciones, o interactua desde tu cuenta en un servidor diferente.",
   "status.admin_account": "Abrir interfaz de moderación para @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Abrir interfaz de moderación para {domain}",
   "status.admin_status": "Abrir este estado en la interfaz de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Añadir marcador",
@@ -559,7 +559,7 @@
   "status.favourite": "Favorito",
   "status.filter": "Filtrar esta publicación",
   "status.filtered": "Filtrado",
-  "status.hide": "Hide post",
+  "status.hide": "Ocultar toot",
   "status.history.created": "{name} creó {date}",
   "status.history.edited": "{name} editado {date}",
   "status.load_more": "Cargar más",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 68f83bc8d..3a0fcd30c 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Buscar idiomas...",
   "compose_form.direct_message_warning_learn_more": "Aprender más",
   "compose_form.encryption_warning": "Las publicaciones en Mastodon no están cifradas de extremo a extremo. No comparta ninguna información sensible en Mastodon.",
-  "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.",
+  "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag no está pública. Solo las publicaciones públicas se pueden buscar por hashtag.",
   "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.",
   "compose_form.lock_disclaimer.lock": "bloqueado",
   "compose_form.placeholder": "¿En qué estás pensando?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Iniciar sesión",
   "sign_in_banner.text": "Inicia sesión en este servidor para seguir perfiles o etiquetas, guardar, compartir y responder a mensajes. También puedes interactuar desde otra cuenta en un servidor diferente.",
   "status.admin_account": "Abrir interfaz de moderación para @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Abrir interfaz de moderación para {domain}",
   "status.admin_status": "Abrir este estado en la interfaz de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Añadir marcador",
@@ -559,7 +559,7 @@
   "status.favourite": "Favorito",
   "status.filter": "Filtrar esta publicación",
   "status.filtered": "Filtrado",
-  "status.hide": "Hide post",
+  "status.hide": "Ocultar publicación",
   "status.history.created": "{name} creó {date}",
   "status.history.edited": "{name} editó {date}",
   "status.load_more": "Cargar más",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index f449d4d1b..5b36f41e4 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -6,7 +6,7 @@
   "about.domain_blocks.preamble": "Mastodon lubab tavaliselt vaadata sisu ning suhelda kasutajatega ükskõik millisest teisest fediversumi serverist. Need on erandid, mis on paika pandud sellel kindlal serveril.",
   "about.domain_blocks.silenced.explanation": "Sa ei näe üldiselt profiile ja sisu sellelt serverilt, kui sa just tahtlikult seda ei otsi või jälgimise moel nõusolekut ei anna.",
   "about.domain_blocks.silenced.title": "Piiratud",
-  "about.domain_blocks.suspended.explanation": "Mitte mingeid andmeid sellelt serveritl ei töödelda, salvestata ega vahetata, tehes igasuguse interaktsiooni või kirjavahetuse kasutajatega sellelt serverilt võimatuks.",
+  "about.domain_blocks.suspended.explanation": "Mitte mingeid andmeid sellelt serverilt ei töödelda, salvestata ega vahetata, tehes igasuguse interaktsiooni või kirjavahetuse selle serveri kasutajatega võimatuks.",
   "about.domain_blocks.suspended.title": "Peatatud",
   "about.not_available": "See info ei ole sellel serveril saadavaks tehtud.",
   "about.powered_by": "Hajutatud sotsiaalmeedia, mille taga on {mastodon}",
@@ -73,7 +73,7 @@
   "admin.dashboard.retention.cohort": "Registreerumiskuu",
   "admin.dashboard.retention.cohort_size": "Uued kasutajad",
   "alert.rate_limited.message": "Palun proovi uuesti pärast {retry_time, time, medium}.",
-  "alert.rate_limited.title": "Piiratud",
+  "alert.rate_limited.title": "Kiiruspiirang",
   "alert.unexpected.message": "Tekkis ootamatu viga.",
   "alert.unexpected.title": "Oih!",
   "announcement.announcement": "Teadaanne",
@@ -108,7 +108,7 @@
   "column.favourites": "Lemmikud",
   "column.follow_requests": "Jälgimistaotlused",
   "column.home": "Kodu",
-  "column.lists": "Nimistud",
+  "column.lists": "Nimekirjad",
   "column.mutes": "Vaigistatud kasutajad",
   "column.notifications": "Teated",
   "column.pins": "Kinnitatud postitused",
@@ -127,8 +127,8 @@
   "compose.language.change": "Muuda keelt",
   "compose.language.search": "Otsi keeli...",
   "compose_form.direct_message_warning_learn_more": "Vaata täpsemalt",
-  "compose_form.encryption_warning": "Postitused Mastodonis ei ole otsast-otsani krüpteeritud. Ärge jagage mingeid delikaatseid andmeid Mastodoni kaudu.",
-  "compose_form.hashtag_warning": "Seda postitust ei kuvata ühegi sildi all, sest see ei ole leitav avastustoimingute kaudu. Ainult avalikud postitused on sildi järgi otsitavad.",
+  "compose_form.encryption_warning": "Postitused Mastodonis ei ole otsast-otsani krüpteeritud. Ära jaga mingeid delikaatseid andmeid Mastodoni kaudu.",
+  "compose_form.hashtag_warning": "See postitus ei ilmu ühegi märksõna all, kuna pole avalik. Vaid avalikud postitused on märksõnade kaudu leitavad.",
   "compose_form.lock_disclaimer": "Su konto ei ole {locked}. Igaüks saab sind jälgida, et näha su ainult-jälgijatele postitusi.",
   "compose_form.lock_disclaimer.lock": "lukus",
   "compose_form.placeholder": "Millest mõtled?",
@@ -159,7 +159,7 @@
   "confirmations.delete_list.confirm": "Kustuta",
   "confirmations.delete_list.message": "Oled kindel, et soovid selle loetelu pöördumatult kustutada?",
   "confirmations.discard_edit_media.confirm": "Hülga",
-  "confirmations.discard_edit_media.message": "Teil on salvestamata muudatused meediakirjelduses või eelvaates, kas hülgame need?",
+  "confirmations.discard_edit_media.message": "Sul on salvestamata muudatusi meediakirjelduses või eelvaates, kas hülgad need?",
   "confirmations.domain_block.confirm": "Peida terve domeen",
   "confirmations.domain_block.message": "Oled ikka päris-päris kindel, et soovid blokeerida terve {domain}? Enamikel juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatavam. Sa ei näe selle domeeni sisu ühelgi avalikul ajajoonel või enda teadetes. Su jälgijad sellest domeenist eemaldatakse.",
   "confirmations.logout.confirm": "Välju",
@@ -212,27 +212,27 @@
   "empty_column.account_timeline": "Siin postitusi ei ole!",
   "empty_column.account_unavailable": "Profiil pole saadaval",
   "empty_column.blocks": "Blokeeritud kasutajaid pole.",
-  "empty_column.bookmarked_statuses": "Teil pole veel järjehoidjatesse lisatud postitusi. Kui lisate mõne, näete neid siin.",
-  "empty_column.community": "Kohalik ajajoon on tühi. Kirjutage midagi avalikult, et pall veerema ajada!",
-  "empty_column.direct": "Teil ei ole veel otsesõnumeid. Kui saadate või võtate mõne vastu, ilmuvad nad siia.",
+  "empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.",
+  "empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!",
+  "empty_column.direct": "Ei ole veel otsesõnumeid. Kui saadad või võtad mõne vastu, ilmuvad nad siia.",
   "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
   "empty_column.explore_statuses": "Praegu pole ühtegi trendi. Tule hiljem tagasi!",
-  "empty_column.favourited_statuses": "Teil pole veel lemmikpostitusi. Kui märgite mõne, näete neid siin.",
+  "empty_column.favourited_statuses": "Pole veel lemmikpostitusi. Kui märgid mõne, näed neid siin.",
   "empty_column.favourites": "Keegi pole veel seda postitust lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.",
   "empty_column.follow_recommendations": "Tundub, et sinu jaoks ei ole võimalik soovitusi luua. Proovi kasutada otsingut, et leida tuttavaid inimesi, või sirvi populaarseid silte.",
-  "empty_column.follow_requests": "Teil pole hetkel ühtegi jälgimistaotlust. Kui saate mõne, näete neid siin.",
+  "empty_column.follow_requests": "Pole hetkel ühtegi jälgimistaotlust. Kui saad mõne, näed neid siin.",
   "empty_column.hashtag": "Seda sildi all ei ole ühtegi postitust.",
   "empty_column.home": "Su koduajajoon on tühi. Jälgi rohkemaid inimesi, et seda täita {suggestions}",
   "empty_column.home.suggestions": "Vaata mõndasid soovitusi",
   "empty_column.list": "Siin loetelus pole veel midagi. Kui loetelu liikmed teevad uusi postitusi, näed neid siin.",
-  "empty_column.lists": "Teil pole veel ühtegi nimekirja. Kui loote mõne, näete neid siin.",
-  "empty_column.mutes": "Te pole veel ühtegi kasutajat vaigistanud.",
-  "empty_column.notifications": "Teil ei ole veel teateid. Suhelge teistega alustamaks vestlust.",
-  "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
-  "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me teile seda lehekülge korrektselt näidata.",
-  "error.unexpected_crash.explanation_addons": "Seda lehte ei suudetud õigesti kuvada. See viga arvatavasti põhjustas mingi brauseri lisand või automaattõlke tööriist.",
+  "empty_column.lists": "Pole veel ühtegi nimekirja. Kui lood mõne, näed neid siin.",
+  "empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.",
+  "empty_column.notifications": "Ei ole veel teateid. Kui keegi suhtleb sinuga, näed seda siin.",
+  "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikku või jälgi ise kasutajaid täitmaks seda ruumi",
+  "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvusprobleemi tõttu ei suutnud me seda lehekülge korrektselt näidata.",
+  "error.unexpected_crash.explanation_addons": "Seda lehte ei suudetud õigesti kuvada. Selle vea põhjustas arvatavasti mõni lehitseja lisand või automaattõlke tööriist.",
   "error.unexpected_crash.next_steps": "Proovi lehekülge uuesti avada. Kui see ei aita, võib proovida kasutada Mastodoni mõne muu veebilehitseja või äpi kaudu.",
-  "error.unexpected_crash.next_steps_addons": "Proovi need välja lülitada ja leht uuesti laadida. Kui sellest pole abi, võib olla võimalik Mastodoni kasutada mõne teise brauseri või rakendusega.",
+  "error.unexpected_crash.next_steps_addons": "Proovi need välja lülitada ja leht uuesti laadida. Kui sellest pole abi, võib siiski võimalik olla Mastodoni kasutada mõne teise lehitseja või rakendusega.",
   "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
   "errors.unexpected_crash.report_issue": "Teavita veast",
   "explore.search_results": "Otsitulemused",
@@ -241,13 +241,13 @@
   "explore.trending_links": "Uudised",
   "explore.trending_statuses": "Postitused",
   "explore.trending_tags": "Sildid",
-  "filter_modal.added.context_mismatch_explanation": "See filtrikategooria ei rakendu selles kontekstis, kuidas te postitusele jõudsite. Kui tahate postitust ka selles kontekstis filtreerida, võite muuta filtrit.",
+  "filter_modal.added.context_mismatch_explanation": "See filtrikategooria ei rakendu kontekstis, kuidas postituseni jõudsid. Kui tahad postitust ka selles kontekstis filtreerida, pead muutma filtrit.",
   "filter_modal.added.context_mismatch_title": "Konteksti mittesobivus!",
-  "filter_modal.added.expired_explanation": "Selle filtri kategooria on aegunud, peate muutma aegumiskuupäeva, kui tahate, et filter kehtiks.",
+  "filter_modal.added.expired_explanation": "Selle filtri kategooria on aegunud. pead muutma aegumiskuupäeva, kui tahad, et filter kehtiks.",
   "filter_modal.added.expired_title": "Aegunud filter!",
-  "filter_modal.added.review_and_configure": "Et vaadata üle ja täpsemalt seadistada seda filtrikategooriat, minge lehele {settings_link}.",
+  "filter_modal.added.review_and_configure": "Et vaadata üle ja täpsemalt seadistada seda filtrikategooriat, mine lehele {settings_link}.",
   "filter_modal.added.review_and_configure_title": "Filtrite sätted",
-  "filter_modal.added.settings_link": "sättete leht",
+  "filter_modal.added.settings_link": "sätete leht",
   "filter_modal.added.short_explanation": "See postitus on lisatud järgmisesse filtrikategooriasse: {title}.",
   "filter_modal.added.title": "Filter lisatud!",
   "filter_modal.select_filter.context_mismatch": "ei avaldu selles kontekstis",
@@ -288,14 +288,14 @@
   "home.column_settings.show_replies": "Näita vastuseid",
   "home.hide_announcements": "Peida teadaanded",
   "home.show_announcements": "Kuva teadaandeid",
-  "interaction_modal.description.favourite": "Mastodoni kontoga saate seda postitust lemmikuks märkida, et autor teaks, et te seda hindate ja hiljemaks alles jätta.",
-  "interaction_modal.description.follow": "Mastodoni kontoga saate jälgida kasutajat {name}, et tema postitusi oma kodu ajajoonel näha.",
+  "interaction_modal.description.favourite": "Mastodoni kontoga saad selle postituse lemmikuks märkida, et autor teaks, et sa hindad seda, ja hiljemaks alles jätta.",
+  "interaction_modal.description.follow": "Mastodoni kontoga saad jälgida kasutajat {name}, et tema postitusi oma kodu ajajoonel näha.",
   "interaction_modal.description.reblog": "Mastodoni kontoga saad seda postitust levitada, jagades seda oma jälgijatele.",
-  "interaction_modal.description.reply": "Mastodoni kontoga saate sellele postitusele vastata.",
+  "interaction_modal.description.reply": "Mastodoni kontoga saad sellele postitusele vastata.",
   "interaction_modal.on_another_server": "Teises serveris",
   "interaction_modal.on_this_server": "Selles serveris",
-  "interaction_modal.other_server_instructions": "Kopeeri ja aseta see URL oma lemmikusse Mastodoni äppi või oma Mastodoni serveri veebiliidesesse.",
-  "interaction_modal.preamble": "Kuna Mastodon on detsentraliseeritud, võite kasutada olemasolevat kontot, mis on teises Mastodoni servers või ühilduval platvormil, kui teil siin kontot ei ole.",
+  "interaction_modal.other_server_instructions": "Kopeeri ja kleebi see URL oma Mastodoni lemmikäppi või Mastodoni serveri veebiliidesesse.",
+  "interaction_modal.preamble": "Kuna Mastodon on detsentraliseeritud, saab kasutada teises Mastodoni serveris olevat kontot või ka ühilduval platvormil, kui siin serveril kontot ei ole.",
   "interaction_modal.title.favourite": "Lisa konto {name} postitus lemmikuks",
   "interaction_modal.title.follow": "Jälgi kontot {name}",
   "interaction_modal.title.reblog": "Jaga {name} postitust",
@@ -327,7 +327,7 @@
   "keyboard_shortcuts.open_media": "Ava meedia",
   "keyboard_shortcuts.pinned": "Ava kinnitatud postituste loetelu",
   "keyboard_shortcuts.profile": "Ava autori profiil",
-  "keyboard_shortcuts.reply": "vastamiseks",
+  "keyboard_shortcuts.reply": "Vasta postitusele",
   "keyboard_shortcuts.requests": "Ava jälgimistaotluste loetelu",
   "keyboard_shortcuts.search": "Fookus otsingule",
   "keyboard_shortcuts.spoilers": "Näita/peida CW väli",
@@ -344,25 +344,25 @@
   "lightbox.previous": "Eelmine",
   "limited_account_hint.action": "Näita profilli sellegipoolest",
   "limited_account_hint.title": "See profiil on peidetud {domain} moderaatorite poolt.",
-  "lists.account.add": "Lisa nimistusse",
-  "lists.account.remove": "Eemalda nimistust",
-  "lists.delete": "Kustuta nimistu",
-  "lists.edit": "Muuda nimistut",
+  "lists.account.add": "Lisa nimekirja",
+  "lists.account.remove": "Eemalda nimekirjast",
+  "lists.delete": "Kustuta nimekiri",
+  "lists.edit": "Muuda nimekirja",
   "lists.edit.submit": "Pealkirja muutmine",
-  "lists.new.create": "Lisa nimistu",
-  "lists.new.title_placeholder": "Uue nimistu pealkiri",
+  "lists.new.create": "Lisa nimekiri",
+  "lists.new.title_placeholder": "Uue nimekirja pealkiri",
   "lists.replies_policy.followed": "Igalt jälgitud kasutajalt",
   "lists.replies_policy.list": "Listi liikmetelt",
-  "lists.replies_policy.none": "Mitte kellegilt",
+  "lists.replies_policy.none": "Mitte kelleltki",
   "lists.replies_policy.title": "Näita vastuseid nendele:",
   "lists.search": "Otsi enda jälgitavate inimeste hulgast",
-  "lists.subheading": "Su loetelud",
+  "lists.subheading": "Sinu nimekirjad",
   "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
   "loading_indicator.label": "Laeb..",
   "media_gallery.toggle_visible": "{number, plural, one {Varja pilt} other {Varja pildid}}",
   "missing_indicator.label": "Ei leitud",
   "missing_indicator.sublabel": "Seda ressurssi ei leitud",
-  "moved_to_account_banner.text": "Su kontot {disabledAccount} ei ole praegu võimalik kasutada, sest kolisid kontole {movedToAccount}.",
+  "moved_to_account_banner.text": "Kontot {disabledAccount} ei ole praegu võimalik kasutada, sest kolisid kontole {movedToAccount}.",
   "mute_modal.duration": "Kestus",
   "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
   "mute_modal.indefinite": "Lõpmatu",
@@ -380,7 +380,7 @@
   "navigation_bar.filters": "Vaigistatud sõnad",
   "navigation_bar.follow_requests": "Jälgimistaotlused",
   "navigation_bar.follows_and_followers": "Jälgitavad ja jälgijad",
-  "navigation_bar.lists": "Nimistud",
+  "navigation_bar.lists": "Nimekirjad",
   "navigation_bar.logout": "Logi välja",
   "navigation_bar.mutes": "Vaigistatud kasutajad",
   "navigation_bar.personal": "Isiklik",
@@ -389,7 +389,7 @@
   "navigation_bar.public_timeline": "Föderatiivne ajajoon",
   "navigation_bar.search": "Otsing",
   "navigation_bar.security": "Turvalisus",
-  "not_signed_in_indicator.not_signed_in": "Peate logima sisse, et saada ligipääsu sellele ressursile.",
+  "not_signed_in_indicator.not_signed_in": "Pead sisse logima, et saada ligipääsu sellele ressursile.",
   "notification.admin.report": "{name} saatis teavituse {target} kohta",
   "notification.admin.sign_up": "{name} registreerus",
   "notification.favourite": "{name} märkis su postituse lemmikuks",
@@ -397,7 +397,7 @@
   "notification.follow_request": "{name} soovib teid jälgida",
   "notification.mention": "{name} mainis teid",
   "notification.own_poll": "Su küsitlus on lõppenud",
-  "notification.poll": "Küsitlus, milles osalesite, on lõppenud",
+  "notification.poll": "Küsitlus, milles osalesid, on lõppenud",
   "notification.reblog": "{name} jagas edasi postitust",
   "notification.status": "{name} just postitas",
   "notification.update": "{name} muutis postitust",
@@ -428,16 +428,16 @@
   "notifications.filter.follows": "Jälgib",
   "notifications.filter.mentions": "Mainimised",
   "notifications.filter.polls": "Küsitluse tulemused",
-  "notifications.filter.statuses": "Uuendused inimestelt, keda te jälgite",
+  "notifications.filter.statuses": "Uuendused inimestelt, keda jälgid",
   "notifications.grant_permission": "Anna luba.",
   "notifications.group": "{count} teated",
   "notifications.mark_as_read": "Märgi kõik teated loetuks",
-  "notifications.permission_denied": "Töölaua märguanded pole seadaval, kuna eelnevalt keelduti brauserile teavituste luba anda",
+  "notifications.permission_denied": "Töölauamärguanded pole saadaval, kuna eelnevalt keelduti lehitsejale teavituste luba andmast",
   "notifications.permission_denied_alert": "Töölaua märguandeid ei saa lubada, kuna brauseri luba on varem keeldutud",
   "notifications.permission_required": "Töölaua märguanded ei ole saadaval, kuna vajalik luba pole antud.",
   "notifications_permission_banner.enable": "Luba töölaua märguanded",
-  "notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tegevused tekitavad töölauamärguandeid kasutates selleks peale teavituste sisse lülitamist {icon} nuppu üleval.",
-  "notifications_permission_banner.title": "Ärge jääge millestki ilma",
+  "notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.",
+  "notifications_permission_banner.title": "Ära jää millestki ilma",
   "picture_in_picture.restore": "Pane tagasi",
   "poll.closed": "Suletud",
   "poll.refresh": "Värskenda",
@@ -461,7 +461,7 @@
   "privacy_policy.title": "Isikuandmete kaitse",
   "refresh": "Värskenda",
   "regeneration_indicator.label": "Laeb…",
-  "regeneration_indicator.sublabel": "Su kodu voog on ettevalmistamisel!",
+  "regeneration_indicator.sublabel": "Su koduvoog on ettevalmistamisel!",
   "relative_time.days": "{number}p",
   "relative_time.full.days": "{number, plural, one {# päev} other {# päeva}} tagasi",
   "relative_time.full.hours": "{number, plural, one {# tund} other {# tundi}} tagasi",
@@ -479,12 +479,12 @@
   "report.categories.other": "Muud",
   "report.categories.spam": "Rämpspost",
   "report.categories.violation": "Sisu, mis rikub ühte või enamat serveri reeglit",
-  "report.category.subtitle": "Valige parim vaste",
+  "report.category.subtitle": "Vali parim vaste",
   "report.category.title": "Selgita, mis on selle {type} valesti",
   "report.category.title_account": "kontoga",
   "report.category.title_status": "postitusega",
   "report.close": "Valmis",
-  "report.comment.title": "Kas on midagi veel, mis te arvate, et me peaks teadma?",
+  "report.comment.title": "Kas arvad, et on veel midagi, mida me peaks teadma?",
   "report.forward": "Edasta kasutajale {target}",
   "report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?",
   "report.mute": "Vaigista",
@@ -492,25 +492,25 @@
   "report.next": "Järgmine",
   "report.placeholder": "Lisaks kommentaarid",
   "report.reasons.dislike": "Mulle ei meeldi see",
-  "report.reasons.dislike_description": "Midagi sellist, mida te ei taha näha",
+  "report.reasons.dislike_description": "See on midagi sellist, mida sa näha ei taha",
   "report.reasons.other": "Midagi muud",
   "report.reasons.other_description": "Probleem ei sobi teistesse kategooriatesse",
   "report.reasons.spam": "See on rämpspost",
   "report.reasons.spam_description": "Pahatahtlikud lingid, võltssuhtlus või korduvad vastused",
   "report.reasons.violation": "Rikub serveri reegleid",
-  "report.reasons.violation_description": "Teate, et see rikub teatud reegleid",
-  "report.rules.subtitle": "Valige kõik, mis sobivad",
+  "report.reasons.violation_description": "Tead, et see rikub teatud reegleid",
+  "report.rules.subtitle": "Vali kõik, mis sobivad",
   "report.rules.title": "Milliseid reegleid rikutakse?",
-  "report.statuses.subtitle": "Valige kõik, mis sobivad",
+  "report.statuses.subtitle": "Vali kõik, mis sobivad",
   "report.statuses.title": "Kas on olemas postitusi, mis on sellele teavitusele tõenduseks?",
   "report.submit": "Esita",
   "report.target": "Teatamine {target} kohta",
-  "report.thanks.take_action": "Need on võimalused, mis teil on, et juhtida, mida Mastodonis näete:",
-  "report.thanks.take_action_actionable": "Kuniks me seda üle vaatame, võite teha need tegevused @{name} vastu:",
+  "report.thanks.take_action": "Need on su võimalused määrata, mida Mastodonis näed:",
+  "report.thanks.take_action_actionable": "Kuniks me seda üle vaatame, võid @{name} vastu teha need tegevused:",
   "report.thanks.title": "Ei taha seda näha?",
   "report.thanks.title_actionable": "Täname teavitamise eest, uurime seda.",
   "report.unfollow": "Lõpeta @{name} jälgimine",
-  "report.unfollow_explanation": "Te jälgite seda kontot. Et mitte näha tema postitusi oma kodu ajajoonel, lõpetage tema jälgimine.",
+  "report.unfollow_explanation": "Jälgid seda kontot. Et mitte näha tema postitusi oma kodu ajajoonel, lõpeta ta jälgimine.",
   "report_notification.attached_statuses": "{count, plural, one {{count} postitus} other {{count} postitust}} listatud",
   "report_notification.categories.other": "Muu",
   "report_notification.categories.spam": "Rämpspost",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Logi sisse",
   "sign_in_banner.text": "Logi sisse, et jälgida profiile või silte, märkida lemmikuks, jagada ja vastata postitustele või kasutada suhtlemiseks kontot teises serveris.",
   "status.admin_account": "Ava @{name} moderaatorivaates",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Ava {domain} modeereerimisliides",
   "status.admin_status": "Ava postitus moderaatorivaates",
   "status.block": "Blokeeri @{name}",
   "status.bookmark": "Järjehoidja",
@@ -559,7 +559,7 @@
   "status.favourite": "Lemmik",
   "status.filter": "Filtreeri seda postitust",
   "status.filtered": "Filtreeritud",
-  "status.hide": "Hide post",
+  "status.hide": "Peida postitus",
   "status.history.created": "{name} lõi {date}",
   "status.history.edited": "{name} muutis {date}",
   "status.load_more": "Lae rohkem",
@@ -597,7 +597,7 @@
   "status.unpin": "Eemalda profiilile kinnitus",
   "subscribed_languages.lead": "Pärast muudatust näed koduvaates ja loetelude ajajoontel postitusi valitud keeltes. Ära vali midagi, kui tahad näha postitusi kõikides keeltes.",
   "subscribed_languages.save": "Salvesta muudatused",
-  "subscribed_languages.target": "Muutke tellitud keeli {target} jaoks",
+  "subscribed_languages.target": "Muuda tellitud keeli {target} jaoks",
   "suggestions.dismiss": "Eira soovitust",
   "suggestions.header": "Teid võib huvitada…",
   "tabs_bar.federated_timeline": "Föderatiivne",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index c9115e470..9f771a811 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Bilatu hizkuntzak...",
   "compose_form.direct_message_warning_learn_more": "Ikasi gehiago",
   "compose_form.encryption_warning": "Mastodoneko bidalketak ez daude muturretik muturrera enkriptatuta. Ez partekatu informazio sentikorrik Mastodonen.",
-  "compose_form.hashtag_warning": "Bidalketa hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan bidalketa publikoak besterik ez dira agertzen.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren bidalketak ikusteko.",
   "compose_form.lock_disclaimer.lock": "giltzapetuta",
   "compose_form.placeholder": "Zer duzu buruan?",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index c44051d3a..a58d9824a 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -128,7 +128,7 @@
   "compose.language.search": "جست‌وجوی زبان‌ها…",
   "compose_form.direct_message_warning_learn_more": "بیشتر بدانید",
   "compose_form.encryption_warning": "فرسته‌های ماستودون رمزگذاری سرتاسری نشده‌اند. هیچ اطّلاعات حساسی را روی ماستودون هم‌رسانی نکنید.",
-  "compose_form.hashtag_warning": "از آن‌جا که این فرسته فهرست نشده است، در نتایج جست‌وجوی هشتگ‌ها پیدا نخواهد شد. تنها فرسته‌های عمومی را می‌توان با جست‌وجوی هشتگ یافت.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "حسابتان {locked} نیست. هر کسی می‌تواند پی‌گیرتان شده و فرسته‌های ویژهٔ پی‌گیرانتان را ببیند.",
   "compose_form.lock_disclaimer.lock": "قفل‌شده",
   "compose_form.placeholder": "تازه چه خبر؟",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index cc7633f22..0f2428308 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -28,7 +28,7 @@
   "account.endorse": "Suosittele profiilissasi",
   "account.featured_tags.last_status_at": "Viimeisin viesti {date}",
   "account.featured_tags.last_status_never": "Ei viestejä",
-  "account.featured_tags.title": "{name} esillä olevat hashtagit",
+  "account.featured_tags.title": "Käyttäjän {name} esillä olevat aihetunnisteet",
   "account.follow": "Seuratut",
   "account.followers": "Seuraajat",
   "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.",
@@ -128,7 +128,7 @@
   "compose.language.search": "Hae kieliä...",
   "compose_form.direct_message_warning_learn_more": "Lisätietoja",
   "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.",
-  "compose_form.hashtag_warning": "Tätä julkaisua listata minkään hastagin alle, koska se on listaamaton. Ainoastaan julkisia julkaisuja etsiä hastageilla.",
+  "compose_form.hashtag_warning": "Tätä julkaisua ei voi liittää aihetunnisteisiin, koska se ei ole julkinen. Vain näkyvyydeltään julkisiksi määritettyjä julkaisuja voidaan hakea aihetunnisteiden avulla.",
   "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.",
   "compose_form.lock_disclaimer.lock": "lukittu",
   "compose_form.placeholder": "Mitä sinulla on mielessäsi?",
@@ -189,7 +189,7 @@
   "dismissable_banner.dismiss": "Hylkää",
   "dismissable_banner.explore_links": "Näistä uutisista puhuvat ihmiset juuri nyt tällä ja muilla hajautetun verkon palvelimilla.",
   "dismissable_banner.explore_statuses": "Nämä viestit juuri nyt tältä ja muilta hajautetun verkon palvelimilta ovat saamassa vetoa tältä palvelimelta.",
-  "dismissable_banner.explore_tags": "Nämä hashtagit juuri nyt ovat saamassa vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.",
+  "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.",
   "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkisia viestejä ihmisiltä, jotka ovat tällä ja muilla hajautetun verkon palvelimilla, joista tämä palvelin tietää.",
   "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.",
   "embed.preview": "Se tulee näyttämään tältä:",
@@ -219,7 +219,7 @@
   "empty_column.explore_statuses": "Mikään ei ole nyt trendi. Tarkista myöhemmin!",
   "empty_column.favourited_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
   "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä viestiä suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
-  "empty_column.follow_recommendations": "Näyttää siltä, että sinulle ei voi luoda ehdotuksia. Voit yrittää etsiä ihmisiä, jotka saatat tuntea tai tutkia trendaavia aihesanoja.",
+  "empty_column.follow_recommendations": "Näyttää siltä, että sinulle ei voi luoda ehdotuksia. Voit yrittää etsiä ihmisiä, jotka saatat tuntea tai tutkia trendaavia aihetunnisteita.",
   "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.",
   "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.",
   "empty_column.home": "Kotisi aikajana on tyhjä! Seuraa lisää ihmisiä täyttääksesi sen. {suggestions}",
@@ -281,8 +281,8 @@
   "hashtag.column_settings.tag_mode.any": "Mikä tahansa näistä",
   "hashtag.column_settings.tag_mode.none": "Ei mitään näistä",
   "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen",
-  "hashtag.follow": "Seuraa hashtagia",
-  "hashtag.unfollow": "Lopeta seuraaminen hashtagilla",
+  "hashtag.follow": "Seuraa aihetunnistetta",
+  "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
   "home.column_settings.basic": "Perusasetukset",
   "home.column_settings.show_reblogs": "Näytä buustaukset",
   "home.column_settings.show_replies": "Näytä vastaukset",
@@ -519,10 +519,10 @@
   "search.placeholder": "Hae",
   "search.search_or_paste": "Etsi tai kirjoita URL-osoite",
   "search_popout.search_format": "Tarkennettu haku",
-  "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.",
+  "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja aihetunnisteet.",
   "search_popout.tips.hashtag": "aihetunnisteet",
   "search_popout.tips.status": "julkaisu",
-  "search_popout.tips.text": "Tekstihaku listaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit",
+  "search_popout.tips.text": "Tekstihaku listaa hakua vastaavat nimimerkit, käyttäjänimet ja aihetunnisteet",
   "search_popout.tips.user": "käyttäjä",
   "search_results.accounts": "Ihmiset",
   "search_results.all": "Kaikki",
@@ -540,9 +540,9 @@
   "server_banner.server_stats": "Palvelimen tilastot:",
   "sign_in_banner.create_account": "Luo tili",
   "sign_in_banner.sign_in": "Kirjaudu sisään",
-  "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai hashtageja, lisätäksesi suosikkeihin, jakaaksesi viestejä ja vastataksesi niihin tai ollaksesi vuorovaikutuksessa tililläsi toisella palvelimella.",
+  "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, lisätäksesi suosikkeihin, jakaaksesi julkaisuja ja vastataksesi niihin tai ollaksesi vuorovaikutuksessa tililläsi toisella palvelimella.",
   "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot",
   "status.admin_status": "Avaa julkaisu moderointinäkymässä",
   "status.block": "Estä @{name}",
   "status.bookmark": "Tallenna kirjanmerkki",
@@ -559,7 +559,7 @@
   "status.favourite": "Lisää suosikkeihin",
   "status.filter": "Suodata tämä viesti",
   "status.filtered": "Suodatettu",
-  "status.hide": "Hide post",
+  "status.hide": "Piilota viesti",
   "status.history.created": "{name} luotu {date}",
   "status.history.edited": "{name} muokkasi {date}",
   "status.load_more": "Lataa lisää",
@@ -610,8 +610,8 @@
   "time_remaining.moments": "Hetki jäljellä",
   "time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä",
   "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.",
-  "timeline_hint.resources.followers": "Seuraajat",
-  "timeline_hint.resources.follows": "seurattua",
+  "timeline_hint.resources.followers": "Seuraajia",
+  "timeline_hint.resources.follows": "Seurattuja",
   "timeline_hint.resources.statuses": "Vanhemmat julkaisut",
   "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}",
   "trends.trending_now": "Suosittua nyt",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index 48f9e9e4d..1841df058 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Leita eftir málum...",
   "compose_form.direct_message_warning_learn_more": "Fleiri upplýsingar",
   "compose_form.encryption_warning": "Postar á Mastodon eru ikki bronglaðir úr enda í annan. Lat vera við at deila viðkvæmar upplýsingar á Mastodon.",
-  "compose_form.hashtag_warning": "Hesin posturin verður ikki listaður undir nøkrum frámerki, tí hann er ólistaður. Tað ber einans til at leita eftir almennum postum eftir frámerki.",
+  "compose_form.hashtag_warning": "Hesin posturin verður ikki listaður undir nøkrum frámerki, tí hann er ikki almennur. Tað ber einans til at leita eftir almennum postum eftir frámerki.",
   "compose_form.lock_disclaimer": "Kontoin hjá tær er ikki {locked}. Øll kunnu fylgja tær og lesa tað, tú bert letur fyljgarar lesa.",
   "compose_form.lock_disclaimer.lock": "læst",
   "compose_form.placeholder": "Hvat hevur tú í huga?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Rita inn",
   "sign_in_banner.text": "Innrita fyri at fylgja vangum og frámerkjum, seta yndismerki á, deila og svara postum, ella at brúka kontuna til at samvirka á einum øðrum ambætara.",
   "status.admin_account": "Lat kjakleiðaramarkamót upp fyri @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Lat umsjónarmarkamót upp fyri {domain}",
   "status.admin_status": "Lat hendan postin upp í kjakleiðaramarkamótinum",
   "status.block": "Blokera @{name}",
   "status.bookmark": "Goym",
diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json
index d09c9e1ff..89c3e7644 100644
--- a/app/javascript/mastodon/locales/fr-QC.json
+++ b/app/javascript/mastodon/locales/fr-QC.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Rechercher des langues…",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
   "compose_form.encryption_warning": "Les publications sur Mastodon ne sont pas chiffrées de bout en bout. Veuillez ne partager aucune information sensible sur Mastodon.",
-  "compose_form.hashtag_warning": "Cette publication ne sera pas listée dans les recherches par hashtag car sa visibilité est réglée sur « non listée ». Seuls les publications avec visibilité « publique » peuvent être recherchées par hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos publications privés.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "À quoi pensez-vous?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Se connecter",
   "sign_in_banner.text": "Connectez-vous pour suivre les profils ou les hashtags, ajouter aux favoris, partager et répondre aux publications, ou interagir depuis votre compte sur un autre serveur.",
   "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Ouvrir l’interface de modération pour {domain}",
   "status.admin_status": "Ouvrir ce message dans l’interface de modération",
   "status.block": "Bloquer @{name}",
   "status.bookmark": "Ajouter aux signets",
@@ -559,7 +559,7 @@
   "status.favourite": "Ajouter aux favoris",
   "status.filter": "Filtrer cette publication",
   "status.filtered": "Filtrée",
-  "status.hide": "Hide post",
+  "status.hide": "Masquer la publication",
   "status.history.created": "créé par {name} {date}",
   "status.history.edited": "modifié par {name} {date}",
   "status.load_more": "Charger plus",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 938378d4d..42085dc22 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Rechercher des langues …",
   "compose_form.direct_message_warning_learn_more": "En savoir plus",
   "compose_form.encryption_warning": "Les messages sur Mastodon ne sont pas chiffrés de bout en bout. Ne partagez aucune information sensible sur Mastodon.",
-  "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur « non listé ». Seuls les pouets avec une visibilité « publique » peuvent être recherchés par hashtag.",
+  "compose_form.hashtag_warning": "Ce message n'apparaîtra pas dans les listes de hashtags, car il n'est pas public. Seuls les messages publics peuvent appaître dans les recherches par hashtags.",
   "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos messages privés.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "Qu’avez-vous en tête ?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Se connecter",
   "sign_in_banner.text": "Connectez-vous pour suivre les profils ou les hashtags, ajouter aux favoris, partager et répondre aux messages, ou interagir depuis votre compte sur un autre serveur.",
   "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Ouvrir l’interface de modération pour {domain}",
   "status.admin_status": "Ouvrir ce message dans l’interface de modération",
   "status.block": "Bloquer @{name}",
   "status.bookmark": "Ajouter aux marque-pages",
@@ -559,7 +559,7 @@
   "status.favourite": "Ajouter aux favoris",
   "status.filter": "Filtrer ce message",
   "status.filtered": "Filtré",
-  "status.hide": "Hide post",
+  "status.hide": "Masquer la publication",
   "status.history.created": "créé par {name} {date}",
   "status.history.edited": "édité par {name} {date}",
   "status.load_more": "Charger plus",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index 33a2a5988..9cbf32e5c 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Talen sykje…",
   "compose_form.direct_message_warning_learn_more": "Mear ynfo",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Dit berjocht falt net ûnder in hashtag te besjen, omdat dizze net op iepenbiere tiidlinen toand wurdt. Allinnich iepenbiere berjochten kinne fia hashtags fûn wurde.",
+  "compose_form.hashtag_warning": "Dit berjocht falt net ûnder in hashtag te besjen, omdat dizze net op iepenbier is. Allinnich iepenbiere berjochten kinne fia hashtags fûn wurde.",
   "compose_form.lock_disclaimer": "Jo account is net {locked}. Elkenien kin jo folgje en kin de berjochten sjen dy’t jo allinnich oan jo folgers rjochte hawwe.",
   "compose_form.lock_disclaimer.lock": "beskoattele",
   "compose_form.placeholder": "Wat wolle jo kwyt?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Oanmelde",
   "sign_in_banner.text": "Wannear’t jo in account op dizze server hawwe, kinne jo oanmelde om minsken of hashtags te folgjen, op berjochten te reagearjen of om dizze te dielen. Wannear’t jo in account op in oare server hawwe, kinne jo dêr oanmelde en dêr ynteraksje mei minsken op dizze server hawwe.",
   "status.admin_account": "Moderaasje-omjouwing fan @{name} iepenje",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Moderaasje-omjouwing fan {domain} iepenje",
   "status.admin_status": "Open this status in the moderation interface",
   "status.block": "@{name} blokkearje",
   "status.bookmark": "Blêdwizer tafoegje",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index bd9a83853..b5e2fbd8c 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Cuardaigh teangacha...",
   "compose_form.direct_message_warning_learn_more": "Tuilleadh eolais",
   "compose_form.encryption_warning": "Ní criptiú taobh-go-taobh déanta ar theachtaireachtaí ar Mhastodon. Ná roinn eolas íogair ar Mhastodon.",
-  "compose_form.hashtag_warning": "Ní áireofar an teachtaireacht seo faoi haischlib ar bith mar go bhfuil sí neamhliostaithe. Ní féidir ach teachtaireachtaí poiblí a chuardach de réir haischlib.",
+  "compose_form.hashtag_warning": "Ní áireofar an teachtaireacht seo faoi haischlib ar bith mar níl sí ar fáil don phobal. Ní féidir ach teachtaireachtaí poiblí a chuardach de réir haischlib.",
   "compose_form.lock_disclaimer": "Níl an cuntas seo {locked}. Féadfaidh duine ar bith tú a leanúint agus na postálacha atá dírithe agat ar do lucht leanúna amháin a fheiceáil.",
   "compose_form.lock_disclaimer.lock": "faoi ghlas",
   "compose_form.placeholder": "Cad atá ag tarlú?",
@@ -240,7 +240,7 @@
   "explore.title": "Féach thart",
   "explore.trending_links": "Nuacht",
   "explore.trending_statuses": "Postálacha",
-  "explore.trending_tags": "Hashtags",
+  "explore.trending_tags": "Haischlibeanna",
   "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.",
   "filter_modal.added.context_mismatch_title": "Context mismatch!",
   "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.",
@@ -538,7 +538,7 @@
   "server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
   "server_banner.learn_more": "Tuilleadh eolais",
   "server_banner.server_stats": "Server stats:",
-  "sign_in_banner.create_account": "Create account",
+  "sign_in_banner.create_account": "Cruthaigh cuntas",
   "sign_in_banner.sign_in": "Sinigh isteach",
   "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.",
   "status.admin_account": "Open moderation interface for @{name}",
@@ -557,9 +557,9 @@
   "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}",
   "status.embed": "Leabaigh",
   "status.favourite": "Rogha",
-  "status.filter": "Filter this post",
+  "status.filter": "Déan scagadh ar an bpostáil seo",
   "status.filtered": "Filtered",
-  "status.hide": "Hide post",
+  "status.hide": "Cuir postáil i bhfolach",
   "status.history.created": "{name} created {date}",
   "status.history.edited": "Curtha in eagar ag {name} in {date}",
   "status.load_more": "Lódáil a thuilleadh",
@@ -570,7 +570,7 @@
   "status.mute_conversation": "Balbhaigh comhrá",
   "status.open": "Expand this status",
   "status.pin": "Pionnáil ar do phróifíl",
-  "status.pinned": "Pinned post",
+  "status.pinned": "Postáil pionnáilte",
   "status.read_more": "Léan a thuilleadh",
   "status.reblog": "Mol",
   "status.reblog_private": "Mol le léargas bunúsach",
@@ -632,7 +632,7 @@
   "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
   "upload_modal.analyzing_picture": "Ag anailísiú íomhá…",
   "upload_modal.apply": "Cuir i bhFeidhm",
-  "upload_modal.applying": "Applying…",
+  "upload_modal.applying": "Á gcur i bhfeidhm…",
   "upload_modal.choose_image": "Roghnaigh íomhá",
   "upload_modal.description_placeholder": "Chuaigh bé mhórsách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig",
   "upload_modal.detect_text": "Detect text from picture",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
index db03860ee..995bb585d 100644
--- a/app/javascript/mastodon/locales/gd.json
+++ b/app/javascript/mastodon/locales/gd.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Lorg cànan…",
   "compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh",
   "compose_form.encryption_warning": "Chan eil crioptachadh ceann gu ceann air postaichean Mhastodon. Na co-roinn fiosrachadh dìomhair idir le Mastodon.",
-  "compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais on a tha e falaichte o liostaichean. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Chan eil an cunntas agad {locked}. ’S urrainn do dhuine sam bith ’gad leantainn is na postaichean agad a tha ag amas air an luchd-leantainn agad a-mhàin a shealltainn.",
   "compose_form.lock_disclaimer.lock": "glaiste",
   "compose_form.placeholder": "Dè tha air d’ aire?",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index b08aad21e..d430a5a8d 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Buscar idiomas...",
   "compose_form.direct_message_warning_learn_more": "Saber máis",
   "compose_form.encryption_warning": "As publicacións en Mastodon non están cifradas de extremo-a-extremo. Non compartas información sensible en Mastodon.",
-  "compose_form.hashtag_warning": "Esta publicación non aparecerá baixo ningún cancelo (hashtag) porque non está listada. Só se poden procurar publicacións públicas por cancelos.",
+  "compose_form.hashtag_warning": "Esta publicación non aparecerá incluída na lista dos cancelos xa que non é pública. Só se poden buscar cancelos nas publicacións públicas.",
   "compose_form.lock_disclaimer": "A túa conta non está {locked}. Todas poden seguirte para ollar os teus toots só para seguidoras.",
   "compose_form.lock_disclaimer.lock": "bloqueada",
   "compose_form.placeholder": "Que contas?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Acceder",
   "sign_in_banner.text": "Inicia sesión para seguir perfís ou etiquetas, marcar como favorita, responder a publicacións ou interactuar con outro servidor desde a túa conta.",
   "status.admin_account": "Abrir interface de moderación para @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Abrir interface de moderación para {domain}",
   "status.admin_status": "Abrir esta publicación na interface de moderación",
   "status.block": "Bloquear a @{name}",
   "status.bookmark": "Marcar",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 116bd2c5d..eb558a863 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -128,7 +128,7 @@
   "compose.language.search": "חיפוש שפות...",
   "compose_form.direct_message_warning_learn_more": "מידע נוסף",
   "compose_form.encryption_warning": "הודעות במסטודון לא מוצפנות מקצה לקצה. אל תשתפו מידע רגיש במסטודון.",
-  "compose_form.hashtag_warning": "הודעה זו לא תרשם תחת תגיות הקבצה (האשטאגים) היות והנראות שלה היא 'לא רשום'. רק הודעות ציבוריות יכולות להימצא באמצעות תגיות הקבצה.",
+  "compose_form.hashtag_warning": "הודעה זו לא תרשם תחת תגיות הקבצה היות והנראות שלה איננה 'ציבורית'. רק הודעות ציבוריות ימצאו בחיפוש תגיות הקבצה.",
   "compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.",
   "compose_form.lock_disclaimer.lock": "נעול",
   "compose_form.placeholder": "על מה את/ה חושב/ת ?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "התחברות",
   "sign_in_banner.text": "יש להתחבר כדי לעקוב אחרי משתמשים או תגיות, לחבב, לשתף ולענות לחצרוצים, או לנהל תקשורת מהחשבון שלך על שרת אחר.",
   "status.admin_account": "פתח/י ממשק ניהול עבור @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "פתיחת ממשק ניהול עבור {domain}",
   "status.admin_status": "Open this status in the moderation interface",
   "status.block": "חסימת @{name}",
   "status.bookmark": "סימניה",
@@ -559,7 +559,7 @@
   "status.favourite": "חיבוב",
   "status.filter": "סנן הודעה זו",
   "status.filtered": "סונן",
-  "status.hide": "החבא הודעה",
+  "status.hide": "הסתר הודעה",
   "status.history.created": "{name} יצר/ה {date}",
   "status.history.edited": "{name} ערך/ה {date}",
   "status.load_more": "עוד",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index d63838002..70edbbe5e 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -128,7 +128,7 @@
   "compose.language.search": "भाषाएँ खोजें...",
   "compose_form.direct_message_warning_learn_more": "और जानें",
   "compose_form.encryption_warning": "मास्टोडॉन पर पोस्ट एन्ड-टू-एन्ड एन्क्रिप्टेड नहीं है। कोई भी व्यक्तिगत जानकारी मास्टोडॉन पर मत भेजें।",
-  "compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "आपका खाता {locked} नहीं है। आपको केवल फॉलोवर्स को दिखाई दिए जाने वाले पोस्ट देखने के लिए कोई भी फॉलो कर सकता है।",
   "compose_form.lock_disclaimer.lock": "लॉक्ड",
   "compose_form.placeholder": "What is on your mind?",
@@ -300,8 +300,8 @@
   "interaction_modal.title.follow": "फॉलो {name}",
   "interaction_modal.title.reblog": "बूस्ट {name} की पोस्ट",
   "interaction_modal.title.reply": "{name} की पोस्ट पे रिप्लाई करें",
-  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
-  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
+  "intervals.full.days": "{number, plural,one {# दिन} other {# दिन}}",
+  "intervals.full.hours": "{number, plural,one {# घंटा} other {# घंटे}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
   "keyboard_shortcuts.back": "वापस जाने के लिए",
   "keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए",
@@ -363,7 +363,7 @@
   "missing_indicator.label": "नहीं मिला",
   "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।",
   "moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
-  "mute_modal.duration": "Duration",
+  "mute_modal.duration": "अवधि",
   "mute_modal.hide_notifications": "Hide notifications from this user?",
   "mute_modal.indefinite": "Indefinite",
   "navigation_bar.about": "विवरण",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 2143d09cf..5d38728b1 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -1,6 +1,6 @@
 {
   "about.blocks": "Moderated servers",
-  "about.contact": "Contact:",
+  "about.contact": "Kontakt:",
   "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.",
   "about.domain_blocks.no_reason_available": "Reason not available",
   "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.",
@@ -50,17 +50,17 @@
   "account.mute_notifications": "Utišaj obavijesti od @{name}",
   "account.muted": "Utišano",
   "account.open_original_page": "Open original page",
-  "account.posts": "Tootovi",
-  "account.posts_with_replies": "Tootovi i odgovori",
+  "account.posts": "Objave",
+  "account.posts_with_replies": "Objave i odgovori",
   "account.report": "Prijavi @{name}",
-  "account.requested": "Čekanje na potvrdu. Kliknite za otkazivanje zahtjeva za praćenje",
+  "account.requested": "Čekanje na potvrdu. Kliknite za poništavanje zahtjeva za praćenje",
   "account.requested_follow": "{name} has requested to follow you",
   "account.share": "Podijeli profil @{name}",
   "account.show_reblogs": "Prikaži boostove od @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}",
   "account.unblock": "Deblokiraj @{name}",
   "account.unblock_domain": "Deblokiraj domenu {domain}",
-  "account.unblock_short": "Unblock",
+  "account.unblock_short": "Deblokiraj",
   "account.unendorse": "Ne ističi na profilu",
   "account.unfollow": "Prestani pratiti",
   "account.unmute": "Poništi utišavanje @{name}",
@@ -83,9 +83,9 @@
   "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put",
   "bundle_column_error.copy_stacktrace": "Copy error report",
   "bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
-  "bundle_column_error.error.title": "Oh, no!",
+  "bundle_column_error.error.title": "Oh, ne!",
   "bundle_column_error.network.body": "There was an error when trying to load this page. This could be due to a temporary problem with your internet connection or this server.",
-  "bundle_column_error.network.title": "Network error",
+  "bundle_column_error.network.title": "Greška mreže",
   "bundle_column_error.retry": "Pokušajte ponovno",
   "bundle_column_error.return": "Go back home",
   "bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?",
@@ -124,11 +124,11 @@
   "community.column_settings.local_only": "Samo lokalno",
   "community.column_settings.media_only": "Samo medijski sadržaj",
   "community.column_settings.remote_only": "Samo udaljeno",
-  "compose.language.change": "Change language",
-  "compose.language.search": "Search languages...",
+  "compose.language.change": "Promijeni jezik",
+  "compose.language.search": "Pretraži jezike...",
   "compose_form.direct_message_warning_learn_more": "Saznajte više",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Ovaj toot neće biti prikazan ni pod jednim hashtagom jer je postavljen kao neprikazan. Samo javni tootovi mogu biti pretraživani pomoći hashtagova.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Vaš račun nije {locked}. Svatko Vas može pratiti kako bi vidjeli objave namijenjene Vašim pratiteljima.",
   "compose_form.lock_disclaimer.lock": "zaključan",
   "compose_form.placeholder": "Što ti je na umu?",
@@ -138,10 +138,10 @@
   "compose_form.poll.remove_option": "Ukloni ovu opciju",
   "compose_form.poll.switch_to_multiple": "Omogući višestruki odabir opcija ankete",
   "compose_form.poll.switch_to_single": "Omogući odabir samo jedne opcije ankete",
-  "compose_form.publish": "Publish",
-  "compose_form.publish_form": "Publish",
+  "compose_form.publish": "Objavi",
+  "compose_form.publish_form": "Objavi",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.save_changes": "Save changes",
+  "compose_form.save_changes": "Spremi promjene",
   "compose_form.sensitive.hide": "Označi medijski sadržaj kao osjetljiv",
   "compose_form.sensitive.marked": "Medijski sadržaj označen je kao osjetljiv",
   "compose_form.sensitive.unmarked": "Medijski sadržaj nije označen kao osjetljiv",
@@ -152,7 +152,7 @@
   "confirmations.block.block_and_report": "Blokiraj i prijavi",
   "confirmations.block.confirm": "Blokiraj",
   "confirmations.block.message": "Sigurno želite blokirati {name}?",
-  "confirmations.cancel_follow_request.confirm": "Withdraw request",
+  "confirmations.cancel_follow_request.confirm": "Povuci zahtjev",
   "confirmations.cancel_follow_request.message": "Are you sure you want to withdraw your request to follow {name}?",
   "confirmations.delete.confirm": "Obriši",
   "confirmations.delete.message": "Stvarno želite obrisati ovaj toot?",
@@ -235,28 +235,28 @@
   "error.unexpected_crash.next_steps_addons": "Pokušaj ih onemogućiti i osvježiti stranicu. Ako to ne pomogne, i dalje ćeš biti u mogućnosti koristiti Mastodon preko nekog drugog preglednika ili izvornog app-a.",
   "errors.unexpected_crash.copy_stacktrace": "Kopiraj stacktrace u međuspremnik",
   "errors.unexpected_crash.report_issue": "Prijavi problem",
-  "explore.search_results": "Search results",
-  "explore.suggested_follows": "For you",
+  "explore.search_results": "Rezultati pretrage",
+  "explore.suggested_follows": "Za vas",
   "explore.title": "Explore",
-  "explore.trending_links": "News",
-  "explore.trending_statuses": "Posts",
-  "explore.trending_tags": "Hashtags",
+  "explore.trending_links": "Novosti",
+  "explore.trending_statuses": "Objave",
+  "explore.trending_tags": "Hashtagovi",
   "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.",
   "filter_modal.added.context_mismatch_title": "Context mismatch!",
   "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.",
   "filter_modal.added.expired_title": "Expired filter!",
   "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.",
-  "filter_modal.added.review_and_configure_title": "Filter settings",
+  "filter_modal.added.review_and_configure_title": "Postavke filtara",
   "filter_modal.added.settings_link": "settings page",
   "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.",
-  "filter_modal.added.title": "Filter added!",
+  "filter_modal.added.title": "Filtar dodan!",
   "filter_modal.select_filter.context_mismatch": "does not apply to this context",
   "filter_modal.select_filter.expired": "expired",
-  "filter_modal.select_filter.prompt_new": "New category: {name}",
-  "filter_modal.select_filter.search": "Search or create",
-  "filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
-  "filter_modal.select_filter.title": "Filter this post",
-  "filter_modal.title.status": "Filter a post",
+  "filter_modal.select_filter.prompt_new": "Nova kategorija: {name}",
+  "filter_modal.select_filter.search": "Pretraži ili stvori",
+  "filter_modal.select_filter.subtitle": "Odaberite postojeću kategoriju ili stvorite novu",
+  "filter_modal.select_filter.title": "Filtriraj ovu objavu",
+  "filter_modal.title.status": "Filtriraj objavu",
   "follow_recommendations.done": "Učinjeno",
   "follow_recommendations.heading": "Zaprati osobe čije objave želiš vidjeti! Evo nekoliko prijedloga.",
   "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
@@ -265,11 +265,11 @@
   "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
   "footer.about": "About",
   "footer.directory": "Profiles directory",
-  "footer.get_app": "Get the app",
+  "footer.get_app": "Preuzmi aplikaciju",
   "footer.invite": "Invite people",
-  "footer.keyboard_shortcuts": "Keyboard shortcuts",
-  "footer.privacy_policy": "Privacy policy",
-  "footer.source_code": "View source code",
+  "footer.keyboard_shortcuts": "Tipkovni prečaci",
+  "footer.privacy_policy": "Pravila o zaštiti privatnosti",
+  "footer.source_code": "Prikaz izvornog koda",
   "generic.saved": "Spremljeno",
   "getting_started.heading": "Počnimo",
   "hashtag.column_header.tag_mode.all": "i {additional}",
@@ -281,8 +281,8 @@
   "hashtag.column_settings.tag_mode.any": "Bilo koji navedeni",
   "hashtag.column_settings.tag_mode.none": "Nijedan navedeni",
   "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac",
-  "hashtag.follow": "Follow hashtag",
-  "hashtag.unfollow": "Unfollow hashtag",
+  "hashtag.follow": "Prati hashtag",
+  "hashtag.unfollow": "Prestani pratiti hashtag",
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.show_reblogs": "Pokaži boostove",
   "home.column_settings.show_replies": "Pokaži odgovore",
@@ -453,19 +453,19 @@
   "privacy.direct.short": "Direct",
   "privacy.private.long": "Vidljivo samo pratiteljima",
   "privacy.private.short": "Followers-only",
-  "privacy.public.long": "Visible for all",
+  "privacy.public.long": "Vidljivo svima",
   "privacy.public.short": "Javno",
   "privacy.unlisted.long": "Visible for all, but opted-out of discovery features",
   "privacy.unlisted.short": "Neprikazano",
-  "privacy_policy.last_updated": "Last updated {date}",
-  "privacy_policy.title": "Privacy Policy",
+  "privacy_policy.last_updated": "Zadnje ažurirannje {date}",
+  "privacy_policy.title": "Pravila o zaštiti privatnosti",
   "refresh": "Osvježi",
   "regeneration_indicator.label": "Učitavanje…",
   "regeneration_indicator.sublabel": "Priprema se Vaša početna stranica!",
   "relative_time.days": "{number}d",
   "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
   "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
-  "relative_time.full.just_now": "just now",
+  "relative_time.full.just_now": "upravo sad",
   "relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
   "relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
   "relative_time.hours": "{number}h",
@@ -474,29 +474,29 @@
   "relative_time.seconds": "{number}s",
   "relative_time.today": "danas",
   "reply_indicator.cancel": "Otkaži",
-  "report.block": "Block",
-  "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
-  "report.categories.other": "Other",
+  "report.block": "Blokiraj",
+  "report.block_explanation": "Nećete vidjeti njihove objave. Oni neće vidjeti vaše objave i neće vas moći pratiti. Moći će vidjeti da su blokirani.",
+  "report.categories.other": "Drugo",
   "report.categories.spam": "Spam",
-  "report.categories.violation": "Content violates one or more server rules",
+  "report.categories.violation": "Sadržaj krši jedno ili više pravila poslužitelja",
   "report.category.subtitle": "Choose the best match",
-  "report.category.title": "Tell us what's going on with this {type}",
-  "report.category.title_account": "profile",
-  "report.category.title_status": "post",
-  "report.close": "Done",
-  "report.comment.title": "Is there anything else you think we should know?",
+  "report.category.title": "Recite nam što nije u redu s {type}",
+  "report.category.title_account": "profilom",
+  "report.category.title_status": "objavom",
+  "report.close": "Gotovo",
+  "report.comment.title": "Postoji li još nešto što bismo trebali znati?",
   "report.forward": "Proslijedi {target}",
   "report.forward_hint": "Račun je s drugog poslužitelja. Poslati anonimiziranu kopiju prijave i tamo?",
-  "report.mute": "Mute",
-  "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
-  "report.next": "Next",
+  "report.mute": "Utišaj",
+  "report.mute_explanation": "Nećete vidjeti njihove objave. Oni će vas i dalje moći pratiti i vidjeti vaše objave i neće znati da su utišani.",
+  "report.next": "Sljedeće",
   "report.placeholder": "Dodatni komentari",
-  "report.reasons.dislike": "I don't like it",
-  "report.reasons.dislike_description": "It is not something you want to see",
-  "report.reasons.other": "It's something else",
-  "report.reasons.other_description": "The issue does not fit into other categories",
-  "report.reasons.spam": "It's spam",
-  "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies",
+  "report.reasons.dislike": "Ne sviđa mi se",
+  "report.reasons.dislike_description": "Nije nešto što želiš vidjeti",
+  "report.reasons.other": "Nešto drugo",
+  "report.reasons.other_description": "Problem ne spada u nijednu drugu kategoriju",
+  "report.reasons.spam": "Spam je",
+  "report.reasons.spam_description": "Zlonamjerne poveznice, lažni angažman ili repetitivni odgovori",
   "report.reasons.violation": "It violates server rules",
   "report.reasons.violation_description": "You are aware that it breaks specific rules",
   "report.rules.subtitle": "Select all that apply",
@@ -533,43 +533,43 @@
   "search_results.title": "Search for {q}",
   "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
   "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
-  "server_banner.active_users": "active users",
+  "server_banner.active_users": "aktivni korisnici",
   "server_banner.administered_by": "Administered by:",
   "server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
-  "server_banner.learn_more": "Learn more",
+  "server_banner.learn_more": "Saznaj više",
   "server_banner.server_stats": "Server stats:",
-  "sign_in_banner.create_account": "Create account",
-  "sign_in_banner.sign_in": "Sign in",
+  "sign_in_banner.create_account": "Stvori račun",
+  "sign_in_banner.sign_in": "Prijavi se",
   "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.",
   "status.admin_account": "Open moderation interface for @{name}",
   "status.admin_domain": "Open moderation interface for {domain}",
   "status.admin_status": "Open this status in the moderation interface",
   "status.block": "Block @{name}",
-  "status.bookmark": "Bookmark",
+  "status.bookmark": "Dodaj u favorite",
   "status.cancel_reblog_private": "Unboost",
   "status.cannot_reblog": "Ova objava ne može biti boostana",
   "status.copy": "Copy link to status",
   "status.delete": "Obriši",
   "status.detailed_status": "Detailed conversation view",
   "status.direct": "Direct message @{name}",
-  "status.edit": "Edit",
-  "status.edited": "Edited {date}",
+  "status.edit": "Uredi",
+  "status.edited": "Uređeno {date}",
   "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
-  "status.embed": "Embed",
+  "status.embed": "Umetni",
   "status.favourite": "Označi favoritom",
-  "status.filter": "Filter this post",
-  "status.filtered": "Filtered",
-  "status.hide": "Hide post",
-  "status.history.created": "{name} created {date}",
-  "status.history.edited": "{name} edited {date}",
+  "status.filter": "Filtriraj ovu objavu",
+  "status.filtered": "Filtrirano",
+  "status.hide": "Sakrij objavu",
+  "status.history.created": "Kreirao/la {name} prije {date}",
+  "status.history.edited": "Uredio/la {name} prije {date}",
   "status.load_more": "Učitaj više",
   "status.media_hidden": "Sakriven medijski sadržaj",
   "status.mention": "Spomeni @{name}",
-  "status.more": "More",
-  "status.mute": "Mute @{name}",
+  "status.more": "Više",
+  "status.mute": "Utišaj @{name}",
   "status.mute_conversation": "Utišaj razgovor",
   "status.open": "Proširi ovaj toot",
-  "status.pin": "Pin on profile",
+  "status.pin": "Prikvači na profil",
   "status.pinned": "Pinned toot",
   "status.read_more": "Pročitajte više",
   "status.reblog": "Boostaj",
@@ -578,25 +578,25 @@
   "status.reblogs.empty": "Nitko još nije boostao ovaj toot. Kada netko to učini, ovdje će biti prikazani.",
   "status.redraft": "Izbriši i ponovno uredi",
   "status.remove_bookmark": "Ukloni knjižnu oznaku",
-  "status.replied_to": "Replied to {name}",
+  "status.replied_to": "Odgovorio/la je {name}",
   "status.reply": "Odgovori",
   "status.replyAll": "Odgovori na niz",
   "status.report": "Prijavi @{name}",
   "status.sensitive_warning": "Osjetljiv sadržaj",
   "status.share": "Podijeli",
-  "status.show_filter_reason": "Show anyway",
+  "status.show_filter_reason": "Svejedno prikaži",
   "status.show_less": "Pokaži manje",
   "status.show_less_all": "Show less for all",
   "status.show_more": "Pokaži više",
   "status.show_more_all": "Show more for all",
-  "status.show_original": "Show original",
-  "status.translate": "Translate",
-  "status.translated_from_with": "Translated from {lang} using {provider}",
+  "status.show_original": "Prikaži original",
+  "status.translate": "Prevedi",
+  "status.translated_from_with": "Prevedno s {lang} koristeći {provider}",
   "status.uncached_media_warning": "Nije dostupno",
   "status.unmute_conversation": "Poništi utišavanje razgovora",
   "status.unpin": "Otkvači s profila",
   "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.",
-  "subscribed_languages.save": "Save changes",
+  "subscribed_languages.save": "Spremi promjene",
   "subscribed_languages.target": "Change subscribed languages for {target}",
   "suggestions.dismiss": "Odbaci prijedlog",
   "suggestions.header": "Možda Vas zanima…",
@@ -625,23 +625,23 @@
   "upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.",
   "upload_form.audio_description": "Opišite za ljude sa slabim sluhom",
   "upload_form.description": "Opišite za ljude sa slabim vidom",
-  "upload_form.description_missing": "No description added",
+  "upload_form.description_missing": "Bez opisa",
   "upload_form.edit": "Uredi",
   "upload_form.thumbnail": "Promijeni pretpregled",
   "upload_form.undo": "Obriši",
   "upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom",
   "upload_modal.analyzing_picture": "Analiza slike…",
   "upload_modal.apply": "Primijeni",
-  "upload_modal.applying": "Applying…",
+  "upload_modal.applying": "Primjenjivanje…",
   "upload_modal.choose_image": "Odaberite sliku",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
+  "upload_modal.description_placeholder": "Gojazni đačić s biciklom drži hmelj i finu vatu u džepu nošnje",
   "upload_modal.detect_text": "Detektiraj tekst sa slike",
   "upload_modal.edit_media": "Uređivanje medija",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preparing_ocr": "Preparing OCR…",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.preview_label": "Pretpregled ({ratio})",
   "upload_progress.label": "Prenošenje...",
-  "upload_progress.processing": "Processing…",
+  "upload_progress.processing": "Obrada…",
   "video.close": "Zatvori video",
   "video.download": "Preuzmi datoteku",
   "video.exit_fullscreen": "Izađi iz cijelog zaslona",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index c1c1dfb1c..7c91ff568 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Nyelv keresése...",
   "compose_form.direct_message_warning_learn_more": "Tudj meg többet",
   "compose_form.encryption_warning": "A bejegyzések Mastodonon nem használnak végpontok közötti titkosítást. Ne ossz meg semmilyen érzékeny információt Mastodonon.",
-  "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel listázatlan. Csak a nyilvános bejegyzések kereshetők hashtaggel.",
+  "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel nem nyilvános. Csak a nyilvános bejegyzések kereshetők hashtaggel.",
   "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.",
   "compose_form.lock_disclaimer.lock": "lezárva",
   "compose_form.placeholder": "Mi jár a fejedben?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Bejelentkezés",
   "sign_in_banner.text": "Jelentkezz be profilok vagy hashtagek követéséhez, bejegyzések megosztásához, megválaszolásához, vagy kommunikálj a fiókodból más kiszolgálókkal.",
   "status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "A következő moderációs felületének megnyitása: @{domain}",
   "status.admin_status": "Bejegyzés megnyitása a moderációs felületen",
   "status.block": "@{name} letiltása",
   "status.bookmark": "Könyvjelzőzés",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 591144aff..137983cbc 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Իմանալ աւելին",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Այս գրառումը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։",
   "compose_form.lock_disclaimer.lock": "փակ",
   "compose_form.placeholder": "Ի՞նչ կայ մտքիդ",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 34dc71836..7ed8a02ab 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Telusuri bahasa...",
   "compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya",
   "compose_form.encryption_warning": "Kiriman di Mastodon tidak dienkripsi end-to-end. Jangan bagikan informasi sensitif melalui Mastodon.",
-  "compose_form.hashtag_warning": "Kiriman ini tidak akan ada dalam daftar tagar mana pun karena telah diatur sebagai tidak terdaftar. Hanya kiriman publik yang bisa dicari dengan tagar.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Akun Anda tidak {locked}. Semua orang dapat mengikuti Anda untuk melihat kiriman khusus untuk pengikut Anda.",
   "compose_form.lock_disclaimer.lock": "terkunci",
   "compose_form.placeholder": "Apa yang ada di pikiran Anda?",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 33e780d3f..e57d37787 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Trovez linguo...",
   "compose_form.direct_message_warning_learn_more": "Lernez pluse",
   "compose_form.encryption_warning": "Posti en Mastodon ne intersequante chifrigesas. Ne partigez irga privata informo che Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Vua konto ne esas {locked}. Irgu povas sequar vu por vidar vua sequanto-nura posti.",
   "compose_form.lock_disclaimer.lock": "klefagesas",
   "compose_form.placeholder": "Quo esas en tua spirito?",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index d5a81ece5..f5271f245 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Leita að tungumálum...",
   "compose_form.direct_message_warning_learn_more": "Kanna nánar",
   "compose_form.encryption_warning": "Færslur á Mastodon eru ekki enda-í-enda dulritaðar. Ekki deila viðkvæmum upplýsingum á Mastodon.",
-  "compose_form.hashtag_warning": "Þessi færsla verður ekki talin með undir nokkru myllumerki þar sem það er óskráð. Einungis er hægt að leita að opinberum færslum eftir myllumerkjum.",
+  "compose_form.hashtag_warning": "Þessi færsla verður ekki talin með undir nokkru myllumerki þar sem það er ekki opinbert. Einungis er hægt að leita að opinberum færslum eftir myllumerkjum.",
   "compose_form.lock_disclaimer": "Aðgangurinn þinn er ekki {locked}. Hver sem er getur fylgst með þér til að sjá þær færslur sem einungis eru til fylgjenda þinna.",
   "compose_form.lock_disclaimer.lock": "læstur",
   "compose_form.placeholder": "Hvað liggur þér á hjarta?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Skrá inn",
   "sign_in_banner.text": "Skráðu þig inn til að fylgjast með notendum eða myllumerkjum, svara færslum, deila þeim eða setja í eftirlæti, eða eiga í samskiptum á aðgangnum þínum á öðrum netþjónum.",
   "status.admin_account": "Opna umsjónarviðmót fyrir @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Opna umsjónarviðmót fyrir @{domain}",
   "status.admin_status": "Opna þessa færslu í umsjónarviðmótinu",
   "status.block": "Útiloka @{name}",
   "status.bookmark": "Bókamerki",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 577a274a2..080bfafbd 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Cerca lingue...",
   "compose_form.direct_message_warning_learn_more": "Scopri di più",
   "compose_form.encryption_warning": "I post su Mastodon non sono crittografati end-to-end. Non condividere alcuna informazione sensibile su Mastodon.",
-  "compose_form.hashtag_warning": "Questo post non sarà elencato sotto alcun hashtag, non avendo una lista. Solo i post pubblici possono esser cercati per hashtag.",
+  "compose_form.hashtag_warning": "Questo post non sarà elencato sotto alcun hashtag, poiché non è pubblico. Solo i post pubblici possono essere cercati per hashtag.",
   "compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti per visualizzare i tuoi post per soli seguaci.",
   "compose_form.lock_disclaimer.lock": "bloccato",
   "compose_form.placeholder": "Cos'hai in mente?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Accedi",
   "sign_in_banner.text": "Accedi per seguire profili o hashtag, salvare tra i preferiti, condividere e rispondere ai post, o interagire dal tuo profilo su un server differente.",
   "status.admin_account": "Apri interfaccia di moderazione per @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Apri l'interfaccia di moderazione per {domain}",
   "status.admin_status": "Apri questo post nell'interfaccia di moderazione",
   "status.block": "Blocca @{name}",
   "status.bookmark": "Aggiungi segnalibro",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 86e11aae0..5431d79c3 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -132,7 +132,7 @@
   "compose.language.search": "言語を検索...",
   "compose_form.direct_message_warning_learn_more": "もっと詳しく",
   "compose_form.encryption_warning": "Mastodonの投稿はエンドツーエンド暗号化に対応していません。安全に送受信されるべき情報をMastodonで共有しないでください。",
-  "compose_form.hashtag_warning": "この投稿は公開設定ではないのでハッシュタグの一覧に表示されません。公開投稿だけがハッシュタグで検索できます。",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。",
   "compose_form.lock_disclaimer.lock": "承認制",
   "compose_form.placeholder": "今なにしてる?",
@@ -546,7 +546,7 @@
   "sign_in_banner.sign_in": "ログイン",
   "sign_in_banner.text": "ログインしてプロファイルやハッシュタグ、お気に入りをフォローしたり、投稿を共有したり、返信したり、別のサーバーのアカウントと交流したりできます。",
   "status.admin_account": "@{name}さんのモデレーション画面を開く",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "{domain}のモデレーション画面を開く",
   "status.admin_status": "この投稿をモデレーション画面で開く",
   "status.block": "@{name}さんをブロック",
   "status.bookmark": "ブックマーク",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index d2212aeab..64e726321 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "გაიგე მეტი",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "ეს ტუტი არ მოექცევა ჰეშტეგების ქვეს, რამეთუ ის არაა მითითებული. მხოლოდ ღია ტუტები მოიძებნება ჰეშტეგით.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "თქვენი ანგარიში არაა {locked}. ნებისმიერს შეიძლია გამოგყვეთ, რომ იხილოს თქვენი მიმდევრებზე გათვლილი პოსტები.",
   "compose_form.lock_disclaimer.lock": "ჩაკეტილი",
   "compose_form.placeholder": "რაზე ფიქრობ?",
diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json
index a0bdd5490..609c29540 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Nadi tutlayin …",
   "compose_form.direct_message_warning_learn_more": "Issin ugar",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Amiḍan-ik·im ur yelli ara {locked}. Menwala yezmer ad k·kem-yeḍfeṛ akken ad iẓer acu tbeṭṭuḍ akked yimeḍfaṛen-ik·im.",
   "compose_form.lock_disclaimer.lock": "yettwacekkel",
   "compose_form.placeholder": "D acu i itezzin deg wallaɣ?",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 73665788d..d1f5faf6d 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Көбірек білу",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Бұл пост іздеуде хэштегпен шықпайды, өйткені ол бәріне ашық емес. Тек ашық жазбаларды ғана хэштег арқылы іздеп табуға болады.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Аккаунтыңыз {locked} емес. Кез келген адам жазылып, сізді оқи алады.",
   "compose_form.lock_disclaimer.lock": "жабық",
   "compose_form.placeholder": "Не бөліскіңіз келеді?",
diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json
index 4c6d8985a..c6f8322df 100644
--- a/app/javascript/mastodon/locales/kn.json
+++ b/app/javascript/mastodon/locales/kn.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 1ad6fe508..a94801ad8 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -128,7 +128,7 @@
   "compose.language.search": "언어 검색...",
   "compose_form.direct_message_warning_learn_more": "더 알아보기",
   "compose_form.encryption_warning": "마스토돈의 게시물들은 종단간 암호화가 되지 않습니다. 민감한 정보를 마스토돈을 통해 전달하지 마세요.",
-  "compose_form.hashtag_warning": "이 게시물은 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색 될 수 있습니다.",
+  "compose_form.hashtag_warning": "이 게시물은 전체공개가 아니기 때문에 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색될 수 있습니다.",
   "compose_form.lock_disclaimer": "이 계정은 {locked}상태가 아닙니다. 누구나 이 계정을 팔로우 하여 팔로워 전용의 게시물을 볼 수 있습니다.",
   "compose_form.lock_disclaimer.lock": "비공개",
   "compose_form.placeholder": "지금 무슨 생각을 하고 있나요?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "로그인",
   "sign_in_banner.text": "로그인을 통해 프로필이나 해시태그를 팔로우하거나 마음에 들어하거나 공유하고 답글을 달 수 있습니다, 혹은 다른 서버에 있는 본인의 계정을 통해 참여할 수도 있습니다.",
   "status.admin_account": "@{name}에 대한 중재 화면 열기",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "{domain}에 대한 중재 화면 열기",
   "status.admin_status": "중재 화면에서 이 게시물 열기",
   "status.block": "@{name} 차단",
   "status.bookmark": "북마크",
diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json
index 24e8c04dd..7dbb34591 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Li zimanan bigere...",
   "compose_form.direct_message_warning_learn_more": "Bêtir fêr bibe",
   "compose_form.encryption_warning": "Şandiyên li ser Mastodon dawî-bi-dawî ne şîfrekirî ne. Li ser Mastodon zanyariyên hestyar parve neke.",
-  "compose_form.hashtag_warning": "Ev şandî ji ber ku nehatiye tomarkirin dê di binê hashtagê de neyê tomar kirin. Tenê peyamên gelemperî dikarin bi hashtagê werin lêgerîn.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Ajimêrê te ne {locked}. Herkes dikare te bişopîne da ku şandiyên te yên tenê ji şopînerên re têne xuyakirin bibînin.",
   "compose_form.lock_disclaimer.lock": "girtî ye",
   "compose_form.placeholder": "Çi di hişê te derbas dibe?",
diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json
index 932944411..f56974d2b 100644
--- a/app/javascript/mastodon/locales/kw.json
+++ b/app/javascript/mastodon/locales/kw.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Dyski moy",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Ny vydh an post ma diskwedhys yn-dann vòlnos vyth awos y vos mes a rol. Ny yllir hwilas saw poblow postek dre vòlnos.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Nyns yw agas akont {locked}. Piwpynag a yll agas holya dhe weles agas postow holyoryon-hepken.",
   "compose_form.lock_disclaimer.lock": "Alhwedhys",
   "compose_form.placeholder": "Pyth eus yn agas brys?",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 476ade0ef..1d4923254 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index a82b7d1ca..a593ab501 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Meklēt valodas...",
   "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk",
   "compose_form.encryption_warning": "Ziņas vietnē Mastodon nav pilnībā šifrētas. Nedalies ar sensitīvu informāciju caur Mastodon.",
-  "compose_form.hashtag_warning": "Šo ziņu nebūs iespējams atrast tēmturos, jo tā ir nerindota. Tēmturos ir redzamas tikai publiskas ziņas.",
+  "compose_form.hashtag_warning": "Šī ziņa netiks norādīta zem nevienas atsauces, jo tā nav publiska. Tikai publiskās ziņās var meklēt pēc atsauces.",
   "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var tev piesekot un redzēt tikai sekotājiem paredzētos ziņojumus.",
   "compose_form.lock_disclaimer.lock": "slēgts",
   "compose_form.placeholder": "Kas tev padomā?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Pierakstīties",
   "sign_in_banner.text": "Pieraksties, lai sekotu profiliem vai atsaucēm, pievienotu ziņas izlasei, kopīgotu ziņas un atbildētu uz tām vai mijiedarbotos no sava konta citā serverī.",
   "status.admin_account": "Atvērt @{name} moderēšanas saskarni",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Atvērt {domain} moderēšanas saskarni",
   "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē",
   "status.block": "Bloķēt @{name}",
   "status.bookmark": "Grāmatzīme",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index 8563133ab..62be86557 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Научи повеќе",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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": "заклучен",
   "compose_form.placeholder": "Што имате на ум?",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index c999b97ee..ee33be4a4 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -128,7 +128,7 @@
   "compose.language.search": "ഭാഷകൾ തിരയുക...",
   "compose_form.direct_message_warning_learn_more": "കൂടുതൽ പഠിക്കുക",
   "compose_form.encryption_warning": "Mastodon-ലെ പോസ്റ്റുകൾ എൻഡ്-ടു-എൻഡ് എൻക്രിപ്റ്റ് ചെയ്തവയല്ല. അതിനാൽ Mastodon-ൽ പ്രധാനപ്പെട്ട വിവരങ്ങളൊന്നും പങ്കിടരുത്.",
-  "compose_form.hashtag_warning": "ഈ ടൂട്ട് പട്ടികയിൽ ഇല്ലാത്തതിനാൽ ഒരു ചർച്ചാവിഷയത്തിന്റെ പട്ടികയിലും പെടുകയില്ല. പരസ്യമായ ടൂട്ടുകൾ മാത്രമേ ചർച്ചാവിഷയം അടിസ്ഥാനമാക്കി തിരയുവാൻ സാധിക്കുകയുള്ളു.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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": "ലോക്കുചെയ്തു",
   "compose_form.placeholder": "നിങ്ങളുടെ മനസ്സിൽ എന്താണ്?",
diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json
index 686c5cd32..c0028e2d4 100644
--- a/app/javascript/mastodon/locales/mr.json
+++ b/app/javascript/mastodon/locales/mr.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "अधिक जाणून घ्या",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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": "आपल्या मनात काय आहे?",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index be2412910..715c59f7e 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Cari bahasa...",
   "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut",
   "compose_form.encryption_warning": "Hantaran pada Mastodon tidak disulitkan hujung ke hujung. Jangan berkongsi sebarang maklumat sensitif melalui Mastodon.",
-  "compose_form.hashtag_warning": "Hantaran ini tidak akan disenaraikan di bawah mana-mana tanda pagar kerana ia tidak tersenarai. Hanya hantaran awam sahaja boleh dicari menggunakan tanda pagar.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Akaun anda tidak {locked}. Sesiapa pun boleh mengikuti anda untuk melihat hantaran pengikut-sahaja anda.",
   "compose_form.lock_disclaimer.lock": "dikunci",
   "compose_form.placeholder": "Apakah yang sedang anda fikirkan?",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 9777b2f58..45ac3cdaf 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Talen zoeken...",
   "compose_form.direct_message_warning_learn_more": "Meer leren",
   "compose_form.encryption_warning": "Berichten op Mastodon worden, net zoals op andere social media, niet end-to-end versleuteld. Deel daarom geen gevoelige informatie via Mastodon.",
-  "compose_form.hashtag_warning": "Dit bericht valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare berichten kunnen via hashtags gevonden worden.",
+  "compose_form.hashtag_warning": "Dit bericht valt niet onder een hashtag te bekijken, omdat deze niet op openbaar is. Alleen openbare berichten kunnen via hashtags gevonden worden.",
   "compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de berichten zien die je alleen aan jouw volgers hebt gericht.",
   "compose_form.lock_disclaimer.lock": "besloten",
   "compose_form.placeholder": "Wat wil je kwijt?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Inloggen",
   "sign_in_banner.text": "Wanneer je een account op deze server hebt, kun je inloggen om mensen of hashtags te volgen, op berichten te reageren of om deze te delen. Wanneer je een account op een andere server hebt, kun je daar inloggen en daar interactie met mensen op deze server hebben.",
   "status.admin_account": "Moderatie-omgeving van @{name} openen",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Moderatie-omgeving van {domain} openen",
   "status.admin_status": "Dit bericht in de moderatie-omgeving tonen",
   "status.block": "@{name} blokkeren",
   "status.bookmark": "Bladwijzer toevoegen",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 116bf1491..e158f67b0 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -34,7 +34,7 @@
   "account.followers.empty": "Ingen fylgjer denne brukaren enno.",
   "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}",
   "account.following": "Fylgjer",
-  "account.following_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjar}}",
+  "account.following_counter": "{count, plural, one {Fylgjar {counter}} other {Fylgjar {counter}}}",
   "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.",
   "account.follows_you": "Fylgjer deg",
   "account.go_to_profile": "Gå til profil",
@@ -128,7 +128,7 @@
   "compose.language.search": "Søk språk...",
   "compose_form.direct_message_warning_learn_more": "Lær meir",
   "compose_form.encryption_warning": "Innlegg på Mastodon er ikkje ende-til-ende-krypterte. Ikkje del eventuell ømtolig informasjon via Mastodon.",
-  "compose_form.hashtag_warning": "Dette tutet vert ikkje oppført under nokon emneknagg sidan ingen emneknagg er oppført. Det er kun emneknaggar som er søkbare i offentlege tutar.",
+  "compose_form.hashtag_warning": "Dette innlegget vert ikkje lista under nokre emneknaggar av di det ikkje er offentleg. Berre offentlege innlegg kan verte søkt opp med emneknagg.",
   "compose_form.lock_disclaimer": "Kontoen din er ikkje {locked}. Kven som helst kan fylgja deg for å sjå innlegga dine.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Kva har du på hjarta?",
@@ -178,7 +178,7 @@
   "conversation.open": "Sjå samtale",
   "conversation.with": "Med {names}",
   "copypaste.copied": "Kopiert",
-  "copypaste.copy": "Kopiér",
+  "copypaste.copy": "Kopier",
   "directory.federated": "Frå den kjende allheimen",
   "directory.local": "Berre frå {domain}",
   "directory.new_arrivals": "Nyleg tilkomne",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Logg inn",
   "sign_in_banner.text": "Logg inn for å fylgje profiler eller emneknaggar, markere, framheve og svare på innlegg – eller samhandle med aktivitet på denne tenaren frå kontoen din på ein annan tenar.",
   "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Opna moderatorgrensesnittet for {domain}",
   "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet",
   "status.block": "Blokker @{name}",
   "status.bookmark": "Set bokmerke",
@@ -559,7 +559,7 @@
   "status.favourite": "Favoritt",
   "status.filter": "Filtrer dette innlegget",
   "status.filtered": "Filtrert",
-  "status.hide": "Hide post",
+  "status.hide": "Skjul innlegget",
   "status.history.created": "{name} oppretta {date}",
   "status.history.edited": "{name} redigerte {date}",
   "status.load_more": "Last inn meir",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 263bea9be..53de4ce00 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -2,21 +2,21 @@
   "about.blocks": "Modererte tjenere",
   "about.contact": "Kontakt:",
   "about.disclaimer": "Mastodon er gratis, åpen kildekode-programvare og et varemerke fra Mastodon gGmbH.",
-  "about.domain_blocks.no_reason_available": "Årsak ikke oppgitt",
-  "about.domain_blocks.preamble": "Mastodon lar deg normalt sett se innholdet fra og samhandle med brukere fra enhver annen server i fødiverset. Dette er unntakene som har blitt lagt inn på denne serveren.",
-  "about.domain_blocks.silenced.explanation": "Du vil vanligvis ikke se profiler og innhold fra denne serveren, med mindre du eksplisitt søker dem opp eller velger å følge dem.",
+  "about.domain_blocks.no_reason_available": "Årsak ikke tilgjengelig",
+  "about.domain_blocks.preamble": "Mastodon lar deg normalt sett se innholdet fra og samhandle med brukere fra enhver annen tjener i fødiverset. Dette er unntakene som har blitt lagt inn på denne tjeneren.",
+  "about.domain_blocks.silenced.explanation": "Du vil vanligvis ikke se profiler og innhold fra denne tjeneren, med mindre du eksplisitt søker dem opp eller velger å følge dem.",
   "about.domain_blocks.silenced.title": "Begrenset",
-  "about.domain_blocks.suspended.explanation": "Ikke noe innhold fra denne serveren vil bli behandlet, lagret eller utvekslet. Det gjør det umulig å samhandle eller kommunisere med brukere fra denne serveren.",
+  "about.domain_blocks.suspended.explanation": "Ikke noe innhold fra denne tjeneren vil bli behandlet, lagret eller utvekslet. Det gjør det umulig å samhandle eller kommunisere med brukere fra denne tjeneren.",
   "about.domain_blocks.suspended.title": "Suspendert",
-  "about.not_available": "Denne informasjonen er ikke gjort tilgjengelig på denne serveren.",
+  "about.not_available": "Denne informasjonen er ikke gjort tilgjengelig på denne tjeneren.",
   "about.powered_by": "Desentraliserte sosiale medier drevet av {mastodon}",
-  "about.rules": "Regler for serveren",
+  "about.rules": "Regler for tjeneren",
   "account.account_note_header": "Notat",
   "account.add_or_remove_from_list": "Legg til eller fjern fra lister",
   "account.badges.bot": "Bot",
   "account.badges.group": "Gruppe",
-  "account.block": "Blokkér @{name}",
-  "account.block_domain": "Blokkér domenet {domain}",
+  "account.block": "Blokker @{name}",
+  "account.block_domain": "Blokker domenet {domain}",
   "account.blocked": "Blokkert",
   "account.browse_more_on_origin_server": "Bla mer på den opprinnelige profilen",
   "account.cancel_follow_request": "Trekk tilbake følge-forespørselen",
@@ -52,7 +52,7 @@
   "account.open_original_page": "Gå til originalsiden",
   "account.posts": "Innlegg",
   "account.posts_with_replies": "Innlegg med svar",
-  "account.report": "Rapportér @{name}",
+  "account.report": "Rapporter @{name}",
   "account.requested": "Venter på godkjennelse. Klikk for å avbryte forespørselen",
   "account.requested_follow": "{name} har bedt om å få følge deg",
   "account.share": "Del @{name}s profil",
@@ -128,7 +128,7 @@
   "compose.language.search": "Søk etter språk...",
   "compose_form.direct_message_warning_learn_more": "Lær mer",
   "compose_form.encryption_warning": "Innlegg på Mastodon er ikke ende-til-ende-krypterte. Ikke del sensitive opplysninger via Mastodon.",
-  "compose_form.hashtag_warning": "Dette innlegget blir vist under noen emneknagger da det er uoppført. Kun offentlige innlegg kan søkes opp med emneknagg.",
+  "compose_form.hashtag_warning": "Dette innlegget blir ikke vist under noen emneknagger siden det ikke er offentlig. Bare offentlige innlegg kan søkes opp med emneknagger.",
   "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Hvem som helst kan følge deg og se dine private poster.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Hva har du på hjertet?",
@@ -260,13 +260,13 @@
   "follow_recommendations.done": "Utført",
   "follow_recommendations.heading": "Følg folk du ønsker å se innlegg fra! Her er noen forslag.",
   "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!",
-  "follow_request.authorize": "Autorisér",
+  "follow_request.authorize": "Autoriser",
   "follow_request.reject": "Avvis",
   "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.",
   "footer.about": "Om",
   "footer.directory": "Profilkatalog",
   "footer.get_app": "Last ned appen",
-  "footer.invite": "Invitér folk",
+  "footer.invite": "Inviter folk",
   "footer.keyboard_shortcuts": "Hurtigtaster",
   "footer.privacy_policy": "Personvernregler",
   "footer.source_code": "Vis kildekode",
@@ -448,7 +448,7 @@
   "poll.votes": "{votes, plural, one {# stemme} other {# stemmer}}",
   "poll_button.add_poll": "Legg til en avstemning",
   "poll_button.remove_poll": "Fjern avstemningen",
-  "privacy.change": "Justér synlighet",
+  "privacy.change": "Juster synlighet",
   "privacy.direct.long": "Post kun til nevnte brukere",
   "privacy.direct.short": "Kun nevnte personer",
   "privacy.private.long": "Post kun til følgere",
@@ -542,9 +542,9 @@
   "sign_in_banner.sign_in": "Logg inn",
   "sign_in_banner.text": "Logg inn for å følge profiler eller hashtags, like, dele og svare på innlegg eller interagere fra din konto på en annen server.",
   "status.admin_account": "Åpne moderatorgrensesnittet for @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Åpne moderatorgrensesnittet for {domain}",
   "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet",
-  "status.block": "Blokkér @{name}",
+  "status.block": "Blokker @{name}",
   "status.bookmark": "Bokmerke",
   "status.cancel_reblog_private": "Fjern fremheving",
   "status.cannot_reblog": "Denne posten kan ikke fremheves",
@@ -552,14 +552,14 @@
   "status.delete": "Slett",
   "status.detailed_status": "Detaljert samtalevisning",
   "status.direct": "Send direktemelding til @{name}",
-  "status.edit": "Redigér",
+  "status.edit": "Rediger",
   "status.edited": "Redigert {date}",
   "status.edited_x_times": "Redigert {count, plural,one {{count} gang} other {{count} ganger}}",
   "status.embed": "Bygge inn",
   "status.favourite": "Marker som favoritt",
   "status.filter": "Filtrer dette innlegget",
   "status.filtered": "Filtrert",
-  "status.hide": "Hide post",
+  "status.hide": "Skjul innlegg",
   "status.history.created": "{name} opprettet {date}",
   "status.history.edited": "{name} redigerte {date}",
   "status.load_more": "Last mer",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 89835a19f..4865843dd 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Recercar de lengas...",
   "compose_form.direct_message_warning_learn_more": "Ne saber mai",
   "compose_form.encryption_warning": "Las publicacions sus Mastodon son pas chifradas del cap a la fin. Partegetz pas d’informacions sensiblas sus Mastodon.",
-  "compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap d’etiqueta estant qu’es pas listat. Òm pòt pas cercar que los tuts publics per etiqueta.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.",
   "compose_form.lock_disclaimer.lock": "clavat",
   "compose_form.placeholder": "A de qué pensatz ?",
@@ -185,12 +185,12 @@
   "directory.recently_active": "Actius fa res",
   "disabled_account_banner.account_settings": "Paramètres de compte",
   "disabled_account_banner.text": "Vòstre compte {disabledAccount} es actualament desactivat.",
-  "dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.",
+  "dismissable_banner.community_timeline": "Vaquí las publicacions mai recentas del monde amb un compte albergat per {domain}.",
   "dismissable_banner.dismiss": "Ignorar",
-  "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.explore_statuses": "These posts from this and other servers in the decentralized network are gaining traction on this server right now.",
+  "dismissable_banner.explore_links": "Aquestas istòrias ne parlan lo monde d’aqueste servidor e dels autres servidors del malhum descentralizat d’aquesta passa.",
+  "dismissable_banner.explore_statuses": "Aquí las publicacions d’aqueste servidor e dels autres del malhum descentralizat que ganhan en popularitat d’aquesta passa.",
   "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
-  "dismissable_banner.public_timeline": "These are the most recent public posts from people on this and other servers of the decentralized network that this server knows about.",
+  "dismissable_banner.public_timeline": "Vaquí las publicacions mai recentas del monde d’aqueste servidor e dels servidors descentralizats del malhum qu’aqueste servidor coneis.",
   "embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
   "embed.preview": "Semblarà aquò :",
   "emoji_button.activity": "Activitats",
@@ -539,7 +539,7 @@
   "server_banner.learn_more": "Ne saber mai",
   "server_banner.server_stats": "Estatisticas del servidor :",
   "sign_in_banner.create_account": "Crear un compte",
-  "sign_in_banner.sign_in": "Se marcar",
+  "sign_in_banner.sign_in": "Se connectar",
   "sign_in_banner.text": "Connectatz-vos per sègre perfils o etiquetas, apondre als favorits, partejar e respondre als messatges o interagir de vòstre compte estant d’un autre servidor.",
   "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}",
   "status.admin_domain": "Open moderation interface for {domain}",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index 34dafb5dc..e646ef83c 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 98a2ec2e1..ca2b07133 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -132,7 +132,7 @@
   "compose.language.search": "Szukaj języków...",
   "compose_form.direct_message_warning_learn_more": "Dowiedz się więcej",
   "compose_form.encryption_warning": "Posty na Mastodon nie są szyfrowane end-to-end. Nie udostępniaj żadnych wrażliwych informacji przez Mastodon.",
-  "compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hasztagami, ponieważ jest oznaczony jako niewidoczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hasztagów.",
+  "compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hasztagami, ponieważ jest oznaczony jako niepubliczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hasztagów.",
   "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię obserwuje, może wyświetlać Twoje wpisy przeznaczone tylko dla obserwujących.",
   "compose_form.lock_disclaimer.lock": "zablokowane",
   "compose_form.placeholder": "Co Ci chodzi po głowie?",
@@ -547,7 +547,7 @@
   "sign_in_banner.sign_in": "Zaloguj się",
   "sign_in_banner.text": "Zaloguj się, aby obserwować profile lub hasztagi, jak również dodawaj wpisy do ulubionych, udostępniaj je dalej i odpowiadaj na nie lub wchodź w interakcje z kontem na innym serwerze.",
   "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Otwórz interfejs moderacyjny dla {domain}",
   "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym",
   "status.block": "Zablokuj @{name}",
   "status.bookmark": "Dodaj zakładkę",
@@ -564,7 +564,7 @@
   "status.favourite": "Dodaj do ulubionych",
   "status.filter": "Filtruj ten wpis",
   "status.filtered": "Filtrowany(-a)",
-  "status.hide": "Hide post",
+  "status.hide": "Ukryj post",
   "status.history.created": "{name} utworzył(a) {date}",
   "status.history.edited": "{name} edytował(a) {date}",
   "status.load_more": "Załaduj więcej",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index c27bb12fc..6f1307d3c 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Pesquisar idiomas...",
   "compose_form.direct_message_warning_learn_more": "Saiba mais",
   "compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta-a-ponta. Não compartilhe nenhuma informação sensível no Mastodon.",
-  "compose_form.hashtag_warning": "Este toot não aparecerá em nenhuma hashtag porque está como não-listado. Somente toots públicos podem ser pesquisados por hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver os toots privados.",
   "compose_form.lock_disclaimer.lock": "trancado",
   "compose_form.placeholder": "No que você está pensando?",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index a60742350..6a7560262 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -28,7 +28,7 @@
   "account.endorse": "Destacar no perfil",
   "account.featured_tags.last_status_at": "Última publicação em {date}",
   "account.featured_tags.last_status_never": "Sem publicações",
-  "account.featured_tags.title": "Hashtags destacadas por {name}",
+  "account.featured_tags.title": "#Etiquetas destacadas por {name}",
   "account.follow": "Seguir",
   "account.followers": "Seguidores",
   "account.followers.empty": "Ainda ninguém segue este utilizador.",
@@ -40,8 +40,8 @@
   "account.go_to_profile": "Ir para o perfil",
   "account.hide_reblogs": "Esconder partilhas de @{name}",
   "account.joined_short": "Juntou-se a",
-  "account.languages": "Alterar idiomas subscritos",
-  "account.link_verified_on": "A posse deste link foi verificada em {date}",
+  "account.languages": "Alterar línguas subscritas",
+  "account.link_verified_on": "A posse desta ligação foi verificada em {date}",
   "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem a pode seguir.",
   "account.media": "Média",
   "account.mention": "Mencionar @{name}",
@@ -50,20 +50,20 @@
   "account.mute_notifications": "Silenciar notificações de @{name}",
   "account.muted": "Silenciada",
   "account.open_original_page": "Abrir a página original",
-  "account.posts": "Toots",
+  "account.posts": "Publicações",
   "account.posts_with_replies": "Publicações e respostas",
   "account.report": "Denunciar @{name}",
-  "account.requested": "A aguardar aprovação. Clique para cancelar o pedido de seguidor",
+  "account.requested": "A aguardar aprovação. Clique para cancelar o pedido para seguir",
   "account.requested_follow": "{name} pediu para segui-lo",
   "account.share": "Partilhar o perfil @{name}",
   "account.show_reblogs": "Mostrar partilhas de @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
   "account.unblock": "Desbloquear @{name}",
-  "account.unblock_domain": "Mostrar {domain}",
+  "account.unblock_domain": "Desbloquear o domínio {domain}",
   "account.unblock_short": "Desbloquear",
-  "account.unendorse": "Não mostrar no perfil",
+  "account.unendorse": "Não destacar no perfil",
   "account.unfollow": "Deixar de seguir",
-  "account.unmute": "Não silenciar @{name}",
+  "account.unmute": "Deixar de silenciar @{name}",
   "account.unmute_notifications": "Deixar de silenciar @{name}",
   "account.unmute_short": "Deixar de silenciar",
   "account_note.placeholder": "Clique para adicionar nota",
@@ -82,8 +82,8 @@
   "autosuggest_hashtag.per_week": "{count} por semana",
   "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
   "bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
-  "bundle_column_error.error.body": "A página solicitada não pôde ser renderizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
-  "bundle_column_error.error.title": "Oh, não!",
+  "bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
+  "bundle_column_error.error.title": "Ó, não!",
   "bundle_column_error.network.body": "Houve um erro ao tentar carregar esta página. Isto pode ocorrer devido a um problema temporário com a sua conexão à internet ou a este servidor.",
   "bundle_column_error.network.title": "Erro de rede",
   "bundle_column_error.retry": "Tente de novo",
@@ -96,48 +96,48 @@
   "closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, pode criar uma conta noutro servidor e interagir com este na mesma.",
   "closed_registrations_modal.description": "Neste momento não é possível criar uma conta em {domain}, mas lembramos que não é preciso ter uma conta especificamente em {domain} para usar o Mastodon.",
   "closed_registrations_modal.find_another_server": "Procurar outro servidor",
-  "closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a sua conta é criada, continuará a poder acompanhar e interagir com qualquer um neste servidor. Pode até alojar o seu próprio servidor!",
+  "closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a sua conta é criada, pois continuará a poder acompanhar e interagir com qualquer um neste servidor. Pode até alojar o seu próprio servidor!",
   "closed_registrations_modal.title": "Inscrevendo-se no Mastodon",
   "column.about": "Sobre",
   "column.blocks": "Utilizadores Bloqueados",
-  "column.bookmarks": "Itens salvos",
+  "column.bookmarks": "Marcadores",
   "column.community": "Cronologia local",
   "column.direct": "Mensagens diretas",
-  "column.directory": "Procurar perfis",
-  "column.domain_blocks": "Domínios escondidos",
-  "column.favourites": "Favoritos",
+  "column.directory": "Explorar perfis",
+  "column.domain_blocks": "Domínios bloqueados",
+  "column.favourites": "Preferidos",
   "column.follow_requests": "Seguidores pendentes",
   "column.home": "Início",
   "column.lists": "Listas",
   "column.mutes": "Utilizadores silenciados",
   "column.notifications": "Notificações",
-  "column.pins": "Publicações fixas",
+  "column.pins": "Publicações afixadas",
   "column.public": "Cronologia federada",
-  "column_back_button.label": "Voltar",
+  "column_back_button.label": "Retroceder",
   "column_header.hide_settings": "Esconder configurações",
   "column_header.moveLeft_settings": "Mover coluna para a esquerda",
   "column_header.moveRight_settings": "Mover coluna para a direita",
-  "column_header.pin": "Fixar",
+  "column_header.pin": "Afixar",
   "column_header.show_settings": "Mostrar configurações",
   "column_header.unpin": "Desafixar",
   "column_subheading.settings": "Configurações",
-  "community.column_settings.local_only": "Local apenas",
-  "community.column_settings.media_only": "Somente media",
-  "community.column_settings.remote_only": "Remoto apenas",
-  "compose.language.change": "Alterar idioma",
-  "compose.language.search": "Pesquisar idiomas...",
+  "community.column_settings.local_only": "Apenas local",
+  "community.column_settings.media_only": "Apenas média",
+  "community.column_settings.remote_only": "Apenas remoto",
+  "compose.language.change": "Alterar língua",
+  "compose.language.search": "Pesquisar línguas...",
   "compose_form.direct_message_warning_learn_more": "Conhecer mais",
-  "compose_form.encryption_warning": "As publicações no Mastodon não são encriptadas ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.",
-  "compose_form.hashtag_warning": "Este toot não será listado em nenhuma hashtag por ser não listado. Apenas toots públics podem ser pesquisados por hashtag.",
+  "compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.",
+  "compose_form.hashtag_warning": "Esta publicação não será listada em qualquer etiqueta, pois não é pública. Apenas as publicações públicas podem ser pesquisadas por etiquetas.",
   "compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
-  "compose_form.lock_disclaimer.lock": "bloqueado",
+  "compose_form.lock_disclaimer.lock": "fechada",
   "compose_form.placeholder": "Em que está a pensar?",
   "compose_form.poll.add_option": "Adicionar uma opção",
-  "compose_form.poll.duration": "Duração da votação",
+  "compose_form.poll.duration": "Duração do inquérito",
   "compose_form.poll.option_placeholder": "Opção {number}",
   "compose_form.poll.remove_option": "Eliminar esta opção",
-  "compose_form.poll.switch_to_multiple": "Alterar a votação para permitir múltiplas escolhas",
-  "compose_form.poll.switch_to_single": "Alterar a votação para permitir uma única escolha",
+  "compose_form.poll.switch_to_multiple": "Alterar o inquérito para permitir várias respostas",
+  "compose_form.poll.switch_to_single": "Alterar o inquérito para permitir uma única resposta",
   "compose_form.publish": "Publicar",
   "compose_form.publish_form": "Publicar",
   "compose_form.publish_loud": "{publish}!",
@@ -146,7 +146,7 @@
   "compose_form.sensitive.marked": "Media marcada como sensível",
   "compose_form.sensitive.unmarked": "Media não está marcada como sensível",
   "compose_form.spoiler.marked": "Texto escondido atrás de aviso",
-  "compose_form.spoiler.unmarked": "O texto não está escondido",
+  "compose_form.spoiler.unmarked": "Juntar um aviso de conteúdo",
   "compose_form.spoiler_placeholder": "Escreva o seu aviso aqui",
   "confirmation_modal.cancel": "Cancelar",
   "confirmations.block.block_and_report": "Bloquear e Denunciar",
@@ -159,16 +159,16 @@
   "confirmations.delete_list.confirm": "Eliminar",
   "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?",
   "confirmations.discard_edit_media.confirm": "Descartar",
-  "confirmations.discard_edit_media.message": "Tem alterações não salvas na descrição ou pré-visualização da media. Descartar mesmo assim?",
+  "confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição ou pré-visualização do conteúdo. Descartar mesmo assim?",
   "confirmations.domain_block.confirm": "Esconder tudo deste domínio",
   "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.",
   "confirmations.logout.confirm": "Terminar sessão",
-  "confirmations.logout.message": "Deseja terminar a sessão?",
+  "confirmations.logout.message": "Tem a certeza de que quer terminar a sessão?",
   "confirmations.mute.confirm": "Silenciar",
   "confirmations.mute.explanation": "Isto irá esconder publicações deles ou publicações que os mencionem, mas irá permitir que vejam as suas publicações e sejam seus seguidores.",
   "confirmations.mute.message": "De certeza que queres silenciar {name}?",
   "confirmations.redraft.confirm": "Eliminar & reescrever",
-  "confirmations.redraft.message": "Tem a certeza que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
+  "confirmations.redraft.message": "Tem a certeza de que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder agora irá reescrever a mensagem que está a compor actualmente. Tem a certeza que quer continuar?",
   "confirmations.unfollow.confirm": "Deixar de seguir",
@@ -184,12 +184,12 @@
   "directory.new_arrivals": "Recém chegados",
   "directory.recently_active": "Com actividade recente",
   "disabled_account_banner.account_settings": "Definições da conta",
-  "disabled_account_banner.text": "A sua conta {disabledAccount} está, no momento, desativada.",
+  "disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.",
   "dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.",
   "dismissable_banner.dismiss": "Descartar",
   "dismissable_banner.explore_links": "Essas histórias de notícias estão, no momento, a ser faladas por pessoas neste e noutros servidores da rede descentralizada.",
   "dismissable_banner.explore_statuses": "Estas publicações, deste e de outros servidores na rede descentralizada, estão, neste momento, a ganhar atenção neste servidor.",
-  "dismissable_banner.explore_tags": "Estas hashtags estão, neste momento, a ganhar atenção entre as pessoas neste e outros servidores da rede descentralizada.",
+  "dismissable_banner.explore_tags": "Estas #etiquetas estão presentemente a ganhar atenção entre as pessoas neste e noutros servidores da rede descentralizada.",
   "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas neste e outros servidores da rede descentralizada que esse servidor conhece.",
   "embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.",
   "embed.preview": "Podes ver aqui como irá ficar:",
@@ -200,7 +200,7 @@
   "emoji_button.food": "Comida & Bebida",
   "emoji_button.label": "Inserir Emoji",
   "emoji_button.nature": "Natureza",
-  "emoji_button.not_found": "Não tem emojis!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "Nenhum emoji correspondente encontrado",
   "emoji_button.objects": "Objectos",
   "emoji_button.people": "Pessoas",
   "emoji_button.recent": "Utilizados regularmente",
@@ -209,19 +209,19 @@
   "emoji_button.symbols": "Símbolos",
   "emoji_button.travel": "Viagens & Lugares",
   "empty_column.account_suspended": "Conta suspensa",
-  "empty_column.account_timeline": "Sem toots por aqui!",
+  "empty_column.account_timeline": "Sem publicações por aqui!",
   "empty_column.account_unavailable": "Perfil indisponível",
   "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
-  "empty_column.bookmarked_statuses": "Ainda não adicionou nenhum toot aos Itens salvos. Quando adicionar, eles serão exibidos aqui.",
-  "empty_column.community": "A timeline local está vazia. Escreve algo publicamente para começar!",
+  "empty_column.bookmarked_statuses": "Ainda não tem nenhuma publicação nos seus marcadores. Quando tiver, serão exibidas aqui.",
+  "empty_column.community": "A cronologia local está vazia. Escreve algo público para começar!",
   "empty_column.direct": "Ainda não tem qualquer mensagem direta. Quando enviar ou receber alguma, ela irá aparecer aqui.",
   "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.",
-  "empty_column.explore_statuses": "Nada em destaque por agora. Volte mais tarde!",
-  "empty_column.favourited_statuses": "Ainda não tens quaisquer toots favoritos. Quando tiveres algum, ele irá aparecer aqui.",
-  "empty_column.favourites": "Ainda ninguém marcou este toot como favorito. Quando alguém o fizer, ele irá aparecer aqui.",
-  "empty_column.follow_recommendations": "Parece que não foi possível gerar nenhuma sugestão para si. Pode tentar utilizar a pesquisa para procurar pessoas que conheça ou explorar as hashtags em destaque.",
+  "empty_column.explore_statuses": "Nada está em alta no momento. Volte mais tarde!",
+  "empty_column.favourited_statuses": "Ainda não tens quaisquer publicações nos marcadores. Quando tiveres, aparecerão aqui.",
+  "empty_column.favourites": "Ainda ninguém tem esta publicação nos seus marcadores. Quando alguém o tiver, ele irá aparecer aqui.",
+  "empty_column.follow_recommendations": "Parece que não foi possível gerar nenhuma sugestão para si. Pode tentar utilizar a pesquisa para procurar pessoas que conheça ou explorar as #etiquetas em destaque.",
   "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.",
-  "empty_column.hashtag": "Não foram encontradas publicações com essa hashtag.",
+  "empty_column.hashtag": "Não foram encontradas publicações com essa #etiqueta.",
   "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
   "empty_column.home.suggestions": "Ver algumas sugestões",
   "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
@@ -240,7 +240,7 @@
   "explore.title": "Explorar",
   "explore.trending_links": "Notícias",
   "explore.trending_statuses": "Publicações",
-  "explore.trending_tags": "Hashtags",
+  "explore.trending_tags": "#Etiquetas",
   "filter_modal.added.context_mismatch_explanation": "Esta categoria de filtro não se aplica ao contexto em que acedeu a esta publicação. Se pretender que esta publicação seja filtrada também neste contexto, terá que editar o filtro.",
   "filter_modal.added.context_mismatch_title": "Contexto incoerente!",
   "filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, necessita alterar a data de validade para que ele seja aplicado.",
@@ -276,27 +276,27 @@
   "hashtag.column_header.tag_mode.any": "ou {additional}",
   "hashtag.column_header.tag_mode.none": "sem {additional}",
   "hashtag.column_settings.select.no_options_message": "Não foram encontradas sugestões",
-  "hashtag.column_settings.select.placeholder": "Introduzir as hashtags…",
+  "hashtag.column_settings.select.placeholder": "Inserir #etiquetas…",
   "hashtag.column_settings.tag_mode.all": "Todos estes",
   "hashtag.column_settings.tag_mode.any": "Qualquer destes",
   "hashtag.column_settings.tag_mode.none": "Nenhum destes",
   "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna",
-  "hashtag.follow": "Seguir hashtag",
-  "hashtag.unfollow": "Parar de seguir hashtag",
+  "hashtag.follow": "Seguir #etiqueta",
+  "hashtag.unfollow": "Deixar de seguir #etiqueta",
   "home.column_settings.basic": "Básico",
-  "home.column_settings.show_reblogs": "Mostrar boosts",
+  "home.column_settings.show_reblogs": "Mostrar impulsos",
   "home.column_settings.show_replies": "Mostrar respostas",
-  "home.hide_announcements": "Ocultar anúncios",
-  "home.show_announcements": "Exibir anúncios",
-  "interaction_modal.description.favourite": "Com uma conta no Mastodon, pode adicionar esta publicação aos favoritos para que o autor saiba que gostou e salvá-la para mais tarde.",
+  "home.hide_announcements": "Ocultar comunicações",
+  "home.show_announcements": "Exibir comunicações",
+  "interaction_modal.description.favourite": "Com uma conta no Mastodon, pode adicionar esta publicação aos marcadores para que o autor saiba que gostou e guardá-la para mais tarde.",
   "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.",
   "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.",
   "interaction_modal.description.reply": "Com uma conta no Mastodon, pode responder a esta publicação.",
   "interaction_modal.on_another_server": "Num servidor diferente",
   "interaction_modal.on_this_server": "Neste servidor",
-  "interaction_modal.other_server_instructions": "Copie e cole este URL no campo de pesquisa do seu aplicativo Mastodon favorito ou da interface web do seu servidor Mastodon.",
-  "interaction_modal.preamble": "Uma vez que o Mastodon é descentralizado, pode utilizar a sua conta existente, hospedada em outro servidor Mastodon ou plataforma compatível, se não tiver uma conta neste servidor.",
-  "interaction_modal.title.favourite": "Adicionar a publicação de {name} aos favoritos",
+  "interaction_modal.other_server_instructions": "Copie e cole este URL no campo de pesquisa da sua aplicação Mastodon preferida, ou da interface web do seu servidor Mastodon.",
+  "interaction_modal.preamble": "Uma vez que o Mastodon é descentralizado, caso não tenha uma conta neste servidor, pode utilizar a sua conta existente noutro servidor Mastodon ou plataforma compatível.",
+  "interaction_modal.title.favourite": "Adicionar a publicação de {name} aos marcadores",
   "interaction_modal.title.follow": "Seguir {name}",
   "interaction_modal.title.reblog": "Impulsionar a publicação de {name}",
   "interaction_modal.title.reply": "Responder à publicação de {name}",
@@ -305,17 +305,17 @@
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
   "keyboard_shortcuts.back": "para voltar",
   "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados",
-  "keyboard_shortcuts.boost": "para partilhar",
+  "keyboard_shortcuts.boost": "Impulsionar a publicação",
   "keyboard_shortcuts.column": "para focar uma publicação numa das colunas",
   "keyboard_shortcuts.compose": "para focar na área de publicação",
   "keyboard_shortcuts.description": "Descrição",
   "keyboard_shortcuts.direct": "para abrir a coluna das mensagens diretas",
   "keyboard_shortcuts.down": "para mover para baixo na lista",
   "keyboard_shortcuts.enter": "para expandir uma publicação",
-  "keyboard_shortcuts.favourite": "para adicionar aos favoritos",
-  "keyboard_shortcuts.favourites": "para abrir a lista dos favoritos",
+  "keyboard_shortcuts.favourite": "Juntar aos marcadores",
+  "keyboard_shortcuts.favourites": "Abrir lista de marcadores",
   "keyboard_shortcuts.federated": "para abrir a cronologia federada",
-  "keyboard_shortcuts.heading": "Atalhos do teclado",
+  "keyboard_shortcuts.heading": "Atalhos de teclado",
   "keyboard_shortcuts.home": "para abrir a cronologia inicial",
   "keyboard_shortcuts.hotkey": "Atalho",
   "keyboard_shortcuts.legend": "para mostrar esta legenda",
@@ -398,7 +398,7 @@
   "notification.mention": "{name} mencionou-te",
   "notification.own_poll": "A sua votação terminou",
   "notification.poll": "Uma votação em que participaste chegou ao fim",
-  "notification.reblog": "{name} partilhou a tua publicação",
+  "notification.reblog": "{name} reforçou a tua publicação",
   "notification.status": "{name} acabou de publicar",
   "notification.update": "{name} editou uma publicação",
   "notifications.clear": "Limpar notificações",
@@ -406,34 +406,34 @@
   "notifications.column_settings.admin.report": "Novas denúncias:",
   "notifications.column_settings.admin.sign_up": "Novas inscrições:",
   "notifications.column_settings.alert": "Notificações no ambiente de trabalho",
-  "notifications.column_settings.favourite": "Favoritos:",
+  "notifications.column_settings.favourite": "Marcadores:",
   "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias",
   "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos",
   "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros",
   "notifications.column_settings.follow": "Novos seguidores:",
   "notifications.column_settings.follow_request": "Novos pedidos de seguidor:",
   "notifications.column_settings.mention": "Menções:",
-  "notifications.column_settings.poll": "Resultados da votação:",
+  "notifications.column_settings.poll": "Resultados do inquérito:",
   "notifications.column_settings.push": "Notificações Push",
-  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.reblog": "Reforços:",
   "notifications.column_settings.show": "Mostrar na coluna",
   "notifications.column_settings.sound": "Reproduzir som",
-  "notifications.column_settings.status": "Novos toots:",
-  "notifications.column_settings.unread_notifications.category": "Notificações não lidas",
-  "notifications.column_settings.unread_notifications.highlight": "Destacar notificações não lidas",
+  "notifications.column_settings.status": "Novas publicações:",
+  "notifications.column_settings.unread_notifications.category": "Notificações por ler",
+  "notifications.column_settings.unread_notifications.highlight": "Destacar notificações por ler",
   "notifications.column_settings.update": "Edições:",
   "notifications.filter.all": "Todas",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favoritos",
+  "notifications.filter.boosts": "Reforços",
+  "notifications.filter.favourites": "Marcadores",
   "notifications.filter.follows": "Seguidores",
   "notifications.filter.mentions": "Menções",
-  "notifications.filter.polls": "Votações",
+  "notifications.filter.polls": "Resultados do inquérito",
   "notifications.filter.statuses": "Atualizações de pessoas que você segue",
-  "notifications.grant_permission": "Conceder permissões.",
+  "notifications.grant_permission": "Conceder permissão.",
   "notifications.group": "{count} notificações",
   "notifications.mark_as_read": "Marcar todas as notificações como lidas",
   "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente",
-  "notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente",
+  "notifications.permission_denied_alert": "Notificações no ambiente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente",
   "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.",
   "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho",
   "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.",
@@ -447,7 +447,7 @@
   "poll.voted": "Votaste nesta resposta",
   "poll.votes": "{votes, plural, one {# voto } other {# votos}}",
   "poll_button.add_poll": "Adicionar votação",
-  "poll_button.remove_poll": "Remover votação",
+  "poll_button.remove_poll": "Remover sondagem",
   "privacy.change": "Ajustar a privacidade da publicação",
   "privacy.direct.long": "Apenas para utilizadores mencionados",
   "privacy.direct.short": "Apenas pessoas mencionadas",
@@ -458,7 +458,7 @@
   "privacy.unlisted.long": "Visível para todos, mas não incluir em funcionalidades de divulgação",
   "privacy.unlisted.short": "Não listar",
   "privacy_policy.last_updated": "Última atualização em {date}",
-  "privacy_policy.title": "Política de Privacidade",
+  "privacy_policy.title": "Política de privacidade",
   "refresh": "Actualizar",
   "regeneration_indicator.label": "A carregar…",
   "regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!",
@@ -475,7 +475,7 @@
   "relative_time.today": "hoje",
   "reply_indicator.cancel": "Cancelar",
   "report.block": "Bloquear",
-  "report.block_explanation": "Não verá as publicações deles. Eles não serão capazes de ver suas publicações ou de o seguir. Eles vão conseguir saber que estão bloqueados.",
+  "report.block_explanation": "Não verá as suas publicações. Eles deixarão de poder ver suas publicações ou segui-lo. Eles poderão perceber que estão bloqueados.",
   "report.categories.other": "Outro",
   "report.categories.spam": "Spam",
   "report.categories.violation": "O conteúdo viola uma ou mais regras do servidor",
@@ -484,19 +484,19 @@
   "report.category.title_account": "perfil",
   "report.category.title_status": "publicação",
   "report.close": "Concluído",
-  "report.comment.title": "Há algo mais que pensa que devemos saber?",
-  "report.forward": "Reenviar para {target}",
-  "report.forward_hint": "A conta é de outro servidor. Enviar uma cópia anónima da denúncia para lá também?",
+  "report.comment.title": "Há algo mais que ache de que deveríamos saber?",
+  "report.forward": "Reencaminhar para {target}",
+  "report.forward_hint": "A conta é de outro servidor. Enviar uma cópia da anónima da denúncia para lá também?",
   "report.mute": "Silenciar",
-  "report.mute_explanation": "Não verá as publicações deles. Eles ainda poderão segui-lo e ver as suas publicações e não saberão que estão silenciados.",
+  "report.mute_explanation": "Não verá as suas publicações. Eles ainda poderão segui-lo e ver as suas publicações, e não saberão que estão silenciados.",
   "report.next": "Seguinte",
   "report.placeholder": "Comentários adicionais",
-  "report.reasons.dislike": "Não gosto disso",
+  "report.reasons.dislike": "Não gosto disto",
   "report.reasons.dislike_description": "Não é algo que deseje ver",
   "report.reasons.other": "É outra coisa",
   "report.reasons.other_description": "O problema não se encaixa nas outras categorias",
   "report.reasons.spam": "É spam",
-  "report.reasons.spam_description": "Links maliciosos, contactos falsos, ou respostas repetitivas",
+  "report.reasons.spam_description": "Hiperligações maliciosas, contactos falsos, ou respostas repetitivas",
   "report.reasons.violation": "Viola as regras do servidor",
   "report.reasons.violation_description": "Está ciente de que infringe regras específicas",
   "report.rules.subtitle": "Selecione tudo o que se aplicar",
@@ -508,7 +508,7 @@
   "report.thanks.take_action": "Aqui estão as suas opções para controlar o que vê no Mastodon:",
   "report.thanks.take_action_actionable": "Enquanto revemos a sua denúncia, pode tomar medidas contra @{name}:",
   "report.thanks.title": "Não quer ver isto?",
-  "report.thanks.title_actionable": "Obrigado por reportar, vamos analisar.",
+  "report.thanks.title_actionable": "Obrigado por denunciar. Iremos analisar.",
   "report.unfollow": "Deixar de seguir @{name}",
   "report.unfollow_explanation": "Está a seguir esta conta. Para não ver mais as publicações desta conta na sua página inicial, deixe de segui-la.",
   "report_notification.attached_statuses": "{count, plural,one {{count} publicação} other {{count} publicações}} em anexo",
@@ -519,17 +519,17 @@
   "search.placeholder": "Pesquisar",
   "search.search_or_paste": "Pesquisar ou introduzir URL",
   "search_popout.search_format": "Formato avançado de pesquisa",
-  "search_popout.tips.full_text": "Texto simples devolve publicações que escreveu, marcou como favorita, partilhou ou em que foi mencionado, tal como nomes de utilizador, alcunhas e hashtags.",
-  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.full_text": "Texto simples devolve publicações que escreveu, marcou, reforçou, ou em que foi mencionado, tal como nomes de utilizador, alcunhas e #etiquetas.",
+  "search_popout.tips.hashtag": "etiqueta",
   "search_popout.tips.status": "publicação",
-  "search_popout.tips.text": "O texto simples retorna a correspondência de nomes, utilizadores e hashtags",
+  "search_popout.tips.text": "O texto simples retorna a correspondência de nomes, utilizadores e #etiquetas",
   "search_popout.tips.user": "utilizador",
   "search_results.accounts": "Pessoas",
   "search_results.all": "Tudo",
-  "search_results.hashtags": "Hashtags",
+  "search_results.hashtags": "Etiquetas",
   "search_results.nothing_found": "Não foi possível encontrar resultados para as expressões pesquisadas",
-  "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "A pesquisa de toots pelo seu conteúdo não está disponível nesta instância Mastodon.",
+  "search_results.statuses": "Publicações",
+  "search_results.statuses_fts_disabled": "A pesquisa de publicações pelo seu conteúdo não está disponível nesta instância Mastodon.",
   "search_results.title": "Pesquisar por {q}",
   "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
   "server_banner.about_active_users": "Pessoas que utilizaram este servidor nos últimos 30 dias (Utilizadores Ativos Mensais)",
@@ -540,26 +540,26 @@
   "server_banner.server_stats": "Estatísticas do servidor:",
   "sign_in_banner.create_account": "Criar conta",
   "sign_in_banner.sign_in": "Iniciar sessão",
-  "sign_in_banner.text": "Inicie sessão para seguir perfis ou hashtags, favoritos, partilhar e responder às publicações ou interagir através da sua conta noutro servidor.",
+  "sign_in_banner.text": "Inicie sessão para seguir perfis ou #etiquetas, ou marcadores, para partilhar ou responder às publicações, ou interagir através da sua conta noutro servidor.",
   "status.admin_account": "Abrir a interface de moderação para @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Abrir interface de moderação para {domain}",
   "status.admin_status": "Abrir esta publicação na interface de moderação",
   "status.block": "Bloquear @{name}",
-  "status.bookmark": "Salvar",
-  "status.cancel_reblog_private": "Remover boost",
-  "status.cannot_reblog": "Não é possível fazer boost a esta publicação",
-  "status.copy": "Copiar o link para a publicação",
+  "status.bookmark": "Guardar nos marcadores",
+  "status.cancel_reblog_private": "Deixar de reforçar",
+  "status.cannot_reblog": "Não é possível reforçar esta publicação",
+  "status.copy": "Copiar ligação para a publicação",
   "status.delete": "Eliminar",
-  "status.detailed_status": "Vista de conversação detalhada",
+  "status.detailed_status": "Vista pormenorizada da conversa",
   "status.direct": "Mensagem direta @{name}",
   "status.edit": "Editar",
   "status.edited": "Editado em {date}",
   "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}",
-  "status.embed": "Incorporar",
-  "status.favourite": "Adicionar aos favoritos",
+  "status.embed": "Embutir",
+  "status.favourite": "Adicionar aos marcadores",
   "status.filter": "Filtrar esta publicação",
   "status.filtered": "Filtrada",
-  "status.hide": "Hide post",
+  "status.hide": "Ocultar publicação",
   "status.history.created": "{name} criado em {date}",
   "status.history.edited": "{name} editado em {date}",
   "status.load_more": "Carregar mais",
@@ -569,20 +569,20 @@
   "status.mute": "Silenciar @{name}",
   "status.mute_conversation": "Silenciar conversa",
   "status.open": "Expandir",
-  "status.pin": "Fixar no perfil",
-  "status.pinned": "Publicação fixa",
+  "status.pin": "Afixar no perfil",
+  "status.pinned": "Publicação afixada",
   "status.read_more": "Ler mais",
-  "status.reblog": "Partilhar",
-  "status.reblog_private": "Fazer boost com a audiência original",
-  "status.reblogged_by": "{name} fez boost",
-  "status.reblogs.empty": "Ainda ninguém fez boost a este toot. Quando alguém o fizer, ele irá aparecer aqui.",
+  "status.reblog": "Reforçar",
+  "status.reblog_private": "Reforçar com a visibilidade de origem",
+  "status.reblogged_by": "{name} reforçou",
+  "status.reblogs.empty": "Ainda ninguém reforçou esta publicação. Quando alguém o fizer, ele irá aparecer aqui.",
   "status.redraft": "Apagar & reescrever",
-  "status.remove_bookmark": "Remover dos itens salvos",
+  "status.remove_bookmark": "Retirar dos marcadores",
   "status.replied_to": "Respondeu a {name}",
   "status.reply": "Responder",
   "status.replyAll": "Responder à conversa",
   "status.report": "Denunciar @{name}",
-  "status.sensitive_warning": "Conteúdo sensível",
+  "status.sensitive_warning": "Conteúdo problemático",
   "status.share": "Partilhar",
   "status.show_filter_reason": "Mostrar mesmo assim",
   "status.show_less": "Mostrar menos",
@@ -592,14 +592,14 @@
   "status.show_original": "Mostrar original",
   "status.translate": "Traduzir",
   "status.translated_from_with": "Traduzido do {lang} usando {provider}",
-  "status.uncached_media_warning": "Não disponível",
+  "status.uncached_media_warning": "Indisponível",
   "status.unmute_conversation": "Deixar de silenciar esta conversa",
-  "status.unpin": "Não fixar no perfil",
-  "subscribed_languages.lead": "Após a alteração, apenas as publicações nos idiomas selecionados aparecerão na sua página inicial e listas. Não selecione nenhuma para receber publicações de todos os idiomas.",
+  "status.unpin": "Desafixar do perfil",
+  "subscribed_languages.lead": "Após a alteração, apenas as publicações nas línguas seleccionadas aparecerão na sua página inicial e listas. Não selecione nenhuma para receber publicações de todas as línguas.",
   "subscribed_languages.save": "Guardar alterações",
-  "subscribed_languages.target": "Alterar idiomas subscritos para {target}",
+  "subscribed_languages.target": "Alterar línguas assinadas para {target}",
   "suggestions.dismiss": "Dispensar a sugestão",
-  "suggestions.header": "Tu podes estar interessado em…",
+  "suggestions.header": "Poderá estar interessado em…",
   "tabs_bar.federated_timeline": "Federada",
   "tabs_bar.home": "Início",
   "tabs_bar.local_timeline": "Local",
@@ -612,17 +612,17 @@
   "timeline_hint.remote_resource_not_displayed": "{resource} de outros servidores não são exibidos.",
   "timeline_hint.resources.followers": "Seguidores",
   "timeline_hint.resources.follows": "Seguindo",
-  "timeline_hint.resources.statuses": "Toots antigos",
+  "timeline_hint.resources.statuses": "Publicações mais antigas",
   "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}",
-  "trends.trending_now": "Tendências atuais",
+  "trends.trending_now": "Em alta neste momento",
   "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
   "units.short.billion": "{count}MM",
   "units.short.million": "{count}M",
   "units.short.thousand": "{count}m",
   "upload_area.title": "Arraste e solte para enviar",
-  "upload_button.label": "Adicionar media",
+  "upload_button.label": "Juntar imagens, um vídeo, ou um ficheiro de som",
   "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.",
-  "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.",
+  "upload_error.poll": "O carregamento de ficheiros não é permitido em sondagens.",
   "upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva",
   "upload_form.description": "Descreva para pessoas com diminuição da acuidade visual",
   "upload_form.description_missing": "Nenhuma descrição adicionada",
@@ -638,18 +638,18 @@
   "upload_modal.detect_text": "Detectar texto na imagem",
   "upload_modal.edit_media": "Editar media",
   "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.",
-  "upload_modal.preparing_ocr": "A preparar OCR…",
+  "upload_modal.preparing_ocr": "A preparar o reconhecimento de caracteres (OCR)…",
   "upload_modal.preview_label": "Pré-visualizar ({ratio})",
   "upload_progress.label": "A enviar...",
   "upload_progress.processing": "A processar…",
   "video.close": "Fechar vídeo",
   "video.download": "Descarregar ficheiro",
-  "video.exit_fullscreen": "Sair de full screen",
+  "video.exit_fullscreen": "Sair do modo ecrã inteiro",
   "video.expand": "Expandir vídeo",
   "video.fullscreen": "Ecrã completo",
   "video.hide": "Esconder vídeo",
   "video.mute": "Silenciar",
   "video.pause": "Pausar",
   "video.play": "Reproduzir",
-  "video.unmute": "Remover de silêncio"
+  "video.unmute": "Deixar de silenciar"
 }
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index 246262db3..6e5674bd1 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Căutare limbi…",
   "compose_form.direct_message_warning_learn_more": "Află mai multe",
   "compose_form.encryption_warning": "Postările pe Mastodon nu sunt criptate în ambele părți. Nu împărtășiți nici o informație sensibilă pe Mastodon.",
-  "compose_form.hashtag_warning": "Această postare nu va fi listată sub niciun hashtag deoarece este nelistată. Doar postările publice pot fi căutate cu un hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Contul tău nu este {locked}. Oricine se poate abona la tine pentru a îți vedea postările numai pentru abonați.",
   "compose_form.lock_disclaimer.lock": "privat",
   "compose_form.placeholder": "La ce te gândești?",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 72bd7d791..998c6f05b 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Поиск языков...",
   "compose_form.direct_message_warning_learn_more": "Подробнее",
   "compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь конфиденциальной информацией через Mastodon.",
-  "compose_form.hashtag_warning": "Так как этот пост не публичный, он не отобразится в поиске по хэштегам.",
+  "compose_form.hashtag_warning": "Этот пост не будет виден ни под одним из хэштегов, так как он не публичный. Только публичные посты можно найти по хэштегу.",
   "compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.",
   "compose_form.lock_disclaimer.lock": "не закрыта",
   "compose_form.placeholder": "О чём думаете?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Войти",
   "sign_in_banner.text": "Войдите, чтобы следить за профилями, хэштегами или избранным, делиться сообщениями и отвечать на них или взаимодействовать с вашей учётной записью на другом сервере.",
   "status.admin_account": "Открыть интерфейс модератора для @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Открыть интерфейс модерации {domain}",
   "status.admin_status": "Открыть этот пост в интерфейсе модератора",
   "status.block": "Заблокировать @{name}",
   "status.bookmark": "Сохранить в закладки",
@@ -559,7 +559,7 @@
   "status.favourite": "В избранное",
   "status.filter": "Фильтровать этот пост",
   "status.filtered": "Отфильтровано",
-  "status.hide": "Hide post",
+  "status.hide": "Скрыть пост",
   "status.history.created": "{name} создал {date}",
   "status.history.edited": "{name} отредактировал(а) {date}",
   "status.load_more": "Загрузить остальное",
diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json
index e926f72f1..c4e51431b 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "अधिकं ज्ञायताम्",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "न कस्मिन्नपि प्रचलितवस्तुषु सूचितमिदं दौत्यम् । केवलं सार्वजनिकदौत्यानि प्रचलितवस्तुचिह्नेन अन्वेषयितुं शक्यते ।",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "तव लेखा न प्रवेष्टुमशक्या {locked} । कोऽप्यनुसर्ता ते केवलमनुसर्तृृणां कृते स्थितानि दौत्यानि द्रष्टुं शक्नोति ।",
   "compose_form.lock_disclaimer.lock": "अवरुद्धः",
   "compose_form.placeholder": "मनसि ते किमस्ति?",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index 557a56702..f56f2d5bd 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Àteras informatziones",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est listada. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.",
   "compose_form.lock_disclaimer.lock": "blocadu",
   "compose_form.placeholder": "A ite ses pensende?",
diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json
index 0eb8c5472..5e13c89a5 100644
--- a/app/javascript/mastodon/locales/sco.json
+++ b/app/javascript/mastodon/locales/sco.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Seirch leids...",
   "compose_form.direct_message_warning_learn_more": "Lairn mair",
   "compose_form.encryption_warning": "Posts on Mastodon isnae en-tae-en encryptit. Dinnae share onie sensitive information ower Mastodon.",
-  "compose_form.hashtag_warning": "This post wulnae be listit unner onie hashtag seein it is no listit. Ainly public posts kin be seirchit oot bi hashtag.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Yer accoont isnae {locked}. Awbody kin follae ye for tae luik at yer follaer-ainly posts.",
   "compose_form.lock_disclaimer.lock": "lockit",
   "compose_form.placeholder": "Whit's on yer mind?",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
index 4a492eeab..631fe3f31 100644
--- a/app/javascript/mastodon/locales/si.json
+++ b/app/javascript/mastodon/locales/si.json
@@ -128,7 +128,7 @@
   "compose.language.search": "භාෂා සොයන්න...",
   "compose_form.direct_message_warning_learn_more": "තව දැනගන්න",
   "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.",
-  "compose_form.hashtag_warning": "මෙම මෙවලම ලැයිස්තුගත කර නොමැති බැවින් කිසිදු හැෂ් ටැගය යටතේ ලැයිස්තුගත නොකෙරේ. හැෂ් ටැග් මගින් සෙවිය හැක්කේ පොදු මෙවලම් පමණි.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.",
   "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත",
   "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 96bd338f8..efbccdc38 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -54,7 +54,7 @@
   "account.posts_with_replies": "Príspevky a odpovede",
   "account.report": "Nahlás @{name}",
   "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti",
-  "account.requested_follow": "{name} has requested to follow you",
+  "account.requested_follow": "{name} ťa žiada nasledovať",
   "account.share": "Zdieľaj @{name} profil",
   "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}",
   "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
@@ -128,7 +128,7 @@
   "compose.language.search": "Hľadaj medzi jazykmi...",
   "compose_form.direct_message_warning_learn_more": "Zisti viac",
   "compose_form.encryption_warning": "Príspevky na Mastodon nie sú end-to-end šifrované. Nezdieľajte cez Mastodon žiadne citlivé informácie.",
-  "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.",
+  "compose_form.hashtag_warning": "Tento príspevok nebude zobrazený pod žiadným haštagom, lebo nieje verejne listovaný. Iba verejné príspevky môžu byť nájdené podľa haštagu.",
   "compose_form.lock_disclaimer": "Tvoj účet nie je {locked}. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
   "compose_form.lock_disclaimer.lock": "zamknutý",
   "compose_form.placeholder": "Čo máš na mysli?",
@@ -236,11 +236,11 @@
   "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky",
   "errors.unexpected_crash.report_issue": "Nahlás problém",
   "explore.search_results": "Výsledky hľadania",
-  "explore.suggested_follows": "For you",
+  "explore.suggested_follows": "Pre teba",
   "explore.title": "Objavuj",
-  "explore.trending_links": "News",
-  "explore.trending_statuses": "Posts",
-  "explore.trending_tags": "Hashtags",
+  "explore.trending_links": "Novinky",
+  "explore.trending_statuses": "Príspevky",
+  "explore.trending_tags": "Haštagy",
   "filter_modal.added.context_mismatch_explanation": "Táto kategória filtrov sa nevzťahuje na kontext, v ktorom ste získali prístup k tomuto príspevku. Ak chcete, aby sa príspevok filtroval aj v tomto kontexte, budete musieť filter upraviť.",
   "filter_modal.added.context_mismatch_title": "Nesúlad kontextu!",
   "filter_modal.added.expired_explanation": "Platnosť tejto kategórie filtra vypršala, aby sa použila, je potrebné zmeniť dátum vypršania platnosti.",
@@ -514,10 +514,10 @@
   "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached",
   "report_notification.categories.other": "Ostatné",
   "report_notification.categories.spam": "Spam",
-  "report_notification.categories.violation": "Rule violation",
-  "report_notification.open": "Open report",
+  "report_notification.categories.violation": "Porušenie pravidla",
+  "report_notification.open": "Otvor hlásenie",
   "search.placeholder": "Hľadaj",
-  "search.search_or_paste": "Search or paste URL",
+  "search.search_or_paste": "Hľadaj, alebo vlož URL adresu",
   "search_popout.search_format": "Pokročilé vyhľadávanie",
   "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezývky, mená a haštagy.",
   "search_popout.tips.hashtag": "haštag",
@@ -530,10 +530,10 @@
   "search_results.nothing_found": "Could not find anything for these search terms",
   "search_results.statuses": "Príspevky",
   "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.",
-  "search_results.title": "Search for {q}",
+  "search_results.title": "Hľadaj {q}",
   "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}",
   "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
-  "server_banner.active_users": "active users",
+  "server_banner.active_users": "aktívni užívatelia",
   "server_banner.administered_by": "Správcom je:",
   "server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
   "server_banner.learn_more": "Zisti viac",
@@ -557,9 +557,9 @@
   "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
   "status.embed": "Vložiť",
   "status.favourite": "Páči sa mi",
-  "status.filter": "Filter this post",
+  "status.filter": "Filtrovanie tohto príspevku",
   "status.filtered": "Filtrované",
-  "status.hide": "Hide post",
+  "status.hide": "Skry príspevok",
   "status.history.created": "{name} vytvoril/a {date}",
   "status.history.edited": "{name} upravil/a {date}",
   "status.load_more": "Ukáž viac",
@@ -641,7 +641,7 @@
   "upload_modal.preparing_ocr": "Pripravujem OCR…",
   "upload_modal.preview_label": "Náhľad ({ratio})",
   "upload_progress.label": "Nahráva sa...",
-  "upload_progress.processing": "Processing…",
+  "upload_progress.processing": "Spracovávanie…",
   "video.close": "Zavri video",
   "video.download": "Stiahni súbor",
   "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 61ae1c41d..0c9125acd 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Prijava",
   "sign_in_banner.text": "Prijavite se, da sledite profilom ali ključnikom, dodajate med priljubljene, delite z drugimi ter odgovarjate na objave, pa tudi ostajate v interakciji iz svojega računa na drugem strežniku.",
   "status.admin_account": "Odpri vmesnik za moderiranje za @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Odpri vmesnik za moderiranje za {domain}",
   "status.admin_status": "Odpri to objavo v vmesniku za moderiranje",
   "status.block": "Blokiraj @{name}",
   "status.bookmark": "Dodaj med zaznamke",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 294354ef4..10176e3bc 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Kërkoni te gjuhët…",
   "compose_form.direct_message_warning_learn_more": "Mësoni më tepër",
   "compose_form.encryption_warning": "Postimet në Mastodon nuk fshehtëzohen skaj-më-skaj. Mos ndani me të tjerë gjëra me spec në Mastodon.",
-  "compose_form.hashtag_warning": "Ky mesazh s’do të paraqitet nën ndonjë hashtag, ngaqë s’i është caktuar ndonjë. Vetëm mesazhet publike mund të kërkohen sipas hashtagësh.",
+  "compose_form.hashtag_warning": "Ky postim s’do të paraqitet nën ndonjë hashtag, ngaqë s’është publik. Vetëm postimet publike mund të kërkohen sipas hashtag-ësh.",
   "compose_form.lock_disclaimer": "Llogaria juaj s’është {locked}. Mund ta ndjekë cilido, për të parë postimet tuaja vetëm për ndjekësit.",
   "compose_form.lock_disclaimer.lock": "e kyçur",
   "compose_form.placeholder": "Ç’bluani në mendje?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Hyni",
   "sign_in_banner.text": "Që të ndiqni profile ose hashtag-ë, të pëlqeni, të ndani me të tjerë dhe të përgjigjeni në postime, apo të ndërveproni me llogarinë tuaj nga një shërbyes tjetër, bëni hyrjen.",
   "status.admin_account": "Hap ndërfaqe moderimi për @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Hap ndërfaqe moderimi për {domain}",
   "status.admin_status": "Hape këtë mesazh te ndërfaqja e moderimit",
   "status.block": "Blloko @{name}",
   "status.bookmark": "Faqeruaje",
@@ -559,7 +559,7 @@
   "status.favourite": "I parapëlqyer",
   "status.filter": "Filtroje këtë postim",
   "status.filtered": "I filtruar",
-  "status.hide": "Hide post",
+  "status.hide": "Fshihe postimin",
   "status.history.created": "{name} u krijua më {date}",
   "status.history.edited": "{name} u përpunua më {date}",
   "status.load_more": "Ngarko më tepër",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index a9a10488d..0feb79691 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Pretraga jezika...",
   "compose_form.direct_message_warning_learn_more": "Saznajte više",
   "compose_form.encryption_warning": "Objave na Mastodon-u nisu potpuno šifrovane. Nemojte deliti nikakve osetljive informacije preko Mastodon-a.",
-  "compose_form.hashtag_warning": "Ova objava neće biti navedena ni pod jednom heš oznakom jer je nenavedena. Samo javne objave mogu se pretraživati po heš oznakama.",
+  "compose_form.hashtag_warning": "Ova objava neće biti navedena ni pod jednom heš oznakom jer nije javna. Samo javne objave se mogu pretraživati po heš oznakama.",
   "compose_form.lock_disclaimer": "Vaš nalog nije {locked}. Svako može da vas prati i da vidi vaše objave namenjene samo za vaše pratioce.",
   "compose_form.lock_disclaimer.lock": "zaključan",
   "compose_form.placeholder": "O čemu razmišljate?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Prijavi se",
   "sign_in_banner.text": "Prijavite se da pratite profile ili heštegove, stavite objave kao omiljene, delite i odgovarate na njih ili komunicirate sa svog naloga sa drugog servera.",
   "status.admin_account": "Otvori moderatorsko okruženje za @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Otvori moderatorsko okruženje za {domain}",
   "status.admin_status": "Otvori ovu objavu u moderatorskom okruženju",
   "status.block": "Blokiraj @{name}",
   "status.bookmark": "Dodaj u obeleživače",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index d69ec2457..ca0f04b34 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Претрага језика...",
   "compose_form.direct_message_warning_learn_more": "Сазнајте више",
   "compose_form.encryption_warning": "Објаве на Mastodon-у нису потпуно шифроване. Немојте делити никакве осетљиве информације преко Mastodon-а.",
-  "compose_form.hashtag_warning": "Ова објава неће бити наведена ни под једном хеш ознаком јер је ненаведена. Само јавне објаве могу се претраживати по хеш ознакама.",
+  "compose_form.hashtag_warning": "Ова објава неће бити наведена ни под једном хеш ознаком јер није јавна. Само јавне објаве се могу претраживати по хеш ознакама.",
   "compose_form.lock_disclaimer": "Ваш налог није {locked}. Свако може да вас прати и да види ваше објаве намењене само за ваше пратиоце.",
   "compose_form.lock_disclaimer.lock": "закључан",
   "compose_form.placeholder": "О чему размишљате?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Пријави се",
   "sign_in_banner.text": "Пријавите се да пратите профиле или хештегове, ставите објаве као омиљене, делите и одговарате на њих или комуницирате са свог налога са другог сервера.",
   "status.admin_account": "Отвори модераторско окружење за @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Отвори модераторско окружење за {domain}",
   "status.admin_status": "Отвори ову објаву у модераторском окружењу",
   "status.block": "Блокирај @{name}",
   "status.bookmark": "Додај у обележиваче",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 1334e3bb6..940f58e86 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Sök språk...",
   "compose_form.direct_message_warning_learn_more": "Läs mer",
   "compose_form.encryption_warning": "Inlägg på Mastodon är inte obrutet krypterade. Dela inte känslig information på Mastodon.",
-  "compose_form.hashtag_warning": "Detta inlägg kommer inte listas under någon hashtagg eftersom det är olistat. Endast offentliga inlägg kan eftersökas med hashtagg.",
+  "compose_form.hashtag_warning": "Inlägget listas inte under någon hashtag eftersom det inte är offentligt. Endast offentliga inlägg går att söka med en hashtag.",
   "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vem som helst kan följa dig för att se dina inlägg som endast är för följare.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Vad tänker du på?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Logga in",
   "sign_in_banner.text": "Logga in för att följa profiler eller hashtaggar, favoritmarkera, dela och svara på inlägg eller interagera från ditt konto på en annan server.",
   "status.admin_account": "Öppet modereringsgränssnitt för @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Öppet modereringsgränssnitt för @{domain}",
   "status.admin_status": "Öppna detta inlägg i modereringsgränssnittet",
   "status.block": "Blockera @{name}",
   "status.bookmark": "Bokmärk",
diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json
index 34dafb5dc..e646ef83c 100644
--- a/app/javascript/mastodon/locales/szl.json
+++ b/app/javascript/mastodon/locales/szl.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index ec01aa613..7013fdbb8 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -128,7 +128,7 @@
   "compose.language.search": "தேடல் மொழிகள்...",
   "compose_form.direct_message_warning_learn_more": "மேலும் அறிய",
   "compose_form.encryption_warning": "Mastodonல் உள்ள பதிவுகள் முறையாக என்க்ரிப்ட்(encrypt) செய்யபடவில்லை. அதனால் முக்கிய தகவல்களை இங்கே பகிர வேண்டாம்.",
-  "compose_form.hashtag_warning": "இது ஒரு பட்டியலிடப்படாத டூட் என்பதால் எந்த ஹேஷ்டேகின் கீழும் வராது. ஹேஷ்டேகின் மூலம் பொதுவில் உள்ள டூட்டுகளை மட்டுமே தேட முடியும்.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "உங்கள் கணக்கு {locked} செய்யப்படவில்லை. உங்கள் பதிவுகளை யார் வேண்டுமானாலும் பின்தொடர்ந்து காணலாம்.",
   "compose_form.lock_disclaimer.lock": "பூட்டப்பட்டது",
   "compose_form.placeholder": "உங்கள் மனதில் என்ன இருக்கிறது?",
diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json
index b488f6b2a..d39ca62eb 100644
--- a/app/javascript/mastodon/locales/tai.json
+++ b/app/javascript/mastodon/locales/tai.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index cce7ebe97..2e199fd39 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "మరింత తెలుసుకోండి",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "ఈ టూట్ అన్లిస్టెడ్ కాబట్టి ఏ హాష్ ట్యాగ్ క్రిందకూ రాదు. పబ్లిక్ టూట్ లను మాత్రమే హాష్ ట్యాగ్ ద్వారా శోధించవచ్చు.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "మీ ఖాతా {locked} చేయబడలేదు. ఎవరైనా మిమ్మల్ని అనుసరించి మీ అనుచరులకు-మాత్రమే పోస్ట్లను వీక్షించవచ్చు.",
   "compose_form.lock_disclaimer.lock": "బిగించబడినది",
   "compose_form.placeholder": "మీ మనస్సులో ఏముంది?",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 594a262dc..a0247891f 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -128,7 +128,7 @@
   "compose.language.search": "ค้นหาภาษา...",
   "compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม",
   "compose_form.encryption_warning": "โพสต์ใน Mastodon ไม่ได้เข้ารหัสแบบต้นทางถึงปลายทาง อย่าแบ่งปันข้อมูลที่ละเอียดอ่อนใด ๆ ผ่าน Mastodon",
-  "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากโพสต์ไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก",
+  "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากโพสต์ไม่อยู่ในรายการไม่เป็นสาธารณะ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก",
   "compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ",
   "compose_form.lock_disclaimer.lock": "ล็อคอยู่",
   "compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "ลงชื่อเข้า",
   "sign_in_banner.text": "ลงชื่อเข้าเพื่อติดตามโปรไฟล์หรือแฮชแท็ก ชื่นชอบ แบ่งปัน และตอบกลับโพสต์ หรือโต้ตอบจากบัญชีของคุณในเซิร์ฟเวอร์อื่น",
   "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "เปิดส่วนติดต่อการควบคุมสำหรับ {domain}",
   "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม",
   "status.block": "ปิดกั้น @{name}",
   "status.bookmark": "เพิ่มที่คั่นหน้า",
@@ -559,7 +559,7 @@
   "status.favourite": "ชื่นชอบ",
   "status.filter": "กรองโพสต์นี้",
   "status.filtered": "กรองอยู่",
-  "status.hide": "Hide post",
+  "status.hide": "ซ่อนโพสต์",
   "status.history.created": "{name} ได้สร้างเมื่อ {date}",
   "status.history.edited": "{name} ได้แก้ไขเมื่อ {date}",
   "status.load_more": "โหลดเพิ่มเติม",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index f0f90be70..287ba5e63 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Dilleri ara...",
   "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin",
   "compose_form.encryption_warning": "Mastodon gönderileri uçtan uca şifrelemeli değildir. Hassas olabilecek herhangi bir bilgiyi Mastodon'da paylaşmayın.",
-  "compose_form.hashtag_warning": "Bu gönderi liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık gönderiler etiketlerde bulunabilir.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "Hesabın {locked} değil. Yalnızca takipçilere özel gönderilerini görüntülemek için herkes seni takip edebilir.",
   "compose_form.lock_disclaimer.lock": "kilitli",
   "compose_form.placeholder": "Aklında ne var?",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Giriş yap",
   "sign_in_banner.text": "Profilleri veya etiketleri izlemek, gönderileri beğenmek, paylaşmak ve yanıtlamak için veya başka bir sunucunuzdaki hesabınızla etkileşmek için giriş yapın.",
   "status.admin_account": "@{name} için denetim arayüzünü açın",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "{domain} için denetim arayüzünü açın",
   "status.admin_status": "Denetim arayüzünde bu gönderiyi açın",
   "status.block": "@{name} adlı kişiyi engelle",
   "status.bookmark": "Yer işareti ekle",
@@ -559,7 +559,7 @@
   "status.favourite": "Favorilerine ekle",
   "status.filter": "Bu gönderiyi filtrele",
   "status.filtered": "Filtrelenmiş",
-  "status.hide": "Hide post",
+  "status.hide": "Gönderiyi gizle",
   "status.history.created": "{name} oluşturdu {date}",
   "status.history.edited": "{name} düzenledi {date}",
   "status.load_more": "Daha fazlasını yükle",
diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json
index 321a82665..d0aaba7e9 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json
index 34dafb5dc..e646ef83c 100644
--- a/app/javascript/mastodon/locales/ug.json
+++ b/app/javascript/mastodon/locales/ug.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "Learn more",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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?",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 97ae2afbd..8276908b1 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -102,7 +102,7 @@
   "column.blocks": "Заблоковані користувачі",
   "column.bookmarks": "Закладки",
   "column.community": "Локальна стрічка",
-  "column.direct": "Прямі повідомлення",
+  "column.direct": "Особисті повідомлення",
   "column.directory": "Переглянути профілі",
   "column.domain_blocks": "Заблоковані домени",
   "column.favourites": "Вподобане",
@@ -371,7 +371,7 @@
   "navigation_bar.bookmarks": "Закладки",
   "navigation_bar.community_timeline": "Локальна стрічка",
   "navigation_bar.compose": "Написати новий допис",
-  "navigation_bar.direct": "Прямі повідомлення",
+  "navigation_bar.direct": "Особисті повідомлення",
   "navigation_bar.discover": "Дослідити",
   "navigation_bar.domain_blocks": "Заблоковані домени",
   "navigation_bar.edit_profile": "Редагувати профіль",
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Увійти",
   "sign_in_banner.text": "Увійдіть, щоб слідкувати за профілями або хештеґами, вподобаними, ділитися і відповідати на повідомлення або взаємодіяти з вашого облікового запису на іншому сервері.",
   "status.admin_account": "Відкрити інтерфейс модерації для @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Відкрити інтерфейс модерації для {domain}",
   "status.admin_status": "Відкрити цей допис в інтерфейсі модерації",
   "status.block": "Заблокувати @{name}",
   "status.bookmark": "Додати до закладок",
@@ -559,7 +559,7 @@
   "status.favourite": "Подобається",
   "status.filter": "Фільтрувати цей допис",
   "status.filtered": "Відфільтровано",
-  "status.hide": "Приховати повідомлення",
+  "status.hide": "Сховати допис",
   "status.history.created": "{name} створює {date}",
   "status.history.edited": "{name} змінює {date}",
   "status.load_more": "Завантажити більше",
diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json
index c7c7f038c..e411e6015 100644
--- a/app/javascript/mastodon/locales/ur.json
+++ b/app/javascript/mastodon/locales/ur.json
@@ -128,7 +128,7 @@
   "compose.language.search": "زبان تلاش کریں...",
   "compose_form.direct_message_warning_learn_more": "مزید جانیں",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "compose_form.hashtag_warning": "چونکہ یہ ٹوٹ غیر مندرجہ ہے لہذا یہ کسی بھی ہیش ٹیگ کے تحت درج نہیں کیا جائے گا. ہیش ٹیگ کے تحت صرف \nعمومی ٹوٹ تلاش کئے جا سکتے ہیں.",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "آپ کا اکاؤنٹ {locked} نہیں ہے. کوئی بھی آپ کے مخصوص برائے پیروکار ٹوٹ دیکھنے کی خاطر آپ کی پیروی کر سکتا ہے.",
   "compose_form.lock_disclaimer.lock": "مقفل",
   "compose_form.placeholder": "آپ کیا سوچ رہے ہیں؟",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 838b5f0e6..7bc505474 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "Đăng nhập",
   "sign_in_banner.text": "Đăng nhập để theo dõi người hoặc hashtag; cũng như thích, chia sẻ và trả lời tút.",
   "status.admin_account": "Mở giao diện quản trị @{name}",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "Mở giao diện quản trị @{domain}",
   "status.admin_status": "Mở tút này trong giao diện quản trị",
   "status.block": "Chặn @{name}",
   "status.bookmark": "Lưu",
diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json
index 1b609d3c4..9b620cde8 100644
--- a/app/javascript/mastodon/locales/zgh.json
+++ b/app/javascript/mastodon/locales/zgh.json
@@ -128,7 +128,7 @@
   "compose.language.search": "Search languages...",
   "compose_form.direct_message_warning_learn_more": "ⵙⵙⵏ ⵓⴳⴳⴰⵔ",
   "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
-  "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.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts 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": "ⵉⵜⵜⵓⵔⴳⵍ",
   "compose_form.placeholder": "ⵎⴰⵢⴷ ⵉⵍⵍⴰⵏ ⴳ ⵉⵅⴼ ⵏⵏⴽ?",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index f54c697db..195c63198 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "登录",
   "sign_in_banner.text": "登录以关注个人资料或话题标签、喜欢、分享和嘟文,或与在不同服务器上的账号进行互动。",
   "status.admin_account": "打开 @{name} 的管理界面",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "打开 {domain} 的管理界面",
   "status.admin_status": "打开此帖的管理界面",
   "status.block": "屏蔽 @{name}",
   "status.bookmark": "添加到书签",
@@ -559,7 +559,7 @@
   "status.favourite": "喜欢",
   "status.filter": "过滤此嘟文",
   "status.filtered": "已过滤",
-  "status.hide": "Hide post",
+  "status.hide": "隐藏嘟文",
   "status.history.created": "{name} 创建于 {date}",
   "status.history.edited": "{name} 编辑于 {date}",
   "status.load_more": "加载更多",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 9076a0568..aa0530da3 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -128,7 +128,7 @@
   "compose.language.search": "搜尋語言...",
   "compose_form.direct_message_warning_learn_more": "了解更多",
   "compose_form.encryption_warning": "Mastodon 上的帖文並未端對端加密。請不要透過 Mastodon 分享任何敏感資訊。",
-  "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。",
+  "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
   "compose_form.lock_disclaimer": "你的用戶狀態沒有{locked},任何人都能立即關注你,然後看到「只有關注者能看」的文章。",
   "compose_form.lock_disclaimer.lock": "鎖定",
   "compose_form.placeholder": "你在想甚麼?",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index fdbe073cd..75e423d1c 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -542,7 +542,7 @@
   "sign_in_banner.sign_in": "登入",
   "sign_in_banner.text": "登入以追蹤個人檔案、主題標籤、最愛,分享和回覆嘟文,或以您其他伺服器之帳號進行互動:",
   "status.admin_account": "開啟 @{name} 的管理介面",
-  "status.admin_domain": "Open moderation interface for {domain}",
+  "status.admin_domain": "開啟 {domain} 的管理介面",
   "status.admin_status": "在管理介面開啟此嘟文",
   "status.block": "封鎖 @{name}",
   "status.bookmark": "書籤",
@@ -559,7 +559,7 @@
   "status.favourite": "最愛",
   "status.filter": "過濾此嘟文",
   "status.filtered": "已過濾",
-  "status.hide": "Hide post",
+  "status.hide": "隱藏嘟文",
   "status.history.created": "{name} 於 {date} 建立",
   "status.history.edited": "{name} 於 {date} 修改",
   "status.load_more": "載入更多",
diff --git a/app/javascript/mastodon/reducers/dropdown_menu.js b/app/javascript/mastodon/reducers/dropdown_menu.js
index a78a11acc..51bf9375b 100644
--- a/app/javascript/mastodon/reducers/dropdown_menu.js
+++ b/app/javascript/mastodon/reducers/dropdown_menu.js
@@ -4,12 +4,12 @@ import {
   DROPDOWN_MENU_CLOSE,
 } from '../actions/dropdown_menu';
 
-const initialState = Immutable.Map({ openId: null, placement: null, keyboard: false, scroll_key: null });
+const initialState = Immutable.Map({ openId: null, keyboard: false, scroll_key: null });
 
 export default function dropdownMenu(state = initialState, action) {
   switch (action.type) {
   case DROPDOWN_MENU_OPEN:
-    return state.merge({ openId: action.id, placement: action.placement, keyboard: action.keyboard, scroll_key: action.scroll_key });
+    return state.merge({ openId: action.id, keyboard: action.keyboard, scroll_key: action.scroll_key });
   case DROPDOWN_MENU_CLOSE:
     return state.get('openId') === action.id ? state.set('openId', null).set('scroll_key', null) : state;
   default:
diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss
index 928af8453..123fe0c67 100644
--- a/app/javascript/styles/mastodon-light/diff.scss
+++ b/app/javascript/styles/mastodon-light/diff.scss
@@ -285,22 +285,8 @@ html {
 .dropdown-menu {
   background: $white;
 
-  &__arrow {
-    &.left {
-      border-left-color: $white;
-    }
-
-    &.top {
-      border-top-color: $white;
-    }
-
-    &.bottom {
-      border-bottom-color: $white;
-    }
-
-    &.right {
-      border-right-color: $white;
-    }
+  &__arrow::before {
+    background-color: $white;
   }
 
   &__item {
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 23c29260b..d5937643f 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -363,8 +363,8 @@
   }
 }
 
-.dropdown-menu {
-  position: absolute;
+body > [data-popper-placement] {
+  z-index: 3;
 }
 
 .invisible {
@@ -1932,6 +1932,42 @@ a.account__display-name {
   text-decoration: none;
 }
 
+.dropdown-animation {
+  animation: dropdown 300ms cubic-bezier(0.1, 0.7, 0.1, 1);
+
+  @keyframes dropdown {
+    from {
+      opacity: 0;
+      transform: scaleX(0.85) scaleY(0.75);
+    }
+
+    to {
+      opacity: 1;
+      transform: scaleX(1) scaleY(1);
+    }
+  }
+
+  &.top {
+    transform-origin: bottom;
+  }
+
+  &.right {
+    transform-origin: left;
+  }
+
+  &.bottom {
+    transform-origin: top;
+  }
+
+  &.left {
+    transform-origin: right;
+  }
+
+  .reduce-motion & {
+    animation: none;
+  }
+}
+
 .dropdown {
   display: inline-block;
 }
@@ -2016,36 +2052,42 @@ a.account__display-name {
 
 .dropdown-menu__arrow {
   position: absolute;
-  width: 0;
-  height: 0;
-  border: 0 solid transparent;
 
-  &.left {
-    right: -5px;
-    margin-top: -5px;
-    border-width: 5px 0 5px 5px;
-    border-left-color: $ui-secondary-color;
+  &::before {
+    content: '';
+    display: block;
+    width: 14px;
+    height: 5px;
+    background-color: $ui-secondary-color;
+    mask-image: url("data:image/svg+xml;utf8,<svg width='14' height='5' xmlns='http://www.w3.org/2000/svg'><path d='M7 0L0 5h14L7 0z' fill='white'/></svg>");
   }
 
   &.top {
     bottom: -5px;
-    margin-left: -7px;
-    border-width: 5px 7px 0;
-    border-top-color: $ui-secondary-color;
+
+    &::before {
+      transform: rotate(180deg);
+    }
+  }
+
+  &.right {
+    left: -9px;
+
+    &::before {
+      transform: rotate(-90deg);
+    }
   }
 
   &.bottom {
     top: -5px;
-    margin-left: -7px;
-    border-width: 0 7px 5px;
-    border-bottom-color: $ui-secondary-color;
   }
 
-  &.right {
-    left: -5px;
-    margin-top: -5px;
-    border-width: 5px 5px 5px 0;
-    border-right-color: $ui-secondary-color;
+  &.left {
+    right: -9px;
+
+    &::before {
+      transform: rotate(90deg);
+    }
   }
 }
 
@@ -4338,7 +4380,7 @@ a.status-card.compact:hover {
 
 .emoji-picker-dropdown__menu {
   background: $simple-background-color;
-  position: absolute;
+  position: relative;
   box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4);
   border-radius: 4px;
   margin-top: 5px;
@@ -4524,7 +4566,6 @@ a.status-card.compact:hover {
 }
 
 .privacy-dropdown__dropdown {
-  position: absolute;
   background: $simple-background-color;
   box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
   border-radius: 4px;
@@ -4630,7 +4671,6 @@ a.status-card.compact:hover {
 
 .language-dropdown {
   &__dropdown {
-    position: absolute;
     background: $simple-background-color;
     box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
     border-radius: 4px;
@@ -4877,7 +4917,6 @@ a.status-card.compact:hover {
 .modal-root__modal {
   pointer-events: auto;
   display: flex;
-  z-index: 9999;
 }
 
 .video-modal__container {
diff --git a/app/lib/request.rb b/app/lib/request.rb
index b2819c8ed..0508169dc 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -154,9 +154,7 @@ class Request
   end
 
   module ClientLimit
-    def body_with_limit(limit = 1.megabyte)
-      raise Mastodon::LengthValidationError if content_length.present? && content_length > limit
-
+    def truncated_body(limit = 1.megabyte)
       if charset.nil?
         encoding = Encoding::BINARY
       else
@@ -173,11 +171,19 @@ class Request
         contents << chunk
         chunk.clear
 
-        raise Mastodon::LengthValidationError if contents.bytesize > limit
+        break if contents.bytesize > limit
       end
 
       contents
     end
+
+    def body_with_limit(limit = 1.megabyte)
+      raise Mastodon::LengthValidationError if content_length.present? && content_length > limit
+
+      contents = truncated_body(limit)
+      raise Mastodon::LengthValidationError if contents.bytesize > limit
+      contents
+    end
   end
 
   if ::HTTP::Response.methods.include?(:body_with_limit) && !Rails.env.production?
diff --git a/app/lib/vacuum/feeds_vacuum.rb b/app/lib/vacuum/feeds_vacuum.rb
index 00b9fd646..b0246bc0d 100644
--- a/app/lib/vacuum/feeds_vacuum.rb
+++ b/app/lib/vacuum/feeds_vacuum.rb
@@ -10,14 +10,14 @@ class Vacuum::FeedsVacuum
   private
 
   def vacuum_inactive_home_feeds!
-    inactive_users.select(:id, :account_id).find_in_batches do |users|
-      feed_manager.clean_feeds!(:home, users.map(&:account_id))
+    inactive_users.select(:id, :account_id).in_batches do |users|
+      feed_manager.clean_feeds!(:home, users.pluck(:account_id))
     end
   end
 
   def vacuum_inactive_list_feeds!
-    inactive_users_lists.select(:id).find_in_batches do |lists|
-      feed_manager.clean_feeds!(:list, lists.map(&:id))
+    inactive_users_lists.select(:id).in_batches do |lists|
+      feed_manager.clean_feeds!(:list, lists.ids)
     end
   end
 
diff --git a/app/lib/vacuum/statuses_vacuum.rb b/app/lib/vacuum/statuses_vacuum.rb
index d1c4e7197..28c087b1c 100644
--- a/app/lib/vacuum/statuses_vacuum.rb
+++ b/app/lib/vacuum/statuses_vacuum.rb
@@ -19,10 +19,7 @@ class Vacuum::StatusesVacuum
       # as the search index, must be handled first.
       statuses.direct_visibility
               .includes(mentions: :account)
-              .find_each do |status|
-        # TODO: replace temporary solution - call of private model method
-        status.send(:unlink_from_conversations)
-      end
+              .find_each(&:unlink_from_conversations!)
       remove_from_search_index(statuses.ids) if Chewy.enabled?
 
       # Foreign keys take care of most associated records for us.
diff --git a/app/models/status.rb b/app/models/status.rb
index 6cfe19d23..14b7a39fe 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -31,7 +31,7 @@
 #
 
 class Status < ApplicationRecord
-  before_destroy :unlink_from_conversations
+  before_destroy :unlink_from_conversations!
 
   include Discard::Model
   include Paginable
@@ -314,15 +314,14 @@ class Status < ApplicationRecord
   after_create_commit :store_uri, if: :local?
   after_create_commit :update_statistics, if: :local?
 
-  around_create Mastodon::Snowflake::Callbacks
-
-  before_create :set_locality
-
   before_validation :prepare_contents, if: :local?
   before_validation :set_reblog
   before_validation :set_visibility
   before_validation :set_conversation
   before_validation :set_local
+  before_create :set_locality
+
+  around_create Mastodon::Snowflake::Callbacks
 
   after_create :set_poll_id
 
@@ -504,6 +503,17 @@ class Status < ApplicationRecord
     update_attribute(:deleted_at, discard_time)
   end
 
+  def unlink_from_conversations!
+    return unless direct_visibility?
+
+    inbox_owners = mentioned_accounts.local
+    inbox_owners += [account] if account.local?
+
+    inbox_owners.each do |inbox_owner|
+      AccountConversation.remove_status(inbox_owner, self)
+    end
+  end
+
   private
 
   def update_status_stat!(attrs)
@@ -587,15 +597,4 @@ class Status < ApplicationRecord
     reblog&.decrement_count!(:reblogs_count) if reblog?
     thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && distributable?
   end
-
-  def unlink_from_conversations
-    return unless direct_visibility?
-
-    inbox_owners = mentioned_accounts.local
-    inbox_owners += [account] if account.local?
-
-    inbox_owners.each do |inbox_owner|
-      AccountConversation.remove_status(inbox_owner, self)
-    end
-  end
 end
diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb
index 2b649ee22..e2c370057 100644
--- a/app/services/batched_remove_status_service.rb
+++ b/app/services/batched_remove_status_service.rb
@@ -20,7 +20,7 @@ class BatchedRemoveStatusService < BaseService
     ActiveRecord::Associations::Preloader.new.preload(statuses_with_account_conversations, [mentions: :account])
 
     statuses_with_account_conversations.each do |status|
-      status.send(:unlink_from_conversations)
+      status.unlink_from_conversations!
       unpush_from_direct_timelines(status)
     end
 
diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb
index 7496fe2d5..d049b52d1 100644
--- a/app/services/verify_link_service.rb
+++ b/app/services/verify_link_service.rb
@@ -26,7 +26,7 @@ class VerifyLinkService < BaseService
   def link_back_present?
     return false if @body.blank?
 
-    links = Nokogiri::HTML(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]')
+    links = Nokogiri::HTML5(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]')
 
     if links.any? { |link| link['href']&.downcase == @link_back.downcase }
       true
diff --git a/app/views/admin/trends/tags/index.html.haml b/app/views/admin/trends/tags/index.html.haml
index ac9bf91db..4730d20c1 100644
--- a/app/views/admin/trends/tags/index.html.haml
+++ b/app/views/admin/trends/tags/index.html.haml
@@ -20,7 +20,7 @@
   - Trends::TagFilter::KEYS.each do |key|
     = hidden_field_tag key, params[key] if params[key].present?
 
-  .batch-table.optional
+  .batch-table
     .batch-table__toolbar
       %label.batch-table__toolbar__select.batch-checkbox-all
         = check_box_tag :batch_checkbox_all, nil, false
diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml
index ac58c2268..ddebd8f08 100644
--- a/config/locales/activerecord.bg.yml
+++ b/config/locales/activerecord.bg.yml
@@ -19,7 +19,7 @@ bg:
         account:
           attributes:
             username:
-              invalid: трябва да има само букви, цифри и долни черти
+              invalid: трябва да е само букви, цифри и долни черти
               reserved: е запазено
         admin/webhook:
           attributes:
diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml
index a7104f336..7e49ed1e1 100644
--- a/config/locales/activerecord.de.yml
+++ b/config/locales/activerecord.de.yml
@@ -4,16 +4,16 @@ de:
     attributes:
       poll:
         expires_at: Abstimmungsende
-        options: Wahlmöglichkeiten
+        options: Auswahlmöglichkeiten
       user:
         agreement: Service-Vereinbarung
         email: E-Mail-Adresse
         locale: Sprache
         password: Passwort
       user/account:
-        username: Profilname
+        username: Benutzername
       user/invite_request:
-        text: Grund
+        text: Begründung
     errors:
       models:
         account:
@@ -36,19 +36,19 @@ de:
         status:
           attributes:
             reblog:
-              taken: des Beitrags existiert schon
+              taken: des Beitrags existiert bereits
         user:
           attributes:
             email:
-              blocked: verwendet einen nicht erlaubten E-Mail-Anbieter
+              blocked: verwendet einen unerlaubten E-Mail-Anbieter
               unreachable: scheint nicht zu existieren
             role_id:
-              elevated: Kann nicht höher als Ihre aktuelle Rolle sein
+              elevated: kann nicht höher als Ihre aktuelle Rolle sein
         user_role:
           attributes:
             permissions_as_keys:
-              dangerous: enthalte Berechtigungen, die für die Basisrolle nicht sicher sind
-              elevated: kann keine Berechtigungen enthalten, die deine aktuelle Rolle nicht besitzt
+              dangerous: enthält Berechtigungen, welche nicht sicher sind für die Basisrolle
+              elevated: kann nicht Berechtigungen beinhalten, die deine aktuelle Rolle nicht besitzt
               own_role: kann nicht mit deiner aktuellen Rolle geändert werden
             position:
               elevated: kann nicht höher sein als deine aktuelle Rolle
diff --git a/config/locales/activerecord.et.yml b/config/locales/activerecord.et.yml
index b76001ed9..d98c6b611 100644
--- a/config/locales/activerecord.et.yml
+++ b/config/locales/activerecord.et.yml
@@ -43,13 +43,13 @@ et:
               blocked: kasutab mitte lubatud e-posti teenusepakkujat
               unreachable: ei paista eksisteerivat
             role_id:
-              elevated: ei saa olla kõrgem kui teie enda roll
+              elevated: ei saa olla kõrgem kui enda roll
         user_role:
           attributes:
             permissions_as_keys:
               dangerous: hõlmata õiguseid, mis ei ole turvalised baasrollile
-              elevated: ei saa hõlmata õiguseid, mida teie praegune roll ei sisalda
-              own_role: ei saa muuta teie praeguse rolliga
+              elevated: ei saa hõlmata õiguseid, mida sinu praegune roll ei sisalda
+              own_role: ei saa muuta sinu praeguse rolliga
             position:
-              elevated: ei saa olla kõrgem, kui teie praegune roll
-              own_role: ei saa muuta teie praeguse rolliga
+              elevated: ei saa olla kõrgem, kui sinu praegune roll
+              own_role: ei saa muuta sinu praeguse rolliga
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 5d0df5107..9608fdbfb 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -116,7 +116,7 @@ bg:
       redownloaded_msg: Успешно опреснен профил на %{username} от източника
       reject: Отхвърляне
       rejected_msg: Успешно отхвърлена заявка за регистрация на приложението на %{username}
-      remote_suspension_irreversible: Данните за този акаунт са изтрити безвъзвратно.
+      remote_suspension_irreversible: Данните на този акаунт са необратимо изтрити.
       remote_suspension_reversible_hint_html: Акаунтът е бил преустановен на своя сървър и данните ще бъдат напълно премахнати на %{date}. Дотогава отдалеченият сървър може да възстанови този акаунт без щети. Ако желаете да премахнете всички данни за акаунта незабавно, можете да го сторите по-долу.
       remove_avatar: Премахване на аватар
       remove_header: Премахване на заглавката
@@ -208,8 +208,8 @@ bg:
         reject_appeal: Отхвърляне на обжалването
         reject_user: Отхвърляне на потребителя
         remove_avatar_user: Премахване на аватара
-        reopen_report: Повторно отваряне на доклад
-        resend_user: Повторно изпращане на имейла за потвърждение
+        reopen_report: Отваряне пак на доклад
+        resend_user: Изпращане пак на е-писмо за потвърждение
         reset_password_user: Задаване на нова парола
         resolve_report: Отстраняване на доклада
         sensitive_account: Деликатен акаунт
@@ -247,13 +247,13 @@ bg:
         destroy_announcement_html: "%{name} изтри оповестяване %{target}"
         destroy_canonical_email_block_html: "%{name} отблокира имейла с хеш %{target}"
         destroy_custom_emoji_html: "%{name} изтри емоджито %{target}"
-        destroy_domain_allow_html: "%{name} отмени федерирането с домейн %{target}"
+        destroy_domain_allow_html: "%{name} забрани федерирация с домейн %{target}"
         destroy_domain_block_html: "%{name} отблокира домейн %{target}"
         destroy_email_domain_block_html: "%{name} отблокира домейн на имейл %{target}"
         destroy_instance_html: "%{name} прочисти домейн %{target}"
         destroy_ip_block_html: "%{name} изтри правило за IP %{target}"
         destroy_status_html: "%{name} премахна публикация от %{target}"
-        destroy_unavailable_domain_html: "%{name} възстанови доставянето до домейн %{target}"
+        destroy_unavailable_domain_html: "%{name} възобнови доставката до домейн %{target}"
         destroy_user_role_html: "%{name} изтри роля %{target}"
         disable_2fa_user_html: "%{name} изключи двуфакторното изискване за потребител %{target}"
         disable_custom_emoji_html: "%{name} изключи емоджито %{target}"
@@ -280,11 +280,11 @@ bg:
         unsilence_account_html: "%{name} отмени ограниченията на акаунта на %{target}"
         unsuspend_account_html: "%{name} върна обратно акаунта на %{target}"
         update_announcement_html: "%{name} обнови оповестяването на %{target}"
-        update_custom_emoji_html: "%{name} обнови емоджито на %{target}"
+        update_custom_emoji_html: "%{name} обнови емоджито %{target}"
         update_domain_block_html: "%{name} обнови блокирането на домейна за %{target}"
         update_ip_block_html: "%{name} промени правило за IP на %{target}"
         update_status_html: "%{name} обнови публикация от %{target}"
-        update_user_role_html: "%{name} промени ролята на %{target}"
+        update_user_role_html: "%{name} промени ролята %{target}"
       deleted_account: изтрит акаунт
       empty: Няма намерени дневници.
       filter_by_action: Филтриране по действие
@@ -362,7 +362,7 @@ bg:
       resolved_reports: разрешени доклади
       software: Софтуер
       sources: Източници на регистрации
-      space: Използвано пространство
+      space: Използвано място
       title: Табло за управление
       top_languages: Водещи дейни езици
       top_servers: Водещи дейни сървъри
@@ -374,10 +374,10 @@ bg:
     domain_allows:
       add_new: Позволявам федерацията с домейна
       created_msg: Домейнът е успешно позволен за федерацията
-      destroyed_msg: Домейнът не е позволен за федерацията
+      destroyed_msg: Домейнът е забранен от федерацията
       export: Износ
       import: Внос
-      undo: Не позволявам федерацията с домейна
+      undo: Забрана на федерацията с домейна
     domain_blocks:
       add_new: Добавяне на ново блокиране за домейна
       created_msg: Блокирането на домейна се обработва
@@ -397,8 +397,8 @@ bg:
           silence: Ограничаване
           suspend: Преустановяване
         title: Ново блокиране на домейн
-      no_domain_block_selected: Нищо не беше проемено, защото нямаше избрано блокиране на домейн
-      not_permitted: Нямате право да извършвате това действие
+      no_domain_block_selected: Нищо не е променяно, защото няма избрани блокирания на домейн
+      not_permitted: Нямате право да извършвате действието
       obfuscate: Замъгляване на името на домейна
       obfuscate_hint: Частично замъгляване на името на домейна в списъка, ако е включено рекламирането на списъка с ограничения на домейни
       private_comment: Личен коментар
@@ -440,9 +440,9 @@ bg:
         existing_relationships_warning: Съществуващи отношения във вид на следване
         private_comment_description_html: 'За по-лесно проследяване откъде идват внесените блокирания, те ще се създадат със следния личен коментар: <q>%{comment}</q>'
         private_comment_template: Внесено от %{source} на %{date}
-        title: Импортиране на блокиранията на домейни
+        title: Внос на блокирания на домейни
       new:
-        title: Импортиране на блокиранията на домейни
+        title: Внос на блокирания на домейни
       no_file: Няма избран файл
     follow_recommendations:
       description_html: "<strong>Препоръките за следване помагат на новите потребители бързо да намерят ново съдържание</strong>. Когато един потребител не е създавал достатъчно връзки, за да формира свои собствени препоръки за следване, тези акаунти ще бъдат препоръчани. Акаунтите ще бъдат генерирани всеки ден на базата на най-голяма скорошна ангажираност и най-голям брой местни последователи за даден език."
@@ -457,7 +457,7 @@ bg:
         description_html:
           one: Ако доставянето до домейна не е успешно за <strong>%{count} ден</strong>, няма да има последващи опити, докато не се получи доставка <em>от</em> домейна.
           other: Ако доставянето до домейна не е успешно за <strong>%{count} дни</strong>, няма да има последващи опити, докато не се получи доставка <em>от</em> домейна.
-        failure_threshold_reached: Прага за общ брой грешки е достигнат на %{date}.
+        failure_threshold_reached: Прагът за броя грешки е достигнат на %{date}.
         failures_recorded:
           one: Неуспешен опит в %{count} ден.
           other: Неуспешни опити в %{count} различни дни.
@@ -499,7 +499,7 @@ bg:
       delivery_available: Доставката е налична
       delivery_error_days: Грешни дни на доставяне
       delivery_error_hint: Ако доставката не е възможна за %{count} дни, автоматично ще бъде маркирана като невъзможно за доставка.
-      destroyed_msg: Данните от %{domain} бяха поставени на опашка за незабавно изтриване.
+      destroyed_msg: Данните от %{domain} са добавени към опашката за незабавно изтриване.
       empty: Няма намерени домейни.
       known_accounts:
         one: "%{count} известен акаунт"
@@ -518,7 +518,7 @@ bg:
       total_followed_by_us: Последвано от нас
       total_reported: Доклади за тях
       total_storage: Прикачена мултимедия
-      totals_time_period_hint_html: Общите стойности, показани по-долу, включват всички данни.
+      totals_time_period_hint_html: Общите стойности, показани по-долу, включват данни за всички времена.
     invites:
       deactivate_all: Деактивиране на всички
       filter:
@@ -575,7 +575,7 @@ bg:
         mark_as_sensitive_description_html: Мултимедията в докладваните публикации ще се означи като деликатна, за да ви помогне при изострянето на бъдещи нарушения от същия акаунт.
         other_description_html: Показване на повече възможности за управляване на поведението на акаунта и за персонализиране на комуникацията с доклвадвания акаунт.
         resolve_description_html: Няма да се предприеме действие срещу докладвания акаунт, няма да се записва нарушение и докладът ще се затвори.
-        silence_description_html: Профилът ще бъде видим само за тези, които вече го следват или го търсят ръчно, което драстично ограничава обсега му. Настройката може да бъде променена по всяко време.
+        silence_description_html: Профилът ще е видим само за последователите му или търсещите го ръчно, което драстично ограничава обсега му. Настройката може да се промени по всяко време.
         suspend_description_html: Профилът и цялото му съдържание ще бъдат недостъпни, до евентуалното му изтриване. Няма да може да се взаимодейства с акаунта. Настройката може да се отмени в рамките на 30 дни.
       actions_description_html: Решете какво действие може да се предприеме, за да бъде отхвърлен докладът. Ако предприемете наказателно действие срещу докладвания акаунт, към него ще бъде изпратено известие по имейл, освен ако <strong>Спам</strong> категорията не е била избрана.
       add_to_report: Добавяне на още към доклада
@@ -635,7 +635,7 @@ bg:
         special: Специални
       delete: Изтриване
       description_html: С <strong>потребителските роли</strong> може да персонализирате до кои функции и области на Mastodon имат достъп потребителите ви.
-      edit: Промяна на ролята на „%{name}“
+      edit: Промяна на ролята „%{name}“
       everyone: Разрешения по подразбиране
       everyone_full_description_html: Това е <strong>основната роля</strong>, засягаща <strong>всички потребители</strong>, дори тези без назначена роля. Всички други роли наследяват разрешения за достъп от нея.
       permissions_count:
@@ -686,7 +686,7 @@ bg:
     rules:
       add_new: Добавяне на правило
       delete: Изтриване
-      description_html: Дори повечето хора да отбелязват, че са прочели и са съгласни с условията на услугата, обикновено хората не ги четат, докато не се сблъскат с проблем. <strong>Направете четенето на правилата за вашия сървър по-лесно, като ги представите като списък с точки.</strong> Опитайте да се придържате към кратки и прости правила, но не ги разпилявайте в твърде много точки.
+      description_html: Дори повечето хора да отбелязват, че са прочели и са съгласни с условията на услугата, обикновено хората не ги четат, докато не се сблъскат с проблем. <strong>Улеснете четенето на правилата за сървъра си, представяйки ги като списък с точки.</strong> Опитайте да се придържате към кратки и прости правила, но не ги разпилявайте в премного точки.
       edit: Промяна на правило
       empty: Още няма определени правила на сървъра.
       title: Правила на сървъра
@@ -703,8 +703,8 @@ bg:
         preamble: Брандирането на вашия сървър го различава от другите сървъри в мрежата. Тази информация може да се види на различни места, като уеб интерфейса на Mastodon, собствени приложения, в прегледите на линкове от други сайтове и в приложения за съобщения, и т.н. По тази причина е добре тази информация да е кратка и ясна.
         title: Брандиране
       content_retention:
-        preamble: Контрол върху това как съдържание, генерирано от потребители, се пази в Mastodon.
-        title: Съхранение на съдържание
+        preamble: Управление на това как съдържание, породено от потребители, се съхранява в Mastodon.
+        title: Задържане на съдържание
       default_noindex:
         desc_html: Влияе на всички потребители, които не са променили тази настройка за себе си
         title: По подразбиране изключете индексирането от търсачки за вашите потребители
@@ -712,9 +712,9 @@ bg:
         follow_recommendations: Препоръки за следване
         preamble: За потребители, които са нови и не познават никого в Mastodon, показването на интересно съдържание е ключово. Настройте начина, по който различни функции по откриване на съдържание работят на вашия сървър.
         profile_directory: Директория на профила
-        public_timelines: Публични инфопотоци
+        public_timelines: Публични часови оси
         title: Откриване
-        trends: Актуални
+        trends: Налагащи се
       domain_blocks:
         all: До всеки
         disabled: До никого
@@ -779,7 +779,7 @@ bg:
         action: Управление на правилата на сървъра
         message_html: Не сте определили никакви правила на сървъра.
       sidekiq_process_check:
-        message_html: Няма Sidekiq процес, който тече за %{value} опашка/и. Моля, прегледайте своите настройки за Sidekiq
+        message_html: Не работи процес Sidekiq за %{value} опашка/и. Прегледайте настройките си за Sidekiq
     tags:
       review: Преглед на състояние
       updated_msg: Успешно осъвременени настройки на хаштага
@@ -796,16 +796,16 @@ bg:
         disallow_provider: Забраняване на публикуващия
         no_link_selected: Няма промяна, тъй като няма избрани линкове
         publishers:
-          no_publisher_selected: Няма промяна, тъй като няма избрани автори
+          no_publisher_selected: Няма промяна, тъй като няма избрани публикуващи
         shared_by_over_week:
           one: Споделено от един човек през последната седмица
-          other: Споделено от %{count} хора през последната седмица
+          other: Споделено от %{count} души през последната седмица
         title: Нашумели линкове
         usage_comparison: Споделено %{today} пъти днес, в сравнение с %{yesterday} пъти вчера
       only_allowed: Само позволените
       pending_review: В очакване на преглед
       preview_card_providers:
-        allowed: Линкове от този автор могат да се включат в нашумели
+        allowed: Линкове от този публикуващ може да са нашумели
         description_html: Това са домейни, линковете от които са често споделяни на вашия сървър. Линковете няма да се показват в нашумели, докато домейнът на линка не бъде одобрен. Вашите одобрения (забрани) влияят и на поддомейни.
         rejected: Линкове от този автор няма да се включат в нашумели
         title: Публикуващи
@@ -819,8 +819,8 @@ bg:
         no_status_selected: Няма промяна, тъй като няма избрана нашумяла публикация
         not_discoverable: Авторът не е избрал да е откриваем
         shared_by:
-          one: Споделена или маркирана като любима веднъж
-          other: Споделена или маркирана като любима %{friendly_count} пъти
+          one: Споделено или сложено веднъж в любими
+          other: Споделено или сложено в любими %{friendly_count} пъти
         title: Налагащи се публикации
       tags:
         current_score: Текущ резултат %{score}
@@ -834,19 +834,19 @@ bg:
         listable: Може да бъде предложено
         no_tag_selected: Няма промяна, тъй като няма избран таг
         not_listable: Няма да бъде препоръчан
-        not_trendable: Няма да се покаже в актуални
+        not_trendable: Няма да се появи под налагащи се
         not_usable: Не може да се използва
         peaked_on_and_decaying: Връх на актуалността на %{date}, сега е в спад
-        title: Актуални хаштагове
-        trendable: Може да се покаже в актуални
-        trending_rank: 'Актуални #%{rank}'
+        title: Налагащи се хаштагове
+        trendable: Може да се появи под налагащи се
+        trending_rank: 'Налагащи се #%{rank}'
         usable: Може да се употребява
         usage_comparison: Използвано %{today} пъти днес, в сравнение с %{yesterday} пъти вчера
         used_by_over_week:
           one: Употребено от един човек през последната седмица
           other: Използвано от %{count} души през последната седмица
-      title: Актуални
-      trending: Актуални
+      title: Налагащи се
+      trending: Изгряващи
     warning_presets:
       add_new: Добавяне на ново
       delete: Изтриване
@@ -861,7 +861,7 @@ bg:
       disabled: Деактивирано
       edit: Редактиране на крайната точка
       empty: Все още нямате настроени крайни точки за уеб обратни повиквания.
-      enable: Активиране
+      enable: Включване
       enabled: Активно
       enabled_events:
         one: Едно активирано събитие
@@ -887,7 +887,7 @@ bg:
       next_steps: Можете да одобрите жалбата и да отмените модераторското решение или да я игнорирате.
       subject: "%{username} обжалва модераторското решение в %{instance}"
     new_pending_account:
-      body: Подробностите за новия акаунт са по-долу. Можете да приемете или отхвърлите молбата.
+      body: Подробностите за новия акаунт са по-долу. Може да одобрите или отхвърлите заявлението.
       subject: Нов акаунт за преглед на %{instance} (%{username})
     new_report:
       body: "%{reporter} докладва %{target}"
@@ -900,14 +900,14 @@ bg:
       new_trending_statuses:
         title: Налагащи се публикации
       new_trending_tags:
-        no_approved_tags: В момента няма одобрени актуални хаштагове.
+        no_approved_tags: Сега няма одобрени налагащи се хаштагове.
         requirements: 'Всеки от тези кандидати може да надмине #%{rank} одобрен актуален хаштаг, който в момента е #%{lowest_tag_name} с резултат %{lowest_tag_score}.'
         title: Нашумели хаштагове
       subject: Нови нашумели, готови за преглед в %{instance}
   aliases:
-    add_new: Създайте псевдоним
-    created_msg: Успешно създаване на нов псевдоним. Сега вече можете да започнете преместването от стария акаунт.
-    deleted_msg: Успешно премахване на псевдонима. Преместването от онзи акаунт към този вече не е възможно.
+    add_new: Създаване на псевдоним
+    created_msg: Успешно създадохте нов псевдоним. Сега вече може да започнете преместването от стария акаунт.
+    deleted_msg: Успешно премахнахте псевдонима. Преместването от онзи акаунт към този вече не е възможно.
     empty: Нямате псевдоними.
     hint_html: Ако желаете да се преместите от друг акаунт към този, тук можете да създадете псевдоним, което се изисква преди да можете да пристъпите към преместване на последователите си от стария акаунт към този. Това действие е <strong>безопасно и възстановимо</strong>. <strong>Миграцията към новия акаунт се инициира от стария акаунт</strong>.
     remove: Разкачвне на псевдонима
@@ -926,7 +926,7 @@ bg:
   application_mailer:
     notification_preferences: Промяна на предпочитанията за имейл
     salutation: "%{name},"
-    settings: 'Промяна на предпочитанията за e-mail: %{link}'
+    settings: 'Промяна на предпочитанията за имейл: %{link}'
     view: 'Преглед:'
     view_profile: Преглед на профила
     view_status: Преглед на публикацията
@@ -938,17 +938,17 @@ bg:
     warning: Бъдете внимателни с тези данни. Никога не ги споделяйте с никого!
     your_token: Вашият код за достъп
   auth:
-    apply_for_account: Молба за акаунт
+    apply_for_account: Заявка за акаунт
     change_password: Парола
     delete_account: Изтриване на акаунта
-    delete_account_html: Ако желаете да изтриете акаунта си, можете <a href="%{path}">да сторите това тук</a>. Ще ви бъде поискано потвърждение.
+    delete_account_html: Ако желаете да изтриете акаунта си, може <a href="%{path}">да сторите това тук</a>. Ще ви се поиска потвърждение.
     description:
       prefix_invited_by_user: "@%{name} ви покани да се присъедините към този сървър на Mastodon!"
       prefix_sign_up: Регистрирайте се днес в Mastodon!
       suffix: Със свой акаунт ще можете да следвате хора, да публикувате актуализации, да обменяте съобщения с потребители от всеки сървър на Mastodon и много повече!
-    didnt_get_confirmation: Не получих инструкции за потвърждение
+    didnt_get_confirmation: Не сте ли получили указания за потвърждение?
     dont_have_your_security_key: Нямате ли си ключ за сигурност?
-    forgot_password: Забравих си паролата
+    forgot_password: Забравена парола
     invalid_reset_password_token: Кодът за възстановяване на паролата е невалиден или с изтекъл срок. Моля, поръчайте нов.
     link_to_otp: Въведете двуфакторния код от телефона си или кода за възстановяване
     link_to_webauth: Използвайте ключа си за сигурност на устройството
@@ -965,7 +965,7 @@ bg:
     register: Регистрация
     registration_closed: "%{instance} не приема нови членуващи"
     resend_confirmation: Изпрати отново инструкции за потвърждение
-    reset_password: Подновяване на паролата
+    reset_password: Нулиране на паролата
     rules:
       preamble: Тези са зададени и наложени от модераторите на %{domain}.
       title: Някои основни правила.
@@ -1309,9 +1309,9 @@ bg:
     poll:
       subject: Анкетата от %{name} приключи
     reblog:
-      body: 'Вашата публикация беше споделена от %{name}:'
-      subject: "%{name} сподели публикацията ти"
-      title: Ново споделяне
+      body: 'Ваша публикация беше подсилена от %{name}:'
+      subject: "%{name} подсили ваша публикация"
+      title: Ново подсилване
     status:
       subject: "%{name} току-що публикува"
     update:
@@ -1473,7 +1473,7 @@ bg:
       video:
         one: "%{count} видео"
         other: "%{count} видеозаписа"
-    boosted_from_html: Споделено от %{acct_link}
+    boosted_from_html: Подсилено от %{acct_link}
     content_warning: 'Предупреждение за съдържание: %{warning}'
     default_language: Същият като езика на интерфейса
     disallowed_hashtags:
@@ -1488,7 +1488,7 @@ bg:
       direct: Публикациите, които са видими само за споменати потребители не може да се закачат
       limit: Вече сте закачили максималния брой публикации
       ownership: Публикация на някого другиго не може да се закачи
-      reblog: Споделяне не може да бъде закачено
+      reblog: Подсилване не може да се закача
     poll:
       total_people:
         one: "%{count} човек"
@@ -1517,9 +1517,9 @@ bg:
     exceptions: Изключения
     explanation: Тъй като изтриването на публикации е скъпа операция, това се прави бавно във времето, когато сървърът иначе не е зает. Поради тази причина публикациите ви може да се изтрият известно време след като достигнат възрастовия праг.
     ignore_favs: Игнориране на харесвания
-    ignore_reblogs: Игнориране на споделяния
+    ignore_reblogs: Игнориране на подсилвания
     interaction_exceptions: Изключения въз основа на взаимодействия
-    interaction_exceptions_explanation: Забележете, че няма гаранция, че публикации ще бъдат изтрити, ако паднат под прага на брой маркирания като любими/споделяния, след като са го надвишили.
+    interaction_exceptions_explanation: Забележете, че няма гаранция, че публикацията ще се изтрият, ако паднат под прага на брой маркирания като любими/подсилвания, след като са го надвишили.
     keep_direct: Запазване на директните съобщения
     keep_direct_hint: Директните ви съобщения не се изтриват
     keep_media: Задържане на публикации с прикачена мултимедия
@@ -1548,7 +1548,7 @@ bg:
     min_reblogs_hint: Не се изтриват ваши публикации, споделени поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от техния брой споделяния
   stream_entries:
     pinned: Закачена публикация
-    reblogged: споделено
+    reblogged: подсилено
     sensitive_content: Деликатно съдържание
   strikes:
     errors:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 09f5ca21a..4bfb82f0a 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -19,9 +19,9 @@ ca:
     pin_errors:
       following: Has d'estar seguint la persona que vulguis avalar
     posts:
-      one: Publicació
-      other: Publicacions
-    posts_tab_heading: Publicacions
+      one: Tut
+      other: Tuts
+    posts_tab_heading: Tuts
   admin:
     account_actions:
       action: Realitza l'acció
@@ -144,7 +144,7 @@ ca:
         targeted_reports: Informes realitzats per altres
       silence: Silenci
       silenced: Silenciat
-      statuses: Publicacions
+      statuses: Tuts
       strikes: Accions anteriors
       subscribe: Subscriu
       suspend: Suspèn
@@ -392,7 +392,7 @@ ca:
         create: Crea un bloqueig
         hint: El bloqueig de domini no impedirà la creació de nous comptes en la base de dades, però s'aplicaran de manera retroactiva mètodes de moderació específics sobre aquests comptes.
         severity:
-          desc_html: "<strong>Limitar</strong> farà que les publicacions dels comptes d'aquest domini siguin invisibles per a qualsevol persona que no les segueixi. <strong>Suspendre</strong> eliminarà del vostre servidor tot el contingut, multimèdia i perfil dels comptes d'aquest domini. Utilitza <strong>Cap</strong> si només vols rebutjar fitxers multimèdia."
+          desc_html: "<strong>Limitar</strong> farà que els tuts dels comptes d'aquest domini siguin invisibles per a qualsevol persona que no els segueixi. <strong>Suspendre</strong> eliminarà del vostre servidor tot el contingut, multimèdia i perfil dels comptes d'aquest domini. Utilitza <strong>Cap</strong> si només vols rebutjar fitxers multimèdia."
           noop: Cap
           silence: Limitar
           suspend: Suspensió
@@ -488,7 +488,7 @@ ca:
         instance_languages_dimension: Idiomes principals
         instance_media_attachments_measure: adjunts multimèdia desats
         instance_reports_measure: informes sobre ells
-        instance_statuses_measure: publicacions desades
+        instance_statuses_measure: tuts desats
       delivery:
         all: Totes
         clear: Neteja els errors de lliurament
@@ -547,11 +547,11 @@ ca:
     relays:
       add_new: Afegiu un nou relay
       delete: Elimina
-      description_html: Un <strong>relay de federació</strong> és un servidor intermediari que intercanvia grans volums de publicacions públiques entre servidors que se subscriuen i publiquen en ell. <strong>Pot ajudar a servidors petits i mitjans a descobrir contingut del fedivers</strong>, no fent necessari que els usuaris locals manualment segueixin altres persones de servidors remots.
+      description_html: Un <strong>relay de federació</strong> és un servidor intermediari que intercanvia grans volums de tuts públics entre servidors que se subscriuen i publiquen en ell. <strong>Pot ajudar a servidors petits i mitjans a descobrir contingut del fedivers</strong>, no fent necessari que els usuaris locals manualment segueixin altres persones de servidors remots.
       disable: Inhabilita
       disabled: Desactivat
       enable: Activat
-      enable_hint: Una vegada habilitat, el teu servidor se subscriurà a totes les publicacions públiques d'aquest relay i començarà a enviar-hi totes les publicacions públiques d'aquest servidor.
+      enable_hint: Una vegada habilitat, el teu servidor es subscriurà a tots els tuts públics d'aquest relay i començarà a enviar-hi tots els tuts públics d'aquest servidor.
       enabled: Activat
       inbox_url: URL del Relay
       pending: S'està esperant l'aprovació del relay
@@ -571,8 +571,8 @@ ca:
       action_log: Registre d'auditoria
       action_taken_by: Mesures adoptades per
       actions:
-        delete_description_html: Les publicacions reportades seran eliminades i un cop serà gravat per a ajudar-te a escalar en futures infraccions des del mateix compte.
-        mark_as_sensitive_description_html: Els mèdia de les publicacions reportades seran marcats com a sensibles i una acció serà gravada per ajudar a escalar en futures infraccions del mateix compte.
+        delete_description_html: Els tuts reportats seran eliminats i un cop serà gravat per a ajudar-te a escalar en futures infraccions des del mateix compte.
+        mark_as_sensitive_description_html: Els mèdia dels tuts reportats seran marcats com a sensibles i una acció serà gravada per ajudar a escalar en futures infraccions del mateix compte.
         other_description_html: Veu més opcions controlant el comportament del compte i personalitza la comunicació al compte reportat.
         resolve_description_html: No serà presa cap acció contra el compte reportat, cap cop serà gravat i l'informe es tancarà.
         silence_description_html: El perfil serà visible només per aquells que ja el seguien o en cerca manual, limitant severament el seu alcanç. Sempre pot ser revertit.
@@ -758,9 +758,9 @@ ca:
       with_media: Amb contingut multimèdia
     strikes:
       actions:
-        delete_statuses: "%{name} ha eliminat les publicacions de %{target}"
+        delete_statuses: "%{name} ha eliminat els tuts de %{target}"
         disable: "%{name} ha congelat el compte de %{target}"
-        mark_statuses_as_sensitive: "%{name} ha marcat les publicacions de %{target} com a sensibles"
+        mark_statuses_as_sensitive: "%{name} ha marcat els tuts de %{target} com a sensibles"
         none: "%{name} ha enviat un avís a %{target}"
         sensitive: "%{name} ha marcat el compte de %{target} com a sensible"
         silence: "%{name} ha limitat el compte de %{target}"
@@ -791,7 +791,7 @@ ca:
       links:
         allow: Permet enllaç
         allow_provider: Permet mitjà
-        description_html: Aquests són enllaços que ara mateix estan compartint molt els comptes dels quals el teu servidor veu les publicacions. Poden ajudar els teus usuaris a trobar què està passant en el món. Cap dels enllaços es mostra públicament fins que no aprovis el mitjà. També pots acceptar o rebutjar enllaços individuals.
+        description_html: Aquests són enllaços que ara mateix estan compartint molt els comptes dels quals el teu servidor veu els tuts. Poden ajudar els teus usuaris a trobar què està passant en el món. Cap dels enllaços es mostra públicament fins que no aprovis el mitjà. També pots acceptar o rebutjar enllaços individuals.
         disallow: No permetre l'enllaç
         disallow_provider: No permetre el mitjà
         no_link_selected: No s'ha canviat cap enllaç perquè cap ha estat seleccionat
@@ -816,12 +816,12 @@ ca:
         description_html: Aquests són tuts que el teu servidor veu i que ara mateix s'estan compartint i afavorint molt. Poden ajudar als teus nous usuaris i als que retornen a trobar més gent a qui seguir. Cap tut es mostra públicament fins que no aprovis l'autor i l'autor permeti que el seu compte sigui suggerit a altres. També pots acceptar o rebutjar tuts individualment.
         disallow: Rebutja tut
         disallow_account: Rebutja autor
-        no_status_selected: No s'han canviat les publicacions en tendència perquè cap ha estat seleccionada
+        no_status_selected: No s'han canviat els tuts en tendència perquè cap ha estat seleccionat
         not_discoverable: L'autor no ha activat poder ser detectable
         shared_by:
           one: Compartit o afavorit una vegada
           other: Compartit i afavorit %{friendly_count} vegades
-        title: Publicacions en tendència
+        title: Tuts en tendència
       tags:
         current_score: Puntuació actual %{score}
         dashboard:
@@ -830,7 +830,7 @@ ca:
           tag_servers_dimension: Els millors servidors
           tag_servers_measure: diferents servidors
           tag_uses_measure: total usos
-        description_html: Aquestes són les etiquetes que ara mateix estan apareixent en moltes publicacions que el teu servidor veu. Poden ajudar els teus usuaris a trobar de què està parlant majoritàriament la gent en aquest moment. Cap etiqueta es mostra públicament fins que no l'aprovis.
+        description_html: Aquestes són les etiquetes que ara mateix estan apareixent en molts tuts que el teu servidor veu. Poden ajudar els teus usuaris a trobar de què està parlant majoritàriament la gent en aquest moment. Cap etiqueta es mostra públicament fins que no l'aprovis.
         listable: Es pot suggerir
         no_tag_selected: No s'ha canviat cap etiqueta perquè cap ha estat seleccionada
         not_listable: No es pot suggerir
@@ -876,9 +876,9 @@ ca:
   admin_mailer:
     new_appeal:
       actions:
-        delete_statuses: eliminar les seves publicacions
+        delete_statuses: eliminar els seus tuts
         disable: congelar els seus comptes
-        mark_statuses_as_sensitive: marcar les seves publicacions com a sensibles
+        mark_statuses_as_sensitive: marcar els seus tuts com a sensibles
         none: un avís
         sensitive: marcar els seus comptes com a sensibles
         silence: limitar els seus comptes
@@ -898,7 +898,7 @@ ca:
       new_trending_links:
         title: Enllaços en tendència
       new_trending_statuses:
-        title: Publicacions en tendència
+        title: Tuts en tendència
       new_trending_tags:
         no_approved_tags: Actualment no hi ha etiquetes en tendència aprovades.
         requirements: 'Qualsevol d''aquests candidats podria superar el #%{rank} de la etiqueta en tendència aprovada, que actualment és "%{lowest_tag_name}" amb una puntuació de %{lowest_tag_score}.'
@@ -922,7 +922,7 @@ ca:
       guide_link: https://crowdin.com/project/mastodon
       guide_link_text: Tothom hi pot contribuir.
     sensitive_content: Contingut sensible
-    toot_layout: Disseny de les publicacions
+    toot_layout: Disseny dels tuts
   application_mailer:
     notification_preferences: Canvia les preferències de correu
     salutation: "%{name},"
@@ -1038,7 +1038,7 @@ ca:
     warning:
       before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:'
       caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir
-      data_removal: Les teves publicacions i altres dades seran permanentment eliminades
+      data_removal: Els teus tuts i altres dades seran permanentment eliminades
       email_change_html: Pots <a href="%{path}">canviar la teva adreça de correu electrònic</a> sense eliminar el teu compte
       email_contact_html: Si encara no arriba pots enviar un correu electrònic a <a href="mailto:%{email}">%{email}</a> per a demanar ajuda
       email_reconfirmation_html: Si no estàs rebent el correu electrònic de confirmació <a href="%{path}">pots demanar-lo un altre cop</a>
@@ -1068,7 +1068,7 @@ ca:
       title_actions:
         delete_statuses: Eliminació de publicació
         disable: Congelació del compte
-        mark_statuses_as_sensitive: Marcatge de les publicacions com a sensibles
+        mark_statuses_as_sensitive: Marcatge dels tuts com a sensibles
         none: Avís
         sensitive: Marcatge del compte com a sensible
         silence: Limitació del compte
@@ -1100,7 +1100,7 @@ ca:
     archive_takeout:
       date: Data
       download: Baixa l’arxiu
-      hint_html: Pots sol·licitar un arxiu de les teves <strong>publicacions i dels fitxers multimèdia pujats</strong>. Les dades exportades tindran el format ActivityPub, llegible per qualsevol programari compatible. Pots sol·licitar un arxiu cada 7 dies.
+      hint_html: Pots sol·licitar un arxiu dels teus <strong>tuts i dels fitxers multimèdia pujats</strong>. Les dades exportades tindran el format ActivityPub, llegible per qualsevol programari compatible. Pots sol·licitar un arxiu cada 7 dies.
       in_progress: S'està compilant el teu arxiu...
       request: Sol·licitar el teu arxiu
       size: Mida
@@ -1115,7 +1115,7 @@ ca:
     add_new: Afegir nova etiqueta
     errors:
       limit: Ja has mostrat la quantitat màxima d'etiquetes
-    hint_html: "<strong>Què son les etiquetes destacades?</strong> Es mostren de manera destacada en el teu perfil públic i permeten a les persones navegar per les teves publicacions gràcies a aquestes etiquetes. Són una gran eina per fer un seguiment de treballs creatius o de projectes a llarg termini."
+    hint_html: "<strong>Què son les etiquetes destacades?</strong> Es mostren de manera destacada en el teu perfil públic i permeten a les persones navegar per els teus tuts gràcies a aquestes etiquetes. Són una gran eina per fer un seguiment de treballs creatius o de projectes a llarg termini."
   filters:
     contexts:
       account: Perfils
@@ -1126,8 +1126,8 @@ ca:
     edit:
       add_keyword: Afegeix una paraula clau
       keywords: Paraules clau
-      statuses: Publicacions individuals
-      statuses_hint_html: Aquest filtre s'aplica a la selecció de publicacions individuals, independentment de si coincideixen amb les paraules clau següents. <a href="%{path}">Revisa o elimina publicacions del filtre</a>.
+      statuses: Tuts individuals
+      statuses_hint_html: Aquest filtre s'aplica a la selecció de tuts individuals, independentment de si coincideixen amb les paraules clau següents. <a href="%{path}">Revisa o elimina tuts del filtre</a>.
       title: Editar filtre
     errors:
       deprecated_api_multiple_keywords: Aquests paràmetres no poden ser canviats des d'aquesta aplicació perquè apliquen a més d'un filtre per paraula clau. Utilitza una aplicació més recent o la interfície web.
@@ -1142,11 +1142,11 @@ ca:
         one: "%{count} paraula clau"
         other: "%{count} paraules clau"
       statuses:
-        one: "%{count} publicació"
-        other: "%{count} publicacions"
+        one: "%{count} tut"
+        other: "%{count} tuts"
       statuses_long:
-        one: "%{count} publicació individual ocultada"
-        other: "%{count} publicacions individuals ocultades"
+        one: "%{count} tut individual ocultat"
+        other: "%{count} tuts individuals ocultats"
       title: Filtres
     new:
       save: Desa el filtre nou
@@ -1156,8 +1156,8 @@ ca:
       batch:
         remove: Eliminar del filtre
       index:
-        hint: Aquest filtre aplica als apunts seleccionats independentment d'altres criteris. Pots afegir més publicacions a aquest filtre des de la interfície Web.
-        title: Publicacions filtrades
+        hint: Aquest filtre aplica als tuts seleccionats independentment d'altres criteris. Pots afegir més tuts a aquest filtre des de la interfície Web.
+        title: Tuts filtrats
   footer:
     trending_now: En tendència
   generic:
@@ -1391,10 +1391,10 @@ ca:
     content_warning: 'Avís de contingut:'
     descriptions:
       account: Publicacions des de @%{acct}
-      tag: 'Publicacions etiquetades #%{hashtag}'
+      tag: 'Tuts etiquetats #%{hashtag}'
   scheduled_statuses:
-    over_daily_limit: Has superat el límit de %{limit} publicacions programades per a avui
-    over_total_limit: Has superat el límit de %{limit} publicacions programades
+    over_daily_limit: Has superat el límit de %{limit} tuts programats per a avui
+    over_total_limit: Has superat el límit de %{limit} tuts programats
     too_soon: La data programada ha de ser futura
   sessions:
     activity: Última activitat
@@ -1457,7 +1457,7 @@ ca:
     preferences: Preferències
     profile: Perfil
     relationships: Seguits i seguidors
-    statuses_cleanup: Esborrat automàtic de publicacions
+    statuses_cleanup: Esborrat automàtic de tuts
     strikes: Accions de mediació
     two_factor_authentication: Autenticació de dos factors
     webauthn_authentication: Claus de seguretat
@@ -1485,8 +1485,8 @@ ca:
     open_in_web: Obre en la web
     over_character_limit: Límit de caràcters de %{max} superat
     pin_errors:
-      direct: Les publicacions que només són visibles per als usuaris mencionats no poden ser fixades
-      limit: Ja has fixat el màxim nombre de publicacions
+      direct: Els tuts que només són visibles per als usuaris mencionats no poden ser fixats
+      limit: Ja has fixat el màxim nombre de tuts
       ownership: No es pot fixar el tut d'algú altre
       reblog: No es pot fixar un impuls
     poll:
@@ -1512,26 +1512,26 @@ ca:
       unlisted: No llistat
       unlisted_long: Tothom ho pot veure, però no es mostra en les línies de temps públiques
   statuses_cleanup:
-    enabled: Esborra automàticament publicacions antigues
-    enabled_hint: Suprimeix automàticament les teves publicacions quan arribin a un llindar d’edat especificat, tret que coincideixin amb una de les excepcions següents
+    enabled: Esborra automàticament tuts antics
+    enabled_hint: Suprimeix automàticament els teus tuts quan arribin a un llindar d’edat especificat, tret que coincideixin amb una de les excepcions següents
     exceptions: Excepcions
-    explanation: Com que suprimir publicacions és una operació cara, es fa lentament amb el pas del temps i quan el servidor no està ocupat. Per aquest motiu, és possible que les teves publicacions se suprimeixin un temps després d’assolir el llindar d’edat.
+    explanation: Com que suprimir tuts és una operació cara, es fa lentament amb el pas del temps i quan el servidor no està ocupat. Per aquest motiu, és possible que els teus tuts se suprimeixin un temps després d’assolir el llindar d’edat.
     ignore_favs: Ignora favorits
     ignore_reblogs: Ignora impulsos
     interaction_exceptions: Excepcions basades en interaccions
-    interaction_exceptions_explanation: Has de tenir en compte que no es garanteix que es suprimeixen les publicacions si passen per sota del llindar de favorit o impuls després d'haver-lo superat.
+    interaction_exceptions_explanation: Has de tenir en compte que no es garanteix que es suprimeixen els tuts si passen per sota del llindar de favorit o impuls després d'haver-lo superat.
     keep_direct: Mantenir missatges directes
     keep_direct_hint: No esborra cap dels teus missatges directes
-    keep_media: Mantenir les publicacions amb contingut gràfic
-    keep_media_hint: No esborra cap de les teves publicacions que tinguin adjunts multimèdia
-    keep_pinned: Mantenir les publicacions fixades
-    keep_pinned_hint: No esborra cap de les teves publicacions fixades
+    keep_media: Mantenir els tuts amb contingut gràfic
+    keep_media_hint: No esborra cap dels teus tuts que tinguin adjunts multimèdia
+    keep_pinned: Mantenir els tuts fixats
+    keep_pinned_hint: No esborra cap dels teus tuts fixats
     keep_polls: Mantenir enquestes
     keep_polls_hint: No esborra cap de les teves enquestes
-    keep_self_bookmark: Mantenir les publicacions que has desat a les adreces d'interès
-    keep_self_bookmark_hint: No esborra les teves pròpies publicacions si les has desat en les adreces d'interès
-    keep_self_fav: Mantenir les publicacions que has afavorit
-    keep_self_fav_hint: No esborra les teves pròpies publicacions si les has afavorit
+    keep_self_bookmark: Mantenir els tuts que has desat a les adreces d'interès
+    keep_self_bookmark_hint: No esborra els teus propis tuts si els has desat en les adreces d'interès
+    keep_self_fav: Mantenir els tuts que has afavorit
+    keep_self_fav_hint: No esborra els teus propis tuts si les has afavorit
     min_age:
       '1209600': 2 setmanes
       '15778476': 6 mesos
@@ -1542,8 +1542,8 @@ ca:
       '63113904': 2 anys
       '7889238': 3 mesos
     min_age_label: Antiguitat
-    min_favs: Mantenir les publicacions afavorides més de
-    min_favs_hint: No suprimeix cap de les teves publicacions que hagin rebut més d'aquesta quantitat de favorits. Deixa-ho en blanc per suprimir publicacions independentment del nombre de favorits que tinguin
+    min_favs: Mantenir els tuts afavorits més de
+    min_favs_hint: No suprimeix cap dels teus tuts que hagin rebut més d'aquesta quantitat de favorits. Deixa-ho en blanc per a suprimir tuts independentment del nombre de favorits que tinguin
     min_reblogs: Mantenir les publicacions impulsades més de
     min_reblogs_hint: No suprimeix cap de les teves publicacions que s'hagin impulsat més que aquest nombre de vegades. Deixa-ho en blanc per a suprimir les publicacions independentment del nombre d'impulsos que tinguin.
   stream_entries:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 246a8a9fb..b6b2638fa 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -264,7 +264,7 @@ de:
         enable_user_html: "%{name} hat den Zugang für %{target} aktiviert"
         memorialize_account_html: "%{name} hat das Konto von %{target} in eine Gedenkseite umgewandelt"
         promote_user_html: "%{name} hat %{target} befördert"
-        reject_appeal_html: "%{name} hat die Moderationsbeschlüsse von %{target} abgelehnt"
+        reject_appeal_html: "%{name} hat den Moderations-Beschlussantrag von %{target} abgelehnt"
         reject_user_html: "%{name} hat die Registrierung von %{target} abgelehnt"
         remove_avatar_user_html: "%{name} hat das Profilbild von %{target} entfernt"
         reopen_report_html: "%{name} hat die Meldung %{target} wieder geöffnet"
@@ -366,7 +366,7 @@ de:
       title: Übersicht
       top_languages: Häufigste Sprachen
       top_servers: Aktivste Server
-      website: Webseite
+      website: Website
     disputes:
       appeals:
         empty: Keine Einsprüche gefunden.
@@ -376,7 +376,7 @@ de:
       created_msg: Domain wurde erfolgreich zur Whitelist hinzugefügt
       destroyed_msg: Domain wurde von der Whitelist entfernt
       export: Exportieren
-      import: Importieren
+      import: Import
       undo: Von der Whitelist entfernen
     domain_blocks:
       add_new: Neue Domain-Sperre hinzufügen
@@ -820,7 +820,7 @@ de:
         not_discoverable: Autor*in hat sich dafür entschieden, nicht entdeckt zu werden
         shared_by:
           one: Einmal geteilt oder favorisiert
-          other: "%{friendly_count}-mal geteilt oder favorisiert"
+          other: "%{friendly_count} mal geteilt oder favorisiert"
         title: Angesagte Beiträge
       tags:
         current_score: Aktuelle Punktzahl %{score}
diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml
index bdc5a076a..d3d5e9b70 100644
--- a/config/locales/devise.bg.yml
+++ b/config/locales/devise.bg.yml
@@ -2,7 +2,7 @@
 bg:
   devise:
     confirmations:
-      confirmed: Вашият имейл адрес беше успешно потвърден.
+      confirmed: Успешно потвърден е адресът на имейла ви.
       send_instructions: Ще получите имейл с указания как да потвърдите своя имейл адреса след няколко минути. Моля, проверете спам папката си, ако не сте получили такъв имейл.
       send_paranoid_instructions: Ако вашият имейл адрес съществува в нашата база данни, ще получите имейл с указания как да потвърдите имейл адреса си след няколко минути. Проверете спам папката си, ако не сте получили такъв имейл.
     failure:
@@ -13,18 +13,18 @@ bg:
       locked: Вашият акаунт е заключен.
       not_found_in_database: Невалиден %{authentication_keys} или парола.
       pending: Вашият акаунт все още е в процес на проверка.
-      timeout: Сесията ви изтече. Влезте пак, за да продължите.
+      timeout: Заседанието ви изтече. Влезте пак, за да продължите.
       unauthenticated: Преди да продължите, трябва да влезете или да се регистрирате.
       unconfirmed: Преди да продължите, трябва да потвърдите имейл адреса си.
     mailer:
       confirmation_instructions:
-        action: Потвърдете своя имейл адрес
+        action: Потвърдете адреса на имейла
         action_with_app: Потвърдете и се върнете към %{app}
         explanation: Създали сте акаунт на %{host} с този имейл адрес. Само на едно щракване разстояние сте от активирането му. Ако това не сте били вие, моля, игнорирайте този имейл.
         explanation_when_pending: Кандидатствахте за покана до %{host} с този имейл адрес. След като потвърдите своя имейл адрес, ние ще разгледаме вашето заявление. Можете да влезете, за да промените данните си или да изтриете акаунта си, но нямате достъп до повечето функции, докато акаунтът ви не бъде одобрен. Ако вашето заявление бъде отхвърлено, вашите данни ще бъдат премахнати, така че няма да се изискват допълнителни действия от вас. Ако това не сте били вие, моля, игнорирайте този имейл.
         extra_html: Проверете <a href="%{terms_path}">правилата на сървъра</a> и <a href="%{policy_path}">условията ни за обслужване</a>.
         subject: 'Mastodon: Указания за потвърждаване за %{instance}'
-        title: Потвърдете имейл адреса
+        title: Потвърдете адреса на имейла
       email_changed:
         explanation: 'Имейл адресът на вашия акаунт се променя на:'
         extra: Ако не сте сменили имейла си, вероятно някой е получил достъп до вашия акаунт. Моля, сменете паролата си незабавно или се свържете с администратора на сървъра, ако сте блокирани от акаунта си.
@@ -51,12 +51,12 @@ bg:
         subject: 'Mastodon: Двуфакторното удостоверяване е деактивирано'
         title: Двуфакторното изключено
       two_factor_enabled:
-        explanation: За вашия акаунт е активирано двуфакторно удостоверяване. За влизане ще е необходим ключ, генериран от сдвоеното приложение за TOTP.
-        subject: 'Mastodon: Двуфакторното удостоверяване е активирано'
+        explanation: За акаунта ви е включено двуфакторно удостоверяване. Отсега нататък ще ви трябва и временен код от сдвоеното приложение за удостоверяване TOTP, за да влезете.
+        subject: 'Mastodon: Включено двуфакторно удостоверяване'
         title: 2FA активирано
       two_factor_recovery_codes_changed:
         explanation: Предишните кодове за възстановяване са анулирани и се пораждат нови.
-        subject: 'Mastodon: Генерирани отново са двуфакторни кодове за възстановяване'
+        subject: 'Mastodon: Породени пак са двуфакторни кодове за възстановяване'
         title: Кодове за 2 факт. удост. за възстановяване са променени
       unlock_instructions:
         subject: 'Mastodon: указания за отключване'
@@ -66,35 +66,35 @@ bg:
           subject: 'Mastodon: Нов ключ за сигурност'
           title: Добавен е нов ключ за сигурност
         deleted:
-          explanation: Следният ключ за сигурност е изтрит от вашия акаунт
+          explanation: Следният ключ за сигурност е изтрит от акаунта ви
           subject: 'Mastodon: Ключът за сигурност е изтрит'
           title: Един от ключовете ви за сигурност е изтрит
       webauthn_disabled:
         explanation: Удостоверяването с ключове за сигурност е изключено за акаунта ви. Влизането вече е възможно, използвайки само ключа, породен от сдвоеното приложение TOTP.
-        subject: 'Mastodon: Удостоверяването с ключове за сигурност е деактивирано'
+        subject: 'Mastodon: Изключено удостоверяване с ключове за сигурност'
         title: Ключовете за сигурност са деактивирани
       webauthn_enabled:
         explanation: Удостоверяването с ключ за сигурност е активирано за вашия акаунт. Вашият ключ за сигурност вече може да се използва за вход.
         subject: 'Mastodon: Активирано удостоверяване с ключ за сигурност'
         title: Ключовете за сигурност са активирани
     omniauth_callbacks:
-      failure: Не успяхме да те упълномощим чрез %{kind}, защото "%{reason}".
+      failure: Не успяхме да ви упълномощим от %{kind}, защото "%{reason}".
       success: Успешно упълномощаване от акаунт на %{kind}.
     passwords:
       no_token: Не можете да осъществите достъп до тази страница, ако не сте я отворили чрез линк от получен имейл за възстановяване на паролата. Ако сте отворили линка за възстановяване на паролата от имейл, моля, уверете се, че сте използвали целия предоставен URL адрес.
-      send_instructions: Ако вашият имейл адрес съществува в нашата база данни, ще получите линк за възстановяване на парола на същия адрес до няколко минути. Моля, проверете спам папката си, ако не сте получили този имейл.
-      send_paranoid_instructions: Ако вашият имейл адрес съществува в нашата база данни, ще получите линк за възстановяване на парола на същия адрес до няколко минути. Моля, проверете спам папката си, ако не сте получили този имейл.
-      updated: Паролата ви беше променена успешно. Влязохте в профила си.
+      send_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на е-пощата си до няколко минути. Проверете си папката за спам, ако не сте получили това е-писмо.
+      send_paranoid_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на е-пощата си до няколко минути. Проверете си папката за спам, ако не сте получили това е-писмо.
+      updated: Паролата ви беше променена успешно. Сега сте влезли.
       updated_not_active: Паролата ви беше променена успешно.
     registrations:
       destroyed: Довиждане! Вашият акаунт беше успешно изтрит. Надяваме се скоро да ви видим пак.
       signed_up: Добре дошли! Успешно се регистрирахте.
-      signed_up_but_inactive: Регистрирахте се успешно. Въпреки това, не можете да влезете, тъй като акаунтът ви все още не е активиран.
+      signed_up_but_inactive: Регистрирахте се успешно. Въпреки това, не може да влезете, тъй като акаунтът ви още не е задействан.
       signed_up_but_locked: Регистрирахте се успешно. Въпреки това, не можете да влезете, тъй като акаунтът ви е заключен.
-      signed_up_but_pending: На вашия имейл адрес е изпратено съобщение с връзка за потвърждение. След като щракнете върху линка, ние ще прегледаме вашето заявление. Ще бъдете уведомени, ако то е одобрено.
+      signed_up_but_pending: Изпратено е съобщение до адреса на имейла ви с връзка за потвърждение. След като щракнете върху линка, ние ще прегледаме заявлението ви. Ще бъдете уведомени при одобрение.
       signed_up_but_unconfirmed: Съобщение с линк за потвърждение беше изпратено до вашия имейл адрес. Последвайте линка, за да задействате акаунта си. Проверете спам папката си, ако не сте получили такъв имейл.
       update_needs_confirmation: Успешно обновихте акаунта си, но трябва да потвърдим вашия нов имейл адрес. Проверете електронната си поща и отворете отворете линка за потвърждение на новия си имейл адрес. Проверете спам папката си, ако не сте получили имейл за потвърждение.
-      updated: Вашият акаунт беше успешно обновен.
+      updated: Акаунтът ви е успешно осъвременен.
     sessions:
       already_signed_out: Успешно излизане от профила.
       signed_in: Успешно влизане.
@@ -105,8 +105,8 @@ bg:
       unlocked: Акаунтът ви е успешно отключен. Влезте, за да продължите.
   errors:
     messages:
-      already_confirmed: е вече потвърден, моля опитайте да влезете в профила си с него
-      confirmation_period_expired: трябва да се потвърди в рамките на %{period}, моля направи нова заявка за потвърждение
+      already_confirmed: е вече потвърден, опитайте се да влезете
+      confirmation_period_expired: трябва да се потвърди в рамките на %{period}, направете нова заявка за потвърждение
       expired: е изтекъл, моля заяви нов
       not_found: не е намерен
       not_locked: не бе заключен
diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml
index d6eed695d..9fd54d142 100644
--- a/config/locales/devise.et.yml
+++ b/config/locales/devise.et.yml
@@ -2,31 +2,31 @@
 et:
   devise:
     confirmations:
-      confirmed: Teie e-postiaadress on edukalt kinnitatud.
-      send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui te ei saanud seda e-kirja.
-      send_paranoid_instructions: Kui teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui te ei saanud seda e-kirja.
+      confirmed: Sinu e-postiaadress on edukalt kinnitatud.
+      send_instructions: Saad paari minuti pärast juhistega e-kirja, kuidas oma e-posti aadress kinnitada. Palun kontrolli oma rämpsposti kausta, kui selline e-kiri ei saabunud.
+      send_paranoid_instructions: Kui sinu e-postiaadress on meie andmebaasis, saad paari minuti pärast juhistega e-kirja, kuidas oma e-posti aadress kinnitada. Palun kontrolli oma rämpsposti kausta, kui selline e-kiri ei saabunud.
     failure:
       already_authenticated: Oled juba sisse loginud.
-      inactive: Teie konto pole veel aktiveeritud.
+      inactive: Sinu konto pole veel aktiveeritud.
       invalid: Valed %{authentication_keys} või salasõna.
-      last_attempt: Teil on veel üks katse kuni teie konto on lukustatud.
-      locked: Teie konto on lukustatud.
+      last_attempt: Sul on veel üks katse, enne kui konto lukustatakse.
+      locked: Konto on lukustatud.
       not_found_in_database: Valed %{authentication_keys} või salasõna.
-      pending: Teie konto on siiani läbivaatlusel.
-      timeout: Teie sessioon on aegunud. Jätkamiseks palun sisenege uuesti.
-      unauthenticated: Te peate sisenema või looma konto enne jätkamist.
-      unconfirmed: Te peate kinnitama oma e-postiaadressi enne jätkamist.
+      pending: Sinu konto on siiani läbivaatamisel.
+      timeout: Sinu sessioon on aegunud. Jätkamiseks palun sisene uuesti.
+      unauthenticated: Pead sisenema või looma konto enne kui jätkad.
+      unconfirmed: Pead kinnitama oma e-postiaadressi enne kui jätkad.
     mailer:
       confirmation_instructions:
-        action: Kinnitage e-postiaadress
+        action: Kinnita e-postiaadress
         action_with_app: Kinnita ja naase %{app}
-        explanation: Oled loonud %{host} konto selle e-postiaadressiga. Oled ühe kliki kaugusel selle aktiveerimisest. Kui see polnud sina, palun eira seda kirja.
-        explanation_when_pending: "Selle e-postiaadressiga on esitatud taotlus saada %{host} kasutajaks. E-postiaadress vajab kinnitamist. Pärast seda vaatame me taotluse üle. Võib siseneda, et oma andmeid muuta või konto kustutada, aga enamustele tegevustele ei pääse ligi enne, kui konto on meie moderaatorite poolt kinnitatud. Kui konto on kinnitatud, saabub selle kohta eraldi e-kiri.\nKui taotlus lükatakse aga tagasi, kustutatakse ka andmed ja mingit järeltegevust pole vaja. \nKui see polnud Teie, siis palume seda kirja eirata."
+        explanation: Oled loonud %{host} konto selle e-postiaadressiga. Oled konto aktiveerimisest ühe kliki kaugusel. Kui see polnud sina, palun eira seda kirja.
+        explanation_when_pending: "Selle e-postiaadressiga on esitatud taotlus saada %{host} kasutajaks. E-postiaadress vajab kinnitamist. Pärast seda vaatame me taotluse üle. Saad siseneda, et oma andmeid muuta või konto kustutada, aga enamustele tegevustele ei pääse enne ligi, kui konto on meie moderaatorite poolt kinnitatud. Kui konto on kinnitatud, saabub selle kohta eraldi e-kiri.\nKui taotlus lükatakse aga tagasi, kustutatakse ka andmed ja mingit järeltegevust pole vaja. \nKui see polnud sina, siis palume seda kirja eirata."
         extra_html: Palun tutvu <a href="%{terms_path}">meie serveri reeglitega</a> ning <a href="%{policy_path}">meie kasutustingimustega</a>.
         subject: 'Mastodon: %{instance} kinnitamisjuhised'
         title: Kinnita e-postiaadress
       email_changed:
-        explanation: 'Teie konto e-postiaadress muudetakse:'
+        explanation: 'Sinu konto e-postiaadress muudetakse:'
         extra: Kui sa ei muutnud oma e-posti, on tõenäoline, et kellelgi on ligipääs su kontole. Palun muuda koheselt oma salasõna. Kui oled aga oma kontost välja lukustatud, võta ühendust oma serveri administraatoriga.
         subject: 'Mastodon: e-post muudetud'
         title: Uus e-postiaadress
@@ -37,8 +37,8 @@ et:
         title: Salasõna muudetud
       reconfirmation_instructions:
         explanation: Kinnita uus aadress, et oma e-posti aadress muuta.
-        extra: Kui see muudatus pole teie poolt alustatud, palun eirake seda kirja. E-postiaadress sellele Mastodoni kontole ei muutu, kuni te vajutate üleval asuvale lingile.
-        subject: 'Mastodon: kinnitake e-postiaadress %{instance} jaoks'
+        extra: Kui see muudatus pole sinu poolt algatatud, palun eira seda kirja. Selle Mastodoni konto e-postiaadress ei muutu enne, kui vajutad üleval olevale lingile.
+        subject: 'Mastodon: kinnita e-postiaadress %{instance} jaoks'
         title: Kinnita e-postiaadress
       reset_password_instructions:
         action: Salasõna muutmine
@@ -47,11 +47,11 @@ et:
         subject: 'Mastodon: salasõna lähtestamisjuhendid'
         title: Salasõna lähtestamine
       two_factor_disabled:
-        explanation: Kontol on kahe-etapine autentimine välja lülitatud. Sisenemine on võimalik ainult kasutades e-postiaadressi ja salasõna.
+        explanation: Kontol on kaheastmeline autentimine välja lülitatud. Sisenemine on võimalik ainult kasutades e-postiaadressi ja salasõna.
         subject: 'Mastodon: Kahe-etapine autentimine välja lülitatud'
         title: 2FA keelatud
       two_factor_enabled:
-        explanation: Kontol on sisse lülitatud kahe-etapine autentimine. Sisenemiseks on vajalik ühekordne aeguv võti TOTP-rakenduse poolt.
+        explanation: Kontol on sisse lülitatud kaheastmeline autentimine. Sisenemiseks on vajalik ühekordne aeguv võti TOTP-rakenduse poolt.
         subject: 'Mastodon: Kahe-etapine autentimine sisse lülitatud'
         title: 2FA lubatud
       two_factor_recovery_codes_changed:
@@ -62,19 +62,19 @@ et:
         subject: 'Mastodon: Lahti lukustamis juhendid'
       webauthn_credential:
         added:
-          explanation: Järgnev turvavõti on lisatud teie kontole
+          explanation: Kontole on lisatud järgnev turvavõti
           subject: 'Mastodon: uus turvavõti'
           title: Uus turvavõti on lisatud
         deleted:
-          explanation: Järgnev turvavõti on teie kontolt kustutatud
+          explanation: Järgnev turvavõti on kontolt kustutatud
           subject: 'Mastodon: turvavõti kustutatud'
-          title: Üks teie turvavõtmetest on kustutatud
+          title: Üks sinu turvavõtmetest on kustutatud
       webauthn_disabled:
-        explanation: Autentimine turvavõtmetega on teie kontol välja lülitatud. Sisse logimine on nüüd võimalik ainult kasutades TOTP rakenduse poolt tekitatud võtmega.
+        explanation: Autentimine turvavõtmetega on kontol välja lülitatud. Sisse logimine on nüüd võimalik ainult kasutades seotud TOTP rakenduse poolt genereeritud võtit.
         subject: 'Mastodon: autentimine turvavõtmega on välja lülitatud'
         title: Turvavõtmed on välja lülitatud
       webauthn_enabled:
-        explanation: Turvavõtme autentimine on teie kontol nüüd sisse lülitatud. Teie turvavõtit saab nüüd kasutada sisse logimiseks.
+        explanation: Turvavõtmega autentimine on nüüd kontol sisse lülitatud. Nüüd saab kasutada sisse logimiseks sinu turvavõtit.
         subject: 'Mastodon: turvavõtme autentimine sisse lülitatud'
         title: Turvavõtmed on sisse lülitatud
     omniauth_callbacks:
@@ -82,32 +82,32 @@ et:
       success: Tuvastamine %{kind} konto järgi õnnestus.
     passwords:
       no_token: Sellele leheküljele ei pääse tulemata salasõna lähtestamise e-kirjast. Kui tuled salasõna lähtestamise e-kirjast, palun veendu, et kasutasid tervet saadetud URLi.
-      send_instructions: Kui teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui te ei saanud seda e-kirja.
-      send_paranoid_instructions: Kui teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui te ei saanud seda e-kirja.
+      send_instructions: Kui sinu e-postiaadress on meie andmebaasis, saad paari minuti pärast juhistega e-kirja, kuidas oma salasõna taastada. Palun kontrolli rämpsposti kausta, kui selline e-kiri ei saabunud.
+      send_paranoid_instructions: Kui sinu e-postiaadress on meie andmebaasis, saad paari minuti pärast juhistega e-kirja, kuidas oma salasõna taastada. Palun kontrolli rämpsposti kausta, kui selline e-kiri ei saabunud.
       updated: Salasõna muutmine õnnestus. Oled nüüd sisse logitud.
-      updated_not_active: Teie salasõna muutmine õnnestus.
+      updated_not_active: Sinu salasõna muutmine õnnestus.
     registrations:
-      destroyed: Nägemist! Teie konto sulgemine õnnestus. Me loodame teid varsti taas näha.
-      signed_up: Tere tulemast! Teie konto loomine õnnestus.
-      signed_up_but_inactive: Teie konto loodi edukalt, kuid me ei saanud teid sisse logida, kuna teie konto pole veel aktiveeritud.
-      signed_up_but_locked: Teie konto loodi edukalt, kuid me ei saanud teid sisse logida, kuna teie konto on lukustatud.
-      signed_up_but_pending: Kiri kinnituslingiga saadeti teie e-postile. Pärast seda, kui te vajutate lingile, vaatame me teie taotluse üle. Teid teavitatakse, kui see on vastu võetud.
-      signed_up_but_unconfirmed: Kiri kinnituslingiga saadeti teie e-postile. Palun järgige linki, et aktiveerida oma konto. Palun kontrollige oma rämpsposti, kui te ei saanud seda e-kirja.
-      update_needs_confirmation: Konto uuendamine õnnestus, kuid e-postiaadress tuleb veel kinnitada. Palun kontrolli oma e-posti ning järgi kirjas olevat linki, et e-postiaadress kinnitada. Palun kontrolli rämpsposti, kui selline e-kiri ei saabunud.
+      destroyed: Nägemist! sinu konto sulgemine õnnestus. Me loodame sind varsti taas näha.
+      signed_up: Tere tulemast! Sinu konto loomine õnnestus.
+      signed_up_but_inactive: Sinu konto loodi edukalt, kuid me ei saanud sind sisse logida, kuna konto pole veel aktiveeritud.
+      signed_up_but_locked: Sinu konto loodi edukalt, kuid me ei saanud sind sisse logida, kuna konto on lukustatud.
+      signed_up_but_pending: Kiri kinnituslingiga saadeti sinu e-postile. Pärast seda, kui oled vajutanud kinnituslingile, vaatame me taotluse üle. Saad teavituse, kui taotlus on vastu võetud.
+      signed_up_but_unconfirmed: Kiri kinnituslingiga saadeti sinu e-postile. Palun järgi linki, et oma konto aktiveerida. Palun kontrolli rämpspostikausta, kui selline kiri ei saabunud.
+      update_needs_confirmation: Konto uuendamine õnnestus, kuid e-postiaadress tuleb veel kinnitada. Palun kontrolli oma e-posti ning järgi kirjas olevat kinnituslinki, et e-postiaadress kinnitada. Palun kontrolli rämpspostikausta, kui selline kiri ei saabunud.
       updated: Konto uuendamine õnnestus.
     sessions:
       already_signed_out: Väljumine õnnestus.
       signed_in: Sisenemine õnnestus.
       signed_out: Väljumine õnnestus.
     unlocks:
-      send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma konto lukust lahti teha. Palun kontrollige oma rämpsposti kausta juhul, kui te ei saanud seda e-kirja.
+      send_instructions: Saad paari minuti pärast juhistega e-kirja, kuidas oma konto lukust lahti teha. Palun kontrolli oma rämpsposti kausta, kui selline kiri ei saabunud.
       send_paranoid_instructions: Kui konto on olemas, saabub paari minuti pärast e-kiri juhistega, kuidas konto lukust lahti teha. Palun kontrolli rämpsposti kausta, kui selline e-kiri ei saabunud.
       unlocked: Sinu konto avamine õnnestus. Jätkamiseks palun logi sisse.
   errors:
     messages:
       already_confirmed: on juba kinnitatud, palun proovi sisse logida
-      confirmation_period_expired: peab olema kinnitatud ajavahemikus %{period}, palun taotlege uuesti
-      expired: on aegunud, palun taotlege uuesti
+      confirmation_period_expired: peab olema kinnitatud ajavahemikus %{period}, palun taotle uuesti
+      expired: on aegunud, palun taotle uuesti
       not_found: ei leitud
       not_locked: ei olnud lukustatud
       not_saved:
diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml
index ba19ea313..9a6aaf92f 100644
--- a/config/locales/doorkeeper.bg.yml
+++ b/config/locales/doorkeeper.bg.yml
@@ -84,7 +84,7 @@ bg:
         credential_flow_not_configured: Resource Owner Password Credentials предизвика грешка, заради това, че настройките за Doorkeeper.configure.resource_owner_from_credentials липсват.
         invalid_client: Удостоверяването на клиента предизвика грешка, поради непознат клиент, липсващо клиентско удостоверяване, или заради това, че методът на удостоверяване не се поддържа.
         invalid_grant: Предоставеното удостоверение за достъп е невалидно, изтекло, отхвърлено, не съвпада с пренасочващото URI, използвано в заявката за удостоверение, или е бил издадено от друг клиент.
-        invalid_redirect_uri: Включеният пренасочващ URI адрес е невалиден.
+        invalid_redirect_uri: Включеният пренасочващ Uri е невалиден.
         invalid_request:
           missing_param: 'Липсва задължителен параметър: %{value}.'
           request_not_authorized: Заявката трябва да бъде упълномощена. Необходимият параметър за разрешаване на заявка липсва или е невалиден.
@@ -111,7 +111,7 @@ bg:
           notice: Приложението е обновено.
       authorized_applications:
         destroy:
-          notice: Приложението е отказано.
+          notice: Анулирано приложение.
     grouped_scopes:
       access:
         read: Достъп само за четене
@@ -143,7 +143,7 @@ bg:
       admin:
         nav:
           applications: Приложения
-          oauth2_provider: OAuth2 доставчик
+          oauth2_provider: Доставчик OAuth2
       application:
         title: Нужно е упълномощаване по OAuth
     scopes:
@@ -184,7 +184,7 @@ bg:
       write:blocks: блокиране на акаунти и домейни
       write:bookmarks: отмятане на публикации
       write:conversations: заглушаване и изтриване на разговорите
-      write:favourites: харесани публикации
+      write:favourites: любими публикации
       write:filters: създаване на филтри
       write:follows: последване на хора
       write:lists: създаване на списъци
diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml
index 6ecfb0131..13f0dbef0 100644
--- a/config/locales/doorkeeper.ca.yml
+++ b/config/locales/doorkeeper.ca.yml
@@ -138,7 +138,7 @@ ca:
         push: Notificacions push
         reports: Informes
         search: Cerca
-        statuses: Publicacions
+        statuses: Tuts
     layouts:
       admin:
         nav:
@@ -178,13 +178,13 @@ ca:
       read:notifications: mira les teves notificacions
       read:reports: mira els teus informes
       read:search: cerca en nom teu
-      read:statuses: mira tots les publicacions
+      read:statuses: veure tots els tuts
       write: modifica totes les dades del teu compte
       write:accounts: modifica el teu perfil
       write:blocks: bloca comptes i dominis
-      write:bookmarks: marca publicacions
+      write:bookmarks: marca tuts
       write:conversations: silencia i esborra converses
-      write:favourites: afavoreix publicacions
+      write:favourites: afavoreix tuts
       write:filters: crea filtres
       write:follows: segueix gent
       write:lists: crea llistes
@@ -192,4 +192,4 @@ ca:
       write:mutes: silencia usuaris i converses
       write:notifications: esborra les teves notificacions
       write:reports: informa sobre altres persones
-      write:statuses: fes publicacions
+      write:statuses: publica tuts
diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml
index 2df0056c2..a28f91c0e 100644
--- a/config/locales/doorkeeper.en.yml
+++ b/config/locales/doorkeeper.en.yml
@@ -122,14 +122,14 @@ en:
         admin/accounts: Administration of accounts
         admin/all: All administrative functions
         admin/reports: Administration of reports
-        all: Everything
+        all: Full access to your Mastodon account
         blocks: Blocks
         bookmarks: Bookmarks
         conversations: Conversations
         crypto: End-to-end encryption
         favourites: Favourites
         filters: Filters
-        follow: Relationships
+        follow: Follows, Mutes and Blocks
         follows: Follows
         lists: Lists
         media: Media attachments
diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml
index 6e7ae458c..dbd760f05 100644
--- a/config/locales/doorkeeper.es.yml
+++ b/config/locales/doorkeeper.es.yml
@@ -149,19 +149,19 @@ es:
     scopes:
       admin:read: leer todos los datos en el servidor
       admin:read:accounts: leer información sensible de todas las cuentas
-      admin:read:canonical_email_blocks: leer información sensible de todos los bloques de correo canónico
+      admin:read:canonical_email_blocks: leer información sensible de todos los bloqueos de correo canónico
       admin:read:domain_allows: leer información sensible de todos los dominios permitidos
-      admin:read:domain_blocks: leer información sensible de todos los bloques de dominio
-      admin:read:email_domain_blocks: leer información sensible de todos los bloques de dominio de correo electrónico
-      admin:read:ip_blocks: leer información sensible de todos los bloques IP
+      admin:read:domain_blocks: leer información sensible de todos los bloqueos de dominio
+      admin:read:email_domain_blocks: leer información sensible de todos los bloqueos de dominio de correo electrónico
+      admin:read:ip_blocks: leer información sensible de todos los bloqueos de IP
       admin:read:reports: leer información sensible de todos los informes y cuentas reportadas
       admin:write: modificar todos los datos en el servidor
       admin:write:accounts: realizar acciones de moderación en cuentas
-      admin:write:canonical_email_blocks: realizar acciones de moderación en bloques de correo canónico
-      admin:write:domain_allows: realizar acciones de moderación en el dominio permitido
-      admin:write:domain_blocks: realizar acciones de moderación en bloques de dominio
-      admin:write:email_domain_blocks: realizar acciones de moderación en bloques de dominio de correo electrónico
-      admin:write:ip_blocks: realizar acciones de moderación en bloques IP
+      admin:write:canonical_email_blocks: ejecutar acciones de moderación en bloqueos canónicos de correo electrónico
+      admin:write:domain_allows: ejecutar acciones de moderación en los dominios permitidos
+      admin:write:domain_blocks: ejecutar acciones de moderación en bloqueos de dominio
+      admin:write:email_domain_blocks: ejecutar acciones de moderación en bloqueos de dominio de correo electrónico
+      admin:write:ip_blocks: ejecutar acciones de moderación en bloqueos de IP
       admin:write:reports: realizar acciones de moderación en informes
       crypto: usar cifrado de extremo a extremo
       follow: seguir, bloquear, desbloquear y dejar de seguir cuentas
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
index 654447e00..8749121e1 100644
--- a/config/locales/doorkeeper.et.yml
+++ b/config/locales/doorkeeper.et.yml
@@ -29,16 +29,16 @@ et:
       edit:
         title: Avalduse muutmine
       form:
-        error: Oih! Kontrollige oma vormi võimalikest vigadest
+        error: Oih! Kontrolli vormi, ehk on mõni viga sees
       help:
-        native_redirect_uri: Kasutage %{native_redirect_uri} kohalikeks testideks
+        native_redirect_uri: Kasuta %{native_redirect_uri} kohalikeks testideks
         redirect_uri: Kasuta ühte rida iga URI jaoks
         scopes: Eralda ulatused tühikutega. Jäta tühjaks, et kasutada vaikimisi ulatusi.
       index:
         application: Rakendus
         callback_url: Ümbersuunamise URL
         delete: Kustuta
-        empty: Teil pole rakendusi.
+        empty: Sul pole rakendusi.
         name: Nimi
         new: Uus rakendus
         scopes: Ulatused
@@ -60,7 +60,7 @@ et:
       error:
         title: Ilmnes viga
       new:
-        prompt_html: "%{client_name} soovib luba kontole juurdepääsuks. See on kolmanda osapoole rakendus. <strong>Kui pole usaldusväärne, siis ei tohiks seda lubada.</strong>"
+        prompt_html: "%{client_name} soovib luba kontole juurdepääsuks. See on kolmanda osapoole rakendus. <strong>Kui see pole usaldusväärne, siis ei tohiks seda lubada.</strong>"
         review_permissions: Lubade ülevaade
         title: Autoriseerimine vajalik
       show:
@@ -82,7 +82,7 @@ et:
       messages:
         access_denied: Ressursi omanik või autoriseerimisserver lükkas taotluse tagasi.
         credential_flow_not_configured: Resource Owner Password Credentials vool ebaõnnestus, kuna Doorkeeper.configure.resource_owner_from_credentials ei ole seadistatud.
-        invalid_client: Kliendi autentimine ebaõnnestus, kuna tundmatu klient, puudulik autentimine või mitte toetatud autentimismeetod.
+        invalid_client: Kliendi autentimine ebaõnnestus. Põhjus kas tundmatu klient, puudulik autentimine või toetamata autentimismeetod.
         invalid_grant: Antud autoriseerimisluba on vale, aegunud, tagasi võetud, ei kattu kasutatud ümbersuunamise URLid või oli antud teisele kliendile.
         invalid_redirect_uri: Antud ümbersuunamise URL ei ole õige.
         invalid_request:
@@ -131,7 +131,7 @@ et:
         filters: Filtrid
         follow: Seosed
         follows: Jälgimised
-        lists: Nimistud
+        lists: Nimekirjad
         media: Lisatud meedia
         mutes: Vaigistused
         notifications: Teavitused
@@ -154,7 +154,7 @@ et:
       admin:read:domain_blocks: loe kõigi domeenide blokeeringute tundlikku infot
       admin:read:email_domain_blocks: loe kõigi e-posti blokeeringute tundlikku infot
       admin:read:ip_blocks: loe kõigi IP-blokeeringute tundlikku infot
-      admin:read:reports: lugeda privaatset informatsiooni kõikide teavituste ja teavitatud kasutajate kohta
+      admin:read:reports: lugeda privaatset infot kõikide teavituste ja teavitatud kasutajate kohta
       admin:write: muuta kõiki andmeid serveril
       admin:write:accounts: teostada moderaatori tegevusi kontodel
       admin:write:canonical_email_blocks: modereeri kanoonilisi e-posti blokeeringuid
@@ -171,13 +171,13 @@ et:
       read:blocks: näha su blokeeringuid
       read:bookmarks: näha järjehoidjaid
       read:favourites: näha Teie lemmikuid
-      read:filters: näha Teie filtreid
-      read:follows: näha Teie jälgimisi
-      read:lists: näha Teie nimekirju
-      read:mutes: näha Teie vaigistusi
-      read:notifications: näha Teie teateid
-      read:reports: näha Teie teavitusi
-      read:search: otsida Teie nimel
+      read:filters: näha su filtreid
+      read:follows: näha su jälgimisi
+      read:lists: näha su nimekirju
+      read:mutes: näha su vaigistusi
+      read:notifications: näha teateid
+      read:reports: näha teavitusi
+      read:search: otsida sinu nimel
       read:statuses: näha kõiki postitusi
       write: muuta kogu konto andmeid
       write:accounts: muuta profiili
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 746fe032e..61aefe6bd 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -17,7 +17,7 @@ et:
     link_verified_on: Selle lingi autorsust kontrolliti %{date}
     nothing_here: Siin pole midagi!
     pin_errors:
-      following: Te peate juba olema selle kasutaja jälgija, keda te soovitate
+      following: Pead olema juba selle kasutaja jälgija, keda soovitad
     posts:
       one: Postitus
       other: Postitused
@@ -96,10 +96,10 @@ et:
         suspended: Kustutatud
         title: Modereerimine
       moderation_notes: Modereerimisteated
-      most_recent_activity: Kõige hiljutisem aktiivsus
-      most_recent_ip: Kõige hiljutisem IP
-      no_account_selected: Mitte ühtegi kontot muudeti sest midagi polnud valitud
-      no_limits_imposed: Mitte ühtegi limiiti kehtestatud
+      most_recent_activity: Viimatine aktiivsus
+      most_recent_ip: Viimatine IP
+      no_account_selected: Ühtegi kontot ei muudetud, sest midagi polnud valitud
+      no_limits_imposed: Pole kehtestatud ühtegi piirangut
       no_role_assigned: Ühtegi rolli pole määratud
       not_subscribed: Ei ole tellitud
       pending: Ootab ülevaatamist
@@ -171,7 +171,7 @@ et:
         approve_appeal: Rahulda vaidlustus
         approve_user: Kinnita kasutaja
         assigned_to_self_report: Määras Teavituse
-        change_email_user: Kasutaja muutis e-postiaadressit
+        change_email_user: Kasutaja muutis e-postiaadressi
         change_role_user: Muuda kasutaja rolli
         confirm_user: Kasutaja kinnitatud
         create_account_warning: Lisas hoiatuse
@@ -312,7 +312,7 @@ et:
       by_domain: Domeen
       copied_msg: Kohaliku koopia loomine emotikonist õnnestus
       copy: Kopeeri
-      copy_failed_msg: Kohaliku koopia loomine sellest emotikonist ebaõnnestus
+      copy_failed_msg: Sellest emotikonist kohaliku koopia loomine nurjus
       create_new_category: Loo uus kategooria
       created_msg: Emotikoni loomine õnnestus!
       delete: Kustuta
@@ -330,7 +330,7 @@ et:
       new:
         title: Lisa uus emotikon
       no_emoji_selected: Emotikone ei muudetud, kuna ühtegi polnud valitud
-      not_permitted: Teil puudub õigus selle tegevuse jaoks
+      not_permitted: Sul puudub selle tegevuse jaoks õigus
       overwrite: Kirjuta üle
       shortcode: Lühikood
       shortcode_hint: Vähemalt 2 tähemärki, ainult tähted, numbrid ja alakriipsud
@@ -385,7 +385,7 @@ et:
       domain: Domeen
       edit: Muuda domeeniblokeeringut
       existing_domain_block: Kasutajale %{name} on juba karmimad piirangud kehtestatud.
-      existing_domain_block_html: Te olete juba lisanud domeenile %{name} piiranguid, palun <a href="%{unblock_url}">eemaldage blokeering</a> enne jätkamist.
+      existing_domain_block_html: Oled juba lisanud domeenile %{name} piiranguid, palun eemalda enne jätkamist <a href="%{unblock_url}">eemalda blokeering</a>.
       export: Eksport
       import: Import
       new:
@@ -400,7 +400,7 @@ et:
       no_domain_block_selected: Ühtegi domeeni keeldu ei muudetud, kuna midagi polnud valitud
       not_permitted: Puudub õigus seda teha
       obfuscate: Domeeninime varjamine
-      obfuscate_hint: Varja osaliselt domeeni nimi nimekirjas, kui domeenipiirangute nimistu avaldamine on sisse lülitatud
+      obfuscate_hint: Varja osaliselt domeeni nimi nimekirjas, kui domeenipiirangute nimekirja avaldamine on sisse lülitatud
       private_comment: Privaatne kommentaar
       private_comment_hint: Kommenteeri selle domeeni limiteerimise kohta moderaatoritele.
       public_comment: Avalik kommentaar
@@ -445,7 +445,7 @@ et:
         title: Domeenikeeldude import
       no_file: Faili pole valitud
     follow_recommendations:
-      description_html: "<strong>Jälgimissoovitused aitavad uutel kasutajatel kiirelt leida huvipakkuvat sisu</strong>. Kui kasutaja pole teistega piisavalt läbi käinud, et kujuneks personaalsed soovitused, soovitatakse neid kontosid. Need arvutatakse ümber igapäevaselt populaarseimate postituste ja enim jälgitavate kontode seast antud keeles."
+      description_html: "<strong>Jälgimissoovitused aitavad uutel kasutajatel kiirelt leida huvipakkuvat sisu</strong>. Kui kasutaja pole teistega piisavalt läbi käinud, et saaks luua personaalseid soovitusi, soovitatakse neid kontosid. Need arvutatakse ümber igapäevaselt konkreetse keele populaarseimate postituste ja enim jälgitavate kontode seast."
       language: Keel
       status: Olek
       suppress: Eemalda jälgimissoovitus
@@ -545,21 +545,21 @@ et:
     relationships:
       title: "%{acct}-i suhted"
     relays:
-      add_new: Lisa uus relee
+      add_new: Lisa uus vahendaja
       delete: Kustuta
-      description_html: "<strong>Födereerumisrelee</strong> on vahendav server, mis kannab üle suures koguses avalikke postitusi nende serverite vahel, mis on sellega liitunud ja edastavad sellele oma postitusi. <strong>See aitab väikestel ja keskmistel serveritel avastada födiversumi sellist sisu</strong>, mis muidu eeldaks kohalikelt kasutajatelt nende serverite kasutajate jälgitavaks märkimist."
+      description_html: "<strong>Födereerumisvahendaja</strong> on vahendav server, mis kannab üle suures koguses avalikke postitusi nende serverite vahel, mis on sellega liitunud ja edastavad sellele oma postitusi. <strong>See aitab väikestel ja keskmistel serveritel avastada födiversumi sellist sisu</strong>, mis muidu eeldaks kohalikelt kasutajatelt nende serverite kasutajate jälgitavaks märkimist."
       disable: Keela
       disabled: Keelatud
       enable: Luba
-      enable_hint: Kui lubatud, siis server tellib kõik avalikud postitused sellelt releelt ning hakkab ka enda avalikke postitusi sellele saatma.
+      enable_hint: Kui lubatud, siis server tellib sellelt vahendajalt kõik avalikud postitused ning hakkab ka enda avalikke postitusi sellele saatma.
       enabled: Lubatud
-      inbox_url: Relee URL
-      pending: Ootab relee nõusolekut
+      inbox_url: Vahendaja URL
+      pending: Ootab vahendaja nõusolekut
       save_and_enable: Salvesta ja luba
-      setup: Sea üles releeühendus
-      signatures_not_enabled: Releed ei tööta korrektselt kuniks turvarežiim või lubatud nimekirja režiim on sisse lülitatud
+      setup: Sea üles vahendav ühendus
+      signatures_not_enabled: Vahendamine ei tööta korrektselt kuniks turvarežiim või lubatud nimekirja režiim on sisse lülitatud
       status: Olek
-      title: Releed
+      title: Vahendajad
     report_notes:
       created_msg: Teade edukalt koostatud!
       destroyed_msg: Teade edukalt kustutatud!
@@ -667,13 +667,13 @@ et:
         manage_rules: Reeglite haldamine
         manage_rules_description: Lubab kasutajatel muuta serveri reegleid
         manage_settings: Halda sätteid
-        manage_settings_description: Lubab kasutajatel muute lehekülje sätteid
+        manage_settings_description: Lubab kasutajatel muuta lehekülje sätteid
         manage_taxonomies: Halda taksonoomiaid
         manage_taxonomies_description: Luba kasutajatel populaarset sisu üle vaadata ning uuendada siltide sätteid
-        manage_user_access: Halda kasutaja ligipääsu
-        manage_user_access_description: Lubab kasutajail eemaldada teiste kahe-etapise autentimise nõude, muuta nende e-postiaadresse ja lähtestada salasõnu
+        manage_user_access: Halda kasutajate ligipääsu
+        manage_user_access_description: Lubab kasutajail keelata teiste kaheastmelise autentimise, muuta nende e-postiaadresse ja lähtestada salasõnu
         manage_users: Kasutajate haldamine
-        manage_users_description: Lubab kasutajail näha teiste kasutajate detailandmeid ja teha modereerimisotsuseid
+        manage_users_description: Lubab kasutajail näha teiste kasutajate üksikasju ja teha nende suhtes modereerimisotsuseid
         manage_webhooks: Halda webhook'e
         manage_webhooks_description: Lubab kasutajatel administratiivseteks sündmusteks webhook'e seadistada
         view_audit_log: Auditilogi vaatamine
@@ -686,7 +686,7 @@ et:
     rules:
       add_new: Lisa reegel
       delete: Kustuta
-      description_html: Kuigi enamik väidab, et on teenusetingimused läbi lugenud ja nõustub nendega, loevad inimesed tavaliselt need läbi alles pärast probleemi tekkimist. <strong>Hõlbustage oma serveri reeglite ühe pilguga nägemist, esitades need lihtsa täpploendina.</strong> Püüdke hoida üksikud reeglid lühikesed ja lihtsad, kuid ärge jagage neid ka paljudeks eraldi üksusteks.
+      description_html: Kuigi enamik väidab, et on teenusetingimused läbi lugenud ja nõustub nendega, loevad inimesed tavaliselt need läbi alles pärast probleemi tekkimist. <strong>Muuda oma serveri reeglite ühe pilguga haaramine hõlpsaks, esitades need lihtsa täpploendina.</strong> Püüa hoida reegli punktid lühikesed ja lihtsad, kuid ära jaga neid ka paljudeks eraldi üksusteks.
       edit: Reegli muutmine
       empty: Serveri reegleid pole veel defineeritud.
       title: Serveri reeglid
@@ -703,7 +703,7 @@ et:
         preamble: Serveri bränding eristab seda teistest serveritest võrgus. Seda teavet võidakse kuvada erinevates keskkondades, näiteks Mastodoni veebiliideses, rakendustes, viitade eelvaadetes teistel veebisaitidel, sõnumsiderakendustes jne. Sel põhjusel on kõige parem hoida see teave selge, lühike ja ülevaatlik.
         title: Märgistus
       content_retention:
-        preamble: Juhi kuidas kasutajate loodud sisu Mastodon'is talletatakse.
+        preamble: Määra, kuidas kasutajate loodud sisu Mastodonis talletatakse.
         title: Sisu talletamine
       default_noindex:
         desc_html: Mõjub kasutajatele, kes pole seda sätet ise muutnud
@@ -887,7 +887,7 @@ et:
       next_steps: Võid modereeringu tagasi pööramiseks vaidlustuse rahuldada, või ka mitte.
       subject: "%{username} on vaidlustanud %{instance} modereerimisotsuse"
     new_pending_account:
-      body: Uue konto üksikasjad on allpool. Te saate vastu võtta või tagasi lükata seda taotlust.
+      body: Uue konto üksikasjad on allpool. Saad taotluse vastu võtta või tagasi lükata.
       subject: Uus konto valmis ülevaatluseks serveril %{instance} (%{username})
     new_report:
       body: "%{reporter} teavitas kasutajast %{target}"
@@ -908,7 +908,7 @@ et:
     add_new: Pane kolimiseks valmis
     created_msg: Konto on valmis vastu võtma jälgijaid. Logi sisse oma vanale kontole ja käivita kolimine sealt.
     deleted_msg: Edukalt kustutasime teise nime. Kolimine sellelt kontolt praegusele on nüüdsest võimatu.
-    empty: Teil puuduvad teised nimed.
+    empty: Sul pole aliaseid.
     hint_html: Kui soovid konto siia üle kolida, pead esmalt siin määrama kolitava konto aadressi. Seejärel on konto valmis võtma vastu jälgijaid vanalt kontolt. Kolitava konto aadressi määramine on iseenesest <strong>kahjutu ja tagasipööratav</strong>. <strong>Jälgijate tegelik kolimine käivitatakse vanalt kontolt</strong>.
     remove: Loobu suunamise vastuvõtmisest
   appearance:
@@ -945,18 +945,18 @@ et:
     description:
       prefix_invited_by_user: "@%{name} kutsub Teid liituma selle Mastodoni serveriga!"
       prefix_sign_up: Loo Mastodoni konto juba täna!
-      suffix: Kasutajakontoga saate jälgida inimesi, postitada uudiseid ning teha kirjavahetust üks kõik millisest Mastodoni serverist kasutajatega ja muud!
+      suffix: Kasutajakontoga saad jälgida inimesi, postitada uudiseid ning pidada kirjavahetust ükskõik millise Mastodoni serveri kasutajatega ja muudki!
     didnt_get_confirmation: Ei saanud kinnituse juhendeid?
     dont_have_your_security_key: Pole turvavõtit?
     forgot_password: Salasõna ununenud?
     invalid_reset_password_token: Salasõna lähtestusvõti on vale või aegunud. Palun taotle uus.
-    link_to_otp: Kahe-etapine kood telefonist või taastekood
+    link_to_otp: Kaheastmeline kood telefonist või taastekood
     link_to_webauth: Turvavõtmete seadme kasutamine
     log_in_with: Sisene kasutades
     login: Logi sisse
     logout: Logi välja
     migrate_account: Teisele kontole ära kolimine
-    migrate_account_html: Kui soovid selle konto siit ära kolida, <a href="%{path}">saad seda teha siin</a>.
+    migrate_account_html: Kui soovid konto siit ära kolida, <a href="%{path}">saad seda teha siin</a>.
     or_log_in_with: Või logi sisse koos
     privacy_policy_agreement_html: Olen tutvunud <a href="%{privacy_policy_path}" target="_blank">isikuandmete kaitse põhimõtetega</a> ja nõustun nendega
     providers:
@@ -972,11 +972,11 @@ et:
     security: Turvalisus
     set_new_password: Uue salasõna määramine
     setup:
-      email_below_hint_html: Kui allolev e-posti aadress on vale, saate Te muuta seda siin ning Teile saadetakse uus kinnituskiri.
-      email_settings_hint_html: Kinnituskiri saadeti e-posti aadressile %{email}. Kui see aadress pole õige, saate Te muuta seda oma konto sätetest.
+      email_below_hint_html: Kui allolev e-posti aadress on vale, saad seda muuta siin. Seejärel saadetakse uus kinnituskiri.
+      email_settings_hint_html: Kinnituskiri saadeti e-posti aadressile %{email}. Kui see aadress pole õige, saad muuta seda oma konto sätetest.
       title: Seadistamine
     sign_in:
-      preamble_html: Logige sisse oma <strong>%{domain}</strong> volitustega. Kui konto asub teises serveris, ei saa te siin sisse logida.
+      preamble_html: Logi sisse oma <strong>%{domain}</strong> volitustega. Kui konto asub teises serveris, ei saa siin sisse logida.
       title: Logi sisse kohta %{domain}
     sign_up:
       preamble: Selle kontoga saad jälgida ja suhelda kõigi teiste kasutajatega erinevates Mastodoni serverites.
@@ -985,20 +985,20 @@ et:
       account_status: Konto olek
       confirming: Ootan e-posti kinnitust.
       functional: Konto on täies mahus kasutatav.
-      pending: Taotlus ootab ülevaatamist meie personali poolt. See võib võtta mõnda aega. Kui taotlus on vastu võetud, saadetakse sulle e-kiri.
+      pending: Taotlus ootab ülevaatamist meie personali poolt. See võib võtta mõne aja. Kui taotlus on vastu võetud, saadetakse sulle e-kiri.
       redirecting_to: See konto pole aktiivne, sest on suunatud aadressile %{acct}.
       view_strikes: Vaata enda eelnevaid juhtumeid
     too_fast: Vorm esitatud liiga kiirelt, proovi uuesti.
     use_security_key: Kasuta turvavõtit
   authorize_follow:
-    already_following: Te juba jälgite seda kontot
-    already_requested: Te juba saatsite jälgimistaotluse sellele kontole
+    already_following: Juba jälgid seda kontot
+    already_requested: Saatsid juba sellele kontole jälgimistaotluse
     error: Kahjuks ilmus viga kasutaja kaugserverist otsimisel
     follow: Jälgi
     follow_request: 'Oled saatnud jälgimistaotluse kasutajale:'
-    following: 'Õnnestus! Te nüüd jälgite kasutajat:'
+    following: 'Õnnestus! Jälgid nüüd kasutajat:'
     post_follow:
-      close: Või Te saate lihtsalt sulgeda seda akent.
+      close: Või sulge lihtsalt see aken.
       return: Näita kasutaja profiili
       web: Mine veebi
     title: Jälgi %{acct}
@@ -1030,18 +1030,18 @@ et:
       x_months: "%{count}k"
       x_seconds: "%{count}s"
   deletes:
-    challenge_not_passed: Informatsioon, mida sisestasite, oli vale
+    challenge_not_passed: Info, mille sisestasid, oli ebakorrektne
     confirm_password: Praegune salasõna isikusamasuse kinnitamiseks
-    confirm_username: Sisestage oma kasutajanimi protseduuri kinnitamiseks
+    confirm_username: Sisesta tegevuse kinnitamiseks oma kasutajanimi
     proceed: Kustuta konto
     success_msg: Konto kustutamine õnnestus
     warning:
       before: 'Veendu, et saad aru, mida toob plaanitav muudatus kaasa:'
       caches: Teiste serverite poolt talletatud sisu võib jääda kättesaadavaks
       data_removal: Sinu postitused ning kontoandmed kustutatakse jäädavalt
-      email_change_html: Te saate <a href="%{path}">muuta oma e-postiaadressi</a> kontot kustutamata
-      email_contact_html: Kui see ikkagi ei saabu, saatke abi saamiseks kiri aadressile <a href="mailto:%{email}">%{email}</a>
-      email_reconfirmation_html: Kui Te ei saanud kinnituskirja, saate selle <a href="%{path}">uuesti küsida</a>
+      email_change_html: Saad <a href="%{path}">muuta oma e-postiaadressi</a> kontot kustutamata
+      email_contact_html: Kui see ikkagi ei saabu, saada abi saamiseks kiri aadressile <a href="mailto:%{email}">%{email}</a>
+      email_reconfirmation_html: Kui kinnituskiri ei saabunud, saab selle <a href="%{path}">uuesti küsida</a>
       irreversible: Kustutatud kontot ei saa taastada ega uuesti aktiveerida
       more_details_html: Konto kustutamise kohta loe täpsemalt <a href="%{terms_path}">isikuandmete kaitse põhimõtetest</a>.
       username_available: Kasutajanimi muutub uuesti kasutatavaks
@@ -1059,7 +1059,7 @@ et:
       approve_appeal: Rahulda vaidlustus
       associated_report: Seotud raport
       created_at: Kuupäev
-      description_html: See on käesoleva konto hoiatuste ja tegevuste ajalugu, mis on %{instance} haldajate poolt ette võetud.
+      description_html: See on %{instance} haldajate poolt käesoleva konto suhtes tehtud hoiatuste ja tegevuste ajalugu.
       recipient: Adressaat
       reject_appeal: Lükka vaidlustus tagasi
       status: 'Postitus #%{id}'
@@ -1068,7 +1068,7 @@ et:
       title_actions:
         delete_statuses: Postituste eemaldamine
         disable: Konto lukustamine
-        mark_statuses_as_sensitive: Postituste tundlikena märkimine
+        mark_statuses_as_sensitive: Postituste märkimine tundlikena
         none: Hoiatus
         sensitive: Konto tundlikuna märkimine
         silence: Konto piirang
@@ -1085,7 +1085,7 @@ et:
     '406': See lehekülg ei ole soovitavas formaadis saadaval.
     '410': Soovitud lehekülge pole enam siin.
     '422':
-      content: Turvalisuse kontroll ebaõnnestus. Kas Te blokeerite küpsiseid?
+      content: Turvalisuse kontroll ebaõnnestus. Kas blokeerid küpsiseid?
       title: Turvalisuse kontroll ebaõnnestus
     '429': Aeglustatud
     '500':
@@ -1108,7 +1108,7 @@ et:
     bookmarks: Järjehoidjad
     csv: CSV
     domain_blocks: Domeeni blokeeringud
-    lists: Nimistud
+    lists: Nimekirjad
     mutes: Oled vaigistanud
     storage: Meedia hoidla
   featured_tags:
@@ -1130,12 +1130,12 @@ et:
       statuses_hint_html: See filter rakendub üksikute postituste valimisel olenemata sellest, kas need vastavad allolevatele märksõnadele. <a href="%{path}">Filtri postituste ülevaatamine või kustutamine</a>.
       title: Muuda filtrit
     errors:
-      deprecated_api_multiple_keywords: Neid parameetreid ei saa selles rakenduses muuta, kuna need kehtivad rohkem kui ühele filtri märksõnale. Kasutage uuemat rakendust või veebiliidest.
+      deprecated_api_multiple_keywords: Neid parameetreid ei saa selles rakenduses muuta, kuna need kehtivad rohkem kui ühele filtri märksõnale. Kasuta uuemat rakendust või veebiliidest.
       invalid_context: Puudulik või vale kontekst
     index:
       contexts: Filtrid %{contexts}
       delete: Kustuta
-      empty: Teil pole filtreid.
+      empty: Sul pole filtreid.
       expires_in: Aegub %{distance}
       expires_on: Aegub %{date}
       keywords:
@@ -1193,7 +1193,7 @@ et:
       merge_long: Hoia olemasolevad andmed ja lisa uusi
       overwrite: Kirjuta üle
       overwrite_long: Vaheta praegused andmed uute vastu
-    preface: Te saate importida mis tahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekiri inimestest, keda jälgid ja keda blokeerid.
+    preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid.
     success: Andmete üleslaadimine õnnestus ning neid töödeldakse
     types:
       blocking: Blokeeringute nimekiri
@@ -1229,11 +1229,11 @@ et:
       limit: Oled jõudnud loetelude lubatud maksimumarvuni
   login_activities:
     authentication_methods:
-      otp: kahe-etapise autentimise rakendus
+      otp: kaheastmelise autentimise rakendus
       password: salasõna
       sign_in_token: e-posti turvakood
       webauthn: turvavõtmed
-    description_html: Kui paistab tundmatauid tegevusi, tuleks vahetada salasõna ja aktiveerida kahe-etapine autentimine.
+    description_html: Kui paistab tundmatuid tegevusi, tuleks vahetada salasõna ja aktiveerida kaheastmeline autentimine.
     empty: Autentimisajalugu pole saadaval
     failed_sign_in_html: Nurjunud sisenemine meetodiga %{method} aadressilt %{ip} (%{browser})
     successful_sign_in_html: Edukas sisenemine meetodiga %{method} aadressilt %{ip} (%{browser})
@@ -1269,7 +1269,7 @@ et:
       backreference_required: Uus konto peab olema esmalt seadistatud võtma vastu siinse konto jälgijaid
       before: 'Veendu, et saad aru, mida toob plaanitav muudatus kaasa:'
       cooldown: Kolimisele järgneb ooteaeg, mille vältel kontot mõnda aega ümber kolida ei saa
-      disabled_account: Pärast kolimist ei ole konto kasutamine täielikult võimalik. Säilib andmete eksportimise ja konto taasaktiveerimise võimalus.
+      disabled_account: Pärast seda ei ole konto täielik kasutamine võimalik. Säilib andmete eksportimise ja konto taasaktiveerimise võimalus.
       followers: See käsklus kolib kõik siinse konto jälgijad üle sinu uue konto jälgijateks
       only_redirect_html: Teine võimalus on <a href="%{path}">märkida konto ümbersuunatuks</a>.
       other_data: Muid kontoandmeid, sh postitusi automaatselt üle ei kanta
@@ -1318,7 +1318,7 @@ et:
       subject: "%{name} muutis postitust"
   notifications:
     email_events: E-posti teadete sündmused
-    email_events_hint: 'Valige sündmused, millest soovite teavitusi:'
+    email_events_hint: 'Vali sündmused, mille kohta soovid teavitusi:'
     other_settings: Muud teadete sätted
   number:
     human:
@@ -1332,7 +1332,7 @@ et:
           trillion: trn
   otp_authentication:
     code_hint: Kinnituseks autentimisrakenduse loodud kood
-    description_html: Kui aktiveerda <strong>kahe-etapine autentimine</strong> autentimisrakenduse abil, on sisselogimiseks tarvis telefoni, mis loob sisenemiseks võtmeid.
+    description_html: Kui aktiveerida <strong>kaheastmeline autentimine</strong> autentimisrakenduse abil, on sisselogimiseks tarvis telefoni, mis loob sisenemiseks võtmeid.
     enable: Luba
     instructions_html: "<strong>See QR-kood on võimalik skannida telefoni Google Authenticatori või sarnasesse ühekordsete aeguvate salasõnade (TOTP) rakendusse</strong>. Nüüdsest genereerib see rakendus koode, mille peab sisenemisel sisestama."
     manual_instructions: 'Kui pole võimalik QR-koodi skaneerida, on salavõti võimalik sisestada tavatekstina:'
@@ -1383,7 +1383,7 @@ et:
     remove_selected_follows: Lõpeta valitud kasutajate jälgimine
     status: Konto olek
   remote_follow:
-    missing_resource: Ei suutnud konto jaoks leida vajalikku suunamise URLi
+    missing_resource: Ei ole võimalik leida konto jaoks vajalikku suunamise URLi
   reports:
     errors:
       invalid_rules: ei viita kehtivatele reeglitele
@@ -1459,7 +1459,7 @@ et:
     relationships: Jälgitud ja jälgijad
     statuses_cleanup: Automaatne kustutamine
     strikes: Modereerimisjuhtumid
-    two_factor_authentication: Kahe-etapine autentimine
+    two_factor_authentication: Kaheastmeline autentimine
     webauthn_authentication: Turvavõtmed
   statuses:
     attached:
@@ -1543,7 +1543,7 @@ et:
       '7889238': 3 kuud
     min_age_label: Ajalimiit
     min_favs: Säilita postitused, meeldimistega vähemalt
-    min_favs_hint: Ei kustuta ühtegi postitust, mis on saanud vähemalt nii palju lemmikuid. Postituste kustutamiseks, olenemata nende lemmikute arvust, jätke tühjaks
+    min_favs_hint: Ei kustuta ühtegi postitust, mis on saanud vähemalt nii palju lemmikuks märkimist. Postituste kustutamiseks olenemata nende lemmikuks märkimise arvust, jäta tühjaks
     min_reblogs: Säilita postitused jagatud vähemalt
     min_reblogs_hint: Ei kustuta postitusi, kui need on jagatud vähemalt nii mitu korda. Tühjaks jättes kustuvad postitused olenemata jagamistest
   stream_entries:
@@ -1567,13 +1567,13 @@ et:
   two_factor_authentication:
     add: Lisa
     disable: Keela 2FA
-    disabled_success: Kahe-etapine autentimine keelatud
+    disabled_success: Kaheastmeline autentimine keelatud
     edit: Muuda
-    enabled: Kahe-etapine autentimine on lubatud
-    enabled_success: Kahe-etapine autentimine lubatud
+    enabled: Kaheastmeline autentimine on lubatud
+    enabled_success: Kaheastmeline autentimine lubatud
     generate_recovery_codes: Loo taastekoodid
     lost_recovery_codes: Taastekoodide abil on võimalik telefoni kaotsimineku puhul kontole siseneda. Taastekoodide puudumisel saab need siin luua. Eelnevad taastekoodid kaotavad kehtivuse.
-    methods: Kahe-etapised meetodid
+    methods: Kaheastmelised meetodid
     otp: Autentimisrakendus
     recovery_codes: Taastekoodide varundamine
     recovery_codes_regenerated: Taastekoodid edukalt taasloodud
@@ -1590,14 +1590,14 @@ et:
       subject: "%{date} esitatud vaidlustus on tagasi lükatud"
       title: Vaidlustus tagasi lükatud
     backup_ready:
-      explanation: Te taotlesite varukoopia oma Mastodoni kontost. See on nüüd valmis allalaadimiseks!
+      explanation: Taotlesid oma Mastodoni konto varukoopiat. See on nüüd valmis allalaadimiseks!
       subject: Arhiiv on allalaadimiseks valmis
       title: Arhiivi väljavõte
     suspicious_sign_in:
       change_password: muuta oma salasõna
       details: 'Sisenemise üksikasjad:'
       explanation: Täheldasime kontole sisenemise uuelt IP-aadressilt.
-      further_actions_html: Kui see tuleb üllatusena, soovitame viivitamata %{action} ja lülitada konto turvamiseks sisse kahe-etapine autentimine.
+      further_actions_html: Kui see tuleb üllatusena, soovitame viivitamata %{action} ja lülitada konto turvamiseks sisse kaheastmeline autentimine.
       subject: Kontole sisenemine uuelt IP-aadressilt
       title: Uus sisenemine
     warning:
@@ -1645,9 +1645,9 @@ et:
       subject: Tere tulemast Mastodoni
       title: Tere tulemast, %{name}!
   users:
-    follow_limit_reached: Te ei saa jälgida rohkem kui %{limit} inimest
-    invalid_otp_token: Vale kahe-etapine võti
-    otp_lost_help_html: Kui Te kaotasite ligipääsu mõlemale, saate võtta ühendust %{email}-iga
+    follow_limit_reached: Ei saa jälgida rohkem kui %{limit} inimest
+    invalid_otp_token: Vale kaheastmeline võti
+    otp_lost_help_html: Kui kaotasid ligipääsu mõlemale, saad võtta ühendust %{email}-iga
     seamless_external_login: Välise teenuse kaudu sisse logides pole salasõna ja e-posti sätted saadaval.
     signed_in_as: 'Sisse logitud kasutajana:'
   verification:
@@ -1668,5 +1668,5 @@ et:
     nickname_hint: Uue turvavõtme hüüdnimi
     not_enabled: Veebiautentimine pole sisse lülitatud
     not_supported: See veebilehitseja ei toeta turvavõtmeid
-    otp_required: Turvavõtmete kasutamiseks tuleb eelnevalt sisse lülitada kahe-etapine autentimine.
+    otp_required: Turvavõtmete kasutamiseks tuleb eelnevalt sisse lülitada kaheastmeline autentimine.
     registered_on: Registreeritud %{date}
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index ca3db2784..00540a1d5 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -355,7 +355,7 @@ fi:
         other: "<strong>%{count}</strong> odottavat raportit"
       pending_tags_html:
         one: "<strong>%{count}</strong> odottava hashtagi"
-        other: "<strong>%{count}</strong> odottavat hashtagit"
+        other: "<strong>%{count}</strong> odottavaa aihetunnistetta"
       pending_users_html:
         one: "<strong>%{count}</strong> odottava käyttäjä"
         other: "<strong>%{count}</strong> odottavat käyttäjät"
@@ -669,7 +669,7 @@ fi:
         manage_settings: Hallita asetuksia
         manage_settings_description: Salli käyttäjien muuttaa sivuston asetuksia
         manage_taxonomies: Hallita luokittelua
-        manage_taxonomies_description: Sallii käyttäjien tarkistaa trendillisen sisällön ja päivittää hashtag-asetuksia
+        manage_taxonomies_description: Sallii käyttäjien tarkistaa nousussa olevan sisällön ja päivittää aihetunnisteiden asetuksia
         manage_user_access: Hallita käyttäjän oikeuksia
         manage_user_access_description: Sallii käyttäjien poistaa käytöstä muiden käyttäjien kaksivaiheisen todennuksen, muuttaa heidän sähköpostiosoitettaan ja nollata heidän salasanansa
         manage_users: Hallita käyttäjiä
@@ -782,7 +782,7 @@ fi:
         message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset
     tags:
       review: Tarkista tila
-      updated_msg: Hashtagin asetukset päivitetty onnistuneesti
+      updated_msg: Aihetunnisteen asetukset päivitetty onnistuneesti
     title: Ylläpito
     trends:
       allow: Salli
@@ -830,7 +830,7 @@ fi:
           tag_servers_dimension: Suosituimmat palvelimet
           tag_servers_measure: eri palvelimet
           tag_uses_measure: käyttökerrat
-        description_html: Nämä ovat hashtageja, jotka näkyvät tällä hetkellä monissa viesteissä, jotka palvelimesi näkee. Tämä voi auttaa käyttäjiäsi selvittämään, mistä ihmiset puhuvat eniten tällä hetkellä. Mitään hashtageja ei näytetä julkisesti ennen kuin hyväksyt ne.
+        description_html: Nämä ovat aihetunnisteita, jotka näkyvät tällä hetkellä monissa julkaisuissa, jotka palvelimesi näkee. Tämä voi auttaa käyttäjiäsi selvittämään, mistä ihmiset puhuvat eniten tällä hetkellä. Mitään aihetunnisteita ei näytetä julkisesti, ennen kuin hyväksyt ne.
         listable: Voidaan ehdottaa
         no_tag_selected: Yhtään tagia ei muutettu, koska yhtään ei valittu
         not_listable: Ei tulla ehdottamaan
@@ -900,9 +900,9 @@ fi:
       new_trending_statuses:
         title: Suositut viestit
       new_trending_tags:
-        no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä hashtageja.
-        requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään hashtagin, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.'
-        title: Suositut hashtagit
+        no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä aihetunnisteita.
+        requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.'
+        title: Suositut aihetunnisteet
       subject: Uusia trendejä tarkistettavaksi instanssissa %{instance}
   aliases:
     add_new: Luo alias
@@ -1114,8 +1114,8 @@ fi:
   featured_tags:
     add_new: Lisää uusi
     errors:
-      limit: Olet jo lisännyt enimmäismäärän hashtageja
-    hint_html: "<strong>Mitkä ovat näkyvillä olevat hashtagit?</strong> Ne ovat näkyvästi julkisessa profiilissasi ja niiden avulla ihmiset voivat selata julkisia viestejäsi nimenomaan näiden hashtagien alla. Ne ovat loistava luovan työn työkalu tai pitkäaikaisten projektien seurantaan."
+      limit: Olet jo lisännyt enimmäismäärän aihetunnisteita
+    hint_html: "<strong>Mitä ovat näkyvillä olevat hashtagit eli aihetunnisteet?</strong> Ne ovat näkyvissä julkisessa profiilissasi ja niiden avulla ihmiset voivat selata julkisia viestejäsi nimenomaan näiden aihetunnisteiden alla. Ne auttavat esimerkiksi luovan työn tai pitkäaikaisten projektien seurannassa."
   filters:
     contexts:
       account: Profiilit
@@ -1636,7 +1636,7 @@ fi:
       edit_profile_step: Voit muokata profiiliasi lataamalla profiilikuvan, vaihtamalla näyttönimeä ja paljon muuta. Voit halutessasi arvioida uudet seuraajat ennen kuin he saavat seurata sinua.
       explanation: Näillä vinkeillä pääset alkuun
       final_action: Ala julkaista
-      final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, monet voivat nähdä julkiset viestisi esimerkiksi paikallisella aikajanalla ja hashtageilla. Kannattaa myös esittäytyä! Käytä hashtagia #esittely.'
+      final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, monet voivat nähdä julkiset viestisi esimerkiksi paikallisella aikajanalla ja aihetunnisteilla. Kannattaa myös esittäytyä! Käytä aihetunnistetta #esittely.'
       full_handle: Koko käyttäjätunnuksesi
       full_handle_hint: Kerro tämä ystävillesi, niin he voivat lähettää sinulle viestejä tai löytää sinut toisen instanssin kautta.
       subject: Tervetuloa Mastodoniin
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 14dd73b85..c40fd9317 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1598,7 +1598,7 @@ fr:
       details: 'Voici les détails de la connexion :'
       explanation: Nous avons détecté une connexion à votre compte à partir d’une nouvelle adresse IP.
       further_actions_html: Si ce n’était pas vous, nous vous recommandons de %{action} immédiatement et d’activer l’authentification à deux facteurs afin de garder votre compte sécurisé.
-      subject: Votre compte a été accédé à partir d'une nouvelle adresse IP
+      subject: Une nouvelle adresse IP a accédé à votre compte
       title: Une nouvelle connexion
     warning:
       appeal: Faire appel
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index c09238535..767c9f246 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -66,6 +66,9 @@ ga:
         remote: Cian
       memorialize: Déan cuntas chuimhneacháin de
       memorialized: Cuntas chuimhneacháin
+      moderation:
+        all: Uile
+      perform_full_suspension: Fionraí
       previous_strikes: Cionta roimhe seo
       promote: Ardaigh
       protocol: Prótacal
@@ -81,9 +84,13 @@ ga:
       resubscribe: Athchláraigh
       role: Ról
       search: Cuardaigh
+      security_measures:
+        only_password: Pasfhocal amháin
+      silenced: Teoranta
       statuses: Postálacha
       subscribe: Cláraigh
       title: Cuntais
+      warn: Rabhadh a thabhairt
       web: Gréasán
     action_logs:
       action_types:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index c6c2ca018..c14becfbf 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -996,9 +996,9 @@ gl:
     error: Desgraciadamente, algo fallou ao buscar a conta remota
     follow: Seguir
     follow_request: 'Enviaches unha petición de seguimento a:'
-    following: 'Parabéns! Está a seguir a:'
+    following: 'Parabéns! Agora segues a:'
     post_follow:
-      close: Ou, pode pechar esta ventá.
+      close: Ou, podes pechar esta ventá.
       return: Mostrar o perfil da usuaria
       web: Ir á web
     title: Seguir %{acct}
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 5677159b6..3457d7801 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -493,6 +493,8 @@ oc:
     registration_closed: "%{instance} accepta pas de nòus membres"
     resend_confirmation: Tornar mandar las instruccions de confirmacion
     reset_password: Reïnicializar lo senhal
+    rules:
+      title: Unas règlas de basa.
     security: Seguretat
     set_new_password: Picar un nòu senhal
     setup:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index cb1fb5832..dbc2701f0 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -1,11 +1,11 @@
 ---
 pt-PT:
   about:
-    about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos da web e software livre e gratuito. É descentralizado como e-mail.
-    contact_missing: Não configurado
+    about_mastodon_html: 'A rede social do futuro: sem publicidade, e sem vigilância empresarial; desenho ético, e descentralizado! Tome posse dos seus dados com o Mastodon!'
+    contact_missing: Por definir
     contact_unavailable: n.d.
     hosted_on: Mastodon em %{domain}
-    title: Sobre
+    title: Acerca de
   accounts:
     follow: Seguir
     followers:
@@ -14,10 +14,10 @@ pt-PT:
     following: A seguir
     instance_actor_flash: Esta conta é um actor virtual usado para representar a própria instância e não um utilizador individual. É usada para motivos de federação e não deve ser suspenso.
     last_active: última vez activo
-    link_verified_on: A posse deste link foi verificada em %{date}
+    link_verified_on: A posse desta hiperligação foi verificada em %{date}
     nothing_here: Não há nada aqui!
     pin_errors:
-      following: Tu tens de estar a seguir a pessoa que pretendes apoiar
+      following: Tem de estar a seguir a pessoa que pretende apoiar
     posts:
       one: Publicação
       other: Publicações
@@ -27,18 +27,18 @@ pt-PT:
       action: Executar acção
       title: Executar acção de moderação em %{acct}
     account_moderation_notes:
-      create: Criar nota
-      created_msg: Nota de moderação criada com sucesso!
-      destroyed_msg: Nota de moderação excluída com sucesso!
+      create: Deixar uma nota
+      created_msg: Nota de moderação correctamente criada!
+      destroyed_msg: Nota de moderação destruída!
     accounts:
-      add_email_domain_block: Adicionar o domínio de e-mail à lista negra
+      add_email_domain_block: Bloquear este domínio de correio electrónico
       approve: Aprovar
-      approved_msg: Inscrição de %{username} aprovada com sucesso
+      approved_msg: Inscrição de %{username} aprovada correctamente
       are_you_sure: Tens a certeza?
-      avatar: Imagem de Perfil
+      avatar: Imagem de perfil
       by_domain: Domínio
       change_email:
-        changed_msg: E-mail alterado com sucesso!
+        changed_msg: Endereço de correio electrónico alterado!
         current_email: E-mail atual
         label: Alterar e-mail
         new_email: Novo e-mail
@@ -59,17 +59,17 @@ pt-PT:
       destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato
       disable: Congelar
       disable_sign_in_token_auth: Desativar token de autenticação por e-mail
-      disable_two_factor_authentication: Desativar 2FA
+      disable_two_factor_authentication: Desactivar autenticação por dois factores (2FA)
       disabled: Congelada
       display_name: Nome a mostrar
       domain: Domínio
       edit: Editar
-      email: E-mail
+      email: Correio electrónico
       email_status: Estado do e-mail
       enable: Descongelar
       enable_sign_in_token_auth: Ativar token de autenticação por e-mail
       enabled: Ativado
-      enabled_msg: Descongelou com sucesso a conta %{username}
+      enabled_msg: Descongelou a conta %{username}
       followers: Seguidores
       follows: A seguir
       header: Cabeçalho
@@ -85,7 +85,7 @@ pt-PT:
         title: Local
       login_status: Estado de início de sessão
       media_attachments: Anexos de media
-      memorialize: Converter em memorial
+      memorialize: Converter num memorial
       memorialized: Em memória
       memorialized_msg: Conta %{username} transformada com sucesso em memorial
       moderation:
@@ -104,78 +104,78 @@ pt-PT:
       not_subscribed: Não inscrito
       pending: Pendente de revisão
       perform_full_suspension: Fazer suspensão completa
-      previous_strikes: Punições anteriores
+      previous_strikes: Reprimendas anteriores
       previous_strikes_description_html:
-        one: Esta conta tem <strong>1</strong> punição.
-        other: Esta conta tem <strong>%{count}</strong> punições.
+        one: Esta conta tem <strong>1</strong> reprimenda.
+        other: Esta conta tem <strong>%{count}</strong> reprimendas.
       promote: Promover
       protocol: Protocolo
       public: Público
       push_subscription_expires: A Inscrição PuSH expira
       redownload: Atualizar perfil
-      redownloaded_msg: Atualizado com sucesso o perfil de %{username} da origem
+      redownloaded_msg: Perfil de %{username} correctamente actualizado a partir da origem
       reject: Rejeitar
-      rejected_msg: Inscrição de %{username} rejeitada com sucesso
+      rejected_msg: Inscrição de %{username} correctamente rejeitada
       remote_suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente.
       remote_suspension_reversible_hint_html: A conta foi suspensa no servidor de origem e os seus dados serão totalmente eliminados em %{date}. Até lá, o servidor de origem poderá recuperar esta conta sem quaisquer efeitos negativos. Se desejar eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
       remove_avatar: Remover a imagem de perfil
       remove_header: Remover o cabeçalho
-      removed_avatar_msg: Imagem de perfil de %{username} removida com sucesso
-      removed_header_msg: Imagem de cabeçalho de %{username} removida com sucesso
+      removed_avatar_msg: Imagem de perfil de %{username} removida
+      removed_header_msg: Imagem de cabeçalho de %{username} removida
       resend_confirmation:
         already_confirmed: Este utilizador já está confirmado
         send: Reenviar um e-mail de confirmação
-        success: E-mail de confirmação enviado com sucesso!
-      reset: Restaurar
-      reset_password: Reset palavra-passe
+        success: E-mail de confirmação enviado!
+      reset: Reiniciar
+      reset_password: Criar nova palavra-passe
       resubscribe: Reinscrever
       role: Função
       search: Pesquisar
-      search_same_email_domain: Outros utilizadores com o mesmo domínio de e-mail
+      search_same_email_domain: Outros utilizadores com o mesmo domínio de correio electrónico
       search_same_ip: Outros utilizadores com o mesmo IP
       security_measures:
         only_password: Apenas palavra-passe
         password_and_2fa: Palavra-passe e 2FA
-      sensitive: Marcar como sensível
-      sensitized: marcada como sensível
+      sensitive: Marcar como problemático
+      sensitized: Marcada como problemática
       shared_inbox_url: URL da caixa de entrada compartilhada
       show:
         created_reports: Denúncias realizadas
         targeted_reports: Denunciada por outros
-      silence: Silêncio
-      silenced: Silenciada
-      statuses: Status
-      strikes: Punições anteriores
+      silence: Limitar
+      silenced: Limitado
+      statuses: Publicações
+      strikes: Reprimendas anteriores
       subscribe: Inscrever-se
       suspend: Suspender
       suspended: Suspensa
-      suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Pode cancelar a suspensão da conta para torná-la utilizável, mas ela não irá recuperar os dados que possuía anteriormente.
+      suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Pode cancelar a suspensão da conta para torná-la utilizável, mas não irá recuperar os dados que possuía anteriormente.
       suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se deseja eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
       title: Contas
       unblock_email: Desbloquear endereço de e-mail
-      unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado com sucesso
-      unconfirmed_email: E-mail não confirmado
-      undo_sensitized: Desmarcar como sensível
+      unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado
+      unconfirmed_email: Correio electrónico por confirmar
+      undo_sensitized: Desmarcar como problemático
       undo_silenced: Desfazer silenciar
       undo_suspension: Desfazer supensão
-      unsilenced_msg: Removeu com sucesso as limitações da conta %{username}
+      unsilenced_msg: Removeu as limitações da conta %{username}
       unsubscribe: Cancelar inscrição
-      unsuspended_msg: Removeu com sucesso a suspensão da conta %{username}
-      username: Utilizador
+      unsuspended_msg: Removeu a suspensão da conta %{username}
+      username: Nome de utilizador
       view_domain: Ver resumo do domínio
-      warn: Aviso
-      web: Web
-      whitelisted: Está na lista branca
+      warn: Advertir
+      web: Teia
+      whitelisted: Permitido para a federação
     action_logs:
       action_types:
-        approve_appeal: Aprovar Recurso
-        approve_user: Aprovar Utilizador
+        approve_appeal: Aprovar recurso
+        approve_user: Aprovar utilizador
         assigned_to_self_report: Atribuir Denúncia
-        change_email_user: Alterar E-mail do Utilizador
+        change_email_user: Alterar correio electrónico do utilizador
         change_role_user: Alterar Função do Utilizador
         confirm_user: Confirmar Utilizador
         create_account_warning: Criar Aviso
-        create_announcement: Criar Anúncio
+        create_announcement: Criar comunicado
         create_canonical_email_block: Criar Bloqueio de E-mail
         create_custom_emoji: Criar Emoji Personalizado
         create_domain_allow: Criar Permissão de Domínio
@@ -185,7 +185,7 @@ pt-PT:
         create_unavailable_domain: Criar Domínio Indisponível
         create_user_role: Criar Função
         demote_user: Despromover Utilizador
-        destroy_announcement: Eliminar Anúncio
+        destroy_announcement: Apagar comunicado
         destroy_canonical_email_block: Eliminar Bloqueio de E-mail
         destroy_custom_emoji: Eliminar Emoji Personalizado
         destroy_domain_allow: Eliminar Permissão de Domínio
@@ -203,7 +203,7 @@ pt-PT:
         enable_custom_emoji: Ativar Emoji Personalizado
         enable_sign_in_token_auth_user: Ativar token de autenticação por e-mail para Utilizador
         enable_user: Ativar Utilizador
-        memorialize_account: Memorizar Conta
+        memorialize_account: Tornar conta num memorial
         promote_user: Promover Utilizador
         reject_appeal: Rejeitar Recurso
         reject_user: Rejeitar Utilizador
@@ -212,15 +212,15 @@ pt-PT:
         resend_user: Reenviar E-mail de Confirmação
         reset_password_user: Repor Password
         resolve_report: Resolver Denúncia
-        sensitive_account: Marcar a media na sua conta como sensível
-        silence_account: Silenciar Conta
-        suspend_account: Suspender Conta
+        sensitive_account: Marcar a media na sua conta como problemática
+        silence_account: Limitar conta
+        suspend_account: Suspender conta
         unassigned_report: Desatribuir Denúncia
         unblock_email_account: Desbloquear endereço de e-mail
-        unsensitive_account: Desmarcar a media na sua conta como sensível
+        unsensitive_account: Desmarcar a conta como problemática
         unsilence_account: Deixar de Silenciar Conta
         unsuspend_account: Retirar Suspensão à Conta
-        update_announcement: Atualizar Anúncio
+        update_announcement: Atualizar comunicado
         update_custom_emoji: Atualizar Emoji Personalizado
         update_domain_block: Atualizar Bloqueio de Domínio
         update_ip_block: Atualizar regra de IP
@@ -285,28 +285,28 @@ pt-PT:
         update_ip_block_html: "%{name} alterou regra para IP %{target}"
         update_status_html: "%{name} atualizou o estado de %{target}"
         update_user_role_html: "%{name} alterou a função %{target}"
-      deleted_account: conta excluída
+      deleted_account: conta apagada
       empty: Não foram encontrados registos.
       filter_by_action: Filtrar por ação
       filter_by_user: Filtrar por utilizador
       title: Registo de auditoria
     announcements:
-      destroyed_msg: Anúncio eliminado com sucesso!
+      destroyed_msg: Comunicado correctamente eliminado!
       edit:
-        title: Editar anúncio
-      empty: Nenhum anúncio encontrado.
-      live: Em exibição
+        title: Editar comunicado
+      empty: Nenhum comunicado encontrado.
+      live: Em directo
       new:
-        create: Criar anúncio
-        title: Novo anúncio
+        create: Criar comunicado
+        title: Novo comunicado
       publish: Publicar
-      published_msg: Anúncio publicado com sucesso!
+      published_msg: Comunicado correctamente publicado!
       scheduled_for: Agendado para %{time}
-      scheduled_msg: Anúncio agendado para publicação!
-      title: Anúncios
+      scheduled_msg: Comunicado agendado para publicação!
+      title: Comunicados
       unpublish: Anular publicação
-      unpublished_msg: Anúncio retirado de exibição com sucesso!
-      updated_msg: Anúncio atualizado com sucesso!
+      unpublished_msg: Comunicado correctamente retirado de publicação!
+      updated_msg: Comunicado correctamente actualizado!
     custom_emojis:
       assign_category: Atribuir categoria
       by_domain: Domínio
@@ -326,20 +326,20 @@ pt-PT:
       enabled_msg: Ativado com sucesso este emoji
       image_hint: PNG ou GIF até %{size}
       list: Lista
-      listed: Listado
+      listed: Inventariado
       new:
-        title: Adicionar novo emoji customizado
+        title: Adicionar novo emoji personalizado
       no_emoji_selected: Nenhum emojis foi alterado, pois nenhum foi selecionado
       not_permitted: Não está autorizado a executar esta ação
-      overwrite: Sobrescrever
+      overwrite: Escrever por cima
       shortcode: Código de atalho
       shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e underscores
-      title: Emojis customizados
-      uncategorized: Sem categoria
+      title: Emojis personalizados
+      uncategorized: Não categorizados
       unlist: Não listar
-      unlisted: Não listado
+      unlisted: Não inventariado
       update_failed_msg: Não foi possível atualizar esse emoji
-      updated_msg: Emoji atualizado com sucesso!
+      updated_msg: Emoji correctamente actualizado!
       upload: Enviar
     dashboard:
       active_users: utilizadores activos
@@ -354,8 +354,8 @@ pt-PT:
         one: "<strong>%{count}</strong> denuncia pendente"
         other: "<strong>%{count}</strong> denuncias pendentes"
       pending_tags_html:
-        one: "<strong>%{count}</strong> hashtag pendente"
-        other: "<strong>%{count}</strong> hashtags pendentes"
+        one: "<strong>%{count}</strong> etiqueta pendente"
+        other: "<strong>%{count}</strong> etiquetas pendentes"
       pending_users_html:
         one: "<strong>%{count}</strong> utilizador pendente"
         other: "<strong>%{count}</strong> utilizadores pendentes"
@@ -364,52 +364,52 @@ pt-PT:
       sources: Origem de inscrições
       space: Utilização do espaço
       title: Painel de controlo
-      top_languages: Principais idiomas activos
+      top_languages: Principais línguas activas
       top_servers: Servidores mais activos
-      website: Website
+      website: Página na teia
     disputes:
       appeals:
         empty: Nenhum recurso encontrado.
         title: Recursos
     domain_allows:
-      add_new: Colocar domínio na lista branca
-      created_msg: Domínio foi adicionado à lista branca com sucesso
-      destroyed_msg: Domínio foi removido da lista branca
+      add_new: Permitir federação com o domínio
+      created_msg: Permissão correctamente atribuída para federação
+      destroyed_msg: Revogada a permissão de federação para o domínio
       export: Exportar
       import: Importar
-      undo: Remover da lista branca
+      undo: Revogar federação com o domínio
     domain_blocks:
-      add_new: Adicionar novo
+      add_new: Adicionar novo bloqueio de domínio
       created_msg: Bloqueio do domínio está a ser processado
-      destroyed_msg: Bloqueio de domínio está a ser removido
+      destroyed_msg: Retirado o bloqueio de domínio
       domain: Domínio
       edit: Editar bloqueio de domínio
-      existing_domain_block: Já impôs limites mais rigorosos a %{name}.
-      existing_domain_block_html: Você já impôs limites mais restritivos a %{name}, é necessário primeiro <a href="%{unblock_url}">desbloqueá-lo</a>.
+      existing_domain_block: Já tinha imposto limites mais rigorosos a %{name}.
+      existing_domain_block_html: Já tinha imposto limites mais restritivos a %{name}. Primeiro, precisa de o <a href="%{unblock_url}">desbloquear</a>.
       export: Exportar
       import: Importar
       new:
         create: Criar bloqueio
-        hint: O bloqueio de dominio não vai previnir a criação de entradas na base de dados, mas irá retroativamente e automaticamente aplicar métodos de moderação específica nessas contas.
+        hint: O bloqueio por domínio não vai prevenir a criação de contas na base de dados, mas irá retroactiva e automaticamente aplicar certos métodos de moderação nessas contas.
         severity:
           desc_html: "<strong>Limitar</strong> tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. <strong>Suspender</strong> removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize <strong>Nenhum</strong> se apenas quiser rejeitar ficheiros media."
           noop: Nenhum
           silence: Limitar
           suspend: Suspender
         title: Novo bloqueio de domínio
-      no_domain_block_selected: Nenhum bloqueio de domínio foi alterado pois nenhum foi selecionado
+      no_domain_block_selected: Nenhum bloqueio de domínio foi alterado, pois nenhum foi seleccionado
       not_permitted: Não está autorizado a executar esta ação
       obfuscate: Ofuscar nome de domínio
-      obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, se estiverem habilitadas as limitações na publicação da lista de domínios
+      obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, caso estejam definidas limitações na publicação da lista de domínios
       private_comment: Comentário privado
       private_comment_hint: Comentário sobre essa limitação de domínio para uso interno pelos moderadores.
       public_comment: Comentário público
       public_comment_hint: Comentário sobre essa limitação de domínio para o público geral, se ativada a divulgação da lista de limitações de domínio.
       reject_media: Rejeitar ficheiros de media
-      reject_media_hint: Remove arquivos de media armazenados localmente e rejeita descarregar novos arquivos no futuro. Irrelevante para suspensões
-      reject_reports: Rejeitar denúncia
-      reject_reports_hint: Ignorar todos as denúncias provenientes deste domínio. Irrelevante para suspensões
-      undo: Anular
+      reject_media_hint: Remove ficheiros de media armazenados localmente, e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões
+      reject_reports: Rejeitar denúncias
+      reject_reports_hint: Ignorar todas as denúncias provenientes deste domínio. Sem pertinência para suspensões
+      undo: Anular o bloqueio por domínio
       view: Ver domínios bloqueados
     email_domain_blocks:
       add_new: Adicionar novo
@@ -446,7 +446,7 @@ pt-PT:
       no_file: Nenhum ficheiro selecionado
     follow_recommendations:
       description_html: "<strong>Recomendações de quem seguir ajudam novos utilizadores a encontrar conteúdo interessante rapidamente.</strong>. Quando um utilizador não interage com outros o suficiente para formar recomendações personalizadas, estas contas são recomendadas. Elas são recalculadas diariamente a partir de uma mistura de contas com mais atividade recente e maior número de seguidores locais para um determinado idioma."
-      language: Para o idioma
+      language: Para a língua
       status: Estado
       suppress: Suprimir recomendação de contas a seguir
       suppressed: Suprimida
@@ -455,7 +455,7 @@ pt-PT:
     instances:
       availability:
         description_html:
-          one: Se a transmissão ao domínio falhar <strong>%{count} dia</strong> sem sucesso, nenhuma tentativa de transmissão será feita a menos que uma transmissão <em>proveniente</em> do domínio seja recebida.
+          one: Se a transmissão ao domínio falhar ao final de <strong>%{count} dia(s)</strong>, não será feita mais nenhuma tentativa de transmissão a menos que seja recebida uma transmissão <em>proveniente</em> desse domínio.
           other: Se a transmissão ao domínio falhar em <strong>%{count} dias diferentes</strong> sem sucesso, nenhuma tentativa de transmissão será feita a menos que uma transmissão <em>proveniente</em> do domínio seja recebida.
         failure_threshold_reached: Limite de falhas atingido em %{date}.
         failures_recorded:
@@ -468,7 +468,7 @@ pt-PT:
       back_to_limited: Limitadas
       back_to_warning: Aviso
       by_domain: Domínio
-      confirm_purge: Tem a certeza que deseja eliminar permanentemente os dados deste domínio?
+      confirm_purge: Tem a certeza de que deseja eliminar permanentemente os dados deste domínio?
       content_policies:
         comment: Nota interna
         description_html: Pode definir políticas de conteúdo que serão aplicadas a todas as contas deste domínio e a qualquer um dos seus subdomínios.
@@ -485,7 +485,7 @@ pt-PT:
         instance_accounts_measure: contas armazenadas
         instance_followers_measure: nossos seguidores lá
         instance_follows_measure: os seus seguidores aqui
-        instance_languages_dimension: Idiomas mais populares
+        instance_languages_dimension: Liderança de línguas
         instance_media_attachments_measure: anexos de media armazenados
         instance_reports_measure: denúncias sobre eles
         instance_statuses_measure: publicações armazenadas
@@ -511,11 +511,11 @@ pt-PT:
       private_comment: Comentários privados
       public_comment: Comentários públicos
       purge: Purgar
-      purge_description_html: Se acredita que este domínio está definitivamente offline, pode excluir todos os registos de contas e dados associados a ele do seu armazenamento. Isso pode demorar algum tempo.
-      title: Instâncias conhecidas
-      total_blocked_by_us: Bloqueadas por nós
-      total_followed_by_them: Seguidas por eles
-      total_followed_by_us: Seguidas por nós
+      purge_description_html: Se crê que este domínio está definitivamente fora de linha, pode apagar todos os seus registos de contas e dados associados do seu armazenamento. Isso pode demorar algum tempo.
+      title: Federação
+      total_blocked_by_us: Bloqueado(s) por nós
+      total_followed_by_them: Seguido(s) por eles
+      total_followed_by_us: Seguido(s) por nós
       total_reported: Denúncias sobre eles
       total_storage: Anexos de media
       totals_time_period_hint_html: Os totais exibidos abaixo incluem dados referentes ao tempo total.
@@ -529,7 +529,7 @@ pt-PT:
       title: Convites
     ip_blocks:
       add_new: Criar regra
-      created_msg: Nova regra de IP adicionada com sucesso
+      created_msg: Nova regra de IP correctamente adicionada
       delete: Eliminar
       expires_in:
         '1209600': 2 semanas
@@ -551,13 +551,13 @@ pt-PT:
       disable: Desativar
       disabled: Desactivado
       enable: Activar
-      enable_hint: Uma vez ativado, a tua instância irá subscrever a todas as publicações deste repetidor e irá começar a enviar as suas publicações públicas para ele.
+      enable_hint: Uma vez ativado, a tua instância irá assinar todas as publicações deste repetidor e irá começar a enviar as suas publicações públicas para lá.
       enabled: Ativado
       inbox_url: URL do repetidor
       pending: À espera da aprovação do repetidor
       save_and_enable: Guardar e ativar
       setup: Configurar uma ligação ao repetidor
-      signatures_not_enabled: Relays não funcionarão corretamente enquanto o modo seguro ou o modo lista branca estiverem ativados
+      signatures_not_enabled: Os repetidores não funcionarão correctamente enquanto o modo seguro ou o modo de lista branca estiverem activados
       status: Estado
       title: Retransmissores
     report_notes:
@@ -571,11 +571,11 @@ pt-PT:
       action_log: Registo de auditoria
       action_taken_by: Ação tomada por
       actions:
-        delete_description_html: As publicações denunciadas serão eliminadas e uma punição será registada para ajudá-lo a escalar ações em futuras infrações pela mesma conta.
-        mark_as_sensitive_description_html: A media nas publicações denunciadas será marcada como sensível e uma punição será registada para ajudá-lo a escalar ações em futuras infrações pela mesma conta.
+        delete_description_html: As publicações denunciadas serão eliminadas, e será registada uma reprimenda para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
+        mark_as_sensitive_description_html: A media nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
         other_description_html: Ver mais opções para controlar o comportamento da conta e personalizar a comunicação para a conta denunciada.
-        resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, nenhuma punição será registada, e a denuncia será fechada.
-        silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando severamente o seu alcance. Pode sempre ser revertido.
+        resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, não será registada nenhuma reprimenda, e a denúncia será fechada.
+        silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando fortemente o seu alcance. Pode sempre ser revertido.
         suspend_description_html: O perfil e todo o seu conteúdo tornar-se-ão inacessíveis até serem eventualmente apagados. A interacção com a conta será impossível. Reversível no prazo de 30 dias.
       actions_description_html: Decida a ação a tomar para resolver esta denúncia. Se decidir por uma ação punitiva contra a conta denunciada, um e-mail de notificação será enviado, excetuando quando selecionada a categoria <strong>Spam</strong>.
       add_to_report: Adicionar mais à denúncia
@@ -593,8 +593,8 @@ pt-PT:
       forwarded: Encaminhado
       forwarded_to: Encaminhado para %{domain}
       mark_as_resolved: Marcar como resolvido
-      mark_as_sensitive: Marcar como sensível
-      mark_as_unresolved: Marcar como não resolvido
+      mark_as_sensitive: Marcar como problemático
+      mark_as_unresolved: Marcar como por resolver
       no_one_assigned: Ninguém
       notes:
         create: Adicionar nota
@@ -603,15 +603,15 @@ pt-PT:
         delete: Eliminar
         placeholder: Descreve as ações que foram tomadas ou quaisquer outras atualizações relacionadas...
         title: Notas
-      notes_description_html: Visualize e deixe anotações para outros moderadores e para sí no futuro
-      quick_actions_description_html: 'Tome uma ação rápida ou role para baixo para ver o conteúdo denunciado:'
+      notes_description_html: Visualize e deixe anotações para outros moderadores e para si próprio no futuro
+      quick_actions_description_html: 'Tome uma ação rápida ou deslize para baixo para ver o conteúdo denunciado:'
       remote_user_placeholder: o utilizador remoto de %{instance}
       reopen: Reabrir denúncia
       report: 'Denúncia #%{id}'
       reported_account: Conta denunciada
       reported_by: Denunciado por
       resolved: Resolvido
-      resolved_msg: Denúncia resolvida com sucesso!
+      resolved_msg: Denúncia correctamente resolvida!
       skip_to_actions: Passar para as ações
       status: Estado
       statuses: Conteúdo denunciado
@@ -634,7 +634,7 @@ pt-PT:
         moderation: Moderação
         special: Especiais
       delete: Eliminar
-      description_html: Com as <strong>funções de utilizador</strong>, pode personalizar quais funções e áreas do Mastodon os seus utilizadores podem aceder.
+      description_html: Com as <strong>funções de utilizador</strong>, pode personalizar quais as funções e áreas do Mastodon a que os seus utilizadores podem aceder.
       edit: Editar função '%{name}'
       everyone: Permissões padrão
       everyone_full_description_html: Esta é a <strong>função base</strong> que afeta <strong>todos os utilizadores</strong>, mesmo aqueles sem uma função atribuída. Todas as outras funções herdam as permissões desta.
@@ -645,31 +645,31 @@ pt-PT:
         administrator: Administrador
         administrator_description: Utilizadores com esta permissão irão contornar todas as permissões
         delete_user_data: Eliminar Dados de Utilizador
-        delete_user_data_description: Permite que os utilizadores eliminem os dados de outros utilizadores sem atraso
+        delete_user_data_description: Permite que os utilizadores eliminem os dados doutros utilizadores sem tempo de espera
         invite_users: Convidar Utilizadores
         invite_users_description: Permite aos utilizadores convidar pessoas novas para o servidor
-        manage_announcements: Gerir Anúncios
-        manage_announcements_description: Permite aos utilizadores gerir anúncios no servidor
-        manage_appeals: Gerir Recursos
+        manage_announcements: Gerir comunicados
+        manage_announcements_description: Permite aos utilizadores gerirem os comunicados no servidor
+        manage_appeals: Gerir apelos
         manage_appeals_description: Permite aos utilizadores rever recursos de moderação
         manage_blocks: Gerir Bloqueios
-        manage_blocks_description: Permite aos utilizadores bloquear provedores de e-mail e endereços IP
+        manage_blocks_description: Permite aos utilizadores bloquear fornecedores de e-mail e endereços IP
         manage_custom_emojis: Gerir Emojis Personalizados
-        manage_custom_emojis_description: Permite aos utilizadores gerir os emojis personalizados do servidor
+        manage_custom_emojis_description: Permite aos utilizadores gerirem os emojis personalizados do servidor
         manage_federation: Gerir Federação
         manage_federation_description: Permite aos utilizadores bloquear ou permitir federação com outros domínios e controlar a entregabilidade
         manage_invites: Gerir Convites
-        manage_invites_description: Permite aos utilizadores pesquisar e desativar links de convite
+        manage_invites_description: Permite aos utilizadores pesquisarem e desativarem ligações de convite
         manage_reports: Gerir Relatórios
         manage_reports_description: Permite aos utilizadores rever relatórios e executar ações de moderação contra eles
         manage_roles: Gerir Funções
-        manage_roles_description: Permite aos usuários gerir e atribuir funções abaixo das deles
+        manage_roles_description: Permite aos utilizadores a gestão e atribuição de funções abaixo dos seus
         manage_rules: Gerir Regras
         manage_rules_description: Permite aos utilizadores alterar as regras do servidor
         manage_settings: Gerir Configurações
-        manage_settings_description: Permite aos utilizadores alterar as configurações do site
+        manage_settings_description: Permite aos utilizadores alterar as configurações do sítio na teia
         manage_taxonomies: Gerir Taxonomias
-        manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag
+        manage_taxonomies_description: 'Permite aos utilizadores avaliar o conteúdo em alta e atualizar as configurações de #etiquetas'
         manage_user_access: Gerir Acesso de Utilizador
         manage_user_access_description: Permite aos utilizadores desativar a autenticação em duas etapas de outros utilizadores, alterar o seu endereço de e-mail e redefinir a sua palavra-passe
         manage_users: Gerir Utilizadores
@@ -679,14 +679,14 @@ pt-PT:
         view_audit_log: Ver Registo de Auditoria
         view_audit_log_description: Permite aos utilizadores ver um histórico de ações administrativas no servidor
         view_dashboard: Ver Painel de Controlo
-        view_dashboard_description: Permite aos utilizadores aceder ao painel de controlo e várias métricas
+        view_dashboard_description: Permite aos utilizadores acederem ao painel de controlo e a várias estatísticas
         view_devops: DevOps
         view_devops_description: Permite aos utilizadores aceder aos painéis de controlo do Sidekiq e pgHero
       title: Funções
     rules:
       add_new: Adicionar regra
       delete: Eliminar
-      description_html: Embora a maioria afirme ter lido e concordado com os termos de serviço, geralmente as pessoas só leem depois de surgir um problema. <strong>Dê uma olhada nas regras do seu servidor fornecendo-as em uma lista de marcadores planos.</strong> Tente manter as regras individuais curtas e simples, mas tente também não dividi-las em muitos itens separados.
+      description_html: Embora a maioria afirme ter lido e concordado com os termos de serviço, geralmente as pessoas só os leem depois de lhes surgir um problema. <strong>Torne fácil a leitura rápida das regras do seu servidor, apresentando-as numa lista de tópicos.</strong> Tente que cada regra seja sucinta e simples, mas tente também não dividi-las num número excessivo de tópicos separados.
       edit: Editar regra
       empty: Nenhuma regra de instância foi ainda definida.
       title: Regras da instância
@@ -695,12 +695,12 @@ pt-PT:
         manage_rules: Gerir regras do servidor
         preamble: Forneça informações aprofundadas sobre como o servidor é operado, moderado, financiado.
         rules_hint: Existe uma área dedicada às regras a que os seus utilizadores devem aderir.
-        title: Sobre
+        title: Acerca de
       appearance:
         preamble: Personalize a interface web do Mastodon.
         title: Aspeto
       branding:
-        preamble: A marca do seu servidor diferencia-a de outros servidores na rede. Essa informação pode ser exibida em vários ambientes, como a interface web do Mastodon, aplicativos nativos, visualizações de links em outros sites e dentro de aplicativos de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa.
+        preamble: A marca do seu servidor diferencia-a doutros servidores na rede. Essa informação pode ser exibida em vários contexos, como a interface na teia do Mastodon, aplicações nativas, visualizações de hiperligações noutros sites, em aplicações de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa.
         title: Marca
       content_retention:
         preamble: Controle como o conteúdo gerado pelos utilizadores é armazenado no Mastodon.
@@ -714,7 +714,7 @@ pt-PT:
         profile_directory: Diretório de perfis
         public_timelines: Cronologias públicas
         title: Descobrir
-        trends: Tendências
+        trends: Em alta
       domain_blocks:
         all: Para toda a gente
         disabled: Para ninguém
@@ -730,7 +730,7 @@ pt-PT:
       title: Definições do Servidor
     site_uploads:
       delete: Eliminar arquivo carregado
-      destroyed_msg: Upload do site eliminado com sucesso!
+      destroyed_msg: Envio de sítio na teia correctamente eliminado!
     statuses:
       account: Autor
       application: Aplicação
@@ -740,36 +740,36 @@ pt-PT:
         remove_from_report: Remover da denúncia
         report: Denúncia
       deleted: Eliminado
-      favourites: Favoritos
+      favourites: Marcadores
       history: Histórico de versões
       in_reply_to: A responder a
-      language: Idioma
+      language: Língua
       media:
         title: Media
       metadata: Metadados
       no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado
       open: Abrir publicação
       original_status: Publicação original
-      reblogs: Reblogs
+      reblogs: Re-publicacões
       status_changed: Publicação alterada
       title: Estado das contas
-      trending: Em destaque
+      trending: Em alta
       visibility: Visibilidade
       with_media: Com media
     strikes:
       actions:
         delete_statuses: "%{name} eliminou a publicação de %{target}"
         disable: "%{name} congelou a conta de %{target}"
-        mark_statuses_as_sensitive: "%{name} marcou as publicações de %{target} como sensíveis"
+        mark_statuses_as_sensitive: "%{name} marcou as publicações de %{target} como problemáticas"
         none: "%{name} enviou uma advertência a %{target}"
-        sensitive: "%{name} marcou a conta de %{target} como sensível"
+        sensitive: "%{name} marcou a conta de %{target} como problemática"
         silence: "%{name} limitou a conta de %{target}"
         suspend: "%{name} suspendeu a conta de %{target}"
       appeal_approved: Recorrido
       appeal_pending: Recurso pendente
     system_checks:
       database_schema_check:
-        message_html: Existem migrações de base de dados pendentes. Por favor, execute-as para garantir que o aplicativo se comporte como esperado
+        message_html: Há migrações de base de dados pendentes. Queira executá-las, para garantir que a aplicação se comporta como o esperado
       elasticsearch_running_check:
         message_html: Não foi possível conectar ao Elasticsearch. Por favor, verifique se está em execução, ou desabilite a pesquisa de texto completo
       elasticsearch_version_check:
@@ -782,32 +782,32 @@ pt-PT:
         message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq
     tags:
       review: Estado da revisão
-      updated_msg: Definições de hashtags actualizadas com sucesso
+      updated_msg: 'Definições de #etiquetas correctamente actualizadas'
     title: Administração
     trends:
       allow: Permitir
       approved: Aprovado
       disallow: Não permitir
       links:
-        allow: Permitir link
+        allow: Permitir ligação
         allow_provider: Permitir editor
-        description_html: Estes são links que atualmente estão a ser frequentemente partilhados por contas visiveis pelo seu servidor. Eles podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhum link é exibido publicamente até que aprove o editor. Também pode permitir ou rejeitar links individualmente.
-        disallow: Não permitir link
+        description_html: Estas são as ligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma ligação é exibida publicamente até que o editor a aprove. Também pode permitir ou rejeitar ligações em avulso.
+        disallow: Não permitir ligação
         disallow_provider: Não permitir editor
-        no_link_selected: Nenhum link foi alterado, pois nenhum foi selecionado
+        no_link_selected: Nenhuma ligação foi alterada, pois nenhuma foi selecionada
         publishers:
           no_publisher_selected: Nenhum editor foi alterado, pois nenhum foi selecionado
         shared_by_over_week:
           one: Partilhado por uma pessoa na última semana
           other: Partilhado por %{count} pessoas na última semana
-        title: Links em destaque
+        title: Ligações em alta
         usage_comparison: Partilhado %{today} vezes hoje, em comparação com %{yesterday} ontem
       only_allowed: Apenas permitidos
       pending_review: Pendente de revisão
       preview_card_providers:
-        allowed: Links deste editor poderão ser incluídos nos destaques
-        description_html: Estes são domínios a partir dos quais links são frequentemente partilhados no seu servidor. Estes links não serão colocados em destaque a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios.
-        rejected: Links deste editor não serão incluídos nos destaques
+        allowed: Ligações deste editor poderão vir a ficar em alta
+        description_html: Estes são os domínios a partir dos quais ligações são frequentemente partilhadas no seu servidor. As suas ligações não serão colocadas em alta a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios.
+        rejected: Ligações deste editor não serão postas em alta
         title: Editores
       rejected: Rejeitado
       statuses:
@@ -816,37 +816,37 @@ pt-PT:
         description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente.
         disallow: Não permitir publicação
         disallow_account: Não permitir autor
-        no_status_selected: Nenhuma publicação em tendência foi alterada, pois nenhuma foi selecionada
+        no_status_selected: Nenhuma publicação em alta foi alterada, pois nenhuma foi selecionada
         not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros
         shared_by:
-          one: Partilhado ou adicionado aos favoritos uma vez
-          other: Partilhado e adicionado aos favoritos %{friendly_count} vezes
-        title: Publicações em destaque
+          one: Partilhado ou adicionado aos marcadores uma vez
+          other: Partilhado e adicionado aos marcadores %{friendly_count} vezes
+        title: Publicações em alta
       tags:
         current_score: Pontuação atual %{score}
         dashboard:
           tag_accounts_measure: utilizadores únicos
-          tag_languages_dimension: Idiomas mais populares
-          tag_servers_dimension: Servidores mais populares
+          tag_languages_dimension: Liderança de línguas
+          tag_servers_dimension: Topo de servidores
           tag_servers_measure: servidores diferentes
           tag_uses_measure: utilizações totais
-        description_html: Estas são hashtags que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrir o que está ser mais falado no momento. Nenhuma hashtag é exibida publicamente até que a aprove.
+        description_html: 'Estas são as #etiquetas que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrir o que está ser mais falado no momento. Nenhuma #etiqueta será exibida publicamente até que a aprove.'
         listable: Pode ser sugerida
         no_tag_selected: Nenhuma etiqueta foi alterada, pois nenhuma foi selecionada
         not_listable: Não será sugerida
         not_trendable: Não aparecerá nas tendências
         not_usable: Não pode ser utilizada
         peaked_on_and_decaying: Máximo em %{date}, agora a decair
-        title: Hashtags em destaque
-        trendable: Pode aparecer nas tendências
-        trending_rank: 'Tendência #%{rank}'
+        title: Etiquetas em alta
+        trendable: Pode aparecer em alta
+        trending_rank: 'Em alta #%{rank}'
         usable: Pode ser utilizada
         usage_comparison: Utilizada %{today} vezes hoje, em comparação com %{yesterday} ontem
         used_by_over_week:
           one: Utilizada por uma pessoa na última semana
           other: Utilizada por %{count} pessoas na última semana
-      title: Tendências
-      trending: Em destaque
+      title: Em alta
+      trending: Em alta
     warning_presets:
       add_new: Adicionar novo
       delete: Eliminar
@@ -856,7 +856,7 @@ pt-PT:
     webhooks:
       add_new: Adicionar endpoint
       delete: Eliminar
-      description_html: Um <strong>webhook</strong> possibilita que o Mastodon envie <strong>notificações em tempo real</strong> de eventos seleccionados, para um seu aplicativo, para que este possa <strong>acionar ações automaticamente</strong>.
+      description_html: Um <strong>webhook</strong> possibilita que o Mastodon envie <strong>notificações em tempo real</strong> de eventos seleccionados, para uma aplicação sua, de modo que esta possa <strong>espoletar ações automaticamente</strong>.
       disable: Desativar
       disabled: Desativado
       edit: Editar endpoint
@@ -876,18 +876,18 @@ pt-PT:
   admin_mailer:
     new_appeal:
       actions:
-        delete_statuses: para elimintar as suas publicações
+        delete_statuses: para eliminar as suas publicações
         disable: para congelar a sua conta
-        mark_statuses_as_sensitive: marcar as suas publicações como sensíveis
+        mark_statuses_as_sensitive: para marcar as suas publicações como problemáticas
         none: uma advertência
-        sensitive: marcação da sua conta como sensível
-        silence: limitação da sua conta
-        suspend: suspensão da sua conta
+        sensitive: para marcar a sua conta como problemática
+        silence: para limitar a sua conta
+        suspend: para suspender a sua conta
       body: "%{target} está a recorrer de uma decisão de moderação de %{action_taken_by} a %{date}, que consistiu em %{type}. Escreveu:"
       next_steps: Pode aprovar o recurso para reverter a decisão de moderação, ou ignorá-lo.
       subject: "%{username} está a recorrer da decisão de moderação em %{instance}"
     new_pending_account:
-      body: Em baixo, estão os detalhes da nova conta. Pode aprovar ou rejeitar esta inscrição.
+      body: Abaixo, estão os pormenores da nova conta. Pode aprovar ou rejeitar esta inscrição.
       subject: Nova conta para revisão em %{instance} (%{username})
     new_report:
       body: "%{reporter} denunciou %{target}"
@@ -896,33 +896,33 @@ pt-PT:
     new_trends:
       body: 'Os seguintes itens precisam ser revistos antes de poderem ser exibidos publicamente:'
       new_trending_links:
-        title: Links em destaque
+        title: Ligações em alta
       new_trending_statuses:
-        title: Publicações em destaque
+        title: Publicações em alta
       new_trending_tags:
-        no_approved_tags: Não existem, atualmente, hashtags aprovadas em destaque.
-        requirements: 'Qualquer um destes candidatos pode ultrapassar a #%{rank} hashtag aprovada em destaque, que é atualmente #%{lowest_tag_name} com uma pontuação de %{lowest_tag_score}.'
-        title: Hashtags em destaque
+        no_approved_tags: 'Neste momento, não existem #etiquetas aprovadas para destaque.'
+        requirements: 'Qualquer um destes candidatos pode ultrapassar a #%{rank} etiqueta aprovada em destaque, que é atualmente #%{lowest_tag_name} com uma pontuação de %{lowest_tag_score}.'
+        title: Etiquetas em alta
       subject: Novas tendências para revisão em %{instance}
   aliases:
     add_new: Criar pseudónimo
     created_msg: Criou com sucesso um novo pseudónimo. Pode agora iniciar a migração da conta antiga.
-    deleted_msg: O pseudónimo foi eliminado com sucesso. Migrar dessa conta para esta não será mais possível.
+    deleted_msg: O pseudónimo foi correctamente eliminado. Não será mais possível migrar a partir dessa conta.
     empty: Não tem pseudónimos.
     hint_html: Se quiser mudar de outra conta para esta, pode criar aqui um pseudónimo, que é necessário antes de poder prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é <strong>inofensiva e reversível</strong>. <strong>A migração da conta é iniciada a partir da conta antiga</strong>.
     remove: Desvincular pseudónimo
   appearance:
     advanced_web_interface: Interface web avançada
-    advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: Página inicial, notificações, cronologia federada, qualquer número de listas e hashtags.'
+    advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: Página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.'
     animations_and_accessibility: Animações e acessibilidade
     confirmation_dialogs: Caixas de confirmação
     discovery: Descobrir
     localization:
-      body: Mastodon é traduzido por voluntários.
+      body: O Mastodon é traduzido por voluntários.
       guide_link: https://pt.crowdin.com/project/mastodon/
       guide_link_text: Todos podem contribuir.
-    sensitive_content: Conteúdo sensível
-    toot_layout: Disposição do Toot
+    sensitive_content: Conteúdo problemático
+    toot_layout: Disposição da publicação
   application_mailer:
     notification_preferences: Alterar preferências de e-mail
     salutation: "%{name},"
@@ -931,8 +931,8 @@ pt-PT:
     view_profile: Ver perfil
     view_status: Ver publicação
   applications:
-    created: Aplicação criada com sucesso
-    destroyed: Aplicação eliminada com sucesso
+    created: Aplicação correctamente criada
+    destroyed: Aplicação correctamente eliminada
     regenerate_token: Regenerar token de acesso
     token_regenerated: Token de acesso regenerado com sucesso
     warning: Cuidado com estes dados. Não partilhar com ninguém!
@@ -948,9 +948,9 @@ pt-PT:
       suffix: Com uma conta, poderá seguir pessoas, publicar atualizações e trocar mensagens com utilizadores de qualquer instância Mastodon e muito mais!
     didnt_get_confirmation: Não recebeu o e-mail de confirmação?
     dont_have_your_security_key: Não tem a sua chave de segurança?
-    forgot_password: Esqueceste a palavra-passe?
+    forgot_password: Esqueceu-se da palavra-passe?
     invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo.
-    link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel ou um código de recuperação
+    link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel, ou um código de recuperação
     link_to_webauth: Usa o teu dispositivo de chave de segurança
     log_in_with: Iniciar sessão com
     login: Entrar
@@ -967,7 +967,7 @@ pt-PT:
     resend_confirmation: Reenviar instruções de confirmação
     reset_password: Criar nova palavra-passe
     rules:
-      preamble: Estas são definidos e aplicadas pelos moderadores de %{domain}.
+      preamble: Estas são definidas e aplicadas pelos moderadores de %{domain}.
       title: Algumas regras básicas.
     security: Alterar palavra-passe
     set_new_password: Editar palavra-passe
@@ -976,7 +976,7 @@ pt-PT:
       email_settings_hint_html: O e-mail de confirmação foi enviado para %{email}. Se esse endereço de e-mail não estiver correto, pode alterá-lo nas definições da conta.
       title: Configuração
     sign_in:
-      preamble_html: Iniciar sessão com as suas credenciais de <strong>%{domain}</strong>. Se a sua conta estiver hospedada noutro servidor, não poderá inciar sessão aqui.
+      preamble_html: Iniciar sessão com as suas credenciais de <strong>%{domain}</strong>. Se a sua conta estiver hospedada noutro servidor, não poderá iniciar sessão aqui.
       title: Iniciar sessão em %{domain}
     sign_up:
       preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa na rede, independentemente do servidor onde a conta esteja hospedada.
@@ -987,8 +987,8 @@ pt-PT:
       functional: A sua conta está totalmente operacional.
       pending: A sua inscrição está pendente de revisão pela nossa equipa. Isso pode demorar algum tempo. Receberá um e-mail se a sua conta for aprovada.
       redirecting_to: A sua conta está inativa porque está atualmente a ser redirecionada para %{acct}.
-      view_strikes: Veja as punições anteriores contra a sua conta
-    too_fast: Formulário enviado muito rapidamente, tente novamente.
+      view_strikes: Veja as reprimendas anteriores sobre a sua conta
+    too_fast: Formulário enviado demasiado rapidamente, tente novamente.
     use_security_key: Usar chave de segurança
   authorize_follow:
     already_following: Tu já estás a seguir esta conta
@@ -999,8 +999,8 @@ pt-PT:
     following: 'Sucesso! Agora estás a seguir a:'
     post_follow:
       close: Ou podes simplesmente fechar esta janela.
-      return: Voltar ao perfil do utilizador
-      web: Voltar à página inicial
+      return: Mostrar perfil do utilizador
+      web: Ir para a página na teia
     title: Seguir %{acct}
   challenge:
     confirm: Continuar
@@ -1021,91 +1021,91 @@ pt-PT:
       about_x_months: "%{count} meses"
       about_x_years: "%{count} anos"
       almost_x_years: "%{count} anos"
-      half_a_minute: Justo agora
+      half_a_minute: Agora mesmo
       less_than_x_minutes: "%{count} meses"
-      less_than_x_seconds: Justo agora
+      less_than_x_seconds: Agora mesmo
       over_x_years: "%{count} anos"
       x_days: "%{count} dias"
       x_minutes: "%{count} minutos"
       x_months: "%{count} meses"
       x_seconds: "%{count} segundos"
   deletes:
-    challenge_not_passed: A informação que introduziu não estava correta
-    confirm_password: Introduza a sua palavra-passe atual para verificar a sua identidade
-    confirm_username: Introduza o seu nome de utilizador para confirmar o procedimento
+    challenge_not_passed: A informação que inseriu não estava correcta
+    confirm_password: Insira sua palavra-passe atual para verificar a sua identidade
+    confirm_username: Insira seu nome de utilizador para confirmar o procedimento
     proceed: Eliminar conta
-    success_msg: A sua conta foi eliminada com sucesso
+    success_msg: A sua conta foi correctamente eliminada
     warning:
       before: 'Antes de continuar, por favor leia cuidadosamente estas notas:'
-      caches: O conteúdo que foi armazenado em cache por outras instâncias pode persistir
+      caches: O conteúdo que foi armazenado em cache por outras instâncias pode perdurar
       data_removal: As suas publicações e outros dados serão eliminados permanentemente
       email_change_html: Pode <a href="%{path}">alterar o seu endereço de e-mail</a> sem eliminar a sua conta
       email_contact_html: Se ainda não chegou, pode enviar um e-mail a <a href="mailto:%{email}">%{email}</a> para obter ajuda
       email_reconfirmation_html: Se não recebeu o e-mail de confirmação, pode <a href="%{path}">pedi-lo novamente</a>
       irreversible: Não será possível restaurar ou reativar sua conta
-      more_details_html: Para mais detalhes, leia a <a href="%{terms_path}">política de privacidade</a>.
+      more_details_html: Para mais pormenores, leia a <a href="%{terms_path}">política de privacidade</a>.
       username_available: O seu nome de utilizador ficará novamente disponível
       username_unavailable: O seu nome de utilizador permanecerá indisponível
   disputes:
     strikes:
       action_taken: Ação tomada
       appeal: Recorrer
-      appeal_approved: Esta punição foi alvo de recurso, bem sucedido, pelo que já não é válida
+      appeal_approved: Esta reprimenda foi alvo dum recurso entretanto deferido, pelo que já não é válida
       appeal_rejected: O recurso foi rejeitado
       appeal_submitted_at: Recurso submetido
       appealed_msg: O seu recurso foi submetido. Se ele for aprovado, será notificado.
       appeals:
         submit: Submeter recurso
-      approve_appeal: Aprovar recurso
+      approve_appeal: Deferir recurso
       associated_report: Denúncia associada
       created_at: Data
       description_html: Estas são ações tomadas contra a sua conta e avisos que lhe foram enviados pela equipa de %{instance}.
       recipient: Endereçado a
-      reject_appeal: Rejeitar recurso
+      reject_appeal: Indeferir recurso
       status: 'Publicação #%{id}'
       status_removed: Publicação já eliminada do sistema
       title: "%{action} de %{date}"
       title_actions:
         delete_statuses: Remoção de publicação
         disable: Congelamento da conta
-        mark_statuses_as_sensitive: Marcação das publicações como sensíveis
+        mark_statuses_as_sensitive: Marcação das publicações como problemáticas
         none: Advertência
-        sensitive: Marcação da conta como sensível
+        sensitive: Marcação da conta como problemática
         silence: Limitação da conta
         suspend: Suspensão da conta
-      your_appeal_approved: O seu recurso foi aprovado
+      your_appeal_approved: O seu recurso foi deferido
       your_appeal_pending: Submeteu um recurso
-      your_appeal_rejected: O seu recurso foi rejeitado
+      your_appeal_rejected: O seu recurso foi indeferido
   domain_validator:
     invalid_domain: não é um nome de domínio válido
   errors:
     '400': O pedido que submeteu foi inválido ou mal formulado.
     '403': Não tens a permissão necessária para ver esta página.
-    '404': A página que estás a procurar não existe.
+    '404': A página que procura não existe.
     '406': Esta página não está disponível no formato solicitado.
-    '410': A página que estás a procurar não existe mais.
+    '410': A página que procura já não existe.
     '422':
       content: "A verificação de segurança falhou. \nDesativaste o uso de cookies?"
       title: A verificação de segurança falhou
-    '429': Desacelerado
+    '429': Demasiados pedidos
     '500':
-      content: Desculpe, mas algo correu mal.
+      content: Desculpe, mas algo correu mal da nossa parte.
       title: Esta página não está correta
     '503': A página não pôde ser apresentada devido a uma falha temporária do servidor.
-    noscript_html: Para usar o aplicativo web do Mastodon, por favor ativa o JavaScript. Alternativamente, experimenta um dos <a href="%{apps_path}">apps nativos</a> para o Mastodon na sua plataforma.
+    noscript_html: Para usar a aplicação da teia do Mastodon, por favor active o JavaScript. Em alternativa, experimenta uma das <a href="%{apps_path}">aplicações nativas</a> do Mastodon para a sua plataforma.
   existing_username_validator:
     not_found: não foi possível encontrar um utilizador local com esse nome
     not_found_multiple: não foi possível encontrar %{usernames}
   exports:
     archive_takeout:
       date: Data
-      download: Descarregar o teu arquivo
-      hint_html: Pode pedir um arquivo das suas <strong>publicações e ficheiros de media carregados</strong>. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer software compatível. Pode solicitar um arquivo a cada 7 dias.
+      download: Descarregar o seu arquivo
+      hint_html: Pode pedir um arquivo das suas <strong>publicações e ficheiros de media carregados</strong>. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer programa compatível. Pode solicitar um arquivo a cada 7 dias.
       in_progress: A compilar o seu arquivo...
-      request: Pede o teu arquivo
+      request: Peça o seu arquivo
       size: Tamanho
     blocks: Bloqueaste
-    bookmarks: Itens Salvos
+    bookmarks: Marcadores
     csv: CSV
     domain_blocks: Bloqueios de domínio
     lists: Listas
@@ -1114,8 +1114,8 @@ pt-PT:
   featured_tags:
     add_new: Adicionar nova
     errors:
-      limit: Já atingiste o limite máximo de hashtags
-    hint_html: "<strong>O que são hashtags em destaque?</strong> Elas são exibidas de forma bem visível no seu perfil público e permitem que as pessoas consultem as suas publicações públicas especificamente sob essas hashtags. São uma ótima ferramenta para manter o controlo de trabalhos criativos ou projetos de longo prazo."
+      limit: Já atingiste o limite máximo de etiquetas
+    hint_html: "<strong>O que são etiquetas em destaque?</strong> Exibidas de forma bem visível no seu perfil público, permitem que as pessoas consultem as suas publicações públicas especificamente sob essas etiquetas. São uma óptima ferramenta para dar seguimento a trabalhos criativos ou projectos de longo prazo."
   filters:
     contexts:
       account: Perfis
@@ -1130,7 +1130,7 @@ pt-PT:
       statuses_hint_html: Este filtro aplica-se a publicações individuais selecionadas independentemente de estas corresponderem às palavras-chave abaixo. <a href="%{path}">Reveja ou remova publicações do filtro</a>.
       title: Editar filtros
     errors:
-      deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir deste aplicativo porque se aplicam a mais de um filtro de palavra-chave. Use um aplicativo mais recente ou a interface web.
+      deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir desta aplicação porque se aplicam a mais que um filtro de palavra-chave. Use uma aplicação mais recente ou a interface na teia.
       invalid_context: Inválido ou nenhum contexto fornecido
     index:
       contexts: Filtros em %{contexts}
@@ -1149,17 +1149,17 @@ pt-PT:
         other: "%{count} publicações individuais ocultadas"
       title: Filtros
     new:
-      save: Salvar novo filtro
+      save: Guardar novo filtro
       title: Adicionar novo filtro
     statuses:
       back_to_filter: Voltar ao filtro
       batch:
-        remove: Remover do filtro
+        remove: Retirar do filtro
       index:
         hint: Este filtro aplica-se a publicações individuais selecionadas independentemente de outros critérios. Pode adicionar mais publicações a este filtro através da interface web.
         title: Publicações filtradas
   footer:
-    trending_now: Tendências atuais
+    trending_now: Em alta neste momento
   generic:
     all: Tudo
     all_items_on_page_selected_html:
@@ -1180,8 +1180,8 @@ pt-PT:
       other: Selecione todos os %{count} items que correspondem à sua pesquisa.
     today: hoje
     validation_errors:
-      one: Algo não está correcto. Por favor vê o erro abaixo
-      other: Algo não está correto. Por favor vê os %{count} erros abaixo
+      one: Algo não está correcto. Por favor analise o erro abaixo
+      other: Algo não está bem. Queira analisar os %{count} erros abaixo
   html_validator:
     invalid_markup: 'contém marcação HTML inválida: %{error}'
   imports:
@@ -1194,14 +1194,14 @@ pt-PT:
       overwrite: Escrever por cima
       overwrite_long: Substituir os registos atuais pelos novos
     preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas.
-    success: Os teus dados foram enviados com sucesso e serão processados em breve
+    success: Os teus dados foram enviados correctamente e serão processados em breve
     types:
       blocking: Lista de bloqueio
       bookmarks: Itens salvos
       domain_blocking: Lista de domínios bloqueados
       following: Lista de pessoas que estás a seguir
       muting: Lista de utilizadores silenciados
-    upload: Enviar
+    upload: Carregar
   invites:
     delete: Desativar
     expired: Expirados
@@ -1213,8 +1213,8 @@ pt-PT:
       '604800': 1 semana
       '86400': 1 dia
     expires_in_prompt: Nunca
-    generate: Gerar
-    invited_by: 'Tu foste convidado por:'
+    generate: Gerar hiperligação de convite
+    invited_by: 'Foi convidado por:'
     max_uses:
       one: 1 uso
       other: "%{count} usos"
@@ -1231,28 +1231,28 @@ pt-PT:
     authentication_methods:
       otp: aplicação de autenticação em duas etapas
       password: palavra-passe
-      sign_in_token: código de segurança por e-mail
+      sign_in_token: código de segurança por correio electrónico
       webauthn: chaves de segurança
     description_html: Se vê atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação em duas etapas.
     empty: Sem histórico de autenticação disponível
     failed_sign_in_html: Tentativa falhada de início de sessão com %{method} de %{ip} (%{browser})
-    successful_sign_in_html: Iniciada sessão com sucesso com %{method} de %{ip} (%{browser})
+    successful_sign_in_html: Sessão correctamente iniciada com %{method} de %{ip} (%{browser})
     title: Histórico de autenticação
   media_attachments:
     validations:
       images_and_video: Não é possível anexar um vídeo a uma publicação que já contém imagens
-      not_ready: Não é possível anexar arquivos que não terminaram de ser processados. Tente novamente daqui a pouco!
-      too_many: Não é possível anexar mais de 4 arquivos
+      not_ready: Não é possível anexar ficheiros que ainda não acabaram de ser processados. Tente outra vez daqui a pouco!
+      too_many: Não é possível anexar mais de 4 ficheiros
   migrations:
-    acct: username@domain da nova conta
+    acct: Mudou-se para
     cancel: Cancelar redirecionamento
     cancel_explanation: Cancelar o redirecionamento irá reativar a sua conta atual, mas não trará de volta os seguidores que foram migrados para essa conta.
-    cancelled_msg: Cancelou com sucesso o redireccionamento.
+    cancelled_msg: Cancelou correctamente o redireccionamento.
     errors:
       already_moved: é a mesma conta para a qual já migrou
-      missing_also_known_as: não está a referenciar esta conta
+      missing_also_known_as: não é um pseudónimo dessa conta
       move_to_self: não pode ser conta atual
-      not_found: não pode ser encontrado
+      not_found: não foi encontrado
       on_cooldown: Você está no período de espera
     followers_count: Seguidores no momento da migração
     incoming_migrations: A migrar de uma conta diferente
@@ -1281,7 +1281,7 @@ pt-PT:
     carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha silenciado.
     copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as suas notas anteriores sobre ele:'
   navigation:
-    toggle_menu: Abrir/fechar menu
+    toggle_menu: Alternar o menu
   notification_mailer:
     admin:
       report:
@@ -1289,9 +1289,9 @@ pt-PT:
       sign_up:
         subject: "%{name} inscreveu-se"
     favourite:
-      body: 'O teu post foi adicionado aos favoritos por %{name}:'
-      subject: "%{name} adicionou o teu post aos favoritos"
-      title: Novo favorito
+      body: 'A sua publicação foi adicionada aos marcadores por %{name}:'
+      subject: "%{name} adicionou a sua publicação aos marcadores"
+      title: Novo marcador
     follow:
       body: "%{name} é teu seguidor!"
       subject: "%{name} começou a seguir-te"
@@ -1307,18 +1307,18 @@ pt-PT:
       subject: "%{name} mencionou-te"
       title: Nova menção
     poll:
-      subject: Uma votação realizada por %{name} terminou
+      subject: A sondagem de %{name} encerrou
     reblog:
-      body: 'O teu post foi partilhado por %{name}:'
-      subject: "%{name} partilhou o teu post"
-      title: Nova partilha
+      body: 'A sua publicação foi reforçada por %{name}:'
+      subject: "%{name} reforçou a sua publicação"
+      title: Novo reforço
     status:
       subject: "%{name} acabou de publicar"
     update:
       subject: "%{name} editou uma publicação"
   notifications:
     email_events: Eventos para notificações por e-mail
-    email_events_hint: 'Selecione os eventos para os quais deseja receber notificações:'
+    email_events_hint: 'Selecione os casos para os quais deseja receber notificações:'
     other_settings: Outras opções de notificações
   number:
     human:
@@ -1334,8 +1334,8 @@ pt-PT:
     code_hint: Introduz o código gerado pela tua aplicação de autenticação para confirmar
     description_html: Se ativar a <strong>autenticação em duas etapas</strong>, para entrar na sua conta terá de ter consigo o seu telefone, que vai gerar os tokens necessários à validação do seu acesso.
     enable: Ativar
-    instructions_html: "<strong>Digitalize este código QR no Google Authenticator ou num aplicativo TOTP similar no seu telefone</strong>. A partir de agora, esse aplicativo irá gerar tokens que você terá que introduzir para aceder à sua conta."
-    manual_instructions: 'Se você não consegue digitalizar o código QR e precisa introduzi-lo manualmente, aqui está o código em texto:'
+    instructions_html: "<strong>Digitalize este código QR no Google Authenticator ou numa aplicação TOTP semelhante a partir do seu telemóvel</strong>. A partir desse momento, essa aplicação irá gerar tokens que terá que inserir para aceder à sua conta."
+    manual_instructions: 'Se não conseguir digitalizar o código QR e precisar de o inserir manualmente, eis o código por extenso:'
     setup: Configurar
     wrong_code: O código introduzido é inválido! A hora do servidor e a hora do dispositivo estão corretos?
   pagination:
@@ -1349,7 +1349,7 @@ pt-PT:
       already_voted: Tu já votaste nesta sondagem
       duplicate_options: contém itens duplicados
       duration_too_long: está demasiado à frente no futuro
-      duration_too_short: é demasiado cedo
+      duration_too_short: é demasiado em cima da hora
       expired: A sondagem já terminou
       invalid_choice: A opção de voto escolhida não existe
       over_character_limit: não pode ter mais do que %{max} caracteres cada um
@@ -1363,7 +1363,7 @@ pt-PT:
     title: Política de Privacidade
   reactions:
     errors:
-      limit_reached: Limite de reações diferentes atingido
+      limit_reached: Alcançado limite de reações diferentes
       unrecognized_emoji: não é um emoji reconhecido
   relationships:
     activity: Atividade da conta
@@ -1383,7 +1383,7 @@ pt-PT:
     remove_selected_follows: Deixar de seguir os utilizadores selecionados
     status: Estado da conta
   remote_follow:
-    missing_resource: Não foi possível achar a URL de redirecionamento para sua conta
+    missing_resource: Não foi possível encontrar o URL de redireccionamento para a sua conta
   reports:
     errors:
       invalid_rules: não faz referência a regras válidas
@@ -1429,13 +1429,13 @@ pt-PT:
       firefox_os: SO Firefox
       ios: iOS
       linux: Linux
-      mac: Mac
-      other: Plataforma desconhecida
+      mac: macOS
+      other: plataforma desconhecida
       windows: Windows
       windows_mobile: Windows Mobile
       windows_phone: Windows Phone
     revoke: Revogar
-    revoke_success: Sessão revogada com sucesso
+    revoke_success: Sessão correctamente revogada
     title: Sessões
     view_authentication_history: Ver histórico de autenticação da sua conta
   settings:
@@ -1443,13 +1443,13 @@ pt-PT:
     account_settings: Definições da conta
     aliases: Pseudónimos da conta
     appearance: Aspecto
-    authorized_apps: Aplicativos autorizados
+    authorized_apps: Aplicações autorizadas
     back: Voltar ao Mastodon
     delete: Eliminação da conta
     development: Desenvolvimento
     edit_profile: Editar perfil
     export: Exportar dados
-    featured_tags: Hashtags destacadas
+    featured_tags: Etiquetas destacadas
     import: Importar
     import_and_export: Importar e exportar
     migrate: Migração de conta
@@ -1473,22 +1473,22 @@ pt-PT:
       video:
         one: "%{count} vídeo"
         other: "%{count} vídeos"
-    boosted_from_html: Partilhadas de %{acct_link}
+    boosted_from_html: Reforçado por %{acct_link}
     content_warning: 'Aviso de conteúdo: %{warning}'
-    default_language: Mesmo do idioma da interface
+    default_language: A mesma língua que a da interface
     disallowed_hashtags:
-      one: 'continha uma hashtag proibida: %{tags}'
+      one: 'continha uma #etiqueta proibida: %{tags}'
       other: 'continha as hashtags proibidas: %{tags}'
     edited_at_html: Editado em %{date}
     errors:
       in_reply_not_found: A publicação a que está a tentar responder parece não existir.
-    open_in_web: Abrir no browser
+    open_in_web: Abrir na Teia
     over_character_limit: limite de caracter excedeu %{max}
     pin_errors:
-      direct: Publicações visíveis apenas para utilizadores mencionados não podem ser fixados
-      limit: Já fixaste a quantidade máxima de publicações
-      ownership: Posts de outras pessoas não podem ser fixados
-      reblog: Não podes fixar uma partilha
+      direct: Publicações visíveis apenas para utilizadores mencionados não podem ser afixadas
+      limit: Já afixaste a quantidade máxima de publicações
+      ownership: Não podem ser afixadas publicações doutras pessoas
+      reblog: Não pode afixar um reforço
     poll:
       total_people:
         one: "%{count} pessoa"
@@ -1505,33 +1505,33 @@ pt-PT:
     title: '%{name}: "%{quote}"'
     visibilities:
       direct: Direto
-      private: Mostrar apenas para seguidores
-      private_long: Mostrar apenas para seguidores
+      private: Só para seguidores
+      private_long: Mostrar só aos seguidores
       public: Público
       public_long: Todos podem ver
-      unlisted: Público, mas não mostre no timeline público
-      unlisted_long: Todos podem ver, porém não será postado nas timelines públicas
+      unlisted: Não inventariado
+      unlisted_long: Todos podem ver, mas não será inventariado nas cronologias públicas
   statuses_cleanup:
     enabled: Apagar publicações antigas automaticamente
-    enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um limite de idade específico, a não ser que correspondam a uma das exceções abaixo
+    enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um certo limite de tempo, a não ser que correspondam a uma das seguintes excepções
     exceptions: Exceções
-    explanation: Como excluir publicações é uma operação cara, isto é realizado lentamente ao longo do tempo, quando o servidor não está ocupado de outra forma. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade.
-    ignore_favs: Ignorar favoritos
-    ignore_reblogs: Ignorar partilhas
+    explanation: Como apagar publicações é uma operação custosa, isto é feito lentamente ao longo do tempo, quando o servidor não está ocupado. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade definido.
+    ignore_favs: Ignorar marcadores
+    ignore_reblogs: Ignorar reforços
     interaction_exceptions: Exceções baseadas em interações
     interaction_exceptions_explanation: Note que não há garantia de que as publicações sejam excluídas se ficarem abaixo do limite de favoritos ou partilhas após as ter verificado uma vez.
     keep_direct: Manter mensagens diretas
     keep_direct_hint: Não apaga nenhuma das suas mensagens diretas
     keep_media: Manter publicações com anexos de multimédia
-    keep_media_hint: Não exclui nenhuma das suas publicações com multimédia anexada
-    keep_pinned: Manter publicações fixadas
-    keep_pinned_hint: Não apagar nenhuma das suas publicações fixadas
-    keep_polls: Manter enquetes
-    keep_polls_hint: Não apaga nenhuma das suas enquetes
+    keep_media_hint: Não apaga nenhuma das suas publicações com multimédia anexada
+    keep_pinned: Manter publicações afixadas
+    keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas
+    keep_polls: Manter sondagens
+    keep_polls_hint: Não apaga nenhuma das suas sondagens
     keep_self_bookmark: Manter as publicações que guardou
     keep_self_bookmark_hint: Não apaga as suas próprias publicações se as tiver guardado
-    keep_self_fav: Manter as publicações que gostou
-    keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver favoritado
+    keep_self_fav: Manter as publicações que marcou
+    keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado
     min_age:
       '1209600': 2 semanas
       '15778476': 6 meses
@@ -1542,22 +1542,22 @@ pt-PT:
       '63113904': 2 anos
       '7889238': 3 meses
     min_age_label: Limite de idade
-    min_favs: Manter as publicações favoritas mais de
+    min_favs: Manter pelo menos as publicações dos marcadores
     min_favs_hint: Não apaga nenhuma das suas publicações que tenha recebido mais do que esta quantidade de favoritos. Deixe em branco para apagar as publicações, independentemente do número de favoritos
-    min_reblogs: Manter as publicações partilhadas mais de
+    min_reblogs: Manter as publicações reforçadas mais de
     min_reblogs_hint: Não apaga nenhuma das suas publicações que tenha sido partilhada mais do que este número de vezes. Deixe em branco para apagar as publicações, independentemente do número de partilhas
   stream_entries:
-    pinned: Toot fixado
-    reblogged: partilhado
-    sensitive_content: Conteúdo sensível
+    pinned: Publicação afixada
+    reblogged: reforçada
+    sensitive_content: Conteúdo problemático
   strikes:
     errors:
-      too_late: É tarde demais para apelar desta punição
+      too_late: É tarde demais para recorrer desta reprimenda
   tags:
     does_not_match_previous_name: não coincide com o nome anterior
   themes:
     contrast: Mastodon (Elevado contraste)
-    default: Mastodon
+    default: Mastodon (Escuro)
     mastodon-light: Mastodon (Claro)
   time:
     formats:
@@ -1566,32 +1566,32 @@ pt-PT:
       time: "%H:%M"
   two_factor_authentication:
     add: Adicionar
-    disable: Desativar
-    disabled_success: Autenticação em duas etapas desativada com sucesso
+    disable: Desactivar autenticação por dois factores (2FA)
+    disabled_success: Autenticação em duas etapas correctamente desactivada
     edit: Editar
     enabled: A autenticação em duas etapas está ativada
-    enabled_success: Autenticação em duas etapas ativada com sucesso
+    enabled_success: Autenticação em duas etapas correctamente activada
     generate_recovery_codes: Gerar códigos para recuperar conta
-    lost_recovery_codes: Códigos de recuperação permite que você recupere o acesso a sua conta se você perder seu telefone. Se você perder os códigos de recuperação, você pode regera-los aqui. Seus códigos antigos serão invalidados.
+    lost_recovery_codes: Os códigos de recuperação permitem que recupere o acesso à sua conta caso perca o seu telemóvel. Se perder os códigos de recuperação, pode criar uns novos aqui. Os seus códigos antigos serão revogados.
     methods: Métodos de autenticação em duas etapas
     otp: Aplicação de autenticação
     recovery_codes: Cópia de segurança dos códigos de recuperação
-    recovery_codes_regenerated: Códigos de recuperação foram gerados com sucesso
-    recovery_instructions_html: Se tu alguma vez perderes o teu smartphone, to poderás usar um dos códigos de recuperação para voltares a ter acesso à tua conta. <strong>Mantém os códigos de recuperação seguros</strong>. Por exemplo, tu podes imprimi-los e guardá-los junto a outros documentos importantes.
+    recovery_codes_regenerated: Códigos de recuperação foram correctamente gerados
+    recovery_instructions_html: Se perder o seu telemóvel, poderá usar um dos códigos de recuperação para voltar a ter acesso à sua conta. <strong>Guarde os códigos de recuperação em lugar seguro</strong>. Por exemplo, pode imprimi-los e guardá-los junto doutros documentos importantes.
     webauthn: Chaves de segurança
   user_mailer:
     appeal_approved:
       action: Ir para a sua conta
-      explanation: O recurso à punição contra a sua conta de %{strike_date}, o qual submeteu a %{appeal_date}, foi aprovado. A sua conta encontra-se novamente em situação regular.
-      subject: O seu recurso de %{date} foi aprovado
-      title: Recurso aprovado
+      explanation: O recurso à reprimenda contra a sua conta de %{strike_date}, enviado a %{appeal_date}, foi deferido. A sua conta encontra-se novamente em situação regular.
+      subject: O seu recurso de %{date} foi deferido
+      title: Recurso deferido
     appeal_rejected:
-      explanation: O recurso à punição contra a sua conta de %{strike_date}, o qual submeteu a %{appeal_date}, foi rejeitado.
-      subject: O seu recurso de %{date} foi rejeitado
-      title: Recurso rejeitado
+      explanation: O recurso à punição contra a sua conta de %{strike_date}, submetido em %{appeal_date}, foi indeferido.
+      subject: O seu recurso de %{date} foi indeferido
+      title: Recurso indeferido
     backup_ready:
-      explanation: Pediste uma cópia completa da tua conta Mastodon. Ela já está pronta para descarregares!
-      subject: O teu arquivo está pronto para descarregar
+      explanation: Pediu uma cópia integral de salvaguarda da sua conta Mastodon. Já está pronta para descarregar!
+      subject: O seu arquivo está pronto para descarregar
       title: Arquivo de ficheiros
     suspicious_sign_in:
       change_password: alterar a sua palavra-passe
@@ -1636,7 +1636,7 @@ pt-PT:
       edit_profile_step: Pode personalizar o seu perfil carregando uma imagem de perfil, alterando o nome a exibir, entre outras opções. Pode optar por rever os novos seguidores antes de estes o poderem seguir.
       explanation: Aqui estão algumas dicas para começar
       final_action: Começar a publicar
-      final_step: 'Comece a publicar! Mesmo sem seguidores, as suas mensagens públicas podem ser vistas por outros, por exemplo, na cronologia local e em hashtags. Pode querer apresentar-se utilizando a hashtag #introduções ou #introductions.'
+      final_step: 'Comece a publicar! Mesmo sem seguidores, as suas mensagens públicas podem ser vistas por outros, como por exemplo na cronologia local e em etiquetas. Pense em apresentar-se usando a etiqueta #apresentações.'
       full_handle: O seu nome completo
       full_handle_hint: Isto é o que tem de facultar aos seus amigos para que eles lhe possam enviar mensagens ou seguir a partir de outra instância.
       subject: Bem-vindo ao Mastodon
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index e955afc30..9e0b3d54a 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -470,6 +470,11 @@ ru:
       unsuppress: Восстановить рекомендацию
     instances:
       availability:
+        description_html:
+          few: Если доставка в домен завершается сбоем <strong>%{count} дня</strong>, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка <em>из</em> домена.
+          many: Если доставка в домен завершается сбоем <strong>%{count} дней</strong>, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка <em>из</em> домена.
+          one: Если доставка в домен завершается сбоем <strong>%{count} день</strong>, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка <em>из</em> домена.
+          other: Если доставка в домен завершается сбоем на протяжении <strong>%{count} различных дней</strong>, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка <em>из</em> домена.
         failure_threshold_reached: Порог отказа достиг %{date}.
         failures_recorded:
           few: Попытки неудачны уже %{count} дня.
@@ -838,6 +843,7 @@ ru:
       statuses:
         allow: Разрешить пост
         allow_account: Разрешить автора
+        description_html: Это посты, которыми на вашем сервере в данный момент часто делятся и предпочитают, что может помочь вашим новым и постоянным пользователям найти больше людей, чтобы на них подписаться. Посты не будут отображаться публично, пока вы не одобрите автора, а автор не разрешит предлагать его аккаунт другим. Вы также можете разрешить или отклонить отдельные сообщения.
         disallow: Запретить пост
         disallow_account: Запретить автора
         no_status_selected: Тенденции не были изменены, так как ни одна запись не была выбрана
@@ -1005,6 +1011,7 @@ ru:
       email_settings_hint_html: Письмо с подтверждением было отправлено на %{email}. Если адрес указан неправильно, его можно поменять в настройках учётной записи.
       title: Установка
     sign_in:
+      preamble_html: Войдите, используя ваши учётные данные <strong>%{domain}</strong>. Если ваша учётная запись размещена на другом сервере, вы не сможете здесь войти.
       title: Войти в %{domain}
     sign_up:
       preamble: С учётной записью на этом сервере Mastodon вы сможете следить за любым другим пользователем в сети, независимо от того, где размещён их аккаунт.
@@ -1196,6 +1203,16 @@ ru:
     trending_now: Актуально сейчас
   generic:
     all: Любой
+    all_items_on_page_selected_html:
+      few: "<strong>%{count}</strong> элемента выбрано на странице."
+      many: "<strong>%{count}</strong> элементов выбрано на странице."
+      one: "<strong>%{count}</strong> элемент выбран на странице."
+      other: Все <strong>%{count}</strong> элементов выбраны на странице.
+    all_matching_items_selected_html:
+      few: Выбрано <strong>%{count}</strong> элемента, соответствующих вашему запросу.
+      many: Выбрано <strong>%{count}</strong> элементов, соответствующих вашему запросу.
+      one: Выбран <strong>%{count}</strong> элемент, соответствующий вашему запросу.
+      other: Выбраны все <strong>%{count}</strong> элементов, соответствующих вашему запросу.
     changes_saved_msg: Изменения успешно сохранены!
     copy: Копировать
     delete: Удалить
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 4be3716bf..36741108f 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -34,7 +34,7 @@ bg:
         avatar: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела
         bot: Покажете на останалите потребители, че акаунтът извършва предимно автоматизирани действия, които не се следят
         context: Един или повече контексти, към които да се приложи филтърът
-        current_password: От съображения за сигуроност, въведете паролата на текущия профил
+        current_password: От съображения за сигурност, въведете паролата на текущия акаунт
         current_username: Въведете потребителското име на текущия профил, за да потвърдите
         digest: Изпраща се само след дълъг период на бездействие и само ако сте получили лични съобщения във ваше отсъствие
         discoverable: Позволяване на странници да откриват вашия акаунт чрез препоръки, нашумели и други неща
@@ -48,7 +48,7 @@ bg:
         password: Използвайте поне 8 символа
         phrase: Ще съвпадне без значение дали са главни или малки букви, или ако е предупреждение към публикация
         scopes: Указва до кои API има достъп приложението. Ако изберете диапазон от най-високо ниво, няма нужда да избирате индивидуални.
-        setting_aggregate_reblogs: Скриване на нови споделяния за публикации, които са били споделени наскоро (засяга само новополучени споделяния)
+        setting_aggregate_reblogs: Без показване на нови подсилвания за публикации, които са неотдавна подсилени (засяга само новополучени подсилвания)
         setting_always_send_emails: Обикновено известия по имейл няма да бъдат изпратени при активно използване на Mastodon
         setting_default_sensitive: Деликатната мултимедия е скрита по подразбиране и може да се разкрие с едно щракване
         setting_display_media_default: Скриване на мултимедия отбелязана като деликатна
@@ -95,7 +95,7 @@ bg:
         trendable_by_default: Прескачане на ръчния преглед на нашумяло съдържание. Отделни елементи могат да бъдат премахвани от нашумели в последствие.
         trends: В секцията Нашумели се показват публикации, хаштагове и новини, набрали популярност на вашия сървър.
       form_challenge:
-        current_password: Навлизате в защитена зона
+        current_password: Влизате в сигурна зона
       imports:
         data: CSV файл, експортиран от друга инстанция на Mastodon
       invite_request:
@@ -106,8 +106,8 @@ bg:
         ip: Въведете адреси IPv4 или IPv6. Може да блокирате цели обхвати с помощта на синтаксиса CIDR. Внимавайте да не се самозаключите!
         severities:
           no_access: Блокиране на достъп до всички ресурси
-          sign_up_block: Забрана на нови регистрации
-          sign_up_requires_approval: Ще трябва да одобрите новопостъпващи регистрации
+          sign_up_block: Нови регистрации няма да са възможни
+          sign_up_requires_approval: Новите регистрации ще изискват одобрението ви
         severity: Изберете какво да се случва със заявките от този IP
       rule:
         text: Опишете правило или изискване за потребителите на този сървър. Опитайте се да го направите кратко и просто
@@ -159,7 +159,7 @@ bg:
         starts_at: Начало на събитието
         text: Оповестяване
       appeal:
-        text: Обяснете защо това решение трябва да се отхвърли
+        text: Обяснете защо решението трябва да се отхвърли
       defaults:
         autofollow: Поканете за следване на акаунта ви
         avatar: Аватар
@@ -188,10 +188,10 @@ bg:
         password: Парола
         phrase: Ключова дума или фраза
         setting_advanced_layout: Включване на разширен уеб интерфейс
-        setting_aggregate_reblogs: Групиране на споделянията в инфопотока
-        setting_always_send_emails: Винаги да се изпращат известия по имейл
+        setting_aggregate_reblogs: Групиране на подсилванията в часовите оси
+        setting_always_send_emails: Винаги изпращане на известия по имейл
         setting_auto_play_gif: Самопускащи се анимирани гифчета
-        setting_boost_modal: Показване на диалога за потвърждение преди споделяне
+        setting_boost_modal: Показване на прозорец за потвърждение преди подсилване
         setting_crop_images: Изрязване на образи в неразгънати публикации до 16x9
         setting_default_language: Език на публикуване
         setting_default_privacy: Поверителност на публикуване
@@ -216,12 +216,12 @@ bg:
         severity: Тежест
         sign_in_token_attempt: Код за сигурност
         title: Заглавие
-        type: Тип на импортиране
+        type: Тип на внасяне
         username: Потребителско име
         username_or_email: Потребителско име или имейл
         whole_word: Цяла дума
       email_domain_block:
-        with_dns_records: Включване не MX записи и IP на домейна
+        with_dns_records: Включване не записи MX и IP-та на домейна
       featured_tag:
         name: Хаштаг
       filters:
@@ -251,7 +251,7 @@ bg:
         thumbnail: Миниобраз на сървъра
         timeline_preview: Позволяване на неупълномощен достъп до публични часови оси
         trendable_by_default: Без преглед на нашумели
-        trends: Включване на нашумели
+        trends: Включване на налагащи се
       interactions:
         must_be_follower: Блокирай известия от не-последователи
         must_be_following: Блокиране на известия от неследваните
@@ -264,19 +264,19 @@ bg:
         comment: Коментар
         ip: IP адрес
         severities:
-          no_access: Блокиране на адреса
+          no_access: Блокиране на достъпа
           sign_up_block: Блокиране на регистрации
           sign_up_requires_approval: Ограничаване на регистриране
         severity: Правило
       notification_emails:
         appeal: Някой възразява срещу решение на модератора
         digest: Изпращай извлечения на съобщенията
-        favourite: Някой маркира ваша публикация като любима
+        favourite: Някой направи ваша публикация като любима
         follow: Някой ви последва
         follow_request: Някой пожела да ви последва
         mention: Някой ви спомена
         pending_account: Новите акаунти трябва да се прегледат
-        reblog: Изпращай e-mail, когато някой сподели твоя публикация
+        reblog: Някой подсили ваша публикация
         report: Новият доклад е подаден
         trending_tag: Изискване на преглед за новонашумели
       rule:
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index 977fe3dbc..8e5fd73fa 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -10,15 +10,15 @@ ca:
         text: Pots usar totes les sintaxis, com ara URL, etiquetes i mencions
         title: Opcional. No és visible per al destinatari
       admin_account_action:
-        include_statuses: L'usuari veurà quines publicacions han provocat que s'hagi moderat o avisat
+        include_statuses: L'usuari veurà quins tuts han causat l'acció de moderació o avís
         send_email_notification: L'usuari rebrà una explicació del que ha passat amb el seu compte
-        text_html: Opcional. En les publicacions, pots usar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per a estalviar temps
+        text_html: Opcional. En els tuts, pots usar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per a estalviar temps
         type_html: Tria què fer amb <strong>%{acct}</strong>
         types:
           disable: Evita que l'usuari faci servir el seu compte, però no n'esborris ni amaguis el contingut.
           none: Fes servir això per a enviar un avís a l'usuari sense desencadenar cap altra acció.
           sensitive: Obliga a marcar tots els fitxers multimèdia adjunts com a sensibles.
-          silence: Evita que l'usuari pugui publicar amb visibilitat pública, amagar les seves publicacions i les notificacions d'usuaris que no el segueixin.
+          silence: Evita que l'usuari pugui publicar amb visibilitat pública, amagar els seus tuts i les notificacions d'usuaris que no el segueixin.
           suspend: Evita qualsevol interacció des de o cap a aquest compte i esborra els seus continguts. Reversible en un termini de 30 dies.
         warning_preset_id: Opcional. Encara pots afegir text personalitzat al final de la configuració predefinida
       announcement:
@@ -26,7 +26,7 @@ ca:
         ends_at: Opcional. En aquest moment, l'anunci no es publicarà automàticament
         scheduled_at: Deixa-ho en blanc per a publicar l’anunci immediatament
         starts_at: Opcional. En cas que el teu anunci estigui vinculat a un interval de temps específic
-        text: Pots fer servir la sintaxi de publicacions. Tingues en compte l’espai que l’anunci ocuparà a la pantalla de l’usuari
+        text: Pots fer servir la sintaxi dels tuts. Tingues en compte l’espai que l’anunci ocuparà a la pantalla de l’usuari
       appeal:
         text: Només pots emetre una apel·lació per cada acció
       defaults:
@@ -42,13 +42,13 @@ ca:
         fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil
         header: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px
         inbox_url: Copia l'URL de la pàgina principal del relay que vols usar
-        irreversible: Les publicacions filtrades desapareixeran de manera irreversible, fins i tot si el filtre s'elimina més tard
+        irreversible: Els tuts filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard
         locale: L'idioma de la interfície d’usuari, els correus i les notificacions push
         locked: Controla manualment qui et pot seguir, aprovant sol·licituds
         password: Utilitza com a mínim 8 caràcters
         phrase: Es combinarà independentment del format en el text o l'avís de contingut del tut
         scopes: API permeses per a accedir a l'aplicació. Si selecciones un àmbit de nivell superior, no cal que en seleccionis un d'individual.
-        setting_aggregate_reblogs: No mostris els nous impulsos de les publicacions que ja s'han impulsat recentment (només afecta els nous impulsos rebuts)
+        setting_aggregate_reblogs: No mostra els nous impulsos dels tuts que ja s'han impulsat recentment (només afecta als impulsos nous rebuts)
         setting_always_send_emails: Normalment, no s'enviarà cap notificació per correu electrònic mentre facis servir Mastodon
         setting_default_sensitive: El contingut sensible està ocult per defecte i es pot mostrar fent-hi clic
         setting_display_media_default: Amaga el contingut gràfic marcat com a sensible
@@ -56,7 +56,7 @@ ca:
         setting_display_media_show_all: Mostra sempre el contingut gràfic
         setting_hide_network: Qui segueixes i els que et segueixen no es mostraran en el teu perfil
         setting_noindex: Afecta el teu perfil públic i les pàgines d'estat
-        setting_show_application: L'aplicació que fas servir per a publicar es mostrarà en la vista detallada de les publicacions
+        setting_show_application: L'aplicació que fas servir per a publicar es mostrarà a la vista detallada dels teus tuts
         setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però n'enfosqueixen els detalls
         setting_use_pending_items: Amaga les actualitzacions de la línia de temps després de fer un clic, en lloc de desplaçar-les automàticament
         username: El teu nom d'usuari serà únic a %{domain}
@@ -77,7 +77,7 @@ ca:
         backups_retention_period: Manté els arxius d'usuari generats durant el nombre de dies especificats.
         bootstrap_timeline_accounts: Aquests comptes es fixaran en la part superior de les recomanacions de seguiment dels nous usuaris.
         closed_registrations_message: Mostrat quan el registres estan tancats
-        content_cache_retention_period: Les publicacions d'altres servidors se suprimiran després del nombre de dies especificat quan s'estableix un valor positiu. Això pot ser irreversible.
+        content_cache_retention_period: Els tuts d'altres servidors se suprimiran després del nombre de dies especificat quan s'estableix un valor positiu. Això pot ser irreversible.
         custom_css: Pots aplicar estils personalitzats en la versió web de Mastodon.
         mascot: Anul·la la il·lustració en la interfície web avançada.
         media_cache_retention_period: Els fitxers multimèdia descarregats s'esborraran després del nombre de dies especificat quan el valor configurat és positiu, i tornats a descarregats sota demanda.
@@ -91,9 +91,9 @@ ca:
         site_title: Com pot la gent referir-se al teu servidor a part del seu nom de domini.
         theme: El tema que els visitants i els nous usuaris veuen.
         thumbnail: Una imatge d'aproximadament 2:1 que es mostra al costat la informació del teu servidor.
-        timeline_preview: Els visitants amb sessió no iniciada seran capaços de navegar per les publicacions més recents en el teu servidor.
+        timeline_preview: Els visitants amb sessió no iniciada seran capaços de navegar per els tuts més recents en el teu servidor.
         trendable_by_default: Omet la revisió manual del contingut en tendència. Els articles individuals poden encara ser eliminats després del fet.
-        trends: Les tendències mostren quines publicacions, etiquetes i notícies estan guanyant força al vostre servidor.
+        trends: Les tendències mostren quins tuts, etiquetes i notícies estan guanyant força en el teu servidor.
       form_challenge:
         current_password: Estàs entrant en una àrea segura
       imports:
@@ -117,7 +117,7 @@ ca:
       tag:
         name: Només pots canviar la caixa de les lletres, per exemple, per fer-la més llegible
       user:
-        chosen_languages: Quan estigui marcat, només es mostraran les publicacions en les llengües seleccionades en les línies de temps públiques
+        chosen_languages: Quan estigui marcat, només es mostraran els tuts de les llengües seleccionades en les línies de temps públiques
         role: El rol controla quines permissions té l'usuari
       user_role:
         color: Color que s'usarà per al rol a tota la interfície d'usuari, com a RGB en format hexadecimal
@@ -141,7 +141,7 @@ ca:
         text: Text predefinit
         title: Títol
       admin_account_action:
-        include_statuses: Inclou les publicacions reportades en el correu electrònic
+        include_statuses: Inclou tuts reportats en el correu electrònic
         send_email_notification: Notifica l'usuari per correu electrònic
         text: Avís personalitzat
         type: Acció
@@ -192,9 +192,9 @@ ca:
         setting_always_send_emails: Envia'm sempre notificacions per correu electrònic
         setting_auto_play_gif: Reprodueix automàticament els GIF animats
         setting_boost_modal: Mostra la finestra de confirmació abans d'impulsar
-        setting_crop_images: Retalla les imatges en publicacions no ampliades a 16x9
-        setting_default_language: Idioma de les publicacions
-        setting_default_privacy: Privacitat de les publicacions
+        setting_crop_images: Retalla les imatges en tuts no ampliats a 16x9
+        setting_default_language: Llengua dels tuts
+        setting_default_privacy: Privacitat dels tuts
         setting_default_sensitive: Marcar sempre el contingut gràfic com a sensible
         setting_delete_modal: Mostra la finestra de confirmació abans d'esborrar un tut
         setting_disable_swiping: Desactiva les animacions
@@ -202,11 +202,11 @@ ca:
         setting_display_media_default: Per defecte
         setting_display_media_hide_all: Amaga-ho tot
         setting_display_media_show_all: Mostra-ho tot
-        setting_expand_spoilers: Desplega sempre les publicacions marcades amb advertències de contingut
+        setting_expand_spoilers: Desplega sempre els tuts marcats amb advertències de contingut
         setting_hide_network: Amaga la teva xarxa
         setting_noindex: Desactiva la indexació dels motors de cerca
         setting_reduce_motion: Redueix el moviment de les animacions
-        setting_show_application: Revelar l'aplicació utilitzada per fer les publicacions
+        setting_show_application: Revela l'aplicació utilitzada per enviar tuts
         setting_system_font_ui: Usa la lletra predeterminada del sistema
         setting_theme: Tema del lloc
         setting_trends: Mostra les tendències d'avui
@@ -285,7 +285,7 @@ ca:
         listable: Permet que aquesta etiqueta aparegui en les cerques i en el directori de perfils
         name: Etiqueta
         trendable: Permet que aquesta etiqueta aparegui en les tendències
-        usable: Permetre a les publicacions emprar aquesta etiqueta
+        usable: Permet als tuts emprar aquesta etiqueta
       user:
         role: Rol
       user_role:
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 5e8a5b3a9..7bcb55b5f 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -13,7 +13,7 @@ de:
         include_statuses: Die Person sieht, welche Beiträge die Moderationsmaßnahme oder Warnung verursacht haben
         send_email_notification: Benutzer*in wird eine Erklärung erhalten, was mit dem Konto geschehen ist
         text_html: Optional. Du kannst Beitragssyntax verwenden. Du kannst <a href="%{path}">Warnvorlagen hinzufügen</a>, um Zeit zu sparen
-        type_html: Wähle aus, was du mit <strong>%{acct}</strong> machen möchtest
+        type_html: Wähle aus, wie mit <strong>%{acct}</strong> vorgegangen werden soll
         types:
           disable: Benutzer*in daran hindern, das Konto verwenden zu können, aber die Inhalte nicht löschen oder ausblenden.
           none: Verwende dies, um dem Account eine Warnung zu schicken, ohne dabei eine andere Aktion vorzunehmen.
@@ -43,7 +43,7 @@ de:
         header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert
         inbox_url: Kopiere die URL von der Startseite des gewünschten Relays
         irreversible: Bereinigte Beiträge verschwinden unwiderruflich für dich, auch dann, wenn dieser Filter zu einem späteren wieder entfernt wird
-        locale: Die Sprache der Oberfläche, E-Mails und Push-Benachrichtigungen
+        locale: Die Sprache der Benutzeroberfläche, E-Mails und Push-Benachrichtigungen
         locked: Wer dir folgen und deine Inhalte sehen möchte, muss dein Follower sein und dafür um deine Erlaubnis bitten
         password: Verwende mindestens 8 Zeichen
         phrase: Wird unabhängig von der Groß- und Kleinschreibung im Text oder der Inhaltswarnung eines Beitrags abgeglichen
@@ -95,17 +95,17 @@ de:
         trendable_by_default: Manuelles Überprüfen angesagter Inhalte überspringen. Einzelne Elemente können später noch aus den Trends entfernt werden.
         trends: Trends zeigen, welche Beiträge, Hashtags und Nachrichten auf deinem Server immer beliebter werden.
       form_challenge:
-        current_password: Du betrittst einen sicheren Bereich
+        current_password: Du betrittst einen gesicherten Bereich
       imports:
-        data: CSV-Datei, die aus einem anderen Mastodon-Server exportiert wurde
+        data: CSV-Datei, exportiert von einem anderen Mastodon-Server
       invite_request:
-        text: Dies wird uns helfen deine Anmeldungsanfrage besser zu verarbeiten
+        text: Dies wird uns bei der Überprüfung deiner Anmeldung behilflich sein
       ip_block:
         comment: Optional. Zur Erinnerung, weshalb du diese Regel eingeführt hast.
         expires_in: IP-Adressen sind eine begrenzte Ressource. Sie können außerdem auf viele Computer aufgeteilt sein und auch die Zuordnungen ändern sich. Deshalb werden unbestimmte IP-Blöcke nicht empfohlen.
-        ip: Gib eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht aussperrst!
+        ip: Gib eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht selbst aussperrst!
         severities:
-          no_access: Zugriff auf alle Ressourcen blockieren
+          no_access: Blockiere Zugriff auf alle Ressourcen
           sign_up_block: Neue Registrierungen werden nicht möglich sein
           sign_up_requires_approval: Neue Registrierungen müssen genehmigt werden
         severity: Wähle aus, was mit Anfragen von dieser IP-Adresse geschehen soll
@@ -124,9 +124,9 @@ de:
         highlighted: Dies macht die Rolle öffentlich im Profil sichtbar
         name: Name der Rolle, der auch öffentlich als Badge angezeigt wird, sofern dies unten aktiviert ist
         permissions_as_keys: Benutzer*innen mit dieser Rolle haben Zugriff auf...
-        position: Die höhere Rolle entscheidet über die Konfliktlösung in bestimmten Situationen. Bestimmte Aktionen können nur in Rollen mit geringerer Priorität ausgeführt werden
+        position: Höhere Rollen entscheiden über Konfliktlösungen zu gewissen Situationen. Bestimmte Aktionen können nur mit geringfügigeren Rollen durchgeführt werden
       webhook:
-        events: Zu sendende Ereignisse auswählen
+        events: Wähle die zu sendenden Termine
         url: Wo Ereignisse hingesendet werden
     labels:
       account:
@@ -134,24 +134,24 @@ de:
           name: Bezeichnung
           value: Inhalt
       account_alias:
-        acct: Adresse des alten Kontos
+        acct: Betreiber des alten Kontos
       account_migration:
-        acct: Adresse des neuen Kontos
+        acct: Betreiber des neuen Kontos
       account_warning_preset:
         text: Vorlagentext
         title: Titel
       admin_account_action:
-        include_statuses: Gemeldete Beiträge der E-Mail beifügen
+        include_statuses: Beitragsmeldungen in die E-Mail mit anfügen
         send_email_notification: Nutzer*in per E-Mail benachrichtigen
-        text: Eigene Warnung
+        text: Benutzerdefinierte Warnung
         type: Aktion
         types:
           disable: Einfrieren
-          none: Nichts tun
+          none: Warnung senden
           sensitive: Inhaltswarnung
-          silence: Stummschalten
+          silence: Einschränkung
           suspend: Sperren
-        warning_preset_id: Benutze eine Warnungsvorlage
+        warning_preset_id: Warnungsvorlage verwenden
       announcement:
         all_day: Ganztägiges Ereignis
         ends_at: Ende der Ankündigung
@@ -159,11 +159,11 @@ de:
         starts_at: Beginn der Ankündigung
         text: Ankündigung
       appeal:
-        text: Erkläre, warum diese Entscheidung rückgängig gemacht werden soll
+        text: Teile mit, warum diese Entscheidung zurückgenommen werden soll
       defaults:
-        autofollow: Meinem Profil automatisch folgen
+        autofollow: Lade ein, um deinem Konto zu folgen
         avatar: Profilbild
-        bot: Dieses Profil ist ein Bot
+        bot: Dies ist ein Bot-Konto
         chosen_languages: Sprachen einschränken
         confirm_new_password: Neues Passwort bestätigen
         confirm_password: Passwort bestätigen
@@ -181,22 +181,22 @@ de:
         irreversible: Endgültig, nicht nur temporär ausblenden
         locale: Sprache des Webinterface
         locked: Geschütztes Profil
-        max_uses: Maximale Verwendungen
+        max_uses: Maximale Anzahl der Nutzer
         new_password: Neues Passwort
         note: Über mich
         otp_attempt: Zwei-Faktor-Authentisierung
         password: Passwort
         phrase: Wort oder Formulierung
         setting_advanced_layout: Erweitertes Webinterface verwenden
-        setting_aggregate_reblogs: Geteilte Beiträge in den Timelines gruppieren
+        setting_aggregate_reblogs: Boosts in der Timeline gruppieren
         setting_always_send_emails: Benachrichtigungen immer senden
         setting_auto_play_gif: Animierte GIFs automatisch abspielen
-        setting_boost_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag geteilt wird
+        setting_boost_modal: Bestätigung vor dem Teilen einholen
         setting_crop_images: Bilder in nicht ausgeklappten Beiträgen auf 16:9 zuschneiden
         setting_default_language: Beitragssprache
         setting_default_privacy: Beitragssichtbarkeit
         setting_default_sensitive: Eigene Medien immer mit einer Inhaltswarnung versehen
-        setting_delete_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag gelöscht wird
+        setting_delete_modal: Bestätigung anzeigen, bevor ein Beitrag gelöscht wird
         setting_disable_swiping: Wischgesten deaktivieren
         setting_display_media: Medien-Anzeige
         setting_display_media_default: Standard
@@ -242,7 +242,7 @@ de:
         show_domain_blocks: Anzeigen, welche Domains gesperrt wurden
         show_domain_blocks_rationale: Anzeigen, weshalb Domains gesperrt wurden
         site_contact_email: E-Mail-Adresse
-        site_contact_username: Profilname
+        site_contact_username: Kontakt Benutzername
         site_extended_description: Detaillierte Beschreibung
         site_short_description: Serverbeschreibung
         site_terms: Datenschutzerklärung
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index b425b6ab4..6d216bb80 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -63,6 +63,34 @@ en-GB:
         whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word
       domain_allow:
         domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored
+      email_domain_block:
+        domain: This can be the domain name that shows up in the e-mail address or the MX record it uses. They will be checked upon sign-up.
+        with_dns_records: An attempt to resolve the given domain's DNS records will be made and the results will also be blocked
+      featured_tag:
+        name: 'Here are some of the hashtags you used the most recently:'
+      filters:
+        action: Chose which action to perform when a post matches the filter
+        actions:
+          hide: Completely hide the filtered content, behaving as if it did not exist
+          warn: Hide the filtered content behind a warning mentioning the filter's title
+      form_admin_settings:
+        backups_retention_period: Keep generated user archives for the specified number of days.
+        bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
+        closed_registrations_message: Displayed when sign-ups are closed
+        content_cache_retention_period: Posts from other servers will be deleted after the specified number of days when set to a positive value. This may be irreversible.
+        custom_css: You can apply custom styles on the web version of Mastodon.
+        mascot: Overrides the illustration in the advanced web interface.
+        media_cache_retention_period: Downloaded media files will be deleted after the specified number of days when set to a positive value, and re-downloaded on demand.
+        profile_directory: The profile directory lists all users who have opted-in to be discoverable.
+        require_invite_text: When sign-ups require manual approval, make the “Why do you want to join?” text input mandatory rather than optional
+        site_contact_email: How people can reach you for legal or support inquiries.
+        site_contact_username: How people can reach you on Mastodon.
+        site_extended_description: Any additional information that may be useful to visitors and your users. Can be structured with Markdown syntax.
+        site_short_description: A short description to help uniquely identify your server. Who is running it, who is it for?
+        site_terms: Use your own privacy policy or leave blank to use the default. Can be structured with Markdown syntax.
+        site_title: How people may refer to your server besides its domain name.
+        theme: Theme that logged out visitors and new users see.
+        thumbnail: A roughly 2:1 image displayed alongside your server information.
     labels:
       ip_block:
         ip: IP
@@ -93,6 +121,15 @@ en-GB:
         role: Role
       user_role:
         color: Badge colour
+        name: Name
+        permissions_as_keys: Permissions
+        position: Priority
+      webhook:
+        events: Enabled events
+        url: Endpoint URL
+    'no': 'No'
+    not_recommended: Not recommended
+    recommended: Recommended
     required:
       mark: "*"
       text: required
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
index abb05aed3..f658eff20 100644
--- a/config/locales/simple_form.et.yml
+++ b/config/locales/simple_form.et.yml
@@ -7,7 +7,7 @@ et:
       account_migration:
         acct: Sisesta kasutajanimi@domeen, kuhu soovid konto siit kolida
       account_warning_preset:
-        text: Te saate kasutada postituse süntaksi, näiteks URLe, silte ja mainimisi
+        text: Saab kasutada postituse süntaksi, näiteks URLe, silte ja mainimisi
         title: Valikuline. Ei ole nähtav saajale
       admin_account_action:
         include_statuses: Kasutaja näeb, millised postitused on põhjustanud moderaatori otsuse või hoiatuse
@@ -18,15 +18,15 @@ et:
           disable: Keela kasutajal konto kasutamine, sisu kustutamata või varjamata.
           none: Hoiatuse saatmine kasutajale, ilma täiendavate tegevuste käivitamiseta.
           sensitive: Kogu kasutaja meediasisu märgitakse kui tundlik sisu.
-          silence: Takistab kasutajal avaliku nähtavusega postitamist, peidab tema postitused ja märguanded inimeste eest, kes ei jälgi.
+          silence: Takistab kasutajal avaliku nähtavusega postitamist, peidab tema postitused ja märguanded inimeste eest, kes teda ei jälgi.
           suspend: Takistamaks suhtlust selle kontoga ja kustutamaks kogu sisu. Tagasivõetav 30 päeva jooksul.
-        warning_preset_id: Valikuline. Te saate ikka lisada mis tahes teksti eelseadistuse lõppu
+        warning_preset_id: Valikuline. Saad ikka lisada mis tahes teksti eelseadistuse lõppu
       announcement:
         all_day: Kui valitud, kuvatakse vaid selle ajavahemiku kuupäevi
         ends_at: Valikuline. Teadaanne eemaldatakse automaatselt sellel ajal
         scheduled_at: Jäta tühjaks, et avaldada teadaande koheselt
-        starts_at: Valikuline. Juhul, kui teadaanne on limiteeritud kindlale ajavahemikule
-        text: Te saate kasutada postituse süntaksi. Tuleks silmas pidada, kui palju ruumi teadaanne võtab kasutaja ekraanil
+        starts_at: Valikuline. Juhul, kui teadaanne on piiratud kindla ajavahemikuga
+        text: Saad kasutada postituse süntaksi. Tuleks silmas pidada, kui palju teadaanne kasutaja ekraanil ruumi võtab
       appeal:
         text: Otsust on võimalik vaidlustada vaid 1 kord
       defaults:
@@ -35,19 +35,19 @@ et:
         bot: Teavita teisi, et see konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all
         context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma
         current_password: Sisesta turvalisuse huvides oma siinse konto salasõna
-        current_username: Kinnitamiseks palun sisestage oma konto kasutajanimi
-        digest: Saadetakse ainult pärast pikka perioodi tegevusetust ja ainult siis, kui Teile on saadetud privaatseid sõnumeid
+        current_username: Kinnitamiseks palun sisesta oma konto kasutajanimi
+        digest: Saadetakse ainult pärast pikka tegevusetuse perioodi ja ainult siis, kui on saadetud otsesõnumeid
         discoverable: Konto on leitav võhivõõraste jaoks soovituste ja trendide sirvimise teel vm sarnaste vahenditega
-        email: Teile saadetakse kinnituskiri e-posti teel
-        fields: Te saate oma profiilil tabelina kuvada kuni 4 asja
+        email: Sulle saadetakse e-posti teel kinnituskiri
+        fields: Saad oma profiilil tabelina kuvada kuni 4 asja
         header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini
-        inbox_url: Kopeerige soovitud relee avalehe URL
+        inbox_url: Kopeeri soovitud vahendaja avalehe URL
         irreversible: Filtreeritud postitused kaovad taastamatult, isegi kui filter on hiljem eemaldatud
-        locale: Kasutajaliidese, e-kirjade ja push-teadete keel
+        locale: Kasutajaliidese, e-kirjade ja tõuketeadete keel
         locked: Nõuab käsitsi jälgijate kinnitamist
         password: Vajalik on vähemalt 8 märki
         phrase: Kattub olenemata postituse teksti suurtähtedest või sisuhoiatusest
-        scopes: Milliseid API-sid see rakendus tohib kasutada. Kui Te valite kõrgeima taseme, ei pea Te valima individuaalseid.
+        scopes: Milliseid API-sid see rakendus tohib kasutada. Kui valid kõrgeima taseme, ei pea üksikuid eraldi valima.
         setting_aggregate_reblogs: Ära kuva uusi postituste jagamisi, mis on hiljuti jagatud (kehtib vaid uutele jagamistele)
         setting_always_send_emails: Mastodoni aktiivsel kasutamisel sulle tavaliselt meilile teavitusi ei saadeta
         setting_default_sensitive: Tundlik meedia on vaikimisi peidetud ning seda saab avada sellele klikkides
@@ -55,11 +55,11 @@ et:
         setting_display_media_hide_all: Alati peida kõik meedia
         setting_display_media_show_all: Alati näita tundlikuks märgistatud meedia
         setting_hide_network: Profiilil ei kuvata Keda sa jälgid ja kes jälgib sind
-        setting_noindex: Mõjutab su avalikku profiili ja postituste lehekülgi
+        setting_noindex: Mõjutab avalikku profiili ja postituste lehekülgi
         setting_show_application: Postitamiseks kasutatud rakenduse infot kuvatakse postituse üksikasjavaates
         setting_use_blurhash: Värvid põhinevad peidetud visuaalidel, kuid hägustavad igasuguseid detaile
         setting_use_pending_items: Voo automaatse kerimise asemel peida ajajoone uuendused kliki taha
-        username: Su kasutajanimi on %{domain}-il unikaalne
+        username: Sinu kasutajanimi on %{domain}-il unikaalne
         whole_word: Kui võtmesõna või fraas on ainult tähtnumbriline, rakendub see ainult siis, kui see kattub terve sõnaga
       domain_allow:
         domain: See domeen saab tõmmata andmeid sellelt serverilt ning sissetulevad andmed sellelt domeenilt töödeldakse ning salvestatakse
@@ -99,7 +99,7 @@ et:
       imports:
         data: CSV fail eksporditi teisest Mastodoni serverist
       invite_request:
-        text: See aitab meil su taotlust üle vaadata
+        text: See aitab meil sinu taotlust üle vaadata
       ip_block:
         comment: Valikuline. Talletamaks reegli lisamise põhjust.
         expires_in: IP-aadressid on lõplik ressurss ja on tihtipeale ühiskasutuses või vahetub kasutaja. Sel põhjusel pole kestvad IP-piirangud soovituslikud.
@@ -112,10 +112,10 @@ et:
       rule:
         text: Reegli või nõude kirjeldus selle serveri kasutajatele. Võimalikult lühidalt ja lihtsalt
       sessions:
-        otp: 'Kahe-etapise autentimise kood telefonirakendusest või mõni taastekood:'
+        otp: 'Kaheastmelise autentimise kood telefonirakendusest või mõni taastekood:'
         webauthn: Kui see on USB-võti, sisesta see ning vajadusel aktiveeri.
       tag:
-        name: Te saate ainult muuta tähtede tõstetust, näiteks selleks, et muuta seda rohkem loetavaks
+        name: Saad muuta ainult tähtede suurtähelisust, näiteks selleks, et muuta seda loetavamaks
       user:
         chosen_languages: Keelte valimisel näidatakse avalikel ajajoontel ainult neis keeltes postitusi
         role: See roll kontrollib, millised õigused kasutajal on
@@ -170,21 +170,21 @@ et:
         context: Filtreeri kontekste
         current_password: Kehtiv salasõna
         data: Andmed
-        discoverable: Lisage see konto kataloogi
+        discoverable: Lisa see konto kataloogi
         display_name: Kuvanimi
         email: E-posti aadress
         expires_in: Aegu pärast
         fields: Veebiviited
         header: Päis
         honeypot: "%{label} (ära sisesta)"
-        inbox_url: Relee sisendkausta URL
+        inbox_url: Vahendaja sisendkausta URL
         irreversible: Kustuta selle asemel, et peita
         locale: Kasutajaliidese keel
         locked: Lukusta konto
         max_uses: Maksimum kasutajate arv
         new_password: Uus salasõna
         note: Elulugu
-        otp_attempt: Kahe-etapine kood
+        otp_attempt: Kaheastmeline kood
         password: Salasõna
         phrase: Võtmesõna või fraas
         setting_advanced_layout: Aktiveeri kohandatud veebiliides
@@ -272,7 +272,7 @@ et:
         appeal: Moderaatori otsus on vaidlustatud
         digest: Saada ülevaatlike e-kirju
         favourite: Saada e-kiri, kui keegi lisab su postituse lemmikuks
-        follow: Saada e-kiri, kui keegi alustab Teie jälgimist
+        follow: Saada e-kiri, kui keegi alustab jälgimist
         follow_request: Saada e-kiri, kui keegi soovib Teid jälgida
         mention: Saada e-kiri, kui keegi mainib Teid
         pending_account: Saada e-kiri, kui uus konto vajab ülevaatlust
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index cd9a034b5..5ef015123 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -7,7 +7,7 @@ fi:
       account_migration:
         acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, johon haluat siirtyä
       account_warning_preset:
-        text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, hashtageja ja mainintoja
+        text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja
         title: Vapaaehtoinen. Ei näytetä vastaanottajalle
       admin_account_action:
         include_statuses: Käyttäjä näkee mitkä viestit johtivat toimenpiteeseen tai varoitukseen
@@ -93,7 +93,7 @@ fi:
         thumbnail: Noin 2:1 kuva näytetään palvelimen tietojen rinnalla.
         timeline_preview: Uloskirjautuneet vierailijat voivat selata uusimpia julkisia viestejä, jotka ovat saatavilla palvelimella.
         trendable_by_default: Ohita suositun sisällön manuaalinen tarkistus. Yksittäisiä kohteita voidaan edelleen poistaa jälkikäteen.
-        trends: Trendit osoittavat, mitkä viestit, hashtagit ja uutiset ovat saamassa vetoa palvelimellasi.
+        trends: Trendit osoittavat, mitkä julkaisut, aihetunnisteet ja uutiset ovat saamassa vetoa palvelimellasi.
       form_challenge:
         current_password: Olet menossa suojatulle alueelle
       imports:
@@ -282,10 +282,10 @@ fi:
       rule:
         text: Sääntö
       tag:
-        listable: Salli tämän hashtagin näkyä hauissa ja ehdotuksissa
+        listable: Salli tämän aihetunnisteen näkyä hauissa ja ehdotuksissa
         name: Aihetunniste
         trendable: Salli tämän aihetunnisteen näkyä trendeissä
-        usable: Salli postauksien käyttää tätä aihetunnistetta
+        usable: Salli julkaisujen käyttää tätä aihetunnistetta
       user:
         role: Rooli
       user_role:
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 211a2fac4..25361218b 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -7,7 +7,7 @@ pt-PT:
       account_migration:
         acct: Especifique o utilizador@domínio da conta para onde você deseja migrar
       account_warning_preset:
-        text: Tu podes usar sintaxe de escrita, como URLs, hashtags e referências
+        text: Pode usar sintaxe de escrita, como URL, etiquetas, e referências
         title: Opcional. Não visível para o destinatário
       admin_account_action:
         include_statuses: O utilizador verá quais toots causaram a ação de moderação ou aviso
@@ -67,7 +67,7 @@ pt-PT:
         domain: Este pode ser o nome de domínio que aparece no endereço de e-mail ou o registo MX por ele utilizado. Eles serão verificados aquando da inscrição.
         with_dns_records: Será feita uma tentativa de resolver os registos DNS do domínio em questão e os resultados também serão colocados na lista negra
       featured_tag:
-        name: 'Aqui estão algumas das hashtags que utilizou recentemente:'
+        name: 'Eis algumas das etiquetas que utilizou recentemente:'
       filters:
         action: Escolha qual a ação a executar quando uma publicação corresponde ao filtro
         actions:
@@ -93,7 +93,7 @@ pt-PT:
         thumbnail: Uma imagem de aproximadamente 2:1, exibida ao lado da informação do seu servidor.
         timeline_preview: Os visitantes sem sessão iniciada poderão consultar as publicações públicas mais recentes disponíveis no servidor.
         trendable_by_default: Ignorar a revisão manual do conteúdo das tendências. Itens individuais ainda poderão ser removidos das tendências após a sua exibição.
-        trends: As tendências mostram quais as publicações, hashtags e notícias estão a ganhar destaque no seu servidor.
+        trends: As tendências mostram quais as publicações, etiquetas e notícias que estão a ganhar destaque no seu servidor.
       form_challenge:
         current_password: Está a entrar numa área restrita
       imports:
@@ -179,7 +179,7 @@ pt-PT:
         honeypot: "%{label} (não preencher)"
         inbox_url: URL da caixa de entrada do repetidor
         irreversible: Expandir em vez de esconder
-        locale: Idioma
+        locale: Língua da interface
         locked: Trancar conta
         max_uses: Número máximo de utilizações
         new_password: Nova palavra-passe
@@ -223,7 +223,7 @@ pt-PT:
       email_domain_block:
         with_dns_records: Incluir registos MX e IPs do domínio
       featured_tag:
-        name: Hashtag
+        name: Etiqueta
       filters:
         actions:
           hide: Ocultar por completo
@@ -282,10 +282,10 @@ pt-PT:
       rule:
         text: Regra
       tag:
-        listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis
-        name: Hashtag
-        trendable: Permitir que esta hashtag apareça em destaque
-        usable: Permitir que toots utilizem esta hashtag
+        listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis
+        name: Etiqueta
+        trendable: Permitir que esta etiqueta apareça em destaque
+        usable: Permitir as publicações usem esta etiqueta
       user:
         role: Função
       user_role:
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 06b2f9100..48593c99e 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -255,7 +255,7 @@ uk:
       interactions:
         must_be_follower: Блокувати сповіщення від непідписаних людей
         must_be_following: Блокувати сповіщення від людей, на яких ви не підписані
-        must_be_following_dm: Заблокувати прямі сповіщення від людей, на яких ви не підписані
+        must_be_following_dm: Блокувати особисті повідомлення від людей, за якими ви не слідкуєте
       invite:
         comment: Коментар
       invite_request:
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 064d44d20..e1e2afd4d 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -216,6 +216,7 @@ sk:
         change_email_user_html: "%{name} zmenil/a emailovú adresu užívateľa %{target}"
         confirm_user_html: "%{name} potvrdil/a emailovú adresu používateľa %{target}"
         create_account_warning_html: "%{name} poslal/a upozornenie užívateľovi %{target}"
+      deleted_account: zmazaný účet
       filter_by_action: Filtruj podľa úkonu
       filter_by_user: Trieď podľa užívateľa
       title: Kontrólny záznam
@@ -267,6 +268,7 @@ sk:
       upload: Nahraj
     dashboard:
       active_users: aktívni užívatelia
+      interactions: interakcií
       media_storage: Úložisko médií
       new_users: noví užívatelia
       opened_reports: otvorené hlásenia
@@ -281,6 +283,7 @@ sk:
       add_new: Povolená doména
       created_msg: Doména bola úspešne povolená
       destroyed_msg: Doména bola odstránená zo zoznamu povolených
+      import: Nahraj
       undo: Odober zo zoznamu povolených
     domain_blocks:
       add_new: Blokuj novú doménu
@@ -289,6 +292,8 @@ sk:
       domain: Doména
       edit: Uprav blokovanie domény
       existing_domain_block_html: Pre účet %{name} si už nahodil/a přísnejšie obmedzenie, najskôr ho teda musíš <a href="%{unblock_url}">odblokovať</a>.
+      export: Exportuj
+      import: Nahraj
       new:
         create: Vytvor blokovanie domény
         hint: Blokovanie domény stále dovolí vytvárať nové účty v databázi, ale tieto budú spätne automaticky moderované.
@@ -336,6 +341,7 @@ sk:
         comment: Interná poznámka
         policies:
           reject_media: Zamietni médiá
+          reject_reports: Zamietni hlásenia
           suspend: Vylúč
         policy: Zásady
         reason: Verejné odôvodnenie
@@ -344,6 +350,7 @@ sk:
         instance_accounts_dimension: Najsledovanejšie účty
       delivery:
         all: Všetko
+        failing: Zlyhávajúce
         unavailable: Nedostupné
       delivery_available: Je v dosahu doručovania
       moderation:
diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb
index 946543868..8da067585 100644
--- a/lib/sanitize_ext/sanitize_config.rb
+++ b/lib/sanitize_ext/sanitize_config.rb
@@ -68,7 +68,7 @@ class Sanitize
         end
       end
 
-      current_node.replace(current_node.text) unless LINK_PROTOCOLS.include?(scheme)
+      current_node.replace(Nokogiri::XML::Text.new(current_node.text, current_node.document)) unless LINK_PROTOCOLS.include?(scheme)
     end
 
     MASTODON_STRICT ||= freeze_config(
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 3c891a07f..32040feec 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -395,18 +395,11 @@ namespace :mastodon do
         incompatible_syntax = false
 
         env_contents = env.each_pair.map do |key, value|
-          if value.is_a?(String) && value =~ /[\s\#\\"]/
-            incompatible_syntax = true
+          value = value.to_s
+          escaped = dotenv_escape(value)
+          incompatible_syntax = true if value != escaped
 
-            if value =~ /[']/
-              value = value.to_s.gsub(/[\\"\$]/) { |x| "\\#{x}" }
-              "#{key}=\"#{value}\""
-            else
-              "#{key}='#{value}'"
-            end
-          else
-            "#{key}=#{value}"
-          end
+          "#{key}=#{escaped}"
         end.join("\n")
 
         generated_header = "# Generated with mastodon:setup on #{Time.now.utc}\n\n".dup
@@ -519,3 +512,49 @@ def disable_log_stdout!
   HttpLog.configuration.logger = dev_null
   Paperclip.options[:log]      = false
 end
+
+def dotenv_escape(value)
+  # Dotenv has its own parser, which unfortunately deviates somewhat from
+  # what shells actually do.
+  #
+  # In particular, we can't use Shellwords::escape because it outputs a
+  # non-quotable string, while Dotenv requires `#` to always be in quoted
+  # strings.
+  #
+  # Therefore, we need to write our own escape code…
+  # Dotenv's parser has a *lot* of edge cases, and I think not every
+  # ASCII string can even be represented into something Dotenv can parse,
+  # so this is a best effort thing.
+  #
+  # In particular, strings with all the following probably cannot be
+  # escaped:
+  # - `#`, or ends with spaces, which requires some form of quoting (simply escaping won't work)
+  # - `'` (single quote), preventing us from single-quoting
+  # - `\` followed by either `r` or `n`
+
+  # No character that would cause Dotenv trouble
+  return value unless /[\s\#\\"'$]/.match?(value)
+
+  # As long as the value doesn't include single quotes, we can safely
+  # rely on single quotes
+  return "'#{value}'" unless /[']/.match?(value)
+
+  # If the value contains the string '\n' or '\r' we simply can't use
+  # a double-quoted string, because Dotenv will expand \n or \r no
+  # matter how much escaping we add.
+  double_quoting_disallowed = /\\[rn]/.match?(value)
+
+  value = value.gsub(double_quoting_disallowed ? /[\\"'\s]/ : /[\\"']/) { |x| "\\#{x}" }
+
+  # Dotenv is especially tricky with `$` as unbalanced
+  # parenthesis will make it not unescape `\$` as `$`…
+
+  # Variables
+  value = value.gsub(/\$(?!\()/) { |x| "\\#{x}" }
+  # Commands
+  value = value.gsub(/\$(?<cmd>\((?:[^()]|\g<cmd>)+\))/) { |x| "\\#{x}" }
+
+  value = "\"#{value}\"" unless double_quoting_disallowed
+
+  value
+end
diff --git a/package.json b/package.json
index d2e50baee..5142a723a 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
   },
   "private": true,
   "dependencies": {
-    "@babel/core": "^7.20.7",
+    "@babel/core": "^7.20.12",
     "@babel/plugin-proposal-decorators": "^7.20.7",
     "@babel/plugin-transform-react-inline-elements": "^7.18.6",
     "@babel/plugin-transform-runtime": "^7.19.6",
@@ -67,7 +67,7 @@
     "glob": "^8.0.3",
     "history": "^4.10.1",
     "http-link-header": "^1.1.0",
-    "immutable": "^4.2.1",
+    "immutable": "^4.2.2",
     "imports-loader": "^1.2.0",
     "intersection-observer": "^0.12.2",
     "intl": "^1.2.5",
@@ -75,7 +75,7 @@
     "intl-relativeformat": "^6.4.3",
     "is-nan": "^1.3.2",
     "js-yaml": "^4.1.0",
-    "jsdom": "^20.0.3",
+    "jsdom": "^21.0.0",
     "lodash": "^4.17.21",
     "mark-loader": "^0.1.6",
     "marky": "^1.2.5",
@@ -86,7 +86,7 @@
     "object.values": "^1.1.6",
     "path-complete-extname": "^1.0.0",
     "pg": "^8.5.0",
-    "postcss": "^8.4.20",
+    "postcss": "^8.4.21",
     "postcss-loader": "^3.0.0",
     "promise.prototype.finally": "^3.1.4",
     "prop-types": "^15.8.1",
@@ -100,7 +100,7 @@
     "react-intl": "^2.9.0",
     "react-motion": "^0.5.2",
     "react-notification": "^6.8.5",
-    "react-overlays": "^0.9.3",
+    "react-overlays": "^5.2.1",
     "react-redux": "^7.2.9",
     "react-redux-loading-bar": "^5.0.4",
     "react-router-dom": "^4.1.1",
@@ -141,7 +141,7 @@
     "workbox-strategies": "^6.5.4",
     "workbox-webpack-plugin": "^6.5.4",
     "workbox-window": "^6.5.4",
-    "ws": "^8.10.0"
+    "ws": "^8.12.0"
   },
   "devDependencies": {
     "@babel/eslint-parser": "^7.19.1",
@@ -156,7 +156,7 @@
     "jest": "^29.3.1",
     "jest-environment-jsdom": "^29.3.1",
     "postcss-scss": "^4.0.6",
-    "prettier": "^2.8.1",
+    "prettier": "^2.8.2",
     "raf": "^3.4.1",
     "react-intl-translations-manager": "^5.0.3",
     "react-test-renderer": "^16.14.0",
@@ -170,6 +170,6 @@
   },
   "optionalDependencies": {
     "bufferutil": "^4.0.7",
-    "utf-8-validate": "^5.0.10"
+    "utf-8-validate": "^6.0.0"
   }
 }
diff --git a/spec/lib/request_spec.rb b/spec/lib/request_spec.rb
index 5eccf3201..8539944e2 100644
--- a/spec/lib/request_spec.rb
+++ b/spec/lib/request_spec.rb
@@ -120,6 +120,11 @@ describe Request do
       expect { subject.perform { |response| response.body_with_limit } }.to raise_error Mastodon::LengthValidationError
     end
 
+    it 'truncates large monolithic body' do
+      stub_request(:any, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.megabytes), headers: { 'Content-Length' => 2.megabytes })
+      expect(subject.perform { |response| response.truncated_body.bytesize }).to be < 2.megabytes
+    end
+
     it 'uses binary encoding if Content-Type does not tell encoding' do
       stub_request(:any, 'http://example.com').to_return(body: '', headers: { 'Content-Type' => 'text/html' })
       expect(subject.perform { |response| response.body_with_limit.encoding }).to eq Encoding::BINARY
diff --git a/spec/lib/sanitize_config_spec.rb b/spec/lib/sanitize_config_spec.rb
index dc6418e5b..29344476f 100644
--- a/spec/lib/sanitize_config_spec.rb
+++ b/spec/lib/sanitize_config_spec.rb
@@ -28,6 +28,10 @@ describe Sanitize::Config do
       expect(Sanitize.fragment('<a href="foo://bar">Test</a>', subject)).to eq 'Test'
     end
 
+    it 'does not re-interpret HTML when removing unsupported links' do
+      expect(Sanitize.fragment('<a href="foo://bar">Test&lt;a href="https://example.com"&gt;test&lt;/a&gt;</a>', subject)).to eq 'Test&lt;a href="https://example.com"&gt;test&lt;/a&gt;'
+    end
+
     it 'keeps a with href' do
       expect(Sanitize.fragment('<a href="http://example.com">Test</a>', subject)).to eq '<a href="http://example.com" rel="nofollow noopener noreferrer" target="_blank">Test</a>'
     end
diff --git a/spec/services/verify_link_service_spec.rb b/spec/services/verify_link_service_spec.rb
index 52ba454cc..391560f1c 100644
--- a/spec/services/verify_link_service_spec.rb
+++ b/spec/services/verify_link_service_spec.rb
@@ -73,6 +73,33 @@ RSpec.describe VerifyLinkService, type: :service do
       end
     end
 
+    context 'when a document is truncated but the link back is valid' do
+      let(:html) do
+        "
+          <!doctype html>
+          <body>
+            <a rel=\"me\" href=\"#{ActivityPub::TagManager.instance.url_for(account)}\"
+        "
+      end
+
+      it 'marks the field as not verified' do
+        expect(field.verified?).to be false
+      end
+    end
+
+    context 'when a link back might be truncated' do
+      let(:html) do
+        "
+          <!doctype html>
+          <body>
+            <a rel=\"me\" href=\"#{ActivityPub::TagManager.instance.url_for(account)}"
+      end
+
+      it 'does not mark the field as verified' do
+        expect(field.verified?).to be false
+      end
+    end
+
     context 'when a link does not contain a link back' do
       let(:html) { '' }
 
diff --git a/yarn.lock b/yarn.lock
index 6794d3410..a595a3dbc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -47,25 +47,25 @@
   resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec"
   integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==
 
-"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.7", "@babel/core@^7.7.2":
-  version "7.20.7"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f"
-  integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==
+"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.12", "@babel/core@^7.7.2":
+  version "7.20.12"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d"
+  integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==
   dependencies:
     "@ampproject/remapping" "^2.1.0"
     "@babel/code-frame" "^7.18.6"
     "@babel/generator" "^7.20.7"
     "@babel/helper-compilation-targets" "^7.20.7"
-    "@babel/helper-module-transforms" "^7.20.7"
+    "@babel/helper-module-transforms" "^7.20.11"
     "@babel/helpers" "^7.20.7"
     "@babel/parser" "^7.20.7"
     "@babel/template" "^7.20.7"
-    "@babel/traverse" "^7.20.7"
+    "@babel/traverse" "^7.20.12"
     "@babel/types" "^7.20.7"
     convert-source-map "^1.7.0"
     debug "^4.1.0"
     gensync "^1.0.0-beta.2"
-    json5 "^2.2.1"
+    json5 "^2.2.2"
     semver "^6.3.0"
 
 "@babel/eslint-parser@^7.19.1":
@@ -194,7 +194,7 @@
   dependencies:
     "@babel/types" "^7.18.6"
 
-"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.7":
+"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.11":
   version "7.20.11"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0"
   integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==
@@ -1029,7 +1029,7 @@
   dependencies:
     regenerator-runtime "^0.12.0"
 
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
   integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
@@ -1045,10 +1045,10 @@
     "@babel/parser" "^7.20.7"
     "@babel/types" "^7.20.7"
 
-"@babel/traverse@^7.18.10", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2":
-  version "7.20.10"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.10.tgz#2bf98239597fcec12f842756f186a9dde6d09230"
-  integrity sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==
+"@babel/traverse@^7.18.10", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2":
+  version "7.20.12"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5"
+  integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==
   dependencies:
     "@babel/code-frame" "^7.18.6"
     "@babel/generator" "^7.20.7"
@@ -1562,11 +1562,23 @@
   resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71"
   integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==
 
+"@popperjs/core@^2.11.6":
+  version "2.11.6"
+  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45"
+  integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
+
 "@rails/ujs@^6.1.7":
   version "6.1.7"
   resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.7.tgz#b09dc5b2105dd267e8374c47e4490240451dc7f6"
   integrity sha512-0e7WQ4LE/+LEfW2zfAw9ppsB6A8RmxbdAUPAF++UT80epY+7emuQDkKXmaK0a9lp6An50RvzezI0cIQjp1A58w==
 
+"@restart/hooks@^0.4.7":
+  version "0.4.7"
+  resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39"
+  integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==
+  dependencies:
+    dequal "^2.0.2"
+
 "@rollup/plugin-babel@^5.2.0":
   version "5.3.1"
   resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@@ -1880,6 +1892,15 @@
     "@types/scheduler" "*"
     csstype "^3.0.2"
 
+"@types/react@>=16.9.11":
+  version "18.0.26"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917"
+  integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
 "@types/resolve@1.17.1":
   version "1.17.1"
   resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
@@ -1919,6 +1940,11 @@
   resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
   integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
 
+"@types/warning@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
+  integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==
+
 "@types/yargs-parser@*":
   version "15.0.0"
   resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
@@ -3972,6 +3998,11 @@ depd@~1.1.2:
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
   integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
 
+dequal@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+  integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
 des.js@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
@@ -4077,7 +4108,7 @@ dom-accessibility-api@^0.5.6:
   resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9"
   integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw==
 
-dom-helpers@^3.2.1, dom-helpers@^3.4.0:
+dom-helpers@^3.4.0:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
   integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
@@ -4092,6 +4123,14 @@ dom-helpers@^5.0.1:
     "@babel/runtime" "^7.6.3"
     csstype "^2.6.7"
 
+dom-helpers@^5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+  integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+  dependencies:
+    "@babel/runtime" "^7.8.7"
+    csstype "^3.0.2"
+
 dom-serializer@0:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
@@ -5639,10 +5678,10 @@ ignore@^5.2.0, ignore@^5.2.1:
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
   integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
 
-immutable@^4.0.0, immutable@^4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.1.tgz#8a4025691018c560a40c67e43d698f816edc44d4"
-  integrity sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==
+immutable@^4.0.0, immutable@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.2.tgz#2da9ff4384a4330c36d4d1bc88e90f9e0b0ccd16"
+  integrity sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==
 
 import-cwd@^2.0.0:
   version "2.1.0"
@@ -6680,7 +6719,7 @@ js-yaml@^4.1.0:
   dependencies:
     argparse "^2.0.1"
 
-jsdom@^20.0.0, jsdom@^20.0.3:
+jsdom@^20.0.0:
   version "20.0.3"
   resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db"
   integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==
@@ -6712,6 +6751,38 @@ jsdom@^20.0.0, jsdom@^20.0.3:
     ws "^8.11.0"
     xml-name-validator "^4.0.0"
 
+jsdom@^21.0.0:
+  version "21.0.0"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.0.0.tgz#33e22f2fc44286e50ac853c7b7656c8864a4ea45"
+  integrity sha512-AIw+3ZakSUtDYvhwPwWHiZsUi3zHugpMEKlNPaurviseYoBqo0zBd3zqoUi3LPCNtPFlEP8FiW9MqCZdjb2IYA==
+  dependencies:
+    abab "^2.0.6"
+    acorn "^8.8.1"
+    acorn-globals "^7.0.0"
+    cssom "^0.5.0"
+    cssstyle "^2.3.0"
+    data-urls "^3.0.2"
+    decimal.js "^10.4.2"
+    domexception "^4.0.0"
+    escodegen "^2.0.0"
+    form-data "^4.0.0"
+    html-encoding-sniffer "^3.0.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-potential-custom-element-name "^1.0.1"
+    nwsapi "^2.2.2"
+    parse5 "^7.1.1"
+    saxes "^6.0.0"
+    symbol-tree "^3.2.4"
+    tough-cookie "^4.1.2"
+    w3c-xmlserializer "^4.0.0"
+    webidl-conversions "^7.0.0"
+    whatwg-encoding "^2.0.0"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^11.0.0"
+    ws "^8.11.0"
+    xml-name-validator "^4.0.0"
+
 jsesc@^2.5.1:
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -6771,10 +6842,10 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.1.2, json5@^2.2.0, json5@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
-  integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
+json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
 
 jsonfile@^4.0.0:
   version "4.0.0"
@@ -8491,10 +8562,10 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32:
     source-map "^0.6.1"
     supports-color "^6.1.0"
 
-postcss@^8.2.15, postcss@^8.4.19, postcss@^8.4.20:
-  version "8.4.20"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56"
-  integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==
+postcss@^8.2.15, postcss@^8.4.19, postcss@^8.4.21:
+  version "8.4.21"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4"
+  integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
   dependencies:
     nanoid "^3.3.4"
     picocolors "^1.0.0"
@@ -8532,10 +8603,10 @@ prelude-ls@~1.1.2:
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
   integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
-prettier@^2.8.1:
-  version "2.8.1"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc"
-  integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==
+prettier@^2.8.2:
+  version "2.8.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160"
+  integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==
 
 pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
   version "5.6.0"
@@ -8608,14 +8679,6 @@ prompts@^2.0.1:
     kleur "^3.0.3"
     sisteransi "^1.0.4"
 
-prop-types-extra@^1.0.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b"
-  integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==
-  dependencies:
-    react-is "^16.3.2"
-    warning "^4.0.0"
-
 prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
   version "15.8.1"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
@@ -8852,7 +8915,7 @@ react-intl@^2.9.0:
     intl-relativeformat "^2.1.0"
     invariant "^2.1.1"
 
-react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.6:
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6:
   version "16.13.1"
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -8888,17 +8951,19 @@ react-notification@^6.8.5:
   dependencies:
     prop-types "^15.6.2"
 
-react-overlays@^0.9.3:
-  version "0.9.3"
-  resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.9.3.tgz#5bac8c1e9e7e057a125181dee2d784864dd62902"
-  integrity sha512-u2T7nOLnK+Hrntho4p0Nxh+BsJl0bl4Xuwj/Y0a56xywLMetgAfyjnDVrudLXsNcKGaspoC+t3C1V80W9QQTdQ==
-  dependencies:
-    classnames "^2.2.5"
-    dom-helpers "^3.2.1"
-    prop-types "^15.5.10"
-    prop-types-extra "^1.0.1"
-    react-transition-group "^2.2.1"
-    warning "^3.0.0"
+react-overlays@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.2.1.tgz#49dc007321adb6784e1f212403f0fb37a74ab86b"
+  integrity sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA==
+  dependencies:
+    "@babel/runtime" "^7.13.8"
+    "@popperjs/core" "^2.11.6"
+    "@restart/hooks" "^0.4.7"
+    "@types/warning" "^3.0.0"
+    dom-helpers "^5.2.0"
+    prop-types "^15.7.2"
+    uncontrollable "^7.2.1"
+    warning "^4.0.3"
 
 react-redux-loading-bar@^5.0.4:
   version "5.0.4"
@@ -9037,16 +9102,6 @@ react-toggle@^4.1.3:
   dependencies:
     classnames "^2.2.5"
 
-react-transition-group@^2.2.1:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
-  integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
-  dependencies:
-    dom-helpers "^3.4.0"
-    loose-envify "^1.4.0"
-    prop-types "^15.6.2"
-    react-lifecycles-compat "^3.0.4"
-
 react-transition-group@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683"
@@ -10766,6 +10821,16 @@ unbox-primitive@^1.0.2:
     has-symbols "^1.0.3"
     which-boxed-primitive "^1.0.2"
 
+uncontrollable@^7.2.1:
+  version "7.2.1"
+  resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738"
+  integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==
+  dependencies:
+    "@babel/runtime" "^7.6.3"
+    "@types/react" ">=16.9.11"
+    invariant "^2.2.4"
+    react-lifecycles-compat "^3.0.4"
+
 unicode-canonical-property-names-ecmascript@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -10926,10 +10991,10 @@ use@^3.1.0:
   resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
   integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
 
-utf-8-validate@^5.0.10:
-  version "5.0.10"
-  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
-  integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
+utf-8-validate@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.0.tgz#91a169e91ee5441a2bab5f059f4a39cdd402caf2"
+  integrity sha512-OCJuwxQsnG51swYmNloViggxNOFO/leOZpnb/vVeoastJbrzrZZU7lGsYlUcdkCl9nsBu2nkKLjpljb3Ckvb/Q==
   dependencies:
     node-gyp-build "^4.3.0"
 
@@ -11040,7 +11105,7 @@ warning@^3.0.0:
   dependencies:
     loose-envify "^1.0.0"
 
-warning@^4.0.0, warning@^4.0.1:
+warning@^4.0.1, warning@^4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
   integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
@@ -11559,10 +11624,10 @@ ws@^7.3.1:
   resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
   integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
 
-ws@^8.10.0, ws@^8.11.0:
-  version "8.11.0"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
-  integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+ws@^8.11.0, ws@^8.12.0:
+  version "8.12.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8"
+  integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==
 
 xml-name-validator@^4.0.0:
   version "4.0.0"