module I18n
  module Backend
    module Fallbacks
      def find_first_string_or_lambda_default(defaults)
        defaults.each_with_index { |default, ix| return ix if default && !default.is_a?(Symbol) }
        nil
      end
    end

    module PluralizationFallback
      def pluralize(locale, entry, count)
        super
      rescue InvalidPluralizationData => ex
        raise ex unless ex.entry.has_key?(:other)
        ex.entry[:other]
      end
    end
  end

  module JS
    class << self
      def make_ordered(unordered)
        ordered = ActiveSupport::OrderedHash.new

        unordered.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key|
          value = unordered[key]

          if value.is_a?(Hash)
            ordered[key] = make_ordered(value)
          else
            ordered[key] = value
          end
        end

        ordered
      end

      def filtered_translations_with_order
        make_ordered(filtered_translations_without_order)
      end

      alias_method_chain :filtered_translations, :order
    end
  end
end

I18n::Backend::Simple.include(I18n::Backend::PluralizationFallback)
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)

I18n.fallbacks.map("no" => "nb")
