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の度に毎回これをやらないといけないのか
と書かれていることから5.2.2では治っているのでしょう。きっと。