about summary refs log tree commit diff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/initializers/oj.rb1
-rw-r--r--config/initializers/rabl_init.rb7
-rw-r--r--config/locales/activerecord.de.yml2
-rw-r--r--config/locales/activerecord.nl.yml2
-rw-r--r--config/locales/ar.yml37
-rw-r--r--config/locales/ca.yml100
-rw-r--r--config/locales/de.yml41
-rw-r--r--config/locales/devise.ar.yml6
-rw-r--r--config/locales/devise.he.yml6
-rw-r--r--config/locales/devise.nl.yml3
-rw-r--r--config/locales/doorkeeper.ar.yml6
-rw-r--r--config/locales/doorkeeper.ca.yml19
-rw-r--r--config/locales/doorkeeper.es.yml14
-rw-r--r--config/locales/doorkeeper.fr.yml5
-rw-r--r--config/locales/doorkeeper.he.yml16
-rw-r--r--config/locales/doorkeeper.nl.yml13
-rw-r--r--config/locales/doorkeeper.pt-BR.yml6
-rw-r--r--config/locales/doorkeeper.pt.yml11
-rw-r--r--config/locales/es.yml165
-rw-r--r--config/locales/fr.yml132
-rw-r--r--config/locales/he.yml81
-rw-r--r--config/locales/ja.yml10
-rw-r--r--config/locales/ko.yml12
-rw-r--r--config/locales/nl.yml36
-rw-r--r--config/locales/oc.yml41
-rw-r--r--config/locales/pl.yml6
-rw-r--r--config/locales/pt-BR.yml59
-rw-r--r--config/locales/pt.yml72
-rw-r--r--config/locales/simple_form.ca.yml4
-rw-r--r--config/locales/simple_form.de.yml3
-rw-r--r--config/locales/simple_form.en.yml6
-rw-r--r--config/locales/simple_form.es.yml16
-rw-r--r--config/locales/simple_form.fr.yml3
-rw-r--r--config/locales/simple_form.he.yml16
-rw-r--r--config/locales/simple_form.nl.yml13
-rw-r--r--config/locales/simple_form.pt-BR.yml7
-rw-r--r--config/locales/simple_form.pt.yml1
-rw-r--r--config/locales/simple_form.zh-CN.yml2
-rw-r--r--config/locales/zh-CN.yml88
-rw-r--r--config/settings.yml3
-rw-r--r--config/webpack/configuration.js55
-rw-r--r--config/webpack/generateLocalePacks.js2
-rw-r--r--config/webpack/shared.js60
-rw-r--r--config/webpacker.yml12
44 files changed, 1014 insertions, 186 deletions
diff --git a/config/initializers/oj.rb b/config/initializers/oj.rb
new file mode 100644
index 000000000..de3e17f2e
--- /dev/null
+++ b/config/initializers/oj.rb
@@ -0,0 +1 @@
+Oj.default_options = { mode: :compat, time_format: :ruby, use_to_json: true }
diff --git a/config/initializers/rabl_init.rb b/config/initializers/rabl_init.rb
deleted file mode 100644
index 132a42144..000000000
--- a/config/initializers/rabl_init.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-Rabl.configure do |config|
-  config.json_engine       = Oj
-  config.cache_all_output  = false
-  config.cache_sources     = Rails.env.production?
-  config.include_json_root = false
-  config.view_paths        = [Rails.root.join('app/views')]
-end
diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml
index 668abe2a3..7d09856d7 100644
--- a/config/locales/activerecord.de.yml
+++ b/config/locales/activerecord.de.yml
@@ -10,4 +10,4 @@ de:
         status:
           attributes:
             reblog:
-              taken: of status already exists
+              taken: des Status existiert schon
diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml
index eeabab34a..797209665 100644
--- a/config/locales/activerecord.nl.yml
+++ b/config/locales/activerecord.nl.yml
@@ -6,7 +6,7 @@ nl:
         account:
           attributes:
             username:
-              invalid: alleen letters, nummers en underscores
+              invalid: alleen letters, nummers en laag streepje
         status:
           attributes:
             reblog:
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 666b8cb97..a96b353c1 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -5,25 +5,58 @@ ar:
     about_this: عن مثيل الخادوم هذا
     closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا.
     contact: للتواصل معنا
+    contact_unavailable: غير متوفر
     description_headline: ما هو %{domain}?
     domain_count_after: خوادم أخرى
     domain_count_before: متصل بـ
+    features:
+      not_a_product_title: إنك إنسان و لست سلعة
+    find_another_instance: إبحث عن مثيل خادوم آخر
+    hosted_on: ماستدون مُستضاف على %{domain}
+    learn_more: تعلم المزيد
     other_instances: خوادم أخرى
     source_code: الشفرة المصدرية
     status_count_after: منشورا
     status_count_before: نشروا
     user_count_after: مستخدم
     user_count_before: يستضيف
+    what_is_mastodon: ما هو ماستدون ؟
   accounts:
     follow: إتبع
     followers: متابِعون
     following: يتابعون
+    media: الوسائط
     nothing_here: لا يوجد أي شيء هنا !
     people_followed_by: الأشخاص الذين يتبعهم %{name}
     people_who_follow: الأشخاص الذين يتبعون %{name}
     posts: منشورات
+    posts_with_replies: التبويقات و الردود
     remote_follow: إتبع عن بعد
+    reserved_username: إسم المستخدم محجوز
+    roles:
+      admin: المدير
     unfollow: إلغاء المتابعة
+  admin:
+    account_moderation_notes:
+      created_at: التاريخ
+      delete: حذف
+    accounts:
+      are_you_sure: متأكد ؟
+      by_domain: النطاق
+      confirm: تأكيد
+      display_name: عرض الإسم
+      domain: النطاق
+      edit: تعديل
+      email: البريد الإلكتروني
+      enable: تفعيل
+      enabled: مفعَّل
+      followers: المتابِعون
+      follows: يتابع
+      ip: عنوان الإيبي
+      media_attachments: الوسائط المرفقة
+      order:
+        title: الترتيب
+      profile_url: رابط الملف الشخصي
   application_mailer:
     settings: 'تغيير تفضيلات البريد الإلكتروني : %{link}'
     signature: إشعارات ماستدون من %{instance}
@@ -156,9 +189,13 @@ ar:
     description_html: If you enable <strong>two-factor authentication</strong>, logging in will require you to be in possession of your phone, which will generate tokens for you to enter.
     disable: تعطيل
     enable: تفعيل
+    enabled: نظام المصادقة بخطوتين مُفعَّل
     enabled_success: تم تفعيل إثبات الهوية المزدوج بنجاح
+    generate_recovery_codes: توليد رموز الإسترجاع
     instructions_html: "<strong>Scan this QR code into Google Authenticator or a similiar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
     manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
+    recovery_codes: النسخ الإحتياطي لرموز الإسترجاع
+    recovery_codes_regenerated: تم إعادة توليد رموز الإسترجاع الإحتياطية بنجاح
     setup: تنشيط
     wrong_code: الرمز الذي أدخلته غير صالح. تحقق من صحة الوقت على الخادم و الجهاز.
   users:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index fa8cf49f0..357e39e31 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -49,16 +49,16 @@ ca:
     reserved_username: El nom d'usuari està reservat
     roles:
       admin: Admin
-      moderator: Mod
+      moderator: Moderador
     unfollow: Deixar de seguir
   admin:
     account_moderation_notes:
       account: Moderador
       create: Crear
       created_at: Data
-      created_msg: La nota de moderació s'ha creat correctament.
+      created_msg: La nota de moderació s'ha creat correctament!
       delete: Suprimeix
-      destroyed_msg: S'ha destruït la nota de moderació.
+      destroyed_msg: S'ha destruït la nota de moderació!
     accounts:
       are_you_sure: Estàs segur?
       by_domain: Domini
@@ -133,6 +133,32 @@ ca:
       unsubscribe: Donar-se de baixa
       username: Nom d'usuari
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} ha confirmat l'adreça de correu electrònic de l'usuari %{target}"
+        create_custom_emoji: "%{name} ha penjat un nou emoji %{target}"
+        create_domain_block: "%{name} ha bloquejat el domini %{target}"
+        create_email_domain_block: "%{name} ha afegit a la llista negra el domini del correu electrònic %{target}"
+        demote_user: "%{name} ha degradat l'usuari %{target}"
+        destroy_domain_block: "%{name} ha desbloquejat el domini %{target}"
+        destroy_email_domain_block: "%{name} ha afegit a la llista negra el domini de correu electrònic %{target}"
+        destroy_status: "%{name} estat eliminat per %{target}"
+        disable_2fa_user: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}"
+        disable_custom_emoji: "%{name} ha desactivat l'emoji %{target}"
+        disable_user: "%{name} ha desactivat l'accés per a l'usuari %{target}"
+        enable_custom_emoji: "%{name} ha activat l'emoji %{target}"
+        enable_user: "%{name} ha activat l'accés per a l'usuari %{target}"
+        memorialize_account: "%{name} ha convertit el compte %{target} en una pàgina de memòria"
+        promote_user: "%{name} ha promogut l'usuari %{target}"
+        reset_password_user: "%{name} restablirà la contrasenya de l'usuari %{target}"
+        resolve_report: "%{name} ha descartat l'informe %{target}"
+        silence_account: "%{name} ha silenciat el compte de %{target}"
+        suspend_account: "%{name} ha suspès el compte de %{target}"
+        unsilence_account: "%{name} ha silenciat el compte de %{target}"
+        unsuspend_account: "%{name} ha llevat la suspensió del compte de %{target}"
+        update_custom_emoji: "%{name} ha actualizat l'emoji %{target}"
+        update_status: "%{name} estat actualizat per %{target}"
+      title: Registre d'auditoria
     custom_emojis:
       copied_msg: S'ha creat correctament la còpia local del emoji
       copy: Copia
@@ -155,7 +181,7 @@ ca:
       title: Emojis personatlitzats
       unlisted: Sense classificar
       update_failed_msg: No s'ha pogut actualitzar aquest emoji
-      updated_msg: Emoji s'ha actualitzat correctament.
+      updated_msg: Emoji s'ha actualitzat correctament!
       upload: Carrega
     domain_blocks:
       add_new: Afegeix
@@ -164,9 +190,9 @@ ca:
       domain: Domini
       new:
         create: Crea un bloqueig
-        hint: El bloqueig de domini no impedirà la creació de nous comptes en la base de dades, però s´aplicaran mètodes de moderació específics sobre aquests comptes
+        hint: El bloqueig de domini no impedirà la creació de nous comptes en la base de dades, però s´aplicaran de manera retroactiva mètodes de moderació específics sobre aquests comptes.
         severity:
-          desc_html: "<strong>Silenci</strong> farà les publicacions del compte invisibles a tothom que no l'estigui seguint. La suspencsió eliminarà tots els continguts, multimèdia i les dades del perfil del compte."
+          desc_html: "<strong>Silenci</strong> farà les publicacions del compte invisibles a tothom que no l'estigui seguint. <strong>La suspensió</strong> eliminarà tots els continguts, multimèdia i les dades del perfil del compte. Usa <strong>Cap</strong> si només vols rebutjar el fitxers multimèdia."
           noop: Cap
           silence: Silenci
           suspend: Suspensió
@@ -205,6 +231,13 @@ ca:
       reset: Restablir
       search: Cerca
       title: Instàncies conegudes
+    invites:
+      filter:
+        all: Tot
+        available: Disponible
+        expired: Caducat
+        title: Filtre
+      title: Convida
     reports:
       action_taken_by: Mesures adoptades per
       are_you_sure: Estàs segur?
@@ -243,6 +276,9 @@ ca:
         deletion:
           desc_html: Permet a qualsevol esborrar el seu compte
           title: Obre la supressió del compte
+        min_invite_role:
+          disabled: Ningú
+          title: Permet les invitacions de
         open:
           desc_html: Permet que qualsevol pugui crear un compte
           title: Registre obert
@@ -250,7 +286,7 @@ ca:
         desc_html: Mostra una insígnia de personal en una pàgina d'usuari
         title: Mostra insígnia de personal
       site_description:
-        desc_html: Es mostra com un paràgraf a la pàgina principal i s'utilitza com una etiqueta meta.<br>Pots utilitzar etiquetes HTML, en particular <code>&lt;a&gt;</code> i <code>&lt;em&gt;</code>.
+        desc_html: Paràgraf introductori a la pàgina principal i en etiquetes meta.<br>Pots utilitzar etiquetes HTML, en particular <code>&lt;a&gt;</code> i <code>&lt;em&gt;</code>.
         title: Descripció del lloc
       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
@@ -282,7 +318,7 @@ ca:
       title: Estats del compte
       with_media: Amb contingut multimèdia
     subscriptions:
-      callback_url: Callback URL
+      callback_url: URL de retorn
       confirmed: Confirmat
       expires_in: Expira en
       last_delivery: Últim lliurament
@@ -316,6 +352,8 @@ ca:
     invalid_reset_password_token: L'enllaç de restabliment de la contrasenya no és vàlid o ha caducat. Torna-ho a provar..
     login: Inicia sessió
     logout: Tanca sessió
+    migrate_account: Mou a un compte diferent
+    migrate_account_html: Si vols redirigir aquest compte a un altre diferent, el pots  <a href="%{path}">configurar aquí</a>.
     register: Registra't
     resend_confirmation: Torna a enviar el correu de confirmació
     reset_password: Restableix la contrasenya
@@ -361,8 +399,8 @@ ca:
       title: La verificació de seguretat ha fallat
     '429': Estrangulat
     '500':
-      content: We're sorry, but something went wrong on our end.
-      title: This page is not correct
+      content: Ho sentim, però alguna cosa ha fallat a la nostra banda.
+      title: Aquesta pàgina no es correcte
     noscript_html: Per utilitzar Mastodon si us plau activa JavaScript. També podeu provar una de les <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md"> aplicacions natives</a> per Mastodon per a la vostra plataforma.
   exports:
     blocks: Persones que has bloquejat
@@ -372,7 +410,7 @@ ca:
     storage: Emmagatzematge
   followers:
     domain: Domini
-    explanation_html: Si desitges garantir la privacitat de les teves publicacions, has de ser conscient de qui t'està seguint. <strong> Les publicacions privades es lliuren a totes les instàncies on tens seguidors </ strong>. És possible que vulguis revisar-los i eliminar seguidors si no confies en que la teva privacitat sigui respectada pel personal o el programari d'aquests casos
+    explanation_html: Si desitges garantir la privacitat de les teves publicacions, has de ser conscient de qui t'està seguint. <strong> Les publicacions privades es lliuren a totes les instàncies on tens seguidors </ strong>. És possible que vulguis revisar-los i eliminar seguidors si no confies en que la teva privacitat sigui respectada pel personal o el programari d'aquestes instàncies.
     followers_count: Nombre de seguidors
     lock_link: Bloca el teu compte
     purge: Elimina dels seguidors
@@ -398,19 +436,46 @@ ca:
       muting: Llista d'apagats
     upload: Carregar
   in_memoriam_html: En Memòria.
+  invites:
+    delete: Desactivar
+    expired: Caducat
+    expires_in:
+      '1800': 30 minuts
+      '21600': 6 hores
+      '3600': 1 hora
+      '43200': 12 hores
+      '86400': 1 dia
+    expires_in_prompt: Mai
+    generate: Genera
+    max_uses:
+      one: 1 ús
+      other: "%{count} usos"
+    max_uses_prompt: Sense limit
+    prompt: Genera i comparteix enllaços amb altres persones per donar accés a aquesta instància
+    table:
+      expires_at: Caduca
+      uses: Usos
+    title: Convida persones
   landing_strip_html: "<strong>%{name}</strong> és un usuari/a de %{link_to_root_path}. Pots seguir-lo/la o interactuar amb ell/a si tens un compte a qualsevol node del fediverse."
   landing_strip_signup_html: Si no en tens, pots <a href="%{sign_up_path}">registrar-te aquí</a>.
   media_attachments:
     validations:
       images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges
       too_many: No es poden adjuntar més de 4 fitxers
+  migrations:
+    acct: usuari@domini del nou compte
+    currently_redirecting: 'El teu perfil està configurat com a redirecció a:'
+    proceed: Desa
+    updated_msg: La configuració de la migració del compte s'ha actualitzat correctament!
+  moderation:
+    title: Moderació
   notification_mailer:
     digest:
       body: 'Un resum del que et vas perdre en %{instance} desde la darrera visita el %{since}:'
       mention: "%{name} t'ha mencionat en:"
       new_followers_summary:
-        one: Visca!. Algú més t´ha començat a seguir
-        other: Genial!. Et segueixen %{count} persones més
+        one: Visca!. Algú més t´ha començat a seguir!
+        other: Genial!. Et segueixen %{count} persones més!
       subject:
         one: "1 notificació nova des de la darrera visita \U0001F418"
         other: "%{count} notificacions noves des de la darrera visita \U0001F418"
@@ -427,7 +492,7 @@ ca:
       body: "%{name} t'ha mencionat en:"
       subject: "%{name} t'ha mencionat"
     reblog:
-      body: "%{name} ha retootejat el teu estat"
+      body: "%{name} ha impulsat el teu estat:"
       subject: "%{name} ha retootejat el teu estat"
   number:
     human:
@@ -465,7 +530,7 @@ ca:
       title: "%{name} t'ha retootejat"
   remote_follow:
     acct: Escriu l'usuari@domini de la persona que vols seguir
-    missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per al compte.
+    missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per al compte
     proceed: Comença a seguir
     prompt: 'Seguiràs a:'
   sessions:
@@ -516,6 +581,7 @@ ca:
     export: Exportar informació
     followers: Seguidors autoritzats
     import: Importar
+    migrate: Migració del compte
     notifications: Notificacions
     preferences: Preferències
     settings: Configuració
@@ -612,6 +678,8 @@ ca:
 
       <p>Originalment adaptat a la <a href="https://github.com/discourse/discourse">política de privadesa del Discurs</a>.</p>
     title: "%{instance} Condicions del servei i política de privadesa"
+  themes:
+    default: Mastodont
   time:
     formats:
       default: "%b %d, %Y, %H:%M"
