about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-09-03 14:33:06 +0200
committerThibaut Girka <thib@sitedethib.com>2018-09-03 14:33:06 +0200
commit6c233a04a04f674b1be75ce7c6c4547c7a006797 (patch)
tree24b32d52e098fac57e91fd26be1311b7b677c9c9
parente915bc3e9e32e34bf80d1bd66ee3f80d2ca37969 (diff)
parentccc2f608c5c1caac2ea4796f4490f29d59d67068 (diff)
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts:
	README.md

Discarded upstream changes to the README, kept our version.
-rw-r--r--app/controllers/settings/notifications_controller.rb2
-rw-r--r--app/controllers/settings/preferences_controller.rb2
-rw-r--r--app/helpers/admin/account_moderation_notes_helper.rb4
-rw-r--r--app/helpers/settings_helper.rb2
-rw-r--r--app/javascript/mastodon/features/emoji/__tests__/emoji-test.js5
-rw-r--r--app/javascript/mastodon/features/emoji/emoji.js4
-rw-r--r--app/javascript/mastodon/features/ui/components/columns_area.js10
-rw-r--r--app/javascript/mastodon/locales/ca.json64
-rw-r--r--app/javascript/mastodon/locales/co.json46
-rw-r--r--app/javascript/mastodon/locales/cy.json4
-rw-r--r--app/javascript/mastodon/locales/de.json56
-rw-r--r--app/javascript/mastodon/locales/fr.json2
-rw-r--r--app/javascript/mastodon/locales/ja.json6
-rw-r--r--app/javascript/mastodon/locales/locale-data/co.js108
-rw-r--r--app/javascript/mastodon/locales/nl.json4
-rw-r--r--app/javascript/mastodon/locales/oc.json42
-rw-r--r--app/javascript/mastodon/locales/ro.json336
-rw-r--r--app/javascript/mastodon/locales/ru.json48
-rw-r--r--app/javascript/mastodon/locales/sk.json16
-rw-r--r--app/javascript/mastodon/locales/sr.json194
-rw-r--r--app/javascript/mastodon/locales/ta.json336
-rw-r--r--app/javascript/mastodon/locales/whitelist_ro.json2
-rw-r--r--app/javascript/mastodon/locales/whitelist_ta.json2
-rw-r--r--app/models/report.rb4
-rw-r--r--app/models/user.rb4
-rw-r--r--app/services/report_service.rb3
-rw-r--r--app/views/settings/notifications/show.html.haml3
-rw-r--r--config/application.rb3
-rw-r--r--config/locales/ar.yml54
-rw-r--r--config/locales/ca.yml84
-rw-r--r--config/locales/co.yml129
-rw-r--r--config/locales/cs.yml1
-rw-r--r--config/locales/cy.yml11
-rw-r--r--config/locales/da.yml1
-rw-r--r--config/locales/de.yml38
-rw-r--r--config/locales/devise.cy.yml5
-rw-r--r--config/locales/doorkeeper.ro.yml3
-rw-r--r--config/locales/el.yml1
-rw-r--r--config/locales/fa.yml1
-rw-r--r--config/locales/fr.yml9
-rw-r--r--config/locales/ja.yml10
-rw-r--r--config/locales/ko.yml133
-rw-r--r--config/locales/nl.yml31
-rw-r--r--config/locales/oc.yml29
-rw-r--r--config/locales/pl.yml17
-rw-r--r--config/locales/ro.yml2
-rw-r--r--config/locales/ru.yml47
-rw-r--r--config/locales/simple_form.co.yml1
-rw-r--r--config/locales/simple_form.cs.yml1
-rw-r--r--config/locales/simple_form.cy.yml10
-rw-r--r--config/locales/simple_form.el.yml1
-rw-r--r--config/locales/simple_form.en.yml1
-rw-r--r--config/locales/simple_form.fa.yml1
-rw-r--r--config/locales/simple_form.ko.yml1
-rw-r--r--config/locales/simple_form.nl.yml1
-rw-r--r--config/locales/simple_form.oc.yml1
-rw-r--r--config/locales/simple_form.pl.yml2
-rw-r--r--config/locales/simple_form.ro.yml3
-rw-r--r--config/locales/simple_form.ru.yml1
-rw-r--r--config/locales/simple_form.sr.yml34
-rw-r--r--config/locales/sr.yml93
-rw-r--r--config/routes.rb1
-rw-r--r--config/settings.yml1
-rw-r--r--config/sidekiq.yml2
-rw-r--r--docker-compose.yml2
-rw-r--r--lib/mastodon/version.rb2
-rw-r--r--spec/services/report_service_spec.rb20
67 files changed, 1726 insertions, 371 deletions
diff --git a/app/controllers/settings/notifications_controller.rb b/app/controllers/settings/notifications_controller.rb
index 6286e3ebf..68ebddfc9 100644
--- a/app/controllers/settings/notifications_controller.rb
+++ b/app/controllers/settings/notifications_controller.rb
@@ -21,7 +21,7 @@ class Settings::NotificationsController < Settings::BaseController
 
   def user_settings_params
     params.require(:user).permit(
-      notification_emails: %i(follow follow_request reblog favourite mention digest),
+      notification_emails: %i(follow follow_request reblog favourite mention digest report),
       interactions: %i(must_be_follower must_be_following must_be_following_dm)
     )
   end
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb
index 4733170dc..d60e6a89f 100644
--- a/app/controllers/settings/preferences_controller.rb
+++ b/app/controllers/settings/preferences_controller.rb
@@ -42,7 +42,7 @@ class Settings::PreferencesController < Settings::BaseController
       :setting_system_font_ui,
       :setting_noindex,
       :setting_hide_network,
-      notification_emails: %i(follow follow_request reblog favourite mention digest),
+      notification_emails: %i(follow follow_request reblog favourite mention digest report),
       interactions: %i(must_be_follower must_be_following)
     )
   end
diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb
index 49e764cef..25586fbba 100644
--- a/app/helpers/admin/account_moderation_notes_helper.rb
+++ b/app/helpers/admin/account_moderation_notes_helper.rb
@@ -2,6 +2,8 @@
 
 module Admin::AccountModerationNotesHelper
   def admin_account_link_to(account)
+    return if account.nil?
+
     link_to admin_account_path(account.id), class: name_tag_classes(account) do
       safe_join([
                   image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'),
@@ -11,6 +13,8 @@ module Admin::AccountModerationNotesHelper
   end
 
   def admin_account_inline_link_to(account)
+    return if account.nil?
+
     link_to admin_account_path(account.id), class: name_tag_classes(account, true) do
       content_tag(:span, account.acct, class: 'username')
     end
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index ae915abf6..fc03fcf82 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -35,12 +35,14 @@ module SettingsHelper
     pl: 'Polszczyzna',
     pt: 'Português',
     'pt-BR': 'Português do Brasil',
+    ro: 'Limba română',
     ru: 'Русский',
     sk: 'Slovenčina',
     sl: 'Slovenščina',
     sr: 'Српски',
     'sr-Latn': 'Srpski (latinica)',
     sv: 'Svenska',
+    ta: 'தமிழ்',
     te: 'తెలుగు',
     th: 'ภาษาไทย',
     tr: 'Türkçe',
diff --git a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
index d91b48497..c8425c4c6 100644
--- a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
+++ b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
@@ -73,5 +73,10 @@ describe('emoji', () => {
       expect(emojify('<span class="invisible">😄<br/>😴</span>😇'))
         .toEqual('<span class="invisible">😄<br/>😴</span><img draggable="false" class="emojione" alt="😇" title=":innocent:" src="/emoji/1f607.svg" />');
     });
+
+    it('skips the textual presentation VS15 character', () => {
+      expect(emojify('✴︎')) // This is U+2734 EIGHT POINTED BLACK STAR then U+FE0E VARIATION SELECTOR-15
+        .toEqual('<img draggable="false" class="emojione" alt="✴" title=":eight_pointed_black_star:" src="/emoji/2734.svg" />');
+    });
   });
 });
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index 0f005dd50..988cea253 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -62,6 +62,10 @@ const emojify = (str, customEmojis = {}) => {
       const title = shortCode ? `:${shortCode}:` : '';
       replacement = `<img draggable="false" class="emojione" alt="${match}" title="${title}" src="${assetHost}/emoji/${filename}.svg" />`;
       rend = i + match.length;
+      // If the matched character was followed by VS15 (for selecting text presentation), skip it.
+      if (str.codePointAt(rend) === 65038) {
+        rend += 1;
+      }
     }
     rtn += str.slice(0, i) + replacement;
     str = str.slice(rend);
diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js
index 3ab867b5a..a72ba06ab 100644
--- a/app/javascript/mastodon/features/ui/components/columns_area.js
+++ b/app/javascript/mastodon/features/ui/components/columns_area.js
@@ -1,6 +1,6 @@
 import React from 'react';
 import PropTypes from 'prop-types';
-import { injectIntl } from 'react-intl';
+import { defineMessages, injectIntl } from 'react-intl';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 
@@ -29,6 +29,10 @@ const componentMap = {
   'LIST': ListTimeline,
 };
 
