def languages
langs = []
quality = {}
if accept_language then
accept_language.scan(/\s*([^,;]*)\s*;\s*q\s*=\s*([^,]*),|([^,]*),/) do |match|
lang = match.pop || match.shift
q = (match.pop || 1).to_f
if lang =~ /([^-]*)-(.*)/ then lang = $1 end
if quality[lang] then
if q > quality[lang] then
quality[lang] = q
end
else
quality[lang] = q
end
end
sorted = quality.sort do |a,b|
if a.last < b.last then 1
elsif a.last == b.last then 0
elsif a.last > b.last then -1
end
end
sorted.each do |lang|
langs << lang.first
end
end
langs
end