@@ -628,7 +696,7 @@ ca:
     manual_instructions: 'Si no pots escanejar el codi QR code i necessites introduir-lo manualment, aquí tens el secret en text pla:'
     recovery_codes: Codis de recuperació de còpia de seguretat
     recovery_codes_regenerated: Codis de recuperació regenerats amb èxit
-    recovery_instructions_html: Si mai perds l'accéss al telèfon pots utilitzar un dels codis de recuperació a continuació per a recuperar l'accés al teu compte. Cal mantenir els codis de recuperació en lloc segur, per exemple imprimint-los i guardar-los amb altres documents importants.
+    recovery_instructions_html: Si mai perds l'accéss al teu telèfon pots utilitzar un dels codis de recuperació a continuació per a recuperar l'accés al teu compte. <strong>Cal mantenir els codis de recuperació en lloc segur</strong>. Per exemple, imprimint-los i guardar-los amb altres documents importants.
     setup: Establir
     wrong_code: El codi introduït no és vàlid! És correcta l'hora del servidor i del dispositiu?
   users:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index db96f7de7..470395767 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -39,6 +39,7 @@ de:
     followers: Folgende
     following: Folgt
     media: Medien
+    moved_html: "%{name} ist auf %{new_profile_link} umgezogen:"
     nothing_here: Hier gibt es nichts!
     people_followed_by: Profile, denen %{name} folgt
     people_who_follow: Profile, die %{name} folgen
@@ -48,6 +49,7 @@ de:
     reserved_username: Dieser Profilname ist belegt
     roles:
       admin: Admin
+      moderator: Mod
     unfollow: Entfolgen
   admin:
     account_moderation_notes:
@@ -59,15 +61,21 @@ de:
       destroyed_msg: Moderationsnotiz erfolgreich gelöscht!
     accounts:
       are_you_sure: Bist du sicher?
+      by_domain: Domain
       confirm: Bestätigen
       confirmed: Bestätigt
+      demote: Degradieren
+      disable: Ausschalten
       disable_two_factor_authentication: 2FA abschalten
+      disabled: Ausgeschaltet
       display_name: Anzeigename
       domain: Domain
       edit: Bearbeiten
       email: E-Mail
+      enable: Freischalten
+      enabled: Freigegeben
       feed_url: Feed-URL
-      followers: Folgende
+      followers: Folger
       followers_url: Followers URL
       follows: Folgt
       inbox_url: Inbox URL
@@ -77,7 +85,9 @@ de:
         local: Lokal
         remote: Entfernt
         title: Ort
+      login_status: Loginstatus
       media_attachments: Medienanhänge
+      memorialize: In Gedenkmal verwandeln
       moderation:
         all: Alle
         silenced: Stummgeschaltet
@@ -94,6 +104,7 @@ de:
       outbox_url: Outbox URL
       perform_full_suspension: Vollständige Sperre durchführen
       profile_url: Profil-URL
+      promote: Befördern
       protocol: Protokoll
       public: Öffentlich
       push_subscription_expires: PuSH-Abonnement läuft aus
@@ -101,6 +112,11 @@ de:
       reset: Zurücksetzen
       reset_password: Passwort zurücksetzen
       resubscribe: Wieder abonnieren
+      role: Berechtigungen
+      roles:
+        admin: Administrator
+        moderator: Moderator
+        user: Nutzer
       salmon_url: Salmon-URL
       search: Suche
       shared_inbox_url: Shared Inbox URL
@@ -117,6 +133,29 @@ de:
       unsubscribe: Abbestellen
       username: Profilname
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} hat die E-Mail-Adresse von %{target} bestätigt"
+        create_custom_emoji: "%{name} hat neues Emoji %{target} hochgeladen"
+        create_domain_block: "%{name} hat die Domain %{target} blockiert"
+        create_email_domain_block: "%{name} hat die E-Mail-Domain %{target} geblacklistet"
+        demote_user: "%{name} stufte Benutzer %{target} herunter"
+        destroy_domain_block: "%{name} hat die Domain %{target} entblockt"
+        destroy_email_domain_block: "%{name} hat die E-Mail-Domain %{target} gewhitelistet"
+        destroy_status: "%{name} hat Status von %{target} entfernt"
+        disable_custom_emoji: "%{name} hat Emoji %{target} deaktiviert"
+        enable_custom_emoji: "%{name} hat das %{target} Emoji aktiviert"
+        enable_user: "%{name} hat die Anmeldung für den Benutzer %{target} aktiviert"
+        memorialize_account: "%{name} hat %{target}s Profil in eine Gedenkseite umgewandelt"
+        reset_password_user: "%{name} hat das Passwort für den Benutzer %{target} zurückgesetzt"
+        resolve_report: "%{name} hat die Meldung %{target} abgelehnt"
+        silence_account: "%{name} hat %{target}s Account stummgeschaltet"
+        suspend_account: "%{name} hat %{target}s Account gesperrt"
+        unsilence_account: "%{name} hat die Stummschaltung von %{target}s Account aufgehoben"
+        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"
+      title: Überprüfungsprotokoll
     custom_emojis:
       copied_msg: Eine lokale Kopie des Emojis wurde erstellt
       copy: Kopieren
diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml
index 169221352..4fd19244d 100644
--- a/config/locales/devise.ar.yml
+++ b/config/locales/devise.ar.yml
@@ -1,9 +1,14 @@
 ---
 ar:
   devise:
+    confirmations:
+      confirmed: تم التحقق من عنوان بريدك الإلكتروني بنجاح.
     failure:
+      already_authenticated: لقد تم تسجيل دخولك من قبل.
       inactive: لم يتم تنشيط حسابك بعد.
+      last_attempt: بإمكانك إعادة المحاولة مرة واحدة قبل أن يتم قفل حسابك.
       locked: إن حسابك مقفل.
+      unconfirmed: يجب عليك تأكيد عنوان بريدك الإلكتروني قبل المواصلة.
     mailer:
       password_change:
         subject: 'ماستدون : تم تغيير كلمة المرور'
@@ -15,6 +20,7 @@ ar:
       updated: تم تغيير كلمة المرور بنجاح. أنت مسجل الآن.
       updated_not_active: تم تغيير كلمة المرور بنجاح.
     registrations:
+      destroyed: إلى اللقاء ! لقد تم إلغاء حسابك. نتمنى أن نراك مجددا.
       signed_up: أهلا وسهلا ! تم تسجيل دخولك بنجاح.
       updated: تم تحديث حسابك بنجاح.
     sessions:
diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml
index ddb688625..4a2811b1f 100644
--- a/config/locales/devise.he.yml
+++ b/config/locales/devise.he.yml
@@ -51,9 +51,9 @@ he:
       unlocked: נעילת חשבונך בוטלה בהצלחה. נא להכנס לחשבון על מנת להמשיך.
   errors:
     messages:
-      already_confirmed: כבר אושר. נא לנסות להכנס לחשבון.
-      confirmation_period_expired: האישור צריך להתקבל תוך %{period}, נא לבקש חדש.
-      expired: פג תוקפו. נא לבקש חדש.
+      already_confirmed: כבר אושר. נא לנסות להכנס לחשבון
+      confirmation_period_expired: האישור צריך להתקבל תוך %{period}, נא לבקש חדש
+      expired: פג תוקפו. נא לבקש חדש
       not_found: לא נמצא
       not_locked: לא היה נעול
       not_saved:
diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml
index ff79d036e..8c2c7b6a1 100644
--- a/config/locales/devise.nl.yml
+++ b/config/locales/devise.nl.yml
@@ -35,7 +35,7 @@ nl:
       updated: Jouw wachtwoord is gewijzigd. Je bent nu ingelogd.
       updated_not_active: Jouw wachtwoord is gewijzigd.
     registrations:
-      destroyed: Jouw account is verwijderd. Wellicht tot ziens!
+      destroyed: Jouw account is succesvol verwijderd. Wellicht tot ziens.
       signed_up: Je bent geregistreerd.
       signed_up_but_inactive: Je bent geregistreerd. Je kon alleen niet automatisch ingelogd worden omdat jouw account nog niet geactiveerd is.
       signed_up_but_locked: Je bent ingeschreven. Je kon alleen niet automatisch ingelogd worden omdat jouw account is opgeschort.
@@ -43,6 +43,7 @@ nl:
       update_needs_confirmation: Je hebt je e-mailadres succesvol gewijzigd, maar we moeten je nieuwe mailadres nog bevestigen. Controleer jouw e-mail en klik op de link in de mail om jouw e-mailadres te bevestigen. Kijk tussen je spam wanneer niks werd ontvangen.
       updated: Jouw accountgegevens zijn opgeslagen.
     sessions:
+      already_signed_out: Succesvol uitgelogd.
       signed_in: Je bent succesvol ingelogd.
       signed_out: Je bent succesvol uitgelogd.
     unlocks:
diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml
index 7980e107a..1925d5a65 100644
--- a/config/locales/doorkeeper.ar.yml
+++ b/config/locales/doorkeeper.ar.yml
@@ -30,7 +30,7 @@ ar:
         error: عفوا ! تحقق من خُلوّ الاستمارة من الأخطاء من فضلك
       help:
         native_redirect_uri: إستخدم %{native_redirect_uri} للاختبار و التجريب محليا
-        redirect_uri: إستخدم خطا واحدا لكل رابط.
+        redirect_uri: إستخدم خطا واحدا لكل رابط
         scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       index:
         callback_url: رابط رد النداء
@@ -54,10 +54,10 @@ ar:
         title: حدث هناك خطأ
       new:
         able_to: يُخوَّل لهذا التطبيق القيام بـ
-        prompt: طلبَ تطبيق %{client_name} تصريحا لاستعمال حسابك.
+        prompt: طلبَ تطبيق %{client_name} تصريحا لاستعمال حسابك
         title: إذن بالتصريح
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: قم بنسخ رمز المصادقة و إلصاقه على التطبيق.
     authorized_applications:
       buttons:
         revoke: إبطال التصريح
diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml
index c2d2b79b9..c1748d05b 100644
--- a/config/locales/doorkeeper.ca.yml
+++ b/config/locales/doorkeeper.ca.yml
@@ -3,8 +3,10 @@ ca:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Nom
+        name: Nom de l'aplicació
         redirect_uri: URI per a redirecció
+        scopes: Àmbits
+        website: Lloc web de l'aplicació
     errors:
       models:
         doorkeeper/application:
@@ -33,9 +35,13 @@ ca:
         redirect_uri: Utilitza una línia per URI
         scopes: Separa els àmbits amb espais. Deixa-ho en blanc per a utilitzar els àmbits per defecte.
       index:
-        callback_url: Callback URL
+        application: Aplicació
+        callback_url: URL de retorn
+        delete: Suprimeix
         name: Nom
         new: Aplicació nova
+        scopes: Àmbits
+        show: Mostra
         title: Les teves aplicacions
       new:
         title: Aplicació nova
@@ -67,6 +73,7 @@ ca:
         application: Aplicació
         created_at: Creat el
         date_format: "%A-%m-%d %H:%M:%S"
+        scopes: Àmbits
         title: Les teves aplicacions autoritzades
     errors:
       messages:
@@ -76,12 +83,12 @@ ca:
         invalid_grant: La concessió d'autorizació oferida és invàlida, ha vençut, s'ha revocat, no coincideix amb l'URI de redirecció utilizada en la petició d'autorizació, o fou emesa per a un altre client.
         invalid_redirect_uri: L'URI de redirecció inclòs no és vàlid.
         invalid_request: En la petició manca un paràmetre necessari o inclou un valor de paràmetre no suportat o te un altre tipus de format incorrecte.
-        invalid_resource_owner: Les credencials del propietari del recurso proporcionat no son vàlides, o el propietari del recurs no pot ser trobat.
+        invalid_resource_owner: Les credencials del propietari del recurs proporcionat no son vàlides, o el propietari del recurs no pot ser trobat
         invalid_scope: L'àmbit demanat és invàlid, desconegut o erroni.
         invalid_token:
-          expired: L'identificador d'accés ha caducat.
-          revoked: L'identificador d'accés fou revocat.
-          unknown: L'identificador d'accés és invàlid.
+          expired: L'identificador d'accés ha caducat
+          revoked: L'identificador d'accés fou revocat
+          unknown: L'identificador d'accés és invàlid
         resource_owner_authenticator_not_configured: El propietari del recurs ha fallat perquè Doorkeeper.configure.resource_owner_authenticator està sense configurar.
         server_error: El servidor de l'autorizació ha trobat unca condició inesperada que ha impedit complir la sol·licitud.
         temporarily_unavailable: El servidor de l'autorizació és actualment incapaç de gestionar la petició degut a una sobrecàrrega temporal o una tasca de manteniment del servidor.
diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml
index ca6e620d8..976fae82c 100644
--- a/config/locales/doorkeeper.es.yml
+++ b/config/locales/doorkeeper.es.yml
@@ -36,7 +36,7 @@ es:
         scopes: Separe los ámbitos con espacios. Déjelo en blanco para utilizar los ámbitos por defecto.
       index:
         application: Aplicación
-        callback_url: Callback URL
+        callback_url: URL de callback
         delete: Eliminar
         name: Nombre
         new: Nueva aplicación
@@ -48,7 +48,7 @@ es:
       show:
         actions: Acciones
         application_id: Id de la aplicación
-        callback_urls: Callback URLs
+        callback_urls: URLs de callback
         scopes: Ámbitos
         secret: Secreto
         title: 'Aplicación: %{name}'
@@ -63,7 +63,7 @@ es:
         prompt: La aplicación %{client_name} solicita tener acceso a su cuenta
         title: Se requiere autorización
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: Copia este código de autorización y pégalo en la aplicación.
     authorized_applications:
       buttons:
         revoke: Revocar
@@ -83,12 +83,12 @@ es:
         invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente.
         invalid_redirect_uri: La URI de redirección incluida no es válida.
         invalid_request: En la petición falta un parámetro necesario o incluye un valor de parámetro no soportado o tiene otro tipo de formato incorrecto.
-        invalid_resource_owner: Las credenciales del propietario del recurso proporcionado no son válidas, o el propietario del recurso no puede ser encontrado.
+        invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o el propietario del recurso no puede ser encontrado
         invalid_scope: El ámbito pedido es inválido, desconocido o erróneo.
         invalid_token:
-          expired: El identificador de acceso finalizó.
-          revoked: El identificador de acceso fue revocado.
-          unknown: El identificador de acceso es inválido.
+          expired: El autentificador de acceso expiró
+          revoked: El autentificador de acceso fue revocado
+          unknown: El autentificador de acceso es inválido
         resource_owner_authenticator_not_configured: El propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_authenticator está sin configurar.
         server_error: El servidor de la autorización entontró una condición inesperada que le impidió cumplir con la solicitud.
         temporarily_unavailable: El servidor de la autorización es actualmente incapaz de manejar la petición debido a una sobrecarga temporal o un trabajo de mantenimiento del servidor.
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 1dcc0da18..a6b58156a 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -6,6 +6,7 @@ fr:
         name: Nom
         redirect_uri: L’URL de redirection
         scope: Portée
+        scopes: Étendue
         website: Site web de l'application
     errors:
       models:
@@ -35,9 +36,13 @@ fr:
         redirect_uri: Utiliser une ligne par URL
         scopes: Séparer les portées avec des espaces. Laisser vide pour utiliser les portées par défaut.
       index:
+        application: Application
         callback_url: URL de retour d’appel
+        delete: Effacer
         name: Nom
         new: Nouvelle application
+        scopes: Scopes
+        show: Voir
         title: Vos applications
       new:
         title: Nouvelle application
diff --git a/config/locales/doorkeeper.he.yml b/config/locales/doorkeeper.he.yml
index 78e72a56f..d797b0ac9 100644
--- a/config/locales/doorkeeper.he.yml
+++ b/config/locales/doorkeeper.he.yml
@@ -5,6 +5,8 @@ he:
       doorkeeper/application:
         name: שם
         redirect_uri: קישורית הפניה
+        scopes: תחומים
+        website: אתר יישום
     errors:
       models:
         doorkeeper/application:
@@ -33,16 +35,20 @@ he:
         redirect_uri: שימוש בשורה אחת לכל קישורית
         scopes: יש להפריד תחומים בעזרת רווחים. נה להשאיר ריק על מנת להשתמש בתחום ברירת המחדל.
       index:
-        callback_url: Callback URL
+        application: יישום
+        callback_url: כתובת גישה חוזרת (Callback URL)
+        delete: למחוק
         name: שם
         new: ישום חדש
+        scopes: תחומים
+        show: להציג
         title: ישומך
       new:
         title: ישום חדש
       show:
         actions: פעולות
         application_id: זהות ישום
-        callback_urls: Callback URLs
+        callback_urls: כתובות לקריאה חוזרת (Callback URLs)
         scopes: תחומים
         secret: סוד
         title: 'ישום: %{name}'
@@ -57,7 +63,7 @@ he:
         prompt: ישום %{client_name} מבקש גישה לחשבונך
         title: נדרשת הרשאה
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: יש להעתיק את קוד ההרשאה הזה ולהדביקו ביישום שביקש אותו.
     authorized_applications:
       buttons:
         revoke: ביטול
@@ -77,7 +83,7 @@ he:
         invalid_grant: חוזה ההרשאה המצורף אינו חוקי, אינו תקף, מבוטל, או שאינו מתאים לקישורית ההפניה שבשימוש על ידי בקשת ההרשאה, או שהופק על ידי לקוח אחר.
         invalid_redirect_uri: קישורית ההפניה המצורפת אינה חוקית.
         invalid_request: הבקשה חסרה פרמטר נדרש, מכילה פרמטר עם ערך שאיננו נתמך, או שתצורתה שגויה.
-        invalid_resource_owner: הרשאות בעלי המשאב שהוזנו אינן חוקיות, או שלא ניתן למצוא את בעלי המשאב.
+        invalid_resource_owner: הרשאות בעלי המשאב שהוזנו אינן חוקיות, או שלא ניתן למצוא את בעלי המשאב
         invalid_scope: התחום המבוקש אינו חוקי, אינו ידוע, או שתצורותו שגויה.
         invalid_token:
           expired: פג תוקף אסימון הגישה
