about summary refs log tree commit diff
path: root/config
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2017-09-09 14:27:47 -0500
committerDavid Yip <yipdw@member.fsf.org>2017-09-09 14:27:47 -0500
commitb9f7bc149b2a6abfbdaee83e6992b617b8bdb18e (patch)
tree355225f4424a6ea1b40c66c5540ccab42096e3bf /config
parente18ed4bbc7ab4e258d05a3e2a5db0790f67a8f37 (diff)
parent5d170587e3b6c1a3b3ebe0910b62a4c526e2900d (diff)
Merge branch 'origin/master' into sync/upstream
 Conflicts:
	app/javascript/mastodon/components/status_list.js
	app/javascript/mastodon/features/notifications/index.js
	app/javascript/mastodon/features/ui/components/modal_root.js
	app/javascript/mastodon/features/ui/components/onboarding_modal.js
	app/javascript/mastodon/features/ui/index.js
	app/javascript/styles/about.scss
	app/javascript/styles/accounts.scss
	app/javascript/styles/components.scss
	app/presenters/instance_presenter.rb
	app/services/post_status_service.rb
	app/services/reblog_service.rb
	app/views/about/more.html.haml
	app/views/about/show.html.haml
	app/views/accounts/_header.html.haml
	config/webpack/loaders/babel.js
	spec/controllers/api/v1/accounts/credentials_controller_spec.rb
