🌎
【Rails】ActiveSupportのordinalizeを使うとtranslation missing ja~
前提
RailsのActiveSupport::Inflectorには便利なメソッドが用意されていて、そのひとつにordinalizeがある。
数字.ordinalizeを実行すると、以下のような文字列を返してくれる。
irb(main):001:0> 1.ordinalize
=> "1st"
irb(main):002:0> 2.ordinalize
=> "2nd"
irb(main):003:0> 3.ordinalize
=> "3rd"
Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
ordinalize (ActiveSupport::Inflector) - APIdock
起きたこと
ordinalizeを実行すると、以下のようなエラーメッセージが返ってきた。
irb(main):001:0> 1.ordinalize
=> "translation missing: ja.number.nth.ordinalized"
調べた結果、config/application.rbにconfig.i18n.default_locale = :jaを記述していると上記のエラーが発生することがわかった。
Railsのソースコードを見ると、ordinalizeはI18n.translateを呼んでいる。
解決
そもそもst, nd, thなどは英語特有の文字なので、この場合は英語の訳文を見て欲しい。
よって、config.i18n.fallbacks = %i[ja en]をconfig/application.rbに追記する。
config/application.rb
module ScaffoldTest
class Application < Rails::Application
config.load_defaults 7.0
config.i18n.default_locale = :ja
config.i18n.fallbacks = %i[ja en]
end
end
これを設定することで、日本語の訳文がないときに英語のほうを見てくれる。
irb(main):001:0> 1.ordinalize
=> "1st"
今回の学び:困ったときはRailsガイド
Discussion