X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/5f4b7d3f916e132f860ab12c017aba638556abf8..4028f4cdb91f616bc774dc9b9fa8c7183eb1f6dd:/lib/locale.rb diff --git a/lib/locale.rb b/lib/locale.rb new file mode 100644 index 000000000..bb09ae327 --- /dev/null +++ b/lib/locale.rb @@ -0,0 +1,44 @@ +class Locale < I18n::Locale::Tag::Rfc4646 + class List < Array + attr_reader :locales + + def initialize(tags) + super(tags.map { |tag| Locale.tag(tag) }) + 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