class I18n::Backend::DotLookup
Constants
- DOT
- INTERPOLATION_PATTERN
- UNKNOWN_PROPERTY
Public Instance Methods
extract_keys(subject)
click to toggle source
# File lib/i18n/backend/dot_lookup.rb, line 58 def extract_keys(subject) subject.scan(INTERPOLATION_PATTERN).flatten end
get_value(object, keys)
click to toggle source
# File lib/i18n/backend/dot_lookup.rb, line 62 def get_value(object, keys) keys.inject(object) do |target, key| unless target&.respond_to?(key) throw :unknown_property, UNKNOWN_PROPERTY end target.public_send(key) end end
populate_options(subject, options)
click to toggle source
# File lib/i18n/backend/dot_lookup.rb, line 49 def populate_options(subject, options) extract_keys(subject).each_with_object(options) do |key, buffer| names = key.split(DOT) object = buffer[names.shift.to_sym] value = catch(:unknown_property) { get_value(object, names) } buffer[key.to_sym] = value if value != UNKNOWN_PROPERTY end end
translate(locale, key, options = {})
click to toggle source
# File lib/i18n/backend/dot_lookup.rb, line 18 def translate(locale, key, options = {}) raise InvalidLocale, locale unless locale options = options.dup entry = key && lookup(locale, key, options[:scope], options) if options.empty? entry = resolve(locale, key, entry, options) else count, default = options.values_at(:count, :default) values = options.except(*RESERVED_KEYS) entry = if entry.nil? && default default(locale, key, default, options) else resolve(locale, key, entry, options) end end if entry.nil? throw(:exception, I18n::MissingTranslation.new(locale, key, options)) end entry = entry.dup if entry.is_a?(String) populate_options(entry, values) if entry.is_a?(String) entry = pluralize(locale, entry, count) if count entry = interpolate(locale, entry, values) if values entry end