これを正確に達成するために、私はイニシャライザを持っています
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
詳細については、ソースコードを参照してください。
編集:
これは、ActionView LookupContextに厄介なバグがあり、ローカライズされたビューでは機能しないことを思い出させます(ただし、ロケールファイルでは正しく機能します)。まだ修正されていないようです。基本的に、ローカライズされたビュー(たとえば、長さのためにロケールファイルに格納するのに適さないヘルプページ)がある場合、fr-CAロケールはhelp.fr.html.erbというビューにフォールバックしません。ファイルにhelp.fr-CA.html.erbという名前を付けるか、これを実行して、LookupContextに別の初期化子をモンキーパッチします。
module ActionView
class LookupContext
# Override locale= to also set the I18n.locale. If the current I18n.config object responds
# to original_config, it means that it's has a copy of the original I18n configuration and it's
# acting as proxy, which we need to skip.
def locale=(value)
if value
config = I18n.config.respond_to?(:original_config) ? I18n.config.original_config : I18n.config
config.locale = value[0,2] # only use first part of the locale in lookups
end
super(@skip_default_locale ? I18n.locale : default_locale)
end
end
end
別の編集:パッチはかなり粗雑であり、完全なロケールルックアップを壊し、言語だけを対象としていることに注意してください。完全に一致するビュー(言語-地域)も必要な場合は、私のコードを改善する必要があります!