🌎
【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