locale 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. data/COPYING +55 -0
  2. data/ChangeLog +113 -0
  3. data/README +100 -0
  4. data/Rakefile +77 -0
  5. data/doc/classes/Locale/Driver.html +375 -0
  6. data/doc/classes/Locale/Driver/CGI.html +502 -0
  7. data/doc/classes/Locale/Driver/Env.html +440 -0
  8. data/doc/classes/Locale/Driver/JRuby.html +390 -0
  9. data/doc/classes/Locale/Driver/Posix.html +431 -0
  10. data/doc/classes/Locale/Driver/Win32.html +398 -0
  11. data/doc/classes/Locale/Driver/Win32Table.html +356 -0
  12. data/doc/classes/Locale/Info.html +586 -0
  13. data/doc/classes/Locale/Info/Language.html +764 -0
  14. data/doc/classes/Locale/Info/Region.html +470 -0
  15. data/doc/classes/Locale/Tag/Cldr.html +547 -0
  16. data/doc/classes/Locale/Tag/Common.html +655 -0
  17. data/doc/classes/Locale/Tag/Illegular.html +424 -0
  18. data/doc/classes/Locale/Tag/Posix.html +612 -0
  19. data/doc/classes/Locale/Tag/Rfc.html +610 -0
  20. data/doc/classes/Locale/Tag/Simple.html +684 -0
  21. data/doc/classes/Locale/TagList.html +783 -0
  22. data/doc/classes/Locale/Util.html +476 -0
  23. data/doc/classes/Locale/Util/Memoizable.html +356 -0
  24. data/doc/created.rid +1 -0
  25. data/doc/files/ChangeLog.html +497 -0
  26. data/doc/files/README.html +525 -0
  27. data/doc/files/lib/locale/driver/cgi_rb.html +342 -0
  28. data/doc/files/lib/locale/driver/env_rb.html +354 -0
  29. data/doc/files/lib/locale/driver/jruby_rb.html +359 -0
  30. data/doc/files/lib/locale/driver/posix_rb.html +349 -0
  31. data/doc/files/lib/locale/driver/win32_rb.html +359 -0
  32. data/doc/files/lib/locale/driver/win32_table_rb.html +342 -0
  33. data/doc/files/lib/locale/info/language_rb.html +353 -0
  34. data/doc/files/lib/locale/info/region_rb.html +353 -0
  35. data/doc/files/lib/locale/info_rb.html +354 -0
  36. data/doc/files/lib/locale/tag/cldr_rb.html +342 -0
  37. data/doc/files/lib/locale/tag/common_rb.html +342 -0
  38. data/doc/files/lib/locale/tag/illegular_rb.html +349 -0
  39. data/doc/files/lib/locale/tag/posix_rb.html +342 -0
  40. data/doc/files/lib/locale/tag/rfc_rb.html +342 -0
  41. data/doc/files/lib/locale/tag/simple_rb.html +349 -0
  42. data/doc/files/lib/locale/tag_rb.html +374 -0
  43. data/doc/files/lib/locale/taglist_rb.html +342 -0
  44. data/doc/files/lib/locale/util/memoizable_rb.html +360 -0
  45. data/doc/files/lib/locale/version_rb.html +342 -0
  46. data/doc/files/lib/locale_rb.html +379 -0
  47. data/doc/fr_class_index.html +20 -0
  48. data/doc/fr_file_index.html +23 -0
  49. data/doc/fr_method_index.html +80 -0
  50. data/doc/index.html +1 -0
  51. data/doc/rdoc-style.css +320 -0
  52. data/lib/locale.rb +248 -0
  53. data/lib/locale/data/languages.tab.gz +0 -0
  54. data/lib/locale/data/regions.tab.gz +0 -0
  55. data/lib/locale/driver/cgi.rb +132 -0
  56. data/lib/locale/driver/env.rb +64 -0
  57. data/lib/locale/driver/jruby.rb +53 -0
  58. data/lib/locale/driver/posix.rb +49 -0
  59. data/lib/locale/driver/win32.rb +61 -0
  60. data/lib/locale/driver/win32_table.rb +298 -0
  61. data/lib/locale/info.rb +12 -0
  62. data/lib/locale/info/language.rb +134 -0
  63. data/lib/locale/info/region.rb +74 -0
  64. data/lib/locale/tag.rb +36 -0
  65. data/lib/locale/tag/cldr.rb +93 -0
  66. data/lib/locale/tag/common.rb +122 -0
  67. data/lib/locale/tag/illegular.rb +38 -0
  68. data/lib/locale/tag/posix.rb +97 -0
  69. data/lib/locale/tag/rfc.rb +106 -0
  70. data/lib/locale/tag/simple.rb +145 -0
  71. data/lib/locale/taglist.rb +93 -0
  72. data/lib/locale/util/memoizable.rb +76 -0
  73. data/lib/locale/version.rb +12 -0
  74. data/samples/cgi/README +20 -0
  75. data/samples/cgi/cookie.cgi +62 -0
  76. data/samples/cgi/http.rb +52 -0
  77. data/samples/cgi/index.cgi +90 -0
  78. data/samples/cgi/locale.css +115 -0
  79. data/samples/sample_1.rb +25 -0
  80. data/samples/sample_info.rb +6 -0
  81. data/setup.rb +1585 -0
  82. data/test/test_detect_cgi.rb +179 -0
  83. data/test/test_detect_general.rb +159 -0
  84. data/test/test_info.rb +28 -0
  85. data/test/test_tag.rb +1183 -0
  86. data/test/test_thread.rb +37 -0
  87. metadata +162 -0
