From 4104295c885585c4da0f4086380af0aa90928575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Thu, 26 Oct 2017 14:08:56 -0400 Subject: [PATCH] Keep the translation missing message when default is not nil When either the key and the all the defaults have missing translation we should be showing the original key in the translation missing message. Before this commit we were showing a translation missing error in the "no key" key. This commit fixes a regression introduced in #387. --- lib/i18n/backend/fallbacks.rb | 7 ++++--- test/backend/fallbacks_test.rb | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/i18n/backend/fallbacks.rb b/lib/i18n/backend/fallbacks.rb index f83bfc30..a3badaea 100644 --- a/lib/i18n/backend/fallbacks.rb +++ b/lib/i18n/backend/fallbacks.rb @@ -37,8 +37,7 @@ module Fallbacks def translate(locale, key, options = {}) return super unless options.fetch(:fallback, true) return super if options[:fallback_in_progress] - original_default = options[:default] - extract_non_symbol_default!(options) + default = extract_non_symbol_default!(options) if options[:default] begin options[:fallback_in_progress] = true @@ -56,7 +55,9 @@ def translate(locale, key, options = {}) options.delete(:fallback_in_progress) end - return super(locale, nil, options.merge(:default => original_default)) if options.key?(:default) + return if options.key?(:default) && options[:default].nil? + + return super(locale, nil, options.merge(:default => default)) if default throw(:exception, I18n::MissingTranslation.new(locale, key, options)) end diff --git a/test/backend/fallbacks_test.rb b/test/backend/fallbacks_test.rb index 23e47131..a220c038 100644 --- a/test/backend/fallbacks_test.rb +++ b/test/backend/fallbacks_test.rb @@ -64,6 +64,10 @@ def setup assert_nil I18n.t(:missing_bar, :locale => :'de-DE', :default => nil) end + test "returns the translation missing message if the default is also missing" do + assert_equal 'translation missing: de-DE.missing_bar', I18n.t(:missing_bar, :locale => :'de-DE', :default => [:missing_baz]) + end + test "returns the :'de-DE' default :baz translation for a missing :'de-DE' when defaults contains Symbol" do assert_equal 'Baz in :de-DE', I18n.t(:missing_foo, :locale => :'de-DE', :default => [:baz, "Default Bar"]) end