@@ -104,7 +110,7 @@ he:
       admin:
         nav:
           applications: ישומים
-          oauth2_provider: OAuth2 Provider
+          oauth2_provider: ספק OAuth2
       application:
         title: נדרשת הרשאת OAuth
     scopes:
diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml
index f97aa8111..3dd0a7d26 100644
--- a/config/locales/doorkeeper.nl.yml
+++ b/config/locales/doorkeeper.nl.yml
@@ -32,7 +32,7 @@ nl:
         error: Oops! Controleer het formulier op fouten
       help:
         native_redirect_uri: Gebruik %{native_redirect_uri} voor lokale tests
-        redirect_uri: 'Gebruik één regel per URI. '
+        redirect_uri: Gebruik één regel per URI
         scopes: Toestemmingen met spaties van elkaar scheiden. Laat leeg om de standaardtoestemmingen te gebruiken.
       index:
         application: Toepassing
@@ -60,10 +60,10 @@ nl:
         title: Er is een fout opgetreden
       new:
         able_to: Deze toepassing zal in staat zijn om
-        prompt: "%{client_name} autoriseren om uw account te gebruiken?"
+        prompt: "%{client_name} autoriseren om je account te gebruiken"
         title: Autorisatie vereist
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: Kopieer deze autorisatiecode en plak het in de applicatie.
     authorized_applications:
       buttons:
         revoke: Intrekken
@@ -73,6 +73,7 @@ nl:
         application: Toepassing
         created_at: Aangemaakt op
         date_format: "%d-%m-%Y %H:%M:%S"
+        scopes: Toestemmingen
         title: Jouw geautoriseerde toepassingen
     errors:
       messages:
@@ -82,7 +83,7 @@ nl:
         invalid_grant: De verstrekte autorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect-URI die is opgegeven of werd uitgegeven aan een andere client.
         invalid_redirect_uri: De opgegeven redirect-URI is ongeldig.
         invalid_request: Het verzoek mist een vereiste parameter, bevat een niet ondersteunde parameterwaarde of is anderszins onjuist.
-        invalid_resource_owner: De verstrekte resource-eigenaargegevens zijn ogeldig of de resource-eigenaar kan niet worden gevonden.
+        invalid_resource_owner: De verstrekte resource-eigenaargegevens zijn ongeldig of de resource-eigenaar kan niet worden gevonden
         invalid_scope: De opgevraagde scope is ongeldig, onbekend of onjuist.
         invalid_token:
           expired: Het toegangssleutel is verlopen
@@ -92,8 +93,8 @@ nl:
         server_error: De autorisatieserver is is een onverwachte situatie tegengekomen die het verzoek verhinderde.
         temporarily_unavailable: De autorisatieserver is momenteel niet in staat het verzoek te behandelen als gevolg van een tijdelijke overbelasting of onderhoud aan de server.
         unauthorized_client: De client is niet bevoegd om dit verzoek op deze manier uit te voeren.
-        unsupported_grant_type: Het type autorisatie wordt niet door de autorisatieserver ondersteund
-        unsupported_response_type: De autorisatieserver ondersteund dit antwoordtype niet
+        unsupported_grant_type: Het type autorisatie wordt niet door de autorisatieserver ondersteund.
+        unsupported_response_type: De autorisatieserver ondersteund dit antwoordtype niet.
     flash:
       applications:
         create:
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
index 53cadec38..f3da6fcd1 100644
--- a/config/locales/doorkeeper.pt-BR.yml
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -51,7 +51,7 @@ pt-BR:
         callback_urls: URLs de retorno
         scopes: Autorizações
         secret: Segredo do cliente
-        title: 'Application: %{name}'
+        title: 'Aplicativo: %{name}'
     authorizations:
       buttons:
         authorize: Autorizar
@@ -63,7 +63,7 @@ pt-BR:
         prompt: O aplicativo %{client_name} solicita acesso à sua conta
         title: Autorização necessária
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: Copie este código de autorização e cole no aplicativo.
     authorized_applications:
       buttons:
         revoke: Revogar
@@ -83,7 +83,7 @@ pt-BR:
         invalid_grant: A garantia de autorização é inválida, expirou, foi revogada, não é equivalente à URI de redirecionamento usada da solicitação de autorização ou foi emitida por outro cliente.
         invalid_redirect_uri: A URI de redirecionamento incluída não é válida.
         invalid_request: A solicitação não possui um parâmetro obrigatório, inclui um valor não suportado ou está mal formatada.
-        invalid_resource_owner: As credenciais do proprietário não são válidas ou o proprietário não pôde ser encontrado.
+        invalid_resource_owner: As credenciais do proprietário informadas não são válidas ou o proprietário não pôde ser encontrado
         invalid_scope: A autorização requirida é inválida, desconhecida ou está mal formatada.
         invalid_token:
           expired: O token de acesso expirou
diff --git a/config/locales/doorkeeper.pt.yml b/config/locales/doorkeeper.pt.yml
index 30d9f7f5a..039b90ffa 100644
--- a/config/locales/doorkeeper.pt.yml
+++ b/config/locales/doorkeeper.pt.yml
@@ -3,8 +3,10 @@ pt:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Nome
-        redirect_uri: Redirect URI
+        name: Nome da Aplicação
+        redirect_uri: URL de redirecionamento
+        scopes: Scopes
+        website: Site da Aplicação
     errors:
       models:
         doorkeeper/application:
@@ -33,9 +35,12 @@ pt:
         redirect_uri: Utiliza uma linha por URI
         scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       index:
+        application: Aplicações
         callback_url: Callback URL
+        delete: Eliminar
         name: Nome
         new: Nova Aplicação
+        show: Mostrar
         title: As tuas aplicações
       new:
         title: Nova aplicação
@@ -57,7 +62,7 @@ pt:
         prompt: Aplicação %{client_name} pede acesso à tua conta
         title: Autorização é necessária
       show:
-        title: Copy this authorization code and paste it to the application.
+        title: Copiar o código desta autorização e colar na aplicação.
     authorized_applications:
       buttons:
         revoke: Revogar
diff --git a/config/locales/es.yml b/config/locales/es.yml
index ca3bdd983..18b93b08e 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -1,6 +1,7 @@
 ---
 es:
   about:
+    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en cualquier parte del fediverso.
     about_mastodon_html: Mastodon es un servidor de red social <em>libre y de código abierto</em>. Una alternativa <em>descentralizada</em> a plataformas comerciales, que evita el riesgo de que una única compañía monopolice tu comunicación. Cualquiera puede ejecutar Mastodon y participar sin problemas en la <em>red social</em>.
     about_this: Acerca de esta instancia
     closed_registrations: Los registros están actualmente cerrados en esta instancia.
@@ -21,7 +22,7 @@ es:
       real_conversation_body: Con 500 caracteres a tu disposición y soporte para contenido granular y advertencias de contenido, puedes expresarte como quieras.
       real_conversation_title: Hecho para verdaderas conversaciones
       within_reach_body: Aplicaciones múltiples para iOS, Android, y otras plataformas gracias a un ecosistema de APIs amigable al desarrollador para permitirte estar con tus amigos donde sea.
-      within_reach_title: Always within reach
+      within_reach_title: Siempre al alcance
     find_another_instance: Busca otra instancia
     generic_description: "%{domain} es un servidor en la red"
     hosted_on: Mastodon hosteado en %{domain}
@@ -38,6 +39,7 @@ es:
     followers: Seguidores
     following: Siguiendo
     media: Media
+    moved_html: "%{name} se ha trasladado a %{new_profile_link}:"
     nothing_here: "¡No hay nada aquí!"
     people_followed_by: Usuarios a quien %{name} sigue
     people_who_follow: Usuarios que siguen a %{name}
@@ -47,17 +49,31 @@ es:
     reserved_username: El nombre de usuario está reservado
     roles:
       admin: Administrador
+      moderator: Moderador
     unfollow: Dejar de seguir
   admin:
+    account_moderation_notes:
+      account: Moderador
+      create: Crear
+      created_at: Fecha
+      created_msg: "¡Nota de moderación creada con éxito!"
+      delete: Borrar
+      destroyed_msg: "¡Nota de moderación destruida con éxito!"
     accounts:
       are_you_sure: "¿Estás seguro?"
+      by_domain: Dominio
       confirm: Confirmar
       confirmed: Confirmado
+      demote: Degradar
+      disable: Deshabilitar
       disable_two_factor_authentication: Desactivar autenticación de dos factores
+      disabled: Deshabilitada
       display_name: Nombre
       domain: Dominio
       edit: Editar
       email: E-mail
+      enable: Habilitar
+      enabled: Habilitada
       feed_url: URL de notificaciones
       followers: Seguidores
       followers_url: URL de los seguidores
@@ -69,12 +85,15 @@ es:
         local: Local
         remote: Remoto
         title: Localización
+      login_status: Estado del login
       media_attachments: Multimedia
+      memorialize: Convertir en memorial
       moderation:
         all: Todos
         silenced: Silenciados
         suspended: Suspendidos
         title: Moderación
+      moderation_notes: Notas de moderación
       most_recent_activity: Actividad más reciente
       most_recent_ip: IP más reciente
       not_subscribed: No se está suscrito
@@ -85,6 +104,7 @@ es:
       outbox_url: URL de bandeja de salida
       perform_full_suspension: Performar suspensión completa
       profile_url: URL del perfil
+      promote: Promocionar
       protocol: Protocolo
       public: Público
       push_subscription_expires: Expiración de la suscripción PuSH
@@ -92,6 +112,11 @@ es:
       reset: Reiniciar
       reset_password: Reiniciar contraseña
       resubscribe: Re-suscribir
+      role: Permisos
+      roles:
+        admin: Administrador
+        moderator: Moderador
+        user: Usuario
       salmon_url: URL de salmón
       search: Buscar
       shared_inbox_url: URL de bandeja compartida
@@ -108,6 +133,56 @@ es:
       unsubscribe: Desuscribir
       username: Nombre de usuario
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}"
+        create_custom_emoji: "%{name} subió un nuevo emoji %{target}"
+        create_domain_block: "%{name} bloqueó el dominio %{target}"
+        create_email_domain_block: "%{name} puso en lista negra el dominio de correos %{target}"
+        demote_user: "%{name} degradó al usuario %{target}"
+        destroy_domain_block: "%{name} desbloqueó el dominio %{target}"
+        destroy_email_domain_block: "%{name} puso en lista blanca el dominio de correos %{target}"
+        destroy_status: "%{name} eliminó el estado de %{target}"
+        disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}"
+        disable_custom_emoji: "%{name} deshabilitó el emoji %{target}"
+        disable_user: "%{name} deshabilitó el acceso del usuario %{target}"
+        enable_custom_emoji: "%{name} habilitó el emoji %{target}"
+        enable_user: "%{name} habilitó el acceso del usuario %{target}"
+        memorialize_account: "%{name} convirtió la cuenta de %{target} en una página de memorial"
+        promote_user: "%{name} promoción al usuario %{target}"
+        reset_password_user: "%{name} restauró la contraseña del usuario %{target}"
+        resolve_report: "%{name} desestimó el reporte %{target}"
+        silence_account: "%{name} silenció la cuenta de %{target}"
+        suspend_account: "%{name} suspendió la cuenta de %{target}"
+        unsilence_account: "%{name} desactivó el silenciado de la cuenta de %{target}"
+        unsuspend_account: "%{name} desactivó la suspensión de la cuenta de %{target}"
+        update_custom_emoji: "%{name} actualizó el emoji %{target}"
+        update_status: "%{name} actualizó el estado de %{target}"
+      title: Log de auditoría
+    custom_emojis:
+      copied_msg: Copia local del emoji creada con éxito
+      copy: Copiar
+      copy_failed_msg: No se pudo realizar una copia local de ese emoji
+      created_msg: "¡Emoji creado con éxito!"
+      delete: Borrar
+      destroyed_msg: "¡Emojo destruido con éxito!"
+      disable: Deshabilitar
+      disabled_msg: Se deshabilitó con éxito ese emoji
+      emoji: Emoji
+      enable: Habilitar
+      enabled_msg: Se habilitó con éxito ese emoji
+      image_hint: PNG de hasta 50KB
+      listed: Listados
+      new:
+        title: Añadir nuevo emoji personalizado
+      overwrite: Sobrescribir
+      shortcode: Código de atajo
+      shortcode_hint: Al menos 2 caracteres, solo caracteres alfanuméricos y guiones bajos
+      title: Emojis personalizados
+      unlisted: Sin listar
+      update_failed_msg: No se pudo actualizar ese emoji
+      updated_msg: "¡Emoji actualizado con éxito!"
+      upload: Subir
     domain_blocks:
       add_new: Añadir nuevo
       created_msg: El bloque de dominio está siendo procesado
@@ -140,12 +215,29 @@ es:
         undo: Deshacer
       title: Bloques de Dominio
       undo: Deshacer
+    email_domain_blocks:
+      add_new: Añadir nuevo
+      created_msg: Dominio de correo añadido a la lista negra con éxito
+      delete: Borrar
+      destroyed_msg: Dominio de correo borrado de la lista negra con éxito
+      domain: Dominio
+      new:
+        create: Añadir dominio
+        title: Nueva entrada en la lista negra de correo
+      title: Lista negra de correo
     instances:
       account_count: Cuentas conocidas
       domain_name: Dominio
       reset: Reiniciar
       search: Buscar
       title: Instancias conocidas
+    invites:
+      filter:
+        all: Todas
+        available: Disponibles
+        expired: Expiradas
+        title: Filtrar
+      title: Invitaciones
     reports:
       action_taken_by: Acción tomada por
       are_you_sure: "¿Estás seguro?"
@@ -172,7 +264,7 @@ es:
       view: Ver
     settings:
       bootstrap_timeline_accounts:
-        desc_html: Separa nombres de usuarios múltiples con coma. Solo funcionará con cuentas desbloqueadas. Si está vacío, el predeterminado son todos los administradores locales
+        desc_html: Separa con comas los nombres de usuario. Solo funcionará para cuentas locales desbloqueadas. Si se deja vacío, se tomará como valor por defecto a todos los administradores locales.
         title: Seguimientos predeterminados para usuarios nuevos
       contact_information:
         email: Correo de trabajo
@@ -184,9 +276,15 @@ es:
         deletion:
           desc_html: Permite a cualquiera a eliminar su cuenta
           title: Eliminación de cuenta abierta
+        min_invite_role:
+          disabled: Nadie
+          title: Permitir invitaciones de
         open:
           desc_html: Permite a cualquiera a registrar una cuenta
           title: Registro abierto
+      show_staff_badge:
+        desc_html: Mostrar un parche de staff en la página de un usuario
+        title: Mostrar parche de staff
       site_description:
         desc_html: Párrafo introductorio en la portada y en meta tags. Puedes usar tags HTML, en particular <code>&lt;a&gt;</code> y <code>&lt;em&gt;</code>.
         title: Descripción de instancia