@@ -0,0 +1,76 @@
1
+ # Refer from activesupport-2.2.0.
2
+ # * Remove the dependecies to activesupport.
3
+ # * change the key to hash value of args.
4
+ # * Not Thread safe
5
+ # * Add the clear method.
6
+ module Locale
7
+ module Util
8
+ module Memoizable
9
+ MEMOIZED_IVAR = Proc.new do |symbol|
10
+ "#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym
11
+ end
12
+
13
+ def self.included(base)
14
+ mod = self
15
+ base.class_eval do
16
+ extend mod
17
+ end
18
+ end
19
+
20
+ alias :freeze_without_memoizable :freeze #:nodoc:
21
+ def freeze #:nodoc:
22
+ unless frozen?
23
+ @_memoized_ivars = {}
24
+ freeze_without_memoizable
25
+ end
26
+ end
27
+
28
+ # Clear memoized values.
29
+ def clear
30
+ @_memoized_ivars = {}
31
+ end
32
+
33
+ # Cache the result of the methods.
34
+ #
35
+ # include Memoizable
36
+ # def foo
37
+ # ......
38
+ # end
39
+ # def bar(a, b)
40
+ # ......
41
+ # end
42
+ # memoize :foo, :bar(a, b)
43
+ #
44
+ # To clear cache, #clear_foo, #clear_bar is also defined.
45
+ #
46
+ # (NOTE) Consider to use this with huge objects to avoid memory leaks.
47
+ def memoize(*symbols)
48
+ symbols.each do |symbol|
49
+ original_method = "_unmemoized_#{symbol}"
50
+ memoized_ivar = MEMOIZED_IVAR.call(symbol)
51
+ class_eval <<-EOS, __FILE__, __LINE__
52
+ raise "Already memoized #{symbol}" if method_defined?(:#{original_method})
53
+ alias #{original_method} #{symbol}
54
+
55
+ def #{symbol}(*args)
56
+ @_memoized_ivars ||= {}
57
+ @_memoized_ivars[:#{memoized_ivar}] ||= {}
58
+
59
+ key = args.hash
60
+
61
+ ret = @_memoized_ivars[:#{memoized_ivar}][key]
62
+
63
+ if ret
64
+ ret
65
+ else
66
+ @_memoized_ivars[:#{memoized_ivar}][key] = #{original_method}(*args).freeze
67
+ end
68
+ end
69
+
70
+ EOS
71
+ end
72
+
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,12 @@
1
+ =begin
2
+ version - version information of Ruby-Locale
3
+
4
+ Copyright (C) 2008 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+ =end
9
+ module Locale
10
+ VERSION = "0.9.0"
11
+ end
12
+
@@ -0,0 +1,20 @@
1
+ Sample script for CGI/ERB and Ruby/Locale.
2
+
3
+ Run the http server.
4
+ $ ruby http.rb
5
+
6
+ Access the http server from WWW browser:
7
+
8
+ http://localhost:10080/
9
+
10
+ or
11
+
12
+ If you want to set locale(lang) forcely, then:
13
+
14
+ http://localhost:10080/?lang=ja
15
+ #ja is a target locale in this sample.
16
+
17
+ http.rb - an http server for samples using WEBrick
18
+ index.cgi - a sample menu (CGI sample)
19
+ cookie.cgi - Set lang to cookie value.
20
+ locale.css - CSS file.
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+ =begin
3
+ cookie.cgi - Set a selected locale to the cookie of WWW Browser.
4
+
5
+ Set UTF-8 forcely as output charset.
6
+
7
+ Recommanded to set UTF-8 forcely because some web browser
8
+ doesn't send HTTP_ACCEPT_CHARSET correctly.
9
+
10
+ Copyright (C) 2008 Masao Mutoh
11
+
12
+ You may redistribute it and/or modify it under the same
13
+ license terms as Ruby.
14
+ =end
15
+
16
+ $:<< "../../lib"
17
+
18
+ require 'locale'
19
+ require 'cgi'
20
+
21
+ # Initialization of Locale library.
22
+ Locale.init(:driver => :cgi)
23
+ cgi = CGI.new
24
+ Locale.set_cgi(cgi)
25
+
26
+ # Get "lang" from the query string.
27
+ lang = cgi["lang"] or ""
28
+
29
+ #
30
+ # CGI part
31
+ #
32
+ print "Set-Cookie:lang=#{lang}\n"
33
+ print "Content-type:text/html; charset=UTF-8\n\n"
34
+
35
+ puts %Q[
36
+ <html>
37
+ <head>
38
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
39
+ <link rel="stylesheet" type="text/css" href="locale.css" media="all">
40
+ <title>Sample script for CGI and Ruby/Locale</title>
41
+ </head>
42
+ <body>
43
+
44
+ <div style="text-align:center; margin:5em;">
45
+ ]
46
+
47
+ if lang.size > 0
48
+ puts %Q!<p><div id="result">Set [#{lang}] as the cookie of your WWW browser.</div></p>!
49
+ else
50
+ puts %Q!<p><div id="result">Clear "lang" value from your WWW browser.</div></p>!
51
+ end
52
+
53
+ puts %Q!
54
+ <p style="margin:2em;"><a href="/">Back</a></p>
55
+ </div>
56
+ <div style="text-align:right">
57
+ <p>Copyright (C) 2008 Masao Mutoh</p>
58
+ </div>
59
+ </body>
60
+ </html>
61
+ !
62
+
@@ -0,0 +1,52 @@
1
+ #! /usr/bin/env ruby
2
+ =begin
3
+ http.rb - An WebServer for hello locale sample.
4
+
5
+ Copyright (C) 2005-2008 Masao Mutoh
6
+
7
+ You may redistribute it and/or modify it under the same
8
+ license terms as Ruby.
9
+
10
+ Original: Ruby-GetText-Package 1.92.0
11
+
12
+ $Id$
13
+ =end
14
+
15
+ require 'webrick'
16
+ require 'cgi'
17
+ require 'rbconfig'
18
+
19
+ interpreter = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) +
20
+ Config::CONFIG['EXEEXT']
21
+
22
+ srv = WEBrick::HTTPServer.new({:BindAddress => '127.0.0.1',
23
+ :Logger => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),
24
+ # :CGIInterpreter => "ruby -d",
25
+ :Port => 10080})
26
+
27
+ ['INT', 'TERM'].each { |signal|
28
+ trap(signal){ srv.shutdown}
29
+ }
30
+
31
+ srv.mount("/", WEBrick::HTTPServlet::FileHandler, File.expand_path('.'))
32
+
33
+ srv.mount_proc("/src/") do |req, res|
34
+ res.header["Content-Type"] = "text/html; charset=UTF-8"
35
+ if req.query_string
36
+ file = File.open(req.query_string).read
37
+ res.body = %Q[<html>
38
+ <head>
39
+ <title>View a source code</title>
40
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
41
+ <link rel="stylesheet" type="text/css" href="/gettext.css" media="all">
42
+ </head>
43
+ <body><h1>#{req.query_string}</h1>
44
+ <pre>#{CGI.escapeHTML(file)}</pre>
45
+ <p><a href="/">Back</a></p>
46
+ </body>
47
+ </html>
48
+ ]
49
+ end
50
+ end
51
+
52
+ srv.start
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+ =begin
3
+ index.cgi - Sample script for CGI
4
+
5
+ Copyright (C) 2008 Masao Mutoh
6
+
7
+ You may redistribute it and/or modify it under the same
8
+ license terms as Ruby.
9
+ =end
10
+ $:<< "../../lib"
11
+
12
+ begin
13
+ require 'rubygems'
14
+ rescue LoadError
15
+ end
16
+
17
+ require 'locale'
18
+ require 'cgi'
19
+
20
+ # Initialize Locale library.
21
+ Locale.init(:driver => :cgi)
22
+ cgi = CGI.new
23
+ Locale.set_cgi(cgi)
24
+
25
+
26
+ url_base = "http://#{cgi.server_name}:#{cgi.server_port}/"
27
+
28
+ sample_locales = ["en-US", "fr-FR", "ja-JP"]
29
+
30
+ langs = Locale.candidates(:type => :common) #Try :rfc, :simple and others.
31
+
32
+
33
+ #
34
+ # CGI part
35
+ #
36
+
37
+ print "Content-type:text/html; charset=UTF-8\n\n"
38
+
39
+ puts %Q[<html><head>
40
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
41
+ <link rel="stylesheet" type="text/css" href="locale.css" media="all">
42
+ <title>Sample script for CGI/ERB and Ruby/Locale</title>
43
+ </head>
44
+ <body>
45
+ <h1>Ruby/Locale CGI sample scripts</h1>
46
+ <p>Requested Locales order by the priority:</p>
47
+ <div id="result">#{CGI.escapeHTML(langs.inspect)}</div>
48
+
49
+ <h2>Auto-Detect the locale from the WWW browser</h2>
50
+ <p><a href="./">#{url_base}</a></p>
51
+
52
+ <h2>Set locale as the "lang" parameter</h2>
53
+ <ol>
54
+ ]
55
+ sample_locales.each do |lang|
56
+ url = url_base + "?lang=" + lang
57
+ puts %Q!<li> <a href="#{url}">#{CGI.escapeHTML(url)}</a> [#{lang}]</li>!
58
+ end
59
+ url = url_base + "?lang=zh_CN;lang=ko_KR"
60
+ puts %Q!<li> <a href="#{url}">#{CGI.escapeHTML(url)}</a> [Plural locales]</li>!
61
+
62
+ puts "</ol>"
63
+ puts %Q[<h2>Set "lang" as the cookie value.</h2>
64
+ <p>Click one of the link below, and then click "Auto-Detect the locale from the WWW browser".</p>
65
+ <ol>]
66
+
67
+ sample_locales.each do |lang|
68
+ url = url_base + "cookie.cgi?lang=" + lang
69
+ puts %Q!<li><a href="#{url}">#{CGI.escapeHTML(url)}</a> [#{lang}]</li>!
70
+ end
71
+ puts %Q!<li><a href="cookie.cgi">Clear the cookie value</a></li>!
72
+
73
+ puts "</ol>"
74
+ puts "<h2>Source codes</h2>"
75
+ puts "<ol>"
76
+
77
+ Dir.glob("*cgi\0*rb)").sort.each do |src|
78
+ unless /http.rb|makemo.rb/ =~ src
79
+ puts %Q[<li><a href="/src/?#{src}">#{src}</a></li>]
80
+ end
81
+ end
82
+ puts %Q[</ol>
83
+ <hr/>
84
+ <div class="copyright">
85
+ <p>Copyright (C) 2008 Masao Mutoh</p>
86
+ </div>
87
+ </body>
88
+ </html>
89
+ ]
90
+
@@ -0,0 +1,115 @@
1
+ /*
2
+ CSS for Ruby/Locale
3
+ by Masao Mutoh.
4
+ */
5
+
6
+ body {
7
+ margin: 0px;
8
+ padding: 0px;
9
+ color: #000;
10
+ background-color: #fff;
11
+ font-size: 90%;
12
+ font-family: Times, Sans-Serif;
13
+ line-height: 1.5em;
14
+ }
15
+
16
+ h1 {
17
+ color: #002288;
18
+ text-align: left;
19
+ clear: both;
20
+ padding:0.4em;
21
+ font-weight: bold;
22
+ font-size: 1.8em;
23
+ padding-left:0.5em;
24
+ padding-right:10px;
25
+ margin-top: 10px;
26
+ margin-left: 20px;
27
+ margin-bottom:1em;
28
+ margin-right:5px;
29
+ border: solid thin;
30
+ border-left: solid;
31
+ border-color: #9999ff;
32
+ border-top-width: 0px;
33
+ border-right-width: 0px;
34
+ border-bottom-width: 1px;
35
+ border-left-width: 15px;
36
+ }
37
+ h2 {
38
+ margin: 0px;
39
+ font-size: large;
40
+ font-weight: bold;
41
+ font-size: 1.4em;
42
+ padding: 0.3em;
43
+ padding-left:0.5em;
44
+ padding-right:10px;
45
+ margin-top: 1em;
46
+ margin-left: 1.5em;
47
+ margin-right: 10px;
48
+ margin-bottom:0.8em;
49
+ border: solid thin;
50
+ border-left: solid;
51
+ border-color: #9999ff;
52
+ border-top-width: 0px;
53
+ border-right-width: 0px;
54
+ border-bottom-width: 1px;
55
+ border-left-width: 15px;
56
+
57
+ }
58
+
59
+ h3 {
60
+ margin:1em;
61
+ margin-bottom: 0.5em;
62
+ margin-top: 1.5em;
63
+ margin-left: 2em;
64
+ margin-right: 24px;
65
+ padding: 0.1em;
66
+ padding-top: 0;
67
+ padding-left: 0.7em;
68
+ font-size: 1.2em;
69
+ border-style: dashed;
70
+ border-width: 0px 0px 1px 1px;
71
+ border-color: #ddddff;
72
+ }
73
+
74
+ p {
75
+ padding-left: 1em;
76
+ padding-right: 1em;
77
+ margin-top: 0px;
78
+ margin-left: 1.5em;
79
+ margin-right: 1em;
80
+ margin-bottom: 0.5em;
81
+ }
82
+
83
+ ol, ul {
84
+ margin-top: 0.2em;
85
+ margin-left: 3em;
86
+ padding-left: 1.5em;
87
+ }
88
+
89
+ li {
90
+ margin-top: 0.2em;
91
+ margin-left: 0em;
92
+ padding-left: 0em;
93
+ line-height: 1.2em;
94
+ }
95
+
96
+ #result {
97
+ color: red;
98
+ font-weight: bold;
99
+ padding-left: 3em;
100
+ padding-right: 3em;
101
+ }
102
+
103
+ pre {
104
+ margin: 2em;
105
+ padding: 1em;
106
+ border-style: solid;
107
+ border-width: 1px 1px 1px 1px;
108
+ border-color: #ddddff;
109
+ background-color: #eeffee;
110
+ }
111
+
112
+ .copyright {
113
+ text-align: right;
114
+ padding: 2em;
115
+ }
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'locale'
3
+
4
+ puts "Get the current locale."
5
+
6
+ p Locale.current #=> Returns a language in a TagList.
7
+ p Locale.charset
8
+ p Locale.current.language
9
+ p Locale.current[0].language #=> same result.
10
+
11
+ ENV["LANGUAGE"] = "ja_JP.eucJP:fr_FR"
12
+ puts "Set LANGUAGE." + ENV["LANGUAGE"]
13
+
14
+ # Clear locale because the values are cached.
15
+ Locale.clear
16
+
17
+ p Locale.current #=> Return 2 languages in a TagList.
18
+ p Locale.current[0].language
19
+ p Locale.current[1].language
20
+ p Locale.current.language #=> Same with Locale.current[0].language.
21
+ p Locale.charset
22
+
23
+ p "Locale.candidates"
24
+ p Locale.current
25
+ p Locale.candidates