This guide is valid for i18n version 0.7.0+ and Rails 4.1+
Strangely enough enabling custom locale fallbacks is harder than it should be. Here’s what you need to enable custom locale fallbacks with i18n gem.
First, you need to set config.i18n.fallbacks = true
for all environments in a Rails application (config/environments/*.rb
).
Then you need to have this in your config/application.rb
:
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :en
# Enforce available locales
config.i18n.enforce_available_locales = true
# Custom I18n fallbacks
config.after_initialize do
I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end
The above will enable custom fallbacks from at
and ch
locales to the German language and from gb
locale to English. The enforce_available_locales
bit is optional.
If you also use i18n-js to have your translated phrases available in javascript, here’s the exemplary fallbacks snippet you need to put inside your javascript code:
I18n.locales["at"] = ["de", "en"]
I18n.locales["ch"] = ["de", "en"]
I18n.locales["gb"] = ["en"]