Module: Locale::Driver::CGI

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

Class Method Summary collapse

Class Method Details

.charsetObject

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

* Returns: the charset (HTTP_ACCEPT_CHARSET or nil).


74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/locale/driver/cgi.rb', line 74

def charset
  req = Thread.current[:current_request]
  return nil unless req

  charsets = req[:accept_charset]
  if charsets and charsets.size > 0
    num = charsets.index(',')
    charset = num ? charsets[0, num] : charsets
    charset = nil if charset == "*"
  else
    charset = nil
  end
  charset
end

.clear_current_requestObject

Clear the current request.



107
108
109
# File 'lib/locale/driver/cgi.rb', line 107

def clear_current_request
  Thread.current[:current_request] = nil
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")


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
69
70
# File 'lib/locale/driver/cgi.rb', line 38

def locales
  req = Thread.current[:current_request]
  return nil unless req

  locales = []

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

  unless locales.size > 0
    # COOKIE "lang"
    if langs = req[:cookie_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 = req[:accept_language] and lang.size > 0
      # 10.0 is for ruby-1.8.6 which have the bug of str.to_f. 
      # Normally, this should be 1.0.
      locales += lang.gsub(/\s/, "").split(/,/).map{|v| v.split(";q=")}.map{|j| [j[0], j[1] ? j[1].to_f : 10.0]}.sort{|a,b| -(a[1] <=> b[1])}.map{|v| Locale::Tag.parse(v[0])}
    end
  end

  locales.size > 0 ? Locale::TagList.new(locales.uniq) : nil
end

.set_request(query_langs, cookie_langs, accept_language, accept_charset) ⇒ Object

Set a request.

  • query_langs: An Array of QUERY_STRING value “lang”.

  • cookie_langs: An Array of cookie value “lang”.

  • accept_language: The value of HTTP_ACCEPT_LANGUAGE

  • accept_charset: The value of HTTP_ACCEPT_CHARSET



95
96
97
98
99
100
101
102
103
104
# File 'lib/locale/driver/cgi.rb', line 95

def set_request(query_langs, cookie_langs, accept_language, accept_charset)
  Locale.clear
  Thread.current[:current_request] = {
    :query_langs => query_langs.compact,
    :cookie_langs => cookie_langs.compact,
    :accept_language => accept_language,
    :accept_charset => accept_charset
  }
  self
end