1 # frozen_string_literal: true
3 class Locale < I18n::Locale::Tag::Rfc4646
8 super(tags.map { |tag| Locale.tag(tag) }).compact!
11 def candidates(preferred)
12 preferred.expand & self
15 def preferred(preferred, options = { :default => Locale.default })
16 candidates(preferred).first || options[:default]
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)
29 List.new(tags.flatten)
33 tag(I18n.default_locale)
37 @available ||= List.new(I18n.available_locales).reject!(&:invalid?)
41 !I18n.exists? "activerecord.models.acl", :locale => self, :fallback => false
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)])