def self.parse_accept_lang(lang_ranges)
lang_range_list = Array.new
lang_ranges.split(/,/).each_with_index do |lang_range_with_qvalue, i|
lang_range, qvalue = lang_range_with_qvalue.split(/;/, 2)
lang_range.strip!
language, country = lang_range.split(/-/, 2)
language.strip!
country.strip! if country
lang_info = {
:language => language,
:country => country,
:length => lang_range.length,
:order => i
}
if (qvalue =~ /q=(1(\.0*)?|0(\.\d*)?)/)
lang_info[:q] = $1.to_f
else
lang_info[:q] = 1.0
end
lang_range_list.push(lang_info)
end
lang_range_list.sort!{|a, b|
cmp = b[:q] <=> a[:q]
cmp = b[:length] <=> a[:length] if (cmp == 0)
cmp = a[:order] <=> b[:order] if (cmp == 0)
cmp
}
for lang_info in lang_range_list
lang_info.delete(:length)
lang_info.delete(:order)
end
lang_range_list
end