about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.md666
-rw-r--r--CHANGELOG.md33
-rw-r--r--Gemfile4
-rw-r--r--Gemfile.lock33
-rw-r--r--app/controllers/api/v1/instances/activity_controller.rb1
-rw-r--r--app/controllers/api/v1/instances/peers_controller.rb1
-rw-r--r--app/controllers/api/v1/instances_controller.rb1
-rw-r--r--app/controllers/api/v1/streaming_controller.rb14
-rw-r--r--app/controllers/api/v1/timelines/home_controller.rb6
-rw-r--r--app/controllers/auth/sessions_controller.rb1
-rw-r--r--app/javascript/flavours/glitch/actions/timelines.js2
-rw-r--r--app/javascript/flavours/glitch/components/column_back_button.js14
-rw-r--r--app/javascript/flavours/glitch/components/column_header.js14
-rw-r--r--app/javascript/flavours/glitch/components/extended_video_player.js63
-rw-r--r--app/javascript/flavours/glitch/components/gifv.js75
-rw-r--r--app/javascript/flavours/glitch/components/missing_indicator.js23
-rw-r--r--app/javascript/flavours/glitch/components/regeneration_indicator.js18
-rw-r--r--app/javascript/flavours/glitch/components/status_content.js6
-rw-r--r--app/javascript/flavours/glitch/components/status_list.js15
-rw-r--r--app/javascript/flavours/glitch/features/account_timeline/index.js2
-rw-r--r--app/javascript/flavours/glitch/features/generic_not_found/index.js2
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js36
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/media_modal.js6
-rw-r--r--app/javascript/flavours/glitch/styles/components/modal.scss3
-rw-r--r--app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss30
-rw-r--r--app/javascript/mastodon/actions/timelines.js2
-rw-r--r--app/javascript/mastodon/components/extended_video_player.js63
-rw-r--r--app/javascript/mastodon/components/gifv.js75
-rw-r--r--app/javascript/mastodon/components/missing_indicator.js23
-rw-r--r--app/javascript/mastodon/components/regeneration_indicator.js18
-rw-r--r--app/javascript/mastodon/components/status_content.js8
-rw-r--r--app/javascript/mastodon/components/status_list.js15
-rw-r--r--app/javascript/mastodon/features/account_timeline/index.js1
-rw-r--r--app/javascript/mastodon/features/compose/components/poll_form.js4
-rw-r--r--app/javascript/mastodon/features/generic_not_found/index.js2
-rw-r--r--app/javascript/mastodon/features/ui/components/focal_point_modal.js36
-rw-r--r--app/javascript/mastodon/features/ui/components/media_modal.js6
-rw-r--r--app/javascript/mastodon/locales/ar.json20
-rw-r--r--app/javascript/mastodon/locales/ast.json2
-rw-r--r--app/javascript/mastodon/locales/bg.json4
-rw-r--r--app/javascript/mastodon/locales/bn.json2
-rw-r--r--app/javascript/mastodon/locales/br.json4
-rw-r--r--app/javascript/mastodon/locales/ca.json4
-rw-r--r--app/javascript/mastodon/locales/co.json2
-rw-r--r--app/javascript/mastodon/locales/cs.json6
-rw-r--r--app/javascript/mastodon/locales/cy.json2
-rw-r--r--app/javascript/mastodon/locales/da.json10
-rw-r--r--app/javascript/mastodon/locales/de.json18
-rw-r--r--app/javascript/mastodon/locales/defaultMessages.json59
-rw-r--r--app/javascript/mastodon/locales/el.json16
-rw-r--r--app/javascript/mastodon/locales/en.json2
-rw-r--r--app/javascript/mastodon/locales/eo.json4
-rw-r--r--app/javascript/mastodon/locales/es-AR.json12
-rw-r--r--app/javascript/mastodon/locales/es.json16
-rw-r--r--app/javascript/mastodon/locales/et.json2
-rw-r--r--app/javascript/mastodon/locales/eu.json36
-rw-r--r--app/javascript/mastodon/locales/fa.json2
-rw-r--r--app/javascript/mastodon/locales/fi.json2
-rw-r--r--app/javascript/mastodon/locales/fr.json26
-rw-r--r--app/javascript/mastodon/locales/ga.json2
-rw-r--r--app/javascript/mastodon/locales/gl.json16
-rw-r--r--app/javascript/mastodon/locales/he.json2
-rw-r--r--app/javascript/mastodon/locales/hi.json2
-rw-r--r--app/javascript/mastodon/locales/hr.json2
-rw-r--r--app/javascript/mastodon/locales/hu.json18
-rw-r--r--app/javascript/mastodon/locales/hy.json2
-rw-r--r--app/javascript/mastodon/locales/id.json82
-rw-r--r--app/javascript/mastodon/locales/io.json2
-rw-r--r--app/javascript/mastodon/locales/it.json2
-rw-r--r--app/javascript/mastodon/locales/ja.json4
-rw-r--r--app/javascript/mastodon/locales/ka.json2
-rw-r--r--app/javascript/mastodon/locales/kk.json2
-rw-r--r--app/javascript/mastodon/locales/ko.json2
-rw-r--r--app/javascript/mastodon/locales/lt.json4
-rw-r--r--app/javascript/mastodon/locales/lv.json4
-rw-r--r--app/javascript/mastodon/locales/mk.json4
-rw-r--r--app/javascript/mastodon/locales/ms.json4
-rw-r--r--app/javascript/mastodon/locales/nl.json2
-rw-r--r--app/javascript/mastodon/locales/nn.json242
-rw-r--r--app/javascript/mastodon/locales/no.json2
-rw-r--r--app/javascript/mastodon/locales/oc.json8
-rw-r--r--app/javascript/mastodon/locales/pl.json56
-rw-r--r--app/javascript/mastodon/locales/pt-BR.json2
-rw-r--r--app/javascript/mastodon/locales/pt-PT.json2
-rw-r--r--app/javascript/mastodon/locales/ro.json2
-rw-r--r--app/javascript/mastodon/locales/ru.json2
-rw-r--r--app/javascript/mastodon/locales/sk.json6
-rw-r--r--app/javascript/mastodon/locales/sl.json2
-rw-r--r--app/javascript/mastodon/locales/sq.json2
-rw-r--r--app/javascript/mastodon/locales/sr-Latn.json2
-rw-r--r--app/javascript/mastodon/locales/sr.json2
-rw-r--r--app/javascript/mastodon/locales/sv.json28
-rw-r--r--app/javascript/mastodon/locales/ta.json2
-rw-r--r--app/javascript/mastodon/locales/te.json2
-rw-r--r--app/javascript/mastodon/locales/th.json10
-rw-r--r--app/javascript/mastodon/locales/tr.json2
-rw-r--r--app/javascript/mastodon/locales/uk.json10
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json2
-rw-r--r--app/javascript/mastodon/locales/zh-HK.json2
-rw-r--r--app/javascript/mastodon/locales/zh-TW.json2
-rw-r--r--app/javascript/styles/mastodon/components.scss33
-rw-r--r--app/javascript/styles/mastodon/introduction.scss3
-rw-r--r--app/lib/feed_manager.rb106
-rw-r--r--app/lib/spam_check.rb9
-rw-r--r--app/models/account.rb9
-rw-r--r--app/models/admin/account_action.rb12
-rw-r--r--app/models/concerns/remotable.rb2
-rw-r--r--app/models/form/admin_settings.rb2
-rw-r--r--app/models/home_feed.rb16
-rw-r--r--app/models/media_attachment.rb3
-rw-r--r--app/models/status.rb4
-rw-r--r--app/models/tag.rb3
-rw-r--r--app/models/trending_tags.rb2
-rw-r--r--app/services/hashtag_query_service.rb4
-rw-r--r--app/validators/poll_validator.rb4
-rw-r--r--app/views/about/show.html.haml13
-rw-r--r--app/views/admin/custom_emojis/_custom_emoji.html.haml4
-rw-r--r--app/views/admin/settings/edit.html.haml9
-rw-r--r--app/views/application/_sidebar.html.haml2
-rw-r--r--app/views/shared/_og.html.haml2
-rw-r--r--app/views/statuses/_detailed_status.html.haml2
-rw-r--r--app/views/statuses/_simple_status.html.haml2
-rw-r--r--config/deploy.rb2
-rw-r--r--config/initializers/json_ld.rb1
-rw-r--r--config/initializers/paperclip.rb20
-rw-r--r--config/locales/activerecord.es-AR.yml17
-rw-r--r--config/locales/activerecord.es.yml18
-rw-r--r--config/locales/activerecord.pt-PT.yml13
-rw-r--r--config/locales/activerecord.sv.yml6
-rw-r--r--config/locales/ar.yml43
-rw-r--r--config/locales/bn.yml1
-rw-r--r--config/locales/ca.yml6
-rw-r--r--config/locales/co.yml6
-rw-r--r--config/locales/cs.yml38
-rw-r--r--config/locales/cy.yml1
-rw-r--r--config/locales/da.yml2
-rw-r--r--config/locales/de.yml52
-rw-r--r--config/locales/devise.ar.yml2
-rw-r--r--config/locales/devise.cs.yml4
-rw-r--r--config/locales/devise.el.yml6
-rw-r--r--config/locales/devise.eo.yml4
-rw-r--r--config/locales/devise.es.yml99
-rw-r--r--config/locales/devise.eu.yml4
-rw-r--r--config/locales/devise.fr.yml2
-rw-r--r--config/locales/devise.ja.yml2
-rw-r--r--config/locales/devise.th.yml4
-rw-r--r--config/locales/devise.uk.yml4
-rw-r--r--config/locales/el.yml39
-rw-r--r--config/locales/en.yml18
-rw-r--r--config/locales/eo.yml14
-rw-r--r--config/locales/es-AR.yml382
-rw-r--r--config/locales/es.yml51
-rw-r--r--config/locales/et.yml3
-rw-r--r--config/locales/eu.yml98
-rw-r--r--config/locales/fa.yml8
-rw-r--r--config/locales/fi.yml1
-rw-r--r--config/locales/fr.yml30
-rw-r--r--config/locales/gl.yml22
-rw-r--r--config/locales/he.yml1
-rw-r--r--config/locales/hu.yml15
-rw-r--r--config/locales/id.yml212
-rw-r--r--config/locales/it.yml3
-rw-r--r--config/locales/ja.yml24
-rw-r--r--config/locales/ka.yml1
-rw-r--r--config/locales/kk.yml1
-rw-r--r--config/locales/ko.yml12
-rw-r--r--config/locales/lt.yml1
-rw-r--r--config/locales/ms.yml1
-rw-r--r--config/locales/nl.yml13
-rw-r--r--config/locales/no.yml1
-rw-r--r--config/locales/oc.yml1
-rw-r--r--config/locales/pl.yml1
-rw-r--r--config/locales/pt-BR.yml3
-rw-r--r--config/locales/pt-PT.yml1
-rw-r--r--config/locales/ru.yml9
-rw-r--r--config/locales/simple_form.ar.yml6
-rw-r--r--config/locales/simple_form.de.yml4
-rw-r--r--config/locales/simple_form.el.yml12
-rw-r--r--config/locales/simple_form.eo.yml2
-rw-r--r--config/locales/simple_form.eu.yml16
-rw-r--r--config/locales/simple_form.fr.yml4
-rw-r--r--config/locales/simple_form.th.yml3
-rw-r--r--config/locales/sk.yml8
-rw-r--r--config/locales/sl.yml3
-rw-r--r--config/locales/sq.yml1
-rw-r--r--config/locales/sr-Latn.yml1
-rw-r--r--config/locales/sr.yml1
-rw-r--r--config/locales/sv.yml3
-rw-r--r--config/locales/te.yml1
-rw-r--r--config/locales/th.yml34
-rw-r--r--config/locales/tr.yml111
-rw-r--r--config/locales/uk.yml20
-rw-r--r--config/locales/zh-CN.yml1
-rw-r--r--config/locales/zh-HK.yml1
-rw-r--r--config/locales/zh-TW.yml1
-rw-r--r--config/settings.yml1
-rw-r--r--db/migrate/20181024224956_migrate_account_conversations.rb2
-rw-r--r--db/migrate/20191007013357_update_pt_locales.rb11
-rw-r--r--db/schema.rb26
-rw-r--r--lib/json_ld/identity.rb87
-rw-r--r--lib/mastodon/accounts_cli.rb1
-rw-r--r--lib/mastodon/cli_helper.rb38
-rw-r--r--lib/mastodon/feeds_cli.rb1
-rw-r--r--lib/mastodon/media_cli.rb18
-rw-r--r--lib/mastodon/version.rb2
-rw-r--r--package.json4
-rw-r--r--spec/lib/spam_check_spec.rb4
-rw-r--r--spec/models/account_spec.rb4
-rw-r--r--spec/models/concerns/remotable_spec.rb13
-rw-r--r--spec/models/home_feed_spec.rb5
-rw-r--r--spec/models/status_spec.rb43
-rw-r--r--yarn.lock52
212 files changed, 2701 insertions, 1534 deletions
diff --git a/AUTHORS.md b/AUTHORS.md
index 8d3aaf480..5f5985fba 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -5,89 +5,100 @@ Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon)
 and provided thanks to the work of the following contributors:
 
 * [Gargron](https://github.com/Gargron)
-* [ykzts](https://github.com/ykzts)
 * [ThibG](https://github.com/ThibG)
+* [ykzts](https://github.com/ykzts)
+* [dependabot[bot]](https://github.com/apps/dependabot)
 * [akihikodaki](https://github.com/akihikodaki)
+* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview)
 * [mjankowski](https://github.com/mjankowski)
-* [dependabot[bot]](https://github.com/apps/dependabot)
 * [unarist](https://github.com/unarist)
-* [m4sk1n](https://github.com/m4sk1n)
 * [yiskah](https://github.com/yiskah)
 * [nolanlawson](https://github.com/nolanlawson)
 * [ysksn](https://github.com/ysksn)
-* [sorin-davidoi](https://github.com/sorin-davidoi)
 * [abcang](https://github.com/abcang)
+* [sorin-davidoi](https://github.com/sorin-davidoi)
 * [lynlynlynx](https://github.com/lynlynlynx)
 * [mayaeh](https://github.com/mayaeh)
+* [m4sk1n](mailto:me@m4sk.in)
+* [Marcin Mikołajczak](mailto:me@m4sk.in)
+* [Kjwon15](https://github.com/Kjwon15)
 * [renatolond](https://github.com/renatolond)
 * [alpaca-tc](https://github.com/alpaca-tc)
+* [jeroenpraat](https://github.com/jeroenpraat)
 * [nclm](https://github.com/nclm)
 * [ineffyble](https://github.com/ineffyble)
-* [jeroenpraat](https://github.com/jeroenpraat)
+* [mabkenar](https://github.com/mabkenar)
 * [blackle](https://github.com/blackle)
 * [Quent-in](https://github.com/Quent-in)
 * [JantsoP](https://github.com/JantsoP)
-* [Kjwon15](https://github.com/Kjwon15)
-* [mabkenar](https://github.com/mabkenar)
+* [zunda](https://github.com/zunda)
 * [nullkal](https://github.com/nullkal)
 * [yookoala](https://github.com/yookoala)
+* [Aditoo17](https://github.com/Aditoo17)
+* [Quenty31](https://github.com/Quenty31)
+* [marek-lach](https://github.com/marek-lach)
 * [shuheiktgw](https://github.com/shuheiktgw)
 * [ashfurrow](https://github.com/ashfurrow)
-* [zunda](https://github.com/zunda)
-* [Quenty31](https://github.com/Quenty31)
 * [eramdam](https://github.com/eramdam)
+* [noellabo](https://github.com/noellabo)
 * [takayamaki](https://github.com/takayamaki)
+* [danhunsaker](https://github.com/danhunsaker)
 * [masarakki](https://github.com/masarakki)
 * [ticky](https://github.com/ticky)
-* [danhunsaker](https://github.com/danhunsaker)
 * [ThisIsMissEm](https://github.com/ThisIsMissEm)
 * [hcmiya](https://github.com/hcmiya)
 * [stephenburgess8](https://github.com/stephenburgess8)
 * [Wonderfall](https://github.com/Wonderfall)
 * [matteoaquila](https://github.com/matteoaquila)
 * [yukimochi](https://github.com/yukimochi)
+* [palindromordnilap](https://github.com/palindromordnilap)
 * [rkarabut](https://github.com/rkarabut)
 * [Artoria2e5](https://github.com/Artoria2e5)
 * [nightpool](https://github.com/nightpool)
 * [marrus-sh](https://github.com/marrus-sh)
+* [hinaloe](https://github.com/hinaloe)
 * [krainboltgreene](https://github.com/krainboltgreene)
 * [pfigel](https://github.com/pfigel)
 * [Aldarone](https://github.com/Aldarone)
 * [BoFFire](https://github.com/BoFFire)
 * [clworld](https://github.com/clworld)
+* [MasterGroosha](https://github.com/MasterGroosha)
 * [dracos](https://github.com/dracos)
+* [MaciekBaron](https://github.com/MaciekBaron)
 * [SerCom_KC](mailto:sercom-kc@users.noreply.github.com)
 * [Sylvhem](https://github.com/Sylvhem)
-* [MasterGroosha](https://github.com/MasterGroosha)
+* [MitarashiDango](https://github.com/MitarashiDango)
 * [JeanGauthier](https://github.com/JeanGauthier)
 * [kschaper](https://github.com/kschaper)
-* [MaciekBaron](https://github.com/MaciekBaron)
-* [MitarashiDango](mailto:mitarashidango@users.noreply.github.com)
 * [beatrix-bitrot](https://github.com/beatrix-bitrot)
-* [Aditoo17](https://github.com/Aditoo17)
+* [angristan](https://github.com/angristan)
 * [adbelle](https://github.com/adbelle)
 * [evanminto](https://github.com/evanminto)
 * [MightyPork](https://github.com/MightyPork)
+* [ashleyhull-versent](mailto:ashley.hull@versent.com.au)
 * [yhirano55](https://github.com/yhirano55)
 * [rinsuki](https://github.com/rinsuki)
 * [camponez](https://github.com/camponez)
-* [hinaloe](https://github.com/hinaloe)
-* [SerCom-KC](https://github.com/SerCom-KC)
+* [SerCom_KC](mailto:szescxz@gmail.com)
 * [aschmitz](https://github.com/aschmitz)
+* [trwnh](https://github.com/trwnh)
 * [devkral](https://github.com/devkral)
 * [fpiesche](https://github.com/fpiesche)
+* [hugogameiro](https://github.com/hugogameiro)
 * [gandaro](https://github.com/gandaro)
 * [johnsudaar](https://github.com/johnsudaar)
+* [ariasuni](https://github.com/ariasuni)
 * [trebmuh](https://github.com/trebmuh)
-* [Rakib Hasan](mailto:rmhasan@gmail.com)
-* [ashleyhull-versent](https://github.com/ashleyhull-versent)
+* [rmhasan](https://github.com/rmhasan)
+* [kedamaDQ](https://github.com/kedamaDQ)
 * [lindwurm](https://github.com/lindwurm)
 * [victorhck](mailto:victorhck@geeko.site)
 * [voidsatisfaction](https://github.com/voidsatisfaction)
+* [BenLubar](https://github.com/BenLubar)
 * [hikari-no-yume](https://github.com/hikari-no-yume)
-* [angristan](https://github.com/angristan)
 * [seefood](https://github.com/seefood)
 * [jackjennings](https://github.com/jackjennings)
+* [koyuawsmbrtn](https://github.com/koyuawsmbrtn)
 * [spla](mailto:spla@mastodont.cat)
 * [expenses](https://github.com/expenses)
 * [walf443](https://github.com/walf443)
@@ -95,18 +106,17 @@ and provided thanks to the work of the following contributors:
 * [mistydemeo](https://github.com/mistydemeo)
 * [dunn](https://github.com/dunn)
 * [xqus](https://github.com/xqus)
-* [hugogameiro](https://github.com/hugogameiro)
-* [ariasuni](https://github.com/ariasuni)
 * [pfm-eyesightjp](https://github.com/pfm-eyesightjp)
 * [fakenine](https://github.com/fakenine)
+* [Shleeble](https://github.com/Shleeble)
 * [tsuwatch](https://github.com/tsuwatch)
 * [victorhck](https://github.com/victorhck)
-* [kedamaDQ](https://github.com/kedamaDQ)
+* [mkljczk](https://github.com/mkljczk)
+* [manuelviens](https://github.com/manuelviens)
 * [puckipedia](https://github.com/puckipedia)
-* [trwnh](https://github.com/trwnh)
 * [fvh-P](https://github.com/fvh-P)
+* [rtucker](https://github.com/rtucker)
 * [Anna e só](mailto:contraexemplos@gmail.com)
-* [BenLubar](https://github.com/BenLubar)
 * [kazu9su](https://github.com/kazu9su)
 * [Komic](https://github.com/Komic)
 * [lmorchard](https://github.com/lmorchard)
@@ -119,6 +129,7 @@ and provided thanks to the work of the following contributors:
 * [goofy-bz](mailto:goofy@babelzilla.org)
 * [kadiix](https://github.com/kadiix)
 * [kodacs](https://github.com/kodacs)
+* [marcin mikołajczak](mailto:me@m4sk.in)
 * [JMendyk](https://github.com/JMendyk)
 * [KScl](https://github.com/KScl)
 * [sterdev](https://github.com/sterdev)
@@ -129,30 +140,31 @@ and provided thanks to the work of the following contributors:
 * [northerner](https://github.com/northerner)
 * [fhemberger](https://github.com/fhemberger)
 * [greysteil](https://github.com/greysteil)
-* [hensmith](https://github.com/hensmith)
+* [hencatsmith](https://github.com/hencatsmith)
 * [d6rkaiz](https://github.com/d6rkaiz)
 * [Reverite](https://github.com/Reverite)
 * [JohnD28](https://github.com/JohnD28)
 * [znz](https://github.com/znz)
-* [marek-lach](https://github.com/marek-lach)
 * [Naouak](https://github.com/Naouak)
 * [pawelngei](https://github.com/pawelngei)
-* [rtucker](https://github.com/rtucker)
 * [reneklacan](https://github.com/reneklacan)
 * [ekiru](https://github.com/ekiru)
-* [noellabo](https://github.com/noellabo)
 * [tcitworld](https://github.com/tcitworld)
 * [geta6](https://github.com/geta6)
 * [happycoloredbanana](https://github.com/happycoloredbanana)
 * [leopku](https://github.com/leopku)
 * [SansPseudoFix](https://github.com/SansPseudoFix)
+* [salvadorpla](https://github.com/salvadorpla)
 * [tomfhowe](https://github.com/tomfhowe)
 * [noraworld](https://github.com/noraworld)
 * [theboss](https://github.com/theboss)
+* [nzws](https://github.com/nzws)
 * [178inaba](https://github.com/178inaba)
+* [xgess](https://github.com/xgess)
 * [alyssais](https://github.com/alyssais)
-* [hiphref](https://github.com/hiphref)
+* [aablinov](https://github.com/aablinov)
 * [stalker314314](https://github.com/stalker314314)
+* [cutls](https://github.com/cutls)
 * [huertanix](https://github.com/huertanix)
 * [genesixx](https://github.com/genesixx)
 * [halkeye](https://github.com/halkeye)
@@ -162,21 +174,24 @@ and provided thanks to the work of the following contributors:
 * [kmichl](https://github.com/kmichl)
 * [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name)
 * [saper](https://github.com/saper)
+* [Dar13](https://github.com/Dar13)
 * [nevillepark](https://github.com/nevillepark)
 * [ornithocoder](https://github.com/ornithocoder)
+* [pwoolcoc](https://github.com/pwoolcoc)
 * [pierreozoux](https://github.com/pierreozoux)
 * [qguv](https://github.com/qguv)
 * [Ram Lmn](mailto:ramlmn@users.noreply.github.com)
-* [sascha-sl](https://github.com/sascha-sl)
+* [aurelia-sl](https://github.com/aurelia-sl)
 * [harukasan](https://github.com/harukasan)
 * [stamak](https://github.com/stamak)
-* [Technowix](mailto:technowix@users.noreply.github.com)
+* [Technowix](https://github.com/Technowix)
 * [Zoeille](https://github.com/Zoeille)
 * [Thor Harald Johansen](mailto:thj@thj.no)
 * [0x70b1a5](https://github.com/0x70b1a5)
 * [gled-rs](https://github.com/gled-rs)
 * [Valentin_NC](mailto:valentin.ouvrard@nautile.sarl)
 * [R0ckweb](https://github.com/R0ckweb)
+* [unasuke](https://github.com/unasuke)
 * [caasi](https://github.com/caasi)
 * [chr-1x](https://github.com/chr-1x)
 * [esetomo](https://github.com/esetomo)
@@ -184,8 +199,9 @@ and provided thanks to the work of the following contributors:
 * [hoodie](mailto:hoodiekitten@outlook.com)
 * [luzi82](https://github.com/luzi82)
 * [duxovni](https://github.com/duxovni)
+* [slice](https://github.com/slice)
 * [tmm576](https://github.com/tmm576)
-* [unsmell](https://github.com/unsmell)
+* [unsmell](mailto:unsmell@users.noreply.github.com)
 * [valerauko](https://github.com/valerauko)
 * [chriswmartin](https://github.com/chriswmartin)
 * [vahnj](https://github.com/vahnj)
@@ -193,21 +209,25 @@ and provided thanks to the work of the following contributors:
 * [AndreLewin](https://github.com/AndreLewin)
 * [0xflotus](https://github.com/0xflotus)
 * [redtachyons](https://github.com/redtachyons)
+* [acid-chicken](https://github.com/acid-chicken)
 * [thurloat](https://github.com/thurloat)
 * [aaribaud](https://github.com/aaribaud)
 * [pointlessone](https://github.com/pointlessone)
 * [Andrew](mailto:andrewlchronister@gmail.com)
+* [aurelien-reeves](https://github.com/aurelien-reeves)
+* [AnaGelez](https://github.com/AnaGelez)
 * [estuans](https://github.com/estuans)
 * [dissolve](https://github.com/dissolve)
 * [PurpleBooth](https://github.com/PurpleBooth)
 * [bradurani](https://github.com/bradurani)
 * [wavebeem](https://github.com/wavebeem)
 * [bruwalfas](https://github.com/bruwalfas)
-* [foxsan48](https://github.com/foxsan48)
+* [LottieVixen](https://github.com/LottieVixen)
 * [wchristian](https://github.com/wchristian)
 * [muffinista](https://github.com/muffinista)
 * [cdutson](https://github.com/cdutson)
 * [farlistener](https://github.com/farlistener)
+* [dariusk](https://github.com/dariusk)
 * [DavidLibeau](https://github.com/DavidLibeau)
 * [ddevault](https://github.com/ddevault)
 * [Fjoerfoks](https://github.com/Fjoerfoks)
@@ -216,6 +236,7 @@ and provided thanks to the work of the following contributors:
 * [Gomasy](https://github.com/Gomasy)
 * [unstabler](https://github.com/unstabler)
 * [potato4d](https://github.com/potato4d)
+* [Hanage999](https://github.com/Hanage999)
 * [h-izumi](https://github.com/h-izumi)
 * [ErikXXon](https://github.com/ErikXXon)
 * [ian-kelling](https://github.com/ian-kelling)
@@ -231,21 +252,23 @@ and provided thanks to the work of the following contributors:
 * [Kaylee](mailto:kaylee@codethat.sucks)
 * [Kazhnuz](https://github.com/Kazhnuz)
 * [connyduck](https://github.com/connyduck)
-* [Lindsey Bieda](mailto:lindseyb@users.noreply.github.com)
+* [LindseyB](https://github.com/LindseyB)
 * [Lorenz Diener](mailto:halcyon@icosahedron.website)
 * [alimony](https://github.com/alimony)
 * [mig5](https://github.com/mig5)
 * [moritzheiber](https://github.com/moritzheiber)
 * [ndarville](https://github.com/ndarville)
 * [Abzol](https://github.com/Abzol)
-* [pwoolcoc](https://github.com/pwoolcoc)
+* [PatOnTheBack](https://github.com/PatOnTheBack)
 * [xPaw](https://github.com/xPaw)
 * [petzah](https://github.com/petzah)
 * [ignisf](https://github.com/ignisf)
 * [raymestalez](https://github.com/raymestalez)
 * [remram44](https://github.com/remram44)
 * [sts10](https://github.com/sts10)
+* [SuperSandro2000](https://github.com/SuperSandro2000)
 * [u1-liquid](https://github.com/u1-liquid)
+* [rosylilly](https://github.com/rosylilly)
 * [sim6](https://github.com/sim6)
 * [Sir-Boops](https://github.com/Sir-Boops)
 * [stemid](https://github.com/stemid)
@@ -270,6 +293,7 @@ and provided thanks to the work of the following contributors:
 * [cpsdqs](https://github.com/cpsdqs)
 * [barzamin](https://github.com/barzamin)
 * [fhalna](https://github.com/fhalna)
+* [highemerly](https://github.com/highemerly)
 * [haoyayoi](https://github.com/haoyayoi)
 * [ik11235](https://github.com/ik11235)
 * [kawax](https://github.com/kawax)
@@ -279,6 +303,7 @@ and provided thanks to the work of the following contributors:
 * [mecab](https://github.com/mecab)
 * [nicobz25](https://github.com/nicobz25)
 * [oliverkeeble](https://github.com/oliverkeeble)
+* [partev](https://github.com/partev)
 * [pinfort](https://github.com/pinfort)
 * [rbaumert](https://github.com/rbaumert)
 * [rhoio](https://github.com/rhoio)
@@ -287,19 +312,17 @@ and provided thanks to the work of the following contributors:
 * [vjackson725](https://github.com/vjackson725)
 * [wxcafe](https://github.com/wxcafe)
 * [新都心(Neet Shin)](mailto:nucx@dio-vox.com)
+* [clarfon](https://github.com/clarfon)
 * [cygnan](https://github.com/cygnan)
 * [Awea](https://github.com/Awea)
 * [halcy](https://github.com/halcy)
-* [naaaaaaaaaaaf](https://github.com/naaaaaaaaaaaf)
 * [8398a7](https://github.com/8398a7)
 * [857b](https://github.com/857b)
 * [insom](https://github.com/insom)
 * [tachyons](https://github.com/tachyons)
-* [acid-chicken](https://github.com/acid-chicken)
 * [Esteth](https://github.com/Esteth)
 * [unascribed](https://github.com/unascribed)
 * [Aguay-val](https://github.com/Aguay-val)
-* [Akihiko Odaki](mailto:nekomanma@pixiv.co.jp)
 * [knu](https://github.com/knu)
 * [h3poteto](https://github.com/h3poteto)
 * [unleashed](https://github.com/unleashed)
@@ -307,8 +330,8 @@ and provided thanks to the work of the following contributors:
 * [console-cowboy](https://github.com/console-cowboy)
 * [Alkarex](https://github.com/Alkarex)
 * [a2](https://github.com/a2)
+* [alfiedotwtf](https://github.com/alfiedotwtf)
 * [0xa](https://github.com/0xa)
-* [palindromordnilap](https://github.com/palindromordnilap)
 * [virtualpain](https://github.com/virtualpain)
 * [sapphirus](https://github.com/sapphirus)
 * [amandavisconti](https://github.com/amandavisconti)
@@ -320,10 +343,9 @@ and provided thanks to the work of the following contributors:
 * [contraexemplo](https://github.com/contraexemplo)
 * [abackstrom](https://github.com/abackstrom)
 * [armandfardeau](https://github.com/armandfardeau)
+* [raboof](https://github.com/raboof)
 * [jumbosushi](https://github.com/jumbosushi)
-* [aurelien-reeves](https://github.com/aurelien-reeves)
 * [ayumin](https://github.com/ayumin)
-* [BaptisteGelez](https://github.com/BaptisteGelez)
 * [bzg](https://github.com/bzg)
 * [benediktg](https://github.com/benediktg)
 * [blakebarnett](https://github.com/blakebarnett)
@@ -337,15 +359,15 @@ and provided thanks to the work of the following contributors:
 * [DoubleMalt](https://github.com/DoubleMalt)
 * [Moosh-be](https://github.com/Moosh-be)
 * [Motoma](https://github.com/Motoma)
-* [chriswk](https://github.com/chriswk)
+* [Christopher Kolstad](mailto:christopher.kolstad@finn.no)
 * [csu](https://github.com/csu)
-* [clarfon](https://github.com/clarfon)
 * [kklleemm](https://github.com/kklleemm)
 * [colindean](https://github.com/colindean)
 * [dachinat](https://github.com/dachinat)
 * [multiple-creatures](https://github.com/multiple-creatures)
 * [watilde](https://github.com/watilde)
 * [daprice](https://github.com/daprice)
+* [da2x](https://github.com/da2x)
 * [dar5hak](https://github.com/dar5hak)
 * [kant](https://github.com/kant)
 * [maxolasersquad](https://github.com/maxolasersquad)
@@ -354,7 +376,7 @@ and provided thanks to the work of the following contributors:
 * [davefp](https://github.com/davefp)
 * [yipdw](https://github.com/yipdw)
 * [debanshuk](https://github.com/debanshuk)
-* [Derek Lewis](mailto:derekcecillewis@gmail.com)
+* [DerekNonGeneric](https://github.com/DerekNonGeneric)
 * [dblandin](https://github.com/dblandin)
 * [Drew Gates](mailto:aranaur@users.noreply.github.com)
 * [dtschust](https://github.com/dtschust)
@@ -366,11 +388,13 @@ and provided thanks to the work of the following contributors:
 * [ericblade](https://github.com/ericblade)
 * [mikoim](https://github.com/mikoim)
 * [espenronnevik](https://github.com/espenronnevik)
+* [fabianonline](https://github.com/fabianonline)
 * [Finariel](https://github.com/Finariel)
 * [siuying](https://github.com/siuying)
 * [zoc](https://github.com/zoc)
 * [fwenzel](https://github.com/fwenzel)
 * [GenbuHase](https://github.com/GenbuHase)
+* [nilsding](https://github.com/nilsding)
 * [hattori6789](https://github.com/hattori6789)
 * [algernon](https://github.com/algernon)
 * [Fastbyte01](https://github.com/Fastbyte01)
@@ -386,17 +410,19 @@ and provided thanks to the work of the following contributors:
 * [suzukaze](https://github.com/suzukaze)
 * [Hiromi-Kai](https://github.com/Hiromi-Kai)
 * [hishamhm](https://github.com/hishamhm)
+* [Slaynash](https://github.com/Slaynash)
 * [musashino205](https://github.com/musashino205)
 * [iwaim](https://github.com/iwaim)
 * [valrus](https://github.com/valrus)
 * [IMcD23](https://github.com/IMcD23)
 * [yi0713](https://github.com/yi0713)
 * [iblech](https://github.com/iblech)
-* [usbsnowcrash](https://github.com/usbsnowcrash)
+* [J Yeary](mailto:usbsnowcrash@users.noreply.github.com)
 * [jack-michaud](https://github.com/jack-michaud)
 * [Floppy](https://github.com/Floppy)
 * [loomchild](https://github.com/loomchild)
 * [jenkr55](https://github.com/jenkr55)
+* [hyenagirl64](https://github.com/hyenagirl64)
 * [press5](https://github.com/press5)
 * [TrollDecker](https://github.com/TrollDecker)
 * [jmontane](https://github.com/jmontane)
@@ -406,17 +432,17 @@ and provided thanks to the work of the following contributors:
 * [joshuap](https://github.com/joshuap)
 * [Tiwy57](https://github.com/Tiwy57)
 * [xuv](https://github.com/xuv)
-* [June Sallou](mailto:jnsll@users.noreply.github.com)
+* [Jnsll](https://github.com/Jnsll)
 * [j0k3r](https://github.com/j0k3r)
 * [KEINOS](https://github.com/KEINOS)
 * [futoase](https://github.com/futoase)
-* [Pneumaticat](https://github.com/Pneumaticat)
+* [pot8to](https://github.com/pot8to)
 * [Kit Redgrave](mailto:qwertyitis@gmail.com)
 * [Knut Erik](mailto:abjectio@users.noreply.github.com)
 * [mkody](https://github.com/mkody)
 * [k0ta0uchi](https://github.com/k0ta0uchi)
 * [KrzysiekJ](https://github.com/KrzysiekJ)
-* [leowzukw](https://github.com/leowzukw)
+* [Leo Wzukw](mailto:leowzukw@users.noreply.github.com)
 * [Tak](https://github.com/Tak)
 * [cacheflow](https://github.com/cacheflow)
 * [ldidry](https://github.com/ldidry)
@@ -424,6 +450,7 @@ and provided thanks to the work of the following contributors:
 * [lfuelling](https://github.com/lfuelling)
 * [Grabacr07](https://github.com/Grabacr07)
 * [mistermantas](https://github.com/mistermantas)
+* [MareenaKunjachan](https://github.com/MareenaKunjachan)
 * [mareklach](https://github.com/mareklach)
 * [wirehack7](https://github.com/wirehack7)
 * [martymcguire](https://github.com/martymcguire)
@@ -431,50 +458,53 @@ and provided thanks to the work of the following contributors:
 * [otsune](https://github.com/otsune)
 * [mbugowski](https://github.com/mbugowski)
 * [Mathias B](mailto:10813340+mathias-b@users.noreply.github.com)
+* [madmath03](https://github.com/madmath03)
 * [matt-auckland](https://github.com/matt-auckland)
 * [webroo](https://github.com/webroo)
-* [matthiasbeyer](https://github.com/matthiasbeyer)
-* [mattjmattj](https://github.com/mattjmattj)
-* [mtparet](https://github.com/mtparet)
-* [maximeborges](https://github.com/maximeborges)
-* [minacle](https://github.com/minacle)
-* [michaeljdeeb](https://github.com/michaeljdeeb)
-* [Themimitoof](https://github.com/Themimitoof)
-* [cyweo](https://github.com/cyweo)
+* [Matthias Beyer](mailto:mail@beyermatthias.de)
+* [Matthias Jouan](mailto:matthias.jouan@gmail.com)
+* [Matthieu Paret](mailto:matthieuparet69@gmail.com)
+* [Maxime BORGES](mailto:maxime.borges@gmail.com)
+* [Mayu Laierlence](mailto:minacle@live.com)
+* [Michael Deeb](mailto:michaeldeeb@me.com)
+* [Michael Vieira](mailto:dtox94@gmail.com)
+* [Michel](mailto:michel@cyweo.com)
 * [Midgard](mailto:m1dgard@users.noreply.github.com)
-* [mike-burns](https://github.com/mike-burns)
-* [verymilan](https://github.com/verymilan)
-* [milmazz](https://github.com/milmazz)
-* [premist](https://github.com/premist)
-* [Mnkai](https://github.com/Mnkai)
-* [mitchhentges](https://github.com/mitchhentges)
-* [mouse-reeve](https://github.com/mouse-reeve)
-* [Mozinet-fr](https://github.com/Mozinet-fr)
-* [lae](https://github.com/lae)
-* [nosada](https://github.com/nosada)
-* [Nanamachi](https://github.com/Nanamachi)
-* [orinthe](https://github.com/orinthe)
-* [NecroTechno](https://github.com/NecroTechno)
-* [Dar13](https://github.com/Dar13)
-* [ngerakines](https://github.com/ngerakines)
-* [vonneudeck](https://github.com/vonneudeck)
-* [Ninetailed](https://github.com/Ninetailed)
-* [k24](https://github.com/k24)
-* [noiob](https://github.com/noiob)
-* [kwaio](https://github.com/kwaio)
-* [norayr](https://github.com/norayr)
-* [joyeusenoelle](https://github.com/joyeusenoelle)
-* [OlivierNicole](https://github.com/OlivierNicole)
-* [noppa](https://github.com/noppa)
-* [Otakan951](https://github.com/Otakan951)
-* [fahy](https://github.com/fahy)
+* [Mike Burns](mailto:mburns@thoughtbot.com)
+* [Milan](mailto:me@petabyteboy.de)
+* [Milan*](mailto:tchncs@vivaldi.net)
+* [Milton Mazzarri](mailto:milmazz@gmail.com)
+* [Minku Lee](mailto:premist@me.com)
+* [Minori Hiraoka](mailto:mnkai@users.noreply.github.com)
+* [Mitchell Hentges](mailto:mitch9654@gmail.com)
+* [Mostafa Ahangarha](mailto:ahangarha@users.noreply.github.com)
+* [Mouse Reeve](mailto:mousereeve@riseup.net)
+* [Mozinet](mailto:mozinet-fr@users.noreply.github.com)
+* [Musee U](mailto:lae@users.noreply.github.com)
+* [NOGISAKA Sadata](mailto:ngsksdt@gmail.com)
+* [Naf](mailto:uenok.htc@gmail.com)
+* [Nanamachi](mailto:town7.haruki@gmail.com)
+* [Nathaniel Ekoniak](mailto:nekoniak@ennate.tech)
+* [NecroTechno](mailto:necrotechno@riseup.net)
+* [Nick Gerakines](mailto:nick@gerakines.net)
+* [Nicolai von Neudeck](mailto:nicolai@vonneudeck.com)
+* [Ninetailed](mailto:ninetailed@gmail.com)
+* [Nishi, Keisuke](mailto:k24@users.noreply.github.com)
+* [Noiob](mailto:noiob@users.noreply.github.com)
+* [Nope Nope](mailto:hireme@kwaio.ninja)
+* [Norayr Chilingarian](mailto:norayr@arnet.am)
+* [Noëlle Anthony](mailto:noelle.d.anthony@gmail.com)
+* [N氏](mailto:uenok.htc@gmail.com)
+* [Olivier Nicole](mailto:olivierthnicole@gmail.com)
+* [Oskari Noppa](mailto:noppa@users.noreply.github.com)
+* [Otakan](mailto:otakan951@gmail.com)
+* [Padraig Fahy](mailto:tech@padraigfahy.com)
 * [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com)
 * [Paul](mailto:naydex.mc+github@gmail.com)
 * [Pete Keen](mailto:pete@petekeen.net)
 * [Pierre-Morgan Gate](mailto:pgate@users.noreply.github.com)
 * [Ratmir Karabut](mailto:rkarabut@sfmodern.ru)
 * [Reto Kromer](mailto:retokromer@users.noreply.github.com)
-* [Rey Tucker](mailto:git@reytucker.us)
 * [Rob Watson](mailto:rfwatson@users.noreply.github.com)
 * [Ryan Freebern](mailto:ryan@freebern.org)
 * [Ryan Wade](mailto:ryan.wade@protonmail.com)
@@ -482,6 +512,7 @@ and provided thanks to the work of the following contributors:
 * [S.H](mailto:gamelinks007@gmail.com)
 * [Sadiq Saif](mailto:staticsafe@users.noreply.github.com)
 * [Sam Hewitt](mailto:hewittsamuel@gmail.com)
+* [Sasha Sorokin](mailto:dafri.nochiterov8@gmail.com)
 * [Satoshi KOJIMA](mailto:skoji@mac.com)
 * [ScienJus](mailto:i@scienjus.com)
 * [Scott Larkin](mailto:scott@codeclimate.com)
@@ -492,12 +523,10 @@ and provided thanks to the work of the following contributors:
 * [Shaun Gillies](mailto:me@shaungillies.net)
 * [Shin Adachi](mailto:shn@glucose.jp)
 * [Shin Kojima](mailto:shin@kojima.org)
-* [Sho Kusano](mailto:rosylilly@aduca.org)
 * [Shouko Yu](mailto:imshouko@gmail.com)
 * [Sina Mashek](mailto:sina@mashek.xyz)
 * [Soshi Kato](mailto:mail@sossii.com)
 * [Spanky](mailto:2788886+spankyworks@users.noreply.github.com)
-* [Stanislas](mailto:angristan@pm.me)
 * [StefOfficiel](mailto:pichard.stephane@free.fr)
 * [Steven Tappert](mailto:admin@dark-it.net)
 * [Svetlozar Todorov](mailto:svetlik@users.noreply.github.com)
@@ -506,6 +535,7 @@ and provided thanks to the work of the following contributors:
 * [Takayoshi Nishida](mailto:takayoshi.nishida@gmail.com)
 * [Takayuki KUSANO](mailto:github@tkusano.jp)
 * [TakesxiSximada](mailto:takesxi.sximada@gmail.com)
+* [Tao Bror Bojlén](mailto:brortao@users.noreply.github.com)
 * [TheInventrix](mailto:theinventrix@users.noreply.github.com)
 * [Thomas Alberola](mailto:thomas@needacoffee.fr)
 * [Toby Deshane](mailto:fortyseven@users.noreply.github.com)
@@ -515,10 +545,12 @@ and provided thanks to the work of the following contributors:
 * [Treyssat-Vincent Nino](mailto:treyssatvincent@users.noreply.github.com)
 * [Udo Kramer](mailto:optik@fluffel.io)
 * [Una](mailto:una@unascribed.com)
+* [Ushitora Anqou](mailto:ushitora@anqou.net)
 * [Ushitora Anqou](mailto:ushitora_anqou@yahoo.co.jp)
 * [Valentin Lorentz](mailto:progval+git@progval.net)
 * [Vladimir Mincev](mailto:vladimir@canicinteractive.com)
 * [Waldir Pimenta](mailto:waldyrious@gmail.com)
+* [Wenceslao Páez Chávez](mailto:wcpaez@gmail.com)
 * [Wesley Ellis](mailto:tahnok@gmail.com)
 * [Wiktor](mailto:wiktor@metacode.biz)
 * [Wonderfall](mailto:wonderfall@schrodinger.io)
@@ -529,6 +561,7 @@ and provided thanks to the work of the following contributors:
 * [YaQ](mailto:i_k_o_m_a_7@yahoo.co.jp)
 * [Yanaken](mailto:yanakend@gmail.com)
 * [Yann Klis](mailto:yann.klis@gmail.com)
+* [Yağızhan](mailto:35808275+yagizhan49@users.noreply.github.com)
 * [Yeechan Lu](mailto:wz.bluesnow@gmail.com)
 * [Yusuke Abe](mailto:moonset20@gmail.com)
 * [Zachary Spector](mailto:logicaldash@gmail.com)
@@ -542,6 +575,7 @@ and provided thanks to the work of the following contributors:
 * [chrolis](mailto:chrolis@users.noreply.github.com)
 * [cormo](mailto:cormorant2+github@gmail.com)
 * [d0p1](mailto:dopi-sama@hush.com)
+* [dxwc](mailto:dxwc@users.noreply.github.com)
 * [evilny0](mailto:evilny0@moomoocamp.net)
 * [febrezo](mailto:felixbrezo@gmail.com)
 * [fsubal](mailto:fsubal@users.noreply.github.com)
@@ -550,6 +584,7 @@ and provided thanks to the work of the following contributors:
 * [gol-cha](mailto:info@mevo.xyz)
 * [hakoai](mailto:hk--76@qa2.so-net.ne.jp)
 * [haosbvnker](mailto:github@chaosbunker.com)
+* [ichi_i](mailto:51489410+ichi-i@users.noreply.github.com)
 * [isati](mailto:phil@juchnowi.cz)
 * [jacob](mailto:jacobherringtondeveloper@gmail.com)
 * [jenn kaplan](mailto:me@jkap.io)
@@ -561,7 +596,6 @@ and provided thanks to the work of the following contributors:
 * [karlyeurl](mailto:karl.yeurl@gmail.com)
 * [kedama](mailto:32974885+kedamadq@users.noreply.github.com)
 * [kodai](mailto:shirafuta.kodai@gmail.com)
-* [koyu](mailto:me@koyu.space)
 * [kuro5hin](mailto:rusty@kuro5hin.org)
 * [luzpaz](mailto:luzpaz@users.noreply.github.com)
 * [maxypy](mailto:maxime@mpigou.fr)
@@ -573,6 +607,7 @@ and provided thanks to the work of the following contributors:
 * [muan](mailto:muan@github.com)
 * [namelessGonbai](mailto:43787036+namelessgonbai@users.noreply.github.com)
 * [neetshin](mailto:neetshin@neetsh.in)
+* [nzws](mailto:git-yuzu@svk.jp)
 * [rch850](mailto:rich850@gmail.com)
 * [roikale](mailto:roikale@users.noreply.github.com)
 * [rysiekpl](mailto:rysiek@hackerspace.pl)
@@ -585,6 +620,8 @@ and provided thanks to the work of the following contributors:
 * [tateisu](mailto:tateisu@gmail.com)
 * [tmyt](mailto:shigure@refy.net)
 * [trevDev()](mailto:trev@trevdev.ca)
+* [tsia](mailto:github@tsia.de)
+* [umonaca](mailto:53662960+umonaca@users.noreply.github.com)
 * [utam0k](mailto:k0ma@utam0k.jp)
 * [vpzomtrrfrt](mailto:vpzomtrrfrt@gmail.com)
 * [walfie](mailto:walfington@gmail.com)
@@ -593,9 +630,10 @@ and provided thanks to the work of the following contributors:
 * [yoshipc](mailto:yoooo@yoshipc.net)
 * [Özcan Zafer AYAN](mailto:ozcanzaferayan@gmail.com)
 * [ばん](mailto:detteiu0321@gmail.com)
-* [みたらしだんご](mailto:mitarashidango@users.noreply.github.com)
+* [ふるふる](mailto:frfs@users.noreply.github.com)
 * [りんすき](mailto:6533808+rinsuki@users.noreply.github.com)
 * [ヨイツの賢狼ホロ | 3rd style](mailto:horo@yoitsu.moe)
+* [唐宗勛](mailto:tangzongxun@hotmail.com)
 * [猫吸血鬼ディフリス / 猫ロキP](mailto:deflis@gmail.com)
 * [艮 鮟鱇](mailto:ushitora_anqou@yahoo.co.jp)
 * [西小倉宏信](mailto:nishiko@mindia.jp)
@@ -607,338 +645,122 @@ This document is provided for informational purposes only. Since it is only upda
 
 Following people have contributed to translation of Mastodon:
 
-- **Albanian**
-  - Besnik Bleta
-  - Aditoo
-- **Arabic**
-  - ButterflyOfFire
-  - Aditoo
-  - Amrz0
-- **Asturian**
-  - ButterflyOfFire
-  - Enol P.
-  - Aditoo
-- **Basque**
-  - Osoitz
-  - Aditoo
-  - Aitzol
-  - ButterflyOfFire
-  - Peru Iparragirre
-  - Gorka Azkarate
-- **Bengali**
-  - dxwc
-- **Bulgarian**
-  - ButterflyOfFire
-  - Aditoo
-- **Catalan**
-  - spla
-  - Aditoo
-  - ButterflyOfFire
-  - Joan Montané
-  - Jose Luis
-- **Chinese (Hong Kong)**
-  - ButterflyOfFire
-  - Luzi Leung
-  - Aditoo
-- **Chinese (Simplified)**
-  - Allen Zhong
-  - ButterflyOfFire
-  - SerCom_KC
-  - martialarts
-  - Kaitian Xie
-  - Aditoo
-  - pan93412
-- **Chinese (Traditional)**
-  - Aditoo
-  - ButterflyOfFire
-  - James58899
-  - pan93412
-  - S1ttidoe477
-  - SHA265
-  - Jeff Huang
-- **Corsican**
-  - Alix D. R.
-  - Aditoo
-  - ButterflyOfFire
-- **Croatian**
-  - ButterflyOfFire
-  - Aditoo
-- **Czech**
-  - Aditoo
-  - Marek Ľach
-  - ButterflyOfFire
-- **Danish**
-  - Einhjeriar
-  - Rasmus Sæderup
-  - Aditoo
-  - ButterflyOfFire
-- **Dutch**
-  - Albakham
-  - ButterflyOfFire
-  - jeroenpraat
-  - rscmbbng
-  - Aditoo
-  - Jelv
-- **English**
-  - ButterflyOfFire
-  - Renato "Lond" Cerqueira
-- **English (United Kingdom)**
-  - Albakham
-- **Esperanto**
-  - Aditoo
-  - ButterflyOfFire
-  - Becci Cat
-  - Jeong Arm
-  - Mélanie Chauvel
-  - Vanege
-  - Martin Bodin
-  - tuxayo/Victor Grousset
-- **Finnish**
-  - ButterflyOfFire
-  - Mikko Poussu
-  - Taru Luojola
-  - S Heija
-  - Aditoo
-  - Jonne Arjoranta
-- **French**
-  - Albakham
-  - Alix D. R.
-  - ButterflyOfFire
-  - codl
-  - Leia
-  - Alda Marteau-Hardi
-  - Mélanie Chauvel
-  - Paul Marques Mota
-  - azenet
-  - Olivier Humbert
-  - Aditoo
-  - Jonathan Chan
-  - Letiteuf55
-  - Baptiste Jonglez
-  - goofy-mdn
-  - Jean-Baptiste Holcroft
-  - Technowix
-  - Martin Bodin
-  - Théodore
-  - Thibaut Girka
-  - Franck Paul
-  - Sylvhem
-- **Galician**
-  - ButterflyOfFire
-  - Xose M.
-  - Aditoo
-  - manequim
-- **Georgian**
-  - ButterflyOfFire
-  - Aditoo
-- **German**
-  - Aditoo
-  - ButterflyOfFire
-  - Daniel
-  - averageunicorn
-  - Koyu Berteon
-  - larsreineke
-  - koyu
-  - Austin Jones
-  - lilo
-  - Benedikt Geißler
-  - ePirat
-  - Eugen Rochko
-  - Weblate Admin
-  - Patrick Figel
-- **Greek**
-  - Dimitris Maroulidis
-  - Antonis
-  - Aditoo
-  - ButterflyOfFire
-  - Konstantinos Grevenitis
-- **Hebrew**
-  - ButterflyOfFire
-  - Aditoo
-  - Ira
-  - Yaron Shahrabani
-- **Hungarian**
-  - ButterflyOfFire
-  - Adam Paszternak
-  - Aditoo
-  - Tibike Miklós
-- **Ido**
-  - ButterflyOfFire
-  - Aditoo
-- **Indonesian**
-  - afachri
-  - ButterflyOfFire
-  - Dito Kurnia Pratama
-  - Eirworks
-  - Aditoo
-  - Alfiana Sibuea
-  - se7entime
-- **Irish**
-  - Albakham
-  - Kevin Houlihan
-- **Italian**
-  - Alessandro Levati
-  - Albakham
-  - ButterflyOfFire
-  - Marcin Mikołajczak
-  - Aditoo
-  - Giuseppe Pignataro
-  - Stefano
-- **Japanese**
-  - Hinaloe
-  - 小鳥遊まりあ
-  - mayaeh
-  - osapon
-  - 森の子リスのミーコの大冒険
-  - Kumasun Morino
-  - Yamagishi Kazutoshi
-  - Aditoo
-  - ButterflyOfFire
-  - Jeong Arm
-  - unarist
-- **Kazakh**
-  - arshat
-  - Aditoo
-- **Korean**
-  - Aditoo
-  - Jeong Arm
-  - ButterflyOfFire
-  - Minori Hiraoka
-  - Yamagishi Kazutoshi
-- **Lithuanian**
-  - Sarunas Medeikis
-- **Malay**
-  - Muhammad Nur Hidayat (MNH48)
-  - Aditoo
-  - ButterflyOfFire
-- **Norwegian (old code)**
-  - ButterflyOfFire
-  - Espen Rønnevik
-  - Aditoo
-  - Tale
-- **Occitan**
-  - Aditoo
-  - ButterflyOfFire
-  - Quenti2
-  - Quentí
-  - Maxenç
-- **Persian**
-  - Masoud Abkenar
-  - Aditoo
-  - ButterflyOfFire
-- **Polish**
-  - Aditoo
-  - Albakham
-  - ButterflyOfFire
-  - Stasiek Michalski
-  - Marcin Mikołajczak
-  - Jakub Mendyk
-  - Marek Ľach
-  - krkk
-- **Portuguese**
-  - Albakham
-  - João Pinheiro
-  - manequim
-  - Aditoo
-  - ButterflyOfFire
-  - Hugo Gameiro
-- **Portuguese (Brazil)**
-  - Aditoo
-  - Albakham
-  - Anna e só
-  - Renato "Lond" Cerqueira
-  - André Andrade
-  - ButterflyOfFire
-- **Romanian**
-  - adrianbblk
-  - ButterflyOfFire
-  - Aditoo
-- **Russian**
-  - Albakham
-  - ButterflyOfFire
-  - Evgeny Petrov
-  - Aditoo
-  - Павел Гастелло
-  - Andrew Zyabin
-  - Yaron Shahrabani
-- **Serbian**
-  - Branko Kokanovic
-  - Burekz Finezt
-  - Aditoo
-  - ButterflyOfFire
-- **Serbian (latin)**
-  - ButterflyOfFire
-  - Aditoo
-- **Slovak**
-  - Aditoo
-  - ButterflyOfFire
-  - Ivan Pleva
-  - Marek Ľach
-  - Peter
-- **Slovenian**
-  - Kristijan Tkalec
-  - Aditoo
-  - ButterflyOfFire
-- **Spanish**
-  - Albakham
-  - ButterflyOfFire
-  - Carlos Mondragon
-  - Antón López
-  - Max Winkler
-  - Pablo de la Concepción Sanz
-  - Sergio Soriano
-  - Angeles Broullón
-  - Lothar Wolf
-  - Aditoo
-  - David Charte
-  - Emmanuel
-- **Swedish**
-  - ButterflyOfFire
-  - Isak Holmström
-  - Shellkr
-  - Aditoo
-  - Elias Mårtenson
-  - Stefan Midjich
-  - Tim Stahel
-  - Jonas Hultén
-- **Telugu**
-  - avndp
-  - Ranjith Tellakula
-  - Aditoo
-  - ButterflyOfFire
-  - Joseph Nuthalapati
-- **Thai**
-  - ButterflyOfFire
-  - parnikkapore
-  - Thai Localization
-  - Aditoo
-- **Turkish**
-  - Ali Demirtas
-  - ButterflyOfFire
-  - Aditoo
-- **Ukrainian**
-  - alexcleac
-  - ButterflyOfFire
-  - Aditoo
-  - Ivan Verchenko
-- **Welsh**
-  - carl morris
-  - Jaz-Michael King
-  - Owain Rhys Lewis
-  - Rhoslyn Prys
-  - Aditoo
-  - ButterflyOfFire
-  - Renato "Lond" Cerqueira
-  - Albakham
-  - Kevin Beynon
-- **Armenian**
-  - Aditoo
-  - ButterflyOfFire
-- **Latvian**
-  - Aditoo
-  - ButterflyOfFire
-  - Maigonis
-- **Tamil**
-  - Aditoo
-  - ButterflyOfFire
-  - Prasanna Venkadesh
+- Zoltán Gera (*Hungarian*)
+- Kristijan Tkalec (*Slovenian*)
+- Evert Prants (*Estonian*)
+- borys_sh (*Ukrainian*)
+- ButterflyOfFire (*Arabic; French*)
+- Osoitz (*Basque*)
+- oɹʇuʞ (*Spanish, Argentina*)
+- koyu (*German*)
+- Jeroen (*Dutch*)
+- Muha Aliss (*Turkish*)
+- 唐宗勛 (*Chinese Simplified*)
+- Jeong Arm (*Korean; Esperanto; Japanese*)
+- Oguz Ersen (*Turkish*)
+- spla (*Catalan*)
+- Ramdziana F Y (*Indonesian*)
+- Aditoo17 (*Czech*)
+- Xosé M. (*Galician*)
+- Roboron (*Spanish*)
+- Alix Rossi (*Corsican; French*)
+- Maya Minatsuki (*Japanese*)
+- Masoud Abkenar (*Persian*)
+- Thai Localization (*Thai*)
+- Marek Ľach (*Slovak; Polish*)
+- d5Ziif3K (*Ukrainian*)
+- lamnatos (*Greek*)
+- Emyn Nant Nefydd (*Welsh*)
+- Diluns (*Occitan*)
+- atarashiako (*Chinese Simplified*)
+- 101010 (*Polish*)
+- Yi-Jyun Pan (*Chinese Traditional*)
+- silkevicious (*Italian*)
+- FédiQuébec (*French*)
+- Jaz-Michael King (*Welsh*)
+- christalleras (*Norwegian Nynorsk*)
+- tykayn (*French*)
+- Alessandro Levati (*Italian*)
+- carolinagiorno (*Portuguese, Brazilian*)
+- taoxvx (*Danish*)
+- sabri (*Spanish*)
+- Sasha Sorokin (*Russian*)
+- shioko (*Chinese Simplified*)
+- Evgeny Petrov (*Russian*)
+- ariasuni (*French; Esperanto*)
+- Tiago Epifânio (*Portuguese*)
+- dxwc (*Bengali*)
+- liffon (*Swedish*)
+- Vanege (*Esperanto*)
+- Johan Schiff (*Swedish*)
+- kat (*Ukrainian; Russian*)
+- oti4500 (*Hungarian; Ukrainian*)
+- Juan José Salvador Piedra (*Spanish*)
+- diazepan (*Spanish*)
+- SHeija (*Finnish*)
+- Jack R (*Spanish*)
+- Saederup92 (*Danish*)
+- Stasiek Michalski (*Polish*)
+- Dewi (*Breton; French*)
+- cybergene (*Japanese*)
+- AW Unad (*Indonesian*)
+- Andrea Lo Iacono (*Italian*)
+- Ray (*Spanish*)
+- Unmual (*Spanish*)
+- Ryo (*Korean*)
+- juanda097 (*Spanish*)
+- Anunnakey (*Macedonian*)
+- Cutls (*Japanese*)
+- erikstl (*Esperanto*)
+- ruine (*Japanese*)
+- MadeInSteak (*Finnish*)
+- Sokratis Alichanidis (*Greek*)
+- dragnucs2 (*Arabic*)
+- frumble (*German*)
+- Rikard Linde (*Swedish*)
+- PPNplus (*Thai*)
+- arethsu (*Swedish*)
+- EPEMA YT (*German*)
+- Rhys Harrison (*Esperanto*)
+- KEINOS (*Japanese*)
+- filippodb (*Italian*)
+- JzshAC (*Chinese Simplified*)
+- Rintan1 (*Japanese*)
+- Antillion (*Spanish*)
+- hiphipvargas (*Portuguese*)
+- Ch. (*Korean*)
+- tctovsli (*Norwegian Nynorsk*)
+- vjasiegd (*Polish*)
+- SamitiMed (*Thai*)
+- umelard (*Hebrew*)
+- 硫酸鶏 (*Japanese*)
+- Adrián Lattes (*Spanish*)
+- Hinaloe (*Japanese*)
+- Renato "Lond" Cerqueira (*Portuguese, Brazilian*)
+- parnikkapore (*Thai*)
+- Marcin Mikołajczak (*Polish*)
+- 森の子リスのミーコの大冒険 (*Japanese*)
+- Marcepanek_ (*Polish*)
+- Sahak Petrosyan (*Armenian*)
+- Daniel Dimitrov (*Bulgarian*)
+- Hugh Liu (*Chinese Simplified*)
+- Rakino (*Chinese Simplified*)
+- hussama (*Portuguese, Brazilian*)
+- ThibG (*French*)
+- SnDer (*Dutch*)
+- PifyZ (*French*)
+- eichkat3r (*German*)
+- Karol Kosek (*Polish*)
+- Akarshan Biswas (*Bengali*)
+- Tradjincal (*French*)
+- Steven Tappert (*German*)
+- sergioaraujo1 (*Portuguese, Brazilian*)
+- mmokhi (*Persian*)
+- fedot (*Russian*)
+- skaaarrr (*German*)
+- JackXu (*Chinese Simplified*)
+- Lukas Fülling (*German*)
+- Zoé Bőle (*German*)
+- Dremski (*Bulgarian*)
+- tamaina (*Japanese*)
+- OpenAlgeria (*Arabic*)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b0d23a22..b200747b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,39 @@ Changelog
 
 All notable changes to this project will be documented in this file.
 
+## [3.0.1] - 2019-10-10
+### Added
+
+- Add `tootctl media usage` command ([Gargron](https://github.com/tootsuite/mastodon/pull/12115))
+- Add admin setting to auto-approve trending hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12122), [Gargron](https://github.com/tootsuite/mastodon/pull/12130))
+
+### Changed
+
+- Change `tootctl media refresh` to skip already downloaded attachments ([Gargron](https://github.com/tootsuite/mastodon/pull/12118))
+
+### Removed
+
+- Remove auto-silence behaviour from spam check ([Gargron](https://github.com/tootsuite/mastodon/pull/12117))
+- Remove HTML `lang` attribute from individual statuses in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12124))
+- Remove fallback to long description on sidebar and meta description ([Gargron](https://github.com/tootsuite/mastodon/pull/12119))
+
+### Fixed
+
+- Fix preloaded JSON-LD context for identity not being used ([Gargron](https://github.com/tootsuite/mastodon/pull/12138))
+- Fix media editing modal changing dimensions once the image loads ([Gargron](https://github.com/tootsuite/mastodon/pull/12131))
+- Fix not showing whether a custom emoji has a local counterpart in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12135))
+- Fix attachment not being re-downloaded even if file is not stored ([Gargron](https://github.com/tootsuite/mastodon/pull/12125))
+- Fix old migration trying to use new column due to default status scope ([Gargron](https://github.com/tootsuite/mastodon/pull/12095))
+- Fix column back button missing for not found accounts ([trwnh](https://github.com/tootsuite/mastodon/pull/12094))
+- Fix issues with tootctl's parallelization and progress reporting ([Gargron](https://github.com/tootsuite/mastodon/pull/12093), [Gargron](https://github.com/tootsuite/mastodon/pull/12097))
+- Fix existing user records with now-renamed `pt` locale ([Gargron](https://github.com/tootsuite/mastodon/pull/12092))
+- Fix hashtag timeline REST API accepting too many hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12091))
+- Fix `GET /api/v1/instance` REST APIs being unavailable in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12089))
+- Fix performance of home feed regeneration and merging ([Gargron](https://github.com/tootsuite/mastodon/pull/12084))
+- Fix ffmpeg performance issues due to stdout buffer overflow ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12088))
+- Fix S3 adapter retrying failing uploads with exponential backoff ([Gargron](https://github.com/tootsuite/mastodon/pull/12085))
+- Fix `tootctl accounts cull` advertising unused option flag ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12074))
+
 ## [3.0.0] - 2019-10-03
 ### Added
 
diff --git a/Gemfile b/Gemfile
index ccac9adc9..7dd33f312 100644
--- a/Gemfile
+++ b/Gemfile
@@ -90,7 +90,7 @@ gem 'simple_form', '~> 4.1'
 gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
 gem 'stoplight', '~> 2.1.3'
 gem 'strong_migrations', '~> 0.4'
-gem 'tty-command', '~> 0.8', require: false
+gem 'tty-command', '~> 0.9', require: false
 gem 'tty-prompt', '~> 0.19', require: false
 gem 'twitter-text', '~> 1.14'
 gem 'tzinfo-data', '~> 1.2019'
@@ -119,7 +119,7 @@ end
 group :test do
   gem 'capybara', '~> 3.29'
   gem 'climate_control', '~> 0.2'
-  gem 'faker', '~> 2.4'
+  gem 'faker', '~> 2.5'
   gem 'microformats', '~> 4.1'
   gem 'rails-controller-testing', '~> 1.0'
   gem 'rspec-sidekiq', '~> 3.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index 9d506d106..8678cfa3a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -93,7 +93,7 @@ GEM
       tzinfo (~> 1.1)
     addressable (2.7.0)
       public_suffix (>= 2.0.2, < 5.0)
-    airbrussh (1.3.3)
+    airbrussh (1.3.4)
       sshkit (>= 1.6.1, != 1.7.0)
     annotate (2.7.5)
       activerecord (>= 3.2, < 7.0)
@@ -142,7 +142,7 @@ GEM
       bundler (>= 1.2.0, < 3)
       thor (~> 0.18)
     byebug (11.0.0)
-    capistrano (3.11.1)
+    capistrano (3.11.2)
       airbrussh (>= 1.0.0)
       i18n
       rake (>= 10.0.0)
@@ -188,13 +188,14 @@ GEM
     css_parser (1.7.0)
       addressable
     debug_inspector (0.0.3)
-    derailed_benchmarks (1.3.6)
+    derailed_benchmarks (1.4.0)
       benchmark-ips (~> 2)
       get_process_mem (~> 0)
       heapy (~> 0)
       memory_profiler (~> 0)
       rack (>= 1)
       rake (> 10, < 13)
+      ruby-statistics (>= 2.1)
       thor (~> 0.19)
     devise (4.7.1)
       bcrypt (~> 3.0)
@@ -233,13 +234,13 @@ GEM
       faraday
       multi_json
     encryptor (3.0.0)
-    equatable (0.5.0)
+    equatable (0.6.1)
     erubi (1.8.0)
     et-orbi (1.1.6)
       tzinfo
     excon (0.62.0)
     fabrication (2.20.2)
-    faker (2.4.0)
+    faker (2.5.0)
       i18n (~> 1.6.0)
     faraday (0.15.4)
       multipart-post (>= 1.2, < 3)
@@ -265,7 +266,8 @@ GEM
     fuubar (2.4.1)
       rspec-core (~> 3.0)
       ruby-progressbar (~> 1.4)
-    get_process_mem (0.2.3)
+    get_process_mem (0.2.4)
+      ffi (~> 1.0)
     globalid (0.4.2)
       activesupport (>= 4.2.0)
     goldfinger (2.1.0)
@@ -429,13 +431,13 @@ GEM
     parser (2.6.4.0)
       ast (~> 2.4.0)
     parslet (1.8.2)
-    pastel (0.7.2)
-      equatable (~> 0.5.0)
-      tty-color (~> 0.4.0)
+    pastel (0.7.3)
+      equatable (~> 0.6)
+      tty-color (~> 0.5)
     pg (1.1.4)
     pghero (2.3.0)
       activerecord (>= 5)
-    pkg-config (1.3.8)
+    pkg-config (1.3.9)
     premailer (1.11.1)
       addressable
       css_parser (>= 1.6.0)
@@ -571,6 +573,7 @@ GEM
     ruby-progressbar (1.10.1)
     ruby-saml (1.9.0)
       nokogiri (>= 1.5.10)
+    ruby-statistics (2.1.1)
     rufus-scheduler (3.5.2)
       fugit (~> 1.1, >= 1.1.5)
     safe_yaml (1.0.5)
@@ -629,8 +632,8 @@ GEM
     thor (0.20.3)
     thread_safe (0.3.6)
     tilt (2.0.9)
-    tty-color (0.4.3)
-    tty-command (0.8.2)
+    tty-color (0.5.0)
+    tty-command (0.9.0)
       pastel (~> 0.7.0)
     tty-cursor (0.7.0)
     tty-prompt (0.19.0)
@@ -655,7 +658,7 @@ GEM
     uniform_notifier (1.12.1)
     warden (1.2.8)
       rack (>= 2.0.6)
-    webmock (3.7.5)
+    webmock (3.7.6)
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
@@ -709,7 +712,7 @@ DEPENDENCIES
   doorkeeper (~> 5.2)
   dotenv-rails (~> 2.7)
   fabrication (~> 2.20)
-  faker (~> 2.4)
+  faker (~> 2.5)
   fast_blank (~> 1.0)
   fastimage
   fog-core (<= 2.1.0)
@@ -796,7 +799,7 @@ DEPENDENCIES
   streamio-ffmpeg (~> 3.0)
   strong_migrations (~> 0.4)
   thor (~> 0.20)
-  tty-command (~> 0.8)
+  tty-command (~> 0.9)
   tty-prompt (~> 0.19)
   twitter-text (~> 1.14)
   tzinfo-data (~> 1.2019)
diff --git a/app/controllers/api/v1/instances/activity_controller.rb b/app/controllers/api/v1/instances/activity_controller.rb
index 4fb5a69d8..b30e8464c 100644
--- a/app/controllers/api/v1/instances/activity_controller.rb
+++ b/app/controllers/api/v1/instances/activity_controller.rb
@@ -4,6 +4,7 @@ class Api::V1::Instances::ActivityController < Api::BaseController
   before_action :require_enabled_api!
 
   skip_before_action :set_cache_headers
+  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 
   respond_to :json
 
diff --git a/app/controllers/api/v1/instances/peers_controller.rb b/app/controllers/api/v1/instances/peers_controller.rb
index 75c3cb4ba..cc00d8a6b 100644
--- a/app/controllers/api/v1/instances/peers_controller.rb
+++ b/app/controllers/api/v1/instances/peers_controller.rb
@@ -4,6 +4,7 @@ class Api::V1::Instances::PeersController < Api::BaseController
   before_action :require_enabled_api!
 
   skip_before_action :set_cache_headers
+  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 
   respond_to :json
 
diff --git a/app/controllers/api/v1/instances_controller.rb b/app/controllers/api/v1/instances_controller.rb
index 8d8231423..c323b60b4 100644
--- a/app/controllers/api/v1/instances_controller.rb
+++ b/app/controllers/api/v1/instances_controller.rb
@@ -4,6 +4,7 @@ class Api::V1::InstancesController < Api::BaseController
   respond_to :json
 
   skip_before_action :set_cache_headers
+  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 
   def show
     expires_in 3.minutes, public: true
diff --git a/app/controllers/api/v1/streaming_controller.rb b/app/controllers/api/v1/streaming_controller.rb
index 66b812e76..ebb17608c 100644
--- a/app/controllers/api/v1/streaming_controller.rb
+++ b/app/controllers/api/v1/streaming_controller.rb
@@ -5,11 +5,17 @@ class Api::V1::StreamingController < Api::BaseController
 
   def index
     if Rails.configuration.x.streaming_api_base_url != request.host
-      uri = URI.parse(request.url)
-      uri.host = URI.parse(Rails.configuration.x.streaming_api_base_url).host
-      redirect_to uri.to_s, status: 301
+      redirect_to streaming_api_url, status: 301
     else
-      raise ActiveRecord::RecordNotFound
+      not_found
     end
   end
+
+  private
+
+  def streaming_api_url
+    Addressable::URI.parse(request.url).tap do |uri|
+      uri.host = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url).host
+    end.to_s
+  end
 end
diff --git a/app/controllers/api/v1/timelines/home_controller.rb b/app/controllers/api/v1/timelines/home_controller.rb
index fcd0757f1..ff5ede138 100644
--- a/app/controllers/api/v1/timelines/home_controller.rb
+++ b/app/controllers/api/v1/timelines/home_controller.rb
@@ -13,7 +13,7 @@ class Api::V1::Timelines::HomeController < Api::BaseController
     render json: @statuses,
            each_serializer: REST::StatusSerializer,
            relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id),
-           status: regeneration_in_progress? ? 206 : 200
+           status: account_home_feed.regenerating? ? 206 : 200
   end
 
   private
@@ -62,8 +62,4 @@ class Api::V1::Timelines::HomeController < Api::BaseController
   def pagination_since_id
     @statuses.first.id
   end
-
-  def regeneration_in_progress?
-    Redis.current.exists("account:#{current_account.id}:regeneration")
-  end
 end
diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb
index efde02ac2..eac9dde6f 100644
--- a/app/controllers/auth/sessions_controller.rb
+++ b/app/controllers/auth/sessions_controller.rb
@@ -108,6 +108,7 @@ class Auth::SessionsController < Devise::SessionsController
 
   def prompt_for_two_factor(user)
     session[:otp_user_id] = user.id
+    use_pack 'auth'
     @body_classes = 'lighter'
     render :two_factor
   end
diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js
index f5bc0fd23..16ff4703e 100644
--- a/app/javascript/flavours/glitch/actions/timelines.js
+++ b/app/javascript/flavours/glitch/actions/timelines.js
@@ -97,7 +97,7 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
     api(getState).get(path, { params }).then(response => {
       const next = getLinks(response).refs.find(link => link.rel === 'next');
       dispatch(importFetchedStatuses(response.data));
-      dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
+      dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
       done();
     }).catch(error => {
       dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
diff --git a/app/javascript/flavours/glitch/components/column_back_button.js b/app/javascript/flavours/glitch/components/column_back_button.js
index 8326cbb79..05688f867 100644
--- a/app/javascript/flavours/glitch/components/column_back_button.js
+++ b/app/javascript/flavours/glitch/components/column_back_button.js
@@ -41,7 +41,19 @@ export default class ColumnBackButton extends React.PureComponent {
     if (multiColumn) {
       return component;
     } else {
-      return createPortal(component, document.getElementById('tabs-bar__portal'));
+      // The portal container and the component may be rendered to the DOM in
+      // the same React render pass, so the container might not be available at
+      // the time `render()` is called.
+      const container = document.getElementById('tabs-bar__portal');
+      if (container === null) {
+        // The container wasn't available, force a re-render so that the
+        // component can eventually be inserted in the container and not scroll
+        // with the rest of the area.
+        this.forceUpdate();
+        return component;
+      } else {
+        return createPortal(component, container);
+      }
     }
   }
 
diff --git a/app/javascript/flavours/glitch/components/column_header.js b/app/javascript/flavours/glitch/components/column_header.js
index 43c9f1144..dd1162429 100644
--- a/app/javascript/flavours/glitch/components/column_header.js
+++ b/app/javascript/flavours/glitch/components/column_header.js
@@ -235,7 +235,19 @@ class ColumnHeader extends React.PureComponent {
     if (multiColumn || placeholder) {
       return component;
     } else {
-      return createPortal(component, document.getElementById('tabs-bar__portal'));
+      // The portal container and the component may be rendered to the DOM in
+      // the same React render pass, so the container might not be available at
+      // the time `render()` is called.
+      const container = document.getElementById('tabs-bar__portal');
+      if (container === null) {
+        // The container wasn't available, force a re-render so that the
+        // component can eventually be inserted in the container and not scroll
+        // with the rest of the area.
+        this.forceUpdate();
+        return component;
+      } else {
+        return createPortal(component, container);
+      }
     }
   }
 
diff --git a/app/javascript/flavours/glitch/components/extended_video_player.js b/app/javascript/flavours/glitch/components/extended_video_player.js
deleted file mode 100644
index 009c0d559..000000000
--- a/app/javascript/flavours/glitch/components/extended_video_player.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-export default class ExtendedVideoPlayer extends React.PureComponent {
-
-  static propTypes = {
-    src: PropTypes.string.isRequired,
-    alt: PropTypes.string,
-    width: PropTypes.number,
-    height: PropTypes.number,
-    time: PropTypes.number,
-    controls: PropTypes.bool.isRequired,
-    muted: PropTypes.bool.isRequired,
-    onClick: PropTypes.func,
-  };
-
-  handleLoadedData = () => {
-    if (this.props.time) {
-      this.video.currentTime = this.props.time;
-    }
-  }
-
-  componentDidMount () {
-    this.video.addEventListener('loadeddata', this.handleLoadedData);
-  }
-
-  componentWillUnmount () {
-    this.video.removeEventListener('loadeddata', this.handleLoadedData);
-  }
-
-  setRef = (c) => {
-    this.video = c;
-  }
-
-  handleClick = e => {
-    e.stopPropagation();
-    const handler = this.props.onClick;
-    if (handler) handler();
-  }
-
-  render () {
-    const { src, muted, controls, alt } = this.props;
-
-    return (
-      <div className='extended-video-player'>
-        <video
-          ref={this.setRef}
-          src={src}
-          autoPlay
-          role='button'
-          tabIndex='0'
-          aria-label={alt}
-          title={alt}
-          muted={muted}
-          controls={controls}
-          loop={!controls}
-          onClick={this.handleClick}
-        />
-      </div>
-    );
-  }
-
-}
diff --git a/app/javascript/flavours/glitch/components/gifv.js b/app/javascript/flavours/glitch/components/gifv.js
new file mode 100644
index 000000000..83cfae49c
--- /dev/null
+++ b/app/javascript/flavours/glitch/components/gifv.js
@@ -0,0 +1,75 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+export default class GIFV extends React.PureComponent {
+
+  static propTypes = {
+    src: PropTypes.string.isRequired,
+    alt: PropTypes.string,
+    width: PropTypes.number,
+    height: PropTypes.number,
+    onClick: PropTypes.func,
+  };
+
+  state = {
+    loading: true,
+  };
+
+  handleLoadedData = () => {
+    this.setState({ loading: false });
+  }
+
+  componentWillReceiveProps (nextProps) {
+    if (nextProps.src !== this.props.src) {
+      this.setState({ loading: true });
+    }
+  }
+
+  handleClick = e => {
+    const { onClick } = this.props;
+
+    if (onClick) {
+      e.stopPropagation();
+      onClick();
+    }
+  }
+
+  render () {
+    const { src, width, height, alt } = this.props;
+    const { loading } = this.state;
+
+    return (
+      <div className='gifv' style={{ position: 'relative' }}>
+        {loading && (
+          <canvas
+            width={width}
+            height={height}
+            role='button'
+            tabIndex='0'
+            aria-label={alt}
+            title={alt}
+            onClick={this.handleClick}
+          />
+        )}
+
+        <video
+          src={src}
+          width={width}
+          height={height}
+          role='button'
+          tabIndex='0'
+          aria-label={alt}
+          title={alt}
+          muted
+          loop
+          autoPlay
+          playsInline
+          onClick={this.handleClick}
+          onLoadedData={this.handleLoadedData}
+          style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }}
+        />
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/flavours/glitch/components/missing_indicator.js b/app/javascript/flavours/glitch/components/missing_indicator.js
index 70d8c3b98..ee5bf7c1e 100644
--- a/app/javascript/flavours/glitch/components/missing_indicator.js
+++ b/app/javascript/flavours/glitch/components/missing_indicator.js
@@ -1,17 +1,24 @@
 import React from 'react';
+import PropTypes from 'prop-types';
 import { FormattedMessage } from 'react-intl';
+import illustration from 'flavours/glitch/images/elephant_ui_disappointed.svg';
+import classNames from 'classnames';
 
-const MissingIndicator = () => (
-  <div className='regeneration-indicator missing-indicator'>
-    <div>
-      <div className='regeneration-indicator__figure' />
+const MissingIndicator = ({ fullPage }) => (
+  <div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}>
+    <div className='regeneration-indicator__figure'>
+      <img src={illustration} alt='' />
+    </div>
 
-      <div className='regeneration-indicator__label'>
-        <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
-        <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
-      </div>
+    <div className='regeneration-indicator__label'>
+      <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
+      <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
     </div>
   </div>
 );
 
+MissingIndicator.propTypes = {
+  fullPage: PropTypes.bool,
+};
+
 export default MissingIndicator;
diff --git a/app/javascript/flavours/glitch/components/regeneration_indicator.js b/app/javascript/flavours/glitch/components/regeneration_indicator.js
new file mode 100644
index 000000000..f4e0a79ef
--- /dev/null
+++ b/app/javascript/flavours/glitch/components/regeneration_indicator.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import illustration from 'flavours/glitch/images/elephant_ui_working.svg';
+
+const MissingIndicator = () => (
+  <div className='regeneration-indicator'>
+    <div className='regeneration-indicator__figure'>
+      <img src={illustration} alt='' />
+    </div>
+
+    <div className='regeneration-indicator__label'>
+      <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
+      <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
+    </div>
+  </div>
+);
+
+export default MissingIndicator;
diff --git a/app/javascript/flavours/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js
index 209350440..da8b787ba 100644
--- a/app/javascript/flavours/glitch/components/status_content.js
+++ b/app/javascript/flavours/glitch/components/status_content.js
@@ -315,7 +315,7 @@ export default class StatusContent extends React.PureComponent {
           <p
             style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}
           >
-            <span dangerouslySetInnerHTML={spoilerContent} lang={status.get('language')} />
+            <span dangerouslySetInnerHTML={spoilerContent} />
             {' '}
             <button tabIndex='0' className='status__content__spoiler-link' onClick={this.handleSpoilerClick}>
               {toggleText}
@@ -332,7 +332,6 @@ export default class StatusContent extends React.PureComponent {
               tabIndex={!hidden ? 0 : null}
               dangerouslySetInnerHTML={content}
               className='status__content__text'
-              lang={status.get('language')}
             />
             {media}
           </div>
@@ -353,7 +352,6 @@ export default class StatusContent extends React.PureComponent {
             ref={this.setContentsRef}
             key={`contents-${tagLinks}-${rewriteMentions}`}
             dangerouslySetInnerHTML={content}
-            lang={status.get('language')}
             className='status__content__text'
             tabIndex='0'
           />
@@ -368,7 +366,7 @@ export default class StatusContent extends React.PureComponent {
           tabIndex='0'
           ref={this.setRef}
         >
-          <div ref={this.setContentsRef} key={`contents-${tagLinks}`} className='status__content__text' dangerouslySetInnerHTML={content} lang={status.get('language')} tabIndex='0' />
+          <div ref={this.setContentsRef} key={`contents-${tagLinks}`} className='status__content__text' dangerouslySetInnerHTML={content} tabIndex='0' />
           {media}
         </div>
       );
diff --git a/app/javascript/flavours/glitch/components/status_list.js b/app/javascript/flavours/glitch/components/status_list.js
index c1f51b307..a399ff567 100644
--- a/app/javascript/flavours/glitch/components/status_list.js
+++ b/app/javascript/flavours/glitch/components/status_list.js
@@ -6,7 +6,7 @@ import StatusContainer from 'flavours/glitch/containers/status_container';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import LoadGap from './load_gap';
 import ScrollableList from './scrollable_list';
-import { FormattedMessage } from 'react-intl';
+import RegenerationIndicator from 'flavours/glitch/components/regeneration_indicator';
 
 export default class StatusList extends ImmutablePureComponent {
 
@@ -81,18 +81,7 @@ export default class StatusList extends ImmutablePureComponent {
     const { isLoading, isPartial } = other;
 
     if (isPartial) {
-      return (
-        <div className='regeneration-indicator'>
-          <div>
-            <div className='regeneration-indicator__figure' />
-
-            <div className='regeneration-indicator__label'>
-              <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
-              <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
-            </div>
-          </div>
-        </div>
-      );
+      return <RegenerationIndicator />;
     }
 
     let scrollableContent = (isLoading || statusIds.size > 0) ? (
diff --git a/app/javascript/flavours/glitch/features/account_timeline/index.js b/app/javascript/flavours/glitch/features/account_timeline/index.js
index 1f02c1be5..2ef4ff602 100644
--- a/app/javascript/flavours/glitch/features/account_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/account_timeline/index.js
@@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/loading_indicator';
 import Column from '../ui/components/column';
 import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';
 import HeaderContainer from './containers/header_container';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
 import { List as ImmutableList } from 'immutable';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import { FormattedMessage } from 'react-intl';
@@ -82,6 +83,7 @@ class AccountTimeline extends ImmutablePureComponent {
     if (!isAccount) {
       return (
         <Column>
+          <ColumnBackButton multiColumn={multiColumn} />
           <MissingIndicator />
         </Column>
       );
diff --git a/app/javascript/flavours/glitch/features/generic_not_found/index.js b/app/javascript/flavours/glitch/features/generic_not_found/index.js
index d01a1ba47..4412adaed 100644
--- a/app/javascript/flavours/glitch/features/generic_not_found/index.js
+++ b/app/javascript/flavours/glitch/features/generic_not_found/index.js
@@ -4,7 +4,7 @@ import MissingIndicator from 'flavours/glitch/components/missing_indicator';
 
 const GenericNotFound = () => (
   <Column>
-    <MissingIndicator />
+    <MissingIndicator fullPage />
   </Column>
 );
 
diff --git a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js
index d5c9e66ae..f5ecf77b9 100644
--- a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js
@@ -16,6 +16,7 @@ import UploadProgress from 'flavours/glitch/features/compose/components/upload_p
 import CharacterCounter from 'flavours/glitch/features/compose/components/character_counter';
 import { length } from 'stringz';
 import { Tesseract as fetchTesseract } from 'flavours/glitch/util/async-components';
+import GIFV from 'flavours/glitch/components/gifv';
 
 const messages = defineMessages({
   close: { id: 'lightbox.close', defaultMessage: 'Close' },
@@ -41,6 +42,36 @@ const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
 
 const assetHost = process.env.CDN_HOST || '';
 
+class ImageLoader extends React.PureComponent {
+
+  static propTypes = {
+    src: PropTypes.string.isRequired,
+    width: PropTypes.number,
+    height: PropTypes.number,
+  };
+
+  state = {
+    loading: true,
+  };
+
+  componentDidMount() {
+    const image = new Image();
+    image.addEventListener('load', () => this.setState({ loading: false }));
+    image.src = this.props.src;
+  }
+
+  render () {
+    const { loading } = this.state;
+
+    if (loading) {
+      return <canvas width={this.props.width} height={this.props.height} />;
+    } else {
+      return <img {...this.props} alt='' />;
+    }
+  }
+
+}
+
 export default @connect(mapStateToProps, mapDispatchToProps)
 @injectIntl
 class FocalPointModal extends ImmutablePureComponent {
@@ -60,6 +91,7 @@ class FocalPointModal extends ImmutablePureComponent {
     description: '',
     dirty: false,
     progress: 0,
+    loading: true,
   };
 
   componentWillMount () {
@@ -242,8 +274,8 @@ class FocalPointModal extends ImmutablePureComponent {
           <div className='focal-point-modal__content'>
             {focals && (
               <div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
-                {media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
-                {media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
+                {media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />}
+                {media.get('type') === 'gifv' && <GIFV src={media.get('url')} width={width} height={height} />}
 
                 <div className='focal-point__preview'>
                   <strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
index d61c69f69..c7d6c374c 100644
--- a/app/javascript/flavours/glitch/features/ui/components/media_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
@@ -3,13 +3,13 @@ import ReactSwipeableViews from 'react-swipeable-views';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import PropTypes from 'prop-types';
 import Video from 'flavours/glitch/features/video';
-import ExtendedVideoPlayer from 'flavours/glitch/components/extended_video_player';
 import classNames from 'classnames';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import IconButton from 'flavours/glitch/components/icon_button';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import ImageLoader from './image_loader';
 import Icon from 'flavours/glitch/components/icon';
+import GIFV from 'flavours/glitch/components/gifv';
 
 const messages = defineMessages({
   close: { id: 'lightbox.close', defaultMessage: 'Close' },
@@ -149,10 +149,8 @@ class MediaModal extends ImmutablePureComponent {
         );
       } else if (image.get('type') === 'gifv') {
         return (
-          <ExtendedVideoPlayer
+          <GIFV
             src={image.get('url')}
-            muted
-            controls={false}
             width={width}
             height={height}
             key={image.get('preview_url')}
diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss
index 716796af9..75bddeefc 100644
--- a/app/javascript/flavours/glitch/styles/components/modal.scss
+++ b/app/javascript/flavours/glitch/styles/components/modal.scss
@@ -878,7 +878,8 @@
   background: $base-shadow-color;
 
   img,
-  video {
+  video,
+  canvas {
     display: block;
     max-height: 80vh;
     width: 100%;
diff --git a/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss b/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss
index 178df6652..c65e6a9af 100644
--- a/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss
+++ b/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss
@@ -7,37 +7,27 @@
   cursor: default;
   display: flex;
   flex: 1 1 auto;
+  flex-direction: column;
   align-items: center;
   justify-content: center;
   padding: 20px;
 
-  & > div {
-    width: 100%;
-    background: transparent;
-    padding-top: 0;
-  }
-
   &__figure {
-    background: url('~flavours/glitch/images/elephant_ui_working.svg') no-repeat center 0;
-    width: 100%;
-    height: 160px;
-    background-size: contain;
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
+    &,
+    img {
+      display: block;
+      width: auto;
+      height: 160px;
+      margin: 0;
+    }
   }
 
-  &.missing-indicator {
+  &--without-header {
     padding-top: 20px + 48px;
-
-    .regeneration-indicator__figure {
-      background-image: url('~flavours/glitch/images/elephant_ui_disappointed.svg');
-    }
   }
 
   &__label {
-    margin-top: 200px;
+    margin-top: 30px;
 
     strong {
       display: block;
diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js
index 7eeba2aa7..bc2ac5e82 100644
--- a/app/javascript/mastodon/actions/timelines.js
+++ b/app/javascript/mastodon/actions/timelines.js
@@ -97,7 +97,7 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
     api(getState).get(path, { params }).then(response => {
       const next = getLinks(response).refs.find(link => link.rel === 'next');
       dispatch(importFetchedStatuses(response.data));
-      dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
+      dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
       done();
     }).catch(error => {
       dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
diff --git a/app/javascript/mastodon/components/extended_video_player.js b/app/javascript/mastodon/components/extended_video_player.js
deleted file mode 100644
index 009c0d559..000000000
--- a/app/javascript/mastodon/components/extended_video_player.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-export default class ExtendedVideoPlayer extends React.PureComponent {
-
-  static propTypes = {
-    src: PropTypes.string.isRequired,
-    alt: PropTypes.string,
-    width: PropTypes.number,
-    height: PropTypes.number,
-    time: PropTypes.number,
-    controls: PropTypes.bool.isRequired,
-    muted: PropTypes.bool.isRequired,
-    onClick: PropTypes.func,
-  };
-
-  handleLoadedData = () => {
-    if (this.props.time) {
-      this.video.currentTime = this.props.time;
-    }
-  }
-
-  componentDidMount () {
-    this.video.addEventListener('loadeddata', this.handleLoadedData);
-  }
-
-  componentWillUnmount () {
-    this.video.removeEventListener('loadeddata', this.handleLoadedData);
-  }
-
-  setRef = (c) => {
-    this.video = c;
-  }
-
-  handleClick = e => {
-    e.stopPropagation();
-    const handler = this.props.onClick;
-    if (handler) handler();
-  }
-
-  render () {
-    const { src, muted, controls, alt } = this.props;
-
-    return (
-      <div className='extended-video-player'>
-        <video
-          ref={this.setRef}
-          src={src}
-          autoPlay
-          role='button'
-          tabIndex='0'
-          aria-label={alt}
-          title={alt}
-          muted={muted}
-          controls={controls}
-          loop={!controls}
-          onClick={this.handleClick}
-        />
-      </div>
-    );
-  }
-
-}
diff --git a/app/javascript/mastodon/components/gifv.js b/app/javascript/mastodon/components/gifv.js
new file mode 100644
index 000000000..83cfae49c
--- /dev/null
+++ b/app/javascript/mastodon/components/gifv.js
@@ -0,0 +1,75 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+export default class GIFV extends React.PureComponent {
+
+  static propTypes = {
+    src: PropTypes.string.isRequired,
+    alt: PropTypes.string,
+    width: PropTypes.number,
+    height: PropTypes.number,
+    onClick: PropTypes.func,
+  };
+
+  state = {
+    loading: true,
+  };
+
+  handleLoadedData = () => {
+    this.setState({ loading: false });
+  }
+
+  componentWillReceiveProps (nextProps) {
+    if (nextProps.src !== this.props.src) {
+      this.setState({ loading: true });
+    }
+  }
+
+  handleClick = e => {
+    const { onClick } = this.props;
+
+    if (onClick) {
+      e.stopPropagation();
+      onClick();
+    }
+  }
+
+  render () {
+    const { src, width, height, alt } = this.props;
+    const { loading } = this.state;
+
+    return (
+      <div className='gifv' style={{ position: 'relative' }}>
+        {loading && (
+          <canvas
+            width={width}
+            height={height}
+            role='button'
+            tabIndex='0'
+            aria-label={alt}
+            title={alt}
+            onClick={this.handleClick}
+          />
+        )}
+
+        <video
+          src={src}
+          width={width}
+          height={height}
+          role='button'
+          tabIndex='0'
+          aria-label={alt}
+          title={alt}
+          muted
+          loop
+          autoPlay
+          playsInline
+          onClick={this.handleClick}
+          onLoadedData={this.handleLoadedData}
+          style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }}
+        />
+      </div>
+    );
+  }
+
+}
diff --git a/app/javascript/mastodon/components/missing_indicator.js b/app/javascript/mastodon/components/missing_indicator.js
index 70d8c3b98..7b0101bab 100644
--- a/app/javascript/mastodon/components/missing_indicator.js
+++ b/app/javascript/mastodon/components/missing_indicator.js
@@ -1,17 +1,24 @@
 import React from 'react';
+import PropTypes from 'prop-types';
 import { FormattedMessage } from 'react-intl';
+import illustration from 'mastodon/../images/elephant_ui_disappointed.svg';
+import classNames from 'classnames';
 
-const MissingIndicator = () => (
-  <div className='regeneration-indicator missing-indicator'>
-    <div>
-      <div className='regeneration-indicator__figure' />
+const MissingIndicator = ({ fullPage }) => (
+  <div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}>
+    <div className='regeneration-indicator__figure'>
+      <img src={illustration} alt='' />
+    </div>
 
-      <div className='regeneration-indicator__label'>
-        <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
-        <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
-      </div>
+    <div className='regeneration-indicator__label'>
+      <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
+      <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
     </div>
   </div>
 );
 
+MissingIndicator.propTypes = {
+  fullPage: PropTypes.bool,
+};
+
 export default MissingIndicator;
diff --git a/app/javascript/mastodon/components/regeneration_indicator.js b/app/javascript/mastodon/components/regeneration_indicator.js
new file mode 100644
index 000000000..faf88c6b5
--- /dev/null
+++ b/app/javascript/mastodon/components/regeneration_indicator.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import illustration from 'mastodon/../images/elephant_ui_working.svg';
+
+const MissingIndicator = () => (
+  <div className='regeneration-indicator'>
+    <div className='regeneration-indicator__figure'>
+      <img src={illustration} alt='' />
+    </div>
+
+    <div className='regeneration-indicator__label'>
+      <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
+      <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
+    </div>
+  </div>
+);
+
+export default MissingIndicator;
diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js
index c171e7a66..4ce9ec49f 100644
--- a/app/javascript/mastodon/components/status_content.js
+++ b/app/javascript/mastodon/components/status_content.js
@@ -216,14 +216,14 @@ export default class StatusContent extends React.PureComponent {
       return (
         <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
           <p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
-            <span dangerouslySetInnerHTML={spoilerContent} lang={status.get('language')} />
+            <span dangerouslySetInnerHTML={spoilerContent} />
             {' '}
             <button tabIndex='0' className={`status__content__spoiler-link ${hidden ? 'status__content__spoiler-link--show-more' : 'status__content__spoiler-link--show-less'}`} onClick={this.handleSpoilerClick}>{toggleText}</button>
           </p>
 
           {mentionsPlaceholder}
 
-          <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
+          <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} />
 
           {!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
         </div>
@@ -231,7 +231,7 @@ export default class StatusContent extends React.PureComponent {
     } else if (this.props.onClick) {
       const output = [
         <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'>
-          <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
+          <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
 
           {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
         </div>,
@@ -245,7 +245,7 @@ export default class StatusContent extends React.PureComponent {
     } else {
       return (
         <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle}>
-          <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
+          <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
 
           {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
         </div>
diff --git a/app/javascript/mastodon/components/status_list.js b/app/javascript/mastodon/components/status_list.js
index 745e6422d..e1b370c91 100644
--- a/app/javascript/mastodon/components/status_list.js
+++ b/app/javascript/mastodon/components/status_list.js
@@ -1,12 +1,12 @@
 import { debounce } from 'lodash';
 import React from 'react';
-import { FormattedMessage } from 'react-intl';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import PropTypes from 'prop-types';
 import StatusContainer from '../containers/status_container';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import LoadGap from './load_gap';
 import ScrollableList from './scrollable_list';
+import RegenerationIndicator from 'mastodon/components/regeneration_indicator';
 
 export default class StatusList extends ImmutablePureComponent {
 
@@ -81,18 +81,7 @@ export default class StatusList extends ImmutablePureComponent {
     const { isLoading, isPartial } = other;
 
     if (isPartial) {
-      return (
-        <div className='regeneration-indicator'>
-          <div>
-            <div className='regeneration-indicator__figure' />
-
-            <div className='regeneration-indicator__label'>
-              <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
-              <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
-            </div>
-          </div>
-        </div>
-      );
+      return <RegenerationIndicator />;
     }
 
     let scrollableContent = (isLoading || statusIds.size > 0) ? (
diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js
index 69bab1e86..8d0cbe5a1 100644
--- a/app/javascript/mastodon/features/account_timeline/index.js
+++ b/app/javascript/mastodon/features/account_timeline/index.js
@@ -83,6 +83,7 @@ class AccountTimeline extends ImmutablePureComponent {
     if (!isAccount) {
       return (
         <Column>
+          <ColumnBackButton multiColumn={multiColumn} />
           <MissingIndicator />
         </Column>
       );
diff --git a/app/javascript/mastodon/features/compose/components/poll_form.js b/app/javascript/mastodon/features/compose/components/poll_form.js
index 211601d52..bdccf9ce7 100644
--- a/app/javascript/mastodon/features/compose/components/poll_form.js
+++ b/app/javascript/mastodon/features/compose/components/poll_form.js
@@ -77,7 +77,7 @@ class Option extends React.PureComponent {
 
           <AutosuggestInput
             placeholder={intl.formatMessage(messages.option_placeholder, { number: index + 1 })}
-            maxLength={25}
+            maxLength={100}
             value={title}
             onChange={this.handleOptionTitleChange}
             suggestions={this.props.suggestions}
@@ -142,7 +142,7 @@ class PollForm extends ImmutablePureComponent {
         </ul>
 
         <div className='poll__footer'>
-          {options.size < 4 && (
+          {options.size < 5 && (
             <button className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button>
           )}
 
diff --git a/app/javascript/mastodon/features/generic_not_found/index.js b/app/javascript/mastodon/features/generic_not_found/index.js
index 0290be47f..41cd61a5f 100644
--- a/app/javascript/mastodon/features/generic_not_found/index.js
+++ b/app/javascript/mastodon/features/generic_not_found/index.js
@@ -4,7 +4,7 @@ import MissingIndicator from '../../components/missing_indicator';
 
 const GenericNotFound = () => (
   <Column>
-    <MissingIndicator />
+    <MissingIndicator fullPage />
   </Column>
 );
 
diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
index 1ab79a21d..3694ab904 100644
--- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js
+++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
@@ -16,6 +16,7 @@ import UploadProgress from 'mastodon/features/compose/components/upload_progress
 import CharacterCounter from 'mastodon/features/compose/components/character_counter';
 import { length } from 'stringz';
 import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
+import GIFV from 'mastodon/components/gifv';
 
 const messages = defineMessages({
   close: { id: 'lightbox.close', defaultMessage: 'Close' },
@@ -41,6 +42,36 @@ const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
 
 const assetHost = process.env.CDN_HOST || '';
 
+class ImageLoader extends React.PureComponent {
+
+  static propTypes = {
+    src: PropTypes.string.isRequired,
+    width: PropTypes.number,
+    height: PropTypes.number,
+  };
+
+  state = {
+    loading: true,
+  };
+
+  componentDidMount() {
+    const image = new Image();
+    image.addEventListener('load', () => this.setState({ loading: false }));
+    image.src = this.props.src;
+  }
+
+  render () {
+    const { loading } = this.state;
+
+    if (loading) {
+      return <canvas width={this.props.width} height={this.props.height} />;
+    } else {
+      return <img {...this.props} alt='' />;
+    }
+  }
+
+}
+
 export default @connect(mapStateToProps, mapDispatchToProps)
 @injectIntl
 class FocalPointModal extends ImmutablePureComponent {
@@ -60,6 +91,7 @@ class FocalPointModal extends ImmutablePureComponent {
     description: '',
     dirty: false,
     progress: 0,
+    loading: true,
   };
 
   componentWillMount () {
@@ -242,8 +274,8 @@ class FocalPointModal extends ImmutablePureComponent {
           <div className='focal-point-modal__content'>
             {focals && (
               <div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
-                {media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
-                {media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
+                {media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />}
+                {media.get('type') === 'gifv' && <GIFV src={media.get('url')} width={width} height={height} />}
 
                 <div className='focal-point__preview'>
                   <strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js
index 98ebd4b41..a785551c0 100644
--- a/app/javascript/mastodon/features/ui/components/media_modal.js
+++ b/app/javascript/mastodon/features/ui/components/media_modal.js
@@ -3,13 +3,13 @@ import ReactSwipeableViews from 'react-swipeable-views';
 import ImmutablePropTypes from 'react-immutable-proptypes';
 import PropTypes from 'prop-types';
 import Video from 'mastodon/features/video';
-import ExtendedVideoPlayer from 'mastodon/components/extended_video_player';
 import classNames from 'classnames';
 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 import IconButton from 'mastodon/components/icon_button';
 import ImmutablePureComponent from 'react-immutable-pure-component';
 import ImageLoader from './image_loader';
 import Icon from 'mastodon/components/icon';
+import GIFV from 'mastodon/components/gifv';
 
 const messages = defineMessages({
   close: { id: 'lightbox.close', defaultMessage: 'Close' },
@@ -169,10 +169,8 @@ class MediaModal extends ImmutablePureComponent {
         );
       } else if (image.get('type') === 'gifv') {
         return (
-          <ExtendedVideoPlayer
+          <GIFV
             src={image.get('url')}
-            muted
-            controls={false}
             width={width}
             height={height}
             key={image.get('preview_url')}
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 1a558e3b8..1b560b964 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -115,7 +115,7 @@
   "conversation.mark_as_read": "اعتبرها كمقروءة",
   "conversation.open": "اعرض المحادثة",
   "conversation.with": "بـ {names}",
-  "directory.federated": "From known fediverse",
+  "directory.federated": "مِن الفديفرس المعروف",
   "directory.local": "مِن {domain} فقط",
   "directory.new_arrivals": "الوافدون الجُدد",
   "directory.recently_active": "نشط مؤخرا",
@@ -155,7 +155,7 @@
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
   "follow_request.authorize": "ترخيص",
   "follow_request.reject": "رفض",
   "getting_started.developers": "المُطوِّرون",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "الأساسية",
   "home.column_settings.show_reblogs": "عرض الترقيات",
   "home.column_settings.show_replies": "اعرض الردود",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
   "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
   "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
@@ -244,7 +243,7 @@
   "lists.new.title_placeholder": "عنوان القائمة الجديدة",
   "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
   "lists.subheading": "قوائمك",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
   "loading_indicator.label": "تحميل...",
   "media_gallery.toggle_visible": "عرض / إخفاء",
   "missing_indicator.label": "غير موجود",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "التفضيلات",
   "navigation_bar.public_timeline": "الخيط العام الموحد",
   "navigation_bar.security": "الأمان",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "أُعجِب {name} بمنشورك",
   "notification.follow": "{name} يتابعك",
   "notification.mention": "{name} ذكرك",
@@ -301,10 +299,10 @@
   "notifications.group": "{count} إشعارات",
   "poll.closed": "انتهى",
   "poll.refresh": "تحديث",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# شخص} other {# أشخاص}}",
   "poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}",
   "poll.vote": "صَوّت",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "لقد صوّتت على هذه الإجابة",
   "poll_button.add_poll": "إضافة استطلاع للرأي",
   "poll_button.remove_poll": "إزالة استطلاع الرأي",
   "privacy.change": "اضبط خصوصية المنشور",
@@ -391,10 +389,10 @@
   "tabs_bar.notifications": "الإخطارات",
   "tabs_bar.search": "البحث",
   "time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
+  "time_remaining.hours": "{number, plural, one {# ساعة} other {# ساعات}} متبقية",
+  "time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
   "time_remaining.moments": "لحظات متبقية",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "time_remaining.seconds": "{number, plural, one {# ثانية} other {# ثوانٍ}} متبقية",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
   "trends.trending_now": "المتداولة الآن",
   "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
@@ -408,7 +406,7 @@
   "upload_modal.analyzing_picture": "جارٍ فحص الصورة…",
   "upload_modal.apply": "طبّق",
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
+  "upload_modal.detect_text": "اكتشف النص مِن الصورة",
   "upload_modal.edit_media": "تعديل الوسائط",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "معاينة ({ratio})",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 64c12db42..5145a6579 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Amosar toots compartíos",
   "home.column_settings.show_replies": "Amosar rempuestes",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferencies",
   "navigation_bar.public_timeline": "Llinia temporal federada",
   "navigation_bar.security": "Seguranza",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} siguióte",
   "notification.mention": "{name} mentóte",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 207d0cfc3..a4afe2adb 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Предпочитания",
   "navigation_bar.public_timeline": "Публичен канал",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} хареса твоята публикация",
   "notification.follow": "{name} те последва",
   "notification.mention": "{name} те спомена",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 240ff17e8..6c4f0def6 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "সাধারণ",
   "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান",
   "home.column_settings.show_replies": "মতামত দেখান",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "পছন্দসমূহ",
   "navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
   "navigation_bar.security": "নিরাপত্তা",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
   "notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
   "notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index b8cd5e479..db07f1aba 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 8e647691b..396e4a325 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Bàsic",
   "home.column_settings.show_reblogs": "Mostrar impulsos",
   "home.column_settings.show_replies": "Mostrar respostes",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferències",
   "navigation_bar.public_timeline": "Línia de temps federada",
   "navigation_bar.security": "Seguretat",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ha afavorit el teu estat",
   "notification.follow": "{name} et segueix",
   "notification.mention": "{name} t'ha esmentat",
@@ -395,7 +393,7 @@
   "time_remaining.minutes": "{number, plural, one {# minut} other {# minuts}} restants",
   "time_remaining.moments": "Moments restants",
   "time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
-  "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
+  "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {persones}} parlant-hi",
   "trends.trending_now": "Ara en tendència",
   "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
   "upload_area.title": "Arrossega i deixa anar per a carregar",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 3b059459c..6c680f13f 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Bàsichi",
   "home.column_settings.show_reblogs": "Vede e spartere",
   "home.column_settings.show_replies": "Vede e risposte",
-  "home.column_settings.update_live": "Attualizà in tempu reale",
   "intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferenze",
   "navigation_bar.public_timeline": "Linea pubblica glubale",
   "navigation_bar.security": "Sicurità",
-  "notification.and_n_others": "è {count, plural, one {# altru} other {# altri}}",
   "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
   "notification.follow": "{name} v'hà seguitatu",
   "notification.mention": "{name} v'hà mintuvatu",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index c783fbe77..fc807d45e 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -43,7 +43,7 @@
   "alert.unexpected.message": "Objevila se neočekávaná chyba.",
   "alert.unexpected.title": "Jejda!",
   "autosuggest_hashtag.per_week": "{count} za týden",
-  "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}",
+  "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
   "bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
   "bundle_column_error.retry": "Zkuste to znovu",
   "bundle_column_error.title": "Chyba sítě",
@@ -164,7 +164,7 @@
   "getting_started.heading": "Začínáme",
   "getting_started.invite": "Pozvat lidi",
   "getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.",
-  "getting_started.security": "Zabezpečení",
+  "getting_started.security": "Nastavení účtu",
   "getting_started.terms": "Podmínky používání",
   "hashtag.column_header.tag_mode.all": "a {additional}",
   "hashtag.column_header.tag_mode.any": "nebo {additional}",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Základní",
   "home.column_settings.show_reblogs": "Zobrazit boosty",
   "home.column_settings.show_replies": "Zobrazit odpovědi",
-  "home.column_settings.update_live": "Aktualizovat v reálném čase",
   "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}",
   "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Předvolby",
   "navigation_bar.public_timeline": "Federovaná časová osa",
   "navigation_bar.security": "Zabezpečení",
-  "notification.and_n_others": "a {count, plural, one {# další} few {# další} many {# dalších} other {# dalších}}",
   "notification.favourite": "{name} si oblíbil/a váš toot",
   "notification.follow": "{name} vás začal/a sledovat",
   "notification.mention": "{name} vás zmínil/a",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index b9dad4062..8c2e08bb3 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Syml",
   "home.column_settings.show_reblogs": "Dangos bŵstiau",
   "home.column_settings.show_replies": "Dangos ymatebion",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}",
   "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}",
   "intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Dewisiadau",
   "navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
   "navigation_bar.security": "Diogelwch",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "hoffodd {name} eich tŵt",
   "notification.follow": "dilynodd {name} chi",
   "notification.mention": "Soniodd {name} amdanoch chi",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 2362db471..95e4fe503 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -111,10 +111,10 @@
   "confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?",
   "confirmations.unfollow.confirm": "Følg ikke længere",
   "confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
+  "conversation.delete": "Slet samtale",
+  "conversation.mark_as_read": "Marker som læst",
+  "conversation.open": "Vis samtale",
+  "conversation.with": "Med {names}",
   "directory.federated": "Fra kendt fedivers",
   "directory.local": "Kun fra {domain}",
   "directory.new_arrivals": "Nye ankomster",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Grundlæggende",
   "home.column_settings.show_reblogs": "Vis fremhævelser",
   "home.column_settings.show_replies": "Vis svar",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dag} other {# dage}}",
   "intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Præferencer",
   "navigation_bar.public_timeline": "Fælles tidslinje",
   "navigation_bar.security": "Sikkerhed",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favoriserede din status",
   "notification.follow": "{name} fulgte dig",
   "notification.mention": "{name} nævnte dig",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 193fcebd4..401e3fc15 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -10,7 +10,7 @@
   "account.edit_profile": "Profil bearbeiten",
   "account.endorse": "Auf Profil hervorheben",
   "account.follow": "Folgen",
-  "account.followers": "Folger_innen",
+  "account.followers": "Folgende",
   "account.followers.empty": "Diesem Profil folgt noch niemand.",
   "account.follows": "Folgt",
   "account.follows.empty": "Dieses Profil folgt noch niemandem.",
@@ -99,7 +99,7 @@
   "confirmations.delete_list.confirm": "Löschen",
   "confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?",
   "confirmations.domain_block.confirm": "Die ganze Domain verbergen",
-  "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Nach der Blockierung wirst du nichts mehr von dieser Domain in öffentlichen Zeitleisten oder Benachrichtigungen sehen. Deine Folger_innen von dieser Domain werden auch entfernt.",
+  "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Folgenden von dieser Domain werden entfernt.",
   "confirmations.logout.confirm": "Abmelden",
   "confirmations.logout.message": "Bist du sicher, dass du dich abmelden möchtest?",
   "confirmations.mute.confirm": "Stummschalten",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Einfach",
   "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
   "home.column_settings.show_replies": "Antworten anzeigen",
-  "home.column_settings.update_live": "In Echtzeit aktualisieren",
   "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}",
   "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}",
   "intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
@@ -191,7 +190,7 @@
   "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.",
   "introduction.interactions.action": "Tutorial beenden!",
   "introduction.interactions.favourite.headline": "Favorisieren",
-  "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autor_innen wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
+  "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autoren wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
   "introduction.interactions.reblog.headline": "Teilen",
   "introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie teilst.",
   "introduction.interactions.reply.headline": "Antworten",
@@ -261,7 +260,7 @@
   "navigation_bar.favourites": "Favoriten",
   "navigation_bar.filters": "Stummgeschaltene Wörter",
   "navigation_bar.follow_requests": "Folgeanfragen",
-  "navigation_bar.follows_and_followers": "Folger_innen und Gefolgte",
+  "navigation_bar.follows_and_followers": "Folgende und Gefolgte",
   "navigation_bar.info": "Über diesen Server",
   "navigation_bar.keyboard_shortcuts": "Tastenkombinationen",
   "navigation_bar.lists": "Listen",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Einstellungen",
   "navigation_bar.public_timeline": "Föderierte Zeitleiste",
   "navigation_bar.security": "Sicherheit",
-  "notification.and_n_others": "und {count, plural, one {# andere Person} other {# andere Personen}}",
   "notification.favourite": "{name} hat deinen Beitrag favorisiert",
   "notification.follow": "{name} folgt dir",
   "notification.mention": "{name} hat dich erwähnt",
@@ -285,7 +283,7 @@
   "notifications.column_settings.filter_bar.advanced": "Zeige alle Kategorien an",
   "notifications.column_settings.filter_bar.category": "Schnellfilterleiste",
   "notifications.column_settings.filter_bar.show": "Anzeigen",
-  "notifications.column_settings.follow": "Neue Folger_innen:",
+  "notifications.column_settings.follow": "Neue Folgende:",
   "notifications.column_settings.mention": "Erwähnungen:",
   "notifications.column_settings.poll": "Ergebnisse von Umfragen:",
   "notifications.column_settings.push": "Push-Benachrichtigungen",
@@ -295,7 +293,7 @@
   "notifications.filter.all": "Alle",
   "notifications.filter.boosts": "Geteilte Beiträge",
   "notifications.filter.favourites": "Favorisierungen",
-  "notifications.filter.follows": "Folger_innen",
+  "notifications.filter.follows": "Folgt",
   "notifications.filter.mentions": "Erwähnungen",
   "notifications.filter.polls": "Ergebnisse der Umfrage",
   "notifications.group": "{count} Benachrichtigungen",
@@ -310,8 +308,8 @@
   "privacy.change": "Sichtbarkeit des Beitrags anpassen",
   "privacy.direct.long": "Wird an erwähnte Profile gesendet",
   "privacy.direct.short": "Direktnachricht",
-  "privacy.private.long": "Wird nur für deine Folger_innen sichtbar sein",
-  "privacy.private.short": "Nur für Folger_innen",
+  "privacy.private.long": "Wird nur für deine Folgende sichtbar sein",
+  "privacy.private.short": "Nur für Folgende",
   "privacy.public.long": "Wird in öffentlichen Zeitleisten erscheinen",
   "privacy.public.short": "Öffentlich",
   "privacy.unlisted.long": "Wird in öffentlichen Zeitleisten nicht gezeigt",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index fb58e43b5..0113c2776 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -281,6 +281,19 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Loading…",
+        "id": "regeneration_indicator.label"
+      },
+      {
+        "defaultMessage": "Your home feed is being prepared!",
+        "id": "regeneration_indicator.sublabel"
+      }
+    ],
+    "path": "app/javascript/mastodon/components/regeneration_indicator.json"
+  },
+  {
+    "descriptors": [
+      {
         "defaultMessage": "now",
         "id": "relative_time.just_now"
       },
@@ -448,19 +461,6 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Loading…",
-        "id": "regeneration_indicator.label"
-      },
-      {
-        "defaultMessage": "Your home feed is being prepared!",
-        "id": "regeneration_indicator.sublabel"
-      }
-    ],
-    "path": "app/javascript/mastodon/components/status_list.json"
-  },
-  {
-    "descriptors": [
-      {
         "defaultMessage": "Filtered",
         "id": "status.filtered"
       },
@@ -1138,15 +1138,6 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Uploading...",
-        "id": "upload_progress.label"
-      }
-    ],
-    "path": "app/javascript/mastodon/features/compose/components/upload_progress.json"
-  },
-  {
-    "descriptors": [
-      {
         "defaultMessage": "Delete",
         "id": "upload_form.undo"
       },
@@ -1436,6 +1427,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Refresh",
+        "id": "refresh"
+      },
+      {
         "defaultMessage": "No one has favourited this toot yet. When someone does, they will show up here.",
         "id": "empty_column.favourites"
       }
@@ -1484,10 +1479,6 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "Refresh",
-        "id": "refresh"
-      },
-      {
         "defaultMessage": "Profile unavailable",
         "id": "empty_column.account_unavailable"
       },
@@ -1641,6 +1632,10 @@
   {
     "descriptors": [
       {
+        "defaultMessage": "Basic",
+        "id": "home.column_settings.basic"
+      },
+      {
         "defaultMessage": "Show boosts",
         "id": "home.column_settings.show_reblogs"
       },
@@ -2022,14 +2017,6 @@
         "id": "notifications.column_settings.push"
       },
       {
-        "defaultMessage": "Basic",
-        "id": "home.column_settings.basic"
-      },
-      {
-        "defaultMessage": "Update in real-time",
-        "id": "home.column_settings.update_live"
-      },
-      {
         "defaultMessage": "Quick filter bar",
         "id": "notifications.column_settings.filter_bar.category"
       },
@@ -2088,10 +2075,6 @@
   {
     "descriptors": [
       {
-        "defaultMessage": "and {count, plural, one {# other} other {# others}}",
-        "id": "notification.and_n_others"
-      },
-      {
         "defaultMessage": "{name} followed you",
         "id": "notification.follow"
       },
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 7e5e1490d..ab000fa8d 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -103,7 +103,7 @@
   "confirmations.logout.confirm": "Αποσύνδεση",
   "confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;",
   "confirmations.mute.confirm": "Αποσιώπηση",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "Αυτό θα κρύψει τις δημοσιεύσεις τους και τις δημοσιεύσεις που τους αναφέρουν, αλλά θα συνεχίσουν να μπορούν να βλέπουν τις δημοσιεύσεις σου και να σε ακολουθούν.",
   "confirmations.mute.message": "Σίγουρα θες να αποσιωπήσεις {name};",
   "confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
   "confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την κατάσταση και να την ξαναγράψεις; Οι αναφορές και τα αγαπημένα της θα χαθούν ενώ οι απαντήσεις προς αυτή θα μείνουν ορφανές.",
@@ -152,10 +152,10 @@
   "empty_column.mutes": "Δεν έχεις αποσιωπήσει κανένα χρήστη ακόμα.",
   "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.",
   "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.",
+  "error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.",
+  "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο",
+  "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος",
   "follow_request.authorize": "Ενέκρινε",
   "follow_request.reject": "Απέρριψε",
   "getting_started.developers": "Ανάπτυξη",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Βασικές ρυθμίσεις",
   "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
   "home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
   "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
   "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Προτιμήσεις",
   "navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
   "navigation_bar.security": "Ασφάλεια",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
   "notification.follow": "Ο/Η {name} σε ακολούθησε",
   "notification.mention": "Ο/Η {name} σε ανέφερε",
@@ -301,7 +299,7 @@
   "notifications.group": "{count} ειδοποιήσεις",
   "poll.closed": "Κλειστή",
   "poll.refresh": "Ανανέωση",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}",
   "poll.total_votes": "{count, plural, one {# ψήφος} other {# ψήφοι}}",
   "poll.vote": "Ψήφισε",
   "poll.voted": "Ψηφίσατε αυτήν την απάντηση",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Δημόσιο",
   "privacy.unlisted.long": "Μην δημοσιεύσεις στις δημόσιες ροές",
   "privacy.unlisted.short": "Μη καταχωρημένα",
-  "refresh": "Refresh",
+  "refresh": "Ανανέωση",
   "regeneration_indicator.label": "Φορτώνει…",
   "regeneration_indicator.sublabel": "Η αρχική σου ροή ετοιμάζεται!",
   "relative_time.days": "{number}η",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 272f40c3a..4005a54c3 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -182,7 +182,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -277,7 +276,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 5aeb605bd..0070cdb5c 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Bazaj agordoj",
   "home.column_settings.show_reblogs": "Montri diskonigojn",
   "home.column_settings.show_replies": "Montri respondojn",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}",
   "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferoj",
   "navigation_bar.public_timeline": "Fratara tempolinio",
   "navigation_bar.security": "Sekureco",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} stelumis vian mesaĝon",
   "notification.follow": "{name} eksekvis vin",
   "notification.mention": "{name} menciis vin",
@@ -301,7 +299,7 @@
   "notifications.group": "{count} sciigoj",
   "poll.closed": "Finita",
   "poll.refresh": "Aktualigi",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# homo} other {# homoj}}",
   "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}",
   "poll.vote": "Voĉdoni",
   "poll.voted": "Vi elektis por ĉi tiu respondo",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 825a67178..d46063b18 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -106,7 +106,7 @@
   "confirmations.mute.explanation": "Esto ocultará mensajes de ellos y mensajes que los mencionen, pero todavía les permitirá ver tus mensajes o seguirte.",
   "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?",
   "confirmations.redraft.confirm": "Eliminar toot original y editarlo",
-  "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volverlo a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
+  "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
   "confirmations.reply.confirm": "Responder",
   "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?",
   "confirmations.unfollow.confirm": "Dejar de seguir",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar retoots",
   "home.column_settings.show_replies": "Mostrar respuestas",
-  "home.column_settings.update_live": "Actualizar en tiempo real",
   "intervals.full.days": "{number, plural, one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Configuración",
   "navigation_bar.public_timeline": "Línea temporal federada",
   "navigation_bar.security": "Seguridad",
-  "notification.and_n_others": "y {count, plural, one {otro} other {otros #}}",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te mencionó",
@@ -308,13 +306,13 @@
   "poll_button.add_poll": "Agregar una encuesta",
   "poll_button.remove_poll": "Quitar encuesta",
   "privacy.change": "Configurar privacidad de estado",
-  "privacy.direct.long": "Enviar entrada sólo a los usuarios mencionados",
+  "privacy.direct.long": "Enviar toot sólo a los usuarios mencionados",
   "privacy.direct.short": "Directo",
-  "privacy.private.long": "Enviar entrada sólo a los seguidores",
+  "privacy.private.long": "Enviar toot sólo a los seguidores",
   "privacy.private.short": "Sólo a seguidores",
-  "privacy.public.long": "Enviar entrada a las líneas temporales públicas",
+  "privacy.public.long": "Enviar toot a las líneas temporales públicas",
   "privacy.public.short": "Público",
-  "privacy.unlisted.long": "No enviar entrada a las líneas temporales públicas",
+  "privacy.unlisted.long": "No enviar toot a las líneas temporales públicas",
   "privacy.unlisted.short": "No listado",
   "refresh": "Refrescar",
   "regeneration_indicator.label": "Cargando…",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 8a88b0c5b..c213a03e1 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -103,7 +103,7 @@
   "confirmations.logout.confirm": "Cerrar sesión",
   "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?",
   "confirmations.mute.confirm": "Silenciar",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.",
   "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
   "confirmations.redraft.confirm": "Borrar y volver a borrador",
   "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
@@ -152,10 +152,10 @@
   "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
   "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
   "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.",
+  "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.",
+  "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
+  "errors.unexpected_crash.report_issue": "Informar de un problema/error",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rechazar",
   "getting_started.developers": "Desarrolladores",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar retoots",
   "home.column_settings.show_replies": "Mostrar respuestas",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Historia federada",
   "navigation_bar.security": "Seguridad",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcó tu estado como favorito",
   "notification.follow": "{name} te empezó a seguir",
   "notification.mention": "{name} te ha mencionado",
@@ -304,7 +302,7 @@
   "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
   "poll.vote": "Votar",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Has votado a favor de esta respuesta",
   "poll_button.add_poll": "Añadir una encuesta",
   "poll_button.remove_poll": "Eliminar encuesta",
   "privacy.change": "Ajustar privacidad",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Público",
   "privacy.unlisted.long": "No mostrar en la historia federada",
   "privacy.unlisted.short": "No listado",
-  "refresh": "Refresh",
+  "refresh": "Actualizar",
   "regeneration_indicator.label": "Cargando…",
   "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index bd43c1475..db60dab54 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Peamine",
   "home.column_settings.show_reblogs": "Näita upitusi",
   "home.column_settings.show_replies": "Näita vastuseid",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# päev} other {# päevad}}",
   "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}",
   "intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Eelistused",
   "navigation_bar.public_timeline": "Föderatiivne ajajoon",
   "navigation_bar.security": "Turvalisus",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} märkis su staatuse lemmikuks",
   "notification.follow": "{name} jälgib sind",
   "notification.mention": "{name} mainis sind",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index a8b10513d..f89901ab0 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -21,13 +21,13 @@
   "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.",
   "account.media": "Multimedia",
   "account.mention": "Aipatu @{name}",
-  "account.moved_to": "{name} hona lekualdatu da:",
+  "account.moved_to": "{name} hona migratu da:",
   "account.mute": "Mututu @{name}",
   "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
   "account.muted": "Mutututa",
   "account.never_active": "Inoiz ez",
-  "account.posts": "Toot",
-  "account.posts_with_replies": "Toot eta erantzunak",
+  "account.posts": "Tootak",
+  "account.posts_with_replies": "Toot-ak eta erantzunak",
   "account.report": "Salatu @{name}",
   "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
   "account.share": "@{name}(e)ren profila elkarbanatu",
@@ -38,7 +38,7 @@
   "account.unfollow": "Utzi jarraitzeari",
   "account.unmute": "Desmututu @{name}",
   "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.message": "Saiatu {retry_time, time, medium} barru.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
   "alert.unexpected.title": "Ene!",
@@ -61,7 +61,7 @@
   "column.lists": "Zerrendak",
   "column.mutes": "Mutututako erabiltzaileak",
   "column.notifications": "Jakinarazpenak",
-  "column.pins": "Pinned toot",
+  "column.pins": "Finkatutako toot-ak",
   "column.public": "Federatutako denbora-lerroa",
   "column_back_button.label": "Atzera",
   "column_header.hide_settings": "Ezkutatu ezarpenak",
@@ -103,7 +103,7 @@
   "confirmations.logout.confirm": "Amaitu saioa",
   "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
   "confirmations.mute.confirm": "Mututu",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "Honek horko mezuak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure mezuak ikusi ahal izango dituzte eta zuri jarraitu.",
   "confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
   "confirmations.redraft.confirm": "Ezabatu eta berridatzi",
   "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.",
@@ -111,10 +111,10 @@
   "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?",
   "confirmations.unfollow.confirm": "Utzi jarraitzeari",
   "confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
+  "conversation.delete": "Ezabatu elkarrizketa",
+  "conversation.mark_as_read": "Markatu irakurrita bezala",
+  "conversation.open": "Ikusi elkarrizketa",
+  "conversation.with": "Hauekin: {names}",
   "directory.federated": "Fedibertso ezagunekoak",
   "directory.local": "{domain} domeinukoak soilik",
   "directory.new_arrivals": "Iritsi berriak",
@@ -152,10 +152,10 @@
   "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.",
   "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
   "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
+  "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.",
+  "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "errors.unexpected_crash.report_issue": "Eman arazoaren berri",
   "follow_request.authorize": "Baimendu",
   "follow_request.reject": "Ukatu",
   "getting_started.developers": "Garatzaileak",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Oinarrizkoa",
   "home.column_settings.show_reblogs": "Erakutsi bultzadak",
   "home.column_settings.show_replies": "Erakutsi erantzunak",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {egun #} other {# egun}}",
   "intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}",
   "intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Hobespenak",
   "navigation_bar.public_timeline": "Federatutako denbora-lerroa",
   "navigation_bar.security": "Segurtasuna",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}(e)k zure mezua gogoko du",
   "notification.follow": "{name}(e)k jarraitzen zaitu",
   "notification.mention": "{name}(e)k aipatu zaitu",
@@ -301,10 +299,10 @@
   "notifications.group": "{count} jakinarazpen",
   "poll.closed": "Itxita",
   "poll.refresh": "Berritu",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}",
   "poll.total_votes": "{count, plural, one {boto #} other {# boto}}",
   "poll.vote": "Bozkatu",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Erantzun honi eman diozu botoa",
   "poll_button.add_poll": "Gehitu inkesta bat",
   "poll_button.remove_poll": "Kendu inkesta",
   "privacy.change": "Doitu mezuaren pribatutasuna",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Publikoa",
   "privacy.unlisted.long": "Do not show in public timelines",
   "privacy.unlisted.short": "Zerrendatu gabea",
-  "refresh": "Refresh",
+  "refresh": "Berritu",
   "regeneration_indicator.label": "Kargatzen…",
   "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!",
   "relative_time.days": "{number}e",
@@ -410,7 +408,7 @@
   "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
   "upload_modal.detect_text": "Antzeman irudiko testua",
   "upload_modal.edit_media": "Editatu multimedia",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
+  "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.",
   "upload_modal.preview_label": "Aurreikusi({ratio})",
   "upload_progress.label": "Igotzen...",
   "video.close": "Itxi bideoa",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 97b7dc00d..b651edd32 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "اصلی",
   "home.column_settings.show_reblogs": "نمایش بازبوق‌ها",
   "home.column_settings.show_replies": "نمایش پاسخ‌ها",
-  "home.column_settings.update_live": "به‌روزرسانی لحظه‌ای",
   "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
   "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
   "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "ترجیحات",
   "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
   "navigation_bar.security": "امنیت",
-  "notification.and_n_others": "و {count, plural, one {# اعلان دیگر} other {# اعلان دیگر}}",
   "notification.favourite": "‫{name}‬ نوشتهٔ شما را پسندید",
   "notification.follow": "‫{name}‬ پیگیر شما شد",
   "notification.mention": "‫{name}‬ از شما نام برد",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index d3c68b757..2e71e6e18 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Perusasetukset",
   "home.column_settings.show_reblogs": "Näytä buustaukset",
   "home.column_settings.show_replies": "Näytä vastaukset",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "Päivä päiviä",
   "intervals.full.hours": "Tunti tunteja",
   "intervals.full.minutes": "Minuuti minuuteja",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Asetukset",
   "navigation_bar.public_timeline": "Yleinen aikajana",
   "navigation_bar.security": "Tunnukset",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} tykkäsi tilastasi",
   "notification.follow": "{name} seurasi sinua",
   "notification.mention": "{name} mainitsi sinut",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index daa4cc529..38f20b619 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -8,7 +8,7 @@
   "account.direct": "Envoyer un message direct à @{name}",
   "account.domain_blocked": "Domaine caché",
   "account.edit_profile": "Modifier le profil",
-  "account.endorse": "Mettre en avant sur le profil",
+  "account.endorse": "Recommander sur le profil",
   "account.follow": "Suivre",
   "account.followers": "Abonné⋅e⋅s",
   "account.followers.empty": "Personne ne suit cet utilisateur·rice pour l’instant.",
@@ -34,7 +34,7 @@
   "account.show_reblogs": "Afficher les partages de @{name}",
   "account.unblock": "Débloquer @{name}",
   "account.unblock_domain": "Ne plus masquer {domain}",
-  "account.unendorse": "Ne pas mettre en avant sur le profil",
+  "account.unendorse": "Ne plus recommander sur le profil",
   "account.unfollow": "Ne plus suivre",
   "account.unmute": "Ne plus masquer @{name}",
   "account.unmute_notifications": "Réactiver les notifications de @{name}",
@@ -73,8 +73,8 @@
   "column_subheading.settings": "Paramètres",
   "community.column_settings.media_only": "Média uniquement",
   "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.",
-  "compose_form.direct_message_warning_learn_more": "Plus d'informations",
-  "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par mot-clé car sa visibilité est réglée sur \"non listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par mot-clé.",
+  "compose_form.direct_message_warning_learn_more": "Plus d’informations",
+  "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.",
   "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
   "compose_form.placeholder": "Qu’avez-vous en tête ?",
@@ -86,7 +86,7 @@
   "compose_form.publish_loud": "{publish} !",
   "compose_form.sensitive.hide": "Marquer le média comme sensible",
   "compose_form.sensitive.marked": "Média marqué comme sensible",
-  "compose_form.sensitive.unmarked": "Le média n'est pas marqué comme sensible",
+  "compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible",
   "compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
   "compose_form.spoiler.unmarked": "Le texte n’est pas caché",
   "compose_form.spoiler_placeholder": "Écrivez ici votre avertissement",
@@ -108,28 +108,28 @@
   "confirmations.redraft.confirm": "Effacer et ré-écrire",
   "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.",
   "confirmations.reply.confirm": "Répondre",
-  "confirmations.reply.message": "Répondre maintenant écrasera le message que vous êtes en train de composer. Voulez-vous vraiment continuer ?",
+  "confirmations.reply.message": "Répondre maintenant écrasera le message que vous composez actuellement. Êtes-vous sûr de vouloir continuer ?",
   "confirmations.unfollow.confirm": "Ne plus suivre",
   "confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?",
   "conversation.delete": "Supprimer la conversation",
   "conversation.mark_as_read": "Marquer comme lu",
   "conversation.open": "Afficher la conversation",
   "conversation.with": "Avec {names}",
-  "directory.federated": "De la fédiverse connue",
+  "directory.federated": "Du fédiverse connu",
   "directory.local": "De {domain} seulement",
   "directory.new_arrivals": "Nouveaux arrivants",
   "directory.recently_active": "Récemment actif",
   "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
   "embed.preview": "Il apparaîtra comme cela :",
   "emoji_button.activity": "Activités",
-  "emoji_button.custom": "Personnalisés",
+  "emoji_button.custom": "Personnalisé",
   "emoji_button.flags": "Drapeaux",
   "emoji_button.food": "Nourriture & Boisson",
   "emoji_button.label": "Insérer un émoji",
   "emoji_button.nature": "Nature",
   "emoji_button.not_found": "Pas d’émoji !! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "Objets",
-  "emoji_button.people": "Personnages",
+  "emoji_button.people": "Personnes",
   "emoji_button.recent": "Fréquemment utilisés",
   "emoji_button.search": "Recherche…",
   "emoji_button.search_results": "Résultats de la recherche",
@@ -149,12 +149,12 @@
   "empty_column.home.public_timeline": "le fil public",
   "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.",
   "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.",
-  "empty_column.mutes": "Vous n’avez pas encore mis d'utilisateur·rice·s en silence.",
+  "empty_column.mutes": "Vous n’avez pas encore mis d’utilisateur·rice·s en silence.",
   "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
   "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour le remplir",
   "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec le navigateur, cette page n’a pas pu être affichée correctement.",
   "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
-  "errors.unexpected_crash.copy_stacktrace": "Copier la trace de pile dans le presse-papier",
+  "errors.unexpected_crash.copy_stacktrace": "Copier la trace-pile dans le presse-papier",
   "errors.unexpected_crash.report_issue": "Signaler un bogue",
   "follow_request.authorize": "Accepter",
   "follow_request.reject": "Rejeter",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Base",
   "home.column_settings.show_reblogs": "Afficher les partages",
   "home.column_settings.show_replies": "Afficher les réponses",
-  "home.column_settings.update_live": "Mise à jour en temps réel",
   "intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
   "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -244,7 +243,7 @@
   "lists.new.title_placeholder": "Titre de la nouvelle liste",
   "lists.search": "Rechercher parmi les gens que vous suivez",
   "lists.subheading": "Vos listes",
-  "load_pending": "{count, plural, one {# nouvel item} other {# nouveaux items}}",
+  "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}",
   "loading_indicator.label": "Chargement…",
   "media_gallery.toggle_visible": "Modifier la visibilité",
   "missing_indicator.label": "Non trouvé",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Préférences",
   "navigation_bar.public_timeline": "Fil public global",
   "navigation_bar.security": "Sécurité",
-  "notification.and_n_others": "et {count, plural, one {# autre} other {# autres}}",
   "notification.favourite": "{name} a ajouté à ses favoris :",
   "notification.follow": "{name} vous suit",
   "notification.mention": "{name} vous a mentionné :",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 433e9a3a5..2dd0dbbad 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index b91925770..0125754b1 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -103,7 +103,7 @@
   "confirmations.logout.confirm": "Desconectar",
   "confirmations.logout.message": "Seguro que desexa desconectar?",
   "confirmations.mute.confirm": "Acalar",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "Esto ocultará as publicacións delas e as que as mencionen, pero poderán seguir lendo as túas publicacións e seguirte.",
   "confirmations.mute.message": "Está segura de que quere acalar a {name}?",
   "confirmations.redraft.confirm": "Eliminar e reescribir",
   "confirmations.redraft.message": "Está segura de querer eliminar este estado e voltalo a escribir? Perderá réplicas e favoritas, e as respostas ao orixinal quedarán orfas.",
@@ -152,10 +152,10 @@
   "empty_column.mutes": "Non acalou ningunha usuaria polo de agora.",
   "empty_column.notifications": "Aínda non ten notificacións. Interactúe con outras para iniciar unha conversa.",
   "empty_column.public": "Nada por aquí! Escriba algo de xeito público, ou siga manualmente usuarias de outros servidores para ir enchéndoa",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "Non se mostra correctamente a páxina debido a un fallo no código ou problema de compatibilidade do navegador.",
+  "error.unexpected_crash.next_steps": "Intenta actualizar a páxina. Se esto non axuda podes tamén utilizar Mastodon en outro navegador ou app nativa.",
+  "errors.unexpected_crash.copy_stacktrace": "Copiar trazas ao portaretallos",
+  "errors.unexpected_crash.report_issue": "Informar de problema",
   "follow_request.authorize": "Autorizar",
   "follow_request.reject": "Rexeitar",
   "getting_started.developers": "Desenvolvedoras",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar repeticións",
   "home.column_settings.show_replies": "Mostrar respostas",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural,one {# día} other {# días}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferencias",
   "navigation_bar.public_timeline": "Liña temporal federada",
   "navigation_bar.security": "Seguridade",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} marcou como favorito o seu estado",
   "notification.follow": "{name} está a seguila",
   "notification.mention": "{name} mencionoute",
@@ -301,7 +299,7 @@
   "notifications.group": "{count} notificacións",
   "poll.closed": "Pechado",
   "poll.refresh": "Actualizar",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural,one {# persoa}other {# persoas}}",
   "poll.total_votes": "{count, plural, one {# voto} outros {# votos}}",
   "poll.vote": "Votar",
   "poll.voted": "Votou por esta opción",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Pública",
   "privacy.unlisted.long": "Non publicar en liñas temporais públicas",
   "privacy.unlisted.short": "Non listada",
-  "refresh": "Refresh",
+  "refresh": "Actualizar",
   "regeneration_indicator.label": "Cargando…",
   "regeneration_indicator.sublabel": "Estase a preparar a súa liña temporal de inicio!",
   "relative_time.days": "{number}d",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 6ad96da4f..70aec3279 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "למתחילים",
   "home.column_settings.show_reblogs": "הצגת הדהודים",
   "home.column_settings.show_replies": "הצגת תגובות",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "העדפות",
   "navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "חצרוצך חובב על ידי {name}",
   "notification.follow": "{name} במעקב אחרייך",
   "notification.mention": "אוזכרת על ידי {name}",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index 3f685d968..4fb924a5f 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index bf5322607..09298a7ad 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.show_reblogs": "Pokaži boostove",
   "home.column_settings.show_replies": "Pokaži odgovore",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Postavke",
   "navigation_bar.public_timeline": "Federalni timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je lajkao tvoj status",
   "notification.follow": "{name} te sada slijedi",
   "notification.mention": "{name} te je spomenuo",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 8a483d686..c35c943e6 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -103,7 +103,7 @@
   "confirmations.logout.confirm": "Kijelentkezés",
   "confirmations.logout.message": "Biztosan ki akar jelentkezni?",
   "confirmations.mute.confirm": "Némítás",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "Ez elrejti a tőlük érkező posztokat, valamint az őket megemlítőket, de ők továbbra is láthatják a te posztjaidat és követhetnek is téged.",
   "confirmations.mute.message": "Biztos, hogy némítani szeretnéd {name}?",
   "confirmations.redraft.confirm": "Törlés és újraírás",
   "confirmations.redraft.message": "Biztos, hogy ezt a tülköt szeretnéd törölni és újraírni? Minden megtolást és kedvencnek jelölést elvesztesz, az eredetire adott válaszok pedig elárvulnak.",
@@ -152,10 +152,10 @@
   "empty_column.mutes": "Még egy felhasználót sem némítottál le.",
   "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.",
   "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.",
+  "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
+  "errors.unexpected_crash.copy_stacktrace": "Stacktrace vágólapra másolása",
+  "errors.unexpected_crash.report_issue": "Probléma bejelentése",
   "follow_request.authorize": "Engedélyezés",
   "follow_request.reject": "Visszautasítás",
   "getting_started.developers": "Fejlesztőknek",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Alapértelmezések",
   "home.column_settings.show_reblogs": "Megtolások mutatása",
   "home.column_settings.show_replies": "Válaszok mutatása",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
   "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
   "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Beállítások",
   "navigation_bar.public_timeline": "Föderációs idővonal",
   "navigation_bar.security": "Biztonság",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} kedvencnek jelölte egy tülködet",
   "notification.follow": "{name} követ téged",
   "notification.mention": "{name} megemlített",
@@ -301,10 +299,10 @@
   "notifications.group": "{count} értesítés",
   "poll.closed": "Lezárva",
   "poll.refresh": "Frissítés",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# személy} other {# személy}}",
   "poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}",
   "poll.vote": "Szavazás",
-  "poll.voted": "You voted for this answer",
+  "poll.voted": "Erre a válaszra szavaztál",
   "poll_button.add_poll": "Új szavazás",
   "poll_button.remove_poll": "Szavazás törlése",
   "privacy.change": "Tülk láthatóságának módosítása",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Nyilvános",
   "privacy.unlisted.long": "Ne mutassuk nyilvános idővonalon",
   "privacy.unlisted.short": "Listázatlan",
-  "refresh": "Refresh",
+  "refresh": "Frissítés",
   "regeneration_indicator.label": "Töltődik…",
   "regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
   "relative_time.days": "{number}nap",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index d167552f5..69af86bf2 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Հիմնական",
   "home.column_settings.show_reblogs": "Ցուցադրել տարածածները",
   "home.column_settings.show_replies": "Ցուցադրել պատասխանները",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Նախապատվություններ",
   "navigation_bar.public_timeline": "Դաշնային հոսք",
   "navigation_bar.security": "Անվտանգություն",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} հավանեց թութդ",
   "notification.follow": "{name} սկսեց հետեւել քեզ",
   "notification.mention": "{name} նշեց քեզ",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 4846cfe9f..371922a4d 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -117,7 +117,7 @@
   "conversation.with": "Dengan {names}",
   "directory.federated": "Dari fediverse yang dikenal",
   "directory.local": "Dari {domain} saja",
-  "directory.new_arrivals": "New arrivals",
+  "directory.new_arrivals": "Yang baru datang",
   "directory.recently_active": "Baru-baru ini aktif",
   "embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.",
   "embed.preview": "Seperti ini nantinya:",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Dasar",
   "home.column_settings.show_reblogs": "Tampilkan boost",
   "home.column_settings.show_replies": "Tampilkan balasan",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, other {# hari}}",
   "intervals.full.hours": "{number, plural, other {# jam}}",
   "intervals.full.minutes": "{number, plural, other {# menit}}",
@@ -232,75 +231,74 @@
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
   "keyboard_shortcuts.up": "to move up in the list",
   "lightbox.close": "Tutup",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
-  "lightbox.view_context": "View context",
-  "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
-  "lists.delete": "Delete list",
-  "lists.edit": "Edit list",
-  "lists.edit.submit": "Change title",
-  "lists.new.create": "Add list",
-  "lists.new.title_placeholder": "New list title",
-  "lists.search": "Search among people you follow",
-  "lists.subheading": "Your lists",
+  "lightbox.next": "Selanjutnya",
+  "lightbox.previous": "Sebelumnya",
+  "lightbox.view_context": "Lihat konteks",
+  "lists.account.add": "Tambah ke daftar",
+  "lists.account.remove": "Hapus dari daftar",
+  "lists.delete": "Hapus daftar",
+  "lists.edit": "Sunting daftar",
+  "lists.edit.submit": "Ubah judul",
+  "lists.new.create": "Tambah daftar",
+  "lists.new.title_placeholder": "Judul daftar baru",
+  "lists.search": "Cari di antara orang yang Anda ikuti",
+  "lists.subheading": "Daftar Anda",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
   "loading_indicator.label": "Tunggu sebentar...",
   "media_gallery.toggle_visible": "Tampil/Sembunyikan",
   "missing_indicator.label": "Tidak ditemukan",
-  "missing_indicator.sublabel": "This resource could not be found",
-  "mute_modal.hide_notifications": "Hide notifications from this user?",
-  "navigation_bar.apps": "Mobile apps",
+  "missing_indicator.sublabel": "Sumber daya tak bisa ditemukan",
+  "mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?",
+  "navigation_bar.apps": "Aplikasi mobile",
   "navigation_bar.blocks": "Pengguna diblokir",
   "navigation_bar.community_timeline": "Linimasa lokal",
-  "navigation_bar.compose": "Compose new toot",
-  "navigation_bar.direct": "Direct messages",
-  "navigation_bar.discover": "Discover",
-  "navigation_bar.domain_blocks": "Hidden domains",
+  "navigation_bar.compose": "Tulis toot baru",
+  "navigation_bar.direct": "Pesan langsung",
+  "navigation_bar.discover": "Temukan",
+  "navigation_bar.domain_blocks": "Domain tersembunyi",
   "navigation_bar.edit_profile": "Ubah profil",
   "navigation_bar.favourites": "Favorit",
-  "navigation_bar.filters": "Muted words",
+  "navigation_bar.filters": "Kata yang dibisukan",
   "navigation_bar.follow_requests": "Permintaan mengikuti",
   "navigation_bar.follows_and_followers": "Follows and followers",
   "navigation_bar.info": "Informasi selengkapnya",
   "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
-  "navigation_bar.lists": "Lists",
+  "navigation_bar.lists": "Daftar",
   "navigation_bar.logout": "Keluar",
   "navigation_bar.mutes": "Pengguna dibisukan",
   "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Pinned toots",
+  "navigation_bar.pins": "Toot tersemat",
   "navigation_bar.preferences": "Pengaturan",
   "navigation_bar.public_timeline": "Linimasa gabungan",
-  "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
+  "navigation_bar.security": "Keamanan",
   "notification.favourite": "{name} menyukai status anda",
   "notification.follow": "{name} mengikuti anda",
-  "notification.mention": "{name} mentioned you",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.mention": "{name} menyebut Anda",
+  "notification.poll": "Japat yang Anda ikuti telah berakhir",
   "notification.reblog": "{name} mem-boost status anda",
   "notifications.clear": "Hapus notifikasi",
   "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?",
   "notifications.column_settings.alert": "Notifikasi desktop",
   "notifications.column_settings.favourite": "Favorit:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "Tampilkan semua kategori",
+  "notifications.column_settings.filter_bar.category": "Bilah penyaring cepat",
+  "notifications.column_settings.filter_bar.show": "Tampilkan",
   "notifications.column_settings.follow": "Pengikut baru:",
   "notifications.column_settings.mention": "Balasan:",
-  "notifications.column_settings.poll": "Poll results:",
-  "notifications.column_settings.push": "Push notifications",
+  "notifications.column_settings.poll": "Hasil japat:",
+  "notifications.column_settings.push": "Notifikasi dorong",
   "notifications.column_settings.reblog": "Boost:",
   "notifications.column_settings.show": "Tampilkan dalam kolom",
   "notifications.column_settings.sound": "Mainkan suara",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
-  "notifications.group": "{count} notifications",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
+  "notifications.filter.all": "Semua",
+  "notifications.filter.boosts": "Boost",
+  "notifications.filter.favourites": "Favorit",
+  "notifications.filter.follows": "Diikuti",
+  "notifications.filter.mentions": "Sebutan",
+  "notifications.filter.polls": "Hasil japat",
+  "notifications.group": "{count} notifikasi",
+  "poll.closed": "Ditutup",
+  "poll.refresh": "Segarkan",
   "poll.total_people": "{count, plural, one {# person} other {# people}}",
   "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
   "poll.vote": "Vote",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 07e7f6380..076835218 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Simpla",
   "home.column_settings.show_reblogs": "Montrar repeti",
   "home.column_settings.show_replies": "Montrar respondi",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferi",
   "navigation_bar.public_timeline": "Federata tempolineo",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favorizis tua mesajo",
   "notification.follow": "{name} sequeskis tu",
   "notification.mention": "{name} mencionis tu",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 8d0a52b12..8d4b8f66e 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Semplice",
   "home.column_settings.show_reblogs": "Mostra post condivisi",
   "home.column_settings.show_replies": "Mostra risposte",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Impostazioni",
   "navigation_bar.public_timeline": "Timeline federata",
   "navigation_bar.security": "Sicurezza",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ha apprezzato il tuo post",
   "notification.follow": "{name} ha iniziato a seguirti",
   "notification.mention": "{name} ti ha menzionato",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 19038aaef..fdcbe53a2 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -115,7 +115,7 @@
   "confirmations.reply.message": "今返信すると現在作成中のメッセージが上書きされます。本当に実行しますか?",
   "confirmations.unfollow.confirm": "フォロー解除",
   "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?",
-  "conversation.delete": "この会話を削除",
+  "conversation.delete": "会話を削除",
   "conversation.mark_as_read": "既読にする",
   "conversation.open": "会話を表示",
   "conversation.with": "{names}",
@@ -182,7 +182,6 @@
   "home.column_settings.basic": "基本設定",
   "home.column_settings.show_reblogs": "ブースト表示",
   "home.column_settings.show_replies": "返信表示",
-  "home.column_settings.update_live": "リアルタイム更新",
   "intervals.full.days": "{number}日",
   "intervals.full.hours": "{number}時間",
   "intervals.full.minutes": "{number}分",
@@ -277,7 +276,6 @@
   "navigation_bar.public_timeline": "連合タイムライン",
   "navigation_bar.misc": "その他",
   "navigation_bar.security": "セキュリティ",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
   "notification.follow": "{name}さんにフォローされました",
   "notification.mention": "{name}さんがあなたに返信しました",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 1c579aa8f..35789374a 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "ძირითადი",
   "home.column_settings.show_reblogs": "ბუსტების ჩვენება",
   "home.column_settings.show_replies": "პასუხების ჩვენება",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "პრეფერენსიები",
   "navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
   "navigation_bar.security": "უსაფრთხოება",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
   "notification.follow": "{name} გამოგყვათ",
   "notification.mention": "{name}-მა გასახელათ",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 37b63f13a..ba0f5378e 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Негізгі",
   "home.column_settings.show_reblogs": "Бөлісулерді көрсету",
   "home.column_settings.show_replies": "Жауаптарды көрсету",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# күн} other {# күн}}",
   "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Басымдықтар",
   "navigation_bar.public_timeline": "Жаһандық желі",
   "navigation_bar.security": "Қауіпсіздік",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} жазбаңызды таңдаулыға қосты",
   "notification.follow": "{name} сізге жазылды",
   "notification.mention": "{name} сізді атап өтті",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 047071136..ea70c7055 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "기본 설정",
   "home.column_settings.show_reblogs": "부스트 표시",
   "home.column_settings.show_replies": "답글 표시",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number} 일",
   "intervals.full.hours": "{number} 시간",
   "intervals.full.minutes": "{number} 분",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "사용자 설정",
   "navigation_bar.public_timeline": "연합 타임라인",
   "navigation_bar.security": "보안",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name}님이 즐겨찾기 했습니다",
   "notification.follow": "{name}님이 나를 팔로우 했습니다",
   "notification.mention": "{name}님이 답글을 보냈습니다",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 433e9a3a5..39ca86a0c 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index 01d8fe03b..1c0e35501 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index 06a976271..9a4a417af 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index 8805c0e0b..6881d3be3 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Show boosts",
   "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferences",
   "navigation_bar.public_timeline": "Federated timeline",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favourited your status",
   "notification.follow": "{name} followed you",
   "notification.mention": "{name} mentioned you",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index f9e8457a0..68b8f4cbd 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Algemeen",
   "home.column_settings.show_reblogs": "Boosts tonen",
   "home.column_settings.show_replies": "Reacties tonen",
-  "home.column_settings.update_live": "In realtime bijwerken",
   "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}",
   "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}",
   "intervals.full.minutes": "{number, plural, one {# minuut} other {# minuten}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Instellingen",
   "navigation_bar.public_timeline": "Globale tijdlijn",
   "navigation_bar.security": "Beveiliging",
-  "notification.and_n_others": "en {count, plural, one {# meer} other {# meer}}",
   "notification.favourite": "{name} voegde jouw toot als favoriet toe",
   "notification.follow": "{name} volgt jou nu",
   "notification.mention": "{name} vermeldde jou",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 53c5610c1..73a319179 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -15,7 +15,7 @@
   "account.follows": "Føljingar",
   "account.follows.empty": "Denne brukaren foljer ikkje nokon ennå.",
   "account.follows_you": "Føljar deg",
-  "account.hide_reblogs": "Gøym robotar for @{name}",
+  "account.hide_reblogs": "Gøym fremhevingar for @{name}",
   "account.last_status": "Sist aktiv",
   "account.link_verified_on": "Eigerskap for denne linken er sist sjekket den {date}",
   "account.locked_info": "Brukarens privat-status er satt til lukka. Eigaren må manuelt døme kvem som kan følje honom.",
@@ -23,7 +23,7 @@
   "account.mention": "Nemne @{name}",
   "account.moved_to": "{name} har flytta til:",
   "account.mute": "Målbind @{name}",
-  "account.mute_notifications": "Målbind notifikasjoner ifrå @{name}",
+  "account.mute_notifications": "Målbind varslingar ifrå @{name}",
   "account.muted": "Målbindt",
   "account.never_active": "Aldri",
   "account.posts": "Tutar",
@@ -60,7 +60,7 @@
   "column.home": "Heim",
   "column.lists": "Lister",
   "column.mutes": "Målbindte brukare",
-  "column.notifications": "Varslinger",
+  "column.notifications": "Varslingar",
   "column.pins": "Festa tuter",
   "column.public": "Federert samtid",
   "column_back_button.label": "Tilbake",
@@ -74,31 +74,31 @@
   "community.column_settings.media_only": "Kun medie",
   "compose_form.direct_message_warning": "Denne tuten vil kun verte synleg for nemnde brukarar.",
   "compose_form.direct_message_warning_learn_more": "Lær meir",
-  "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
-  "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+  "compose_form.hashtag_warning": "Denne tuten vill ikkje bli lista under nokon knagg ettersom den ikkje er opplista. Berre offentlege tutar kan ble søkt på ved emneknagg.",
+  "compose_form.lock_disclaimer": "Din brukar er ikkje {locked}. Alle kan følje deg for å sjå føljar-modus poster.",
   "compose_form.lock_disclaimer.lock": "låst",
   "compose_form.placeholder": "Kva har du på hjartet?",
   "compose_form.poll.add_option": "Legg til eit punkt",
   "compose_form.poll.duration": "Varigheit for spørring",
   "compose_form.poll.option_placeholder": "Val {number}",
-  "compose_form.poll.remove_option": "Remove this choice",
-  "compose_form.publish": "Toot",
+  "compose_form.poll.remove_option": "Ta burt dette valet",
+  "compose_form.publish": "Tut",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
-  "compose_form.sensitive.marked": "Media is marked as sensitive",
-  "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
-  "compose_form.spoiler.marked": "Text is hidden behind warning",
-  "compose_form.spoiler.unmarked": "Text is not hidden",
-  "compose_form.spoiler_placeholder": "Write your warning here",
-  "confirmation_modal.cancel": "Cancel",
-  "confirmations.block.block_and_report": "Block & Report",
-  "confirmations.block.confirm": "Block",
-  "confirmations.block.message": "Are you sure you want to block {name}?",
-  "confirmations.delete.confirm": "Delete",
-  "confirmations.delete.message": "Are you sure you want to delete this status?",
-  "confirmations.delete_list.confirm": "Delete",
-  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
-  "confirmations.domain_block.confirm": "Hide entire domain",
+  "compose_form.sensitive.hide": "Merk media som sensitivt",
+  "compose_form.sensitive.marked": "Media er markert som sensitivt",
+  "compose_form.sensitive.unmarked": "Media er ikkje merka som sensitivt",
+  "compose_form.spoiler.marked": "Tekst er gøymt bak ein advarsel",
+  "compose_form.spoiler.unmarked": "Tekst er ikkje gøymt",
+  "compose_form.spoiler_placeholder": "Skriv varselen din her",
+  "confirmation_modal.cancel": "Avbrot",
+  "confirmations.block.block_and_report": "Blokk & rapportér",
+  "confirmations.block.confirm": "Blokkér",
+  "confirmations.block.message": "Er du sikker på at du vill blokke {name}?",
+  "confirmations.delete.confirm": "Slett",
+  "confirmations.delete.message": "Er du sikker på at du vill slette denne statusen?",
+  "confirmations.delete_list.confirm": "Slett",
+  "confirmations.delete_list.message": "Er du sikker på at du vill slette denne listen for alltid?",
+  "confirmations.domain_block.confirm": "Gøym heile domenet",
   "confirmations.domain_block.message": "Er du ordentleg, ordentleg sikker på at du vill blokkere heile {domain}? I dei tilfeller er det bedre med ein målretta blokkering eller demping av individuelle brukare.",
   "confirmations.logout.confirm": "Logg ut",
   "confirmations.logout.message": "Er du sikker på at du vill logge ut?",
@@ -108,96 +108,95 @@
   "confirmations.redraft.confirm": "Slett & gjennopprett",
   "confirmations.redraft.message": "Er du sikker på at du vill slette statusen og gjennoprette den? Favoritter og framhevinger vill bli borte, og svar til den originale posten vill bli einstøing.",
   "confirmations.reply.confirm": "Svar",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
-  "confirmations.unfollow.confirm": "Unfollow",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
-  "conversation.with": "With {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "confirmations.reply.message": "Å svare nå vill overskrive meldingen du er i ferd med å skrive. Er du sikker på at du vill gå fram?",
+  "confirmations.unfollow.confirm": "Avfølj",
+  "confirmations.unfollow.message": "Er du sikker på at du vill avfølje {name}?",
+  "conversation.delete": "Slett samtale",
+  "conversation.mark_as_read": "Merk som lest",
+  "conversation.open": "Sjå samtale",
+  "conversation.with": "Med {names}",
+  "directory.federated": "Fra kjent fedivers",
+  "directory.local": "Fra berre {domain} domenet",
+  "directory.new_arrivals": "Nyankommne",
+  "directory.recently_active": "Nylig aktiv",
   "embed.instructions": "Embed this status on your website by copying the code below.",
-  "embed.preview": "Here is what it will look like:",
-  "emoji_button.activity": "Activity",
+  "embed.preview": "Dette er korleis den vil sjå ut:",
+  "emoji_button.activity": "Aktivitet",
   "emoji_button.custom": "Custom",
-  "emoji_button.flags": "Flags",
-  "emoji_button.food": "Food & Drink",
-  "emoji_button.label": "Insert emoji",
-  "emoji_button.nature": "Nature",
+  "emoji_button.flags": "Flagg",
+  "emoji_button.food": "Mat & drikke",
+  "emoji_button.label": "Legg til smilefjes",
+  "emoji_button.nature": "Natur",
   "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
-  "emoji_button.objects": "Objects",
-  "emoji_button.people": "People",
-  "emoji_button.recent": "Frequently used",
-  "emoji_button.search": "Search...",
-  "emoji_button.search_results": "Search results",
-  "emoji_button.symbols": "Symbols",
-  "emoji_button.travel": "Travel & Places",
-  "empty_column.account_timeline": "No toots here!",
-  "empty_column.account_unavailable": "Profile unavailable",
-  "empty_column.blocks": "You haven't blocked any users yet.",
-  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
-  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
-  "empty_column.hashtag": "There is nothing in this hashtag yet.",
-  "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
-  "empty_column.home.public_timeline": "the public timeline",
-  "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "emoji_button.objects": "Objektar",
+  "emoji_button.people": "Folk",
+  "emoji_button.recent": "Ofte brukt",
+  "emoji_button.search": "Søk...",
+  "emoji_button.search_results": "Søke resultater",
+  "emoji_button.symbols": "Symbolar",
+  "emoji_button.travel": "Reise & steder",
+  "empty_column.account_timeline": "Ikkje nokon tutar her!",
+  "empty_column.account_unavailable": "Profil ikkje tilgjengelig",
+  "empty_column.blocks": "Du har ikkje blokkért nokon brukarar ennå.",
+  "empty_column.community": "Den lokale samtiden er tom. Skriv noko offentleg å få ballen til å rulle!",
+  "empty_column.direct": "Du har ikkje nokon direkte meldingar ennå. Når du sendar eller får ein, så vill den ende opp her.",
+  "empty_column.domain_blocks": "Der er ikkje nokon gøymte domener enno.",
+  "empty_column.favourited_statuses": "Du har ikkje favorisert nokon tutar enno. Når du favoriserer noko, så vill det ende opp her.",
+  "empty_column.favourites": "Ikkje nokon har favorisert denne tuten enno. Når nokon gjer det, så vill den ende opp her.",
+  "empty_column.follow_requests": "Du har ikkje nokon føljar førespurnad enno. Når du får ein, så vill den sjåast her.",
+  "empty_column.hashtag": "Det er ikkje noko i denne emneknaggen her enno.",
+  "empty_column.home": "Din heime-tidslinja er tom! Dra til {public} eller søk for å starte å møte andre brukare.",
+  "empty_column.home.public_timeline": "Den offentlege tidslinja",
+  "empty_column.list": "Det er ikkje noko i denne lista enno. Når medlemmar av denne lista poster statuser, så vill dei sjåast her.",
+  "empty_column.lists": "Du har ikkje nokon liste enno. Når du lagar ein, så vill den ende up her.",
+  "empty_column.mutes": "Du har ikkje dempet nokon brukare enno.",
   "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
   "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
-  "follow_request.authorize": "Authorize",
+  "errors.unexpected_crash.report_issue": "Rapportér problem",
+  "follow_request.authorize": "Autoriser",
   "follow_request.reject": "Reject",
-  "getting_started.developers": "Developers",
+  "getting_started.developers": "Utviklare",
   "getting_started.directory": "Profile directory",
-  "getting_started.documentation": "Documentation",
-  "getting_started.heading": "Getting started",
-  "getting_started.invite": "Invite people",
-  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
-  "getting_started.security": "Security",
-  "getting_started.terms": "Terms of service",
-  "hashtag.column_header.tag_mode.all": "and {additional}",
-  "hashtag.column_header.tag_mode.any": "or {additional}",
-  "hashtag.column_header.tag_mode.none": "without {additional}",
+  "getting_started.documentation": "Dokumentasjon",
+  "getting_started.heading": "Komme i gong",
+  "getting_started.invite": "Inviter folk",
+  "getting_started.open_source_notice": "Mastodon har åpen kilde kode. Du kan hjelpe til med problemar på GitHub gjennom {github}.",
+  "getting_started.security": "Brukar instillingar",
+  "getting_started.terms": "Brukarvillkår",
+  "hashtag.column_header.tag_mode.all": "og {additional}",
+  "hashtag.column_header.tag_mode.any": "eller {additional}",
+  "hashtag.column_header.tag_mode.none": "uten {additional}",
   "hashtag.column_settings.select.no_options_message": "No suggestions found",
   "hashtag.column_settings.select.placeholder": "Enter hashtags…",
-  "hashtag.column_settings.tag_mode.all": "All of these",
+  "hashtag.column_settings.tag_mode.all": "Alle disse",
   "hashtag.column_settings.tag_mode.any": "Any of these",
   "hashtag.column_settings.tag_mode.none": "None of these",
   "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
   "home.column_settings.basic": "Basic",
-  "home.column_settings.show_reblogs": "Show boosts",
-  "home.column_settings.show_replies": "Show replies",
-  "home.column_settings.update_live": "Update in real-time",
+  "home.column_settings.show_reblogs": "Vis fremhevingar",
+  "home.column_settings.show_replies": "Vis svar",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
+  "introduction.federation.action": "Neste",
+  "introduction.federation.federated.headline": "Federert",
   "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
+  "introduction.federation.home.headline": "Heim",
   "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
+  "introduction.federation.local.headline": "Lokal",
   "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish toot-orial!",
-  "introduction.interactions.favourite.headline": "Favourite",
+  "introduction.interactions.action": "Fullfør omvisning!",
+  "introduction.interactions.favourite.headline": "Lik",
   "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
+  "introduction.interactions.reblog.headline": "Fremhev",
   "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
+  "introduction.interactions.reply.headline": "Svar",
   "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
   "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
+  "introduction.welcome.headline": "Første steg",
   "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
   "keyboard_shortcuts.back": "to navigate back",
   "keyboard_shortcuts.blocked": "to open blocked users list",
@@ -228,27 +227,27 @@
   "keyboard_shortcuts.start": "to open \"get started\" column",
   "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
   "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
-  "keyboard_shortcuts.toot": "to start a brand new toot",
+  "keyboard_shortcuts.toot": "Start ein heilt ny tut",
   "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
   "keyboard_shortcuts.up": "to move up in the list",
-  "lightbox.close": "Close",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
-  "lightbox.view_context": "View context",
-  "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
-  "lists.delete": "Delete list",
-  "lists.edit": "Edit list",
-  "lists.edit.submit": "Change title",
-  "lists.new.create": "Add list",
-  "lists.new.title_placeholder": "New list title",
-  "lists.search": "Search among people you follow",
-  "lists.subheading": "Your lists",
+  "lightbox.close": "Lukk",
+  "lightbox.next": "Neste",
+  "lightbox.previous": "Forrige",
+  "lightbox.view_context": "Sjå kontekst",
+  "lists.account.add": "Legg til i liste",
+  "lists.account.remove": "Ta burt fra liste",
+  "lists.delete": "Slett liste",
+  "lists.edit": "Rediger liste",
+  "lists.edit.submit": "Bytt tittel",
+  "lists.new.create": "Legg til liste",
+  "lists.new.title_placeholder": "Ny liste tittel",
+  "lists.search": "Søk gjennom folk du føljar",
+  "lists.subheading": "Dine lister",
   "load_pending": "{count, plural, one {# new item} other {# new items}}",
-  "loading_indicator.label": "Loading...",
+  "loading_indicator.label": "Laster...",
   "media_gallery.toggle_visible": "Toggle visibility",
-  "missing_indicator.label": "Not found",
-  "missing_indicator.sublabel": "This resource could not be found",
+  "missing_indicator.label": "Ikkje funne",
+  "missing_indicator.sublabel": "Denne ressursen ble ikkje funne",
   "mute_modal.hide_notifications": "Hide notifications from this user?",
   "navigation_bar.apps": "Mobile apps",
   "navigation_bar.blocks": "Blocked users",
@@ -264,38 +263,37 @@
   "navigation_bar.follows_and_followers": "Follows and followers",
   "navigation_bar.info": "About this server",
   "navigation_bar.keyboard_shortcuts": "Hotkeys",
-  "navigation_bar.lists": "Lists",
-  "navigation_bar.logout": "Logout",
-  "navigation_bar.mutes": "Muted users",
-  "navigation_bar.personal": "Personal",
-  "navigation_bar.pins": "Pinned toots",
-  "navigation_bar.preferences": "Preferences",
-  "navigation_bar.public_timeline": "Federated timeline",
-  "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
-  "notification.favourite": "{name} favourited your status",
-  "notification.follow": "{name} followed you",
-  "notification.mention": "{name} mentioned you",
+  "navigation_bar.lists": "Lister",
+  "navigation_bar.logout": "Logg ut",
+  "navigation_bar.mutes": "Dempa brukare",
+  "navigation_bar.personal": "Personlig",
+  "navigation_bar.pins": "Festa tuter",
+  "navigation_bar.preferences": "Preferanser",
+  "navigation_bar.public_timeline": "Federert tidslinje",
+  "navigation_bar.security": "Sikkerheit",
+  "notification.favourite": "{name} likte din status",
+  "notification.follow": "{name} fulgte deg",
+  "notification.mention": "{name} nevnte deg",
   "notification.poll": "A poll you have voted in has ended",
   "notification.reblog": "{name} boosted your status",
-  "notifications.clear": "Clear notifications",
+  "notifications.clear": "Klarer notifikasjoner",
   "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
   "notifications.column_settings.alert": "Desktop notifications",
   "notifications.column_settings.favourite": "Favourites:",
   "notifications.column_settings.filter_bar.advanced": "Display all categories",
   "notifications.column_settings.filter_bar.category": "Quick filter bar",
   "notifications.column_settings.filter_bar.show": "Show",
-  "notifications.column_settings.follow": "New followers:",
+  "notifications.column_settings.follow": "Nye føljare:",
   "notifications.column_settings.mention": "Mentions:",
   "notifications.column_settings.poll": "Poll results:",
   "notifications.column_settings.push": "Push notifications",
-  "notifications.column_settings.reblog": "Boosts:",
+  "notifications.column_settings.reblog": "Framhevinger:",
   "notifications.column_settings.show": "Show in column",
   "notifications.column_settings.sound": "Play sound",
   "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
+  "notifications.filter.boosts": "Framhevinger",
+  "notifications.filter.favourites": "Favoritter",
+  "notifications.filter.follows": "Føljare",
   "notifications.filter.mentions": "Mentions",
   "notifications.filter.polls": "Poll results",
   "notifications.group": "{count} notifications",
@@ -412,7 +410,7 @@
   "upload_modal.edit_media": "Edit media",
   "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
   "upload_modal.preview_label": "Preview ({ratio})",
-  "upload_progress.label": "Uploading...",
+  "upload_progress.label": "Uploading…",
   "video.close": "Close video",
   "video.exit_fullscreen": "Exit full screen",
   "video.expand": "Expand video",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 54b92181b..37b893938 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Enkel",
   "home.column_settings.show_reblogs": "Vis fremhevinger",
   "home.column_settings.show_replies": "Vis svar",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferanser",
   "navigation_bar.public_timeline": "Felles tidslinje",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} likte din status",
   "notification.follow": "{name} fulgte deg",
   "notification.mention": "{name} nevnte deg",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 37a3a45e7..b52d58970 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -155,7 +155,7 @@
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "errors.unexpected_crash.report_issue": "Senhalar un problèma",
   "follow_request.authorize": "Acceptar",
   "follow_request.reject": "Regetar",
   "getting_started.developers": "Desvelopaires",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Basic",
   "home.column_settings.show_reblogs": "Mostrar los partatges",
   "home.column_settings.show_replies": "Mostrar las responsas",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}",
   "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferéncias",
   "navigation_bar.public_timeline": "Flux public global",
   "navigation_bar.security": "Seguretat",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a ajustat a sos favorits",
   "notification.follow": "{name} vos sèc",
   "notification.mention": "{name} vos a mencionat",
@@ -301,7 +299,7 @@
   "notifications.group": "{count} notificacions",
   "poll.closed": "Tampat",
   "poll.refresh": "Actualizar",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# persona} other {# personas}}",
   "poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}",
   "poll.vote": "Votar",
   "poll.voted": "You voted for this answer",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Public",
   "privacy.unlisted.long": "Mostrar pas dins los fluxes publics",
   "privacy.unlisted.short": "Pas-listat",
-  "refresh": "Refresh",
+  "refresh": "Actualizar",
   "regeneration_indicator.label": "Cargament…",
   "regeneration_indicator.sublabel": "Sèm a preparar vòstre flux d’acuèlh !",
   "relative_time.days": "fa {number}d",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index cd3284c72..29b448cb6 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -4,7 +4,7 @@
   "account.block": "Blokuj @{name}",
   "account.block_domain": "Blokuj wszystko z {domain}",
   "account.blocked": "Zablokowany(-a)",
-  "account.cancel_follow_request": "Cancel follow request",
+  "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia",
   "account.direct": "Wyślij wiadomość bezpośrednią do @{name}",
   "account.domain_blocked": "Ukryto domenę",
   "account.edit_profile": "Edytuj profil",
@@ -16,7 +16,7 @@
   "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.",
   "account.follows_you": "Śledzi Cię",
   "account.hide_reblogs": "Ukryj podbicia od @{name}",
-  "account.last_status": "Last active",
+  "account.last_status": "Ostatnia aktywność",
   "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}",
   "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.",
   "account.media": "Zawartość multimedialna",
@@ -25,7 +25,7 @@
   "account.mute": "Wycisz @{name}",
   "account.mute_notifications": "Wycisz powiadomienia o @{name}",
   "account.muted": "Wyciszony",
-  "account.never_active": "Never",
+  "account.never_active": "Nigdy",
   "account.posts": "Wpisy",
   "account.posts_with_replies": "Wpisy i odpowiedzi",
   "account.report": "Zgłoś @{name}",
@@ -38,11 +38,11 @@
   "account.unfollow": "Przestań śledzić",
   "account.unmute": "Cofnij wyciszenie @{name}",
   "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}",
-  "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
+  "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.",
   "alert.rate_limited.title": "Rate limited",
   "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.",
   "alert.unexpected.title": "O nie!",
-  "autosuggest_hashtag.per_week": "{count} per week",
+  "autosuggest_hashtag.per_week": "{count} co tydzień",
   "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
   "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.",
   "bundle_column_error.retry": "Spróbuj ponownie",
@@ -53,7 +53,7 @@
   "column.blocks": "Zablokowani użytkownicy",
   "column.community": "Lokalna oś czasu",
   "column.direct": "Wiadomości bezpośrednie",
-  "column.directory": "Browse profiles",
+  "column.directory": "Przeglądaj profile",
   "column.domain_blocks": "Ukryte domeny",
   "column.favourites": "Ulubione",
   "column.follow_requests": "Prośby o śledzenie",
@@ -107,7 +107,7 @@
   "confirmations.logout.confirm": "Wyloguj",
   "confirmations.logout.message": "Czy na pewno chcesz się wylogować?",
   "confirmations.mute.confirm": "Wycisz",
-  "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
+  "confirmations.mute.explanation": "To schowa ich i wspominające ich posty, ale wciąż pozwoli im widzieć twoje posty i śledzić cię.",
   "confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?",
   "confirmations.redraft.confirm": "Usuń i przeredaguj",
   "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.",
@@ -119,10 +119,10 @@
   "conversation.mark_as_read": "Oznacz jako przeczytane",
   "conversation.open": "Zobacz rozmowę",
   "conversation.with": "Z {names}",
-  "directory.federated": "From known fediverse",
-  "directory.local": "From {domain} only",
-  "directory.new_arrivals": "New arrivals",
-  "directory.recently_active": "Recently active",
+  "directory.federated": "Ze znanego fediwersum",
+  "directory.local": "Tylko z {domain}",
+  "directory.new_arrivals": "Nowości",
+  "directory.recently_active": "Ostatnio aktywne",
   "embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.",
   "embed.preview": "Tak będzie to wyglądać:",
   "emoji_button.activity": "Aktywność",
@@ -156,10 +156,10 @@
   "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.",
   "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.",
   "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić",
-  "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
-  "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.",
+  "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.",
+  "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka",
+  "errors.unexpected_crash.report_issue": "Zgłoś problem",
   "follow_request.authorize": "Autoryzuj",
   "follow_request.reject": "Odrzuć",
   "getting_started.developers": "Dla programistów",
@@ -182,7 +182,6 @@
   "home.column_settings.basic": "Podstawowe",
   "home.column_settings.show_reblogs": "Pokazuj podbicia",
   "home.column_settings.show_replies": "Pokazuj odpowiedzi",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}",
   "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}",
@@ -248,7 +247,7 @@
   "lists.new.title_placeholder": "Wprowadź tytuł listy",
   "lists.search": "Szukaj wśród osób które śledzisz",
   "lists.subheading": "Twoje listy",
-  "load_pending": "{count, plural, one {# new item} other {# new items}}",
+  "load_pending": "{count, plural, one {# nowy przedmiot} other {nowe przedmioty}}",
   "loading_indicator.label": "Ładowanie…",
   "media_gallery.toggle_visible": "Przełącz widoczność",
   "missing_indicator.label": "Nie znaleziono",
@@ -277,7 +276,6 @@
   "navigation_bar.preferences": "Preferencje",
   "navigation_bar.public_timeline": "Globalna oś czasu",
   "navigation_bar.security": "Bezpieczeństwo",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych",
   "notification.follow": "{name} zaczął(-ęła) Cię śledzić",
   "notification.mention": "{name} wspomniał(a) o tobie",
@@ -306,7 +304,7 @@
   "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}",
   "poll.closed": "Zamknięte",
   "poll.refresh": "Odśwież",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}",
   "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}",
   "poll.vote": "Zagłosuj",
   "poll.voted": "You voted for this answer",
@@ -321,7 +319,7 @@
   "privacy.public.short": "Publiczny",
   "privacy.unlisted.long": "Niewidoczny na publicznych osiach czasu",
   "privacy.unlisted.short": "Niewidoczny",
-  "refresh": "Refresh",
+  "refresh": "Odśwież",
   "regeneration_indicator.label": "Ładuję…",
   "regeneration_indicator.sublabel": "Twoja oś czasu jest przygotowywana!",
   "relative_time.days": "{number} dni",
@@ -346,7 +344,7 @@
   "search_results.accounts": "Ludzie",
   "search_results.hashtags": "Hashtagi",
   "search_results.statuses": "Wpisy",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.",
   "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}",
   "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}",
   "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym",
@@ -385,7 +383,7 @@
   "status.show_more": "Rozwiń",
   "status.show_more_all": "Rozwiń wszystkie",
   "status.show_thread": "Pokaż wątek",
-  "status.uncached_media_warning": "Not available",
+  "status.uncached_media_warning": "Niedostępne",
   "status.unmute_conversation": "Cofnij wyciszenie konwersacji",
   "status.unpin": "Odepnij z profilu",
   "suggestions.dismiss": "Odrzuć sugestię",
@@ -401,7 +399,7 @@
   "time_remaining.moments": "Pozostała chwila",
   "time_remaining.seconds": "{number, plural, one {Pozostała # sekunda} few {Pozostały # sekundy} many {Pozostało # sekund} other {Pozostało # sekund}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
-  "trends.trending_now": "Trending now",
+  "trends.trending_now": "Popularne teraz",
   "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
   "upload_area.title": "Przeciągnij i upuść aby wysłać",
   "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)",
@@ -410,13 +408,13 @@
   "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących",
   "upload_form.edit": "Edytuj",
   "upload_form.undo": "Usuń",
-  "upload_modal.analyzing_picture": "Analyzing picture…",
+  "upload_modal.analyzing_picture": "Analizowanie obrazu…",
   "upload_modal.apply": "Zastosuj",
-  "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
-  "upload_modal.detect_text": "Detect text from picture",
-  "upload_modal.edit_media": "Edit media",
-  "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
-  "upload_modal.preview_label": "Preview ({ratio})",
+  "upload_modal.description_placeholder": "Pchnąć w tę łódź jeża lub ośm skrzyń fig",
+  "upload_modal.detect_text": "Wykryj tekst ze obrazu",
+  "upload_modal.edit_media": "Edytuj multimedia",
+  "upload_modal.hint": "Kliknij lub przeciągnij kółko na podglądzie by wybrać centralny punkt, który zawsze będzie na widoku na miniaturce.",
+  "upload_modal.preview_label": "Podgląd ({ratio})",
   "upload_progress.label": "Wysyłanie…",
   "video.close": "Zamknij film",
   "video.exit_fullscreen": "Opuść tryb pełnoekranowy",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index bb1477c52..7c6a1fd22 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar compartilhamentos",
   "home.column_settings.show_replies": "Mostrar as respostas",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferências",
   "navigation_bar.public_timeline": "Global",
   "navigation_bar.security": "Segurança",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} adicionou a sua postagem aos favoritos",
   "notification.follow": "{name} te seguiu",
   "notification.mention": "{name} te mencionou",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index 2320223e8..859dc1991 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Básico",
   "home.column_settings.show_reblogs": "Mostrar boosts",
   "home.column_settings.show_replies": "Mostrar respostas",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
   "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
   "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferências",
   "navigation_bar.public_timeline": "Cronologia federada",
   "navigation_bar.security": "Segurança",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} adicionou o teu estado aos favoritos",
   "notification.follow": "{name} começou a seguir-te",
   "notification.mention": "{name} mencionou-te",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index 5118ce39a..617dbcc0d 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "De bază",
   "home.column_settings.show_reblogs": "Arată redistribuirile",
   "home.column_settings.show_replies": "Arată răspunsurile",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Preferințe",
   "navigation_bar.public_timeline": "Flux global",
   "navigation_bar.security": "Securitate",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} a adăugat statusul tău la favorite",
   "notification.follow": "{name} te urmărește",
   "notification.mention": "{name} te-a menționat",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 2cf216971..4ace1649a 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Основные",
   "home.column_settings.show_reblogs": "Показывать продвижения",
   "home.column_settings.show_replies": "Показывать ответы",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
   "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
   "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Настройки",
   "navigation_bar.public_timeline": "Глобальная лента",
   "navigation_bar.security": "Безопасность",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} понравился Ваш статус",
   "notification.follow": "{name} подписался (-лась) на вас",
   "notification.mention": "{name} упомянул(а) вас",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 946ccfa26..5d2726309 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -154,7 +154,7 @@
   "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo",
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
-  "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
+  "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky",
   "errors.unexpected_crash.report_issue": "Nahlás problém",
   "follow_request.authorize": "Povoľ prístup",
   "follow_request.reject": "Odmietni",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Základné",
   "home.column_settings.show_reblogs": "Zobraziť povýšené",
   "home.column_settings.show_replies": "Ukázať odpovede",
-  "home.column_settings.update_live": "Aktualizuj v reálnom čase",
   "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
   "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}",
   "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Voľby",
   "navigation_bar.public_timeline": "Federovaná časová os",
   "navigation_bar.security": "Zabezbečenie",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} si obľúbil/a tvoj príspevok",
   "notification.follow": "{name} ťa začal/a následovať",
   "notification.mention": "{name} ťa spomenul/a",
@@ -301,7 +299,7 @@
   "notifications.group": "{count} oboznámení",
   "poll.closed": "Uzatvorená",
   "poll.refresh": "Občerstvi",
-  "poll.total_people": "{count, plural, one {# person} other {# people}}",
+  "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}",
   "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}",
   "poll.vote": "Hlasuj",
   "poll.voted": "Hlasoval/a si za túto voľbu",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index d9d032891..65e275102 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.show_reblogs": "Pokaži spodbude",
   "home.column_settings.show_replies": "Pokaži odgovore",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}",
   "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}",
   "intervals.full.minutes": "{number, plural, one {# minuta} two {# minuti} few {# minute} other {# minut}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Nastavitve",
   "navigation_bar.public_timeline": "Združena časovnica",
   "navigation_bar.security": "Varnost",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je vzljubil/a vaš status",
   "notification.follow": "{name} vam sledi",
   "notification.mention": "{name} vas je omenil/a",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index e97ab0155..f58466d87 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Bazë",
   "home.column_settings.show_reblogs": "Shfaq përforcime",
   "home.column_settings.show_replies": "Shfaq përgjigje",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Parapëlqime",
   "navigation_bar.public_timeline": "Rrjedhë kohore të federuarish",
   "navigation_bar.security": "Siguri",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} parapëlqeu gjendjen tuaj",
   "notification.follow": "{name} zuri t’ju ndjekë",
   "notification.mention": "{name} ju ka përmendur",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 77ec96d97..59b8459ae 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Osnovno",
   "home.column_settings.show_reblogs": "Prikaži i podržavanja",
   "home.column_settings.show_replies": "Prikaži odgovore",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Podešavanja",
   "navigation_bar.public_timeline": "Federisana lajna",
   "navigation_bar.security": "Security",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} je stavio Vaš status kao omiljeni",
   "notification.follow": "{name} Vas je zapratio",
   "notification.mention": "{name} Vas je pomenuo",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index a84e3c610..d222e774d 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Основно",
   "home.column_settings.show_reblogs": "Прикажи и подржавања",
   "home.column_settings.show_replies": "Прикажи одговоре",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Подешавања",
   "navigation_bar.public_timeline": "Здружена временска линија",
   "navigation_bar.security": "Безбедност",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени",
   "notification.follow": "{name} Вас је запратио/ла",
   "notification.mention": "{name} Вас је поменуо/ла",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 4e305eeff..e8c1c40c2 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -178,24 +178,23 @@
   "home.column_settings.basic": "Grundläggande",
   "home.column_settings.show_reblogs": "Visa knuffar",
   "home.column_settings.show_replies": "Visa svar",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}",
   "intervals.full.hours": "{hours, plural, one {# timme} other {# timmar}}",
   "intervals.full.minutes": "{minutes, plural, one {1 minut} other {# minuter}}",
   "introduction.federation.action": "Nästa",
   "introduction.federation.federated.headline": "Federerad",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
+  "introduction.federation.federated.text": "Publika inlägg från andra servrar i servernätverket visas i den förenade tidslinjen.",
   "introduction.federation.home.headline": "Hem",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
+  "introduction.federation.home.text": "Inlägg från personer du följer kommer att visas i din hemtidlinje. Du kan följa vem du vill på vald server!",
   "introduction.federation.local.headline": "Lokal",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
+  "introduction.federation.local.text": "Publika inlägg från personer på samma server som du kommer att visas på den lokala tidslinjen.",
   "introduction.interactions.action": "Slutför introduktionsguide!",
   "introduction.interactions.favourite.headline": "Favorit",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
+  "introduction.interactions.favourite.text": "Du kan spara en tut till senare, och visa författaren att du gillade den genom att göra den till favorit.",
   "introduction.interactions.reblog.headline": "Knuffa",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
+  "introduction.interactions.reblog.text": "Du kan dela andra personers tutar med dina följare genom att knuffa dem.",
   "introduction.interactions.reply.headline": "Svara",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
+  "introduction.interactions.reply.text": "Du kan besvara andra personers och dina egna tutar, vilket kommer att koppla ihop dem i en konversation.",
   "introduction.welcome.action": "Sätt igång!",
   "introduction.welcome.headline": "Första stegen",
   "introduction.welcome.text": "Välkommen till fediverse! Om några ögonblick kommer du kunna sända ut meddelanden och prata med dina vänner över en mängd servrar. Men den här servern, {domain}, är speciell — den är hem åt din profil, så kom ihåg vad den heter.",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Inställningar",
   "navigation_bar.public_timeline": "Förenad tidslinje",
   "navigation_bar.security": "Säkerhet",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} favoriserade din status",
   "notification.follow": "{name} följer dig",
   "notification.mention": "{name} nämnde dig",
@@ -320,10 +318,10 @@
   "regeneration_indicator.label": "Laddar…",
   "regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!",
   "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
+  "relative_time.hours": "{number}tim",
   "relative_time.just_now": "nu",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
+  "relative_time.minutes": "{number}min",
+  "relative_time.seconds": "{number}sek",
   "reply_indicator.cancel": "Ångra",
   "report.forward": "Vidarebefordra till {target}",
   "report.forward_hint": "Kontot är från en annan server. Skicka även en anonymiserad kopia av anmälan dit?",
@@ -341,16 +339,16 @@
   "search_results.accounts": "Människor",
   "search_results.hashtags": "Hashtaggar",
   "search_results.statuses": "Toots",
-  "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
+  "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.",
   "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "Öppet modereringsgränssnitt för @{name}",
+  "status.admin_status": "Öppna denna status i modereringsgränssnittet",
   "status.block": "Blockera @{name}",
   "status.cancel_reblog_private": "Ta bort knuff",
   "status.cannot_reblog": "Detta inlägg kan inte knuffas",
   "status.copy": "Kopiera länk till status",
   "status.delete": "Ta bort",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "Detaljerad samtalsvy",
   "status.direct": "Direktmeddela @{name}",
   "status.embed": "Bädda in",
   "status.favourite": "Favorit",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 3e019f0cb..82b5fff9e 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "அடிப்படையான",
   "home.column_settings.show_reblogs": "காட்டு boosts",
   "home.column_settings.show_replies": "பதில்களைக் காண்பி",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} மற்ற {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} மற்ற {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} மற்ற {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "விருப்பங்கள்",
   "navigation_bar.public_timeline": "கூட்டாட்சி காலக்கெடு",
   "navigation_bar.security": "பத்திரம்",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ஆர்வம் கொண்டவர், உங்கள் நிலை",
   "notification.follow": "{name} நீங்கள் தொடர்ந்து வந்தீர்கள்",
   "notification.mention": "{name} நீங்கள் குறிப்பிட்டுள்ளீர்கள்",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 720798d13..3cfbc5786 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "ప్రాథమిక",
   "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు",
   "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "ప్రాధాన్యతలు",
   "navigation_bar.public_timeline": "సమాఖ్య కాలక్రమం",
   "navigation_bar.security": "భద్రత",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} మీ స్టేటస్ ను ఇష్టపడ్డారు",
   "notification.follow": "{name} మిమ్మల్ని అనుసరిస్తున్నారు",
   "notification.mention": "{name} మిమ్మల్ని ప్రస్తావించారు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index aeeebb090..a9278fdd0 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -155,7 +155,7 @@
   "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
   "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
   "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
-  "errors.unexpected_crash.report_issue": "Report issue",
+  "errors.unexpected_crash.report_issue": "รายงานปัญหา",
   "follow_request.authorize": "อนุญาต",
   "follow_request.reject": "ปฏิเสธ",
   "getting_started.developers": "นักพัฒนา",
@@ -163,7 +163,7 @@
   "getting_started.documentation": "เอกสารประกอบ",
   "getting_started.heading": "เริ่มต้นใช้งาน",
   "getting_started.invite": "เชิญผู้คน",
-  "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์เปิดต้นฉบับ คุณสามารถมีส่วนร่วมหรือรายงานปัญหาใน GitHub ที่ {github}",
+  "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์เปิดต้นฉบับ คุณสามารถมีส่วนร่วมหรือรายงานปัญหาที่ GitHub ที่ {github}",
   "getting_started.security": "ความปลอดภัย",
   "getting_started.terms": "เงื่อนไขการให้บริการ",
   "hashtag.column_header.tag_mode.all": "และ {additional}",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "พื้นฐาน",
   "home.column_settings.show_reblogs": "แสดงการดัน",
   "home.column_settings.show_replies": "แสดงการตอบกลับ",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, other {# วัน}}",
   "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}",
   "intervals.full.minutes": "{number, plural, other {# นาที}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "การกำหนดลักษณะ",
   "navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก",
   "navigation_bar.security": "ความปลอดภัย",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} ได้ชื่นชอบสถานะของคุณ",
   "notification.follow": "{name} ได้ติดตามคุณ",
   "notification.mention": "{name} ได้กล่าวถึงคุณ",
@@ -316,7 +314,7 @@
   "privacy.public.short": "สาธารณะ",
   "privacy.unlisted.long": "ไม่โพสต์ไปยังเส้นเวลาสาธารณะ",
   "privacy.unlisted.short": "ไม่อยู่ในรายการ",
-  "refresh": "Refresh",
+  "refresh": "รีเฟรช",
   "regeneration_indicator.label": "กำลังโหลด…",
   "regeneration_indicator.sublabel": "กำลังเตรียมฟีดหน้าแรกของคุณ!",
   "relative_time.days": "{number} วัน",
@@ -396,7 +394,7 @@
   "time_remaining.moments": "ช่วงเวลาที่เหลือ",
   "time_remaining.seconds": "เหลืออีก {number, plural, other {# วินาที}}",
   "trends.count_by_accounts": "{count} {rawCount, plural, other {คน}}กำลังคุย",
-  "trends.trending_now": "แนวโน้มตอนนี้",
+  "trends.trending_now": "กำลังนิยม",
   "ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon",
   "upload_area.title": "ลากแล้วปล่อยเพื่ออัปโหลด",
   "upload_button.label": "เพิ่มสื่อ (JPEG, PNG, GIF, WebM, MP4, MOV)",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 364b98c89..5ceefa182 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Temel",
   "home.column_settings.show_reblogs": "Boost edilenleri göster",
   "home.column_settings.show_replies": "Cevapları göster",
-  "home.column_settings.update_live": "Gerçek zamanlı güncelle",
   "intervals.full.days": "{number, plural, one {# gün} other {# gün}}",
   "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}",
   "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Tercihler",
   "navigation_bar.public_timeline": "Federe zaman tüneli",
   "navigation_bar.security": "Güvenlik",
-  "notification.and_n_others": "ve {count, plural, one {# diğeri} other {# diğerleri}}",
   "notification.favourite": "{name} senin durumunu favorilere ekledi",
   "notification.follow": "{name} seni takip ediyor",
   "notification.mention": "{name} senden bahsetti",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index ec56c1484..6501c0283 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -111,9 +111,9 @@
   "confirmations.reply.message": "Поточна відповідь перезапише повідомлення, яке ви зараз пишете. Ви впевнені, що хочете продовжити?",
   "confirmations.unfollow.confirm": "Відписатися",
   "confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?",
-  "conversation.delete": "Delete conversation",
-  "conversation.mark_as_read": "Mark as read",
-  "conversation.open": "View conversation",
+  "conversation.delete": "Видалити цю бесіду",
+  "conversation.mark_as_read": "Позначити як прочитане",
+  "conversation.open": "Переглянути бесіду",
   "conversation.with": "With {names}",
   "directory.federated": "З відомого федесвіту",
   "directory.local": "Тільки з домену {domain}",
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "Основні",
   "home.column_settings.show_reblogs": "Показувати передмухи",
   "home.column_settings.show_replies": "Показувати відповіді",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}",
   "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}",
   "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "Налаштування",
   "navigation_bar.public_timeline": "Глобальна стрічка",
   "navigation_bar.security": "Безпека",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} вподобав(-ла) ваш допис",
   "notification.follow": "{name} підписався(-лась) на Вас",
   "notification.mention": "{name} згадав(-ла) Вас",
@@ -316,7 +314,7 @@
   "privacy.public.short": "Публічно",
   "privacy.unlisted.long": "Не показувати у публічних стрічках",
   "privacy.unlisted.short": "Прихований",
-  "refresh": "Refresh",
+  "refresh": "Оновити",
   "regeneration_indicator.label": "Завантаження…",
   "regeneration_indicator.sublabel": "Ваша домашня стрічка готується!",
   "relative_time.days": "{number}д",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 402f7acae..2804b2724 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "基本设置",
   "home.column_settings.show_reblogs": "显示转嘟",
   "home.column_settings.show_replies": "显示回复",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number} 天",
   "intervals.full.hours": "{number} 小时",
   "intervals.full.minutes": "{number} 分钟",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "首选项",
   "navigation_bar.public_timeline": "跨站公共时间轴",
   "navigation_bar.security": "安全",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 收藏了你的嘟文",
   "notification.follow": "{name} 开始关注你",
   "notification.mention": "{name} 提及了你",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 9e07e7995..3ca9f0e2e 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "基本",
   "home.column_settings.show_reblogs": "顯示被轉推的文章",
   "home.column_settings.show_replies": "顯示回應文章",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# day} other {# days}}",
   "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
   "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "偏好設定",
   "navigation_bar.public_timeline": "跨站時間軸",
   "navigation_bar.security": "安全",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 收藏了你的文章",
   "notification.follow": "{name} 開始關注你",
   "notification.mention": "{name} 提及你",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index deb5a3e27..136573381 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -178,7 +178,6 @@
   "home.column_settings.basic": "基本",
   "home.column_settings.show_reblogs": "顯示轉嘟",
   "home.column_settings.show_replies": "顯示回覆",
-  "home.column_settings.update_live": "Update in real-time",
   "intervals.full.days": "{number, plural, one {# 天} other {# 天}}",
   "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}",
   "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}",
@@ -272,7 +271,6 @@
   "navigation_bar.preferences": "偏好設定",
   "navigation_bar.public_timeline": "聯邦時間軸",
   "navigation_bar.security": "安全性",
-  "notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
   "notification.favourite": "{name} 把你的嘟文加入了最愛",
   "notification.follow": "{name} 關注了你",
   "notification.mention": "{name} 提到了你",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index eaccb008c..64a6ccf17 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -3127,37 +3127,27 @@ a.status-card.compact:hover {
   cursor: default;
   display: flex;
   flex: 1 1 auto;
+  flex-direction: column;
   align-items: center;
   justify-content: center;
   padding: 20px;
 
-  & > div {
-    width: 100%;
-    background: transparent;
-    padding-top: 0;
-  }
-
   &__figure {
-    background: url('~images/elephant_ui_working.svg') no-repeat center 0;
-    width: 100%;
-    height: 160px;
-    background-size: contain;
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
+    &,
+    img {
+      display: block;
+      width: auto;
+      height: 160px;
+      margin: 0;
+    }
   }
 
-  &.missing-indicator {
+  &--without-header {
     padding-top: 20px + 48px;
-
-    .regeneration-indicator__figure {
-      background-image: url('~images/elephant_ui_disappointed.svg');
-    }
   }
 
   &__label {
-    margin-top: 200px;
+    margin-top: 30px;
 
     strong {
       display: block;
@@ -6102,7 +6092,8 @@ noscript {
   background: $base-shadow-color;
 
   img,
-  video {
+  video,
+  canvas {
     display: block;
     max-height: 80vh;
     width: 100%;
diff --git a/app/javascript/styles/mastodon/introduction.scss b/app/javascript/styles/mastodon/introduction.scss
index 222d8f60e..b44ae7306 100644
--- a/app/javascript/styles/mastodon/introduction.scss
+++ b/app/javascript/styles/mastodon/introduction.scss
@@ -3,9 +3,10 @@
   flex-direction: column;
   justify-content: center;
   align-items: center;
+  height: 100vh;
+  background: $ui-base-color;
 
   @media screen and (max-width: 920px) {
-    background: darken($ui-base-color, 8%);
     display: block !important;
   }
 
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index 4587664b8..d109d991c 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -19,7 +19,7 @@ class FeedManager
 
   def filter?(timeline_type, status, receiver_id)
     if timeline_type == :home
-      filter_from_home?(status, receiver_id)
+      filter_from_home?(status, receiver_id, build_crutches(receiver_id, [status]))
     elsif timeline_type == :mentions
       filter_from_mentions?(status, receiver_id)
     elsif timeline_type == :direct
@@ -31,6 +31,7 @@ class FeedManager
 
   def push_to_home(account, status)
     return false unless add_to_feed(:home, account.id, status, account.user&.aggregates_reblogs?)
+
     trim(:home, account.id)
     PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}") if push_update_required?("timeline:#{account.id}")
     true
@@ -38,6 +39,7 @@ class FeedManager
 
   def unpush_from_home(account, status)
     return false unless remove_from_feed(:home, account.id, status, account.user&.aggregates_reblogs?)
+
     redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s))
     true
   end
@@ -49,7 +51,9 @@ class FeedManager
       should_filter &&= !(list.show_list_replies? && ListAccount.where(list_id: list.id, account_id: status.in_reply_to_account_id).exists?)
       return false if should_filter
     end
+
     return false unless add_to_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?)
+
     trim(:list, list.id)
     PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}") if push_update_required?("timeline:list:#{list.id}")
     true
@@ -57,6 +61,7 @@ class FeedManager
 
   def unpush_from_list(list, status)
     return false unless remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?)
+
     redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s))
     true
   end
@@ -100,16 +105,21 @@ class FeedManager
 
   def merge_into_timeline(from_account, into_account)
     timeline_key = key(:home, into_account.id)
-    query        = from_account.statuses.limit(FeedManager::MAX_ITEMS / 4)
+    aggregate    = into_account.user&.aggregates_reblogs?
+    query        = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
 
     if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4
-      oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0
+      oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
       query = query.where('id > ?', oldest_home_score)
     end
 
-    query.each do |status|
-      next if status.direct_visibility? || status.limited_visibility? || filter?(:home, status, into_account)
-      add_to_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?)
+    statuses = query.to_a
+    crutches = build_crutches(into_account.id, statuses)
+
+    statuses.each do |status|
+      next if filter_from_home?(status, into_account, crutches)
+
+      add_to_feed(:home, into_account.id, status, aggregate)
     end
 
     trim(:home, into_account.id)
@@ -135,24 +145,35 @@ class FeedManager
   end
 
   def populate_feed(account)
-    added  = 0
-    limit  = FeedManager::MAX_ITEMS / 2
-    max_id = nil
+    limit        = FeedManager::MAX_ITEMS / 2
+    aggregate    = account.user&.aggregates_reblogs?
+    timeline_key = key(:home, account.id)
 
-    loop do
-      statuses = Status.as_home_timeline(account)
-                       .paginate_by_max_id(limit, max_id)
+    account.statuses.where.not(visibility: :direct).limit(limit).each do |status|
+      add_to_feed(:home, account.id, status, aggregate)
+    end
 
-      break if statuses.empty?
+    account.following.includes(:account_stat).find_each do |target_account|
+      if redis.zcard(timeline_key) >= limit
+        oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
+        last_status_score = Mastodon::Snowflake.id_at(account.last_status_at)
 
-      statuses.each do |status|
-        next if filter_from_home?(status, account)
-        added += 1 if add_to_feed(:home, account.id, status, account.user&.aggregates_reblogs?)
+        # If the feed is full and this account has not posted more recently
+        # than the last item on the feed, then we can skip the whole account
+        # because none of its statuses would stay on the feed anyway
+        next if last_status_score < oldest_home_score
       end
 
-      break unless added.zero?
+      statuses = target_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, reblog: :account).limit(limit)
+      crutches = build_crutches(account.id, statuses)
 
-      max_id = statuses.last.id
+      statuses.each do |status|
+        next if filter_from_home?(status, account, crutches)
+
+        add_to_feed(:home, account.id, status, aggregate)
+      end
+
+      trim(:home, account.id)
     end
   end
 
@@ -188,31 +209,33 @@ class FeedManager
       (context == :home ? Mute.where(account_id: receiver_id, target_account_id: account_ids).any? : Mute.where(account_id: receiver_id, target_account_id: account_ids, hide_notifications: true).any?)
   end
 
-  def filter_from_home?(status, receiver_id)
+  def filter_from_home?(status, receiver_id, crutches)
     return false if receiver_id == status.account_id
     return true  if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
     return true  if phrase_filtered?(status, receiver_id, :home)
 
-    check_for_blocks = status.active_mentions.pluck(:account_id)
+    check_for_blocks = crutches[:active_mentions][status.id] || []
     check_for_blocks.concat([status.account_id])
 
     if status.reblog?
       check_for_blocks.concat([status.reblog.account_id])
-      check_for_blocks.concat(status.reblog.active_mentions.pluck(:account_id))
+      check_for_blocks.concat(crutches[:active_mentions][status.reblog_of_id] || [])
     end
 
-    return true if blocks_or_mutes?(receiver_id, check_for_blocks, :home)
+    return true if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] }
 
     if status.reply? && !status.in_reply_to_account_id.nil?                                                                      # Filter out if it's a reply
-      should_filter   = !Follow.where(account_id: receiver_id, target_account_id: status.in_reply_to_account_id).exists?         # and I'm not following the person it's a reply to
+      should_filter   = !crutches[:following][status.in_reply_to_account_id]                                                     # and I'm not following the person it's a reply to
       should_filter &&= receiver_id != status.in_reply_to_account_id                                                             # and it's not a reply to me
       should_filter &&= status.account_id != status.in_reply_to_account_id                                                       # and it's not a self-reply
-      return should_filter
+
+      return !!should_filter
     elsif status.reblog?                                                                                                         # Filter out a reblog
-      should_filter   = Follow.where(account_id: receiver_id, target_account_id: status.account_id, show_reblogs: false).exists? # if the reblogger's reblogs are suppressed
-      should_filter ||= Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists?                # or if the author of the reblogged status is blocking me
-      should_filter ||= AccountDomainBlock.where(account_id: receiver_id, domain: status.reblog.account.domain).exists?          # or the author's domain is blocked
-      return should_filter
+      should_filter   = crutches[:hiding_reblogs][status.account_id]                                                             # if the reblogger's reblogs are suppressed
+      should_filter ||= crutches[:blocked_by][status.reblog.account_id]                                                          # or if the author of the reblogged status is blocking me
+      should_filter ||= crutches[:domain_blocking][status.reblog.account.domain]                                                 # or the author's domain is blocked
+
+      return !!should_filter
     end
 
     false
@@ -349,4 +372,31 @@ class FeedManager
 
     redis.zrem(timeline_key, status.id)
   end
+
+  def build_crutches(receiver_id, statuses)
+    crutches = {}
+
+    crutches[:active_mentions] = Mention.active.where(status_id: statuses.flat_map { |s| [s.id, s.reblog_of_id] }.compact).pluck(:status_id, :account_id).each_with_object({}) { |(id, account_id), mapping| (mapping[id] ||= []).push(account_id) }
+
+    check_for_blocks = statuses.flat_map do |s|
+      arr = crutches[:active_mentions][s.id] || []
+      arr.concat([s.account_id])
+
+      if s.reblog?
+        arr.concat([s.reblog.account_id])
+        arr.concat(crutches[:active_mentions][s.reblog_of_id] || [])
+      end
+
+      arr
+    end
+
+    crutches[:following]       = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:in_reply_to_account_id).compact).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true }
+    crutches[:hiding_reblogs]  = Follow.where(account_id: receiver_id, target_account_id: statuses.map { |s| s.account_id if s.reblog? }.compact, show_reblogs: false).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true }
+    crutches[:blocking]        = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true }
+    crutches[:muting]          = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true }
+    crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.map { |s| s.reblog&.account&.domain }.compact).pluck(:domain).each_with_object({}) { |domain, mapping| mapping[domain] = true }
+    crutches[:blocked_by]      = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| s.reblog&.account_id }.compact).pluck(:account_id).each_with_object({}) { |id, mapping| mapping[id] = true }
+
+    crutches
+  end
 end
diff --git a/app/lib/spam_check.rb b/app/lib/spam_check.rb
index 441697364..5b40514fd 100644
--- a/app/lib/spam_check.rb
+++ b/app/lib/spam_check.rb
@@ -44,7 +44,6 @@ class SpamCheck
   end
 
   def flag!
-    auto_silence_account!
     auto_report_status!
   end
 
@@ -134,17 +133,13 @@ class SpamCheck
     text.gsub(/\s+/, ' ').strip
   end
 
-  def auto_silence_account!
-    @account.silence!
-  end
-
   def auto_report_status!
     status_ids = Status.where(visibility: %i(public unlisted)).where(id: matching_status_ids).pluck(:id) + [@status.id] if @status.distributable?
-    ReportService.new.call(Account.representative, @account, status_ids: status_ids, comment: I18n.t('spam_check.spam_detected_and_silenced'))
+    ReportService.new.call(Account.representative, @account, status_ids: status_ids, comment: I18n.t('spam_check.spam_detected'))
   end
 
   def already_flagged?
-    @account.silenced?
+    @account.silenced? || @account.targeted_reports.unresolved.where(account_id: -99).exists?
   end
 
   def trusted?
diff --git a/app/models/account.rb b/app/models/account.rb
index 52ce9a676..db2eb8993 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -202,7 +202,7 @@ class Account < ApplicationRecord
   end
 
   def unsilence!
-    update!(silenced_at: nil, trust_level: trust_level == TRUST_LEVELS[:untrusted] ? TRUST_LEVELS[:trusted] : trust_level)
+    update!(silenced_at: nil)
   end
 
   def suspended?
@@ -312,10 +312,9 @@ class Account < ApplicationRecord
   def save_with_optional_media!
     save!
   rescue ActiveRecord::RecordInvalid
-    self.avatar              = nil
-    self.header              = nil
-    self[:avatar_remote_url] = ''
-    self[:header_remote_url] = ''
+    self.avatar = nil
+    self.header = nil
+
     save!
   end
 
diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb
index b30a82369..e9da003a3 100644
--- a/app/models/admin/account_action.rb
+++ b/app/models/admin/account_action.rb
@@ -62,6 +62,8 @@ class Admin::AccountAction
 
   def process_action!
     case type
+    when 'none'
+      handle_resolve!
     when 'disable'
       handle_disable!
     when 'silence'
@@ -103,6 +105,16 @@ class Admin::AccountAction
     end
   end
 
+  def handle_resolve!
+    if with_report? && report.account_id == -99 && target_account.trust_level == Account::TRUST_LEVELS[:untrusted]
+      # This is an automated report and it is being dismissed, so it's
+      # a false positive, in which case update the account's trust level
+      # to prevent further spam checks
+
+      target_account.update(trust_level: Account::TRUST_LEVELS[:trusted])
+    end
+  end
+
   def handle_disable!
     authorize(target_account.user, :disable?)
     log_action(:disable, target_account.user)
diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb
index 082302619..b7a476c87 100644
--- a/app/models/concerns/remotable.rb
+++ b/app/models/concerns/remotable.rb
@@ -18,7 +18,7 @@ module Remotable
           return
         end
 
-        return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.blank? || self[attribute_name] == url
+        return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.blank? || (self[attribute_name] == url && send("#{attachment_name}_file_name").present?)
 
         begin
           Request.new(:get, url).perform do |response|
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index f1ee38325..3398af169 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -36,6 +36,7 @@ class Form::AdminSettings
     show_replies_in_public_timelines
     spam_check_enabled
     trends
+    trendable_by_default
     show_domain_blocks
     show_domain_blocks_rationale
     noindex
@@ -56,6 +57,7 @@ class Form::AdminSettings
     show_replies_in_public_timelines
     spam_check_enabled
     trends
+    trendable_by_default
     noindex
   ).freeze
 
diff --git a/app/models/home_feed.rb b/app/models/home_feed.rb
index ba7564983..1fd506138 100644
--- a/app/models/home_feed.rb
+++ b/app/models/home_feed.rb
@@ -7,19 +7,7 @@ class HomeFeed < Feed
     @account = account
   end
 
-  def get(limit, max_id = nil, since_id = nil, min_id = nil)
-    if redis.exists("account:#{@account.id}:regeneration")
-      from_database(limit, max_id, since_id, min_id)
-    else
-      super
-    end
-  end
-
-  private
-
-  def from_database(limit, max_id, since_id, min_id)
-    Status.as_home_timeline(@account)
-          .paginate_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
-          .reject { |status| FeedManager.instance.filter?(:home, status, @account.id) }
+  def regenerating?
+    redis.exists("account:#{@id}:regeneration")
   end
 end
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 4f06a40cf..056ed816e 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -57,6 +57,7 @@ class MediaAttachment < ApplicationRecord
     small: {
       convert_options: {
         output: {
+          'loglevel' => 'fatal',
           vf: 'scale=\'min(400\, iw):min(400\, ih)\':force_original_aspect_ratio=decrease',
         },
       },
@@ -70,6 +71,7 @@ class MediaAttachment < ApplicationRecord
       keep_same_format: true,
       convert_options: {
         output: {
+          'loglevel' => 'fatal',
           'map_metadata' => '-1',
           'c:v' => 'copy',
           'c:a' => 'copy',
@@ -84,6 +86,7 @@ class MediaAttachment < ApplicationRecord
       content_type: 'audio/mpeg',
       convert_options: {
         output: {
+          'loglevel' => 'fatal',
           'q:a' => 2,
         },
       },
diff --git a/app/models/status.rb b/app/models/status.rb
index 7ac0fb5bd..c189d19bf 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -291,10 +291,6 @@ class Status < ApplicationRecord
       where(language: nil).or where(language: account.chosen_languages)
     end
 
-    def as_home_timeline(account)
-      where(account: [account] + account.following).where(visibility: [:public, :unlisted, :private])
-    end
-
     def as_direct_timeline(account, limit = 20, max_id = nil, since_id = nil, cache_ids = false)
       # direct timeline is mix of direct message from_me and to_me.
       # 2 queries are executed with pagination.
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 82786daa8..d3a7e1e6d 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -37,6 +37,7 @@ class Tag < ApplicationRecord
   scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
   scope :usable, -> { where(usable: [true, nil]) }
   scope :listable, -> { where(listable: [true, nil]) }
+  scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
   scope :discoverable, -> { listable.joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
   scope :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) }
   scope :matches_name, ->(value) { where(arel_table[:name].matches("#{value}%")) }
@@ -76,7 +77,7 @@ class Tag < ApplicationRecord
   alias listable? listable
 
   def trendable
-    boolean_with_default('trendable', false)
+    boolean_with_default('trendable', Setting.trendable_by_default)
   end
 
   alias trendable? trendable
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index 8cdade42d..c69f6d3c3 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -90,7 +90,7 @@ class TrendingTags
       tag_ids = redis.zrevrange(KEY, 0, LIMIT - 1).map(&:to_i)
 
       tags = Tag.where(id: tag_ids)
-      tags = tags.where(trendable: true) if filtered
+      tags = tags.trendable if filtered
       tags = tags.each_with_object({}) { |tag, h| h[tag.id] = tag }
 
       tag_ids.map { |tag_id| tags[tag_id] }.compact.take(limit)
diff --git a/app/services/hashtag_query_service.rb b/app/services/hashtag_query_service.rb
index 282821710..196de0639 100644
--- a/app/services/hashtag_query_service.rb
+++ b/app/services/hashtag_query_service.rb
@@ -1,6 +1,8 @@
 # frozen_string_literal: true
 
 class HashtagQueryService < BaseService
+  LIMIT_PER_MODE = 4
+
   def call(tag, params, account = nil, local = false)
     tags = tags_for(Array(tag.name) | Array(params[:any])).pluck(:id)
     all  = tags_for(params[:all])
@@ -15,6 +17,6 @@ class HashtagQueryService < BaseService
   private
 
   def tags_for(names)
-    Tag.matching_name(names) if names.presence
+    Tag.matching_name(Array(names).take(LIMIT_PER_MODE)) if names.present?
   end
 end
diff --git a/app/validators/poll_validator.rb b/app/validators/poll_validator.rb
index 9d7321cad..8259a62e5 100644
--- a/app/validators/poll_validator.rb
+++ b/app/validators/poll_validator.rb
@@ -1,8 +1,8 @@
 # frozen_string_literal: true
 
 class PollValidator < ActiveModel::Validator
-  MAX_OPTIONS      = 4
-  MAX_OPTION_CHARS = 25
+  MAX_OPTIONS      = 5
+  MAX_OPTION_CHARS = 100
   MAX_EXPIRATION   = 1.month.freeze
   MIN_EXPIRATION   = 5.minutes.freeze
 
diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml
index f24f4e195..80f4cd828 100644
--- a/app/views/about/show.html.haml
+++ b/app/views/about/show.html.haml
@@ -52,13 +52,12 @@
         .hero-widget__img
           = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.jpg'), alt: @instance_presenter.site_title
 
-        - if @instance_presenter.site_short_description.present?
-          .hero-widget__text
-            %p
-              = @instance_presenter.site_short_description.html_safe.presence
-              = link_to about_more_path do
-                = t('about.learn_more')
-                = fa_icon 'angle-double-right'
+        .hero-widget__text
+          %p
+            = @instance_presenter.site_short_description.html_safe.presence || t('about.about_mastodon_html')
+            = link_to about_more_path do
+              = t('about.learn_more')
+              = fa_icon 'angle-double-right'
 
         .hero-widget__footer
           .hero-widget__footer__column
diff --git a/app/views/admin/custom_emojis/_custom_emoji.html.haml b/app/views/admin/custom_emojis/_custom_emoji.html.haml
index 2103b0fa7..526c844e9 100644
--- a/app/views/admin/custom_emojis/_custom_emoji.html.haml
+++ b/app/views/admin/custom_emojis/_custom_emoji.html.haml
@@ -17,6 +17,10 @@
       - else
         = custom_emoji.domain
 
+        - if custom_emoji.local_counterpart.present?
+          &bull;
+          = t('admin.accounts.location.local')
+
       %br/
 
       - if custom_emoji.disabled?
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index e96ea0b03..ba66aeff8 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -20,10 +20,10 @@
       = f.input :site_contact_email, wrapper: :with_label, label: t('admin.settings.contact_information.email')
 
   .fields-group
-    = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 4 }
+    = f.input :site_short_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_short_description.title'), hint: t('admin.settings.site_short_description.desc_html'), input_html: { rows: 2 }
 
   .fields-group
-    = f.input :site_short_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_short_description.title'), hint: t('admin.settings.site_short_description.desc_html'), input_html: { rows: 2 }
+    = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 2 }
 
   .fields-row
     .fields-row__column.fields-row__column-6.fields-group
@@ -72,6 +72,9 @@
       = f.input :trends, as: :boolean, wrapper: :with_label, label: t('admin.settings.trends.title'), hint: t('admin.settings.trends.desc_html')
 
     .fields-group
+      = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html')
+
+    .fields-group
       = f.input :noindex, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_noindex.title'), hint: t('admin.settings.default_noindex.desc_html')
 
   .fields-group
@@ -101,8 +104,8 @@
       = f.input :show_domain_blocks_rationale, wrapper: :with_label, collection: %i(disabled users all), label: t('admin.settings.domain_blocks_rationale.title'), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
 
   .fields-group
-    = f.input :closed_registrations_message, as: :text, wrapper: :with_block_label, label: t('admin.settings.registrations.closed_message.title'), hint: t('admin.settings.registrations.closed_message.desc_html'), input_html: { rows: 8 }
     = f.input :site_extended_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description_extended.title'), hint: t('admin.settings.site_description_extended.desc_html'), input_html: { rows: 8 } unless whitelist_mode?
+    = f.input :closed_registrations_message, as: :text, wrapper: :with_block_label, label: t('admin.settings.registrations.closed_message.title'), hint: t('admin.settings.registrations.closed_message.desc_html'), input_html: { rows: 8 }
     = f.input :site_terms, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_terms.title'), hint: t('admin.settings.site_terms.desc_html'), input_html: { rows: 8 }
     = f.input :custom_css, wrapper: :with_block_label, as: :text, input_html: { rows: 8 }, label: t('admin.settings.custom_css.title'), hint: t('admin.settings.custom_css.desc_html')
 
diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml
index 33e7c96fe..7ec91c06a 100644
--- a/app/views/application/_sidebar.html.haml
+++ b/app/views/application/_sidebar.html.haml
@@ -3,7 +3,7 @@
     = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.jpg'), alt: @instance_presenter.site_title
 
   .hero-widget__text
-    %p= @instance_presenter.site_short_description.html_safe.presence || @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
+    %p= @instance_presenter.site_short_description.html_safe.presence || t('about.about_mastodon_html')
 
 - if Setting.trends && !(user_signed_in? && !current_user.setting_trends)
   - trends = TrendingTags.get(3)
diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml
index 576f47a67..c8f12974e 100644
--- a/app/views/shared/_og.html.haml
+++ b/app/views/shared/_og.html.haml
@@ -1,5 +1,5 @@
 - thumbnail     = @instance_presenter.thumbnail
-- description ||= strip_tags(@instance_presenter.site_short_description.presence || @instance_presenter.site_description.presence || t('about.about_mastodon_html'))
+- description ||= strip_tags(@instance_presenter.site_short_description.presence || t('about.about_mastodon_html'))
 
 %meta{ name: 'description', content: description }/
 
diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml
index 12f03ccdd..5cee84ada 100644
--- a/app/views/statuses/_detailed_status.html.haml
+++ b/app/views/statuses/_detailed_status.html.haml
@@ -20,7 +20,7 @@
       %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }<
         %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}&nbsp;
         %button.status__content__spoiler-link= t('statuses.show_more')
-    .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }
+    .e-content{ style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }
       = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
       - if status.preloadable_poll
         = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml
index fe1591bf9..a0e77ac6d 100644
--- a/app/views/statuses/_simple_status.html.haml
+++ b/app/views/statuses/_simple_status.html.haml
@@ -24,7 +24,7 @@
       %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }<
         %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}&nbsp;
         %button.status__content__spoiler-link= t('statuses.show_more')
-    .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }<
+    .e-content{ style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }<
       = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
       - if status.preloadable_poll
         = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
diff --git a/config/deploy.rb b/config/deploy.rb
index c4133e794..4dc36c65c 100644
--- a/config/deploy.rb
+++ b/config/deploy.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-lock '3.11.1'
+lock '3.11.2'
 
 set :repo_url, ENV.fetch('REPO', 'https://github.com/tootsuite/mastodon.git')
 set :branch, ENV.fetch('BRANCH', 'master')
diff --git a/config/initializers/json_ld.rb b/config/initializers/json_ld.rb
index d5575d135..3ed3c4b31 100644
--- a/config/initializers/json_ld.rb
+++ b/config/initializers/json_ld.rb
@@ -1,3 +1,4 @@
 # frozen_string_literal: true
 
 require_relative '../../lib/json_ld/security'
+require_relative '../../lib/json_ld/identity'
diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb
index f308c2841..d3602e655 100644
--- a/config/initializers/paperclip.rb
+++ b/config/initializers/paperclip.rb
@@ -1,10 +1,11 @@
 # frozen_string_literal: true
 
-Paperclip.options[:read_timeout] = 60
-
 Paperclip.interpolates :filename do |attachment, style|
-  return attachment.original_filename if style == :original
-  [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.')
+  if style == :original
+    attachment.original_filename
+  else
+    [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.')
+  end
 end
 
 Paperclip::Attachment.default_options.merge!(
@@ -24,22 +25,27 @@ if ENV['S3_ENABLED'] == 'true'
     storage: :s3,
     s3_protocol: s3_protocol,
     s3_host_name: s3_hostname,
+
     s3_headers: {
       'X-Amz-Multipart-Threshold' => ENV.fetch('S3_MULTIPART_THRESHOLD') { 15.megabytes }.to_i,
       'Cache-Control' => 'public, max-age=315576000, immutable',
     },
+
     s3_permissions: ENV.fetch('S3_PERMISSION') { 'public-read' },
     s3_region: s3_region,
+
     s3_credentials: {
       bucket: ENV['S3_BUCKET'],
       access_key_id: ENV['AWS_ACCESS_KEY_ID'],
       secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
     },
+
     s3_options: {
       signature_version: ENV.fetch('S3_SIGNATURE_VERSION') { 'v4' },
       http_open_timeout: 5,
       http_read_timeout: 5,
       http_idle_timeout: 5,
+      retry_limit: 0,
     }
   )
 
@@ -48,6 +54,7 @@ if ENV['S3_ENABLED'] == 'true'
       endpoint: ENV['S3_ENDPOINT'],
       force_path_style: true
     )
+
     Paperclip::Attachment.default_options[:url] = ':s3_path_url'
   end
 
@@ -73,6 +80,7 @@ elsif ENV['SWIFT_ENABLED'] == 'true'
       openstack_region: ENV['SWIFT_REGION'],
       openstack_cache_ttl: ENV.fetch('SWIFT_CACHE_TTL') { 60 },
     },
+
     fog_directory: ENV['SWIFT_CONTAINER'],
     fog_host: ENV['SWIFT_OBJECT_URL'],
     fog_public: true
@@ -81,7 +89,7 @@ else
   Paperclip::Attachment.default_options.merge!(
     storage: :filesystem,
     use_timestamp: true,
-    path: (ENV['PAPERCLIP_ROOT_PATH'] || ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename',
-    url: (ENV['PAPERCLIP_ROOT_URL'] || '/system') + '/:class/:attachment/:id_partition/:style/:filename',
+    path: ENV.fetch('PAPERCLIP_ROOT_PATH', ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename',
+    url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:class/:attachment/:id_partition/:style/:filename',
   )
 end
diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml
new file mode 100644
index 000000000..4cdd90278
--- /dev/null
+++ b/config/locales/activerecord.es-AR.yml
@@ -0,0 +1,17 @@
+---
+es-AR:
+  activerecord:
+    attributes:
+      poll:
+        expires_at: Fecha límite
+        options: Opciones
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: sólo letras, números y subguiones ("_")
+        status:
+          attributes:
+            reblog:
+              taken: del estado ya existe
diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml
index 2fbf0ffd7..f40e6c361 100644
--- a/config/locales/activerecord.es.yml
+++ b/config/locales/activerecord.es.yml
@@ -1 +1,17 @@
---- {}
+---
+es:
+  activerecord:
+    attributes:
+      poll:
+        expires_at: Vencimiento
+        options: Opciones
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: sólo letras, números y guiones bajos
+        status:
+          attributes:
+            reblog:
+              taken: del estado ya existe
diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml
new file mode 100644
index 000000000..cbb053a90
--- /dev/null
+++ b/config/locales/activerecord.pt-PT.yml
@@ -0,0 +1,13 @@
+---
+pt-PT:
+  activerecord:
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: apenas letras, números e underscores
+        status:
+          attributes:
+            reblog:
+              taken: do status já existe
diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml
index 0ae4906d7..8d142e7ac 100644
--- a/config/locales/activerecord.sv.yml
+++ b/config/locales/activerecord.sv.yml
@@ -1,9 +1,13 @@
 ---
 sv:
   activerecord:
+    attributes:
+      poll:
+        expires_at: Tidsgräns
+        options: Val
     errors:
       models:
         account:
           attributes:
             username:
-              invalid: enbart bokstäver, siffror och understreck
+              invalid: endast bokstäver, siffror och understrykning
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index f1d9570ad..2bf6789be 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -18,7 +18,6 @@ ar:
     discover_users: اكتشف مستخدِمين
     documentation: الدليل
     federation_hint_html: بواسطة حساب في %{instance} ستتمكن من تتبع أناس في أي خادم ماستدون وأكثر.
-    generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة"
     get_apps: جرّب تطبيقا على الموبايل
     hosted_on: ماستدون مُستضاف على %{domain}
     learn_more: تعلم المزيد
@@ -237,6 +236,7 @@ ar:
       deleted_status: "(منشور محذوف)"
       title: سِجلّ التفتيش و المعاينة
     custom_emojis:
+      assign_category: اسند فئة
       by_domain: النطاق
       copied_msg: تم إنشاء نسخة محلية للإيموجي بنجاح
       copy: نسخ
@@ -279,7 +279,7 @@ ar:
       feature_timeline_preview: معاينة الخيط الزمني
       features: الميّزات
       hidden_service: الفيديرالية مع الخدمات الخفية
-      open_reports: فتح الشكاوى
+      open_reports: شكاوي مفتوحة
       pending_tags: وسوم في انتظار المراجعة
       pending_users: مستخدمين في انتظار مراجعة
       recent_users: أحدث المستخدِمين
@@ -289,15 +289,22 @@ ar:
       space: المساحة المستخدَمة
       title: لوح المراقبة
       total_users: إجمالي المستخدِمين
-      trends: المؤشرات
+      trends: المتداوَلة
       week_interactions: تفاعُلات هذا الأسبوع
-      week_users_active: نشط هذا الأسبوع
+      week_users_active: نشطاء هذا الأسبوع
       week_users_new: مستخدِمين هذا الأسبوع
+      whitelist_mode: وضع القائمة البيضاء
+    domain_allows:
+      add_new: إضافة النطاق إلى القائمة البيضاء
+      created_msg: تمت إضافة النطاق إلى القائمة البيضاء بنجاح
+      destroyed_msg: تمت إزالة النطاق مِن القائمة البيضاء
+      undo: إزالة من القائمة البيضاء
     domain_blocks:
       add_new: إضافة حجب جديد لنطاق
       created_msg: إنّ حجب النطاق حيز التشغيل
       destroyed_msg: تم إلغاء الحجب المفروض على النطاق
       domain: النطاق
+      edit: تحرير النطاق المحظور
       new:
         create: إنشاء حظر
         hint: لن تمنع كتلة المجال إنشاء إدخالات حساب في قاعدة البيانات ، ولكنها ستطبق طرق الإشراف المحددة بأثر رجعي وتلقائي على هذه الحسابات.
@@ -308,6 +315,7 @@ ar:
           suspend: تعليق
         title: حجب نطاق جديد
       private_comment: تعليق خاص
+      public_comment: تعليق للعلن
       reject_media: رفض ملفات الوسائط
       reject_media_hint: يزيل ملفات الوسائط المخزنة محليًا ويرفض تنزيل أي ملفات في المستقبل. غير ذي صلة للتعليق
       reject_reports: رفض التقارير
@@ -356,6 +364,7 @@ ar:
         limited: محدود
         title: الإشراف
       private_comment: تعليق خاص
+      public_comment: تعليق للعلن
       title: الفديرالية
       total_blocked_by_us: المحجوبة مِن طرفنا
       total_followed_by_them: يُتابِعونها
@@ -434,6 +443,8 @@ ar:
         title: سي أس أس مخصص
       domain_blocks:
         all: للجميع
+      domain_blocks_rationale:
+        title: اظهر السبب
       hero:
         desc_html: معروض على الصفحة الأولى. لا يقل عن 600 × 100 بكسل. عند عدم التعيين ، تعود الصورة إلى النسخة المصغرة على سبيل المثال
         title: الصورة الرأسية
@@ -562,6 +573,7 @@ ar:
     delete_account: حذف حساب
     delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك <a href="%{path}">المواصلة هنا</a>. سوف يُطلَبُ منك التأكيد قبل الحذف.
     description:
+      prefix_invited_by_user: يدعوك @%{name} للاتحاق بخادم ماستدون هذا!
       prefix_sign_up: أنشئ حسابًا على ماستدون اليوم!
     didnt_get_confirmation: لم تتلق تعليمات التأكيد ؟
     forgot_password: نسيت كلمة المرور ؟
@@ -585,6 +597,7 @@ ar:
     status:
       account_status: حالة الحساب
       functional: حسابك جاهز.
+      redirecting_to: حسابك غير نشط لأنه تم تحويله حاليا إلى %{acct}.
     trouble_logging_in: هل صادفتكم مشكلة في الولوج؟
   authorize_follow:
     already_following: أنت تتابع بالفعل هذا الحساب
@@ -616,10 +629,18 @@ ar:
       x_months: "%{count} شه"
       x_seconds: "%{count}ث"
   deletes:
+    challenge_not_passed: المعلومات التي أدخلتها لم تكن صحيحة
     confirm_password: قم بإدخال كلمتك السرية الحالية للتحقق من هويتك
+    confirm_username: ادخل اسم المستخدم الخاص بك لتأكيد الإجراء
     proceed: حذف حساب
     success_msg: تم حذف حسابك بنجاح
     warning:
+      before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:'
+      data_removal: سوف تُحذَف منشوراتك والبيانات الأخرى نهائيا
+      email_change_html: بإمكانك <a href="%{path}">تغيير عنوان بريدك الإلكتروني</a> دون أن يُحذف حسابك
+      irreversible: لن يكون بإمكانك استرجاع أو إعادة تنشيط حسابك
+      more_details_html: للمزيد مِن التفاصيل ، يرجى الإطلاع على <a href="%{terms_path}">سياسة الخصوصية</a>.
+      username_available: سيصبح اسم مستخدمك متوفرا ثانية
       username_unavailable: سيبقى اسم المستخدم الخاص بك غير متوفر
   directories:
     directory: سِجلّ الصفحات التعريفية
@@ -759,13 +780,18 @@ ar:
     cancel: ألغِ التوجيه
     cancelled_msg: تم إلغاء التوجيه بنجاح.
     errors:
+      move_to_self: لا يمكنه أن يكون الحساب الحالي
       not_found: تعذر العثور عليه
+      on_cooldown: إنّك في مرحلة الجمود
     followers_count: المتابِعين عند الإنتقال
     incoming_migrations: الانتقال مِن حساب آخر
+    not_redirecting: حاليا ، حسابك لا يقوم بالتحويل إلى أي حساب آخر.
     past_migrations: التهجيرات السابقة
     proceed_with_move: انقل مشارِكيك
     redirecting_to: حسابك موجَّه إلى %{acct}.
     set_redirect: تعين إعادة التوجيه
+    warning:
+      before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:'
   moderation:
     title: الإشراف
   notification_mailer:
@@ -866,6 +892,9 @@ ar:
     reply:
       proceed: المواصلة إلى الرد
       prompt: 'ترغب في الرد على هذا التبويق:'
+  scheduled_statuses:
+    over_total_limit: لقد بلغت حد الـ %{limit} مِن التبويقات المبرمَجة
+    too_soon: يجب أن يكون تاريخ البرمجة في المستقبَل
   sessions:
     activity: آخر نشاط
     browser: المتصفح
@@ -927,6 +956,8 @@ ar:
     profile: الملف التعريفي
     relationships: المتابِعون والمتابَعون
     two_factor_authentication: المُصادقة بخُطوَتَيْن
+  spam_check:
+    spam_detected: هذا إبلاغ تلقائي. تم اكتشاف منشورات عشوائية غير مرغوب فيها.
   statuses:
     attached:
       description: 'مُرفَق: %{attached}'
@@ -990,6 +1021,10 @@ ar:
     contrast: ماستدون (تباين عالٍ)
     default: ماستدون (داكن)
     mastodon-light: ماستدون (فاتح)
+  time:
+    formats:
+      default: "%b %d, %Y, %H:%M"
+      month: "%b %Y"
   two_factor_authentication:
     code_hint: قم بإدخال الرمز المُوَلّد عبر تطبيق المصادقة للتأكيد
     description_html: في حال تفعيل <strong>المصادقة بخطوتين </strong>، فتسجيل الدخول يتطلب منك أن يكون بحوزتك هاتفك النقال قصد توليد الرمز الذي سيتم إدخاله.
diff --git a/config/locales/bn.yml b/config/locales/bn.yml
index 1da7aac53..9fdc3ed29 100644
--- a/config/locales/bn.yml
+++ b/config/locales/bn.yml
@@ -18,7 +18,6 @@ bn:
     discover_users: ব্যবহারকারীদের দেখুন
     documentation: ব্যবহারবিলি
     federation_hint_html: "%{instance}তে একটা নিবন্ধন থাকলে আপনি যেকোনো মাস্টাডন বা এধরণের অন্যান্য সার্ভারের মানুষের সাথে যুক্ত হতে পারবেন ।"
-    generic_description: নেটওয়ার্কের ভেতরে %{domain} একটি সার্ভার
     get_apps: মোবাইল এপ্প একটা ব্যবহার করতে পারেন
     hosted_on: এই মাস্টাডনটি আছে %{domain} এ
     learn_more: বিস্তারিত জানুন
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 74bb406ac..1d815adcf 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -18,7 +18,6 @@ ca:
     discover_users: Descobreix usuaris
     documentation: Documentació
     federation_hint_html: Amb un compte de %{instance} podràs seguir persones de qualsevol servidor Mastodon i altres.
-    generic_description: "%{domain} és un servidor a la xarxa"
     get_apps: Prova una aplicació mòbil
     hosted_on: Mastodon allotjat a %{domain}
     instance_actor_flash: |
@@ -507,6 +506,9 @@ ca:
         desc_html: Mostra la línia de temps pública a la pàgina inicial
         title: Vista prèvia de la línia de temps
       title: Configuració del lloc
+      trendable_by_default:
+        desc_html: Afecta a les etiquetes que no s'havien rebutjat prèviament
+        title: Permet que les etiquetes passin a la tendència sense revisió prèvia
       trends:
         desc_html: Mostra públicament les etiquetes revisades anteriorment que actualment estan en tendència
         title: Etiquetes tendència
@@ -1005,8 +1007,6 @@ ca:
     profile: Perfil
     relationships: Seguits i seguidors
     two_factor_authentication: Autenticació de dos factors
-  spam_check:
-    spam_detected_and_silenced: Aquest és un informe automatitzat. S'ha detectat correu brossa i el remitent s'ha silenciat automàticament. Si es tracta d’un error, si us plau, trèieu el silenci del compte.
   statuses:
     attached:
       description: 'Adjunt: %{attached}'
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 8a99e2292..41e2ccfbb 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -18,7 +18,6 @@ co:
     discover_users: Scopre utilizatori
     documentation: Ducumentazione
     federation_hint_html: Cù un contu nant'à %{instance} puderete siguità ghjente da tutti i servori Mastodon è ancu più d'altri.
-    generic_description: "%{domain} hè un servore di a rete"
     get_apps: Pruvà un'applicazione di telefuninu
     hosted_on: Mastodon allughjatu nant’à %{domain}
     instance_actor_flash: |
@@ -507,6 +506,9 @@ co:
         desc_html: Vede a linea pubblica nant’a pagina d’accolta
         title: Vista di e linee
       title: Parametri di u situ
+      trendable_by_default:
+        desc_html: Ùn affetta micca quelli chì sò digià stati ricusati
+        title: Auturizà l'hashtag à esse in tindenze senza verificazione
       trends:
         desc_html: Mustrà à u pubblicu i hashtag chì sò stati digià verificati è chì sò in e tendenze avà
         title: Tendenze di hashtag
@@ -1005,8 +1007,6 @@ co:
     profile: Prufile
     relationships: Abbunamenti è abbunati
     two_factor_authentication: Identificazione à dui fattori
-  spam_check:
-    spam_detected_and_silenced: Quessu ghjè un signalamente autumaticu. Un spam hè statu ditettatu è u speditore hè statu silenzatu. S'ellu era un sbagliu, pudete annullà l'azzione.
   statuses:
     attached:
       description: 'Aghjuntu: %{attached}'
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index d1311063c..8a3669a6c 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -2,7 +2,7 @@
 cs:
   about:
     about_hashtag_html: Tohle jsou veřejné tooty označené hashtagem <strong>#%{hashtag}</strong>. Pokud máte účet kdekoliv ve fedivesmíru, můžete s nimi interagovat.
-    about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentralizovaná jako e-mail.
+    about_mastodon_html: 'Sociální síť budoucnosti: žádné reklamy, žádné korporátní sledování, etický design a decentralizace! S Mastodonem vlastníte svoje data!'
     about_this: O tomto serveru
     active_count_after: aktivních
     active_footnote: Měsíční aktivní uživatelé (MAU)
@@ -18,7 +18,6 @@ cs:
     discover_users: Objevujte uživatele
     documentation: Dokumentace
     federation_hint_html: S účtem na %{instance} můžete sledovat lidi na jakémkoliv serveru Mastodon a jiných službách.
-    generic_description: "%{domain} je jedním ze serverů v síti"
     get_apps: Vyzkoušejte mobilní aplikaci
     hosted_on: Mastodon na adrese %{domain}
     instance_actor_flash: |
@@ -40,10 +39,10 @@ cs:
     unavailable_content: Nedostupný obsah
     unavailable_content_description:
       domain: Server
-      reason: 'Důvod:'
-      rejecting_media: Mediální soubory z tohoto serveru nebudou zpracovány a nebudou zobrazeny žádné náhledy. Pro prohlédnutí médií bude třeba manuálně přejít na druhý server.
-      silenced: Příspěvky z tohoto severu nebudou zobrazeni nikde kromě vašeho domovského proudu, v případě, že sledujete autora.
-      suspended: Nebudete moci sledovat nikoho z tohoto serveru, žádná data z něj nebudou zpracována či uložena a žádná data nebudou vyměněna mezi servery.
+      reason: Důvod
+      rejecting_media: 'Mediální soubory z tohoto serveru nebudou zpracovány a nebudou zobrazeny žádné náhledy. Pro prohlédnutí médií bude třeba manuálně přejít na druhý server:'
+      silenced: 'Příspěvky z těchto serverů nebudou zobrazeny ve veřejných časových osách a konverzacích a nebudou generována oznámení o interakcích uživatelů z toho serveru, pokud je nesledujete:'
+      suspended: 'Žádná data z těchto serverů nebudou zpracována, ukládána ani vyměňována, čímž bude znemožněna jakákoliv interakce či komunikace s uživateli z těchto serverů:'
     unavailable_content_html: Mastodon vám obvykle dovoluje prohlížet si obsah a komunikovat s uživateli z jakéhokoliv dalšího serveru ve fedivesmíru. Tohle jsou výjimky, které byly zavedeny na tomto konkrétním serveru.
     user_count_after:
       few: uživatelé
@@ -270,7 +269,7 @@ cs:
       updated_msg: Emoji úspěšně aktualizováno!
       upload: Nahrát
     dashboard:
-      authorized_fetch_mode: Autorizovaný režim fetch
+      authorized_fetch_mode: Zabezpečený režim
       backlog: opožděné úlohy
       config: Konfigurace
       feature_deletions: Smazání účtů
@@ -400,7 +399,7 @@ cs:
       pending: Čekám na souhlas mostu
       save_and_enable: Uložit a povolit
       setup: Nastavit připojení k mostu
-      signatures_not_enabled: Mosty nebudou fungovat správně, dokud je povolen bezpečný režim nebo režim bílé listiny
+      signatures_not_enabled: Mosty nebudou fungovat správně, dokud je povolen zabezpečený režim nebo režim bílé listiny
       status: Stav
       title: Mosty
     report_notes:
@@ -491,8 +490,8 @@ cs:
           open: Kdokoliv se může registrovat
         title: Režim registrací
       show_known_fediverse_at_about_page:
-        desc_html: Je-li tohle zapnuto, zobrazí se v náhledu tooty z celého známého fedivesmíru. Jinak budou zobrazeny pouze místní tooty.
-        title: Zobrazit na náhledu časové osy celý známý fedivesmír
+        desc_html: Je-li tohle vypnuto, bude veřejná časová osa, na kterou odkazuje hlavní stránka serveru, omezena pouze na místní obsah
+        title: Zobrazit na nepřihlášené stránce časové osy federovaný obsah
       show_staff_badge:
         desc_html: Zobrazit na stránce uživatele odznak člena personálu
         title: Zobrazit odznak personálu
@@ -503,22 +502,25 @@ cs:
         desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které váš server odlišují od ostatních. Lze použít HTML značky
         title: Vlastní rozšířené informace
       site_short_description:
-        desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní v jediném odstavci.
+        desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní, v jediném odstavci.
         title: Krátký popis serveru
       site_terms:
         desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. Můžete použít HTML značky
         title: Vlastní podmínky používání
       site_title: Název serveru
       spam_check_enabled:
-        desc_html: Mastodon může automaticky utišovat a nahlašovat účty podle opatření, jako například detekování účtů, které odesílají opakované nevyžadované zprávy. Mohou se najít špatné shody.
-        title: Antispam
+        desc_html: Mastodon může automaticky nahlašovat účty, které opakovaně odesílají nevyžádané zprávy. Mohou se najít špatné shody.
+        title: Antispamová automatizace
       thumbnail:
         desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučuje se rozlišení 1200x630px
         title: Miniatura serveru
       timeline_preview:
-        desc_html: Zobrazit na hlavní straně veřejnou časovou osu
-        title: Náhled časové osy
+        desc_html: Zobrazit na hlavní straně odkaz na veřejnou časovou osu a povolit přístup na veřejnou časovou osu pomocí API bez autentizace
+        title: Povolit neautentizovaný přístup k časové ose
       title: Nastavení stránky
+      trendable_by_default:
+        desc_html: Ovlivňuje hashtagy, které nebyly dříve zakázány
+        title: Dovolit hashtagům zobrazit se na trendech bez předchozího posouzení
       trends:
         desc_html: Veřejně zobrazit předtím schválené hashtagy, které jsou aktuálně populární
         title: Populární hashtagy
@@ -551,7 +553,7 @@ cs:
       reviewed: Schválen
       title: Hashtagy
       trending_right_now: Aktuální trendy
-      unique_uses_today: "%{count} dnes píší"
+      unique_uses_today: "%{count} dnes píše"
       unreviewed: Neposouzeno
       updated_msg: Nastavení hashtagu bylo úspěšně aktualizováno
     title: Administrace
@@ -809,7 +811,7 @@ cs:
       '604800': 1 týden
       '86400': 1 den
     expires_in_prompt: Nikdy
-    generate: Vygenerovat
+    generate: Vygenerovat pozvánku
     invited_by: 'Byl/a jste pozván/a uživatelem:'
     max_uses:
       few: "%{count} použití"
@@ -1026,7 +1028,7 @@ cs:
     relationships: Sledovaní a sledující
     two_factor_authentication: Dvoufázové ověřování
   spam_check:
-    spam_detected_and_silenced: Tohle je automtické nahlášení. Byl detekován spam a jeho odesílatel byl automaticky utišen. Pokud je tohle chyba, prosím odtište tento účet.
+    spam_detected: Tohle je automatizované nahlášení. Byl detekován spam.
   statuses:
     attached:
       description: 'Přiloženo: %{attached}'
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 24bed1060..202e5de6c 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -18,7 +18,6 @@ cy:
     discover_users: Darganfod defnyddwyr
     documentation: Dogfennaeth
     federation_hint_html: Gyda cyfrif ar %{instance}, gallwch dilyn pobl ar unrhyw gweinydd Mastodon, a thu hwnt.
-    generic_description: Mae %{domain} yn un gweinydd yn y rhwydwaith
     get_apps: Rhowch gynnig ar ap dyfeis symudol
     hosted_on: Mastodon wedi ei weinyddu ar %{domain}
     instance_actor_flash: |
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 85a5bbefd..5e291154a 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -14,7 +14,6 @@ da:
     contact_unavailable: Ikke tilgængeligt
     discover_users: Opdag brugere
     documentation: Dokumentation
-    generic_description: "%{domain} er en server i netværket"
     get_apps: Prøv en mobil app
     hosted_on: Mostodon hostet på %{domain}
     learn_more: Lær mere
@@ -26,6 +25,7 @@ da:
       other: statusser
     status_count_before: Som har skrevet
     terms: Vilkår for service
+    unavailable_content: Utilgængeligt indhold
     user_count_after:
       one: bruger
       other: brugere
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 83f0c655f..77c66fb71 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -5,7 +5,7 @@ de:
     about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!).
     about_this: Über diesen Server
     active_count_after: aktiv
-    active_footnote: Monatlich Aktive Nutzer_innen (MAU)
+    active_footnote: Monatlich Aktive User (MAU)
     administered_by: 'Betrieben von:'
     api: API
     apps: Mobile Apps
@@ -15,10 +15,9 @@ de:
     contact: Kontakt
     contact_missing: Nicht angegeben
     contact_unavailable: Nicht verfügbar
-    discover_users: Benutzer_innen entdecken
+    discover_users: Benutzer entdecken
     documentation: Dokumentation
-    federation_hint_html: Mit einem Konto auf %{instance} wirst du in der Lage sein Nutzer_innen auf beliebigen Mastodon-Servern und darüber hinaus zu folgen.
-    generic_description: "%{domain} ist ein Server im Fediversum"
+    federation_hint_html: Mit einem Account auf %{instance} wirst du in der Lage sein Nutzern auf irgendeinem Mastodon-Server und darüber hinaus zu folgen.
     get_apps: Versuche eine mobile App
     hosted_on: Mastodon, gehostet auf %{domain}
     instance_actor_flash: |
@@ -54,8 +53,8 @@ de:
     featured_tags_hint: Du kannst spezifische Hashtags, die hier angezeigt werden, angeben.
     follow: Folgen
     followers:
-      one: Folger_innen
-      other: Folger_innen
+      one: Folgender
+      other: Folgende
     following: Folgt
     joined: Beigetreten am %{date}
     last_active: zuletzt aktiv
@@ -119,8 +118,8 @@ de:
       enable: Freischalten
       enabled: Freigegeben
       feed_url: Feed-URL
-      followers: Folger_innen
-      followers_url: URL der Folger_innen
+      followers: Folgende
+      followers_url: URL des Folgenden
       follows: Folgt
       header: Titelbild
       inbox_url: Posteingangs-URL
@@ -283,11 +282,11 @@ de:
       software: Software
       space: Speicherverbrauch
       title: Übersicht
-      total_users: Benutzer_innen insgesamt
+      total_users: Benutzer insgesamt
       trends: Trends
       week_interactions: Interaktionen diese Woche
       week_users_active: Aktiv diese Woche
-      week_users_new: Benutzer_innen diese Woche
+      week_users_new: Benutzer diese Woche
       whitelist_mode: Whitelist-Modus
     domain_allows:
       add_new: Whitelist-Domain
@@ -346,7 +345,7 @@ de:
       title: E-Mail-Domain-Blockade
     followers:
       back_to_account: Zurück zum Konto
-      title: "%{acct}'s Folger_innen"
+      title: "%{acct}'s Follower"
     instances:
       by_domain: Domain
       delivery_available: Zustellung funktioniert
@@ -507,6 +506,9 @@ de:
         desc_html: Auf der Einstiegsseite die öffentliche Zeitleiste anzeigen
         title: Zeitleisten-Vorschau
       title: Server-Einstellungen
+      trendable_by_default:
+        desc_html: Betroffene Hashtags, die bisher nicht gesperrt wurden
+        title: Hashtags ohne vorherige Überprüfung erlauben zu trenden
       trends:
         desc_html: Zuvor überprüfte Hashtags öffentlich anzeigen, die derzeit angesagt sind
         title: Trendende Hashtags
@@ -564,7 +566,7 @@ de:
     add_new: Alias erstellen
     created_msg: Ein neuer Alias wurde erfolgreich erstellt. Du kannst nun den Wechsel vom alten Konto starten.
     deleted_msg: Der Alias wurde erfolgreich entfernt. Aus diesem Konto zu diesem zu verschieben ist nicht mehr möglich.
-    hint_html: Wenn du von einem Konto zu einem anderem Konto wechseln möchtest, dann kannst du einen Alias erstellen, welcher benötigt wird bevor du deine Folger_innen vom altem Account zu diesen migrierst. Die Aktion alleine ist <strong>harmlos und wi­der­ruf­lich</strong>. <strong>Die Kontenmigration wird vom altem Konto aus eingeleitet</strong>.
+    hint_html: Wenn du von einem Konto zu einem anderem Konto wechseln möchtest, dann kannst du einen Alias erstellen, welcher benötigt wird bevor du deine Folgenden vom altem Account zu diesen migrierst. Die Aktion alleine ist <strong>harmlos und wi­der­ruf­lich</strong>. <strong>Die Kontenmigration wird vom altem Konto aus eingeleitet</strong>.
     remove: Alle Aliase aufheben
   appearance:
     advanced_web_interface: Fortgeschrittene Benutzeroberfläche
@@ -676,7 +678,7 @@ de:
       username_unavailable: Dein Benutzername bleibt nicht verfügbar
   directories:
     directory: Profilverzeichnis
-    explanation: Entdecke Benutzer_innen basierend auf deren Interessen
+    explanation: Entdecke Benutzer basierend auf deren Interessen
     explore_mastodon: Entdecke %{title}
   domain_validator:
     invalid_domain: ist kein gültiger Domain-Name
@@ -816,7 +818,7 @@ de:
   migrations:
     acct: benutzername@domain des neuen Kontos
     cancel: Umleitung abbrechen
-    cancel_explanation: Das Abbrechen der Umleitung wird dein aktuelles Konto erneut aktivieren, aber keine Folger_innen, die auf dieses Konto verschoben wurden, zurückholen.
+    cancel_explanation: Das Abbrechen der Umleitung wird dein aktuelles Konto erneut aktivieren, aber keine Folgenden, die auf dieses Konto verschoben wurden, zurückholen.
     cancelled_msg: Die Umleitung wurde erfolgreich abgebrochen.
     errors:
       already_moved: ist das gleiche Konto, zu dem du bereits umgezogen bist
@@ -824,14 +826,14 @@ de:
       move_to_self: darf nicht das aktuelles Konto sein
       not_found: kann nicht gefunden werden
       on_cooldown: Die Abklingzeit läuft gerade
-    followers_count: Folger_innen zur Zeit des Verschiebens
+    followers_count: Folgende zur Zeit des Verschiebens
     incoming_migrations: Ziehe von einem anderen Konto um
     incoming_migrations_html: Um von einem anderen Konto zu diesem zu wechseln, musst du zuerst <a href="%{path}">einen Kontoalias</a> erstellen.
-    moved_msg: Dein Konto wird jetzt zu %{acct} weitergeleitet und deine Folger_innen werden verschoben.
+    moved_msg: Dein Konto wird jetzt zu %{acct} weitergeleitet und deine Folgende werden verschoben.
     not_redirecting: Dein Konto wird derzeit nicht auf ein anderes Konto weitergeleitet.
     on_cooldown: Du hast dein Konto vor kurzem migriert. Diese Funktion wird in %{count} Tagen wieder verfügbar sein.
     past_migrations: Vorherige Migrationen
-    proceed_with_move: Folger_innen verschieben
+    proceed_with_move: Folgende verschieben
     redirecting_to: Dein Konto wird zu %{acct} weitergeleitet.
     set_redirect: Umleitung einrichten
     warning:
@@ -839,7 +841,7 @@ de:
       before: 'Bevor du fortfährst, lese bitte diese Hinweise sorgfältig durch:'
       cooldown: Nach dem Migrieren wird es eine Abklingzeit geben, in der du das Konto nicht noch einmal migrieren kannst
       disabled_account: Dein aktuelles Konto wird nachher nicht vollständig nutzbar sein. Du hast jedoch Zugriff auf den Datenexport sowie die Reaktivierung.
-      followers: Diese Aktion wird alle Folger_innen vom aktuellen Konto auf das neue Konto verschieben
+      followers: Diese Aktion wird alle Folgende vom aktuellen Konto auf das neue Konto verschieben
       only_redirect_html: Alternativ kannst du <a href="%{path}">nur eine Weiterleitung auf dein Profil</a> erstellen.
       other_data: Keine anderen Daten werden automatisch verschoben
       redirect: Das Profil deines aktuellen Kontos wird mit einer Weiterleitungsnachricht versehen und von Suchanfragen ausgeschlossen
@@ -1003,10 +1005,10 @@ de:
     notifications: Benachrichtigungen
     preferences: Einstellungen
     profile: Profil
-    relationships: Folger_innen und Gefolgte
+    relationships: Folgende und Gefolgte
     two_factor_authentication: Zwei-Faktor-Auth
   spam_check:
-    spam_detected_and_silenced: Dies ist ein automatisierter Bericht. Spam wurde erkannt und der Absender wurde automatisch stummgeschaltet. Wenn dies ein Fehler ist, schalte dieses Konto bitte wieder frei.
+    spam_detected: Dies ist ein automatisierter Bericht. Es wurde Spam erkannt.
   statuses:
     attached:
       description: 'Angehängt: %{attached}'
@@ -1041,8 +1043,8 @@ de:
     sign_in_to_participate: Melde dich an, um an der Konversation teilzuhaben
     title: '%{name}: "%{quote}"'
     visibilities:
-      private: Nur für Folger_innen
-      private_long: Nur für Folger_innen sichtbar
+      private: Nur Folgende
+      private_long: Nur für Folgende sichtbar
       public: Öffentlich
       public_long: Für alle sichtbar
       unlisted: Nicht gelistet
@@ -1059,9 +1061,9 @@ de:
       <h3 id="collect">Welche Informationen sammeln wir?</h3>
 
       <ul>
-      <li><em>Grundlegende Kontoinformationen</em>: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzer:innen-Namen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzer:innen-Name, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.</li>
+      <li><em>Grundlegende Kontoinformationen</em>: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzernamen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzername, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.</li>
       <li><em>Beiträge, Folge- und andere öffentliche Informationen</em>: Die Liste der Leute, denen du folgst, wird öffentlich gezeigt, das gleiche gilt für deine Folgenden (Follower). Sobald du eine Nachricht übermittelst, wird das Datum und die Uhrzeit gemeinsam mit der Information, welche Anwendung du dafür verwendet hast, gespeichert. Nachricht können Medienanhänge enthalten, etwa Bilder und Videos. Öffentliche und ungelistete Beiträge sind öffentlich verfügbar. Sobald du einen Beitrag auf deinem Profil anpinnst, sind dies auch öffentlich verfügbare Informationen. Deine Beiträge werden an deine Folgenden ausgeliefert, was in manchen Fällen bedeutet, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Sobald du Beiträge löschst, wird dies ebenso an deine Follower ausgeliefert. Die Handlungen des Teilens und Favorisieren eines anderen Beitrages ist immer öffentlich.</li>
-      <li><em>Direkte und "Nur Folgende"-Beiträge</em>: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer:innen, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer:innen. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. <em>Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten</em> und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. <em>Teile nicht irgendwelche gefährlichen Informationen über Mastodon.</em></li>
+      <li><em>Direkte und "Nur Folgende"-Beiträge</em>: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. <em>Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten</em> und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. <em>Teile nicht irgendwelche gefährlichen Informationen über Mastodon.</em></li>
       <li><em>Internet Protocol-Adressen (IP-Adressen) und andere Metadaten</em>: Sobald du dich anmeldest, erfassen wir sowohl die IP-Adresse, von der aus du dich anmeldest, als auch den Namen deine Browseranwendung. Alle angemeldeten Sitzungen (Sessions) sind für deine Überprüfung und Widerruf in den Einstellungen verfügbar. Die letzte verwendete IP-Adresse wird bis zu 12 Monate lang gespeichert. Wir könnten auch Serverprotokoll behalten, welche die IP-Adresse von jeder Anfrage an unseren Server enthalten.</li>
       </ul>
 
@@ -1091,7 +1093,7 @@ de:
 
       <ul>
       <li>Serverprotokolle, die IP-Adressen von allen deinen Anfragen an diesen Server, falls solche Protokolle behalten werden, für nicht mehr als 90 Tage behalten.</li>
-      <li>registrierten Benutzer:innen zugeordnete IP-Adressen nicht länger als 12 Monate behalten.</li>
+      <li>registrierten Benutzer zugeordnete IP-Adressen nicht länger als 12 Monate behalten.</li>
       </ul>
 
       <p>Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.</p>
diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml
index 90f026e10..4662cd030 100644
--- a/config/locales/devise.ar.yml
+++ b/config/locales/devise.ar.yml
@@ -46,8 +46,10 @@ ar:
         subject: 'ماستدون: تعليمات استعادة كلمة المرور'
         title: إعادة تعيين كلمة السر
       two_factor_disabled:
+        subject: 'ماستدون: نظام المصادقة بخطوتين مُعطّل'
         title: إنّ 2FA معطّل
       two_factor_enabled:
+        subject: 'ماستدون: تم تفعيل نظام المصادقة بخطوتين'
         title: إنّ 2FA نشِط
       unlock_instructions:
         subject: 'ماستدون: تعليمات فك القفل'
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index d1b9fc09c..25be731d0 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -8,7 +8,7 @@ cs:
     failure:
       already_authenticated: Již jste přihlášen/a.
       inactive: Váš účet ještě není aktivován.
-      invalid: Neplatný %{authentication_keys} nebo heslo.
+      invalid: Neplatné %{authentication_keys} nebo heslo.
       last_attempt: Máte ještě jeden pokus, než bude váš účet uzamčen.
       locked: Váš účet je uzamčen.
       not_found_in_database: Neplatné %{authentication_keys} nebo heslo.
@@ -21,7 +21,7 @@ cs:
         action: Potvrdit e-mailovou adresu
         action_with_app: Potvrdit a navrátit se do %{app}
         explanation: S touto e-mailovou adresou jste si vytvořil/a účet na %{host}. K jeho aktivaci vám zbývá jedno kliknutí. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail.
-        explanation_when_pending: S touto e-mailovou adresou jste si vyžádal/a pozvánku na %{host}. Jakmile svou e-mailovou adresu potvrdíte, posoudíme váš poadavek. Do té doby se nemůžete přihlásit. Pokud bude váš požadavek zamítnut, budou vaše data odstraněna, takže od vás nebude vyžadována žádná další akce. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail.
+        explanation_when_pending: S touto e-mailovou adresou jste si vyžádal/a pozvánku na %{host}. Jakmile svou e-mailovou adresu potvrdíte, posoudíme váš poadavek. Můžete se přihlásit, změnit si své detaily či smazat svůj účet, ale do schválení účtu nemáte přístup ke většině funkcí. Pokud bude váš požadavek zamítnut, budou vaše data odstraněna, takže od vás nebude vyžadována žádná další akce. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail.
         extra_html: Prosím podívejte se také na <a href="%{terms_path}">pravidla tohoto serveru</a> a <a href="%{policy_path}">naše podmínky používání</a>.
         subject: 'Mastodon: Potvrzovací instrukce pro %{instance}'
         title: Potvrďte e-mailovou adresu
diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml
index f064cbe83..5dc7658c2 100644
--- a/config/locales/devise.el.yml
+++ b/config/locales/devise.el.yml
@@ -51,7 +51,13 @@ el:
         subject: 'Mastodon: Απενεργοποιήθηκε ο έλεγχος ταυτότητας δύο παραγόντων'
         title: Απενεργοποιημένο 2FA
       two_factor_enabled:
+        explanation: Έχει ενεργοποιηθεί η πιστοποίηση 2 παραγόντων για το λογαριασμό σου (2FA). Για να συνδεθείς θα απαιτηθεί πιστοποιημένο τεκμήριο από κάποια ζευγαρωμένη εφαρμογή.
+        subject: 'Mastodon: Ενεργοποιήθηκε η πιστοποίηση 2 παραγόντων (2FA)'
         title: Επαλήθευση δύο βημάτων ενεργή
+      two_factor_recovery_codes_changed:
+        explanation: Οι προηγούμενοι κωδικοί ανάκτησης ακυρώθηκαν και δημιουργήθηκαν νέοι.
+        subject: 'Mastodon: Δημιουργήθηκαν νέοι κωδικοί ανάκτησης'
+        title: Οι κωδικοί ανάκτησης 2FA άλλαξαν
       unlock_instructions:
         subject: 'Mastodon: Οδηγίες ξεκλειδώματος'
     omniauth_callbacks:
diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml
index d7b7b2d6c..7c67ac8fa 100644
--- a/config/locales/devise.eo.yml
+++ b/config/locales/devise.eo.yml
@@ -46,6 +46,10 @@ eo:
         extra: Se vi ne petis ĉi tion, bonvolu ignori ĉi tiun retmesaĝon. Via pasvorto ne ŝanĝiĝos se vi ne aliras la supran ligilon kaj kreas novan.
         subject: 'Mastodon: Instrukcioj por ŝanĝi pasvorton'
         title: Pasvorto restarigita
+      two_factor_disabled:
+        title: la du-etapa aŭtentigo estas malŝaltita
+      two_factor_enabled:
+        title: la du-etapa aŭtentigo estas ŝaltita
       unlock_instructions:
         subject: 'Mastodon: Instrukcioj por malŝlosi'
     omniauth_callbacks:
diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml
index 515d5c1ed..80d438092 100644
--- a/config/locales/devise.es.yml
+++ b/config/locales/devise.es.yml
@@ -1 +1,98 @@
-es-AR:
+---
+es:
+  devise:
+    confirmations:
+      confirmed: Su direccion de email ha sido confirmada con exito.
+      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
+      send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
+    failure:
+      already_authenticated: Usted ya está registrado.
+      inactive: Su cuenta todavía no está activa.
+      invalid: Inválido %{authentication_keys} o contraseña.
+      last_attempt: Tiene un intento más antes de que su cuenta sea bloqueada.
+      locked: Su cuenta está bloqueada.
+      not_found_in_database: Inválido %{authentication_keys} o contraseña.
+      pending: Su cuenta aun se encuentra bajo revisión.
+      timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar.
+      unauthenticated: Necesita iniciar sesión o registrarse antes de continuar.
+      unconfirmed: Tiene que confirmar su dirección de correo electrónico antes de continuar.
+    mailer:
+      confirmation_instructions:
+        action: Verificar dirección de correo electrónico
+        action_with_app: Confirmar y regresar a %{app}
+        explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estas a un clic de activarla. Si no fue usted, por favor ignore este correo electrónico.
+        explanation_when_pending: Usted ha solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirme su dirección de correo electrónico, revisaremos su aplicación. No puede iniciar sesión hasta que su aplicación sea revisada. Si su solicitud está rechazada, sus datos serán eliminados, así que no será necesaria ninguna acción adicional por ti. Si no fuera usted, por favor ignore este correo electrónico.
+        extra_html: Por favor revise <a href="%{terms_path}">las reglas de la instancia</a> y <a href="%{policy_path}">nuestros términos de servicio</a>.
+        subject: 'Mastodon: Instrucciones de confirmación para %{instance}'
+        title: Verificar dirección de correo electrónico
+      email_changed:
+        explanation: 'El correo electrónico para su cuenta esta siendo cambiada a:'
+        extra: Si usted no ha cambiado su correo electrónico, es probable que alguien haya conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte al administrador de la instancia si usted no puede iniciar sesión.
+        subject: 'Mastodon: Correo electrónico cambiado'
+        title: Nueva dirección de correo electrónico
+      password_change:
+        explanation: La contraseña de su cuenta a sido cambiada.
+        extra: Si usted no a cambiado su contraseña. es probable que alguien a conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte a el administrador de la instancia si usted esta bloqueado de su cuenta.
+        subject: 'Mastodon: Contraseña cambiada'
+        title: Contraseña cambiada
+      reconfirmation_instructions:
+        explanation: Confirme la nueva dirección para cambiar su coreo electrónico.
+        extra: Si no iniciaste este cambio, por favor ignora este correo. Esta dirección de correo para la cuenta de Mastodon no cambiará hasta que accedas al vinculo arriba.
+        subject: 'Mastodon: Confirme correo electrónico para %{instance}'
+        title: Verifique dirección de correo electrónico
+      reset_password_instructions:
+        action: Cambiar contraseña
+        explanation: Solicitaste una nueva contraseña para tu cuenta.
+        extra: Si no solicitaste esto, por favor ignora este correo. Tu contraseña no cambiará hasta que tu accedas al vinculo arriba y crees una nueva.
+        subject: 'Mastodon: Instrucciones para reiniciar contraseña'
+        title: Reiniciar contraseña
+      two_factor_disabled:
+        explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña.
+        subject: 'Mastodon: La autenticación de dos factores está deshabilitada'
+        title: 2FA desactivada
+      two_factor_enabled:
+        explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar.
+        subject: 'Mastodon: La autenticación de dos factores está habilitada'
+        title: 2FA activada
+      two_factor_recovery_codes_changed:
+        explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos.
+        subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados'
+        title: Códigos de recuperación 2FA cambiados
+      unlock_instructions:
+        subject: 'Mastodon: Instrucciones para desbloquear'
+    omniauth_callbacks:
+      failure: No podemos autentificarle desde %{kind} debido a "%{reason}".
+      success: Autentificado con éxito desde la cuenta %{kind} .
+    passwords:
+      no_token: No puede acceder a esta página sin provenir desde el correo de reinicio de contraseña. Si viene desde el correo de reinicio de contraseña, por favor asegúrese que está utilizando la dirección completa proporcionada.
+      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo reiniciar su contraseña en pocos minutos.
+      send_paranoid_instructions: Si su correo electrónico existe en nuestra base de datos, recibirá un enlace de recuperación de contraseña en su dirección de correo en pocos minutos.
+      updated: Su contraseña ha sido cambiada con éxito. Ahora ya está registrado.
+      updated_not_active: Su contraseña ha sido cambiada con éxito.
+    registrations:
+      destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo."
+      signed_up: "¡Bienvenido! Se ha registrado con éxito."
+      signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía.
+      signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada.
+      signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada.
+      signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta.
+      update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo.
+      updated: su cuenta ha sido actualizada con éxito.
+    sessions:
+      already_signed_out: Cerró sesión con éxito.
+      signed_in: Se registró con éxito.
+      signed_out: Cerró sesión con éxito.
+    unlocks:
+      send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo desbloquear su cuenta en pocos minutos.
+      send_paranoid_instructions: Si su cuenta existe, recibirá un correo electrónico con instrucciones sobre cómo desbloquearla en pocos minutos.
+      unlocked: Su cuenta ha sido desbloqueada con éxito. Por favor inicie sesión para continuar.
+  errors:
+    messages:
+      already_confirmed: ya fue confirmado, por favor intente iniciar sesión
+      confirmation_period_expired: necesita ser confirmado dentro de %{period}, por favor pida una nueva
+      expired: ha expirado, por favor pida una nueva
+      not_found: no encontrado
+      not_locked: no fue bloqueada
+      not_saved:
+        one: '1 error prohibió este %{resource} de ser guardado:'
+        other: "%{count} errores prohibieron este %{resource} de ser guardado:"
diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml
index 3526f2ab5..2160f2243 100644
--- a/config/locales/devise.eu.yml
+++ b/config/locales/devise.eu.yml
@@ -46,6 +46,10 @@ eu:
         extra: Ez baduzu hau eskatu, mesedez ezikusi e-mail hau. Zure pasahitza ez da aldatuko goiko estekara sartu eta berri bat sortzen ez baduzu.
         subject: 'Mastodon: Pasahitza berrezartzeko argibideak'
         title: Pasahitza berrezartzea
+      two_factor_disabled:
+        title: 2FA desgaituta
+      two_factor_enabled:
+        title: 2FA gaituta
       unlock_instructions:
         subject: 'Mastodon: Desblokeatzeko argibideak'
     omniauth_callbacks:
diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml
index dc89b478b..37ebdaa07 100644
--- a/config/locales/devise.fr.yml
+++ b/config/locales/devise.fr.yml
@@ -9,7 +9,7 @@ fr:
       already_authenticated: Vous êtes déjà connecté⋅e.
       inactive: Votre compte n’est pas encore activé.
       invalid: "%{authentication_keys} ou mot de passe invalide."
-      last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé.
+      last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé.
       locked: Votre compte est verrouillé.
       not_found_in_database: "%{authentication_keys} ou mot de passe invalide."
       pending: Votre compte est toujours en cours d'approbation.
diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml
index ffdbd1b60..5f32b2381 100644
--- a/config/locales/devise.ja.yml
+++ b/config/locales/devise.ja.yml
@@ -21,7 +21,7 @@ ja:
         action: メールアドレスの確認
         action_with_app: 確認し %{app} に戻る
         explanation: このメールアドレスで%{host}にアカウントを作成しました。有効にするまであと一歩です。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。
-        explanation_when_pending: このメールアドレスで%{host}への登録を申請しました。あなたがメールアドレスを確認したら、サーバー管理者が申請を審査します。それまでログインできません。申請が却下された場合、あなたのデータは削除されますので以降の操作は必要ありません。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。
+        explanation_when_pending: このメールアドレスで %{host} への登録を申請しました。あなたがメールアドレスを確認したら、サーバー管理者が申請を審査します。ログインして一部設定を変更したりアカウントを削除できますが、ほとんどの機能は申請が承認されるまで利用できません。申請が却下された場合、あなたのデータは削除されますので以降の操作は必要ありません。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。
         extra_html: また <a href="%{terms_path}">サーバーのルール</a> と <a href="%{policy_path}">利用規約</a> もお読みください。
         subject: 'Mastodon: メールアドレスの確認 %{instance}'
         title: メールアドレスの確認
diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml
index dd18229df..383c51513 100644
--- a/config/locales/devise.th.yml
+++ b/config/locales/devise.th.yml
@@ -21,6 +21,10 @@ th:
         title: เปลี่ยนรหัสผ่านแล้ว
       reset_password_instructions:
         action: เปลี่ยนรหัสผ่าน
+      two_factor_disabled:
+        title: ปิดใช้งาน 2FA แล้ว
+      two_factor_enabled:
+        title: เปิดใช้งาน 2FA แล้ว
     passwords:
       send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.
       send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.
diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml
index c44bda5ea..e1eb2d1ae 100644
--- a/config/locales/devise.uk.yml
+++ b/config/locales/devise.uk.yml
@@ -45,6 +45,10 @@ uk:
         extra: Якщо ви не запитували зміну пароля, ігноруйте цей лист. Ваш пароль не буде змінено, допоки ви не перейдете за посиланням та не створите новий.
         subject: 'Mastodon: Інструкції для скидання паролю'
         title: Скидання пароля
+      two_factor_disabled:
+        title: Двофакторна автентифікація вимкнена
+      two_factor_enabled:
+        title: Двофакторна автентифікація увімкнена
       unlock_instructions:
         subject: 'Mastodon: Інструкції для розблокування'
     omniauth_callbacks:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 7756dc0e0..caaab41f8 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -18,7 +18,6 @@ el:
     discover_users: Ανακάλυψε χρήστες
     documentation: Τεκμηρίωση
     federation_hint_html: Με ένα λογαριασμό στο %{instance} θα μπορείς να ακολουθείς ανθρώπους σε οποιοδήποτε κόμβο στο Mastodon αλλά και αλλού.
-    generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο"
     get_apps: Δοκίμασε μια εφαρμογή κινητού
     hosted_on: Το Mastodon φιλοξενείται στο %{domain}
     instance_actor_flash: |
@@ -39,6 +38,10 @@ el:
     unavailable_content_description:
       domain: Διακομιστής
       reason: 'Αιτία:'
+      rejecting_media: 'Τα αρχεία πολυμέσων αυτών των διακομιστών δεν θα επεξεργάζονται, δεν θα αποθηκεύονται και δεν θα εμφανίζεται η προεπισκόπησή τους, απαιτώντας χειροκίνητη επιλογή μέχρι το αρχικό αρχείο:'
+      silenced: 'Οι δημοσιεύσεις αυτών των διακομιστών θα είναι κρυμμένες από τις δημόσιες ροές και συζητήσεις, ενώ δεν θα δημιουργούνται ειδοποιήσεις για τις ενέργειες των χρηστών τους, εκτός κι αν τους ακολουθείς:'
+      suspended: 'Κανένα δεδομένο δε θα επεξεργάζεται, δε θα αποθηκεύεται και δε θα ανταλλάσσεται για αυτούς τους διακομιστές, καθιστώντας οποιαδήποτε αλληλεπίδραση ή επικοινωνία με χρήστες από αυτούς τους διακομιστές αδύνατη:'
+    unavailable_content_html: Το Mastodon γενικά επιτρέπει να δεις περιεχόμενο και να αλληλεπιδράσεις με χρήστες από οποιονδήποτε διακομιστή στο fediverse. Εδώ είναι οι εξαιρέσεις που ισχύουν σε αυτόν τον συγκεκριμένο διακομιστή.
     user_count_after:
       one: χρήστης
       other: χρήστες
@@ -236,12 +239,14 @@ el:
       delete: Διαγραφή
       destroyed_msg: Επιτυχής καταστροφή του emojo!
       disable: Απενεργοποίηση
+      disabled: Απενεργοποιημένα
       disabled_msg: Επιτυχής απενεργοποίηση αυτού του emoji
       emoji: Emoji
       enable: Ενεργοποίηση
       enabled: Ενεργοποιημένα
       enabled_msg: Επιτυχής ενεργοποίηση αυτού του emoji
       image_hint: PNG έως 50KB
+      list: Εμφάνιση
       listed: Αναφερθέντα
       new:
         title: Προσθήκη νέου προσαρμοσμένου emoji
@@ -250,6 +255,7 @@ el:
       shortcode_hint: Τουλάχιστον 2 χαρακτήρες, μόνο αλφαριθμητικοί και κάτω παύλες
       title: Προσαρμοσμένα emoji
       uncategorized: Χωρίς κατηγορία
+      unlist: Απόκρυψη
       unlisted: Μη καταχωρημένα
       update_failed_msg: Αδυναμία ενημέρωσης του emoji
       updated_msg: Επιτυχής ενημέρωση του emoji!
@@ -381,6 +387,7 @@ el:
       pending: Περιμένοντας την έγκριση του ανταποκριτή
       save_and_enable: Αποθήκευση και ενεργοποίηση
       setup: Όρισε μια σύνδεση ανταπόκρισης
+      signatures_not_enabled: Οι ανταποκριτές δεν θα λειτουργούν σωστά όσο είναι ενεργοποιημένες οι επιλογές ασφαλούς λειτουργίας ή επιτρεπόμενων συνδέσεων
       status: Κατάσταση
       title: Ανταποκριτές
     report_notes:
@@ -499,6 +506,9 @@ el:
         desc_html: Εμφάνισε τη δημόσια ροή στην αρχική σελίδα
         title: Προεπισκόπιση ροής
       title: Ρυθμίσεις ιστότοπου
+      trendable_by_default:
+        desc_html: Επηρεάζει τις ταμπέλες που δεν είχαν απαγορευτεί νωρίτερα
+        title: Επέτρεψε στις ταμπέλες να εμφανιστούν στις τάσεις χωρίς προηγούμενη έγκριση
       trends:
         desc_html: Δημόσια εμφάνιση ταμπελών που έχουν ήδη εγκριθεί και είναι δημοφιλείς
         title: Δημοφιλείς ταμπέλες
@@ -552,6 +562,11 @@ el:
     new_trending_tag:
       body: 'Η ταμπέλα #%{name} είναι δημοφιλής σήμερα, αλλά δεν έχει εγκριθεί μέχρι τώρα. Δεν θα εμφανίζεται δημοσίως μέχρι να δοθεί έγκρισή, αλλιώς αποθηκεύστε τη φόρμα ως έχει για να μην την δείτε ξανά.'
       subject: Νέα ταμπέλα προς έγκριση στο %{instance} (#%{name})
+  aliases:
+    add_new: Δημιουργία ψευδώνυμου
+    created_msg: Δημιουργήθηκε νέο ψευδώνυμο. Τώρα μπορείς να ξεκινήσεις τη μεταφορά από τον παλιό λογαριασμό.
+    deleted_msg: Αφαιρέθηκε το ψευδώνυμο. Η μεταφορά από εκείνον τον λογαριασμό σε αυτόν εδώ δε θα είναι πλέον δυνατή.
+    remove: Αφαίρεση ψευδώνυμου
   appearance:
     advanced_web_interface: Προηγμένη λειτουργία χρήσης
     advanced_web_interface_hint: 'Αν θέλεις να χρησιμοποιήσεις ολόκληρο το πλάτος της οθόνης σου, η προηγμένη λειτουργία χρήσης σου επιτρέπει να ορίσεις πολλαπλές κολώνες ώστε να βλέπεις ταυτόχρονα όση πληροφορία θέλεις: Την αρχική ροή, τις ειδοποιήσεις, την ομοσπονδιακή ροή και όσες λίστες και ταμπέλες θέλεις.'
@@ -801,8 +816,24 @@ el:
     acct: ΌνομαΧρήστη@Τομέας του νέου λογαριασμού
     cancel: Ακύρωση ανακατεύθυνσης
     errors:
+      move_to_self: δεν επιτρέπεται να είναι ο τρέχων λογαριασμός
       not_found: δεν βρέθηκε
+      on_cooldown: Είσαι σε περίοδο προσαρμογής
+    followers_count: Ακόλουθοι τη στιγμή της μεταφοράς
+    incoming_migrations: Μεταφορά από διαφορετικό λογαριασμό
+    past_migrations: Προηγούμενες μετακινήσεις
     proceed_with_move: Μετακίνηση ακολούθων
+    redirecting_to: Ο λογαριασμός σου ανακατευθύνει στο %{acct}.
+    set_redirect: Όρισε ανακατεύθυνση
+    warning:
+      backreference_required: Θα πρέπει πρώτα να ρυθμιστεί μια αναφορά από τον νέο λογαριασμό προς αυτόν
+      before: 'Πριν συνεχίσεις, παρακαλούμε διάβασε αυτές τις σημειώσεις προσεκτικά:'
+      cooldown: Άπαξ και μεταφερθείς υπάρχει μια περίοδος προσαρμογής κατά την οποία δε θα μπορείς να μετακινηθείς ξανά
+      disabled_account: Ο τρέχων λογαριασμός σου δε θα είναι πλήρως ενεργός μετά. Πάντως θα έχεις πρόσβαση στην εξαγωγή δεδομένων καθώς και στην επανενεργοποίηση.
+      followers: Αυτή η ενέργεια θα μεταφέρει όλους τους ακόλουθούς σου από τον τρέχοντα λογαριασμός στον νέο λογαριασμό
+      only_redirect_html: Εναλλακτικά, μπορείς <a href="%{path}">απλά να προσθέσεις μια ανακατατεύθυνση στο προφίλ σου</a>.
+      other_data: Κανένα άλλο δεδομένο δε θα μεταφερθεί αυτόματα
+      redirect: Το προφίλ του τρέχοντος λογαριασμό σου θα ενημερωθεί με μια σημείωση ανακατεύθυνσης και θα εξαιρεθεί από τα αποτελέσματα αναζητήσεων
   moderation:
     title: Συντονισμός
   notification_mailer:
@@ -947,6 +978,7 @@ el:
   settings:
     account: Λογαριασμός
     account_settings: Ρυθμίσεις λογαριασμού
+    aliases: Ψευδώνυμα λογαριασμών
     appearance: Εμφάνιση
     authorized_apps: Εγκεκριμένες εφαρμογές
     back: Πίσω στο Mastodon
@@ -964,8 +996,6 @@ el:
     profile: Προφίλ
     relationships: Ακολουθεί και ακολουθείται
     two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA)
-  spam_check:
-    spam_detected_and_silenced: 'Αυτόματο μήνυμα: Ανιχνεύθηκε ανεπιθύμητο περιεχόμενο (σπαμ) και ο αποστολέας αποσιωπήθηκε αυτόματα. Αν έγινε λάθος, παρακαλώ διακόψτε την αποσιώπηση του λογαριασμού.'
   statuses:
     attached:
       description: 'Συνημμένα: %{attached}'
@@ -989,6 +1019,9 @@ el:
       private: Τα μη δημόσια τουτ δεν καρφιτσώνονται
       reblog: Οι προωθήσεις δεν καρφιτσώνονται
     poll:
+      total_people:
+        one: "%{count} άτομο"
+        other: "%{count} άτομα"
       total_votes:
         one: "%{count} ψήφος"
         other: "%{count} ψήφοι"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2665d0b28..1ebeba2f2 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -2,7 +2,7 @@
 en:
   about:
     about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
-    about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail.
+    about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
     about_this: About
     active_count_after: active
     active_footnote: Monthly Active Users (MAU)
@@ -18,7 +18,6 @@ en:
     discover_users: Discover users
     documentation: Documentation
     federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
-    generic_description: "%{domain} is one server in the network"
     get_apps: Try a mobile app
     hosted_on: Mastodon hosted on %{domain}
     instance_actor_flash: |
@@ -486,8 +485,8 @@ en:
           open: Anyone can sign up
         title: Registrations mode
       show_known_fediverse_at_about_page:
-        desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show local toots.
-        title: Show known fediverse on timeline preview
+        desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content
+        title: Include federated content on unauthenticated public timeline page
       show_reblogs_in_public_timelines:
         desc_html: Show public boosts of public toots in local and public timelines.
         title: Show boosts in public timelines
@@ -511,15 +510,18 @@ en:
         title: Custom terms of service
       site_title: Server name
       spam_check_enabled:
-        desc_html: Mastodon can auto-silence and auto-report accounts that send repeated unsolicited messages. There may be false positives.
+        desc_html: Mastodon can auto-report accounts that send repeated unsolicited messages. There may be false positives.
         title: Anti-spam automation
       thumbnail:
         desc_html: Used for previews via OpenGraph and API. 1200x630px recommended
         title: Server thumbnail
       timeline_preview:
-        desc_html: Display public timeline on landing page
-        title: Timeline preview
+        desc_html: Display link to public timeline on landing page and allow API access to the public timeline without authentication
+        title: Allow unauthenticated access to public timeline
       title: Site settings
+      trendable_by_default:
+        desc_html: Affects hashtags that have not been previously disallowed
+        title: Allow hashtags to trend without prior review
       trends:
         desc_html: Publicly display previously reviewed hashtags that are currently trending
         title: Trending hashtags
@@ -1022,7 +1024,7 @@ en:
     relationships: Follows and followers
     two_factor_authentication: Two-factor Auth
   spam_check:
-    spam_detected_and_silenced: This is an automated report. Spam has been detected and the sender has been silenced automatically. If this is a mistake, please unsilence the account.
+    spam_detected: This is an automated report. Spam has been detected.
   statuses:
     attached:
       description: 'Attached: %{attached}'
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index f33c094fc..dd3ca1079 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -18,7 +18,6 @@ eo:
     discover_users: Malkovri uzantojn
     documentation: Dokumentado
     federation_hint_html: Per konto ĉe %{instance}, vi povos sekvi homojn ĉe iu ajn Mastodon nodo kaj preter.
-    generic_description: "%{domain} estas unu servilo en la reto"
     get_apps: Provu telefonan aplikaĵon
     hosted_on: "%{domain} estas nodo de Mastodon"
     instance_actor_flash: |
@@ -508,13 +507,16 @@ eo:
       directory: En la adresaro
       in_directory: "%{count} en adresaro"
       last_active: Lasta aktiva
+      most_popular: La plej populara
       most_recent: Plej lasta
       name: Kradvorto
       review: La statuso de la recenzo
       reviewed: Recenzis
       title: Kradvortoj
       trending_right_now: Nunaj furoraĵoj
+      unique_uses_today: "%{count} uzas hodiaŭ"
       unreviewed: Ne recenzis
+      updated_msg: Kradvorto agordoj ĝisdatigis sukcese
     title: Administrado
     warning_presets:
       add_new: Aldoni novan
@@ -533,6 +535,11 @@ eo:
     new_trending_tag:
       body: 'La kradvorto #%{name} furoras hodiaŭ, sed ankoraŭ ne estis kontrolita. Ĝi ne aperos publike sen via aprobo. Se vi ne volas tion, simple konservu la formularon tiel kiel.'
       subject: Nova kradvorto kontrolebla en %{instance} (#%{name})
+  aliases:
+    add_new: Krei alinomon
+    created_msg: Kreis novan alinomon sukcese. Vi povas inici la transloki el la malnovan konton nun.
+    deleted_msg: Forigis la alinomon sukcese. Transloki el tiu konto al ĉi tiu ne plu eblos.
+    remove: Malligili alinomon
   appearance:
     advanced_web_interface: Altnivela retpaĝa interfaco
     advanced_web_interface_hint: 'Se vi volas uzi la tutan larĝecon de via ekrano, la kompleksa reta interfaco permesas al vi agordi multajn malsamajn kolumnojn por vidi tiom da informoj kiom vi volas samtempe: Hejmo, sciigoj, fratara tempolinio, kaj ajna kvanto de listoj kaj kradvortoj.'
@@ -559,9 +566,11 @@ eo:
     apply_for_account: Peti inviton
     change_password: Pasvorto
     checkbox_agreement_html: Mi samopinii al la <a href="%{rules_path}" target="_blank">Servo reguloj</a> kaj <a href="%{terms_path}" target="_blank">kondiĉo al servadon</a>
+    checkbox_agreement_without_rules_html: Mi konsenti la <a href="%{terms_path}" target="_blank">reguloj de servado</a>
     delete_account: Forigi konton
     delete_account_html: Se vi deziras forigi vian konton, vi povas <a href="%{path}">fari tion ĉi tie</a>. Vi bezonos konfirmi vian peton.
     description:
+      prefix_invited_by_user: "@%{name} invitigi vin aligiĝi ĉi tiu servilo de Mastodon!"
       prefix_sign_up: Registriĝi ĉe Mastodon hodiaŭ!
     didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi?
     forgot_password: Pasvorto forgesita?
@@ -617,6 +626,7 @@ eo:
       x_seconds: "%{count}s"
   deletes:
     confirm_password: Enmetu vian nunan pasvorton por konfirmi vian identecon
+    confirm_username: Enigi vian uzantnomon por konfirmi la procedo
     proceed: Forigi konton
     success_msg: Via konto estis sukcese forigita
   directories:
@@ -761,6 +771,7 @@ eo:
       too_many: Aldoni pli ol 4 dosierojn ne eblas
   migrations:
     acct: uzantnomo@domajno de la nova konto
+    proceed_with_move: Translokigi sekvantoj
   moderation:
     title: Kontrolado
   notification_mailer:
@@ -905,6 +916,7 @@ eo:
   settings:
     account: Konto
     account_settings: Agordoj de konto
+    aliases: Kontoj alinomoj
     appearance: Apero
     authorized_apps: Rajtigitaj aplikaĵoj
     back: Reveni al Mastodon
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index fe61b69c4..d70007d27 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -1,5 +1,387 @@
 ---
 es-AR:
+  about:
+    about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Si tenés una cuenta en cualquier parte del fediverso, podés interactuar con ellos.
+    about_mastodon_html: Mastodon es una red social basada en protocolos abiertos de la web y es software libre y de código abierto. Es descentralizada, como el correo electrónico.
+    about_this: Acerca de Mastodon
+    active_count_after: activo
+    active_footnote: Usuarios activos mensualmente (MAU)
+    administered_by: 'Administrado por:'
+    api: API
+    apps: Aplicaciones móviles
+    apps_platforms: Usá Mastodon desde iOS, Android y otras plataformas
+    browse_directory: Explorá el directorio de perfiles y filtrá por intereses
+    browse_public_posts: Explorá un flujo en tiempo real de toots públicos en Mastodon
+    contact: Contacto
+    contact_missing: No establecido
+    contact_unavailable: No disponible
+    discover_users: Descubrir usuarios
+    documentation: Documentación
+    federation_hint_html: Con una cuenta en %{instance} vas a poder seguir a gente de cualquier servidor de Mastodon y más allá.
+    get_apps: Probá una aplicación móvil
+    hosted_on: Mastodon alojado en %{domain}
+    instance_actor_flash: |
+      Esta cuenta es un actor virtual usado para representar al propio servidor y no a ningún usuario individual.
+      Se usa para fines federativos y no debe ser bloqueado a menos que quieras bloquear toda la instancia, en cuyo caso deberías usar un bloqueo de dominio.
+    learn_more: Aprendé más
+    privacy_policy: Política de privacidad
+    see_whats_happening: Esto es lo que está pasando ahora
+    server_stats: 'Estadísticas del servidor:'
+    source_code: Código fuente
+    status_count_after:
+      one: estado
+      other: estados
+    status_count_before: Que enviaron
+    tagline: Seguí a tus amigos y descubrí nueva gente
+    terms: Términos del servicio
+    unavailable_content: Contenido no disponible
+    unavailable_content_description:
+      domain: Servidor
+      reason: Razón
+      rejecting_media: 'Los archivos de medios de este servidor no van a ser procesados y no se mostrarán miniaturas, lo que requiere un clic manual hacia el archivo original:'
+      silenced: 'Los toots de estos servidores se ocultarán en las líneas temporales y conversaciones públicas, y no se generarán notificaciones de las interacciones de sus usuarios, a menos que los estés siguiendo:'
+      suspended: 'No se procesarán, almacenarán o intercambiarán datos de estos servidores, haciendo imposible cualquier interacción o comunicación con los usuarios de estos servidores:'
+    unavailable_content_html: Mastodon generalmente te permite ver contenido e interactuar con usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se hicieron en este servidor en particular.
+    user_count_after:
+      one: usuario
+      other: usuarios
+    user_count_before: Hogar de
+    what_is_mastodon: "¿Qué es Mastodon?"
+  accounts:
+    choices_html: 'Recomendados de %{name}:'
+    endorsements_hint: Podés recomendar a gente que seguís desde la interface web, y van a aparecerán acá.
+    featured_tags_hint: Pdés destacar etiquetas específicas que se mostrarán acá.
+    follow: Seguir
+    followers:
+      one: Seguidor
+      other: Seguidores
+    following: Siguiendo
+    joined: Se unió en %{date}
+    last_active: última vez activo
+    link_verified_on: La propiedad de este enlace fue verificada el %{date}
+    media: Medios
+    moved_html: "%{name} se mudó a %{new_profile_link}:"
+    network_hidden: Esta información no está disponible
+    never_active: Nunca
+    nothing_here: "¡No hay nada acá!"
+    people_followed_by: "%{name} sigue a estas personas"
+    people_who_follow: Estas personas siguen a %{name}
+    pin_errors:
+      following: Ya tenés que estar siguiendo a la persona que querés recomendar
+    posts:
+      one: Toot
+      other: Toots
+    posts_tab_heading: Toots
+    posts_with_replies: Toots con respuestas
+    reserved_username: El nombre de usuario está reservado
+    roles:
+      admin: Administrador
+      bot: Bot
+      moderator: Moderador
+    unavailable: Perfil no disponible
+    unfollow: Dejar de seguir
+  admin:
+    account_actions:
+      action: Ejecutar acción
+      title: Ejecutar acción de moderación en %{acct}
+    account_moderation_notes:
+      create: Dejar nota
+      created_msg: "¡Nota de moderación creada exitosamente!"
+      delete: Eliminar
+      destroyed_msg: "¡Nota de moderación destruída exitosamente!"
+    accounts:
+      approve: Aprobar
+      approve_all: Aprobar todas
+      are_you_sure: "¿Estás seguro?"
+      avatar: Avatar
+      by_domain: Dominio
+      change_email:
+        changed_msg: "¡Correo electrónico de cuenta cambiado exitosamente!"
+        current_email: Correo electrónico actual
+        label: Cambiar correo electrónico
+        new_email: Nuevo correo electrónico
+        submit: Cambiar correo electrónico
+        title: Cambiar correo electrónico para %{username}
+      confirm: Confirmar
+      confirmed: Confirmado
+      confirming: Confirmando
+      deleted: Eliminado
+      demote: Bajar de nivel
+      disable: Deshabilitar
+      disable_two_factor_authentication: Deshabilitar 2FA
+      disabled: Deshabilitada
+      display_name: Nombre para mostrar
+      domain: Dominio
+      edit: Editar
+      email: Correo electrónico
+      email_status: Estado del correo
+      enable: Habilitar
+      enabled: Habilitada
+      feed_url: Dirección de la fuente web
+      followers: Seguidores
+      followers_url: Dirección web de los seguidores
+      header: Cabecera
+      inbox_url: Dirección web de la bandeja de entrada
+      invited_by: Invitado por
+      ip: Dirección IP
+      joined: Se unió en
+      location:
+        all: Todas
+        local: Local
+        remote: Remota
+        title: Ubicación
+      login_status: Estado del inicio de sesión
+      media_attachments: Adjuntos
+      memorialize: Convertir en recordatorio
+      moderation:
+        active: Activa
+        all: Todas
+        pending: Pendiente
+        silenced: Silenciados
+        suspended: Suspendidos
+        title: Moderación
+      moderation_notes: Notas de moderación
+      most_recent_activity: Actividad más reciente
+      most_recent_ip: Direcciones IP más recientes
+      no_account_selected: No se cambió ninguna cuenta ya que ninguna fue seleccionada
+      no_limits_imposed: Sin límites impuestos
+      not_subscribed: No suscripto
+      outbox_url: Dirección web de la bandeja de salida
+      pending: Revisión pendiente
+      perform_full_suspension: Suspender
+      profile_url: Dirección web del perfil
+      promote: Promocionar
+      protocol: Protocolo
+      public: Pública
+      push_subscription_expires: La suscripción PuSH vence
+      redownload: Recargar perfil
+      reject: Rechazar
+      reject_all: Rechazar todas
+      remove_avatar: Quitar avatar
+      remove_header: Quitar cabecera
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado exitosamente!"
+      reset: Restablecer
+      reset_password: Cambiar contraseña
+      resubscribe: Resuscribir
+      role: Permisos
+      roles:
+        admin: Administrador
+        moderator: Moderador
+        staff: Equipo
+        user: Usuario
+      search: Buscar
+      shared_inbox_url: Dirección web de la bandeja de entrada compartida
+      show:
+        created_reports: Informes hechos
+        targeted_reports: Denunciado por otros
+      silence: Silenciar
+      silenced: Silenciadas
+      statuses: Estados
+      subscribe: Suscribirse
+      suspended: Suspendidas
+      title: Cuentas
+      unconfirmed_email: Correo electrónico sin confirmar
+      undo_silenced: Deshacer silenciado
+      undo_suspension: Deshacer suspensión
+      unsubscribe: Desuscribirse
+      username: Nombre de usuario
+      warn: Advertir
+      web: Web
+      whitelisted: Aprobadas
+    action_logs:
+      actions:
+        assigned_to_self_report: "%{name} se asignó la denuncia %{target} a sí"
+        change_email_user: "%{name} cambió la dirección de correo electrónico del usuario %{target}"
+        confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}"
+        create_account_warning: "%{name} envió una advertencia a %{target}"
+        create_custom_emoji: "%{name} subió nuevo emoji %{target}"
+        create_domain_block: "%{name} bloqueó el dominio %{target}"
+        create_email_domain_block: "%{name} desaprobó el dominio de correo electrónico %{target}"
+        demote_user: "%{name} bajó de nivel al usuario %{target}"
+        destroy_custom_emoji: "%{name} destruyó el emoji %{target}"
+        destroy_domain_block: "%{name} desbloqueó el dominio %{target}"
+        destroy_email_domain_block: "%{name} aprobó el dominio de correo electrónico %{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 inicio de sesión para el usuario %{target}"
+        enable_custom_emoji: "%{name} habilitó el emoji %{target}"
+        enable_user: "%{name} habilitó el inicio de sesión para el usuario %{target}"
+        memorialize_account: "%{name} convirtió la cuenta de %{target} en una página de recordatorio"
+        remove_avatar_user: "%{name} quitó el avatar de %{target}"
+        reopen_report: "%{name} reabrió la denuncia %{target}"
+        reset_password_user: "%{name} cambió la contraseña del usuario %{target}"
+        resolve_report: "%{name} resolvió la denuncia %{target}"
+        silence_account: "%{name} silenció la cuenta de %{target}"
+        suspend_account: "%{name} suspendió la cuenta de %{target}"
+        unassigned_report: "%{name} desasignó la denuncia %{target}"
+        unsilence_account: "%{name} quitó el silenciado de la cuenta de %{target}"
+        unsuspend_account: "%{name} quitó la suspensión de la cuenta de %{target}"
+        update_custom_emoji: "%{name} actualizó el emoji %{target}"
+        update_status: "%{name} actualizó el estado de %{target}"
+      deleted_status: "(estado borrado)"
+      title: Registro de auditoría
+    custom_emojis:
+      assign_category: Asignar categoría
+      by_domain: Dominio
+      copied_msg: Copia local del emoji creada exitosamente
+      copy: Copiar
+      copy_failed_msg: No se pudo realizar una copia local de ese emoji
+      create_new_category: Crear nueva categoría
+      created_msg: "¡Emoji creado exitosamente!"
+      delete: Eliminar
+      destroyed_msg: "¡Emoji destruido exitosamente!"
+      disable: Deshabilitar
+      disabled: Deshabilitado
+      disabled_msg: Se deshabilitó ese emoji exitosamente
+      emoji: Emoji
+      enable: Habilitar
+      enabled: Habilitado
+      enabled_msg: Se habilitó ese emoji exitosamente
+      image_hint: PNG de hasta 50KB
+      list: Lista
+      listed: Listados
+      new:
+        title: Agregar nuevo emoji personalizado
+      overwrite: Sobreescribir
+      shortcode: Código corto
+      shortcode_hint: Al menos 2 caracteres, sólo caracteres alfanuméricos y subguiones ("_")
+      title: Emojis personalizados
+      uncategorized: Sin categoría
+      unlist: No agregar a lista
+      unlisted: No listado
+      update_failed_msg: No se pudo actualizar ese emoji
+      updated_msg: "¡Emoji actualizado exitosamente!"
+      upload: Subir
+    dashboard:
+      authorized_fetch_mode: Modo seguro
+      backlog: trabajos registrados
+      config: Configuración
+      feature_deletions: Eliminaciones de cuenta
+      feature_invites: Enlaces de invitación
+      feature_profile_directory: Directorio de perfiles
+      feature_registrations: Registros
+      feature_relay: Relé de federación
+      feature_spam_check: Anti-spam
+      feature_timeline_preview: Previsualización de la línea temporal
+      features: Funciones
+      hidden_service: Federación con servicios ocultos
+      open_reports: abrir denuncias
+      pending_tags: etiquetas esperando revisión
+      pending_users: usuarios esperando revisión
+      recent_users: Usuarios recientes
+      search: Búsqueda de texto completo
+      single_user_mode: Modo de usuario único
+      software: Software
+      space: Uso del espacio
+      title: Panel
+      total_users: usuarios en total
+      trends: Tendencias
+      week_interactions: interacciones esta semana
+      week_users_active: activos esta semana
+      week_users_new: usuarios esta semana
+      whitelist_mode: Modo de aprobación
+    domain_allows:
+      add_new: Aprobar dominio
+      created_msg: El dominio se aprobó exitosamente
+      destroyed_msg: El dominio no se aprobó
+      undo: No aprobado
+    domain_blocks:
+      add_new: Agregar nuevo bloquedo de dominio
+      created_msg: Ahora se está procesando el bloquedo de dominio
+      destroyed_msg: Se deshizo el bloqueo de dominio
+      domain: Dominio
+      edit: Editar bloqueo de dominio
+      existing_domain_block_html: Ya le aplicaste límites más estrictos a %{name}, por lo que primero necesitás <a href="%{unblock_url}">desbloquearlo</a>.
+      new:
+        create: Crear bloqueo
+        hint: El bloqueo de dominio no va a prevenir la creación de toots de cuenta en la base de datos, pero se aplicarán métodos específicos de moderación en esas cuentas, retroactiva y automáticamente.
+        severity:
+          desc_html: "<strong>Silenciar</strong> hará que los toots de la cuenta sean invisibles a quienes no estén siguiendo esa cuenta. <strong>Suspender</strong> quitará todo el contenido, archivos de medio y datos de perfil de la cuenta. Usá <strong>Ninguno</strong> si simplemente querés rechazar archivos de medios."
+          noop: Ninguno
+          silence: Silenciar
+          suspend: Suspender
+        title: Nuevo bloquedo de dominio
+      private_comment: Comentario privado
+      private_comment_hint: Comentario sobre la limitación de este dominio, para uso interno de los moderadores.
+      public_comment: Comentario público
+      public_comment_hint: Comentario sobre la limitación de este dominio para el público en general, si está habilitada la publicación de lista de limitaciones de dominio.
+      reject_media: Rechazar archivos de medio
+      reject_media_hint: Quita los archivos de medio almacenados e impide la descarga en el futuro. Irrelevante para suspensiones.
+      reject_reports: Rechazar denuncias
+      reject_reports_hint: Ignora todas las denuncias que vengan de este dominio. Irrelevante para suspensiones.
+      rejecting_media: rechazando archivos de medio
+      rejecting_reports: rechazando denuncias
+      severity:
+        silence: silenciado
+        suspend: suspendido
+      show:
+        affected_accounts:
+          one: Una cuenta afectada en la base de datos
+          other: "%{count} cuentas afectadas en la base de datos"
+        retroactive:
+          silence: Quitar silenciado de las cuentas existentes afectadas de este dominio
+          suspend: Quitar suspensión de las cuentas existentes afectadas de este dominio
+        title: Deshacer el bloqueo de dominio para %{domain}
+        undo: Deshacer
+      undo: Deshacer bloqueo de dominio
+      view: Ver bloqueo de dominio
+    email_domain_blocks:
+      add_new: Agregar nuevo
+      created_msg: Se desaprobó dominio de correo electrónico exitosamente
+      delete: Eliminar
+      destroyed_msg: Se aprobó dominio de correo electrónico exitosamente
+      domain: Dominio
+      new:
+        create: Agregar dominio
+        title: Nueva desaprobación de correo electrónico
+      title: Desaprobación de correo electrónico
+    followers:
+      back_to_account: Volver a la cuenta
+      title: Seguidores de %{acct}
+    instances:
+      by_domain: Dominio
+      delivery_available: La entrega está disponible
+      known_accounts:
+        one: "%{count} cuenta conocida"
+        other: "%{count} cuentas conocidas"
+      moderation:
+        all: Todas
+        limited: Limitadas
+        title: Moderación
+      private_comment: Comentario privado
+      public_comment: Comentario público
+      title: Federación
+      total_blocked_by_us: Bloqueada por nosotros
+      total_followed_by_them: Seguidos por ellos
+      total_followed_by_us: Seguidos por nosotros
+      total_reported: Denuncias sobre ellos
+      total_storage: Adjuntos
+    invites:
+      deactivate_all: Desactivar todas
+      filter:
+        all: Todas
+        available: Disponibles
+        expired: Vencidas
+        title: Filtrar
+      title: Invitaciones
+    pending_accounts:
+      title: Cuentas pendientes (%{count})
+    relays:
+      add_new: Agregar nuevo relé
+      delete: Eliminar
+      description_html: Un <strong>relé de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos.
+      disable: Deshabilitar
+      disabled: Deshabilitado
+      enable: Habilitar
+      enable_hint: Una vez habilitado, tu servidor se suscribirá a todos los toots públicos desde este relé, y comenzará a enviar los toots públicos de este servidor al relé.
+      enabled: Habilitado
+      inbox_url: Dirección web del relé
+      pending: Esperando aprobación del relé
+      save_and_enable: Guardar y habilitar
   errors:
     '400': The request you submitted was invalid or malformed.
     '403': You don't have permission to view this page.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 0a6341217..8a194fdc1 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -18,7 +18,6 @@ es:
     discover_users: Descubrir usuarios
     documentation: Documentación
     federation_hint_html: Con una cuenta en %{instance} usted podrá seguir a las personas en cualquier servidor de Mastodon y más allá.
-    generic_description: "%{domain} es un servidor en la red"
     get_apps: Probar una aplicación móvil
     hosted_on: Mastodon hosteado en %{domain}
     instance_actor_flash: |
@@ -247,6 +246,7 @@ es:
       enabled: Activado
       enabled_msg: Se habilitó con éxito ese emoji
       image_hint: PNG de hasta 50KB
+      list: Lista
       listed: Listados
       new:
         title: Añadir nuevo emoji personalizado
@@ -255,6 +255,7 @@ es:
       shortcode_hint: Al menos 2 caracteres, solo caracteres alfanuméricos y guiones bajos
       title: Emojis personalizados
       uncategorized: Sin clasificar
+      unlist: No listado
       unlisted: Sin listar
       update_failed_msg: No se pudo actualizar ese emoji
       updated_msg: "¡Emoji actualizado con éxito!"
@@ -386,6 +387,7 @@ es:
       pending: Esperando la aprobación del relés
       save_and_enable: Guardar y conectar
       setup: Preparar una conexión de relés
+      signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el modo de lista blanca estén habilitados
       status: Estado
       title: Releses
     report_notes:
@@ -434,10 +436,16 @@ es:
       custom_css:
         desc_html: Modificar el aspecto con CSS cargado en cada página
         title: CSS personalizado
+      default_noindex:
+        desc_html: Afecta a todos los usuarios que no han cambiado esta configuración por sí mismos
+        title: Optar por los usuarios fuera de la indexación en los motores de búsqueda por defecto
       domain_blocks:
         all: A todos
         disabled: A nadie
+        title: Mostrar dominios bloqueados
         users: Para los usuarios locales que han iniciado sesión
+      domain_blocks_rationale:
+        title: Mostrar la razón de ser
       hero:
         desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia
         title: Imagen de portada
@@ -498,6 +506,9 @@ es:
         desc_html: Mostrar línea de tiempo pública en la portada
         title: Previsualización
       title: Ajustes del sitio
+      trendable_by_default:
+        desc_html: Afecta a etiquetas que no han sido previamente rechazadas
+        title: Permitir que las etiquetas sean tendencia sin revisión previa
       trends:
         desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia
         title: Hashtags de tendencia
@@ -518,6 +529,7 @@ es:
     tags:
       accounts_today: Usos únicos de hoy
       accounts_week: Usos únicos esta semana
+      breakdown: Desglose del consumo actual por fuentes
       context: Contexto
       directory: En el directorio
       in_directory: "%{count} en el directorio"
@@ -554,6 +566,7 @@ es:
     add_new: Crear alias
     created_msg: El nuevo alias se ha creado correctamente. Ahora puedes empezar el traslado desde la cuenta antigua.
     deleted_msg: Elimina el alias correctamente. El traslado de esa cuenta a esta ya no será posible.
+    hint_html: Si quieres migrar de otra cuenta a esta, aquí puedes crear un alias, es necesario proceder antes de empezar a mover seguidores de la cuenta anterior a esta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta antigua</strong>.
     remove: Desvincular alias
   appearance:
     advanced_web_interface: Interfaz web avanzada
@@ -654,6 +667,7 @@ es:
     success_msg: Tu cuenta se eliminó con éxito
     warning:
       before: 'Antes de continuar, por favor lee con atención las siguientes notas:'
+      caches: El contenido que ha sido almacenado en caché por otros servidores puede persistir
       data_removal: Tus publicaciones y el resto de datos se eliminarán definitivamente
       email_change_html: Puedes <a href="%{path}"> cambiar tu dirección de correo electrónico</a> sin eliminar tu cuenta
       email_contact_html: Si aún no te ha llegado, puedes escribir a <a href="mailto:%{email}">%{email}</a> para pedir ayuda
@@ -669,7 +683,7 @@ es:
   domain_validator:
     invalid_domain: no es un nombre de dominio válido
   errors:
-    '400': The request you submitted was invalid or malformed.
+    '400': La solicitud que has enviado no es valida o estaba malformada.
     '403': No tienes permiso para acceder a esta página.
     '404': La página que estabas buscando no existe.
     '406': Esta página no está disponible en el formato solicitado.
@@ -705,6 +719,7 @@ es:
     add_new: Añadir nuevo
     errors:
       limit: Ya has alcanzado la cantidad máxima de hashtags
+    hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
   filters:
     contexts:
       home: Timeline propio
@@ -730,6 +745,7 @@ es:
     all: Todos
     changes_saved_msg: "¡Cambios guardados con éxito!"
     copy: Copiar
+    no_batch_actions_available: No hay acciones por lotes disponibles en esta página
     order_by: Ordenar por
     save_changes: Guardar cambios
     validation_errors:
@@ -805,7 +821,30 @@ es:
     cancel_explanation: Al cancelar el redireccionamiento se reactivará tu cuenta actual, pero no recuperarás los seguidores que hayan sido trasladados a la otra cuenta.
     cancelled_msg: El redireccionamiento se ha cancelado correctamente.
     errors:
+      already_moved: es la misma cuenta a la que ya has migrado
+      missing_also_known_as: no está haciendo referencia a esta cuenta
+      move_to_self: no puede ser la cuenta actual
       not_found: no se pudo encontrar
+      on_cooldown: Estás en tiempo de reutilización
+    followers_count: Seguidores al momento de migrar
+    incoming_migrations: Migrar de una cuenta diferente
+    incoming_migrations_html: Para migrar de otra cuenta a esta, primero necesitas <a href="%{path}">crear un alias de la cuenta</a>.
+    moved_msg: Tu cuenta ahora se está redirigiendo a %{acct} y tus seguidores se están migrando.
+    not_redirecting: Tu cuenta no se está redirigiendo a ninguna otra cuenta actualmente.
+    on_cooldown: Has migrado tu cuenta recientemente. Esta función estará disponible de nuevo en %{count} días.
+    past_migrations: Migraciones pasadas
+    proceed_with_move: Migrar seguidores
+    redirecting_to: Tu cuenta se está redirigiendo a %{acct}.
+    set_redirect: Establecer redirección
+    warning:
+      backreference_required: La nueva cuenta debe ser configurada primero para hacer referencia a esta
+      before: 'Antes de continuar, por favor lee con atención las siguientes notas:'
+      cooldown: Después de migrar hay un período de espera durante el cual no podrás volver a migrar
+      disabled_account: Tu cuenta actual no será completamente utilizable después. Sin embargo, tendrás acceso a la exportación de datos así como a la reactivación.
+      followers: Esta acción migrará a todos los seguidores de la cuenta actual a la nueva cuenta
+      only_redirect_html: Alternativamente, solo puedes <a href="%{path}">poner una redirección en tu perfil</a>.
+      other_data: No se moverán otros datos automáticamente
+      redirect: El perfil de tu cuenta actual se actualizará con un aviso de redirección y será excluido de las búsquedas
   moderation:
     title: Moderación
   notification_mailer:
@@ -950,6 +989,7 @@ es:
   settings:
     account: Cuenta
     account_settings: Ajustes de la cuenta
+    aliases: Alias de la cuenta
     appearance: Apariencia
     authorized_apps: Aplicaciones autorizadas
     back: Volver al inicio
@@ -968,7 +1008,7 @@ es:
     relationships: Siguiendo y seguidores
     two_factor_authentication: Autenticación de dos factores
   spam_check:
-    spam_detected_and_silenced: Este es un informe automatizado. Se ha detectado spam y el remitente ha sido silenciado automáticamente. Si esto es un error, por favor, deja de silenciar la cuenta.
+    spam_detected: Este es un informe automatizado. Se ha detectado Spam.
   statuses:
     attached:
       description: 'Adjunto: %{attached}'
@@ -992,6 +1032,9 @@ es:
       private: Los toots no-públicos no pueden fijarse
       reblog: Un boost no puede fijarse
     poll:
+      total_people:
+        one: persona %{count}
+        other: "%{count} gente"
       total_votes:
         one: "%{count} voto"
         other: "%{count} votos"
@@ -1129,7 +1172,9 @@ es:
         disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee.
         silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente.
         suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
+      get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}.
       review_server_policies: Revisar las políticas del servidor
+      statuses: 'Específicamente, para:'
       subject:
         disable: Su cuenta %{acct} ha sido congelada
         none: Advertencia para %{acct}
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 0a66d49f4..6b814a23c 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -18,7 +18,6 @@ et:
     discover_users: Avasta kasutajaid
     documentation: Dokumentatsioon
     federation_hint_html: Kui Teil on kasutaja %{instance}-is, saate Te jälgida inimesi üks kõik millisel Mastodoni serveril ja kaugemalgi.
-    generic_description: "%{domain} on ainult üks server terves võrgus"
     get_apps: Proovi mobiilirakendusi
     hosted_on: Mastodon majutatud %{domain}-is
     instance_actor_flash: |
@@ -884,8 +883,6 @@ et:
     profile: Profiil
     relationships: Jälgitud ja jälgijad
     two_factor_authentication: Kahesammuline autentimine
-  spam_check:
-    spam_detected_and_silenced: See on automatiseeritud teavitus. Rämpspost on tuvastatud ja nende autor on automaatselt vaigistatud. Kui see on viga, palun eemaldage vaigistus.
   statuses:
     attached:
       description: 'Manused: %{attached}'
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index a3061b99e..1f2ac6644 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -4,7 +4,7 @@ eu:
     about_hashtag_html: Hauek  <strong>#%{hashtag}</strong> traola duten toot publikoak dira. Fedibertsoko edozein kontu baduzu harremanetan jarri zaitezke.
     about_mastodon_html: Mastodon web protokolo ireki eta libreak darabiltzan gizarte sare bat da. E-mail sarea bezala deszentralizatua da.
     about_this: Honi buruz
-    active_count_after: aktiboa
+    active_count_after: aktibo
     active_footnote: Hilabeteko erabiltzaile aktiboak (HEA)
     administered_by: 'Administratzailea(k):'
     api: APIa
@@ -18,7 +18,6 @@ eu:
     discover_users: Aurkitu erabiltzaileak
     documentation: Dokumentazioa
     federation_hint_html: "%{instance} instantzian kontu bat izanda edozein Mastodon zerbitzariko jendea jarraitu ahal izango duzu, eta harago ere."
-    generic_description: "%{domain} sareko zerbitzari bat da"
     get_apps: Probatu mugikorrerako aplikazio bat
     hosted_on: Mastodon %{domain} domeinuan ostatatua
     instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke.
@@ -35,6 +34,14 @@ eu:
     status_count_before: Hauek
     tagline: Jarraitu lagunak eta egin berriak
     terms: Erabilera baldintzak
+    unavailable_content: Eduki eskuraezina
+    unavailable_content_description:
+      domain: Zerbitzaria
+      reason: Arrazoia
+      rejecting_media: 'Zerbitzari hauetako multimedia fitxategiak ez dira prozesatuko ez gordeko, eta ez dira iruditxoak bistaratuko, jatorrizko irudira joan behar izango da klik eginez:'
+      silenced: 'Zerbitzari hauetako mezuak denbora-lerro eta elkarrizketa publikoetan ezkutatuko dira, eta bere erabiltzaileen interakzioek ez dute jakinarazpenik sortuko ez badituzu jarraitzen:'
+      suspended: 'Ez da zerbitzari hauetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari hauetako erabiltzaileekin komunikatzea ezinezkoa eginez:'
+    unavailable_content_html: Mastodonek orokorrean fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikustea eta beraiekin aritzea ahalbidetzen dizu. Salbuespena egin da zerbitzari zehatz honekin.
     user_count_after:
       one: erabiltzaile
       other: erabiltzaile
@@ -42,6 +49,8 @@ eu:
     what_is_mastodon: Zer da Mastodon?
   accounts:
     choices_html: "%{name}(r)en aukerak:"
+    endorsements_hint: Jarraitzen duzun jendea sustatu dezakezu web interfazearen bidez, eta hemen agertuko da.
+    featured_tags_hint: Hemen agertuko diren traolak nabarmendu ditzakezu.
     follow: Jarraitu
     followers:
       one: Jarraitzaile
@@ -51,7 +60,7 @@ eu:
     last_active: azkenekoz aktiboa
     link_verified_on: 'Esteka honen jabetzaren egiaztaketa data: %{date}'
     media: Multimedia
-    moved_html: "%{name} hona lekualdatu da %{new_profile_link}:"
+    moved_html: "%{name} hona migratu da %{new_profile_link}:"
     network_hidden: Informazio hau ez dago eskuragarri
     never_active: Inoiz ez
     nothing_here: Ez dago ezer hemen!
@@ -220,19 +229,24 @@ eu:
       deleted_status: "(ezabatutako mezua)"
       title: Auditoria-egunkaria
     custom_emojis:
+      assign_category: Esleitu kategoria
       by_domain: Domeinua
       copied_msg: Ongi sortu da emoji-aren kopia lokala
       copy: Kopiatu
       copy_failed_msg: Ezin izan da emoji-aren kopia lokal bat sortu
+      create_new_category: Sortu kategoria berria
       created_msg: Emoji-a ongi sortu da!
       delete: Ezabatu
       destroyed_msg: Emoji-a ongi suntsitu da!
       disable: Desgaitu
+      disabled: Desgaituta
       disabled_msg: Emoji-a ongi desgaitu da
       emoji: Emojia
       enable: Gaitu
+      enabled: Gaituta
       enabled_msg: Emoji hori ongi gaitu da
       image_hint: PNG gehienez 50KB
+      list: Zerrendatu
       listed: Zerrendatua
       new:
         title: Gehitu emoji pertsonal berria
@@ -240,6 +254,8 @@ eu:
       shortcode: Laster-kodea
       shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarra  besterik ez
       title: Emoji pertsonalak
+      uncategorized: Kategoriarik gabe
+      unlist: Kendu zerrendatik
       unlisted: Zerrendatu gabea
       update_failed_msg: Ezin izan da emoji hori eguneratu
       updated_msg: Emoji-a ongi eguneratu da!
@@ -422,6 +438,10 @@ eu:
       domain_blocks:
         all: Guztiei
         disabled: Inori ez
+        title: Erakutsi domeinu-blokeoak
+        users: Saioa hasita duten erabiltzaile lokalei
+      domain_blocks_rationale:
+        title: Erakutsi arrazoia
       hero:
         desc_html: Azaleko orrian bistaratua. Gutxienez 600x100px aholkatzen da. Ezartzen ez bada, zerbitzariaren irudia hartuko du
         title: Azaleko irudia
@@ -483,6 +503,7 @@ eu:
         title: Denbora-lerroaren aurrebista
       title: Gunearen ezarpenak
       trends:
+        desc_html: Erakutsi publikoki orain joeran dauden aurretik errebisatutako traolak
         title: Traolak joeran
     statuses:
       back_to_account: Atzera kontuaren orrira
@@ -504,6 +525,10 @@ eu:
       context: Testuingurua
       directory: Direktorioan
       in_directory: "%{count} direktorioan"
+      last_active: Azkenekoz aktiboa
+      most_popular: Erabilienak
+      most_recent: Azkenak
+      name: Traola
       review: Berrikusketaren egoera
       reviewed: Berrikusita
       title: Traolak
@@ -526,6 +551,14 @@ eu:
       body: "%{reporter}(e)k %{target} salatu du"
       body_remote: "%{domain} domeinuko norbaitek %{target} salatu du"
       subject: Salaketa berria %{instance} instantzian (#%{id})
+    new_trending_tag:
+      subject: Traola berria errebisatzeko %{instance} instantzian (#%{name})
+  aliases:
+    add_new: Sortu ezizena
+    created_msg: Ongi sortu da ezizena. Orain kontu zaharretik migratzen hasi zaitezke.
+    deleted_msg: Ongi kendu da ezizena. Orain ezin izango da aurreko kontutik hona migratu.
+    hint_html: Beste kontu batetik hona migratu nahi baduzu, hemen ezizen bat sortu dezakezu, hau beharrezkoa da kontu zaharreko jarraitzaileak hona ekartzeko. Ekintza hau berez <strong>kaltegabea eta desegingarria</strong> da. <strong>Kontuaren migrazioa kontu zaharretik abiatzen da</strong>.
+    remove: Deslotu ezizena
   appearance:
     advanced_web_interface: Web interfaze aurreratua
     advanced_web_interface_hint: 'Pantaila bere zabalera osoan erabili nahi baduzu, web interfaze aurreratuak hainbat zutabe desberdin konfiguratzea ahalbidetzen dizu, aldi berean nahi beste informazio ikusteko: Hasiera, jakinarazpenak, federatutako denbora-lerroa, edo nahi beste zerrenda eta traola.'
@@ -555,12 +588,16 @@ eu:
     checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">Erabilera baldintzak</a> onartzen ditut
     delete_account: Ezabatu kontua
     delete_account_html: Kontua ezabatu nahi baduzu, <a href="%{path}">jarraitu hemen</a>. Berrestea eskatuko zaizu.
+    description:
+      prefix_invited_by_user: "@%{name} erabiltzaileak Mastodon zerbitzari honetara elkartzera gonbidatzen zaitu!"
+      prefix_sign_up: Eman izena Mastodon-en!
+      suffix: Kontu bat baduzu, jendea jarraitu ahal izango duzu, mezuak bidali eta Mastodon zein kanpoko zerbitzarietako erabiltzaileekin elkarrizketan aritu!
     didnt_get_confirmation: Ez dituzu berresteko argibideak jaso?
     forgot_password: Pasahitza ahaztu duzu?
     invalid_reset_password_token: Pasahitza berrezartzeko token-a baliogabea da edo iraungitu du. Eskatu beste bat.
     login: Hasi saioa
     logout: Amaitu saioa
-    migrate_account: Lekualdatu beste kontu batera
+    migrate_account: Migratu beste kontu batera
     migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu.
     or_log_in_with: Edo hasi saioa honekin
     providers:
@@ -581,6 +618,7 @@ eu:
       confirming: E-mail baieztapena osatu bitartean zain.
       functional: Zure kontua guztiz erabilgarri dago.
       pending: Zure eskaera gainbegiratzeko dago oraindik. Honek denbora behar lezake. Zure eskaera onartzen bada e-mail bat jasoko duzu.
+      redirecting_to: Zure kontua ez dago aktibo orain %{acct} kontura birbideratzen duelako.
     trouble_logging_in: Arazoak saioa hasteko?
   authorize_follow:
     already_following: Kontu hau aurretik jarraitzen duzu
@@ -593,6 +631,11 @@ eu:
       return: Erakutsi erabiltzailearen profila
       web: Joan webera
     title: Jarraitu %{acct}
+  challenge:
+    confirm: Jarraitu
+    hint_html: "<strong>Oharra:</strong> Ez dizugu pasahitza berriro eskatuko ordu batez."
+    invalid_password: Pasahitz baliogabea
+    prompt: Berretsi pasahitza jarraitzeko
   datetime:
     distance_in_words:
       about_x_hours: "%{count}o"
@@ -608,9 +651,18 @@ eu:
       x_months: "%{count} hilabete"
       x_seconds: "%{count}s"
   deletes:
+    challenge_not_passed: Sartu duzun informazioa ez da zuzena
     confirm_password: Sartu zure oraingo pasahitza zure identitatea baieztatzeko
+    confirm_username: Sartu zure erabiltzaile-izena prozedura berresteko
     proceed: Ezabatu kontua
     success_msg: Zure kontua ongi ezabatu da
+    warning:
+      before: 'Jarraitu aurretik, irakurri adi ohar hauek:'
+      caches: Beste zerbitzariek cachean duten edukia mantentzea gerta daiteke
+      data_removal: Zure mezuak eta beste datuak behin betiko ezabatuko dira
+      more_details_html: Xehetasun gehiagorako, ikusi <a href="%{terms_path}">pribatutasun politika</a>.
+      username_available: Zure erabiltzaile-izena berriro eskuragarri egongo da
+      username_unavailable: Zure erabiltzaile-izena ez da eskuragarri egongo
   directories:
     directory: Profilen direktorioa
     explanation: Deskubritu erabiltzaileak interesen arabera
@@ -618,10 +670,10 @@ eu:
   domain_validator:
     invalid_domain: ez da domeinu izen baliogarria
   errors:
-    '400': The request you submitted was invalid or malformed.
+    '400': Bidali duzun eskaria baliogabea da edo gaizki osatua dago.
     '403': Ez duzu orri hau ikusteko baimenik.
     '404': Bilatu duzun orria ez dago hemen.
-    '406': This page is not available in the requested format.
+    '406': Orri hau ez dago eskatutako formatuan eskuragarri.
     '410': Bilatu duzun orria ez dago hemen jada.
     '422':
       content: Segurtasun egiaztaketak huts egin du. Cookie-ak blokeatzen dituzu?
@@ -750,6 +802,33 @@ eu:
       too_many: Ezin dira 4 fitxategi baino gehiago erantsi
   migrations:
     acct: Kontu berriaren erabiltzaile@domeinua
+    cancel: Ezeztatu birbideratzea
+    cancel_explanation: Birbideratzea ezezteak zure kontu hau berriro aktibatuko du, baina ez ditu atzera ekarriko bestera aldatu diren jarraitzaileak.
+    cancelled_msg: Ongi ezeztatu da birbideratzea.
+    errors:
+      already_moved: kontu honetara migratu duzu dagoeneko
+      missing_also_known_as: ez dio kontu honi erreferentzia egiten
+      move_to_self: ezin da oraingo kontua izan
+      not_found: ezin izan da aurkitu
+      on_cooldown: Egonaldian zaude
+    followers_count: Jarraitzaileak migrazioaren unean
+    incoming_migrations: Beste kontu batetik migratuz
+    incoming_migrations_html: Beste kontu batetik hona migratzeko, aurretik <a href="%{path}">kontuaren ezizen bat sortu</a> behar duzu.
+    moved_msg: Zure kontuak orain %{acct} kontura birbideratzen du, eta zure jarraitzaileak hara migratuak izaten ari dira.
+    not_redirecting: Zure kontuak ez du orain beste konturen batera birbideratzen.
+    on_cooldown: Duela gutxi migratu duzu. Funtzio hau %{count} egun barru egongo da berriro eskuragarri.
+    past_migrations: Aurreko migrazioak
+    proceed_with_move: Mugitu jarraitzaileak
+    redirecting_to: 'Zure kontuak hona birbideratzen du: %{acct}.'
+    set_redirect: Ezarri birbideratzea
+    warning:
+      backreference_required: Kontu berria honi erreferentzia egiteko konfiguratu behar da
+      before: 'Jarraitu aurretik, irakurri adi ohar hauek:'
+      cooldown: Migratu eta gero egonaldi tarte bat egongo da eta bitartean ezin izango duzu berriro migratu
+      followers: Ekintza honek jarraitzaile guztiak eramango ditu uneko kontutik kontu berrira
+      only_redirect_html: Bestela, <a href="%{path}">zure profilean birbideratze soil bat jarri</a> dezakezu.
+      other_data: Ez da beste daturik migratuko automatikoki
+      redirect: Zure uneko kontuaren profila eguneratuko da birbideratze ohar batekin eta bilaketetatik kenduko da
   moderation:
     title: Moderazioa
   notification_mailer:
@@ -894,6 +973,7 @@ eu:
   settings:
     account: Kontua
     account_settings: Kontuaren ezarpenak
+    aliases: Kontuaren ezizenak
     appearance: Itxura
     authorized_apps: Baimendutako aplikazioak
     back: Itzuli Mastodon-era
@@ -911,8 +991,6 @@ eu:
     profile: Profila
     relationships: Jarraitutakoak eta jarraitzaileak
     two_factor_authentication: Bi faktoreetako autentifikazioa
-  spam_check:
-    spam_detected_and_silenced: Hau salaketa automatiko bat da. Spam-a antzeman da eta igorlea automatikoki isilarazi da. Hau akats bat bada, utzi kontua isilarazteari.
   statuses:
     attached:
       description: 'Erantsita: %{attached}'
@@ -936,6 +1014,9 @@ eu:
       private: Ezin dira publikoak ez diren toot-ak finkatu
       reblog: Bultzada bat ezin da finkatu
     poll:
+      total_people:
+        one: pertsona %{count}
+        other: "%{count} pertsona"
       total_votes:
         one: Boto %{count}
         other: "%{count} boto"
@@ -1074,6 +1155,7 @@ eu:
         silence: Zure kontua murriztua dagoen bitartean, jada zu jarraitzen zaituztenak besterik ez dituzte zure Toot-ak ikusiko zerbitzari honetan, eta agian zerrenda publikoetatik kenduko zaizu. Hala ere besteek oraindik zu jarraitu zaitzakete.
         suspend: Zure kontua kanporatua izan da, zure toot guztiak eta multimedia fitxategiak behin betiko ezabatu dira zerbitzari honetatik, eta zure jarraitzaileen zerbitzarietatik.
       review_server_policies: Berrikusi zerbitzariko politikak
+      statuses: 'Zehazki, honentzat:'
       subject:
         disable: Zure  %{acct} kontua izoztu da
         none: "%{acct} konturako abisua"
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 8b64c131d..ebac705d8 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -2,7 +2,7 @@
 fa:
   about:
     about_hashtag_html: این‌ها نوشته‌های عمومی هستند که برچسب (هشتگ) <strong>#%{hashtag}</strong> را دارند. اگر شما روی هر سروری حساب داشته باشید می‌توانید به این نوشته‌ها واکنش نشان دهید.
-    about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی است که بر اساس پروتکل‌های آزاد وب و نرم‌افزارهای آزاد و کدباز ساخته شده است. این شبکه مانند ایمیل غیرمتمرکز است.
+    about_mastodon_html: 'شبکهٔ اجتماعی آینده: بدون تبلیغات، بدون شنود از طرف شرکت‌ها، طراحی اخلاق‌مدار، و معماری غیرمتمرکز! با ماستدون صاحب داده‌های خودتان باشید!'
     about_this: درباره
     active_count_after: فعال
     active_footnote: کاربران فعال در ماه گذشته
@@ -18,7 +18,6 @@ fa:
     discover_users: یافتن کاربران
     documentation: مستندات
     federation_hint_html: با داشتن حساب روی %{instance} می‌توانید کاربران همهٔ سرورهای دیگر ماستدون (و سایر شبکه‌های سازگار با آن) را پی بگیرید.
-    generic_description: "%{domain} یک سرور روی شبکه است"
     get_apps: یک اپ موبایل را امتحان کنید
     hosted_on: ماستدون، میزبانی‌شده روی %{domain}
     instance_actor_flash: |
@@ -507,6 +506,9 @@ fa:
         desc_html: نوشته‌های عمومی این سرور را در صفحهٔ آغازین نشان دهید
         title: پیش‌نمایش نوشته‌ها
       title: تنظیمات سایت
+      trendable_by_default:
+        desc_html: روی برچسب‌هایی که پیش از این ممنوع نشده‌اند تأثیر می‌گذارد
+        title: بگذارید که برچسب‌های پرطرفدار بدون بازبینی قبلی نمایش داده شوند
       trends:
         desc_html: برچسب‌های عمومی که پیش‌تر بازبینی شده‌اند و هم‌اینک پرطرفدارند
         title: برچسب‌های پرطرفدار
@@ -1006,7 +1008,7 @@ fa:
     relationships: پیگیری‌ها و پیگیران
     two_factor_authentication: ورود دومرحله‌ای
   spam_check:
-    spam_detected_and_silenced: این یک گزارش خودکار است. هرزنامه به طور خودکار تشخیص داده شده و کاربر بی‌صدا شده است. اگر اشتباهی رخ داده لطفاً حساب را باصدا کنید.
+    spam_detected: این یک گزارش خودکار برای تشخیص هرزنامه است.
   statuses:
     attached:
       description: 'پیوست‌شده: %{attached}'
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 2f8fd3497..500c2408f 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -10,7 +10,6 @@ fi:
     contact_missing: Ei asetettu
     contact_unavailable: Ei saatavilla
     documentation: Dokumentaatio
-    generic_description: "%{domain} on yksi verkostoon kuuluvista palvelimista"
     hosted_on: Mastodon palvelimella %{domain}
     learn_more: Lisätietoja
     privacy_policy: Tietosuojaseloste
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index fbe1c0872..f44a0893f 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -18,7 +18,6 @@ fr:
     discover_users: Découvrez des utilisateur·rice·s
     documentation: Documentation
     federation_hint_html: Avec un compte sur %{instance}, vous pourrez suivre les gens sur n’importe quel serveur Mastodon et au-delà.
-    generic_description: "%{domain} est seulement un serveur du réseau"
     get_apps: Essayez une application mobile
     hosted_on: Serveur Mastodon hébergée par %{domain}
     instance_actor_flash: |
@@ -51,7 +50,7 @@ fr:
   accounts:
     choices_html: "%{name} recommande :"
     endorsements_hint: Vous pouvez soutenir les personnes que vous suivez depuis l’interface web, et elles apparaîtront ici.
-    featured_tags_hint: Vous pouvez mettre en avant des hashtags spécifiques qui seront affichés ici.
+    featured_tags_hint: Vous pouvez recommander des hashtags spécifiques qui seront affichés ici.
     follow: Suivre
     followers:
       one: Abonné·e
@@ -378,7 +377,7 @@ fr:
     relays:
       add_new: Ajouter un nouveau relais
       delete: Effacer
-      description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de pouets entre les serveurs qui publient dessus et ceux qui y sont abonnés. <strong>Il peut aider les petits et moyen serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants.
+      description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de pouets publics entre les serveurs qui publient dessus et ceux qui y sont abonnés. <strong>Il peut aider les petits et moyen serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants.
       disable: Désactiver
       disabled: Désactivé
       enable: Activé
@@ -507,6 +506,9 @@ fr:
         desc_html: Afficher le fil public sur la page d’accueil
         title: Prévisualisation du fil global
       title: Paramètres du serveur
+      trendable_by_default:
+        desc_html: Affecte les hashtags qui n'ont pas été précédemment non autorisés
+        title: Autoriser les hashtags à apparaître dans les tendances sans examen préalable
       trends:
         desc_html: Afficher publiquement les hashtags approuvés qui sont populaires en ce moment
         title: Hashtags populaires
@@ -558,13 +560,13 @@ fr:
       body_remote: Quelqu’un de %{domain} a signalé %{target}
       subject: Nouveau signalement sur %{instance} (#%{id})
     new_trending_tag:
-      body: 'Le hashtag #%{name} est populaire aujourd’hui, mais il n’a pas été approuvé. Il ne sera pas affiché publiquement à moins que l’autorisiez, ou sauvegardez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.'
+      body: 'Le hashtag #%{name} est populaire aujourd’hui, mais il n’a pas été approuvé. Il ne sera pas affiché publiquement à moins que vous l’autorisiez, ou sauvegardiez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.'
       subject: Nouveau hashtag en attente de traitement sur %{instance} (#%{name})
   aliases:
     add_new: Créer un alias
     created_msg: Un nouvel alias a été créé avec succès. Vous pouvez maintenant lancer le déplacement depuis l'ancien compte.
-    deleted_msg: Suppression réussie de l'alias. Déplacer de ce compte vers celui-ci ne sera plus possible.
-    hint_html: Si vous voulez passer d'un autre compte à celui-ci, vous pouvez créer ici un alias, qui est nécessaire avant de pouvoir déplacer les abonné·e·s de l'ancien compte à celui-ci. Cette action en soi est <strong>inoffensive et réversible</strong>. <strong>La migration du compte est initiée à partir de l'ancien compte</strong>.
+    deleted_msg: Suppression réussie de l'alias. Le déménagement de ce compte vers celui-ci ne sera plus possible.
+    hint_html: Si vous voulez déménager d’un autre compte vers celui-ci, vous pouvez créer ici un alias, qui est nécessaire avant de pouvoir migrer les abonné·e·s de l’ancien compte vers celui-ci. Cette action en soi est <strong>inoffensive et réversible</strong>. <strong>La migration du compte est initiée à partir de l’ancien compte</strong>.
     remove: Détacher l'alias
   appearance:
     advanced_web_interface: Interface web avancée
@@ -604,7 +606,7 @@ 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: Déménager 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>.
     or_log_in_with: Ou authentifiez-vous avec
     providers:
@@ -716,7 +718,7 @@ fr:
   featured_tags:
     add_new: Ajouter un nouvel hashtag
     errors:
-      limit: Vous avez déjà mis en avant le nombre maximum de hashtags
+      limit: Vous avez déjà recommandé le nombre maximum de hashtags
     hint_html: "<strong>Que sont les hashtags vedettes ?</strong> Ils sont affichés avec emphase sur votre flux d'actualités publique et permettent aux gens de parcourir vos messages publics spécifiquement sous ces hashtags. Ils sont un excellent outil pour garder trace des œuvres créatives ou des projets à long terme."
   filters:
     contexts:
@@ -816,7 +818,7 @@ fr:
   migrations:
     acct: profil@domaine du nouveau compte
     cancel: Annuler la redirection
-    cancel_explanation: Annuler la redirection réactivera votre compte courant, mais ne rapportera pas les abonnés qui ont été déplacés sur ce compte.
+    cancel_explanation: Annuler la redirection réactivera votre compte courant, mais ne rapportera pas les abonné·e·s qui ont été déplacé·e·s sur ce compte.
     cancelled_msg: Suppression de la redirection réussie.
     errors:
       already_moved: est le même compte que vous avez déjà déplacé vers
@@ -831,15 +833,15 @@ fr:
     not_redirecting: Votre compte n'est pas redirigé vers un autre compte actuellement.
     on_cooldown: Vous avez récemment migré votre compte. Cette fonction sera à nouveau disponible dans %{count} jours.
     past_migrations: Migrations passées
-    proceed_with_move: Déplacer les abonnés
+    proceed_with_move: Migrer les abonné·e·s
     redirecting_to: Votre compte est redirigé vers %{acct}.
     set_redirect: Définir redirection
     warning:
       backreference_required: Le nouveau compte doit d'abord être configuré pour faire référence à celui-ci
       before: 'Avant de procéder, veuillez lire attentivement ces notes :'
-      cooldown: Après le déménagement, il y a une période de refroidissement pendant laquelle vous ne pourrez plus bouger
+      cooldown: Après le déménagement, il y a une période de gel pendant laquelle vous ne pourrez plus re-déménager
       disabled_account: Votre compte actuel ne sera pas entièrement utilisable par la suite. Cependant, vous aurez accès à l'exportation de données et à la ré-activation.
-      followers: Cette action va déplacer tous les abonnés du compte courant vers le nouveau compte
+      followers: Cette action va déménager tou·te·s les abonné·e·s du compte actuel vers le nouveau compte
       only_redirect_html: Alternativement, vous pouvez <a href="%{path}">seulement appliquer une redirection sur votre profil</a>.
       other_data: Aucune autre donnée ne sera déplacée automatiquement
       redirect: Le profil de votre compte actuel sera mis à jour avec un avis de redirection et sera exclu des recherches
@@ -995,7 +997,7 @@ fr:
     development: Développement
     edit_profile: Modifier le profil
     export: Export de données
-    featured_tags: Hashtags mis en avant
+    featured_tags: Hashtags recommandés
     identity_proofs: Preuves d’identité
     import: Import de données
     import_and_export: Import et export
@@ -1006,7 +1008,7 @@ fr:
     relationships: Abonnements et abonné·e·s
     two_factor_authentication: Identification à deux facteurs
   spam_check:
-    spam_detected_and_silenced: Ceci est un rapport automatisé. Du spam a été détecté et l’expéditeur a été silencié automatiquement. Si c’est une erreur, veuillez désactiver la sourdine du compte.
+    spam_detected: Ceci est un rapport automatisé. Du spam a été détecté.
   statuses:
     attached:
       description: 'Attaché : %{attached}'
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 3924eeedc..f32575752 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -1,9 +1,9 @@
 ---
 gl:
   about:
-    about_hashtag_html: Estas son mensaxes públicas etiquetadas con <strong>#%{hashtag}</strong>. Pode interactuar con elas si ten unha conta nalgures do fediverso.
+    about_hashtag_html: Estas son mensaxes públicas etiquetadas con <strong>#%{hashtag}</strong>. Podes interactuar con elas se tes unha conta nalgures do fediverso.
     about_mastodon_html: Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada como o correo electrónico.
-    about_this: Sobre
+    about_this: Acerca de
     active_count_after: activo
     active_footnote: Usuarias Activas no Mes (UAM)
     administered_by: 'Administrada por:'
@@ -18,7 +18,6 @@ gl:
     discover_users: Descubra usuarias
     documentation: Documentación
     federation_hint_html: Con unha conta en %{instance} poderá seguir a outras persoas en calquera dos servidores Mastodon e incluso máis.
-    generic_description: "%{domain} é un servidor na rede"
     get_apps: Probe cunha app móbil
     hosted_on: Mastodon aloxado en %{domain}
     instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queira bloquear a toda a instancia, en tal caso debería utilizar o bloqueo do dominio.
@@ -37,6 +36,7 @@ gl:
     terms: Termos do servizo
     unavailable_content: Contido non dispoñible
     unavailable_content_description:
+      domain: Servidor
       reason: 'Razón:'
       rejecting_media: Os ficheiros de medios de este servidor non se procesarán e non se mostrarán miniaturas, precisando solicitarse manualmente ao outro servidor.
       silenced: As publicacións desde este servidor non se mostrarán en ningún lugar excepto no Inicio se segues ao autor.
@@ -239,11 +239,14 @@ gl:
       delete: Eliminar
       destroyed_msg: Emojo destruído satisfactoriamente!
       disable: Deshabilitar
+      disabled: Desactivado
       disabled_msg: Deshabilitouse correctamente ese emoji
       emoji: Emoji
       enable: Habilitar
+      enabled: Activado
       enabled_msg: Habilitouse correctamente ese emoji
       image_hint: PNG ate 50KB
+      list: A lista
       listed: Listado
       new:
         title: Engadir novo emoji persoalizado
@@ -252,6 +255,7 @@ gl:
       shortcode_hint: Cando menos 2 caracteres, só caracteres alfanuméricos e subliñados
       title: Emojis persoalizados
       uncategorized: Sen categorizar
+      unlist: Sacar da lista
       unlisted: Non listado
       update_failed_msg: Non se puido actualizar ese emoji
       updated_msg: Actualizouse correctamente o emoji!
@@ -383,6 +387,7 @@ gl:
       pending: Agardando polo permiso do repetidor
       save_and_enable: Gardar e activar
       setup: Configurar a conexión ao repetidor
+      signatures_not_enabled: Os repetidores non funcionarán correctamente se o modo seguro ou lista branca están activados
       status: Estado
       title: Repetidores
     report_notes:
@@ -501,6 +506,9 @@ gl:
         desc_html: Mostrar liña de tempo pública na páxina de inicio
         title: vista previa da liña temporal
       title: Axustes do sitio
+      trendable_by_default:
+        desc_html: Afecta a etiquetas que non foron rexeitadas previamente
+        title: Permite as etiquetas ser tendencia sen revisión previa
       trends:
         desc_html: Mostrar públicamente etiquetas previamente revisadas que actualmente son tendencia
         title: Etiquetas Tendencia
@@ -827,13 +835,16 @@ gl:
     past_migrations: Migracións pasadas
     proceed_with_move: Mover seguidoras
     redirecting_to: A conta está redirixindo cara a %{acct}.
+    set_redirect: Establecer redirección
     warning:
       backreference_required: Tes que configurar primeiro a nova conta para referenciar hacia esta
       before: 'Antes de seguir, por favor lé estas notas con atención:'
       cooldown: Tras a migración existe un período de calma durante o cal non poderás voltar a migrar de novo
       disabled_account: Tras o cambio a túa conta actual non será totalmente usable, pero terás acceso a exportar os datos e tamén a reactivación.
       followers: Esta acción moverá todas as túas seguidoras desde a conta actual a nova conta
+      only_redirect_html: De xeito alternativo, podes <a href="%{path}">simplemente por unha redirección no perfil</a>.
       other_data: Non se moverán outros datos de xeito automático
+      redirect: O perfil da túa conta actualizarase cun aviso de redirección e será excluído das buscas
   moderation:
     title: Moderación
   notification_mailer:
@@ -996,8 +1007,6 @@ gl:
     profile: Perfil
     relationships: Seguindo e seguidoras
     two_factor_authentication: Validar Dobre Factor
-  spam_check:
-    spam_detected_and_silenced: Esto é un informe automático. Detectouse spam e o remitente foi bloqueado automáticamente. Se o considera un fallo, por favor desbloquee a conta.
   statuses:
     attached:
       description: 'Axenado: %{attached}'
@@ -1021,6 +1030,9 @@ gl:
       private: As mensaxes non-públicas non poden ser fixadas
       reblog: Non se poden fixar as mensaxes promovidas
     poll:
+      total_people:
+        one: "%{count} persoa"
+        other: "%{count} persoas"
       total_votes:
         one: "%{count} voto"
         other: "%{count} votos"
diff --git a/config/locales/he.yml b/config/locales/he.yml
index f7b121777..50db571dc 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -9,7 +9,6 @@ he:
     contact_missing: ללא הגדרה
     contact_unavailable: לא רלוונטי/חסר
     documentation: תיעוד
-    generic_description: "%{domain} הוא שרת אחד בתוך הרשת"
     hosted_on: מסטודון שיושב בכתובת %{domain}
     learn_more: מידע נוסף
     source_code: קוד מקור
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index c1222018d..af7048ebb 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -18,7 +18,6 @@ hu:
     discover_users: Találj meg másokat
     documentation: Dokumentáció
     federation_hint_html: Egy %{instance} fiókkal bármely más Mastodon szerveren vagy a föderációban lévő felhasználót követni tudsz.
-    generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban"
     get_apps: Próbálj ki egy mobil appot
     hosted_on: "%{domain} Mastodon szerver"
     instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás.
@@ -37,6 +36,7 @@ hu:
     terms: Felhasználási feltételek
     unavailable_content: A tartalom nem elérhető
     unavailable_content_description:
+      domain: Szerver
       reason: 'Indok:'
       rejecting_media: A szerverről származó médiafájlok nem kerülnek feldolgozásra, és nem jelennek meg miniatűrök, amelyek kézi átkattintást igényelnek a másik szerverre.
       silenced: A szerver hozzászólásai csak a saját hírvonalon jelennek meg, ha követik a szerzőt.
@@ -239,11 +239,14 @@ hu:
       delete: Törlés
       destroyed_msg: Emoji törlése sikeres!
       disable: Letiltás
+      disabled: Letiltva
       disabled_msg: Emoji letiltva
       emoji: Emoji
       enable: Engedélyezés
+      enabled: Engedélyezve
       enabled_msg: Emoji engedélyezve
       image_hint: PNG (maximális méret 50KB)
+      list: Listázás
       listed: Listázva
       new:
         title: Új egyedi emoji hozzáadása
@@ -252,6 +255,7 @@ hu:
       shortcode_hint: Legalább két karakter, csak betűk, számok és alsóvonás
       title: Egyedi emojik
       uncategorized: Nem kategorizált
+      unlist: Elrejtés a listáról
       unlisted: Nincs listázva
       update_failed_msg: Nem sikerült frissíteni az emojit
       updated_msg: Emoji sikeresen frissítve!
@@ -383,6 +387,7 @@ hu:
       pending: Várakozás a relé jóváhagyására
       save_and_enable: Mentés és engedélyezés
       setup: Relé kapcsolat felállítása
+      signatures_not_enabled: A relék nem fognak jól működni, amíg a biztonságos mód vagy az engedélyező listás mód aktív
       status: Állapot
       title: Relék
     report_notes:
@@ -827,13 +832,16 @@ hu:
     past_migrations: Eddigi költözések
     proceed_with_move: Követők átköltöztetése
     redirecting_to: A fiókod át van irányítva ide %{acct}.
+    set_redirect: Átirányítás beállítása
     warning:
       backreference_required: Az új fiókot először be kell úgy állítani, hogy ezt visszahivatkozza
       before: 'Mielőtt továbbmész, olvasd el ezeket kérlek figyelmesen:'
       cooldown: A költözés után van egy türelmi idő, mely alatt nem tudsz majd újra költözni
       disabled_account: A jelenlegi fiókod nem lesz teljesen használható ezután. Viszont elérhető lesz majd az adatexport funkció, valamint a reaktiválás is.
       followers: Ez a művelet az összes követődet a jelenlegi fiókról az újra fogja költöztetni
+      only_redirect_html: Az is lehetséges, hogy <a href="%{path}">csak átirányítást raksz a profilodra</a>.
       other_data: Más adatot nem fogunk automatikusan mozgatni
+      redirect: A jelenlegi fiókod profiljára átirányításról szóló figyelmeztetést rakunk, valamint már nem fogjuk mutatni a keresésekben
   moderation:
     title: Moderáció
   notification_mailer:
@@ -996,8 +1004,6 @@ hu:
     profile: Profil
     relationships: Követések és követők
     two_factor_authentication: Kétlépcsős azonosítás
-  spam_check:
-    spam_detected_and_silenced: Ez egy automatikus bejelentés. Spamet érzékeltünk, így a küldőt automatikusan elnémítottuk. Ha ez hiba, oldd fel a némítást.
   statuses:
     attached:
       description: 'Csatolva: %{attached}'
@@ -1021,6 +1027,9 @@ hu:
       private: Csak nyilvános tülköt tűzhetsz ki
       reblog: Megtolt tülköt nem tudsz kitűzni
     poll:
+      total_people:
+        one: "%{count} személy"
+        other: "%{count} személy"
       total_votes:
         one: "%{count} szavazat"
         other: "%{count} szavazat"
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 38cb4e95d..572769a5a 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -18,7 +18,6 @@ id:
     discover_users: Temukan pengguna
     documentation: Dokumentasi
     federation_hint_html: Dengan akun di %{instance} Anda dapat mengikuti orang di server Mastodon mana pun dan di luarnya.
-    generic_description: "%{domain} adalah satu server dalam jaringan"
     get_apps: Coba aplikasi mobile
     hosted_on: Mastodon dihosting di %{domain}
     instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain.
@@ -145,6 +144,7 @@ id:
       no_limits_imposed: Tidak ada batasan
       not_subscribed: Tidak berlangganan
       outbox_url: URL Kotak keluar
+      pending: Tinjauan tertunda
       perform_full_suspension: Lakukan suspen penuh
       profile_url: URL profil
       promote: Promosikan
@@ -193,7 +193,54 @@ id:
     action_logs:
       actions:
         assigned_to_self_report: "%{name} menugaskan laporan %{target} kpd dirinya sendiri"
+        change_email_user: "%{name} mengubah alamat surel pengguna %{target}"
+        confirm_user: "%{name} mengonfirmasi alamat surel pengguna %{target}"
+        create_account_warning: "%{name} mengirim peringatan untuk %{target}"
+        create_custom_emoji: "%{name} mengunggah emoji baru %{target}"
+        create_domain_block: "%{name} memblokir domain %{target}"
+        create_email_domain_block: "%{name} memasukkan ke daftar hitam domain surel %{target}"
+        demote_user: "%{name} menurunkan pengguna %{target}"
+        destroy_custom_emoji: "%{name} menghapus emoji %{target}"
+        destroy_domain_block: "%{name} membuka blokir domain %{target}"
+        destroy_email_domain_block: "%{name} memasukkan ke daftar putih surel domain %{target}"
+        disable_2fa_user: "%{name} mematikan syarat dua faktor utk pengguna %{target}"
+        disable_custom_emoji: "%{name} mematikan emoji %{target}"
+        disable_user: "%{name} mematikan login untuk pengguna %{target}"
+        enable_custom_emoji: "%{name} mengaktifkan emoji %{target}"
+        enable_user: "%{name} mengaktifkan login untuk pengguna %{target}"
+        memorialize_account: "%{name} mengubah akun %{target} jadi halaman memorial"
+        promote_user: "%{name} mempromosikan pengguna %{target}"
+        remove_avatar_user: "%{name} menghapus avatar %{target}"
+        reopen_report: "%{name} membuka ulang laporan %{target}"
+        reset_password_user: "%{name} mereset kata sandi pengguna %{target}"
+        resolve_report: "%{name} menyelesaikan laporan %{target}"
+        silence_account: "%{name} membungkam akun %{target}"
+        suspend_account: "%{name} menangguhkan akun %{target}"
+        unassigned_report: "%{name} tidak menugaskan laporan %{target}"
+        unsilence_account: "%{name} menghapus bungkaman akun %{target}"
+        unsuspend_account: "%{name} menghapus penangguhan akun %{target}"
+        update_custom_emoji: "%{name} memperbarui emoji %{target}"
+      deleted_status: "(status dihapus)"
+      title: Log audit
     custom_emojis:
+      assign_category: Beri kategori
+      by_domain: Domain
+      copied_msg: Pembuatan salinan lokal emoji berhasil
+      copy: Salin
+      copy_failed_msg: Tidak dapat membuat salinan lokal emoji
+      create_new_category: Buat kategori baru
+      created_msg: Emoji berhasil dibuat!
+      delete: Hapus
+      destroyed_msg: Emoji berhasil dihapus!
+      disable: Matikan
+      disabled: Dinonaktifkan
+      disabled_msg: Emoji berhasil dinonaktifkan
+      emoji: Emoji
+      enable: Aktifkan
+      enabled: Diaktifkan
+      enabled_msg: Emoji berhasil diaktifkan
+      image_hint: PNG hingga 50KB
+      list: Daftar
       listed: Terdaftar
       new:
         title: Tambah emoji kustom baru
@@ -209,6 +256,7 @@ id:
       upload: Unggah
     dashboard:
       authorized_fetch_mode: Mode aman
+      backlog: pekerjaan di-backlog
       config: Konfigurasi
       feature_deletions: Penghapusan akun
       feature_invites: Tautan undangan
@@ -222,20 +270,49 @@ id:
       open_reports: buka laporan
       pending_tags: tagar menunggu ditinjau
       pending_users: pengguna menunggu ditinjau
+      recent_users: Pengguna terbaru
+      search: Pencarian teks lengkap
+      single_user_mode: Mode pengguna tunggal
+      software: Perangkat lunak
+      space: Penggunaan ruang
+      title: Dasbor
+      total_users: total pengguna
+      trends: Tren
+      week_interactions: interaksi minggu ini
+      week_users_active: aktif minggu ini
+      week_users_new: pengguna minggu ini
+      whitelist_mode: Mode daftar putih
+    domain_allows:
+      add_new: Daftar putihkan domain
+      created_msg: Domain berhasil masuk daftar putih
+      destroyed_msg: Domain dihapus dari daftar putih
+      undo: Hapus dari daftar putih
     domain_blocks:
       add_new: Tambah
       created_msg: Pemblokiran domain sedang diproses
       destroyed_msg: Pemblokiran domain telah dibatalkan
+      domain: Domain
+      edit: Edit blok domain
+      existing_domain_block_html: Anda telah menerapkan batasan yang lebih ketat pada %{name}, Anda harus <a href="%{unblock_url}">membuka blokirnya</a> lebih dulu.
       new:
         create: Buat pemblokiran
         hint: Pemblokiran domain tidak akan menghentikan pembuatan akun dalam database, tapi kami akan memberikan moderasi otomatis pada akun-akun tersebut.
         severity:
           desc_html: "<strong>Pendiaman</strong> akan membuat semua postingan tidak dapat dilihat oleh semua orang yang tidak mengikutinya. <strong>Suspen</strong> akan menghapus semua konten, media, dan profil dari akun yang bersangkutan."
+          noop: Tidak ada
           silence: Pendiaman
           suspend: Suspen
         title: Pemblokiran domain baru
+      private_comment: Komentar pribadi
+      public_comment: Komentar publik
       reject_media: Tolak berkas media
       reject_media_hint: Hapus file media yang tersimpan dan menolak semua unduhan nantinya. Tidak terpengaruh dengan suspen
+      reject_reports: Tolak laporan
+      reject_reports_hint: Abaikan semua laporan dari domain ini. Tidak relevan untuk penangguhan
+      rejecting_media: tolak berkas media
+      severity:
+        silence: dibungkam
+        suspend: ditangguhkan
       show:
         affected_accounts:
           other: "%{count} akun dalam database terpengaruh"
@@ -243,22 +320,111 @@ id:
           silence: Hapus pendiaman terhadap akun pada domain ini
           suspend: Hapus suspen terhadap akun pada domain ini
         title: Hapus pemblokiran domain %{domain}
+        undo: Urungkan
+      undo: Urungkan blokir domain
+      view: Lihat blokir domain
+    email_domain_blocks:
+      add_new: Tambah baru
+      created_msg: Berhasil menambahkan domain surel ke daftar hitam
+      delete: Hapus
+      destroyed_msg: Berhasil menghapus domain surel dari daftar hitam
+      domain: Domain
+      new:
+        create: Tambah domain
+        title: Entri daftar hitam surel baru
+      title: Daftar hitam surel
+    followers:
+      back_to_account: Kembali Ke Akun
+      title: Pengikut %{acct}
     instances:
+      by_domain: Domain
+      delivery_available: Pengiriman tersedia
+      moderation:
+        all: Semua
+        limited: Terbatas
+        title: Moderasi
+      private_comment: Komentar pribadi
+      public_comment: Komentar publik
       title: Server yang diketahui
+      total_blocked_by_us: Yang kita blokir
+      total_followed_by_them: Diikuti mereka
+      total_followed_by_us: Diikuti kita
+      total_storage: Lampiran media
+    invites:
+      deactivate_all: Nonaktifkan semua
+      filter:
+        all: Semua
+        available: Tersedia
+        expired: Kedaluwarsa
+        title: Saring
+      title: Undang
+    pending_accounts:
+      title: Akun tertunda (%{count})
+    relays:
+      add_new: Tambah relai baru
+      delete: Hapus
+      disable: Matikan
+      disabled: Dimatikan
+      enable: Aktifkan
+      enable_hint: Saat diaktifkan, server Anda akan melanggan semua toot publik dari relai ini, dan akan mengirim toot publik server ini ke sana.
+      enabled: Diaktifkan
+      inbox_url: URL Relai
+      pending: Menunggu persetujuan relai
+      save_and_enable: Simpan dan aktifkan
+      setup: Atur koneksi relai
+      signatures_not_enabled: Relai tak akan bekerja dengan benar saat mode aman atau mode daftar putih diaktifkan
+      status: Status
+      title: Relai
+    report_notes:
+      created_msg: Catatan laporan berhasil dibuat!
+      destroyed_msg: Catatan laporan berhasil dihapus!
     reports:
+      account:
+        note: catatan
+        report: lapor
+      action_taken_by: Aksi dilakukan oleh
+      are_you_sure: Apakah Anda yakin?
+      assign_to_self: Tugaskan kpd saya
+      assigned: Moderator tertugas
       comment:
         none: Tidak ada
+      created_at: Dilaporkan
       mark_as_resolved: Tandai telah diseleseikan
+      mark_as_unresolved: Tandai belum terselesaikan
+      notes:
+        create: Tambah catatan
+        create_and_resolve: Diselesaikan dengan catatan
+        create_and_unresolve: Dibuka kembali dengan catatan
+        delete: Hapus
+        placeholder: Jelaskan aksi yang telah dilakukan, atau pembaruan lain yang berhubungan...
+      reopen: Buka lagi laporan
       report: 'Laporkan #%{id}'
       reported_account: Akun yang dilaporkan
       reported_by: Dilaporkan oleh
       resolved: Terseleseikan
+      resolved_msg: Laporan berhasil diselesaikan!
+      status: Status
       title: Laporan
       unresolved: Belum Terseleseikan
+      updated_at: Diperbarui
     settings:
+      activity_api_enabled:
+        desc_html: Hitung status yang dipos scr lokal, pengguna aktif, dan registrasi baru dlm keranjang bulanan
+        title: Terbitkan statistik keseluruhan tentang aktivitas pengguna
+      bootstrap_timeline_accounts:
+        desc_html: Pisahkan nama pengguna dengan koma. Hanya akun lokal dan tak terkunci yang akan bekerja. Isi bawaan jika kosong adalah semua admin lokal.
+        title: Ikuti scr bawaan untuk pengguna baru
       contact_information:
         email: Masukkan alamat email
         username: Masukkan nama pengguna
+      custom_css:
+        desc_html: Ubah tampilan dengan CSS yang dimuat di setiap halaman
+        title: CSS Kustom
+      default_noindex:
+        title: Singkirkan pengguna dari pengindeksan mesin pencari scr bawaan
+      domain_blocks:
+        all: Kepada semua orang
+        title: Lihat blokir domain
       registrations:
         closed_message:
           desc_html: Ditampilkan pada halaman depan saat pendaftaran ditutup<br>Anda bisa menggunakan tag HTML
@@ -271,7 +437,51 @@ id:
         title: Deskripsi situs tambahan
       site_title: Judul Situs
       title: Pengaturan situs
+    statuses:
+      batch:
+        nsfw_off: Tandai sebagai tak sensitif
+        nsfw_on: Tandai sebagai sensitif
+      deleted: Dihapus
+      failed_to_execute: Gagal mengeksekusi
+      media:
+        title: Media
+      no_media: Tanpa media
+      no_status_selected: Tak ada status yang berubah karena tak ada yang dipilih
+      title: Status akun
+      with_media: Dengan media
+    tags:
+      accounts_today: Penggunaan unik hari ini
+      accounts_week: Penggunaan unik minggu ini
+      breakdown: Rinci penggunaan hari ini berdasar sumber
+      context: Konteks
+      directory: Di direktori
+      in_directory: "%{count} di direktori"
+      last_active: Terakhir aktif
+      most_popular: Paling populer
+      most_recent: Terkini
+      name: Tagar
+      review: Tinjau status
+      reviewed: Ditinjau
+      title: Tagar
+      trending_right_now: Sedang tren sekarang
+      unique_uses_today: "%{count} memposkan hari ini"
+      unreviewed: Tak tertinjau
+      updated_msg: Pembaruan pengaturan tagar berhasil
     title: Administrasi
+    warning_presets:
+      add_new: Tambah baru
+      delete: Hapus
+      edit: Sunting
+      edit_preset: Sunting preset peringatan
+      title: Kelola preset peringatan
+  admin_mailer:
+    new_pending_account:
+      body: Detail akun baru di bawah. Anda dapat menyetujui atau menolak lamaran ini.
+      subject: Akun baru muncul untuk ditinjau di %{instance} (%{username})
+    new_report:
+      body: "%{reporter} telah melaporkan %{target}"
+      body_remote: Seseorang dari %{domain} telah melaporkan %{target}
+      subject: Laporan baru untuk %{instance} (#%{id})
   application_mailer:
     settings: 'Ubah pilihan email: %{link}'
     view: 'Tampilan:'
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 447ac4a1e..f35c717a6 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -18,7 +18,6 @@ it:
     discover_users: Scopri utenti
     documentation: Documentazione
     federation_hint_html: Con un account su %{instance} sarai in grado di seguire persone su qualsiasi server Mastodon e oltre.
-    generic_description: "%{domain} è un server nella rete"
     get_apps: Prova un'app per smartphone
     hosted_on: Mastodon ospitato su %{domain}
     instance_actor_flash: |
@@ -943,8 +942,6 @@ it:
     profile: Profilo
     relationships: Follows e followers
     two_factor_authentication: Autenticazione a due fattori
-  spam_check:
-    spam_detected_and_silenced: Questa è una segnalazione automatica. É stato rilevato dello spam e il mittente è stato automaticamente silenziato. Se fosse un errore, per favore annulla questa operazione sull'account.
   statuses:
     attached:
       description: 'Allegato: %{attached}'
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 00e27d4ae..f7d66b2ce 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -18,7 +18,6 @@ ja:
     discover_users: ユーザーを見つける
     documentation: ドキュメント
     federation_hint_html: "%{instance} のアカウントひとつでどんなMastodon互換サーバーのユーザーでもフォローできるでしょう。"
-    generic_description: "%{domain} は、Mastodon サーバーの一つです"
     get_apps: モバイルアプリを試す
     hosted_on: Mastodon hosted on %{domain}
     instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。
@@ -244,7 +243,7 @@ ja:
       enabled_msg: 絵文字を有効化しました
       image_hint: 50KBまでのPNG画像を利用できます
       list: 表示
-      listed: 収載
+      listed: 表示
       new:
         title: 新規カスタム絵文字の追加
       overwrite: 上書き
@@ -473,8 +472,8 @@ ja:
           open: 誰でも登録可
         title: 新規登録
       show_known_fediverse_at_about_page:
-        desc_html: チェックを入れるとプレビュー欄に既知の連合先全てのトゥートを表示します。外すとローカルのトゥートだけ表示します。
-        title: タイムラインプレビューに連合タイムラインを表示する
+        desc_html: チェックを外すと、ランディングページからリンクされた公開タイムラインにローカルの公開トゥートのみ表示します。
+        title: 公開タイムラインに連合先のコンテンツも表示する
       show_staff_badge:
         desc_html: ユーザーページにスタッフのバッジを表示します
         title: スタッフバッジを表示する
@@ -492,15 +491,18 @@ ja:
         title: カスタム利用規約
       site_title: サーバーの名前
       spam_check_enabled:
-        desc_html: 迷惑なメッセージを繰り返し送信するアカウントを自動でサイレンスにし通報することができます。誤検知を含む可能性があります。
+        desc_html: 迷惑なメッセージを繰り返し送信するアカウントを自動で通報することができます。誤検知を含む可能性があります。
         title: スパム対策を有効にする
       thumbnail:
         desc_html: OpenGraphとAPIによるプレビューに使用されます。サイズは1200×630px推奨です
         title: サーバーのサムネイル
       timeline_preview:
-        desc_html: ランディングページに公開タイムラインを表示します
-        title: タイムラインプレビュー
+        desc_html: ランディングページに公開タイムラインへのリンクを表示し、認証なしでの公開タイムラインへの API アクセスを許可します
+        title: 公開タイムラインへの未認証のアクセスを許可する
       title: サイト設定
+      trendable_by_default:
+        desc_html: 表示を拒否していないハッシュタグに影響します
+        title: 審査前のハッシュタグのトレンドへの表示を許可する
       trends:
         desc_html: 現在トレンドになっている承認済みのハッシュタグを公開します
         title: トレンドタグを有効にする
@@ -659,7 +661,7 @@ ja:
     success_msg: アカウントは正常に削除されました
     warning:
       before: '続行する前に、次の点を再度確認してください:'
-      caches: 削除しても他のサーバーに残り続ける場合があります
+      caches: 他のサーバーにコンテンツのキャッシュがずっと残る場合があります
       data_removal: あなたの投稿やその他のデータはこのサーバーから完全に削除されます
       email_change_html: アカウントを削除しなくても<a href="%{path}">メールアドレスを変更</a>できます
       email_contact_html: それでも届かない場合、<a href="mailto:%{email}">%{email}</a> までメールで問い合わせてください
@@ -737,7 +739,7 @@ ja:
     all: すべて
     changes_saved_msg: 正常に変更されました!
     copy: コピー
-    no_batch_actions_available: 利用可能なバッチアクションはありません
+    no_batch_actions_available: このページに一括操作はありません
     order_by: 並び順
     save_changes: 変更を保存
     use_this: これを使う
@@ -789,7 +791,7 @@ ja:
       '604800': 1 週間
       '86400': 1 日
     expires_in_prompt: 無期限
-    generate: 作成
+    generate: 招待リンクを作成
     invited_by: '次の人に招待されました:'
     max_uses:
       other: "%{count}"
@@ -998,7 +1000,7 @@ ja:
     relationships: フォロー・フォロワー
     two_factor_authentication: 二段階認証
   spam_check:
-    spam_detected_and_silenced: これは自動通報です。スパムが検出されたため、当該送信者は自動的にサイレンスに設定されました。もしこれが誤りである場合、アカウントのサイレンスを解除してください。
+    spam_detected: これは自動的に作成された通報です。スパムが検出されています。
   statuses:
     attached:
       description: '添付: %{attached}'
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index c921fa56f..0ab1f2d69 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -11,7 +11,6 @@ ka:
     contact_missing: არაა დაყენებული
     contact_unavailable: მიუწ.
     documentation: დოკუმენტაცია
-    generic_description: "%{domain} ერთი სერვერია ქსელში"
     hosted_on: მასტოდონს მასპინძლობს %{domain}
     learn_more: გაიგე მეტი
     privacy_policy: კონფიდენციალურობის პოლიტიკა
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index 84cbdd294..49cc18a4c 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -10,7 +10,6 @@ kk:
     contact_missing: Бапталмаған
     contact_unavailable: Белгісіз
     documentation: Құжаттама
-    generic_description: "%{domain} желідегі серверлердің бірі"
     hosted_on: Mastodon орнатылған %{domain} доменінде
     learn_more: Көбірек білу
     privacy_policy: Құпиялылық саясаты
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 82e20e04f..bae3d69bc 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -1,7 +1,7 @@
 ---
 ko:
   about:
-    about_hashtag_html: "<strong>#%{hashtag}</strong> 라는 해시태그가 붙은 공개 툿 입니다. 같은 연합에 속한 임의의 인스턴스에 계정을 생성하면 당신도 대화에 참여할 수 있습니다."
+    about_hashtag_html: "<strong>#%{hashtag}</strong> 해시태그가 붙은 공개 툿 입니다. 같은 연합에 속한 임의의 인스턴스에 계정을 생성하면 당신도 대화에 참여할 수 있습니다."
     about_mastodon_html: 마스토돈은 <em>오픈 소스 기반의</em> 소셜 네트워크 서비스 입니다. 상용 플랫폼의 대체로서 <em>분산형 구조</em>를 채택해, 여러분의 대화가 한 회사에 독점되는 것을 방지합니다. 신뢰할 수 있는 인스턴스를 선택하세요 &mdash; 어떤 인스턴스를 고르더라도, 누구와도 대화할 수 있습니다. 누구나 자신만의 마스토돈 인스턴스를 만들 수 있으며, 아주 매끄럽게 <em>소셜 네트워크</em>에 참가할 수 있습니다.
     about_this: 이 인스턴스에 대해서
     active_count_after: 활성 사용자
@@ -18,7 +18,6 @@ ko:
     discover_users: 유저 발견하기
     documentation: 문서
     federation_hint_html: "%{instance}에 계정을 만드는 것으로 모든 마스토돈 서버, 그리고 호환 되는 모든 서버의 사용자를 팔로우 할 수 있습니다."
-    generic_description: "%{domain} 은 네트워크에 있는 한 서버입니다"
     get_apps: 모바일 앱 사용해 보기
     hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
     instance_actor_flash: |
@@ -463,7 +462,7 @@ ko:
           desc_html: 신규 등록을 받지 않을 때 프론트 페이지에 표시됩니다. HTML 태그를 사용할 수 있습니다
           title: 신규 등록 정지 시 메시지
         deletion:
-          desc_html: 유저가 자신의 계정을 삭제할 수 있도록 설정합니다
+          desc_html: 유저가 자신의 계정을 삭제할 수 있도록 허용합니다
           title: 계정 삭제를 허가함
         min_invite_role:
           disabled: 아무도 못 하게
@@ -503,6 +502,9 @@ ko:
         desc_html: 랜딩 페이지에 공개 타임라인을 표시합니다
         title: 타임라인 프리뷰
       title: 사이트 설정
+      trendable_by_default:
+        desc_html: 이전에 비허용 되지 않은 해시태그들에 영향을 미칩니다
+        title: 해시태그가 사전 리뷰 없이 트렌드에 올라갈 수 있도록 허용
       trends:
         desc_html: 리뷰를 거친 해시태그를 유행하는 해시태그에 공개적으로 보여줍니다
         title: 유행하는 해시태그
@@ -554,7 +556,7 @@ ko:
       body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다"
       subject: "%{instance} 에 새 신고 등록됨 (#%{id})"
     new_trending_tag:
-      body: "#%{name}가 오늘 유행하고 있습니다, 하지만 심사 된 적이 없습니다. 허용하지 않는 한 공개적으로 나타나지 않습니다. 또는 그냥 저장을 눌러 더이상 나타나지 않게 할 수 있습니다."
+      body: '오늘 #%{name} 해시태그가 유행하고 있습니다, 하지만 심사 된 적이 없습니다. 허용하지 않는 한 공개적으로 나타나지 않습니다. 또는 그냥 저장을 눌러 더이상 나타나지 않게 할 수 있습니다.'
       subject: 새 해시태그가 %{instance}에서 심사 대기 중입니다(#%{name})
   aliases:
     add_new: 별칭 만들기
@@ -997,8 +999,6 @@ ko:
     profile: 프로필
     relationships: 팔로잉과 팔로워
     two_factor_authentication: 2단계 인증
-  spam_check:
-    spam_detected_and_silenced: 이것은 자동화 된 보고입니다. 스팸이 감지 되어 작성자를 자동으로 침묵 처리하였습니다. 만약 실수였다면 계정을 침묵 해제하세요.
   statuses:
     attached:
       description: '첨부: %{attached}'
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index e1471eed0..7a09bee59 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -9,7 +9,6 @@ lt:
     contact: Kontaktai
     contact_missing: Nenustatyta
     documentation: Dokumentacija
-    generic_description: "%{domain} yra vienas serveris tinkle"
     hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu
     learn_more: Daugiau
     privacy_policy: Privatumo Politika
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index b77a1fd92..d824aed60 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -10,7 +10,6 @@ ms:
     contact_missing: Tidak ditetapkan
     contact_unavailable: Tidak tersedia
     documentation: Pendokumenan
-    generic_description: "%{domain} ialah salah sebuah pelayan dalam rangkaian Mastodon"
     hosted_on: Mastodon dihoskan di %{domain}
     learn_more: Ketahui lebih lanjut
     privacy_policy: Polisi privasi
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 1a2b158ca..2c9e42b33 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -18,7 +18,6 @@ nl:
     discover_users: Gebruikers ontdekken
     documentation: Documentatie
     federation_hint_html: Met een account op %{instance} ben je in staat om mensen die zich op andere Mastodonservers (en op andere plekken) bevinden te volgen.
-    generic_description: "%{domain} is een server in het Mastodonnetwerk"
     get_apps: Mobiele apps
     hosted_on: Mastodon op %{domain}
     instance_actor_flash: 'Dit account is een virtuel actor die wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wil blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken.
@@ -479,8 +478,8 @@ nl:
           open: Iedereen kan zich registreren
         title: Registratiemodus
       show_known_fediverse_at_about_page:
-        desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdljn.
-        title: De globale tijdlijn op de voorpagina tonen
+        desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdlijn
+        title: De globale tijdlijn op de openbare tijdlijnpagina tonen
       show_staff_badge:
         desc_html: Medewerkersbadge op profielpagina tonen
         title: Medewerkersbadge tonen
@@ -504,8 +503,8 @@ nl:
         desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen
         title: Thumbnail Mastodonserver
       timeline_preview:
-        desc_html: Toon een openbare tijdlijn op de voorpagina
-        title: Tijdlijn op de voorpagina tonen
+        desc_html: Toon een link naar de openbare tijdlijnpagina op de voorpagina en geef de API zonder in te loggen toegang tot de openbare tijdlijn
+        title: Toegang tot de openbare tijdlijn zonder in te loggen toestaan
       title: Server-instellingen
       trends:
         desc_html: Eerder beoordeelde hashtags die op dit moment trending zijn openbaar tonen
@@ -795,7 +794,7 @@ nl:
       '604800': 1 week
       '86400': 1 dag
     expires_in_prompt: Nooit
-    generate: Genereren
+    generate: Uitnodigingslink genereren
     invited_by: 'Jij bent uitgenodigd door:'
     max_uses:
       one: 1 keer
@@ -1005,8 +1004,6 @@ nl:
     profile: Profiel
     relationships: Volgers en gevolgden
     two_factor_authentication: Tweestapsverificatie
-  spam_check:
-    spam_detected_and_silenced: Dit is een automatisch gegenereerde rapportage. Er is spam gedetecteerd en de verzender hiervan werd automatisch genegeerd. Wanneer dit een vergissing is, kun je het negeren van dit account beter weer ongedaan maken.
   statuses:
     attached:
       description: 'Bijlagen: %{attached}'
diff --git a/config/locales/no.yml b/config/locales/no.yml
index c6b9605b3..fa40975a7 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -7,7 +7,6 @@
     contact: Kontakt
     contact_missing: Ikke innstilt
     contact_unavailable: Ikke tilgjengelig
-    generic_description: "%{domain} er en tjener i nettverket"
     hosted_on: Mastodon driftet på %{domain}
     learn_more: Lær mer
     source_code: Kildekode
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 819ea3ef6..bd19401ed 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -18,7 +18,6 @@ oc:
     discover_users: Descobrissètz de nòvas personas
     documentation: Documentacion
     federation_hint_html: Amb un compte sus %{instance} poiretz sègre de personas de qualque siasque servidor Mastodon e encara mai.
-    generic_description: "%{domain} es un dels servidors del malhum"
     get_apps: Ensajatz una aplicacion mobil
     hosted_on: Mastodon albergat sus %{domain}
     learn_more: Ne saber mai
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index af3a55211..40a8bd993 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -18,7 +18,6 @@ pl:
     discover_users: Odkrywaj użytkowników
     documentation: Dokumentacja
     federation_hint_html: Z kontem na %{instance}, możesz śledzić użytkowników każdego serwera Mastodona i nie tylko.
-    generic_description: "%{domain} jest jednym z serwerów sieci"
     get_apps: Spróbuj aplikacji mobilnej
     hosted_on: Mastodon uruchomiony na %{domain}
     learn_more: Dowiedz się więcej
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 32ea8caf6..bafbcaab3 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -18,7 +18,6 @@ pt-BR:
     discover_users: Descubra usuários
     documentation: Documentação
     federation_hint_html: Com uma conta em %{instance} você vai poder seguir pessoas em qualquer servidor Mastodon ou outros do fediverso.
-    generic_description: "%{domain} é um servidor na rede"
     get_apps: Experimente um aplicativo
     hosted_on: Mastodon hospedado em %{domain}
     learn_more: Saiba mais
@@ -900,8 +899,6 @@ pt-BR:
     profile: Perfil
     relationships: Seguindo e seguidores
     two_factor_authentication: Autenticação em dois passos
-  spam_check:
-    spam_detected_and_silenced: Este é um relatório automatizado. Spam foi detectado e o remetente foi silenciado automaticamente. Se isto for um erro, por favor, desfaça esta ação.
   statuses:
     attached:
       description: 'Anexado: %{attached}'
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index ecca3b845..fe23160a2 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -10,7 +10,6 @@ pt-PT:
     contact_missing: Não configurado
     contact_unavailable: n.d.
     documentation: Documentação
-    generic_description: "%{domain} é um servidor na rede"
     hosted_on: Mastodon em %{domain}
     learn_more: Saber mais
     privacy_policy: Política de privacidade
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 818180086..df4a04048 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -18,7 +18,6 @@ ru:
     discover_users: Находите пользователей
     documentation: Документация
     federation_hint_html: С учётной записью на %{instance} вы сможете подписываться на людей с любого сервера Mastodon и не только.
-    generic_description: "%{domain} - один из серверов сети"
     get_apps: Попробуйте мобильное приложение
     hosted_on: Mastodon размещен на %{domain}
     learn_more: Узнать больше
@@ -582,6 +581,9 @@ ru:
     reset_password: Сбросить пароль
     security: Безопасность
     set_new_password: Задать новый пароль
+    status:
+      functional: Ваш аккаунт в полном порядке.
+      redirecting_to: Ваш аккаунт признан неактивным, потому что он перенаправляет на %{acct}.
     trouble_logging_in: Не удаётся войти?
   authorize_follow:
     already_following: Вы уже подписаны на этот аккаунт
@@ -621,6 +623,7 @@ ru:
       before: 'Внимательно прочитайте следующую информацию перед началом:'
       caches: Содержимое, которое было закэшировано другими серверами, может сохраниться
       data_removal: Ваши записи и прочие данные будут безвозвратно удалены
+      email_change_html: <a href="%{path}">Поменять свой e-mail</a> можно не удаляя аккаунт
       irreversible: Вы не сможете восстановить или повторно активировать свой аккаунт
       username_available: Ваш юзернейм снова станет доступным
       username_unavailable: Ваш юзернейм останется недоступным
@@ -768,11 +771,14 @@ ru:
   migrations:
     acct: имя@домен нового аккаунта
     cancel: Отменить переезд
+    cancel_explanation: Отмена перенаправления повторно активирует аккаунт, но не вернёт обратно подписчиков, которые были перемещены на тот аккаунт.
     cancelled_msg: Переезд был успешно отменён.
     errors:
       on_cooldown: Вы пока не можете переезжать
     followers_count: Подписчиков на момент переезда
     incoming_migrations: Переезд с другого аккаунта
+    moved_msg: Ваш аккаунт теперь перенаправляет на %{acct} и подписчики перемещаются туда.
+    not_redirecting: Ваш аккаунт пока что не перенаправляет на любой другой аккаунт.
     on_cooldown: Вы уже недавно переносили свой аккаунт. Эта возможность будет снова доступна через %{count} дн.
     past_migrations: Прошлые переезды
     proceed_with_move: Перенести подписчиков
@@ -784,6 +790,7 @@ ru:
       disabled_account: Ваш текущий аккаунт впоследствии нельзя будет больше использовать. При этом, у вас будет доступ к экспорту данных, а также к повторной активации аккаунта.
       followers: Это действие перенесёт всех ваших подписчиков с текущего аккаунта на новый
       other_data: Никакие другие данные не будут автоматически перенесены
+      redirect: Профиль этого аккаунта будет обновлён с заметкой о перенаправлении, а также исключён из поиска
   moderation:
     title: Модерация
   notification_mailer:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 27c9e64dc..d1b85d921 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -14,6 +14,7 @@ ar:
         bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا
         context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
         digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
+        discoverable: سِجل الملفات التعريفية للمستخدمين هو طريقة أخرى لبلوغ جمهور أوسع
         email: سوف تتلقى رسالة إلكترونية للتأكيد
         fields: يُمكنك عرض 4 عناصر على شكل جدول في صفحتك التعريفية
         header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
@@ -25,11 +26,14 @@ ar:
         phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى
         scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الاستغناء عن الخَيار اليدوي.
         setting_aggregate_reblogs: لا تقم بعرض المشارَكات الجديدة لتبويقات قد قُمتَ بمشاركتها سابقا (هذا الإجراء يعني المشاركات الجديدة فقط التي تلقيتَها)
+        setting_default_sensitive: تُخفى الوسائط الحساسة تلقائيا ويمكن اظهارها عن طريق النقر عليها
         setting_display_media_default: إخفاء الوسائط المُعيَّنة كحساسة
         setting_display_media_hide_all: إخفاء كافة الوسائط دائمًا
         setting_display_media_show_all: دائمًا عرض الوسائط المُعيَّنة كحساسة
         setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك التعريفية
         setting_noindex: ذلك يؤثر على صفحتك التعريفية وصفحات المنشورات
+        setting_show_application: يتم عرض اسم التطبيق الذي تستخدمه عند التبويق في العرض المفصّل لتبوبيقاتك
+        setting_use_pending_items: إخفاء تحديثات الخط وراء نقرة بدلًا مِن التمرير التلقائي للتدفق
         username: اسم المستخدم الخاص بك سوف يكون فريدا مِن نوعه على %{domain}
       featured_tag:
         name: 'رُبَّما تريد·ين استخدام واحد مِن هذه:'
@@ -133,8 +137,10 @@ ar:
         follow: ابعث بريداً إلكترونيًا عندما يتبعك أحد
         follow_request: ابعث بريدا إلكترونيا عندما يقوم أحدهم بإرسال طلب بالمتابعة
         mention: ابعث بريداً إلكترونيًا عندما يُشير إليك أو يذكُرك أحدهم
+        pending_account: ابعث رسالة إلكترونية إن كان هناك حساب جديد بحاجة إلى مراجعة
         reblog: ابعث بريداً إلكترونيًا عندما يقوم أحدهم بترقية منشورك
         report: إرسال رسالة إلكترونية عند تلقّي إبلاغ جديد
+        trending_tag: ابعث رسالة إلكترونية إن كان هناك وسم متداوَل بحاجة إلى مراجعة
       tag:
         listable: اسمح لهذا الوسم بالظهور في البحث وفي دليل الصفحات التعريفية
         name: الوسم
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 2ce286973..1b7667c84 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -43,7 +43,7 @@ de:
         setting_show_application: Die Anwendung die du nutzst wird in der detaillierten Ansicht deiner Beiträge angezeigt
         setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken irgendwelche Details
         setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken anstatt automatisch zu scrollen
-        username: Dein Profilname wird auf %{domain} einzigartig sein
+        username: Dein Benutzername wird auf %{domain} einzigartig sein
         whole_word: Wenn das Schlagwort nur aus Buchstaben und Zahlen besteht, wird es nur angewendet, wenn es dem ganzen Wort entspricht
       domain_allow:
         domain: Diese Domain kann Daten von diesem Server abrufen und eingehende Daten werden verarbeitet und gespeichert
@@ -84,7 +84,7 @@ de:
           suspend: Deaktivieren und Benutzerdaten unwiderruflich löschen
         warning_preset_id: Benutze eine Warnungsvorlage
       defaults:
-        autofollow: Eingeladene Nutzer_innen sollen dir automatisch folgen
+        autofollow: Eingeladene Nutzer sollen dir automatisch folgen
         avatar: Profilbild
         bot: Dieses Profil ist ein Bot
         chosen_languages: Sprachen filtern
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 53ff05de1..cbce97171 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -2,6 +2,10 @@
 el:
   simple_form:
     hints:
+      account_alias:
+        acct: Ορίστε το username@domain του λογαριασμού από τον οποίο θέλετε να μετακινηθείτε
+      account_migration:
+        acct: Ορίστε το username@domain του λογαριασμού στον οποίο θέλετε να μετακινηθείτε
       account_warning_preset:
         text: Μπορεις να χρησιμοποιήσεις συντακτικό ενός τουτ όπως διευθύνσεις URL, ταμπέλες και αναφορές
       admin_account_action:
@@ -15,6 +19,8 @@ el:
         avatar: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
         bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται
         context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο
+        current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού
+        current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού
         digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου
         discoverable: Ο κατάλογος λογαριασμών είναι ένας ακόμα τρόπος ώστε ο λογαριασμός σου να βρει μεγαλύτερο κοινό
         email: Θα σου σταλεί email επιβεβαίωσης
@@ -43,6 +49,8 @@ el:
         domain: Ο τομέας αυτός θα επιτρέπεται να ανακτά δεδομένα από αυτό τον διακομιστή και τα εισερχόμενα δεδομένα θα επεξεργάζονται και θα αποθηκεύονται
       featured_tag:
         name: 'Ίσως να θες να χρησιμοποιήσεις μια από αυτές:'
+      form_challenge:
+        current_password: Μπαίνεις σε ασφαλή περιοχή
       imports:
         data: Αρχείο CSV που έχει εξαχθεί από διαφορετικό κόμβο Mastodon
       invite_request:
@@ -58,6 +66,10 @@ el:
         fields:
           name: Ταμπέλα
           value: Περιεχόμενο
+      account_alias:
+        acct: Διακριτικό του παλιού λογαριασμού
+      account_migration:
+        acct: Διακριτικό του νέου λογαριασμού
       account_warning_preset:
         text: Προκαθορισμένο κείμενο
       admin_account_action:
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index b6bacde3a..8c2a087c5 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -121,6 +121,8 @@ eo:
         must_be_follower: Bloki sciigojn de nesekvantoj
         must_be_following: Bloki sciigojn de homoj, kiujn vi ne sekvas
         must_be_following_dm: Bloki rektajn mesaĝojn de homoj, kiujn vi ne sekvas
+      invite:
+        comment: Komento
       invite_request:
         text: Kial vi volas aliĝi?
       notification_emails:
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 65fa6c846..471577d79 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -2,6 +2,8 @@
 eu:
   simple_form:
     hints:
+      account_alias:
+        acct: Zehaztu migrazioaren jatorri den kontuaren erabiltzailea@domeinua
       account_warning_preset:
         text: Toot sintaxia erabili dezakezu, URLak, traolak eta aipamenak
       admin_account_action:
@@ -14,6 +16,8 @@ eu:
         avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
         bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen
         context: Iragazkia aplikatzeko testuinguru bat edo batzuk
+        current_password: Segurtasunagatik sartu uneko kontuaren pasahitza
+        current_username: Berresteko sartu uneko kontuaren erabiltzaile-izena
         digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu, besterik ez
         email: Baieztapen e-mail bat bidaliko zaizu
         fields: 4 elementu bistaratu ditzakezu taula batean zure profilean
@@ -38,6 +42,8 @@ eu:
         whole_word: Hitz eta esaldi gakoa alfanumerikoa denean, hitz osoarekin bat datorrenean besterik ez da aplikatuko
       featured_tag:
         name: 'Hauetakoren bat erabili zenezake:'
+      form_challenge:
+        current_password: Zonalde seguruan sartzen ari zara
       imports:
         data: Beste Mastodon zerbitzari batetik esportatutako CSV fitxategia
       invite_request:
@@ -51,9 +57,14 @@ eu:
         fields:
           name: Etiketa
           value: Edukia
+      account_alias:
+        acct: Kontu zaharraren helbidea
+      account_migration:
+        acct: Kontu berriaren helbidea
       account_warning_preset:
         text: Aurrez ezarritako testua
       admin_account_action:
+        include_statuses: Txertatu salatutako toot-ak e-mailean
         send_email_notification: Jakinarazi erabiltzaileari e-mail bidez
         text: Abisu pertsonalizatua
         type: Ekintza
@@ -123,6 +134,8 @@ eu:
         must_be_follower: Blokeatu jarraitzaile ez direnen jakinarazpenak
         must_be_following: Blokeatu zuk jarraitzen ez dituzu horien jakinarazpenak
         must_be_following_dm: Blokeatu zuk jarraitzen ez dituzun horien mezu zuzenak
+      invite:
+        comment: Iruzkina
       invite_request:
         text: Zergatik elkartu nahi duzu?
       notification_emails:
@@ -134,7 +147,10 @@ eu:
         pending_account: Bidali e-mail bat kontu bat berrikusi behar denean
         reblog: Bidali e-mail bat norbaitek zure mezuari bultzada ematen badio
         report: Bidali e-maila txosten berri bat aurkezten denean
+        trending_tag: Bidali e-mail bat errebisatu gabeko traola bat joeran dagoenean
       tag:
+        listable: Baimendu traola hau bilaketetan agertzea eta profilen direktorioan
+        name: Traola
         trendable: Baimendu traola hau joeretan agertzea
         usable: Baimendu toot-ek traola hau erabiltzea
     'no': Ez
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 6bfff0c15..cff0db719 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -3,9 +3,9 @@ fr:
   simple_form:
     hints:
       account_alias:
-        acct: Spécifiez le nom d'utilisateur@domaine du compte que vous souhaitez déplacer
+        acct: Spécifiez le nom d’utilisateur@domaine du compte que vous souhaitez migrer
       account_migration:
-        acct: Spécifiez le nom d'utilisateur@domaine du compte vers lequel vous souhaitez déplacer
+        acct: Spécifiez le nom d’utilisateur@domaine du compte vers lequel vous souhaitez déménager
       account_warning_preset:
         text: Vous pouvez utiliser la syntaxe des pouets, comme les URLs, les hashtags et les mentions
       admin_account_action:
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 869231bdf..500ff7f76 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -39,6 +39,8 @@ th:
         whole_word: เมื่อคำสำคัญหรือวลีมีแค่ตัวอักษรและตัวเลข จะถูกใช้หากตรงกันทั้งคำเท่านั้น
       featured_tag:
         name: 'คุณอาจต้องการใช้หนึ่งในนี้:'
+      form_challenge:
+        current_password: คุณกำลังเข้าสู่พื้นที่ปลอดภัย
       imports:
         data: ไฟล์ CSV ที่ส่งออกจากเซิร์ฟเวอร์ Mastodon อื่น
       invite_request:
@@ -109,6 +111,7 @@ th:
         setting_show_application: เปิดเผยแอปพลิเคชันที่ใช้ในการส่งโพสต์
         setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ
         setting_theme: ชุดรูปแบบไซต์
+        setting_trends: แสดงแนวโน้มของวันนี้
         setting_unfollow_modal: แสดงกล่องโต้ตอบการยืนยันก่อนเลิกติดตามใครสักคน
         setting_use_blurhash: แสดงการไล่ระดับสีที่มีสีสันสำหรับสื่อที่ซ่อนอยู่
         setting_use_pending_items: โหมดช้า
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index abcfa8870..4975035fe 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -18,7 +18,6 @@ sk:
     discover_users: Objavuj užívateľov
     documentation: Dokumentácia
     federation_hint_html: S účtom na %{instance} budeš môcť následovať ľúdí na hociakom Mastodon serveri, ale aj na iných serveroch.
-    generic_description: "%{domain} je jeden server v sieti"
     get_apps: Vyskúšaj aplikácie
     hosted_on: Mastodon hostovaný na %{domain}
     instance_actor_flash: |
@@ -660,7 +659,7 @@ sk:
     proceed: Vymaž účet
     success_msg: Tvoj účet bol úspešne vymazaný
     warning:
-      before: 'Predtým, než budeš pokračovať, prosím pozorne si prečítaj tieto poznámky:'
+      before: 'Než budeš pokračovať, prosím pozorne si prečítaj tieto poznámky:'
       caches: Obsah, ktorý bol predčítaný inými servermi môže zanechať pozostatky
       data_removal: Tvoje príspevky a iné dáta budú natrvalo odstránené
       more_details_html: Pre viac podrobností, pozri <a href="%{terms_path}">zásady súkromia</a>.
@@ -818,6 +817,7 @@ sk:
       missing_also_known_as: neodkazuje spätne na tento účet
       move_to_self: nemôže to byť tvoj súčasný účet
       not_found: nebolo možné nájsť
+      on_cooldown: Si v spánkovom stave
     followers_count: Následovatelia v čase presunu
     incoming_migrations: Presúvam sa z iného účtu
     not_redirecting: Tvoj účet v súčasnosti nepresmerováva na žiaden iný účet.
@@ -826,6 +826,8 @@ sk:
     redirecting_to: Tvoj účet presmerováva na %{acct}.
     set_redirect: Nastav presmerovanie
     warning:
+      backreference_required: Nový účet musí byť najskôr nastavený tak, aby spätne odkazoval na tento
+      before: 'Než budeš pokračovať, prosím pozorne si prečítaj tieto poznámky:'
       other_data: Žiadne iné dáta nebudú presunuté automaticky
   moderation:
     title: Moderovanie
@@ -1093,7 +1095,7 @@ sk:
         suspend: Tvoj účet bol vylúčený
     welcome:
       edit_profile_action: Nastav profil
-      edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a hlavičky, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet.
+      edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a záhlavia, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet.
       explanation: Tu nájdeš nejaké tipy do začiatku
       final_action: Začni prispievať
       final_step: 'Začni písať! Aj bez následovateľov budú tvoje verejné príspevky videné ostatnými, napríklad na miestnej osi a pod haštagmi. Ak chceš, môžeš sa ostatným predstaviť pod haštagom #introductions.'
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 63eed6409..22b58e7b6 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -18,7 +18,6 @@ sl:
     discover_users: Odkrijte uporabnike
     documentation: Dokumentacija
     federation_hint_html: Z računom na %{instance} boste lahko spremljali ljudi na kateremkoli Mastodon strežniku.
-    generic_description: "%{domain} je en strežnik v omrežju"
     get_apps: Poskusite mobilno aplikacijo
     hosted_on: Mastodon gostuje na %{domain}
     instance_actor_flash: |
@@ -896,8 +895,6 @@ sl:
     profile: Profil
     relationships: Sledenja in sledilci
     two_factor_authentication: Dvofaktorsko overjanje
-  spam_check:
-    spam_detected_and_silenced: To je samodejno poročilo. Zaznana je bila neželena pošta in pošiljatelj je bil samodejno utišan. Če je prišlo do napake, prekličite utišanje računa.
   statuses:
     attached:
       description: 'Priloženo: %{attached}'
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index af180e281..ac811b0b0 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -9,7 +9,6 @@ sq:
     contact: Kontakt
     contact_missing: I parregulluar
     documentation: Dokumentim
-    generic_description: "%{domain} është një shërbyes te rrjeti"
     hosted_on: Mastodon i strehuar në %{domain}
     learn_more: Mësoni më tepër
     privacy_policy: Rregulla privatësie
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 44bae34d0..2bddaf311 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -6,7 +6,6 @@ sr-Latn:
     about_this: O instanci
     contact: Kontakt
     contact_missing: Nije postavljeno
-    generic_description: "%{domain} je server na mreži"
     hosted_on: Mastodont hostovan na %{domain}
     learn_more: Saznajte više
     source_code: Izvorni kod
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 4a5d551ef..404310fe9 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -9,7 +9,6 @@ sr:
     contact: Контакт
     contact_missing: Није постављено
     documentation: Документација
-    generic_description: "%{domain} је сервер на мрежи"
     hosted_on: Мастодонт хостован на %{domain}
     learn_more: Сазнајте више
     privacy_policy: Полиса приватности
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 123d8f958..c980b7d05 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -8,7 +8,6 @@ sv:
     api: API
     contact: Kontakt
     contact_missing: Inte inställd
-    generic_description: "%{domain} är en server i nätverket"
     hosted_on: Mastodon värd på %{domain}
     learn_more: Lär dig mer
     source_code: Källkod
@@ -556,6 +555,8 @@ sv:
     notifications: Meddelanden
     preferences: Inställningar
     two_factor_authentication: Tvåstegsautentisering
+  spam_check:
+    spam_detected: Det här är en automatisk rapport. Spam har upptäckts.
   statuses:
     attached:
       description: 'Bifogad: %{attached}'
diff --git a/config/locales/te.yml b/config/locales/te.yml
index ec4846554..526b03b49 100644
--- a/config/locales/te.yml
+++ b/config/locales/te.yml
@@ -10,7 +10,6 @@ te:
     contact_missing: ఇంకా సెట్ చేయలేదు
     contact_unavailable: వర్తించదు
     documentation: పత్రీకరణ
-    generic_description: "%{domain} అనేది నెట్వర్కులోని ఒక సర్వరు"
     hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది
     learn_more: మరింత తెలుసుకోండి
     privacy_policy: గోప్యత విధానము
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 09d81c752..5a56bcd35 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1,7 +1,7 @@
 ---
 th:
   about:
-    about_hashtag_html: มีโพสต์สาธารณะที่ถูกแท็กด้วย <strong>#%{hashtag}</strong> คุณสามารถโต้ตอบได้หากคุณมีบัญชีที่ไหนก็ได้ในเฟดิเวิร์ส
+    about_hashtag_html: มีการแท็กโพสต์สาธารณะเหล่านี้ด้วย <strong>#%{hashtag}</strong> คุณสามารถโต้ตอบกับโพสต์หากคุณมีบัญชีที่ใดก็ตามในเฟดิเวิร์ส
     about_mastodon_html: Mastodon เป็นเครือข่ายสังคมที่ทำงานบนโปรโตคอลเว็บแบบเปิดและซอฟต์แวร์เสรีที่เปิดต้นฉบับ กระจายศูนย์เหมือนอีเมล
     about_this: เกี่ยวกับ
     active_count_after: ที่ใช้งาน
@@ -17,10 +17,9 @@ th:
     contact_unavailable: ไม่มี
     discover_users: ค้นพบผู้ใช้
     documentation: เอกสารประกอบ
-    federation_hint_html: เมื่อคุณมีบัญชีที่ %{instance} แล้ว คุณสามารถติดตามผู้คนบนเซิร์ฟเวอร์ Mastodon เซิร์ฟเวอร์ใดก็ได้
-    generic_description: "%{domain} เป็นเซิร์ฟเวอร์หนึ่งในเครือข่าย"
+    federation_hint_html: ด้วยบัญชีที่ %{instance} คุณจะสามารถติดตามผู้คนในเซิร์ฟเวอร์ Mastodon และอื่น ๆ
     get_apps: ลองแอปสำหรับมือถือ
-    hosted_on: Mastodon ให้บริการบน %{domain}
+    hosted_on: Mastodon ที่โฮสต์ที่ %{domain}
     learn_more: เรียนรู้เพิ่มเติม
     privacy_policy: นโยบายความเป็นส่วนตัว
     see_whats_happening: ดูสิ่งที่กำลังเกิดขึ้น
@@ -28,9 +27,11 @@ th:
     source_code: โค้ดต้นฉบับ
     status_count_after:
       other: สถานะ
-    status_count_before: ผู้ใช้เหล่านั้นได้สร้าง
+    status_count_before: ผู้สร้าง
+    tagline: ติดตามเพื่อน ๆ และค้นพบเพื่อนใหม่ ๆ
     terms: เงื่อนไขการให้บริการ
     unavailable_content_description:
+      domain: เซิร์ฟเวอร์
       reason: 'เหตุผล:'
     user_count_after:
       other: ผู้ใช้
@@ -181,9 +182,11 @@ th:
       delete: ลบ
       destroyed_msg: ทำลายอีโมโจสำเร็จ!
       disable: ปิดใช้งาน
+      disabled: ปิดใช้งานอยู่
       disabled_msg: ปิดใช้งานอีโมจินั้นสำเร็จ
       emoji: อีโมจิ
       enable: เปิดใช้งาน
+      enabled: เปิดใช้งานอยู่
       enabled_msg: เปิดใช้งานอีโมจินั้นสำเร็จ
       image_hint: PNG สูงสุด 50KB
       new:
@@ -263,6 +266,8 @@ th:
         all: ทั้งหมด
         limited: จำกัดอยู่
         title: การควบคุม
+      private_comment: ความคิดเห็นส่วนตัว
+      public_comment: ความคิดเห็นสาธารณะ
       title: การติดต่อกับภายนอก
       total_storage: ไฟล์แนบสื่อ
     invites:
@@ -314,6 +319,8 @@ th:
         username: ชื่อผู้ใช้ในการติดต่อ
       custom_css:
         title: CSS ที่กำหนดเอง
+      domain_blocks:
+        title: แสดงการปิดกั้นโดเมน
       profile_directory:
         title: เปิดใช้งานไดเรกทอรีโปรไฟล์
       registrations:
@@ -349,6 +356,8 @@ th:
         desc_html: แสดงเส้นเวลาสาธารณะในหน้าเริ่มต้น
         title: ตัวอย่างเส้นเวลา
       title: การตั้งค่าไซต์
+      trends:
+        title: แฮชแท็กที่กำลังนิยม
     statuses:
       back_to_account: กลับไปที่หน้าบัญชี
       batch:
@@ -361,9 +370,12 @@ th:
       no_media: ไม่มีสื่อ
       title: สถานะบัญชี
     tags:
+      context: บริบท
+      directory: ในไดเรกทอรี
       in_directory: "%{count} ในไดเรกทอรี"
       name: แฮชแท็ก
       title: แฮชแท็ก
+      trending_right_now: กำลังนิยม
     title: การดูแล
     warning_presets:
       add_new: เพิ่มใหม่
@@ -375,6 +387,7 @@ th:
     advanced_web_interface: ส่วนติดต่อเว็บขั้นสูง
     animations_and_accessibility: ภาพเคลื่อนไหวและการช่วยการเข้าถึง
     confirmation_dialogs: กล่องโต้ตอบการยืนยัน
+    discovery: ค้นพบ
     sensitive_content: เนื้อหาที่ละเอียดอ่อน
   application_mailer:
     notification_preferences: เปลี่ยนการกำหนดลักษณะอีเมล
@@ -389,6 +402,8 @@ th:
   auth:
     apply_for_account: ขอคำเชิญ
     change_password: รหัสผ่าน
+    checkbox_agreement_html: ฉันยอมรับ <a href="%{rules_path}" target="_blank">กฎของเซิร์ฟเวอร์</a> และ <a href="%{terms_path}" target="_blank">เงื่อนไขการให้บริการ</a>
+    checkbox_agreement_without_rules_html: ฉันยอมรับ <a href="%{terms_path}" target="_blank">เงื่อนไขการให้บริการ</a>
     delete_account: ลบบัญชี
     forgot_password: ลืมรหัสผ่านของคุณ?
     login: เข้าสู่ระบบ
@@ -416,6 +431,7 @@ th:
       web: ไปยังเว็บ
     title: ติดตาม %{acct}
   challenge:
+    confirm: ดำเนินการต่อ
     invalid_password: รหัสผ่านไม่ถูกต้อง
     prompt: ยืนยันรหัสผ่านเพื่อดำเนินการต่อ
   datetime:
@@ -452,6 +468,8 @@ th:
     '500':
       title: หน้านี้ไม่ถูกต้อง
     '503': The page could not be served due to a temporary server failure.
+  existing_username_validator:
+    not_found_multiple: ไม่พบ %{usernames}
   exports:
     archive_takeout:
       date: วันที่
@@ -484,6 +502,7 @@ th:
     developers: นักพัฒนา
     more: เพิ่มเติม…
     resources: ทรัพยากร
+    trending_now: กำลังนิยม
   generic:
     all: ทั้งหมด
     changes_saved_msg: บันทึกการเปลี่ยนแปลงสำเร็จ!
@@ -525,6 +544,10 @@ th:
       too_many: ไม่สามารถแนบมากกว่า 4 ไฟล์
   migrations:
     acct: username@domain ของบัญชีใหม่
+    cancel: ยกเลิกการเปลี่ยนเส้นทาง
+    proceed_with_move: ย้ายผู้ติดตาม
+    redirecting_to: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct}
+    set_redirect: ตั้งการเปลี่ยนเส้นทาง
   moderation:
     title: การควบคุม
   notification_mailer:
@@ -639,6 +662,7 @@ th:
     development: การพัฒนา
     edit_profile: แก้ไขโปรไฟล์
     export: การส่งออกข้อมูล
+    featured_tags: แฮชแท็กที่แนะนำ
     import: การนำเข้า
     import_and_export: การนำเข้าและการส่งออก
     notifications: การแจ้งเตือน
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index bdc72c767..7e53e7f2c 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -18,7 +18,6 @@ tr:
     discover_users: Kullanıcıları keşfet
     documentation: Belgeler
     federation_hint_html: "%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz."
-    generic_description: "%{domain} ağdaki bir sunucudur"
     get_apps: Bir mobil uygulamayı deneyin
     hosted_on: Mastodon %{domain} üzerinde barındırılıyor
     instance_actor_flash: |
@@ -208,6 +207,7 @@ tr:
         destroy_custom_emoji: "%{target} emoji, %{name} tarafından kaldırıldı"
         destroy_domain_block: "%{target} alan adının engeli %{name} tarafından kaldırıldı"
         destroy_email_domain_block: "%{target} e-posta sunucusu, %{name} tarafından beyaz listeye alındı"
+        destroy_status: "%{name}, %{target} kullanıcısının durumunu kaldırdı"
         disable_2fa_user: "%{name}, %{target} kullanıcısı için iki adım gereksinimini kapattı"
         disable_custom_emoji: "%{target} emoji, %{name} tarafından devre dışı bırakıldı"
         disable_user: "%{name} %{target} kullanıcısı için oturum açmayı devre dışı bıraktı"
@@ -221,9 +221,11 @@ tr:
         resolve_report: "%{name} %{target} şikayetini çözdü"
         silence_account: "%{name} %{target}'in hesabını susturdu"
         suspend_account: "%{name} %{target}'in hesabını uzaklaştırdı"
+        unassigned_report: "%{name} %{target} şikayetinin atamasını geri aldı"
         unsilence_account: "%{name} %{target}'in hesabının susturmasını kaldırdı"
         unsuspend_account: "%{name} %{target}'in hesabının uzaklaştırmasını kaldırdı"
         update_custom_emoji: "%{name} %{target} emojiyi güncelledi"
+        update_status: "%{name}, %{target} kullanıcısının durumunu güncelledi"
       deleted_status: "(silinmiş durum)"
       title: Denetim günlüğü
     custom_emojis:
@@ -260,6 +262,7 @@ tr:
       upload: Yükle
     dashboard:
       authorized_fetch_mode: Güvenli mod
+      backlog: bekleyen işler
       config: Yapılandırma
       feature_deletions: Hesap silme
       feature_invites: Davet linkleri
@@ -307,10 +310,13 @@ tr:
           suspend: Uzaklaştır
         title: Yeni domain bloğu
       private_comment: Özel yorum
+      private_comment_hint: Denetleyiciler tarafından dahili kullanım için bu alan adı sınırlaması hakkında yorum.
       public_comment: Genel yorum
+      public_comment_hint: Eğer alan adı sınırlamaları listesinin tanıtılması etkinleştirilmişse, genel kullanım için bu alan adı sınırlaması hakkında yorum.
       reject_media: Ortam dosyalarını reddetme
       reject_media_hint: Yerel olarak depolanmış ortam dosyalarını ve gelecekte indirilecek olanları reddeder. Uzaklaştırma için uygun değildir
       reject_reports: Raporları reddet
+      reject_reports_hint: Bu alan adından gelen tüm şikayetleri yok sayın. Uzaklaştırmalar için mevzu dışıdır
       rejecting_media: ortam dosyalarını reddet
       rejecting_reports: şikayetleri reddet
       severity:
@@ -371,9 +377,11 @@ tr:
     relays:
       add_new: Yeni aktarıcı ekle
       delete: Sil
+      description_html: "<strong>Federasyon aktarıcısı</strong>, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık gönderilerin değiş tokuşunu yapan aracı bir sunucudur. <strong>Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar</strong>, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir."
       disable: Devre dışı
       disabled: Devre dışı
       enable: Etkin
+      enable_hint: Etkinleştirildiğinde, sunucunuz bu aktarıcıdan gelecek tüm herkese açık gönderilere abone olacak, ve kendisinin herkese açık gönderilerini bu aktarıcıya göndermeye başlayacaktır.
       enabled: Etkin
       inbox_url: Aktarıcı URL'si
       pending: Aktarıcının onaylaması için bekleniyor
@@ -403,6 +411,7 @@ tr:
         create_and_resolve: Not ile çözümle
         create_and_unresolve: Not ile tekrar aç
         delete: Sil
+        placeholder: Hangi işlemlerin yapıldığını, ya da diğer ilgili güncellemeleri açıklayın...
       reopen: Şikayeti tekrar aç
       report: 'Şikayet #%{id}'
       reported_account: Şikayet edilen hesap
@@ -416,13 +425,16 @@ tr:
       updated_at: Güncellendi
     settings:
       activity_api_enabled:
+        desc_html: Yerel olarak yayınlanan durumların, aktif kullanıcıların, ve haftalık kovalardaki yeni kayıtların sayısı
         title: Kullanıcı etkinliği hakkında toplu istatistikler yayınlayın
       bootstrap_timeline_accounts:
+        desc_html: Birden fazla kullanıcı adını virgülle ayırın. Yalnızca yerel ve kilitlenmemiş hesaplar geçerlidir. Boş olduğunda varsayılan tüm yerel yöneticilerdir.
         title: Yeni kullanıcılar için varsayılan takipler
       contact_information:
         email: Herkese açık e-posta adresiniz
         username: Bir kullanıcı adı giriniz
       custom_css:
+        desc_html: Görünümü her sayfada yüklenecek CSS ile değiştirin
         title: Özel CSS
       default_noindex:
         desc_html: Bu ayarı kendileri değiştirmeyen tüm kullanıcıları etkiler
@@ -435,8 +447,10 @@ tr:
       domain_blocks_rationale:
         title: Gerekçeyi göster
       hero:
+        desc_html: Önsayfada görüntülenir. En az 600x100px önerilir. Ayarlanmadığında, sunucu küçük resmi kullanılır
         title: Kahraman görseli
       mascot:
+        desc_html: Birden fazla sayfada görüntülenir. En az 293x205px önerilir. Ayarlanmadığında, varsayılan maskot kullanılır
         title: Maskot görseli
       peers_api_enabled:
         desc_html: Bu sunucunun fediverse'te karşılaştığı alan adları
@@ -463,6 +477,9 @@ tr:
           none: Hiç kimse kayıt olamaz
           open: Herkes kaydolabilir
         title: Kayıt modu
+      show_known_fediverse_at_about_page:
+        desc_html: Değiştirildiğinde, bilinen bütün fediverse'lerden gönderileri ön izlemede gösterir. Diğer türlü sadece yerel gönderileri gösterecektir.
+        title: Zaman çizelgesi ön izlemesinde bilinen fediverse'i göster
       show_staff_badge:
         desc_html: Kullanıcının sayfasında bir personel rozeti göster
         title: Personel rozeti göster
@@ -473,6 +490,7 @@ tr:
         desc_html: Harici bilgi sayfasında gösterilir.<br>HTML etiketleri girebilirsiniz
         title: Sunucu hakkında detaylı bilgi
       site_short_description:
+        desc_html: Kenar çubuğunda ve meta etiketlerinde görüntülenir. Mastodon'un ne olduğunu ve bu sunucuyu özel kılan şeyleri tek bir paragrafta açıklayın.
         title: Kısa sunucu açıklaması
       site_terms:
         desc_html: Kendi gizlilik politikanızı, hizmet şartlarınızı ya da diğer hukuki metinlerinizi yazabilirsiniz. HTML etiketleri kullanabilirsiniz
@@ -485,9 +503,14 @@ tr:
         desc_html: OpenGraph ve API ile ön izlemeler için kullanılır. 1200x630px tavsiye edilir
         title: Sunucu küçük resmi
       timeline_preview:
+        desc_html: Açılış sayfasında genel zaman çizelgesini görüntüle
         title: Zaman çizelgesi önizlemesi
       title: Site Ayarları
+      trendable_by_default:
+        desc_html: Daha önce izin verilmeyen etiketleri etkiler
+        title: Ön inceleme yapmadan etiketlerin trend olmasına izin ver
       trends:
+        desc_html: Şu anda trend olan ve daha önce incelenen etiketleri herkese açık olarak göster
         title: Trend etiketler
     statuses:
       back_to_account: Hesap sayfasına geri dön
@@ -506,8 +529,10 @@ tr:
     tags:
       accounts_today: Bugünkü eşsiz kullanımlar
       accounts_week: Bu haftaki eşsiz kullanımlar
+      breakdown: Bugünkü kullanımın kaynağa göre dağılımı
       context: İçerik
       directory: Dizinde
+      in_directory: Dizinde %{count}
       last_active: Son aktiflik
       most_popular: En popüler
       most_recent: En yeni
@@ -534,8 +559,15 @@ tr:
       body: "%{reporter} %{target}'i şikayet etti"
       body_remote: "%{domain}'den birisi %{target}'i şikayet etti"
       subject: "%{instance} için yeni şikayet (#%{id})"
+    new_trending_tag:
+      body: "#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin."
+      subject: "%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})"
   aliases:
     add_new: Takma ad oluştur
+    created_msg: Yeni takma ad başarıyla oluşturuldu. Artık eski hesaptan taşınmayı başlatabilirsiniz.
+    deleted_msg: Yeni takma ad başarıyla kaldırıldı. O hesaptan bu hesaba taşınmak artık mümkün değil.
+    hint_html: Başka bir hesaptan bu hesaba taşınmak istiyorsanız, takipçileri eski hesaptan bu hesaba taşımadan önce gerekli olan takma adı burada oluşturabilirsiniz. Bu eylem kendi başına <strong>zararsızdır ve geri döndürülebilir</strong>. <strong>Hesap taşıma işlemi eski hesaptan başlatılır</strong>.
+    remove: Takma adların bağlantısını kaldır
   appearance:
     advanced_web_interface: Gelişmiş web arayüzü
     advanced_web_interface_hint: 'Tüm ekran genişliğinizden yararlanmak istiyorsanız, gelişmiş web arayüzü istediğiniz kadar bilgi görecek kadar çok sayıda farklı sütunu yapılandırmanıza olanak tanır: Anasayfa, bildirimler, birleşik zaman çizelgesi, istediğiniz sayıda liste ve etiket.'
@@ -568,6 +600,7 @@ tr:
     description:
       prefix_invited_by_user: "@%{name} sizi Mastodon'un bu sunucusuna katılmaya davet ediyor!"
       prefix_sign_up: Bugün Mastodon'a kaydolun!
+      suffix: Bir hesapla, kişileri takip edebilir, güncellemeler gönderebilir, herhangi bir Mastodon sunucusundan kullanıcılarla mesaj alışverişinde bulunabilir ve daha birçok şey yapabilirsin!
     didnt_get_confirmation: Hesap doğrulama mailini almadınız mı?
     forgot_password: Parolanızı unuttunuz mu?
     invalid_reset_password_token: Parola sıfırlama belirteci geçersiz veya süresi dolmuş. Lütfen yeni bir tane talep edin.
@@ -594,6 +627,7 @@ tr:
       confirming: E-posta doğrulamasının tamamlanması bekleniyor.
       functional: Hesabınız tamamen kullanıma hazır.
       pending: Başvurunuz personelimiz tarafından gözden geçirilmeyi beklemektedir. Bu biraz zaman alabilir. Başvurunuz onaylanırsa bir e-posta alacaksınız.
+      redirecting_to: Hesabınız aktif değil çünkü şu anda %{acct} adresine yönlendirilmektedir.
     trouble_logging_in: Oturum açarken sorun mu yaşıyorsunuz?
   authorize_follow:
     already_following: Bu hesabı zaten takip ediyorsunuz
@@ -604,9 +638,11 @@ tr:
     post_follow:
       close: Ya da, sadece bu pencereyi kapatabilirsiniz.
       return: Kullanıcının profilini göster
+      web: Web'e git
     title: "%{acct}'i takip et"
   challenge:
     confirm: Devam et
+    hint_html: "<strong>İpucu:</strong> Önümüzdeki saat boyunca sana parolanı sormayacağız."
     invalid_password: Geçersiz parola
     prompt: Devam etmek parolayı doğrulayın
   datetime:
@@ -634,6 +670,12 @@ tr:
       caches: Diğer sunucular tarafından ön belleğe alınan içerik kalabilir
       data_removal: Gönderileriniz ve diğer verileriniz kalıcı olarak silinecektir
       email_change_html: Hesabınızı silmeden <a href="%{path}">e-posta adresinizi değiştirebilirsiniz</a>
+      email_contact_html: Eğer hala ulaşmazsa, yardım için <a href="mailto:%{email}">%{email}</a> adresine e-posta gönderebilirsiniz
+      email_reconfirmation_html: Eğer doğrulama e-postası almıyorsanız, <a href="%{path}">tekrar talep edebilirsiniz</a>
+      irreversible: Hesabınızı geri yükleyemeyecek ya da yeniden etkinleştiremeyeceksiniz
+      more_details_html: Daha fazla ayrıntı için, <a href="%{terms_path}">gizlilik politikası</a>na göz atın.
+      username_available: Kullanıcı adınız tekrar kullanılabilir olacaktır
+      username_unavailable: Kullanıcı adınız kullanılamaz kalacaktır
   directories:
     directory: Profil dizini
     explanation: Kullanıcıları ilgi alanlarına göre keşfedin
@@ -649,7 +691,7 @@ tr:
     '422':
       content: Güvenlik doğrulaması başarısız oldu. Site cookie'lerini engellemiş olabilirsiniz.
       title: Güvenlik doğrulamasu başarısız
-    '429': Throttled
+    '429': Kısıtlandı
     '500':
       content: Üzgünüz, ancak bir şey ters gitti.
       title: Bu sayfa doğru değil
@@ -657,15 +699,18 @@ tr:
     noscript_html: Mastodon web uygulamasını kullanmak için lütfen JavaScript'i etkinleştirin. Alternatif olarak, platformunuz için Mastodon <a href="%{apps_path}">yerel uygulamalardan</a> birini deneyin.
   existing_username_validator:
     not_found: bu kullanıcı adına sahip yerel bir kullanıcı bulunamadı
+    not_found_multiple: "%{usernames} bulunamadı"
   exports:
     archive_takeout:
       date: Tarih
       download: Arşivinizi indirin
       hint_html: "<strong>Gönderileriniz ve yüklediğiniz ortamların</strong> bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz."
       in_progress: Arşivinizi derliyoruz...
+      request: Arşiv isteği
       size: Boyut
     blocks: Blokladıklarınız
     csv: CSV
+    domain_blocks: Alan adı blokları
     follows: Takip ettikleriniz
     lists: Listeler
     mutes: Susturduklarınız
@@ -683,6 +728,9 @@ tr:
       thread: Sohbetler
     edit:
       title: Filtreyi düzenle
+    errors:
+      invalid_context: Sıfır ya da geçersiz içerik sağlandı
+      invalid_irreversible: Geri dönüşümsüz filtreleme sadece anasayfa ya da bildirim bağlamında çalışır
     index:
       delete: Sil
       title: Filtreler
@@ -697,6 +745,7 @@ tr:
     all: Tümü
     changes_saved_msg: Değişiklikler başarıyla kaydedildi!
     copy: Kopyala
+    no_batch_actions_available: Bu sayfada toplu işlem yok
     order_by: Sıralama ölçütü
     save_changes: Değişiklikleri kaydet
     validation_errors:
@@ -710,9 +759,15 @@ tr:
     authorize_connection_prompt: Bu kriptolu bağlantıyı yetkilendir?
     errors:
       failed: Kriptolu bağlantı başarısız oldu. Lütfen %{provider} üzerinden tekrar deneyin.
+      keybase:
+        invalid_token: Keybase belirteçleri imza hash'leridir ve 66 hex karakter içermelidir
+        verification_failed: Keybase, bu belirteci, %{kb_username} Keybase kullanıcısının imzası olarak tanımıyor. Lütfen Keybase'den tekrar deneyin.
+      wrong_user: "%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin."
+    explanation_html: Burada, Keybase profili gibi diğer kimliklerinizi şifreli olarak bağlayabilirsiniz. Bu, diğer kişilerin size şifreli mesajlar göndermesini ve gönderdiğiniz içeriğe güvenmelerini sağlar.
     i_am_html: Ben %{service} üzerinde %{username}.
     identity: Kimlik
     inactive: Pasif
+    publicize_checkbox: 'Ve bunu paylaş:'
     publicize_toot: 'İspatlandı! Ben %{service} üzerinde %{username}: %{url}'
     status: Doğrulama durumu
     view_proof: Kanıt görüntüle
@@ -763,23 +818,33 @@ tr:
   migrations:
     acct: Taşındı
     cancel: Yönlendirmeyi iptal et
+    cancel_explanation: Yönlendirmeyi iptal etmek, mevcut hesabınızı yeniden etkinleştirecek, ancak söz konusu hesaba taşınan takipçileri geri getirmeyecektir.
     cancelled_msg: Yönlendirme başarıyla iptal edildi.
     errors:
       already_moved: zaten taşındığınızla aynı hesap
+      missing_also_known_as: bu hesaba geri referans yapmamaktadır
       move_to_self: mevcut hesap olamaz
       not_found: bulunamadı
       on_cooldown: Soğuma aşamasındasınız
     followers_count: Taşınma zamanındaki takipçiler
     incoming_migrations: Farklı bir hesaptan taşınma
+    incoming_migrations_html: Başka bir hesaptan bu hesaba taşınmak için önce bir <a href="%{path}">hesap takma adı oluşturmanız</a> gerekmektedir.
+    moved_msg: Hesabınız şimdi %{acct} adresine yönlendiriliyor ve takipçileriniz taşınıyor.
+    not_redirecting: Hesabınız şu anda başka bir hesaba yönlendirilmemektedir.
+    on_cooldown: Son zamanlarda hesabınızı taşıdınız. Bu işlev %{count} gün içinde tekrar kullanılabilir olacaktır.
     past_migrations: Geçmiş taşınmalar
     proceed_with_move: Takipçileri taşı
     redirecting_to: Hesabınız %{acct} hesabına yönlendirilmektedir.
     set_redirect: Yönlendirme ayarla
     warning:
+      backreference_required: Öncelikle, yeni hesap bu hesabı geri referans edecek şekilde yapılandırılmalıdır
       before: 'Devam etmeden önce, lütfen bu notları dikkatlice okuyun:'
       cooldown: Taşındıktan sonra, yeniden taşınma imkanınızın olmayacağı bir soğuma periyodu vardır
+      disabled_account: Sonrasında, mevcut hesabınız tamamen kullanılabilir olmayacaktır. Ancak, yeniden etkinleştirme işleminin yanı sıra veri dışa aktarma erişimine sahip olacaksınız.
       followers: Bu eylem tüm takipçileri şu anki hesaptan yeni hesaba taşıyacaktır
+      only_redirect_html: Alternatif olarak, <a href="%{path}">sadece profilinize bir yönlendirme koyabilirsiniz</a>.
       other_data: Başka bir veri otomatik olarak taşınmayacaktır
+      redirect: Mevcut hesabınızın profili bir yönlendirme bildirimi ile güncellenecek ve aramaların dışında tutulacaktır
   moderation:
     title: Yönetim
   notification_mailer:
@@ -835,6 +900,9 @@ tr:
   polls:
     errors:
       already_voted: Bu ankete daha önce oy verdiniz
+      duplicate_options: kopya ögeler içeriyor
+      duration_too_long: ileriye doğru çok geç
+      duration_too_short: çok erken
       expired: Anket çoktan sona erdi
       over_character_limit: her biri %{max} karakterden daha uzun olamaz
       too_few_options: birden fazla öğeye sahip olmalı
@@ -862,6 +930,7 @@ tr:
     no_account_html: Hesabınız yok mu? <a href='%{sign_up_path}' target='_blank'>Buradan kaydolabilirsiniz</a>
     proceed: Takip onayı
     prompt: Bu kullanıcıyı takip etmek istediğinize emin misiniz?
+    reason_html: "<strong>Bu adım neden gerekli?</strong><code>%{instance}</code> kayıtlı olduğunuz sunucu olmayabilir, bu yüzden önce sizi kendi sunucunuza yönlendirmemiz gerekmektedir."
   remote_interaction:
     favourite:
       proceed: Favorilere eklemek için ilerle
@@ -872,6 +941,10 @@ tr:
     reply:
       proceed: Cevap vermek için ilerle
       prompt: 'Bu gönderiye cevap vermek istiyorsunuz:'
+  scheduled_statuses:
+    over_daily_limit: O gün için %{limit} zamanlanmış gönderi sınırını aştınız
+    over_total_limit: "%{limit} zamanlanmış gönderi sınırını aştınız"
+    too_soon: Programlanan tarih bugünden ileri bir tarihte olmalıdır
   sessions:
     activity: Son aktivite
     browser: Tarayıcı
@@ -916,6 +989,7 @@ tr:
   settings:
     account: Hesap
     account_settings: Hesap ayarları
+    aliases: Hesap takma adları
     appearance: Görünüm
     authorized_apps: Yetkilendirilen uygulamalar
     back: Mastodon'a geri dön
@@ -933,6 +1007,8 @@ tr:
     profile: Profil
     relationships: Takip edilenler ve takipçiler
     two_factor_authentication: İki-faktörlü doğrulama
+  spam_check:
+    spam_detected: Bu otomatik bir şikayettir. Spam tespit edildi.
   statuses:
     attached:
       description: 'Ekli: %{attached}'
@@ -951,10 +1027,14 @@ tr:
     open_in_web: Web sayfasında aç
     over_character_limit: "%{max} karakter limiti aşıldı"
     pin_errors:
+      limit: Hali hazırda maksimum sayıda gönderiyi sabitlediniz
       ownership: Başkasının gönderisi sabitlenemez
       private: Halka açık olmayan gönderi sabitlenemez
       reblog: Bir yineleme sabitlenemez
     poll:
+      total_people:
+        one: "%{count} kişi"
+        other: "%{count} kişi"
       total_votes:
         one: "%{count} oy"
         other: "%{count} oy"
@@ -980,20 +1060,47 @@ tr:
   themes:
     contrast: Mastodon (Yüksek karşıtlık)
     default: Mastodon (Karanlık)
+    mastodon-light: Mastodon (Açık)
+  time:
+    formats:
+      default: "%b %d, %Y, %H:%M"
+      month: "%b %Y"
   two_factor_authentication:
     code_hint: Onaylamak için kimlik doğrulama uygulamanızın oluşturduğu kodu giriniz
     description_html: Eğer <strong>iki-faktörlü kimlik doğrulamayı</strong> aktif ederseniz, giriş yaparken sizin için giriş kodu üreten telefonunuza ihtiyaç duyacaksınız.
     disable: Devre dışı bırak
     enable: Aktifleştir
+    enabled: İki adımlı kimlik doğrulama etkin
     enabled_success: İki-faktörlü kimlik doğrulama başarıyla aktif edildi
     generate_recovery_codes: Kurtarma Kodlarını Oluştur
     instructions_html: <strong>Bu QR kodunu, telefonunuzdaki <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> veya benzer bir TOTP uygulamasıyla taratınız</strong>. Bundan sonra giriş yaparken uygulamanın ürettiği kodu kullanarak giriş yapacaksınız.
     lost_recovery_codes: Kurtarma kodları telefonunuzu kaybettiğiniz durumlarda hesabınıza erişim yapabilmenize olanak tanır. Eğer kurtarma kodlarınızı kaybettiyseniz burada tekrar oluşturabilirsiniz. Eski kurtarma kodlarınız geçersiz hale gelecektir.
     manual_instructions: 'Eğer QR kodunu taratamıyorsanız ve elle giriş yapmanız gerekiyorsa buradaki gizli düz metni girebilirsiniz:'
+    recovery_codes: Kurtarma kodlarını yedekle
     recovery_codes_regenerated: Kurtarma kodları başarıyla oluşturuldu
     recovery_instructions_html: 'Eğer telefonunuza erişiminizi kaybederseniz, aşağıdaki kurtarma kodlarından birini kullanarak hesabınıza giriş yapabilirsiniz. Kurtarma kodlarınızı güvenli halde tutunuz. Örneğin: kodların çıktısını alıp diğer önemli belgeleriniz ile birlikte saklayabilirsiniz.'
     setup: Kuruluma başla
     wrong_code: Girdiğiniz kod geçersiz! Telefonunuzun saati geri/ileri kalmış olabilir.
+  user_mailer:
+    backup_ready:
+      explanation: Mastodon hesabınızın tam bir yedeğini istediniz. Şimdi indirmeye hazır!
+      subject: Arşiviniz indirilmeye hazır
+      title: Arşiv paketlemesi
+    warning:
+      explanation:
+        disable: Hesabınız donmuşken, hesap verileriniz bozulmadan kalır, ancak kilidi açılıncaya kadar herhangi bir işlem gerçekleştiremezsiniz.
+        silence: Hesabınız sınırlı iken, yalnızca sizi takip eden kişiler bu sunucuda gönderilerinizi görecek ve çeşitli halka açık listelerin dışında tutulabilirsiniz. Ancak, diğerleri hala sizi manuel olarak takip edebilir.
+        suspend: Hesabınız askıya alındı ve tüm gönderileriniz ve yüklediğiniz medya dosyalarınız bu sunucudan ve takipçilerinizin bulunduğu sunuculardan geri alınamaz şekilde kaldırıldı.
+      get_in_touch: "%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz."
+      review_server_policies: Sunucu politikalarını inceleyin
+      subject:
+        disable: "%{acct} hesabınız donduruldu"
+        none: "%{acct} için uyarı"
+        silence: "%{acct} hesabınız sınırlandırıldı"
+        suspend: "%{acct} hesabınız askıya alındı"
+      title:
+        disable: Hesap donduruldu
+        none: Uyarı
   users:
     invalid_email: E-posta adresiniz geçersiz
     invalid_otp_token: İki-faktörlü kodunuz geçersiz
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index ade86d604..1d3459a0f 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -18,7 +18,6 @@ uk:
     discover_users: Знайдіть цікавих користувачів
     documentation: Документація
     federation_hint_html: З обліковим записом на %{instance} ви зможете слідкувати за людьми на будь-якому сервері Mastodon та поза ним.
-    generic_description: "%{domain} є одним сервером у мережі"
     get_apps: Спробуйте мобільний додаток
     hosted_on: Mastodon розміщено на %{domain}
     instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену.
@@ -37,6 +36,10 @@ uk:
     status_count_before: Опубліковано
     tagline: Слідкуйте за друзями та знаходьте нових
     terms: Правила використання
+    unavailable_content: Недоступний вміст
+    unavailable_content_description:
+      domain: Сервер
+      reason: Причина
     user_count_after:
       few: користувача
       many: користувачів
@@ -236,11 +239,14 @@ uk:
       delete: Видалити
       destroyed_msg: Емодзі усіпішно видалене!
       disable: Вимкнути
+      disabled: Вимкнено
       disabled_msg: Емодзі успішно вимкнено
       emoji: Емодзі
       enable: Увімкнути
+      enabled: Увімкнено
       enabled_msg: Емодзі успішно увімкнене
       image_hint: PNG розміром до 50 КБ
+      list: Список
       listed: У списку
       new:
         title: Додати новий емодзі
@@ -248,6 +254,7 @@ uk:
       shortcode: Шорткод
       shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або підкреслення
       title: Особливі емодзі
+      uncategorized: Без категорії
       unlisted: Не у списку
       update_failed_msg: Не вийшло оновити емозді
       updated_msg: Емодзі успішно оновлене!
@@ -382,6 +389,7 @@ uk:
       pending: Очікуємо на підтвердження ретранслятором
       save_and_enable: Зберегти та увімкнути
       setup: Налаштування з'єднання з ретранслятором
+      signatures_not_enabled: Ретранслятори не будуть добре працювати поки ввімкнений безопасний режим або режим білого списка
       status: Статус
       title: Ретранслятори
     report_notes:
@@ -430,6 +438,8 @@ uk:
       custom_css:
         desc_html: Відобразити вигляд, коли CSS завантажено для кожної сторінки
         title: Користувацький CSS
+      default_noindex:
+        desc_html: Впливає на усіх користувачів, які не змінили це настроювання самостійно
       domain_blocks:
         all: Всi
         disabled: Нікого
@@ -520,6 +530,7 @@ uk:
       context: Контекст
       directory: У каталозі
       in_directory: "%{count} у каталозі"
+      name: Хештеґ
       review: Переглянути статус
       reviewed: Переглянуто
       title: Хештеґи
@@ -544,6 +555,10 @@ uk:
       subject: Нова скарга до %{instance} (#%{id})
     new_trending_tag:
       subject: Новий хештеґ надіслано на розгляд до %{instance} (#%{name})
+  aliases:
+    add_new: Створити псевдонім
+    created_msg: Новий псевдонім успішно створено. Тепер ви можете починати переміщення зі старого облікового запису.
+    deleted_msg: Псевдонім успішно видалено. Переміщення з того облікового запису до цього більше не можливе.
   appearance:
     advanced_web_interface: Розширений web-інтерфейс
     advanced_web_interface_hint: 'Розширений веб-інтерфейс дає змогу бачити багато стовпчиків одночасно: основна сторінка, сповіщення, глобальна стрічка, будь-які списки та хештеґи. Потребує широкого екрана.'
@@ -783,6 +798,7 @@ uk:
       too_many: Не можна додати більше 4 файлів
   migrations:
     acct: username@domain нового облікового запису
+    cancel: Скасувати перенаправлення
   moderation:
     title: Модерація
   notification_mailer:
@@ -948,8 +964,6 @@ uk:
     profile: Профіль
     relationships: Підписки та підписники
     two_factor_authentication: Двофакторна авторизація
-  spam_check:
-    spam_detected_and_silenced: Це автоматично згенерована скарга. Було виявлено розсилку спаму, відправник був автоматично заглушений. Якщо це помилка, зніміть заглушування з облікового запису.
   statuses:
     attached:
       description: 'Прикріплено: %{attached}'
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 89506e223..55685c82e 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -18,7 +18,6 @@ zh-CN:
     discover_users: 发现用户
     documentation: 文档
     federation_hint_html: 在%{instance} 上拥有账户后,你可以关注任何 Mastodon 服务器或其他服务器上的人。
-    generic_description: "%{domain} 是这个庞大网络中的一台服务器"
     get_apps: 尝试移动应用
     hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例
     learn_more: 了解详情
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 6f77f52c3..338cf810e 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -8,7 +8,6 @@ zh-HK:
     contact: 聯絡
     contact_missing: 未設定
     contact_unavailable: 未公開
-    generic_description: "%{domain} 是 Mastodon 網絡中其中一個服務站"
     hosted_on: 在 %{domain} 運作的 Mastodon 服務站
     learn_more: 了解更多
     source_code: 源代碼
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 7750d596b..bb6e761c7 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -16,7 +16,6 @@ zh-TW:
     contact_unavailable: 未公開
     discover_users: 探索使用者
     documentation: 文件
-    generic_description: "%{domain} 是 Mastodon 網路中其中一個站點"
     get_apps: 嘗試行動應用程式
     hosted_on: 在 %{domain} 運作的 Mastodon 站點
     learn_more: 了解詳細
diff --git a/config/settings.yml b/config/settings.yml
index 0e615f8e8..d13e99831 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -40,6 +40,7 @@ defaults: &defaults
   use_blurhash: true
   use_pending_items: false
   trends: true
+  trendable_by_default: false
   notification_emails:
     follow: false
     reblog: false
diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb
index b718f9e1d..d4bc3b91d 100644
--- a/db/migrate/20181024224956_migrate_account_conversations.rb
+++ b/db/migrate/20181024224956_migrate_account_conversations.rb
@@ -52,6 +52,6 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
   end
 
   def notifications_about_direct_statuses
-    Notification.joins(mention: :status).where(activity_type: 'Mention', statuses: { visibility: :direct })
+    Notification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct })
   end
 end
diff --git a/db/migrate/20191007013357_update_pt_locales.rb b/db/migrate/20191007013357_update_pt_locales.rb
new file mode 100644
index 000000000..b7288d38a
--- /dev/null
+++ b/db/migrate/20191007013357_update_pt_locales.rb
@@ -0,0 +1,11 @@
+class UpdatePtLocales < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    User.where(locale: 'pt').in_batches.update_all(locale: 'pt-PT')
+  end
+
+  def down
+    User.where(locale: 'pt-PT').in_batches.update_all(locale: 'pt')
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index d9c4f7a37..eb86a9f68 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2019_10_01_213028) do
+ActiveRecord::Schema.define(version: 2019_10_07_013357) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -706,6 +706,30 @@ ActiveRecord::Schema.define(version: 2019_10_01_213028) do
     t.index ["tag_id", "status_id"], name: "index_statuses_tags_on_tag_id_and_status_id", unique: true
   end
 
+  create_table "stream_entries", force: :cascade do |t|
+    t.bigint "activity_id"
+    t.string "activity_type"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.boolean "hidden", default: false, null: false
+    t.bigint "account_id"
+    t.index ["account_id", "activity_type", "id"], name: "index_stream_entries_on_account_id_and_activity_type_and_id"
+    t.index ["activity_id", "activity_type"], name: "index_stream_entries_on_activity_id_and_activity_type"
+  end
+
+  create_table "subscriptions", force: :cascade do |t|
+    t.string "callback_url", default: "", null: false
+    t.string "secret"
+    t.datetime "expires_at"
+    t.boolean "confirmed", default: false, null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.datetime "last_successful_delivery_at"
+    t.string "domain"
+    t.bigint "account_id", null: false
+    t.index ["account_id", "callback_url"], name: "index_subscriptions_on_account_id_and_callback_url", unique: true
+  end
+
   create_table "tags", force: :cascade do |t|
     t.string "name", default: "", null: false
     t.datetime "created_at", null: false
diff --git a/lib/json_ld/identity.rb b/lib/json_ld/identity.rb
new file mode 100644
index 000000000..4fb3f8e9d
--- /dev/null
+++ b/lib/json_ld/identity.rb
@@ -0,0 +1,87 @@
+# -*- encoding: utf-8 -*-
+# frozen_string_literal: true
+# This file generated automatically from http://w3id.org/identity/v1
+require 'json/ld'
+class JSON::LD::Context
+  add_preloaded("http://w3id.org/identity/v1") do
+    new(term_definitions: {
+      "Credential" => TermDefinition.new("Credential", id: "https://w3id.org/credentials#Credential", simple: true),
+      "CryptographicKey" => TermDefinition.new("CryptographicKey", id: "https://w3id.org/security#Key", simple: true),
+      "CryptographicKeyCredential" => TermDefinition.new("CryptographicKeyCredential", id: "https://w3id.org/credentials#CryptographicKeyCredential", simple: true),
+      "EncryptedMessage" => TermDefinition.new("EncryptedMessage", id: "https://w3id.org/security#EncryptedMessage", simple: true),
+      "GraphSignature2012" => TermDefinition.new("GraphSignature2012", id: "https://w3id.org/security#GraphSignature2012", simple: true),
+      "Group" => TermDefinition.new("Group", id: "https://www.w3.org/ns/activitystreams#Group", simple: true),
+      "Identity" => TermDefinition.new("Identity", id: "https://w3id.org/identity#Identity", simple: true),
+      "LinkedDataSignature2015" => TermDefinition.new("LinkedDataSignature2015", id: "https://w3id.org/security#LinkedDataSignature2015", simple: true),
+      "Organization" => TermDefinition.new("Organization", id: "http://schema.org/Organization", simple: true),
+      "Person" => TermDefinition.new("Person", id: "http://schema.org/Person", simple: true),
+      "PostalAddress" => TermDefinition.new("PostalAddress", id: "http://schema.org/PostalAddress", simple: true),
+      "about" => TermDefinition.new("about", id: "http://schema.org/about", type_mapping: "@id"),
+      "accessControl" => TermDefinition.new("accessControl", id: "https://w3id.org/permissions#accessControl", type_mapping: "@id"),
+      "address" => TermDefinition.new("address", id: "http://schema.org/address", type_mapping: "@id"),
+      "addressCountry" => TermDefinition.new("addressCountry", id: "http://schema.org/addressCountry", simple: true),
+      "addressLocality" => TermDefinition.new("addressLocality", id: "http://schema.org/addressLocality", simple: true),
+      "addressRegion" => TermDefinition.new("addressRegion", id: "http://schema.org/addressRegion", simple: true),
+      "cipherAlgorithm" => TermDefinition.new("cipherAlgorithm", id: "https://w3id.org/security#cipherAlgorithm", simple: true),
+      "cipherData" => TermDefinition.new("cipherData", id: "https://w3id.org/security#cipherData", simple: true),
+      "cipherKey" => TermDefinition.new("cipherKey", id: "https://w3id.org/security#cipherKey", simple: true),
+      "claim" => TermDefinition.new("claim", id: "https://w3id.org/credentials#claim", type_mapping: "@id"),
+      "comment" => TermDefinition.new("comment", id: "http://www.w3.org/2000/01/rdf-schema#comment", simple: true),
+      "created" => TermDefinition.new("created", id: "http://purl.org/dc/terms/created", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"),
+      "creator" => TermDefinition.new("creator", id: "http://purl.org/dc/terms/creator", type_mapping: "@id"),
+      "cred" => TermDefinition.new("cred", id: "https://w3id.org/credentials#", simple: true, prefix: true),
+      "credential" => TermDefinition.new("credential", id: "https://w3id.org/credentials#credential", type_mapping: "@id"),
+      "dc" => TermDefinition.new("dc", id: "http://purl.org/dc/terms/", simple: true, prefix: true),
+      "description" => TermDefinition.new("description", id: "http://schema.org/description", simple: true),
+      "digestAlgorithm" => TermDefinition.new("digestAlgorithm", id: "https://w3id.org/security#digestAlgorithm", simple: true),
+      "digestValue" => TermDefinition.new("digestValue", id: "https://w3id.org/security#digestValue", simple: true),
+      "domain" => TermDefinition.new("domain", id: "https://w3id.org/security#domain", simple: true),
+      "email" => TermDefinition.new("email", id: "http://schema.org/email", simple: true),
+      "expires" => TermDefinition.new("expires", id: "https://w3id.org/security#expiration", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"),
+      "familyName" => TermDefinition.new("familyName", id: "http://schema.org/familyName", simple: true),
+      "givenName" => TermDefinition.new("givenName", id: "http://schema.org/givenName", simple: true),
+      "id" => TermDefinition.new("id", id: "@id", simple: true),
+      "identity" => TermDefinition.new("identity", id: "https://w3id.org/identity#", simple: true, prefix: true),
+      "identityService" => TermDefinition.new("identityService", id: "https://w3id.org/identity#identityService", type_mapping: "@id"),
+      "idp" => TermDefinition.new("idp", id: "https://w3id.org/identity#idp", type_mapping: "@id"),
+      "image" => TermDefinition.new("image", id: "http://schema.org/image", type_mapping: "@id"),
+      "initializationVector" => TermDefinition.new("initializationVector", id: "https://w3id.org/security#initializationVector", simple: true),
+      "issued" => TermDefinition.new("issued", id: "https://w3id.org/credentials#issued", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"),
+      "issuer" => TermDefinition.new("issuer", id: "https://w3id.org/credentials#issuer", type_mapping: "@id"),
+      "label" => TermDefinition.new("label", id: "http://www.w3.org/2000/01/rdf-schema#label", simple: true),
+      "member" => TermDefinition.new("member", id: "http://schema.org/member", type_mapping: "@id"),
+      "memberOf" => TermDefinition.new("memberOf", id: "http://schema.org/memberOf", type_mapping: "@id"),
+      "name" => TermDefinition.new("name", id: "http://schema.org/name", simple: true),
+      "nonce" => TermDefinition.new("nonce", id: "https://w3id.org/security#nonce", simple: true),
+      "normalizationAlgorithm" => TermDefinition.new("normalizationAlgorithm", id: "https://w3id.org/security#normalizationAlgorithm", simple: true),
+      "owner" => TermDefinition.new("owner", id: "https://w3id.org/security#owner", type_mapping: "@id"),
+      "password" => TermDefinition.new("password", id: "https://w3id.org/security#password", simple: true),
+      "paymentProcessor" => TermDefinition.new("paymentProcessor", id: "https://w3id.org/payswarm#processor", simple: true),
+      "perm" => TermDefinition.new("perm", id: "https://w3id.org/permissions#", simple: true, prefix: true),
+      "postalCode" => TermDefinition.new("postalCode", id: "http://schema.org/postalCode", simple: true),
+      "preferences" => TermDefinition.new("preferences", id: "https://w3id.org/payswarm#preferences", type_mapping: "@vocab"),
+      "privateKey" => TermDefinition.new("privateKey", id: "https://w3id.org/security#privateKey", type_mapping: "@id"),
+      "privateKeyPem" => TermDefinition.new("privateKeyPem", id: "https://w3id.org/security#privateKeyPem", simple: true),
+      "ps" => TermDefinition.new("ps", id: "https://w3id.org/payswarm#", simple: true, prefix: true),
+      "publicKey" => TermDefinition.new("publicKey", id: "https://w3id.org/security#publicKey", type_mapping: "@id"),
+      "publicKeyPem" => TermDefinition.new("publicKeyPem", id: "https://w3id.org/security#publicKeyPem", simple: true),
+      "publicKeyService" => TermDefinition.new("publicKeyService", id: "https://w3id.org/security#publicKeyService", type_mapping: "@id"),
+      "rdf" => TermDefinition.new("rdf", id: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", simple: true, prefix: true),
+      "rdfs" => TermDefinition.new("rdfs", id: "http://www.w3.org/2000/01/rdf-schema#", simple: true, prefix: true),
+      "recipient" => TermDefinition.new("recipient", id: "https://w3id.org/credentials#recipient", type_mapping: "@id"),
+      "revoked" => TermDefinition.new("revoked", id: "https://w3id.org/security#revoked", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"),
+      "schema" => TermDefinition.new("schema", id: "http://schema.org/", simple: true, prefix: true),
+      "sec" => TermDefinition.new("sec", id: "https://w3id.org/security#", simple: true, prefix: true),
+      "signature" => TermDefinition.new("signature", id: "https://w3id.org/security#signature", simple: true),
+      "signatureAlgorithm" => TermDefinition.new("signatureAlgorithm", id: "https://w3id.org/security#signatureAlgorithm", simple: true),
+      "signatureValue" => TermDefinition.new("signatureValue", id: "https://w3id.org/security#signatureValue", simple: true),
+      "streetAddress" => TermDefinition.new("streetAddress", id: "http://schema.org/streetAddress", simple: true),
+      "title" => TermDefinition.new("title", id: "http://purl.org/dc/terms/title", simple: true),
+      "type" => TermDefinition.new("type", id: "@type", simple: true),
+      "url" => TermDefinition.new("url", id: "http://schema.org/url", type_mapping: "@id"),
+      "writePermission" => TermDefinition.new("writePermission", id: "https://w3id.org/permissions#writePermission", type_mapping: "@id"),
+      "xsd" => TermDefinition.new("xsd", id: "http://www.w3.org/2001/XMLSchema#", simple: true, prefix: true)
+    })
+  end
+  alias_preloaded("https://w3id.org/identity/v1", "http://w3id.org/identity/v1")
+end
diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb
index a09a6ab04..6dbb75689 100644
--- a/lib/mastodon/accounts_cli.rb
+++ b/lib/mastodon/accounts_cli.rb
@@ -211,7 +211,6 @@ module Mastodon
     end
 
     option :concurrency, type: :numeric, default: 5, aliases: [:c]
-    option :verbose, type: :boolean, aliases: [:v]
     option :dry_run, type: :boolean
     desc 'cull', 'Remove remote accounts that no longer exist'
     long_desc <<-LONG_DESC
diff --git a/lib/mastodon/cli_helper.rb b/lib/mastodon/cli_helper.rb
index da7348349..ec4d9a81e 100644
--- a/lib/mastodon/cli_helper.rb
+++ b/lib/mastodon/cli_helper.rb
@@ -15,7 +15,12 @@ module Mastodon
     end
 
     def parallelize_with_progress(scope)
-      ActiveRecord::Base.configurations[Rails.env]['pool'] = options[:concurrency]
+      if options[:concurrency] < 1
+        say('Cannot run with this concurrency setting, must be at least 1', :red)
+        exit(1)
+      end
+
+      ActiveRecord::Base.configurations[Rails.env]['pool'] = options[:concurrency] + 1
 
       progress  = create_progress_bar(scope.count)
       pool      = Concurrent::FixedThreadPool.new(options[:concurrency])
@@ -27,17 +32,26 @@ module Mastodon
 
         items.each do |item|
           futures << Concurrent::Future.execute(executor: pool) do
-            ActiveRecord::Base.connection_pool.with_connection do
-              begin
-                progress.log("Processing #{item.id}") if options[:verbose]
-
-                result = yield(item)
-                aggregate.increment(result) if result.is_a?(Integer)
-              rescue => e
-                progress.log pastel.red("Error processing #{item.id}: #{e}")
-              ensure
-                progress.increment
+            begin
+              if !progress.total.nil? && progress.progress + 1 > progress.total
+                # The number of items has changed between start and now,
+                # since there is no good way to predict the final count from
+                # here, just change the progress bar to an indeterminate one
+
+                progress.total = nil
               end
+
+              progress.log("Processing #{item.id}") if options[:verbose]
+
+              result = ActiveRecord::Base.connection_pool.with_connection do
+                yield(item)
+              end
+
+              aggregate.increment(result) if result.is_a?(Integer)
+            rescue => e
+              progress.log pastel.red("Error processing #{item.id}: #{e}")
+            ensure
+              progress.increment
             end
           end
         end
@@ -46,7 +60,7 @@ module Mastodon
         futures.map(&:value)
       end
 
-      progress.finish
+      progress.stop
 
       [total.value, aggregate.value]
     end
diff --git a/lib/mastodon/feeds_cli.rb b/lib/mastodon/feeds_cli.rb
index ea7c90dff..578ea15c5 100644
--- a/lib/mastodon/feeds_cli.rb
+++ b/lib/mastodon/feeds_cli.rb
@@ -27,7 +27,6 @@ module Mastodon
       dry_run = options[:dry_run] ? '(DRY RUN)' : ''
 
       if options[:all] || username.nil?
-
         processed, = parallelize_with_progress(Account.joins(:user).merge(User.active)) do |account|
           PrecomputeFeedService.new.call(account) unless options[:dry_run]
         end
diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb
index ec2f36c30..e48175134 100644
--- a/lib/mastodon/media_cli.rb
+++ b/lib/mastodon/media_cli.rb
@@ -50,6 +50,7 @@ module Mastodon
     option :concurrency, type: :numeric, default: 5, aliases: [:c]
     option :verbose, type: :boolean, default: false, aliases: [:v]
     option :dry_run, type: :boolean, default: false
+    option :force, type: :boolean, default: false
     desc 'refresh', 'Fetch remote media files'
     long_desc <<-DESC
       Re-downloads media attachments from other servers. You must specify the
@@ -62,6 +63,9 @@ module Mastodon
       using username@domain handle of the account.
 
       Use the --domain option to download attachments from a specific domain.
+
+      By default, attachments that are believed to be already downloaded will
+      not be re-downloaded. To force re-download of every URL, use --force.
     DESC
     def refresh
       dry_run = options[:dry_run] ? ' (DRY RUN)' : ''
@@ -85,7 +89,7 @@ module Mastodon
       end
 
       processed, aggregate = parallelize_with_progress(scope) do |media_attachment|
-        next if media_attachment.remote_url.blank?
+        next if media_attachment.remote_url.blank? || (!options[:force] && media_attachment.file_file_name.present?)
 
         unless options[:dry_run]
           media_attachment.reset_file!
@@ -97,5 +101,17 @@ module Mastodon
 
       say("Downloaded #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true)
     end
+
+    desc 'usage', 'Calculate disk space consumed by Mastodon'
+    def usage
+      say("Attachments:\t#{number_to_human_size(MediaAttachment.sum(:file_file_size))} (#{number_to_human_size(MediaAttachment.where(account: Account.local).sum(:file_file_size))} local)")
+      say("Custom emoji:\t#{number_to_human_size(CustomEmoji.sum(:image_file_size))} (#{number_to_human_size(CustomEmoji.local.sum(:image_file_size))} local)")
+      say("Preview cards:\t#{number_to_human_size(PreviewCard.sum(:image_file_size))}")
+      say("Avatars:\t#{number_to_human_size(Account.sum(:avatar_file_size))} (#{number_to_human_size(Account.local.sum(:avatar_file_size))} local)")
+      say("Headers:\t#{number_to_human_size(Account.sum(:header_file_size))} (#{number_to_human_size(Account.local.sum(:header_file_size))} local)")
+      say("Backups:\t#{number_to_human_size(Backup.sum(:dump_file_size))}")
+      say("Imports:\t#{number_to_human_size(Import.sum(:data_file_size))}")
+      say("Settings:\t#{number_to_human_size(SiteUpload.sum(:file_file_size))}")
+    end
   end
 end
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 8010e526b..a8e5f0b79 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -13,7 +13,7 @@ module Mastodon
     end
 
     def patch
-      0
+      1
     end
 
     def flags
diff --git a/package.json b/package.json
index 6282f1439..6baaeae58 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
     "stringz": "^2.0.0",
     "substring-trie": "^1.0.2",
     "terser-webpack-plugin": "^1.4.1",
-    "tesseract.js": "^2.0.0-alpha.15",
+    "tesseract.js": "^2.0.0-alpha.16",
     "throng": "^4.0.0",
     "tiny-queue": "^0.2.1",
     "uuid": "^3.1.0",
@@ -177,7 +177,7 @@
     "babel-jest": "^24.9.0",
     "enzyme": "^3.10.0",
     "enzyme-adapter-react-16": "^1.14.0",
-    "eslint": "^6.4.0",
+    "eslint": "^6.5.0",
     "eslint-plugin-import": "~2.18.2",
     "eslint-plugin-jsx-a11y": "~6.2.3",
     "eslint-plugin-promise": "~4.2.1",
diff --git a/spec/lib/spam_check_spec.rb b/spec/lib/spam_check_spec.rb
index 4cae46111..d4d66a499 100644
--- a/spec/lib/spam_check_spec.rb
+++ b/spec/lib/spam_check_spec.rb
@@ -181,10 +181,6 @@ RSpec.describe SpamCheck do
       described_class.new(status2).flag!
     end
 
-    it 'silences the account' do
-      expect(sender.silenced?).to be true
-    end
-
     it 'creates a report about the account' do
       expect(sender.targeted_reports.unresolved.count).to eq 1
     end
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index 3eec464bd..b2f6234cb 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -126,8 +126,8 @@ RSpec.describe Account, type: :model do
       end
 
       it 'sets default avatar, header, avatar_remote_url, and header_remote_url' do
-        expect(account.avatar_remote_url).to eq ''
-        expect(account.header_remote_url).to eq ''
+        expect(account.avatar_remote_url).to eq 'https://remote.test/invalid_avatar'
+        expect(account.header_remote_url).to eq expectation.header_remote_url
         expect(account.avatar_file_name).to  eq nil
         expect(account.header_file_name).to  eq nil
       end
diff --git a/spec/models/concerns/remotable_spec.rb b/spec/models/concerns/remotable_spec.rb
index a4289cc45..99a60cbf6 100644
--- a/spec/models/concerns/remotable_spec.rb
+++ b/spec/models/concerns/remotable_spec.rb
@@ -18,6 +18,8 @@ RSpec.describe Remotable do
 
     def hoge=(arg); end
 
+    def hoge_file_name; end
+
     def hoge_file_name=(arg); end
 
     def has_attribute?(arg); end
@@ -109,12 +111,21 @@ RSpec.describe Remotable do
       end
 
       context 'foo[attribute_name] == url' do
-        it 'makes no request' do
+        it 'makes no request if file is saved' do
           allow(foo).to receive(:[]).with(attribute_name).and_return(url)
+          allow(foo).to receive(:hoge_file_name).and_return('foo.jpg')
 
           foo.hoge_remote_url = url
           expect(request).not_to have_been_requested
         end
+
+        it 'makes request if file is not saved' do
+          allow(foo).to receive(:[]).with(attribute_name).and_return(url)
+          allow(foo).to receive(:hoge_file_name).and_return(nil)
+
+          foo.hoge_remote_url = url
+          expect(request).to have_been_requested
+        end
       end
 
       context "scheme is https, parsed_url.host isn't empty, and foo[attribute_name] != url" do
diff --git a/spec/models/home_feed_spec.rb b/spec/models/home_feed_spec.rb
index 3acb997f1..ee7a83960 100644
--- a/spec/models/home_feed_spec.rb
+++ b/spec/models/home_feed_spec.rb
@@ -34,11 +34,10 @@ RSpec.describe HomeFeed, type: :model do
         Redis.current.set("account:#{account.id}:regeneration", true)
       end
 
-      it 'gets statuses with ids in the range from database' do
+      it 'returns nothing' do
         results = subject.get(3)
 
-        expect(results.map(&:id)).to eq [10, 3, 2]
-        expect(results.first.attributes.keys).to include('id', 'updated_at')
+        expect(results.map(&:id)).to eq []
       end
     end
   end
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index 8e90b92d0..02f533287 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -333,49 +333,6 @@ RSpec.describe Status, type: :model do
     end
   end
 
-  describe '.as_home_timeline' do
-    let(:account) { Fabricate(:account) }
-    let(:followed) { Fabricate(:account) }
-    let(:not_followed) { Fabricate(:account) }
-
-    before do
-      Fabricate(:follow, account: account, target_account: followed)
-
-      @self_status = Fabricate(:status, account: account, visibility: :public)
-      @self_direct_status = Fabricate(:status, account: account, visibility: :direct)
-      @followed_status = Fabricate(:status, account: followed, visibility: :public)
-      @followed_direct_status = Fabricate(:status, account: followed, visibility: :direct)
-      @not_followed_status = Fabricate(:status, account: not_followed, visibility: :public)
-
-      @results = Status.as_home_timeline(account)
-    end
-
-    it 'includes statuses from self' do
-      expect(@results).to include(@self_status)
-    end
-
-    it 'does not include direct statuses from self' do
-      expect(@results).to_not include(@self_direct_status)
-    end
-
-    it 'includes statuses from followed' do
-      expect(@results).to include(@followed_status)
-    end
-
-    it 'does not include direct statuses mentioning recipient from followed' do
-      Fabricate(:mention, account: account, status: @followed_direct_status)
-      expect(@results).to_not include(@followed_direct_status)
-    end
-
-    it 'does not include direct statuses not mentioning recipient from followed' do
-      expect(@results).not_to include(@followed_direct_status)
-    end
-
-    it 'does not include statuses from non-followed' do
-      expect(@results).not_to include(@not_followed_status)
-    end
-  end
-
   describe '.as_direct_timeline' do
     let(:account) { Fabricate(:account) }
     let(:followed) { Fabricate(:account) }
diff --git a/yarn.lock b/yarn.lock
index 32019a6b5..86c72dbef 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3921,10 +3921,10 @@ eslint@^2.7.0:
     text-table "~0.2.0"
     user-home "^2.0.0"
 
-eslint@^6.4.0:
-  version "6.4.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a"
-  integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA==
+eslint@^6.5.0:
+  version "6.5.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.0.tgz#304623eec903969dd5c9f2d61c6ce3d6ecec8750"
+  integrity sha512-IIbSW+vKOqMatPmS9ayyku4tvWxHY2iricSRtOz6+ZA5IPRlgXzEL0u/j6dr4eha0ugmhMwDTqxtmNu3kj9O4w==
   dependencies:
     "@babel/code-frame" "^7.0.0"
     ajv "^6.10.0"
@@ -4005,12 +4005,7 @@ esrecurse@^4.1.0:
   dependencies:
     estraverse "^4.1.0"
 
-estraverse@^4.0.0, estraverse@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-  integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-
-estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
   integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -7009,11 +7004,6 @@ node-fetch@^1.0.1:
     encoding "^0.1.11"
     is-stream "^1.0.1"
 
-node-fetch@^2.3.0:
-  version "2.6.0"
-  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
-  integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
-
 node-forge@0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a"
@@ -9398,21 +9388,16 @@ selfsigned@^1.10.6:
   dependencies:
     node-forge "0.8.2"
 
-"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.1, semver@^5.7.0:
-  version "5.7.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
-  integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
 semver@4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
   integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=
 
-semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
 semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
   version "6.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -10103,10 +10088,10 @@ terser@^4.1.2:
     source-map "~0.6.1"
     source-map-support "~0.5.12"
 
-tesseract.js-core@^2.0.0-beta.11:
-  version "2.0.0-beta.11"
-  resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.0.0-beta.11.tgz#c35e3e689efad30138603977ad7eaaac44c7fd37"
-  integrity sha512-07haKH2JYYo0OfIJoioMS9dDiI5Hrl7+r1MqjeNAAT5WpKO0ATe4cpncC8s1kz0e3s1kaC5WOwL3YJcjbJE+hg==
+tesseract.js-core@^2.0.0-beta.12:
+  version "2.0.0-beta.13"
+  resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.0.0-beta.13.tgz#a21d798e88098898a9bdd935d0553215e03274f8"
+  integrity sha512-GboWV/aV5h+Whito6L6Q3WCFZ2+lgxZGgjY84wSpWbTLEkkZgHsU+dz1or+3rWSABH/nuzHDco1bZRk5+f94mw==
 
 tesseract.js-utils@^1.0.0-beta.8:
   version "1.0.0-beta.8"
@@ -10120,18 +10105,17 @@ tesseract.js-utils@^1.0.0-beta.8:
     is-url "^1.2.4"
     zlibjs "^0.3.1"
 
-tesseract.js@^2.0.0-alpha.15:
-  version "2.0.0-alpha.15"
-  resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.0.0-alpha.15.tgz#9887f4d1c10e25bb098fde7a10580c865c362fad"
-  integrity sha512-qM1XUFVlTO+tx6oVRpd9QQ8PwQLxo3qhbfIHByUlUVIqWx6y/U9xlHIaG033/Tjfs2EQ0NAehPTOJ+eNElsXEg==
+tesseract.js@^2.0.0-alpha.16:
+  version "2.0.0-alpha.16"
+  resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.0.0-alpha.16.tgz#1e17717234a1464481abe12283f2c3ac79603d2e"
+  integrity sha512-8g3je2Kl8rkAFtpmwilGGj+8rCiPClNQaCjW6IafOPNn7hzFnVdL6fU6rG1Xsrc4Twv0HOa75kbpx5u70/WbTA==
   dependencies:
     axios "^0.18.0"
     check-types "^7.4.0"
     is-url "1.2.2"
-    node-fetch "^2.3.0"
     opencollective-postinstall "^2.0.2"
     resolve-url "^0.2.1"
-    tesseract.js-core "^2.0.0-beta.11"
+    tesseract.js-core "^2.0.0-beta.12"
     tesseract.js-utils "^1.0.0-beta.8"
 
 test-exclude@^5.0.0: