<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>samples/rack/README</filename>
    </added>
    <added>
      <filename>samples/rack/hello_rack.rb</filename>
    </added>
    <added>
      <filename>samples/rack/hello_rack.ru</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -29,14 +29,13 @@ module Locale
       #          (QUERY_STRING &quot;lang&quot; &gt; COOKIE &quot;lang&quot; &gt; HTTP_ACCEPT_LANGUAGE &gt; &quot;en&quot;)
       # 
       def locales
-        cgi_ = cgi
-        return Locale::TagList.new([@@default_locale]) unless cgi_
+        req = Thread.current[:current_request]
+        return Locale::TagList.new([@@default_locale]) unless req
 
         locales = Locale::TagList.new
 
         # QUERY_STRING &quot;lang&quot;
-        langs = cgi_.params[&quot;lang&quot;]
-        if langs
+        if langs = req[:query_langs]
           langs.each do |lang|
             locales &lt;&lt; Locale::Tag.parse(lang)
           end
@@ -44,8 +43,7 @@ module Locale
 
         unless locales.size &gt; 0
           # COOKIE &quot;lang&quot;
-          langs = cgi_.cookies[&quot;lang&quot;]
-          if langs
+          if langs = req[:cookie_langs]
             langs.each do |lang|
               locales &lt;&lt; Locale::Tag.parse(lang) if lang.size &gt; 0
             end
@@ -54,7 +52,7 @@ module Locale
 
         unless locales.size &gt; 0
           # HTTP_ACCEPT_LANGUAGE
-          if lang = cgi_.accept_language and lang.size &gt; 0
+          if lang = req[:accept_language] and lang.size &gt; 0
             locales += lang.gsub(/\s/, &quot;&quot;).split(/,/).map{|v| v.split(&quot;;q=&quot;)}.map{|j| [j[0], j[1] ? j[1].to_f : 1.0]}.sort{|a,b| -(a[1] &lt;=&gt; b[1])}.map{|v| Locale::Tag.parse(v[0])}
           end
         end
@@ -68,10 +66,10 @@ module Locale
       # Gets the charset from CGI parameters. (Based on RFC2616)
       #  * Returns: the charset (HTTP_ACCEPT_CHARSET &gt; &quot;UTF-8&quot;).
      def charset
-       cgi_ = cgi
-       return @@default_charset unless cgi_
+       req = Thread.current[:current_request]
+       return @@default_charset unless req
 
-       charsets = cgi_.accept_charset
+       charsets = req[:accept_charset]
        if charsets and charsets.size &gt; 0
          num = charsets.index(',')
          charset = num ? charsets[0, num] : charsets
@@ -82,51 +80,63 @@ module Locale
        charset
      end
 
-      # Sets a CGI object.
-      # * cgi_: CGI object
-      # * Returns: self
-      def set_cgi(cgi_)
-        Thread.current[:current_cgi]  = cgi_
-        self
-      end
-      
-      def cgi  #:nodoc:
-        Thread.current[:current_cgi]
-      end
+     # Set a request.
+     # 
+     # * query_langs: An Array of QUERY_STRING value &quot;lang&quot;.
+     # * cookie_langs: An Array of cookie value &quot;lang&quot;.
+     # * accept_language: The value of HTTP_ACCEPT_LANGUAGE
+     # * accept_charset: The value of HTTP_ACCEPT_CHARSET
+     def set_request(query_langs, cookie_langs, accept_language, accept_charset)
+       Thread.current[:current_request] = {
+         :query_langs =&gt; query_langs, 
+         :cookie_langs =&gt; cookie_langs, 
+         :accept_language =&gt; accept_language,
+         :accept_charset =&gt; accept_charset
+       }
+       self
+     end
+
+     # Clear the current request.
+     def clear_current_request
+       Thread.current[:current_request] = nil
+     end
     end
   end
 
   @@locale_driver_module = Driver::CGI
   
   module_function
-  # Sets a CGI object. 
-  #
-  # Call Locale.init(:driver =&gt; :cgi) first.
+  # Sets a request values for lang/charset.
   #
-  # * cgi_: CGI object
-  # * Returns: self
-  def set_cgi(cgi_)
-    @@locale_driver_module.set_cgi(cgi_)
+  # * query_langs: An Array of QUERY_STRING value &quot;lang&quot;.
+  # * cookie_langs: An Array of cookie value &quot;lang&quot;.
+  # * accept_language: The value of HTTP_ACCEPT_LANGUAGE
+  # * accept_charset: The value of HTTP_ACCEPT_CHARSET
+  def set_request(query_langs, cookie_langs, accept_language, accept_charset)
+    @@locale_driver_module.set_request(query_langs, cookie_langs, accept_language, accept_charset)
     self
   end
-  
-  # Sets a CGI object.
+
+  # Sets a CGI object. This is the convenient function of set_request().
   #
   # Call Locale.init(:driver =&gt; :cgi) first.
   #
