Class: R18n::Loader::YAML

Inherits:
Object
  • Object
show all
Defined in:
lib/r18n-core/yaml_loader.rb

Overview

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')

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dir) ⇒ YAML

Create new loader for dir with YAML translations.



40
41
42
# File 'lib/r18n-core/yaml_loader.rb', line 40

def initialize(dir)
  @dir = File.expand_path(dir)
end

Instance Attribute Details

#dirObject (readonly)

Dir with translations.



37
38
39
# File 'lib/r18n-core/yaml_loader.rb', line 37

def dir
  @dir
end

Instance Method Details

#==(loader) ⇒ Object

Is another loader load YAML translations from same dir.



66
67
68
# File 'lib/r18n-core/yaml_loader.rb', line 66

def ==(loader)
  self.class == loader.class and self.dir == loader.dir
end

#availableObject

Array of locales, which has translations in dir.



45
46
47
48
49
# File 'lib/r18n-core/yaml_loader.rb', line 45

def available
  Dir.glob(File.join(@dir, '**/*.yml')).
    map { |i| File.basename(i, '.yml') }.uniq.
    map { |i| R18n::Locale.load(i) }
end

#hashObject

YAML loader with same dir will be have same hash.



61
62
63
# File 'lib/r18n-core/yaml_loader.rb', line 61

def hash
  self.class.hash + @dir.hash
end

#load(locale) ⇒ Object

Return Hash with translations for locale.



52
53
54
55
56
57
58
# File 'lib/r18n-core/yaml_loader.rb', line 52

def load(locale)
  translations = {}
  Dir.glob(File.join(@dir, "**/#{locale.code.downcase}.yml")).each do |file_name|
    Utils.deep_merge!(translations, ::YAML::load_file(file_name))
  end
  transform(translations)
end

#transform(a_hash) ⇒ Object

Wrap YAML private types to Typed.



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/r18n-core/yaml_loader.rb', line 71

def transform(a_hash)
  R18n::Utils.hash_map(a_hash) do |key, value|
    [key,
     case value
       when ::YAML::PrivateType
         Typed.new(value.type_id, value.value)
       when Hash
         transform(value)
       else value
     end]
  end
end