Module: Locale::Driver::CGI
- Defined in:
- lib/locale/driver/cgi.rb
Class Method Summary collapse
-
.charset ⇒ Object
Gets the charset from CGI parameters.
-
.clear_current_request ⇒ Object
Clear the current request.
-
.locales ⇒ Object
Gets required locales from CGI parameters.
-
.set_request(query_langs, cookie_langs, accept_language, accept_charset) ⇒ Object
Set a request.
Class Method Details
.charset ⇒ Object
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_request ⇒ Object
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 |
.locales ⇒ Object
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, , accept_language, accept_charset) Locale.clear Thread.current[:current_request] = { :query_langs => query_langs.compact, :cookie_langs => .compact, :accept_language => accept_language, :accept_charset => accept_charset } self end |