diff options
author | Christian Blais <christ.blais@gmail.com> | 2018-03-04 21:29:54 -0500 |
---|---|---|
committer | Christian Blais <christ.blais@gmail.com> | 2018-03-05 08:41:49 -0500 |
commit | f58e2dd095e2e9e4e42e6d7af229f87e70fd5427 (patch) | |
tree | 61c87e7320bbacf98d3dc61b62dcf64e5d4faa0a /activesupport/lib | |
parent | ae2d36cf21281f4b720332a086b021d867e80084 (diff) | |
download | rails-f58e2dd095e2e9e4e42e6d7af229f87e70fd5427.tar.gz rails-f58e2dd095e2e9e4e42e6d7af229f87e70fd5427.tar.bz2 rails-f58e2dd095e2e9e4e42e6d7af229f87e70fd5427.zip |
`ActiveSupport::Inflector#ordinal` and `ActiveSupport::Inflector#ordinalize`
now support translations through I18n.
{
fr: {
number: {
nth: {
ordinals: lambda do |_key, number:, **_options|
if number.to_i.abs == 1
'er'
else
'e'
end
end,
ordinalized: lambda do |_key, number:, **_options|
"#{number}#{ActiveSupport::Inflector.ordinal(number)}"
end
}
}
}
}
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/i18n.rb | 1 | ||||
-rw-r--r-- | activesupport/lib/active_support/inflector/methods.rb | 15 | ||||
-rw-r--r-- | activesupport/lib/active_support/locale/en.rb | 28 |
3 files changed, 31 insertions, 13 deletions
diff --git a/activesupport/lib/active_support/i18n.rb b/activesupport/lib/active_support/i18n.rb index d60b3eff30..39dab1cc71 100644 --- a/activesupport/lib/active_support/i18n.rb +++ b/activesupport/lib/active_support/i18n.rb @@ -13,3 +13,4 @@ require "active_support/lazy_load_hooks" ActiveSupport.run_load_hooks(:i18n) I18n.load_path << File.expand_path("locale/en.yml", __dir__) +I18n.load_path << File.expand_path("locale/en.rb", __dir__) diff --git a/activesupport/lib/active_support/inflector/methods.rb b/activesupport/lib/active_support/inflector/methods.rb index 7e782e2a93..339b93b8da 100644 --- a/activesupport/lib/active_support/inflector/methods.rb +++ b/activesupport/lib/active_support/inflector/methods.rb @@ -341,18 +341,7 @@ module ActiveSupport # ordinal(-11) # => "th" # ordinal(-1021) # => "st" def ordinal(number) - abs_number = number.to_i.abs - - if (11..13).include?(abs_number % 100) - "th" - else - case abs_number % 10 - when 1; "st" - when 2; "nd" - when 3; "rd" - else "th" - end - end + I18n.translate("number.nth.ordinals", number: number) end # Turns a number into an ordinal string used to denote the position in an @@ -365,7 +354,7 @@ module ActiveSupport # ordinalize(-11) # => "-11th" # ordinalize(-1021) # => "-1021st" def ordinalize(number) - "#{number}#{ordinal(number)}" + I18n.translate("number.nth.ordinalized", number: number) end private diff --git a/activesupport/lib/active_support/locale/en.rb b/activesupport/lib/active_support/locale/en.rb new file mode 100644 index 0000000000..26c2280c95 --- /dev/null +++ b/activesupport/lib/active_support/locale/en.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +{ + en: { + number: { + nth: { + ordinals: lambda do |_key, number:, **_options| + abs_number = number.to_i.abs + + if (11..13).cover?(abs_number % 100) + "th" + else + case abs_number % 10 + when 1 then "st" + when 2 then "nd" + when 3 then "rd" + else "th" + end + end + end, + + ordinalized: lambda do |_key, number:, **_options| + "#{number}#{ActiveSupport::Inflector.ordinal(number)}" + end + } + } + } +} |