Class: I18n::Backend::Base

Inherits:
Object show all
Defined in:
lib/vendor/i18n/lib/i18n/backend/base.rb

Direct Known Subclasses

Chain, Simple

Constant Summary collapse

RESERVED_KEYS =
[:scope, :default, :separator]
INTERPOLATION_SYNTAX_PATTERN =
/(\\)?\{\{([^\}]+)\}\}/

Instance Method Summary collapse

Instance Method Details

#available_localesObject

Returns an array of locales for which translations are available ignoring the reserved translation meta data key :i18n.



75
76
77
78
79
80
81
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 75

def available_locales
  init_translations unless initialized?
  translations.inject([]) do |locales, (locale, data)|
    locales << locale unless (data.keys - [:i18n]).empty?
    locales
  end
end

#initialized?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 69

def initialized?
  @initialized ||= false
end

#load_translations(*filenames) ⇒ Object

Accepts a list of paths to translation files. Loads translations from plain Ruby (*.rb) or YAML files (*.yml). See #load_rb and #load_yml for details.



14
15
16
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 14

def load_translations(*filenames)
  filenames.each { |filename| load_file(filename) }
end

#localize(locale, object, format = :default, options = {}) ⇒ Object

Acts the same as strftime, but uses a localized version of the format string. Takes a key from the date/time formats translations as a format argument (e.g., :short in :'date.formats').

Raises:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 45

def localize(locale, object, format = :default, options = {})
  raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)

  if Symbol === format
    key = format
    type = object.respond_to?(:sec) ? 'time' : 'date'
    format = lookup(locale, :"#{type}.formats.#{key}")
    raise(MissingTranslationData.new(locale, key, options)) if format.nil?
  end

  format = resolve(locale, object, format, options)
  format = format.to_s.gsub(/%[aAbBp]/) do |match|
    case match
    when '%a' then I18n.t(:"date.abbr_day_names",                  :locale => locale, :format => format)[object.wday]
    when '%A' then I18n.t(:"date.day_names",                       :locale => locale, :format => format)[object.wday]
    when '%b' then I18n.t(:"date.abbr_month_names",                :locale => locale, :format => format)[object.mon]
    when '%B' then I18n.t(:"date.month_names",                     :locale => locale, :format => format)[object.mon]
    when '%p' then I18n.t(:"time.#{object.hour < 12 ? :am : :pm}", :locale => locale, :format => format) if object.respond_to? :hour
    end
  end

  object.strftime(format)
end

#reload!Object



83
84
85
86
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 83

def reload!
  @initialized = false
  @translations = nil
end

#store_translations(locale, data) ⇒ Object

Stores translations for the given locale in memory. This uses a deep merge for the translations hash, so existing translations will be overwritten by new ones only at the deepest level of the hash.



22
23
24
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 22

def store_translations(locale, data)
  merge_translations(locale, data)
end

#translate(locale, key, options = {}) ⇒ Object

Raises:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/vendor/i18n/lib/i18n/backend/base.rb', line 26

def translate(locale, key, options = {})
  raise InvalidLocale.new(locale) if locale.nil?
  return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)

  count, scope, default, separator = options.values_at(:count, *RESERVED_KEYS)
  values = options.reject { |name, value| RESERVED_KEYS.include?(name) }

  entry = lookup(locale, key, scope, separator)
  entry = entry.nil? ? default(locale, key, default, options) : resolve(locale, key, entry, options)

  raise(I18n::MissingTranslationData.new(locale, key, options)) if entry.nil?
  entry = pluralize(locale, entry, count)
  entry = interpolate(locale, entry, values)
  entry
end