間違った I18n ロケールがランダムにロードされる
概要
場合によっては、予期される日本語の設定の代わりに英語の設定がロードされることがありますが、これは実際には存在せず、default_locale としてもフォールバックとしてもどこにも設定されていません。
問題は、それが時折/ランダムに発生し、以前は再現できなかったのですが、今日では非常に頻繁に発生するようになったということです。つまり、同じページに留まって F5 キーを押すだけで、平均して約 50/50% の EN/JAP ロケールが発生します (パターンはなく、ランダムです)。 問題は、サイトには ENG ロケールがまったく実装されていないため、ENG ロケールをロードしようとすると、理解できるエラーが発生して失敗します。
ERROR -- : .... translation missing: en.some_translation...
そして、これが発生する唯一のエラーです。
ただし、ENG ロケールをロードしようとしてもすべきではありません。 ロケールは application.rb にしっかりと設定されています。
config.i18n.default_locale = :ja
config.i18n.locale = :ja
Production.rb には次のものしか含まれていないため、この設定を上書きしないでください。
config.i18n.fallbacks = false
それは本番環境でのみ発生します。 「god restart app_name」でしばらくは直りますが、時間が経つとさらに発生するようですが、はっきりとは言えません。 ENG ロケールで発生するエラーは、default_locale を次のように設定した場合と同じであるようです。
config.i18n.default_locale = :en
しかし、「default_locale」のアプリケーション コードを grep しましたが、それを変更するコードが見つかりませんでした。何かの宝石が原因なのでしょうか?
Rails バージョン: 4.2.7.1 I18n バージョン: 0.7.0
現時点で何かヒントがあれば幸いです。
解決策
:en ロケールが読み込まれていた理由がわかりました。
config.i18n.fallbacks は実際にはコードの後半で true に設定されています。 そして、config.i18n.available_locales が application.rb で明示的に設定されていなかったため、I18n gem には :en locale が含まれており、config.i18n.locale と config.i18n.default_locale で設定された :ja locale が失敗したときに、ロード時に (理由はまだ不明ですが) :en ロケールにフォールバックしようとしたため、問題が発生しました。
残念ながら、:js ロケールの読み込みに失敗する理由はまだわかりませんが、それはまったく別の問題だと思います。
ヒントをありがとう!