Made i18n simple backend able to store false values (and not confuse them with nil or lack of value)
Implemented support.array.skip_last_comma i18n key for Array#to_sentence, this also tests the ability to store false. Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
0dea211f44
commit
d69b4b7bea
@ -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
|
||||
|
@ -29,3 +29,4 @@ en-US:
|
||||
support:
|
||||
array:
|
||||
sentence_connector: "and"
|
||||
skip_last_comma: false
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user