]> git.openstreetmap.org Git - rails.git/blob - vendor/plugins/rails-i18n/test/lib/key_structure.rb
Merged I18N branch to head.
[rails.git] / vendor / plugins / rails-i18n / test / lib / key_structure.rb
1 $KCODE = 'u'
2
3 require 'rubygems'
4 require 'i18n'
5
6 module I18n
7   module Backend
8     class Simple
9       public :translations, :init_translations
10     end
11   end
12 end
13
14 class KeyStructure
15   attr_reader :result
16   
17   def initialize(locale)
18     @locale = locale.to_sym
19     init_backend
20
21     @reference = I18n.backend.translations[:'en']
22     @data = I18n.backend.translations[@locale]
23     
24     @result = {:bogus => [], :missing => [], :pluralization => []}
25     @key_stack = []
26   end
27   
28   def run
29     compare :missing, @reference, @data
30     compare :bogus, @data, @reference
31   end
32   
33   def output
34     [:missing, :bogus, :pluralization].each do |direction|
35       next unless result[direction].size > 0
36       case direction
37       when :pluralization
38         puts "\nThe following pluralization keys seem to differ:"
39       else
40         puts "\nThe following keys seem to be #{direction} for #{@locale.inspect}:"
41       end
42       puts '   ' + result[direction].join("\n   ")
43     end
44     if result.map{|k, v| v.size == 0}.uniq == [true]
45       puts "No inconsistencies found."
46     end
47     puts "\n"
48   end
49   
50   protected
51   
52     def compare(direction, reference, data)
53       reference.each do |key, value|
54         if data.has_key?(key)
55           @key_stack << key
56           if namespace?(value)
57             compare direction, value, (namespace?(data[key]) ? data[key] : {})
58           elsif pluralization?(value)
59             compare :pluralization, value, (pluralization?(data[key]) ? data[key] : {})
60           end
61           @key_stack.pop
62         else
63           @result[direction] << current_key(key)
64         end
65       end
66     end
67   
68     def current_key(key)
69       (@key_stack.dup << key).join('.')
70     end
71     
72     def namespace?(hash)
73       Hash === hash and !pluralization?(hash)
74     end
75     
76     def pluralization?(hash)
77       Hash === hash and hash.has_key?(:one) and hash.has_key?(:other)
78     end
79   
80     def init_backend
81       I18n.load_path = %W(
82         rails/action_view.yml
83         rails/active_record.yml
84         rails/active_support.yml
85       )
86       I18n.load_path += Dir["locale/#{@locale}.{rb,yml}"]
87       I18n.backend.init_translations
88     end
89 end