openstreetmap-website/lib/locale.rb
2016-01-07 09:10:19 +00:00

44 lines
998 B
Ruby

class Locale < I18n::Locale::Tag::Rfc4646
class List < Array
attr_reader :locales
def initialize(tags)
super(tags.map { |tag| Locale.tag(tag) }).compact!
end
def candidates(preferred)
preferred.expand & self
end
def preferred(preferred)
candidates(preferred).first
end
def expand
map(&:candidates).flatten.uniq << Locale.default
end
end
def self.list(*tags)
List.new(tags.flatten)
end
def self.default
tag(I18n.default_locale)
end
def self.available
@available ||= List.new(I18n.available_locales)
end
def candidates
[self.class.new(language, script, region, variant),
self.class.new(language, script, region),
self.class.new(language, script, nil, variant),
self.class.new(language, script),
self.class.new(language, nil, region, variant),
self.class.new(language, nil, region),
self.class.new(language, nil, nil, variant),
self.class.new(language)]
end
end