+const messages = defineMessages({
+  publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },
+});
+
 const shouldHideFAB = path => path.match(/^\/statuses\//);
 
 @component => injectIntl(component, { withRef: true })
@@ -149,14 +153,14 @@ export default class ColumnsArea extends ImmutablePureComponent {
   }
 
   render () {
-    const { columns, children, singleColumn, isModalOpen } = this.props;
+    const { columns, children, singleColumn, isModalOpen, intl } = this.props;
     const { shouldAnimate } = this.state;
 
     const columnIndex = getIndex(this.context.router.history.location.pathname);
     this.pendingIndex = null;
 
     if (singleColumn) {
-      const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button'><i className='fa fa-pencil' /></Link>;
+      const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}><i className='fa fa-pencil' /></Link>;
 
       return columnIndex !== -1 ? [
         <ReactSwipeableViews key='content' index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }}>
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index b7527d24e..3d8f7bae2 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -7,12 +7,12 @@
   "account.disclaimer_full": "La informació següent pot reflectir incompleta el perfil de l'usuari.",
   "account.domain_blocked": "Domini ocult",
   "account.edit_profile": "Editar el perfil",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "Característica del perfil",
   "account.follow": "Segueix",
   "account.followers": "Seguidors",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Encara ningú no segueix aquest usuari.",
   "account.follows": "Seguint",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Aquest usuari encara no segueix a ningú.",
   "account.follows_you": "Et segueix",
   "account.hide_reblogs": "Amaga els impulsos de @{name}",
   "account.media": "Media",
@@ -29,7 +29,7 @@
   "account.show_reblogs": "Mostra els impulsos de @{name}",
   "account.unblock": "Desbloca @{name}",
   "account.unblock_domain": "Mostra {domain}",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "No es mostren al perfil",
   "account.unfollow": "Deixa de seguir",
   "account.unmute": "Treure silenci de @{name}",
   "account.unmute_notifications": "Activar notificacions de @{name}",
@@ -89,7 +89,7 @@
   "confirmations.mute.confirm": "Silencia",
   "confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
   "confirmations.redraft.confirm": "Esborrar i refer",
-  "confirmations.redraft.message": "Estàs segur que vols esborrar aquesta publicació i tornar a redactar-la? Perderàs totes les respostes, impulsos i favorits.",
+  "confirmations.redraft.message": "Estàs segur que vols esborrar aquesta publicació i tornar a redactar-la? Perderàs totes els impulsos i favorits, i les respostes a la publicació original es quedaran orfes.",
   "confirmations.unfollow.confirm": "Deixa de seguir",
   "confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
   "embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
@@ -108,19 +108,19 @@
   "emoji_button.search_results": "Resultats de la cerca",
   "emoji_button.symbols": "Símbols",
   "emoji_button.travel": "Viatges i Llocs",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Encara no has bloquejat cap usuari.",
   "empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per fer rodar la pilota!",
   "empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "Encara no hi ha dominis ocults.",
+  "empty_column.favourited_statuses": "Encara no tens cap toot favorit. Quan en tinguis, apareixerà aquí.",
+  "empty_column.favourites": "Encara ningú ha marcat aquest toot com a favorit. Quan algú ho faci, apareixera aquí.",
+  "empty_column.follow_requests": "Encara no teniu cap petició de seguiment. Quan rebeu una, apareixerà aquí.",
   "empty_column.hashtag": "Encara no hi ha res amb aquesta etiqueta.",
   "empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.",
   "empty_column.home.public_timeline": "la línia de temps pública",
   "empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous estats, apareixeran aquí.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.",
+  "empty_column.mutes": "Encara no has silenciat cap usuari.",
   "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
   "empty_column.public": "No hi ha res aquí! Escriu alguna cosa públicament o segueix manualment usuaris d'altres instàncies per omplir-ho",
   "follow_request.authorize": "Autoritzar",
@@ -137,32 +137,32 @@
   "home.column_settings.show_reblogs": "Mostrar impulsos",
   "home.column_settings.show_replies": "Mostrar respostes",
   "keyboard_shortcuts.back": "navegar enrera",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "per obrir la llista d'usuaris bloquejats",
   "keyboard_shortcuts.boost": "impulsar",
   "keyboard_shortcuts.column": "per centrar un estat en una de les columnes",
   "keyboard_shortcuts.compose": "per centrar l'area de composició de text",
   "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "per obrir la columna de missatges directes",
   "keyboard_shortcuts.down": "per baixar en la llista",
   "keyboard_shortcuts.enter": "ampliar estat",
   "keyboard_shortcuts.favourite": "afavorir",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "per obrir la llista de favorits",
+  "keyboard_shortcuts.federated": "per obrir la línia de temps federada",
   "keyboard_shortcuts.heading": "Keyboard Shortcuts",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "per obrir la línia de temps Inici",
   "keyboard_shortcuts.hotkey": "Tecla d'accés directe",
   "keyboard_shortcuts.legend": "per a mostrar aquesta llegenda",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "per obrir la línia de temps local",
   "keyboard_shortcuts.mention": "per esmentar l'autor",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.muted": "per obrir la llista d'usuaris silenciats",
+  "keyboard_shortcuts.my_profile": "per obrir el teu perfil",
+  "keyboard_shortcuts.notifications": "per obrir la columna de notificacions",
+  "keyboard_shortcuts.pinned": "per obrir la llista de toots fixats",
+  "keyboard_shortcuts.profile": "per obrir el perfil de l'autor",
   "keyboard_shortcuts.reply": "respondre",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "per obrir la llista de sol·licituds de seguiment",
   "keyboard_shortcuts.search": "per centrar la cerca",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "per obrir la columna \"Començar\"",
   "keyboard_shortcuts.toggle_hidden": "per a mostrar/amagar text sota CW",
   "keyboard_shortcuts.toot": "per a començar un toot nou de trinca",
   "keyboard_shortcuts.unfocus": "descentrar l'area de composició de text/cerca",
@@ -183,16 +183,16 @@
   "missing_indicator.label": "No trobat",
   "missing_indicator.sublabel": "Aquest recurs no pot ser trobat",
   "mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
-  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.apps": "Apps Mòbils",
   "navigation_bar.blocks": "Usuaris bloquejats",
   "navigation_bar.community_timeline": "Línia de temps Local",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Redacta nou toot",
   "navigation_bar.direct": "Missatges directes",
   "navigation_bar.discover": "Descobreix",
   "navigation_bar.domain_blocks": "Dominis ocults",
   "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favorits",
-  "navigation_bar.filters": "Muted words",
+  "navigation_bar.filters": "Paraules silenciades",
   "navigation_bar.follow_requests": "Sol·licituds de seguiment",
   "navigation_bar.info": "Informació addicional",
   "navigation_bar.keyboard_shortcuts": "Dreceres de teclat",
@@ -280,11 +280,11 @@
   "status.cancel_reblog_private": "Desfer l'impuls",
   "status.cannot_reblog": "Aquesta publicació no pot ser retootejada",
   "status.delete": "Esborrar",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "Visualització detallada de la conversa",
   "status.direct": "Missatge directe @{name}",
   "status.embed": "Incrustar",
   "status.favourite": "Favorit",
-  "status.filtered": "Filtered",
+  "status.filtered": "Filtrat",
   "status.load_more": "Carrega més",
   "status.media_hidden": "Multimèdia amagat",
   "status.mention": "Esmentar @{name}",
@@ -297,7 +297,7 @@
   "status.reblog": "Impuls",
   "status.reblog_private": "Impulsar a l'audiència original",
   "status.reblogged_by": "{name} ha retootejat",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Encara ningú no ha impulsat aquest toot. Quan algú ho faci, apareixeran aquí.",
   "status.redraft": "Esborrar i reescriure",
   "status.reply": "Respondre",
   "status.replyAll": "Respondre al tema",
@@ -319,7 +319,7 @@
   "trends.count_by_accounts": "{count} {rawCount, plural, una {person} altres {people}} parlant",
   "ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
   "upload_area.title": "Arrossega i deixa anar per carregar",
-  "upload_button.label": "Afegir multimèdia",
+  "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_form.description": "Descriure els problemes visuals",
   "upload_form.focus": "Retallar",
   "upload_form.undo": "Esborra",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 195c2a566..d5aeab9f2 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -10,9 +10,9 @@
   "account.endorse": "Fà figurà nant'à u prufilu",
   "account.follow": "Siguità",
   "account.followers": "Abbunati",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Nisunu hè abbunatu à st'utilizatore.",
   "account.follows": "Abbunamenti",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "St'utilizatore ùn seguita nisunu.",
   "account.follows_you": "Vi seguita",
   "account.hide_reblogs": "Piattà spartere da @{name}",
   "account.media": "Media",
@@ -108,19 +108,19 @@
   "emoji_button.search_results": "Risultati di a cerca",
   "emoji_button.symbols": "Simbuli",
   "emoji_button.travel": "Lochi è Viaghju",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.",
   "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!",
   "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.",
+  "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjusterate unu à i vostri favuriti, sarà mustratu quì.",
+  "empty_column.favourites": "Nisunu hà aghjustatu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.",
+  "empty_column.follow_requests": "Ùn avete manc'una dumanda d'abbunamentu. Quandu averete una, sarà mustrata quì.",
   "empty_column.hashtag": "Ùn c'hè ancu nunda quì.",
   "empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.",
   "empty_column.home.public_timeline": "a linea pubblica",
   "empty_column.list": "Ùn c'hè ancu nunda quì. Quandu membri di sta lista manderanu novi statuti, i vidarete quì.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "Ùn avete manc'una lista. Quandu farete una, sarà mustrata quì.",
+  "empty_column.mutes": "Per avà ùn avete manc'un utilizatore piattatu.",
   "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.",
   "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altre istanze per empie a linea pubblica",
   "follow_request.authorize": "Auturizà",
@@ -137,32 +137,32 @@
   "home.column_settings.show_reblogs": "Vede e spartere",
   "home.column_settings.show_replies": "Vede e risposte",
   "keyboard_shortcuts.back": "rivultà",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "per apre una lista d'utilizatori bluccati",
   "keyboard_shortcuts.boost": "sparte",
   "keyboard_shortcuts.column": "fucalizà un statutu indè una colonna",
   "keyboard_shortcuts.compose": "fucalizà nant'à l'area di ridazzione",
   "keyboard_shortcuts.description": "Descrizzione",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "per apre una culonna di missaghji diretti",
   "keyboard_shortcuts.down": "falà indè a lista",
   "keyboard_shortcuts.enter": "apre u statutu",
   "keyboard_shortcuts.favourite": "aghjunghje à i favuriti",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "per apre a lista di i favuriti",
+  "keyboard_shortcuts.federated": "per apre a linea pubblica federata",
   "keyboard_shortcuts.heading": "Accorte cù a tastera",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "per apre a linea d'accolta",
   "keyboard_shortcuts.hotkey": "Accorta",
   "keyboard_shortcuts.legend": "vede a legenda",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "per apre a linea pubblica lucale",
   "keyboard_shortcuts.mention": "mintuvà l'autore",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.muted": "per apre a lista di l'utilizatori piattati",
+  "keyboard_shortcuts.my_profile": "per apre u vostru prufile",
+  "keyboard_shortcuts.notifications": "per apre a culonna di nutificazione",
+  "keyboard_shortcuts.pinned": "per apre a lista di statuti puntarulati",
   "keyboard_shortcuts.profile": "per apre u prufile di l'autore",
   "keyboard_shortcuts.reply": "risponde",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "per apre a lista di dumande d'abbunamentu",
   "keyboard_shortcuts.search": "fucalizà nant'à l'area di circata",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "per apre a culonna \"per principià\"",
   "keyboard_shortcuts.toggle_hidden": "vede/piattà u testu daretu à l'avertimentu CW",
   "keyboard_shortcuts.toot": "scrive un novu statutu",
   "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu",
@@ -297,7 +297,7 @@
   "status.reblog": "Sparte",
   "status.reblog_private": "Sparte à l'audienza uriginale",
   "status.reblogged_by": "{name} hà spartutu",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Per avà nisunu hà spartutu u statutu. Quandu qualch'unu u sparterà, u so contu sarà mustratu quì.",
   "status.redraft": "Sguassà è riscrive",
   "status.reply": "Risponde",
   "status.replyAll": "Risponde à tutti",
@@ -319,7 +319,7 @@
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu",
   "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
   "upload_area.title": "Drag & drop per caricà un fugliale",
-  "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4)",
+  "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_form.description": "Discrive per i malvistosi",
   "upload_form.focus": "Riquatrà",
   "upload_form.undo": "Sguassà",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index d80eba2c1..26af4d8f0 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -49,13 +49,13 @@
   "column.domain_blocks": "Hidden domains",
   "column.favourites": "Favourites",
   "column.follow_requests": "Follow requests",
-  "column.home": "Home",
+  "column.home": "Hafan",
   "column.lists": "Lists",
   "column.mutes": "Muted users",
   "column.notifications": "Notifications",
   "column.pins": "Pinned toot",
   "column.public": "Federated timeline",
-  "column_back_button.label": "Back",
+  "column_back_button.label": "Nôl",
   "column_header.hide_settings": "Hide settings",
   "column_header.moveLeft_settings": "Move column to the left",
   "column_header.moveRight_settings": "Move column to the right",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 133dde963..0bfdfc46a 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -7,12 +7,12 @@
   "account.disclaimer_full": "Das Profil wird möglicherweise unvollständig wiedergegeben.",
   "account.domain_blocked": "Domain versteckt",
   "account.edit_profile": "Profil bearbeiten",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "Auf Profil hervorheben",
   "account.follow": "Folgen",
   "account.followers": "Folgende",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Diesem Profil folgt noch niemand.",
   "account.follows": "Folgt",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Dieses Profil folgt noch niemandem.",
   "account.follows_you": "Folgt dir",
   "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen",
   "account.media": "Medien",
@@ -29,7 +29,7 @@
   "account.show_reblogs": "Von @{name} geteilte Beiträge anzeigen",
   "account.unblock": "@{name} entblocken",
   "account.unblock_domain": "{domain} wieder anzeigen",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "Nicht auf Profil hervorheben",
   "account.unfollow": "Entfolgen",
   "account.unmute": "@{name} nicht mehr stummschalten",
   "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
@@ -89,7 +89,7 @@
   "confirmations.mute.confirm": "Stummschalten",
   "confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?",
   "confirmations.redraft.confirm": "Löschen und neu erstellen",
-  "confirmations.redraft.message": "Bist du dir sicher, dass du diesen Status löschen und neu machen möchtest? Du wirst alle Antworten, Boosts und Favoriten darauf verlieren.",
+  "confirmations.redraft.message": "Bist du dir sicher, dass du diesen Status löschen und neu machen möchtest? Favoriten und Boosts werden verloren gehen und Antworten zu diesem Post werden verwaist sein.",
   "confirmations.unfollow.confirm": "Entfolgen",
   "confirmations.unfollow.message": "Bist du dir sicher, dass du {name} entfolgen möchtest?",
   "embed.instructions": "Du kannst diesen Beitrag auf deiner Webseite einbetten, indem du den folgenden Code einfügst.",
@@ -108,19 +108,19 @@
   "emoji_button.search_results": "Suchergebnisse",
   "emoji_button.symbols": "Symbole",
   "emoji_button.travel": "Reisen und Orte",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Du hast keine Profile blockiert.",
   "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!",
   "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "Es ist noch keine versteckten Domains.",
+  "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.",
+  "empty_column.favourites": "Noch niemand hat diesen Tröt favorisiert. Sobald es jemand tut, wird das hier angezeigt.",
+  "empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.",
   "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
   "empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
   "empty_column.home.public_timeline": "die öffentliche Zeitleiste",
   "empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.",
+  "empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
   "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
   "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Instanzen, um die Zeitleiste aufzufüllen",
   "follow_request.authorize": "Erlauben",
@@ -137,32 +137,32 @@
   "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
   "home.column_settings.show_replies": "Antworten anzeigen",
   "keyboard_shortcuts.back": "zurück navigieren",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen",
   "keyboard_shortcuts.boost": "boosten",
   "keyboard_shortcuts.column": "einen Status in einer der Spalten fokussieren",
   "keyboard_shortcuts.compose": "um das Textfeld zu fokussieren",
   "keyboard_shortcuts.description": "Beschreibung",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "Direct-Message-Spalte öffnen",
   "keyboard_shortcuts.down": "sich in der Liste hinunter bewegen",
   "keyboard_shortcuts.enter": "um den Status zu öffnen",
   "keyboard_shortcuts.favourite": "um zu favorisieren",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "Favoriten-Liste öffnen",
+  "keyboard_shortcuts.federated": "Förderierte Zeitleiste öffnen",
   "keyboard_shortcuts.heading": "Tastenkombinationen",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "Startseite öffnen",
   "keyboard_shortcuts.hotkey": "Tastenkürzel",
   "keyboard_shortcuts.legend": "um diese Übersicht anzuzeigen",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "Lokale Zeitleiste öffnen",
   "keyboard_shortcuts.mention": "um Autor_in zu erwähnen",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen",
+  "keyboard_shortcuts.my_profile": "Dein Profil öffnen",
+  "keyboard_shortcuts.notifications": "Benachrichtigungsspalte öffnen",
+  "keyboard_shortcuts.pinned": "Liste angehefteter Tröts öffnen",
   "keyboard_shortcuts.profile": "um Profil des Autors zu öffnen",
   "keyboard_shortcuts.reply": "um zu antworten",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "Liste der Folge-Anfragen  öffnen",
   "keyboard_shortcuts.search": "um die Suche zu fokussieren",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "\"Erste Schritte-Spalte öffnen",
   "keyboard_shortcuts.toggle_hidden": "um den Text hinter einer Inhaltswarnung zu verstecken oder ihn anzuzeigen",
   "keyboard_shortcuts.toot": "um einen neuen Toot zu beginnen",
   "keyboard_shortcuts.unfocus": "um das Textfeld/die Suche nicht mehr zu fokussieren",
@@ -183,10 +183,10 @@
   "missing_indicator.label": "Nicht gefunden",
   "missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden",
   "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
-  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.apps": "Mobile Apps",
   "navigation_bar.blocks": "Blockierte Profile",
   "navigation_bar.community_timeline": "Lokale Zeitleiste",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Neuen Tröt verfassen",
   "navigation_bar.direct": "Direktnachrichten",
   "navigation_bar.discover": "Entdecken",
   "navigation_bar.domain_blocks": "Versteckte Domains",
@@ -297,7 +297,7 @@
   "status.reblog": "Teilen",
   "status.reblog_private": "An das eigentliche Publikum teilen",
   "status.reblogged_by": "{name} teilte",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Diesen Tröt hat noch niemand geboostet. Sobald es jemand tut, wird er hier angezeigt.",
   "status.redraft": "Löschen und neu erstellen",
   "status.reply": "Antworten",
   "status.replyAll": "Auf Thread antworten",
@@ -319,7 +319,7 @@
   "trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber",
   "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
   "upload_area.title": "Zum Hochladen hereinziehen",
-  "upload_button.label": "Mediendatei hinzufügen",
+  "upload_button.label": "Mediendatei hinzufügen (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
   "upload_form.focus": "Zuschneiden",
   "upload_form.undo": "Löschen",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index f40cff7f6..e77d00286 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -297,7 +297,7 @@
   "status.reblog": "Partager",
   "status.reblog_private": "Booster vers l’audience originale",
   "status.reblogged_by": "{name} a partagé :",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Personne n'a encore partagé ce pouet. Lorsque quelqu'un le fera, il apparaîtra ici.",
   "status.redraft": "Effacer et ré-écrire",
   "status.reply": "Répondre",
   "status.replyAll": "Répondre au fil",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 0affa00cc..6ec9321de 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -115,7 +115,7 @@
   "empty_column.blocks": "まだ誰もブロックしていません。",
   "empty_column.community": "ローカルタイムラインはまだ使われていません。何か書いてみましょう!",
   "empty_column.direct": "ダイレクトメッセージはまだありません。ダイレクトメッセージをやりとりすると、ここに表示されます。",
-  "empty_column.domain_blocks": "まだ非表示にしたドメインがありません。",
+  "empty_column.domain_blocks": "非表示にしているドメインはありません。",
   "empty_column.favourited_statuses": "まだ何もお気に入り登録していません。お気に入り登録するとここに表示されます。",
   "empty_column.favourites": "まだ誰もお気に入り登録していません。お気に入り登録されるとここに表示されます。",
   "empty_column.follow_requests": "まだフォローリクエストを受けていません。フォローリクエストを受けるとここに表示されます。",
@@ -190,7 +190,7 @@
   "navigation_bar.apps": "アプリ",
   "navigation_bar.blocks": "ブロックしたユーザー",
   "navigation_bar.community_timeline": "ローカルタイムライン",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "トゥートの新規作成",
   "navigation_bar.direct": "ダイレクトメッセージ",
   "navigation_bar.discover": "見つける",
   "navigation_bar.domain_blocks": "非表示にしたドメイン",
@@ -285,7 +285,7 @@
   "status.cancel_reblog_private": "ブースト解除",
   "status.cannot_reblog": "この投稿はブーストできません",
   "status.delete": "削除",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "詳細な会話ビュー",
   "status.direct": "@{name}さんにダイレクトメッセージ",
   "status.embed": "埋め込み",
   "status.favourite": "お気に入り",
diff --git a/app/javascript/mastodon/locales/locale-data/co.js b/app/javascript/mastodon/locales/locale-data/co.js
new file mode 100644
index 000000000..2b071ecbd
--- /dev/null
+++ b/app/javascript/mastodon/locales/locale-data/co.js
@@ -0,0 +1,108 @@
+/*eslint eqeqeq: "off"*/
+/*eslint no-nested-ternary: "off"*/
+/*eslint quotes: "off"*/
+
+export default [{
+  locale: "co",
+  pluralRuleFunction: function (e, a) {
+    return a ? 1 == e ? "one" : "other" : e >= 0 && e < 2 ? "one" : "other";
+  },
+  fields: {
+    year: {
+      displayName: "annu",
+      relative: {
+        0: "quist'annu",
+        1: "l'annu chì vene",
+        "-1": "l'annu passatu",
+      },
+      relativeTime: {
+        future: {
+          one: "in {0} annu",
+          other: "in {0} anni",
+        },
+        past: {
+          one: "{0} annu fà",
+          other: "{0} anni fà",
+        },
+      },
+    },
+    month: {
+      displayName: "mese",
+      relative: {
+        0: "Questu mese",
+        1: "u mese chì vene",
+        "-1": "u mese passatu",
+      },
+      relativeTime: {
+        future: {
+          one: "in {0} mese",
+          other: "in {0} mesi",
+        },
+        past: {
+          one: "{0} mese fà",
+          other: "{0} mesi fà",
+        },
+      },
+    },
+    day: {
+      displayName: "ghjornu",
+      relative: {
+        0: "oghje",
+        1: "dumane",
+        "-1": "eri",
+      },
+      relativeTime: {
+        future: {
+          one: "in {0} ghjornu",
+          other: "in {0} ghjornu",
+        },
+        past: {
+          one: "{0} ghjornu fà",
+          other: "{0} ghjorni fà",
+        },
+      },
+    },
+    hour: {
+      displayName: "ora",
+      relativeTime: {
+        future: {
+          one: "in {0} ora",
+          other: "in {0} ore",
+        },
+        past: {
+          one: "{0} ora fà",
+          other: "{0} ore fà",
+        },
+      },
+    },
+    minute: {
+      displayName: "minuta",
+      relativeTime: {
+        future: {
+          one: "in {0} minuta",
+          other: "in {0} minute",
+        },
+        past: {
+          one: "{0} minuta fà",
+          other: "{0} minute fà",
+        },
+      },
+    },
+    second: {
+      displayName: "siconda",
+      relative: {
+        0: "avà",
+      },
+      relativeTime: {
+        future: {
+          one: "in {0} siconda",
+          other: "in {0} siconde",
+        },
+        past: {
+          one: "{0} siconda fà",
+          other: "{0} siconde fà",
+        },
+      },
+    },
+  },
+}];
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 2a1eaa13f..5623bc54f 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -259,8 +259,8 @@
   "relative_time.seconds": "{number}s",
   "reply_indicator.cancel": "Annuleren",
   "report.forward": "Doorsturen naar {target}",
-  "report.forward_hint": "Het account bevindt zich op een andere server. Stuur daar eveneens een geanonimiseerde kopie van de gerapporteerde toot(s) naartoe?",
-  "report.hint": "De gerapporteerde toot(s) worden naar de moderatoren van  jouw server gestuurd. Je kunt hieronder een uitleg geven waarom je dit account rapporteert:",
+  "report.forward_hint": "Het account bevindt zich op een andere server. Stuur daar eveneens een geanonimiseerde kopie van de rapportage naartoe?",
+  "report.hint": "De rapportage wordt naar de moderatoren van jouw server gestuurd. Je kunt hieronder een uitleg geven waarom je dit account rapporteert:",
   "report.placeholder": "Extra opmerkingen",
   "report.submit": "Verzenden",
   "report.target": "Rapporteer {target}",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 900198932..254e9a2a5 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -111,16 +111,16 @@
   "empty_column.blocks": "Avètz pas blocat degun pel moment.",
   "empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
   "empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "I a pas encara cap de domeni amagat.",
+  "empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quanda n’auretz un, apareisserà  aquí.",
+  "empty_column.favourites": "Degun a pas encara mes en favorit aqueste tut. Quanda qualqu’un o farà, apareisserà  aquí.",
+  "empty_column.follow_requests": "Avètz pas encara de demanda d’abonament. Quand n’auretz una apareisserà aquí.",
   "empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.",
   "empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.",
   "empty_column.home.public_timeline": "lo flux public",
   "empty_column.list": "I a pas res dins la lista pel moment. Quand de membres d’aquesta lista publiquen de novèls estatuts los veiretz aquí.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "Encara avètz pas cap de lista. Quand ne creetz una, apareisserà aquí.",
+  "empty_column.mutes": "Encara avètz pas mes en silenci degun.",
   "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.",
   "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autras instàncias per garnir lo flux public",
   "follow_request.authorize": "Acceptar",
@@ -137,32 +137,32 @@
   "home.column_settings.show_reblogs": "Mostrar los partatges",
   "home.column_settings.show_replies": "Mostrar las responsas",
   "keyboard_shortcuts.back": "anar enrèire",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "per dobrir la lista d’utilizaires blocats",
   "keyboard_shortcuts.boost": "partejar",
   "keyboard_shortcuts.column": "centrar un estatut a una colomna",
   "keyboard_shortcuts.compose": "anar al camp tèxte",
   "keyboard_shortcuts.description": "Descripcion",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "per dobrir la columna de messatges dirèctes",
   "keyboard_shortcuts.down": "far davalar dins la lista",
   "keyboard_shortcuts.enter": "dobrir los estatuts",
   "keyboard_shortcuts.favourite": "apondre als favorits",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "per dobrir la lista de favorits",
+  "keyboard_shortcuts.federated": "per dobrir lo flux public global",
   "keyboard_shortcuts.heading": "Acorchis clavièr",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "per dobrir lo flux public local",
   "keyboard_shortcuts.hotkey": "Acorchis",
   "keyboard_shortcuts.legend": "mostrar aquesta legenda",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "per dobrir lo flux public local",
   "keyboard_shortcuts.mention": "mencionar l’autor",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.muted": "per dorbir la lista dels utilizaires silenciats",
+  "keyboard_shortcuts.my_profile": "per dobrir vòstre perfil",
+  "keyboard_shortcuts.notifications": "per dobrir la columna de notificacions",
+  "keyboard_shortcuts.pinned": "per dobrir la lista dels tuts penjats",
   "keyboard_shortcuts.profile": "per dobrir lo perfil de l’autor",
   "keyboard_shortcuts.reply": "respondre",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "per dorbir la lista de demanda d’abonament",
   "keyboard_shortcuts.search": "anar a la recèrca",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "per dobrir la columna «Per començar»",
   "keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments",
   "keyboard_shortcuts.toot": "començar un estatut tot novèl",
   "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca",
@@ -186,7 +186,7 @@
   "navigation_bar.apps": "Aplicacions mobil",
   "navigation_bar.blocks": "Personas blocadas",
   "navigation_bar.community_timeline": "Flux public local",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Escriure un nòu tut",
   "navigation_bar.direct": "Messatges dirèctes",
   "navigation_bar.discover": "Trobar",
   "navigation_bar.domain_blocks": "Domenis resconduts",
@@ -280,7 +280,7 @@
   "status.cancel_reblog_private": "Quitar de partejar",
   "status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
   "status.delete": "Escafar",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "Vista detalhada de la convèrsa",
   "status.direct": "Messatge per @{name}",
   "status.embed": "Embarcar",
   "status.favourite": "Apondre als favorits",
@@ -297,7 +297,7 @@
   "status.reblog": "Partejar",
   "status.reblog_private": "Partejar a l’audiéncia d’origina",
   "status.reblogged_by": "{name} a partejat",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Degun a pas encara partejat aqueste tut. Quand qualqu’un o farà, apareisserà aquí.",
   "status.redraft": "Escafar e tornar formular",
   "status.reply": "Respondre",
   "status.replyAll": "Respondre a la conversacion",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
new file mode 100644
index 000000000..f3c540f2e
--- /dev/null
+++ b/app/javascript/mastodon/locales/ro.json
@@ -0,0 +1,336 @@
+{
+  "account.badges.bot": "Bot",
+  "account.block": "Blocheaza @{name}",
+  "account.block_domain": "Ascunde tot de la {domain}",
+  "account.blocked": "Blocat",
+  "account.direct": "Mesaj direct @{name}",
+  "account.disclaimer_full": "Informatiile de la jos pot reflecta profilul incomplet al utilizatorului.",
+  "account.domain_blocked": "Domeniu ascuns",
+  "account.edit_profile": "Editeaza profilul",
+  "account.endorse": "Promoveaza pe profil",
+  "account.follow": "Urmareste",
+  "account.followers": "Urmaritori",
+  "account.followers.empty": "Nimeni nu urmareste acest utilizator inca.",
+  "account.follows": "Urmareste",
+  "account.follows.empty": "Acest utilizator nu urmareste pe nimeni inca.",
+  "account.follows_you": "Te urmareste",
+  "account.hide_reblogs": "Ascunde promovarile de la @{name}",
+  "account.media": "Media",
+  "account.mention": "Mentioneaza @{name}",
+  "account.moved_to": "{name} a fost mutat la:",
+  "account.mute": "Opreste @{name}",
+  "account.mute_notifications": "Opreste notificarile de la @{name}",
+  "account.muted": "Oprit",
+  "account.posts": "Postare",
+  "account.posts_with_replies": "Postari si replici",
+  "account.report": "Raporteaza @{name}",
+  "account.requested": "Asteapta aprobare. Apasa pentru a anula cererea de urmarire",
+  "account.share": "Distribuie profilul lui @{name}",
+  "account.show_reblogs": "Arata promovarile de la @{name}",
+  "account.unblock": "Deblocheaza @{name}",
+  "account.unblock_domain": "Arata {domain}",
+  "account.unendorse": "Nu promova pe profil",
+  "account.unfollow": "Nu mai urmari",
+  "account.unmute": "Porneste notificarile @{name}",
+  "account.unmute_notifications": "Porneste notificarile de la @{name}",
+  "account.view_full_profile": "Vezi profilul complet",
+  "alert.unexpected.message": "A aparut o eroare neasteptata.",
+  "alert.unexpected.title": "Hopa!",
+  "boost_modal.combo": "Poti apasa {combo} pentru a sari peste asta data viitoare",
+  "bundle_column_error.body": "Ceva nu a functionat la incarcarea acestui component.",
+  "bundle_column_error.retry": "Incearca din nou",
+  "bundle_column_error.title": "Eoare de retea",
+  "bundle_modal_error.close": "Inchis",
+  "bundle_modal_error.message": "Ceva nu a functionat in timupul incacarii acestui component.",
+  "bundle_modal_error.retry": "Incearca din nou",
+  "column.blocks": "Utilizatori blocati",
+  "column.community": "Fluxul Local",
+  "column.direct": "Mesaje directe",
+  "column.domain_blocks": "Domenii ascunse",
+  "column.favourites": "Favorite",
+  "column.follow_requests": "Cereri de urmarire",
+  "column.home": "Acasa",
+  "column.lists": "Liste",
+  "column.mutes": "Utilizatori opriti",
+  "column.notifications": "Notificari",
+  "column.pins": "Postari fixate",
+  "column.public": "Flux global",
+  "column_back_button.label": "Inapoi",
+  "column_header.hide_settings": "Ascunde setarile",
+  "column_header.moveLeft_settings": "Muta coloana la stanga",
+  "column_header.moveRight_settings": "Muta coloaba la dreapta",
+  "column_header.pin": "Fixeaza",
+  "column_header.show_settings": "Arata setarile",
+  "column_header.unpin": "Elibereaza",
+  "column_subheading.settings": "Setari",
+  "community.column_settings.media_only": "Doar media",
+  "compose_form.direct_message_warning": "Aceasta postare va fi trimisa doar utilizatorilor mentionati.",
+  "compose_form.direct_message_warning_learn_more": "Afla mai multe",
+  "compose_form.hashtag_warning": "Aceasta postare nu va fi listata sub nici un hastag. Doar postarile publice pot fi gasite dupa un hastag.",
+  "compose_form.lock_disclaimer": "Contul tau nu este {locked}. Toata lumea te poate urmari pentru a vedea postarile doar pentru utilizatori.",
+  "compose_form.lock_disclaimer.lock": "blocat",
+  "compose_form.placeholder": "La ce te gandesti?",
+  "compose_form.publish": "Postare",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.marked": "Continutul media este marcat ca sensibil",
+  "compose_form.sensitive.unmarked": "Continutul media nu este marcat ca sensibil",
+  "compose_form.spoiler.marked": "Textul este ascuns sub advertizare",
+  "compose_form.spoiler.unmarked": "Textul nu este ascuns",
+  "compose_form.spoiler_placeholder": "Scrie adveritzarea aici",
+  "confirmation_modal.cancel": "Anuleaza",
+  "confirmations.block.confirm": "Blocheaza",
+  "confirmations.block.message": "Esti sigur ca vrei sa blochezi {name}?",
+  "confirmations.delete.confirm": "Sterge",
+  "confirmations.delete.message": "Esti sigur ca vrei sa stergi asta?",
+  "confirmations.delete_list.confirm": "Sterge",
+  "confirmations.delete_list.message": "Esti sigur ca vrei sa stergi permanent aceasta lista?",
+  "confirmations.domain_block.confirm": "Ascunde tot domeniul",
+  "confirmations.domain_block.message": "Esti absolut sigur ca vrei sa blochezi complet {domain}? In cele mai multe cazuti raportarea sau oprirea anumitor lucruri este sufucienta si de preferat. Nu vei mai vedea nici un continut de la acest domeniu in nici un flux public sau in notificarile tale. Urmaritorii tai de la acele domenii vor fi retrasi.",
+  "confirmations.mute.confirm": "Opreste",
+  "confirmations.mute.message": "Esti sigur ca vrei sa opresti {name}?",
+  "confirmations.redraft.confirm": "Strge si salveaza din nou",
+  "confirmations.redraft.message": "Esti sigur ca vrei sa faci asta? Tot ce tine de aceasta postare, inclusiv raspunsurile vor fi deconectate.",
+  "confirmations.unfollow.confirm": "Nu mai urmari",
+  "confirmations.unfollow.message": "Esti sigur ca nu mai vrei sa urmaresti {name}?",
+  "embed.instructions": "Insereaza aceasta postare pe site-ul tau adaugand codul de mai jos.",
+  "embed.preview": "Cam asa va arata:",
+  "emoji_button.activity": "Activitate",
+  "emoji_button.custom": "Personalizat",
+  "emoji_button.flags": "Marcaje",
+  "emoji_button.food": "Mancare si Bauturi",
+  "emoji_button.label": "Insereaza un emoji",
+  "emoji_button.nature": "Natura",
+  "emoji_button.not_found": "Fara emojiuri (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Obiecte",
+  "emoji_button.people": "Persoane",
+  "emoji_button.recent": "Utilizate frecvent",
+  "emoji_button.search": "Cauta...",
+  "emoji_button.search_results": "Rezultatele cautarii",
+  "emoji_button.symbols": "Simboluri",
+  "emoji_button.travel": "Calatorii si Locuri",
+  "empty_column.blocks": "Nu ai blocat nici un utilizator inca.",
+  "empty_column.community": "Nimic in fluxul local. Scrie ceva public pentru a impinge bila la deal!",
+  "empty_column.direct": "Nu ai nici un mesaj direct inca. Cand trimiti sau primesti unul, vor fi afisare aici.",
+  "empty_column.domain_blocks": "Nu sunt domenii ascunse inca.",
+  "empty_column.favourited_statuses": "Nu ai nici o postare favorita inca. Cand vei avea, vor fi afisare inca.",
+  "empty_column.favourites": "Nimeni nu are inca nici o postare favorita. Cand cineva va adauga la favorite, vor aparea aici.",
+  "empty_column.follow_requests": "Nu ai inca nici o cerete de urmarire. Cand vei primi una, va fi afisata aici.",
+  "empty_column.hashtag": "Acest hastag nu a fost folosit in nici o postare inca.",
+  "empty_column.home": "Fluxul tau este gol. Viziteaza {public} sau fa o cautare pentru a incepe a incepe si a cunoaste alti oameni.",
+  "empty_column.home.public_timeline": "fluxul public",
+  "empty_column.list": "Nu este nimic inca in aceasta lista. Cand membri acestei liste vor incepe sa posteze, va aparea aici.",
+  "empty_column.lists": "Nu ai inca nici o lista. Cand vei crea una, va aparea aici.",
+  "empty_column.mutes": "Nu ai oprit nici un utilizator inca.",
+  "empty_column.notifications": "Nu ai nici o notificare inca. Interactioneaza cu altii pentru a incepe o conversatie.",
+  "empty_column.public": "Nu este nimci aici inca! Scrie ceva public, sau urmareste alti utilizatori din alte medii pentru a porni fluxul",
+  "follow_request.authorize": "Autorizeaza",
+  "follow_request.reject": "Respinge",
+  "getting_started.developers": "Dezvolatori",
+  "getting_started.documentation": "Documentatie",
+  "getting_started.find_friends": "Gaseste prietenii de pe Twitter",
+  "getting_started.heading": "Incepe",
+  "getting_started.invite": "Invita oameni",
+  "getting_started.open_source_notice": "Mastodon este o retea de socializare de tip open source. Poti contribui la dezvoltarea ei sau sa semnalezi erorirle pe GitHub la {github}.",
+  "getting_started.security": "Securitate",
+  "getting_started.terms": "Termenii de Utilizare",
+  "home.column_settings.basic": "De baza",
+  "home.column_settings.show_reblogs": "Arata promovarile",
+  "home.column_settings.show_replies": "Arata raspunsurile",
+  "keyboard_shortcuts.back": "navigheaza inapoi",
+  "keyboard_shortcuts.blocked": "sa deschida lista utilizatorilor blocati",
+  "keyboard_shortcuts.boost": "sa promoveze",
+  "keyboard_shortcuts.column": "sa focuzeze o postare in una dintre coloane",
+  "keyboard_shortcuts.compose": "sa focuzeze zona de compunere",
+  "keyboard_shortcuts.description": "Descriere",
+  "keyboard_shortcuts.direct": "sa deschida coloane de mesaje directe",
+  "keyboard_shortcuts.down": "sa fie mutata jos in lista",
+  "keyboard_shortcuts.enter": "sa deschisa status",
+  "keyboard_shortcuts.favourite": "sa adauge la favorite",
+  "keyboard_shortcuts.favourites": "sa deschida lista cu favorite",
+  "keyboard_shortcuts.federated": "sa deschida fluxul global",
+  "keyboard_shortcuts.heading": "Comenzi din tastature",
+  "keyboard_shortcuts.home": "sa deschida fluxul principal",
+  "keyboard_shortcuts.hotkey": "Prescurtari",
+  "keyboard_shortcuts.legend": "sa afiseze aceasta legenda",
+  "keyboard_shortcuts.local": "sa deschida fluxul local",
+  "keyboard_shortcuts.mention": "sa mentioneze autorul",
+  "keyboard_shortcuts.muted": "sa deschida lista utilizatorilor opriti",
+  "keyboard_shortcuts.my_profile": "sa deschida profilul tau",
+  "keyboard_shortcuts.notifications": "sa deschida coloana cu notificari",
+  "keyboard_shortcuts.pinned": "sa deschida lista postarilor fixate",
+  "keyboard_shortcuts.profile": "sa deschida porfilul autorului",
+  "keyboard_shortcuts.reply": "sa raspunda",
+  "keyboard_shortcuts.requests": "sa deschida lista cu cereri de urmarire",
+  "keyboard_shortcuts.search": "sa focuseze cautarea",
+  "keyboard_shortcuts.start": "sa deschida coloana \"Incepere\"",
+  "keyboard_shortcuts.toggle_hidden": "sa arate/ascunda textul in spatele CW",
+  "keyboard_shortcuts.toot": "sa inceapa o noua postare",
+  "keyboard_shortcuts.unfocus": "sa dezactiveze compunerea/cautarea",
+  "keyboard_shortcuts.up": "sa mute mai sus in lista",
+  "lightbox.close": "Inchide",
+  "lightbox.next": "Urmatorul",
+  "lightbox.previous": "Precedentul",
+  "lists.account.add": "Adauga in lista",
+  "lists.account.remove": "Elimina din lista",
+  "lists.delete": "Sterge lista",
+  "lists.edit": "Editeaza lista",
+  "lists.new.create": "Adauga lista",
+  "lists.new.title_placeholder": "Titlul pentru noua lista",
+  "lists.search": "Cauta printre persoanale pe care le urmaresti",
+  "lists.subheading": "Listele tale",
+  "loading_indicator.label": "Incarcare...",
+  "media_gallery.toggle_visible": "Comutati vizibilitatea",
+  "missing_indicator.label": "Nu a fost gasit",
+  "missing_indicator.sublabel": "Aceasta resursa nu a putut fi gasita",
+  "mute_modal.hide_notifications": "Ascunzi notificarile de la acest utilizator?",
+  "navigation_bar.apps": "Aplicatii mobile",
+  "navigation_bar.blocks": "Utilizatori blocati",
+  "navigation_bar.community_timeline": "Flux local",
+  "navigation_bar.compose": "Compune o noua postare",
+  "navigation_bar.direct": "Mesaje directe",
+  "navigation_bar.discover": "Descopera",
+  "navigation_bar.domain_blocks": "Domenii ascunse",
+  "navigation_bar.edit_profile": "Editeaza profilul",
+  "navigation_bar.favourites": "Favorite",
+  "navigation_bar.filters": "Cuvinte oprite",
+  "navigation_bar.follow_requests": "Cereri de urmarire",
+  "navigation_bar.info": "Despre aceasta instanta",
+  "navigation_bar.keyboard_shortcuts": "Prescurtari",
+  "navigation_bar.lists": "Liste",
+  "navigation_bar.logout": "Deconectare",
+  "navigation_bar.mutes": "Utilizatori opriti",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Postari fixate",
+  "navigation_bar.preferences": "Preferinte",
+  "navigation_bar.public_timeline": "Flux global",
+  "navigation_bar.security": "Securitate",
+  "notification.favourite": "{name} a adaugat statusul tau la favorite",
+  "notification.follow": "{name} te urmareste",
+  "notification.mention": "{name} te-a mentionat",
+  "notification.reblog": "{name} a redistribuit postarea ta",
+  "notifications.clear": "Sterge notificarile",
+  "notifications.clear_confirmation": "Esti sigur ca vrei sa stergi toate notificarile?",
+  "notifications.column_settings.alert": "Notificari desktop",
+  "notifications.column_settings.favourite": "Favorite:",
+  "notifications.column_settings.follow": "Noi urmaritori:",
+  "notifications.column_settings.mention": "Mentiuni:",
+  "notifications.column_settings.push": "Notificari push",
+  "notifications.column_settings.push_meta": "Acest dispozitiv",
+  "notifications.column_settings.reblog": "Redistribuite:",
+  "notifications.column_settings.show": "Arata in coloana",
+  "notifications.column_settings.sound": "Reda sunet",
+  "notifications.group": "{count} notificari",
+  "onboarding.done": "Gata",
+  "onboarding.next": "Urmatorul",
+  "onboarding.page_five.public_timelines": "Fluxul local afiseaza postarile publice de la toti utilizatorii pe {domain}. Fluxul global afiseaza postarile publice de la toti utilizatorii din reteaua mastodon pe care utilizatorii de pe {domain} ii urmaresc. Acestea sunt fluxurile publice, un mod grozav de a descoperi oameni noi.",
+  "onboarding.page_four.home": "Fluxul Acasa arata postarile celor pe care ii urmaresti.",
+  "onboarding.page_four.notifications": "Coloana de notificari arata cand cineva interactioneaza cu tine.",
+  "onboarding.page_one.federation": "Mastodon este o retea independenta de servere care impreuna formeaza o imensa retea de socializare. Noi numim aceste servere istante.",
+  "onboarding.page_one.full_handle": "Id-ul tau complet",
+  "onboarding.page_one.handle_hint": "Aceasta este ceea ce trebuie sa le spuneti prietenilor cand vor sa va caute.",
+  "onboarding.page_one.welcome": "Bun venit la Mastodon!",
+  "onboarding.page_six.admin": "Administatorul acestei instante este {admin}.",
+  "onboarding.page_six.almost_done": "Aproape gata...",
+  "onboarding.page_six.appetoot": "Distractie placuta!",
+  "onboarding.page_six.apps_available": "Acestea sunt {apps} disponibile pentru iOS, Android si alte platforme.",
+  "onboarding.page_six.github": "Mastodon este un software de tip open source. Poti raporta erori, cere facilitati, sau sa contribuiti pe {github}.",
+  "onboarding.page_six.guidelines": "instructiunile comunitatii",
+  "onboarding.page_six.read_guidelines": "Va rugam cititi {domain} {guidelines}!",
+  "onboarding.page_six.various_app": "aplicatii mobile",
+  "onboarding.page_three.profile": "Editeaza poriflul pentru a schimba avatarul, bio si numele. Tot acolo vei gasi si alte preferinte.",
+  "onboarding.page_three.search": "Utilizeaza bara de cautare pentru a gasi oameni sau hastaguri precum {illustration} si {introductions}. Pentru a gasi o persoana care nu este inscrisa pe aceasta instanta foloseste id-ul lor complet.",
+  "onboarding.page_two.compose": "Scrie postari din coloana pentru compunere. Poti incarca imagini, schimba setarile de confidentialitate, si adauga advertisemente asupra continutului cu ajutorul iconitelor.",
+  "onboarding.skip": "Omite",
+  "privacy.change": "Ajusteaza confidentialitatea statusului",
+  "privacy.direct.long": "Posteaza doar pentru utilizatorii mentionati",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Posteaza doar pentru urmaritori",
+  "privacy.private.short": "Doar urmaritori",
+  "privacy.public.long": "Posteaza in fluxul public",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Nu afisa in fluxul public",
+  "privacy.unlisted.short": "Nelistat",
+  "regeneration_indicator.label": "Incarcare…",
+  "regeneration_indicator.sublabel": "Fluxul tau este in preparare!",
+  "relative_time.days": "{number}z",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "acum",
+  "relative_time.minutes": "{number}l",
+  "relative_time.seconds": "{number}s",
+  "reply_indicator.cancel": "Anuleaza",
+  "report.forward": "Redirectioneaza catre {target}",
+  "report.forward_hint": "Acest cont este de pe un alt server. Trimitem o copie anonima a raportului si acolo?",
+  "report.hint": "Sesizarea va fi trimsa catre moderatorii acestei instante. Poti oferi o explicatie pentru aceasta sesizare mai jos:",
+  "report.placeholder": "Comentarii optionale",
+  "report.submit": "Trimite",
+  "report.target": "Raporteaza {target}",
+  "search.placeholder": "Cauta",
+  "search_popout.search_format": "Formate pentru cautare avansata",
+  "search_popout.tips.full_text": "Textele simple returneaza statusuri pe care le-ai scris, favorizat, redistribuit, sau in care au fost mentionate, deasmenea si utilizatorii sau hastagurile care se potrivesc.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Textele simple returneaza numele, numele de utilizarori si hastagurile care se potrivesc",
+  "search_popout.tips.user": "utilizator",
+  "search_results.accounts": "Oameni",
+  "search_results.hashtags": "Hashtaguri",
+  "search_results.statuses": "Postari",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "standalone.public_title": "O privire in interior...",
+  "status.block": "Blocheaza @{name}",
+  "status.cancel_reblog_private": "Nedistribuit",
+  "status.cannot_reblog": "Aceasta postare nu poate fi redistribuita",
+  "status.delete": "Sterge",
+  "status.detailed_status": "Conversatia detailata",
+  "status.direct": "Mesaj direct @{name}",
+  "status.embed": "Incorporare",
+  "status.favourite": "Favorite",
+  "status.filtered": "Sortate",
+  "status.load_more": "Incarca mai multe",
+  "status.media_hidden": "Media ascunsa",
+  "status.mention": "Mentioneaza @{name}",
+  "status.more": "Mai mult",
+  "status.mute": "Opreste @{name}",
+  "status.mute_conversation": "Opreste conversatia",
+  "status.open": "Extinde acest status",
+  "status.pin": "Fixeaza pe profil",
+  "status.pinned": "Postare fixata",
+  "status.reblog": "Redistribuie",
+  "status.reblog_private": "Redistribuie la audienta originala",
+  "status.reblogged_by": "{name} redistribuit",
+  "status.reblogs.empty": "Nimeni nu a redistribuit aceasta postare inca. Cand cineva o va face, va aparea aici.",
+  "status.redraft": "Sterge si adauga la ciorne",
+  "status.reply": "Raspunde",
+  "status.replyAll": "Raspunde la topic",
+  "status.report": "Raporteaza @{name}",
+  "status.sensitive_toggle": "Afiseaza",
+  "status.sensitive_warning": "Continut sensibil",
+  "status.share": "Distribuie",
+  "status.show_less": "Arata mai putin",
+  "status.show_less_all": "Arata mai putin pentru toti",
+  "status.show_more": "Arata mai mult",
+  "status.show_more_all": "Arata mai mult pentru toti",
+  "status.unmute_conversation": "Reporneste conversatia",
+  "status.unpin": "Elibereaza din profil",
+  "tabs_bar.federated_timeline": "Global",
+  "tabs_bar.home": "Acasa",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notificari",
+  "tabs_bar.search": "Cautare",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} vorbesc",
+  "ui.beforeunload": "Ciorna se va priede daca parasesti pagina.",
+  "upload_area.title": "Trage si elibereaza pentru a incarca",
+  "upload_button.label": "Adauga media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_form.description": "Adauga o descriere pentru persoanele cu deficiente de vedere",
+  "upload_form.focus": "Taie",
+  "upload_form.undo": "Sterge",
+  "upload_progress.label": "Se Incarca...",
+  "video.close": "Inchide video",
+  "video.exit_fullscreen": "Inchide",
+  "video.expand": "Extinde video",
+  "video.fullscreen": "Ecran intreg",
+  "video.hide": "Ascunde video",
+  "video.mute": "Opreste sonorul",
+  "video.pause": "Pauza",
+  "video.play": "Redare",
+  "video.unmute": "Reporneste sunetul"
+}
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 8add56641..83cbb5240 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -10,9 +10,9 @@
   "account.endorse": "Рекомендовать в профиле",
   "account.follow": "Подписаться",
   "account.followers": "Подписаны",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Никто не подписан на этого пользователя.",
   "account.follows": "Подписки",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Этот пользователь ни на кого не подписан.",
   "account.follows_you": "Подписан(а) на Вас",
   "account.hide_reblogs": "Скрыть продвижения от @{name}",
   "account.media": "Медиа",
