diff --git a/actionmailbox/test/dummy/config/environments/development.rb b/actionmailbox/test/dummy/config/environments/development.rb
index 9bb8731d7a..6ecb772203 100644
--- a/actionmailbox/test/dummy/config/environments/development.rb
+++ b/actionmailbox/test/dummy/config/environments/development.rb
@@ -55,7 +55,7 @@ Rails.application.configure do
config.assets.quiet = true
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/actionmailbox/test/dummy/config/environments/test.rb b/actionmailbox/test/dummy/config/environments/test.rb
index 8c4c78505f..d46aad6b48 100644
--- a/actionmailbox/test/dummy/config/environments/test.rb
+++ b/actionmailbox/test/dummy/config/environments/test.rb
@@ -42,7 +42,7 @@ Rails.application.configure do
config.active_support.deprecation = :stderr
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index 5b4cb30a0b..73d93627f9 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1,3 +1,11 @@
+* Add raise_on_missing_translations support for controllers.
+
+ This configuration determines whether an error should be raised for missing translations.
+ It can be enabled through `config.i18n.raise_on_missing_translations`. Note that described
+ configuration also affects raising error for missing translations in views.
+
+ *fatkodima*
+
* Added `compact` and `compact!` to `ActionController::Parameters`.
*Eugene Kenny*
diff --git a/actionpack/lib/abstract_controller/translation.rb b/actionpack/lib/abstract_controller/translation.rb
index f109801780..354e557711 100644
--- a/actionpack/lib/abstract_controller/translation.rb
+++ b/actionpack/lib/abstract_controller/translation.rb
@@ -4,6 +4,8 @@ require "active_support/core_ext/symbol/starts_ends_with"
module AbstractController
module Translation
+ mattr_accessor :raise_on_missing_translations, default: false
+
# Delegates to I18n.translate. Also aliased as t.
#
# When the given key starts with a period, it will be scoped by the current
@@ -20,7 +22,9 @@ module AbstractController
options[:default] = defaults.flatten
key = "#{path}.#{action_name}#{key}"
end
- I18n.translate(key, **options)
+
+ i18n_raise = options.fetch(:raise, self.raise_on_missing_translations)
+ I18n.translate(key, **options, raise: i18n_raise)
end
alias :t :translate
diff --git a/actionpack/test/abstract/translation_test.rb b/actionpack/test/abstract/translation_test.rb
index 7138044c03..2fea7988bd 100644
--- a/actionpack/test/abstract/translation_test.rb
+++ b/actionpack/test/abstract/translation_test.rb
@@ -43,6 +43,22 @@ module AbstractController
assert_respond_to @controller, :l
end
+ def test_raises_missing_translation_message_with_raise_config_option
+ AbstractController::Translation.raise_on_missing_translations = true
+
+ assert_raise(I18n::MissingTranslationData) do
+ @controller.t("translations.missing")
+ end
+ ensure
+ AbstractController::Translation.raise_on_missing_translations = false
+ end
+
+ def test_raises_missing_translation_message_with_raise_option
+ assert_raise(I18n::MissingTranslationData) do
+ @controller.t(:"translations.missing", raise: true)
+ end
+ end
+
def test_lazy_lookup
@controller.stub :action_name, :index do
assert_equal "bar", @controller.t(".foo")
diff --git a/actiontext/test/dummy/config/environments/development.rb b/actiontext/test/dummy/config/environments/development.rb
index 9bb8731d7a..6ecb772203 100644
--- a/actiontext/test/dummy/config/environments/development.rb
+++ b/actiontext/test/dummy/config/environments/development.rb
@@ -55,7 +55,7 @@ Rails.application.configure do
config.assets.quiet = true
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/actiontext/test/dummy/config/environments/test.rb b/actiontext/test/dummy/config/environments/test.rb
index 8c4c78505f..d46aad6b48 100644
--- a/actiontext/test/dummy/config/environments/test.rb
+++ b/actiontext/test/dummy/config/environments/test.rb
@@ -42,7 +42,7 @@ Rails.application.configure do
config.active_support.deprecation = :stderr
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md
index 14382a33bd..4197c4c021 100644
--- a/actionview/CHANGELOG.md
+++ b/actionview/CHANGELOG.md
@@ -1,3 +1,11 @@
+* Deprecate `config.action_view.raise_on_missing_translations` in favor of
+ `config.i18n.raise_on_missing_translations`.
+
+ New generalized configuration option now determines whether an error should be raised
+ for missing translations in controllers and views.
+
+ *fatkodima*
+
* Instrument layout rendering in `TemplateRenderer#render_with_layout` as `render_layout.action_view`, and include (when necessary) the layout's virtual path in notification payloads for collection and partial renders.
*Zach Kemp*
diff --git a/actionview/lib/action_view/railtie.rb b/actionview/lib/action_view/railtie.rb
index 5744b57a83..70491c27d9 100644
--- a/actionview/lib/action_view/railtie.rb
+++ b/actionview/lib/action_view/railtie.rb
@@ -43,6 +43,12 @@ module ActionView
config.after_initialize do |app|
ActiveSupport.on_load(:action_view) do
app.config.action_view.each do |k, v|
+ if k == :raise_on_missing_translations
+ ActiveSupport::Deprecation.warn \
+ "action_view.raise_on_missing_translations is deprecated and will be removed in Rails 6.2. " \
+ "Set i18n.raise_on_missing_translations instead. " \
+ "Note that this new setting also affects how missing translations are handled in controllers."
+ end
send "#{k}=", v
end
end
diff --git a/activestorage/test/dummy/config/environments/development.rb b/activestorage/test/dummy/config/environments/development.rb
index d114429300..71a0ff6d2b 100644
--- a/activestorage/test/dummy/config/environments/development.rb
+++ b/activestorage/test/dummy/config/environments/development.rb
@@ -44,7 +44,7 @@ Rails.application.configure do
config.assets.quiet = true
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/activestorage/test/dummy/config/environments/test.rb b/activestorage/test/dummy/config/environments/test.rb
index fa8f2dcb59..ad60d927e1 100644
--- a/activestorage/test/dummy/config/environments/test.rb
+++ b/activestorage/test/dummy/config/environments/test.rb
@@ -34,7 +34,7 @@ Rails.application.configure do
config.action_controller.allow_forgery_protection = false
# Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames
diff --git a/activesupport/lib/active_support/i18n_railtie.rb b/activesupport/lib/active_support/i18n_railtie.rb
index 2eb4dee947..394b67a6eb 100644
--- a/activesupport/lib/active_support/i18n_railtie.rb
+++ b/activesupport/lib/active_support/i18n_railtie.rb
@@ -48,6 +48,8 @@ module I18n
app.config.i18n.load_path.unshift(*value.flat_map(&:existent))
when :load_path
I18n.load_path += value
+ when :raise_on_missing_translations
+ forward_raise_on_missing_translations_config(app)
else
I18n.send("#{setting}=", value)
end
@@ -73,6 +75,16 @@ module I18n
@i18n_inited = true
end
+ def self.forward_raise_on_missing_translations_config(app)
+ ActiveSupport.on_load(:action_view) do
+ self.raise_on_missing_translations = app.config.i18n.raise_on_missing_translations
+ end
+
+ ActiveSupport.on_load(:action_controller) do
+ AbstractController::Translation.raise_on_missing_translations = app.config.i18n.raise_on_missing_translations
+ end
+ end
+
def self.include_fallbacks_module
I18n.backend.class.include(I18n::Backend::Fallbacks)
end
diff --git a/guides/source/configuring.md b/guides/source/configuring.md
index 34ccf28f21..7dfc40c144 100644
--- a/guides/source/configuring.md
+++ b/guides/source/configuring.md
@@ -348,6 +348,9 @@ All these configuration options are delegated to the `I18n` library.
* `config.i18n.load_path` sets the path Rails uses to look for locale files. Defaults to `config/locales/*.{yml,rb}`.
+* `config.i18n.raise_on_missing_translations` determines whether an error should be raised for missing translations
+in controllers and views. This defaults to `false`.
+
* `config.i18n.fallbacks` sets fallback behavior for missing translations. Here are 3 usage examples for this option:
* You can set the option to `true` for using default locale as fallback, like so:
@@ -654,9 +657,6 @@ Defaults to `'signed cookie'`.
The default setting is `true`, which uses the partial at `/admin/articles/_article.erb`. Setting the value to `false` would render `/articles/_article.erb`, which is the same behavior as rendering from a non-namespaced controller such as `ArticlesController`.
-* `config.action_view.raise_on_missing_translations` determines whether an
- error should be raised for missing translations. This defaults to `false`.
-
* `config.action_view.automatically_disable_submit_tag` determines whether
`submit_tag` should automatically disable on click, this defaults to `true`.
diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
index ec6246f0e2..555c975cbf 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
@@ -72,7 +72,7 @@ Rails.application.configure do
<%- end -%>
# Raises error for missing translations.
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true
diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
index 68ecdc83a2..43aff9c405 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
@@ -62,7 +62,7 @@ Rails.application.configure do
config.active_support.disallowed_deprecation_warnings = []
# Raises error for missing translations.
- # config.action_view.raise_on_missing_translations = true
+ # config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names
# config.action_view.annotate_rendered_view_with_filenames = true