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