openstreetmap-website/vendor/plugins/rails-i18n/test/lib/key_structure.rb

89 lines
2.1 KiB
Ruby

$KCODE = 'u'
require 'rubygems'
require 'i18n'
module I18n
module Backend
class Simple
public :translations, :init_translations
end
end
end
class KeyStructure
attr_reader :result
def initialize(locale)
@locale = locale.to_sym
init_backend
@reference = I18n.backend.translations[:'en']
@data = I18n.backend.translations[@locale]
@result = {:bogus => [], :missing => [], :pluralization => []}
@key_stack = []
end
def run
compare :missing, @reference, @data
compare :bogus, @data, @reference
end
def output
[:missing, :bogus, :pluralization].each do |direction|
next unless result[direction].size > 0
case direction
when :pluralization
puts "\nThe following pluralization keys seem to differ:"
else
puts "\nThe following keys seem to be #{direction} for #{@locale.inspect}:"
end
puts ' ' + result[direction].join("\n ")
end
if result.map{|k, v| v.size == 0}.uniq == [true]
puts "No inconsistencies found."
end
puts "\n"
end
protected
def compare(direction, reference, data)
reference.each do |key, value|
if data.has_key?(key)
@key_stack << key
if namespace?(value)
compare direction, value, (namespace?(data[key]) ? data[key] : {})
elsif pluralization?(value)
compare :pluralization, value, (pluralization?(data[key]) ? data[key] : {})
end
@key_stack.pop
else
@result[direction] << current_key(key)
end
end
end
def current_key(key)
(@key_stack.dup << key).join('.')
end
def namespace?(hash)
Hash === hash and !pluralization?(hash)
end
def pluralization?(hash)
Hash === hash and hash.has_key?(:one) and hash.has_key?(:other)
end
def init_backend
I18n.load_path = %W(
rails/action_view.yml
rails/active_record.yml
rails/active_support.yml
)
I18n.load_path += Dir["locale/#{@locale}.{rb,yml}"]
I18n.backend.init_translations
end
end