]> git.openstreetmap.org Git - rails.git/blob - lib/locale.rb
Add frozen_string_literal comments to ruby files
[rails.git] / lib / locale.rb
1 # frozen_string_literal: true
2
3 class Locale < I18n::Locale::Tag::Rfc4646
4   class List < Array
5     attr_reader :locales
6
7     def initialize(tags)
8       super(tags.map { |tag| Locale.tag(tag) }).compact!
9     end
10
11     def candidates(preferred)
12       preferred.expand & self
13     end
14
15     def preferred(preferred, options = { :default => Locale.default })
16       candidates(preferred).first || options[:default]
17     end
18
19     def expand
20       @expand ||= List.new(reverse.each_with_object([]) do |locale, expanded|
21         locale.candidates.uniq.reverse_each do |candidate|
22           expanded << candidate if candidate == locale || expanded.exclude?(candidate)
23         end
24       end.reverse.uniq)
25     end
26   end
27
28   def self.list(*tags)
29     List.new(tags.flatten)
30   end
31
32   def self.default
33     tag(I18n.default_locale)
34   end
35
36   def self.available
37     @available ||= List.new(I18n.available_locales).reject!(&:invalid?)
38   end
39
40   def invalid?
41     !I18n.exists? "activerecord.models.acl", :locale => self, :fallback => false
42   end
43
44   def candidates
45     List.new([self.class.new(language, script, region, variant),
46               self.class.new(language, script, region),
47               self.class.new(language, script, nil, variant),
48               self.class.new(language, script),
49               self.class.new(language, nil, region, variant),
50               self.class.new(language, nil, region),
51               self.class.new(language, nil, nil, variant),
52               self.class.new(language)])
53   end
54 end