bundle install(rails new)すると”HEADS UP! i18n 1.1 changed fallbacks to exclude default locale."と言われる

はじめに

2019年、新年を迎えて早々だけど、時間のあるこの正月休みの間に何か創作しようと思い立った。
またしても数ヶ月ぶりにRailsを触ってみようと思った。
とりあえずrails newした。

そしたらi18n絡みで”that may break your application"とかいうメッセージが出力された。こわい。

環境

Rails 5.1.6.1

やったことと出力されたメッセージ

rails newをするとbundle installでi18nというgemがインストールされる。
今回はv1.4がインストールされているが、この際に以下のようなメッセージが出力された。

$ rails new hoge
(中略)
         run  bundle install
(中略)
Fetching i18n 1.4.0
Installing i18n 1.4.0
(中略)
Post-install message from i18n:

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

これはなんなのか

出力メッセージによると、i18nのv1.1から、config.i18n.fallbacksという設定項目に関して破壊的な変更がなされたようだ。

  • config.i18n.fallbacksとはなんなのか
    訳語が存在しないときのフォールバック動作を規定する設定。要するに、locale設定に応じた訳語を表示したいんだけど、対応する訳語が定義されていない場合に、(代わりに)どの言語で表示するかという設定。

Railsガイドによると、以下のように使うようだ。

# デフォルトのロケールをフォールバック先として使う場合
config.i18n.fallbacks = true
# ロケールの配列をフォールバック先に使う場合は次のようにします。
config.i18n.fallbacks = [:tr, :en]

ところが、上記設定例の前者の書き方がv1.1.0からは正しくなくて、以下のように書かなければならなくなった。

config.i18n.fallbacks = [I18n.default_locale]

何をすべきか

メッセージに書かれているまんまですが、設定ファイルを以下のように変更。

  • 変更対象ファイル [your_app_root]/config/environments/production.rb
  • 変更前
config.i18n.fallbacks = true
  • 変更後
config.i18n.fallbacks = [I18n.default_locale]

rails newの度に毎回これをやらないといけないのか

If you're using I18n (>= 1.1.0) and Rails (< 5.2.2)

と書かれていることから5.2.2では治っているのでしょう。きっと。