# File lib/locale/driver/cgi.rb, line 31
      def locales
        return Locale::TagList.new([@@default_locale]) unless cgi
        cgi_ = cgi

        locales = Locale::TagList.new

        # QUERY_STRING "lang"
        langs = cgi_.params["lang"]
        if langs
          langs.each do |lang|
            locales << Locale::Tag.parse(lang)
          end
        end

        unless locales.size > 0
          # COOKIE "lang"
          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
          # HTTP_ACCEPT_LANGUAGE
          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