Diffstat (limited to 'config')
-rw-r--r--config/brakeman.ignore50
-rw-r--r--config/environment.rb2
-rw-r--r--config/environments/development.rb5
-rw-r--r--config/i18n-tasks.yml4
-rw-r--r--config/initializers/devise.rb6
-rw-r--r--config/initializers/doorkeeper.rb2
-rw-r--r--config/initializers/inflections.rb1
-rw-r--r--config/initializers/json_ld.rb5
-rw-r--r--config/initializers/mime_types.rb2
-rw-r--r--config/initializers/ostatus.rb3
-rw-r--r--config/initializers/rack_attack.rb1
-rw-r--r--config/locales/ca.yml126
-rw-r--r--config/locales/devise.oc.yml14
-rw-r--r--config/locales/doorkeeper.en.yml18
-rw-r--r--config/locales/doorkeeper.fr.yml29
-rw-r--r--config/locales/doorkeeper.ja.yml14
-rw-r--r--config/locales/doorkeeper.oc.yml8
-rw-r--r--config/locales/doorkeeper.pl.yml24
-rw-r--r--config/locales/en.yml38
-rw-r--r--config/locales/fa.yml5
-rw-r--r--config/locales/fr.yml78
-rw-r--r--config/locales/ja.yml41
-rw-r--r--config/locales/ko.yml2
-rw-r--r--config/locales/nl.yml5
-rw-r--r--config/locales/oc.yml161
-rw-r--r--config/locales/pl.yml67
-rw-r--r--config/locales/ru.yml5
-rw-r--r--config/locales/simple_form.fr.yml5
-rw-r--r--config/locales/simple_form.pl.yml25
-rw-r--r--config/navigation.rb4
-rw-r--r--config/routes.rb32
-rw-r--r--config/sidekiq.yml3
-rw-r--r--config/webpack/loaders/babel.js4
33 files changed, 537 insertions, 252 deletions
diff --git a/config/brakeman.ignore b/config/brakeman.ignore
index f9bc77069..dbb59dd07 100644
--- a/config/brakeman.ignore
+++ b/config/brakeman.ignore
@@ -3,14 +3,33 @@
     {
       "warning_type": "Dynamic Render Path",
       "warning_code": 15,
+      "fingerprint": "44d3f14e05d8fbb5b23e13ac02f15aa38b2a2f0f03b9ba76bab7f98e155a4a4e",
+      "check_name": "Render",
+      "message": "Render path contains parameter value",
+      "file": "app/views/stream_entries/embed.html.haml",
+      "line": 3,
+      "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+      "code": "render(action => \"stream_entries/#{Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase}\", { Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase.to_sym => Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity, :centered => true })",
+      "render_path": [{"type":"controller","class":"StatusesController","method":"embed","line":35,"file":"app/controllers/statuses_controller.rb"}],
+      "location": {
+        "type": "template",
+        "template": "stream_entries/embed"
+      },
+      "user_input": "params[:id]",
+      "confidence": "Weak",
+      "note": ""
+    },
+    {
+      "warning_type": "Dynamic Render Path",
+      "warning_code": 15,
       "fingerprint": "9f31d941f3910dba2e9bfcd81aef4513249bd24c02d0f98e13ad44fdeeccd0e8",
       "check_name": "Render",
       "message": "Render path contains parameter value",
       "file": "app/views/admin/accounts/index.html.haml",
-      "line": 32,
+      "line": 63,
       "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
       "code": "render(action => filtered_accounts.page(params[:page]), {})",
-      "render_path": [{"type":"controller","class":"Admin::AccountsController","method":"index","line":7,"file":"app/controllers/admin/accounts_controller.rb"}],
+      "render_path": [{"type":"controller","class":"Admin::AccountsController","method":"index","line":10,"file":"app/controllers/admin/accounts_controller.rb"}],
       "location": {
         "type": "template",
         "template": "admin/accounts/index"
@@ -42,25 +61,6 @@
     {
       "warning_type": "Dynamic Render Path",
       "warning_code": 15,
-      "fingerprint": "c417f9d44ab05dd9cf3d5ec9df2324a5036774c151181787b32c4c940623191b",
-      "check_name": "Render",
-      "message": "Render path contains parameter value",
-      "file": "app/views/stream_entries/embed.html.haml",
-      "line": 2,
-      "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
-      "code": "render(action => Account.find_local!(params[:account_username]).stream_entries.where(:activity_type => \"Status\").find(params[:id]).activity_type.downcase, { Account.find_local!(params[:account_username]).stream_entries.where(:activity_type => \"Status\").find(params[:id]).activity_type.downcase.to_sym => Account.find_local!(params[:account_username]).stream_entries.where(:activity_type => \"Status\").find(params[:id]).activity, :centered => true })",
-      "render_path": [{"type":"controller","class":"StreamEntriesController","method":"embed","line":32,"file":"app/controllers/stream_entries_controller.rb"}],
-      "location": {
-        "type": "template",
-        "template": "stream_entries/embed"
-      },
-      "user_input": "params[:id]",
-      "confidence": "Weak",
-      "note": ""
-    },
-    {
-      "warning_type": "Dynamic Render Path",
-      "warning_code": 15,
       "fingerprint": "c5d6945d63264af106d49367228d206aa2f176699ecdce2b98fac101bc6a96cf",
       "check_name": "Render",
       "message": "Render path contains parameter value",
@@ -84,10 +84,10 @@
       "check_name": "Render",
       "message": "Render path contains parameter value",
       "file": "app/views/stream_entries/show.html.haml",
-      "line": 19,
+      "line": 23,
       "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
       "code": "render(partial => \"stream_entries/#{Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase}\", { :locals => ({ Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase.to_sym => Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity, :include_threads => true }) })",
-      "render_path": [{"type":"controller","class":"StatusesController","method":"show","line":15,"file":"app/controllers/statuses_controller.rb"}],
+      "render_path": [{"type":"controller","class":"StatusesController","method":"show","line":20,"file":"app/controllers/statuses_controller.rb"}],
       "location": {
         "type": "template",
         "template": "stream_entries/show"
@@ -97,6 +97,6 @@
       "note": ""
     }
   ],
-  "updated": "2017-05-07 08:26:06 +0900",
-  "brakeman_version": "3.6.1"
+  "updated": "2017-08-30 05:14:04 +0200",
+  "brakeman_version": "3.7.2"
 }
diff --git a/config/environment.rb b/config/environment.rb
index 426333bb4..caae5f1a0 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -3,3 +3,5 @@ require_relative 'application'
 
 # Initialize the Rails application.
 Rails.application.initialize!
+
+ActiveRecord::SchemaDumper.ignore_tables = ['deprecated_preview_cards']
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 4c60965c8..59bc2c3e2 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -16,9 +16,10 @@ Rails.application.configure do
   if Rails.root.join('tmp/caching-dev.txt').exist?
     config.action_controller.perform_caching = true
 
-    config.cache_store = :memory_store
+    config.cache_store = :redis_store, ENV['REDIS_URL'], REDIS_CACHE_PARAMS
+
     config.public_file_server.headers = {
-      'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}"
+      'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}",
     }
   else
     config.action_controller.perform_caching = false
diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml
index 849e8116a..b51cf46df 100644
--- a/config/i18n-tasks.yml
+++ b/config/i18n-tasks.yml
@@ -36,7 +36,7 @@ ignore_missing:
   - 'activerecord.attributes.*'
   - 'activerecord.errors.*'
   - '{devise,pagination,doorkeeper}.*'
-  - '{date,datetime,time}.*'
+  - '{date,datetime,time,number}.*'
   - 'simple_form.{yes,no}'
   - 'simple_form.{placeholders,hints,labels}.*'
   - 'simple_form.{error_notification,required}.:'
@@ -50,7 +50,7 @@ ignore_unused:
   - 'activerecord.attributes.*'
   - 'activerecord.errors.*'
   - '{devise,pagination,doorkeeper}.*'
-  - '{date,datetime,time}.*'
+  - '{date,datetime,time,number}.*'
   - 'simple_form.{yes,no}'
   - 'simple_form.{placeholders,hints,labels}.*'
   - 'simple_form.{error_notification,required}.:'
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index e6b0e90cb..64c4e12ff 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -154,7 +154,7 @@ Devise.setup do |config|
   # their account can't be confirmed with the token any more.
   # Default is nil, meaning there is no restriction on how long a user can take
   # before confirming their account.
-  # config.confirm_within = 3.days
+  config.confirm_within = 2.days
 
   # If true, requires any email changes to be confirmed (exactly the same way as
   # initial account confirmation) to be applied. Requires additional unconfirmed_email
@@ -167,7 +167,7 @@ Devise.setup do |config|
 
   # ==> Configuration for :rememberable
   # The time the user will be remembered without asking for credentials again.
-  # config.remember_for = 2.weeks
+  config.remember_for = 1.year
 
   # Invalidates all the remember me tokens when the user signs out.
   config.expire_all_remember_me_on_sign_out = true
@@ -177,7 +177,7 @@ Devise.setup do |config|
 
   # Options to be passed to the created cookie. For instance, you can set
   # secure: true in order to force SSL only cookies.
-  # config.rememberable_options = {}
+  config.rememberable_options = { secure: true }
 
   # ==> Configuration for :validatable
   # Range for password length.
diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb
index 056a3651a..689e2ac4a 100644
--- a/config/initializers/doorkeeper.rb
+++ b/config/initializers/doorkeeper.rb
@@ -50,7 +50,7 @@ Doorkeeper.configure do
   # Optional parameter :confirmation => true (default false) if you want to enforce ownership of
   # a registered application
   # Note: you must also run the rails g doorkeeper:application_owner generator to provide the necessary support
-  # enable_application_owner :confirmation => true
+  enable_application_owner
 
   # Define access token scopes for your provider
   # For more information go to
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index 44e54c9f3..bf0cb52a3 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -17,4 +17,5 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.acronym 'ActivityPub'
   inflect.acronym 'PubSubHubbub'
   inflect.acronym 'ActivityStreams'
+  inflect.acronym 'JsonLd'
 end
diff --git a/config/initializers/json_ld.rb b/config/initializers/json_ld.rb
new file mode 100644
index 000000000..2ddc7352d
--- /dev/null
+++ b/config/initializers/json_ld.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+require_relative '../../lib/json_ld/identity'
+require_relative '../../lib/json_ld/security'
+require_relative '../../lib/json_ld/activitystreams'
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
index 30e91ad63..58a6c0063 100644
--- a/config/initializers/mime_types.rb
+++ b/config/initializers/mime_types.rb
@@ -1,4 +1,4 @@
 # Be sure to restart your server when you modify this file.
 
-Mime::Type.register 'application/json', :json, %w(text/x-json application/jsonrequest application/jrd+json application/activity+json)
+Mime::Type.register 'application/json', :json, %w(text/x-json application/jsonrequest application/jrd+json application/activity+json application/ld+json)
 Mime::Type.register 'text/xml',         :xml,  %w(application/xml application/atom+xml application/xrd+xml)
diff --git a/config/initializers/ostatus.rb b/config/initializers/ostatus.rb
index 342996dcd..a885545f8 100644
--- a/config/initializers/ostatus.rb
+++ b/config/initializers/ostatus.rb
@@ -5,7 +5,7 @@ host     = ENV.fetch('LOCAL_DOMAIN') { "localhost:#{port}" }
 web_host = ENV.fetch('WEB_DOMAIN') { host }
 https    = ENV['LOCAL_HTTPS'] == 'true'
 
-alternate_domains = ENV.fetch('ALTERNATE_DOMAINS') { "" }
+alternate_domains = ENV.fetch('ALTERNATE_DOMAINS') { '' }
 
 Rails.application.configure do
   config.x.local_domain = host
@@ -17,6 +17,7 @@ Rails.application.configure do
 
   config.action_mailer.default_url_options = { host: web_host, protocol: https ? 'https://' : 'http://', trailing_slash: false }
   config.x.streaming_api_base_url          = 'ws://localhost:4000'
+  config.x.use_ostatus_privacy             = true
 
   if Rails.env.production?
     config.x.streaming_api_base_url = ENV.fetch('STREAMING_API_BASE_URL') { "ws#{https ? 's' : ''}://#{web_host}" }
diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb
index d5cd77b34..53cb106ca 100644
--- a/config/initializers/rack_attack.rb
+++ b/config/initializers/rack_attack.rb
@@ -33,6 +33,7 @@ class Rack::Attack
     match_data = env['rack.attack.match_data']
 
     headers = {
+      'Content-Type'          => 'application/json',
       'X-RateLimit-Limit'     => match_data[:limit].to_s,
       'X-RateLimit-Remaining' => '0',
       'X-RateLimit-Reset'     => (now + (match_data[:period] - now.to_i % match_data[:period])).iso8601(6),
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index a9f9e4c93..b6bff8288 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -5,15 +5,34 @@ ca:
     about_this: Sobre aquesta instància
     closed_registrations: Els registres estan actualment tancats en aquesta instància.
     contact: Contacte
+    contact_missing: No configurat
+    contact_unavailable: N/A
     description_headline: Què es %{domain}?
     domain_count_after: altres instàncies
     domain_count_before: Connectat a
+    extended_description_html: |
+      <h3>Un bon lloc per les regles</h3>
+      <p>Encara no s'ha configurat la descripció ampliada.</p>
+    features:
+      humane_approach_body: Aprenent dels errors d'altres xarxes, Mastodon té com a objectiu fer ètiques eleccions de disseny per combatre el mal ús de les xarxes socials.
+      humane_approach_title: Un enfocament més humà
+      not_a_product_body: Mastodon no és una xarxa comercial. Sense publicitat, sense mineria de dades, sense jardins amurallats. No hi ha autoritat central.
+      not_a_product_title: Ets una persona, no un producte
+      real_conversation_body: Amb 500 caràcters a la teva disposició i suport per a continguts granulars i avisos multimèdia, pots expressar-te de la manera que vulguis.
+      real_conversation_title: Construït per a converses reals
+      within_reach_body: Diverses aplicacions per a iOS, Android i altres plataformes gràcies a un ecosistema API amable amb el desenvolupador, et permet mantenir-te al dia amb els teus amics en qualsevol lloc..
+      within_reach_title: Sempre a l'abast
+    find_another_instance: Troba altres instàncies
+    generic_description: "%{domain} és un servidor a la xarxa"
+    hosted_on: Mastodon allotjat a %{domain}
+    learn_more: Aprèn més
     other_instances: Altres instàncies
     source_code: Codi font
     status_count_after: estats
     status_count_before: Que han escrit
     user_count_after: usuaris registrats
     user_count_before: Tenim
+    what_is_mastodon: Què és Mastodon?
   accounts:
     follow: Seguir
     followers: Seguidors
@@ -90,12 +109,14 @@ ca:
         hint: El bloqueig de domini no impedirà la creació de nous comptes en la base de dades, però s´aplicaran mètodes de moderació específics sobre aquests comptes
         severity:
           desc_html: "<strong>Silenci</strong> farà les publicacions del compte invisibles a tothom que no l'estigui seguint. Suspendre eliminarà tots els continguts, multimèdia i les dades del perfil del compte."
+          noop: Cap
           silence: Silenci
           suspend: Suspendre
         title: Nou bloqueig de domini
       reject_media: Rebutjar arxius multimèdia
       reject_media_hint: Elimina arxius multimèdia emmagatzamats localment i impideix descarregar cap en el futur. Irrellevant per suspensions
       severities:
+        noop: Cap
         silence: Silenci
         suspend: Suspendre
       severity: Severitat
@@ -146,16 +167,41 @@ ca:
         closed_message:
           desc_html: Apareix en la primera pàgina quan es tanquen els registres<br>Pot utilitzar etiquetes HTML
           title: Missatge de registre tancat
+        deletion:
+          desc_html: Permet a qualsevol esborrar el seu compte
+          title: Obrir la supressió del compte
         open:
+          desc_html: Permet que qualsevol pugui crear un compte
           title: Registre obert
       site_description:
         desc_html: Es mostra com un paràgraf a la pàgina principal i s'utilitza com una etiqueta meta.<br>Pots utilitzar etiquetes HTML, en particular <code>&lt;a&gt;</code> i <code>&lt;em&gt;</code>.
         title: Descripció del lloc
       site_description_extended:
-        desc_html: Apareix a la pàgina d'informació estesa<br>Pot utilitzar etiquetes HTML
+        desc_html: Un bon lloc per al vostre codi de conducta, regles, directrius i altres coses que distingeixen la vostra instància. Podeu utilitzar etiquetes HTML
         title: Descripció estesa del lloc
+      site_terms:
+        desc_html: Pots escriure la teva pròpia política de privadesa, els termes del servei o d'altres normes legals. Pots utilitzar etiquetes HTML
+        title: Termes del servei personalitzats
       site_title: Títol del lloc
+      timeline_preview:
+        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
+    statuses:
+      back_to_account: Torna a la pàgina del compte
+      batch:
+        delete: Esborra
+        nsfw_off: NSFW OFF
+        nsfw_on: NSFW ON
+      execute: Executa
+      failed_to_execute: No s'ha pogut executar
+      media:
+        hide: Amaga multimèdia
+        show: Mostra multimèdia
+        title: Multimèdia
+      no_media: Sense multimèdia
+      title: Estats del compte
+      with_media: Amb multimèdia
     subscriptions:
       callback_url: Callback URL
       confirmed: Confirmat
@@ -164,18 +210,25 @@ ca:
       title: WebSub
       topic: Tòpic
     title: Administració
+  admin_mailer:
+    new_report:
+      body: "%{reporter} ha informat de %{target}"
+      subject: Nou informe per a %{instance} (#%{id})
   application_mailer:
+    salutation: "%{name},"
     settings: 'Canviar preferències de correu: %{link}'
     signature: Notificacions de Mastodon desde %{instance}
     view: 'Vista:'
   applications:
     invalid_url: La URL proporcionada es incorrecte
   auth:
+    agreement_html: En inscriure't, acceptes <a href="%{rules_path}">les nostres termes del servei</a> i <a href="%{terms_path}">la nostra política de privadesa</a>.
     change_password: Canviar contrasenya
     delete_account: Esborrar el compte
     delete_account_html: Si vols esborrar el teu compte pots <a href="%{path}">fer-ho aquí</a>. S'et demanarà confirmació.
     didnt_get_confirmation: No vas rebre el correu de confirmació?
     forgot_password: Has oblidat la contrasenya?
+    invalid_reset_password_token: L'enllaç de restabliment de la contrasenya no és vàlid o caducat. Siusplau torna-ho a provar..
     login: Iniciar sessió
     logout: Tancar sessió
     register: Enregistrarse
@@ -185,6 +238,12 @@ ca:
   authorize_follow:
     error: Malauradament, ha ocorregut un error buscant el compte remot
     follow: Seguir
+    follow_request: 'Heu enviat una sol·licitud de seguiment a:'
+    following: 'Èxit! Ara segueixes:'
+    post_follow:
+      close: O bé, pots tancar aquesta finestra.
+      return: Torna al perfil de l'usuari
+      web: Anar a la web
     title: Seguir %{acct}
   datetime:
     distance_in_words:
@@ -216,7 +275,7 @@ ca:
       content: La verificació de seguretat ha fallat. Bloquejes les galetes?
       title: La verificació de seguretat ha fallat
     '429': Estrangulat
-    noscript: Per utilitzar Mastodon si us plau activa JavaScript.
+    noscript_html: Per utilitzar Mastodon si us plau activa JavaScript.
   exports:
     blocks: Persones que has bloquejat
     csv: CSV
@@ -254,7 +313,7 @@ ca:
   landing_strip_signup_html: Si no en tens, pots <a href="%{sign_up_path}">registrar-te aquí</a>.
   media_attachments:
     validations:
-      images_and_video: No es pot adjuntar un vídeo a un estat que ja contingui imatges
+      images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges
       too_many: No es poden adjuntar més de 4 arxius
   notification_mailer:
     digest:
@@ -285,11 +344,64 @@ ca:
     next: Pròxim
     prev: Anterior
     truncate: "&hellip;"
+  push_notifications:
+    favourite:
+      title: "%{name} favourited your status"
+    follow:
+      title: "%{name} is now following you"
+    group:
+      title: "%{count} notifications"
+    mention:
+      action_boost: Boost
+      action_expand: Mostra més
+      action_favourite: Favorit
+      title: "%{name} t'ha mencionat"
+    reblog:
+      title: "%{name} t'ha retootejat"
   remote_follow:
     acct: Escriu el usuari@domini de la persona que vols seguir
     missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per el compte.
     proceed: Procedir a seguir
     prompt: 'Seguiràs a:'
+  sessions:
+    activity: Última activitat
+    browser: Navegador
+    browsers:
+      alipay: Alipay
+      blackberry: Blackberry
+      chrome: Chrome
+      edge: Microsoft Edge
+      firefox: Firefox
+      generic: Navegador desconegut
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Nokia S40 Ovi Browser
+      opera: Opera
+      phantom_js: PhantomJS
+      qq: QQ Browser
+      safari: Safari
+      uc_browser: UCBrowser
+      weibo: Weibo
+    current_session: Sessió actual
+    description: "%{browser} de %{platform}"
+    explanation: Aquests són els navegadors web que actualment han iniciat la sessió al teu compte de Mastodon.
+    ip: IP
+    platforms:
+      adobe_air: Adobe Air
+      android: Android
+      blackberry: Blackberry
+      chrome_os: ChromeOS
+      firefox_os: Firefox OS
+      ios: iOS
+      linux: Linux
+      mac: Mac
+      other: plataforma desconeguda
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
+    revoke: Revoca
+    revoke_success: S'ha revocat la sessió amb èxit
+    title: Sessions
   settings:
     authorized_apps: Aplicacions autoritzades
     back: Tornar al inici
@@ -316,19 +428,24 @@ ca:
     click_to_show: Clic per mostrar
     reblogged: retooteado
     sensitive_content: Contingut sensible
+  terms:
+    body_html: "<h2>Política de privacitat</h2>\n\n<h3 id=\"collect\">Quina informació recollim?</h3>\n\n<p>Recopilem informació teva quan et registres en aquesta instància i recopilem dades quan participes en el fòrum llegint, escrivint i avaluant el contingut aquí compartit.</p>\n\n<p>En registrar-te en aquesta instància, se't pot demanar que introduexisu el teu nom i l'adreça de correu electrònic. També pots visitar el nostre lloc sense registrar-te. La teva adreça de correu electrònic es verificarà mitjançant un correu electrònic que conté un enllaç únic. Si es visita aquest enllaç, sabem que controles l'adreça de correu electrònic.</p>\n\n<p>Quan es registra i publica, registrem l'adreça IP de la qual es va originar la publicació. També podrem conservar els registres del servidor que inclouen l'adreça IP de cada sol·licitud al nostre servidor.</p>\n\n<h3 id=\"use\">Per a què utilitzem la teva informació?</h3>\n\n<p>Qualsevol de la informació que recopilem de tu pot utilitzar-se d'una de les maneres següents:</p>\n\n<ul>\n  <li>Per a personalitzar la teva experiència &mdash; la teva informació ens ajuda a respondre millor a les teves necessitats individuals.</li>\n  <li>Per millorar el nostre lloc &mdash; ens esforcem contínuament per millorar les nostres ofertes de llocs basats en la informació i els comentaris que rebem de tu.</li>\n  <li>Per millorar el servei al client &mdash; la teva informació ens ajuda a respondre més eficaçment a les teves sol·licituds de servei al client i a les necessitats de suport.</li>\n  <li>Per enviar correus electrònics periòdics &mdash; l'adreça electrònica que proporcionis es pot utilitzar per enviar-te informació, notificacions que sol·licitis sobre canvis en temes o en resposta al teu nom d'usuari, respondre a les consultes i/o altres sol·licituds o preguntes.</li>\n</ul>\n\n<h3 id=\"protect\">Com protegim la teva informació?</h3>\n\n<p>Implementem diverses mesures de seguretat per mantenir la seguretat de la teva informació personal quan introdueixes, envies o accedeixes a la teva informació personal.</p>\n\n<h3 id=\"data-retention\">Quina és la nostre política de retenció de dades?</h3>\n\n<p>Farem un esforç de bona fe per a:</p>\n\n<ul>\n  <li>Conserva els registres de servidor que continguin l'adreça IP de totes les sol·licituds a aquest servidor no més de 90 dies.</li>\n  <li>Conserva les adreces IP associades als usuaris registrats i les seves publicacions no més de 5 anys.</li>\n</ul>\n\n<h3 id=\"cookies\">Utilitzem galetes?</h3>\n\n<p>Sí. Les cookies són fitxers petits que un lloc o el proveïdor de serveis transfereix al disc dur del vostre ordinador a través del navegador web (si ho permet). Aquestes galetes permeten al lloc reconèixer el vostre navegador i, si teniu un compte registrat, associar-lo al vostre compte registrat.</p>\n\n<p>Utilitzem cookies per comprendre i desar les vostres preferències per a futures visites i compilar dades agregades sobre el trànsit del lloc i la interacció del lloc, de manera que podrem oferir millors experiències i eines del lloc en el futur. Podem contractar amb proveïdors de serveis de tercers per ajudar-nos a comprendre millor els visitants del nostre lloc. Aquests proveïdors de serveis no estan autoritzats a utilitzar la informació recollida en nom nostre, excepte per ajudar-nos a dur a terme i millorar el nostre negoci.</p>\n\n<h3 id=\"disclose\">Publiquem informació al exterior?</h3>\n\n<p>No venem, comercialitzem ni transmetem a tercers la vostra informació d'identificació personal. Això no inclou tercers de confiança que ens ajudin a operar el nostre lloc, a dur a terme el nostre negoci o a fer-ho, sempre que aquestes parts acceptin mantenir confidencial aquesta informació. També podem publicar la vostra informació quan creiem que l'alliberament és apropiat per complir amb la llei, fer complir les polítiques del nostre lloc o protegir els nostres drets o altres drets, propietat o seguretat. No obstant això, la informació de visitant que no sigui personalment identificable es pot proporcionar a altres parts per a la comercialització, la publicitat o altres usos.</p>  \n\n<h3 id=\"third-party\">Vincles de tercers</h3>\n\n<p>De tant en tant, segons el nostre criteri, podem incloure o oferir productes o serveis de tercers al nostre lloc. Aquests llocs de tercers tenen polítiques de privadesa separades i independents. Per tant, no tenim responsabilitat ni responsabilitat civil pel contingut i les activitats d'aquests llocs enllaçats. No obstant això, busquem protegir la integritat del nostre lloc i donem la benvinguda a qualsevol comentari sobre aquests llocs.</p>\n\n<h3 id=\"coppa\">Compliment de la Llei de protecció de la privacitat en línia dels nens</h3>\n\n<p>El nostre lloc, productes i serveis estan dirigits a persones que tenen almenys 13 anys. Si aquest servidor es troba als EUA, i teniu menys de 13 anys, segons els requisits de COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) no feu servir aquest lloc.</p>\n\n<h3 id=\"online\">Només la política de privacitat en línia</h3>\n\n<p>Aquesta política de privacitat en línia només s'aplica a la informació recopilada a través del nostre lloc i no a la informació recopilada fora de línia.</p>\n\n<h3 id=\"consent\">El vostre consentiment</h3>\n\n<p>En utilitzar el nostre lloc, accepta la política de privadesa del nostre lloc web.</p>\n\n<h3 id=\"changes\">Canvis a la nostra política de privacitat</h3>\n\n<p>Si decidim canviar la nostra política de privadesa, publicarem aquests canvis en aquesta pàgina.</p>\n\n<p>Aquest document és CC-BY-SA. Es va actualitzar per última vegada el 31 de maig de 2013.</p>\n\n<p>Originalment adaptat a la <a href=\"https://github.com/discourse/discourse\">política de privadesa del Discurs</a>.</p>\n"
+    title: "%{instance} Condicions del servei i política de privadesa"
   time:
     formats:
       default: "%b %d, %Y, %H:%M"
   two_factor_authentication:
     code_hint: Introdueix el codi generat per l'aplicació autenticadora per a confirmar
     description_html: Si habilites la <strong>autenticació de dos factors</strong>, et caldrà tenir el teu telèfon, que generarà tokens per a que puguis iniciar sessió.
-    disable: Deshabilitar
+    disable: Deshabilitarr
     enable: Habilitar
+    enabled: Two-factor authentication is enabled
     enabled_success: Autenticació de dos factors activada amb èxit
     generate_recovery_codes: Generar codis de recuperació
     instructions_html: "<strong>Escaneja aquest codi QR desde Google Authenticator o una aplicació similar del teu telèfon</strong>. Desde ara, aquesta aplicació generarà tokens que tens que ingresar quan volguis iniciar sessió."
     lost_recovery_codes: Els codis de recuperació et permeten recuperar l'accés al teu compte si perds el telèfon. Si has perdut els teus codis de recuperació els pots regenerar aquí. Els codis de recuperació anteriors seran anul·lats.
     manual_instructions: 'Si no pots escanejar el codi QR code i necessites introduir-lo manualment, aquí tens el secret en text plà:'
+    recovery_codes: Backup recovery codes
     recovery_codes_regenerated: Codis de recuperació regenerats amb èxit
     recovery_instructions_html: Si alguna vegada perds l'accéss al telèfon pots utilitzar un dels codis de recuperació a continuació per recuperar l'accés al teu compte. Cal mantenir els codis de recuperació en lloc segur, per exemple imprimint-los i guardar-los amb altres documents importants.
     setup: Establir
@@ -336,3 +453,4 @@ ca:
   users:
     invalid_email: La direcció de correu es incorrecte
     invalid_otp_token: Codi de dos factors incorrecte
+    signed_in_as: 'Sessió iniciada com a:'
diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml
index 77740f230..99e62a10e 100644
--- a/config/locales/devise.oc.yml
+++ b/config/locales/devise.oc.yml
@@ -19,11 +19,11 @@ oc:
       confirmation_instructions:
         subject: "Mercés de confirmar vòstra inscripcion sus %{instance}"
       password_change:
-        subject: 'Mastodon : senhal cambiat'
+        subject: 'Mastodon : senhal cambiat'
       reset_password_instructions:
-        subject: 'Mastodon : instruccions per reïnicializar lo senhal'
+        subject: 'Mastodon : instruccions per reïnicializar lo senhal'
       unlock_instructions:
-        subject: 'Mastodon : instuccions de desblocatge'
+        subject: 'Mastodon : instuccions de desblocatge'
     omniauth_callbacks:
       failure: Fracàs al moment de vos autentificar de %{kind} perque "%{reason}".
       success: Sètz ben autentificat dempuèi lo compte %{kind}.
@@ -34,8 +34,8 @@ oc:
       updated: Vòstre senhal es ben estat cambiat. Sètz ara connectat.
       updated_not_active: Vòstre senhal es ben estat cambiat.
     registrations:
-      destroyed: Adiu ! Vòstra inscripcion es estada anullada amb succès. Esperem vos tornar veire lèu.
-      signed_up: La benvenguda ! Sètz ben marcat al malhum.
+      destroyed: Adiu ! Vòstra inscripcion es estada anullada amb succès. Esperem vos tornar veire lèu.
+      signed_up: La benvenguda ! Sètz ben marcat al malhum.
       signed_up_but_inactive: Sètz ben marcat. Pasmens, avèm pas pogut vos connectar perque vòstre compte es pas encara validat.
       signed_up_but_locked: Sètz ben marcat. Pasmens, avèm pas pogut vos connectar perque vòstre compte es pas encara blocat.
       signed_up_but_unconfirmed: Un messatge amb un ligam de confirmacion es estat enviat a vòstra adreça de corrièl. Clicatz sul ligam per activar vòstre compte. Mercés de verificar tanben vòstre dorsièr de corrièls indesirables.
@@ -57,5 +57,5 @@ oc:
       not_found: pas trobat
       not_locked: èra pas blocat
       not_saved:
-        one: '1 error defend aquesta %{resource} d’èsser salvagardada :'
-        other: "%{count} errors defendon aquesta %{resource} d’èsser salvagardadas :"
+        one: '1 error defend aquesta %{resource} d’èsser salvagardada :'
+        other: "%{count} errors defendon aquesta %{resource} d’èsser salvagardadas :"
diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml
index 6412b8b48..efbd81d43 100644
--- a/config/locales/doorkeeper.en.yml
+++ b/config/locales/doorkeeper.en.yml
@@ -3,8 +3,10 @@ en:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Name
+        name: Application name
         redirect_uri: Redirect URI
+        scopes: Scopes
+        website: Application website
     errors:
       models:
         doorkeeper/application:
@@ -33,18 +35,22 @@ en:
         redirect_uri: Use one line per URI
         scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       index:
+        application: Application
         callback_url: Callback URL
+        delete: Delete
         name: Name
-        new: New Application
+        new: New application
+        scopes: Scopes
+        show: Show
         title: Your applications
       new:
-        title: New Application
+        title: New application
       show:
         actions: Actions
-        application_id: Application Id
-        callback_urls: Callback urls
+        application_id: Client key
+        callback_urls: Callback URLs
         scopes: Scopes
-        secret: Secret
+        secret: Client secret
         title: 'Application: %{name}'
     authorizations:
       buttons:
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 0e74532c1..487018209 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -1,28 +1,14 @@
 ---
 fr:
-  activemodel:
-    errors:
-      models:
-        remote_follow:
-          attributes:
-            acct:
-              blank: Le nom d’utilisateur ne doit pas être vide
   activerecord:
     attributes:
       doorkeeper/application:
         name: Nom
         redirect_uri: L’URL de redirection
+        scope: Portée
+        website: Site Web de l'application
     errors:
-      messages:
-        record_invalid: Données invalides
       models:
-        account:
-          attributes:
-            note:
-              too_long: Description trop longue
-            username:
-              blank: Identifiant vide
-              taken: Identifiant déjà pris
         doorkeeper/application:
           attributes:
             redirect_uri:
@@ -30,17 +16,6 @@ fr:
               invalid_uri: doit être une URL valide.
               relative_uri: doit être une URL absolue.
               secured_uri: doit être une URL HTTP/SSL.
-        user:
-          attributes:
-            email:
-              blank: Courriel vide
-              invalid: Courriel invalide
-              taken: Courriel pris
-            password:
-              blank: Mot de passe vide
-              too_short: Mot de passe trop court
-            password_confirmation:
-              confirmation: Le mot de passe ne correspond pas
   doorkeeper:
     applications:
       buttons:
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index d3ea93789..9e3b72761 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -3,8 +3,10 @@ ja:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 名前
+        name: アプリの名前
         redirect_uri: リダイレクトURI
+        scopes: アクセス権
+        website: アプリのウェブサイト
     errors:
       models:
         doorkeeper/application:
@@ -33,18 +35,22 @@ ja:
         redirect_uri: 一行に一つのURLを入力してください
         scopes: アクセス権は半角スペースで区切ることができます。 空白のままにするとデフォルトを使用します。
       index:
+        application: アプリ
         callback_url: コールバックURL
+        delete: 削除
         name: 名前
         new: 新規アプリ
+        scopes: アクセス権
+        show: 見る
         title: アプリ
       new:
         title: 新規アプリ
       show:
         actions: アクション
-        application_id: アクションId
-        callback_urls: コールバックurl
+        application_id: クライアントキー
+        callback_urls: コールバックURL
         scopes: アクセス権
-        secret: 非公開
+        secret: クライアントシークレット
         title: 'アプリ: %{name}'
     authorizations:
       buttons:
diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml
index 9f5d3fe55..3d12c9588 100644
--- a/config/locales/doorkeeper.oc.yml
+++ b/config/locales/doorkeeper.oc.yml
@@ -23,11 +23,11 @@ oc:
         edit: Modificar
         submit: Mandar
       confirmations:
-        destroy: Sètz segur ?
+        destroy: Sètz segur ?
       edit:
         title: Modificar l’aplicacion
       form:
-        error: Ops ! Verificatz vòstre formulari
+        error: Ops ! Verificatz vòstre formulari
       help:
         native_redirect_uri: Emplegatz %{native_redirect_uri} per d’ensages locales
         redirect_uri: Utilizatz una linha per URI
@@ -45,7 +45,7 @@ oc:
         callback_urls: urls de rapèls
         scopes: Encastres
         secret: Secret
-        title: 'Aplicacion : %{name}'
+        title: 'Aplicacion : %{name}'
     authorizations:
       buttons:
         authorize: Autorizar
@@ -62,7 +62,7 @@ oc:
       buttons:
         revoke: Revocar
       confirmations:
-        revoke: Ne sètz segur ?
+        revoke: Ne sètz segur ?
       index:
         application: Aplicacion
         created_at: Creada lo
diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml
index 72b967e35..ee3f4cad8 100644
--- a/config/locales/doorkeeper.pl.yml
+++ b/config/locales/doorkeeper.pl.yml
@@ -3,8 +3,10 @@ pl:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Nazwa
+        name: Nazwa aplikacji
         redirect_uri: URI przekierowania
+        scopes: Zakres
+        website: Strona aplikacji
     errors:
       models:
         doorkeeper/application:
@@ -33,9 +35,13 @@ pl:
         redirect_uri: Jeden adres na linię tekstu
         scopes: Rozdziel zakresy (scopes) spacjami. Zostaw puste, aby użyć domyślnych zakresów.
       index:
+        application: Aplikacja
         callback_url: URL wywołania zwrotnego (callback)
+        delete: Usuń
         name: Nazwa
         new: Nowa aplikacja
+        scopes: Zakres
+        show: Pokaż
         title: Twoje aplikacje
       new:
         title: Nowa aplikacja
@@ -72,7 +78,7 @@ pl:
     errors:
       messages:
         access_denied: Właściciel zasobu lub serwer autoryzujący odrzuciły żądanie.
-        credential_flow_not_configured: Ścieżka "Resource Owner Password Credentials" zakończyła się błędem, ponieważ Doorkeeper.configure.resource_owner_from_credentials nie jest skonfigurowany.
+        credential_flow_not_configured: Ścieżka "Resource Owner Password Credentials" zakończyła się błędem, ponieważ Doorkeeper.configure.resource_owner_from_credentials nie został skonfigurowany.
         invalid_client: Autoryzacja klienta nie powiodła się z powodu nieznanego klienta, braku uwierzytelnienia klienta, lub niewspieranej metody uwierzytelniania.
         invalid_grant: Grant uwierzytelnienia jest niepoprawny, przeterminowany, unieważniony, nie pasuje do URI przekierowwania użytego w żądaniu uwierzytelnienia, lub został wystawiony przez innego klienta.
         invalid_redirect_uri: URI przekierowania jest nieprawidłowy.
@@ -83,8 +89,8 @@ pl:
           expired: Token dostępowy wygasł
           revoked: Token dostępowy został unieważniony
           unknown: Token dostępowy jest błędny
-        resource_owner_authenticator_not_configured: Wyszukiwanie właściciela zasobu nie powiodło się, ponieważ Doorkeeper.configure.resource_owner_authenticator jest nieskonfigurowany.
-        server_error: Serwer uwierzytelniający napotkał niespodziewane warunki, które uniemożliwiły obsłużenie żądania.
+        resource_owner_authenticator_not_configured: Wyszukiwanie właściciela zasobu nie powiodło się, ponieważ Doorkeeper.configure.resource_owner_authenticator nie został skonfigurowany.
+        server_error: Serwer uwierzytelniający napotkał nieoczekiwand warunki, które uniemożliwiły obsłużenie żądania.
         temporarily_unavailable: Serwer uwierzytelniający nie jest obecnie w stanie obsłużyć żądania z powodu tymczasowego przeciążenia lub prac konserwacyjnych.
         unauthorized_client: Klient nie jest uprawniony do wykonania tego żądania przy pomocy tej metody.
         unsupported_grant_type: Ten typ grantu uwierzytelniającego nie jest wspierany przez serwer uwierzytelniający.
@@ -92,14 +98,14 @@ pl:
     flash:
       applications:
         create:
-          notice: Aplikacja utworzona.
+          notice: Utworzono aplikację.
         destroy:
-          notice: Aplikacja usunięta.
+          notice: Usunięto aplikację.
         update:
-          notice: Aplikacja zaktualizowana.
+          notice: Zaktualizowano aplikację.
       authorized_applications:
         destroy:
-          notice: Aplikacja unieważniona.
+          notice: Unieważniono aplikację.
     layouts:
       admin:
         nav:
@@ -110,4 +116,4 @@ pl:
     scopes:
       follow: śledzenie, blokowanie, usuwanie blokady, anulowanie śledzenia kont
       read: dostęp do odczytu danych konta
-      write: publikowanie postów w Twoim imieniu
+      write: publikowanie wpisów w Twoim imieniu
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 1fa0de90b..4160745f8 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -37,12 +37,16 @@ en:
     follow: Follow
     followers: Followers
     following: Following
+    media: Media
     nothing_here: There is nothing here!
     people_followed_by: People whom %{name} follows
     people_who_follow: People who follow %{name}
-    posts: Posts
+    posts: Toots
+    posts_with_replies: Toots with replies
     remote_follow: Remote follow
     reserved_username: The username is reserved
+    roles:
+      admin: Admin
     unfollow: Unfollow
   admin:
     accounts:
@@ -57,6 +61,7 @@ en:
       feed_url: Feed URL
       followers: Followers
       follows: Follows
+      inbox_url: Inbox URL
       ip: IP
       location:
         all: All
@@ -76,8 +81,10 @@ en:
         alphabetic: Alphabetic
         most_recent: Most recent
         title: Order
+      outbox_url: Outbox URL
       perform_full_suspension: Perform full suspension
       profile_url: Profile URL
+      protocol: Protocol
       public: Public
       push_subscription_expires: PuSH subscription expires
       redownload: Refresh avatar
@@ -220,7 +227,13 @@ en:
     signature: Mastodon notifications from %{instance}
     view: 'View:'
   applications:
+    created: Application successfully created
+    destroyed: Application successfully deleted
     invalid_url: The provided URL is invalid
+    regenerate_token: Regenerate access token
+    token_regenerated: Access token successfully regenerated
+    warning: Be very careful with this data. Never share it with anyone!
+    your_token: Your access token
   auth:
     agreement_html: By signing up you agree to <a href="%{rules_path}">our terms of service</a> and <a href="%{terms_path}">privacy policy</a>.
     change_password: Security
@@ -275,7 +288,7 @@ en:
       content: Security verification failed. Are you blocking cookies?
       title: Security verification failed
     '429': Throttled
-    noscript: To use the Mastodon web application, please enable JavaScript. Alternatively, find a native app for Mastodon for your platform.
+    noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">native apps</a> for Mastodon for your platform.
   exports:
     blocks: You block
     csv: CSV
@@ -340,6 +353,17 @@ en:
     reblog:
       body: 'Your status was boosted by %{name}:'
       subject: "%{name} boosted your status"
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: B
+          million: M
+          quadrillion: Q
+          thousand: K
+          trillion: T
+          unit: ''
   pagination:
     next: Next
     prev: Prev
@@ -358,9 +382,6 @@ en:
       title: "%{name} mentioned you"
     reblog:
       title: "%{name} boosted your status"
-    subscribed:
-      body: You can now receive push notifications.
-      title: Subscription registered!
   remote_follow:
     acct: Enter your username@domain you want to follow from
     missing_resource: Could not find the required redirect URL for your account
@@ -409,6 +430,7 @@ en:
     authorized_apps: Authorized apps
     back: Back to Mastodon
     delete: Account deletion
+    development: Development
     edit_profile: Edit profile
     export: Data export
     followers: Authorized followers
@@ -416,9 +438,14 @@ en:
     preferences: Preferences
     settings: Settings
     two_factor_authentication: Two-factor Authentication
+    your_apps: Your applications
   statuses:
     open_in_web: Open in web
     over_character_limit: character limit of %{max} exceeded
+    pin_errors:
+      ownership: Someone else's toot cannot be pinned
+      private: Non-public toot cannot be pinned
+      reblog: A boost cannot be pinned
     show_more: Show more
     visibilities:
       private: Followers-only
@@ -429,6 +456,7 @@ en:
       unlisted_long: Everyone can see, but not listed on public timelines
   stream_entries:
     click_to_show: Click to show
+    pinned: Pinned toot
     reblogged: boosted
     sensitive_content: Sensitive content
   terms:
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 0c575e23e..08ffb4484 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -274,7 +274,7 @@ fa:
       content: تأیید امنیتی انجام نشد. آیا مرورگر شما کوکی‌ها را مسدود می‌کند؟
       title: تأیید امنیتی شکست خورد
     '429': درخواست‌های بیش از حد
-    noscript: برای استفاده از نسخهٔ تحت وب ماستدون، لطفاً جاوااسکریپت را فعال کنید. یا به جایش می‌توانید یک اپ ماستدون را به‌کار ببرید.
+    noscript_html: برای استفاده از نسخهٔ تحت وب ماستدون، لطفاً جاوااسکریپت را فعال کنید. یا به جایش می‌توانید یک اپ ماستدون را به‌کار ببرید.
   exports:
     blocks: حساب‌های مسدودشده
     csv: CSV
@@ -357,9 +357,6 @@ fa:
       title: "%{name} از شما نام برد"
     reblog:
       title: "%{name} نوشتهٔ شما را بازبوقید"
-    subscribed:
-      body: از این به بعد سرور می‌تواندبه شما اعلان‌های تازه بفرستد .
-      title: عضویت ثبت شد!
   remote_follow:
     acct: نشانی حساب username@domain خود را این‌جا بنویسید
     missing_resource: نشانی اینترنتی برای رسیدن به حساب شما پیدا نشد
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index d7aa41497..8029d8bd5 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -5,9 +5,14 @@ fr:
     about_this: À propos
     closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau.
     contact: Contact
+    contact_missing: Manquant
+    contact_unavailable: Non disponible
     description_headline: Qu’est-ce que %{domain} ?
     domain_count_after: autres instances
     domain_count_before: Connectés à
+    extended_description_html: |
+      <h3>Un bon endroit pour les règles</h3>
+      <p>La description étendue n'a pas été remplie.</p>
     features:
       humane_approach_body: Ayant appris des échecs d’autres réseaux, Mastodon à l’ambition de combattre l’abus des médias sociaux en effectuant des choix de conception éthiques.
       humane_approach_title: Une approche plus humaine
@@ -23,7 +28,7 @@ fr:
     learn_more: En savoir plus
     other_instances: Liste des instances
     source_code: Code source
-    status_count_after: posts
+    status_count_after: statuts
     status_count_before: Ayant publié
     user_count_after: utilisateur⋅ice⋅s
     user_count_before: Abrite
@@ -32,12 +37,16 @@ fr:
     follow: Suivre
     followers: Abonné⋅es
     following: Abonnements
+    media: Médias
     nothing_here: Rien à voir ici !
     people_followed_by: Personnes suivies par %{name}
     people_who_follow: Personnes qui suivent %{name}
     posts: Statuts
+    posts_with_replies: Statuts & réponses
     remote_follow: Suivre à distance
     reserved_username: Ce nom d’utilisateur⋅ice est réservé
+    roles:
+      admin: Admin
     unfollow: Ne plus suivre
   admin:
     accounts:
@@ -52,6 +61,7 @@ fr:
       feed_url: URL du flux
       followers: Abonné⋅es
       follows: Abonnements
+      inbox_url: URL d'entrée
       ip: Adresse IP
       location:
         all: Tous
@@ -71,8 +81,10 @@ fr:
         alphabetic: Alphabétique
         most_recent: Plus récent
         title: Tri
+      outbox_url: URL de sortie
       perform_full_suspension: Effectuer une suspension complète
       profile_url: URL du profil
+      protocol: Protocole
       public: Public
       push_subscription_expires: Expiration de l’abonnement PuSH
       redownload: Rafraîchir les avatars
@@ -104,12 +116,14 @@ fr:
         hint: Le blocage de domaine n’empêchera pas la création de comptes dans la base de données, mais il appliquera automatiquement et rétrospectivement des méthodes de modération spécifiques sur ces comptes.
         severity:
           desc_html: "<strong>Silence</strong> rendra les messages des comptes concernés invisibles à ceux qui ne les suivent pas. <strong>Suspend</strong> supprimera tout le contenu des comptes concernés, les médias, et les données du profil."
+          noop: Aucune
           silence: Masqué
           suspend: Suspendre
         title: Nouveau blocage de domaine
       reject_media: Fichiers média rejetés
       reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions.
       severities:
+        noop: Aucune
         silence: Masquer
         suspend: Suspendre
       severity: Séverité
@@ -187,7 +201,7 @@ fr:
         nsfw_off: NSFW OFF
         nsfw_on: NSFW ON
       execute: Exécuter
-      failed_to_execute: Erreur d'exécution
+      failed_to_execute: Erreur d’exécution
       media:
         hide: Masquer les médias
         show: Montrer les médias
@@ -212,12 +226,18 @@ fr:
     signature: Notifications de Mastodon depuis %{instance}
     view: 'Voir :'
   applications:
+    created: Application créée avec succès
+    destroyed: Application supprimée avec succès
     invalid_url: L’URL fournie est invalide
+    regenerate_token: Regénérer le jeton d'accès
+    token_regenerated: Jeton d'accès regénéré avec succès
+    warning: Soyez prudent⋅e avec ces données. Ne les partagez pas !
+    your_token: Votre jeton d'accès
   auth:
     agreement_html: En vous inscrivant, vous souscrivez à <a href="%{rules_path}">nos conditions d’utilisation</a> ainsi qu’à <a href="%{terms_path}">notre politique de confidentialité</a>.
     change_password: Sécurité
     delete_account: Supprimer le compte
-    delete_account_html: Si vous désirez supprimer votre compte, vous pouvez cliquer ici. Il vous sera demandé de confirmer cette action.
+    delete_account_html: Si vous désirez supprimer votre compte, vous pouvez <a href="%{path}">cliquer ici</a>. Il vous sera demandé de confirmer cette action.
     didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ?
     forgot_password: Mot de passe oublié ?
     invalid_reset_password_token: Le lien de réinitialisation du mot de passe est invalide ou a expiré. Merci de réessayer.
@@ -231,11 +251,11 @@ fr:
     error: Malheureusement, il y a eu une erreur en cherchant les détails du compte distant
     follow: Suivre
     follow_request: 'Vous avez demandé à suivre:'
-    following: 'Youpi! Vous suivez :'
+    following: 'Youpi ! Vous suivez :'
     post_follow:
       close: Ou bien, vous pouvez fermer cette fenêtre.
-      return: Retour au profil de l'utilisateur⋅trice
-      web: Retour à l'interface web
+      return: Retour au profil de l’utilisateur⋅trice
+      web: Retour à l’interface web
     title: Suivre %{acct}
   datetime:
     distance_in_words:
@@ -273,7 +293,7 @@ fr:
       content: Vérification de sécurité échouée. Bloquez-vous les cookies ?
       title: Vérification de sécurité échouée
     '429': Trop de requêtes émises dans un délai donné.
-    noscript: Pour utiliser Mastodon, veuillez activer JavaScript
+    noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript
   exports:
     blocks: Vous bloquez
     csv: CSV
@@ -282,7 +302,7 @@ fr:
     storage: Médias stockés
   followers:
     domain: Domaine
-    explanation_html: Si vous voulez être sûr⋅e que vos status restent privés, vous devez savoir qui vous suit. <strong>Vos status privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent</strong>. Vous voudrez peut-être les passer en revue et les supprimer si vous n’êtes pas sûr⋅e que votre vie privée sera respectée par l’administration ou le logiciel de ces instances.
+    explanation_html: Si vous voulez être sûr⋅e que vos statuts restent privés, vous devez savoir qui vous suit. <strong>Vos statuts privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent</strong>. Vous voudrez peut-être les passer en revue et les supprimer si vous n’êtes pas sûr⋅e que votre vie privée sera respectée par l’administration ou le logiciel de ces instances.
     followers_count: Nombre d’abonné⋅es
     lock_link: Rendez votre compte privé
     purge: Retirer de la liste d’abonné⋅es
@@ -290,7 +310,7 @@ fr:
       one: Suppression des abonné⋅es venant d’un domaine en cours…
       other: Suppression des abonné⋅es venant de %{count} domaines en cours…
     true_privacy_html: Soyez conscient⋅es <strong>qu’une vraie confidentialité ne peut être atteinte que par un chiffrement de bout-en-bout</strong>.
-    unlocked_warning_html: N’importe qui peut vous suivre et voir vos status privés. %{lock_link} afin de pouvoir vérifier et rejeter des abonné⋅es.
+    unlocked_warning_html: N’importe qui peut vous suivre et voir vos statuts privés. %{lock_link} afin de pouvoir vérifier et rejeter des abonné⋅es.
     unlocked_warning_title: Votre compte n’est pas privé
   generic:
     changes_saved_msg: Les modifications ont été enregistrées avec succès !
@@ -311,7 +331,7 @@ fr:
   landing_strip_signup_html: Si ce n’est pas le cas, vous pouvez <a href="%{sign_up_path}">en créer un ici</a>.
   media_attachments:
     validations:
-      images_and_video: Impossible de joindre une vidéo à un status contenant déjà des images
+      images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images
       too_many: Impossible de joindre plus de 4 fichiers
   notification_mailer:
     digest:
@@ -334,30 +354,29 @@ fr:
       subject: 'Abonné⋅es en attente : %{name}'
     mention:
       body: "%{name} vous a mentionné⋅e dans :"
-      subject: "%{name} vous a mentionné"
+      subject: "%{name} vous a mentionné·e"
     reblog:
-      body: "%{name} a partagé votre status :"
-      subject: "%{name} a partagé votre status"
+      body: "%{name} a partagé votre statut :"
+      subject: "%{name} a partagé votre statut"
   pagination:
     next: Suivant
     prev: Précédent
   push_notifications:
     favourite:
-      title: "%{name} à mis votre status en favori"
+      title: "%{name} à mis votre statut en favori"
     follow:
       title: "%{name} vous suit"
+    group:
+      title: "%{count} notifications"
     mention:
       action_boost: Partager
       action_expand: Montrer plus
       action_favourite: Ajouter aux favoris
-      title: "%{name} vous a mentionné"
+      title: "%{name} vous a mentionné·e"
     reblog:
-      title: "%{name} a partagé⋅e votre status"
-    subscribed:
-      body: Vous pouvez désormais recevoir des notifications push.
-      title: Abonnements aux notifications push
+      title: "%{name} a partagé⋅e votre statut"
   remote_follow:
-    acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅trice
+    acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅rice
     missing_resource: L’URL de redirection n’a pas pu être trouvée
     proceed: Continuez pour suivre
     prompt: 'Vous allez suivre :'
@@ -404,6 +423,7 @@ fr:
     authorized_apps: Applications autorisées
     back: Retour vers Mastodon
     delete: Suppression de compte
+    development: Développement
     edit_profile: Modifier le profil
     export: Export de données
     followers: Abonné⋅es autorisé⋅es
@@ -411,24 +431,30 @@ fr:
     preferences: Préférences
     settings: Réglages
     two_factor_authentication: Identification à deux facteurs
+    your_apps: Vos applications
   statuses:
     open_in_web: Ouvrir sur le web
     over_character_limit: limite de caractères dépassée de %{max} caractères
+    pin_errors:
+      ownership: Vous ne pouvez pas épingler un statut ne vous appartenant pas
+      private: Les statuts non-publics ne peuvent pas être épinglés
+      reblog: Un partage ne peut pas être épinglé
     show_more: Afficher plus
     visibilities:
       private: Abonné⋅es uniquement
-      private_long: Seul⋅es vos abonné⋅es verront vos status
+      private_long: Seul⋅es vos abonné⋅es verront vos statuts
       public: Public
-      public_long: Tout le monde peut voir vos status
+      public_long: Tout le monde peut voir vos statuts
       unlisted: Public sans être affiché sur le fil public
-      unlisted_long: Tout le monde peut voir vos status mais ils ne seront pas sur listés sur les fils publics
+      unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics
   stream_entries:
     click_to_show: Cliquer pour afficher
+    pinned: Statut épinglé
     reblogged: partagé
     sensitive_content: Contenu sensible
   terms:
-    body_html: "<h2>Politique de confidentialité</h2>\n\n<h3 id=\"collect\">Quelles données collectons-nous?</h3>\n\n<p>Nous collectons des données lorsque vous vous enregistrez sur notre site et les récoltons lorsque vous participez dans le forum en lisant, écrivant, et évaluant le contenu partagé ici.</p>\n\n<p>Lors de l'enregistrement sur notre site, il peut vous être demandé de renseigner votre nom et adresse e-mail. Vous pouvez, cependant, visiter notre site sans inscription. Votre adresse e-mail devra être vérifiée grâce à un e-mail contenant un lien unique. Si ce lien est visité, nous savons que vous contrôlez cette adresse e-mail.</p>\n\n<p>Lors de l'inscription et de la publication de statuts, nous enregistrons l'adresse IP de laquelle le(s) status viennent. Nous pouvons également conserver des historiques serveurs qui contiendront l'adresse IP de chaque requête adressée à notre serveur.</p>\n\n<h3 id=\"use\">Que faisons-nous avec vos données?</h3>\n\n<p>Toute information que nous collectons pourra être utilisée d'une des manières suivantes :</p>\n\n<ul>\n  <li>Pour personnaliser votre expérience &mdash; vos données nous aident à mieux répondre à vos besoins individuels.</li>\n  <li>Pour améliorer notre site &mdash; nous faisons tout notre possible pour améliorer notre site en fonction des données, retours et suggestions que nous recevons.</li>\n  <li>Afin d'améliorer le support client &mdash; vos données nous aident à mieux répondre à vos requêtes et demandes de support.</li>\n  <li>Afin d'envoyer des e-mails à intervalles réguliers &mdash; l'adresse e-mail que vous renseignez peut être utilisée pour vous envoyer des données et notifications concernant des changements ou en réponse à votre nom d'utilisateur⋅trice, en réponse à vos demandes et/ou autres requêtes ou questions</li>\n</ul>\n\n<h3 id=\"protect\">Comment protégeons-nous vos données?</h3>\n  \n<p>Nous appliquons une multitude de mesures afin de maintenir la sécurité de vos données personnelles lorsque vous entrez, soumettez, ou accédez à ces dernières.</p>\n\n<h3 id=\"data-retention\">Quelle est notre politique de conservation des données?</h3>\n\n<p>Nous nous efforçons de:</p>\n\n<ul>\n  <li>Ne pas garder les historiques serveurs contenant l'adresse IP de chaque requête adressée à ce serveur plus de 90 jours.</li>\n  <li>Ne pas conserver les adresses IP associées aux utilisateur⋅trices et leur contenu plus de 5 ans.</li>\n</ul>\n\n<h3 id=\"cookies\">Utilisons nous des \"cookies\"?</h3>\n\n<p>Oui. Les cookies sont de petits fichiers qu'un site ou prestataires de services transfèrent sur le disque dur de votre ordinateur par le biais de votre navigateur Web (si ce dernier le permet). Ces cookies permettent au site de reconnaître votre navigateur et, si vous disposez d'un compte, l'associer à votre compte.</p>\n\n<p>Nous utilisons les cookies pour enregistrer vos préférences pour de futures visites, compiler des données agrégées à propos du trafic et des interactions effectuées sur le site afin de proposer une meilleure expérience dans le futur. Nous pouvons contracter les services d'acteurs tiers afin de nous aider à mieux comprendre les visiteurs de notre site. Ces acteurs ont l'autorisation d'utiliser ces données seulement à des fins d'améliorations.</p>\n\n<h3 id=\"disclose\">Divulguons-nous des données à des acteurs tiers ?</h3>\n\n<p>Nous n'échangeons pas, ne vendons pas ni effectuons de quelconques transferts avec des acteurs tiers d'informations permettant de vous identifier personnellement. Cela n'inclut pas les acteurs de confiance qui nous aident à gérer notre entreprise et à vous servir tant que ces acteurs s'accordent à garder lesdites informations confidentielles. Nous pouvons être amenés à délivrer vos informations lorsque jugé adéquat afin de respecter la loi, d'appliquer la politique de notre site, ou afin de protéger nos droits, ceux des autres, notre propriété ou sécurité. Cependant, aucune information permettant l'identification de nos visiteurs ne sera divulguée à des fins publicitaires, commerciales ou tout autre usage.</p>\n\n<h3 id=\"third-party\">Liens vers des acteurs tiers</h3>\n\n<p>Nous pouvons être amenés à inclure ou offrir les services ou produits d'acteurs tiers sur notre site. Ces acteurs tiers possèdent leur propre politique de confidentialité. Nous ne sommes donc pas responsables du contenu ou activités desdits acteurs. Néanmoins, nous cherchons à protéger l'intégrité de notre site et sommes ouverts à toute remarque concernant ces acteurs.</p>\n\n<h3 id=\"coppa\">Children's Online Privacy Protection Act</h3>\n\n<p>Notre site, nos produits et services sont tous dirigés à l'usage de personnes étant âgés de 13 ans ou plus. Si ce serveur est hébergé aux États-Unis et que vous êtes âgé⋅e de moins de 13 ans, au vu du COPPA (<a href=\"https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) n'utilisez pas ce site.</p>\n\n<h3 id=\"consent\">Votre consentement</h3>\n\n<p>En utilisant notre site, vous consentez à la politique de confiedentialité de notre site Web.</p>\n\n<h3 id=\"changes\">Changements de notre politique de confidentialité</h3>\n\n<p>Si nous décidons d'apporter des changements à notre politique de confidentialité, nous les mettrons à disposition sur cette page.</p>\n\n<p>Ce document est distribué sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 31 Mai 2013. Il a été traduit en français en Juillet 2017.</p>\n\n<p>Originellement adapté à partir de la politique de confidentialité de <a href=\"https://github.com/discourse/discourse\">Discourse</a></p>.\n"
-    title: "%{instance} Conditions d'utilisations et Politique de confidentialité"
+    body_html: "<h2>Politique de confidentialité</h2>\n\n<h3 id=\"collect\">Quelles données collectons-nous ?</h3>\n\n<p>Nous collectons des données lorsque vous vous enregistrez sur notre site et les récoltons lorsque vous participez dans le forum en lisant, écrivant, et évaluant le contenu partagé ici.</p>\n\n<p>Lors de l’enregistrement sur notre site, il peut vous être demandé de renseigner votre nom et adresse électronique. Vous pouvez, cependant, visiter notre site sans inscription. Votre adresse électronique devra être vérifiée grâce à un courriel contenant un lien unique. Si ce lien est visité, nous savons que vous contrôlez cette adresse.</p>\n\n<p>Lors de l’inscription et de la publication de statuts, nous enregistrons l’adresse IP de laquelle les statuts proviennent. Nous pouvons également conserver des historiques serveurs qui contiendront l’adresse IP de chaque requête adressée à notre serveur.</p>\n\n<h3 id=\"use\">Que faisons-nous avec vos données ?</h3>\n\n<p>Toute information que nous collectons pourra être utilisée d’une des manières suivantes :</p>\n\n<ul>\n  <li>Pour personnaliser votre expérience &mdash; vos données nous aident à mieux répondre à vos besoins individuels.</li>\n  <li>Pour améliorer notre site &mdash; nous faisons tout notre possible pour améliorer notre site en fonction des données, retours et suggestions que nous recevons.</li>\n  <li>Afin d’améliorer le support client &mdash; vos données nous aident à mieux répondre à vos requêtes et demandes de support.</li>\n  <li>Afin d’envoyer des courriels à intervalles réguliers &mdash; l’adresse électronique que vous renseignez peut être utilisée pour vous envoyer des données et notifications concernant des changements ou en réponse à votre nom d’utilisateur⋅trice, en réponse à vos demandes et/ou autres requêtes ou questions</li>\n</ul>\n\n<h3 id=\"protect\">Comment protégeons-nous vos données ?</h3>\n  \n<p>Nous appliquons une multitude de mesures afin de maintenir la sécurité de vos données personnelles lorsque vous entrez, soumettez, ou accédez à ces dernières.</p>\n\n<h3 id=\"data-retention\">Quelle est notre politique de conservation des données ?</h3>\n\n<p>Nous nous efforçons de :</p>\n\n<ul>\n  <li>ne pas garder les historiques serveurs contenant l’adresse IP de chaque requête adressée à ce serveur plus de 90 jours ;</li>\n  <li>ne pas conserver les adresses IP associées aux utilisateur⋅trices et leur contenu plus de 5 ans.</li>\n</ul>\n\n<h3 id=\"cookies\">Utilisons nous des « cookies » ?</h3>\n\n<p>Oui. Les cookies sont de petits fichiers qu’un site ou prestataires de services transfèrent sur le disque dur de votre ordinateur par le biais de votre navigateur Web (si ce dernier le permet). Ces cookies permettent au site de reconnaître votre navigateur et, si vous disposez d’un compte, de l’associer à celui-ci.</p>\n\n<p>Nous utilisons les cookies pour enregistrer vos préférences pour de futures visites, compiler des données agrégées à propos du trafic et des interactions effectuées sur le site afin de proposer une meilleure expérience dans le futur. Nous pouvons contracter les services d’acteurs tiers afin de nous aider à mieux comprendre les visiteurs de notre site. Ces acteurs ont l’autorisation d’utiliser ces données seulement à des fins d’améliorations.</p>\n\n<h3 id=\"disclose\">Divulguons-nous des données à des acteurs tiers ?</h3>\n\n<p>Nous n’échangeons pas, ne vendons pas ni effectuons de quelconques transferts avec des acteurs tiers d’informations permettant de vous identifier personnellement. Cela n’inclut pas les acteurs de confiance qui nous aident à gérer notre entreprise et à vous servir tant que ces acteurs s’accordent à garder lesdites informations confidentielles. Nous pouvons être amenés à délivrer vos informations lorsque jugé adéquat afin de respecter la loi, d’appliquer la politique de notre site, ou afin de protéger nos droits, ceux des autres, notre propriété ou sécurité. Cependant, aucune information permettant l’identification de nos visiteurs ne sera divulguée à des fins publicitaires, commerciales ou tout autre usage.</p>\n\n<h3 id=\"third-party\">Liens vers des acteurs tiers</h3>\n\n<p>Nous pouvons être amenés à inclure ou offrir les services ou produits d’acteurs tiers sur notre site. Ces acteurs tiers possèdent leur propre politique de confidentialité. Nous ne sommes donc pas responsables du contenu ou activités desdits acteurs. Néanmoins, nous cherchons à protéger l’intégrité de notre site et sommes ouverts à toute remarque concernant ces acteurs.</p>\n\n<h3 id=\"coppa\" lang=\"en\">Children's Online Privacy Protection Act</h3>\n\n<p>Notre site, nos produits et services sont tous destinés à l’usage de personnes âgées de 13 ans ou plus. Si ce serveur est hébergé aux États-Unis et que vous êtes âgé⋅e de moins de 13 ans, au vu du COPPA (<a href=\"https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\"><i lang=\"en\">Children's Online Privacy Protection Act</i></a>) n’utilisez pas ce site.</p>\n\n<h3 id=\"consent\">Votre consentement</h3>\n\n<p>En utilisant notre site, vous consentez à la présente politique de confidentialité.</p>\n\n<h3 id=\"changes\">Changements de notre politique de confidentialité</h3>\n\n<p>Si nous décidons d’apporter des changements à notre politique de confidentialité, nous les publierons sur cette page.</p>\n\n<p>Ce document est distribué sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 31 mai 2013. Il a été traduit en français en juillet 2017.</p>\n\n<p>Originellement adapté à partir de la politique de confidentialité de <a href=\"https://github.com/discourse/discourse\">Discourse</a>.</p>\n"
+    title: "%{instance} Conditions d’utilisations et politique de confidentialité"
   time:
     formats:
       default: "%d %b %Y, %H:%M"
@@ -451,4 +477,4 @@ fr:
   users:
     invalid_email: L’adresse courriel est invalide
     invalid_otp_token: Le code d’authentification à deux facteurs est invalide
-    signed_in_as: 'Connecté·e en tant que :'
+    signed_in_as: 'Connecté·e en tant que :'
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 05c712234..fa9e1d112 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -37,12 +37,16 @@ ja:
     follow: フォロー
     followers: フォロワー
     following: フォロー中
+    media: メディア
     nothing_here: 何もありません
     people_followed_by: "%{name} さんがフォロー中のアカウント"
     people_who_follow: "%{name} さんをフォロー中のアカウント"
-    posts: 投稿
+    posts: トゥート
+    posts_with_replies: トゥートと返信
     remote_follow: リモートフォロー
     reserved_username: このユーザー名は予約されています。
+    roles:
+      admin: Admin
     unfollow: フォロー解除
   admin:
     accounts:
@@ -57,6 +61,7 @@ ja:
       feed_url: フィードURL
       followers: フォロワー数
       follows: フォロー数
+      inbox_url: Inbox URL
       ip: IP
       location:
         all: すべて
@@ -76,10 +81,12 @@ ja:
         alphabetic: アルファベット順
         most_recent: 直近の活動順
         title: 順序
+      outbox_url: Outbox URL
       perform_full_suspension: 完全に活動停止させる
       profile_url: プロフィールURL
+      protocol: プロトコル
       public: パブリック
-      push_subscription_expires: PuSH購読期限切れ
+      push_subscription_expires: PuSH購読期限
       redownload: アバターの更新
       reset: リセット
       reset_password: パスワード再設定
@@ -219,7 +226,13 @@ ja:
     signature: Mastodon %{instance} インスタンスからの通知
     view: 'View:'
   applications:
+    created: アプリが作成されました
+    destroyed: アプリが削除されました
     invalid_url: URLが無効です
+    regenerate_token: アクセストークンの再生成
+    token_regenerated: アクセストークンが再生成されました
+    warning: このデータは気をつけて取り扱ってください。不特定多数の人と共有しないでください!
+    your_token: アクセストークン
   auth:
     agreement_html: 登録すると <a href="%{rules_path}">利用規約</a> と <a href="%{terms_path}">プライバシーポリシー</a> に同意したことになります。
     change_password: セキュリティ
@@ -227,6 +240,7 @@ ja:
     delete_account_html: アカウントを削除したい場合、<a href="%{path}">こちら</a> から手続きが行えます。削除する前に、確認画面があります。
     didnt_get_confirmation: 確認メールを受信できませんか?
     forgot_password: パスワードをお忘れですか?
+    invalid_reset_password_token: パスワードリセットトークンが正しくないか期限切れです。もう一度リクエストしてください。
     login: ログイン
     logout: ログアウト
     register: 登録する
@@ -273,7 +287,7 @@ ja:
       content: セキュリティ認証に失敗しました。Cookieをブロックしていませんか?
       title: セキュリティ認証に失敗
     '429': リクエストの制限に達しました。
-    noscript: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けのMastodonネイティブアプリを探すことができます。
+    noscript_html: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けの<a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">Mastodonネイティブアプリ</a>を探すことができます。
   exports:
     blocks: ブロック
     csv: CSV
@@ -338,6 +352,17 @@ ja:
     reblog:
       body: 'あなたのトゥートが %{name} さんにブーストされました:'
       subject: あなたのトゥートが %{name} さんにブーストされました
+  number:
+    human:
+      decimal_units:
+        format: "%n%u"
+        units:
+          billion: B
+          million: M
+          quadrillion: Q
+          thousand: K
+          trillion: T
+          unit: ''
   pagination:
     next: 次
     prev: 前
@@ -356,9 +381,6 @@ ja:
       title: "%{name} さんから返信がありました"
     reblog:
       title: あなたのトゥートが %{name} さんにブーストされました
-    subscribed:
-      body: あなたはプッシュ通知を受け取ることが出来ます
-      title: Subscription が登録されました
   remote_follow:
     acct: あなたの ユーザー名@ドメイン を入力してください
     missing_resource: リダイレクト先が見つかりませんでした
@@ -407,6 +429,7 @@ ja:
     authorized_apps: 認証済みアプリ
     back: Mastodon に戻る
     delete: アカウントの削除
+    development: 開発
     edit_profile: プロフィールを編集
     export: データのエクスポート
     followers: 信頼済みのインスタンス
@@ -414,9 +437,14 @@ ja:
     preferences: ユーザー設定
     settings: 設定
     two_factor_authentication: 二段階認証
+    your_apps: アプリ
   statuses:
     open_in_web: Webで開く
     over_character_limit: 上限は %{max}文字までです
+    pin_errors:
+      ownership: 他人のトゥートを固定することはできません
+      private: 非公開のトゥートを固定することはできません
+      reblog: ブーストされたトゥートを固定することはできません
     show_more: もっと見る
     visibilities:
       private: 非公開
@@ -427,6 +455,7 @@ ja:
       unlisted_long: 誰でも見ることができますが、公開タイムラインには表示されません
   stream_entries:
     click_to_show: クリックして表示
+    pinned: 固定されたトゥート
     reblogged: さんにブーストされました
     sensitive_content: 閲覧注意
   terms:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index f3bde5bbb..f98059526 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -220,7 +220,7 @@ ko:
       content: 보안 인증에 실패했습니다. Cookie를 차단하고 있진 않습니까?
       title: 보안 인증 실패
     '429': 요청 횟수 제한에 도달했습니다.
-    noscript: Mastodon을 사용하기 위해서는 JavaScript를 켜 주십시오.
+    noscript_html: Mastodon을 사용하기 위해서는 JavaScript를 켜 주십시오.
   exports:
     blocks: 차단
     csv: CSV
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 6562767a9..50ae5508b 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -272,7 +272,7 @@ nl:
       content: Veiligheidsverificatie mislukt. Blokkeer je toevallig cookies?
       title: Veiligheidsverificatie mislukt
     '429': Te veel verbindingsaanvragen.
-    noscript: Schakel JavaScript in om de webapplicatie van Mastodon te gebruiken. Als alternatief kan je een Mastodon-app zoeken voor jouw platform.
+    noscript_html: Schakel JavaScript in om de webapplicatie van Mastodon te gebruiken. Als alternatief kan je een <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">Mastodon-app</a> zoeken voor jouw platform.
   exports:
     blocks: Jij blokkeert
     csv: CSV
@@ -353,9 +353,6 @@ nl:
       title: "%{name} vermeldde jou"
     reblog:
       title: "%{name} boostte jouw toot"
-    subscribed:
-      body: Je kan nu pushmeldingen ontvangen.
-      title: Aanmelding bevestigd!
   remote_follow:
     acct: Geef jouw account@domein.tld op waarvandaan je wilt volgen
     missing_resource: Kon vereiste doorverwijzings-URL voor jouw account niet vinden
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 6c3f95823..019d3b196 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -7,7 +7,7 @@ oc:
     contact: Contacte
     contact_missing: Pas parametrat
     contact_unavailable: Pas disponible
-    description_headline: Qué es %{domain} ?
+    description_headline: Qué es %{domain} ?
     domain_count_after: autras instàncias
     domain_count_before: Connectat a
     extended_description_html: |
@@ -32,21 +32,25 @@ oc:
     status_count_before: qu’an escrich
     user_count_after: personas
     user_count_before: Ostal de
-    what_is_mastodon: Qu’es Mastodon ?
+    what_is_mastodon: Qu’es Mastodon ?
   accounts:
     follow: Sègre
     followers: Seguidors
     following: Abonaments
-    nothing_here: I a pas res aquí !
+    media: Mèdias
+    nothing_here: I a pas res aquí !
     people_followed_by: Lo mond que %{name} sèc
     people_who_follow: Lo mond que sègon %{name}
-    posts: Estatuts
+    posts: Tuts
+    posts_with_replies: Tuts amb responsas
     remote_follow: Sègre a distància
     reserved_username: Aqueste nom d’utilizaire es reservat
+    roles:
+      admin: Admin
     unfollow: Quitar de sègre
   admin:
     accounts:
-      are_you_sure: Sètz segur ?
+      are_you_sure: Sètz segur ?
       confirm: Confirmar
       confirmed: Confirmat
       disable_two_factor_authentication: Desactivar 2FA
@@ -57,6 +61,7 @@ oc:
       feed_url: Flux URL
       followers: Seguidors
       follows: Abonaments
+      inbox_url: URL de recepcion
       ip: IP
       location:
         all: Tot
@@ -76,8 +81,10 @@ oc:
         alphabetic: Alfabetic
         most_recent: Mai recent
         title: Ordre
+      outbox_url: URL Outbox
       perform_full_suspension: Botar en tren la suspension complèta
       profile_url: URL del perfil
+      protocol: Protocòl
       public: Public
       push_subscription_expires: Fin de l’abonament PuSH
       redownload: Actualizar los avatars
@@ -135,8 +142,8 @@ oc:
       domain_name: Domeni
       title: Instàncias conegudas
     reports:
-      action_taken_by: Accion menada per
-      are_you_sure: Es segur ?
+      action_taken_by: Mesura menada per
+      are_you_sure: Es segur ?
       comment:
         label: Comentari
         none: Pas cap
@@ -214,31 +221,37 @@ oc:
       body: "%{reporter} a senhalat %{target}"
       subject: Novèl senhalament per %{instance} (#%{id})
   application_mailer:
-    salutation: '%{name},'
-    settings: 'Cambiar las preferéncias de corrièl : %{link}'
+    salutation: "%{name},"
+    settings: 'Cambiar las preferéncias de corrièl : %{link}'
     signature: Notificacion de Mastodon sus %{instance}
-    view: 'Veire :'
+    view: 'Veire :'
   applications:
+    created: Aplicacion ben creada
+    destroyed: Aplication ben suprimida
     invalid_url: L’URL donada es invalida
+    regenerate_token: Tornar generar lo geton d’accès
+    token_regenerated: Geton d’accès ben regenerat
+    warning: Mèfi ! Agachatz de partejar aquela donada amb degun !
+    your_token: Vòstre geton d’accès
   auth:
     agreement_html: En vos marcar acceptatz <a href="%{rules_path}">nòstres tèrmes de servici</a> e <a href="%{terms_path}">politica de confidencialitat</a>.
     change_password: Seguretat
     delete_account: Suprimir lo compte
     delete_account_html: Se volètz suprimir vòstre compte, podètz <a href="%{path}">o far aquí</a>. Vos demandarem que confirmetz.
-    didnt_get_confirmation: Avètz pas recebut las instruccions de confirmacion ?
-    forgot_password: Senhal oblidat ?
+    didnt_get_confirmation: Avètz pas recebut las instruccions de confirmacion ?
+    forgot_password: Senhal oblidat ?
+    invalid_reset_password_token: Lo geton de reïnicializacion es invalid o acabat. Tornatz demandar un geton se vos plai.
     login: Se connectar
     logout: Se desconnectar
     register: Se marcar
     resend_confirmation: Tornar mandar las instruccions de confirmacion
     reset_password: Reïnicializar lo senhal
     set_new_password: Picar un nòu senhal
-    invalid_reset_password_token: Ligam de reïnicializacion invalid o acabat. Tornatz ensajar se vos plai.
   authorize_follow:
     error: O planhèm, i a agut una error al moment de cercar lo compte
     follow: Sègre
-    follow_request: 'Avètz demandat de sègre :'
-    following: 'Felicitacion ! Seguètz ara :'
+    follow_request: 'Avètz demandat de sègre :'
+    following: 'Felicitacion ! Seguètz ara :'
     post_follow:
       close: O podètz tampar aquesta fenèstra.
       return: Tornar al perfil
@@ -258,11 +271,11 @@ oc:
     - gen
     - feb
     - mar
-    - mai
+    - abr
     - mai
     - jun
     - jul
-    - ag
+    - ago
     - set
     - oct
     - nov
@@ -299,26 +312,45 @@ oc:
     - :year
   datetime:
     distance_in_words:
-      about_x_hours: Fa %{count} oras
-      about_x_months: Fa %{count} meses
+      about_x_hours:
+        one: Fa una ora
+        other: Fa %{count} oras
+      about_x_months:
+        one: Fa un mes
+        other: Fa %{count} meses
       about_x_years:
         one: Fa un an
         other: Fa %{count} ans
       almost_x_years:
-        one: Fa un an
-        other: Fa %{count} ans
+        one: Fa quasi un an
+        other: Fa quasi %{count} ans
       half_a_minute: Ara
-      less_than_x_minutes: Fa %{count} minutas
-      less_than_x_seconds: Ara
+      less_than_x_minutes:
+        one: Fa mens d’una minuta
+        other: Fa mens de %{count} minutas
+      less_than_x_seconds:
+        one: Fa mens d’una segonda
+        other: Fa mens de %{count} segondas
       over_x_years:
+        one: Fa mai d’un an
+        other: Fa mai de %{count} ans
+      x_days:
+        one: Fa un jorn
+        other: Fa %{count} jorns
+      x_minutes:
+        one: Fa una minuta
+        other: Fa %{count} minutas
+      x_months:
+        one: Fa un mes
+        other: Fa %{count} meses
+      x_seconds:
+        one: Fa una segonda
+        other: Fa %{count} segondas
+      x_years:
         one: Fa un an
         other: Fa %{count} ans
-      x_days: Fa %{count} jorns
-      x_minutes: Fa %{count} minutas
-      x_months: Fa %{count} meses
-      x_seconds: Fa %{count} segondas
   deletes:
-    bad_password_msg: Ben ensajat pirata ! Senhal incorrècte
+    bad_password_msg: Ben ensajat pirata ! Senhal incorrècte
     confirm_password: Picatz vòstre senhal actual per verificar vòstra identitat
     description_html: Aquò suprimirà <strong>definitivament e sens possibilitat de retorn</strong> lo contengut de vòstre compte e lo desactivarà. Lo nom d’utilizaire serà gardat per evitar una futura impostura.
     proceed: Suprimir lo compte
@@ -330,10 +362,10 @@ oc:
     '404': La pagina que recercatz existís pas.
     '410': La pagina que cercatz existís pas mai.
     '422':
-      content: Verificacion de seguretat fracassada. Blocatz los cookies ?
+      content: Verificacion de seguretat fracassada. Blocatz los cookies ?
       title: Verificacion de seguretat fracassada
     '429': Lo servidor mòla (subrecargada)
-    noscript: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar una aplicacion per vòstra plataforma coma alernativa.
+    noscript_html: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">una aplicacion</a> per vòstra plataforma coma alernativa.
   exports:
     blocks: Personas que blocatz
     csv: CSV
@@ -347,18 +379,18 @@ oc:
     lock_link: Clavar vòstre compte
     purge: Tirar dels seguidors
     success:
-      one: Soi a blocar los seguidors d’un domeni...
-      other: Soi a blocar los seguidors de %{count} domenis...
+      one: Soi a blocar los seguidors d’un domeni…
+      other: Soi a blocar los seguidors de %{count} domenis…
     true_privacy_html: Mèfi que la <strong>vertadièra confidencialitat pòt solament èsser amb un chiframent del cap a la fin (end-to-end)</strong>.
     unlocked_warning_html: Tot lo mond pòt vos sègre e veire sulpic vòstres estatuts privats. %{lock_link} per poder repassar e regetar los seguidors.
     unlocked_warning_title: Vòstre compte es pas clavat
   generic:
-    changes_saved_msg: Cambiaments ben realizats !
+    changes_saved_msg: Cambiaments ben realizats !
     powered_by: propulsat per %{link}
     save_changes: Salvagardar los cambiaments
     validation_errors:
-      one: I a quicòm que truca ! Mercés de corregir l’error çai-jos
-      other: I a quicòm que truca ! Mercés de corregir las %{count} errors çai-jos
+      one: I a quicòm que truca ! Mercés de corregir l’error çai-jos
+      other: I a quicòm que truca ! Mercés de corregir las %{count} errors çai-jos
   imports:
     preface: Podètz importar qualques donadas coma lo mond que seguètz o blocatz a-n aquesta instància d’un fichièr creat d’una autra instància.
     success: Vòstras donadas son ben estadas mandadas e seràn tractadas tre que possible
@@ -376,27 +408,27 @@ oc:
   notification_mailer:
     digest:
       body: 'Trobatz aquí un resumit de çò qu’avètz mancat dempuèi vòstra darrièra visita lo %{since}:'
-      mention: "%{name} vos a mencionat dins :"
+      mention: "%{name} vos a mencionat dins :"
       new_followers_summary:
-        one: Avètz un nòu seguidor ! Ouà !
-        other: Avètz %{count} nòus seguidors ! Qué crane !
+        one: Avètz un nòu seguidor ! Ouà  
+        other: Avètz %{count} nòus seguidors ! Qué crane !
       subject:
         one: "Una nòva notificacion dempuèi vòstra darrièra visita \U0001F418"
         other: "%{count} nòvas notificacions dempuèi vòstra darrièra visita \U0001F418"
     favourite:
-      body: "%{name} a mes vòstre estatut en favorit :"
+      body: "%{name} a mes vòstre estatut en favorit :"
       subject: "%{name} a mes vòstre estatut en favorit"
     follow:
-      body: "%{name} vos sèc ara !"
+      body: "%{name} vos sèc ara !"
       subject: "%{name} vos sèc ara"
     follow_request:
       body: "%{name} a demandat a vos sègre"
-      subject: 'Demanda d’abonament : %{name}'
+      subject: 'Demanda d’abonament : %{name}'
     mention:
-      body: "%{name} vos a mencionat dins :"
+      body: "%{name} vos a mencionat dins :"
       subject: "%{name} vos a mencionat"
     reblog:
-      body: "%{name} a tornat partejar vòstre estatut :"
+      body: "%{name} a tornat partejar vòstre estatut :"
       subject: "%{name} a tornat partejar vòstre estatut"
   pagination:
     next: Seguent
@@ -416,14 +448,11 @@ oc:
       title: "%{name} vos a mencionat"
     reblog:
       title: "%{name} a partejat vòstre estatut"
-    subscribed:
-      body: Podètz ara recebre las notificacions push.
-      title: Abonament enregistrat !
   remote_follow:
     acct: Picatz vòstre utilizaire@instància que cal utilizar per sègre aqueste utilizaire
     missing_resource: URL de redireccion pas trobada
     proceed: Contunhatz per sègre
-    prompt: 'Sètz per sègre :'
+    prompt: 'Sètz per sègre :'
   sessions:
     activity: Darrièra activitat
     browser: Navigator
@@ -467,6 +496,7 @@ oc:
     authorized_apps: Aplicacions autorizadas
     back: Tornar a Mastodon
     delete: Supression de compte
+    development: Desvolopament
     edit_profile: Modificar lo perfil
     export: Export donadas
     followers: Seguidors autorizats
@@ -474,9 +504,14 @@ oc:
     preferences: Preferéncias
     settings: Paramètres
     two_factor_authentication: Autentificacion en dos temps
+    your_apps: Vòstras aplicacions
   statuses:
     open_in_web: Dobrir sul web
     over_character_limit: limit de %{max} caractèrs passat
+    pin_errors:
+      ownership: Se pòt pas penjar lo tut de qualqu’un mai
+      private: Se pòt pas penjar los tuts pas publics
+      reblog: Se pòt pas penjar un tut partejat
     show_more: Ne veire mai
     visibilities:
       private: Seguidors solament
@@ -486,22 +521,23 @@ oc:
       unlisted: Pas listat
       unlisted_long: Tot lo mond pòt veire mai serà pas visible sul flux public
   stream_entries:
-    click_to_show: Clicatz per afichar
+    click_to_show: Clicatz per veire
+    pinned: Tut penjat
     reblogged: a partejat
     sensitive_content: Contengut sensible
   terms:
     body_html: |
       <h2>Politica de confidencialitat</h2>
 
-      <h3 id="collect">Quinas informacions collectem ?</h3>
+      <h3 id="collect">Quinas informacions reculhèm ?</h3>
 
-      <p>Collectem informacions sus vos quand vos marcatz sus nòstre site e juntem las donadas quand participatz a nòstre forum en legissent, escrivent e notant lo contengut partejat aquí.</p>
+      <p>Collectem informacions sus vos quand vos marcatz sus nòstre site e juntem las donadas quand participatz a nòstre forum en legir, escriure e notar lo contengut partejat aquí.</p>
 
       <p>Pendent l’inscripcion podèm vos demandar vòstre nom e adreça de corrièl. Podètz çaquelà visitar nòstre site sens vos marcar. Verificarem vòstra adreça amb un messatge donant un ligam unic. Se clicatz sul ligam sauprem qu’avètz lo contraròtle de l’adreça.</p>
 
       <p>Quand sètz marcat e que publicatz quicòm, enregistrem l’adreça IP d’origina. Podèm tanben salvagardar los jornals del servidor que tenon l’adreça IP de totas las demandas fachas al nòstre servidor.</p>
 
-      <h3 id="use">Qué fasèm de vòstras informacions ?</h3>
+      <h3 id="use">Qué fasèm de vòstras informacions ?</h3>
 
       <p>Totas las informacions que collectem de vos pòdon servir dins los cases seguents :</p>
 
@@ -512,26 +548,26 @@ oc:
         <li>Per enviar periodicament de corrièls &mdash; Podèm utilizar l’adreça qu’avètz donada per vos enviar d’informacions e de notificacions que demandatz tocant de cambiaments dins los subjèctes del forum o en responsa a vòstre nom d’utilizaire, en responsa a una demanda, e/o tota autra question.</li>
       </ul>
 
-      <h3 id="protect">Cossí protegèm vòstras informacions ?</h3>
+      <h3 id="protect">Cossí protegèm vòstras informacions ?</h3>
 
       <p>Apliquem tota una mena de mesuras de seguretat per manténer la fisança de vòstras informacions personalas quand las picatz, mandatz, o i accedètz.</p>
 
-      <h3 id="data-retention">Quala es vòstra politica de conservacion de donadas ?</h3>
+      <h3 id="data-retention">Quala es vòstra politica de conservacion de donadas ?</h3>
 
-      <p>Farem esfòrces per :</p>
+      <p>Farem esfòrces per :</p>
 
       <ul>
         <li>Gardar los jornals del servidor que contenon las adreças IP de totas las demandas al servidor pas mai de 90 jorns.</li>
         <li>Gardar las adreças IP ligadas als utilizaires e lors publicacions pas mai de 5 ans.</li>
       </ul>
 
-      <h3 id="cookies">Empleguem de cookies ?</h3>
+      <h3 id="cookies">Empleguem de cookies ?</h3>
 
-      <p>Òc-ben. Los cookies son de pichons fichièrs qu’un site o sos forneires de servicis plaçan dins lo disc dur de vòstre ordenador via lo navigator Web (Se los acceptatz). Aqueles cookies permeton al site de reconéisser vòstre navigator e se tenètz un compte enregistrat de l’associar a vòstre compte.</p>
+      <p>Òc-ben. Los cookies son de pichons fichièrs qu’un site o sos provesidors de servicis plaçan dins lo disc dur de vòstre ordenador via lo navigator Web (Se los acceptatz). Aqueles cookies permeton al site de reconéisser vòstre navigator e se tenètz un compte enregistrat de l’associar a vòstre compte.</p>
 
-      <p>Empleguem de cookies per comprendre e enregistrar vòstras preferéncias per vòstras visitas venentas, per recampar de donadas sul trafic del site e las interaccions per dire que posquem ofrir una melhora experiéncia del site e de las aisinas pel futur. Pòt arribar que contractèssem amb de forneires de servicis tèrces per nos ajudar a comprendre melhor nòstres visitors.  Aqueles forneires an pas lo drech que d’utilizar las donadas collectadas per nos ajudar a menar e melhorar nòstre afar.</p>
+      <p>Empleguem de cookies per comprendre e enregistrar vòstras preferéncias per vòstras visitas venentas, per recampar de donadas sul trafic del site e las interaccions per dire que posquem ofrir una melhora experiéncia del site e de las aisinas pel futur. Pòt arribar que contractèssem amb de provesidors de servicis tèrces per nos ajudar a comprendre melhor nòstres visitors.  Aqueles provesidors an pas lo drech que d’utilizar las donadas collectadas per nos ajudar a menar e melhorar nòstre afar.</p>
 
-      <h3 id="disclose">Divulguem d’informacions a de tèrces ?</h3>
+      <h3 id="disclose">Divulguem d’informacions a de tèrces ?</h3>
 
       <p>Vendèm pas, comercem o qualque transferiment que siasque a de tèrces vòstras informacions personalas identificablas. Aquò inclutz pas los tèrces partits de confisança que nos assiston a menar nòstre site, menar nòstre afar o vos servir, baste que son d’acòrd per gardar aquelas informacions confidencialas. Pòt tanben arribar que liberèssem vòstras informacions quand cresèm qu’es apropriat d’o far per se sometre a la lei, per refortir nòstras politicas, o per protegir los dreches, proprietats o seguritat de qualqu’un o de nosautres. Pasmens es possible que mandèssem d’informacions non-personalas e identificablas de nòstres visitors a d’autres partits per d’utilizacion en marketing, publicitat o un emplec mai.</p>
 
@@ -567,17 +603,18 @@ oc:
     description_html: S’activatz <strong> l’autentificacion two-factor</strong>, vos caldrà vòstre mobil per vos connectar perque generarà un geton per vos daissar dintrar.
     disable: Desactivar
     enable: Activar
-    enabled_success: Autentificacion en dos temps Two-factor ben activada
+    enabled: Autentificacion en dos temps activada
+    enabled_success: L’autentificacion en dos temps es ben activada
     generate_recovery_codes: Generar los còdis de recuperacion
     instructions_html: "<strong>Escanatz aqueste còdi QR amb Google Authenticator o una aplicacion similària sus vòstre mobil</strong>. A partir d’ara, aquesta aplicacion generarà un geton que vos caldrà picar per vos connectar."
     lost_recovery_codes: Los còdi de recuperacion vos permeton d’accedir a vòstre compte se perdètz vòstre mobil. S’avètz perdut vòstres còdis de recuperacion los podètz tornar generar aquí. Los ancians còdis seràn pas mai valides.
-    manual_instructions: 'Se podètz pas numerizar lo còdi QR e que vos cal picar lo còdi a la man, vaquí lo còdi en clar :'
+    manual_instructions: 'Se podètz pas numerizar lo còdi QR e que vos cal picar lo còdi a la man, vaquí lo còdi en clar :'
     recovery_codes: Salvar los còdis de recuperacion
     recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar
     recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. Gardatz los còdis en seguretat, per exemple, imprimissètz los e gardatz los amb vòstres documents importants.
     setup: Paramètres
-    wrong_code: Lo còdi picat es invalid ! L’ora es la bona sul servidor e lo mobil ?
+    wrong_code: Lo còdi picat es invalid ! L’ora es la bona sul servidor e lo mobil ?
   users:
     invalid_email: L’adreça de corrièl es invalida
     invalid_otp_token: Còdi d’autentificacion en dos temps invalid
-    signed_in_as: 'Session a'
+    signed_in_as: Session a
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 415c3b993..246028f9b 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -18,7 +18,7 @@ pl:
       humane_approach_title: Bardziej ludzkie podejście
       not_a_product_body: Mastodon nie jest komercyjną siecią. Nie doświadczysz tu reklam, zbierania danych, ani centralnego ośrodka, tak jak w przypadku wielu rozwiązań.
       not_a_product_title: Jesteś człowiekiem, nie produktem
-      real_conversation_body: Mając do dyspozycji 500 znaków na post, rozdrobnienie zawartości i ostrzeżenia o multimediach, możesz wyrażać siebie na wszystkie możliwe sposoby.
+      real_conversation_body: Mając do dyspozycji 500 znaków na wpis, rozdrobnienie zawartości i ostrzeżenia o multimediach, możesz wyrażać siebie na wszystkie możliwe sposoby.
       real_conversation_title: Zaprojektowany do prawdziwych rozmów
       within_reach_body: Wiele aplikacji dla Androida, iOS i innych platform dzięki przyjaznemu programistom API sprawia, że możesz utrzymywać kontakt ze znajomymi praktycznie wszędzie.
       within_reach_title: Zawsze w Twoim zasięgu
@@ -37,12 +37,16 @@ pl:
     follow: Śledź
     followers: Śledzących
     following: Śledzi
+    media: Zawartość multimedialna
     nothing_here: Niczego tu nie ma!
     people_followed_by: Konta śledzone przez %{name}
     people_who_follow: Osoby, które śledzą konto %{name}
     posts: Wpisy
-    remote_follow: Zdalne śledzenie
+    posts_with_replies: Wpisy z odpowiedziami
+    remote_follow: Śledź zdalnie
     reserved_username: Ta nazwa użytkownika jest zarezerwowana.
+    roles:
+      admin: Administrator
     unfollow: Przestań śledzić
   admin:
     accounts:
@@ -65,12 +69,12 @@ pl:
         title: Położenie
       media_attachments: Załączniki multimedialne
       moderation:
-        all: Wszystko
+        all: Wszystkie
         silenced: Wyciszone
         suspended: Zawieszone
         title: Moderacja
       most_recent_activity: Najnowsza aktywność
-      most_recent_ip: Najnowsze IP
+      most_recent_ip: Ostatnie IP
       not_subscribed: Nie zasubskrybowano
       order:
         alphabetic: Alfabetycznie
@@ -88,9 +92,9 @@ pl:
       search: Szukaj
       show:
         created_reports: Zgłoszenia tego użytkownika
-        report: zgłoszenie
+        report: zgłoszeń
         targeted_reports: Zgłoszenia dotyczące tego użytkownika
-      silence: Cisza
+      silence: Wycisz
       statuses: Statusy
       subscribe: Subskrybuj
       title: Konta
@@ -122,6 +126,7 @@ pl:
       severity: Priorytet
       show:
         affected_accounts:
+          many: Dotyczy %{count} kont w bazie danych
           one: Dotyczy jednego konta w bazie danych
           other: Dotyczy %{count} kont w bazie danych
         retroactive:
@@ -129,7 +134,7 @@ pl:
           suspend: Odwołaj zawieszenie wszystkich kont w tej domenie
         title: Odwołaj blokadę dla domeny %{domain}
         undo: Cofnij
-      title: Blokady domen
+      title: Zablokowane domeny
       undo: Cofnij
     instances:
       account_count: Znane konta
@@ -142,7 +147,7 @@ pl:
         label: Komentarz
         none: Brak
       delete: Usuń
-      id: Identyfikator
+      id: ID
       mark_as_resolved: Oznacz jako rozwiązane
       nsfw:
         'false': Nie oznaczaj jako NSFW
@@ -150,8 +155,8 @@ pl:
       report: 'Zgłoszenie #%{id}'
       report_contents: Zawartość
       reported_account: Zgłoszone konto
-      reported_by: Zgłoszone przez
-      resolved: Rozwiązano
+      reported_by: Zgłaszający
+      resolved: Rozwiązane
       silence_account: Wycisz konto
       status: Status
       suspend_account: Zawieś konto
@@ -180,7 +185,7 @@ pl:
         desc_html: Dobre miejsce na zasady użytkowania, wprowadzenie i inne rzeczy, które wyróżniają tę instancję. Możesz korzystać z tagów HTML
         title: Niestandardowy opis strony
       site_terms:
-        desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz używać tagów HTML
+        desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz korzystać z tagów HTML
         title: Niestandardowe zasady użytkowania
       site_title: Nazwa instancji
       timeline_preview:
@@ -204,7 +209,7 @@ pl:
       with_media: Z zawartością multimedialną
     subscriptions:
       callback_url: URL zwrotny
-      confirmed: Potwierdzono
+      confirmed: Potwierdzone
       expires_in: Wygasa
       last_delivery: Ostatnio doręczono
       title: WebSub
@@ -220,7 +225,13 @@ pl:
     signature: Powiadomienie Mastodona z instancji %{instance}
     view: 'Zobacz:'
   applications:
-    invalid_url: Ten URL jest nieprawidłowy
+    created: Pomyślnie utworzono aplikację
+    destroyed: Pomyślnie usunięto aplikację
+    invalid_url: Wprowadzony adres URL jest nieprawidłowy
+    regenerate_token: Wygeneruj nowy token dostępu
+    token_regenerated: Pomyślnie wygenerowano nowy token dostępu
+    warning: Przechowuj te dane ostrożnie. Nie udostępniaj ich nikomu!
+    your_token: Twój token dostępu
   auth:
     agreement_html: Rejestrując się, oświadczasz, że zapoznałeś się z <a href="%{rules_path}">naszymi zasadami użytkowania</a> i <a href="%{terms_path}">polityką prywatności</a>.
     change_password: Bezpieczeństwo
@@ -275,12 +286,12 @@ pl:
       content: Sprawdzanie bezpieczeństwa nie powiodło się. Czy blokujesz pliki cookie?
       title: Sprawdzanie bezpieczeństwa nie powiodło się
     '429': Uduszono
-    noscript: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z natywnej aplikacji obsługującej Twoje urządzenie.
+    noscript_html: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z jednej z <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">natywnych aplikacji</a> obsługującej Twoje urządzenie.
   exports:
-    blocks: Blokujesz
+    blocks: Zablokowani
     csv: CSV
-    follows: Śledzisz
-    mutes: Wyciszyłeś
+    follows: Śledzeni
+    mutes: Wyciszeni
     storage: Urządzenie przechowujące dane
   followers:
     domain: Domena
@@ -362,9 +373,6 @@ pl:
       title: "%{name} wspomniał o Tobie"
     reblog:
       title: "%{name} podbił Twój status"
-    subscribed:
-      body: Otrzymujesz teraz powiadomienia push.
-      title: Zarejestrowano subskrypcję!
   remote_follow:
     acct: Podaj swój adres (nazwa@domena), z którego chcesz śledzić
     missing_resource: Nie udało się znaleźć adresu przekierowania z Twojej domeny
@@ -413,26 +421,33 @@ pl:
     authorized_apps: Uwierzytelnione aplikacje
     back: Powrót do Mastodona
     delete: Usuń konto
+    development: Tworzenie aplikacji
     edit_profile: Edytuj profil
-    export: Eksportuj dane
+    export: Eksportowanie danych
     followers: Autoryzowani śledzący
-    import: Importuj dane
+    import: Importowanie danych
     preferences: Preferencje
     settings: Ustawienia
     two_factor_authentication: Uwierzytelnianie dwuetapowe
+    your_apps: Twoje aplikacje
   statuses:
     open_in_web: Otwórz w przeglądarce
     over_character_limit: limit %{max} znaków przekroczony
+    pin_errors:
+      ownership: Nie możesz przypiąć cudzego wpisu
+      private: Nie możesz przypiąć niepublicznego wpisu
+      reblog: Nie możesz przypiąć podbicia wpisu
     show_more: Pokaż więcej
     visibilities:
       private: Tylko dla śledzących
-      private_long: Widoczne tylko dla śledzących
+      private_long: Widoczny tylko dla osób, które Cię śledzą
       public: Publiczny
-      public_long: Widoczne dla wszystkich
+      public_long: Widoczny dla wszystkich użytkowników
       unlisted: Niewypisany
-      unlisted_long: Widoczne dla wszystkich, ale nie wyświetlane na publicznych osiach czasu
+      unlisted_long: Widoczny dla wszystkich, ale nie wyświetlany na publicznych osiach czasu
   stream_entries:
     click_to_show: Naciśnij aby wyświetlić
+    pinned: Przypięty wpis
     reblogged: podbił
     sensitive_content: Wrażliwa zawartość
   terms:
@@ -445,7 +460,7 @@ pl:
 
       <p>Podczas rejestracji, możesz otrzymać prośbę o podanie adresu e-mail. Możesz jednak odwiedzać stronę bez rejestracji. Adres zostanie zweryfikowany przez kliknięcie w link wysłany w wiadomości. Dzięki temu wiemy, że jesteś właścicielem tego adresu.</p>
 
-      <p>Podczas rejestracji i tworzenia postów, Twój adres IP jest zapisywany na naszych serwerach. Możemy też przechowywać adres IP użyty przy każdej operacji w serwisie.</p>
+      <p>Podczas rejestracji i tworzenia wpisów, Twój adres IP jest zapisywany na naszych serwerach. Możemy też przechowywać adres IP użyty przy każdej operacji w serwisie.</p>
 
       <h3 id="use">Jak wykorzystujemy zebrane informacje?</h3>
 
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 0156f0e95..52cb71c60 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -193,7 +193,7 @@ ru:
       content: Проверка безопасности не удалась. Возможно, Вы блокируете cookies?
       title: Проверка безопасности не удалась.
     '429': Слишком много запросов
-    noscript: Для работы с Mastodon, пожалуйста, включите JavaScript.
+    noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript.
   exports:
     blocks: Список блокировки
     csv: CSV
@@ -278,9 +278,6 @@ ru:
       title: Вас упомянул(а) %{name}
     reblog:
       title: "%{name} продвинул(а) Ваш статус"
-    subscribed:
-      body: Теперь Вы можете получать push-уведомления.
-      title: Подписка зарегистрирована!
   remote_follow:
     acct: Введите username@domain, откуда Вы хотите подписаться
     missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 8717a4abd..adfb1a875 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -12,6 +12,7 @@ fr:
         note:
           one: <span class="note-counter">1</span> caractère restant
           other: <span class="note-counter">%{count}</span> caractères restants
+        setting_noindex: Affecte votre profil public ainsi que vos statuts
       imports:
         data: Un fichier CSV généré par une autre instance de Mastodon
       sessions:
@@ -27,6 +28,7 @@ fr:
         data: Données
         display_name: Nom public
         email: Adresse courriel
+        filtered_languages: Langues filtrées
         header: Image d’en-tête
         locale: Langue
         locked: Verrouiller le compte
@@ -37,8 +39,11 @@ fr:
         setting_auto_play_gif: Lire automatiquement les GIFs animés
         setting_boost_modal: Afficher un dialogue de confirmation avant de partager
         setting_default_privacy: Confidentialité des statuts
+        setting_default_sensitive: Toujours marquer les médias comme sensibles
         setting_delete_modal: Afficher un dialogue de confirmation avant de supprimer un pouet
+        setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles
         setting_system_font_ui: Utiliser la police par défaut du système
+        setting_unfollow_modal: Afficher un dialogue de confirmation avant de vous désabonner d’un compte
         severity: Séverité
         type: Type d’import
         username: Identifiant
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index 7e84472b9..e2eba3dd8 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -16,12 +16,13 @@ pl:
           many: Pozostało <span class="name-counter">%{count}</span> znaków
           one: Pozostał <span class="name-counter">1</span> znak.
           other: Pozostało <span class="name-counter">%{count}</span> znaków
+        setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów
       imports:
         data: Plik CSV wyeksportowany z innej instancji Mastodona
       sessions:
-        otp: Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych.
+        otp: Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych
       user:
-        filtered_languages: Wybrane języki nie będą się pojawiać na publicznych osiach czasu.
+        filtered_languages: Wpisy w wybranych językach nie będą pojawiać się na publicznych osiach czasu.
     labels:
       defaults:
         avatar: Awatar
@@ -41,25 +42,25 @@ pl:
         password: Hasło
         setting_auto_play_gif: Automatycznie odtwarzaj animowane GIFy
         setting_boost_modal: Pytaj o potwierdzenie przed podbiciem
-        setting_default_privacy: Widoczność posta
+        setting_default_privacy: Widoczność wpisów
         setting_default_sensitive: Zawsze oznaczaj zawartość multimedialną jako wrażliwą
-        setting_delete_modal: Pytaj o potwierdzenie przed usunięciem postu
+        setting_delete_modal: Pytaj o potwierdzenie przed usunięciem wpisu
         setting_noindex: Nie indeksuj mojego profilu w wyszukiwarkach internetowych
         setting_system_font_ui: Używaj domyślnej czcionki systemu
-        setting_unfollow_modal: Pytaj o potwierdzenie przed usunięciem śledzenia
+        setting_unfollow_modal: Pytaj o potwierdzenie przed cofnięciem śledzenia
         severity: Priorytet
         type: Typ importu
         username: Nazwa użytkownika
       interactions:
-        must_be_follower: Zablokuj powiadomienia od osób, które Cię nie śledzą
-        must_be_following: Zablokuj powiadomienia od osób, których nie śledzisz
+        must_be_follower: Nie wyświetlaj powiadomień od osób, które Cię nie śledzą
+        must_be_following: Nie wyświetlaj powiadomień od osób, których nie śledzisz
       notification_emails:
         digest: Wysyłaj podsumowania e-mailem
-        favourite: Powiadom mnie e-mailem gdy ktoś polubi mój status.
-        follow: Powiadom mnie e-mailem gdy ktoś zacznie mnie śledzić.
-        follow_request: Powiadom mnie e-mailem gdy ktoś poprosi o pozwolenie śledzenia mnie.
-        mention: Powiadom mnie e-mailem gdy ktoś mnie wspomni.
-        reblog: Powiadom mnie e-mailem gdy ktoś podbije mój status.
+        favourite: Powiadamiaj mnie e-mailem, gdy ktoś polubi mój wpis
+        follow: Powiadamiaj mnie e-mailem, gdy ktoś zacznie mnie śledzić
+        follow_request: Powiadamiaj mnie e-mailem, gdy ktoś poprosi o pozwolenie na śledzenie mnie
+        mention: Powiadamiaj mnie e-mailem, gdy ktoś o mnie wspomni
+        reblog: Powiadamiaj mnie e-mailem, gdy ktoś podbije mój wpis
     'no': Nie
     required:
       mark: "*"
diff --git a/config/navigation.rb b/config/navigation.rb
index 535d033f5..4b454b3fc 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -15,6 +15,10 @@ SimpleNavigation::Configuration.run do |navigation|
       settings.item :follower_domains, safe_join([fa_icon('users fw'), t('settings.followers')]), settings_follower_domains_url
     end
 
+    primary.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url do |development|
+      development.item :your_apps, safe_join([fa_icon('list fw'), t('settings.your_apps')]), settings_applications_url, highlights_on: %r{/settings/applications}
+    end
+
     primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_reports_url, if: proc { current_user.admin? } do |admin|
       admin.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports}
       admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts}
diff --git a/config/routes.rb b/config/routes.rb
index c60a8b131..2ff7e890a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -20,6 +20,7 @@ Rails.application.routes.draw do
   get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' }
   get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger
   get 'manifest', to: 'manifests#show', defaults: { format: 'json' }
+  get 'intent', to: 'intents#show'
 
   devise_for :users, path: 'auth', controllers: {
     sessions:           'auth/sessions',
@@ -43,6 +44,7 @@ Rails.application.routes.draw do
     resources :statuses, only: [:show] do
       member do
         get :activity
+        get :embed
       end
     end
 
@@ -51,10 +53,16 @@ Rails.application.routes.draw do
     resource :follow, only: [:create], controller: :account_follow
     resource :unfollow, only: [:create], controller: :account_unfollow
     resource :outbox, only: [:show], module: :activitypub
+    resource :inbox, only: [:create], module: :activitypub
   end
 
+  resource :inbox, only: [:create], module: :activitypub
+
   get '/@:username', to: 'accounts#show', as: :short_account
+  get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
+  get '/@:username/media', to: 'accounts#show', as: :short_account_media
   get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
+  get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
 
   namespace :settings do
     resource :profile, only: [:show, :update]
@@ -75,6 +83,13 @@ Rails.application.routes.draw do
     end
 
     resource :follower_domains, only: [:show, :update]
+
+    resources :applications, except: [:edit] do
+      member do
+        post :regenerate
+      end
+    end
+
     resource :delete, only: [:show, :destroy]
 
     resources :sessions, only: [:destroy]
@@ -85,12 +100,13 @@ Rails.application.routes.draw do
 
   # Remote follow
   resource :authorize_follow, only: [:show, :create]
+  resource :share, only: [:show, :create]
 
   namespace :admin do
     resources :subscriptions, only: [:index]
     resources :domain_blocks, only: [:index, :new, :create, :show, :destroy]
     resource :settings, only: [:edit, :update]
-    
+
     resources :instances, only: [:index] do
       collection do
         post :resubscribe
@@ -150,6 +166,9 @@ Rails.application.routes.draw do
 
           resource :mute, only: :create
           post :unmute, to: 'mutes#destroy'
+
+          resource :pin, only: :create
+          post :unpin, to: 'pins#destroy'
         end
 
         member do
@@ -163,7 +182,8 @@ Rails.application.routes.draw do
         resource :public, only: :show, controller: :public
         resources :tag, only: :show
       end
-      resources :streaming,  only: [:index]
+
+      resources :streaming, only: [:index]
 
       get '/search', to: 'search#index', as: :search
 
@@ -199,6 +219,7 @@ Rails.application.routes.draw do
         resource :search, only: :show, controller: :search
         resources :relationships, only: :index
       end
+
       resources :accounts, only: [:show] do
         resources :statuses, only: :index, controller: 'accounts/statuses'
         resources :followers, only: :index, controller: 'accounts/follower_accounts'
@@ -217,6 +238,7 @@ Rails.application.routes.draw do
 
     namespace :web do
       resource :settings, only: [:update]
+      resource :embed, only: [:create]
       resources :push_subscriptions, only: [:create] do
         member do
           put :update
@@ -234,7 +256,7 @@ Rails.application.routes.draw do
   root 'home#index'
 
   match '*unmatched_route',
-    via: :all,
-    to: 'application#raise_not_found',
-    format: false
+        via: :all,
+        to: 'application#raise_not_found',
+        format: false
 end
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 8273c1201..a502f5593 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -21,3 +21,6 @@
   user_cleanup_scheduler:
     cron: '4 5 * * *'
     class: Scheduler::UserCleanupScheduler
+  subscriptions_cleanup_scheduler:
+    cron: '2 2 * * 0'
+    class: Scheduler::SubscriptionsCleanupScheduler
diff --git a/config/webpack/loaders/babel.js b/config/webpack/loaders/babel.js
index 05ef8431c..989a87dcf 100644
--- a/config/webpack/loaders/babel.js
+++ b/config/webpack/loaders/babel.js
@@ -1,5 +1,7 @@
 const { resolve } = require('path');
 
+const env = process.env.NODE_ENV || 'development';
+
 module.exports = {
   test: /\.js$/,
   // include react-intl because transform-react-remove-prop-types needs to apply to it
@@ -11,6 +13,6 @@ module.exports = {
   options: {
     forceEnv: process.env.NODE_ENV || 'development',
     sourceRoot: 'app/javascript',
-    cacheDirectory: resolve(__dirname, '..', '..', '..', 'tmp', 'cache', 'babel-loader'),
+    cacheDirectory: env === 'development' ? false : resolve(__dirname, '..', '..', '..', 'tmp', 'cache', 'babel-loader'),
   },
 };