locale 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +16 -0
- data/README.rdoc +14 -6
- data/Rakefile +5 -3
- data/lib/locale.rb +133 -57
- data/lib/locale/driver/cgi.rb +57 -51
- data/lib/locale/driver/jruby.rb +7 -2
- data/lib/locale/driver/posix.rb +3 -3
- data/lib/locale/driver/win32.rb +7 -6
- data/lib/locale/tag.rb +2 -2
- data/lib/locale/tag/cldr.rb +3 -3
- data/lib/locale/tag/common.rb +1 -1
- data/lib/locale/tag/{illegular.rb → irregular.rb} +5 -5
- data/lib/locale/tag/posix.rb +3 -3
- data/lib/locale/tag/rfc.rb +4 -4
- data/lib/locale/tag/simple.rb +4 -0
- data/lib/locale/util/memoizable.rb +8 -3
- data/lib/locale/version.rb +1 -1
- data/samples/rack/README +10 -0
- data/samples/rack/hello_rack.rb +17 -0
- data/samples/rack/hello_rack.ru +5 -0
- data/test/test_detect_cgi.rb +59 -22
- data/test/test_detect_general.rb +1 -0
- data/test/test_tag.rb +5 -4
- data/test/test_thread.rb +4 -4
- metadata +7 -3
data/ChangeLog
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
= locale-2.0.2 (2009-05-04)
|
2
|
+
* Add Locale.set_app_language_tags to restrict the target locales whole the application. [Suggested by Vladimir Dobriakov]
|
3
|
+
* locale/driver/cgi.rb: Add Locale.set_request.
|
4
|
+
* sample/rack: Add a sample for rack.
|
5
|
+
* Improve documents.
|
6
|
+
* Fix bugs
|
7
|
+
* Illegular -> Irregular [by Denis Defreyne]
|
8
|
+
* test_thread.rb doesn't work under the environment where LC_ALL is set .
|
9
|
+
[Reported by Hans de Graaff (Bug#24831)]
|
10
|
+
* Fixed Locale::Drive::CGI.charset don't work when accept_charset is nil.
|
11
|
+
[Reported by hallelujah (Bug#25583)]
|
12
|
+
* Fixed Locale::Drive::Win32.charset don't work.
|
13
|
+
|
14
|
+
Thanks to:
|
15
|
+
Denis Defreyne, Hans de Graaff, hallelujah, Vladimir Dobriakov
|
16
|
+
|
1
17
|
= locale-2.0.1 (2009-04-18)
|
2
18
|
* Locale::Tag::Common#extensions are shown order by the keys.[reported by
|
3
19
|
Dan Coutu]
|
data/README.rdoc
CHANGED
@@ -36,15 +36,23 @@ handle major locale ID standards.
|
|
36
36
|
Download tar-ball from http://rubyforge.org/projects/locale/
|
37
37
|
De-Compress archive and enter its top directory.
|
38
38
|
Then type:
|
39
|
-
|
40
|
-
|
39
|
+
($ su)
|
40
|
+
# ruby setup.rb
|
41
41
|
|
42
42
|
== The simplest usage
|
43
43
|
|
44
44
|
require 'rubygems'
|
45
45
|
require 'locale'
|
46
46
|
|
47
|
-
p Locale.
|
47
|
+
p Locale.candidates
|
48
|
+
|
49
|
+
== APIs
|
50
|
+
The most important APIs are defined in Locale module.
|
51
|
+
|
52
|
+
* Locale.candidates - Returns the current locale candidates.
|
53
|
+
* Locale.current= - Sets the current locale(in a thread).
|
54
|
+
* Locale.default= - Sets the default locale(in the whole program).
|
55
|
+
* Locale.set_app_language_tags - Sets the locale that is supported by the App.
|
48
56
|
|
49
57
|
== License
|
50
58
|
This program is licenced under the same licence as Ruby.
|
@@ -65,13 +73,13 @@ This program is licenced under the same licence as Ruby.
|
|
65
73
|
== References
|
66
74
|
=== Other libraries
|
67
75
|
* langtag-0.1.0
|
68
|
-
|
76
|
+
* by Martin Dürst <http://rubyforge.org/projects/langtag/>
|
69
77
|
|
70
78
|
* memoizable.rb
|
71
|
-
|
79
|
+
* from ActiveSupport-2.2.0 <http://rubyforge.org/projects/activesupport/>
|
72
80
|
|
73
81
|
* Ruby-GetText-Package-1.92.0
|
74
|
-
|
82
|
+
* by Masao Mutoh <http://www.yotabanana.com/hiki/ruby-gettext.html>
|
75
83
|
|
76
84
|
=== Documents
|
77
85
|
* The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition
|
data/Rakefile
CHANGED
@@ -28,9 +28,11 @@ Rake::RDocTask.new { |rdoc|
|
|
28
28
|
end
|
29
29
|
rdoc.rdoc_dir = 'doc'
|
30
30
|
rdoc.title = "Ruby-Locale library"
|
31
|
-
rdoc.options <<
|
32
|
-
|
33
|
-
rdoc.rdoc_files.include('
|
31
|
+
rdoc.options << "--line-numbers" << "--inline-source" <<
|
32
|
+
"--accessor" << "cattr_accessor=object" << "--charset" << "utf-8"
|
33
|
+
rdoc.rdoc_files.include('README.rdoc')
|
34
|
+
rdoc.rdoc_files.include('ChangeLog')
|
35
|
+
rdoc.rdoc_files.add('lib')
|
34
36
|
rdoc.template = allison if allison.size > 0
|
35
37
|
}
|
36
38
|
|
data/lib/locale.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
=begin
|
2
2
|
locale.rb - Locale module
|
3
3
|
|
4
|
-
Copyright (C) 2002-
|
4
|
+
Copyright (C) 2002-2009 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
@@ -17,23 +17,50 @@ require 'locale/taglist'
|
|
17
17
|
require 'locale/version'
|
18
18
|
|
19
19
|
# Locale module manages the locale informations of the application.
|
20
|
+
# These functions are the most important APIs in this library.
|
21
|
+
# Almost of all i18n/l10n programs use this APIs only.
|
20
22
|
module Locale
|
21
23
|
@@default_tag = nil
|
22
24
|
@@locale_driver_module = nil
|
23
25
|
|
26
|
+
ROOT = File.dirname(__FILE__)
|
27
|
+
|
24
28
|
include Locale::Util::Memoizable
|
25
29
|
|
26
30
|
module_function
|
31
|
+
def require_driver(name) #:nodoc:
|
32
|
+
require File.join(ROOT, "locale/driver", name.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_language_tag(tag) #:nodoc:
|
36
|
+
if tag
|
37
|
+
if tag.kind_of? Locale::Tag::Simple
|
38
|
+
tag
|
39
|
+
else
|
40
|
+
Locale::Tag.parse(tag)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
27
47
|
# Initialize Locale library.
|
28
48
|
# Usually, you don't need to call this directly, because
|
29
49
|
# this is called when Locale's methods are called.
|
30
|
-
# If you need to specify the option, call this once first.
|
31
|
-
# (But Almost of all case, you don't need this, because the
|
32
|
-
# framework/library such as gettext calls this.)
|
33
50
|
#
|
34
|
-
# If you use this library with CGI
|
51
|
+
# If you use this library with CGI or the kind of CGI.
|
35
52
|
# You need to call Locale.init(:driver => :cgi).
|
36
53
|
#
|
54
|
+
# ==== For Framework designers/programers:
|
55
|
+
# If your framework is for WWW, call this once like: Locale.init(:driver => :cgi).
|
56
|
+
#
|
57
|
+
# ==== To Application programers:
|
58
|
+
# If your framework doesn't use ruby-locale and the application is for WWW,
|
59
|
+
# call this once like: Locale.init(:driver => :cgi).
|
60
|
+
#
|
61
|
+
# ==== To Library authors:
|
62
|
+
# Don't call this, even if your application is only for WWW.
|
63
|
+
#
|
37
64
|
# * opts: Options as a Hash.
|
38
65
|
# * :driver - The driver. :cgi if you use Locale module with CGI,
|
39
66
|
# nil if you use system locale.
|
@@ -41,14 +68,14 @@ module Locale
|
|
41
68
|
#
|
42
69
|
def init(opts = {})
|
43
70
|
if opts[:driver]
|
44
|
-
|
71
|
+
require_driver opts[:driver]
|
45
72
|
else
|
46
73
|
if /cygwin|mingw|win32/ =~ RUBY_PLATFORM
|
47
|
-
|
74
|
+
require_driver 'win32'
|
48
75
|
elsif /java/ =~ RUBY_PLATFORM
|
49
|
-
|
76
|
+
require_driver 'jruby'
|
50
77
|
else
|
51
|
-
|
78
|
+
require_driver 'posix'
|
52
79
|
end
|
53
80
|
end
|
54
81
|
end
|
@@ -58,33 +85,26 @@ module Locale
|
|
58
85
|
# Usually you don't need to call this method.
|
59
86
|
#
|
60
87
|
# * Returns: the driver module.
|
61
|
-
def driver_module
|
88
|
+
def driver_module
|
62
89
|
unless @@locale_driver_module
|
63
90
|
Locale.init
|
64
91
|
end
|
65
92
|
@@locale_driver_module
|
66
93
|
end
|
67
94
|
|
95
|
+
DEFAULT_LANGUAGE_TAG = Locale::Tag::Simple.new("en") #:nodoc:
|
96
|
+
|
68
97
|
# Sets the default locale as the language tag
|
69
98
|
# (Locale::Tag's class or String(such as "ja_JP")).
|
70
99
|
#
|
71
100
|
# * tag: the default language_tag
|
72
101
|
# * Returns: self.
|
73
102
|
def set_default(tag)
|
74
|
-
default_tag = nil
|
75
103
|
Thread.list.each do |thread|
|
76
104
|
thread[:current_languages] = nil
|
77
|
-
thread[:candidates_caches] =
|
78
|
-
end
|
79
|
-
|
80
|
-
if tag
|
81
|
-
if tag.kind_of? Locale::Tag::Simple
|
82
|
-
default_tag = tag
|
83
|
-
else
|
84
|
-
default_tag = Locale::Tag.parse(tag)
|
85
|
-
end
|
105
|
+
thread[:candidates_caches] = nil
|
86
106
|
end
|
87
|
-
@@default_tag =
|
107
|
+
@@default_tag = create_language_tag(tag)
|
88
108
|
self
|
89
109
|
end
|
90
110
|
|
@@ -103,18 +123,19 @@ module Locale
|
|
103
123
|
#
|
104
124
|
# * Returns: the default locale (Locale::Tag's class).
|
105
125
|
def default
|
106
|
-
@@default_tag
|
126
|
+
@@default_tag || DEFAULT_LANGUAGE_TAG
|
107
127
|
end
|
108
128
|
|
109
129
|
# Sets the locales of the current thread order by the priority.
|
110
130
|
# Each thread has a current locales.
|
111
|
-
# The
|
131
|
+
# The system locale/default locale is used if the thread doesn't have current locales.
|
112
132
|
#
|
113
133
|
# * tag: Locale::Language::Tag's class or the language tag as a String. nil if you need to
|
114
|
-
#
|
134
|
+
# clear current locales.
|
115
135
|
# * charset: the charset (override the charset even if the locale name has charset) or nil.
|
116
136
|
# * Returns: self
|
117
137
|
#
|
138
|
+
# (e.g.)
|
118
139
|
# Locale.set_current("ja_JP.eucJP")
|
119
140
|
# Locale.set_current("ja-JP")
|
120
141
|
# Locale.set_current("en_AU", "en_US", ...)
|
@@ -124,15 +145,11 @@ module Locale
|
|
124
145
|
if tags[0]
|
125
146
|
languages = Locale::TagList.new
|
126
147
|
tags.each do |tag|
|
127
|
-
|
128
|
-
languages << tag
|
129
|
-
else
|
130
|
-
languages << Locale::Tag.parse(tag)
|
131
|
-
end
|
148
|
+
languages << create_language_tag(tag)
|
132
149
|
end
|
133
150
|
end
|
134
151
|
Thread.current[:current_languages] = languages
|
135
|
-
Thread.current[:candidates_caches] =
|
152
|
+
Thread.current[:candidates_caches] = nil
|
136
153
|
self
|
137
154
|
end
|
138
155
|
|
@@ -149,11 +166,18 @@ module Locale
|
|
149
166
|
end
|
150
167
|
|
151
168
|
# Gets the current locales (Locale::Tag's class).
|
169
|
+
# If the current locale is not set, this returns system/default locale.
|
170
|
+
#
|
171
|
+
# This method returns the current language tags even if it isn't included in app_language_tags.
|
172
|
+
#
|
173
|
+
# Usually, the programs should use Locale.candidates to find the correct locale, not this method.
|
152
174
|
#
|
153
|
-
# If the current locale is not set, this returns default/system locale.
|
154
175
|
# * Returns: an Array of the current locales (Locale::Tag's class).
|
155
176
|
def current
|
156
|
-
Thread.current[:current_languages]
|
177
|
+
unless Thread.current[:current_languages]
|
178
|
+
loc = driver_module.locales
|
179
|
+
Thread.current[:current_languages] = loc ? loc : Locale::TagList.new([default])
|
180
|
+
end
|
157
181
|
Thread.current[:current_languages]
|
158
182
|
end
|
159
183
|
|
@@ -168,21 +192,25 @@ module Locale
|
|
168
192
|
end
|
169
193
|
|
170
194
|
# Returns the language tags which are variations of the current locales order by priority.
|
195
|
+
#
|
171
196
|
# For example, if the current locales are ["fr", "ja_JP", "en_US", "en-Latn-GB-VARIANT"],
|
172
197
|
# then returns ["fr", "ja_JP", "en_US", "en-Latn-GB-VARIANT", "en_Latn_GB", "en_GB", "ja", "en"].
|
173
|
-
# "en" is the default locale
|
198
|
+
# "en" is the default locale(You can change it using set_default).
|
199
|
+
# The default locale is added at the end of the list even if it isn't exist.
|
200
|
+
#
|
174
201
|
# Usually, this method is used to find the locale data as the path(or a kind of IDs).
|
175
202
|
# * options: options as a Hash or nil.
|
176
|
-
# * :supported_language_tags
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
#
|
182
|
-
#
|
203
|
+
# * :supported_language_tags -
|
204
|
+
# An Array of the language tags order by the priority. This option
|
205
|
+
# restricts the locales which are supported by the library/application.
|
206
|
+
# Default is nil if you don't need to restrict the locales.
|
207
|
+
# (e.g.1) ["fr_FR", "en_GB", "en_US", ...]
|
208
|
+
# * :type -
|
209
|
+
# The type of language tag. :common, :rfc, :cldr, :posix and
|
210
|
+
# :simple are available. Default value is :common
|
183
211
|
def candidates(options = {})
|
184
|
-
opts = {:supported_language_tags => nil, :
|
185
|
-
:
|
212
|
+
opts = {:supported_language_tags => nil, :current => current,
|
213
|
+
:type => :common}.merge(options)
|
186
214
|
|
187
215
|
if Thread.current[:candidates_caches]
|
188
216
|
cache = Thread.current[:candidates_caches][opts.hash]
|
@@ -191,31 +219,44 @@ module Locale
|
|
191
219
|
Thread.current[:candidates_caches] = {}
|
192
220
|
end
|
193
221
|
Thread.current[:candidates_caches][opts.hash] =
|
194
|
-
collect_candidates(opts[:type], current,
|
195
|
-
opts[:default_language_tags],
|
222
|
+
collect_candidates(opts[:type], opts[:current],
|
196
223
|
opts[:supported_language_tags])
|
197
224
|
end
|
198
225
|
|
199
226
|
# collect tag candidates and memoize it.
|
200
227
|
# The result is shared from all threads.
|
201
|
-
def collect_candidates(type, tags,
|
202
|
-
default_language_tags = default_tags.collect{|v|
|
203
|
-
Locale::Tag.parse(v).send("to_#{type}")}.flatten.uniq
|
204
|
-
|
228
|
+
def collect_candidates(type, tags, supported_tags) # :nodoc:
|
205
229
|
candidate_tags = tags.collect{|v| v.send("to_#{type}").candidates}
|
230
|
+
default_tags = default.send("to_#{type}").candidates
|
231
|
+
if app_language_tags
|
232
|
+
app_tags = app_language_tags.collect{|v| v.send("to_#{type}")}.flatten.uniq
|
233
|
+
end
|
234
|
+
if supported_tags
|
235
|
+
supported_tags = supported_tags.collect{|v| Locale::Tag.parse(v).send("to_#{type}")}.flatten.uniq
|
236
|
+
end
|
206
237
|
|
207
238
|
tags = []
|
208
239
|
(0...candidate_tags[0].size).each {|i|
|
209
240
|
tags += candidate_tags.collect{|v| v[i]}
|
210
241
|
}
|
211
|
-
tags +=
|
242
|
+
tags += default_tags
|
212
243
|
tags.uniq!
|
213
244
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
245
|
+
all_tags = nil
|
246
|
+
if app_tags
|
247
|
+
if supported_tags
|
248
|
+
all_tags = app_tags & supported_tags
|
249
|
+
else
|
250
|
+
all_tags = app_tags
|
251
|
+
end
|
252
|
+
elsif supported_tags
|
253
|
+
all_tags = supported_tags
|
218
254
|
end
|
255
|
+
if all_tags
|
256
|
+
tags &= all_tags
|
257
|
+
tags = default_tags.uniq if tags.size == 0
|
258
|
+
end
|
259
|
+
|
219
260
|
Locale::TagList.new(tags)
|
220
261
|
end
|
221
262
|
memoize :collect_candidates
|
@@ -227,7 +268,7 @@ module Locale
|
|
227
268
|
#
|
228
269
|
# * Returns: the current charset.
|
229
270
|
def charset
|
230
|
-
driver_module.charset
|
271
|
+
driver_module.charset || "UTF-8"
|
231
272
|
end
|
232
273
|
memoize :charset
|
233
274
|
|
@@ -235,19 +276,54 @@ module Locale
|
|
235
276
|
# * Returns: self
|
236
277
|
def clear
|
237
278
|
Thread.current[:current_languages] = nil
|
238
|
-
Thread.current[:candidates_caches] =
|
279
|
+
Thread.current[:candidates_caches] = nil
|
239
280
|
self
|
240
281
|
end
|
241
282
|
|
242
283
|
# Clear all locales and charsets of all threads.
|
243
|
-
# This doesn't clear the default
|
284
|
+
# This doesn't clear the default and app_language_tags.
|
244
285
|
# Use Locale.default = nil to unset the default locale.
|
245
286
|
# * Returns: self
|
246
287
|
def clear_all
|
247
288
|
Thread.list.each do |thread|
|
248
289
|
thread[:current_languages] = nil
|
249
|
-
thread[:candidates_caches] =
|
290
|
+
thread[:candidates_caches] = nil
|
291
|
+
end
|
292
|
+
memoize_clear
|
293
|
+
self
|
294
|
+
end
|
295
|
+
|
296
|
+
@@app_language_tags = nil
|
297
|
+
# Set the language tags which is supported by the Application.
|
298
|
+
# This value is same with supported_language_tags in Locale.candidates
|
299
|
+
# to restrict the result but is the global setting.
|
300
|
+
# If you set a language tag, the application works as the single locale
|
301
|
+
# application.
|
302
|
+
#
|
303
|
+
# If the current locale is not included in app_language_tags,
|
304
|
+
# Locale.default value is used.
|
305
|
+
# Use Locale.set_default() to set correct language
|
306
|
+
# if "en" is not included in the language tags.
|
307
|
+
#
|
308
|
+
# Set nil if clear the value.
|
309
|
+
#
|
310
|
+
# Note that the libraries/plugins shouldn't set this value.
|
311
|
+
#
|
312
|
+
# (e.g.) Locale.set_app_language_tags("fr_FR", "en-GB", "en_US", ...)
|
313
|
+
def set_app_language_tags(*tags)
|
314
|
+
if tags[0]
|
315
|
+
@@app_language_tags = tags.collect{|v| Locale::Tag.parse(v)}
|
316
|
+
else
|
317
|
+
@@app_language_tags = nil
|
250
318
|
end
|
319
|
+
|
320
|
+
clear_all
|
251
321
|
self
|
252
322
|
end
|
323
|
+
|
324
|
+
# Returns the app_language_tags. Default is nil. See set_app_language_tags for more details.
|
325
|
+
def app_language_tags
|
326
|
+
@@app_language_tags
|
327
|
+
end
|
328
|
+
|
253
329
|
end
|
data/lib/locale/driver/cgi.rb
CHANGED
@@ -19,9 +19,6 @@ module Locale
|
|
19
19
|
module CGI
|
20
20
|
$stderr.puts self.name + " is loaded." if $DEBUG
|
21
21
|
|
22
|
-
@@default_locale = Locale::Tag::Simple.new("en")
|
23
|
-
@@default_charset = "UTF-8"
|
24
|
-
|
25
22
|
module_function
|
26
23
|
# Gets required locales from CGI parameters. (Based on RFC2616)
|
27
24
|
#
|
@@ -29,14 +26,13 @@ module Locale
|
|
29
26
|
# (QUERY_STRING "lang" > COOKIE "lang" > HTTP_ACCEPT_LANGUAGE > "en")
|
30
27
|
#
|
31
28
|
def locales
|
32
|
-
|
33
|
-
|
29
|
+
req = Thread.current[:current_request]
|
30
|
+
return nil unless req
|
34
31
|
|
35
|
-
locales =
|
32
|
+
locales = []
|
36
33
|
|
37
34
|
# QUERY_STRING "lang"
|
38
|
-
langs =
|
39
|
-
if langs
|
35
|
+
if langs = req[:query_langs]
|
40
36
|
langs.each do |lang|
|
41
37
|
locales << Locale::Tag.parse(lang)
|
42
38
|
end
|
@@ -44,8 +40,7 @@ module Locale
|
|
44
40
|
|
45
41
|
unless locales.size > 0
|
46
42
|
# COOKIE "lang"
|
47
|
-
langs =
|
48
|
-
if langs
|
43
|
+
if langs = req[:cookie_langs]
|
49
44
|
langs.each do |lang|
|
50
45
|
locales << Locale::Tag.parse(lang) if lang.size > 0
|
51
46
|
end
|
@@ -54,77 +49,88 @@ module Locale
|
|
54
49
|
|
55
50
|
unless locales.size > 0
|
56
51
|
# HTTP_ACCEPT_LANGUAGE
|
57
|
-
if lang =
|
52
|
+
if lang = req[:accept_language] and lang.size > 0
|
58
53
|
locales += lang.gsub(/\s/, "").split(/,/).map{|v| v.split(";q=")}.map{|j| [j[0], j[1] ? j[1].to_f : 1.0]}.sort{|a,b| -(a[1] <=> b[1])}.map{|v| Locale::Tag.parse(v[0])}
|
59
54
|
end
|
60
55
|
end
|
61
56
|
|
62
|
-
|
63
|
-
locales << @@default_locale
|
64
|
-
end
|
65
|
-
Locale::TagList.new(locales.uniq)
|
57
|
+
locales.size > 0 ? Locale::TagList.new(locales.uniq) : nil
|
66
58
|
end
|
67
59
|
|
68
60
|
# Gets the charset from CGI parameters. (Based on RFC2616)
|
69
|
-
# * Returns: the charset (HTTP_ACCEPT_CHARSET
|
61
|
+
# * Returns: the charset (HTTP_ACCEPT_CHARSET or nil).
|
70
62
|
def charset
|
71
|
-
|
72
|
-
|
63
|
+
req = Thread.current[:current_request]
|
64
|
+
return nil unless req
|
65
|
+
|
66
|
+
charsets = req[:accept_charset]
|
73
67
|
if charsets and charsets.size > 0
|
74
68
|
num = charsets.index(',')
|
75
69
|
charset = num ? charsets[0, num] : charsets
|
76
|
-
charset =
|
70
|
+
charset = nil if charset == "*"
|
77
71
|
else
|
78
|
-
charset =
|
72
|
+
charset = nil
|
79
73
|
end
|
80
74
|
charset
|
81
75
|
end
|
82
76
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
77
|
+
# Set a request.
|
78
|
+
#
|
79
|
+
# * query_langs: An Array of QUERY_STRING value "lang".
|
80
|
+
# * cookie_langs: An Array of cookie value "lang".
|
81
|
+
# * accept_language: The value of HTTP_ACCEPT_LANGUAGE
|
82
|
+
# * accept_charset: The value of HTTP_ACCEPT_CHARSET
|
83
|
+
def set_request(query_langs, cookie_langs, accept_language, accept_charset)
|
84
|
+
Thread.current[:current_request] = {
|
85
|
+
:query_langs => query_langs,
|
86
|
+
:cookie_langs => cookie_langs,
|
87
|
+
:accept_language => accept_language,
|
88
|
+
:accept_charset => accept_charset
|
89
|
+
}
|
90
|
+
self
|
91
|
+
end
|
92
|
+
|
93
|
+
# Clear the current request.
|
94
|
+
def clear_current_request
|
95
|
+
Thread.current[:current_request] = nil
|
96
|
+
end
|
94
97
|
end
|
95
98
|
end
|
96
99
|
|
97
100
|
@@locale_driver_module = Driver::CGI
|
98
101
|
|
99
102
|
module_function
|
100
|
-
# Sets a
|
101
|
-
#
|
102
|
-
# Call Locale.init(:driver => :cgi) first.
|
103
|
+
# Sets a request values for lang/charset.
|
103
104
|
#
|
104
|
-
# *
|
105
|
-
# *
|
106
|
-
|
107
|
-
|
105
|
+
# * query_langs: An Array of QUERY_STRING value "lang".
|
106
|
+
# * cookie_langs: An Array of cookie value "lang".
|
107
|
+
# * accept_language: The value of HTTP_ACCEPT_LANGUAGE
|
108
|
+
# * accept_charset: The value of HTTP_ACCEPT_CHARSET
|
109
|
+
def set_request(query_langs, cookie_langs, accept_language, accept_charset)
|
110
|
+
@@locale_driver_module.set_request(query_langs, cookie_langs, accept_language, accept_charset)
|
108
111
|
self
|
109
112
|
end
|
110
|
-
|
111
|
-
# Sets a CGI object.
|
113
|
+
|
114
|
+
# Sets a CGI object. This is the convenient function of set_request().
|
112
115
|
#
|
113
|
-
#
|
116
|
+
# This method is appeared when Locale.init(:driver => :cgi) is called.
|
114
117
|
#
|
115
|
-
# *
|
116
|
-
# * Returns:
|
117
|
-
def cgi
|
118
|
-
|
119
|
-
|
118
|
+
# * cgi: CGI object
|
119
|
+
# * Returns: self
|
120
|
+
def set_cgi(cgi)
|
121
|
+
set_request(cgi.params["lang"], cgi.cookies["lang"],
|
122
|
+
cgi.accept_language, cgi.accept_charset)
|
123
|
+
self
|
120
124
|
end
|
121
125
|
|
122
|
-
#
|
126
|
+
# Sets a CGI object.This is the convenient function of set_request().
|
123
127
|
#
|
124
|
-
#
|
128
|
+
# This method is appeared when Locale.init(:driver => :cgi) is called.
|
125
129
|
#
|
126
|
-
# *
|
127
|
-
|
128
|
-
|
130
|
+
# * cgi: CGI object
|
131
|
+
# * Returns: cgi
|
132
|
+
def cgi=(cgi)
|
133
|
+
set_cgi(cgi)
|
134
|
+
cgi
|
129
135
|
end
|
130
136
|
end
|
data/lib/locale/driver/jruby.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
$Id: jruby.rb 27 2008-12-03 15:06:50Z mutoh $
|
12
12
|
=end
|
13
13
|
|
14
|
-
require '
|
14
|
+
require File.join(File.dirname(__FILE__), 'env')
|
15
15
|
require 'java'
|
16
16
|
|
17
17
|
module Locale
|
@@ -33,9 +33,14 @@ module Locale
|
|
33
33
|
locales = ::Locale::Driver::Env.locales
|
34
34
|
unless locales
|
35
35
|
locale = java.util.Locale.getDefault
|
36
|
+
variant = Locale.getVariant
|
37
|
+
variants = []
|
38
|
+
if valiant != nil and variant.size > 0
|
39
|
+
valiants = [valiant]
|
40
|
+
end
|
36
41
|
locales = TagList.new([Locale::Tag::Common.new(locale.getLanguage, nil,
|
37
42
|
locale.getCountry,
|
38
|
-
|
43
|
+
variants)])
|
39
44
|
end
|
40
45
|
locales
|
41
46
|
end
|
data/lib/locale/driver/posix.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
$Id: posix.rb 27 2008-12-03 15:06:50Z mutoh $
|
12
12
|
=end
|
13
13
|
|
14
|
-
require '
|
14
|
+
require File.join(File.dirname(__FILE__), 'env')
|
15
15
|
|
16
16
|
module Locale
|
17
17
|
# Locale::Driver::Posix module for Posix OS (Unix)
|
@@ -30,14 +30,14 @@ module Locale
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Gets the charset from environment variable or the result of
|
33
|
-
# "locale charmap".
|
33
|
+
# "locale charmap" or nil.
|
34
34
|
# * Returns: the system charset.
|
35
35
|
def charset
|
36
36
|
charset = ::Locale::Driver::Env.charset
|
37
37
|
unless charset
|
38
38
|
charset = `locale charmap`.strip
|
39
39
|
unless $? && $?.success?
|
40
|
-
charset =
|
40
|
+
charset = nil
|
41
41
|
end
|
42
42
|
end
|
43
43
|
charset
|
data/lib/locale/driver/win32.rb
CHANGED
@@ -11,8 +11,8 @@
|
|
11
11
|
$Id: win32.rb 27 2008-12-03 15:06:50Z mutoh $
|
12
12
|
=end
|
13
13
|
|
14
|
-
require '
|
15
|
-
require '
|
14
|
+
require File.join(File.dirname(__FILE__), 'env')
|
15
|
+
require File.join(File.dirname(__FILE__), 'win32_table')
|
16
16
|
require 'dl/win32'
|
17
17
|
|
18
18
|
|
@@ -34,9 +34,10 @@ module Locale
|
|
34
34
|
def charset
|
35
35
|
charset = ::Locale::Driver::Env.charset
|
36
36
|
unless charset
|
37
|
-
|
37
|
+
locale = locales[0]
|
38
|
+
loc = LocaleTable.find{|v| v[1] =locale.to_rfc}
|
38
39
|
loc = LocaleTable.find{|v| v[1] =~ /^#{locale.language}-/} unless loc
|
39
|
-
charset = loc ? loc[2] :
|
40
|
+
charset = loc ? loc[2] : nil
|
40
41
|
end
|
41
42
|
charset
|
42
43
|
end
|
@@ -47,10 +48,10 @@ module Locale
|
|
47
48
|
lang = LocaleTable.assoc(@@win32.call)
|
48
49
|
if lang
|
49
50
|
ret = Locale::Tag::Common.parse(lang[1])
|
51
|
+
locales = Locale::TagList.new([ret])
|
50
52
|
else
|
51
|
-
|
53
|
+
locales = nil
|
52
54
|
end
|
53
|
-
locales = Locale::TagList.new([ret])
|
54
55
|
end
|
55
56
|
locales
|
56
57
|
end
|
data/lib/locale/tag.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
=end
|
9
9
|
|
10
10
|
require 'locale/tag/simple'
|
11
|
-
require 'locale/tag/
|
11
|
+
require 'locale/tag/irregular'
|
12
12
|
require 'locale/tag/common'
|
13
13
|
require 'locale/tag/rfc'
|
14
14
|
require 'locale/tag/cldr'
|
@@ -31,7 +31,7 @@ module Locale
|
|
31
31
|
ret = parser.parse(tag)
|
32
32
|
return ret if ret
|
33
33
|
end
|
34
|
-
Locale::Tag::
|
34
|
+
Locale::Tag::Irregular.new(tag)
|
35
35
|
end
|
36
36
|
memoize :parse
|
37
37
|
end
|
data/lib/locale/tag/cldr.rb
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
|
10
10
|
require 'locale/tag/common'
|
11
11
|
|
12
|
-
module Locale
|
13
|
-
module Tag
|
12
|
+
module Locale
|
13
|
+
module Tag
|
14
14
|
|
15
15
|
# Unicode locale identifier class for CLDR-1.6.1.
|
16
16
|
# (Unicode Common Locale Data Repository).
|
@@ -61,7 +61,7 @@ module Locale #:nodoc:
|
|
61
61
|
super(language, script, region, variants.map{|v| v.upcase})
|
62
62
|
end
|
63
63
|
|
64
|
-
# Sets the extensions.
|
64
|
+
# Sets the extensions as an Hash.
|
65
65
|
def extensions=(val)
|
66
66
|
clear
|
67
67
|
@extensions = val
|
data/lib/locale/tag/common.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
=begin
|
2
|
-
locale/tag/
|
2
|
+
locale/tag/irregular.rb - Locale::Tag::Irregular
|
3
3
|
|
4
4
|
Copyright (C) 2008 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
8
|
|
9
|
-
$Id:
|
9
|
+
$Id: irregular.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
10
|
=end
|
11
11
|
|
12
12
|
require 'locale/tag/simple'
|
@@ -15,17 +15,17 @@ module Locale
|
|
15
15
|
|
16
16
|
module Tag
|
17
17
|
# Broken tag class.
|
18
|
-
class
|
18
|
+
class Irregular < Simple
|
19
19
|
|
20
20
|
def initialize(tag)
|
21
|
-
tag = "en" if tag == nil
|
21
|
+
tag = "en" if tag == nil or tag == ""
|
22
22
|
@language = tag
|
23
23
|
@tag = tag
|
24
24
|
end
|
25
25
|
|
26
26
|
# Returns an Array of tag-candidates order by priority.
|
27
27
|
def candidates
|
28
|
-
[
|
28
|
+
[Irregular.new(tag)]
|
29
29
|
end
|
30
30
|
memoize :candidates
|
31
31
|
|
data/lib/locale/tag/posix.rb
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
$Id: posix.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
10
|
=end
|
11
11
|
|
12
|
-
module Locale
|
13
|
-
module Tag
|
12
|
+
module Locale
|
13
|
+
module Tag
|
14
14
|
|
15
15
|
# Locale tag class for POSIX locale
|
16
16
|
# * ja
|
@@ -60,7 +60,7 @@ module Locale #:nodoc:
|
|
60
60
|
@charset = val
|
61
61
|
end
|
62
62
|
|
63
|
-
# Set the modifier
|
63
|
+
# Set the modifier as a String
|
64
64
|
def modifier=(val)
|
65
65
|
clear
|
66
66
|
@modifier = val
|
data/lib/locale/tag/rfc.rb
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
|
10
10
|
require 'locale/tag/common'
|
11
11
|
|
12
|
-
module Locale
|
13
|
-
module Tag
|
12
|
+
module Locale
|
13
|
+
module Tag
|
14
14
|
|
15
15
|
# Language tag class for RFC4646(BCP47).
|
16
16
|
class Rfc < Common
|
@@ -64,13 +64,13 @@ module Locale #:nodoc:
|
|
64
64
|
super(language, script, region, variants)
|
65
65
|
end
|
66
66
|
|
67
|
-
# Sets the extensions.
|
67
|
+
# Sets the extensions as an Array.
|
68
68
|
def extensions=(val)
|
69
69
|
clear
|
70
70
|
@extensions = val
|
71
71
|
end
|
72
72
|
|
73
|
-
# Sets the
|
73
|
+
# Sets the privateuse as a String
|
74
74
|
def privateuse=(val)
|
75
75
|
clear
|
76
76
|
@privateuse = val
|
data/lib/locale/tag/simple.rb
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
module Locale
|
8
8
|
module Util
|
9
9
|
module Memoizable
|
10
|
-
MEMOIZED_IVAR = Proc.new do |symbol|
|
10
|
+
MEMOIZED_IVAR = Proc.new do |symbol|
|
11
11
|
"#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym
|
12
|
-
end
|
12
|
+
end
|
13
13
|
|
14
14
|
def self.included(base)
|
15
15
|
mod = self
|
@@ -26,8 +26,13 @@ module Locale
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
# Clear memoized values. Deprecated.
|
30
|
+
def clear # :nodoc:
|
31
|
+
@_memoized_ivars = {}
|
32
|
+
end
|
33
|
+
|
29
34
|
# Clear memoized values.
|
30
|
-
def
|
35
|
+
def memoize_clear
|
31
36
|
@_memoized_ivars = {}
|
32
37
|
end
|
33
38
|
|
data/lib/locale/version.rb
CHANGED
data/samples/rack/README
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rack'
|
3
|
+
require 'locale'
|
4
|
+
|
5
|
+
Locale.init(:driver => :cgi)
|
6
|
+
|
7
|
+
class HelloRackApp
|
8
|
+
def call(env)
|
9
|
+
req = Rack::Request.new(env)
|
10
|
+
Locale.set_request(req["lang"], req.cookies["lang"],
|
11
|
+
env["HTTP_ACCEPT_LANGUAGE"], env["HTTP_ACCEPT_CHARSET"])
|
12
|
+
str = "Language tag candidates of your request order by the priority:\n\n"
|
13
|
+
str += Locale.candidates(:type => :rfc).map{|v| v.inspect + "\n"}.join
|
14
|
+
[200, {"Content-Type" => "text/plain", "Content-Length" => str.length.to_s}, [str]]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/test/test_detect_cgi.rb
CHANGED
@@ -62,59 +62,59 @@ class TestDetectCGI < Test::Unit::TestCase
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def test_accept_language
|
65
|
-
setup_cgi("")
|
66
65
|
ENV["HTTP_ACCEPT_LANGUAGE"] = ""
|
67
66
|
ENV["HTTP_ACCEPT_CHARSET"] = ""
|
67
|
+
setup_cgi("")
|
68
68
|
lang = Locale.current[0]
|
69
69
|
assert_equal(Locale::Tag::Simple, lang.class)
|
70
70
|
assert_equal("en", lang.to_s)
|
71
71
|
assert_equal("en", lang.to_rfc.to_s)
|
72
72
|
|
73
|
-
setup_cgi("")
|
74
73
|
ENV["HTTP_ACCEPT_LANGUAGE"] = "ja,en-us;q=0.7,en;q=0.3"
|
74
|
+
setup_cgi("")
|
75
75
|
lang1, lang2, lang3 = Locale.current
|
76
76
|
assert_equal("ja", lang1.to_rfc.to_s)
|
77
77
|
assert_equal("en-US", lang2.to_rfc.to_s)
|
78
78
|
assert_equal("en", lang3.to_rfc.to_s)
|
79
79
|
|
80
|
-
setup_cgi("")
|
81
80
|
ENV["HTTP_ACCEPT_LANGUAGE"] = "en-us,ja;q=0.7,en;q=0.3"
|
81
|
+
setup_cgi("")
|
82
82
|
lang1, lang2, lang3 = Locale.current
|
83
83
|
assert_equal("en-US", lang1.to_rfc.to_s)
|
84
84
|
assert_equal("ja", lang2.to_rfc.to_s)
|
85
85
|
assert_equal("en", lang3.to_rfc.to_s)
|
86
86
|
|
87
|
-
setup_cgi("")
|
88
87
|
ENV["HTTP_ACCEPT_LANGUAGE"] = "en"
|
88
|
+
setup_cgi("")
|
89
89
|
lang = Locale.current[0]
|
90
90
|
assert_equal("en", lang.to_rfc.to_s)
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_accept_charset
|
94
94
|
#accept charset
|
95
|
-
setup_cgi("")
|
96
95
|
ENV["HTTP_ACCEPT_CHARSET"] = "Shift_JIS"
|
96
|
+
setup_cgi("")
|
97
97
|
assert_equal("Shift_JIS", Locale.charset)
|
98
98
|
|
99
|
-
setup_cgi("")
|
100
99
|
ENV["HTTP_ACCEPT_CHARSET"] = "EUC-JP,*,utf-8"
|
100
|
+
setup_cgi("")
|
101
101
|
assert_equal("EUC-JP", Locale.charset)
|
102
102
|
|
103
|
-
setup_cgi("")
|
104
103
|
ENV["HTTP_ACCEPT_CHARSET"] = "*"
|
104
|
+
setup_cgi("")
|
105
105
|
assert_equal("UTF-8", Locale.charset)
|
106
106
|
|
107
|
-
setup_cgi("")
|
108
107
|
ENV["HTTP_ACCEPT_CHARSET"] = ""
|
108
|
+
setup_cgi("")
|
109
109
|
assert_equal("UTF-8", Locale.charset)
|
110
110
|
end
|
111
111
|
|
112
112
|
def test_default
|
113
113
|
Locale.set_default(nil)
|
114
114
|
Locale.set_default("ja-JP")
|
115
|
-
setup_cgi("")
|
116
115
|
ENV["HTTP_ACCEPT_LANGUAGE"] = ""
|
117
116
|
ENV["HTTP_ACCEPT_CHARSET"] = ""
|
117
|
+
setup_cgi("")
|
118
118
|
assert_equal("ja-JP", Locale.default.to_rfc.to_s)
|
119
119
|
assert_equal("ja-JP", Locale.current.to_rfc.to_s)
|
120
120
|
Locale.set_default(nil)
|
@@ -137,9 +137,9 @@ class TestDetectCGI < Test::Unit::TestCase
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def test_candidates
|
140
|
-
setup_cgi("")
|
141
140
|
|
142
141
|
ENV["HTTP_ACCEPT_LANGUAGE"] = "fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1"
|
142
|
+
setup_cgi("")
|
143
143
|
|
144
144
|
assert_equal common("fr-FR", "zh-CN", "zh-TW", "ja-JP",
|
145
145
|
"fr", "zh", "ja", "en"), Locale.candidates
|
@@ -153,27 +153,64 @@ class TestDetectCGI < Test::Unit::TestCase
|
|
153
153
|
assert_equal simple("fr-FR", "zh-CN", "zh-TW", "ja-JP",
|
154
154
|
"fr", "zh", "ja", "en"), Locale.candidates(:type => :simple)
|
155
155
|
|
156
|
+
taglist = Locale.candidates(:type => :rfc)
|
157
|
+
assert_equal Locale::TagList, taglist.class
|
158
|
+
assert_equal "fr", taglist.language
|
159
|
+
assert_equal "FR", taglist.region
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_candidates_with_supported_language_tags
|
164
|
+
ENV["HTTP_ACCEPT_LANGUAGE"] = "fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1"
|
165
|
+
setup_cgi("")
|
166
|
+
|
156
167
|
assert_equal common("fr_FR", "zh", "ja"), Locale.candidates(:type => :common,
|
157
168
|
:supported_language_tags => ["fr_FR", "ja", "zh"])
|
158
169
|
|
159
170
|
assert_equal simple("fr-FR", "zh", "ja"), Locale.candidates(:type => :simple,
|
160
171
|
:supported_language_tags => ["fr-FR", "ja", "zh"])
|
172
|
+
#supported_language_tags includes "pt" as not in HTTP_ACCEPT_LANGUAGE
|
173
|
+
assert_equal simple("fr-FR", "zh", "ja"),
|
174
|
+
Locale.candidates(:type => :simple,
|
175
|
+
:supported_language_tags => ["fr-FR", "ja", "zh", "pt"])
|
176
|
+
|
177
|
+
end
|
161
178
|
|
162
|
-
|
179
|
+
def test_candidates_with_default
|
180
|
+
ENV["HTTP_ACCEPT_LANGUAGE"] = "fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1"
|
181
|
+
setup_cgi("")
|
182
|
+
|
183
|
+
Locale.default = "zh_TW"
|
184
|
+
assert_equal simple("fr-FR", "zh", "ja"),
|
163
185
|
Locale.candidates(:type => :simple,
|
164
|
-
:supported_language_tags => ["fr-FR", "ja", "zh", "
|
165
|
-
:default_language_tags => ["no", "pt"])
|
186
|
+
:supported_language_tags => ["fr-FR", "ja", "zh", "pt"])
|
166
187
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
188
|
+
Locale.default = "pt"
|
189
|
+
assert_equal simple("fr-FR", "zh", "ja", "pt"),
|
190
|
+
Locale.candidates(:type => :simple,
|
191
|
+
:supported_language_tags => ["fr-FR", "ja", "zh", "pt"])
|
192
|
+
|
193
|
+
# default value is selected even if default is not in supported_language_tags.
|
194
|
+
assert_equal simple("pt"), Locale.candidates(:type => :simple,
|
171
195
|
:supported_language_tags => ["aa"])
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
196
|
+
Locale.default = "en"
|
197
|
+
end
|
198
|
+
|
199
|
+
|
200
|
+
def test_candidates_with_app_language_tags
|
201
|
+
Locale.set_app_language_tags("fr-FR", "ja")
|
202
|
+
|
203
|
+
ENV["HTTP_ACCEPT_LANGUAGE"] = "fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1"
|
204
|
+
setup_cgi("")
|
205
|
+
|
206
|
+
assert_equal common("fr-FR", "ja"), Locale.candidates
|
207
|
+
|
208
|
+
# default value is selected if default is not in app_language_tags.
|
209
|
+
Locale.set_app_language_tags("no", "pt")
|
210
|
+
Locale.default = "zh"
|
211
|
+
assert_equal common("zh"), Locale.candidates
|
177
212
|
|
213
|
+
Locale.default = "en"
|
214
|
+
Locale.set_app_language_tags(nil)
|
178
215
|
end
|
179
216
|
end
|
data/test/test_detect_general.rb
CHANGED
@@ -123,6 +123,7 @@ class TestDetectGeneral < Test::Unit::TestCase
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def test_default
|
126
|
+
return unless /linux|bsd/ =~ RUBY_PLATFORM
|
126
127
|
Locale.set_default("yo_NG")
|
127
128
|
assert_equal Locale::Tag.parse("yo_NG"), Locale.default
|
128
129
|
assert_equal Locale::Tag.parse("yo_NG"), Locale.current[0]
|
data/test/test_tag.rb
CHANGED
@@ -1135,11 +1135,11 @@ class TagTest < Test::Unit::TestCase
|
|
1135
1135
|
|
1136
1136
|
def test_invaild
|
1137
1137
|
lang = Locale::Tag.parse("")
|
1138
|
-
assert_equal Locale::Tag::
|
1138
|
+
assert_equal Locale::Tag::Irregular, lang.class
|
1139
1139
|
assert_equal "en", lang.language
|
1140
1140
|
assert_equal nil, lang.region
|
1141
1141
|
|
1142
|
-
assert_equal [Locale::Tag::
|
1142
|
+
assert_equal [Locale::Tag::Irregular.new("en"),
|
1143
1143
|
], lang.candidates
|
1144
1144
|
|
1145
1145
|
assert_equal Locale::Tag::Simple.parse("en"), lang.to_simple
|
@@ -1149,11 +1149,11 @@ class TagTest < Test::Unit::TestCase
|
|
1149
1149
|
assert_equal Locale::Tag::Posix.parse("en"), lang.to_posix
|
1150
1150
|
|
1151
1151
|
lang = Locale::Tag.parse(nil)
|
1152
|
-
assert_equal Locale::Tag::
|
1152
|
+
assert_equal Locale::Tag::Irregular, lang.class
|
1153
1153
|
assert_equal "en", lang.language
|
1154
1154
|
assert_equal nil, lang.region
|
1155
1155
|
|
1156
|
-
assert_equal [Locale::Tag::
|
1156
|
+
assert_equal [Locale::Tag::Irregular.new("en"),
|
1157
1157
|
], lang.candidates
|
1158
1158
|
|
1159
1159
|
assert_equal Locale::Tag::Simple.parse("en"), lang.to_simple
|
@@ -1168,4 +1168,5 @@ class TagTest < Test::Unit::TestCase
|
|
1168
1168
|
Locale::Tag::Simple.new(nil)
|
1169
1169
|
}
|
1170
1170
|
end
|
1171
|
+
|
1171
1172
|
end
|
data/test/test_thread.rb
CHANGED
@@ -12,7 +12,7 @@ class TestThread < Test::Unit::TestCase
|
|
12
12
|
def invoke_thread(tag, sleep_time)
|
13
13
|
Thread.start do
|
14
14
|
@mutex.synchronize {
|
15
|
-
ENV["
|
15
|
+
ENV["LC_ALL"] = tag
|
16
16
|
Locale.current
|
17
17
|
}
|
18
18
|
(1..10).each do |v|
|
@@ -27,9 +27,9 @@ class TestThread < Test::Unit::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_thread
|
30
|
-
th1 = invoke_thread("ja_JP.eucJP", 0.
|
31
|
-
th2 = invoke_thread("zh_CN.UTF-8", 0.
|
32
|
-
th3 = invoke_thread("en", 0.
|
30
|
+
th1 = invoke_thread("ja_JP.eucJP", 0.3)
|
31
|
+
th2 = invoke_thread("zh_CN.UTF-8", 0.2)
|
32
|
+
th3 = invoke_thread("en", 0.1)
|
33
33
|
th1.join
|
34
34
|
th2.join
|
35
35
|
th3.join
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: locale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masao Mutoh
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-09 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,6 +25,10 @@ files:
|
|
25
25
|
- ChangeLog
|
26
26
|
- samples
|
27
27
|
- samples/sample_info.rb
|
28
|
+
- samples/rack
|
29
|
+
- samples/rack/README
|
30
|
+
- samples/rack/hello_rack.rb
|
31
|
+
- samples/rack/hello_rack.ru
|
28
32
|
- samples/sample_1.rb
|
29
33
|
- samples/cgi
|
30
34
|
- samples/cgi/cookie.cgi
|
@@ -49,8 +53,8 @@ files:
|
|
49
53
|
- lib/locale/tag
|
50
54
|
- lib/locale/tag/cldr.rb
|
51
55
|
- lib/locale/tag/common.rb
|
52
|
-
- lib/locale/tag/illegular.rb
|
53
56
|
- lib/locale/tag/rfc.rb
|
57
|
+
- lib/locale/tag/irregular.rb
|
54
58
|
- lib/locale/tag/posix.rb
|
55
59
|
- lib/locale/tag/simple.rb
|
56
60
|
- lib/locale/info
|