diff --git a/activesupport/lib/active_support/core_ext/array/conversions.rb b/activesupport/lib/active_support/core_ext/array/conversions.rb index e67b719ddb0fc8b8ddf1d8a2684f6afa2183c7a4..11c128da22f77406396d66cbcd5b576233f2cdfd 100644 --- a/activesupport/lib/active_support/core_ext/array/conversions.rb +++ b/activesupport/lib/active_support/core_ext/array/conversions.rb @@ -11,7 +11,8 @@ def to_sentence(options = {}) options.assert_valid_keys(:connector, :skip_last_comma, :locale) default = I18n.translate(:'support.array.sentence_connector', :locale => options[:locale]) - options.reverse_merge! :connector => default, :skip_last_comma => false + default_skip_last_comma = I18n.translate(:'support.array.skip_last_comma', :locale => options[:locale]) + options.reverse_merge! :connector => default, :skip_last_comma => default_skip_last_comma options[:connector] = "#{options[:connector]} " unless options[:connector].nil? || options[:connector].strip == '' case length diff --git a/activesupport/lib/active_support/locale/en-US.yml b/activesupport/lib/active_support/locale/en-US.yml index 60ecb1d42a37d4b77e7f55441f0c927db6c66ba5..c31694b9d6dea1f45d2fa956b5b8abe99c46b0b0 100644 --- a/activesupport/lib/active_support/locale/en-US.yml +++ b/activesupport/lib/active_support/locale/en-US.yml @@ -29,3 +29,4 @@ en-US: support: array: sentence_connector: "and" + skip_last_comma: false diff --git a/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n/backend/simple.rb b/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n/backend/simple.rb index 2dbaf8a405c40d98d613d97e6e82c77089b47de4..30e3655b7bcf9492020b964deebb9f5e3936a07f 100644 --- a/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n/backend/simple.rb +++ b/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n/backend/simple.rb @@ -30,7 +30,13 @@ def translate(locale, key, options = {}) options.delete(:default) values = options.reject{|name, value| reserved.include? name } - entry = lookup(locale, key, scope) || default(locale, default, options) || raise(I18n::MissingTranslationData.new(locale, key, options)) + entry = lookup(locale, key, scope) + if entry.nil? + entry = default(locale, default, options) + if entry.nil? + raise(I18n::MissingTranslationData.new(locale, key, options)) + end + end entry = pluralize locale, entry, count entry = interpolate locale, entry, values entry @@ -83,7 +89,13 @@ def lookup(locale, key, scope = []) return unless key init_translations unless initialized? keys = I18n.send :normalize_translation_keys, locale, key, scope - keys.inject(translations){|result, k| result[k.to_sym] or return nil } + keys.inject(translations) do |result, k| + if (x = result[k.to_sym]).nil? + return nil + else + x + end + end end # Evaluates a default translation. diff --git a/activesupport/test/i18n_test.rb b/activesupport/test/i18n_test.rb index 4b17e3c52368d2994f724faff38775f4ef74048b..db5bd5e088a38675153ce1b38adea9e38d6b7124 100644 --- a/activesupport/test/i18n_test.rb +++ b/activesupport/test/i18n_test.rb @@ -72,4 +72,20 @@ def test_time_am def test_time_pm assert_equal 'pm', I18n.translate(:'time.pm') end + + def test_sentence_connector + assert_equal 'and', I18n.translate(:'support.array.sentence_connector') + end + + def test_skip_last_comma + assert_equal false, I18n.translate(:'support.array.skip_last_comma') + end + + def test_to_sentence + assert_equal 'a, b, and c', %w[a b c].to_sentence + I18n.backend.store_translations 'en-US', :support => { :array => { :skip_last_comma => true } } + assert_equal 'a, b and c', %w[a b c].to_sentence + ensure + I18n.backend.store_translations 'en-US', :support => { :array => { :skip_last_comma => false } } + end end