]> git.openstreetmap.org Git - rails.git/blob - lib/locale.rb
use a controller method to handle cancan denials
[rails.git] / lib / locale.rb
1 class Locale < I18n::Locale::Tag::Rfc4646
2   class List < Array
3     attr_reader :locales
4
5     def initialize(tags)
6       super(tags.map { |tag| Locale.tag(tag) }).compact!
7     end
8
9     def candidates(preferred)
10       preferred.expand & self
11     end
12
13     def preferred(preferred)
14       candidates(preferred).first
15     end
16
17     def expand
18       map(&:candidates).flatten.uniq << Locale.default
19     end
20   end
21
22   def self.list(*tags)
23     List.new(tags.flatten)
24   end
25
26   def self.default
27     tag(I18n.default_locale)
28   end
29
30   def self.available
31     @available ||= List.new(I18n.available_locales)
32   end
33
34   def candidates
35     [self.class.new(language, script, region, variant),
36      self.class.new(language, script, region),
37      self.class.new(language, script, nil, variant),
38      self.class.new(language, script),
39      self.class.new(language, nil, region, variant),
40      self.class.new(language, nil, region),
41      self.class.new(language, nil, nil, variant),
42      self.class.new(language)]
43   end
44 end