module I18n::Backend::Fallbacks
Public Instance Methods
exists?(locale, key, options = EMPTY_HASH)
click to toggle source
Calls superclass method
# File lib/i18n/backend/fallbacks.rb, line 76 def exists?(locale, key, options = EMPTY_HASH) return super unless options.fetch(:fallback, true) I18n.fallbacks[locale].each do |fallback| begin return true if super(fallback, key) rescue I18n::InvalidLocale # we do nothing when the locale is invalid, as this is a fallback anyways. end end false end
extract_non_symbol_default!(options)
click to toggle source
# File lib/i18n/backend/fallbacks.rb, line 67 def extract_non_symbol_default!(options) defaults = [options[:default]].flatten first_non_symbol_default = defaults.detect{|default| !default.is_a?(Symbol)} if first_non_symbol_default options[:default] = defaults[0, defaults.index(first_non_symbol_default)] end return first_non_symbol_default end
translate(locale, key, options = EMPTY_HASH)
click to toggle source
Overwrites the Base
backend translate method so that it will try each locale given by I18n.fallbacks
for the given locale. E.g. for the locale :“de-DE” it might try the locales :“de-DE”, :de and :en (depends on the fallbacks implementation) until it finds a result with the given options. If it does not find any result for any of the locales it will then throw MissingTranslation
as usual.
The default option takes precedence over fallback locales only when it's a Symbol. When the default contains a String, Proc or Hash it is evaluated last after all the fallback locales have been tried.
Calls superclass method
# File lib/i18n/backend/fallbacks.rb, line 41 def translate(locale, key, options = EMPTY_HASH) return super unless options.fetch(:fallback, true) return super if options[:fallback_in_progress] default = extract_non_symbol_default!(options) if options[:default] fallback_options = options.merge(:fallback_in_progress => true) I18n.fallbacks[locale].each do |fallback| begin catch(:exception) do result = super(fallback, key, fallback_options) unless result.nil? on_fallback(locale, fallback, key, options) if locale.to_s != fallback.to_s return result end end rescue I18n::InvalidLocale # we do nothing when the locale is invalid, as this is a fallback anyways. end end return if options.key?(:default) && options[:default].nil? return super(locale, nil, options.merge(:default => default)) if default throw(:exception, I18n::MissingTranslation.new(locale, key, options)) end
Private Instance Methods
on_fallback(_original_locale, _fallback_locale, _key, _optoins)
click to toggle source
Overwrite on_fallback
to add specified logic when the fallback succeeds.
# File lib/i18n/backend/fallbacks.rb, line 92 def on_fallback(_original_locale, _fallback_locale, _key, _optoins) nil end