@@ -232,6 +330,7 @@ es:
       body: "%{reporter} ha reportado a %{target}"
       subject: Nuevo reporte para la %{instance} (#%{id})
   application_mailer:
+    salutation: "%{name},"
     settings: 'Cambiar preferencias de correo: %{link}'
     signature: Notificaciones de Mastodon desde %{instance}
     view: 'Vista:'
@@ -246,12 +345,15 @@ es:
   auth:
     agreement_html: Al registrarte aceptas <a href="%{rules_path}">nuestros y términos y condiciones del servicio</a> y <a href="%{terms_path}">nuestras políticas de privacidda</a>.
     change_password: Cambiar contraseña
+    delete_account: Borrar cuenta
     delete_account_html: Si desea eliminar su cuenta, puede <a href="%{path}">proceder aquí</a>. Será pedido de una confirmación.
     didnt_get_confirmation: "¿No recibió el correo de confirmación?"
     forgot_password: "¿Olvidaste tu contraseña?"
     invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo.
     login: Iniciar sesión
     logout: Cerrar sesión
+    migrate_account: Mudarse a otra cuenta
+    migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>.
     register: Registrarse
     resend_confirmation: Volver a enviar el correo de confirmación
     reset_password: Restablecer contraseña
@@ -296,11 +398,15 @@ es:
       content: Verificación de seguridad fallida. ¿Estás bloqueando algunas cookies?
       title: Verificación de seguridad fallida
     '429': Asfixiado
+    '500':
+      content: Lo sentimos, algo ha funcionado mal por nuestra parte.
+      title: Esta página no es correcta
     noscript_html: Para usar la aplicación web de Mastodon, por favor activa Javascript. Alternativamente, prueba alguna de las <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">aplicaciones nativas</a> para Mastodon para tu plataforma.
   exports:
     blocks: Personas que has bloqueado
     csv: CSV
     follows: Personas que sigues
+    mutes: Tienes en silencio
     storage: Almacenamiento
   followers:
     domain: Dominio
@@ -329,19 +435,47 @@ es:
       following: Lista de seguidos
       muting: Lista de silenciados
     upload: Cargar
+  in_memoriam_html: In Memoriam.
+  invites:
+    delete: Desactivar
+    expired: Expiradas
+    expires_in:
+      '1800': 30 minutos
+      '21600': 6 horas
+      '3600': 1 hora
+      '43200': 12 horas
+      '86400': 1 día
+    expires_in_prompt: Nunca
+    generate: Generar
+    max_uses:
+      one: 1 uso
+      other: "%{count} usos"
+    max_uses_prompt: Sin límite
+    prompt: Generar y compartir enlaces con otros para conceder acceso a este nodo
+    table:
+      expires_at: Expira
+      uses: Usos
+    title: Invitar a gente
   landing_strip_html: "<strong>%{name}</strong> es un usuario en %{link_to_root_path}. Puedes seguirlo(a) o interactuar con el o ella si tienes una cuenta en cualquier parte del fediverse."
   landing_strip_signup_html: Si no tienes una, puedes <a href="%{sign_up_path}">registrarte aquí</a>.
   media_attachments:
     validations:
       images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes
       too_many: No se pueden adjuntar más de 4 archivos
+  migrations:
+    acct: username@domain de la nueva cuenta
+    currently_redirecting: 'Tu perfil está redireccionado a:'
+    proceed: Guardar
+    updated_msg: "¡La configuración de migración de tu cuenta  ha sido actualizada con éxito!"
+  moderation:
+    title: Moderación
   notification_mailer:
     digest:
       body: 'Un resumen de lo que te perdiste en %{instance} desde tu última visita el %{since}:'
       mention: "%{name} te ha mencionado en:"
       new_followers_summary:
-        one: "¡Hurra! Alguien más te ha comenzado a seguir"
-        other: "¡Genial! Te han seguido %{count} nuevas personas"
+        one: "¡Hurra! ¡Tienes un nuevo seguidor!"
+        other: "¡Genial! ¡Tienes %{count} nuevos seguidores!"
       subject:
         one: "1 nueva notificación desde tu última visita \U0001F418"
         other: "%{count} nuevas notificaciones desde tu última visita \U0001F418"
@@ -358,7 +492,7 @@ es:
       body: 'Fuiste mencionado por %{name} en:'
       subject: Fuiste mencionado por %{name}
     reblog:
-      body: "%{name} ha retooteado tu estado"
+      body: "%{name} ha retooteado tu estado:"
       subject: "%{name} ha retooteado tu estado"
   number:
     human:
@@ -375,6 +509,11 @@ es:
     next: Próximo
     prev: Anterior
     truncate: "&hellip;"
+  preferences:
+    languages: Idiomas
+    other: Otros
+    publishing: Publicación
+    web: Web
   push_notifications:
     favourite:
       title: "%A {name} le gustó tu estado"
@@ -383,7 +522,7 @@ es:
     group:
       title: "%{count} notificaciones"
     mention:
-      action_boost: Boost
+      action_boost: Retoot
       action_expand: Mostrar más
       action_favourite: Me Gusta
       title: "%{name} te mencionó"
@@ -391,7 +530,7 @@ es:
       title: "%{name} boosteó tu estado"
   remote_follow:
     acct: Ingesa el usuario@dominio de la persona que quieres seguir
-    missing_resource: No se pudo encontrar la URL de redirección necesaria para su cuenta.
+    missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta
     proceed: Proceder a seguir
     prompt: 'Vas a seguir a:'
   sessions:
@@ -430,15 +569,20 @@ es:
       windows: Windows
       windows_mobile: Windows Mobile
       windows_phone: Windows Phone
-    revoke: Revoke
+    revoke: Revocar
     revoke_success: Sesión revocada exitosamente
     title: Sesiones
   settings:
     authorized_apps: Aplicaciones autorizadas
     back: Volver al inicio
+    delete: Borrar cuenta
+    development: Desarrollo
     edit_profile: Editar perfil
     export: Exportar información
+    followers: Seguidores autorizados
     import: Importar
+    migrate: Migración de cuenta
+    notifications: Notificaciones
     preferences: Preferencias
     settings: Ajustes
     two_factor_authentication: Autenticación de dos factores
@@ -534,6 +678,8 @@ es:
 
       <p>Adaptado originalmente del <a href="https://github.com/discourse/discourse">discurso de las políticas de privacidad</a>.</p>
     title: Términos del Servicio y Políticas de Privacidad de %{instance}
+  themes:
+    default: Mastodon
   time:
     formats:
       default: "%d de %b del %Y, %H:%M"
@@ -542,11 +688,14 @@ es:
     description_html: Si habilitas la <strong>autenticación de dos factores</strong>, se requerirá estar en posesión de su teléfono, lo que generará tokens para que usted pueda iniciar sesión.
     disable: Deshabilitar
     enable: Habilitar
+    enabled: La autenticación de dos factores está activada
     enabled_success: Verificación de dos factores activada exitosamente
     generate_recovery_codes: generar códigos de recuperación
     instructions_html: "<strong>Escanea este código QR desde Google Authenticator o una aplicación similar en su teléfono</strong>. Desde ahora, esta aplicación va a generar tokens que tienes que ingresar cuando quieras iniciar sesión."
     lost_recovery_codes: Los códigos de recuperación te permiten obtener acceso a tu cuenta si pierdes tu teléfono. Si has perdido tus códigos de recuperación, puedes regenerarlos aquí. Tus viejos códigos de recuperación se harán inválidos.
+    manual_instructions: 'Si no puedes escanear el código QR y necesitas introducirlo manualmente, este es el secreto en texto plano:'
     recovery_codes: Hacer copias de seguridad de tus códigos de recuperación
+    recovery_codes_regenerated: Códigos de recuperación regenerados con éxito
     recovery_instructions_html: Si pierdes acceso a tu teléfono, puedes usar uno de los siguientes códigos de recuperación para obtener acceso a tu cuenta. <strong>Mantenlos a salvo</strong>. Por ejemplo, puedes imprimirlos y guardarlos con otros documentos importantes.
     setup: Configurar
     wrong_code: "¡El código ingresado es inválido! ¿El dispositivo y tiempo del servidor están correctos?"
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 2fd875b2c..cd97f5967 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -39,6 +39,7 @@ fr:
     followers: Abonné⋅e⋅s
     following: Abonnements
     media: Médias
+    moved_html: "%{name} a déménagé vers %{new_profile_link} :"
     nothing_here: Rien à voir ici !
     people_followed_by: Personnes suivies par %{name}
     people_who_follow: Personnes qui suivent %{name}
@@ -48,6 +49,7 @@ fr:
     reserved_username: Ce nom d’utilisateur⋅ice est réservé
     roles:
       admin: Admin
+      moderator: Modérateur·trice
     unfollow: Ne plus suivre
   admin:
     account_moderation_notes:
@@ -59,13 +61,19 @@ fr:
       destroyed_msg: Note de modération supprimée avec succès !
     accounts:
       are_you_sure: Êtes-vous certain⋅e ?
+      by_domain: Domaine
       confirm: Confirmer
       confirmed: Confirmé
+      demote: Rétrograder
+      disable: Désactiver
       disable_two_factor_authentication: Désactiver l’authentification à deux facteurs
+      disabled: Désactivé
       display_name: Nom affiché
       domain: Domaine
       edit: Éditer
       email: Courriel
+      enable: Activer
+      enabled: Activé
       feed_url: URL du flux
       followers: Abonné⋅e⋅s
       followers_url: URL des abonné·e·s
@@ -77,7 +85,9 @@ fr:
         local: Local
         remote: Distant
         title: Situation
+      login_status: Statut de connexion
       media_attachments: Fichiers médias
+      memorialize: Convertir en mémorial
       moderation:
         all: Tous
         silenced: Masqués
@@ -94,13 +104,19 @@ fr:
       outbox_url: URL de sortie
       perform_full_suspension: Effectuer une suspension complète
       profile_url: URL du profil
+      promote: Promouvoir
       protocol: Protocole
-      public: Public
+      public: Publique
       push_subscription_expires: Expiration de l’abonnement PuSH
       redownload: Rafraîchir les avatars
       reset: Réinitialiser
       reset_password: Réinitialiser le mot de passe
       resubscribe: Se réabonner
+      role: Permissions
+      roles:
+        admin: Administrateur
+        moderator: Modérateur
+        user: Utilisateur
       salmon_url: URL Salmon
       search: Rechercher
       shared_inbox_url: URL de la boite de réception partagée
@@ -117,6 +133,31 @@ fr:
       unsubscribe: Se désabonner
       username: Nom d’utilisateur⋅ice
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} adresse e-mail confirmée de l'utilisateur %{target}"
+        create_custom_emoji: "%{name} a importé de nouveaux emoji %{target}"
+        create_domain_block: "%{name} a bloqué le domaine %{target}"
+        create_email_domain_block: "%{name} a blacklisté le domaine de l'e-mail %{target}"
+        destroy_domain_block: "%{name} a débloqué le domaine %{target}"
+        destroy_email_domain_block: "%{name} a mis le domaine de l'e-mail %{target} sur liste blanche"
+        destroy_status: "%{name} a enlevé le statut de %{target}"
+        disable_2fa_user: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur %{target}"
+        disable_custom_emoji: "%{name} a désactivé l'emoji %{target}"
+        disable_user: "%{name} a désactivé le login pour l'utilisateur %{target}"
+        enable_custom_emoji: "%{name} a activé l'emoji %{target}"
+        enable_user: "%{name} a activé le login pour l'utilisateur %{target}"
+        memorialize_account: "%{name} a transformé le compte de %{target} en une page de mémorial"
+        promote_user: "%{name} a promu l'utilisateur %{target}"
+        reset_password_user: "%{name} a réinitialisé le mot de passe de %{target}"
+        resolve_report: "%{name} n'a pas pris en compte la dénonciation de %{target}"
+        silence_account: "%{name} a mis le compte %{target} en mode silence"
+        suspend_account: "%{name} a suspendu le compte %{target}"
+        unsilence_account: "%{name} a mis fin au mode silence de %{target}"
+        unsuspend_account: "%{name} a réactivé le compte de %{target}"
+        update_custom_emoji: "%{name} a mis à jour l'emoji %{target}"
+        update_status: "%{name} a mis à jour le statut de %{target}"
+      title: Journal d'audit
     custom_emojis:
       copied_msg: Copie locale de l’émoji créée avec succès !
       copy: Copier
@@ -130,11 +171,16 @@ fr:
       enable: Activer
       enabled_msg: Émoji activé avec succès
       image_hint: PNG de moins de 50 Ko
+      listed: Listé
       new:
         title: Ajouter un nouvel émoji personnalisé
+      overwrite: Réécrire
       shortcode: Raccourci
       shortcode_hint: Au moins deux caractères, seulement des caractères alphanumériques ou des tirets bas
       title: Émoji personnalisés
+      unlisted: Délisté
+      update_failed_msg: N'a pas pu mettre à jour cet emoji
+      updated_msg: Emoji mis à jour avec succès !
       upload: Téléverser
     domain_blocks:
       add_new: Ajouter
@@ -145,13 +191,13 @@ fr:
         create: Créer le blocage
         hint: Le blocage de domaine n’empêchera pas la création de comptes dans la base de données, mais il appliquera automatiquement et rétrospectivement des méthodes de modération spécifiques sur ces comptes.
         severity:
-          desc_html: "<strong>Silence</strong> rendra les messages des comptes concernés invisibles à ceux qui ne les suivent pas. <strong>Suspend</strong> supprimera tout le contenu des comptes concernés, les médias, et les données du profil."
+          desc_html: "<strong>Silence</strong> rendra les messages des comptes concernés invisibles à ceux qui ne les suivent pas. <strong>Suspendre</strong> supprimera tout le contenu des comptes concernés, les médias, et les données du profil."
           noop: Aucune
           silence: Masqué
           suspend: Suspendre
         title: Nouveau blocage de domaine
       reject_media: Fichiers média rejetés
-      reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions.
+      reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions
       severities:
         noop: Aucune
         silence: Masquer
@@ -184,6 +230,13 @@ fr:
       reset: Réinitialiser
       search: Rechercher
       title: Instances connues
+    invites:
+      filter:
+        all: Tout
+        available: Disponible
+        expired: Expiré
+        title: Filtre
+      title: Invitations
     reports:
       action_taken_by: Intervention de
       are_you_sure: Êtes vous certain⋅e ?
@@ -222,11 +275,17 @@ fr:
         deletion:
           desc_html: Permettre à tou·te·s les utilisateur·ice·s de supprimer leur compte
           title: Autoriser les suppressions de compte
+        min_invite_role:
+          disabled: Personne
+          title: Autoriser les invitations par
         open:
           desc_html: Autoriser tout le monde à créer un compte
           title: Ouvrir les inscriptions
+      show_staff_badge:
+        desc_html: Montrer un badge de responsable sur une page utilisateur
+        title: Montrer un badge de responsable
       site_description:
-        desc_html: Affichée sous la forme d’un paragraphe sur la page d’accueil et utilisée comme balise meta.<br>Vous pouvez utiliser des balises HTML, en particulier <code>&lt;a&gt;</code> et <code>&lt;em&gt;</code>.
+        desc_html: Affichée sous la forme d’un paragraphe sur la page d’accueil et utilisée comme balise meta.<br/>Vous pouvez utiliser des balises HTML, en particulier <code>&lt;a&gt;</code> et <code>&lt;em&gt;</code>.
         title: Description du site
       site_description_extended:
         desc_html: Affichée sur la page d’informations complémentaires du site<br>Vous pouvez utiliser des balises HTML
@@ -273,7 +332,7 @@ fr:
     salutation: "%{name},"
     settings: 'Changer les préférences courriel : %{link}'
     signature: Notifications de Mastodon depuis %{instance}
-    view: 'Voir :'
+    view: 'Voir :'
   applications:
     created: Application créée avec succès
     destroyed: Application supprimée avec succès
@@ -292,6 +351,8 @@ fr:
     invalid_reset_password_token: Le lien de réinitialisation du mot de passe est invalide ou a expiré. Merci de réessayer.
     login: Se connecter
     logout: Se déconnecter
+    migrate_account: Déplacer vers un compte différent
+    migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le <a href="%{path}">configurer ici</a>.
     register: S’inscrire
     resend_confirmation: Envoyer à nouveau les consignes de confirmation
     reset_password: Réinitialiser le mot de passe
@@ -299,8 +360,8 @@ fr:
   authorize_follow:
     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 :'
+    follow_request: 'Vous avez demandé à suivre :'
+    following: 'Youpi ! Vous suivez  :'
     post_follow:
       close: Ou bien, vous pouvez fermer cette fenêtre.
       return: Retour au profil de l’utilisateur⋅ice
@@ -323,7 +384,7 @@ fr:
   deletes:
     bad_password_msg: Bien essayé ! Mot de passe incorrect
     confirm_password: Entrez votre mot de passe pour vérifier votre identité
-    description_html: Cela va supprimer votre compte et le désactiver de manière <strong>permanente et irréversible</strong>. Votre nom d’utilisateur⋅ice restera réservé afin d’éviter la confusion
+    description_html: Cela va supprimer votre compte et le désactiver de manière <strong>permanente et irréversible</strong>. Votre nom d’utilisateur⋅ice restera réservé afin d’éviter la confusion.
     proceed: Supprimer compte
     success_msg: Votre compte a été supprimé avec succès
     warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-lignes ainsi que ceux n’étant plus abonnés à vos publications ne mettront pas leur base de données à jour.
@@ -335,11 +396,11 @@ fr:
     '422':
       content: Vérification de sécurité échouée. Bloquez-vous les cookies ?
       title: Vérification de sécurité échouée
-    '429': Trop de requêtes émises dans un délai donné.
+    '429': Trop de requêtes émises dans un délai donné
     '500':
       content: Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté.
       title: Cette page n’est pas correcte
-    noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript
+    noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript. Sinon, essayez l'une des <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">applications natives</a> pour Mastodon pour votre plate-forme.
   exports:
     blocks: Vous bloquez
     csv: CSV
@@ -363,8 +424,8 @@ fr:
     powered_by: propulsé par %{link}
     save_changes: Enregistrer les modifications
     validation_errors:
-      one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous.
-      other: Certaines choses ne vont pas ! Vérifiez les erreurs ci-dessous.
+      one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous
+      other: Certaines choses ne vont pas ! Vérifiez les %{count} erreurs ci-dessous
   imports:
     preface: Vous pouvez importer certaines données comme les personnes que vous suivez ou bloquez sur votre compte sur cette instance à partir de fichiers créés sur une autre instance.
     success: Vos données ont été importées avec succès et seront traitées en temps et en heure
@@ -373,16 +434,44 @@ fr:
       following: Liste d’utilisateur⋅ice⋅s suivi⋅e⋅s
       muting: Liste d’utilisateur⋅ice⋅s que vous masquez
     upload: Importer
+  in_memoriam_html: In Memoriam.
+  invites:
+    delete: Désactiver
+    expired: Expiré
+    expires_in:
+      '1800': 30 minutes
+      '21600': 6 heures
+      '3600': 1 heure
+      '43200': 12 heures
+      '86400': 1 jour
+    expires_in_prompt: Jamais
+    generate: Générer
+    max_uses:
+      one: 1 usage
+      other: "%{count} usages"
+    max_uses_prompt: Pas de limite
+    prompt: Générer et partager des liens avec les autres pour donner accès à cette instance
+    table:
+      expires_at: Expire
+      uses: Utilise
+    title: Personnes invitées
   landing_strip_html: <strong>%{name}</strong> utilise %{link_to_root_path}. Vous pouvez læ suivre et interagir si vous possédez un compte quelque part dans le "fediverse".
   landing_strip_signup_html: Si ce n’est pas le cas, vous pouvez <a href="%{sign_up_path}">en créer un ici</a>.
   media_attachments:
     validations:
       images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images
       too_many: Impossible de joindre plus de 4 fichiers
+  migrations:
+    acct: utilisateur@domaine du nouveau compte
+    currently_redirecting: 'Votre profile va être redirigé vers :'
+    proceed: Enregistrer
+    updated_msg: Les paramètres de votre migration de compte ont été mis à jour avec succès !
+  moderation:
+    title: Modération
   notification_mailer:
     digest:
-      body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite (%{}) :'
-      mention: "%{name} vous a mentionné⋅e"
+      body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite le %{since} :'
+      mention: "%{name} vous a mentionné⋅e dans :"
       new_followers_summary:
         one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi !
         other: Vous avez %{count} nouveaux⋅elles abonné⋅e⋅s ! Incroyable !
@@ -390,7 +479,7 @@ fr:
         one: "Une nouvelle notification depuis votre dernière visite \U0001F418"
         other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418"
     favourite:
-      body: "%{name} a ajouté votre post à ses favoris :"
+      body: "%{name} a ajouté votre post à ses favoris :"
       subject: "%{name} a ajouté votre post à ses favoris"
     follow:
       body: "%{name} vous suit !"
@@ -399,10 +488,10 @@ fr:
       body: "%{name} a demandé à vous suivre"
       subject: 'Abonné⋅es en attente : %{name}'
     mention:
