def locales
return Locale::TagList.new([@@default_locale]) unless cgi
cgi_ = cgi
locales = Locale::TagList.new
langs = cgi_.params["lang"]
if langs
langs.each do |lang|
locales << Locale::Tag.parse(lang)
end
end
unless locales.size > 0
langs = cgi_.cookies["lang"]
if langs
langs.each do |lang|
locales << Locale::Tag.parse(lang) if lang.size > 0
end
end
end
unless locales.size > 0
if lang = cgi_.accept_language and lang.size > 0
locales += lang.gsub(/\s/, "").split(/,/).map{|v| v.split(";q=")}.map{|j| [j[0], j[1] ? j[1].to_f : 1.0]}.sort{|a,b| -(a[1] <=> b[1])}.map{|v| Locale::Tag.parse(v[0])}
end
end
unless locales.size > 0
locales << @@default_locale
end
Locale::TagList.new(locales.uniq)
end