class Translate::KeysKeys

Public Class Methods

deep_merge!(hash1, hash2) click to toggle source

deep_merge by Stefan Rusterholz, see www.ruby-forum.com/topic/142809

# File lib/translate/keys.rb, line 81
def self.deep_merge!(hash1, hash2)
  merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
  hash1.merge!(hash2, &merger)
end
files() click to toggle source

Allows keys extracted from lookups in files to be cached

# File lib/translate/keys.rb, line 6
def self.files
  @@files ||= Translate::Keys.new.files
end
files=(files) click to toggle source

Allows flushing of the files cache

# File lib/translate/keys.rb, line 11
def self.files=(files)
  @@files = files
end
to_deep_hash(hash) click to toggle source

Convert something like:

{'pressrelease.label.one' => "Pressmeddelande"}

to:

{

:pressrelease => {
  :label => {
    :one => "Pressmeddelande"
  }
 }

}

# File lib/translate/keys.rb, line 70
def self.to_deep_hash(hash)
  hash.inject({}) do |deep_hash, (key, value)|
    keys = key.to_s.split('.').reverse
    leaf_key = keys.shift
    key_hash = keys.inject({leaf_key.to_sym => value}) { |hash, key| {key.to_sym => hash} }
    deep_merge!(deep_hash, key_hash)
    deep_hash
  end
end
to_shallow_hash(hash) click to toggle source

Convert something like:

{

:pressrelease => {
  :label => {
    :one => "Pressmeddelande"
  }
 }

}

to:

{'pressrelease.label.one' => "Pressmeddelande"}
# File lib/translate/keys.rb, line 44
def self.to_shallow_hash(hash)
  hash.inject({}) do |shallow_hash, (key, value)|
    if value.is_a?(Hash)
      to_shallow_hash(value).each do |sub_key, sub_value|
        shallow_hash[[key, sub_key].join(".")] = sub_value
      end
    else
      shallow_hash[key.to_s] = value
    end
    shallow_hash
  end
end

Public Instance Methods

files() click to toggle source
# File lib/translate/keys.rb, line 15
def files
  @files ||= extract_files
end
Also aliased as: to_hash
i18n_keys(locale) click to toggle source
# File lib/translate/keys.rb, line 25
def i18n_keys(locale)
  I18n.backend.send(:init_translations) unless I18n.backend.initialized?
  extract_i18n_keys(I18n.backend.send(:translations)[locale.to_sym]).sort
end
keys() click to toggle source
# File lib/translate/keys.rb, line 20
def keys
  files.keys
end
Also aliased as: to_a
to_a()
Alias for: keys
to_hash()
Alias for: files

Private Instance Methods

extract_files() click to toggle source
# File lib/translate/keys.rb, line 101
def extract_files
  files_to_scan.inject(HashWithIndifferentAccess.new) do |files, file|
    IO.read(file).scan(i18n_lookup_pattern).flatten.map(&:to_sym).each do |key|
      files[key] ||= []
      path = Pathname.new(File.expand_path(file)).relative_path_from(Pathname.new(Rails.root)).to_s
      files[key] << path unless files[key].include?(path)
    end
    files
  end
end
extract_i18n_keys(hash, parent_keys = []) click to toggle source
# File lib/translate/keys.rb, line 87
def extract_i18n_keys(hash, parent_keys = [])
  hash.inject([]) do |keys, (key, value)|
    full_key = parent_keys + [key]
    if value.is_a?(Hash)
      # Nested hash
      keys += extract_i18n_keys(value, full_key)
    elsif value.present?
      # String leaf node
      keys << full_key.join(".")
    end
    keys
  end
end
files_root_dir() click to toggle source
# File lib/translate/keys.rb, line 121
def files_root_dir
  Rails.root
end
files_to_scan() click to toggle source
# File lib/translate/keys.rb, line 116
def files_to_scan
  Dir.glob(File.join(files_root_dir, "{app,config,lib}", "**","*.{rb,erb,rhtml}")) +
    Dir.glob(File.join(files_root_dir, "public", "javascripts", "**","*.js"))
end
i18n_lookup_pattern() click to toggle source
# File lib/translate/keys.rb, line 112
def i18n_lookup_pattern
  /\b(?:I18n\.t|I18n\.translate|t)(?:\s|\():?'([a-z0-9_]+.[a-z0-9_.]+)'\)?/
end