-      body: "%{name} vous a mentionné⋅e dans :"
+      body: "%{name} vous a mentionné⋅e dans :"
       subject: "%{name} vous a mentionné·e"
     reblog:
-      body: "%{name} a partagé votre statut :"
+      body: "%{name} a partagé votre statut :"
       subject: "%{name} a partagé votre statut"
   number:
     human:
@@ -442,7 +531,7 @@ fr:
     acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅rice
     missing_resource: L’URL de redirection n’a pas pu être trouvée
     proceed: Continuez pour suivre
-    prompt: 'Vous allez suivre :'
+    prompt: 'Vous allez suivre :'
   sessions:
     activity: Dernière activité
     browser: Navigateur
@@ -491,6 +580,7 @@ fr:
     export: Export de données
     followers: Abonné⋅es autorisé⋅es
     import: Import de données
+    migrate: Migration de compte
     notifications: Notifications
     preferences: Préférences
     settings: Réglages
@@ -587,6 +677,8 @@ fr:
 
       <p>Originellement adapté à partir de la politique de confidentialité de <a href="https://github.com/discourse/discourse">Discourse</a>.</p>
     title: "%{instance} Conditions d’utilisations et politique de confidentialité"
+  themes:
+    default: Mastodon
   time:
     formats:
       default: "%d %b %Y, %H:%M"
@@ -600,7 +692,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 comptre 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 ce QR code et devez l’entrer manuellement, voici le secret en clair :'
     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 récupérer l’accès à votre compte. Conservez les codes de récupération en toute sécurité, par exemple, en les imprimant et en les stockant avec vos autres documents importants.
@@ -609,4 +701,4 @@ fr:
   users:
     invalid_email: L’adresse courriel est invalide
     invalid_otp_token: Le code d’authentification à deux facteurs est invalide
-    signed_in_as: 'Connecté·e en tant que :'
+    signed_in_as: 'Connecté·e en tant que :'
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 84d6d8468..4b977ce1b 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -1,54 +1,99 @@
 ---
 he:
   about:
+    about_hashtag_html: אלו סטטוסים פומביים המתוייגים בתור<strong>#%{hashtag}</strong>. ניתן להגיב, להדהד או לחבב אותם אם יש לך חשבון בכל מקום בפדרציה.
     about_mastodon_html: מסטודון היא רשת חברתית <em>חופשית, מבוססת תוכנה חופשית ("קוד פתוח")</em>. כאלטרנטיבה <em>בלתי ריכוזית</em> לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד &mdash; לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ב<em>רשת החברתית</em> באופן חלק.
     about_this: אודות שרת זה
     closed_registrations: הרשמות סגורות לשרת זה לעת עתה.
     contact: צור קשר
+    contact_missing: אין
+    contact_unavailable: לא רלוונטי/חסר
     description_headline: מהו %{domain}?
     domain_count_after: שרתים אחרים
     domain_count_before: מחובר אל
+    extended_description_html: |
+      <h3>מקום טוב לכללים</h3>
+      <p>התיאור המורחב טרם הוגדר.</p>
+    features:
+      humane_approach_body: מתוך למידה מכשלים של רשתות אחרות, מסטודון מכוונת להחלטות תכנוניות אתיות שנאבקות בשימוש לרעה של מדיה חברתית.
+      humane_approach_title: גישה הומאנית יותר
+      not_a_product_body: מסטודון איננה רשת מסחרית. אין פרסום, אין כריית מידע, אין גנים סגורים. אין סמכות מרכזית.
+      not_a_product_title: את(ה) אדם, לא מוצר
+      real_conversation_body: עם 500 תווים לרשותך, ואפשרויות פרטניות לאזהרות תוכן והסתרת מדיה, יש לך את החופש להתבטא כרצונך.
+      real_conversation_title: בנוי לשיחות אמתיות
+      within_reach_body: שלל אפליקציות עבור iOS, אנדרואיד ופלטפורמות אחרות שיאפשרו לך לשמור על קשר עם חברים בכל מקום, תודות למערכת מנשקי תוכנה ידידותיים למפתחים.
+      within_reach_title: תמיד במרחק נגיעה
+    find_another_instance: לאיתור שרת אחר
+    generic_description: "%{domain} הוא שרת אחד בתוך הרשת"
+    hosted_on: מסטודון שיושב בכתובת %{domain}
+    learn_more: מידע נוסף
     other_instances: שרתים אחרים
     source_code: קוד מקור
     status_count_after: הודעות
     status_count_before: שכתבו
     user_count_after: משתמשים
     user_count_before: ביתם של
+    what_is_mastodon: מה זה מסטודון?
   accounts:
     follow: לעקוב
     followers: עוקבים
     following: נעקבים
+    media: מדיה
+    moved_html: "%{name} עבר(ה) אל %{new_profile_link}:"
     nothing_here: אין פה שום דבר!
     people_followed_by: הנעקבים של %{name}
     people_who_follow: העוקבים של %{name}
     posts: הודעות
+    posts_with_replies: חצרוצים ותגובות
     remote_follow: מעקב מרחוק
+    reserved_username: שם המשתמש שמור
+    roles:
+      admin: מנהל
+      moderator: מנחה
     unfollow: הפסקת מעקב
   admin:
+    account_moderation_notes:
+      account: מנחה דיון
+      create: ליצור
+      created_at: תאריך
+      created_msg: הודעת מנחה נוצרה בהצלחה!
+      delete: למחוק
+      destroyed_msg: הודעת מנחה נמחקה בהצלחה!
     accounts:
       are_you_sure: בטוח?
-      confirm: אשר
+      by_domain: שם מתחם
+      confirm: אישור
       confirmed: אושר
+      demote: הורדה בדרגה
+      disable: לחסום
       disable_two_factor_authentication: ביטול הזדהות דו-שלבית
+      disabled: נחסם
       display_name: שם לתצוגה
       domain: תחום
       edit: עריכה
       email: דוא"ל
+      enable: לאפשר
+      enabled: מאופשר
       feed_url: כתובת פיד
       followers: עוקבים
+      followers_url: כתובת עוקבים
       follows: נעקבים
+      inbox_url: כתובת תיבה נכנסת
       ip: כתובת IP
       location:
         all: הכל
         local: מקומי
         remote: מרחוק
         title: מיקום
+      login_status: מצב חיבור
       media_attachments: תוספות מדיה
+      memorialize: הפוך לדף זכרון
       moderation:
         all: הכל
         silenced: מושתקים
         suspended: מושהים
         title: ניהול קהילה
+      moderation_notes: הודעות מנחה
       most_recent_activity: פעילות עדכנית
       most_recent_ip: כתובות אחרונות
       not_subscribed: לא רשום
@@ -56,25 +101,49 @@ he:
         alphabetic: אלפביתי
         most_recent: עדכני
         title: סידור
+      outbox_url: כתובת תיבת דואר יוצא
       perform_full_suspension: ביצוע השעייה מלאה
       profile_url: כתובת פרופיל
+      promote: להעלות בדרגה
+      protocol: פרטיכל
       public: פומבי
       push_subscription_expires: הרשמה להודעות בדחיפה פגה
+      redownload: לקריאה מחדש של האווטאר
       reset: איפוס
       reset_password: אתחול סיסמא
+      resubscribe: להרשם מחדש
+      role: הרשאות
+      roles:
+        admin: מנהל מערכת
+        moderator: מנחה דיונים
+        user: משתמש(ת)
       salmon_url: כתובת סלמון
       search: חיפוש
+      shared_inbox_url: תיבה משותפת לדואר נכנס
       show:
         created_reports: דיווחים מאת חשבון זה
         report: דו"ח
         targeted_reports: דיווחים נגד חשבון זה
       silence: השתקה
       statuses: הודעות
+      subscribe: הרשמה
       title: חשבונות
       undo_silenced: ביטול השתקה
       undo_suspension: ביטול השעייה
+      unsubscribe: הפסקת הרשמה
       username: שם משתמש
       web: רשת
+    action_logs:
+      actions:
+        confirm_user: יש אישור מאת %{name} על כתובת הדוא"ל של %{target}
+        create_custom_emoji: "%{name} תרמה/תרם אמוג'י חדש %{target}"
+        create_domain_block: "%{name} חסמה/חסם את שם המתחם %{target}"
+        create_email_domain_block: מתחם דוא"ל %{target} הוסף לרשימה השחורה ע"י %{name}
+        demote_user: '%{name} הורד(ה) בדרגה ע"י %{target}'
+        destroy_domain_block: החסימה על מתחם %{target} הוסרה ע"י %{name}
+        destroy_email_domain_block: מתחם דוא"ל %{target} הוכנס לרשימה הלבנה ע"י %{name}
+        destroy_status: ההודעה של  %{target} הוסרה ע"י %{name}
+        disable_2fa_user: אימות דו שלבי של  %{target} הוסר ע"י %{name}
     domain_blocks:
       add_new: הוספת חדש
       created_msg: חסימת שרת בתהליך
@@ -84,12 +153,12 @@ he:
         create: יצירת חסימה
         hint: חסימת השרת לא תמנע יצירת רישומי חשבון במסד הנתונים, אבל תבצע פעולות ניהול קהילה מסוימות על חשבונות אלו אוטומטית ורטרואקטיבית.
         severity:
-          desc_html: "<strong>השתקה</strong> תחביא הודעות מחשבון זה לכל מי שלא עוקב אחריו. <strong>השעייה</strong> תסיר מהשרת את כל התוכן, מדיה ותכונות הפרופיל שמקושרות לחשבון זה."
+          desc_html: "<strong>השתקה</strong> תחביא הודעות מחשבון זה לכל מי שלא עוקב אחריו. <strong>השעייה</strong> תסיר מהשרת את כל התוכן, מדיה ותכונות הפרופיל שמקושרות לחשבון זה. <strong>כלום</strong> כדי לחסום קבצי מדיה בלבד."
           silence: השתקה
           suspend: השעייה
         title: חסימת שרת חדשה
       reject_media: חסימת קבצי מדיה
-      reject_media_hint: מסירה קבצי מדיה השמורים מקומית ומונעת מהורדת קבצים נוספים בעתיד. לא רלוונטי להשעיות.
+      reject_media_hint: מסירה קבצי מדיה השמורים מקומית ומונעת מהורדת קבצים נוספים בעתיד. לא רלוונטי להשעיות
       severities:
         silence: השתקה
         suspend: השעייה
@@ -143,7 +212,7 @@ he:
         open:
           title: הרשמה פתוחה
       site_description:
-        desc_html: מוצג כפסקה על הדף הראשי ומשמש כתגית מטא.<br>ניתן להשתמש בתגיות HTML, ובמיוחד ב־<code>&lt;a&gt;</code> ו־<code>&lt;em&gt;</code>.
+        desc_html: מוצג כפסקה על הדף הראשי ומשמש כתגית מטא. ניתן להשתמש בתגיות HTML, ובמיוחד ב־<code> &lt; a&gt; </code> ו־<code> &lt; em&gt; </code> .
         title: תיאור האתר
       site_description_extended:
         desc_html: מוצג על עמוד המידע הנוסף<br>ניתן להשתמש בתגיות HTML
@@ -155,7 +224,7 @@ he:
       confirmed: מאושר
       expires_in: פג תוקף ב-
       last_delivery: משלוח אחרון
-      title: WebSub
+      title: מנוי WebSub
       topic: נושא
     title: ניהול
   application_mailer:
@@ -323,7 +392,7 @@ he:
     lost_recovery_codes: קודי האחזור מאפשרים אחזור גישה לחשבון במידה ומכשירך אבד. במידה וקודי האחזור אבדו, ניתן לייצרם מחדש כאן. תוקף קודי האחזור הישנים יפוג.
     manual_instructions: 'במידה ולא ניתן לסרוק את קוד ה-QR אלא יש צורך להקליד אותו ידנית, להלן סוד כמוס בלתי מוצפן:'
     recovery_codes_regenerated: קודי האחזור יוצרו בהצלחה
-    recovery_instructions_html: במידה והגישה למכשירך תאבד, ניתן לייצר קודי אחזור למטה על מנת לאחזר גישה לחשבונך בכל עת. נא לשמור על קודי הגישה במקום בטוח )לדוגמא על ידי הדפסתם ושמירתם עם מסמכים חשובים אחרים, או שימוש בתוכנה ייעודית לניהול סיסמאות וסודות(
+    recovery_instructions_html: במידה והגישה למכשירך תאבד, ניתן לייצר קודי אחזור למטה על מנת לאחזר גישה לחשבונך בכל עת. <strong>נא לשמור על קודי הגישה במקום בטוח</strong>. לדוגמא על ידי הדפסתם ושמירתם עם מסמכים חשובים אחרים, או שימוש בתוכנה ייעודית לניהול סיסמאות וסודות.
     setup: הכנה
     wrong_code: הקוד שהוזן שגוי! האם הזמן בשרת והזמן במכשירך נכונים?
   users:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index a008d9cc4..3097fb22b 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -448,7 +448,7 @@ ja:
     expires_in_prompt: 無期限
     generate: 作成
     max_uses:
-      one: 1
+      one: '1'
       other: "%{count}"
     max_uses_prompt: 無制限
     prompt: リンクを生成・共有してこのインスタンスへの新規登録を受け付けることができます。
@@ -456,6 +456,14 @@ ja:
       expires_at: 有効期限
       uses: 使用
     title: 新規ユーザーの招待
+  keyword_mutes:
+    add_keyword: キーワードを追加
+    edit: 編集
+    edit_keyword: キーワードを編集
+    keyword: キーワード
+    match_whole_word: 単語全体が一致
+    remove: 削除
+    remove_all: すべて削除
   landing_strip_html: "<strong>%{name}</strong> さんはインスタンス %{link_to_root_path} のユーザーです。アカウントさえ持っていればフォローしたり会話したりできます。"
   landing_strip_signup_html: もしお持ちでないなら <a href="%{sign_up_path}">こちら</a> からサインアップできます。
   media_attachments:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index fd6351486..333bcc689 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -39,6 +39,7 @@ ko:
     followers: 팔로워
     following: 팔로잉
     media: 미디어
+    moved_html: "%{name}은 %{new_profile_link}으로 이동되었습니다:"
     nothing_here: 아무 것도 없습니다.
     people_followed_by: "%{name} 님이 팔로우 중인 계정"
     people_who_follow: "%{name} 님을 팔로우 중인 계정"
@@ -48,6 +49,7 @@ ko:
     reserved_username: 이 아이디는 예약되어 있습니다.
     roles:
       admin: Admin
+      moderator: 모드
     unfollow: 팔로우 해제
   admin:
     account_moderation_notes:
@@ -59,13 +61,18 @@ ko:
       destroyed_msg: 모더레이션 기록이 성공적으로 삭제되었습니다.
     accounts:
       are_you_sure: 정말로 실행하시겠습니까?
+      by_domain: 도메인
       confirm: 확인
       confirmed: 확인됨
+      disable: 비활성화
       disable_two_factor_authentication: 2단계 인증을 비활성화
+      disabled: 비활성화된
       display_name: 이름
       domain: 도메인
       edit: 편집
       email: E-mail
+      enable: 활성화
+      enabled: 활성화된
       feed_url: 피드 URL
       followers: 팔로워 수
       followers_url: 팔로워 URL
@@ -77,6 +84,7 @@ ko:
         local: 로컬
         remote: 리모트
         title: 위치
+      login_status: 로그인 상태
       media_attachments: 첨부된 미디어
       moderation:
         all: 전체
@@ -101,6 +109,10 @@ ko:
       reset: 초기화
       reset_password: 비밀번호 초기화
       resubscribe: 다시 구독
+      role: 권한
+      roles:
+        admin: 관리자
+        user: 사용자
       salmon_url: Salmon URL
       search: 검색
       shared_inbox_url: 공유된 inbox URL
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index cda771ce2..2410c1112 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -39,6 +39,7 @@ nl:
     followers: Volgers
     following: Volgend
     media: Media
+    moved_html: "%{name} is verhuisd naar %{new_profile_link}:"
     nothing_here: Hier is niets!
     people_followed_by: Mensen die %{name} volgt
     people_who_follow: Mensen die %{name} volgen
@@ -48,6 +49,7 @@ nl:
     reserved_username: Deze gebruikersnaam is gereserveerd
     roles:
       admin: Beheerder
+      moderator: Mod
     unfollow: Ontvolgen
   admin:
     account_moderation_notes:
@@ -59,13 +61,19 @@ nl:
       destroyed_msg: Verwijderen van opmerking voor moderatoren geslaagd!
     accounts:
       are_you_sure: Weet je het zeker?
+      by_domain: Domein
       confirm: Bevestigen
       confirmed: Bevestigd
+      demote: Degraderen
+      disable: Uitschakelen
       disable_two_factor_authentication: 2FA uitschakelen
+      disabled: Uitgeschakeld
       display_name: Weergavenaam
       domain: Domein
       edit: Bewerken
       email: E-mail
+      enable: Inschakelen
+      enabled: Ingeschakeld
       feed_url: Feed-URL
       followers: Volgers
       followers_url: Volgers-URL
@@ -77,7 +85,9 @@ nl:
         local: Lokaal
         remote: Extern
         title: Locatie
+      login_status: Aanmeld status
       media_attachments: Media-bijlagen
+      memorialize: Verander in memoriam
       moderation:
         all: Alles
         silenced: Genegeerd
@@ -94,6 +104,7 @@ nl:
       outbox_url: Outbox-URL
       perform_full_suspension: Volledig opschorten
       profile_url: Profiel-URL
+      promote: Promoten
       protocol: Protocol
       public: Openbaar
       push_subscription_expires: PuSH-abonnement verloopt op
@@ -101,6 +112,11 @@ nl:
       reset: Opnieuw
       reset_password: Wachtwoord opnieuw instellen
       resubscribe: Opnieuw abonneren
+      role: Permissies
+      roles:
+        admin: Beheerder
+        moderator: Moderateur
+        user: Persoon
       salmon_url: Salmon-URL
       search: Zoeken
       shared_inbox_url: Gedeelde inbox-URL
@@ -117,6 +133,24 @@ nl:
       unsubscribe: Opzeggen
       username: Gebruikersnaam
       web: Webapp
+    action_logs:
+      actions:
+        confirm_user: "%{name} bevestigd e-mailadres van persoon %{target}"
+        create_custom_emoji: "%{name} heeft de nieuwe emoji %{target} geupload"
+        create_domain_block: "%{name} heeft domein %{target} geblokkeerd"
+        create_email_domain_block: "%{name} heeft e-maildomein %{target} geblacklist"
+        demote_user: "%{name} heeft persoon %{target} gedegradeerd"
+        destroy_domain_block: "%{name} heeft domein %{target} vrijgegeven"
+        destroy_email_domain_block: "%{name} heeft e-maildomein %{target} gewhitelist"
+        destroy_status: "%{name} heeft status van %{target} verwijderd"
+        disable_2fa_user: "%{name} heeft tweefactor voorwaarden van persoon %{target} uitgeschakeld"
+        disable_custom_emoji: "%{name} heeft emoji %{target} uitgeschakeld"
+        disable_user: "%{name} heeft de login van persoon %{target} uitgeschakeld"
+        enable_custom_emoji: "%{name} heeft emoji %{target} ingeschakeld"
+        enable_user: "%{name} heeft de login voor persoon %{target} ingeschakeld"
+        memorialize_account: "%{name} heeft %{target}'s account gewijzigd in een memoriam pagina"
+        promote_user: "%{name} heeft persoon %{target} gepromoveerd"
+        reset_password_user: "%{name} heeft het wachtwoord van gebruiker %{target} opnieuw ingesteld"
     custom_emojis:
       copied_msg: Lokale kopie van emoji maken geslaagd
       copy: Kopiëren
@@ -156,7 +190,7 @@ nl:
         noop: Geen
         silence: Negeren
         suspend: Opschorten
-      severity: Zwaarte
+      severity: Strengheid
       show:
         affected_accounts:
           one: Eén account in de database aangepast
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index e5d036303..a9bad2d34 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -39,11 +39,12 @@ oc:
     followers: Seguidors
     following: Abonaments
     media: Mèdias
+    moved_html: "%{name} a mudat a %{new_profile_link} :"
     nothing_here: I a pas res aquí !
     people_followed_by: Lo mond que %{name} sèc
     people_who_follow: Lo mond que sègon %{name}
     posts: Tuts
-    posts_with_replies: Tuts amb responsas
+    posts_with_replies: Tuts e responsas
     remote_follow: Sègre a distància
     reserved_username: Aqueste nom d’utilizaire es reservat
     roles:
@@ -62,6 +63,7 @@ oc:
       by_domain: Domeni
       confirm: Confirmar
       confirmed: Confirmat
+      demote: Retrogradar
       disable: Desactivar
       disable_two_factor_authentication: Desactivar 2FA
       disabled: Desactivat
@@ -101,6 +103,7 @@ oc:
       outbox_url: URL Outbox
       perform_full_suspension: Botar en tren la suspension complèta
       profile_url: URL del perfil
+      promote: Promòure
       protocol: Protocòl
       public: Public
       push_subscription_expires: Fin de l’abonament PuSH
@@ -108,6 +111,11 @@ oc:
       reset: Reïnicializar
       reset_password: Reïnicializar lo senhal
       resubscribe: Se tornar abonar
+      role: Permissions
+      roles:
+        admin: Admin
+        moderator: Mod
+        user: Uitlizaire
       salmon_url: URL Salmon
       search: Cercar
       shared_inbox_url: URL de recepcion partejada
@@ -124,6 +132,32 @@ oc:
       unsubscribe: Se desabonar
       username: Nom d’utilizaire
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} confirmèt l’adreça a %{target}"
+        create_custom_emoji: "%{name} mandèt un nòu emoji %{target}"
+        create_domain_block: "%{name} bloquèt lo domeni %{target}"
+        create_email_domain_block: "%{name} botèt a la lista nègra lo domeni de corrièl %{target}"
+        demote_user: "%{name} retragradèt l‘utilizaire %{target}"
+        destroy_domain_block: "%{name} desbloquèt lo domeni %{target}"
+        destroy_email_domain_block: "%{name} botèt a la lista blanca lo domeni de corrièl %{target}"
+        destroy_status: "%{name} levèt l‘estatut a %{target}"
+        disable_2fa_user: "%{name} desactivèt l’autentificacion en dos temps per %{target}"
+        disable_custom_emoji: "%{name} desactivèt l‘emoji %{target}"
+        disable_user: "%{name} desactivèt la connexion per %{target}"
+        enable_custom_emoji: "%{name} activèt l‘emoji %{target}"
+        enable_user: "%{name} activèt la connexion per %{target}"
+        memorialize_account: "%{name} transformèt en memorial la pagina de perfil a %{target}"
+        promote_user: "%{name} promoguèt %{target}"
+        reset_password_user: "%{name} reïnicializèt lo senhal a %{target}"
+        resolve_report: "%{name} anullèt lo rapòrt de %{target}"
+        silence_account: "%{name} metèt en silenci lo compte a %{target}"
+        suspend_account: "%{name} susprenguèt lo compte a %{target}"
+        unsilence_account: "%{name} levèt lo silenci del compte a %{target}"
+        unsuspend_account: "%{name} restabliguèt lo compte a %{target}"
+        update_custom_emoji: "%{name} metèt a jorn l’emoji %{target}"
+        update_status: "%{name} metèt a jorn l’estatut a %{target}"
+      title: Audit log
     custom_emojis:
       copied_msg: Còpia locala de l’emoji ben creada
       copy: Copiar
