Rails I18n fallback locales

Updated . Posted . Visible to the public. Repeats.

When you need to create a locale for a language variant (like Austrian for German), you probably don't want to duplicate your entire de.yml file only to change a few minor exceptions for our Austrian friends.

Luckily, the I18n gem used by Rails has a fallback feature Show archive.org snapshot where you can make one locale file fall back to another if no translation is available.

In the example above you would have a config/locales/de_DE.yml:

de_DE:
  # hundreds of translations here

... and another locale config/locales/de_AT.yml:

de_AT:
  # only a handful exceptions here

Now write the following lines to config/initializers/i18n.rb to make de_AT fall back to de_DE:

require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
I18n.fallbacks.map('de_AT' => 'de_DE')

Check if a key is defined in the current locale (without fallback)

Do this:

I18n.exists?('my.key', fallback: false)

Rails 2

For Rails 2.3.11 you need to upgrade your project to use the I18n gem by adding this to the top of your Gemfile:

gem 'i18n'

Then run

bundle install
Henning Koch
Last edit
Henning Koch
Keywords
swiss, switzerland, at, ch
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2011-07-28 10:51)