
Untitled
By: a guest on
May 11th, 2012 | syntax:
None | size: 1.24 KB | hits: 15 | expires: Never
require 'set'
require 'yaml'
def hack_the_keys(keys, data, scope)
data.each do |key, value|
case value
when Hash
hack_the_keys(keys, value, scope + [key])
else
keys << scope + [key]
end
end
end
def locales_with_keys_string(keys, locales)
locales.sort_by { |k,v| k.to_s }.map { |name, data|
color = locale_has_keys?(data, keys) ? 32 : 31
"\e[#{ color }m#{ name }\e[0m"
}.join(" ")
end
def locale_has_keys?(locale, keys)
keys.flatten.inject(locale) { |l, key| l && l[key] }
end
def test_keys(locales)
key_table = Set.new
locales.each do |name, data|
hack_the_keys(key_table, data, [])
end
longest_key_length = 0
key_table = key_table.sort_by { |keys| keys.join(".").tap { |s| longest_key_length = s.length if s.length > longest_key_length } }
key_table.each do |keys|
next if locales.values.all? { |locale| locale_has_keys?(locale, keys) }
puts keys.join(".").ljust(longest_key_length + 1) + locales_with_keys_string(keys, locales)
end
end
test_keys({
:en => YAML.load(File.read('config/locales/en.yml'))['en'],
:sv => YAML.load(File.read('config/locales/sv.yml'))['sv'],
# :fi => YAML.load(File.read('config/locales/fi.yml'))['fi'],
})