@@ -196,6 +230,8 @@ oc:
       reset: Reïnicializar
       search: Cercar
       title: Instàncias conegudas
+    invites:
+      title: Covits
     reports:
       action_taken_by: Mesura menada per
       are_you_sure: Es segur ?
@@ -237,6 +273,9 @@ oc:
         open:
           desc_html: Autorizar lo monde a se marcar
           title: Inscripcions
+      show_staff_badge:
+        desc_html: Mostrar lo badge Personal sus la pagina de perfil
+        title: Mostrar lo badge personal
       site_description:
         desc_html: Afichada jos la forma de paragraf sus la pagina d’acuèlh e utilizada coma balisa meta.<br> Podètz utilizar de balisas HTML, coma <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
         title: Descripcion del site
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 19ee154ab..baa26f1dc 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -277,6 +277,9 @@ pl:
         deletion:
           desc_html: Pozwól każdemu na usunięcie konta
           title: Możliwość usunięcia
+        min_invite_role:
+          disabled: Nikt
+          title: Kto może zapraszać użytkowników
         open:
           desc_html: Pozwól każdemu na założenie konta
           title: Otwarta rejestracja
@@ -474,6 +477,7 @@ pl:
     acct: nazwa@domena nowego konta
     currently_redirecting: 'Obecnie Twoje konto przekierowuje do:'
     proceed: Zapisz
+    updated_msg: Pomyślnie zaktualizowano ustawienia i migracji Twojego konta!
   moderation:
     title: Moderacja
   notification_mailer:
@@ -689,6 +693,8 @@ pl:
 
       <p>Tekst bazuje na <a href="https://github.com/discourse/discourse">polityce prywatności Discourse</a>.</p>
     title: Zasady korzystania i polityka prywatności %{instance}
+  themes:
+    default: Mastodon
   time:
     formats:
       default: "%b %d, %Y, %H:%M"
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index de2b9c778..760bb69a2 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -39,6 +39,7 @@ pt-BR:
     followers: Seguidores
     following: Seguindo
     media: Mídia
+    moved_html: "%{name} se mudou para %{new_profile_link}:"
     nothing_here: Não há nada aqui!
     people_followed_by: Pessoas que %{name} segue
     people_who_follow: Pessoas que seguem %{name}
@@ -48,6 +49,7 @@ pt-BR:
     reserved_username: Este usuário está reservado
     roles:
       admin: Administrador
+      moderator: Moderador
     unfollow: Deixar de seguir
   admin:
     account_moderation_notes:
@@ -76,7 +78,7 @@ pt-BR:
       followers: Seguidores
       followers_url: URL de seguidores
       follows: Segue
-      inbox_url: Inbox URL
+      inbox_url: URL da caixa de entrada
       ip: IP
       location:
         all: Todos
@@ -115,7 +117,7 @@ pt-BR:
         admin: Administrador
         moderator: Moderador
         user: Usuário
-      salmon_url: Salmon URL
+      salmon_url: URL Salmon
       search: Pesquisar
       shared_inbox_url: URL da Inbox Compartilhada
       show:
@@ -131,18 +133,39 @@ pt-BR:
       unsubscribe: Desinscrever-se
       username: Nome de usuário
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} confirmou o endereço de e-mail do usuário %{target}"
+        create_custom_emoji: "%{name} enviou o emoji novo %{target}"
+        create_domain_block: "%{name} bloqueou o domínio %{target}"
+        create_email_domain_block: "%{name} colocou o domínio de e-mail %{target} na lista negra"
+        demote_user: "%{name} rebaixou o usuário %{target}"
+        destroy_domain_block: "%{name} desbloqueou o domínio %{target}"
+        destroy_email_domain_block: "%{name} retirou o domínio de e-mail %{target} da lista negra"
+        destroy_status: "%{name} removeu postagem feita por %{target}"
+        disable_2fa_user: "%{name} desabilitou a exigência de autenticação em dois passos para o usuário %{target}"
+        disable_custom_emoji: "%{name} desabilitou o emoji %{target}"
+        disable_user: "%{name} desabilitou o acesso para o usuário %{target}"
+        enable_custom_emoji: "%{name} habilitou o emoji %{target}"
+        enable_user: "%{name} habilitou o acesso para o usuário %{target}"
+        memorialize_account: "%{name} transformou a conta de %{target} em um memorial"
+        promote_user: "%{name} promoveu o usuário %{target}"
+        reset_password_user: "%{name} redefiniu a senha do usuário %{target}"
+        resolve_report: "%{name} dispensou o relatório %{target}"
+        silence_account: "%{name} silenciou a conta de %{target}"
+        suspend_account: "%{name} suspendeu a conta de %{target}"
     custom_emojis:
-      copied_msg: Cópia local do emoji criada com sucesso!
+      copied_msg: Cópia local do emoji criada com sucesso
       copy: Copiar
       copy_failed_msg: Não foi possível criar uma cópia local deste emoji
       created_msg: Emoji criado com sucesso!
       delete: Excluir
       destroyed_msg: Emoji deletado com sucesso!
       disable: Desabilitar
-      disabled_msg: Emoji desabilitado com sucesso!
+      disabled_msg: Emoji desabilitado com sucesso
       emoji: Emoji
       enable: Habilitar
-      enabled_msg: Emoji habilitado com sucesso!
+      enabled_msg: Emoji habilitado com sucesso
       image_hint: PNG de até 50KB
       listed: Listado
       new:
@@ -170,7 +193,7 @@ pt-BR:
           suspend: Suspensão
         title: Novo bloqueio de domínio
       reject_media: Rejeitar arquivos de mídia
-      reject_media_hint: Remove arquivos de mídia armazenados localmente e recusa quaisquer outros no futuro. Irrelevante para suspensões.
+      reject_media_hint: Remove arquivos de mídia armazenados localmente e recusa quaisquer outros no futuro. Irrelevante para suspensões
       severities:
         noop: Nenhum
         silence: Silêncio
@@ -236,7 +259,7 @@ pt-BR:
         username: Contate usuário
       registrations:
         closed_message:
-          desc_html: Exibido na página inicial quando cadastros estão fechados. Você pode usar tags HTML.
+          desc_html: Exibido na página inicial quando cadastros estão fechados. Você pode usar tags HTML
           title: Mensagem de cadastros fechados
         deletion:
           desc_html: Permitir que qualquer um delete a sua conta
@@ -248,10 +271,10 @@ pt-BR:
         desc_html: Parágrafo introdutório na página inicial e em meta tags. Você pode usar tags HTML, em especial <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
         title: Descrição da instância
       site_description_extended:
-        desc_html: Um ótimo lugar para seu código de conduta, regras, diretrizes e outras coisas para diferenciar a sua instância. Você pode usar tags HTML.
+        desc_html: Um ótimo lugar para seu código de conduta, regras, diretrizes e outras coisas para diferenciar a sua instância. Você pode usar tags HTML
         title: Informação estendida customizada
       site_terms:
-        desc_html: Você pode escrever a sua própria política de privacidade, termos de serviço, entre outras coisas.Você pode usar tags HTML.
+        desc_html: Você pode escrever a sua própria política de privacidade, termos de serviço, entre outras coisas. Você pode usar tags HTML
         title: Termos de serviço customizados
       site_title: Nome da instância
       thumbnail:
@@ -277,7 +300,7 @@ pt-BR:
       title: Postagens da conta
       with_media: Com mídia
     subscriptions:
-      callback_url: Callback URL
+      callback_url: URL de Callback
       confirmed: Confirmado
       expires_in: Expira em
       last_delivery: Última entrega
@@ -316,7 +339,7 @@ pt-BR:
     reset_password: Modificar senha
     set_new_password: Definir uma nova senha
   authorize_follow:
-    error: Infelizmente, ocorreu um erro quando visualizando a conta remota.
+    error: Infelizmente, ocorreu um erro ao buscar a conta remota
     follow: Seguir
     follow_request: 'Você mandou uma solicitação de seguidor para:'
     following: 'Sucesso! Você agora está seguindo:'
@@ -340,7 +363,7 @@ pt-BR:
       x_months: "%{count} meses"
       x_seconds: "%{count} segundos"
   deletes:
-    bad_password_msg: Boa tentativa, hackers! Senha incorreta.
+    bad_password_msg: Boa tentativa, hackers! Senha incorreta
     confirm_password: Insira a sua senha atual para verificar a sua identidade
     description_html: Isto vai <strong>permanente e irreversivelmente</strong> remover conteúdo de sua conta e desativá-la. O seu nome de usuário permanecerá reservado para previnir futuros roubos de identidade.
     proceed: Excluir conta
@@ -379,7 +402,7 @@ pt-BR:
     unlocked_warning_title: A sua conta não está trancada
   generic:
     changes_saved_msg: Mudanças salvas com sucesso!
-    powered_by: powered by %{link}
+    powered_by: graças a tecnologia de %{link}
     save_changes: Salvar mudanças
     validation_errors:
       one: Algo não está certo! Por favor, reveja o erro abaixo
@@ -392,13 +415,13 @@ pt-BR:
       following: Pessoas que você segue
       muting: Lista de silêncio
     upload: Enviar
-  in_memoriam_html: Em memória de
+  in_memoriam_html: Em memória.
   landing_strip_html: "<strong>%{name}</strong> é um usuário no %{link_to_root_path}. Você pode segui-lo ou interagir com ele se você tiver uma conta em qualquer lugar no fediverso."
   landing_strip_signup_html: Se não, você pode <a href="%{sign_up_path}">se cadastrar aqui</a>.
   media_attachments:
     validations:
-      images_and_video: Não é possível anexar um vídeo a uma postagem que já contém imagens.
-      too_many: Não é possível anexar mais de quatro imagens.
+      images_and_video: Não é possível anexar um vídeo a uma postagem que já contém imagens
+      too_many: Não é possível anexar mais de 4 imagens
   notification_mailer:
     digest:
       body: 'Aqui está um resumo do que você perdeu no %{instance} desde o seu último acesso em %{since}:'
@@ -417,7 +440,7 @@ pt-BR:
       subject: "%{name} está te seguindo"
     follow_request:
       body: "%{name} requisitou autorização para te seguir"
-      subject: 'Pending follower: %{name}'
+      subject: 'Seguidor pendente: %{name}'
     mention:
       body: 'Você foi mencionado por %{name} em:'
       subject: Você foi mencionado por %{name}
@@ -472,7 +495,7 @@ pt-BR:
       chrome: Chrome
       edge: Microsoft Edge
       firefox: Firefox
-      generic: Unknown browser
+      generic: Navegador desconhecido
       ie: Internet Explorer
       micro_messenger: MicroMessenger
       nokia: Nokia S40 Ovi Browser
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 140f6b71b..c476bac59 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -1,52 +1,98 @@
 ---
 pt:
   about:
-    about_mastodon_html: Mastodon é uma rede social <em>grátis e em código aberto</em>. Uma alternativa <em>descentralizada</em> às plataformas comerciais, que evita o risco de uma única empresa monopolizar a tua comunicação. Escolhe um servidor que confies, não importa qual, pois vais poder comunicar com todos os outros. Qualquer um pode criar uma instância Mastodon e participar nesta <em>rede social</em>.
+    about_hashtag_html: Estes são toots públicos marcados com <strong>#%{hashtag}</strong>. Podes interagir com eles se tiveres uma conta Mastodon.
+    about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos da web e software livre e gratuito. É descentralizado como e-mail.
     about_this: Sobre esta instância
     closed_registrations: Novos registos estão fechados nesta instância.
     contact: Contacto
+    contact_missing: Não definido
+    contact_unavailable: N/A
     description_headline: O que é o %{domain}?
     domain_count_after: outras instâncias
     domain_count_before: Ligado a
+    extended_description_html: |
+      <h3>Um bom lugar para regras</h3>
+      <p>A descrição da instância ainda não foi feita.</p>
+    features:
+      humane_approach_body: Aprendendo com erros de outras redes sociais, Mastodon tem como objetivo fazer decisões éticas de design para combater o utilização errada de redes sociais.
+      humane_approach_title: Uma abordagem mais humana
+      not_a_product_body: Mastodon não é uma rede comercial. Sem publicidade, sem recolha de dados ou portas fechadas. Não existe uma autoridade central.
+      not_a_product_title: Tu és uma pessoa, não um produto
+      real_conversation_body: Com 500 caracteres à sua disposição e suporte para conteúdo granular e avisos de conteúdo, podes te expressar da forma que desejares.
+      real_conversation_title: Feito para conversas reais
+      within_reach_body: Várias aplicações para iOS, Android e outras plataformas graças a um ecossistema de API amigável para desenvolvedores, permitem-te que te mantenhas em contacto com os teus amigos em qualquer lugar.
+      within_reach_title: Sempre ao teu alcance
+    find_another_instance: Encontra outra instância
+    generic_description: "%{domain} é um servidor na rede"
+    hosted_on: Mastodon em %{domain}
+    learn_more: Saber mais
     other_instances: Outras instâncias
     source_code: Código fonte
     status_count_after: publicações
     status_count_before: Que fizeram
     user_count_after: utilizadores
     user_count_before: Casa para
