Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 11th, 2012  |  syntax: None  |  size: 1.24 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. require 'set'
  2. require 'yaml'
  3.  
  4. def hack_the_keys(keys, data, scope)
  5.   data.each do |key, value|
  6.     case value
  7.     when Hash
  8.       hack_the_keys(keys, value, scope + [key])
  9.     else
  10.       keys << scope + [key]
  11.     end
  12.   end
  13. end
  14.  
  15. def locales_with_keys_string(keys, locales)
  16.   locales.sort_by { |k,v| k.to_s }.map { |name, data|
  17.     color = locale_has_keys?(data, keys) ? 32 : 31
  18.     "\e[#{ color }m#{ name }\e[0m"
  19.   }.join(" ")
  20. end
  21.  
  22. def locale_has_keys?(locale, keys)
  23.   keys.flatten.inject(locale) { |l, key| l && l[key] }
  24. end
  25.  
  26. def test_keys(locales)
  27.   key_table = Set.new
  28.  
  29.   locales.each do |name, data|
  30.     hack_the_keys(key_table, data, [])
  31.   end
  32.  
  33.   longest_key_length = 0
  34.   key_table = key_table.sort_by { |keys| keys.join(".").tap { |s| longest_key_length = s.length if s.length > longest_key_length } }
  35.  
  36.   key_table.each do |keys|
  37.     next if locales.values.all? { |locale| locale_has_keys?(locale, keys) }
  38.     puts keys.join(".").ljust(longest_key_length + 1) + locales_with_keys_string(keys, locales)
  39.   end
  40. end
  41.  
  42. test_keys({
  43.   :en => YAML.load(File.read('config/locales/en.yml'))['en'],
  44.   :sv => YAML.load(File.read('config/locales/sv.yml'))['sv'],
  45.   # :fi => YAML.load(File.read('config/locales/fi.yml'))['fi'],
  46. })