Module: Locale::Driver::CGI

Defined in:
lib/locale/driver/cgi.rb

Constant Summary collapse

@@default_locale =
Locale::Tag::Simple.new("en")
@@default_charset =
"UTF-8"

Class Method Summary collapse

Class Method Details

.cgiObject

:nodoc:



93
94
95
# File 'lib/locale/driver/cgi.rb', line 93

def cgi  #:nodoc:
  Thread.current[:current_cgi]
end

.charsetObject

Gets the charset from CGI parameters. (Based on RFC2616)

* Returns: the charset (HTTP_ACCEPT_CHARSET > "UTF-8").


72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/locale/driver/cgi.rb', line 72

def charset
  cgi_ = cgi
  charsets = cgi_.accept_charset
  if charsets and charsets.size > 0
    num = charsets.index(',')
    charset = num ? charsets[0, num] : charsets
    charset = @@default_charset if charset == "*"
  else
    charset = @@default_charset
  end
  charset
end

.localesObject

Gets required locales from CGI parameters. (Based on RFC2616)

Returns: An Array of Locale::Tag’s subclasses

(QUERY_STRING "lang" > COOKIE "lang" > HTTP_ACCEPT_LANGUAGE > "en")


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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"
  if cgi_.has_key?("lang")
    langs = cgi_.params["lang"]
    if langs
      langs.each do |lang|
        locales << Locale::Tag.parse(lang)
      end
    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

.set_cgi(cgi_) ⇒ Object

Sets a CGI object.

  • cgi_: CGI object

  • Returns: self



88
89
90
91
# File 'lib/locale/driver/cgi.rb', line 88

def set_cgi(cgi_)
  Thread.current[:current_cgi]  = cgi_
  self
end