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)])