@@ -108,19 +108,19 @@
   "emoji_button.search_results": "Результаты поиска",
   "emoji_button.symbols": "Символы",
   "emoji_button.travel": "Путешествия",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Вы ещё никого не заблокировали.",
   "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!",
   "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "Скрытых доменов пока нет.",
+  "empty_column.favourited_statuses": "Вы не добавили ни одного статуса в 'Избранное'. Как только Вы это сделаете, они появятся здесь.",
+  "empty_column.favourites": "Никто ещё не добавил этот статус в 'Избранное'. Как только кто-то это сделает, они появятся здесь.",
+  "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
   "empty_column.hashtag": "Статусов с таким хэштегом еще не существует.",
   "empty_column.home": "Пока Вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.",
   "empty_column.home.public_timeline": "публичные ленты",
   "empty_column.list": "В этом списке пока ничего нет.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "У Вас ещё нет списков. Все созданные Вами списки будут показаны здесь.",
+  "empty_column.mutes": "Вы ещё никого не заглушили.",
   "empty_column.notifications": "У Вас еще нет уведомлений. Заведите знакомство с другими пользователями, чтобы начать разговор.",
   "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
   "follow_request.authorize": "Авторизовать",
@@ -137,32 +137,32 @@
   "home.column_settings.show_reblogs": "Показывать продвижения",
   "home.column_settings.show_replies": "Показывать ответы",
   "keyboard_shortcuts.back": "перейти назад",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных",
   "keyboard_shortcuts.boost": "продвинуть пост",
   "keyboard_shortcuts.column": "фокус на одном из столбцов",
   "keyboard_shortcuts.compose": "фокус на поле ввода",
   "keyboard_shortcuts.description": "Описание",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "чтобы показать колонку личных сообщений",
   "keyboard_shortcuts.down": "вниз по списку",
   "keyboard_shortcuts.enter": "развернуть пост",
   "keyboard_shortcuts.favourite": "в избранное",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "открыть 'Избранное'",
+  "keyboard_shortcuts.federated": "перейти к глобальной ленте",
   "keyboard_shortcuts.heading": "Сочетания клавиш",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "перейти к домашней ленте",
   "keyboard_shortcuts.hotkey": "Гор. клавиша",
   "keyboard_shortcuts.legend": "показать это окно",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "перейти к локальной ленте",
   "keyboard_shortcuts.mention": "упомянуть автора поста",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.muted": "открыть список заглушённых",
+  "keyboard_shortcuts.my_profile": "перейти к своему профилю",
+  "keyboard_shortcuts.notifications": "перейти к уведомлениям",
+  "keyboard_shortcuts.pinned": "перейти к закреплённым статусам",
   "keyboard_shortcuts.profile": "перейти к профилю автора",
   "keyboard_shortcuts.reply": "ответить",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "перейти к запросам на подписку",
   "keyboard_shortcuts.search": "перейти к поиску",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "перейти к разделу \"добро пожаловать\"",
   "keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением",
   "keyboard_shortcuts.toot": "начать писать новый пост",
   "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
@@ -186,7 +186,7 @@
   "navigation_bar.apps": "Mobile apps",
   "navigation_bar.blocks": "Список блокировки",
   "navigation_bar.community_timeline": "Локальная лента",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "Создать новый статус",
   "navigation_bar.direct": "Личные сообщения",
   "navigation_bar.discover": "Изучайте",
   "navigation_bar.domain_blocks": "Скрытые домены",
@@ -280,7 +280,7 @@
   "status.cancel_reblog_private": "Не продвигать",
   "status.cannot_reblog": "Этот статус не может быть продвинут",
   "status.delete": "Удалить",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "Подробный просмотр обсуждения",
   "status.direct": "Написать @{name}",
   "status.embed": "Встроить",
   "status.favourite": "Нравится",
@@ -297,7 +297,7 @@
   "status.reblog": "Продвинуть",
   "status.reblog_private": "Продвинуть для своей аудитории",
   "status.reblogged_by": "{name} продвинул(а)",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "Никто ещё не продвинул этот статус. Как только кто-то это сделает, они появятся здесь.",
   "status.redraft": "Удалить и исправить",
   "status.reply": "Ответить",
   "status.replyAll": "Ответить на тред",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index fb5b1eb14..edfd69a25 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -7,12 +7,12 @@
   "account.disclaimer_full": "Inofrmácie uvedené nižšie nemusia byť úplným odrazom uživateľovho účtu.",
   "account.domain_blocked": "Doména ukrytá",
   "account.edit_profile": "Upraviť profil",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "Zobrazuj na profile",
   "account.follow": "Následuj",
   "account.followers": "Sledujúci",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Tohto užívateľa ešte nikto nenásleduje.",
   "account.follows": "Následuje",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.",
   "account.follows_you": "Následuje ťa",
   "account.hide_reblogs": "Skryť povýšenia od @{name}",
   "account.media": "Médiá",
@@ -29,7 +29,7 @@
   "account.show_reblogs": "Ukáž povýšenia od @{name}",
   "account.unblock": "Odblokovať @{name}",
   "account.unblock_domain": "Prestať blokovať {domain}",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "Nezobrazuj na profile",
   "account.unfollow": "Prestať nasledovať",
   "account.unmute": "Prestať ignorovať @{name}",
   "account.unmute_notifications": "Odtĺmiť notifikácie od @{name}",
@@ -89,7 +89,7 @@
   "confirmations.mute.confirm": "Ignoruj",
   "confirmations.mute.message": "Naozaj chcete ignorovať {name}?",
   "confirmations.redraft.confirm": "Vyčistiť a prepísať",
-  "confirmations.redraft.message": "Si si istý/á, že chceš vymazať a prepísať tento príspevok? Stratíš všetky jeho nadobudnuté odpovede, povýšenia a obľúbenia.",
+  "confirmations.redraft.message": "Si si istý/á, že chceš vymazať a prepísať tento príspevok? Jeho nadobudnuté odpovede, povýšenia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.",
   "confirmations.unfollow.confirm": "Nesledovať",
   "confirmations.unfollow.message": "Naozaj chcete prestať sledovať {name}?",
   "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.",
@@ -108,12 +108,12 @@
   "emoji_button.search_results": "Nájdené",
   "emoji_button.symbols": "Symboly",
   "emoji_button.travel": "Cestovanie a miesta",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Ešte si nikoho nezablokoval/a.",
   "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!",
   "empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.",
   "empty_column.domain_blocks": "There are no hidden domains yet.",
   "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.favourites": "Tento toot si ešte nikto neobľúbil. Ten kto si ho obľúbi, bude zobrazený tu.",
   "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
   "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.",
   "empty_column.home": "Tvoja lokálna osa je zatiaľ prázdna! Pre začiatok navštív {public}, alebo použi vyhľadávanie a nájdi tak aj iných užívateľov.",
@@ -319,7 +319,7 @@
   "trends.count_by_accounts": "{count} {rawCount, viacerí, jeden {person} iní {people}} diskutujú",
   "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
   "upload_area.title": "Pretiahni a pusť pre nahratie",
