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