New Upstream Release - ruby-doorkeeper-i18n

Ready changes

Summary

Merged new upstream version: 5.2.6 (was: 5.0.2).

Resulting package

Built on 2022-12-30T02:29 (took 12m45s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases ruby-doorkeeper-i18n

Lintian Result

Diff

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..a432f16
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*.{rb,json}]
+indent_style = space
+indent_size = 2
+insert_final_newline = true
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..452ebb3
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,7 @@
+version: 2
+updates:
+- package-ecosystem: bundler
+  directory: "/"
+  schedule:
+    interval: daily
+  open-pull-requests-limit: 10
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..b999ba0
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,35 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+  build:
+    name: >-
+      Ruby ${{ matrix.ruby }}
+    env:
+      CI: true
+      RAILS_ENV: test
+
+    runs-on: ${{ matrix.os }}
+    if: |
+      !(   contains(github.event.pull_request.title,  '[ci skip]')
+        || contains(github.event.pull_request.title,  '[skip ci]'))
+    strategy:
+      fail-fast: true
+      matrix:
+        os: [ ubuntu-latest ]
+        ruby:
+          - '3.1.0'
+    steps:
+      - name: Repo checkout
+        uses: actions/checkout@v2
+
+      - name: Setup Ruby
+        uses: ruby/setup-ruby@v1
+        with:
+          ruby-version: ${{ matrix.ruby }}
+          bundler-cache: true
+
+      - name: Run tests
+        timeout-minutes: 10
+        run: bundle exec rake spec
diff --git a/.gitignore b/.gitignore
index ce86d69..dd8dff9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
 .DS_Store
 Gemfile.lock
 .idea