-  "upload_button.label": "Pridať médiá",
+  "upload_button.label": "Pridať médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
   "upload_form.description": "Opis pre slabo vidiacich",
   "upload_form.focus": "Vystrihni",
   "upload_form.undo": "Vymaž",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index e727a06a7..81a37cc4c 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -1,18 +1,18 @@
 {
-  "account.badges.bot": "Bot",
+  "account.badges.bot": "Бот",
   "account.block": "Блокирај корисника @{name}",
   "account.block_domain": "Сакриј све са домена {domain}",
-  "account.blocked": "Blocked",
-  "account.direct": "Direct Message @{name}",
+  "account.blocked": "Блокиран",
+  "account.direct": "Директна порука @{name}",
   "account.disclaimer_full": "Наведене информације можда не одсликавају кориснички профил у потпуности.",
-  "account.domain_blocked": "Domain hidden",
+  "account.domain_blocked": "Домен сакривен",
   "account.edit_profile": "Измени профил",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "Приказати на профилу",
   "account.follow": "Запрати",
   "account.followers": "Пратиоца",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "Нико још увек не прати овог корисника.",
   "account.follows": "Прати",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "Овај корисник не прати никога за сад.",
   "account.follows_you": "Прати Вас",
   "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}",
   "account.media": "Медији",
@@ -20,22 +20,22 @@
   "account.moved_to": "{name} се померио на:",
   "account.mute": "Ућуткај корисника @{name}",
   "account.mute_notifications": "Искључи обавештења од корисника @{name}",
-  "account.muted": "Muted",
-  "account.posts": "Статуса",
-  "account.posts_with_replies": "Toots with replies",
+  "account.muted": "Ућуткан",
+  "account.posts": "Трубе",
+  "account.posts_with_replies": "Трубе са одговорима",
   "account.report": "Пријави @{name}",
   "account.requested": "Чекам одобрење. Кликните да поништите захтев за праћење",
   "account.share": "Подели профил корисника @{name}",
   "account.show_reblogs": "Прикажи подршке од корисника @{name}",
   "account.unblock": "Одблокирај корисника @{name}",
   "account.unblock_domain": "Одблокирај домен {domain}",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "Не истичи на профилу",
   "account.unfollow": "Отпрати",
   "account.unmute": "Уклони ућуткавање кориснику @{name}",
   "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}",
   "account.view_full_profile": "Види цео профил",
-  "alert.unexpected.message": "An unexpected error occurred.",
-  "alert.unexpected.title": "Oops!",
+  "alert.unexpected.message": "Појавила се неочекивана грешка.",
+  "alert.unexpected.title": "Упс!",
   "boost_modal.combo": "Можете притиснути {combo} да прескочите ово следећи пут",
   "bundle_column_error.body": "Нешто је пошло по злу приликом учитавања ове компоненте.",
   "bundle_column_error.retry": "Покушајте поново",
@@ -45,8 +45,8 @@
   "bundle_modal_error.retry": "Покушајте поново",
   "column.blocks": "Блокирани корисници",
   "column.community": "Локална лајна",
-  "column.direct": "Direct messages",
-  "column.domain_blocks": "Hidden domains",
+  "column.direct": "Директне поруке",
+  "column.domain_blocks": "Скривени домени",
   "column.favourites": "Омиљени",
   "column.follow_requests": "Захтеви за праћење",
   "column.home": "Почетна",
@@ -63,19 +63,19 @@
   "column_header.show_settings": "Прикажи поставке",
   "column_header.unpin": "Откачи",
   "column_subheading.settings": "Поставке",
-  "community.column_settings.media_only": "Media Only",
-  "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
-  "compose_form.direct_message_warning_learn_more": "Learn more",
-  "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.",
+  "community.column_settings.media_only": "Само Медији",
+  "compose_form.direct_message_warning": "Ова труба ће бити послата споменутим корисницима.",
+  "compose_form.direct_message_warning_learn_more": "Сазнајте више",
+  "compose_form.hashtag_warning": "Ова труба неће бити излистана под било којом тарабом јер је сакривена. Само јавне трубе могу бити претражене тарабом.",
   "compose_form.lock_disclaimer": "Ваш налог није {locked}. Свако може да Вас запрати и да види објаве намењене само Вашим пратиоцима.",
   "compose_form.lock_disclaimer.lock": "закључан",
   "compose_form.placeholder": "Шта Вам је на уму?",
   "compose_form.publish": "Тутни",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.marked": "Media is marked as sensitive",
-  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
-  "compose_form.spoiler.marked": "Text is hidden behind warning",
-  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.sensitive.marked": "Медији су означени као осетљиви",
+  "compose_form.sensitive.unmarked": "Медији су означени као не-осетљиви",
+  "compose_form.spoiler.marked": "Текст је скривен иза упозорења",
+  "compose_form.spoiler.unmarked": "Текст није скривен",
   "compose_form.spoiler_placeholder": "Овде упишите упозорење",
   "confirmation_modal.cancel": "Поништи",
   "confirmations.block.confirm": "Блокирај",
@@ -85,11 +85,11 @@
   "confirmations.delete_list.confirm": "Обриши",
   "confirmations.delete_list.message": "Да ли сте сигурни да желите да бесповратно обришете ову листу?",
   "confirmations.domain_block.confirm": "Сакриј цео домен",
-  "confirmations.domain_block.message": "Да ли сте стварно, стварно сигурно да желите да блокирате цео домен {domain}? У већини случајева, пар добрих блокирања или ућуткавања су довољна и препоручљива.",
+  "confirmations.domain_block.message": "Да ли сте заиста сигурни да желите да блокирате цео домен {domain}? У већини случајева, неколико добро промишљених блокирања или ућуткавања су довољна и препоручљива.",
   "confirmations.mute.confirm": "Ућуткај",
   "confirmations.mute.message": "Да ли стварно желите да ућуткате корисника {name}?",
-  "confirmations.redraft.confirm": "Delete & redraft",
-  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+  "confirmations.redraft.confirm": "Избриши и преправи",
+  "confirmations.redraft.message": "Да ли сте сигурно да желите да избришете овај статус и да га преправите*? Омиљеновање и подршке ће бити изгубљене, а одговори на оригинални пост ће бити поништени.",
   "confirmations.unfollow.confirm": "Отпрати",
   "confirmations.unfollow.message": "Да ли сте сигурни да желите да отпратите корисника {name}?",
   "embed.instructions": "Угради овај статус на Ваш веб сајт копирањем кода испод.",
@@ -108,64 +108,64 @@
   "emoji_button.search_results": "Резултати претраге",
   "emoji_button.symbols": "Симболи",
   "emoji_button.travel": "Путовања & места",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.blocks": "Још увек немате блокираних корисника.",
   "empty_column.community": "Локална лајна је празна. Напишите нешто јавно да лајна продува!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.direct": "Још увек немате директних порука. Када пошаљете или примите једну, појавиће се овде.",
+  "empty_column.domain_blocks": "Још увек нема сакривених домена.",
+  "empty_column.favourited_statuses": "Још увек немате труба које су вам се свиделе. Када вам се једна свиди, појавиће се овде.",
+  "empty_column.favourites": "Још увек се никоме није свидела ова труба. Када се некоме свиди, појавиће се овде.",
+  "empty_column.follow_requests": "Још увек немате захтева за праћење. Када примите захтев, појавиће се овде.",
   "empty_column.hashtag": "Тренутно нема ништа на овом хештегу.",
-  "empty_column.home": "Ваша лајна је празна! Посетите {public} или користите претрагу да почнете и упознајете нове људе.",
-  "empty_column.home.public_timeline": "јавна лајна",
-  "empty_column.list": "У овој листи још нема ничега. Када чланови листе објаве нове статусе, они ће се појављивати овде.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
-  "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговоре.",
+  "empty_column.home": "Ваша временска линија је празна! Посетите {public} или користите претрагу да почнете и да упознате нове људе.",
+  "empty_column.home.public_timeline": "јавна временска линија",
+  "empty_column.list": "У овој листи још нема ничега. Када чланови листе објаве нове статусе, они ће се појавити овде.",
+  "empty_column.lists": "Још увек немате ниједну листу. Када направите једну, појавиће се овде.",
+  "empty_column.mutes": "Још увек немате ућутканих корисника.",
+  "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.",
   "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину",
   "follow_request.authorize": "Одобри",
   "follow_request.reject": "Одбиј",
-  "getting_started.developers": "Developers",
-  "getting_started.documentation": "Documentation",
-  "getting_started.find_friends": "Find friends from Twitter",
+  "getting_started.developers": "Програмери",
+  "getting_started.documentation": "Документација",
+  "getting_started.find_friends": "Пронађите пријатеље са Твитера",
   "getting_started.heading": "Да почнете",
-  "getting_started.invite": "Invite people",
-  "getting_started.open_source_notice": "Мастoдонт је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко GitHub-а на {github}.",
-  "getting_started.security": "Security",
-  "getting_started.terms": "Terms of service",
+  "getting_started.invite": "Позовите људе",
+  "getting_started.open_source_notice": "Мастoдон је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко ГитХаба на {github}.",
+  "getting_started.security": "Безбедност",
+  "getting_started.terms": "Услови коришћења",
   "home.column_settings.basic": "Основно",
   "home.column_settings.show_reblogs": "Прикажи и подржавања",
   "home.column_settings.show_replies": "Прикажи одговоре",
   "keyboard_shortcuts.back": "да одете назад",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "да отворите листу блокираних корисника",
   "keyboard_shortcuts.boost": "да подржите",
   "keyboard_shortcuts.column": "да се пребаците на статус у једној од колона",
   "keyboard_shortcuts.compose": "да се пребаците на писање новог тута",
   "keyboard_shortcuts.description": "Опис",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "да отворите колону за директне поруке",
   "keyboard_shortcuts.down": "да се померите на доле у листи",
   "keyboard_shortcuts.enter": "да отворите статус",
   "keyboard_shortcuts.favourite": "да означите као омиљено",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "да отворите листу фаворита",
+  "keyboard_shortcuts.federated": "да отворите федерализовану временску линију",
   "keyboard_shortcuts.heading": "Пречице на тастатури",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "да отворите временску линију почетне",
   "keyboard_shortcuts.hotkey": "Пречица",
   "keyboard_shortcuts.legend": "да прикажете овај подсетник",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "да отворите локалну временску линију",
   "keyboard_shortcuts.mention": "да поменете аутора",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.muted": "да отворите листу ућутканих корисника",
+  "keyboard_shortcuts.my_profile": "да отворите ваш профил",
+  "keyboard_shortcuts.notifications": "да отворите колону обавештења",
+  "keyboard_shortcuts.pinned": "да отворите листу закачених труба",
+  "keyboard_shortcuts.profile": "да отворите профил аутора",
   "keyboard_shortcuts.reply": "да одговорите",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "да отворите листу примљених захтева за праћење",
   "keyboard_shortcuts.search": "да се пребаците на претрагу",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
-  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
-  "keyboard_shortcuts.toot": "да започнете скроз нови тут",
-  "keyboard_shortcuts.unfocus": "да не будете више на претрази/прављењу новог тута",
+  "keyboard_shortcuts.start": "да отворите колону \"почнимо\"",
+  "keyboard_shortcuts.toggle_hidden": "да прикажете/сакријте текст иза CW-а",
+  "keyboard_shortcuts.toot": "да започнете скроз нову трубу",
+  "keyboard_shortcuts.unfocus": "да одфокусирате/не будете више на претрази/прављењу нове трубе",
   "keyboard_shortcuts.up": "да се померите на горе у листи",
   "lightbox.close": "Затвори",
   "lightbox.next": "Следећи",
@@ -181,18 +181,18 @@
   "loading_indicator.label": "Учитавам...",
   "media_gallery.toggle_visible": "Укључи/искључи видљивост",
   "missing_indicator.label": "Није пронађено",
-  "missing_indicator.sublabel": "This resource could not be found",
+  "missing_indicator.sublabel": "Овај ресурс није пронађен",
   "mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?",
-  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.apps": "Мобилне апликације",
   "navigation_bar.blocks": "Блокирани корисници",
   "navigation_bar.community_timeline": "Локална лајна",
-  "navigation_bar.compose": "Compose new toot",
-  "navigation_bar.direct": "Direct messages",
-  "navigation_bar.discover": "Discover",
-  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.compose": "Саставите нову трубу",
+  "navigation_bar.direct": "Директне поруке",
+  "navigation_bar.discover": "Откриј",
+  "navigation_bar.domain_blocks": "Сакривени домени",
   "navigation_bar.edit_profile": "Измени профил",
   "navigation_bar.favourites": "Омиљени",
-  "navigation_bar.filters": "Muted words",
+  "navigation_bar.filters": "Пригушене речи",
   "navigation_bar.follow_requests": "Захтеви за праћење",
   "navigation_bar.info": "О овој инстанци",
   "navigation_bar.keyboard_shortcuts": "Пречице на тастатури",
@@ -203,7 +203,7 @@
   "navigation_bar.pins": "Прикачени тутови",
   "navigation_bar.preferences": "Подешавања",
   "navigation_bar.public_timeline": "Федерисана лајна",
-  "navigation_bar.security": "Security",
+  "navigation_bar.security": "Сигурност",
   "notification.favourite": "{name} је ставио Ваш статус као омиљени",
   "notification.follow": "{name} Вас је запратио",
   "notification.mention": "{name} Вас је поменуо",
@@ -219,15 +219,15 @@
   "notifications.column_settings.reblog": "Подршки:",
   "notifications.column_settings.show": "Прикажи у колони",
   "notifications.column_settings.sound": "Пуштај звук",
-  "notifications.group": "{count} notifications",
+  "notifications.group": "{count} обавештења",
   "onboarding.done": "Готово",
   "onboarding.next": "Следеће",
   "onboarding.page_five.public_timelines": "Локална лајна приказује све јавне статусе од свих на домену {domain}. Федерисана лајна приказује јавне статусе од свих људи које прате корисници са домена {domain}. Ово су јавне лајне, сјајан начин да откријете нове људе.",
   "onboarding.page_four.home": "Почетна лајна приказује статусе људи које Ви пратите.",
   "onboarding.page_four.notifications": "Колона са обавештењима Вам приказује када неко прича са Вама.",
   "onboarding.page_one.federation": "Мастодонт је мрежа независних сервера који се увезују да направе једну већу друштвену мрежу. Ове сервере зовемо инстанцама.",
-  "onboarding.page_one.full_handle": "Your full handle",
-  "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
+  "onboarding.page_one.full_handle": "Ваш пун надимак",
+  "onboarding.page_one.handle_hint": "Ово бисте рекли својим пријатељима да траже.",
   "onboarding.page_one.welcome": "Добродошли на Мастодонт!",
   "onboarding.page_six.admin": "Администратор Ваше инстанце је {admin}.",
   "onboarding.page_six.almost_done": "Још мало, па готово...",
@@ -250,55 +250,55 @@
   "privacy.public.short": "Јавно",
   "privacy.unlisted.long": "Не објављуј на јавним лајнама",
   "privacy.unlisted.short": "Неизлистано",
-  "regeneration_indicator.label": "Loading…",
-  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "regeneration_indicator.label": "Учитавање…",
+  "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!",
   "relative_time.days": "{number}d",
   "relative_time.hours": "{number}h",
   "relative_time.just_now": "сада",
   "relative_time.minutes": "{number}m",
   "relative_time.seconds": "{number}s",
   "reply_indicator.cancel": "Поништи",
-  "report.forward": "Forward to {target}",
-  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
-  "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.forward": "Проследити {target}",
+  "report.forward_hint": "Налог је са другог сервера. Послати анонимну копију пријаве и тамо?",
+  "report.hint": "Пријава ће бити послата модераторима ваше инстанце. Можете додати објашњење зашто пријављујете овај налог у наставку:",
   "report.placeholder": "Додатни коментари",
   "report.submit": "Пошаљи",
   "report.target": "Пријављујем {target}",
   "search.placeholder": "Претрага",
   "search_popout.search_format": "Напредни формат претраге",
-  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.full_text": "Једноставан текст враћа статусе које сте написали, фаворизовали, подржали или били поменути, као и подударање корисничких имена, приказаних имена, и тараба.",
   "search_popout.tips.hashtag": "хештег",
   "search_popout.tips.status": "статус",
   "search_popout.tips.text": "Тражењем обичног текста ћете добити сва пронађена имена, сва корисничка имена и све нађене хештегове",
   "search_popout.tips.user": "корисник",
-  "search_results.accounts": "People",
-  "search_results.hashtags": "Hashtags",
-  "search_results.statuses": "Toots",
+  "search_results.accounts": "Људи",
+  "search_results.hashtags": "Тарабе",
+  "search_results.statuses": "Трубе",
   "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}",
   "standalone.public_title": "Поглед изнутра...",
-  "status.block": "Block @{name}",
-  "status.cancel_reblog_private": "Unboost",
+  "status.block": "Блокирај @{name}",
+  "status.cancel_reblog_private": "Уклони подршку",
   "status.cannot_reblog": "Овај статус не може да се подржи",
   "status.delete": "Обриши",
-  "status.detailed_status": "Detailed conversation view",
-  "status.direct": "Direct message @{name}",
+  "status.detailed_status": "Детаљни преглед разговора",
+  "status.direct": "Директна порука @{name}",
   "status.embed": "Угради на сајт",
   "status.favourite": "Омиљено",
-  "status.filtered": "Filtered",
+  "status.filtered": "Филтрирано",
   "status.load_more": "Учитај још",
   "status.media_hidden": "Мултимедија сакривена",
   "status.mention": "Помени корисника @{name}",
   "status.more": "Још",
-  "status.mute": "Mute @{name}",
+  "status.mute": "Ућуткај @{name}",
   "status.mute_conversation": "Ућуткај преписку",
   "status.open": "Прошири овај статус",
-  "status.pin": "Прикачи на профил",
-  "status.pinned": "Pinned toot",
+  "status.pin": "Закачи на профил",
+  "status.pinned": "Закачена труба",
   "status.reblog": "Подржи",
-  "status.reblog_private": "Boost to original audience",
-  "status.reblogged_by": "{name} подржао(ла)",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
-  "status.redraft": "Delete & re-draft",
+  "status.reblog_private": "Подржи да види првобитна публика",
+  "status.reblogged_by": "{name} подржао/ла",
+  "status.reblogs.empty": "Још увек нико није подржао ову трубу. Када буде подржана, појавиће се овде.",
+  "status.redraft": "Избриши и преправи",
   "status.reply": "Одговори",
   "status.replyAll": "Одговори на дискусију",
   "status.report": "Пријави корисника @{name}",
@@ -319,10 +319,10 @@
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
   "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
   "upload_area.title": "Превуците овде да отпремите",
-  "upload_button.label": "Додај мултимедију",
-  "upload_form.description": "Опиши за слабовиде особе",
-  "upload_form.focus": "Crop",
-  "upload_form.undo": "Опозови",
+  "upload_button.label": "Додај мултимедију (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_form.description": "Опишите за особе са оштећеним видом",
+  "upload_form.focus": "Подесите",
+  "upload_form.undo": "Избриши",
   "upload_progress.label": "Отпремам...",
   "video.close": "Затвори видео",
   "video.exit_fullscreen": "Напусти цео екран",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
new file mode 100644
index 000000000..d80eba2c1
--- /dev/null
+++ b/app/javascript/mastodon/locales/ta.json
@@ -0,0 +1,336 @@
+{
+  "account.badges.bot": "Bot",
+  "account.block": "Block @{name}",
+  "account.block_domain": "Hide everything from {domain}",
+  "account.blocked": "Blocked",
+  "account.direct": "Direct message @{name}",
+  "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
+  "account.domain_blocked": "Domain hidden",
+  "account.edit_profile": "Edit profile",
+  "account.endorse": "Feature on profile",
+  "account.follow": "Follow",
+  "account.followers": "Followers",
+  "account.followers.empty": "No one follows this user yet.",
+  "account.follows": "Follows",
+  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows_you": "Follows you",
+  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.media": "Media",
+  "account.mention": "Mention @{name}",
+  "account.moved_to": "{name} has moved to:",
+  "account.mute": "Mute @{name}",
+  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.muted": "Muted",
+  "account.posts": "Toots",
+  "account.posts_with_replies": "Toots and replies",
+  "account.report": "Report @{name}",
+  "account.requested": "Awaiting approval. Click to cancel follow request",
+  "account.share": "Share @{name}'s profile",
+  "account.show_reblogs": "Show boosts from @{name}",
+  "account.unblock": "Unblock @{name}",
+  "account.unblock_domain": "Unhide {domain}",
+  "account.unendorse": "Don't feature on profile",
+  "account.unfollow": "Unfollow",
+  "account.unmute": "Unmute @{name}",
+  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account.view_full_profile": "View full profile",
+  "alert.unexpected.message": "An unexpected error occurred.",
+  "alert.unexpected.title": "Oops!",
+  "boost_modal.combo": "You can press {combo} to skip this next time",
+  "bundle_column_error.body": "Something went wrong while loading this component.",
+  "bundle_column_error.retry": "Try again",
+  "bundle_column_error.title": "Network error",
+  "bundle_modal_error.close": "Close",
+  "bundle_modal_error.message": "Something went wrong while loading this component.",
+  "bundle_modal_error.retry": "Try again",
+  "column.blocks": "Blocked users",
+  "column.community": "Local timeline",
+  "column.direct": "Direct messages",
+  "column.domain_blocks": "Hidden domains",
+  "column.favourites": "Favourites",
+  "column.follow_requests": "Follow requests",
+  "column.home": "Home",
+  "column.lists": "Lists",
+  "column.mutes": "Muted users",
+  "column.notifications": "Notifications",
+  "column.pins": "Pinned toot",
+  "column.public": "Federated timeline",
+  "column_back_button.label": "Back",
+  "column_header.hide_settings": "Hide settings",
+  "column_header.moveLeft_settings": "Move column to the left",
+  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.pin": "Pin",
+  "column_header.show_settings": "Show settings",
+  "column_header.unpin": "Unpin",
+  "column_subheading.settings": "Settings",
+  "community.column_settings.media_only": "Media Only",
+  "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+  "compose_form.direct_message_warning_learn_more": "Learn more",
+  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.lock_disclaimer.lock": "locked",
+  "compose_form.placeholder": "What is on your mind?",
+  "compose_form.publish": "Toot",
+  "compose_form.publish_loud": "{publish}!",
+  "compose_form.sensitive.marked": "Media is marked as sensitive",
+  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
+  "compose_form.spoiler.marked": "Text is hidden behind warning",
+  "compose_form.spoiler.unmarked": "Text is not hidden",
+  "compose_form.spoiler_placeholder": "Write your warning here",
+  "confirmation_modal.cancel": "Cancel",
+  "confirmations.block.confirm": "Block",
+  "confirmations.block.message": "Are you sure you want to block {name}?",
+  "confirmations.delete.confirm": "Delete",
+  "confirmations.delete.message": "Are you sure you want to delete this status?",
+  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.domain_block.confirm": "Hide entire domain",
+  "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+  "confirmations.mute.confirm": "Mute",
+  "confirmations.mute.message": "Are you sure you want to mute {name}?",
+  "confirmations.redraft.confirm": "Delete & redraft",
+  "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
+  "confirmations.unfollow.confirm": "Unfollow",
+  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "embed.instructions": "Embed this status on your website by copying the code below.",
+  "embed.preview": "Here is what it will look like:",
+  "emoji_button.activity": "Activity",
+  "emoji_button.custom": "Custom",
+  "emoji_button.flags": "Flags",
+  "emoji_button.food": "Food & Drink",
+  "emoji_button.label": "Insert emoji",
+  "emoji_button.nature": "Nature",
+  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.objects": "Objects",
+  "emoji_button.people": "People",
+  "emoji_button.recent": "Frequently used",
+  "emoji_button.search": "Search...",
+  "emoji_button.search_results": "Search results",
+  "emoji_button.symbols": "Symbols",
+  "emoji_button.travel": "Travel & Places",
+  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+  "empty_column.domain_blocks": "There are no hidden domains yet.",
+  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.hashtag": "There is nothing in this hashtag yet.",
+  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+  "empty_column.home.public_timeline": "the public timeline",
+  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+  "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
+  "follow_request.authorize": "Authorize",
+  "follow_request.reject": "Reject",
+  "getting_started.developers": "Developers",
+  "getting_started.documentation": "Documentation",
+  "getting_started.find_friends": "Find friends from Twitter",
+  "getting_started.heading": "Getting started",
+  "getting_started.invite": "Invite people",
+  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+  "getting_started.security": "Security",
+  "getting_started.terms": "Terms of service",
+  "home.column_settings.basic": "Basic",
+  "home.column_settings.show_reblogs": "Show boosts",
+  "home.column_settings.show_replies": "Show replies",
+  "keyboard_shortcuts.back": "to navigate back",
+  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.boost": "to boost",
+  "keyboard_shortcuts.column": "to focus a status in one of the columns",
+  "keyboard_shortcuts.compose": "to focus the compose textarea",
+  "keyboard_shortcuts.description": "Description",
+  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.down": "to move down in the list",
+  "keyboard_shortcuts.enter": "to open status",
+  "keyboard_shortcuts.favourite": "to favourite",
+  "keyboard_shortcuts.favourites": "to open favourites list",
+  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.hotkey": "Hotkey",
+  "keyboard_shortcuts.legend": "to display this legend",
+  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.mention": "to mention author",
+  "keyboard_shortcuts.muted": "to open muted users list",
+  "keyboard_shortcuts.my_profile": "to open your profile",
+  "keyboard_shortcuts.notifications": "to open notifications column",
+  "keyboard_shortcuts.pinned": "to open pinned toots list",
+  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.reply": "to reply",
+  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.search": "to focus search",
+  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+  "keyboard_shortcuts.up": "to move up in the list",
+  "lightbox.close": "Close",
+  "lightbox.next": "Next",
+  "lightbox.previous": "Previous",
+  "lists.account.add": "Add to list",
+  "lists.account.remove": "Remove from list",
+  "lists.delete": "Delete list",
+  "lists.edit": "Edit list",
+  "lists.new.create": "Add list",
+  "lists.new.title_placeholder": "New list title",
+  "lists.search": "Search among people you follow",
+  "lists.subheading": "Your lists",
+  "loading_indicator.label": "Loading...",
+  "media_gallery.toggle_visible": "Toggle visibility",
+  "missing_indicator.label": "Not found",
+  "missing_indicator.sublabel": "This resource could not be found",
+  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "navigation_bar.apps": "Mobile apps",
+  "navigation_bar.blocks": "Blocked users",
+  "navigation_bar.community_timeline": "Local timeline",
+  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.direct": "Direct messages",
+  "navigation_bar.discover": "Discover",
+  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.edit_profile": "Edit profile",
+  "navigation_bar.favourites": "Favourites",
+  "navigation_bar.filters": "Muted words",
+  "navigation_bar.follow_requests": "Follow requests",
+  "navigation_bar.info": "About this instance",
+  "navigation_bar.keyboard_shortcuts": "Hotkeys",
+  "navigation_bar.lists": "Lists",
+  "navigation_bar.logout": "Logout",
+  "navigation_bar.mutes": "Muted users",
+  "navigation_bar.personal": "Personal",
+  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.preferences": "Preferences",
+  "navigation_bar.public_timeline": "Federated timeline",
+  "navigation_bar.security": "Security",
+  "notification.favourite": "{name} favourited your status",
+  "notification.follow": "{name} followed you",
+  "notification.mention": "{name} mentioned you",
+  "notification.reblog": "{name} boosted your status",
+  "notifications.clear": "Clear notifications",
+  "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+  "notifications.column_settings.alert": "Desktop notifications",
+  "notifications.column_settings.favourite": "Favourites:",
+  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.mention": "Mentions:",
+  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.push_meta": "This device",
+  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.show": "Show in column",
+  "notifications.column_settings.sound": "Play sound",
+  "notifications.group": "{count} notifications",
+  "onboarding.done": "Done",
+  "onboarding.next": "Next",
+  "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
+  "onboarding.page_four.home": "The home timeline shows posts from people you follow.",
+  "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
+  "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
+  "onboarding.page_one.full_handle": "Your full handle",
+  "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
+  "onboarding.page_one.welcome": "Welcome to Mastodon!",
+  "onboarding.page_six.admin": "Your instance's admin is {admin}.",
+  "onboarding.page_six.almost_done": "Almost done...",
+  "onboarding.page_six.appetoot": "Bon Appetoot!",
+  "onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
+  "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
+  "onboarding.page_six.guidelines": "community guidelines",
+  "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
+  "onboarding.page_six.various_app": "mobile apps",
+  "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
+  "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
+  "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
+  "onboarding.skip": "Skip",
+  "privacy.change": "Adjust status privacy",
+  "privacy.direct.long": "Post to mentioned users only",
+  "privacy.direct.short": "Direct",
+  "privacy.private.long": "Post to followers only",
+  "privacy.private.short": "Followers-only",
+  "privacy.public.long": "Post to public timelines",
+  "privacy.public.short": "Public",
+  "privacy.unlisted.long": "Do not show in public timelines",
+  "privacy.unlisted.short": "Unlisted",
+  "regeneration_indicator.label": "Loading…",
+  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+  "relative_time.days": "{number}d",
+  "relative_time.hours": "{number}h",
+  "relative_time.just_now": "now",
+  "relative_time.minutes": "{number}m",
+  "relative_time.seconds": "{number}s",
+  "reply_indicator.cancel": "Cancel",
+  "report.forward": "Forward to {target}",
+  "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+  "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
+  "report.placeholder": "Additional comments",
+  "report.submit": "Submit",
+  "report.target": "Report {target}",
+  "search.placeholder": "Search",
+  "search_popout.search_format": "Advanced search format",
+  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+  "search_popout.tips.hashtag": "hashtag",
+  "search_popout.tips.status": "status",
+  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+  "search_popout.tips.user": "user",
+  "search_results.accounts": "People",
+  "search_results.hashtags": "Hashtags",
+  "search_results.statuses": "Toots",
+  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+  "standalone.public_title": "A look inside...",
+  "status.block": "Block @{name}",
+  "status.cancel_reblog_private": "Unboost",
+  "status.cannot_reblog": "This post cannot be boosted",
+  "status.delete": "Delete",
+  "status.detailed_status": "Detailed conversation view",
+  "status.direct": "Direct message @{name}",
+  "status.embed": "Embed",
+  "status.favourite": "Favourite",
+  "status.filtered": "Filtered",
+  "status.load_more": "Load more",
+  "status.media_hidden": "Media hidden",
+  "status.mention": "Mention @{name}",
+  "status.more": "More",
+  "status.mute": "Mute @{name}",
+  "status.mute_conversation": "Mute conversation",
+  "status.open": "Expand this status",
+  "status.pin": "Pin on profile",
+  "status.pinned": "Pinned toot",
+  "status.reblog": "Boost",
+  "status.reblog_private": "Boost to original audience",
+  "status.reblogged_by": "{name} boosted",
+  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.redraft": "Delete & re-draft",
+  "status.reply": "Reply",
+  "status.replyAll": "Reply to thread",
+  "status.report": "Report @{name}",
+  "status.sensitive_toggle": "Click to view",
+  "status.sensitive_warning": "Sensitive content",
+  "status.share": "Share",
+  "status.show_less": "Show less",
+  "status.show_less_all": "Show less for all",
+  "status.show_more": "Show more",
+  "status.show_more_all": "Show more for all",
+  "status.unmute_conversation": "Unmute conversation",
+  "status.unpin": "Unpin from profile",
+  "tabs_bar.federated_timeline": "Federated",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notifications",
+  "tabs_bar.search": "Search",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "upload_area.title": "Drag & drop to upload",
+  "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_form.description": "Describe for the visually impaired",
+  "upload_form.focus": "Crop",
+  "upload_form.undo": "Delete",
+  "upload_progress.label": "Uploading...",
+  "video.close": "Close video",
+  "video.exit_fullscreen": "Exit full screen",
+  "video.expand": "Expand video",
+  "video.fullscreen": "Full screen",
+  "video.hide": "Hide video",
+  "video.mute": "Mute sound",
+  "video.pause": "Pause",
+  "video.play": "Play",
+  "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/whitelist_ro.json b/app/javascript/mastodon/locales/whitelist_ro.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_ro.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/javascript/mastodon/locales/whitelist_ta.json b/app/javascript/mastodon/locales/whitelist_ta.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_ta.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/app/models/report.rb b/app/models/report.rb
index efe385b2d..2804020f5 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -60,6 +60,10 @@ class Report < ApplicationRecord
     !action_taken?
   end
 
+  def unresolved_siblings?
+    Report.where.not(id: id).where(target_account_id: target_account_id).unresolved.exists?
+  end
+
   def history
     time_range = created_at..updated_at
 
diff --git a/app/models/user.rb b/app/models/user.rb
index 9e529019c..6022a5eb0 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -224,6 +224,10 @@ class User < ApplicationRecord
     settings.notification_emails['digest']
   end
 
+  def allows_report_emails?
+    settings.notification_emails['report']
+  end
+
   def hides_network?
     @hides_network ||= settings.hide_network
   end
diff --git a/app/services/report_service.rb b/app/services/report_service.rb
index c06488a6d..057d05ab9 100644
--- a/app/services/report_service.rb
+++ b/app/services/report_service.rb
@@ -26,7 +26,10 @@ class ReportService < BaseService
   end
 
   def notify_staff!
+    return if @report.unresolved_siblings?
+
     User.staff.includes(:account).each do |u|
+      next unless u.allows_report_emails?
       AdminMailer.new_report(u.account, @report).deliver_later
     end
   end
diff --git a/app/views/settings/notifications/show.html.haml b/app/views/settings/notifications/show.html.haml
index b718b62df..8aaac043b 100644
--- a/app/views/settings/notifications/show.html.haml
+++ b/app/views/settings/notifications/show.html.haml
@@ -12,6 +12,9 @@
       = ff.input :favourite, as: :boolean, wrapper: :with_label
       = ff.input :mention, as: :boolean, wrapper: :with_label
 
+      - if current_user.staff?
+        = ff.input :report, as: :boolean, wrapper: :with_label
+
   .fields-group
     = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff|
       = ff.input :digest, as: :boolean, wrapper: :with_label
diff --git a/config/application.rb b/config/application.rb
index 02def1ce5..151b1d0b4 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -70,12 +70,14 @@ module Mastodon
       :pl,
       :pt,
       :'pt-BR',
+      :ro,
       :ru,
       :sk,
       :sl,
       :sr,
       :'sr-Latn',
       :sv,
+      :ta,
       :te,
       :th,
       :tr,
@@ -86,6 +88,7 @@ module Mastodon
     ]
 
     config.i18n.default_locale = ENV['DEFAULT_LOCALE']&.to_sym
+
     unless config.i18n.available_locales.include?(config.i18n.default_locale)
       config.i18n.default_locale = :en
     end
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 21cfa8c04..eee2bb0b9 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -30,22 +30,16 @@ ar:
     other_instances: خوادم أخرى
     privacy_policy: سياسة الخصوصية
     source_code: الشفرة المصدرية
-    status_count_after:
-      one: منشور
-      other: منشورات
+    status_count_after: منشورات
     status_count_before: نشروا
     terms: شروط الخدمة
-    user_count_after:
-      one: مستخدِم
-      other: مستخدِمين
+    user_count_after: مستخدِمين
     user_count_before: يستضيف
     what_is_mastodon: ما هو ماستدون ؟
   accounts:
     choices_html: 'توصيات %{name} :'
     follow: إتبع
-    followers:
-      one: متابِع
-      other: متابِعون
+    followers: متابِعون
     following: يتابعون
     joined: انضم·ت في %{date}
     media: الوسائط
@@ -56,9 +50,7 @@ ar:
     people_who_follow: الأشخاص الذين يتبعون %{name}
     pin_errors:
       following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه
-    posts:
-      one: تبويق
-      other: تبويقات
+    posts: تبويقات
     posts_tab_heading: تبويقات
     posts_with_replies: التبويقات و الردود
     reserved_username: إسم المستخدم محجوز
@@ -264,9 +256,7 @@ ar:
         suspend: تعليق
       severity: الشدة
       show:
-        affected_accounts:
-          one: هناك حساب واحد متأثر في قاعدة البيانات
-          other: هناك %{count} حسابات في قاعدة البيانات متأثرة بذلك
+        affected_accounts: هناك %{count} حسابات في قاعدة البيانات متأثرة بذلك
         retroactive:
           silence: إلغاء الكتم عن كافة الحسابات المتواجدة على هذا النطاق
           suspend: إلغاء التعليق المفروض على كافة حسابات هذا النطاق
@@ -303,6 +293,7 @@ ar:
       enable_hint: عندما تقوم بتنشيط هذه الميزة، سوف يشترك خادومك في جميع التبويقات القادمة مِن هذا المُرحِّل و سيشرع كذلك بإرسال كافة التبويقات العمومية إليه.
       inbox_url: رابط المُرحّل
       pending: في انتظار تسريح المُرحِّل
+      save_and_enable: حفظ وتشغيل
       setup: إعداد اتصال بمُرحّل
       status: الحالة
       title: المُرحّلات
@@ -428,6 +419,7 @@ ar:
       title: WebSub
       topic: الموضوع
     suspensions:
+      bad_acct_msg: قيمة التأكيد غير متطابقة. متأكد مِن أنك بصدد تعليق الحساب الصحيح؟
       hint_html: 'لتأكيد إجراء تعليق الحساب، يُرجى إدخال %{value} في الحقل التالي:'
       proceed: مواصلة
       title: تعليق الحساب %{acct}
@@ -550,9 +542,7 @@ ar:
     followers_count: عدد المتابِعين
     lock_link: قم بتجميد حسابك
     purge: تنحية من بين متابعيك
-    success:
-      one: جارية عملية حظر المتابِعين بسلاسة من نطاق آخر ...
-      other: جارية عملية حظر المتابِعين بسلاسة من %{count} نطاقات أخرى ...
+    success: جارية عملية حظر المتابِعين بسلاسة من %{count} نطاقات أخرى ...
     true_privacy_html: تذكر دائمًا أنّ <strong>الخصوصية التامة لا يمكن بلوغها إلّا بالتعمية و التشفير من طرف إلى آخَر</strong>.
     unlocked_warning_html: يمكن لأي كان متابعة حسابك و الإطلاع مباشرة على تبويقاتك. إستخدِم %{lock_link} لمُعاينة أو رفض طلبات المتابِعين الجُدُد.
     unlocked_warning_title: إنّ حسابك غير مقفل
@@ -563,9 +553,7 @@ ar:
   generic:
     changes_saved_msg: تم حفظ التعديلات بنجاح !
     save_changes: حفظ التغييرات
-    validation_errors:
-      one: لا يزال هناك خلل ما إلى حد الآن. يُرجى إعادة النظر في الخطأ أسفله
-      other: هناك شيء ليس على ما يرام ! رجاءًا تحقق من الأخطاء الـ %{count} أسفله
+    validation_errors: هناك شيء ليس على ما يرام ! رجاءًا تحقق من الأخطاء الـ %{count} أسفله
   imports:
     preface: You can import certain data like all the people you are following or blocking into your account on this instance, from files created by an export on another instance.
     success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب
@@ -588,9 +576,7 @@ ar:
     expires_in_prompt: أبدا
     generate: توليد
     invited_by: 'تمت دعوتك من طرف :'
-    max_uses:
-      one: إستعمال واحد
-      other: "%{count} استخدامات"
+    max_uses: "%{count} استخدامات"
     max_uses_prompt: بلا حدود
     prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادوم هذا
     table:
@@ -616,12 +602,8 @@ ar:
       action: معاينة كافة الإشعارات
       body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في  %{since}
       mention: "%{name} أشار إليك في :"
-      new_followers_summary:
-        one: و لقد حصلت على متابع جديد أثناء فترة غيابك ! مرحى !
-        other: و لقد تحصلت على %{count} متتبعين جدد أثناء فترة غيابك ! رائع !
-      subject:
-        one: "إشعار واحد منذ زيارتك الأخيرة \U0001F418"
-        other: "%{count} إشعارات جديدة منذ زيارتك الأخيرة \U0001F418"
+      new_followers_summary: و لقد تحصلت على %{count} متتبعين جدد أثناء فترة غيابك ! رائع !
+      subject: "%{count} إشعارات جديدة منذ زيارتك الأخيرة \U0001F418"
       title: أثناء فترة غيابك …
     favourite:
       body: 'أُعجب %{name} بمنشورك :'
@@ -739,17 +721,11 @@ ar:
   statuses:
     attached:
       description: 'مُرفَق : %{attached}'
-      image:
-        one: "%{count} صورة"
-        other: "%{count} صور"
-      video:
-        one: "%{count} فيديو"
-        other: "%{count} فيديوهات"
+      image: "%{count} صور"
+      video: "%{count} فيديوهات"
     boosted_from_html: تم إعادة ترقيته مِن %{acct_link}
     content_warning: 'تحذير عن المحتوى : %{warning}'
-    disallowed_hashtags:
-      one: 'يحتوي على وسم ممنوع : %{tags}'
-      other: 'يحتوي على وسوم ممنوعة : %{tags}'
+    disallowed_hashtags: 'يحتوي على وسوم ممنوعة : %{tags}'
     language_detection: اكتشاف اللغة تلقائيا
     open_in_web: إفتح في الويب
     over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index c2b683462..e17e95832 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -5,10 +5,13 @@ ca:
     about_mastodon_html: Mastodon és una xarxa social basada en protocols web oberts i en programari lliure i de codi obert. Està descentralitzat com el correu electrònic.
     about_this: Quant a
     administered_by: 'Administrat per:'
+    api: API
+    apps: Apps mòbil
     closed_registrations: Actualment, el registre està tancat en aquesta instància. Malgrat això! Pots trobar una altra instància per fer-te un compte i obtenir accés a la mateixa xarxa des d'allà.
     contact: Contacte
     contact_missing: No configurat
     contact_unavailable: N/D
+    documentation: Documentació
     extended_description_html: |
       <h3>Un bon lloc per les regles</h3>
       <p>Encara no s'ha configurat la descripció ampliada.</p>
@@ -25,23 +28,38 @@ ca:
     hosted_on: Mastodon allotjat a %{domain}
     learn_more: Més informació
     other_instances: Altres instàncies
+    privacy_policy: Política de privacitat
     source_code: Codi font
-    status_count_after: estats
+    status_count_after:
+      one: estat
+      other: estats
     status_count_before: Que han escrit
-    user_count_after: usuaris registrats
+    terms: Termes del servei
+    user_count_after:
+      one: usuari
+      other: usuaris
     user_count_before: Tenim
     what_is_mastodon: Què és Mastodon?
   accounts:
+    choices_html: 'Eleccions de %{name}:'
     follow: Segueix
-    followers: Seguidors
+    followers:
+      one: Seguidor
+      other: Seguidors
     following: Seguint
+    joined: Unit des de %{date}
     media: Mèdia
     moved_html: "%{name} s'ha mogut a %{new_profile_link}:"
     network_hidden: Aquesta informació no està disponible
     nothing_here: No hi ha res aquí!
     people_followed_by: Usuaris seguits per %{name}
     people_who_follow: Usuaris que segueixen %{name}
-    posts: Toots
+    pin_errors:
+      following: Has d'estar seguint la persona que vulguis avalar
+    posts:
+      one: Toot
+      other: Toots
+    posts_tab_heading: Toots
     posts_with_replies: Toots i respostes
     reserved_username: El nom d'usuari està reservat
     roles:
@@ -176,6 +194,7 @@ ca:
         unsuspend_account: "%{name} ha llevat la suspensió del compte de %{target}"
         update_custom_emoji: "%{name} ha actualitzat l'emoji %{target}"
         update_status: "%{name} estat actualitzat per %{target}"
+      deleted_status: "(toot suprimit)"
       title: Registre d'auditoria
     custom_emojis:
       by_domain: Domini
@@ -202,6 +221,27 @@ ca:
       update_failed_msg: No s'ha pogut actualitzar aquest emoji
       updated_msg: Emoji s'ha actualitzat correctament!
       upload: Carrega
+    dashboard:
+      backlog: treballs en espera
+      config: Configuració
+      feature_deletions: Supressions del compte
+      feature_invites: Enllaços de convits
+      feature_registrations: Registres
+      feature_relay: Relay de la Federació
+      features: Característiques
+      hidden_service: Federació amb serveis ocults
+      open_reports: informes oberts
+      recent_users: Usuaris recents
+      search: Cerca de text complet
+      single_user_mode: Mode d'usuari únic
+      software: Programari
+      space: Ús d’espai
+      title: Panell
+      total_users: usuaris en total
+      trends: Tendències
+      week_interactions: interaccions d'aquesta setmana
+      week_users_active: actiu aquesta setmana
+      week_users_new: usuaris aquesta setmana
     domain_blocks:
       add_new: Afegeix
       created_msg: El bloqueig de domini ara s'està processant
@@ -251,12 +291,23 @@ ca:
       search: Cerca
       title: Instàncies conegudes
     invites:
+      deactivate_all: Desactiva-ho tot
       filter:
         all: Totes
         available: Disponible
         expired: Caducat
         title: Filtre
       title: Convida
+    relays:
+      add_new: Afegiu un nou relay
+      description_html: Un <strong>relay de federació</strong> és un servidor intermediari que intercanvia grans volums de toots públics entre servidors que es 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.
+      enable_hint: Una vegada habilitat, el teu servidor es subscriurà a tots els toots públics d'aquest relay i començarà a enviar-hi tots els toots públics d'aquest servidor.
+      inbox_url: URL del Relay
+      pending: S'està esperant l'aprovació del relay
+      save_and_enable: Desa i activa
+      setup: Configura una connexió de relay
+      status: Estat
+      title: Relays
     report_notes:
       created_msg: La nota del informe s'ha creat correctament!
       destroyed_msg: La nota del informe s'ha esborrat correctament!
@@ -306,12 +357,18 @@ ca:
       contact_information:
         email: Introdueix una adreça de correu electrònic píblica
         username: Nom d'usuari del contacte
+      custom_css:
+        desc_html: Modifica l'aspecte amb CSS carregat a cada pàgina
+        title: CSS personalitzat
       hero:
         desc_html: Es mostra en pàgina frontal. Recomanat 600x100px al menys. Si no es configura es mostrarà el de la instància
         title: Imatge d’heroi
       peers_api_enabled:
         desc_html: Els noms de domini que ha trobat aquesta instància al fediverse
         title: Publica la llista d'instàncies descobertes
+      preview_sensitive_media:
+        desc_html: Les visualitzacions prèvies d'enllaços d'altres llocs web mostraran una miniatura encara que els mitjans de comunicació estiguin marcats com a sensibles
+        title: Mostra els mitjans sensibles a les previsualitzacions d'OpenGraph
       registrations:
         closed_message:
           desc_html: Apareix en la primera pàgina quan es tanquen els registres. Pots utilitzar etiquetes HTML
@@ -337,6 +394,9 @@ ca:
       site_description_extended:
         desc_html: Un bon lloc per al codi de conducta, regles, directrius i altres coses que distingeixen la vostra instància. Pots utilitzar etiquetes HTML
         title: Descripció ampliada del lloc
+      site_short_description:
+        desc_html: Es mostra a la barra lateral i a metaetiquetes. Descriu en un únic paràgraf què és Mastodon i què fa que aquest servidor sigui especial. Si està buit, s'estableix per defecte la descripció de la instància.
+        title: Descripció curta de l’instància
       site_terms:
         desc_html: Pots escriure la teva pròpia política de privadesa, els termes del servei o d'altres normes legals. Pots utilitzar etiquetes HTML
         title: Termes del servei personalitzats
@@ -358,6 +418,7 @@ ca:
       media:
         title: Contingut multimèdia
       no_media: Sense contingut multimèdia
+      no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
       title: Estats del compte
       with_media: Amb contingut multimèdia
     subscriptions:
@@ -367,6 +428,12 @@ ca:
       last_delivery: Últim lliurament
       title: WebSub
       topic: Tema
+    suspensions:
+      bad_acct_msg: El valor de confirmació no s'ha trobat. Estàs suspenen el compte correcte?
+      hint_html: 'Per confirmar la suspensió del compte, introdueix %{value} al camp següent:'
+      proceed: Procedeix
+      title: Suspèn %{acct}
+      warning_html: 'Suspenen aquest compte esborrarà <strong>irreversiblement</strong> les dades del compte, incloent:'
     title: Administració
   admin_mailer:
     new_report:
@@ -498,6 +565,10 @@ ca:
     true_privacy_html: Considera que <strong>la autèntica privacitat només es pot aconseguir amb xifratge d'extrem a extrem</strong>.
     unlocked_warning_html: Tothom pot seguir-te per a veure inmediatament les teves publicacions privades. %{lock_link} per poder revisar i rebutjar seguidors.
     unlocked_warning_title: El teu compte no està blocat
+  footer:
+    developers: Desenvolupadors
+    more: Més…
+    resources: Recursos
   generic:
     changes_saved_msg: Els canvis s'han desat correctament!
     save_changes: Desa els canvis
@@ -611,6 +682,9 @@ ca:
     no_account_html: No tens cap compte? Pots <a href='%{sign_up_path}' target='_blank'>registrar-te aquí</a>
     proceed: Comença a seguir
     prompt: 'Seguiràs a:'
+  remote_interaction:
+    proceed: Procedeix a interactuar
+    prompt: 'Vols interactuar amb aquest toot:'
   remote_unfollow:
     error: Error
     title: Títol
@@ -694,6 +768,7 @@ ca:
       private: No es pot fixar el toot no públic
       reblog: No es pot fixar un impuls
     show_more: Mostrar més
+    sign_in_to_participate: Inicia la sessió per participar a la conversa
     title: '%{name}: "%{quote}"'
     visibilities:
       private: Només seguidors
@@ -792,6 +867,7 @@ ca:
   time:
     formats:
       default: "%b %d, %Y, %H:%M"
+      month: "%b %Y"
   two_factor_authentication:
     code_hint: Introdueix el codi generat per l'aplicació autenticadora per a confirmar
     description_html: Si habilites l'<strong>autenticació de dos factors</strong>, et caldrà tenir el teu telèfon, que generarà tokens per a que puguis iniciar sessió.
diff --git a/config/locales/co.yml b/config/locales/co.yml
index bb0ae8134..f21471ff7 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -6,6 +6,7 @@ co:
     about_this: À prupositu
     administered_by: 'Amministratu da:'
     api: API
+    apps: Applicazione per u telefuninu
     closed_registrations: Pè avà, l’arregistramenti sò chjosi nant’à st’istanza. Mà pudete truvà un’altr’istanza per fà un contu è avè accessu à listessa reta da quallà.
     contact: Cuntattu
     contact_missing: Mancante
@@ -29,23 +30,36 @@ co:
     other_instances: Lista di l’istanze
     privacy_policy: Pulitica di vita privata
     source_code: Codice di fonte
-    status_count_after: statuti
+    status_count_after:
+      one: statutu
+      other: statuti
     status_count_before: chì anu pubblicatu
     terms: Cundizione di u serviziu
-    user_count_after: parsone quì
+    user_count_after:
+      one: utilizatore
+      other: utilizatori
     user_count_before: Ci sò
     what_is_mastodon: Quale hè Mastodon?
   accounts:
+    choices_html: "%{name} ricumanda:"
     follow: Siguità
-    followers: Abbunati
+    followers:
+      one: Abbunatu·a
+      other: Abbunati
     following: Abbunamenti
+    joined: Quì dapoi %{date}
     media: Media
     moved_html: "%{name} hà cambiatu di contu, avà hè nant’à %{new_profile_link}:"
     network_hidden: St'infurmazione ùn hè micca dispunibule
     nothing_here: Ùn c’hè nunda quì!
     people_followed_by: Seguitati da %{name}
     people_who_follow: Seguitanu %{name}
-    posts: Statuti
+    pin_errors:
+      following: Duvete digià siguità a persona che vulete ricumandà
+    posts:
+      one: Statutu
+      other: Statuti
+    posts_tab_heading: Statuti
     posts_with_replies: Statuti è risposte
     reserved_username: Stu cugnome hè riservatu
     roles:
@@ -180,6 +194,7 @@ co:
         unsuspend_account: "%{name} hà fattu che u contu di %{target} ùn hè più suspesu"
         update_custom_emoji: "%{name} hà messu à ghjornu l’emoji %{target}"
         update_status: "%{name} hà cambiatu u statutu di %{target}"
+      deleted_status: "(statutu sguassatu)"
       title: Ghjurnale d’audit
     custom_emojis:
       by_domain: Duminiu
@@ -207,6 +222,7 @@ co:
       updated_msg: L’emoji hè stata messa à ghjornu!
       upload: Caricà
     dashboard:
+      backlog: travagli in attesa
       config: Cunfigurazione
       feature_deletions: Sguassamenti di conti
       feature_invites: Ligami d'invitazione
@@ -220,6 +236,7 @@ co:
       single_user_mode: Modu utilizatore unicu
       software: Lugiziale
       space: Usu di u spaziu
+      title: Dashboard
       total_users: utilizatori in tutale
       trends: Tindenze
       week_interactions: interazzione sta settimana
@@ -274,6 +291,7 @@ co:
       search: Cercà
       title: Istanze cunnisciute
     invites:
+      deactivate_all: Disattivà tuttu
       filter:
         all: Tuttu
         available: Dispunibuli
@@ -285,6 +303,8 @@ co:
       description_html: Un <strong>ripetitore di federazione</strong> ghjè un servore intermediariu chì manda statuti pubblichi trà l'istanze abbunate. <strong>Pò aiutà l'istanze chjuche è mezane à scuprì u cuntinutu di u fediverse</strong> senza chì l'utilizatori appianu bisognu di seguità tutti i conti di l'altri servori.
       enable_hint: Quandu sarà attivatu, u vostru servore hà da seguità i statuti pubblichi di u ripetitore, è mandarà i so statuti pubblichi quallà.
       inbox_url: URL di u ripetitore
+      pending: In attesa di l'apprubazione di u ripetitore
+      save_and_enable: Salvà è attivà
       setup: Creà una cunnessione cù un ripetitore
       status: Statutu
       title: Ripetitori
@@ -337,12 +357,18 @@ co:
       contact_information:
         email: E-mail prufissiunale
         username: Identificatore di cuntattu
+      custom_css:
+        desc_html: Mudificà l'apparenza cù CSS caricatu nant'à ogni pagina
+        title: CSS persunalizatu
       hero:
         desc_html: Affissatu nant’a pagina d’accolta. Ricumandemu almenu 600x100px. S’ellu ùn hè micca definiti, a vignetta di l’istanza sarà usata
         title: Ritrattu di cuprendula
       peers_api_enabled:
         desc_html: Indirizzi st’istanza hà vistu indè u fediverse
         title: Pubblicà a lista d’istanza cunnisciute
+      preview_sensitive_media:
+        desc_html: E priviste di i ligami nant'à l'altri siti mustreranu una vignetta ancu s'ellu hè marcatu cum'è sensibile u media
+        title: Vede media sensibili in e viste OpenGraph
       registrations:
         closed_message:
           desc_html: Affissatu nant’a pagina d’accolta quandu l’arregistramenti sò chjosi. Pudete fà usu di u furmattu HTML
@@ -369,6 +395,7 @@ co:
         desc_html: Una bona piazza per e regule, infurmazione è altre cose chì l’utilizatori duverìanu sapè. Pudete fà usu di marchi HTML
         title: Discrizzione stesa di u situ
       site_short_description:
+        desc_html: Mustratu indè a barra laterala è i tag meta. Spiegate quale hè Mastodon è ciò chì rende u vostru servore speciale in un paragrafu. S'ella hè lasciata viota, a discrizzione di l'istanza sarà utilizata.
         title: Descrizzione corta di l'istanza
       site_terms:
         desc_html: Quì pudete scrive e vostre regule di cunfidenzialità, cundizione d’usu o altre menzione legale. Pudete fà usu di marchi HTML
@@ -391,6 +418,7 @@ co:
       media:
         title: Media
       no_media: Nisun media
+      no_status_selected: I statuti ùn sò micca stati mudificati perchè manc'unu era selezziunatu
       title: Statutu di u contu
       with_media: Cù media
     subscriptions:
@@ -400,6 +428,12 @@ co:
       last_delivery: Ultima arricata
       title: WebSub
       topic: Sughjettu
+    suspensions:
+      bad_acct_msg: U valore di cunfirmazione ùn era micca curretta. Site sicuru·a di suspende u bonu contu?
+      hint_html: 'Per cunfirmà a suspensione di u contu, entrate %{value} quì sottu:'
+      proceed: Cuntinuà
+      title: Suspende %{acct}
+      warning_html: 'A suspensione di u contu sguasserà di manera <strong>irreversibile</strong> i so dati, cum''è:'
     title: Amministrazione
   admin_mailer:
     new_report:
@@ -505,6 +539,7 @@ co:
     storage: I vostri media
   filters:
     contexts:
+      home: Accolta
       notifications: Nutificazione
       public: Linee pubbliche
       thread: Cunversazione
@@ -512,6 +547,7 @@ co:
       title: Mudificà u filtru
     errors:
       invalid_context: Micca abbastanza cuntestu
+      invalid_irreversible: A filtrazione irreversibile marchja solu per l'accolta è e nutificazione
     index:
       delete: Toglie
       title: Filtri
@@ -646,6 +682,9 @@ co:
     no_account_html: Ùn avete micca un contu? Pudete <a href='%{sign_up_path}' target='_blank'>arregistravi quì</a>
     proceed: Cuntinuà per siguità
     prompt: 'Avete da siguità:'
+  remote_interaction:
+    proceed: Cunfirmà l'interazzione
+    prompt: 'Vulete interagisce cù u statutu:'
   remote_unfollow:
     error: Errore
     title: Titulu
@@ -729,6 +768,7 @@ co:
       private: Ùn pudete micca puntarulà un statutu ch’ùn hè micca pubblicu
       reblog: Ùn pudete micca puntarulà una spartera
     show_more: Vede di più
+    sign_in_to_participate: Cunnettatevi per participà à a cunversazione
     title: '%{name}: "%{quote}"'
     visibilities:
       private: Solu per l’abbunati
@@ -742,6 +782,87 @@ co:
     reblogged: spartutu
     sensitive_content: Cuntenutu sensibile
   terms:
+    body_html: |
+      <h2>Politique de confidentialité</h2>
+      <h3 id="collect">Quelles informations collectons-nous ?</h3>
+
+      <ul>
+        <li><em>Informations de base sur votre compte</em> : Si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.</li>
+      <li><em>Posts, liste d’abonnements et autres informations publiques</em> : La liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimer un post, il est probable que vos abonné·e·s en soient informé·e·s. Partager un message ou le marquer comme favori est toujours une action publique.</li>
+        <li><em>Posts directs et abonné·e·s uniquement</em> : Tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne fois pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. <em>Gardez s’il-vous-plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages</em> et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. <em>Ne partager aucune information sensible à l’aide de Mastodon.</em></li>
+        <li><em>IP et autres métadonnées</em> : Quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">Que faisons-nous des informations que nous collectons ?</h3>
+
+      <p>Toutes les informations que nous collectons sur vous peuvent être utilisées d’une des manières suivantes :</p>
+
+      <ul>
+        <li>Pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.</li>
+        <li>Pour aider à la modération de la communauté, par exemple, comparer votre adresse IP à d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.</li>
+        <li>L’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyez des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour tout autres requêtes ou questions.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">Comment protégeons-nous vos informations ?</h3>
+
+      <p>Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont sécurisés à l’aide de TLS tandis que votre mot de passe est haché en utilisant un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">Quelle est notre politique de conservation des données ?</h3>
+
+      <p>Nous ferons un effort de bonne foi :</p>
+
+      <ul>
+        <li>Pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.</li>
+        <li>Pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.</li>
+      </ul>
+
+      <p>Vous pouvez demander une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.</p>
+
+      <p>Vous pouvez, à n’importe quel moment, supprimer votre compte de manière définitive.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">Utilisons-nous des témoins de connexion ?</h3>
+
+      <p>Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transféres sur le disque dur de votre ordinateur via votre navigateur web (si vous l’avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et de, dans le cas où vous possédez un compte, de vous associer avec ce dernier.</p>
+
+      <p>Nous utilisons les témoins de connexion comme un moyen de comprendre et de nous souvenir de vos préférences pour vos prochaines visites.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">Divulguons-nous des informations à des tierces parties ?</h3>
+
+      <p>Nous ne vendons, n’échangeons ou ne transférons d’une quelque manière que soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tierces parties de confiance qui nous aident à opérer ce site, à conduire nos activités commerciales ou à vous servir, tant qu’elles acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que c’est nécessaire pour nous conformer à la loi, pour appliquer les politiques de notre site ainsi que pour défendre nos droits, notre propriété, notre sécurité et celles et ceux d’autres personnes.</p>
+
+      <p>Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement peuvent être délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.</p>
+
+      <p>Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tout vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">Utilisation de ce site par les enfants</h3>
+
+      <p>Si ce serveur est situé dans dans l’UE ou l’EEE : Notre site, produits et services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (<a href="https://fr.wikipedia.org/wiki/R%C3%A8glement_g%C3%A9n%C3%A9ral_sur_la_protection_des_donn%C3%A9es">Règlement Général sur la Protection des Données</a>), merci de ne pas utiliser ce site.</p>
+
+      <p>Si ce serveur est situé dans aux États-Unis d’Amérique : Notre site, produits et services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (<a href="https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>), merci de ne pas utiliser ce site.</p>
+
+      <p>Les exigences légales peuvent être différentes si ce serveur se trouve dans une autre juridiction.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">Modifications de notre politique de confidentialité</h3>
+
+      <p>Dans le cas où nous déciderions de changer notre politique de confidentialité, nous posterons les modifications sur cette page.</p>
+
+      <p>Ce document est publié sous lincence CC-BY-SA. Il a été mis à jours pour la dernière fois le 7 mars 2018.</p>
+
+      <p>Originellement adapté de la <a href="https://github.com/discourse/discourse">politique de confidentialité de Discourse</a>.</p>
     title: Termini d’usu è di cunfidenzialità per %{instance}
   themes:
     contrast: Cuntrastu altu
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index f573b9d10..ae2d3c04f 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -304,6 +304,7 @@ cs:
       enable_hint: Je-li tohle povoleno, začne váš server odebírat všechny veřejné tooty z tohoto mostu a odesílat na něj své vlastní veřejné tooty.
       inbox_url: URL mostu
       pending: Čekám na souhlas mostu
+      save_and_enable: Uložit a povolit
       setup: Nastavit připojení k mostu
       status: Stav
       title: Mosty
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index affb560c3..84e8d9e2b 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -29,9 +29,9 @@ cy:
     network_hidden: Nid yw'r wybodaeth hon ar gael
     nothing_here: Does dim byd yma!
     posts:
-      one: Tŵt
-      other: Tŵtiau
-    posts_tab_heading: Tŵtiau
+      one: Twt
+      other: Twtiau
+    posts_tab_heading: Twtiau
     roles:
       admin: Gweinyddwr
       bot: Bot
@@ -101,6 +101,11 @@ cy:
       trends: Tueddiadau
     instances:
       domain_name: Parth
+    settings:
+      contact_information:
+        email: E-bost busnes
+  auth:
+    change_password: Cyfrinair
   authorize_follow:
     follow: Dilynwch
     title: Dilynwch %{acct}
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 8e31fbfe9..e469fd3c0 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -304,6 +304,7 @@ da:
       enable_hint: Når dette er aktiveret, vil serveren abonnere på alle offentlige trut fra dette relay, og vil begynde at sende offentlige trut fra denne server dertil.
       inbox_url: Link til relay
       pending: Venter på godkendelse fra relæet
+      save_and_enable: Gem og aktiver
       setup: Opsæt en videresendelses forbindelse
       status: Status
       title: Videresendelser
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 747e737ae..e1d594053 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -6,6 +6,7 @@ de:
     about_this: Über diese Instanz
     administered_by: 'Administriert von:'
     api: API
+    apps: Mobile Apps
     closed_registrations: Die Registrierung auf dieser Instanz ist momentan geschlossen. Aber du kannst dein Konto auch auf einer anderen Instanz erstellen! Von dort hast du genauso Zugriff auf das Mastodon-Netzwerk.
     contact: Kontakt
     contact_missing: Nicht angegeben
@@ -29,15 +30,22 @@ de:
     other_instances: Andere Instanzen
     privacy_policy: Datenschutzerklärung
     source_code: Quellcode
-    status_count_after: Beiträge verfassten
+    status_count_after:
+      one: Status
+      other: Status
     status_count_before: die
     terms: Nutzungsbedingungen
-    user_count_after: Wesen
+    user_count_after:
+      one: Benutzer
+      other: Benutzer
     user_count_before: Zuhause für
     what_is_mastodon: Was ist Mastodon?
   accounts:
+    choices_html: "%{name} empfielt:"
     follow: Folgen
-    followers: Folgende
+    followers:
+      one: Folgende
+      other: Follower
     following: Folgt
     joined: Beigetreten am %{date}
     media: Medien
@@ -46,7 +54,12 @@ de:
     nothing_here: Hier gibt es nichts!
     people_followed_by: Profile, denen %{name} folgt
     people_who_follow: Profile, die %{name} folgen
-    posts: Beiträge
+    pin_errors:
+      following: Du musst dieser Person bereits folgen, um sie empfehlen zu können
+    posts:
+      one: Beitrag
+      other: Beiträge
+    posts_tab_heading: Beiträge
     posts_with_replies: Beiträge mit Antworten
     reserved_username: Dieser Profilname ist belegt
     roles:
@@ -181,6 +194,7 @@ de:
         unsuspend_account: "%{name} hat die Sperrung von %{target}s Account aufgehoben"
         update_custom_emoji: "%{name} hat das %{target} Emoji aktualisiert"
         update_status: "%{name} hat den Status von %{target} aktualisiert"
+      deleted_status: "(gelöschter Beitrag)"
       title: Überprüfungsprotokoll
     custom_emojis:
       by_domain: Domain
@@ -277,6 +291,7 @@ de:
       search: Suchen
       title: Bekannte Instanzen
     invites:
+      deactivate_all: Alle deaktivieren
       filter:
         all: Alle
         available: Verfügbar
@@ -288,6 +303,7 @@ de:
       description_html: Ein <strong>Föderierungsrelay</strong> ist ein vermittelnder Server, der eine große Anzahl öffentlicher Beiträge zwischen Servern austauscht, die es abonnieren und zu ihm veröffentlichen.<strong> Es kann kleinen und mittleren Servern dabei helfen, Inhalte des Fediverse zu entdecken</strong>, was andernfalls das manuelle Folgen anderer Leute auf entfernten Servern durch lokale Nutzer erfordern würde.
       enable_hint: Sobald aktiviert wird dein Server alle öffentlichen Beiträge dieses Relays abonnieren und wird alle öffentlichen Beiträge dieses Servers an es senden.
       inbox_url: Relay-URL
+      pending: Warte auf Zustimmung des Relays
       setup: Relayverbindung einrichten
       status: Status
       title: Relays
@@ -340,6 +356,9 @@ de:
       contact_information:
         email: Öffentliche E-Mail-Adresse
         username: Profilname für die Kontaktaufnahme
+      custom_css:
+        desc_html: Verändere das Aussehen mit CSS, dass auf jeder Seite geladen wird
+        title: Benutzerdefiniertes CSS
       hero:
         desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Instanz-Thumbnail dafür verwendet
         title: Bild für Startseite
@@ -398,6 +417,7 @@ de:
       media:
         title: Medien
       no_media: Keine Medien
+      no_status_selected: Keine Beiträge wurden verändert, weil keine ausgewählt wurden
       title: Beiträge des Kontos
       with_media: Mit Medien
     subscriptions:
@@ -407,6 +427,12 @@ de:
       last_delivery: Letzte Zustellung
       title: WebSub
       topic: Thema
+    suspensions:
+      bad_acct_msg: Der Bestätigungswert stimmt nicht überein. Sperrst du das richtige Benutzerkonto?
+      hint_html: 'Um die Sperrung des Benutzerkontos zu genehmigen tippe %{value} in das Feld unten ein:'
+      proceed: Fortfahren
+      title: "%{acct} sperren"
+      warning_html: 'Die Sperrung des Benutzerkontos wird <strong>unwiederrufliche</strong> Schäden hervorrufen und alle Daten löschen, die folgendes beinhalten:'
     title: Administration
   admin_mailer:
     new_report:
@@ -655,6 +681,9 @@ de:
     no_account_html: Noch keinen Account? Du kannst dich <a href='%{sign_up_path}' target='_blank'>hier anmelden</a>
     proceed: Weiter
     prompt: 'Du wirst dieser Person folgen:'
+  remote_interaction:
+    proceed: Fortfahren zum Interagieren
+    prompt: 'Du wirst mit diesem Beitrag interagieren:'
   remote_unfollow:
     error: Fehler
     title: Titel
@@ -738,6 +767,7 @@ de:
       private: Du kannst nur öffentliche Beiträge anheften
       reblog: Du kannst keine geteilten Beiträge anheften
     show_more: Mehr anzeigen
+    sign_in_to_participate: Melde dich an, um an der Konversation teilzuhaben
     title: '%{name}: "%{quote}"'
     visibilities:
       private: Nur Folgende
diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml
index 4ef5508a1..a60884c5b 100644
--- a/config/locales/devise.cy.yml
+++ b/config/locales/devise.cy.yml
@@ -1,3 +1,6 @@
 ---
 cy:
-  devise: {}
+  devise:
+    mailer:
+      reset_password_instructions:
+        action: Newid cyfrinair
diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml
new file mode 100644
index 000000000..fea4baf60
--- /dev/null
+++ b/config/locales/doorkeeper.ro.yml
@@ -0,0 +1,3 @@
+---
+ro:
+  doorkeeper: {}
diff --git a/config/locales/el.yml b/config/locales/el.yml
index d41ab3421..84119b086 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -304,6 +304,7 @@ el:
       enable_hint: Μόλις ενεργοποιηθεί, ο εξυπηρετητής (server) σου θα εγγραφεί σε όλα τα δημόσια τουτ αυτού του ανταποκριτή (relay) και θα αρχίσει να προωθεί τα δικά του δημόσια τουτ σε αυτόν.
       inbox_url: URL ανταποκριτή
       pending: Περιμένοντας την έγκριση του ανταποκριτή
+      save_and_enable: Αποθήκευση και ενεργοποίηση
       setup: Όρισε μια σύνδεση ανταπόκρισης
       status: Κατάσταση
       title: Ανταποκριτές
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 244451c04..b0d230634 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -304,6 +304,7 @@ fa:
       enable_hint: اگر فعال باشد، سرور شما عضو همهٔ بوق‌های عمومی‌ای را که از این رله می‌آید می‌گیرد، و بوق‌های عمومی این سرور را به آن می‌فرستند.
       inbox_url: نشانی رله
       pending: در انتظار پذیرش رله
+      save_and_enable: ذخیره و فعال‌سازی
       setup: پیوستن به رله‌ها
       status: وضعیت
       title: رله‌ها
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 20e2ca33e..1e08e9bbe 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -304,6 +304,7 @@ fr:
       enable_hint: Une fois activé, votre serveur souscrira à tous les pouets publics présents sur ce relais et y enverra ses propres pouets publics.
       inbox_url: URL de relais
       pending: En attente de l'approbation du relai
+      save_and_enable: Sauvegarder et activer
       setup: Paramétrer une connexion de relais
       status: Statut
       title: Relais
@@ -483,7 +484,7 @@ fr:
     error: Malheureusement, il y a eu une erreur en cherchant les détails du compte distant
     follow: Suivre
     follow_request: 'Vous avez demandé à suivre :'
-    following: 'Youpi ! Vous suivez  :'
+    following: 'Youpi ! Vous suivez maintenant  :'
     post_follow:
       close: Ou bien, vous pouvez fermer cette fenêtre.
       return: Afficher le profil de l’utilisateur⋅ice
@@ -614,7 +615,7 @@ fr:
       too_many: Impossible de joindre plus de 4 fichiers
   migrations:
     acct: profil@domaine du nouveau compte
-    currently_redirecting: 'Votre profile va être redirigé vers :'
+    currently_redirecting: 'Votre profil va être redirigé vers :'
     proceed: Enregistrer
     updated_msg: Les paramètres de votre migration de compte ont été mis à jour avec succès !
   moderation:
@@ -632,7 +633,7 @@ fr:
         other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418"
       title: Pendant votre absence…
     favourite:
-      body: "%{name} a ajouté votre post à ses favoris :"
+      body: "%{name} a ajouté votre pouet à ses favoris :"
       subject: "%{name} a ajouté votre post à ses favoris"
       title: Nouveau favori
     follow:
@@ -881,7 +882,7 @@ fr:
     generate_recovery_codes: Générer les codes de récupération
     instructions_html: "<strong>Scannez ce QR code grâce à Google Authenticator, Authy ou une application similaire sur votre téléphone</strong>. Désormais, cette application génèrera des jetons que vous devrez saisir à chaque connexion."
     lost_recovery_codes: Les codes de récupération vous permettent de retrouver les accès à votre compte si vous perdez votre téléphone. Si vous perdez vos codes de récupération, vous pouvez les générer à nouveau ici. Vos anciens codes de récupération seront invalidés.
-    manual_instructions: 'Si vous ne pouvez pas scanner ce QR code et devez l’entrer manuellement, voici le secret en clair :'
+    manual_instructions: 'Si vous ne pouvez pas scanner le code QR et devez l’entrer manuellement, voici le secret en texte-plein :'
     recovery_codes: Codes de récupération
     recovery_codes_regenerated: Codes de récupération régénérés avec succès
     recovery_instructions_html: Si vous perdez l’accès à votre téléphone, vous pouvez utiliser un des codes de récupération ci-dessous pour retrouver l’accès à votre compte. <strong>Conservez les codes de récupération en sécurité</strong>. Par exemple, en les imprimant et en les stockant avec vos autres documents importants.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index a221a8e44..024443d5f 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -43,7 +43,9 @@ ja:
   accounts:
     choices_html: "%{name} によるおすすめ:"
     follow: フォロー
-    followers: フォロワー
+    followers:
+      one: フォロワー
+      other: フォロワー
     following: フォロー中
     joined: "%{date} に登録"
     media: メディア
@@ -54,7 +56,10 @@ ja:
     people_who_follow: "%{name} さんをフォロー中のアカウント"
     pin_errors:
       following: おすすめしたい人はあなたが既にフォローしている必要があります
-    posts: トゥート
+    posts:
+      one: トゥート
+      other: トゥート
+    posts_tab_heading: トゥート
     posts_with_replies: トゥートと返信
     reserved_username: このユーザー名は予約されています
     roles:
@@ -299,6 +304,7 @@ ja:
       enable_hint: 有効にすると、リレーから全ての公開トゥートを受信するようになり、またこのサーバーの全ての公開トゥートをリレーに送信するようになります。
       inbox_url: リレーURL
       pending: リレーサーバーの承認待ちです
+      save_and_enable: 保存して有効にする
       setup: リレー接続を設定する
       status: ステータス
       title: リレー
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 1ae825443..737ab5be1 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -5,10 +5,13 @@ ko:
     about_mastodon_html: 마스토돈은 <em>오픈 소스 기반의</em> 소셜 네트워크 서비스 입니다. 상용 플랫폼의 대체로서 <em>분산형 구조</em>를 채택해, 여러분의 대화가 한 회사에 독점되는 것을 방지합니다. 신뢰할 수 있는 인스턴스를 선택하세요 &mdash; 어떤 인스턴스를 고르더라도, 누구와도 대화할 수 있습니다. 누구나 자신만의 마스토돈 인스턴스를 만들 수 있으며, 아주 매끄럽게 <em>소셜 네트워크</em>에 참가할 수 있습니다.
     about_this: 이 인스턴스에 대해서
     administered_by: '관리자:'
+    api: API
+    apps: 모바일 앱
     closed_registrations: 현재 이 인스턴스에서는 신규 등록을 받고 있지 않습니다.
     contact: 연락처
     contact_missing: 미설정
     contact_unavailable: N/A
+    documentation: 문서
     extended_description_html: |
       <h3>룰을 작성하는 장소</h3>
       <p>아직 설명이 작성되지 않았습니다.</p>
@@ -25,23 +28,38 @@ ko:
     hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
     learn_more: 자세히
     other_instances: 다른 인스턴스
+    privacy_policy: 개인정보 정책
     source_code: 소스 코드
-    status_count_after: 툿
+    status_count_after:
+      one: 툿
+      other: 툿
     status_count_before: 툿 수
-    user_count_after: 명
+    terms: 이용약관
+    user_count_after:
+      one: 명
+      other: 명
     user_count_before: 사용자 수
     what_is_mastodon: 마스토돈이란?
   accounts:
+    choices_html: "%{name}의 추천:"
     follow: 팔로우
-    followers: 팔로워
+    followers:
+      one: 팔로워
+      other: 팔로워
     following: 팔로잉
+    joined: "%{date}에 가입함"
     media: 미디어
     moved_html: "%{name}은 %{new_profile_link}으로 이동되었습니다:"
     network_hidden: 이 정보는 사용할 수 없습니다
     nothing_here: 아무 것도 없습니다!
     people_followed_by: "%{name} 님이 팔로우 중인 계정"
     people_who_follow: "%{name} 님을 팔로우 중인 계정"
-    posts: 툿
+    pin_errors:
+      following: 추천하려는 사람을 팔로우 하고 있어야 합니다
+    posts:
+      one: 툿
+      other: 툿
+    posts_tab_heading: 툿
     posts_with_replies: 툿과 답장
     reserved_username: 이 아이디는 예약되어 있습니다
     roles:
@@ -176,6 +194,7 @@ ko:
         unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다"
         update_custom_emoji: "%{name}이 에모지 %{target}를 업데이트 했습니다"
         update_status: "%{name}이 %{target}의 상태를 업데이트 했습니다"
+      deleted_status: "(삭제됨)"
       title: 감사 기록
     custom_emojis:
       by_domain: 도메인
@@ -274,6 +293,7 @@ ko:
       search: 검색
       title: 알려진 인스턴스들
     invites:
+      deactivate_all: 전부 비활성화
       filter:
         all: 모두
         available: 사용가능
@@ -285,6 +305,8 @@ ko:
       description_html: "<strong>연합 릴레이</strong>는 서버들 사이에서 많은 양의 공개 툿을 구독하고 중개하는 서버입니다. <strong>이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다</strong>, 이제 로컬 유저들이 다른 서버의 유저들을 수동으로 팔로우 하지 않아도 됩니다."
       enable_hint: 활성화 되면, 이 릴레이의 모든 공개 툿을 구독하고 이 서버의 공개 툿을 전송하게 됩니다.
       inbox_url: 릴레이 URL
+      pending: 릴레이의 승인 대기중
+      save_and_enable: 저장하고 활성화
       setup: 릴레이 연결 설정
       status: 상태
       title: 릴레이
@@ -337,6 +359,9 @@ ko:
       contact_information:
         email: 공개할 메일 주소를 입력
         username: 아이디를 입력
+      custom_css:
+        desc_html: 모든 페이지에 적용할 CSS
+        title: 커스텀 CSS
       hero:
         desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 인스턴스의 썸네일이 사용 됩니다
         title: 히어로 이미지
@@ -371,6 +396,9 @@ ko:
       site_description_extended:
         desc_html: 규칙, 가이드라인 등을 작성하기 좋은 곳입니다. HTML 태그를 사용할 수 있습니다
         title: 사이트 상세 설명
+      site_short_description:
+        desc_html: 사이드바와 메타 태그에 나타납니다. 마스토돈이 무엇이고 이 서버의 특징은 무엇인지 한 문장으로 설명하세요. 비워두면 인스턴스 설명이 대신 사용됩니다.
+        title: 짧은 인스턴스 설명
       site_terms:
         desc_html: 당신은 독자적인 개인정보 취급 방침이나 이용약관, 그 외의 법적 근거를 작성할 수 있습니다. HTML태그를 사용할 수 있습니다
         title: 커스텀 서비스 이용 약관
@@ -392,6 +420,7 @@ ko:
       media:
         title: 미디어
       no_media: 미디어 없음
+      no_status_selected: 아무 것도 선택 되지 않아 아무 것도 바뀌지 않았습니다
       title: 계정 툿
       with_media: 미디어 있음
     subscriptions:
@@ -401,6 +430,12 @@ ko:
       last_delivery: 최종 발송
       title: WebSub
       topic: 토픽
+    suspensions:
+      bad_acct_msg: 확인값이 일치하지 않습니다. 정지하려는 계정이 맞습니까?
+      hint_html: '이 계정을 정지하려면 %{value}를 아래 입력칸에 입력하세요:'
+      proceed: 처리됨
+      title: "%{acct} 정지하기"
+      warning_html: '이 계정을 정지하면 계정의 데이터를 모두 삭제하며 <strong>되돌릴 수 없습니다</strong>. 이것은 다음을 포함합니다:'
     title: 관리
   admin_mailer:
     new_report:
@@ -532,6 +567,10 @@ ko:
     true_privacy_html: "<strong>프라이버시 보호는 End-to-End 암호화로만 이루어 질 수 있다는 것에 유의</strong>해 주십시오."
     unlocked_warning_html: 누구든 여러분을 팔로우 할 수 있으며, 여러분의 프라이빗 투고를 볼 수 있습니다. 팔로우 할 수 있는 사람을 제한하고 싶은 경우 %{lock_link}에서 설정해 주십시오.
     unlocked_warning_title: 이 계정은 비공개로 설정되어 있지 않습니다
+  footer:
+    developers: 개발자
+    more: 더 보기…
+    resources: 리소스
   generic:
     changes_saved_msg: 정상적으로 변경되었습니다!
     save_changes: 변경 사항을 저장
@@ -645,6 +684,9 @@ ko:
     no_account_html: 계정이 없나요? <a href='%{sign_up_path}' target='_blank'>여기에서 가입 할 수 있습니다</a>
     proceed: 팔로우 하기
     prompt: '팔로우 하려 하고 있습니다:'
+  remote_interaction:
+    proceed: 진행
+    prompt: '이 게시물에 상호작용하려 하고 있습니다:'
   remote_unfollow:
     error: 에러
     title: 타이틀
@@ -728,6 +770,7 @@ ko:
       private: 비공개 툿은 고정될 수 없습니다
       reblog: 부스트는 고정될 수 없습니다
     show_more: 더 보기
+    sign_in_to_participate: 로그인 하여 이 대화에 참여하기
     title: '%{name}: "%{quote}"'
     visibilities:
       private: 비공개
@@ -741,6 +784,87 @@ ko:
     reblogged: 님이 부스트 했습니다
     sensitive_content: 민감한 컨텐츠
   terms:
+    body_html: |
+      <h2>개인정보 정책</h2>
+      <h3 id="collect">우리가 어떤 정보를 수집하나요?</h3>
+
+      <ul>
+        <li><em>기본 계정 정보</em>: 이 서버에 가입하실 때 유저네임, 이메일 주소, 패스워드 등을 입력 받게 됩니다. 추가적으로 디스플레이네임이나 자기소개, 프로필 이미지, 헤더 이미지 등의 프로필 정보를 입력하게 됩니다. 유저네임, 디스플레이네임, 자기소개, 프로필 이미지와 헤더 이미지는 언제나 공개적으로 게시됩니다.</li>
+        <li><em>게시물, 팔로잉, 기타 공개된 정보</em>: 당신이 팔로우 하는 사람들의 리스트는 공개됩니다. 당신을 팔로우 하는 사람들도 마찬가지입니다. 당신이 게시물을 작성하는 경우, 응용프로그램이 메시지를 받았을 때의 날짜와 시간이 기록 됩니다. 게시물은 그림이나 영상 등의 미디어를 포함할 수 있습니다. 퍼블릭과 미표시(unlisted) 게시물은 공개적으로 접근이 가능합니다. 프로필에 게시물을 고정하는 경우 마찬가지로 공개적으로 접근 가능한 정보가 됩니다. 당신의 게시물들은 당신의 팔로워들에게 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송되고 그곳에 사본이 저장 됩니다. 당신이 게시물을 삭제하는 경우 이 또한 당신의 팔로워들에게 전송 됩니다. 다른 게시물을 리블로깅 하거나 즐겨찾기 하는 경우 이는 언제나 공개적으로 제공 됩니다.</li>
+        <li><em>DM, 팔로워 공개 게시물</em>: 모든 게시물들은 서버에서 처리되고 저장됩니다. 팔로워 공개 게시물은 당신의 팔로워와 멘션 된 사람들에게 전달이 됩니다. 다이렉트 메시지는 멘션 된 사람들에게만 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송 되고 그곳에 사본이 저장됨을 의미합니다. 우리는 이 게시물들이 권한을 가진 사람들만 열람이 가능하도록 노력을 할 것이지만 다른 서버에서는 이것이 실패할 수도 있습니다. 그러므로 당신의 팔로워들이 속한 서버를 재확인하는 것이 중요합니다. 당신은 새 팔로워를 수동으로 승인하거나 거절하도록 설정을 변경할 수 있습니다. <em>해당 서버의 운영자는 서버가 받는 메시지를 열람할 수 있다는 것을 항상 염두해 두세요</em>, 그리고 수신자들은 스크린샷을 찍거나 복사하는 등의 방법으로 다시 공유할 수 있습니다. <em>위험한 정보를 마스토돈을 통해 공유하지 마세요.</em></li>
+        <li><em>IP와 기타 메타데이터</em>: 당신이 로그인 하는 경우 IP 주소와 브라우저의 이름을 저장합니다. 모든 세션은 당신이 검토하고 취소할 수 있도록 설정에서 제공 됩니다. 마지막으로 사용 된 IP 주소는 최대 12개월 간 저장됩니다. 또한, 모든 요청에 대해 IP주소를 포함한 정보를 로그에 저장할 수 있습니다.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">우리가 당신의 정보를 어디에 쓰나요?</h3>
+
+      <p>당신에게서 수집한 정보는 다음과 같은 곳에 사용 됩니다:</p>
+
+      <ul>
+        <li>마스토돈의 주요 기능 제공. 다른 사람의 게시물에 상호작용 하거나 자신의 게시물을 작성하기 위해서는 로그인을 해야 합니다. 예를 들어, 다른 사람의 게시물을 자신만의 홈 타임라인에서 모아 보기 위해 팔로우를 할 수 있습니다.</li>
+        <li>커뮤니티의 모더레이션을 위해, 예를 들어 당신의 IP 주소와 기타 사항을 비교하여 금지를 우회하거나 다른 규칙을 위반하는지 판단하는 데에 사용할 수 있습니다.</li>
+        <li>당신이 제공한 이메일 주소를 통해 정보, 다른 사람들의 반응이나 받은 메시지에 대한 알림, 기타 요청 등에 관한 응답 요청 등을 보내는 데에 활용됩니다.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">어떻게 당신의 정보를 보호하나요?</h3>
+
+      <p>우리는 당신이 입력, 전송, 접근하는 개인정보를 보호하기 위해 다양한 보안 대책을 적용합니다. 당신의 브라우저 세션, 당신의 응용프로그램과의 통신, API는 SSL로 보호 되며 패스워드는 강력한 단방향 해시 알고리즘을 사용합니다. 계정의 더 나은 보안을 위해 2단계 인증을 활성화 할 수 있습니다.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">자료 저장 정책은 무엇이죠?</h3>
+
+      <p>우리는 다음을 위해 노력을 할 것입니다:</p>
+
+      <ul>
+        <li>IP를 포함해 이 서버에 전송 되는 모든 요청에 대한 로그는 90일을 초과하여 저장되지 않습니다.</li>
+        <li>가입 된 유저의 IP 정보는 12개월을 초과하여 저장 되지 않습니다.</li>
+      </ul>
+
+      <p>당신은 언제든지 게시물, 미디어 첨부, 프로필 이미지, 헤더 이미지를 포함한 당신의 컨텐트에 대한 아카이브를 요청하고 다운로드 할 수 있습니다.</p>
+
+      <p>언제든지 계정을 완전히 삭제할 수 있습니다.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">쿠키를 사용하나요?</h3>
+
+      <p>네. 쿠키는 (당신이 허용한다면) 당신의 웹 브라우저를 통해 서버에서 당신의 하드드라이브에 저장하도록 전송하는 작은 파일들입니다. 이 쿠키들은 당신의 브라우저를 인식하고, 계정이 있는 경우 이와 연결하는 것을 가능하게 합니다.</p>
+
+      <p>당신의 환경설정을 저장하고 다음 방문에 활용하기 위해 쿠키를 사용합니다.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">외부에 정보를 공개하나요?</h3>
+
+      <p>우리는 당신을 식별 가능한 개인정보를 외부에 팔거나 제공하거나 전송하지 않습니다. 이는 당사의 사이트를 운영하기 위한, 기밀 유지에 동의하는, 신뢰 가능한 서드파티를 포함하지 않습니다. 또한 법률 준수, 사이트 정책 시행, 또는 당사나 타인에 대한 권리, 재산, 또는 안전보호를 위해 적절하다고 판단되는 경우 당신의 정보를 공개할 수 있습니다.</p>
+
+      <p>당신의 공개 게시물은 네트워크에 속한 다른 서버가 다운로드 할 수 있습니다. 당신의 팔로워나 수신자가 이 서버가 아닌 다른 곳에 존재하는 경우 당신의 공개, 팔로워 공개 게시물은 당신의 팔로워가 존재하는 서버로 전송되며, 다이렉트메시지는 수신자가 존재하는 서버로 전송 됩니다.</p>
+
+      <p>당신이 계정을 사용하기 위해 응용프로그램을 승인하는 경우 당신이 허용한 권한에 따라 응용프로그램은 당신의 공개 계정정보, 팔로잉 리스트, 팔로워 리스트, 게시물, 즐겨찾기 등에 접근이 가능해집니다. 응용프로그램은 절대로 당신의 이메일 주소나 패스워드에 접근할 수 없습니다.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">어린이의 사이트 사용</h3>
+
+      <p>이 서버가 EU나 EEA에 속해 있다면: 당사의 사이트, 제품과 서비스는 16세 이상인 사람들을 위해 제공됩니다. 당신이 16세 미만이라면 GDPR(<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>)의 요건에 따라 이 사이트를 사용할 수 없습니다.</p>
+
+      <p>이 서버가 미국에 속해 있다면: 당사의 사이트, 제품과 서비스는 13세 이상인 사람들을 위해 제공됩니다. 당신이 13세 미만이라면 COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>)의 요건에 따라 이 사이트를 사용할 수 없습니다.</p>
+
+      <p>이 서버가 있는 관할권에 따라 법적 요구가 달라질 수 있습니다.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">개인정보 정책의 변경</h3>
+
+      <p>만약 우리의 개인정보 정책이 바뀐다면, 이 페이지에 바뀐 정책이 포스트 됩니다.</p>
+
+      <p>이 문서는 CC-BY-SA 라이센스입니다. 마지막 업데이트는 2018년 3월 7일입니다.</p>
+
+      <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
     title: "%{instance} 이용약관과 개인정보 취급 방침"
   themes:
     contrast: 고대비
@@ -749,6 +873,7 @@ ko:
   time:
     formats:
       default: "%Y년 %m월 %d일 %H:%M"
+      month: "%Y년 %b"
   two_factor_authentication:
     code_hint: 확인하기 위해서 인증 애플리케이션에서 표시된 코드를 입력해 주십시오
     description_html: "<strong>2단계 인증</strong>을 활성화 하면 로그인 시 전화로 인증 코드를 받을 필요가 있습니다."
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 063123da8..baad9b507 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -151,9 +151,9 @@ nl:
       search: Zoeken
       shared_inbox_url: Gedeelde inbox-URL
       show:
-        created_reports: Toots door dit account gerapporteerd
+        created_reports: Door dit account aangemaakte rapportages
         report: gerapporteerd
-        targeted_reports: Toots van dit account gerapporteerd
+        targeted_reports: Over dit account aangemaakte rapportages
       silence: Negeren
       statuses: Toots
       subscribe: Abonneren
@@ -166,7 +166,7 @@ nl:
       web: Webapp
     action_logs:
       actions:
-        assigned_to_self_report: "%{name} heeft gerapporteerde toot %{target} aan zichzelf toegewezen"
+        assigned_to_self_report: "%{name} heeft rapportage %{target} aan zichzelf toegewezen"
         change_email_user: "%{name} veranderde het e-mailadres van gebruiker %{target}"
         confirm_user: E-mailadres van gebruiker %{target} is door %{name} bevestigd
         create_custom_emoji: Nieuwe emoji %{target} is door %{name} geüpload
@@ -184,12 +184,12 @@ nl:
         memorialize_account: Account %{target} is door %{name} in een gedenkpagina veranderd
         promote_user: Gebruiker %{target} is door %{name} gepromoveerd
         remove_avatar_user: "%{name} verwijderde de avatar van %{target}"
-        reopen_report: "%{name} heeft gerapporteerde toot %{target} heropend"
+        reopen_report: "%{name} heeft rapportage %{target} heropend"
         reset_password_user: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld
-        resolve_report: "%{name} heeft gerapporteerde toot %{target} opgelost"
+        resolve_report: "%{name} heeft rapportage %{target} opgelost"
         silence_account: Account %{target} is door %{name} genegeerd
         suspend_account: Account %{target} is door %{name} opgeschort
-        unassigned_report: "%{name} heeft het toewijzen van gerapporteerde toot %{target} ongedaan gemaakt"
+        unassigned_report: "%{name} heeft het toewijzen van rapportage %{target} ongedaan gemaakt"
         unsilence_account: Negeren van account %{target} is door %{name} opgeheven
         unsuspend_account: Opschorten van account %{target} is door %{name} opgeheven
         update_custom_emoji: Emoji %{target} is door %{name} bijgewerkt
@@ -230,7 +230,7 @@ nl:
       feature_relay: Federatierelay
       features: Functies
       hidden_service: Federatie met verborgen diensten
-      open_reports: onopgeloste gerapporteerde toots
+      open_reports: onopgeloste rapportages
       recent_users: Recente gebruikers
       search: In volledige tekst zoeken
       single_user_mode: Modus voor één gebruiker
@@ -304,16 +304,17 @@ nl:
       enable_hint: Eenmaal ingeschakeld gaat jouw server zich op alle openbare toots van deze relayserver abonneren en stuurt het de openbare toots van jouw server naar de relayserver.
       inbox_url: Relay-URL
       pending: Aan het wachten op toestemming van de relayserver
+      save_and_enable: Opslaan en inschakelen
       setup: Een verbinding met een relayserver maken
       status: Status
       title: Relayservers
     report_notes:
-      created_msg: Opmerking bij gerapporteerde toot succesvol aangemaakt!
-      destroyed_msg: Opmerking bij gerapporteerde toot succesvol verwijderd!
+      created_msg: Opmerking bij rapportage succesvol aangemaakt!
+      destroyed_msg: Opmerking bij rapportage succesvol verwijderd!
     reports:
       account:
         note: opmerking
-        report: gerapporteerde toot
+        report: rapportage
       action_taken_by: Actie uitgevoerd door
       are_you_sure: Weet je het zeker?
       assign_to_self: Aan mij toewijzen
@@ -330,18 +331,18 @@ nl:
         create_and_unresolve: Heropenen met opmerking
         delete: Verwijderen
         placeholder: Beschrijf welke acties zijn ondernomen of andere gerelateerde opmerkingen…
-      reopen: Gerapporteerde toot heropenen
-      report: 'Gerapporteerde toot #%{id}'
+      reopen: Rapportage heropenen
+      report: 'Rapportage #%{id}'
       report_contents: Inhoud
       reported_account: Gerapporteerde account
       reported_by: Gerapporteerd door
       resolved: Opgelost
-      resolved_msg: Gerapporteerde toot succesvol opgelost!
+      resolved_msg: Rapportage succesvol opgelost!
       silence_account: Account negeren
       status: Toot
       suspend_account: Account opschorten
       target: Gerapporteerde account
-      title: Gerapporteerde toots
+      title: Rapportages
       unassign: Niet langer toewijzen
       unresolved: Onopgelost
       updated_at: Bijgewerkt
@@ -438,7 +439,7 @@ nl:
     new_report:
       body: "%{reporter} heeft %{target} gerapporteerd"
       body_remote: Iemand van %{domain} heeft %{target} gerapporteerd
-      subject: Nieuwe toots gerapporteerd op %{instance} (#%{id})
+      subject: Nieuwe rapportage op %{instance} (#%{id})
   application_mailer:
     notification_preferences: E-mailvoorkeuren wijzigen
     salutation: "%{name},"
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 6f15f26f5..5a3d339d6 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -30,16 +30,22 @@ oc:
     other_instances: Lista d’instàncias
     privacy_policy: Politica de confidencialitat
     source_code: Còdi font
-    status_count_after: estatuts
+    status_count_after:
+      one: estatut
+      other: estatuts
     status_count_before: qu’an escrich
     terms: Condicions d’utilizacion
-    user_count_after: personas
+    user_count_after:
+      one: utilizaire
+      other: utilizaires
     user_count_before: Ostal de
     what_is_mastodon: Qu’es Mastodon ?
   accounts:
     choices_html: 'Recomandacion de %{name} :'
     follow: Sègre
-    followers: Seguidors
+    followers:
+      one: Seguidor
+      other: Seguidors
     following: Abonaments
     joined: Arribèt lo %{date}
     media: Mèdias
@@ -50,7 +56,10 @@ oc:
     people_who_follow: Lo monde que sègon %{name}
     pin_errors:
       following: Vos cal d’en primièr sègre las personas que volètz promòure
-    posts: Tuts
+    posts:
+      one: Tut
+      other: Tuts
+    posts_tab_heading: Tuts
     posts_with_replies: Tuts e responsas
     reserved_username: Aqueste nom d’utilizaire es reservat
     roles:
@@ -295,6 +304,8 @@ oc:
       description_html: Un <strong> relai de federacion</strong> es un servidor intermediari qu’escàmbia de bèls volumes de tuts publics entre servidors que son abonats e i publican.<strong>Pòt ajudar de pichons e mejans servidors a trobar de contenguts del fediverse estant</strong>, qu’autrament demandariá als utilizaires locals de s’abonar manualament a d’autres monde marcats sus de servidors alonhats.
       enable_hint: Un còp activat, vòstre servidor s’abonarà a totes los tuts publics del relai estant, e començarà de mandar sos tuts publics a aqueste d’enlà.
       inbox_url: URL del relai
+      pending: En espèra d’aprovacion del relai
+      save_and_enable: Salvar e activar
       setup: Configurar una connexion relai
       status: Estatut
       title: Relais
@@ -347,6 +358,9 @@ oc:
       contact_information:
         email: Picatz una adreça de corrièl
         username: Picatz un nom d’utilizaire
+      custom_css:
+        desc_html: Modificar l’estil amb una fuèlha CSS cargada sus cada pagina
+        title: CSS personalizada
       hero:
         desc_html: Mostrat en primièra pagina. Almens 600x100px recomandat. S’es pas configurat l’imatge de l’instància serà mostrat
         title: Imatge de l’eròi
@@ -415,6 +429,12 @@ oc:
       last_delivery: Darrièra distribucion
       title: WebSub
       topic: Subjècte
+    suspensions:
+      bad_acct_msg: La valor de confirmacion a pas coïncidit. Sètz a suspendre lo bon compte ?
+      hint_html: 'Per confirmar la suspension del compte, picatz %{value} al camp çai-jos :'
+      proceed: Tractat
+      title: Suspension de %{acct}
+      warning_html: 'Suspendre aqueste compte suprimirà <strong>irreversiblament</strong> las donadas del compte, aquò compren :'
     title: Administracion
   admin_mailer:
     new_report:
@@ -720,6 +740,7 @@ oc:
     proceed: Clicatz per sègre
     prompt: 'Sètz per sègre :'
   remote_interaction:
+    proceed: Confirmar l’interaccion
     prompt: 'Volètz interagir amb aqueste tut :'
   remote_unfollow:
     error: Error
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index c7c74b239..b0b592bbe 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -45,8 +45,14 @@ pl:
   accounts:
     choices_html: 'Polecani przez %{name}:'
     follow: Śledź
-    followers: Śledzący
-    following: Śledzeni
+    followers:
+      few: śledzących
+      many: śledzących
+      one: śledzący
+    following:
+      few: śledzonych
+      many: śledzonych
+      one: śledzony
     joined: Dołączył(a) %{date}
     media: Zawartość multimedialna
     moved_html: "%{name} korzysta teraz z konta %{new_profile_link}:"
@@ -56,7 +62,10 @@ pl:
     people_who_follow: Osoby, które śledzą konto %{name}
     pin_errors:
       following: Musisz śledzić osobę, którą chcesz polecać
-    posts: Wpisy
+    posts:
+      few: wpisy
+      many: wpisów
+      one: wpis
     posts_with_replies: Wpisy z odpowiedziami
     reserved_username: Ta nazwa użytkownika jest zarezerwowana
     roles:
@@ -300,6 +309,8 @@ pl:
       description_html: "<strong>Przekaźnik federacji</strong> jest pośredniczącym serwerem wymieniającym duże ilości publicznych wpisów pomiędzy serwerami które subskrybują je i publikują na nich. <strong>Pomaga to małym i średnim instancją poznawać nową zawartość z Fediwersum</strong>, co w innym przypadku wymagałoby od użytkowników ręcznego śledzenia osób z innych serwerów."
       enable_hint: Jeżeli włączone, Twój serwer zasubskrybuje wszystkie publiczne wpisy z tego przekaźnika i zacznie wysyłać tam publiczne wpisy z tego serwera.
       inbox_url: Adres przekaźnika
+      pending: Oczekiwanie na przyjęcie przez przekaźnik
+      save_and_enable: Zapisz i aktywuj
       setup: Skonfiguruj połączenie z przekaźnikiem
       status: Stan
       title: Przekaźniki
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
new file mode 100644
index 000000000..c38094158
--- /dev/null
+++ b/config/locales/ro.yml
@@ -0,0 +1,2 @@
+---
+ro: {}
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 44e41eaf6..f1b26236a 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -5,6 +5,8 @@ ru:
     about_mastodon_html: Mastodon - это <em>свободная</em> социальная сеть с <em>открытым исходным кодом</em>. Как <em>децентрализованная</em> альтернатива коммерческим платформам, Mastodon предотвращает риск монополизации Вашего общения одной компанией. Выберите сервер, которому Вы доверяете &mdash; что бы Вы ни выбрали, Вы сможете общаться со всеми остальными. Любой может запустить свой собственный узел Mastodon и участвовать в <em>социальной сети</em> совершенно бесшовно.
     about_this: Об этом узле
     administered_by: 'Администратор узла:'
+    api: API
+    apps: Мобильные приложения
     closed_registrations: В данный момент регистрация на этом узле закрыта. Но вы можете найти другой узел, создать на нём учётную запись и получить доступ к той же сети оттуда.
     contact: Связаться
     contact_missing: Не установлено
@@ -27,16 +29,28 @@ ru:
     other_instances: Другие узлы
     privacy_policy: Политика конфиденциальности
     source_code: Исходный код
-    status_count_after: статусов
+    status_count_after:
+      few: статуса
+      many: статусов
+      one: статус
+      other: статусов
     status_count_before: Опубликовано
     terms: Условия использования
-    user_count_after: пользователей
+    user_count_after:
+      few: пользователя
+      many: пользователей
+      one: пользователь
+      other: пользователей
     user_count_before: Здесь живет
     what_is_mastodon: Что такое Mastodon?
   accounts:
     choices_html: "%{name} рекомендует:"
     follow: Подписаться
-    followers: Подписчики
+    followers:
+      few: подписчика
+      many: подписчиков
+      one: подписчик
+      other: подписчиков
     following: Подписан(а)
     joined: 'Дата регистрации: %{date}'
     media: Медиа
@@ -47,7 +61,12 @@ ru:
     people_who_follow: Подписчики %{name}
     pin_errors:
       following: Чтобы порекомендовать кого-то, надо сначала на них подписаться
-    posts: Посты
+    posts:
+      few: статуса
+      many: статусов
+      one: статус
+      other: статусов
+    posts_tab_heading: Статусы
     posts_with_replies: Посты с ответами
     reserved_username: Имя пользователя зарезервировано
     roles:
@@ -182,6 +201,7 @@ ru:
         unsuspend_account: "%{name} разморозил(а) аккаунт %{target}"
         update_custom_emoji: "%{name} обновил(а) эмодзи %{target}"
         update_status: "%{name} изменил(а) статус пользователя %{target}"
+      deleted_status: "(удалённый статус)"
       title: Журнал событий
     custom_emojis:
       by_domain: Домен
@@ -280,6 +300,7 @@ ru:
       search: Поиск
       title: Известные узлы
     invites:
+      deactivate_all: Удалить все
       filter:
         all: Все
         available: Актуальные
@@ -291,6 +312,8 @@ ru:
       description_html: "<strong>Федеративный ретранслятор</strong> – это промежуточный сервер, который передаёт большие объёмы публичных статусов между серверами, которые подписываются и публикуют туда. <strong>Это может помочь небольшим и средним серверам находить записи со всей федерации</strong>, ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов."
       enable_hint: Если включено, ваш сервер будет подписан на все публичные статусы с этого ретранслятора и начнёт туда отправлять публичные статусы со своего узла.
       inbox_url: URL ретранслятора
+      pending: Ожидание подтверждения ретранслятора
+      save_and_enable: Сохранить и включить
       setup: Настроте соединение с ретранслятором
       status: Состояние
       title: Ретрансляторы
@@ -343,6 +366,9 @@ ru:
       contact_information:
         email: Введите публичный e-mail
         username: Введите имя пользователя
+      custom_css:
+        desc_html: Измените внешний вид с CSS, загружаемым на каждой странице
+        title: Особый CSS
       hero:
         desc_html: Отображается на главной странице. Рекомендуется разрешение не менее 600х100px. Если не установлено, используется изображение узла
         title: Баннер узла
@@ -401,6 +427,7 @@ ru:
       media:
         title: Медиаконтент
       no_media: Без медиаконтента
+      no_status_selected: Не выбран ни один статус, ничего не изменено
       title: Статусы аккаунта
       with_media: С медиаконтентом
     subscriptions:
@@ -410,6 +437,12 @@ ru:
       last_delivery: Последняя доставка
       title: WebSub
       topic: Тема
+    suspensions:
+      bad_acct_msg: Не удалось найти такое число подтверждения. Вы уверены, что замораживаете нужный аккаунт?
+      hint_html: 'Чтобы подтвердить заморозку аккаунта, пожалуйста, введите %{value} в поле ниже:'
+      proceed: Продолжить
+      title: Заморозить %{acct}
+      warning_html: 'Заморозка этого аккаунта приведёт к <strong>необратимому</strong> удалению данных с этого аккаунта, включая:'
     title: Администрирование
   admin_mailer:
     new_report:
@@ -662,11 +695,14 @@ ru:
     publishing: Публикация
     web: WWW
   remote_follow:
-    acct: Введите username@domain, откуда Вы хотите подписаться
+    acct: Введите свой username@domain для продолжения
     missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей
     no_account_html: Нет учётной записи? Вы можете <a href='%{sign_up_path}' target='_blank'>зарегистрироваться здесь</a>
     proceed: Продолжить подписку
     prompt: 'Вы хотите подписаться на:'
+  remote_interaction:
+    proceed: Продолжить
+    prompt: 'Вы собираетесь взаимодействовать со статусом:'
   remote_unfollow:
     error: Ошибка
     title: Заголовок
@@ -756,6 +792,7 @@ ru:
       private: Нельзя закрепить непубличный статус
       reblog: Нельзя закрепить продвинутый статус
     show_more: Подробнее
+    sign_in_to_participate: Войдите, чтобы принять участие в дискуссии
     title: '%{name}: "%{quote}"'
     visibilities:
       private: Для подписчиков
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index b1b83b9cb..ad4258dab 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -92,6 +92,7 @@ co:
         follow_request: Mandà un’e-mail quandu qualch’unu vole seguitami
         mention: Mandà un’e-mail quandu qualch’unu mi mintuva
         reblog: Mandà un’e-mail quandu qualch’unu sparte i mo statuti
+        report: Mandà un'e-mail quandu c'hè un novu signalamentu
     'no': Nò
     required:
       mark: "*"
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index c23aad3c4..6625e2638 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -92,6 +92,7 @@ cs:
         follow_request: Posílat e-maily, když vás někdo požádá o sledování
         mention: Posílat e-maily, když vás někdo zmíní
         reblog: Posílat e-maily, když někdo boostne váš příspěvek
+        report: Posílat e-maily, je-li odesláno nové nahlášení
     'no': Ne
     required:
       mark: "*"
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 7800fe637..4b1721b77 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -1,3 +1,11 @@
 ---
 cy:
-  simple_form: {}
+  simple_form:
+    labels:
+      defaults:
+        confirm_password: Cadarnhau cyfrinair
+        email: Cyfeiriad e-bost
+        header: Pennyn
+        new_password: Cyfrinair newydd
+        password: Cyfrinair
+        username: Enw defnyddiwr
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index c85959557..95869c786 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -92,6 +92,7 @@ el:
         follow_request: Στέλνε email όταν κάποιος ζητάει να σε ακολουθήσει
         mention: Στέλνε email όταν κάποιος σε αναφέρει
         reblog: Στέλνε email όταν κάποιος προωθεί τη δημοσίευση σου
+        report: Αποστολή email όταν υποβάλλεται νέα καταγγελία
     'no': Όχι
     required:
       mark: "*"
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 2f0e40f66..c9ac42f5d 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -93,6 +93,7 @@ en:
         follow_request: Send e-mail when someone requests to follow you
         mention: Send e-mail when someone mentions you
         reblog: Send e-mail when someone boosts your status
+        report: Send e-mail when a new report is submitted
     'no': 'No'
     required:
       mark: "*"
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index c24037d41..38f95e1b7 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -92,6 +92,7 @@ fa:
         follow_request: وقتی کسی درخواست پیگیری کرد ایمیل بفرست
         mention: وقتی کسی از شما نام برد ایمیل بفرست
         reblog: وقتی کسی نوشتهٔ شما را بازبوقید ایمیل بفرست
+        report: وقتی گزارش تازه‌ای فرستاده شد ایمیل بفرست
     'no': خیر
     required:
       mark: "*"
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 73751fc99..97baf7856 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -92,6 +92,7 @@ ko:
         follow_request: 누군가 나를 팔로우 하길 원할 때 이메일 보내기
         mention: 누군가 나에게 답장했을 때 이메일 보내기
         reblog: 누군가 내 툿을 부스트 했을 때 이메일 보내기
+        report: 새 신고 등록시 이메일로 알리기
     'no': 아니오
     required:
       mark: "*"
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index ddbc58978..33ab60161 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -92,6 +92,7 @@ nl:
         follow_request: Een e-mail versturen wanneer iemand jou wil volgen
         mention: Een e-mail versturen wanneer iemand jou vermeld
         reblog: Een e-mail versturen wanneer iemand jouw toot heeft geboost
+        report: Verstuur een e-mail wanneer een nieuw rapportage is ingediend
     'no': Nee
     required:
       mark: "*"
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 4842e5c4e..98ec01219 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -92,6 +92,7 @@ oc:
         follow_request: Enviar un corrièl quand qualqu’un demanda de vos sègre
         mention: Enviar un corrièl quand qualqu’un vos menciona
         reblog: Enviar un corrièl quand qualqu’un tòrna partejar vòstre estatut
+        report: Enviar un corrièl pels nòus senhalaments
     'no': Non
     required:
       mark: "*"
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index 32ea32d68..2fb99ccd7 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -86,6 +86,7 @@ pl:
         type: Importowane dane
         username: Nazwa użytkownika
         username_or_email: Nazwa użytkownika lub adres e-mail
+        whole_word: Całe słowo
       interactions:
         must_be_follower: Nie wyświetlaj powiadomień od osób, które Cię nie śledzą
         must_be_following: Nie wyświetlaj powiadomień od osób, których nie śledzisz
@@ -97,6 +98,7 @@ pl:
         follow_request: Powiadamiaj mnie e-mailem, gdy ktoś poprosi o pozwolenie na śledzenie mnie
         mention: Powiadamiaj mnie e-mailem, gdy ktoś o mnie wspomni
         reblog: Powiadamiaj mnie e-mailem, gdy ktoś podbije mój wpis
+        report: Powiadamiaj mnie e-mailem, gdy zostanie utworzone nowe zgłoszenie
     'no': Nie
     required:
       mark: "*"
diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml
new file mode 100644
index 000000000..31eb21a77
--- /dev/null
+++ b/config/locales/simple_form.ro.yml
@@ -0,0 +1,3 @@
+---
+ro:
+  simple_form: {}
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 5cb0a0064..3ca176a1f 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -94,6 +94,7 @@ ru:
         follow_request: Уведомлять по e-mail, когда кто-то запрашивает разрешение на подписку
         mention: Уведомлять по e-mail, когда кто-то упомянул Вас
         reblog: Уведомлять по e-mail, когда кто-то продвинул Ваш статус
+        report: Уведомлять по e-mail при создании жалобы
     'no': Нет
     required:
       mark: "*"
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index d84052c66..3fac11eb8 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -3,37 +3,62 @@ sr:
   simple_form:
     hints:
       defaults:
+        autofollow: Особе које се пријаве кроз позивнице ће вас аутоматски запратити
         avatar: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
+        bot: Овај налог углавном врши аутоматизоване радње и можда се не надгледа
+        context: Један или више контекста у којима треба да се примени филтер
         digest: Послато после дужег периода неактивности са прегледом свих битних ствари које сте добили док сте били одсутни
         display_name:
           few: <span class="name-counter">%{count}</span> карактера преостала
           many: <span class="name-counter">%{count}</span> карактера преостало
           one: <span class="name-counter">1</span> карактер преостао
           other: <span class="name-counter">%{count}</span> карактера преостало
+        fields: Можете имати до 4 ставке приказане као табела на вашем профилу
         header: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
+        inbox_url: Копирајте URL са насловне стране релеја који желите користити
+        irreversible: Филтриранe трубе ће нестати неповратно, чак и ако је филтер касније уклоњен
+        locale: Језик корисничког интерфејса, е-поште и мобилних обавештења
         locked: Захтева да појединачно одобрите пратиоце
         note:
           few: <span class="note-counter">%{count}</span> карактера преостал
           many: <span class="note-counter">%{count}</span> карактера преостало
           one: <span class="note-counter">1</span> карактер преостао
           other: <span class="note-counter">%{count}</span> карактера преостало
+        phrase: Биће упарена без обзира на велико или мало слово у тексту или упозорења о садржају трубе
+        scopes: Којим API-јима ће апликација дозволити приступ. Ако изаберете опсег највишег нивоа, не морате одабрати појединачне.
+        setting_default_language: Језик ваших труба може бити аутоматски откривен, али није увек прецизан
+        setting_hide_network: Кога пратите и ко вас прати неће бити приказано на вашем профилу
         setting_noindex: Утиче на Ваш јавни профил и статусне стране
         setting_theme: Утиче како ће Мастодонт изгледати када сте пријављени са било ког уређаја.
+        whole_word: Када је кључна реч или фраза искључиво алфанумеричка, биће примењена само ако се подудара са целом речи
       imports:
         data: CSV фајл извезен са друге Мастодонт инстанце
       sessions:
-        otp: Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак.
+        otp: 'Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак:'
+      user:
+        chosen_languages: Када означите, трубе у изабраним језицима ће се приказати на јавној временској линији
     labels:
+      account:
+        fields:
+          name: Етикета
+          value: Садржај
       defaults:
+        autofollow: Позовите да прати ваш налог
         avatar: Аватар
+        bot: Ово је налог бота
+        chosen_languages: Филтрирај језике
         confirm_new_password: Потврдите нову лозинку
         confirm_password: Потврдите лозинку
+        context: Филтрирај контексте
         current_password: Тренутна лозинка
         data: Подаци
         display_name: Име за приказ
         email: Адреса е-поште
         expires_in: Истиче након
+        fields: Профилирај метаподатке
         header: Заглавље
+        inbox_url: URL од релејног пријемног сандучета
+        irreversible: Испустити уместо сакрити
         locale: Језик
         locked: Закључај налог
         max_uses: Максимални број коришћења
@@ -41,11 +66,15 @@ sr:
         note: Биографија
         otp_attempt: Двофакторски код
         password: Лозинка
+        phrase: Кључна реч или фраза
         setting_auto_play_gif: Аутоматски пуштај анимиране GIF-ове
         setting_boost_modal: Прикажи дијалог за потврду пре давања подршке
+        setting_default_language: Језик објављивања
         setting_default_privacy: Приватност објава
         setting_default_sensitive: Увек означи мултимедију као осетљиву
         setting_delete_modal: Прикажи дијалог за потврду пре брисања тута
+        setting_display_sensitive_media: Увек покажи означен садржај као осетљив
+        setting_hide_network: Сакриј своју мрежу
         setting_noindex: Одјави се од индексирања search engine-а
         setting_reduce_motion: Смањи покрете у анимацијама
         setting_system_font_ui: Користи системски фонт
@@ -54,6 +83,8 @@ sr:
         severity: Оштрина
         type: Тип увоза
         username: Корисничко име
+        username_or_email: Корисничко име или Е-пошта
+        whole_word: Цела реч
       interactions:
         must_be_follower: Блокирај обавештења од корисника који ме не прате
         must_be_following: Блокирај обавештења од људи које не пратим
@@ -65,6 +96,7 @@ sr:
         follow_request: Шаљи е-пошту када неко затражи да Вас запрати
         mention: Шаљи е-пошту када Вас неко помене
         reblog: Шаљи е-пошту када неко подржи Ваш статус
+        report: Пошаљи Е-пошту када се поднесе нова пријава
     'no': Не
     required:
       mark: "*"
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 61c0b123c..516908415 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -5,10 +5,13 @@ sr:
     about_mastodon_html: Мастодонт је друштвена мрежа базирана на отвореним протоколима и слободном софтверу отвореног кода. Децентрализована је као што је децентрализована е-пошта.
     about_this: О инстанци
     administered_by: 'Администрирано од стране:'
+    api: API
+    apps: Мобилне апликације
     closed_registrations: Регистрације су тренутно затворене на овој инстанци. Ипак! Можете наћи другу инстанцу на којој ћете направити налог и одатле добити приступ истој овој мрежи.
     contact: Контакт
     contact_missing: Није постављено
     contact_unavailable: N/A
+    documentation: Документација
     extended_description_html: |
       <h3>Добро место за правила</h3>
       <p>Проширени опис који још није постављен.</p>
@@ -25,18 +28,29 @@ sr:
     hosted_on: Мастодонт хостован на %{domain}
     learn_more: Сазнајте више
     other_instances: Листа инстанци
+    privacy_policy: Полиса приватности
     source_code: Изворни код
-    status_count_after: статуса
+    status_count_after:
+      one: статус
+      other: статуси
     status_count_before: Који су написали
-    user_count_after: корисника
+    terms: Услови коришћења
+    user_count_after:
+      one: корисник
+      other: корисници
     user_count_before: Дом за
     what_is_mastodon: Шта је Мастодонт?
   accounts:
+    choices_html: "%{name}'s избори:"
     follow: Follow
-    followers: Followers
+    followers:
+      one: Пратилац
+      other: Пратиоци
     following: Following
+    joined: Придружио/ла се %{date}
     media: Мултимедија
     moved_html: "%{name} је померен на %{new_profile_link}:"
+    network_hidden: Ова информација није доступна
     nothing_here: Овде нема ништа!
     people_followed_by: Људи које %{name} прати
     people_who_follow: Људи који прате %{name}
@@ -159,32 +173,54 @@ sr:
         unsuspend_account: "%{name} је укинуо суспензију налогу %{target}"
         update_custom_emoji: "%{name} је изменио емотикон %{target}"
         update_status: "%{name} је изменио статус корисника %{target}"
+      deleted_status: "(обрисан статус)"
       title: Записник
     custom_emojis:
       by_domain: Домен
-      copied_msg: Успешно направљена локална копија емотикона
+      copied_msg: Успешно направљена локална копија емоџија
       copy: Копирај
-      copy_failed_msg: Не могу да направим локалну копију тог емотикона
-      created_msg: Емотикон успешно направљен!
+      copy_failed_msg: Не могу да направим локалну копију тог емотиџија
+      created_msg: Емоџи успешно направљен!
       delete: Обриши
-      destroyed_msg: Емотикон успешно обрисан!
+      destroyed_msg: Емоџи успешно обрисан!
       disable: Онемогући
-      disabled_msg: Емотикон успешно онемогућен
-      emoji: Емотикон
+      disabled_msg: Емоџи успешно онемогућен
+      emoji: Емоџи
       enable: Омогући
-      enabled_msg: Емотикон успешно омогућен
+      enabled_msg: Емоџи успешно омогућен
       image_hint: PNG до 50KB
       listed: Излистан
       new:
-        title: Додај нови произвољни емотикон
+        title: Додај нови произвољни емоџи
       overwrite: Препиши
       shortcode: Пречица
       shortcode_hint: Најмање 2 карактера, дозвољени су само слова, бројеви и доње црте
-      title: Произвољни емотикони
+      title: Произвољни емотиџији
       unlisted: Неизлистан
-      update_failed_msg: Не могу да ажурирам овај емотикон
-      updated_msg: емотикон успешно ажуриран!
+      update_failed_msg: Не могу да ажурирам овај емоџи
+      updated_msg: Емоџи успешно ажуриран!
       upload: Отпреми
+    dashboard:
+      backlog: Позадински записи
+      config: Конфигурација
+      feature_deletions: Брисање налога
+      feature_invites: Позивнице
+      feature_registrations: Регистрација
+      feature_relay: Федеративни релеј
+      features: Карактеристике
+      hidden_service: Федерација са скривеним услугама
+      open_reports: отворене пријаве
+      recent_users: Недавни корисници
+      search: Потпуна претрага текста
+      single_user_mode: Појединачни корисник
+      software: Софтвер
+      space: Коришћење простора
+      title: Командна табла
+      total_users: укупан број корисника
+      trends: Трендови
+      week_interactions: интеракције ове недеље
+      week_users_active: активно ове недеље
+      week_users_new: корисника ове недеље
     domain_blocks:
       add_new: Додај нови
       created_msg: Блокирање домена се обрађује
@@ -194,13 +230,13 @@ sr:
         create: Направи блокаду
         hint: Блокирање домена неће спречити прављење налога у бази, али ће ретроактивно и аутоматски применити одређене модераторске методе над тим налозима.
         severity:
-          desc_html: "<strong>Ућуткавање</strong> ће све статусе овог налога учинити невидиљивим за све, осим за оне који налог већ прате. <strong>Суспензија</strong> ће уклонити сав садржај налога, сву мултимедију, и профилне податке. Користите <strong>Ништа</strong> ако само желите да одбаците мултимедијалне фајлове."
+          desc_html: "<strong>Ућуткавање</strong> ће све статусе овог налога учинити невидљивим за све, осим за оне који већ прате налог. <strong>Суспензија</strong> ће уклонити сав садржај налога, сву мултимедију, и профилне податке. Користите <strong>Ништа</strong> само ако желите да одбаците мултимедијалне фајлове."
           noop: Ништа
           silence: Ућуткавање
           suspend: Суспензија
         title: Ново блокирање домена
       reject_media: Одбаци мултимедију
-      reject_media_hint: Уклања локално ускладиштене мултимедијске фајлове и одбија да их скида на даље. Небитно је за суспензију.
+      reject_media_hint: Уклања локално ускладиштене мултимедијске фајлове и одбија да их скида убудуће. Небитно је за суспензију
       severities:
         noop: Ништа
         silence: Ућуткавање
@@ -210,25 +246,25 @@ sr:
         affected_accounts:
           few: Утиче на %{count} налога у бази
           many: Утиче на %{count} налога у бази
-          one: Утиче на један налог у бази
-          other: Утиче на %{count} налога у бази
+          one: Један налог у бази података је под утицајем
+          other: Утиче на %{count} налога у бази података
         retroactive:
           silence: Угаси ућуткивање за све постојеће налоге са овог домена
-          suspend: Угаси суспензије за све постојеће налоге са овог домена
-        title: Поништи блокаду домена за домен %{domain}
+          suspend: Уклони суспензије за све постојеће налоге са овог домена
+        title: Поништи блокаду домена за %{domain}
         undo: Поништи
       title: Блокаде домена
       undo: Поништи
     email_domain_blocks:
-      add_new: Додај новуAdd new
-      created_msg: Успешно додао домен е-поште на црну листу
+      add_new: Додај нови
+      created_msg: Успешно додао домен Е-поште на црну листу
       delete: Уклони
-      destroyed_msg: Успешно уклоњен домен е-поште са црне листе
+      destroyed_msg: Успешно уклоњен домен Е-поште са црне листе
       domain: Домен
       new:
         create: Додај домен
-        title: Нова ставка у црној листи е-пошти
-      title: Црна листа адреса е-поште
+        title: Нова ставка е-поштe у црној листи
+      title: Црна листа E-поште
     instances:
       account_count: Познати налози
       domain_name: Домен
@@ -236,12 +272,15 @@ sr:
       search: Претрага
       title: Познате инстанце
     invites:
+      deactivate_all: Деактивирај све
       filter:
         all: Све
-        available: Активне
-        expired: Истекле
+        available: Доступни
+        expired: Истекли
         title: Филтер
       title: Позивнице
+    relays:
+      add_new: Додај нови релеј
     reports:
       action_taken_by: Акцију извео
       are_you_sure: Да ли сте сигурни?
diff --git a/config/routes.rb b/config/routes.rb
index 7c8f04c8d..490d9df20 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -39,6 +39,7 @@ Rails.application.routes.draw do
   }
 
   get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+  get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" }
 
   resources :accounts, path: 'users', only: [:show], param: :username do
     resources :stream_entries, path: 'updates', only: [:show] do
diff --git a/config/settings.yml b/config/settings.yml
index 0bdcf96e0..304271910 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -41,6 +41,7 @@ defaults: &defaults
     mention: false
     follow_request: true
     digest: true
+    report: true
   interactions:
     must_be_follower: false
     must_be_following: false
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 244e9ea48..59dfeaf97 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -3,8 +3,8 @@
 :queues:
   - default
   - push
-  - pull
   - mailers
+  - pull
 :schedule:
   subscriptions_scheduler:
     cron: '<%= Random.rand(0..59) %> <%= Random.rand(4..6) %> * * *'
diff --git a/docker-compose.yml b/docker-compose.yml
index 3b50f6d31..070a95384 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -68,7 +68,7 @@ services:
     image: tootsuite/mastodon
     restart: always
     env_file: .env.production
-    command: bundle exec sidekiq -q default -q mailers -q pull -q push
+    command: bundle exec sidekiq -q default -q push -q mailers -q pull
     depends_on:
       - db
       - redis
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index e4944ba67..0442a156d 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -21,7 +21,7 @@ module Mastodon
     end
 
     def flags
-      'rc2'
+      ''
     end
 
     def to_a
diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb
index 2c392d376..e8b094c89 100644
--- a/spec/services/report_service_spec.rb
+++ b/spec/services/report_service_spec.rb
@@ -3,7 +3,7 @@ require 'rails_helper'
 RSpec.describe ReportService, type: :service do
   subject { described_class.new }
 
-  let(:source_account) { Fabricate(:account) }
+  let(:source_account) { Fabricate(:user).account }
 
   context 'for a remote account' do
     let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
@@ -22,4 +22,22 @@ RSpec.describe ReportService, type: :service do
       expect(a_request(:post, 'http://example.com/inbox')).to_not have_been_made
     end
   end
+
+  context 'when other reports already exist for the same target' do
+    let!(:target_account) { Fabricate(:account) }
+    let!(:other_report)   { Fabricate(:report, target_account: target_account) }
+
+    subject do
+      -> {  described_class.new.call(source_account, target_account) }
+    end
+
+    before do
+      ActionMailer::Base.deliveries.clear
+      source_account.user.settings.notification_emails['report'] = true
+    end
+
+    it 'does not send an e-mail' do
+      is_expected.to_not change(ActionMailer::Base.deliveries, :count).from(0)
+    end
+  end
 end