-  # * cgi_: CGI object
-  # * Returns: cgi_ 
-  def cgi=(cgi_)
-    set_cgi(cgi_)
-    cgi_
+  # * cgi: CGI object
+  # * Returns: self
+  def set_cgi(cgi)
+    set_request(cgi.params[&quot;lang&quot;], cgi.cookies[&quot;lang&quot;],
+                cgi.accept_language, cgi.accept_charset)
+    self
   end
   
-  # Gets the CGI object. If it is nil, returns new CGI object.
+  # Sets a CGI object.
   #
   # Call Locale.init(:driver =&gt; :cgi) first.
   #
-  # * Returns: the CGI object
-  def cgi
-    @@locale_driver_module.cgi
+  # * cgi: CGI object
+  # * Returns: cgi 
+  def cgi=(cgi)
+    set_cgi(cgi)
+    cgi
   end
 end</diff>
      <filename>lib/locale/driver/cgi.rb</filename>
    </modified>
    <modified>
      <diff>@@ -62,59 +62,59 @@ class TestDetectCGI &lt; Test::Unit::TestCase
   end
 
   def test_accept_language
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;&quot;
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;&quot;
+    setup_cgi(&quot;&quot;)
     lang = Locale.current[0]
     assert_equal(Locale::Tag::Simple, lang.class)
     assert_equal(&quot;en&quot;, lang.to_s)
     assert_equal(&quot;en&quot;, lang.to_rfc.to_s)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;ja,en-us;q=0.7,en;q=0.3&quot;
+    setup_cgi(&quot;&quot;)
     lang1, lang2, lang3 = Locale.current
     assert_equal(&quot;ja&quot;, lang1.to_rfc.to_s)
     assert_equal(&quot;en-US&quot;, lang2.to_rfc.to_s)
     assert_equal(&quot;en&quot;, lang3.to_rfc.to_s)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;en-us,ja;q=0.7,en;q=0.3&quot;
+    setup_cgi(&quot;&quot;)
     lang1, lang2, lang3 = Locale.current
     assert_equal(&quot;en-US&quot;, lang1.to_rfc.to_s)
     assert_equal(&quot;ja&quot;, lang2.to_rfc.to_s)
     assert_equal(&quot;en&quot;, lang3.to_rfc.to_s)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;en&quot;
+    setup_cgi(&quot;&quot;)
     lang = Locale.current[0]
     assert_equal(&quot;en&quot;, lang.to_rfc.to_s)
   end
 
   def test_accept_charset
     #accept charset
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;Shift_JIS&quot;
+    setup_cgi(&quot;&quot;)
     assert_equal(&quot;Shift_JIS&quot;, Locale.charset)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;EUC-JP,*,utf-8&quot;
+    setup_cgi(&quot;&quot;)
     assert_equal(&quot;EUC-JP&quot;, Locale.charset)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;*&quot;
+    setup_cgi(&quot;&quot;)
     assert_equal(&quot;UTF-8&quot;, Locale.charset)
 
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;&quot;
+    setup_cgi(&quot;&quot;)
     assert_equal(&quot;UTF-8&quot;, Locale.charset)
   end
 
   def test_default
     Locale.set_default(nil)
     Locale.set_default(&quot;ja-JP&quot;)
-    setup_cgi(&quot;&quot;)
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;&quot;
     ENV[&quot;HTTP_ACCEPT_CHARSET&quot;] = &quot;&quot;
+    setup_cgi(&quot;&quot;)
     assert_equal(&quot;ja-JP&quot;, Locale.default.to_rfc.to_s)
     assert_equal(&quot;ja-JP&quot;, Locale.current.to_rfc.to_s)
     Locale.set_default(nil)
@@ -137,9 +137,9 @@ class TestDetectCGI &lt; Test::Unit::TestCase
   end
 
   def test_candidates
-    setup_cgi(&quot;&quot;)
 
     ENV[&quot;HTTP_ACCEPT_LANGUAGE&quot;] = &quot;fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1&quot;
+    setup_cgi(&quot;&quot;)
 
     assert_equal common(&quot;fr-FR&quot;, &quot;zh-CN&quot;, &quot;zh-TW&quot;, &quot;ja-JP&quot;, 
                         &quot;fr&quot;, &quot;zh&quot;, &quot;ja&quot;, &quot;en&quot;), Locale.candidates</diff>
      <filename>test/test_detect_cgi.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4bf15162cd378180c509a9bfb17a1cce933e39c6</id>
    </parent>
  </parents>
  <author>
    <name>Masao Mutoh</name>
    <email>mutoh@highway.ne.jp</email>
  </author>
  <url>http://github.com/mutoh/locale/commit/703f1f370ae833241d0a727fef86b0bf91854025</url>
  <id>703f1f370ae833241d0a727fef86b0bf91854025</id>
  <committed-date>2009-04-25T12:07:46-07:00</committed-date>
  <authored-date>2009-04-25T12:07:46-07:00</authored-date>
  <message>* locale/driver/cgi.rb: Add Locale.set_request.
* sample/rack/: Add a sample for rack.</message>
  <tree>27a8a242e456e1f996d509109d3d8821162d5ca8</tree>
  <committer>
    <name>Masao Mutoh</name>
    <email>mutoh@highway.ne.jp</email>
  </committer>
</commit>