+*.gem
+/log/
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 9bef3af..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-cache: bundler
-language: ruby
-sudo: false
-
-rvm:
-  - 2.6.2
diff --git a/README.md b/README.md
index fa407e4..08d6eee 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # doorkeeper-i18n
 [![Gem Version](https://badge.fury.io/rb/doorkeeper-i18n.svg)](http://badge.fury.io/rb/doorkeeper-i18n)
-[![Build Status](https://travis-ci.org/doorkeeper-gem/doorkeeper-i18n.svg?branch=master)](https://travis-ci.org/doorkeeper-gem/doorkeeper-i18n)
+[![CI](https://github.com/doorkeeper-gem/doorkeeper-i18n/actions/workflows/ci.yml/badge.svg)](https://github.com/doorkeeper-gem/doorkeeper-i18n/actions/workflows/ci.yml)
 
 Locales for [Doorkeeper](https://github.com/doorkeeper-gem/doorkeeper) gem.
 
@@ -21,11 +21,12 @@ Currently supported locales:
 
 * English (en)
 * German (de)
+* Danish (da)
 * Spanish (es)
 * Finnish (fi)
 * French (fr)
 * Italian (it)
-* Japan (ja)
+* Japanese (ja)
 * Korean (ko)
 * Norwegian (nb)
 * Dutch (nl)
@@ -34,9 +35,12 @@ Currently supported locales:
 * Taiwan (zh-TW)
 * Russian (ru)
 * Catalan (ca)
-* Belarusian (be)
+* Belorussian (be)
 * Czech (cs)
 * Slovak (sk)
+* Bulgarian (bg)
+* Indonesian (id)
+* Turkish (tr)
 
 ## License
 
diff --git a/Rakefile b/Rakefile
index 51b787b..4ebc6d5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -2,6 +2,7 @@ require "bundler"
 require "rake"
 require "rspec/core"
 require "rspec/core/rake_task"
+require "yaml"
 
 begin
   Bundler.setup(:default, :development)
@@ -15,4 +16,37 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
   spec.pattern = FileList["spec/**/*_spec.rb"]
 end
 
+def en_locale
+  @en_locale ||= YAML.load_file(File.join("rails", "locales", "en.yml"))
+end
+
+def merge_locales(source, target)
+  source.inject({}) do |locale, (key, value)|
+    if value.is_a?(Hash)
+      locale[key] = merge_locales(value, target[key] || {})
+    else
+      locale[key] = target[key].nil? ? source[key] : target[key]
+    end
+
+    locale
+  end
+end
+
 task default: :spec
+
+task :fill do
+  Dir.glob(File.join("rails", "locales", "*.yml")).each do |file|
+    next if File.basename(file) == "en.yml"
+
+    puts "Processing #{File.basename(file)}"
+
+    locale = YAML.load_file(file)
+    lang = locale.keys.first.dup
+
+    merged_locale = merge_locales(en_locale.fetch("en"), locale.fetch(lang))
+
+    File.open(file, "w") do |f|
+      f.write(YAML.dump({ lang => merged_locale }, line_width: -1).gsub("---\n", ''))
+    end
+  end
+end
\ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 6ce4623..bf317e1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,12 @@
-ruby-doorkeeper-i18n (5.0.2-3) UNRELEASED; urgency=low
+ruby-doorkeeper-i18n (5.2.6-1) UNRELEASED; urgency=low
 
   * Trim trailing whitespace.
   * Set field Upstream-Contact in debian/copyright.
   * Remove obsolete fields Contact, Name from debian/upstream/metadata (already
     present in machine-readable debian/copyright).
+  * New upstream release.
 
- -- Debian Janitor <janitor@jelmer.uk>  Mon, 13 Jul 2020 03:43:39 -0000
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 30 Dec 2022 02:16:45 -0000
 
 ruby-doorkeeper-i18n (5.0.2-2) unstable; urgency=medium
 
diff --git a/debian/patches/correcting-spec-file.patch b/debian/patches/correcting-spec-file.patch
index f75aaa6..143711e 100644
--- a/debian/patches/correcting-spec-file.patch
+++ b/debian/patches/correcting-spec-file.patch
@@ -8,15 +8,19 @@ Bug-Debian: https://bugs.debian.org/929703
 
 ---
 
---- ruby-doorkeeper-i18n-5.0.2.orig/spec/doorkeeper-i18n_spec.rb
-+++ ruby-doorkeeper-i18n-5.0.2/spec/doorkeeper-i18n_spec.rb
+Index: ruby-doorkeeper-i18n.git/spec/doorkeeper-i18n_spec.rb
+===================================================================
+--- ruby-doorkeeper-i18n.git.orig/spec/doorkeeper-i18n_spec.rb
++++ ruby-doorkeeper-i18n.git/spec/doorkeeper-i18n_spec.rb
 @@ -1,3 +1,4 @@
 +require_relative "spec_helper"
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
  
  Dir.glob('rails/locales/*.yml').each do |locale_file|
---- ruby-doorkeeper-i18n-5.0.2.orig/spec/locale_loading_spec.rb
-+++ ruby-doorkeeper-i18n-5.0.2/spec/locale_loading_spec.rb
+Index: ruby-doorkeeper-i18n.git/spec/locale_loading_spec.rb
+===================================================================
+--- ruby-doorkeeper-i18n.git.orig/spec/locale_loading_spec.rb
++++ ruby-doorkeeper-i18n.git/spec/locale_loading_spec.rb
 @@ -30,7 +30,7 @@ describe 'Locale loading' do
          In Japanese: translation missing: ja.doorkeeper.layouts.admin.nav.oauth2_provider
        EOS
diff --git a/doorkeeper-i18n.gemspec b/doorkeeper-i18n.gemspec
index 388b535..5823e82 100644
--- a/doorkeeper-i18n.gemspec
+++ b/doorkeeper-i18n.gemspec
@@ -1,21 +1,29 @@
 $:.push File.expand_path("../lib", __FILE__)
 
-Gem::Specification.new do |s|
-  s.name        = "doorkeeper-i18n"
-  s.version     = "5.0.2"
-  s.authors     = ["Tute Costa", 'Nikita Bulai']
-  s.email       = %w[bulaj.nikita@gmail.com]
-  s.homepage    = "https://github.com/doorkeeper-gem/doorkeeper-i18n"
-  s.summary     = "Translations for doorkeeper rubygem."
-  s.description = "Translations for doorkeeper rubygem."
-  s.license     = "MIT"
+Gem::Specification.new do |gem|
+  gem.name = "doorkeeper-i18n"
+  gem.version = "5.2.6"
+  gem.authors = ["Tute Costa", "Nikita Bulai"]
+  gem.email = %w[bulaj.nikita@gmail.com]
+  gem.homepage = "https://github.com/doorkeeper-gem/doorkeeper-i18n"
+  gem.summary = "Translations for doorkeeper rubygem."
+  gem.description = "Translations for doorkeeper rubygem."
+  gem.license = "MIT"
 
-  s.files         = `git ls-files`.split("\n")
-  s.test_files    = `git ls-files -- test/*`.split("\n")
-  s.require_paths = ["lib"]
+  gem.files = `git ls-files`.split("\n")
+  gem.test_files = `git ls-files -- test/*`.split("\n")
+  gem.require_paths = ["lib"]
 
-  s.add_development_dependency "rake"
-  s.add_development_dependency "rspec"
-  s.add_development_dependency "i18n-spec", "~> 0.6.0"
-  s.add_development_dependency "railties", ">= 0"
+  gem.metadata = {
+    "homepage_uri" => "https://github.com/doorkeeper-gem/doorkeeper-i18n",
+    "source_code_uri" => "https://github.com/doorkeeper-gem/doorkeeper-i18n",
+    "bug_tracker_uri" => "https://github.com/doorkeeper-gem/doorkeeper-i18n/issues",
+  }
+
+  gem.add_runtime_dependency "doorkeeper", ">= 5.2"
+
+  gem.add_development_dependency "rake"
+  gem.add_development_dependency "rspec"
+  gem.add_development_dependency "i18n-spec", "~> 0.6.0"
+  gem.add_development_dependency "railties", ">= 0"
 end
diff --git a/rails/locales/be.yml b/rails/locales/be.yml
index 2822779..8bccfc7 100644
--- a/rails/locales/be.yml
+++ b/rails/locales/be.yml
@@ -2,138 +2,134 @@ be:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Назва'
-        redirect_uri: 'URI для перанакіравання'
-        scopes: 'Скоупы'
+        name: Назва
+        redirect_uri: URI для перанакіравання
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'не павінен утрымліваць фрагменты'
-              invalid_uri: 'павінен быць карэктным URI'
-              relative_uri: 'павінен быць абсалютным URI'
-              secured_uri: 'павінен быць HTTPS/SSL URI'
-              forbidden_uri: 'заблакаваны серверам'
+              fragment_present: не павінен утрымліваць фрагменты
+              invalid_uri: павінен быць карэктным URI
+              unspecified_scheme: павінен мець схему
+              relative_uri: павінен быць абсалютным URI
+              secured_uri: павінен быць HTTPS/SSL URI
+              forbidden_uri: заблакаваны серверам
             scopes:
-              not_match_configured: "не адпавядаюць канфігурацыі сервера."
-
+              not_match_configured: не адпавядаюць канфігурацыі сервера.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Вы ўпэўнены?'
+        destroy: Вы ўпэўнены?
       buttons:
-        edit: 'Рэдагаваць'
-        destroy: 'Выдаліць'
-        submit: 'Захаваць'
-        cancel: 'Адмяніць'
-        authorize: 'Аўтарызаваць'
+        edit: Рэдагаваць
+        destroy: Выдаліць
+        submit: Захаваць
+        cancel: Адмяніць
+        authorize: Аўтарызаваць
       form:
-        error: 'Паўсталі памылкі! Праверце правільнасць запаўнення палёў'
+        error: Паўсталі памылкі! Праверце правільнасць запаўнення палёў
       help:
-        confidential: 'Праграма будзе выкарыстоўвацца там, дзе сакрэтны ключ абаронены ад прагляду. Мабільныя праграммы і аднастаронкавыя вэб-праграммы (SPA) разглядаюцца як неабароненыя.'
-        redirect_uri: 'Указвайце кожны URI у асобным радку'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Выкарыстоўвайце %{native_redirect_uri} для лакальнага тэставання'
-        scopes: 'Запісвайце скоупы праз прабел. Пакіньце поле пустым для выкарыстання значэнняў па-змаўчанню'
+        confidential: Праграма будзе выкарыстоўвацца там, дзе сакрэтны ключ абаронены ад прагляду. Мабільныя праграммы і аднастаронкавыя вэб-праграммы (SPA) разглядаюцца як неабароненыя.
+        redirect_uri: Указвайце кожны URI у асобным радку
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Запісвайце скоупы праз прабел. Пакіньце поле пустым для выкарыстання значэнняў па-змаўчанню
       edit:
-        title: 'Рэдагаваць праграму'
+        title: Рэдагаваць праграму
       index:
-        title: 'Вашы праграмы'
-        new: 'Новая програма'
-        name: 'Назва'
-        callback_url: 'URL зваротнага выкліку'
-        actions: 'Дзеянні'
-        confidential: 'Прыватна?'
+        title: Вашы праграмы
+        new: Новая програма
+        name: Назва
+        callback_url: URL зваротнага выкліку
+        confidential: Прыватна?
+        actions: Дзеянні
         confidentiality:
-          'yes': 'Так'
-          'no': 'Не'
+          'yes': Так
+          'no': Не
       new:
-        title: 'Новая праграма'
+        title: Новая праграма
       show:
         title: 'Праграма: %{name}'
-        application_id: 'ID праграмы'
-        secret: 'Сакрэтны ключ'
-        scopes: 'Скоупы'
-        confidential: 'Прыватна'
-        callback_urls: 'Спіс URL зваротнага выкліку'
-        actions: 'Дзеянні'
-
+        application_id: ID праграмы
+        secret: Сакрэтны ключ
+        secret_hashed: Сакрэтны ключ зашыфраваны
+        scopes: Скоупы
+        confidential: Прыватна
+        callback_urls: Спіс URL зваротнага выкліку
+        actions: Дзеянні
+        not_defined: Не вызначана
     authorizations:
       buttons:
-        authorize: 'Дазволіць'
-        deny: 'Адхіліць'
+        authorize: Дазволіць
+        deny: Адхіліць
       error:
-        title: 'Адбылася абмыла'
+        title: Адбылася абмыла
       new:
-        title: 'Патрабуецца аўтарызацыя'
-        prompt: 'Дазволіць %{client_name} выкарыстоўваць звесткі Вашага ўліковага запісу?'
+        title: Патрабуецца аўтарызацыя
+        prompt: Дазволіць %{client_name} выкарыстоўваць звесткі Вашага ўліковага запісу?
         able_to: 'Дадзеная праграма патрабуе наступныя дазволы:'
       show:
-        title: 'Код аўтарызацыі'
-
+        title: Код аўтарызацыі
+      form_post:
+        title: Адпраўце гэтую форму
     authorized_applications:
       confirmations:
-        revoke: 'Вы ўпэўнены?'
+        revoke: Вы ўпэўнены?
       buttons:
-        revoke: 'Адазваць аўтарызацыю'
+        revoke: Адазваць аўтарызацыю
       index:
-        title: 'Вашы аўтарызаваныя праграмы'
-        application: 'Праграма'
-        created_at: 'Створана'
-        date_format: '%d-%m-%Y %H:%M:%S'
-
+        title: Вашы аўтарызаваныя праграмы
+        application: Праграма
+        created_at: Створана
+        date_format: "%d-%m-%Y %H:%M:%S"
     pre_authorization:
-      status: 'Папярэдняя аўтарызацыя'
-
+      status: Папярэдняя аўтарызацыя
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'У запыце адсутнічаюць патрэбныя параметры ці яны некарэктныя'
-        invalid_redirect_uri: 'Некарэктны URI для перанакіравання'
-        unauthorized_client: 'Кліент не аўтарызаваны для выканання дадзенага запыту'
+        invalid_request:
+          unknown: У запыце адсутнічаюць абавязковыя параметры ці яны некарэктныя.
+          missing_param: 'Адсутнiчае абавязковы параметр: %{value}.'
+          request_not_authorized: Запыт павінен быць аўтарызаваны. Патрэбны параметр для аўтарызацыі запыту адсутнічае ці няверны
+        invalid_redirect_uri: Некарэктны URI для перанакіравання
+        unauthorized_client: Кліент не аўтарызаваны для выканання дадзенага запыту
         access_denied: 'Доступ забаронены: сервер ці ўладальнік рэсурсу адхіліў запыт'
-        invalid_scope: 'Няверны скоуп'
-        invalid_code_challenge_method: 'Code challenge method павінен быць plain альбо S256.'
-        server_error: 'На аўтарызацыйным серверы адбылася абмыла; запыт не выкананы'
-        temporarily_unavailable: 'Зараз аўтарызацыйны сервер не можа апрацаваць запыт у сілу высокай загружанасці або тэхнічных работ'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Resource Owner Password Credentials ня сканфігураваны, патрэбна канфігурацыя опцыі Doorkeeper.configure.resource_owner_from_credentials'
-        resource_owner_authenticator_not_configured: 'Resource Owner не знойдзены, патрэбна канфігурацыя опцыі Doorkeeper.configure.resource_owner_authenticator'
-        admin_authenticator_not_configured: 'Доступ да панэлі адміністратара заблакаваны, патрэбна канфігурацыя опцыі Doorkeeper.configure.admin_authenticator.'
-
-        # Access grant errors
-        unsupported_response_type: 'Сервер аўтарызацыі не падтрымвае дадзены тып запыту'
-
-        # Access token errors
+        invalid_scope: Няверны скоуп
+        invalid_code_challenge_method: Code challenge method павінен быць plain альбо S256.
+        server_error: На аўтарызацыйным серверы адбылася абмыла; запыт не выкананы
+        temporarily_unavailable: Зараз аўтарызацыйны сервер не можа апрацаваць запыт у сілу высокай загружанасці або тэхнічных работ
+        credential_flow_not_configured: Resource Owner Password Credentials ня сканфігураваны, патрэбна канфігурацыя опцыі Doorkeeper.configure.resource_owner_from_credentials
+        resource_owner_authenticator_not_configured: Resource Owner не знойдзены, патрэбна канфігурацыя опцыі Doorkeeper.configure.resource_owner_authenticator
+        admin_authenticator_not_configured: Доступ да панэлі адміністратара заблакаваны, патрэбна канфігурацыя опцыі Doorkeeper.configure.admin_authenticator.
+        unsupported_response_type: Сервер аўтарызацыі не падтрымвае дадзены тып запыту
+        unsupported_response_mode: The authorization server does not support this response mode.
         invalid_client: 'Абмыла аўтэнтыфікацыі кліента: няверны токен, невядомы кліент ці непадтрымоўваны метад аўтэнтыфікацыі'
-        invalid_grant: 'Права на аўтарызацыю мінула ці адазвана'
-        unsupported_grant_type: 'Аўтарызацыйны сервер не падтрымвае дадзены спосаб аўтарызацыі'
-
+        invalid_grant: Права на аўтарызацыю мінула ці адазвана
+        unsupported_grant_type: Аўтарызацыйны сервер не падтрымвае дадзены спосаб аўтарызацыі
         invalid_token:
-          revoked: "Токен доступу адазваны"
-          expired: "Токен доступу састарэў"
-          unknown: "Няверны токен доступу"
-
+          revoked: Токен доступу адазваны
+          expired: Токен доступу састарэў
+          unknown: Няверны токен доступу
+        revoke:
+          unauthorized: Вы не аўтарызаваны каб адазвать дадзены токен
+        forbidden_token:
+          missing_scope: 'Доступ да гэтага рэсурсу патрабуе наступны(я) скоуп(ы): "%{oauth_scopes}".'
     flash:
       applications:
         create:
-          notice: 'Праграма створана'
+          notice: Праграма створана
         destroy:
-          notice: 'Праграма выдалена'
+          notice: Праграма выдалена
         update:
-          notice: 'Праграма абноўлена'
+          notice: Праграма абноўлена
       authorized_applications:
         destroy:
-          notice: 'Праграма адазвана'
-
+          notice: Праграма адазвана
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth 2 правайдар'
-          applications: 'Праграмы'
-          home: 'Галоўная'
+          oauth2_provider: OAuth 2 правайдар
+          applications: Праграмы
+          home: Галоўная
       application:
-        title: 'Патрэбна аўтарызацыя'
+        title: Патрэбна аўтарызацыя
diff --git a/rails/locales/bg.yml b/rails/locales/bg.yml
new file mode 100644
index 0000000..bf7028b
--- /dev/null
+++ b/rails/locales/bg.yml
@@ -0,0 +1,135 @@
+bg:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Име
+        redirect_uri: УРИ за обратна връзка (Redirect URI)
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: не може да съдържа фрагмент.
+              invalid_uri: трябва да бъде валиден УРИ.
+              unspecified_scheme: трябва да посочва схема.
+              relative_uri: трябва да бъде абсолютен УРИ.
+              secured_uri: трябва да бъде HTTPS/SSL УРИ.
+              forbidden_uri: не е позволен от доставчика на упълномощаване.
+            scopes:
+              not_match_configured: не съвпадат с конфигурираните на доставчика на упълномощаване.
+  doorkeeper:
+    applications:
+      confirmations:
+        destroy: Сигурни ли сте?
+      buttons:
+        edit: Промени
+        destroy: Премахни
+        submit: Изпрати
+        cancel: Откажи
+        authorize: Упълномощи
+      form:
+        error: Възника грешка! Проверете формуляра за неточности
+      help:
+        confidential: Приложението ще бъде използвано в среда, в която тайната на клиента може да бъде запазена конфиденциална. Native мобилни приложения и едностраничните уеб приложения (SPA) не се считат за поверителни.
+        redirect_uri: Въвеждайте по един УРИ на ред.
+        blank_redirect_uri: Оставете празно, ако доставчикът е настроен да предоставя пълномощно на базата на удостоверяване на самоличността на клиента (Client Credentials), парола на собственика на ресурса (Resource Owner Password Credentials) или всеки друг тип пълномощно, което не изисква УРИ за обратна връзка.
+        scopes: Разделяйте обхватите с интервали. Оставете празно, за да използвате обхватите по подразбиране.
+      edit:
+        title: Промяна на приложение
+      index:
+        title: Вашите приложения
+        new: Ново приложение
+        name: Име
+        callback_url: УРЛ за обратна връзка
+        confidential: Поверително?
+        actions: Действия
+        confidentiality:
+          'yes': Да
+          'no': Не
+      new:
+        title: Ново приложение
+      show:
+        title: 'Приложение: %{name}'
+        application_id: УИД на приложение
+        secret: Тайна
+        secret_hashed: Secret hashed
+        scopes: Обхвати
+        confidential: Поверително
+        callback_urls: УРЛ-и за обратна връзка
+        actions: Действия
+        not_defined: Not defined
+    authorizations:
+      buttons:
+        authorize: Упълномощи
+        deny: Откажи
+      error:
+        title: Възникна грешка
+      new:
+        title: Нужно е упълномощаване
+        prompt: Бихте ли упълномощили %{client_name} да използва вашия акаунт?
+        able_to: Това приложение ще може да
+      show:
+        title: Код за упълномощаване
+      form_post:
+        title: Submit this form
+    authorized_applications:
+      confirmations:
+        revoke: Сигурни ли сте?
+      buttons:
+        revoke: Отмени
+      index:
+        title: Упълномощените от вас приложения
+        application: Приложение
+        created_at: Упълномощено на
+        date_format: "%d.%m.%Y г. %H:%M:%S"
+    pre_authorization:
+      status: Предварително упълномощаване
+    errors:
+      messages:
+        invalid_request:
+          unknown: В заявката липсва необходим параметър, присъства неподдържана стойност на параметър или съдържа друга грешка.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Заявеният УРИ за обратна връзка е грешен или не съвпада с УРИ за обратна връзка на клиента.
+        unauthorized_client: Клиентът не е упълномощен да изпълни заявката чрез този метод.
+        access_denied: Собственикът на ресурса или доставчикът отхвърлиха тази заявка.
+        invalid_scope: Заявеният обхват е невалиден, непознат или сгрешен.
+        invalid_code_challenge_method: Методът за удостоверяване чрез код (code challenge) трябва да бъде или „plain“, или „S256“.
+        server_error: Доставчикът на упълномощаване срещна неочакван проблем, който му попречи да изпълни заявката.
+        temporarily_unavailable: Доставчикът на упълномощаване в момента не може да обработи заявката ви поради временно претоварване или техническа профилактика.
+        credential_flow_not_configured: Потокът за удостоверяване с парола на собственик на ресурс се провали поради това, че липсва имплементация на Doorkeeper.configure.resource_owner_from_credentials.
+        resource_owner_authenticator_not_configured: Откриването на собственика на ресурса се провали, защото липсва имплементация на Doorkeeper.configure.resource_owner_authenticator.
+        admin_authenticator_not_configured: Достъпът до административния панел е забранен, защото липсва имплементация на Doorkeeper.configure.admin_authenticator.
+        unsupported_response_type: Доставчикът на упълномощаване не поддържа този вид отговор.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Удостоверяването на самоличността на клиента се провали, поради това, че той е непознат, не е изпратил удостоверение или използваният метод на удостоверяване не се поддържа.
+        invalid_grant: Предоставеното пълномощно не е валидно, изтекло е, отменено е, не притежава съвпадащ с посочения в заявката за упълномощаване УРИ за обратна връзка или е било издадено на друг клиент.
+        unsupported_grant_type: 'Типът на пълномощното не се поддържа от доставчика на упълномощаване. '
+        invalid_token:
+          revoked: Кодът за достъп беше анулиран
+          expired: Кодът за достъп е с изтекъл срок на валидност
+          unknown: Кодът за достъп е невалиден
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
+    flash:
+      applications:
+        create:
+          notice: Приложението беше създадено.
+        destroy:
+          notice: Приложението беше премахнато.
+        update:
+          notice: Приложението беше обновено.
+      authorized_applications:
+        destroy:
+          notice: Достъпът на приложението беше отменен.
+    layouts:
+      admin:
+        title: Doorkeeper
+        nav:
+          oauth2_provider: OAuth2 доставчик
+          applications: Приложения
+          home: Начало
+      application:
+        title: Необходимо е OAuth2 упълномощаване
diff --git a/rails/locales/ca.yml b/rails/locales/ca.yml
index b842a65..e69bbc3 100644
--- a/rails/locales/ca.yml
+++ b/rails/locales/ca.yml
@@ -2,138 +2,134 @@ ca:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Nom'
-        redirect_uri: 'URI de redirecció'
-        scopes: 'Àmbits'
+        name: Nom
+        redirect_uri: URI de redirecció
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'no pot contenir un fragment.'
-              invalid_uri: 'ha de ser una URI vàlid.'
-              relative_uri: 'ha de ser una URI absoluta.'
-              secured_uri: 'ha de ser una URI HTTPS/SSL.'
-              forbidden_uri: 'està prohibida pel servidor'
+              fragment_present: no pot contenir un fragment.
+              invalid_uri: ha de ser una URI vàlid.
+              unspecified_scheme: must specify a scheme.
+              relative_uri: ha de ser una URI absoluta.
+              secured_uri: ha de ser una URI HTTPS/SSL.
+              forbidden_uri: està prohibida pel servidor
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: "Segur que vols eliminar l'aplicació?"
+        destroy: Segur que vols eliminar l'aplicació?
       buttons:
-        edit: 'Editar'
-        destroy: 'Eliminar'
-        submit: 'Enviar'
-        cancel: 'Cancel·lar'
-        authorize: 'Autoritzar'
+        edit: Editar
+        destroy: Eliminar
+        submit: Enviar
+        cancel: Cancel·lar
+        authorize: Autoritzar
       form:
-        error: 'Ups! Sembla que hi ha errors al formulari'
+        error: Ups! Sembla que hi ha errors al formulari
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Utilitza una línia per URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Utilitza %{native_redirect_uri} per a tests en local'
-        scopes: 'Separa els àmbits amb espais. Deixa-ho en blanc per utilitzar els àmbits per defecte.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Utilitza una línia per URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Separa els àmbits amb espais. Deixa-ho en blanc per utilitzar els àmbits per defecte.
       edit:
-        title: 'Editar aplicació'
+        title: Editar aplicació
       index:
-        title: 'Les teves aplicacions'
-        new: 'Nova aplicació'
-        name: 'Nom'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Les teves aplicacions
+        new: Nova aplicació
+        name: Nom
+        callback_url: Callback URL
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Sí'
+          'yes': Sí
           'no': 'No'
       new:
-        title: 'Nova aplicació'
+        title: Nova aplicació
       show:
         title: 'Aplicació: %{name}'
-        application_id: "Identificador d'aplicació"
-        secret: 'Secret'
-        scopes: 'Àmbits'
-        confidential: 'Confidential'
-        callback_urls: 'URLs de callback'
-        actions: 'Accions'
-
+        application_id: Identificador d'aplicació
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Àmbits
+        confidential: Confidential
+        callback_urls: URLs de callback
+        actions: Accions
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autoritzar'
-        deny: 'Denegar'
+        authorize: Autoritzar
+        deny: Denegar
       error:
-        title: 'Hi ha hagut un error'
+        title: Hi ha hagut un error
       new:
-        title: 'Autorització necessària'
-        prompt: 'Autoritzes a %{client_name} per a que utilitzi el teu compte?'
-        able_to: 'Aquesta aplicació tindrà permisos per a'
+        title: Autorització necessària
+        prompt: Autoritzes a %{client_name} per a que utilitzi el teu compte?
+        able_to: Aquesta aplicació tindrà permisos per a
       show:
-        title: "Codi d'autorització"
-
+        title: Codi d'autorització
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Segur que vols anul·lar aquesta aplicació?'
+        revoke: Segur que vols anul·lar aquesta aplicació?
       buttons:
-        revoke: 'Anul·lar'
+        revoke: Anul·lar
       index:
-        title: 'Les teves aplicacions autoritzades'
-        application: 'Aplicació'
-        created_at: 'Data de creació'
-        date_format: '%d/%m/%Y %H:%M:%S'
-
+        title: Les teves aplicacions autoritzades
+        application: Aplicació
+        created_at: Data de creació
+        date_format: "%d/%m/%Y %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'A la petició li manca un paràmetre obligatori, inclou un valor de paràmetre incompatible, o té un format incorrecte.'
-        invalid_redirect_uri: 'La URI de redirecció no és vàlida.'
-        unauthorized_client: 'El client no té autorització per a realitzar aquesta petició amb aquest mètode.'
-        access_denied: "El propietari del recurs o el servidor d'autorització han denegat la petició."
-        invalid_scope: "L'àmbit sol·licitat no és vàlid, és desconegut, o té un format incorrecte."
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: "El servidor d'autorització ha trobat una condició inesperada que le ha impedit completar la petició."
-        temporarily_unavailable: "El servidor d'autorització no ha pogut gestionar la petició per una sobrecàrrega temporal o per mantenimient del servidor."
-
-        # Configuration error messages
-        credential_flow_not_configured: 'El flux de credencials del propietari del recurs ha fallat per què Doorkeeper.configure.resource_owner_from_credentials no està configurat.'
-        resource_owner_authenticator_not_configured: 'La cerca del propietari del recurs ha fallat per què Doorkeeper.configure.resource_owner_authenticator no està configurat.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: "El servidor d'autorització no permet aquest tipus de respuesta."
-
-        # Access token errors
-        invalid_client: "L'autenticació del client ha fallado ja que el client és desconegut, no està autenticat, o el mètode d'autenticació és incompatible."
-        invalid_grant: "L'autorització proporcionada no és vàlida, ha expirat, ha estat anul·lada, no coincideix amb la URI de redirecció utilitzada a la petició d'autorització, o ha estat sol·licitada per un altre client."
-        unsupported_grant_type: "El tipus d'autorització no està permesa per el servidor d'autorització."
-
+        invalid_request:
+          unknown: A la petició li manca un paràmetre obligatori, inclou un valor de paràmetre incompatible, o té un format incorrecte.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: La URI de redirecció no és vàlida.
+        unauthorized_client: El client no té autorització per a realitzar aquesta petició amb aquest mètode.
+        access_denied: El propietari del recurs o el servidor d'autorització han denegat la petició.
+        invalid_scope: L'àmbit sol·licitat no és vàlid, és desconegut, o té un format incorrecte.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: El servidor d'autorització ha trobat una condició inesperada que le ha impedit completar la petició.
+        temporarily_unavailable: El servidor d'autorització no ha pogut gestionar la petició per una sobrecàrrega temporal o per mantenimient del servidor.
+        credential_flow_not_configured: El flux de credencials del propietari del recurs ha fallat per què Doorkeeper.configure.resource_owner_from_credentials no està configurat.
+        resource_owner_authenticator_not_configured: La cerca del propietari del recurs ha fallat per què Doorkeeper.configure.resource_owner_authenticator no està configurat.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: El servidor d'autorització no permet aquest tipus de respuesta.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: L'autenticació del client ha fallado ja que el client és desconegut, no està autenticat, o el mètode d'autenticació és incompatible.
+        invalid_grant: L'autorització proporcionada no és vàlida, ha expirat, ha estat anul·lada, no coincideix amb la URI de redirecció utilitzada a la petició d'autorització, o ha estat sol·licitada per un altre client.
+        unsupported_grant_type: El tipus d'autorització no està permesa per el servidor d'autorització.
         invalid_token:
-          revoked: "El token d'accés ha estat anul·lat"
-          expired: "El token d'accés ha expirat"
-          unknown: "El token d'accés és invàlid"
-
+          revoked: El token d'accés ha estat anul·lat
+          expired: El token d'accés ha expirat
+          unknown: El token d'accés és invàlid
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Aplicació creada.'
+          notice: Aplicació creada.
         destroy:
-          notice: 'Aplicació eliminada.'
+          notice: Aplicació eliminada.
         update:
-          notice: 'Aplicació actualizada.'
+          notice: Aplicació actualizada.
       authorized_applications:
         destroy:
-          notice: 'Aplicació anul·lada.'
-
+          notice: Aplicació anul·lada.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'Proveïdor OAuth2'
-          applications: 'Aplicacions'
-          home: 'Inici'
+          oauth2_provider: Proveïdor OAuth2
+          applications: Aplicacions
+          home: Inici
       application:
-        title: 'Autorització OAuth necessària'
+        title: Autorització OAuth necessària
diff --git a/rails/locales/cs.yml b/rails/locales/cs.yml
index ae57be5..e60454b 100644
--- a/rails/locales/cs.yml
+++ b/rails/locales/cs.yml
@@ -2,138 +2,134 @@ cs:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Jméno'
-        redirect_uri: 'URI přesměrování'
-        scopes: 'Scopes'
+        name: Jméno
+        redirect_uri: URI přesměrování
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'nemůže obsahovat fragment.'
-              invalid_uri: 'musí být platná URI.'
-              relative_uri: 'musí být absolutní URI.'
-              secured_uri: 'musí být HTTPS/SSL URI.'
-              forbidden_uri: 'je serverem zakázána.'
+              fragment_present: nemůže obsahovat fragment.
+              invalid_uri: musí být platná URI.
+              unspecified_scheme: must specify a scheme.
+              relative_uri: musí být absolutní URI.
+              secured_uri: musí být HTTPS/SSL URI.
+              forbidden_uri: je serverem zakázána.
             scopes:
-              not_match_configured: "neodpovídá nastavenému serveru."
-
+              not_match_configured: neodpovídá nastavenému serveru.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Opravdu smazat?'
+        destroy: Opravdu smazat?
       buttons:
-        edit: 'Upravit'
-        destroy: 'Smazat'
-        submit: 'Odeslat'
-        cancel: 'Zrušit'
-        authorize: 'Autorizovat'
+        edit: Upravit
+        destroy: Smazat
+        submit: Odeslat
+        cancel: Zrušit
+        authorize: Autorizovat
       form:
-        error: 'Chyba! Zkontrolujte a opravte chyby ve formuláři'
+        error: Chyba! Zkontrolujte a opravte chyby ve formuláři
       help:
-        confidential: 'Aplikace bude použita tam, kde je možné zachovat důvěrnost klienta. Nativní mobilní aplikace a aplikace s jednou stránkou jsou považovány za nedůvěrné.'
-        redirect_uri: 'Na každý řádek jedna URI'
-        blank_redirect_uri: "Ponechte prázdné, pokud jste nakonfigurovali svého poskytovatele, aby používal pověření klienta, pověření vlastníka hesla nebo jiný typ grantu, který nevyžaduje přesměrování identifikátoru URI."
-        native_redirect_uri: 'Použijte %{native_redirect_uri} pokud chcete použít localhost URI pro vývojové prostředí'
-        scopes: 'Oddělte scopy mezerami. Nechte prázdné pro použití default scopu.'
+        confidential: Aplikace bude použita tam, kde je možné zachovat důvěrnost klienta. Nativní mobilní aplikace a aplikace s jednou stránkou jsou považovány za nedůvěrné.
+        redirect_uri: Na každý řádek jedna URI
+        blank_redirect_uri: Ponechte prázdné, pokud jste nakonfigurovali svého poskytovatele, aby používal pověření klienta, pověření vlastníka hesla nebo jiný typ grantu, který nevyžaduje přesměrování identifikátoru URI.
+        scopes: Oddělte scopy mezerami. Nechte prázdné pro použití default scopu.
       edit:
-        title: 'Upravit aplikaci'
+        title: Upravit aplikaci
       index:
-        title: 'Vaše aplikace'
-        new: 'Nová aplikace'
-        name: 'Název'
-        callback_url: 'Callback URL'
-        confidential: 'Důvěrné?'
-        actions: 'Akce'
+        title: Vaše aplikace
+        new: Nová aplikace
+        name: Název
+        callback_url: Callback URL
+        confidential: Důvěrné?
+        actions: Akce
         confidentiality:
-          'yes': 'Ano'
-          'no': 'Ne'
+          'yes': Ano
+          'no': Ne
       new:
-        title: 'Nová aplikace'
+        title: Nová aplikace
       show:
         title: 'Aplikace: %{name}'
-        application_id: 'UID aplikace'
-        secret: 'Secret'
-        scopes: 'Scopes'
-        confidential: 'Důvěrné'
-        callback_urls: 'Url přesměrování'
-        actions: 'Akce'
-
+        application_id: UID aplikace
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Důvěrné
+        callback_urls: Url přesměrování
+        actions: Akce
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autorizovat'
-        deny: 'Odmítnout'
+        authorize: Autorizovat
+        deny: Odmítnout
       error:
-        title: 'Vyskytla se chyba'
+        title: Vyskytla se chyba
       new:
-        title: 'Nutná autorizace'
-        prompt: 'Autorizovat %{client_name} k přístupu k vašemu účtu?'
-        able_to: 'Tato aplikace bude mít tato oprávnění'
+        title: Nutná autorizace
+        prompt: Autorizovat %{client_name} k přístupu k vašemu účtu?
+        able_to: Tato aplikace bude mít tato oprávnění
       show:
-        title: 'Autorizační kód'
-
+        title: Autorizační kód
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Opravdu autorizovat?'
+        revoke: Opravdu autorizovat?
       buttons:
-        revoke: 'Odebrat autorizaci'
+        revoke: Odebrat autorizaci
       index:
-        title: 'Vaše autorizované aplikace'
-        application: 'Aplikace'
-        created_at: 'Vytvořeno'
-        date_format: '%H:%M:%S %d.%m.%T'
-
+        title: Vaše autorizované aplikace
+        application: Aplikace
+        created_at: Vytvořeno
+        date_format: "%H:%M:%S %d.%m.%T"
     pre_authorization:
-      status: 'Pre-autorizace'
-
+      status: Pre-autorizace
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Požadavku chybí požadovaný parametr, obsahuje nepodporovanou hodnotu parametru, nebo je jinak poškozen.'
-        invalid_redirect_uri: "Požadované přesměrování uri je chybně formátováno nebo neodpovídá přesměrování URI klienta."
-        unauthorized_client: 'Klient není oprávněn provádět tento požadavek touto metodou.'
-        access_denied: 'Vlastník zdroje nebo autorizační server požadavek odmítl.'
-        invalid_scope: 'Požadovaný rozsah je neplatný, neznámý nebo poškozený.'
-        invalid_code_challenge_method: 'Metoda výzvy kódu musí být prostá nebo S256.'
-        server_error: 'Autorizační server narazil na neočekávanou podmínku, která mu znemožnila splnit požadavek.'
-        temporarily_unavailable: 'Autorizační server není v současné době schopen zpracovat požadavek z důvodu dočasného přetížení nebo údržby serveru.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Flow pověření vlastníka zdroje se nezdařil kvůli tomu, že Doorkeeper.configure.resource_owner_from_credentials není nakonfigurován.'
-        resource_owner_authenticator_not_configured: 'Vyhledání zdroje se nezdařilo z důvodu, že Doorkeeper.configure.resource_owner_authenticator je nekonfigurován.'
-        admin_authenticator_not_configured: 'Přístup k panelu admin je zakázán kvůli tomu, že Doorkeeper.configure.admin_authenticator je nekonfigurován.'
-
-        # Access grant errors
-        unsupported_response_type: 'Autorizační server nepodporuje tento typ odpovědi.'
-
-        # Access token errors
-        invalid_client: 'Autentizace klienta se nezdařila kvůli neznámému klientovi, žádnému ověřování klienta nebo nepodporované metodě ověřování.'
-        invalid_grant: 'Poskytnutý grant pro udělení oprávnění je neplatný, jeho platnost vypršela, zrušena, neodpovídá identifikátoru URI přesměrování použitého v žádosti o autorizaci nebo byla vydána jinému klientovi.'
-        unsupported_grant_type: 'Autorizační server nepodporuje typ autorizačního grantu.'
-
+        invalid_request:
+          unknown: Požadavku chybí požadovaný parametr, obsahuje nepodporovanou hodnotu parametru, nebo je jinak poškozen.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Požadované přesměrování uri je chybně formátováno nebo neodpovídá přesměrování URI klienta.
+        unauthorized_client: Klient není oprávněn provádět tento požadavek touto metodou.
+        access_denied: Vlastník zdroje nebo autorizační server požadavek odmítl.
+        invalid_scope: Požadovaný rozsah je neplatný, neznámý nebo poškozený.
+        invalid_code_challenge_method: Metoda výzvy kódu musí být prostá nebo S256.
+        server_error: Autorizační server narazil na neočekávanou podmínku, která mu znemožnila splnit požadavek.
+        temporarily_unavailable: Autorizační server není v současné době schopen zpracovat požadavek z důvodu dočasného přetížení nebo údržby serveru.
+        credential_flow_not_configured: Flow pověření vlastníka zdroje se nezdařil kvůli tomu, že Doorkeeper.configure.resource_owner_from_credentials není nakonfigurován.
+        resource_owner_authenticator_not_configured: Vyhledání zdroje se nezdařilo z důvodu, že Doorkeeper.configure.resource_owner_authenticator je nekonfigurován.
+        admin_authenticator_not_configured: Přístup k panelu admin je zakázán kvůli tomu, že Doorkeeper.configure.admin_authenticator je nekonfigurován.
+        unsupported_response_type: Autorizační server nepodporuje tento typ odpovědi.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Autentizace klienta se nezdařila kvůli neznámému klientovi, žádnému ověřování klienta nebo nepodporované metodě ověřování.
+        invalid_grant: Poskytnutý grant pro udělení oprávnění je neplatný, jeho platnost vypršela, zrušena, neodpovídá identifikátoru URI přesměrování použitého v žádosti o autorizaci nebo byla vydána jinému klientovi.
+        unsupported_grant_type: Autorizační server nepodporuje typ autorizačního grantu.
         invalid_token:
-          revoked: "Tento přístupový token byl zneplatněn"
-          expired: "Tento přístupový token vypršel"
-          unknown: "Tento přístupový token je neplatný"
-
+          revoked: Tento přístupový token byl zneplatněn
+          expired: Tento přístupový token vypršel
+          unknown: Tento přístupový token je neplatný
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Aplikace vytvořena.'
+          notice: Aplikace vytvořena.
         destroy:
-          notice: 'Aplikace smazána.'
+          notice: Aplikace smazána.
         update:
-          notice: 'Aplikace aktualizována.'
+          notice: Aplikace aktualizována.
       authorized_applications:
         destroy:
-          notice: 'Aplikaci bylo odebráno oprávnění.'
-
+          notice: Aplikaci bylo odebráno oprávnění.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 poskytovatel'
-          applications: 'Aplikace'
-          home: 'Domů'
+          oauth2_provider: OAuth2 poskytovatel
+          applications: Aplikace
+          home: Domů
       application:
-        title: 'OAuth vyžaduje autorizaci'
+        title: OAuth vyžaduje autorizaci
diff --git a/rails/locales/da.yml b/rails/locales/da.yml
new file mode 100644
index 0000000..78aab9f
--- /dev/null
+++ b/rails/locales/da.yml
@@ -0,0 +1,135 @@
+da:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Navn
+        redirect_uri: Omdiriger URI
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: må ikke indeholde et fragment
+              invalid_uri: skal være en gyldig URI
+              unspecified_scheme: skal angive en ordning
+              relative_uri: skal være en absolut URI
+              secured_uri: skal være en HTTPS/SSL URI
+              forbidden_uri: er afvist af serveren
+            scopes:
+              not_match_configured: passer ikke med konfigurationen på serveren
+  doorkeeper:
+    applications:
+      confirmations:
+        destroy: Er du sikker?
+      buttons:
+        edit: Rediger
+        destroy: Slet
+        submit: Indsend
+        cancel: Annuller
+        authorize: Tillad
+      form:
+        error: Oops! Tjek dit input for mulige fejl
+      help:
+        confidential: Applikationen vil blive brugt, hvor kundens fortroligt materiale kan holdes fortroligt. Mobile apps og Single Page Apps betragtes som ikke-fortrolige.
+        redirect_uri: Brug en linje pr. URI
+        blank_redirect_uri: Efterlad feltet tomt, hvis du har konfigureret din udbyder til at bruge Client Credentials, Resource Owner Password Credentials eller en anden adgangskontrol, der ikke kræver omdirigering af URI.
+        scopes: Separate afgrænsningen med mellemrum. Efterlad feltet blank for at bruge standard afgrænsning.
+      edit:
+        title: Rediger applikation
+      index:
+        title: Dine applikationer
+        new: Ny applikation
+        name: Navn
+        callback_url: Tilbage kald URL
+        confidential: Fortrolig?
+        actions: Handlinger
+        confidentiality:
+          'yes': Ja
+          'no': Nej
+      new:
+        title: Ny Applikation
+      show:
+        title: 'Applikation: %{name}'
+        application_id: Applikation UID
+        secret: Hemmelig
+        secret_hashed: Secret hashed
+        scopes: Afgrænsning
+        confidential: Fortroligt
+        callback_urls: Tilbagekald URL'er
+        actions: Handlinger
+        not_defined: Not defined
+    authorizations:
+      buttons:
+        authorize: Tillad
+        deny: Afvis
+      error:
+        title: Der er opstået en fejl
+      new:
+        title: Tilladelse påkrævet
+        prompt: Giv %{client_name} tilladelse til at bruge din konto?
+        able_to: Denne applikation vil kunne
+      show:
+        title: Godkendelseskode
+      form_post:
+        title: Submit this form
+    authorized_applications:
+      confirmations:
+        revoke: Er du sikker?
+      buttons:
+        revoke: Tilbagekald
+      index:
+        title: Dine autoriserede applikationer
+        application: Applikation
+        created_at: Oprettet den
+        date_format: "%Y-%m-%d %H:%M:%S"
+    pre_authorization:
+      status: før godkendelse
+    errors:
+      messages:
+        invalid_request:
+          unknown: Forespørgslen mangler en påkrævet parameter, indeholder en ikke-understøttet parameterværdi eller er fejlbehæftet.
+          missing_param: 'Manglende påkrævet parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Den ønskede omdirigering URI er fejl behæftet eller svarer ikke til kundens omdirigering af URI.
+        unauthorized_client: Kunden er ikke autoriseret til at udføre denne anmodning ved hjælp af denne metode.
+        access_denied: Resource-ejeren eller autorisationsserveren nægtede anmodningen.
+        invalid_scope: Den ønskede afgrænsning er ugyldigt, ukendt eller fejlbehæftet.
+        invalid_code_challenge_method: Kodeudfordringsmetoden skal være klar eller S256.
+        server_error: Der opstod en uventet fejl på Autorisationsserveren, som forhindrede den i at fuldføre anmodningen.
+        temporarily_unavailable: Autorisationsserveren kan ikke håndtere anmodningen på grund af midlertidig overbelastning eller vedligeholdelse af serveren.
+        credential_flow_not_configured: Ressource ejeren Password er fejlet på grund af Doorkeeper.configure.resource_owner_from_credentials er ukonfigureret.
+        resource_owner_authenticator_not_configured: Kunne ikke finde ressource Ejeren da Doorkeeper.configure.resource_owner_from_credentials er ukonfigureret.
+        admin_authenticator_not_configured: Der er ingen adgang til admin panelet da Doorkeeper.configure.resource_owner_from_credentials er ukonfigureret.
+        unsupported_response_type: Autorisationsserveren understøtter ikke denne svartype
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Kunde autentificering mislykkedes på grund af ukendt kunde, ingen kunde godkendelse inkluderet eller ingen understøttet godkendelsesmetode
+        invalid_grant: Den tildelte godkendelse er ugyldig, udløbet, tilbagekaldt, svarer ikke til den omdirigerde URI, der blev anvendt i godkendelsesanmodningen, eller blev udstedt til en anden kunde.
+        unsupported_grant_type: Godkendelsestypen understøttes ikke af autorisationsserveren
+        invalid_token:
+          revoked: Adgangs tokenet blev tilbagekaldt
+          expired: Adgangs tokenet er udløbet
+          unknown: Adgangs tokenet er ugyldigt
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
+    flash:
+      applications:
+        create:
+          notice: Applikationen er dannet
+        destroy:
+          notice: Applikationen er slettet
+        update:
+          notice: Applikationen er opdateret
+      authorized_applications:
+        destroy:
+          notice: Applikationen er tilbagekaldt
+    layouts:
+      admin:
+        title: Dørvogter
+        nav:
+          oauth2_provider: OAuth2 Udbyder
+          applications: applikationer
+          home: Hjem
+      application:
+        title: OAuth autorisation kræves
diff --git a/rails/locales/de.yml b/rails/locales/de.yml
index b64a285..3a2577c 100644
--- a/rails/locales/de.yml
+++ b/rails/locales/de.yml
@@ -2,138 +2,134 @@ de:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Name'
-        redirect_uri: 'Redirect URI'
-        scopes: 'Scopes'
+        name: Name
+        redirect_uri: Redirect URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'darf kein Fragment enthalten.'
-              invalid_uri: 'muss ein valider URI (Identifier) sein.'
-              relative_uri: 'muss ein absoluter URI (Identifier) sein.'
-              secured_uri: 'muss ein HTTPS/SSL URI (Identifier) sein.'
-              forbidden_uri: 'ist vom server verboten.'
+              fragment_present: darf kein Fragment enthalten.
+              invalid_uri: muss ein valider URI (Identifier) sein.
+              unspecified_scheme: muss ein Schema angeben.
+              relative_uri: muss ein absoluter URI (Identifier) sein.
+              secured_uri: muss ein HTTPS/SSL URI (Identifier) sein.
+              forbidden_uri: ist vom server verboten.
             scopes:
-              not_match_configured: "stimmen nicht mit denen am server hinterlegten überein."
-
+              not_match_configured: stimmen nicht mit denen am server hinterlegten überein.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Bist du sicher?'
+        destroy: Bist du sicher?
       buttons:
-        edit: 'Bearbeiten'
-        destroy: 'Löschen'
-        submit: 'Übertragen'
-        cancel: 'Abbrechen'
-        authorize: 'Autorisieren'
+        edit: Bearbeiten
+        destroy: Löschen
+        submit: Übertragen
+        cancel: Abbrechen
+        authorize: Autorisieren
       form:
-        error: 'Whoops! Bitte überprüfe das Formular auf Fehler!'
+        error: Whoops! Bitte überprüfe das Formular auf Fehler!
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Bitte benutze eine Zeile pro URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: '%{native_redirect_uri} für lokale Tests benutzen'
-        scopes: 'Bitte die "Scopes" mit Leerzeichen trennen. Bitte frei lassen für die Verwendung der Default-Werte.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Bitte benutze eine Zeile pro URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Bitte die "Scopes" mit Leerzeichen trennen. Bitte frei lassen für die Verwendung der Default-Werte.
       edit:
-        title: 'Applikation bearbeiten'
+        title: Applikation bearbeiten
       index:
-        title: 'Deine Applikationen'
-        new: 'Neue Applikation'
-        name: 'Name'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Deine Applikationen
+        new: Neue Applikation
+        name: Name
+        callback_url: Callback URL
+        confidential: Vertraulich?
+        actions: Aktionen
         confidentiality:
-          'yes': 'Ja'
-          'no': 'Nein'
+          'yes': Ja
+          'no': Nein
       new:
-        title: 'Neue Applikation'
+        title: Neue Applikation
       show:
         title: 'Applikation: %{name}'
-        application_id: 'Applikations-ID'
-        secret: 'Secret'
-        scopes: 'Scopes'
-        confidential: 'Confidential'
-        callback_urls: 'Callback URLs'
-        actions: 'Aktionen'
-
+        application_id: Applikations-ID
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Vertraulich
+        callback_urls: Callback URLs
+        actions: Aktionen
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autorisieren'
-        deny: 'Verweigern'
+        authorize: Autorisieren
+        deny: Verweigern
       error:
-        title: 'Ein Fehler ist aufgetreten'
+        title: Ein Fehler ist aufgetreten
       new:
-        title: 'Autorisierung erforderlich'
-        prompt: 'Soll %{client_name} für die Benutzung dieses Accounts autorisiert werden?'
-        able_to: 'Diese Anwendung wird folgende Rechte haben'
+        title: Autorisierung erforderlich
+        prompt: Soll %{client_name} für die Benutzung dieses Accounts autorisiert werden?
+        able_to: Diese Anwendung wird folgende Rechte haben
       show:
-        title: 'Autorisierungscode'
-
+        title: Autorisierungscode
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Bist du sicher?'
+        revoke: Bist du sicher?
       buttons:
-        revoke: 'Ungültig machen'
+        revoke: Ungültig machen
       index:
-        title: 'Deine autorisierten Applikationen'
-        application: 'Applikation'
-        created_at: 'erstellt am'
-        date_format: '%Y-%m-%d %H:%M:%S'
-
+        title: Deine autorisierten Applikationen
+        application: Applikation
+        created_at: erstellt am
+        date_format: "%Y-%m-%d %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Die Anfrage enthält einen nicht-unterstützten Parameter, ein Parameter fehlt oder sie ist anderweitig fehlerhaft.'
-        invalid_redirect_uri: 'Der Redirect-URI in der Anfrage ist ungültig.'
-        unauthorized_client: 'Der Client ist nicht autorisiert, diese Anfrage mit dieser Methode auszuführen.'
-        access_denied: 'Der Resource Owner oder der Autorisierungs-Server hat die Anfrage verweigert.'
-        invalid_scope: 'Der angeforderte Scope ist inkorrekt, unbekannt oder fehlerhaft.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'Der Autorisierungs-Server hat ein unerwartetes Problem festgestellt und konnte die Anfrage nicht beenden.'
-        temporarily_unavailable: 'Der Autorisierungs-Server ist derzeit auf Grund von temporärer Überlastung oder Wartungsarbeiten am Server nicht in der Lage, die Anfrage zu bearbeiten .'
-
-        # Configuration error messages
+        invalid_request:
+          unknown: Die Anfrage enthält einen nicht-unterstützten Parameter, ein Parameter fehlt oder sie ist anderweitig fehlerhaft.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Der Redirect-URI in der Anfrage ist ungültig.
+        unauthorized_client: Der Client ist nicht autorisiert, diese Anfrage mit dieser Methode auszuführen.
+        access_denied: Der Resource Owner oder der Autorisierungs-Server hat die Anfrage verweigert.
+        invalid_scope: Der angeforderte Scope ist inkorrekt, unbekannt oder fehlerhaft.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: Der Autorisierungs-Server hat ein unerwartetes Problem festgestellt und konnte die Anfrage nicht beenden.
+        temporarily_unavailable: Der Autorisierungs-Server ist derzeit auf Grund von temporärer Überlastung oder Wartungsarbeiten am Server nicht in der Lage, die Anfrage zu bearbeiten .
         credential_flow_not_configured: 'Die Prozedur "Resource Owner Password Credentials" ist fehlgeschlagen: Doorkeeper.configure.resource_owner_from_credentials ist nicht konfiguriert.'
         resource_owner_authenticator_not_configured: 'Die Prozedur "Resource Owner find" ist fehlgeschlagen: Doorkeeper.configure.resource_owner_authenticator ist nicht konfiguriert.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'Der Autorisierungs-Server unterstützt diesen Antwort-Typ nicht.'
-
-        # Access token errors
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: Der Autorisierungs-Server unterstützt diesen Antwort-Typ nicht.
+        unsupported_response_mode: The authorization server does not support this response mode.
         invalid_client: 'Client-Autorisierung MKIM ist fehlgeschlagen: Unbekannter Client, keine Autorisierung mitgeliefert oder Autorisierungsmethode nicht unterstützt.'
-        invalid_grant: 'Die bereitgestellte Autorisierung ist inkorrekt, abgelaufen, widerrufen, ist mit einem anderen Client verknüpft oder der Redirection URI stimmt nicht mit der Autorisierungs-Anfrage überein.'
-        unsupported_grant_type: 'Der Autorisierungs-Typ wird nicht vom Autorisierungs-Server unterstützt.'
-
+        invalid_grant: Die bereitgestellte Autorisierung ist inkorrekt, abgelaufen, widerrufen, ist mit einem anderen Client verknüpft oder der Redirection URI stimmt nicht mit der Autorisierungs-Anfrage überein.
+        unsupported_grant_type: Der Autorisierungs-Typ wird nicht vom Autorisierungs-Server unterstützt.
         invalid_token:
-          revoked: "Der Access Token wurde annuliert"
-          expired: "Der Access Token ist abgelaufen"
-          unknown: "Der Access Token ist nicht gültig/korrekt"
-
+          revoked: Der Access Token wurde annuliert
+          expired: Der Access Token ist abgelaufen
+          unknown: Der Access Token ist nicht gültig/korrekt
+        revoke:
+          unauthorized: Sie sind nicht berechtigt, dieses Token zu widerrufen
+        forbidden_token:
+          missing_scope: Der zugriff auf diese ressource erfordert umfang "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Applikation erstellt.'
+          notice: Applikation erstellt.
         destroy:
-          notice: 'Applikation gelöscht.'
+          notice: Applikation gelöscht.
         update:
-          notice: 'Applikation geupdated.'
+          notice: Applikation geupdated.
       authorized_applications:
         destroy:
-          notice: 'Applikation widerrufen.'
-
+          notice: Applikation widerrufen.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 Provider'
-          applications: 'Applikationen'
-          home: 'Home'
+          oauth2_provider: OAuth2 Provider
+          applications: Applikationen
+          home: Home
       application:
-        title: 'OAuth Autorisierung erforderlich'
+        title: OAuth Autorisierung erforderlich
diff --git a/rails/locales/en.yml b/rails/locales/en.yml
index e1773e5..fed6409 100644
--- a/rails/locales/en.yml
+++ b/rails/locales/en.yml
@@ -4,7 +4,6 @@ en:
       doorkeeper/application:
         name: 'Name'
         redirect_uri: 'Redirect URI'
-        scopes: 'Scopes'
     errors:
       models:
         doorkeeper/application:
@@ -12,12 +11,12 @@ en:
             redirect_uri:
               fragment_present: 'cannot contain a fragment.'
               invalid_uri: 'must be a valid URI.'
+              unspecified_scheme: 'must specify a scheme.'
               relative_uri: 'must be an absolute URI.'
               secured_uri: 'must be an HTTPS/SSL URI.'
               forbidden_uri: 'is forbidden by the server.'
             scopes:
               not_match_configured: "doesn't match configured on the server."
-
   doorkeeper:
     applications:
       confirmations:
@@ -34,7 +33,6 @@ en:
         confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
         redirect_uri: 'Use one line per URI'
         blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Use %{native_redirect_uri} if you want to add localhost URIs for development purposes'
         scopes: 'Separate scopes with spaces. Leave blank to use the default scopes.'
       edit:
         title: 'Edit application'
@@ -52,13 +50,14 @@ en:
         title: 'New Application'
       show:
         title: 'Application: %{name}'
-        application_id: 'Application UID'
+        application_id: 'UID'
         secret: 'Secret'
+        secret_hashed: 'Secret hashed'
         scopes: 'Scopes'
         confidential: 'Confidential'
         callback_urls: 'Callback urls'
         actions: 'Actions'
-
+        not_defined: 'Not defined'
     authorizations:
       buttons:
         authorize: 'Authorize'
@@ -71,7 +70,8 @@ en:
         able_to: 'This application will be able to'
       show:
         title: 'Authorization code'
-
+      form_post:
+        title: 'Submit this form'
     authorized_applications:
       confirmations:
         revoke: 'Are you sure?'
@@ -82,14 +82,14 @@ en:
         application: 'Application'
         created_at: 'Created At'
         date_format: '%Y-%m-%d %H:%M:%S'
-
     pre_authorization:
       status: 'Pre-authorization'
-
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.'
+        invalid_request:
+          unknown: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.'
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: 'Request need to be authorized. Required parameter for authorizing request is missing or invalid.'
         invalid_redirect_uri: "The requested redirect uri is malformed or doesn't match client redirect URI."
         unauthorized_client: 'The client is not authorized to perform this request using this method.'
         access_denied: 'The resource owner or authorization server denied the request.'
@@ -97,25 +97,22 @@ en:
         invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
         server_error: 'The authorization server encountered an unexpected condition which prevented it from fulfilling the request.'
         temporarily_unavailable: 'The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.'
-
-        # Configuration error messages
         credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.'
         resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfigured.'
         admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
         unsupported_response_type: 'The authorization server does not support this response type.'
-
-        # Access token errors
+        unsupported_response_mode: 'The authorization server does not support this response mode.'
         invalid_client: 'Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.'
         invalid_grant: 'The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.'
         unsupported_grant_type: 'The authorization grant type is not supported by the authorization server.'
-
         invalid_token:
           revoked: "The access token was revoked"
           expired: "The access token expired"
           unknown: "The access token is invalid"
-
+        revoke:
+          unauthorized: "You are not authorized to revoke this token"
+        forbidden_token:
+          missing_scope: 'Access to this resource requires scope "%{oauth_scopes}".'
     flash:
       applications:
         create:
@@ -127,7 +124,6 @@ en:
       authorized_applications:
         destroy:
           notice: 'Application revoked.'
-
     layouts:
       admin:
         title: 'Doorkeeper'
diff --git a/rails/locales/es.yml b/rails/locales/es.yml
index 3ddc2c8..e61fc59 100644
--- a/rails/locales/es.yml
+++ b/rails/locales/es.yml
@@ -2,138 +2,134 @@ es:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Nombre'
-        redirect_uri: 'URI de redirección'
-        scopes: 'Ámbitos'
+        name: Nombre
+        redirect_uri: URI de redirección
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'no puede contener un fragmento.'
-              invalid_uri: 'debe ser una URI válida.'
-              relative_uri: 'debe ser una URI absoluta.'
-              secured_uri: 'debe ser una URI HTTPS/SSL.'
-              forbidden_uri: 'está prohibido por el servidor.'
+              fragment_present: no puede contener un fragmento.
+              invalid_uri: debe ser una URI válida.
+              unspecified_scheme: debe especificar un esquema.
+              relative_uri: debe ser una URI absoluta.
+              secured_uri: debe ser una URI HTTPS/SSL.
+              forbidden_uri: está prohibido por el servidor.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: '¿Estás seguro?'
+        destroy: "¿Estás seguro?"
       buttons:
-        edit: 'Editar'
-        destroy: 'Eliminar'
-        submit: 'Enviar'
-        cancel: 'Cancelar'
-        authorize: 'Autorizar'
+        edit: Editar
+        destroy: Eliminar
+        submit: Enviar
+        cancel: Cancelar
+        authorize: Autorizar
       form:
-        error: 'Ups! Verifica tu formulario por posibles errores'
+        error: Ups! Verifica tu formulario por posibles errores
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Usa una linea por URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Usa %{native_redirect_uri} para test locales'
-        scopes: 'Separa los ámbitos con espacios. Deja en blanco para usar los ámbitos predeterminados.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Usa una linea por URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Separa los ámbitos con espacios. Deja en blanco para usar los ámbitos predeterminados.
       edit:
-        title: 'Editar aplicación'
+        title: Editar aplicación
       index:
-        title: 'Tus aplicaciones'
-        new: 'Nueva aplicación'
-        name: 'Nombre'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Tus aplicaciones
+        new: Nueva aplicación
+        name: Nombre
+        callback_url: Callback URL
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Sí'
+          'yes': Sí
           'no': 'No'
       new:
-        title: 'Nueva aplicación'
+        title: Nueva aplicación
       show:
         title: 'Aplicación: %{name}'
-        application_id: 'Identificador de aplicación'
-        secret: 'Secret'
-        scopes: 'Ámbitos'
-        confidential: 'Confidential'
-        callback_urls: 'Callback urls'
-        actions: 'Acciones'
-
+        application_id: Identificador de aplicación
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Ámbitos
+        confidential: Confidential
+        callback_urls: Callback urls
+        actions: Acciones
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autorizar'
-        deny: 'Denegar'
+        authorize: Autorizar
+        deny: Denegar
       error:
-        title: 'Ha ocurrido un error'
+        title: Ha ocurrido un error
       new:
-        title: 'Autorización requerida'
-        prompt: '¿Autorizas a %{client_name} para usar tu cuenta?'
-        able_to: 'Está aplicación tendrá permisos para'
+        title: Autorización requerida
+        prompt: "¿Autorizas a %{client_name} para usar tu cuenta?"
+        able_to: Está aplicación tendrá permisos para
       show:
-        title: 'Código de autorización'
-
+        title: Código de autorización
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: '¿Estás seguro?'
+        revoke: "¿Estás seguro?"
       buttons:
-        revoke: 'Revocar'
+        revoke: Revocar
       index:
-        title: 'Tus aplicaciones autorizadas'
-        application: 'Aplicación'
-        created_at: 'Creada el'
-        date_format: '%d/%m/%Y %H:%M:%S'
-
+        title: Tus aplicaciones autorizadas
+        application: Aplicación
+        created_at: Creada el
+        date_format: "%d/%m/%Y %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'La petición no tiene un parámetro obligatorio, incluye un valor de parámetro incompatible, o tiene un formato incorrecto.'
-        invalid_redirect_uri: 'La uri de redirección no es valida.'
-        unauthorized_client: 'El cliente no tiene autorización para realizar esta petición utilizando este método.'
-        access_denied: 'El propietario del recurso o el servidor de autorización han denegado la petición.'
-        invalid_scope: 'El scope solicitado no es válido, es desconocido, o tiene un formato incorrecto.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'El servidor de autorización ha encontrado una condición inesperada que le ha impedido completar la petición.'
-        temporarily_unavailable: 'El servidor de autorización no ha podido manejar la petición por una sobrecarga temporal o por mantenimiento del servidor.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'El flujo de credenciales del propietario del recurso ha fallado porque Doorkeeper.configure.resource_owner_from_credentials no está configurado.'
-        resource_owner_authenticator_not_configured: 'La búsqueda del propietario del recurso ha fallado porque Doorkeeper.configure.resource_owner_authenticator no está configurado.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'El servidor de autorización no soporta este tipo de respuesta.'
-
-        # Access token errors
-        invalid_client: 'La autenticación del cliente ha fallado por cliente desconocido, cliente no autenticado, o método de autenticación incompatible.'
-        invalid_grant: 'La autorización proporcionada no es válida, ha expirado, se ha revocado, no coincide con la URI de redirección utilizada en la petición de autorización, o ha sido solicitada por otro cliente.'
-        unsupported_grant_type: 'El tipo de autorización no está soportada por el servidor de autorización.'
-
+        invalid_request:
+          unknown: La petición no tiene un parámetro obligatorio, incluye un valor de parámetro incompatible, o tiene un formato incorrecto.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: La uri de redirección no es valida.
+        unauthorized_client: El cliente no tiene autorización para realizar esta petición utilizando este método.
+        access_denied: El propietario del recurso o el servidor de autorización han denegado la petición.
+        invalid_scope: El scope solicitado no es válido, es desconocido, o tiene un formato incorrecto.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: El servidor de autorización ha encontrado una condición inesperada que le ha impedido completar la petición.
+        temporarily_unavailable: El servidor de autorización no ha podido manejar la petición por una sobrecarga temporal o por mantenimiento del servidor.
+        credential_flow_not_configured: El flujo de credenciales del propietario del recurso ha fallado porque Doorkeeper.configure.resource_owner_from_credentials no está configurado.
+        resource_owner_authenticator_not_configured: La búsqueda del propietario del recurso ha fallado porque Doorkeeper.configure.resource_owner_authenticator no está configurado.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: El servidor de autorización no soporta este tipo de respuesta.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: La autenticación del cliente ha fallado por cliente desconocido, cliente no autenticado, o método de autenticación incompatible.
+        invalid_grant: La autorización proporcionada no es válida, ha expirado, se ha revocado, no coincide con la URI de redirección utilizada en la petición de autorización, o ha sido solicitada por otro cliente.
+        unsupported_grant_type: El tipo de autorización no está soportada por el servidor de autorización.
         invalid_token:
-          revoked: "El token de acceso ha sido revocado"
-          expired: "El token de acceso ha expirado"
-          unknown: "El token de acceso es inválido"
-
+          revoked: El token de acceso ha sido revocado
+          expired: El token de acceso ha expirado
+          unknown: El token de acceso es inválido
+        revoke:
+          unauthorized: No tiene autorización para revocar este token
+        forbidden_token:
+          missing_scope: El acceso a este recurso requiere ambito "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Aplicación creada.'
+          notice: Aplicación creada.
         destroy:
-          notice: 'Aplicación eliminada.'
+          notice: Aplicación eliminada.
         update:
-          notice: 'Aplicación actualizada.'
+          notice: Aplicación actualizada.
       authorized_applications:
         destroy:
-          notice: 'Aplicación revocada.'
-
+          notice: Aplicación revocada.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'Proveedor OAuth2'
-          applications: 'Aplicaciones'
-          home: 'Home'
+          oauth2_provider: Proveedor OAuth2
+          applications: Aplicaciones
+          home: Home
       application:
-        title: 'Autorización OAuth requerida'
+        title: Autorización OAuth requerida
diff --git a/rails/locales/fi.yml b/rails/locales/fi.yml
index 5cbf82c..27ec1cf 100644
--- a/rails/locales/fi.yml
+++ b/rails/locales/fi.yml
@@ -2,138 +2,134 @@ fi:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Nimi'
-        redirect_uri: 'Uudelleenohjauksen URI'
-        scopes: 'Näkyvyysalueet'
+        name: Nimi
+        redirect_uri: Uudelleenohjauksen URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'ei voi sisältää URI fragmenttia.'
-              invalid_uri: 'täytyy olla validi URI.'
-              relative_uri: 'täytyy olla absoluuttinen URI.'
-              secured_uri: 'täytyy olla HTTPS/SSL URI.'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: ei voi sisältää URI fragmenttia.
+              invalid_uri: täytyy olla validi URI.
+              unspecified_scheme: täytyy määrittää järjestelmä.
+              relative_uri: täytyy olla absoluuttinen URI.
+              secured_uri: täytyy olla HTTPS/SSL URI.
+              forbidden_uri: on kielletty palvelimella.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Oletko varma?'
+        destroy: Oletko varma?
       buttons:
-        edit: 'Muokkaa'
-        destroy: 'Poista'
-        submit: 'Lähetä'
-        cancel: 'Peruuta'
-        authorize: 'Valtuuta'
+        edit: Muokkaa
+        destroy: Poista
+        submit: Lähetä
+        cancel: Peruuta
+        authorize: Valtuuta
       form:
-        error: 'Hups! Tarkasta lomakkeesi mahdollisten virheiden varalta.'
+        error: Hups! Tarkasta lomakkeesi mahdollisten virheiden varalta.
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Yksi URI riviä kohden'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Käytä %{native_redirect_uri} paikallisia testejä varten'
-        scopes: 'Erottele näkyvyysalueet välilyönnein. Jätä tyhjäksi, mikäli haluat käyttää oletusnäkyvyysalueita.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Yksi URI riviä kohden
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Erottele näkyvyysalueet välilyönnein. Jätä tyhjäksi, mikäli haluat käyttää oletusnäkyvyysalueita.
       edit:
-        title: 'Muokkaa sovellusta'
+        title: Muokkaa sovellusta
       index:
-        title: 'Omat sovellukset'
-        new: 'Uusi sovellus'
-        name: 'Nimi'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Omat sovellukset
+        new: Uusi sovellus
+        name: Nimi
+        callback_url: Callback URL
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Joo'
-          'no': 'Ei'
+          'yes': Joo
+          'no': Ei
       new:
-        title: 'Uusi sovellus'
+        title: Uusi sovellus
       show:
         title: 'Sovellus: %{name}'
-        application_id: 'Sovelluksen UID'
-        secret: 'Salainen avain'
-        scopes: 'Näkyvyysalueet'
-        confidential: 'Confidential'
-        callback_urls: 'Callback URL:t'
-        actions: 'Toiminnot'
-
+        application_id: Sovelluksen UID
+        secret: Salainen avain
+        secret_hashed: Secret hashed
+        scopes: Näkyvyysalueet
+        confidential: Confidential
+        callback_urls: Callback URL:t
+        actions: Toiminnot
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Valtuuta'
-        deny: 'Kiellä'
+        authorize: Valtuuta
+        deny: Kiellä
       error:
-        title: 'Virhe'
+        title: Virhe
       new:
-        title: 'Valtuutus vaadittu'
-        prompt: 'Valtuuta %{client_name} käyttämään tiliäsi?'
-        able_to: 'Tämä sovellus pystyy'
+        title: Valtuutus vaadittu
+        prompt: Valtuuta %{client_name} käyttämään tiliäsi?
+        able_to: Tämä sovellus pystyy
       show:
-        title: 'Valtuutuskoodi'
-
+        title: Valtuutuskoodi
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Oletko varma?'
+        revoke: Oletko varma?
       buttons:
-        revoke: 'Evää'
+        revoke: Evää
       index:
-        title: 'Valtuuttamasi sovellukset'
-        application: 'Sovellukset'
-        created_at: 'Valtuutettu'
-        date_format: '%d. %m. %Y klo %H:%M:%S'
-
+        title: Valtuuttamasi sovellukset
+        application: Sovellukset
+        created_at: Valtuutettu
+        date_format: "%d. %m. %Y klo %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Pyynnöstä puuttuu vaadittu parametri, se sisältää virheellisen parametrin arvon tai on muutoin väärin muodostettu.'
-        invalid_redirect_uri: 'Uudelleenohjauksen URI ei ole validi.'
-        unauthorized_client: 'Asiakasohjelmaa ei ole valtuutettu suorittamaan haluttua pyyntöä käyttäen tätä metodia.'
-        access_denied: 'Resurssin omistaja tai valtuutuspalvelin kieltäytyi suorittamasta pyyntöä.'
-        invalid_scope: 'Pyynnön näkyvyysalue on virheellinen, tuntematon tai väärin muodostettu.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'Valtuutuspalvelin kohtasi odottamattoman tilan, jonka seurauksena se ei pystynyt suorittamaan pyyntöä.'
-        temporarily_unavailable: 'Valtuutuspalvelin ei tällä hetkellä pysty suorittamaan pyyntöä väliaikaisen ylikuormituksen tai palvelinhuollon takia.'
-
-        # Configuration error messages
-        credential_flow_not_configured: '"Resource Owner Password Credentials flow" -proseduuri epäonnistui, koska Doorkeeper.configure.resource_owner_from_credentials -asetusta ei ole konfiguroitu.'
-        resource_owner_authenticator_not_configured: '"Resource Owner find" -proseduuri epäonnistui, koska Doorkeeper.configure.resource_owner_authenticator -asetusta ei ole konfiguroitu.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'Valtuutuspalvelin ei tue tämän tyyppisiä vastauksia.'
-
-        # Access token errors
-        invalid_client: 'Asiakasohjelman valtuutus epäonnistui tuntemattoman asiakasohjelman, virheellisen valtuutuksen tai tukemattoman valtuutusmetodin takia.'
-        invalid_grant: 'Toimitettu valtuutus on virheellinen, vanhentunut, evätty, se ei vastaa valtuutuspyynnön uudelleenohjauksen URI:a tai sen on myöntänyt toinen asiakasohjelma.'
-        unsupported_grant_type: 'Valtuutuspalvelin ei tue tämän tyyppisiä valtuutuksia.'
-
+        invalid_request:
+          unknown: Pyynnöstä puuttuu vaadittu parametri, se sisältää virheellisen parametrin arvon tai on muutoin väärin muodostettu.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Uudelleenohjauksen URI ei ole validi.
+        unauthorized_client: Asiakasohjelmaa ei ole valtuutettu suorittamaan haluttua pyyntöä käyttäen tätä metodia.
+        access_denied: Resurssin omistaja tai valtuutuspalvelin kieltäytyi suorittamasta pyyntöä.
+        invalid_scope: Pyynnön näkyvyysalue on virheellinen, tuntematon tai väärin muodostettu.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: Valtuutuspalvelin kohtasi odottamattoman tilan, jonka seurauksena se ei pystynyt suorittamaan pyyntöä.
+        temporarily_unavailable: Valtuutuspalvelin ei tällä hetkellä pysty suorittamaan pyyntöä väliaikaisen ylikuormituksen tai palvelinhuollon takia.
+        credential_flow_not_configured: '"Resource Owner Password Credentials flow" - proseduuri epäonnistui, koska Doorkeeper.configure.resource_owner_from_credentials -asetusta ei ole konfiguroitu.'
+        resource_owner_authenticator_not_configured: '"Resource Owner find" - proseduuri epäonnistui, koska Doorkeeper.configure.resource_owner_authenticator -asetusta ei ole konfiguroitu.'
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: Valtuutuspalvelin ei tue tämän tyyppisiä vastauksia.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Asiakasohjelman valtuutus epäonnistui tuntemattoman asiakasohjelman, virheellisen valtuutuksen tai tukemattoman valtuutusmetodin takia.
+        invalid_grant: Toimitettu valtuutus on virheellinen, vanhentunut, evätty, se ei vastaa valtuutuspyynnön uudelleenohjauksen URI:a tai sen on myöntänyt toinen asiakasohjelma.
+        unsupported_grant_type: Valtuutuspalvelin ei tue tämän tyyppisiä valtuutuksia.
         invalid_token:
-          revoked: "Pääsyoikeus evätty"
-          expired: "Pääsyoikeus vanhentunut"
-          unknown: "Pääsyoikeus virheellinen"
-
+          revoked: Pääsyoikeus evätty
+          expired: Pääsyoikeus vanhentunut
+          unknown: Pääsyoikeus virheellinen
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Sovellus luotu.'
+          notice: Sovellus luotu.
         destroy:
-          notice: 'Sovellus poistettu.'
+          notice: Sovellus poistettu.
         update:
-          notice: 'Sovellus päivitetty.'
+          notice: Sovellus päivitetty.
       authorized_applications:
         destroy:
-          notice: 'Sovellus evätty.'
-
+          notice: Sovellus evätty.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 tarjoaja'
-          applications: 'Sovellukset'
-          home: 'Etusivu'
+          oauth2_provider: OAuth2 tarjoaja
+          applications: Sovellukset
+          home: Etusivu
       application:
-        title: 'OAuth valtuutus vaadittu.'
+        title: OAuth valtuutus vaadittu.
diff --git a/rails/locales/fr.yml b/rails/locales/fr.yml
index b0fde32..c7aaee8 100644
--- a/rails/locales/fr.yml
+++ b/rails/locales/fr.yml
@@ -2,140 +2,150 @@ fr:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: "Nom"
-        redirect_uri: "L'URL de redirection"
-        scopes: "Portées"
+        name: 'Nom'
+        redirect_uri: 'URI de redirection'
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: "ne peut contenir un fragment."
-              invalid_uri: "doit être une URL valide."
-              relative_uri: "doit être une URL absolue."
-              secured_uri: "doit être une URL HTTP/SSL."
+              fragment_present: 'ne peut contenir un fragment.'
+              invalid_uri: 'doit être une URI valide.'
+              unspecified_scheme: 'doit spécifier un schéma.'
+              relative_uri: 'doit être une URI absolue.'
+              secured_uri: 'doit être une URI HTTP/SSL.'
               forbidden_uri: 'est interdit par le serveur.'
             scopes:
-              not_match_configured: "doesn't match configured on the server."
+              not_match_configured: 'ne correspond pas à la configuration du serveur.'
+
   doorkeeper:
     applications:
       confirmations:
-        destroy: "Êtes-vous certain?"
+        destroy: 'Êtes-vous certain?'
       buttons:
-        edit: "Modifier"
-        destroy: "Supprimer"
-        submit: "Envoyer"
-        cancel: "Annuler"
-        authorize: "Autoriser"
+        edit: 'Modifier'
+        destroy: 'Supprimer'
+        submit: 'Envoyer'
+        cancel: 'Annuler'
+        authorize: 'Autoriser'
       form:
-        error: "Oups! Vérifier votre formulaire pour des erreurs possibles"
+        error: 'Oups! Vérifier votre formulaire pour des erreurs possibles'
       help:
-        confidential: |
-          L'application sera utilisée quand la confidentialité du secret pourra
-          être maintenue. Les application mobile native, et les Applications
-          mono-page ne sont pas considérées comme sûr.
-        redirect_uri: "Utiliser une ligne par URL"
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: "Utiliser %{native_redirect_uri} pour les tests locaux"
-        scopes: "Utilisez un espace entre chaque portée. Laissez vide pour utiliser la portée par defaut"
+        confidential: "L'application sera utilisée quand la confidentialité du secret pourra être maintenue. Les application mobile native, et les Applications mono-page ne sont pas considérées comme sûr."
+        redirect_uri: 'Utiliser une ligne par URI'
+        blank_redirect_uri: "Laissez-le vide si vous avez configuré votre fournisseur pour utiliser les informations d'identification du client, les informations d'identification du mot de passe du propriétaire de la ressource ou tout autre type d'octroi qui ne nécessite pas d'URI de redirection."
+        scopes: 'Séparez les portées avec des espaces. Laissez vide pour utiliser les portées par défaut.'
       edit:
         title: "Modifier l'application"
       index:
-        title: "Vos applications"
-        new: "Nouvelle application"
-        name: "Nom"
+        title: 'Vos applications'
+        new: 'Nouvelle application'
+        name: 'Nom'
         callback_url: "URL de retour d'appel"
+        confidential: 'Confidentiel?'
         actions: 'Actions'
-        confidential: 'Confidential?'
         confidentiality:
           'yes': 'Oui'
           'no': 'Non'
       new:
-        title: "Nouvelle application"
+        title: 'Nouvelle application'
       show:
-        title: "Application : %{name}"
-        application_id: "ID de l'application"
-        secret: "Secret"
-        scopes: "Portées"
-        confidential: 'Confidential'
-        callback_urls: "URL du retour d'appel"
-        actions: "Actions"
+        title: 'Application : %{name}'
+        application_id: 'UID'
+        secret: 'Secret'
+        secret_hashed: 'Secret hashé'
+        scopes: 'Portées'
+        confidential: 'Confidentiel'
+        callback_urls: "Urls du retour d'appel"
+        actions: 'Actions'
+        not_defined: 'Non défini'
 
     authorizations:
       buttons:
-        authorize: "Autoriser"
-        deny: "Refuser"
+        authorize: 'Autoriser'
+        deny: 'Refuser'
       error:
-        title: "Une erreur est survenue"
+        title: 'Une erreur est survenue'
       new:
-        title: "Autorisation requise"
-        prompt: "Autorisez %{client_name} à utiliser votre compte?"
-        able_to: "Cette application pourra"
+        title: 'Autorisation requise'
+        prompt: 'Autorisez %{client_name} à utiliser votre compte?'
+        able_to: 'Cette application pourra'
       show:
         title: "Code d'autorisation"
+      form_post:
+        title: 'Soumettre ce formulaire'
 
     authorized_applications:
       confirmations:
-        revoke: "Êtes-vous certain?"
+        revoke: 'Êtes-vous certain?'
       buttons:
-        revoke: "Annuler"
+        revoke: 'Annuler'
       index:
-        title: "Vos applications autorisées"
-        application: "Application"
-        created_at: "Créé le"
-        date_format: "%Y-%m-%d %H:%M:%S"
+        title: 'Vos applications autorisées'
+        application: 'Application'
+        created_at: 'Créé le'
+        date_format: '%d/%m/%Y %H:%M:%S'
 
     pre_authorization:
-      status: 'Pre-authorization'
+      status: 'Pré-autorisation'
 
     errors:
       messages:
         # Common error messages
-        invalid_request: "La demande manque un paramètre requis, inclut une valeur de paramètre non prise en charge, ou est autrement mal formée."
-        invalid_redirect_uri: "L'URL de redirection n'est pas valide."
+        invalid_request:
+          unknown: 'La demande manque un paramètre requis, inclut une valeur de paramètre non prise en charge, ou est autrement mal formée.'
+          missing_param: 'Paramètre requis manquant: %{value}.'
+          request_not_authorized: 'La demande doit être autorisée. Le paramètre requis pour autoriser la demande est manquant ou invalide.'
+        invalid_redirect_uri: "L'URI de redirection n'est pas valide."
         unauthorized_client: "Le client n'est pas autorisé à effectuer cette demande à l'aide de cette méthode."
         access_denied: "Le propriétaire de la ressource ou le serveur d'autorisation a refusé la demande."
         invalid_scope: "Le scope demandé n'est pas valide, est inconnu, ou est mal formé."
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
+        invalid_code_challenge_method: "La méthode de challenge du code doit être en clair ou S256."
         server_error: "Le serveur d'autorisation a rencontré une condition inattendue qui l'a empêché de remplir la demande."
         temporarily_unavailable: "Le serveur d'autorisation est actuellement incapable de traiter la demande à cause d'une surcharge ou d'un entretien temporaire du serveur."
 
         # Configuration error messages
         credential_flow_not_configured: "Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué en raison de Doorkeeper.configure.resource_owner_from_credentials n'est pas configuré."
         resource_owner_authenticator_not_configured: "La recherche du propriétaire de la ressource a échoué en raison de Doorkeeper.configure.resource_owner_authenticator n'est pas configuré."
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
+        admin_authenticator_not_configured: "L'accès au panneau d'administration est interdit en raison de Doorkeeper.configure.admin_authenticator n'étant pas configurée."
 
         # Access grant errors
         unsupported_response_type: "Le serveur d'autorisation ne prend pas en charge ce type de réponse."
+        unsupported_response_mode: "Le serveur d'autorisation ne prend pas en charge ce mode de réponse."
 
         # Access token errors
         invalid_client: "L'authentification du client a échoué à cause d'un client inconnu, d'aucune authentification de client incluse, ou d'une méthode d'authentification non prise en charge."
-        invalid_grant: "Le consentement d'autorisation accordé n'est pas valide, a expiré, est annulé, ne concorde pas avec l'URL de redirection utilisée dans la demande d'autorisation, ou a été émis à un autre client."
+        invalid_grant: "Le consentement d'autorisation accordé n'est pas valide, a expiré, est annulé, ne concorde pas avec l'URI de redirection utilisée dans la demande d'autorisation, ou a été émis à un autre client."
         unsupported_grant_type: "Le type de consentement d'autorisation n'est pas pris en charge par le serveur d'autorisation."
 
         invalid_token:
           revoked: "Le jeton d'accès a été annulé"
           expired: "Le jeton d'accès a expiré"
           unknown: "Le jeton d'accès n'est pas valide"
+        revoke:
+          unauthorized: "Vous n'êtes pas autorisé à révoquer ce jeton"
+
+        forbidden_token:
+          missing_scope: "L'accès à cette ressource nécessite une portée %{oauth_scopes}"
 
     flash:
       applications:
         create:
-          notice: "Application créée."
+          notice: 'Application créée.'
         destroy:
-          notice: "Application supprimée."
+          notice: 'Application supprimée.'
         update:
-          notice: "Application mise à jour."
+          notice: 'Application mise à jour.'
       authorized_applications:
         destroy:
-          notice: "Application annulée."
+          notice: 'Application annulée.'
 
     layouts:
       admin:
         title: 'Doorkeeper'
         nav:
-          oauth2_provider: "Fournisseur OAuth2"
-          applications: "Applications"
-          home: 'Home'
+          oauth2_provider: 'Fournisseur OAuth2'
+          applications: 'Applications'
+          home: 'Accueil'
       application:
-        title: "Autorisation OAuth requise"
+        title: 'Autorisation OAuth requise'
\ No newline at end of file
diff --git a/rails/locales/id.yml b/rails/locales/id.yml
new file mode 100644
index 0000000..b4fb5cb
--- /dev/null
+++ b/rails/locales/id.yml
@@ -0,0 +1,135 @@
+id:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: 'Nama'
+        redirect_uri: 'Mengalihkan URI'
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: 'tidak boleh mengandung fragmen.'
+              invalid_uri: 'harus berupa URI yang valid.'
+              unspecified_scheme: 'harus menentukan suatu skema.'
+              relative_uri: 'harus berupa URI absolut.'
+              secured_uri: 'must be an HTTPS/SSL URI.'
+              forbidden_uri: 'harus berupa URI HTTPS/SSL.'
+            scopes:
+              not_match_configured: "tidak cocok dengan yang dikonfigurasi di server."
+  doorkeeper:
+    applications:
+      confirmations:
+        destroy: 'Apakah Anda yakin?'
+      buttons:
+        edit: 'Ubah'
+        destroy: 'Hapus'
+        submit: 'Kirim'
+        cancel: 'Batal'
+        authorize: 'Izinkan'
+      form:
+        error: 'Ups! Periksa formulir Anda untuk kesalahan yang mungkin terjadi'
+      help:
+        confidential: 'Aplikasi akan digunakan di mana kunci rahasia klien dapat dijaga kerahasiaannya. Aplikasi seluler asli dan Aplikasi Satu Halaman dianggap tidak rahasia.'
+        redirect_uri: 'Gunakan satu baris per URI'
+        blank_redirect_uri: "Biarkan kosong jika Anda mengonfigurasi penyedia Anda untuk menggunakan Kredensial Klien, Kredensial Kata Sandi Pemilik Resource, atau jenis pemberian lainnya yang tidak memerlukan URI pengalihan."
+        scopes: 'Pisahkan cakupan dengan spasi. Biarkan kosong untuk menggunakan cakupan bawaan.'
+      edit:
+        title: 'Ubah aplikasi'
+      index:
+        title: 'Aplikasi anda'
+        new: 'Aplikasi Baru'
+        name: 'Nama'
+        callback_url: 'URL Panggilan Balik'
+        confidential: 'Konfidensial?'
+        actions: 'Tindakan'
+        confidentiality:
+          'yes': 'Ya'
+          'no': 'Tidak'
+      new:
+        title: 'Aplikasi Baru'
+      show:
+        title: 'Aplikasi: %{name}'
+        application_id: 'UID'
+        secret: 'Kunci rahasia'
+        secret_hashed: 'Kunci rahasia yang dihash'
+        scopes: 'Cakupan'
+        confidential: 'Konfidensial'
+        callback_urls: 'Url-url panggil balik'
+        actions: 'Tindakan'
+        not_defined: 'Tidak terdefinisi'
+    authorizations:
+      buttons:
+        authorize: 'Izinkan'
+        deny: 'Tolak'
+      error:
+        title: 'Telah terjadi kesalahan'
+      new:
+        title: 'Membutuhkan otorisasi '
+        prompt: 'Izinkan %{client_name} untuk memakai akun anda?'
+        able_to: 'Aplikasi ini dapat melakukan'
+      show:
+        title: 'Kode otorisasi'
+      form_post:
+        title: 'Kirim form ini'
+    authorized_applications:
+      confirmations:
+        revoke: 'Apakah anda yakin?'
+      buttons:
+        revoke: 'Cabut'
+      index:
+        title: 'Aplikasi anda yang terotorisasi'
+        application: 'Aplikasi'
+        created_at: 'Dibuat Pada'
+        date_format: '%Y-%m-%d %H:%M:%S'
+    pre_authorization:
+      status: 'Sebelum-otorisasi'
+    errors:
+      messages:
+        invalid_request:
+          unknown: 'Permintaan tidak memiliki parameter yang diperlukan, termasuk nilai parameter yang tidak didukung, atau formatnya salah.'
+          missing_param: 'Parameter yang diperlukan tidak ada: %{value}.'
+          request_not_authorized: 'Permintaan harus diotorisasi. Parameter yang diperlukan untuk permintaan otorisasi tidak ada atau tidak valid.'
+        invalid_redirect_uri: "Format uri redirect yang diminta salah atau tidak cocok dengan URI redirect klien."
+        unauthorized_client: 'Klien tidak diizinkan untuk melakukan permintaan ini menggunakan metode ini.'
+        access_denied: 'Pemilik resource atau server otorisasi menolak permintaan tersebut.'
+        invalid_scope: 'Cakupan yang diminta tidak valid, tidak diketahui, atau salah format'
+        invalid_code_challenge_method: 'Metode tantangan kode harus polos atau S256.'
+        server_error: 'Server otorisasi mengalami kondisi tak terduga yang mencegahnya memenuhi permintaan.'
+        temporarily_unavailable: 'Server otorisasi saat ini tidak dapat menangani permintaan karena kelebihan beban sementara atau pemeliharaan server'
+        credential_flow_not_configured: 'Alur Kredensial Kata Sandi Pemilik Resource gagal karena Doorkeeper.configure.resource_owner_from_credentials belum dikonfigurasi.'
+        resource_owner_authenticator_not_configured: 'Penemuan Pemilik Resource Daya gagal karena Doorkeeper.configure.resource_owner_authenticator belum dikonfigurasi'
+        admin_authenticator_not_configured: 'Akses ke panel admin dilarang karena Doorkeeper.configure.admin_authenticator belum dikonfigurasi.'
+        unsupported_response_type: 'Server otorisasi tidak mendukung jenis respons ini.'
+        unsupported_response_mode: 'Server otorisasi tidak mendukung mode respons ini.'
+        invalid_client: 'Otentikasi klien gagal karena klien tidak dikenal, tidak ada autentikasi klien yang disertakan, atau metode autentikasi yang tidak didukung.'
+        invalid_grant: 'Pemberian otorisasi yang diberikan tidak valid, kedaluwarsa, dicabut, tidak cocok dengan URI pengalihan yang digunakan dalam permintaan otorisasi, atau diberikan kepada klien lain.'
+        unsupported_grant_type: 'Jenis pemberian otorisasi tidak didukung oleh server otorisasi.'
+        invalid_token:
+          revoked: "Token akses telah dicabut"
+          expired: "Token akses telah kadaluwarsa"
+          unknown: "Token akses tidak valid"
+        revoke:
+          unauthorized: "Anda tidak berwenang untuk mencabut token ini"
+        forbidden_token:
+          missing_scope: 'Akses ke resource ini memerlukan cakupan "%{oauth_scopes}".'
+    flash:
+      applications:
+        create:
+          notice: 'Aplikasi telah dibuat.'
+        destroy:
+          notice: 'Aplikasi telah dihapus.'
+        update:
+          notice: 'Aplikasi telah diubah.'
+      authorized_applications:
+        destroy:
+          notice: 'Aplikasi telah dihapus.'
+    layouts:
+      admin:
+        title: 'Doorkeeper'
+        nav:
+          oauth2_provider: 'Penyedia OAuth2'
+          applications: 'Aplikasi'
+          home: 'Home'
+      application:
+        title: 'Membutuhkan otorisasi OAuth'
diff --git a/rails/locales/it.yml b/rails/locales/it.yml
index beecb59..d04d25f 100644
--- a/rails/locales/it.yml
+++ b/rails/locales/it.yml
@@ -2,138 +2,134 @@ it:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Nome'
-        redirect_uri: 'Redirect URI'
-        scopes: ~
+        name: Nome
+        redirect_uri: Redirect URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'non può contenere un fragment.'
-              invalid_uri: 'deve essere un URI valido.'
-              relative_uri: 'deve essere un URI assoluto.'
-              secured_uri: 'deve essere un URI HTTPS/SSL.'
-              forbidden_uri: 'è vietato dal server.'
+              fragment_present: non può contenere un fragment.
+              invalid_uri: deve essere un URI valido.
+              unspecified_scheme: deve specificare uno schema.
+              relative_uri: deve essere un URI assoluto.
+              secured_uri: deve essere un URI HTTPS/SSL.
+              forbidden_uri: è vietato dal server.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Sei sicuro?'
+        destroy: Sei sicuro?
       buttons:
-        edit: 'Modifica'
-        destroy: 'Elimina'
-        submit: 'Invia'
-        cancel: 'Annulla'
-        authorize: 'Autorizza'
+        edit: Modifica
+        destroy: Elimina
+        submit: Invia
+        cancel: Annulla
+        authorize: Autorizza
       form:
-        error: 'Ops! Controlla la form per possibili errori'
+        error: Ops! Controlla la form per possibili errori
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Usa una riga per URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Usa %{native_redirect_uri} per test locali'
-        scopes: ~
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Usa una riga per URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       edit:
-        title: "Modifica l'applicazione"
+        title: Modifica l'applicazione
       index:
-        title: 'Le tue applicazioni'
-        new: 'Nuova Applicazione'
-        name: 'Nome'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Le tue applicazioni
+        new: Nuova Applicazione
+        name: Nome
+        callback_url: Callback URL
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Sì'
+          'yes': Sì
           'no': 'No'
       new:
-        title: 'Nuova Applicazione'
+        title: Nuova Applicazione
       show:
         title: 'Applicazione: %{name}'
-        application_id: 'Id Applicazione'
-        secret: 'Secret'
-        scopes: ~
-        confidential: 'Confidential'
-        callback_urls: 'Callback urls'
-        actions: 'Azioni'
-
+        application_id: Id Applicazione
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Confidential
+        callback_urls: Callback urls
+        actions: Azioni
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autorizza'
-        deny: 'Nega'
+        authorize: Autorizza
+        deny: Nega
       error:
-        title: 'Si è verificato un errore'
+        title: Si è verificato un errore
       new:
-        title: 'Richiesta di autorizzazione'
-        prompt: 'Autorizzi %{client_name} ad usare il tuo account?'
-        able_to: 'Questa applicazione portà'
+        title: Richiesta di autorizzazione
+        prompt: Autorizzi %{client_name} ad usare il tuo account?
+        able_to: Questa applicazione portà
       show:
-        title: 'Codide di autorizzazione'
-
+        title: Codide di autorizzazione
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Sei sicuro?'
+        revoke: Sei sicuro?
       buttons:
-        revoke: 'Revoca'
+        revoke: Revoca
       index:
-        title: 'Applicazioni autorizzate'
-        application: 'Applicazione'
-        created_at: 'Creata il'
-        date_format: '%Y-%m-%d %H:%M:%S'
-
+        title: Applicazioni autorizzate
+        application: Applicazione
+        created_at: Creata il
+        date_format: "%Y-%m-%d %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Manca un parametro obbligatorio nella richiesta, include un valore non supportato, oppure è malformata.'
-        invalid_redirect_uri: "L'uri di redirect incluso non è valido."
-        unauthorized_client: 'Il client non è autorizzato per effettuare questa richiesta utilizzando questo metodo.'
-        access_denied: 'Il proprietario della risorsa o il server di autorizzazione rifiuta la richiesta.'
-        invalid_scope: 'Lo scope della richiesta non è valido, sconosciuto, o malformato.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'Il server di autorizzazione ha rilevato una condizione inaspettata che ha impedito di soddisfare la richiesta.'
-        temporarily_unavailable: 'Il server di autorizzazione non è momentaneamente disponibile a causa di un sovraccarico temporaneo o di manutenzione.'
-
-        # Configuration error messages
-        credential_flow_not_configured: "Il flusso di credenziali utente è fallito perchè Doorkeeper.configure.resource_owner_from_credentials deve essere configurato."
-        resource_owner_authenticator_not_configured: "La ricerca dell'utente è fallita perchè Doorkeeper.configure.resource_owner_authenticator deve essere configurato."
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'Il server di autorizzazione non supporta questo response type.'
-
-        # Access token errors
-        invalid_client: "L'autenticazione client è fallita a causa di client sconosciuto, nessuna autenticazione client inclusa, o metodo di autenticazione non supportato."
-        invalid_grant: "L'autorizzazione richiesta non è valida, scaduta, revocata, non corrisponde all'uri di redirezione usato nella richiesta di autorizzazione, o è stata richiesta da un altro client."
-        unsupported_grant_type: "Il tipo di autorizzazione richista non è supportato dal server di autorizzazione."
-
+        invalid_request:
+          unknown: Manca un parametro obbligatorio nella richiesta, include un valore non supportato, oppure è malformata.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: L'uri di redirect incluso non è valido.
+        unauthorized_client: Il client non è autorizzato per effettuare questa richiesta utilizzando questo metodo.
+        access_denied: Il proprietario della risorsa o il server di autorizzazione rifiuta la richiesta.
+        invalid_scope: Lo scope della richiesta non è valido, sconosciuto, o malformato.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: Il server di autorizzazione ha rilevato una condizione inaspettata che ha impedito di soddisfare la richiesta.
+        temporarily_unavailable: Il server di autorizzazione non è momentaneamente disponibile a causa di un sovraccarico temporaneo o di manutenzione.
+        credential_flow_not_configured: Il flusso di credenziali utente è fallito perchè Doorkeeper.configure.resource_owner_from_credentials deve essere configurato.
+        resource_owner_authenticator_not_configured: La ricerca dell'utente è fallita perchè Doorkeeper.configure.resource_owner_authenticator deve essere configurato.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: Il server di autorizzazione non supporta questo response type.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: L'autenticazione client è fallita a causa di client sconosciuto, nessuna autenticazione client inclusa, o metodo di autenticazione non supportato.
+        invalid_grant: L'autorizzazione richiesta non è valida, scaduta, revocata, non corrisponde all'uri di redirezione usato nella richiesta di autorizzazione, o è stata richiesta da un altro client.
+        unsupported_grant_type: Il tipo di autorizzazione richista non è supportato dal server di autorizzazione.
         invalid_token:
-          revoked: "Il token di accesso è stato revocato"
-          expired: "Il token di accesso è scaduto"
-          unknown: "Il token di accesso non è valido"
-
+          revoked: Il token di accesso è stato revocato
+          expired: Il token di accesso è scaduto
+          unknown: Il token di accesso non è valido
+        revoke:
+          unauthorized: Non sei autorizzato a revocare questo token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Applicazione creata.'
+          notice: Applicazione creata.
         destroy:
-          notice: 'Applicazione eliminata.'
+          notice: Applicazione eliminata.
         update:
-          notice: 'Applicazione aggiornata.'
+          notice: Applicazione aggiornata.
       authorized_applications:
         destroy:
-          notice: 'Applicazione revocata.'
-
+          notice: Applicazione revocata.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 Provider'
-          applications: 'Applicazioni'
-          home: 'Home'
+          oauth2_provider: OAuth2 Provider
+          applications: Applicazioni
+          home: Home
       application:
-        title: 'Richiesta autorizzazione OAuth'
+        title: Richiesta autorizzazione OAuth
diff --git a/rails/locales/ja.yml b/rails/locales/ja.yml
index f19eeb0..3b760e9 100644
--- a/rails/locales/ja.yml
+++ b/rails/locales/ja.yml
@@ -2,138 +2,134 @@ ja:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: '名前'
-        redirect_uri: 'リダイレクトURI'
-        scopes: 'スコープ'
+        name: 名前
+        redirect_uri: リダイレクトURI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'はURLフラグメントを含めることはできません。'
-              invalid_uri: 'は有効なURIではありません。'
-              relative_uri: 'は絶対URIでなければなりません。'
-              secured_uri: 'はHTTPS/SSL URIでなければなりません。'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: はURLフラグメントを含めることはできません。
+              invalid_uri: は有効なURIではありません。
+              unspecified_scheme: スキームを指定する必要があります。
+              relative_uri: は絶対URIでなければなりません。
+              secured_uri: はHTTPS/SSL URIでなければなりません。
+              forbidden_uri: はサーバーによって禁止されています。
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: はサーバーの設定と一致しません。
   doorkeeper:
     applications:
       confirmations:
-        destroy: '本当に削除しますか?'
+        destroy: 本当に削除しますか?
       buttons:
-        edit: '編集'
-        destroy: '削除'
-        submit: '登録'
-        cancel: 'キャンセル'
-        authorize: '認証'
+        edit: 編集
+        destroy: 削除
+        submit: 登録
+        cancel: キャンセル
+        authorize: 認証
       form:
-        error: 'おっと!フォームにエラーがないか確認してください'
+        error: おっと!フォームにエラーがないか確認してください
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'URIごとに1行で入力してください'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'ローカルテストのため、 %{native_redirect_uri} を使用してください。'
-        scopes: '各スコープをスペースで区切ってください。初期設定のスコープを使用する場合は、空白のままにしてください。'
+        confidential: クライアントシークレットの機密を保持できるアプリケーションで使われます。
+        redirect_uri: URIごとに1行で入力してください
+        blank_redirect_uri: リダイレクトURIを必要としないクライアントクレデンシャル、リソースオーナークレデンシャル、その他のグラントタイプの場合は空白のままにします。
+        scopes: 各スコープをスペースで区切ってください。初期設定のスコープを使用する場合は、空白のままにしてください。
       edit:
-        title: 'アプリケーションの編集'
+        title: アプリケーションの編集
       index:
-        title: 'アプリケーション'
-        new: '新しいアプリケーション'
-        name: '名称'
-        callback_url: 'コールバックURL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: アプリケーション
+        new: 新しいアプリケーション
+        name: 名称
+        callback_url: コールバックURL
+        confidential: 機密?
+        actions: 行動
         confidentiality:
-          'yes': 'はい'
-          'no': 'いいえ'
+          'yes': はい
+          'no': いいえ
       new:
-        title: 'アプリケーションの作成'
+        title: アプリケーションの作成
       show:
         title: 'アプリケーション: %{name}'
-        application_id: 'アプリケーションID'
-        secret: 'シークレット'
-        scopes: 'スコープ'
-        confidential: 'Confidential'
-        callback_urls: 'コールバックURL'
-        actions: 'アクション'
-
+        application_id: アプリケーションID
+        secret: シークレット
+        secret_hashed: Secret hashed
+        scopes: スコープ
+        confidential: 機密
+        callback_urls: コールバックURL
+        actions: アクション
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: '承認'
-        deny: '否認'
+        authorize: 承認
+        deny: 否認
       error:
-        title: 'エラーが発生しました'
+        title: エラーが発生しました
       new:
-        title: '承認が必要です'
-        prompt: 'あなたのアカウントで %{client_name} 承認しますか?'
-        able_to: 'このアプリケーションは次のことが可能です'
+        title: 承認が必要です
+        prompt: あなたのアカウントで %{client_name} を承認しますか?
+        able_to: このアプリケーションは次のことが可能です
       show:
-        title: '認可コード'
-
+        title: 認可コード
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: '本当に取消しますか?'
+        revoke: 本当に取消しますか?
       buttons:
-        revoke: '取消'
+        revoke: 取消
       index:
-        title: 'あなたの認証されたアプリケーション'
-        application: 'アプリケーション'
-        created_at: '作成日時'
-        date_format: '%Y年%m月%d日 %H:%M:%S'
-
+        title: あなたの認証されたアプリケーション
+        application: アプリケーション
+        created_at: 作成日時
+        date_format: "%Y年%m月%d日 %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: '必須パラメータが不足しているか、サポートされていないパラメータが含まれているか、もしくはパラメータが不正であるため、リクエストを処理できませんでした。'
-        invalid_redirect_uri: '含まれるリダイレクトURIが正しくありません。'
-        unauthorized_client: 'クライアントはこのメソッドを用いたリクエストを実行する権限がありません。'
-        access_denied: 'リソースオーナーもしくは認可サーバがリクエストを拒否しました。'
-        invalid_scope: '指定されたスコープが無効か、不明か、もしくは正しくありません。'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: '予期せぬ事態が発生したため、認可サーバはリクエストを処理できませんでした。'
-        temporarily_unavailable: '認可サーバが一時的に高負荷な状態にあるか、もしくはメンテナンス中であるため、リクエストを処理できません。'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Doorkeeper.configure.resource_owner_from_credentialsが設定されていないため、リソースオーナーパスワードクレデンシャルフローは失敗しました。'
-        resource_owner_authenticator_not_configured: 'Doorkeeper.configure.resource_owner_authenticatorが設定されていないため、リソースオーナーの取得に失敗しました。'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: '認可サーバは指定されたレスポンスタイプをサポートしていません。'
-
-        # Access token errors
-        invalid_client: 'クライアントが不明か、クライアント認証が含まれていないか、もしくは認証メソッドがサポートされていないため、クライアント認証は失敗しました。'
-        invalid_grant: '指定された認可グラントは不正か、有効期限切れか、無効か、リダイレクトURIが異なるか、もしくは別のクライアントに適用されています。'
-        unsupported_grant_type: 'この認可グラントのタイプは認可サーバではサポートされていません。'
-
+        invalid_request:
+          unknown: 必須パラメータが不足しているか、サポートされていないパラメータが含まれているか、もしくはパラメータが無効であるため、リクエストを処理できませんでした。
+          missing_param: '必須パラメーターが不足しています: %{value}'
+          request_not_authorized: リクエストは認可が必要です。リクエストを認可するための必須パラメータが不足しているか無効です。
+        invalid_redirect_uri: 含まれるリダイレクトURIが正しくありません。
+        unauthorized_client: クライアントはこのメソッドを用いたリクエストを実行する権限がありません。
+        access_denied: リソースオーナーもしくは認可サーバがリクエストを拒否しました。
+        invalid_scope: 指定されたスコープが無効か、不明か、もしくは正しくありません。
+        invalid_code_challenge_method: コードチャレンジメソッドはplainかS256でなければなりません。
+        server_error: 予期せぬ事態が発生したため、認可サーバはリクエストを処理できませんでした。
+        temporarily_unavailable: 認可サーバが一時的に高負荷な状態にあるか、もしくはメンテナンス中であるため、リクエストを処理できません。
+        credential_flow_not_configured: Doorkeeper.configure.resource_owner_from_credentials が設定されていないため、リソースオーナーパスワードクレデンシャルフローは失敗しました。
+        resource_owner_authenticator_not_configured: Doorkeeper.configure.resource_owner_authenticator が設定されていないため、リソースオーナーの取得に失敗しました。
+        admin_authenticator_not_configured: Doorkeeper.configure.admin_authenticator being unconfigured が設定されていないため、管理者パネルへのアクセスが禁止されています。
+        unsupported_response_type: 認可サーバは指定されたレスポンスタイプをサポートしていません。
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: クライアントが不明か、クライアント認証が含まれていないか、もしくは認証メソッドがサポートされていないため、クライアント認証は失敗しました。
+        invalid_grant: 指定された認可グラントは無効か、有効期限切れか、リダイレクトURIが異なるか、もしくは別のクライアントに適用されています。
+        unsupported_grant_type: この認可グラントのタイプは認可サーバではサポートされていません。
         invalid_token:
-          revoked: "アクセストークンが取り消されました"
-          expired: "アクセストークンの有効期限が切れました"
-          unknown: "アクセストークンが無効です"
-
+          revoked: アクセストークンが取り消されました
+          expired: アクセストークンの有効期限が切れました
+          unknown: アクセストークンが無効です
+        revoke:
+          unauthorized: このトークンを無効化する権限がありません
+        forbidden_token:
+          missing_scope: このリソースにアクセスするには次のスコープが必要です。%{oauth_scopes}
     flash:
       applications:
         create:
-          notice: 'アプリケーションが作成されました。'
+          notice: アプリケーションが作成されました。
         destroy:
-          notice: 'アプリケーションが削除されました。'
+          notice: アプリケーションが削除されました。
         update:
-          notice: 'アプリケーションが更新されました。'
+          notice: アプリケーションが更新されました。
       authorized_applications:
         destroy:
-          notice: 'アプリケーションが取消されました。'
-
+          notice: アプリケーションが取消されました。
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 プロバイダー'
-          applications: 'アプリケーション'
-          home: 'ホーム'
+          oauth2_provider: OAuth2 プロバイダー
+          applications: アプリケーション
+          home: ホーム
       application:
-        title: 'OAuth認証が必要です'
+        title: OAuth認証が必要です
diff --git a/rails/locales/ko.yml b/rails/locales/ko.yml
index 42e98b1..963b53c 100644
--- a/rails/locales/ko.yml
+++ b/rails/locales/ko.yml
@@ -2,138 +2,134 @@ ko:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: '이름'
-        redirect_uri: '리다이렉트 URI'
-        scopes: '스코프'
+        name: 이름
+        redirect_uri: 리다이렉트 URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: '는 프래그먼트(# 이후의 부분)를 포함할 수 없습니다.'
-              invalid_uri: '는 유효한 URI가 아닙니다.'
-              relative_uri: '는 절대 경로 URI여야 합니다..'
-              secured_uri: '는 HTTPS/SSL URI여야 합니다.'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: 는 프래그먼트(# 이후의 부분)를 포함할 수 없습니다.
+              invalid_uri: 는 유효한 URI가 아닙니다.
+              unspecified_scheme: 스키마를 지정해야합니다.
+              relative_uri: 는 절대 경로 URI여야 합니다..
+              secured_uri: 는 HTTPS/SSL URI여야 합니다.
+              forbidden_uri: 서버에 의해 금지되어있다.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: '정말 삭제하시겠습니까?'
+        destroy: 정말 삭제하시겠습니까?
       buttons:
-        edit: '수정'
-        destroy: '삭제'
-        submit: '확인'
-        cancel: '취소'
-        authorize: '인가'
+        edit: 수정
+        destroy: 삭제
+        submit: 확인
+        cancel: 취소
+        authorize: 인가
       form:
-        error: '잘못된 입력이 있는지 확인해주세요'
+        error: 잘못된 입력이 있는지 확인해주세요
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: '각 줄에 하나의 URI씩 써주세요'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: '로컬 테스트 용도로는 %{native_redirect_uri} 주소를 써주세요'
-        scopes: '스코프들을 띄어쓰기로 구분하여 나열해주세요. 비어두면 기본값을 사용합니다.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: 각 줄에 하나의 URI씩 써주세요
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: 스코프들을 띄어쓰기로 구분하여 나열해주세요. 비어두면 기본값을 사용합니다.
       edit:
-        title: '애플리케이션 수정'
+        title: 애플리케이션 수정
       index:
-        title: '애플리케이션'
-        new: '새 애플리케이션'
-        name: '앱 이름'
-        callback_url: '콜백 URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: 애플리케이션
+        new: 새 애플리케이션
+        name: 앱 이름
+        callback_url: 콜백 URL
+        confidential: 기밀?
+        actions: 거등
         confidentiality:
-          'yes': '예'
-          'no': '아니'
+          'yes': 예
+          'no': 아니
       new:
-        title: '새 애플리케이션'
+        title: 새 애플리케이션
       show:
         title: '애플리케이션: %{name}'
-        application_id: '애플리케이션 UID'
-        secret: '비밀 키'
-        scopes: '스코프'
-        confidential: 'Confidential'
-        callback_urls: '콜백 URL'
-        actions: '액션'
-
+        application_id: 애플리케이션 UID
+        secret: 비밀 키
+        secret_hashed: Secret hashed
+        scopes: 스코프
+        confidential: 기밀
+        callback_urls: 콜백 URL
+        actions: 액션
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: '허가'
-        deny: '불허'
+        authorize: 허가
+        deny: 불허
       error:
-        title: '오류가 발생했습니다'
+        title: 오류가 발생했습니다
       new:
-        title: '허가가 필요합니다'
-        prompt: '%{client_name}이 당신의 계정을 사용하는 것을 허락하시겠습니까?'
+        title: 허가가 필요합니다
+        prompt: "%{client_name}이 당신의 계정을 사용하는 것을 허락하시겠습니까?"
         able_to: '이 애플리케이션은 다음의 것들을 할 수 있게 됩니다:'
       show:
-        title: '인증 코드'
-
+        title: 인증 코드
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: '정말 허가를 철회하시겠습니까?'
+        revoke: 정말 허가를 철회하시겠습니까?
       buttons:
-        revoke: '철회'
+        revoke: 철회
       index:
-        title: '당신이 허가한 애플리케이션'
-        application: '애플리케이션'
-        created_at: '생성일시'
-        date_format: '%Y년 %-m월 %-d일 %H:%M:%S'
-
+        title: 당신이 허가한 애플리케이션
+        application: 애플리케이션
+        created_at: 생성일시
+        date_format: "%Y년 %-m월 %-d일 %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: '요청에 필수 매개변수가 빠져있거나, 지원하지 않는 매개변수를 포함하거나, 형식이 잘못되었습니다.'
-        invalid_redirect_uri: '포함된 리다이렉트 URI가 유효하지 않습니다.'
-        unauthorized_client: '클라이언트가 이 메서드로 요청하는 것이 허가되지 않았습니다.'
-        access_denied: '리소스의 소유자 혹은 인증 서버가 요청을 거부했습니다.'
-        invalid_scope: '요청된 스코프는 유효하지 않거나, 알려지지 않았거나, 형식이 잘못되었습니다.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: '인증 서버가 요청을 처리하던 도중 예기치 못한 오류가 발생했습니다.'
-        temporarily_unavailable: '인증 서버의 일시적인 부하 또는 점검으로 요청을 처리하지 못하고 있습니다.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.'
-        resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: '인증 서버가 해당 응답 형식을 지원하지 않습니다.'
-
-        # Access token errors
-        invalid_client: '알려지지 않은 클라이언트이거나, 인증 정보가 누락됐거나, 해당 인증 방식이 지원되지 않아 클라이언트가 인증에 실패했습니다.'
-        invalid_grant: '주어진 허가 그랜트(authorization grant)가 유효하지 않거나, 이미 만료됐거나, 철회됐거나, 인가 요청시 쓰였던 리다이렉트 URI에 부합하지 않거나, 다른 클라이언트에게 부여됐습니다.'
-        unsupported_grant_type: '인증 서버가 주어진 허가 그랜트(authorization type) 종류를 지원하지 않습니다.'
-
+        invalid_request:
+          unknown: 요청에 필수 매개변수가 빠져있거나, 지원하지 않는 매개변수를 포함하거나, 형식이 잘못되었습니다.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: 포함된 리다이렉트 URI가 유효하지 않습니다.
+        unauthorized_client: 클라이언트가 이 메서드로 요청하는 것이 허가되지 않았습니다.
+        access_denied: 리소스의 소유자 혹은 인증 서버가 요청을 거부했습니다.
+        invalid_scope: 요청된 스코프는 유효하지 않거나, 알려지지 않았거나, 형식이 잘못되었습니다.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: 인증 서버가 요청을 처리하던 도중 예기치 못한 오류가 발생했습니다.
+        temporarily_unavailable: 인증 서버의 일시적인 부하 또는 점검으로 요청을 처리하지 못하고 있습니다.
+        credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
+        resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: 인증 서버가 해당 응답 형식을 지원하지 않습니다.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: 알려지지 않은 클라이언트이거나, 인증 정보가 누락됐거나, 해당 인증 방식이 지원되지 않아 클라이언트가 인증에 실패했습니다.
+        invalid_grant: 주어진 허가 그랜트(authorization grant)가 유효하지 않거나, 이미 만료됐거나, 철회됐거나, 인가 요청시 쓰였던 리다이렉트 URI에 부합하지 않거나, 다른 클라이언트에게 부여됐습니다.
+        unsupported_grant_type: 인증 서버가 주어진 허가 그랜트(authorization type) 종류를 지원하지 않습니다.
         invalid_token:
-          revoked: "접근 토큰이 철회됐습니다"
-          expired: "접근 토큰이 만료됐습니다"
-          unknown: "접근 토큰이 유효하지 않습니다"
-
+          revoked: 접근 토큰이 철회됐습니다
+          expired: 접근 토큰이 만료됐습니다
+          unknown: 접근 토큰이 유효하지 않습니다
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: '애플리케이션이 만들어졌습니다.'
+          notice: 애플리케이션이 만들어졌습니다.
         destroy:
-          notice: '애플리케이션이 삭제됐습니다.'
+          notice: 애플리케이션이 삭제됐습니다.
         update:
-          notice: '애플리케이션이 수정됐습니다.'
+          notice: 애플리케이션이 수정됐습니다.
       authorized_applications:
         destroy:
-          notice: '애플리케이션에 대한 허가가 철회됐습니다.'
-
+          notice: 애플리케이션에 대한 허가가 철회됐습니다.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 프로바이더'
-          applications: '애플리케이션'
-          home: '첫 페이지'
+          oauth2_provider: OAuth2 프로바이더
+          applications: 애플리케이션
+          home: 첫 페이지
       application:
-        title: 'OAuth 인가가 필요합니다'
+        title: OAuth 인가가 필요합니다
diff --git a/rails/locales/nb.yml b/rails/locales/nb.yml
index 0682083..9bcbfcd 100644
--- a/rails/locales/nb.yml
+++ b/rails/locales/nb.yml
@@ -2,138 +2,134 @@ nb:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Navn'
-        redirect_uri: 'VideresendingsURI'
-        scopes: 'Tagger'
+        name: Navn
+        redirect_uri: VideresendingsURI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'kan ikke inneholde et fragment.'
-              invalid_uri: 'må være en gyldig URI.'
-              relative_uri: 'må være en fullstendig URI.'
-              secured_uri: 'må være en HTTPS/SSL URI.'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: kan ikke inneholde et fragment.
+              invalid_uri: må være en gyldig URI.
+              unspecified_scheme: must specify a scheme.
+              relative_uri: må være en fullstendig URI.
+              secured_uri: må være en HTTPS/SSL URI.
+              forbidden_uri: is forbidden by the server.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Er du sikker?'
+        destroy: Er du sikker?
       buttons:
-        edit: 'Endre'
-        destroy: 'Slett'
-        submit: 'Lagre'
-        cancel: 'Avbryt'
-        authorize: 'Autoriser'
+        edit: Endre
+        destroy: Slett
+        submit: Lagre
+        cancel: Avbryt
+        authorize: Autoriser
       form:
-        error: 'Whoops! Sjekk skjema for mulige feil'
+        error: Whoops! Sjekk skjema for mulige feil
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Bruk en linje per URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Bruk %{native_redirect_uri} for lokale tester'
-        scopes: 'Separer tagger med mellomrom. La den være blank for standard tagger.'
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Bruk en linje per URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Separer tagger med mellomrom. La den være blank for standard tagger.
       edit:
-        title: 'Endre applikasjonen'
+        title: Endre applikasjonen
       index:
-        title: 'Dine applikasjoner'
-        new: 'Ny applikasjon'
-        name: 'Navn'
-        callback_url: 'Callback URL'
-        actions: 'Handlinger'
-        confidential: 'Konfidensiell?'
+        title: Dine applikasjoner
+        new: Ny applikasjon
+        name: Navn
+        callback_url: Callback URL
+        confidential: Konfidensiell?
+        actions: Handlinger
         confidentiality:
-          'yes': 'Ja'
-          'no': 'Nei'
+          'yes': Ja
+          'no': Nei
       new:
-        title: 'Ny Applikasjon'
+        title: Ny Applikasjon
       show:
         title: 'Applikasjon: %{name}'
-        application_id: 'Applikasjoner UID'
-        secret: 'Secret'
-        scopes: 'Tagger'
-        confidential: 'Konfidensiell'
-        callback_urls: 'Callback url-er'
-        actions: 'Handlinger'
-
+        application_id: Applikasjoner UID
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Tagger
+        confidential: Konfidensiell
+        callback_urls: Callback url-er
+        actions: Handlinger
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autoriser'
-        deny: 'Nekt'
+        authorize: Autoriser
+        deny: Nekt
       error:
-        title: 'En feil har oppstått'
+        title: En feil har oppstått
       new:
-        title: 'Autorisering nødvendig'
-        prompt: 'Autoriser %{client_name} til å bruke din bruker?'
-        able_to: 'Denne applikasjonen vil ha tilgang til å gjøre følgende'
+        title: Autorisering nødvendig
+        prompt: Autoriser %{client_name} til å bruke din bruker?
+        able_to: Denne applikasjonen vil ha tilgang til å gjøre følgende
       show:
-        title: 'Autorisasjonskode'
-
+        title: Autorisasjonskode
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Er du sikker?'
+        revoke: Er du sikker?
       buttons:
-        revoke: 'Tilbakekall'
+        revoke: Tilbakekall
       index:
-        title: 'Dine autoriserte applikasjoner'
-        application: 'Applikasjon'
-        created_at: 'Opprettet'
-        date_format: '%Y-%m-%d %H:%M:%S'
-
+        title: Dine autoriserte applikasjoner
+        application: Applikasjon
+        created_at: Opprettet
+        date_format: "%Y-%m-%d %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Forespørselen mangler et nødvendig parameter, inkluderer et parameter som ikke er støttet, eller er på annen måte feilskrevet.'
-        invalid_redirect_uri: 'Videresendings uri-en inkludert er ikke gyldig.'
-        unauthorized_client: 'Klienten er ikke autorisert til å utføre denne forespørselen ved å bruke denne metoden.'
-        access_denied: 'Ressurs-eieren eller autorisasjonsserveren nektet forespørelsen fra å fullføre.'
-        invalid_scope: 'Forespørselens omfang er ugyldig, ukjent, eller feilskrevet.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'Autoriseringsserveren har møtt en uforventet betingelse som har forhindret serveren fra å fullføre forespørselen.'
-        temporarily_unavailable: 'Autorisasjonsserveren er for øyeblikket utilgjengelig på grunn av en foreløpig overlasting eller vedlikehold av serveren.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Ressurseierens Passord legitimasjonsflyt feilet på grunn av at Doorkeeper.configure.resource_owner_from_credentials ikke var konfigurert.'
-        resource_owner_authenticator_not_configured: 'Resource Owner find feilet på grunn av Doorkeeper.configure.resource_owner_authenticator ikke var konfigurert.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'Autoriseringsserveren har ikke støtte for denne responstypen.'
-
-        # Access token errors
-        invalid_client: 'Klientautentikasjon feilet på grunn av ukjent klient, ingen klientautentikasjon inkludert, eller autentikasjonsmetode som ikke støttes.'
-        invalid_grant: 'Den medfølgende autoriseringsinnvilgelsen er ugyldig, utgått, tilbakekalt, er ulik videresendings URI-en brukt i autoriseringsforespørselen, eller tilhører en annen klient.'
-        unsupported_grant_type: 'Autoriseringsinnvilgelsens type er ikke støttet av autorisasjonsserveren'
-
+        invalid_request:
+          unknown: Forespørselen mangler et nødvendig parameter, inkluderer et parameter som ikke er støttet, eller er på annen måte feilskrevet.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Videresendings uri-en inkludert er ikke gyldig.
+        unauthorized_client: Klienten er ikke autorisert til å utføre denne forespørselen ved å bruke denne metoden.
+        access_denied: Ressurs-eieren eller autorisasjonsserveren nektet forespørelsen fra å fullføre.
+        invalid_scope: Forespørselens omfang er ugyldig, ukjent, eller feilskrevet.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: Autoriseringsserveren har møtt en uforventet betingelse som har forhindret serveren fra å fullføre forespørselen.
+        temporarily_unavailable: Autorisasjonsserveren er for øyeblikket utilgjengelig på grunn av en foreløpig overlasting eller vedlikehold av serveren.
+        credential_flow_not_configured: Ressurseierens Passord legitimasjonsflyt feilet på grunn av at Doorkeeper.configure.resource_owner_from_credentials ikke var konfigurert.
+        resource_owner_authenticator_not_configured: Resource Owner find feilet på grunn av Doorkeeper.configure.resource_owner_authenticator ikke var konfigurert.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: Autoriseringsserveren har ikke støtte for denne responstypen.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Klientautentikasjon feilet på grunn av ukjent klient, ingen klientautentikasjon inkludert, eller autentikasjonsmetode som ikke støttes.
+        invalid_grant: Den medfølgende autoriseringsinnvilgelsen er ugyldig, utgått, tilbakekalt, er ulik videresendings URI-en brukt i autoriseringsforespørselen, eller tilhører en annen klient.
+        unsupported_grant_type: Autoriseringsinnvilgelsens type er ikke støttet av autorisasjonsserveren
         invalid_token:
-          revoked: "Tilgangspolletten var tilbakekalt"
-          expired: "Tilgangspolletten er utgått"
-          unknown: "Tilgangspolletten er ugyldig"
-
+          revoked: Tilgangspolletten var tilbakekalt
+          expired: Tilgangspolletten er utgått
+          unknown: Tilgangspolletten er ugyldig
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Applikasjon opprettet.'
+          notice: Applikasjon opprettet.
         destroy:
-          notice: 'Applikasjon slettet.'
+          notice: Applikasjon slettet.
         update:
-          notice: 'Applikasjon oppdatert.'
+          notice: Applikasjon oppdatert.
       authorized_applications:
         destroy:
-          notice: 'Applikasjon tilbakekalt.'
-
+          notice: Applikasjon tilbakekalt.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 Leverandør'
-          applications: 'Applikasjoner'
-          home: 'Hjem'
+          oauth2_provider: OAuth2 Leverandør
+          applications: Applikasjoner
+          home: Hjem
       application:
-        title: 'OAuth autorisering nødvendig'
+        title: OAuth autorisering nødvendig
diff --git a/rails/locales/nl.yml b/rails/locales/nl.yml
index f7dfbc2..32ca509 100644
--- a/rails/locales/nl.yml
+++ b/rails/locales/nl.yml
@@ -2,138 +2,134 @@ nl:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Naam'
-        redirect_uri: 'Redirect URI'
-        scopes: 'Scopes'
+        name: Naam
+        redirect_uri: Redirect URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'kan geen fragment bevatten.'
-              invalid_uri: 'moet een geldige URI zijn.'
-              relative_uri: 'moet een absolute URI zijn.'
-              secured_uri: 'moet een HTTPS/SSL URI zijn.'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: kan geen fragment bevatten.
+              invalid_uri: moet een geldige URI zijn.
+              unspecified_scheme: moet een schema specificeren.
+              relative_uri: moet een absolute URI zijn.
+              secured_uri: moet een HTTPS/SSL URI zijn.
+              forbidden_uri: is forbidden by the server.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: komt niet overeen met server configuratie.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Weet je het zeker?'
+        destroy: Weet je het zeker?
       buttons:
-        edit: 'Bewerken'
-        destroy: 'Verwijderen'
-        submit: 'Opslaan'
-        cancel: 'Annuleren'
-        authorize: 'Authoriseren'
+        edit: Bewerken
+        destroy: Verwijderen
+        submit: Opslaan
+        cancel: Annuleren
+        authorize: Authoriseren
       form:
-        error: 'Oops! Controleer het formulier op fouten'
+        error: Oops! Controleer het formulier op fouten
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
+        confidential: Toepassing zal worden gebruikt waar de client secret vertrouwelijk kan worden gehouden. Native mobile apps en Single Page Apps worden beschouwd als niet-vertrouwelijk.
         redirect_uri: 'Gebruik één regel per URI. '
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Gebruik %{native_redirect_uri} voor lokale tests'
-        scopes: 'Scheid scopes met spaties. Laat leeg om de standaard scopes te gebruiken.'
+        blank_redirect_uri: Laat het leeg indien u uw provider heeft geconfigureerd voor het gebruik van Client Credentials, Resource Owner Password Credentials of een ander type authorisatie dat geen omleiding van URI vereist.
+        scopes: Scheid scopes met spaties. Laat leeg om de standaard scopes te gebruiken.
       edit:
-        title: 'Bewerk applicatie'
+        title: Bewerk applicatie
       index:
-        title: 'Jouw applicaties'
-        new: 'Nieuwe applicatie'
-        name: 'Naam'
-        callback_url: 'Callback URL'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Jouw applicaties
+        new: Nieuwe applicatie
+        name: Naam
+        callback_url: Callback URL
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Ja'
-          'no': 'Nee'
+          'yes': Ja
+          'no': Nee
       new:
-        title: 'Nieuwe applicatie'
+        title: Nieuwe applicatie
       show:
         title: 'Applicatie: %{name}'
-        application_id: 'Applicatie UID'
-        secret: 'Secret'
-        scopes: 'Scopes'
-        confidential: 'Confidential'
-        callback_urls: 'Callback urls'
-        actions: 'Acties'
-
+        application_id: Applicatie UID
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Confidentieel
+        callback_urls: Callback urls
+        actions: Acties
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Authoriseren'
-        deny: 'Weigeren'
+        authorize: Authoriseren
+        deny: Weigeren
       error:
-        title: 'Er is een fout opgetreden'
+        title: Er is een fout opgetreden
       new:
-        title: 'Authorisatie vereist'
-        prompt: '%{client_name} authoriseren om uw account te gebruiken?'
-        able_to: 'Deze applicatie zal in staat zijn om'
+        title: Authorisatie vereist
+        prompt: "%{client_name} authoriseren om uw account te gebruiken?"
+        able_to: Deze applicatie zal in staat zijn om
       show:
-        title: 'Authorisatie code'
-
+        title: Authorisatie code
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Weet je het zeker?'
+        revoke: Weet je het zeker?
       buttons:
-        revoke: 'Intrekken'
+        revoke: Intrekken
       index:
-        title: 'Jouw geauthoriseerde applicaties'
-        application: 'Applicatie'
-        created_at: 'Aangemaakt op'
-        date_format: '%d-%m-%Y %H:%M:%S'
-
+        title: Jouw geauthoriseerde applicaties
+        application: Applicatie
+        created_at: Aangemaakt op
+        date_format: "%d-%m-%Y %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Het verzoek mist een vereiste parameter, bevat een niet-ondersteunde parameter waarde of is anderszins onjuist.'
-        invalid_redirect_uri: 'De opgegeven redirect uri is niet geldig.'
-        unauthorized_client: 'De client is niet bevoegd om dit verzoek met deze methode uit te voeren.'
-        access_denied: 'De resource eigenaar of authorisatie-server weigerde het verzoek.'
-        invalid_scope: 'De opgevraagde scope is niet geldig, onbekend of onjuist.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'De authorisatie server is een onverwachte voorwaarde tegengekomen die het verzoek verhinderd.'
-        temporarily_unavailable: 'De authorisatie-server is momenteel niet in staat het verzoek te behandelen als gevolg van een tijdelijke overbelasting of onderhoud aan de server.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.'
-        resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'De authorisatie server ondersteund dit response type niet'
-
-        # Access token errors
-        invalid_client: 'Client verificatie is mislukt door onbekende klant, geen client authenticatie opgegeven, of een niet-ondersteunde authenticatie methode.'
-        invalid_grant: 'De verstrekte authorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect uri die is opgegeven, of werd uitgegeven aan een andere klant.'
-        unsupported_grant_type: 'Het type authorisatie is niet ondersteund door de authorisatie-server'
-
+        invalid_request:
+          unknown: Het verzoek mist een vereiste parameter, bevat een niet-ondersteunde parameter waarde of is anderszins onjuist.
+          missing_param: 'Ontbrekende vereiste parameter: %{value}.'
+          request_not_authorized: Verzoek moet worden geautoriseerd. Vereiste parameter voor het autoriseren van de aanvraag ontbreekt of is ongeldig.
+        invalid_redirect_uri: De opgegeven redirect uri is niet geldig.
+        unauthorized_client: De client is niet bevoegd om dit verzoek met deze methode uit te voeren.
+        access_denied: De resource eigenaar of authorisatie-server weigerde het verzoek.
+        invalid_scope: De opgevraagde scope is niet geldig, onbekend of onjuist.
+        invalid_code_challenge_method: De code-uitdaging-methode moet plain of S256 zijn.
+        server_error: De authorisatie server is een onverwachte voorwaarde tegengekomen die het verzoek verhinderd.
+        temporarily_unavailable: De authorisatie-server is momenteel niet in staat het verzoek te behandelen als gevolg van een tijdelijke overbelasting of onderhoud aan de server.
+        credential_flow_not_configured: Resource Owner Password Credentials flow is mislukt doordat Doorkeeper.configure.resource_owner_from_credentials niet geconfigureerd is.
+        resource_owner_authenticator_not_configured: Resource Owner opzoeking mislukt doordat Doorkeeper.configure.resource_owner_authenticator niet is gevonden.
+        admin_authenticator_not_configured: Toegang tot het adminpaneel is verboden omdat Doorkeeper.configure.admin_authenticator niet geconfigureerd is.
+        unsupported_response_type: De authorisatie server ondersteunt dit response type niet
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Client verificatie is mislukt door onbekende klant, geen client authenticatie opgegeven, of een niet-ondersteunde authenticatie methode.
+        invalid_grant: De verstrekte authorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect uri die is opgegeven, of werd uitgegeven aan een andere klant.
+        unsupported_grant_type: Het type authorisatie is niet ondersteund door de authorisatie-server
         invalid_token:
-          revoked: "Het toegangstoken is geweigerd"
-          expired: "Het toegangstoken is verlopen"
-          unknown: "Het toegangstoken is ongeldig"
-
+          revoked: Het toegangstoken is geweigerd
+          expired: Het toegangstoken is verlopen
+          unknown: Het toegangstoken is ongeldig
+        revoke:
+          unauthorized: U bent niet bevoegd om dit token in te trekken...
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Applicatie aangemaakt.'
+          notice: Applicatie aangemaakt.
         destroy:
-          notice: 'Applicatie verwijderd.'
+          notice: Applicatie verwijderd.
         update:
-          notice: 'Applicatie bewerkt.'
+          notice: Applicatie bewerkt.
       authorized_applications:
         destroy:
-          notice: 'Applicatie ingetrokken.'
-
+          notice: Applicatie ingetrokken.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 Provider'
-          applications: 'Applicaties'
-          home: 'Home'
+          oauth2_provider: OAuth2 Provider
+          applications: Applicaties
+          home: Home
       application:
-        title: 'OAuth authorisatie vereist'
+        title: OAuth authorisatie vereist
diff --git a/rails/locales/pt-BR.yml b/rails/locales/pt-BR.yml
index d6bf328..968001f 100644
--- a/rails/locales/pt-BR.yml
+++ b/rails/locales/pt-BR.yml
@@ -2,138 +2,134 @@ pt-BR:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Nome'
-        redirect_uri: 'URI de redirecionamento'
-        scopes: ~
+        name: Nome
+        redirect_uri: URI de redirecionamento
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'Não pode conter um fragmento.'
-              invalid_uri: 'deve ser uma URI válida.'
-              relative_uri: 'dever ser uma URI absoluta.'
-              secured_uri: 'deve ser uma URI HTTPS/SSL.'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: Não pode conter um fragmento.
+              invalid_uri: deve ser uma URI válida.
+              unspecified_scheme: must specify a scheme.
+              relative_uri: dever ser uma URI absoluta.
+              secured_uri: deve ser uma URI HTTPS/SSL.
+              forbidden_uri: is forbidden by the server.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Você tem certeza?'
+        destroy: Você tem certeza?
       buttons:
-        edit: 'Editar'
-        destroy: 'Deletar'
-        submit: 'Submeter'
-        cancel: 'Cancelar'
-        authorize: 'Autorizar'
+        edit: Editar
+        destroy: Deletar
+        submit: Submeter
+        cancel: Cancelar
+        authorize: Autorizar
       form:
-        error: 'Whoops! Veja o form para possíveis erros'
+        error: Whoops! Veja o form para possíveis erros
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: 'Use uma linha por URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: 'Use %{native_redirect_uri} para testes locais'
-        scopes: ~
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: Use uma linha por URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       edit:
-        title: 'Editar aplicação'
+        title: Editar aplicação
       index:
-        title: 'Suas aplicações'
-        new: 'Nova Aplicação'
-        name: 'Nome'
-        callback_url: 'URL de Callback'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: Suas aplicações
+        new: Nova Aplicação
+        name: Nome
+        callback_url: URL de Callback
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
-          'yes': 'Sim'
-          'no': 'Não'
+          'yes': Sim
+          'no': Não
       new:
-        title: 'Nova Aplicação'
+        title: Nova Aplicação
       show:
         title: 'Aplicação: %{name}'
-        application_id: 'Id da Aplicação (Application UID)'
-        secret: 'Segredo (Secret)'
-        scopes: ~
-        confidential: 'Confidential'
-        callback_urls: 'urls de Callback'
-        actions: 'Ações'
-
+        application_id: Id da Aplicação (Application UID)
+        secret: Segredo (Secret)
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Confidential
+        callback_urls: urls de Callback
+        actions: Ações
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Autorizar'
-        deny: 'Negar'
+        authorize: Autorizar
+        deny: Negar
       error:
-        title: 'Ocorreu um erro'
+        title: Ocorreu um erro
       new:
-        title: 'Autorização necessária'
-        prompt: 'Autorizar %{client_name} a usar sua conta?'
-        able_to: 'Essa aplicação será capaz de'
+        title: Autorização necessária
+        prompt: Autorizar %{client_name} a usar sua conta?
+        able_to: Essa aplicação será capaz de
       show:
-        title: 'Código de autorização'
-
+        title: Código de autorização
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Você tem certeza?'
+        revoke: Você tem certeza?
       buttons:
-        revoke: 'Revogar'
+        revoke: Revogar
       index:
-        title: 'Suas aplicações autorizadas'
-        application: 'Aplicação'
-        created_at: 'Criado em'
-        date_format: '%Y-%m-%d %H:%M:%S'
-
+        title: Suas aplicações autorizadas
+        application: Aplicação
+        created_at: Criado em
+        date_format: "%Y-%m-%d %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'A requisição não possui um parâmetro obrigatório, inclui um parâmetro inválido ou está malformada.'
-        invalid_redirect_uri: 'A uri de redirecionamento incluída não é válida.'
-        unauthorized_client: 'O cliente não está autorizado a realizar essa requisição usando este método.'
-        access_denied: 'O dono do recurso (resource owner) ou servidor de autorização (authorization server) negou a requisição.'
-        invalid_scope: 'O escopo requisitado é inválido, desconhecido ou malformado.'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: 'O servidor de autorização (authorization server) encontrou uma condição inesperada que o impediu de completar a requisição.'
-        temporarily_unavailable: 'O servidor de autorização (authorization server) não foi rapaz de processar a requisição devido a um problema tempoário de sobrecarga ou manuntenção.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Resource Owner Password Credentials flow falhou porque o Doorkeeper.configure.resource_owner_from_credentials não foi configurado.'
-        resource_owner_authenticator_not_configured: 'Resource Owner find falhou porque o Doorkeeper.configure.resource_owner_authenticator não foi configurado.'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: 'O servidor de autorização não suporta este tipo de resposta.'
-
-        # Access token errors
-        invalid_client: 'Autenticação do cliente falhou devido a um cliente desconhecido, a falta de inclusão da autenticação do cliente, ou a um método não suportado de autenticação.'
-        invalid_grant: 'A permissão de autorização (authorization grant) provida é inválida, expirada, revogada, não bate com a URI de redirecionamento usada na requisição de autorização, ou foi dada a outro cliente.'
-        unsupported_grant_type: 'O tipo de permissão de autorização (authorization grant) não é suportado pelo servidor de autorização(authorization server) The authorization grant type is not supported by the authorization server.'
-
+        invalid_request:
+          unknown: A requisição não possui um parâmetro obrigatório, inclui um parâmetro inválido ou está malformada.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: A uri de redirecionamento incluída não é válida.
+        unauthorized_client: O cliente não está autorizado a realizar essa requisição usando este método.
+        access_denied: O dono do recurso (resource owner) ou servidor de autorização (authorization server) negou a requisição.
+        invalid_scope: O escopo requisitado é inválido, desconhecido ou malformado.
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: O servidor de autorização (authorization server) encontrou uma condição inesperada que o impediu de completar a requisição.
+        temporarily_unavailable: O servidor de autorização (authorization server) não foi rapaz de processar a requisição devido a um problema tempoário de sobrecarga ou manuntenção.
+        credential_flow_not_configured: Resource Owner Password Credentials flow falhou porque o Doorkeeper.configure.resource_owner_from_credentials não foi configurado.
+        resource_owner_authenticator_not_configured: Resource Owner find falhou porque o Doorkeeper.configure.resource_owner_authenticator não foi configurado.
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: O servidor de autorização não suporta este tipo de resposta.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Autenticação do cliente falhou devido a um cliente desconhecido, a falta de inclusão da autenticação do cliente, ou a um método não suportado de autenticação.
+        invalid_grant: A permissão de autorização (authorization grant) provida é inválida, expirada, revogada, não bate com a URI de redirecionamento usada na requisição de autorização, ou foi dada a outro cliente.
+        unsupported_grant_type: O tipo de permissão de autorização (authorization grant) não é suportado pelo servidor de autorização(authorization server) The authorization grant type is not supported by the authorization server.
         invalid_token:
-          revoked: "O token de acesso (access token) foi revogado"
-          expired: "O token de acesso (access token) expirou"
-          unknown: "O token de acesso (access token) é inválido"
-
+          revoked: O token de acesso (access token) foi revogado
+          expired: O token de acesso (access token) expirou
+          unknown: O token de acesso (access token) é inválido
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Aplicação criada.'
+          notice: Aplicação criada.
         destroy:
-          notice: 'Aplicação deletada.'
+          notice: Aplicação deletada.
         update:
-          notice: 'Aplicação atualizada.'
+          notice: Aplicação atualizada.
       authorized_applications:
         destroy:
-          notice: 'Aplicação revogada.'
-
+          notice: Aplicação revogada.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'Provedor OAuth2 (OAuth2 Provider)'
-          applications: 'Aplicações'
-          home: 'Home'
+          oauth2_provider: Provedor OAuth2 (OAuth2 Provider)
+          applications: Aplicações
+          home: Home
       application:
-        title: 'Autorização OAuth necessária'
+        title: Autorização OAuth necessária
diff --git a/rails/locales/ru.yml b/rails/locales/ru.yml
index 546e7e0..9153b79 100644
--- a/rails/locales/ru.yml
+++ b/rails/locales/ru.yml
@@ -2,138 +2,134 @@ ru:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Наименование'
-        redirect_uri: 'URI для перенаправления'
-        scopes: 'Скоупы'
+        name: Наименование
+        redirect_uri: URI для перенаправления
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: 'не должен содержать фрагменты'
-              invalid_uri: 'должен быть корректным URI'
-              relative_uri: 'должен быть абсолютным URI'
-              secured_uri: 'должен быть HTTPS/SSL URI'
-              forbidden_uri: 'заблокирован со стороны сервера.'
+              fragment_present: не должен содержать фрагменты
+              invalid_uri: должен быть корректным URI
+              unspecified_scheme: должать содержать схему.
+              relative_uri: должен быть абсолютным URI
+              secured_uri: должен быть HTTPS/SSL URI
+              forbidden_uri: заблокирован со стороны сервера.
             scopes:
-              not_match_configured: "не соответствуют конфигурации сервера."
-
+              not_match_configured: не соответствуют конфигурации сервера.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Вы уверены?'
+        destroy: Вы уверены?
       buttons:
-        edit: 'Редактировать'
-        destroy: 'Удалить'
-        submit: 'Сохранить'
-        cancel: 'Отменить'
-        authorize: 'Авторизовать'
+        edit: Редактировать
+        destroy: Удалить
+        submit: Сохранить
+        cancel: Отменить
+        authorize: Авторизовать
       form:
-        error: 'Возникли ошибки! Проверьте правильность заполнения полей'
+        error: Возникли ошибки! Проверьте правильность заполнения полей
       help:
-        confidential: 'Приложение будет использоваться там, где секретный ключ защищён от просмотра. Мобильные приложения и одностраничные веб-приложения (SPA) рассматриваются как незащищённые.'
-        redirect_uri: 'Указывайте каждый URI в отдельной строке'
-        blank_redirect_uri: "Пакіньце пустым калі Ваш правайдар наладжаны на выкарыстанне Client Credentials, Resource Owner Password Credentials ці іншага метаду аўтарызацыі без URI зваротнага выкліку."
-        native_redirect_uri: 'Используйте %{native_redirect_uri} для локального тестирования'
-        scopes: 'Записывайте скоупы через пробел. Оставьте поле пустым для использования значений по-умолчанию'
+        confidential: Приложение будет использоваться там, где секретный ключ защищён от просмотра. Мобильные приложения и одностраничные веб-приложения (SPA) рассматриваются как незащищённые.
+        redirect_uri: Указывайте каждый URI в отдельной строке
+        blank_redirect_uri: Пакіньце пустым калі Ваш правайдар наладжаны на выкарыстанне Client Credentials, Resource Owner Password Credentials ці іншага метаду аўтарызацыі без URI зваротнага выкліку.
+        scopes: Записывайте скоупы через пробел. Оставьте поле пустым для использования значений по-умолчанию
       edit:
-        title: 'Редактировать приложение'
+        title: Редактировать приложение
       index:
-        title: 'Ваши приложения'
-        new: 'Новое приложение'
-        name: 'Наименование'
-        callback_url: 'URL обратного вызова'
-        actions: 'Действия'
-        confidential: 'Конфиденциально?'
+        title: Ваши приложения
+        new: Новое приложение
+        name: Наименование
+        callback_url: URL обратного вызова
+        confidential: Конфиденциально?
+        actions: Действия
         confidentiality:
-          'yes': 'Да'
-          'no': 'Нет'
+          'yes': Да
+          'no': Нет
       new:
-        title: 'Новое приложение'
+        title: Новое приложение
       show:
         title: 'Приложение: %{name}'
-        application_id: 'ID приложения'
-        secret: 'Секретный ключ'
-        scopes: 'Скоупы'
-        confidential: 'Конфиденциально'
-        callback_urls: 'Список URL обратного вызова'
-        actions: 'Действия'
-
+        application_id: ID приложения
+        secret: Секретный ключ
+        secret_hashed: Secret hashed
+        scopes: Скоупы
+        confidential: Конфиденциально
+        callback_urls: Список URL обратного вызова
+        actions: Действия
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: 'Разрешить'
-        deny: 'Отклонить'
+        authorize: Разрешить
+        deny: Отклонить
       error:
-        title: 'Произошла ошибка'
+        title: Произошла ошибка
       new:
-        title: 'Требуется авторизация'
-        prompt: 'Разрешить %{client_name} использовать данные Вашей учётной записи?'
+        title: Требуется авторизация
+        prompt: Разрешить %{client_name} использовать данные Вашей учётной записи?
         able_to: 'Данное приложение требует следующие разрешения:'
       show:
-        title: 'Код авторизации'
-
+        title: Код авторизации
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Вы уверены?'
+        revoke: Вы уверены?
       buttons:
-        revoke: 'Отозвать авторизацию'
+        revoke: Отозвать авторизацию
       index:
-        title: 'Ваши авторизованные приложения'
-        application: 'Приложение'
-        created_at: 'Создано'
-        date_format: '%d-%m-%Y %H:%M:%S'
-
+        title: Ваши авторизованные приложения
+        application: Приложение
+        created_at: Создано
+        date_format: "%d-%m-%Y %H:%M:%S"
     pre_authorization:
-      status: 'Предварительная авторизация'
-
+      status: Предварительная авторизация
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'В запросе отсутствуют необходимые параметры или они некорректны'
-        invalid_redirect_uri: 'Некорректный URI для перенаправления'
-        unauthorized_client: 'Клиент не авторизован для выполнения данного запроса'
+        invalid_request:
+          unknown: В запросе отсутствуют необходимые параметры или они некорректны.
+          missing_param: 'Отсутствует обязательный параметр: %{value}.'
+          request_not_authorized: Запрос должен быть авторизован. Необходимый параметр для авторизации отсутствует или неверный.
+        invalid_redirect_uri: Некорректный URI для перенаправления
+        unauthorized_client: Клиент не авторизован для выполнения данного запроса
         access_denied: 'Доступ запрещен: сервер или владелец ресурса отклонил запрос'
-        invalid_scope: 'Неверный скоуп'
-        invalid_code_challenge_method: 'Code challenge method должен быть plain или S256.'
-        server_error: 'На авторизационном сервере произошла ошибка; запрос не выполнен'
-        temporarily_unavailable: 'В настоящее время авторизационный сервер не может обработать запрос в силу высокой загруженности или тех. работ'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Resource Owner Password Credentials не сконфигурированы, необходимо настроить Doorkeeper.configure.resource_owner_from_credentials'
-        resource_owner_authenticator_not_configured: 'Resource Owner не найден, необходима конфигурация Doorkeeper.configure.resource_owner_authenticator'
-        admin_authenticator_not_configured: 'Доступ к панели администратора заблокирован в связи настройкой опции Doorkeeper.configure.admin_authenticator.'
-
-        # Access grant errors
-        unsupported_response_type: 'Сервер авторизации не поддерживает данный тип запроса'
-
-        # Access token errors
+        invalid_scope: Неверный скоуп
+        invalid_code_challenge_method: Code challenge method должен быть plain или S256.
+        server_error: На авторизационном сервере произошла ошибка; запрос не выполнен
+        temporarily_unavailable: В настоящее время авторизационный сервер не может обработать запрос в силу высокой загруженности или тех. работ
+        credential_flow_not_configured: Resource Owner Password Credentials не сконфигурированы, необходимо настроить Doorkeeper.configure.resource_owner_from_credentials
+        resource_owner_authenticator_not_configured: Resource Owner не найден, необходима конфигурация Doorkeeper.configure.resource_owner_authenticator
+        admin_authenticator_not_configured: Доступ к панели администратора заблокирован в связи настройкой опции Doorkeeper.configure.admin_authenticator.
+        unsupported_response_type: Сервер авторизации не поддерживает данный тип запроса
+        unsupported_response_mode: The authorization server does not support this response mode.
         invalid_client: 'Ошибка аутентификации клиента: неверный токен, неизвестный клиент или неподдерживаемый метод аутентификации'
-        invalid_grant: 'Право на авторизацию истекло или отозвано'
-        unsupported_grant_type: 'Авторизационный сервер не поддерживает данный способ авторизации'
-
+        invalid_grant: Право на авторизацию истекло или отозвано
+        unsupported_grant_type: Авторизационный сервер не поддерживает данный способ авторизации
         invalid_token:
-          revoked: "Токен доступа отозван"
-          expired: "Токен доступа устарел"
-          unknown: "Неверный токен доступа"
-
+          revoked: Токен доступа отозван
+          expired: Токен доступа устарел
+          unknown: Неверный токен доступа
+        revoke:
+          unauthorized: Вы не авторизованы для удаления данного токена доступа
+        forbidden_token:
+          missing_scope: 'Для доступа к данному ресурсу необходим(ы) скоуп(ы): "%{oauth_scopes}".'
     flash:
       applications:
         create:
-          notice: 'Приложение создано'
+          notice: Приложение создано
         destroy:
-          notice: 'Приложение удалено'
+          notice: Приложение удалено
         update:
-          notice: 'Приложение обновлено'
+          notice: Приложение обновлено
       authorized_applications:
         destroy:
-          notice: 'Приложение отозвано'
-
+          notice: Приложение отозвано
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth 2 провайдер'
-          applications: 'Приложения'
-          home: 'Главная'
+          oauth2_provider: OAuth 2 провайдер
+          applications: Приложения
+          home: Главная
       application:
-        title: 'Необходима авторизация'
+        title: Необходима авторизация
diff --git a/rails/locales/sk.yml b/rails/locales/sk.yml
index 4523b4e..45664db 100644
--- a/rails/locales/sk.yml
+++ b/rails/locales/sk.yml
@@ -2,139 +2,134 @@ sk:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: 'Meno'
-        redirect_uri: 'URI presmerovania'
-        scopes: 'Scopes'
+        name: Meno
+        redirect_uri: URI presmerovania
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present:  'nemôže obsahovať fragment.'
-              invalid_uri: 'musí byť platná URI.'
-              relative_uri: 'musí byť absolútna URI.'
-              secured_uri: 'musí byť HTTPS / SSL URI.'
-              forbidden_uri: 'je serverom zakázaná.'
+              fragment_present: nemôže obsahovať fragment.
+              invalid_uri: musí byť platná URI.
+              unspecified_scheme: musí špecifikovať schému.
+              relative_uri: musí byť absolútna URI.
+              secured_uri: musí byť HTTPS / SSL URI.
+              forbidden_uri: je serverom zakázaná.
             scopes:
-              not_match_configured: "nezodpovedá nastavenému serveru."
-
+              not_match_configured: nezodpovedá nastavenému serveru.
   doorkeeper:
     applications:
       confirmations:
-        destroy: 'Naozaj zmazať?'
+        destroy: Naozaj zmazať?
       buttons:
-        edit: 'Upraviť'
-        destroy: 'Zmazať'
-        submit: 'Odoslať'
-        cancel: 'Zrušiť'
-        authorize: 'Autorizovať'
+        edit: Upraviť
+        destroy: Zmazať
+        submit: Odoslať
+        cancel: Zrušiť
+        authorize: Autorizovať
       form:
-        error: 'Chyba! Skontrolujte a opravte chyby vo formulári.'
+        error: Chyba! Skontrolujte a opravte chyby vo formulári.
       help:
-        confidential: 'Aplikácia bude použitá tam, kde je možné zachovať dôvernosť klienta. Natívne mobilné aplikácie a aplikácie s jednou stránkou sú považované za nedôverné.'
-        redirect_uri: 'Na každý riadok jedna URI'
-        blank_redirect_uri: "Ponechajte prázdne, ak ste nakonfigurovali svojho poskytovateľa, aby používal poverenia klienta, poverenia vlastníka hesla alebo iný typ grantu, ktorý nevyžaduje presmerovanie URI."
-        native_redirect_uri: 'Použite %{native_redirect_uri} ak chcete použiť localhost URI pre vývojové prostredie'
-        scopes: 'Oddeľte Scope medzerami. Nechajte prázdne pre použitie default scope.'
+        confidential: Aplikácia bude použitá tam, kde je možné zachovať dôvernosť klienta. Natívne mobilné aplikácie a aplikácie s jednou stránkou sú považované za nedôverné.
+        redirect_uri: Na každý riadok jedna URI
+        blank_redirect_uri: Ponechajte prázdne, ak ste nakonfigurovali svojho poskytovateľa, aby používal poverenia klienta, poverenia vlastníka hesla alebo iný typ grantu, ktorý nevyžaduje presmerovanie URI.
+        scopes: Oddeľte Scope medzerami. Nechajte prázdne pre použitie default scope.
       edit:
-        title: 'Upraviť aplikáciu'
+        title: Upraviť aplikáciu
       index:
-        title: 'Vaše aplikácie'
-        new: 'Nová aplikácia'
-        name: 'Názov'
-        callback_url: 'Callback URL'
-        confidential: 'Dôverné?'
-        actions: 'Akcia'
+        title: Vaše aplikácie
+        new: Nová aplikácia
+        name: Názov
+        callback_url: Callback URL
+        confidential: Dôverné?
+        actions: Akcia
         confidentiality:
-          'yes': 'Áno'
-          'no': 'Nie'
+          'yes': Áno
+          'no': Nie
       new:
-        title: 'Nová aplikácia'
+        title: Nová aplikácia
       show:
         title: 'Aplikácia: %{name}'
-        application_id: 'UID aplikácie'
-        secret: 'Secret'
-        scopes: 'Scopes'
-        confidential: 'Dôverné'
-        callback_urls: 'Url presmerovanie'
-        actions: 'Akcia'
-
+        application_id: UID aplikácie
+        secret: Secret
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Dôverné
+        callback_urls: Url presmerovanie
+        actions: Akcia
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize:  'Autorizovať'
-        deny: 'Odmietnuť'
+        authorize: Autorizovať
+        deny: Odmietnuť
       error:
-        title: 'Vyskytla se chyba'
+        title: Vyskytla se chyba
       new:
-        title: 'Nutná autorizácie'
-        prompt: 'Autorizovať %{client_name} k prístupu k vášmu účtu?'
-        able_to: 'Táto aplikácia bude mať tieto oprávnenia'
+        title: Nutná autorizácie
+        prompt: Autorizovať %{client_name} k prístupu k vášmu účtu?
+        able_to: Táto aplikácia bude mať tieto oprávnenia
       show:
-        title: 'Autorizačný kód'
-
+        title: Autorizačný kód
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: 'Naozaj autorizovať?'
+        revoke: Naozaj autorizovať?
       buttons:
-        revoke: 'Odstrániť autorizáciu'
+        revoke: Odstrániť autorizáciu
       index:
-        title: 'Vaše autorizované aplikácie'
-        application: 'Aplikácia'
-        created_at: 'Vytvorené'
-        date_format: '%H:%M:%S %d.%m.%T'
-
+        title: Vaše autorizované aplikácie
+        application: Aplikácia
+        created_at: Vytvorené
+        date_format: "%H:%M:%S %d.%m.%T"
     pre_authorization:
-      status: 'Pre-autorizácie'
-
+      status: Pre-autorizácie
     errors:
       messages:
-        # Common error messages
-        invalid_request: 'Požiadavke chýba požadovaný parameter, obsahuje nepodporovanú hodnotu parametra, alebo je inak poškodený.'
-        invalid_redirect_uri: "Požadované presmerovanie uri je chybne formátované alebo nezodpovedá presmerovania URI klienta."
-        unauthorized_client: 'Klient nie je oprávnený vykonávať túto požiadavku touto metódou.'
-        access_denied:  'Vlastník zdroje alebo autorizačný server požiadavku odmietol.'
-        invalid_scope:  'Požadovaný rozsah je neplatný, neznámy alebo poškodený.'
-        invalid_code_challenge_method: 'Metóda výzvy kódu musí byť prostá alebo S256.'
-        server_error: 'Autorizačný server narazil na neočakávanú podmienku, ktorá mu znemožnila splniť požiadavku.'
-        temporarily_unavailable: 'Autorizačný server nie je v súčasnej dobe schopný spracovať požiadavku z dôvodu dočasného preťaženia alebo údržby serveru.'
-
-        # Configuration error messages
-        credential_flow_not_configured: 'Flow poverenia vlastníka zdroja zlyhal kvôli tomu, že Doorkeeper.configure.resource_owner_from_credentials nie je nakonfigurovaný.'
-        resource_owner_authenticator_not_configured:  'Vyhľadanie zdroja zlyhalo z dôvodu, že Doorkeeper.configure.resource_owner_authenticator nie je nakonfigurované.'
-        admin_authenticator_not_configured: 'Prístup k panelu admin je zakázaný kvôli tomu, že Doorkeeper.configure.admin_authenticator nie je nakonfigurované.'
-
-        # Access grant errors
-        unsupported_response_type: 'Autorizačný server nepodporuje tento typ odpovede.'
-
-        # Access token errors
-        invalid_client: 'Autentizácia klienta zlyhala kvôli neznámemu klientovi, žiadnemu overovanie klienta alebo nepodporované metóde overovania.'
-        invalid_grant: 'Udelený grant pre udelenie oprávnenia je neplatný, jeho platnosť vypršala, zrušená, nezodpovedá URI presmerovania použitého v žiadosti o autorizáciu alebo bola vydaná inému klientovi.'
-        unsupported_grant_type: 'Autorizačný Server nepodporuje typ autorizačného grantu.'
-
+        invalid_request:
+          unknown: Požiadavke chýba požadovaný parameter, obsahuje nepodporovanú hodnotu parametra, alebo je inak poškodený.
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: Požadované presmerovanie uri je chybne formátované alebo nezodpovedá presmerovania URI klienta.
+        unauthorized_client: Klient nie je oprávnený vykonávať túto požiadavku touto metódou.
+        access_denied: Vlastník zdroje alebo autorizačný server požiadavku odmietol.
+        invalid_scope: Požadovaný rozsah je neplatný, neznámy alebo poškodený.
+        invalid_code_challenge_method: Metóda výzvy kódu musí byť prostá alebo S256.
+        server_error: Autorizačný server narazil na neočakávanú podmienku, ktorá mu znemožnila splniť požiadavku.
+        temporarily_unavailable: Autorizačný server nie je v súčasnej dobe schopný spracovať požiadavku z dôvodu dočasného preťaženia alebo údržby serveru.
+        credential_flow_not_configured: Flow poverenia vlastníka zdroja zlyhal kvôli tomu, že Doorkeeper.configure.resource_owner_from_credentials nie je nakonfigurovaný.
+        resource_owner_authenticator_not_configured: Vyhľadanie zdroja zlyhalo z dôvodu, že Doorkeeper.configure.resource_owner_authenticator nie je nakonfigurované.
+        admin_authenticator_not_configured: Prístup k panelu admin je zakázaný kvôli tomu, že Doorkeeper.configure.admin_authenticator nie je nakonfigurované.
+        unsupported_response_type: Autorizačný server nepodporuje tento typ odpovede.
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: Autentizácia klienta zlyhala kvôli neznámemu klientovi, žiadnemu overovanie klienta alebo nepodporované metóde overovania.
+        invalid_grant: Udelený grant pre udelenie oprávnenia je neplatný, jeho platnosť vypršala, zrušená, nezodpovedá URI presmerovania použitého v žiadosti o autorizáciu alebo bola vydaná inému klientovi.
+        unsupported_grant_type: Autorizačný Server nepodporuje typ autorizačného grantu.
         invalid_token:
-          revoked: "Tento prístupový token bol zrušený"
-          expired: "Tento prístupový token vypršal"
-          unknown: "Tento prístupový token je neplatný"
-
-
+          revoked: Tento prístupový token bol zrušený
+          expired: Tento prístupový token vypršal
+          unknown: Tento prístupový token je neplatný
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: 'Aplikácia vytvorená.'
+          notice: Aplikácia vytvorená.
         destroy:
-          notice: 'Aplikácia zmazaná.'
+          notice: Aplikácia zmazaná.
         update:
-          notice: 'Aplikácia aktualizovaná.'
+          notice: Aplikácia aktualizovaná.
       authorized_applications:
         destroy:
-          notice: 'Aplikácii bolo odňaté povolenie.'
-
+          notice: Aplikácii bolo odňaté povolenie.
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 poskytovateľ'
-          applications: 'Aplikácia'
-          home: 'Domov'
+          oauth2_provider: OAuth2 poskytovateľ
+          applications: Aplikácia
+          home: Domov
       application:
-        title: 'OAuth vyžaduje autorizáciu'
+        title: OAuth vyžaduje autorizáciu
diff --git a/rails/locales/tr.yml b/rails/locales/tr.yml
new file mode 100644
index 0000000..1feeb2e
--- /dev/null
+++ b/rails/locales/tr.yml
@@ -0,0 +1,135 @@
+tr:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: 'Ad'
+        redirect_uri: 'Yönlendirme URL'
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: 'Yönlendirme URL için fragment kullanılamaz'
+              invalid_uri: 'Geçerli bir URI olmalıdır'
+              unspecified_scheme: 'Şema belirtilmelidir'
+              relative_uri: 'Mutlak URI olmalıdır'
+              secured_uri: 'HTTPS/SSL URI olmalıdır'
+              forbidden_uri: 'Sunucu tarafından yasaklanmıştır'
+            scopes:
+              not_match_configured: "Sunucu tarafında yapılandırılmış olan ile eşleşmiyor"
+  doorkeeper:
+    applications:
+      confirmations:
+        destroy: 'Silmek istediğinizden emin misiniz?'
+      buttons:
+        edit: 'Düzenle'
+        destroy: 'Sil'
+        submit: 'Gönder'
+        cancel: 'İptal'
+        authorize: 'Yetkilendir'
+      form:
+        error: 'Hata! Formunuzda hata olabilir'
+      help:
+        confidential: 'Gizli olarak kullanılacak bir uygulama olarak işaretlenir. Mobil uygulamalar veya tek sayfalık uygulamalar gibi.'
+        redirect_uri: 'Her URI için bir satır kullanın'
+        blank_redirect_uri: "Eğer uygulama için Client Credentials, Resource Owner Password Credentials veya başka bir yetki türü kullanılıyorsa, yönlendirme URI'lerini boş bırakın."
+        scopes: 'Yetkileri aralarında boşluk bırakarak ayırın'
+      edit:
+        title: 'Uygulamayı düzenle'
+      index:
+        title: 'Uygulamalarınız'
+        new: 'Yeni Uygulama'
+        name: 'Ad'
+        callback_url: 'Yönlendirme URL'
+        confidential: 'Gizli?'
+        actions: 'Eylemler'
+        confidentiality:
+          'yes': 'Evet'
+          'no': 'Hayır'
+      new:
+        title: 'Yeni Uygulama'
+      show:
+        title: "Uygulama: %{name}"
+        application_id: 'UID'
+        secret: 'Gizli'
+        secret_hashed: 'Gizli karma'
+        scopes: 'Yetkiler'
+        confidential: 'Gizli'
+        callback_urls: 'Yönlendirme URLleri'
+        actions: 'Eylemler'
+        not_defined: 'Belirtilmemiş'
+    authorizations:
+      buttons:
+        authorize: 'Yetkilendir'
+        deny: 'Reddet'
+      error:
+        title: 'Bir hata oluştu'
+      new:
+        title: 'Oturum zorunlu '
+        prompt: "%{client_name} kullanıcı hesabınıza yetkilendirmek istiyor musunuz?"
+        able_to: 'Bu uygulama şunu yapabilir'
+      show:
+        title: 'Yetkilendirme kodu'
+      form_post:
+        title: 'Bu formu gönderin'
+    authorized_applications:
+      confirmations:
+        revoke: 'Emin misiniz?'
+      buttons:
+        revoke: 'İptal et'
+      index:
+        title: 'Yetkilendirilmiş uygulamalar'
+        application: 'Uygulama'
+        created_at: 'Oluşturulma tarihi'
+        date_format: '%Y-%m-%d %H:%M:%S'
+    pre_authorization:
+      status: 'Yetkilendirme durumu'
+    errors:
+      messages:
+        invalid_request:
+          unknown: 'İstekte gerekli bir parametre eksik, desteklenmeyen bir parametre değeri içeriyor veya başka bir şekilde hatalı biçimlendirilmiş.'
+          missing_param: "%{value} parametresi eksik"
+          request_not_authorized: 'Talebin yetkilendirilmesi gerekiyor. Yetkilendirme isteği için gerekli parametre eksik veya geçersiz.'
+        invalid_redirect_uri: "İstenen yönlendirme URI'si hatalı biçimlendirilmiş veya istemci yönlendirme URI'si ile eşleşmiyor."
+        unauthorized_client: 'İstemci, bu yöntemi kullanarak bu isteği gerçekleştirme yetkisine sahip değil.'
+        access_denied: 'Kaynak sahibi veya yetkilendirme sunucusu, isteği reddetti.'
+        invalid_scope: 'İstenen kapsam geçersiz, bilinmiyor veya hatalı biçimlendirilmiş.'
+        invalid_code_challenge_method: 'Kod sorgulama yöntemi düz veya S256 olmalıdır.'
+        server_error: 'Yetkilendirme sunucusu, isteği yerine getirmesini engelleyen beklenmeyen bir koşulla karşılaştı.'
+        temporarily_unavailable: 'Yetkilendirme sunucusu, sunucunun geçici olarak aşırı yüklenmesi veya bakımı nedeniyle şu anda isteği işleyemiyor.'
+        credential_flow_not_configured: 'Doorkeeper.configure.resource_owner_from_credentials yapılandırılmadığından Kaynak Sahibi Parolası Kimlik Bilgileri akışı başarısız oldu.'
+        resource_owner_authenticator_not_configured: 'Doorkeeper.configure.resource_owner_authenticator yapılandırılmadığından Kaynak Sahibi bulma başarısız oldu.'
+        admin_authenticator_not_configured: 'Doorkeeper.configure.admin_authenticator yapılandırılmamış olduğundan yönetici paneline erişim yasaktır.'
+        unsupported_response_type: 'Yetkilendirme sunucusu bu yanıt türünü desteklemiyor.'
+        unsupported_response_mode: 'Yetkilendirme sunucusu bu yanıt modunu desteklemiyor.'
+        invalid_client: 'Bilinmeyen istemci, istemci kimlik doğrulamasının dahil edilmemesi veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle istemci kimlik doğrulaması başarısız oldu.'
+        invalid_grant: "Sağlanan yetkilendirme yetkisi geçersiz, süresi doldu, iptal edildi, yetkilendirme talebinde kullanılan yeniden yönlendirme URI'si ile eşleşmiyor veya başka bir istemciye verildi."
+        unsupported_grant_type: 'Yetki verme türü, yetkilendirme sunucusu tarafından desteklenmiyor.'
+        invalid_token:
+          revoked: "Erişim jetonu geri alındı."
+          expired: "Erişim jetonu zaman aşımına uğradı ve kullanılmaya devam edemez."
+          unknown: "Erişim jetonu geçersiz."
+        revoke:
+          unauthorized: "Bu erişim jetonu için yetkilendirme yapılamadı."
+        forbidden_token:
+          missing_scope: "Bu kaynağa erişim için, %{oauth_scopes} yetkileri gerekli."
+    flash:
+      applications:
+        create:
+          notice: 'Uygulama oluşturuldu'
+        destroy:
+          notice: 'Uygulama silindi'
+        update:
+          notice: 'Uygulama güncellendi'
+      authorized_applications:
+        destroy:
+          notice: 'Yetkilendirilmiş uygulama silindi'
+    layouts:
+      admin:
+        title: 'Doorkeeper'
+        nav:
+          oauth2_provider: 'OAuth2 Sağlayıcı'
+          applications: 'Uygulamalar'
+          home: 'Anasayfa'
+      application:
+        title: 'OAuth yetkilendirmesi zorunlu'
diff --git a/rails/locales/zh-CN.yml b/rails/locales/zh-CN.yml
index 7b7ee88..b157ba8 100644
--- a/rails/locales/zh-CN.yml
+++ b/rails/locales/zh-CN.yml
@@ -2,138 +2,134 @@ zh-CN:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: '应用名称'
-        redirect_uri: '重定向 URI'
-        scopes: '权限范围'
+        name: 应用名称
+        redirect_uri: 重定向 URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: '不能包含网址片段(#)'
-              invalid_uri: '必须是有效的 URI 格式'
-              relative_uri: '必须是绝对的 URI 地址'
-              secured_uri: '必须是 HTTPS/SSL 的 URI 地址'
-              forbidden_uri: '被服务器禁止。'
+              fragment_present: 不能包含网址片段(#)
+              invalid_uri: 必须是有效的 URI 格式
+              unspecified_scheme: must specify a scheme.
+              relative_uri: 必须是绝对的 URI 地址
+              secured_uri: 必须是 HTTPS/SSL 的 URI 地址
+              forbidden_uri: 被服务器禁止。
             scopes:
-              not_match_configured: '不匹配服务器上的配置。'
-
+              not_match_configured: 不匹配服务器上的配置。
   doorkeeper:
     applications:
       confirmations:
-        destroy: '确定要删除应用吗?'
+        destroy: 确定要删除应用吗?
       buttons:
-        edit: '编辑'
-        destroy: '删除'
-        submit: '提交'
-        cancel: '取消'
-        authorize: '授权'
+        edit: 编辑
+        destroy: 删除
+        submit: 提交
+        cancel: 取消
+        authorize: 授权
       form:
-        error: '抱歉! 提交信息的时候遇到了下面的错误'
+        error: 抱歉! 提交信息的时候遇到了下面的错误
       help:
-        confidential: '应用程序的client secret可以保密,但原生移动应用和单页应用将无法保护client secret。'
-        redirect_uri: '每行只能有一个 URI'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: '本地测试请使用 %{native_redirect_uri}'
-        scopes: '用空格分割权限范围,留空则使用默认设置'
+        confidential: 应用程序的client secret可以保密,但原生移动应用和单页应用将无法保护client secret。
+        redirect_uri: 每行只能有一个 URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: 用空格分割权限范围,留空则使用默认设置
       edit:
-        title: '修改应用'
+        title: 修改应用
       index:
-        title: '你的应用'
-        new: '创建新应用'
-        name: '名称'
-        callback_url: '回调 URL'
-        actions: '动作'
-        confidential: 'Confidential?'
+        title: 你的应用
+        new: 创建新应用
+        name: 名称
+        callback_url: 回调 URL
+        confidential: Confidential?
+        actions: 动作
         confidentiality:
-          'yes': '是'
-          'no': '沒有'
+          'yes': 是
+          'no': 沒有
       new:
-        title: '创建新应用'
+        title: 创建新应用
       show:
-        title: '应用:%{name}'
-        application_id: '应用 UID'
-        secret: '应用密钥'
-        scopes: '权限范围'
-        confidential: 'Confidential'
-        callback_urls: '回调 URL'
-        actions: '操作'
-
+        title: 应用:%{name}
+        application_id: 应用 UID
+        secret: 应用密钥
+        secret_hashed: Secret hashed
+        scopes: 权限范围
+        confidential: Confidential
+        callback_urls: 回调 URL
+        actions: 操作
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: '同意授权'
-        deny: '拒绝授权'
+        authorize: 同意授权
+        deny: 拒绝授权
       error:
-        title: '发生错误'
+        title: 发生错误
       new:
-        title: '需要授权'
-        prompt: '授权 %{client_name} 使用你的帐户?'
-        able_to: '此应用将能够'
+        title: 需要授权
+        prompt: 授权 %{client_name} 使用你的帐户?
+        able_to: 此应用将能够
       show:
-        title: '授权代码'
-
+        title: 授权代码
+      form_post:
+        title: Submit this form
     authorized_applications:
       confirmations:
-        revoke: '确定要撤销对此应用的授权吗?'
+        revoke: 确定要撤销对此应用的授权吗?
       buttons:
-        revoke: '撤销授权'
+        revoke: 撤销授权
       index:
-        title: '已授权的应用'
-        application: '应用'
-        created_at: '授权时间'
+        title: 已授权的应用
+        application: 应用
+        created_at: 授权时间
         date_format: "%Y-%m-%d %H:%M:%S"
-
     pre_authorization:
-      status: '预授权'
-
+      status: 预授权
     errors:
       messages:
-        # Common error messages
-        invalid_request: '请求缺少必要的参数,或者参数值、格式不正确。'
-        invalid_redirect_uri: '无效的登录回调地址。'
-        unauthorized_client: '未授权的应用,请求无法执行。'
-        access_denied: '资源所有者或服务器拒绝了请求。'
-        invalid_scope: '请求的权限范围无效、未知或格式不正确。'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: '服务器异常,无法处理请求。'
-        temporarily_unavailable: '服务器维护中或负载过高,暂时无法处理请求。'
-
-        # Configuration error messages
-        credential_flow_not_configured: '由于 Doorkeeper.configure.resource_owner_from_credentials 尚未配置,应用验证授权流程失败。'
-        resource_owner_authenticator_not_configured: '由于 Doorkeeper.configure.resource_owner_authenticator 尚未配置,查找资源所有者失败。'
-        admin_authenticator_not_configured: '由于 Doorkeeper.configure.admin_authenticator 尚未配置,禁止访问管理员面板。'
-
-        # Access grant errors
-        unsupported_response_type: '服务器不支持这种响应类型。'
-
-        # Access token errors
-        invalid_client: '由于应用信息未知、未提交认证信息或使用了不支持的认证方式,认证失败。'
-        invalid_grant: '授权方式无效、过期或已被撤销、与授权请求中的回调地址不一致,或使用了其他应用的回调地址。'
-        unsupported_grant_type: '服务器不支持此类型的授权方式。'
-
+        invalid_request:
+          unknown: 请求缺少必要的参数,或者参数值、格式不正确。
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: 无效的登录回调地址。
+        unauthorized_client: 未授权的应用,请求无法执行。
+        access_denied: 资源所有者或服务器拒绝了请求。
+        invalid_scope: 请求的权限范围无效、未知或格式不正确。
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: 服务器异常,无法处理请求。
+        temporarily_unavailable: 服务器维护中或负载过高,暂时无法处理请求。
+        credential_flow_not_configured: 由于 Doorkeeper.configure.resource_owner_from_credentials 尚未配置,应用验证授权流程失败。
+        resource_owner_authenticator_not_configured: 由于 Doorkeeper.configure.resource_owner_authenticator 尚未配置,查找资源所有者失败。
+        admin_authenticator_not_configured: 由于 Doorkeeper.configure.admin_authenticator 尚未配置,禁止访问管理员面板。
+        unsupported_response_type: 服务器不支持这种响应类型。
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: 由于应用信息未知、未提交认证信息或使用了不支持的认证方式,认证失败。
+        invalid_grant: 授权方式无效、过期或已被撤销、与授权请求中的回调地址不一致,或使用了其他应用的回调地址。
+        unsupported_grant_type: 服务器不支持此类型的授权方式。
         invalid_token:
-          revoked: "访问令牌已被吊销"
-          expired: "访问令牌已过期"
-          unknown: "访问令牌无效"
-
+          revoked: 访问令牌已被吊销
+          expired: 访问令牌已过期
+          unknown: 访问令牌无效
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: '应用创建成功。'
+          notice: 应用创建成功。
         destroy:
-          notice: '应用删除成功。'
+          notice: 应用删除成功。
         update:
-          notice: '应用修改成功。'
+          notice: 应用修改成功。
       authorized_applications:
         destroy:
-          notice: '已成功撤销对此应用的授权。'
-
+          notice: 已成功撤销对此应用的授权。
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 提供商'
-          applications: '应用'
-          home: '首页'
+          oauth2_provider: OAuth2 提供商
+          applications: 应用
+          home: 首页
       application:
-        title: '需要 OAuth 认证'
+        title: 需要 OAuth 认证
diff --git a/rails/locales/zh-HK.yml b/rails/locales/zh-HK.yml
index df40574..0e9af94 100644
--- a/rails/locales/zh-HK.yml
+++ b/rails/locales/zh-HK.yml
@@ -2,138 +2,134 @@ zh-HK:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: "名稱"
-        redirect_uri: "轉接 URI"
-        scopes: "權限"
+        name: 名稱
+        redirect_uri: 轉接 URI
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: "URI 不可包含 \"#fragment\" 部份"
-              invalid_uri: "必需有正確的 URI。"
-              relative_uri: "必需為絕對 URI。"
-              secured_uri: "必需使用有 HTTPS/SSL 加密的 URI。"
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: URI 不可包含 "#fragment" 部份
+              invalid_uri: 必需有正確的 URI。
+              unspecified_scheme: must specify a scheme.
+              relative_uri: 必需為絕對 URI。
+              secured_uri: 必需使用有 HTTPS/SSL 加密的 URI。
+              forbidden_uri: is forbidden by the server.
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: doesn't match configured on the server.
   doorkeeper:
     applications:
-      buttons:
-        authorize: "認證"
-        cancel: "取消"
-        destroy: "移除"
-        edit: "編輯"
-        submit: "提交"
       confirmations:
-        destroy: "是否確定?"
-      edit:
-        title: "編輯應用程式"
+        destroy: 是否確定?
+      buttons:
+        edit: 編輯
+        destroy: 移除
+        submit: 提交
+        cancel: 取消
+        authorize: 認證
       form:
-        error: "噢!請檢查你表格的錯誤訊息"
+        error: 噢!請檢查你表格的錯誤訊息
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        native_redirect_uri: "使用 %{native_redirect_uri} 作局部測試"
-        redirect_uri: "每行輸入一個 URI"
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        scopes: "請用半形空格分開權限範圍 (scope)。留空表示使用預設的權限範圍"
+        confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
+        redirect_uri: 每行輸入一個 URI
+        blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
+        scopes: 請用半形空格分開權限範圍 (scope)。留空表示使用預設的權限範圍
+      edit:
+        title: 編輯應用程式
       index:
-        name: "名稱"
-        new: "新增應用程式"
-        title: "你的應用程式"
-        callback_url: "回傳網址"
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: 你的應用程式
+        new: 新增應用程式
+        name: 名稱
+        callback_url: 回傳網址
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
           'yes': 'Yes'
           'no': 'No'
       new:
-        title: "新增應用程式"
+        title: 新增應用程式
       show:
-        title: "應用程式︰ %{name}"
-        application_id: "應用程式 UID"
-        secret: "密碼"
-        scopes: "權限範圍"
-        confidential: 'Confidential'
-        callback_urls: "回傳網址"
-        actions: "操作"
-
+        title: 應用程式︰ %{name}
+        application_id: 應用程式 UID
+        secret: 密碼
+        secret_hashed: Secret hashed
+        scopes: 權限範圍
+        confidential: Confidential
+        callback_urls: 回傳網址
+        actions: 操作
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: "批准"
-        deny: "拒絕"
+        authorize: 批准
+        deny: 拒絕
       error:
-        title: "發生錯誤"
+        title: 發生錯誤
       new:
-        able_to: "要求獲取權限"
-        prompt: "應用程式 %{client_name} 要求得到你用戶的部份權限"
-        title: "需要用戶授權"
+        title: 需要用戶授權
+        prompt: 應用程式 %{client_name} 要求得到你用戶的部份權限
+        able_to: 要求獲取權限
       show:
-        title: "授權代碼"
-
+        title: 授權代碼
+      form_post:
+        title: Submit this form
     authorized_applications:
-      buttons:
-        revoke: "取消授權"
       confirmations:
-        revoke: "是否確定要取消授權?"
+        revoke: 是否確定要取消授權?
+      buttons:
+        revoke: 取消授權
       index:
-        application: "應用程式"
-        created_at: "授權於"
+        title: 已獲你授權的程用程式
+        application: 應用程式
+        created_at: 授權於
         date_format: "%Y-%m-%d %H:%M:%S"
-        title: "已獲你授權的程用程式"
-
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: "請求缺少了必要的參數、包含了不支援的參數、或者其他輸入錯誤。"
-        invalid_redirect_uri: "不正確的轉接網址。"
-        unauthorized_client: "用戶程式無權用此方法 (method) 請行這個請求。"
-        access_denied: "資源擁有者或授權伺服器不接受請求。"
-        invalid_scope: "請求的權限範圍 (scope) 不正確、未有定義、或者輸入錯誤。"
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: "認證伺服器遇上未知狀況,令請求無法通過。"
-        temporarily_unavailable: "認證伺服器由於臨時負荷過重或者維護,目前未能處理請求。"
-
-        # Configuration error messages
-        credential_flow_not_configured: "資源擁有者密碼認證程序 (Resource Owner Password Credentials flow) 失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。"
-        resource_owner_authenticator_not_configured: "無法找到資源擁有者,原因是 Doorkeeper.configure.resource_owner_authenticator 沒有設定。"
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: "授權伺服器不支援這個回應類型 (response type)。"
-
-        # Access token errors
-        invalid_client: "用戶程式認證 (Client authentication) 失敗,原因是用戶程式未有登記、沒有指定用戶程式 (client)、或者使用了不支援的認證方法 (method)。"
-        invalid_grant: "授權申請 (authorization grant) 不正確、過期、已被取消,或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。"
-        unsupported_grant_type: "授權伺服器不支援這個授權類型 (grant type)。"
-
+        invalid_request:
+          unknown: 請求缺少了必要的參數、包含了不支援的參數、或者其他輸入錯誤。
+          missing_param: 'Missing required parameter: %{value}.'
+          request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
+        invalid_redirect_uri: 不正確的轉接網址。
+        unauthorized_client: 用戶程式無權用此方法 (method) 請行這個請求。
+        access_denied: 資源擁有者或授權伺服器不接受請求。
+        invalid_scope: 請求的權限範圍 (scope) 不正確、未有定義、或者輸入錯誤。
+        invalid_code_challenge_method: The code challenge method must be plain or S256.
+        server_error: 認證伺服器遇上未知狀況,令請求無法通過。
+        temporarily_unavailable: 認證伺服器由於臨時負荷過重或者維護,目前未能處理請求。
+        credential_flow_not_configured: 資源擁有者密碼認證程序 (Resource Owner Password Credentials flow) 失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。
+        resource_owner_authenticator_not_configured: 無法找到資源擁有者,原因是 Doorkeeper.configure.resource_owner_authenticator 沒有設定。
+        admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
+        unsupported_response_type: 授權伺服器不支援這個回應類型 (response type)。
+        unsupported_response_mode: The authorization server does not support this response mode.
+        invalid_client: 用戶程式認證 (Client authentication) 失敗,原因是用戶程式未有登記、沒有指定用戶程式 (client)、或者使用了不支援的認證方法 (method)。
+        invalid_grant: 授權申請 (authorization grant) 不正確、過期、已被取消,或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。
+        unsupported_grant_type: 授權伺服器不支援這個授權類型 (grant type)。
         invalid_token:
-          expired: "access token 已經過期"
-          revoked: "access token 已被取消"
-          unknown: "access token 不正確"
-
+          revoked: access token 已被取消
+          expired: access token 已經過期
+          unknown: access token 不正確
+        revoke:
+          unauthorized: You are not authorized to revoke this token
+        forbidden_token:
+          missing_scope: Access to this resource requires scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: "已新增應用程式。"
+          notice: 已新增應用程式。
         destroy:
-          notice: "已刪除應用程式。"
+          notice: 已刪除應用程式。
         update:
-          notice: "已更新應用程式。"
+          notice: 已更新應用程式。
       authorized_applications:
         destroy:
-          notice: "已取消應用程式授權。"
-
+          notice: 已取消應用程式授權。
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          applications: "應用程式"
-          oauth2_provider: "OAuth2 供應者"
-          home: "主頁"
+          oauth2_provider: OAuth2 供應者
+          applications: 應用程式
+          home: 主頁
       application:
-        title: "需要 OAuth 授權"
+        title: 需要 OAuth 授權
diff --git a/rails/locales/zh-TW.yml b/rails/locales/zh-TW.yml
index 54521dc..c47e909 100644
--- a/rails/locales/zh-TW.yml
+++ b/rails/locales/zh-TW.yml
@@ -2,138 +2,134 @@ zh-TW:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: '名稱'
-        redirect_uri: '轉向網址'
-        scopes: ~
+        name: 名稱
+        redirect_uri: 轉向網址
     errors:
       models:
         doorkeeper/application:
           attributes:
             redirect_uri:
-              fragment_present: '不能包含片段(#)'
-              invalid_uri: '必須是有效的網址'
-              relative_uri: '必須是絕對的網址'
-              secured_uri: '必須是有 HTTPS/SSL 的網址'
-              forbidden_uri: 'is forbidden by the server.'
+              fragment_present: 不能包含片段(#)
+              invalid_uri: 必須是有效的網址
+              unspecified_scheme: 必須指定 URI scheme
+              relative_uri: 必須是絕對的網址
+              secured_uri: 必須是有 HTTPS/SSL 的網址
+              forbidden_uri: 被伺服器拒絕
             scopes:
-              not_match_configured: "doesn't match configured on the server."
-
+              not_match_configured: 與伺服器設定不符
   doorkeeper:
     applications:
       confirmations:
-        destroy: '確定嗎?'
+        destroy: 確定嗎?
       buttons:
-        edit: '編輯'
-        destroy: '刪除'
-        submit: '送出'
-        cancel: '取消'
-        authorize: '授權'
+        edit: 編輯
+        destroy: 刪除
+        submit: 送出
+        cancel: 取消
+        authorize: 授權
       form:
-        error: 'Whoops! 確認表單內可能的錯誤'
+        error: Whoops! 確認表單內可能的錯誤
       help:
-        confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
-        redirect_uri: '每個網址必須只有一行'
-        blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
-        native_redirect_uri: '使用 %{native_redirect_uri} 作本地端測試'
-        scopes: ~
+        confidential: 應用將被使用在 client secret 可以保持機密的地方。手機原生 app 和 SPA 應被視為無法保持機密。
+        redirect_uri: 每個網址必須只有一行
+        blank_redirect_uri: 如果你將 provider 設定為使用 Client Credentials、Resource Owner Password Credentials、或其他不需要 redirect URI 的 grant type,請將其留空。
+        scopes: scopes 之間要以空格分開。也可以是空的來使用 default scopes。
       edit:
-        title: '編輯應用'
+        title: 編輯應用
       index:
-        title: '你的應用'
-        new: '新應用'
-        name: '名稱'
-        callback_url: '回應網址'
-        actions: 'Actions'
-        confidential: 'Confidential?'
+        title: 你的應用
+        new: 新應用
+        name: 名稱
+        callback_url: 回應網址
+        confidential: Confidential?
+        actions: Actions
         confidentiality:
           'yes': 'Yes'
           'no': 'No'
       new:
-        title: '新應用'
+        title: 新應用
       show:
         title: '應用: %{name}'
-        application_id: '應用 UID'
-        secret: '私鑰'
-        scopes: ~
-        confidential: 'Confidential'
-        callback_urls: '回應網址'
-        actions: '動作'
-
+        application_id: 應用 UID
+        secret: 私鑰
+        secret_hashed: Secret hashed
+        scopes: Scopes
+        confidential: Confidential
+        callback_urls: 回應網址
+        actions: 動作
+        not_defined: Not defined
     authorizations:
       buttons:
-        authorize: '授權'
-        deny: '拒絕'
+        authorize: 授權
+        deny: 拒絕
       error:
-        title: '發生錯誤'
+        title: 發生錯誤
       new:
-        title: '授權需求'
-        prompt: '授權 %{client_name} 使用您的帳戶?'
-        able_to: '這個應用將會'
+        title: 授權需求
+        prompt: 授權 %{client_name} 使用您的帳戶?
+        able_to: 這個應用將會
       show:
-        title: '授權碼'
-
+        title: 授權碼
+      form_post:
+        title: 送出表單
     authorized_applications:
       confirmations:
-        revoke: '確認嗎?'
+        revoke: 確認嗎?
       buttons:
-        revoke: '撤銷'
+        revoke: 撤銷
       index:
-        title: '你授權的應用'
-        application: '應用'
-        created_at: '建立時間'
-        date_format: '%Y-%m-%d %H:%M:%S'
-
+        title: 你授權的應用
+        application: 應用
+        created_at: 建立時間
+        date_format: "%Y-%m-%d %H:%M:%S"
     pre_authorization:
-      status: 'Pre-authorization'
-
+      status: Pre-authorization
     errors:
       messages:
-        # Common error messages
-        invalid_request: '這個請求少了一個必要的參數,可能是不支援的參數值或是其他格式錯誤'
-        invalid_redirect_uri: '這個轉向網址無效'
-        unauthorized_client: '這個應用並無被授權可以執行這個請求的方法'
-        access_denied: '擁有者或認證伺服器拒絕此需求'
-        invalid_scope: '請求範圍無效、未知或格式錯誤'
-        invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
-        server_error: '授權伺服器因不明原因無法完成此請求'
-        temporarily_unavailable: '授權伺服器超載或維護中,無法處理此項請求'
-
-        # Configuration error messages
-        credential_flow_not_configured: '資源擁有者密碼認證流程失敗,因為 Doorkeeper.configure.resource_owner_from_credentials 並未設定'
-        resource_owner_authenticator_not_configured: '資源擁有者查詢失敗,因為 Doorkeeper.configure.resource_owner_authenticator 並未設定'
-        admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
-
-        # Access grant errors
-        unsupported_response_type: '授權伺服器並不支援此回應'
-
-        # Access token errors
-        invalid_client: '由於未知、不支援或是沒有客戶端認證而失敗'
-        invalid_grant: '授權許可型態無效,或者轉向網址的授權許可無效、過期或已被撤銷'
-        unsupported_grant_type: '授權伺服器不支援此授權許可型態'
-
+        invalid_request:
+          unknown: 這個請求少了一個必要的參數,可能是不支援的參數值或是其他格式錯誤
+          missing_param: '缺少必要的參數: %{value}.'
+          request_not_authorized: 請求需要被授權。可能是授權缺少必要參數、或是參數為無效數值
+        invalid_redirect_uri: 這個轉向網址無效
+        unauthorized_client: 這個應用並無被授權可以執行這個請求的方法
+        access_denied: 擁有者或認證伺服器拒絕此需求
+        invalid_scope: 請求範圍無效、未知或格式錯誤
+        invalid_code_challenge_method: code challenge method 必須是純文字或 S256
+        server_error: 授權伺服器因不明原因無法完成此請求
+        temporarily_unavailable: 授權伺服器超載或維護中,無法處理此項請求
+        credential_flow_not_configured: 資源擁有者密碼認證流程失敗,因為 Doorkeeper.configure.resource_owner_from_credentials 並未設定
+        resource_owner_authenticator_not_configured: 資源擁有者查詢失敗,因為 Doorkeeper.configure.resource_owner_authenticator 並未設定
+        admin_authenticator_not_configured: 禁止進入 admin 後台,因為 Doorkeeper.configure.admin_authenticator 並未設定.
+        unsupported_response_type: 不支援回應此 type.
+        unsupported_response_mode: 不支援回應此 mode.
+        invalid_client: 由於未知、不支援或是沒有客戶端認證而失敗
+        invalid_grant: 授權許可型態無效,或者轉向網址的授權許可無效、過期或已被撤銷
+        unsupported_grant_type: 授權伺服器不支援此授權許可型態
         invalid_token:
-          revoked: "Access Token 已被撤銷"
-          expired: "Access Token 已過期"
-          unknown: "Access Token 是無效的"
-
+          revoked: Access Token 已被撤銷
+          expired: Access Token 已過期
+          unknown: Access Token 是無效的
+        revoke:
+          unauthorized: 你並沒有被授權可撤銷此 token
+        forbidden_token:
+          missing_scope: 取用此資源必須要有 scope "%{oauth_scopes}".
     flash:
       applications:
         create:
-          notice: '應用已建立'
+          notice: 應用已建立
         destroy:
-          notice: '應用已刪除'
+          notice: 應用已刪除
         update:
-          notice: '應用已更新'
+          notice: 應用已更新
       authorized_applications:
         destroy:
-          notice: '應用已撤銷'
-
+          notice: 應用已撤銷
     layouts:
       admin:
-        title: 'Doorkeeper'
+        title: Doorkeeper
         nav:
-          oauth2_provider: 'OAuth2 Provider'
-          applications: '應用'
-          home: 'Home'
+          oauth2_provider: OAuth2 Provider
+          applications: 應用
+          home: Home
       application:
-        title: 'OAuth 認證需求'
+        title: OAuth 認證需求
\ No newline at end of file

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/lib/doorkeeper-i18n.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/lib/doorkeeper-i18n/railtie.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/log/development.log
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/be.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/bg.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/ca.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/cs.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/da.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/de.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/en.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/es.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/fi.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/fr.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/id.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/it.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/ja.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/ko.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/nb.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/nl.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/pt-BR.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/ru.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/sk.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/tr.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/zh-CN.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/zh-HK.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.2.6/rails/locales/zh-TW.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/doorkeeper-i18n-5.2.6.gemspec

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/lib/doorkeeper-i18n.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/lib/doorkeeper-i18n/railtie.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/log/development.log
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/be.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/ca.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/cs.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/de.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/en.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/es.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/fi.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/fr.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/it.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/ja.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/ko.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/nb.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/nl.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/pt-BR.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/ru.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/sk.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/zh-CN.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/zh-HK.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/doorkeeper-i18n-5.0.2/rails/locales/zh-TW.yml
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/doorkeeper-i18n-5.0.2.gemspec

No differences were encountered in the control files

More details

Full run details