+    what_is_mastodon: O que é o Mastodon?
   accounts:
     follow: Seguir
     followers: Seguidores
     following: A seguir
+    media: Media
+    moved_html: "%{name} mudou-se para %{new_profile_link}:"
     nothing_here: Não há nada aqui!
     people_followed_by: Pessoas seguidas por %{name}
     people_who_follow: Pessoas que seguem %{name}
     posts: Posts
+    posts_with_replies: Posts e Respostas
     remote_follow: Seguir remotamente
+    reserved_username: Este nome de utilizadores é reservado
+    roles:
+      admin: Administrador
+      moderator: Moderador
     unfollow: Deixar de seguir
   admin:
+    account_moderation_notes:
+      account: Moderador
+      create: Criar
+      created_at: Data
+      created_msg: Nota de moderação criada com sucesso!
+      delete: Eliminar
+      destroyed_msg: Nota de moderação excluída com sucesso!
     accounts:
       are_you_sure: Tens a certeza?
+      by_domain: Domínio
       confirm: Confirme
       confirmed: Confirmado
+      demote: Rebaixar
+      disable: Desativar
+      disable_two_factor_authentication: Desativar 2FA
+      disabled: Desativado
       display_name: Nome a mostrar
       domain: Domínio
       edit: Editar
       email: E-mail
+      enable: Ativar
+      enabled: Ativado
       feed_url: URL do Feed
       followers: Seguidores
+      followers_url: URL dos seguidores
       follows: A seguir
+      inbox_url: URL da caixa de entrada
+      ip: IP
       location:
         all: Todos
         local: Local
         remote: Remoto
         title: Local
+      login_status: Estado de início de sessão
       media_attachments: Media anexa
       moderation:
         all: Todos
         silenced: Silenciados
         suspended: Supensos
         title: Moderação
+      moderation_notes: Notas de moderação
       most_recent_activity: Actividade mais recente
       most_recent_ip: IP mais recente
       not_subscribed: Não inscrito
@@ -56,10 +102,26 @@ pt:
         title: Ordem
       perform_full_suspension: Fazer suspensão completa
       profile_url: URL do perfil
+      promote: Promover
+      protocol: Protocolo
       public: Público
       push_subscription_expires: PuSH subscription expires
+      redownload: Atualizar avatar
+      reset: Restaurar
       reset_password: Reset palavra-passe
+      resubscribe: Reinscrever
+      role: Permissões
+      roles:
+        admin: Administrador
+        moderator: Moderador
+        user: Utilizador
       salmon_url: Salmon URL
+      search: Pesquisar
+      shared_inbox_url: URL da caixa de entrada compartilhada
+      show:
+        created_reports: Relatórios gerados por esta conta
+        report: relatórios
+        targeted_reports: Relatórios feitos sobre esta conta
       silence: Silêncio
       statuses: Status
       title: Contas
@@ -67,6 +129,14 @@ pt:
       undo_suspension: Desfazer supensão
       username: Usuário
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name} confirmou o endereço de e-mail do utilizador %{target}"
+        create_custom_emoji: "%{name} enviado emoji novo %{target}"
+        create_domain_block: "%{name} bloqueou o domínio %{target}"
+        create_email_domain_block: "%{name} adicionou na lista negra o domínio de correio electrónico %{target}"
+        demote_user: "%{name} rebaixou o utilizador %{target}"
+        destroy_domain_block: "%{name} desbloqueou o domínio %{target}"
     domain_blocks:
       add_new: Adicionar novo
       created_msg: Bloqueio do domínio está a ser processado
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index f8402af21..2ff3348f3 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -20,7 +20,7 @@ ca:
       sessions:
         otp: Introdueix el codi de dos factors des del teu telèfon o utilitza un dels teus codis de recuperació.
       user:
-        filtered_languages: Els idiomes seleccionats seran eliminats de les línies de temps públiques.
+        filtered_languages: Els idiomes seleccionats seran eliminats de les línies de temps públiques
     labels:
       defaults:
         avatar: Avatar
@@ -30,10 +30,12 @@ ca:
         data: Informació
         display_name: Mostrar nom
         email: Direcció de correu electrònic
+        expires_in: Caduca després
         filtered_languages: Idiomes filtrats
         header: Img. capçalera
         locale: Idioma
         locked: Fer privat aquest compte
+        max_uses: Nombre màxim d'usos
         new_password: Nova contrasenya
         note: Biografia
         otp_attempt: Codi de dos factors
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 9933093ca..3c5e467a2 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -30,10 +30,12 @@ de:
         data: Daten
         display_name: Anzeigename
         email: E-Mail-Adresse
+        expires_in: Gültig bis
         filtered_languages: Gefilterte Sprachen
         header: Kopfbild
         locale: Sprache
         locked: Gesperrtes Profil
+        max_uses: Max Verwendungen
         new_password: Neues Passwort
         note: Über mich
         otp_attempt: Zwei-Faktor-Authentisierungs-Code
@@ -54,6 +56,7 @@ de:
       interactions:
         must_be_follower: Benachrichtigungen von Nicht-Folgenden blockieren
         must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge
+        must_be_following_dm: Private Nachrichten von Profilen denen ich nicht folge blockieren
       notification_emails:
         digest: Schicke Übersichts-E-Mails
         favourite: E-Mail senden, wenn jemand meinen Beitrag favorisiert
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index ff1a40ccd..756f6b119 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -13,8 +13,9 @@ en:
         note:
           one: <span class="note-counter">1</span> character left
           other: <span class="note-counter">%{count}</span> characters left
+        setting_flavour: Affects how Mastodon looks when you're logged in from any device
         setting_noindex: Affects your public profile and status pages
-        setting_theme: Affects how Mastodon looks when you're logged in from any device.
+        setting_skin: Reskins the selected Mastodon flavour
       imports:
         data: CSV file exported from another Mastodon instance
       sessions:
@@ -45,10 +46,11 @@ en:
         setting_default_privacy: Post privacy
         setting_default_sensitive: Always mark media as sensitive
         setting_delete_modal: Show confirmation dialog before deleting a toot
+        setting_flavour: Flavour
         setting_noindex: Opt-out of search engine indexing
         setting_reduce_motion: Reduce motion in animations
+        setting_skin: Skin
         setting_system_font_ui: Use system's default font
-        setting_theme: Site theme
         setting_unfollow_modal: Show confirmation dialog before unfollowing someone
         severity: Severity
         type: Import type
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 63a0710d1..01fe2af4c 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -4,6 +4,7 @@ es:
     hints:
       defaults:
         avatar: PNG, GIF o JPG. Máximo 2MB. Será escalado a 120x120px
+        digest: Enviado tras un largo periodo de inactividad, con un resumen de las menciones que has recibido durante tu ausencia
         display_name:
           one: <span class="name-counter">1</span> caracter restante
           other: <span class="name-counter">%{count}</span> caracteres restantes
@@ -13,12 +14,13 @@ es:
           one: <span class="name-counter">1</span> caracter restante
           other: <span class="name-counter">%{count}</span> caracteres restantes
         setting_noindex: Afecta a tu perfil público y páginas de estado
+        setting_theme: Afecta al aspecto de Mastodon cuando te identificas desde cualquier dispositivo.
       imports:
         data: Archivo CSV exportado desde otra instancia de Mastodon
       sessions:
         otp: Ingresa el código de autenticación de dos factores de tu teléfono o usa uno de tus códigos de recuperación.
       user:
-        filtered_languages: Los lenguajes seleccionados serán removidos de tus líneas de tiempo públicas.
+        filtered_languages: Los idiomas seleccionados dejarán de mostrarse para ti en las líneas de tiempo públicas
     labels:
       defaults:
         avatar: Avatar
@@ -28,21 +30,33 @@ es:
         data: Información
         display_name: Mostrar nombre
         email: Dirección de correo electrónico
+        expires_in: Expirar tras
+        filtered_languages: Idiomas filtrados
         header: Img. cabecera
         locale: Idioma
         locked: Hacer privada esta cuenta
+        max_uses: Máx. número de usos
         new_password: Nueva contraseña
         note: Biografía
         otp_attempt: Código de dos factores
         password: Contraseña
+        setting_auto_play_gif: Reproducir automáticamente los GIFs animados
         setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot
         setting_default_privacy: Privacidad de publicaciones
+        setting_default_sensitive: Marcar siempre imágenes como sensibles
+        setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot
+        setting_noindex: Excluirse del indexado de motores de búsqueda
+        setting_reduce_motion: Reducir el movimiento de las animaciones
+        setting_system_font_ui: Utilizar la tipografía por defecto del sistema
+        setting_theme: Tema del sitio
+        setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien
         severity: Severidad
         type: Importar tipo
         username: Nombre de usuario
       interactions:
         must_be_follower: Bloquear notificaciones de personas que no te siguen
         must_be_following: Bloquear notificaciones de personas que no sigues
+        must_be_following_dm: Bloquear mensajes directos de la gente que no sigues
       notification_emails:
         digest: Enviar resumen de correos electrónicos
         favourite: Enviar correo electrónico cuando alguien de a favorito en su publicación
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 06ab018a7..2397e5161 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -30,10 +30,12 @@ fr:
         data: Données
         display_name: Nom public
         email: Adresse courriel
+        expires_in: Expire après
         filtered_languages: Langues filtrées
         header: Image d’en-tête
         locale: Langue
         locked: Verrouiller le compte
+        max_uses: Nombre maximum d'utilisations
         new_password: Nouveau mot de passe
         note: Présentation
         otp_attempt: Code d’identification à deux facteurs
@@ -54,6 +56,7 @@ fr:
       interactions:
         must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas
         must_be_following: Masquer les notifications des personnes que vous ne suivez pas
+        must_be_following_dm: Bloquer les messages directs des personnes que vous ne suivez pas
       notification_emails:
         digest: Envoyer des courriels récapitulatifs
         favourite: Envoyer un courriel lorsque quelqu’un ajoute mes statuts à ses favoris
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index d6af5e7ac..604236a73 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -4,6 +4,7 @@ he:
     hints:
       defaults:
         avatar: PNG, GIF או JPG. מקסימום 2MB. גודל התמונה יוקטן ל-120x120px
+        digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך
         display_name:
           one: נותרה אות<span class="name-counter">אחת</span>
           other: נותרו<span class="name-counter">%{count}</span> אותיות
@@ -12,12 +13,14 @@ he:
         note:
           one: נותרה אות<span class="note-counter">אחת</span>
           other: נותרו <span class="note-counter">%{count}</span> אותיות
+        setting_noindex: משפיע על הפרופיל הציבורי שלך ועמודי ההודעות
+        setting_theme: משפיע על המראה של מסטודון בעת החיבור המזוהה מכל מכשיר שהוא.
       imports:
         data: קובץ CSV שיוצא משרת מסטודון אחר
       sessions:
         otp: נא להקליד קוד אימות דו-שלבי ממכשירך או קוד אחזור גישה.
       user:
-        filtered_languages: בחירת שפות להסתרה מציר הזמן הציבורי שלך.
+        filtered_languages: שפות שנבחרו יוסתרו מציר הזמן הציבורי בשבילך
     labels:
       defaults:
         avatar: תמונת פרופיל
@@ -27,9 +30,12 @@ he:
         data: מידע
         display_name: שם להצגה
         email: כתובת דוא"ל
+        expires_in: תפוגה לאחר
+        filtered_languages: שפות מסוננות
         header: ראשה
         locale: שפה
         locked: הפוך חשבון לפרטי
+        max_uses: מספר מרבי של שימושים
         new_password: סיסמא חדשה
         note: אודות
         otp_attempt: קוד אימות דו-שלבי
@@ -37,12 +43,20 @@ he:
         setting_auto_play_gif: ניגון אוטומטי של גיפים
         setting_boost_modal: הצגת דיאלוג אישור לפני הדהוד
         setting_default_privacy: פרטיות ההודעות
+        setting_default_sensitive: תמיד לתת סימון "רגיש" למדיה
+        setting_delete_modal: להראות תיבת אישור לפני מחיקת חיצרוץ
+        setting_noindex: לבקש הסתרה ממנועי חיפוש
+        setting_reduce_motion: הפחתת תנועה בהנפשות
+        setting_system_font_ui: להשתמש בגופן ברירת המחדל של המערכת
+        setting_theme: ערכת העיצוב של האתר
+        setting_unfollow_modal: להראות תיבת אישור לפני הפסקת מעקב אחרי אחרים
         severity: חומרה
         type: סוג יבוא
         username: שם משתמש
       interactions:
         must_be_follower: חסימת התראות משאינם עוקבים
         must_be_following: חסימת התראות משאינם נעקבים
+        must_be_following_dm: חסימת הודעות ישירות מכותבים שאינם במעקב
       notification_emails:
         digest: שליחת הודעות דוא"ל מסכמות
         favourite: שליחת דוא"ל כשמחבבים חצרוץ
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index 5637bd848..f2847e7ca 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -4,23 +4,23 @@ nl:
     hints:
       defaults:
         avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 120x120px
-        digest: Wordt na een lange periode van inactiviteit verzonden, met een samenvatting van vermeldingen tijdens je afwezigheid.
+        digest: Wordt na een lange periode van inactiviteit verzonden met een samenvatting van vermeldingen tijdens je afwezigheid
         display_name:
           one: <span class="name-counter">1</span> teken over
           other: <span class="name-counter">%{count}</span> tekens over
         header: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 700x335px
-        locked: Vereist dat je handmatig volgers moet accepteren en stelt de privacy van toots standaard in op alleen volgers
+        locked: Vereist dat je handmatig volgers moet accepteren
         note:
           one: <span class="note-counter">1</span> teken over
           other: <span class="note-counter">%{count}</span> tekens over
         setting_noindex: Heeft invloed op jouw openbare profiel en toots
-        setting_theme: Heeft invloed op hoe de webapp van Mastodon er uit ziet, op elk apparaat waarmee je inlogt.
+        setting_theme: Heeft invloed op hoe Mastodon eruitziet op elk apparaat waarmee je inlogt.
       imports:
         data: CSV-bestand dat op een andere Mastodon-server werd geëxporteerd
       sessions:
         otp: Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcode's.
       user:
-        filtered_languages: De geselecteerde talen worden uit de lokale en globale tijdlijn verwijderd.
+        filtered_languages: De geselecteerde talen worden uit de lokale en globale tijdlijn verwijderd
     labels:
       defaults:
         avatar: Avatar
@@ -30,10 +30,12 @@ nl:
         data: Gegevens
         display_name: Weergavenaam
         email: E-mailadres
+        expires_in: Vervalt na
         filtered_languages: Talen filteren
         header: Omslagfoto
         locale: Taal
         locked: Maak account besloten
+        max_uses: Max aantal keer te gebruiken
         new_password: Nieuwe wachtwoord
         note: Bio
         otp_attempt: Tweestaps-aanmeldcode
@@ -46,12 +48,15 @@ nl:
         setting_noindex: Jouw toots niet door zoekmachines laten indexeren
         setting_reduce_motion: Langzamere animaties
         setting_system_font_ui: Standaardlettertype van jouw systeem gebruiken
+        setting_theme: Site thema
         setting_unfollow_modal: Vraag voor het ontvolgen van iemand een bevestiging
+        severity: Strengheid
         type: Importtype
         username: gebruikersnaam
       interactions:
         must_be_follower: Blokkeer meldingen van mensen die jou niet volgen
         must_be_following: Blokkeer meldingen van mensen die jij niet volgt
+        must_be_following_dm: Blokkeer directe berichten van mensen die jij niet volgt
       notification_emails:
         digest: Verstuur periodiek e-mails met een samenvatting
         favourite: Verstuur een e-mail wanneer iemand jouw toot als favoriet markeert
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 9d60e0171..2ed0e3329 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -4,7 +4,7 @@ pt-BR:
     hints:
       defaults:
         avatar: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 120x120px
-        digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência.
+        digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência
         display_name:
           one: <span class="name-counter">1</span> caracter restante
           other: <span class="name-counter">%{count}</span> caracteres restantes
@@ -20,7 +20,7 @@ pt-BR:
       sessions:
         otp: Insira o código de autenticação do seu celular ou use um dos códigos de recuperação.
       user:
-        filtered_languages: Selecione os idiomas que devem ser removidos de suas timelines públicas.
+        filtered_languages: Selecione os idiomas que devem ser removidos de suas timelines públicas
     labels:
       defaults:
         avatar: Avatar
@@ -30,10 +30,12 @@ pt-BR:
         data: Dados
         display_name: Nome de exibição
         email: Endereço de e-mail
+        expires_in: Expira em
         filtered_languages: Idiomas filtrados
         header: Cabeçalho
         locale: Idioma
         locked: Trancar conta
+        max_uses: Número máximo de usos
         new_password: Nova senha
         note: Bio
         otp_attempt: Código de autenticação em dois passos
@@ -54,6 +56,7 @@ pt-BR:
       interactions:
         must_be_follower: Bloquear notificações de não-seguidores
         must_be_following: Bloquear notificações de pessoas que você não segue
+        must_be_following_dm: Bloquear mensagens diretas de pessoas que você não segue
       notification_emails:
         digest: Mandar e-mails com relatórios
         favourite: Mandar um e-mail quando alguém favoritar suas postagens
diff --git a/config/locales/simple_form.pt.yml b/config/locales/simple_form.pt.yml
index 0df7a9bb9..a5afd02d3 100644
--- a/config/locales/simple_form.pt.yml
+++ b/config/locales/simple_form.pt.yml
@@ -30,6 +30,7 @@ pt:
         password: Palavra-passe
         setting_boost_modal: Pedir confirmação antes de partilhar um post
         setting_default_privacy: Privacidade padrão de posts
