diff --git a/lib/i18n/backend/base.rb b/lib/i18n/backend/base.rb index 043d8460..668a4221 100644 --- a/lib/i18n/backend/base.rb +++ b/lib/i18n/backend/base.rb @@ -62,6 +62,9 @@ def exists?(locale, key) # format string. Takes a key from the date/time formats translations as # a format argument (e.g., :short in :'date.formats'). def localize(locale, object, format = :default, options = {}) + if object.nil? && options.include?(:default) + return options[:default] + end raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime) if Symbol === format diff --git a/lib/i18n/tests/localization/date.rb b/lib/i18n/tests/localization/date.rb index a7234752..fba5fe5c 100644 --- a/lib/i18n/tests/localization/date.rb +++ b/lib/i18n/tests/localization/date.rb @@ -51,6 +51,10 @@ def setup assert_nothing_raised { I18n.l(@date, options.freeze) } end + test "localize Date: given nil with default value it returns default" do + assert_equal 'default', I18n.l(nil, :default => 'default') + end + test "localize Date: given nil it raises I18n::ArgumentError" do assert_raise(I18n::ArgumentError) { I18n.l(nil) } end diff --git a/test/i18n_test.rb b/test/i18n_test.rb index ed3d9871..728e7ed9 100644 --- a/test/i18n_test.rb +++ b/test/i18n_test.rb @@ -269,6 +269,10 @@ def setup assert_raise(I18n::ArgumentError) { I18n.l nil } end + test "localize given nil and default returns default" do + assert_equal nil, I18n.l(nil, :default => nil) + end + test "localize given an Object raises an I18n::ArgumentError" do assert_raise(I18n::ArgumentError) { I18n.l Object.new } end