locale 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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