X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/043d29fd7eb72048cf5d07edfbc20ec5c25af708..071f61e3ade9cbe5956216990ee2699ff5993f62:/lib/locale.rb diff --git a/lib/locale.rb b/lib/locale.rb index e10f06632..b0ad20fc7 100644 --- a/lib/locale.rb +++ b/lib/locale.rb @@ -15,7 +15,11 @@ class Locale < I18n::Locale::Tag::Rfc4646 end def expand - map(&:candidates).flatten.uniq << Locale.default + List.new(reverse.each_with_object([]) do |locale, expanded| + locale.candidates.uniq.reverse_each do |candidate| + expanded << candidate if candidate == locale || !expanded.include?(candidate) + end + end.reverse.uniq << Locale.default) end end @@ -28,17 +32,23 @@ class Locale < I18n::Locale::Tag::Rfc4646 end def self.available - @available ||= List.new(I18n.available_locales) + @available ||= List.new(I18n.available_locales).reject!(&:invalid?) + end + + def invalid? + I18n.t("activerecord.models.acl", :locale => self, :fallback => false, :raise => true).nil? + rescue I18n::MissingTranslationData + true 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)] + List.new([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