+        setting_reduce_motion: Reduzir movimento em animações
         severity: Severity
         type: Import type
         username: Utilizador
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 23a1f59da..b1888f4e3 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -26,10 +26,12 @@ zh-CN:
         data: 数据文件
         display_name: 昵称
         email: 电子邮件地址
+        expires_in: 失效时间
         filtered_languages: 语言过滤
         header: 个人资料页横幅图片
         locale: 语言
         locked: 保护你的帐户(锁嘟)
+        max_uses: 最大使用次数
         new_password: 新密码
         note: 简介
         otp_attempt: 双重认证代码
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index ec913113f..cd087c3e8 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -2,10 +2,10 @@
 zh-CN:
   about:
     about_hashtag_html: 这里展示的是带有话题标签 <strong>#%{hashtag}</strong> 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。
-    about_mastodon_html: Mastodon(长毛象)是一个基于开放式网络协议和自由、开源软件建立的社交网络,有着类似于电子邮件的分布式设计。
+    about_mastodon_html: Mastodon(长毛象)是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。
     about_this: 关于本实例
     closed_registrations: 这个实例目前没有开放注册。不过,你可以前往其他实例注册一个帐户,同样可以加入到这个网络中哦!
-    contact: 联络
+    contact: 联系方式
     contact_missing: 未设定
     contact_unavailable: 未公开
     description_headline: 关于 %{domain}
@@ -46,7 +46,7 @@ zh-CN:
     posts: 嘟文
     posts_with_replies: 嘟文和回复
     remote_follow: 跨站关注
-    reserved_username: 此用户名已保留
+    reserved_username: 此用户名已被保留
     roles:
       admin: 管理员
       moderator: 协管
@@ -56,9 +56,9 @@ zh-CN:
       account: 管理员
       create: 新建
       created_at: 日期
-      created_msg: 管理记录建立成功!
+      created_msg: 管理备忘建立成功!
       delete: 删除
-      destroyed_msg: 管理记录删除成功!
+      destroyed_msg: 管理备忘删除成功!
     accounts:
       are_you_sure: 你确定吗?
       by_domain: 域名
@@ -93,7 +93,7 @@ zh-CN:
         silenced: 已隐藏
         suspended: 已封禁
         title: 帐户状态
-      moderation_notes: 管理记录
+      moderation_notes: 管理备忘
       most_recent_activity: 最后一次活跃的时间
       most_recent_ip: 最后一次活跃的 IP 地址
       not_subscribed: 未订阅
@@ -116,7 +116,7 @@ zh-CN:
       roles:
         admin: 管理员
         moderator: 协管
-        user: 用户
+        user: 普通用户
       salmon_url: Salmon URL
       search: 搜索
       shared_inbox_url: 公用收件箱(Shared Inbox)URL
@@ -133,6 +133,32 @@ zh-CN:
       unsubscribe: 取消订阅
       username: 用户名
       web: 站内页面
+    action_logs:
+      actions:
+        confirm_user: "%{name} 确认了用户 %{target} 的电子邮件地址"
+        create_custom_emoji: "%{name} 添加了新的自定义表情 %{target}"
+        create_domain_block: "%{name} 屏蔽了域名 %{target}"
+        create_email_domain_block: "%{name} 屏蔽了电子邮件域名 %{target}"
+        demote_user: "%{name} 对用户 %{target} 进行了降任操作"
+        destroy_domain_block: "%{name} 解除了对域名 %{target} 的屏蔽"
+        destroy_email_domain_block: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽"
+        destroy_status: "%{name} 删除了 %{target} 的嘟文"
+        disable_2fa_user: "%{name} 停用了用户 %{target} 的双重认证"
+        disable_custom_emoji: "%{name} 停用了自定义表情 %{target}"
+        disable_user: "%{name} 将用户 %{target} 设置为禁止登录"
+        enable_custom_emoji: "%{name} 启用了自定义表情 %{target}"
+        enable_user: "%{name} 将用户 %{target} 设置为允许登录"
+        memorialize_account: "%{name} 将 %{target} 的帐户设置为追悼帐户"
+        promote_user: "%{name} 对用户 %{target} 进行了升任操作"
+        reset_password_user: "%{name} 重置了用户 %{target} 的密码"
+        resolve_report: "%{name} 处理了举报 %{target}"
+        silence_account: "%{name} 隐藏了用户 %{target}"
+        suspend_account: "%{name} 封禁了用户 %{target}"
+        unsilence_account: "%{name} 解除了用户 %{target} 的隐藏状态"
+        unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态"
+        update_custom_emoji: "%{name} 更新了自定义表情 %{target}"
+        update_status: "%{name} 刷新了 %{target} 的嘟文"
+      title: 运营日志
     custom_emojis:
       copied_msg: 成功将表情复制到本地
       copy: 复制
@@ -156,14 +182,14 @@ zh-CN:
       unlisted: 已隐藏
       update_failed_msg: 表情更新失败!
       updated_msg: 表情更新成功!
-      upload: 上传
+      upload: 上传新表情
     domain_blocks:
       add_new: 添加新条目
       created_msg: 正在进行域名屏蔽
       destroyed_msg: 域名屏蔽已撤销
       domain: 域名
       new:
-        create: 添加域名屏蔽
+        create: 添加屏蔽
         hint: 域名屏蔽不会阻止该域名下的帐户进入本站的数据库,但是会对来自这个域名的帐户自动进行预先设置的管理操作。
         severity:
           desc_html: 选择<strong>自动隐藏</strong>会将该域名下帐户发送的嘟文设置为仅关注者可见;选择<strong>自动封禁</strong>会将该域名下帐户发送的嘟文、媒体文件以及个人资料数据从本实例上删除;如果你只是想拒绝接收来自该域名的任何媒体文件,请选择<strong>无</strong>。
@@ -194,7 +220,7 @@ zh-CN:
       destroyed_msg: 电子邮件域名屏蔽删除成功
       domain: 域名
       new:
-        create: 添加屏蔽
+        create: 添加域名
         title: 添加电子邮件域名屏蔽
       title: 电子邮件域名屏蔽
     instances:
@@ -203,6 +229,13 @@ zh-CN:
       reset: 重置
       search: 搜索
       title: 已知实例
+    invites:
+      filter:
+        all: 全部
+        available: 可用
+        expired: 已失效
+        title: 筛选
+      title: 邀请用户
     reports:
       action_taken_by: 操作执行者
       are_you_sure: 你确定吗?
@@ -241,6 +274,9 @@ zh-CN:
         deletion:
           desc_html: 允许所有人删除自己的帐户
           title: 开放删除帐户权限
+        min_invite_role:
+          disabled: 没有人
+          title: 允许发送邀请的用户组
         open:
           desc_html: 允许任何人建立一个帐户
           title: 开放注册
@@ -314,6 +350,8 @@ zh-CN:
     invalid_reset_password_token: 密码重置令牌无效或已过期。请重新发起重置密码请求。
     login: 登录
     logout: 登出
+    migrate_account: 迁移到另一个帐户
+    migrate_account_html: 如果你希望引导其他人关注另一个帐户,请<a href="%{path}">点击这里设置</a>。
     register: 注册
     resend_confirmation: 重新发送确认邮件
     reset_password: 重置密码
@@ -348,7 +386,7 @@ zh-CN:
     description_html: 继续操作将会<strong>永久地、不可撤销地</strong>删除你帐户中的内容,并冻结你的帐户。你的用户名将会被保留,以防有人冒用你的身份。
     proceed: 删除帐户
     success_msg: 你的帐户已经成功删除
-    warning_html: 我们只能保证本实例上的内容已经被彻底删除。对于已经被广泛传播的内容,它们在本实例以外的某些地方可能仍然可见。此外,失去连接的服务器以及停止接收订阅的服务器上的数据亦无法删除。
+    warning_html: 我们只能保证本实例上的内容将会被彻底删除。对于已经被广泛传播的内容,它们在本实例以外的某些地方可能仍然可见。此外,失去连接的服务器以及停止接收订阅的服务器上的数据亦无法删除。
     warning_title: 关于已传播的内容的警告
   errors:
     '403': 无权查看
@@ -394,12 +432,37 @@ zh-CN:
       muting: 隐藏列表
     upload: 上传
   in_memoriam_html: 谨此悼念。
+  invites:
+    delete: 停用
+    expired: 已失效
+    expires_in:
+      '1800': 30 分钟后
+      '21600': 6 小时后
+      '3600': 1 小时后
+      '43200': 12 小时后
+      '86400': 1 天后
+    expires_in_prompt: 永不过期
+    generate: 生成邀请链接
+    max_uses: "%{count} 次"
+    max_uses_prompt: 无限制
+    prompt: 生成可供分享的链接以便邀请他人在本实例注册
+    table:
+      expires_at: 失效时间
+      uses: 已使用次数
+    title: 邀请用户
   landing_strip_html: "<strong>%{name}</strong> 是一位来自 %{link_to_root_path} 的用户。如果你想关注他们或者与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。"
   landing_strip_signup_html: 还没有这种帐户?你可以<a href="%{sign_up_path}">在本站注册一个</a>。
   media_attachments:
     validations:
       images_and_video: 无法在嘟文中同时插入视频和图片
       too_many: 最多只能添加 4 张图片
+  migrations:
+    acct: 新帐户的 用户名@域名
+    currently_redirecting: 目前你的个人资料页显示的新帐户是:
+    proceed: 保存
+    updated_msg: 帐户迁移设置更新成功!
+  moderation:
+    title: 运营
   notification_mailer:
     digest:
       body: 自从你最后一次(时间是%{since})登录 %{instance} 以来,你错过了这些嘟嘟滴滴:
@@ -508,8 +571,9 @@ zh-CN:
     development: 开发
     edit_profile: 更改个人信息
     export: 导出
-    followers: 授权的关注者
+    followers: 已授权的关注者
     import: 导入
+    migrate: 帐户迁移
     notifications: 通知
     preferences: 首选项
     settings: 设置
diff --git a/config/settings.yml b/config/settings.yml
index 01478972c..5aad45da2 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -27,7 +27,8 @@ defaults: &defaults
   reduce_motion: false
   system_font_ui: false
   noindex: false
-  theme: 'glitch'
+  flavour: 'glitch'
+  skin: 'default'
   notification_emails:
     follow: false
     reblog: false
diff --git a/config/webpack/configuration.js b/config/webpack/configuration.js
index 74f75d89b..9cdd6f934 100644
--- a/config/webpack/configuration.js
+++ b/config/webpack/configuration.js
@@ -1,25 +1,57 @@
 // Common configuration for webpacker loaded from config/webpacker.yml
 
-const { basename, dirname, join, resolve } = require('path');
+const { basename, dirname, extname, join, resolve } = require('path');
 const { env } = require('process');
 const { safeLoad } = require('js-yaml');
-const { readFileSync } = require('fs');
+const { lstatSync, readFileSync } = require('fs');
 const glob = require('glob');
 
 const configPath = resolve('config', 'webpacker.yml');
 const loadersDir = join(__dirname, 'loaders');
 const settings = safeLoad(readFileSync(configPath), 'utf8')[env.NODE_ENV];
-const themeFiles = glob.sync('app/javascript/themes/*/theme.yml');
-const themes = {};
+const flavourFiles = glob.sync('app/javascript/flavours/*/theme.yml');
+const skinFiles = glob.sync('app/javascript/skins/*/*');
+const flavours = {};
 
-for (let i = 0; i < themeFiles.length; i++) {
-  const themeFile = themeFiles[i];
-  const data = safeLoad(readFileSync(themeFile), 'utf8');
+const core = function () {
+  const coreFile = resolve('app', 'javascript', 'core', 'theme.yml');
+  const data = safeLoad(readFileSync(coreFile), 'utf8');
   if (!data.pack_directory) {
-    data.pack_directory = dirname(themeFile);
+    data.pack_directory = dirname(coreFile);
   }
-  if (data.pack) {
-    themes[basename(dirname(themeFile))] = data;
+  return data.pack ? data : {};
+}();
+
+for (let i = 0; i < flavourFiles.length; i++) {
+  const flavourFile = flavourFiles[i];
+  const data = safeLoad(readFileSync(flavourFile), 'utf8');
+  data.name = basename(dirname(flavourFile));
+  data.skin = {};
+  if (!data.pack_directory) {
+    data.pack_directory = dirname(flavourFile);
+  }
+  if (data.pack && typeof data.pack === 'object') {
+    flavours[data.name] = data;
+  }
+}
+
+for (let i = 0; i < skinFiles.length; i++) {
+  const skinFile = skinFiles[i];
+  let skin = basename(skinFile);
+  const name = basename(dirname(skinFile));
+  if (!flavours[name]) {
+    continue;
+  }
+  const data = flavours[name].skin;
+  if (lstatSync(skinFile).isDirectory()) {
+    data[skin] = {};
+    const skinPacks = glob.sync(resolve(skinFile, '*.{css,scss}'));
+    for (let j = 0; j < skinPacks.length; j++) {
+      const pack = skinPacks[i];
+      data[skin][basename(pack, extname(pack))] = pack;
+    }
+  } else if ((skin = skin.match(/^(.*)\.s?css$/i))) {
+    data[skin[1]] = { common: skinFile };
   }
 }
 
@@ -43,7 +75,8 @@ const output = {
 
 module.exports = {
   settings,
-  themes,
+  core,
+  flavours,
   env,
   loadersDir,
   output,
diff --git a/config/webpack/generateLocalePacks.js b/config/webpack/generateLocalePacks.js
index cd3bed50c..a943589f7 100644
--- a/config/webpack/generateLocalePacks.js
+++ b/config/webpack/generateLocalePacks.js
@@ -57,7 +57,7 @@ Object.keys(glitchMessages).forEach(function (key) {
 //
 import messages from '../../app/javascript/mastodon/locales/${locale}.json';
 import localeData from ${JSON.stringify(localeDataPath)};
-import { setLocale } from '../../app/javascript/mastodon/locales';
+import { setLocale } from 'locales';
 ${glitchInject}
 setLocale({messages: mergedMessages, localeData: localeData});
 `;
diff --git a/config/webpack/shared.js b/config/webpack/shared.js
index 5d176db4e..e4b057ffb 100644
--- a/config/webpack/shared.js
+++ b/config/webpack/shared.js
@@ -1,38 +1,60 @@
 // Note: You must restart bin/webpack-dev-server for changes to take effect
 
 const webpack = require('webpack');
-const { basename, dirname, join, relative, resolve } = require('path');
+const { basename, join, resolve } = require('path');
 const { sync } = require('glob');
 const ExtractTextPlugin = require('extract-text-webpack-plugin');
 const ManifestPlugin = require('webpack-manifest-plugin');
 const extname = require('path-complete-extname');
-const { env, settings, themes, output, loadersDir } = require('./configuration.js');
+const { env, settings, core, flavours, output, loadersDir } = require('./configuration.js');
 const localePackPaths = require('./generateLocalePacks');
 
-const extensionGlob = `**/*{${settings.extensions.join(',')}}*`;
-const entryPath = join(settings.source_path, settings.source_entry_path);
-const packPaths = sync(join(entryPath, extensionGlob));
+function reducePacks (data, into = {}) {
+  if (!data.pack) {
+    return into;
+  }
+  Object.keys(data.pack).reduce((map, entry) => {
+    const pack = data.pack[entry];
+    if (!pack) {
+      return map;
+    }
+    const packFile = typeof pack === 'string' ? pack : pack.filename;
+    if (packFile) {
+      map[data.name ? `flavours/${data.name}/${entry}` : `core/${entry}`] = resolve(data.pack_directory, packFile);
+    }
+    return map;
+  }, into);
+  if (data.name) {
+    Object.keys(data.skin).reduce((map, entry) => {
+      const skin = data.skin[entry];
+      const skinName = entry;
+      if (!skin) {
+        return map;
+      }
+      Object.keys(skin).reduce((map, entry) => {
+        const packFile = skin[entry];
+        if (!packFile) {
+          return map;
+        }
+        map[`skins/${data.name}/${skinName}/${entry}`] = resolve(packFile);
+        return map;
+      }, into);
+      return map;
+    }, into);
+  }
+  return into;
+}
 
 module.exports = {
   entry: Object.assign(
-    packPaths.reduce((map, entry) => {
-      const localMap = map;
-      const namespace = relative(join(entryPath), dirname(entry));
-      localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry);
-      return localMap;
-    }, {}),
+    { locales: resolve('app', 'javascript', 'locales') },
     localePackPaths.reduce((map, entry) => {
       const localMap = map;
       localMap[basename(entry, extname(entry, extname(entry)))] = resolve(entry);
       return localMap;
     }, {}),
-    Object.keys(themes).reduce(
-      (themePaths, name) => {
-        const themeData = themes[name];
-        themePaths[`themes/${name}`] = resolve(themeData.pack_directory, themeData.pack);
-        return themePaths;
-      }, {}
-    )
+    reducePacks(core),
+    Object.keys(flavours).reduce((map, entry) => reducePacks(flavours[entry], map), {})
   ),
 
   output: {
@@ -64,7 +86,7 @@ module.exports = {
       writeToFileEmit: true,
     }),
     new webpack.optimize.CommonsChunkPlugin({
-      name: 'common',
+      name: 'locales',
       minChunks: Infinity, // It doesn't make sense to use common chunks with multiple frontend support.
     }),
   ],
diff --git a/config/webpacker.yml b/config/webpacker.yml
index 8d8470651..50d95813a 100644
--- a/config/webpacker.yml
+++ b/config/webpacker.yml
@@ -2,7 +2,6 @@
 
 default: &default
   source_path: app/javascript
-  source_entry_path: packs
   public_output_path: packs
   cache_path: tmp/cache/webpacker
 
@@ -13,17 +12,6 @@ default: &default
   # Reload manifest.json on all requests so we reload latest compiled packs
   cache_manifest: false
 
-  extensions:
-    - .js
-    - .sass
-    - .scss
-    - .css
-    - .png
-    - .svg
-    - .gif
-    - .jpeg
-    - .jpg
-
 development:
   <<: *default
   compile: true