Rails 7.0~8.0あたりでのi18nの設定はどうあるべきか

対象のRailsバージョン: 7.0〜8.0くらい

結論

application.rb は以下の設定でいいと思います。 en も必要なければjaだけでOK.

config.i18n.available_locales = %i[en ja]
config.i18n.default_locale = :ja

config.i18n.fallbacks は、自動生成された produciton.rbconfig.i18n.fallbacks = true が入っているので以下のように評価されます。 これで、 en のリソースがなければ ja のリソースが使われます。

irb(main):001> I18n.fallbacks
=> {:en=>[:en, :ja], :ja=>[:ja]}

細かいところいろいろ

config.i18n.raise_on_missing_translations

デフォルト値はfalse なので、development/testでは true にした方がいいです。

config.i18n.load_path はネストしたリソースも読み込む

Railsガイドに以下の記述があるけど、これは誤りで、v7.0からlocales配下のネストしたリソースも自動で読み込まれます。

The default locale loading mechanism in Rails does not load locale files in nested dictionaries, like we have here. So, for this to work, we must explicitly tell Rails to look further:

Railsのデフォルトのロケール読み込みメカニズムでは、ここで使っているようなネストした辞書に含まれるロケールファイルを読み込みません。そのため、Railsでこれらが読み込まれるようにするためには、以下のように明示的に指定する必要があります。

# config/application.rb
config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml}")]

ドキュメント修正のPRがすでにマージされています。 Remove note about nested locale folders configuration by pixeltrix · Pull Request #53966 · rails/rails

i18nバックエンドの実体は ruby-i18n/i18n

Railsi18nバックエンドは ruby-i18n/i18n: Internationalization (i18n) library for Ruby 。なので、ルックアップの挙動や詳細を知りたい場合はこのリポジトリのコードを読むのがいいです。