class R18n::Loader::YAML

Loader for translations in YAML format. Them should have name like `en.yml` (English) or en-US.yml (USA English dialect) with language/country code (RFC 3066).

R18n::I18n.new('en', R18n::Loader::YAML.new('dir/with/translations'))

YAML loader is default loader, so you can just set constructor parameter to `R18n::I18n.new`:

R18n::I18n.new('en', 'dir/with/translations')

Constants

FILE_EXT

Attributes

dir[R]

Dir with translations.

Public Class Methods

new(dir) click to toggle source

Create new loader for `dir` with YAML translations.

# File lib/r18n-core/yaml_loader.rb, line 41
def initialize(dir)
  @dir = File.expand_path(dir)
  detect_yaml_private_type
end

Public Instance Methods

==(other) click to toggle source

Is another `loader` load YAML translations from same `dir`.

# File lib/r18n-core/yaml_loader.rb, line 72
def ==(other)
  self.class == other.class && dir == other.dir
end
available() click to toggle source

`Array` of locales, which has translations in `dir`.

# File lib/r18n-core/yaml_loader.rb, line 47
def available
  Dir.glob(File.join(@dir, "**/*.#{FILE_EXT}"))
    .map { |i| File.basename(i, '.*').downcase }.uniq
    .map { |i| R18n.locale(i) }
end
hash() click to toggle source

YAML loader with same `dir` will be have same `hash`.

# File lib/r18n-core/yaml_loader.rb, line 67
def hash
  self.class.hash + @dir.hash
end
load(locale) click to toggle source

Return `Hash` with translations for `locale`.

# File lib/r18n-core/yaml_loader.rb, line 54
def load(locale)
  initialize_types

  translations = {}
  Dir.glob(
    File.join(@dir, "**/#{locale.code}.#{FILE_EXT}"), File::FNM_CASEFOLD
  ).each do |i|
    Utils.deep_merge!(translations, ::YAML.load_file(i) || {})
  end
  transform(translations)
end
transform(a_hash) click to toggle source

Wrap YAML private types to Typed.

# File lib/r18n-core/yaml_loader.rb, line 77
def transform(a_hash)
  a_hash.transform_values do |value|
    if value.is_a? Hash
      value = transform(value)
    elsif defined?(@private_type_class) &&
        value.is_a?(@private_type_class)
      v = value.value
      if v.respond_to?(:force_encoding) && v.encoding != __ENCODING__
        v = v.force_encoding(__ENCODING__)
      end
      value = Typed.new(value.type_id, v)
    end
    value
  end
end