locale 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +10 -0
- data/Rakefile +1 -1
- data/lib/locale.rb +19 -14
- data/lib/locale/info/language.rb +1 -0
- data/lib/locale/info/region.rb +1 -0
- data/lib/locale/tag.rb +7 -4
- data/lib/locale/tag/cldr.rb +45 -39
- data/lib/locale/tag/common.rb +45 -38
- data/lib/locale/tag/illegular.rb +2 -0
- data/lib/locale/tag/rfc.rb +50 -44
- data/lib/locale/tag/simple.rb +39 -26
- data/lib/locale/taglist.rb +17 -1
- data/lib/locale/util/memoizable.rb +44 -17
- data/lib/locale/version.rb +1 -1
- data/test/test_memoizable.rb +133 -0
- data/test/test_tag.rb +3 -15
- data/test/test_taglist.rb +34 -0
- metadata +4 -3
- data/replace.rb +0 -21
data/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
= locale-2.0.1 (2009-04-18)
|
2
|
+
* Locale::Tag::Common#extensions are shown order by the keys.[reported by
|
3
|
+
Dan Coutu]
|
4
|
+
* Enhance to support ruby-1.9.x [by OZAWA Sakuro]
|
5
|
+
* Reimplement memoize to be able to freeze or dup the object.
|
6
|
+
* Improve Locale.candidates.
|
7
|
+
|
8
|
+
Thanks to:
|
9
|
+
Dan Coutu, OZAWA Sakuro
|
10
|
+
|
1
11
|
= locale-2.0.0 (2009-03-21)
|
2
12
|
* Support Rack.
|
3
13
|
* move to github from svn.
|
data/Rakefile
CHANGED
@@ -29,7 +29,7 @@ Rake::RDocTask.new { |rdoc|
|
|
29
29
|
rdoc.rdoc_dir = 'doc'
|
30
30
|
rdoc.title = "Ruby-Locale library"
|
31
31
|
rdoc.options << '--line-numbers' << '--inline-source'
|
32
|
-
rdoc.rdoc_files.include('README', 'ChangeLog')
|
32
|
+
rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
|
33
33
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
34
34
|
rdoc.template = allison if allison.size > 0
|
35
35
|
}
|
data/lib/locale.rb
CHANGED
@@ -184,18 +184,25 @@ module Locale
|
|
184
184
|
opts = {:supported_language_tags => nil, :type => :common,
|
185
185
|
:default_language_tags => ["en"]}.merge(options)
|
186
186
|
|
187
|
-
cache_key = opts.hash
|
188
187
|
if Thread.current[:candidates_caches]
|
189
|
-
cache = Thread.current[:candidates_caches][
|
188
|
+
cache = Thread.current[:candidates_caches][opts.hash]
|
190
189
|
return cache if cache
|
191
190
|
else
|
192
191
|
Thread.current[:candidates_caches] = {}
|
193
192
|
end
|
193
|
+
Thread.current[:candidates_caches][opts.hash] =
|
194
|
+
collect_candidates(opts[:type], current,
|
195
|
+
opts[:default_language_tags],
|
196
|
+
opts[:supported_language_tags])
|
197
|
+
end
|
194
198
|
|
195
|
-
|
196
|
-
|
199
|
+
# collect tag candidates and memoize it.
|
200
|
+
# The result is shared from all threads.
|
201
|
+
def collect_candidates(type, tags, default_tags, supported_tags) # :nodoc:
|
202
|
+
default_language_tags = default_tags.collect{|v|
|
203
|
+
Locale::Tag.parse(v).send("to_#{type}")}.flatten.uniq
|
197
204
|
|
198
|
-
candidate_tags =
|
205
|
+
candidate_tags = tags.collect{|v| v.send("to_#{type}").candidates}
|
199
206
|
|
200
207
|
tags = []
|
201
208
|
(0...candidate_tags[0].size).each {|i|
|
@@ -204,16 +211,14 @@ module Locale
|
|
204
211
|
tags += default_language_tags
|
205
212
|
tags.uniq!
|
206
213
|
|
207
|
-
if
|
208
|
-
tags &=
|
209
|
-
Locale::Tag.parse(v).send("to_#{
|
210
|
-
tags
|
214
|
+
if supported_tags
|
215
|
+
tags &= supported_tags.collect{|v|
|
216
|
+
Locale::Tag.parse(v).send("to_#{type}")}.flatten
|
217
|
+
tags = default_language_tags if tags.size == 0
|
211
218
|
end
|
212
|
-
|
213
|
-
Thread.current[:candidates_caches][cache_key] = tags
|
214
|
-
tags
|
219
|
+
Locale::TagList.new(tags)
|
215
220
|
end
|
216
|
-
|
221
|
+
memoize :collect_candidates
|
217
222
|
|
218
223
|
# Gets the current charset.
|
219
224
|
#
|
@@ -226,7 +231,7 @@ module Locale
|
|
226
231
|
end
|
227
232
|
memoize :charset
|
228
233
|
|
229
|
-
# Clear current locale
|
234
|
+
# Clear current locale.
|
230
235
|
# * Returns: self
|
231
236
|
def clear
|
232
237
|
Thread.current[:current_languages] = nil
|
data/lib/locale/info/language.rb
CHANGED
@@ -88,6 +88,7 @@ module Locale
|
|
88
88
|
|
89
89
|
Zlib::GzipReader.open(File.dirname(__FILE__) + "/../data/languages.tab.gz") do |gz|
|
90
90
|
gz.readlines.each do |l|
|
91
|
+
l.force_encoding('UTF-8') if l.respond_to?(:force_encoding)
|
91
92
|
unless l =~ /^\s*$/
|
92
93
|
parts = l.split(/\t/)
|
93
94
|
lang = Language.new(parts[2], parts[0], parts[3], parts[4], parts[5].strip)
|
data/lib/locale/info/region.rb
CHANGED
@@ -39,6 +39,7 @@ module Locale
|
|
39
39
|
@@regions = Hash.new
|
40
40
|
Zlib::GzipReader.open(File.dirname(__FILE__) + "/../data/regions.tab.gz") do |gz|
|
41
41
|
gz.readlines.each do |l|
|
42
|
+
l.force_encoding('UTF-8') if l.respond_to?(:force_encoding)
|
42
43
|
unless l =~ /^\s*$/
|
43
44
|
parts = l.split(/\t/)
|
44
45
|
region = Region.new(parts[0], parts[1].strip)
|
data/lib/locale/tag.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
=begin
|
2
|
+
tag.rb - Locale::Tag module
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
Copyright (C) 2008 Masao Mutoh
|
4
|
+
Copyright (C) 2008,2009 Masao Mutoh
|
6
5
|
|
7
|
-
|
6
|
+
You may redistribute it and/or modify it under the same
|
7
|
+
license terms as Ruby.
|
8
8
|
=end
|
9
9
|
|
10
10
|
require 'locale/tag/simple'
|
@@ -13,11 +13,13 @@ require 'locale/tag/common'
|
|
13
13
|
require 'locale/tag/rfc'
|
14
14
|
require 'locale/tag/cldr'
|
15
15
|
require 'locale/tag/posix'
|
16
|
+
require 'locale/util/memoizable'
|
16
17
|
|
17
18
|
module Locale
|
18
19
|
|
19
20
|
# Language tag / locale identifiers.
|
20
21
|
module Tag
|
22
|
+
include Util::Memoizable
|
21
23
|
module_function
|
22
24
|
# Parse a language tag/locale name and return Locale::Tag
|
23
25
|
# object.
|
@@ -31,6 +33,7 @@ module Locale
|
|
31
33
|
end
|
32
34
|
Locale::Tag::Illegular.new(tag)
|
33
35
|
end
|
36
|
+
memoize :parse
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
data/lib/locale/tag/cldr.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
=begin
|
2
2
|
locale/tag/cldr.rb - Locale::Tag::CLDR
|
3
3
|
|
4
|
-
Copyright (C) 2008 Masao Mutoh
|
4
|
+
Copyright (C) 2008,2009 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
|
-
|
9
|
-
$Id: cldr.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
8
|
=end
|
11
9
|
|
10
|
+
require 'locale/tag/common'
|
11
|
+
|
12
12
|
module Locale #:nodoc:
|
13
13
|
module Tag #:nodoc:
|
14
14
|
|
@@ -24,7 +24,34 @@ module Locale #:nodoc:
|
|
24
24
|
(?:@(#{EXTENSION};?)+)*)\Z/ix
|
25
25
|
|
26
26
|
attr_reader :extensions
|
27
|
-
|
27
|
+
|
28
|
+
class << self
|
29
|
+
include Util::Memoizable
|
30
|
+
# Parse the language tag and return the new Locale::Tag::CLDR.
|
31
|
+
def parse(tag)
|
32
|
+
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
33
|
+
nil
|
34
|
+
elsif tag =~ TAG_RE
|
35
|
+
lang, script, region, subtag = $1, $2, $3, $4
|
36
|
+
|
37
|
+
extensions = {}
|
38
|
+
subtag.scan(/#{EXTENSION}/i).each{|v|
|
39
|
+
subtag.sub!(v, "")
|
40
|
+
key, type = v.split("=")
|
41
|
+
extensions[key] = type
|
42
|
+
}
|
43
|
+
variants = subtag.scan(/#{VARIANT}/i).collect{|v| v[0].upcase}
|
44
|
+
|
45
|
+
ret = self.new(lang, script, region, variants, extensions)
|
46
|
+
ret.tag = tag
|
47
|
+
ret
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
memoize_dup :parse
|
53
|
+
end
|
54
|
+
|
28
55
|
# Create Locale::Tag::Cldr.
|
29
56
|
#
|
30
57
|
# variants should be upcase.
|
@@ -34,39 +61,6 @@ module Locale #:nodoc:
|
|
34
61
|
super(language, script, region, variants.map{|v| v.upcase})
|
35
62
|
end
|
36
63
|
|
37
|
-
# Parse the language tag and return the new Locale::Tag::CLDR.
|
38
|
-
def self.parse(tag)
|
39
|
-
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
40
|
-
nil
|
41
|
-
elsif tag =~ TAG_RE
|
42
|
-
lang, script, region, subtag = $1, $2, $3, $4
|
43
|
-
|
44
|
-
extensions = {}
|
45
|
-
subtag.scan(/#{EXTENSION}/i).each{|v|
|
46
|
-
subtag.sub!(v, "")
|
47
|
-
key, type = v.split("=")
|
48
|
-
extensions[key] = type
|
49
|
-
}
|
50
|
-
variants = subtag.scan(/#{VARIANT}/i).collect{|v| v[0].upcase}
|
51
|
-
|
52
|
-
ret = self.new(lang, script, region, variants, extensions)
|
53
|
-
ret.tag = tag
|
54
|
-
ret
|
55
|
-
else
|
56
|
-
nil
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns the language tag.
|
61
|
-
# (e.g.) "ja_Hira_JP_VARIANT1_VARIANT2@foo1=var1;foo2=var2"
|
62
|
-
def to_s
|
63
|
-
s = super
|
64
|
-
if @extensions.size > 0
|
65
|
-
s << "@" << @extensions.to_a.sort.map{|k, v| "#{k}=#{v}"}.join(";")
|
66
|
-
end
|
67
|
-
s
|
68
|
-
end
|
69
|
-
|
70
64
|
# Sets the extensions.
|
71
65
|
def extensions=(val)
|
72
66
|
clear
|
@@ -74,12 +68,12 @@ module Locale #:nodoc:
|
|
74
68
|
end
|
75
69
|
|
76
70
|
private
|
77
|
-
def convert_to(klass)
|
71
|
+
def convert_to(klass) # :nodoc:
|
78
72
|
if klass == Cldr
|
79
73
|
klass.new(language, script, region, variants, extensions)
|
80
74
|
elsif klass == Rfc
|
81
75
|
exts = []
|
82
|
-
@extensions.each do |k, v|
|
76
|
+
@extensions.to_a.sort.each do |k, v|
|
83
77
|
exts << "k-#{k[0,8]}-#{v[0,8]}"
|
84
78
|
end
|
85
79
|
|
@@ -88,6 +82,18 @@ module Locale #:nodoc:
|
|
88
82
|
super
|
89
83
|
end
|
90
84
|
end
|
85
|
+
|
86
|
+
# Returns the language tag.
|
87
|
+
# (e.g.) "ja_Hira_JP_VARIANT1_VARIANT2@foo1=var1;foo2=var2"
|
88
|
+
#
|
89
|
+
# This is used in internal only. Use to_s instead.
|
90
|
+
def to_string
|
91
|
+
s = super
|
92
|
+
if @extensions.size > 0
|
93
|
+
s << "@" << @extensions.to_a.sort.map{|k, v| "#{k}=#{v}"}.join(";")
|
94
|
+
end
|
95
|
+
s
|
96
|
+
end
|
91
97
|
end
|
92
98
|
end
|
93
99
|
end
|
data/lib/locale/tag/common.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
=begin
|
2
2
|
locale/tag/common.rb - Locale::Tag::Common
|
3
3
|
|
4
|
-
Copyright (C) 2008 Masao Mutoh
|
4
|
+
Copyright (C) 2008,2009 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
|
-
|
9
|
-
$Id: common.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
8
|
=end
|
11
9
|
|
10
|
+
require 'locale/tag/simple'
|
11
|
+
|
12
12
|
module Locale
|
13
13
|
module Tag
|
14
14
|
# Common Language tag class for Ruby.
|
@@ -32,34 +32,38 @@ module Locale
|
|
32
32
|
|
33
33
|
attr_reader :script, :variants
|
34
34
|
|
35
|
+
class << self
|
36
|
+
include Util::Memoizable
|
37
|
+
# Parse the language tag and return the new Locale::Tag::Common.
|
38
|
+
def parse(tag)
|
39
|
+
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
40
|
+
nil
|
41
|
+
elsif tag =~ TAG_RE
|
42
|
+
lang, script, region, subtag = $1, $2, $3, $4
|
43
|
+
variants = subtag.scan(/(^|[-_])#{VARIANT}(?=([-_]|$))/i).collect{|v| v[1]}
|
44
|
+
|
45
|
+
ret = self.new(lang, script, region, variants)
|
46
|
+
ret.tag = tag
|
47
|
+
ret
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
memoize_dup :parse
|
53
|
+
end
|
54
|
+
|
35
55
|
# Create a Locale::Tag::Common.
|
36
56
|
def initialize(language, script = nil, region = nil, variants = [])
|
37
57
|
@script, @variants = script, variants
|
38
|
-
@script.capitalize
|
58
|
+
@script = @script.capitalize if @script
|
39
59
|
super(language, region)
|
40
60
|
end
|
41
|
-
|
42
|
-
# Parse the language tag and return the new Locale::Tag::Common.
|
43
|
-
def self.parse(tag)
|
44
|
-
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
45
|
-
nil
|
46
|
-
elsif tag =~ TAG_RE
|
47
|
-
lang, script, region, subtag = $1, $2, $3, $4
|
48
|
-
variants = subtag.scan(/(^|[-_])#{VARIANT}(?=([-_]|$))/i).collect{|v| v[1]}
|
49
|
-
|
50
|
-
ret = self.new(lang, script, region, variants)
|
51
|
-
ret.tag = tag
|
52
|
-
ret
|
53
|
-
else
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
61
|
+
|
58
62
|
# Set the script (with capitalize)
|
59
63
|
def script=(val)
|
60
64
|
clear
|
61
65
|
@script = val
|
62
|
-
@script.capitalize
|
66
|
+
@script = @script.capitalize if @script
|
63
67
|
@script
|
64
68
|
end
|
65
69
|
|
@@ -69,21 +73,6 @@ module Locale
|
|
69
73
|
@variants = val
|
70
74
|
end
|
71
75
|
|
72
|
-
# Returns the common language tag with "_".
|
73
|
-
# <language>_<Script>_<REGION>_VARIANTS1_VARIANTS2
|
74
|
-
# (e.g.) "ja_Hira_JP_VARIANTS1_VARIANTS2"
|
75
|
-
def to_s
|
76
|
-
s = @language.dup
|
77
|
-
|
78
|
-
s << "_" << @script if @script
|
79
|
-
s << "_" << @region if @region
|
80
|
-
|
81
|
-
@variants.each do |v|
|
82
|
-
s << "_#{v}"
|
83
|
-
end
|
84
|
-
s
|
85
|
-
end
|
86
|
-
|
87
76
|
# Returns an Array of tag-candidates order by priority.
|
88
77
|
# Use Locale.candidates instead of this method.
|
89
78
|
#
|
@@ -99,9 +88,10 @@ module Locale
|
|
99
88
|
self.class.new(language, nil, nil, variants), #ja-FOO
|
100
89
|
self.class.new(language)] #ja
|
101
90
|
end
|
91
|
+
memoize_dup :candidates
|
102
92
|
|
103
93
|
private
|
104
|
-
def convert_to(klass)
|
94
|
+
def convert_to(klass) #:nodoc:
|
105
95
|
if klass == Simple
|
106
96
|
super
|
107
97
|
elsif klass == Posix
|
@@ -117,6 +107,23 @@ module Locale
|
|
117
107
|
klass.new(language, script, region, variants)
|
118
108
|
end
|
119
109
|
end
|
110
|
+
|
111
|
+
# Returns the common language tag with "_".
|
112
|
+
# <language>_<Script>_<REGION>_VARIANTS1_VARIANTS2
|
113
|
+
# (e.g.) "ja_Hira_JP_VARIANTS1_VARIANTS2"
|
114
|
+
#
|
115
|
+
# This is used in internal only. Use to_s instead.
|
116
|
+
def to_string
|
117
|
+
s = @language.dup
|
118
|
+
|
119
|
+
s << "_" << @script if @script
|
120
|
+
s << "_" << @region if @region
|
121
|
+
|
122
|
+
@variants.each do |v|
|
123
|
+
s << "_#{v}"
|
124
|
+
end
|
125
|
+
s
|
126
|
+
end
|
120
127
|
end
|
121
128
|
end
|
122
129
|
end
|
data/lib/locale/tag/illegular.rb
CHANGED
@@ -27,12 +27,14 @@ module Locale
|
|
27
27
|
def candidates
|
28
28
|
[Illegular.new(tag)]
|
29
29
|
end
|
30
|
+
memoize :candidates
|
30
31
|
|
31
32
|
# Conver to the klass(the class of Language::Tag)
|
32
33
|
private
|
33
34
|
def convert_to(klass)
|
34
35
|
klass.new(tag)
|
35
36
|
end
|
37
|
+
memoize :convert_to
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
data/lib/locale/tag/rfc.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
=begin
|
2
2
|
locale/tag/rfc.rb - Locale::Tag::Rfc
|
3
3
|
|
4
|
-
Copyright (C) 2008 Masao Mutoh
|
4
|
+
Copyright (C) 2008,2009 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
|
-
|
9
|
-
$Id: rfc.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
8
|
=end
|
11
9
|
|
10
|
+
require 'locale/tag/common'
|
11
|
+
|
12
12
|
module Locale #:nodoc:
|
13
13
|
module Tag #:nodoc:
|
14
14
|
|
@@ -26,50 +26,42 @@ module Locale #:nodoc:
|
|
26
26
|
|
27
27
|
attr_reader :extensions, :privateuse
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
p_subtag = $1
|
48
|
-
extensions = p_subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| p_subtag.sub!(v[1], ""); v[1]}
|
49
|
-
variants = p_subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
|
29
|
+
class << self
|
30
|
+
include Util::Memoizable
|
31
|
+
# Parse the language tag and return the new Locale::Tag::Rfc.
|
32
|
+
def parse(tag)
|
33
|
+
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
34
|
+
nil
|
35
|
+
elsif tag =~ TAG_RE
|
36
|
+
lang, script, region, subtag = $1, $2, $3, $4
|
37
|
+
extensions = []
|
38
|
+
variants = []
|
39
|
+
if subtag =~ /#{PRIVATEUSE}/
|
40
|
+
subtag, privateuse = $`, $1
|
41
|
+
# Private use for CLDR.
|
42
|
+
if /x-ldml(.*)/ =~ privateuse
|
43
|
+
p_subtag = $1
|
44
|
+
extensions = p_subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| p_subtag.sub!(v[1], ""); v[1]}
|
45
|
+
variants = p_subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
|
46
|
+
end
|
50
47
|
end
|
48
|
+
extensions += subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| subtag.sub!(v[1], ""); v[1]}
|
49
|
+
variants += subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
|
50
|
+
|
51
|
+
ret = self.new(lang, script, region, variants, extensions, privateuse)
|
52
|
+
ret.tag = tag
|
53
|
+
ret
|
54
|
+
else
|
55
|
+
nil
|
51
56
|
end
|
52
|
-
extensions += subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| subtag.sub!(v[1], ""); v[1]}
|
53
|
-
variants += subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
|
54
|
-
|
55
|
-
ret = self.new(lang, script, region, variants, extensions, privateuse)
|
56
|
-
ret.tag = tag
|
57
|
-
ret
|
58
|
-
else
|
59
|
-
nil
|
60
57
|
end
|
58
|
+
memoize_dup :parse
|
61
59
|
end
|
62
60
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
s = super.to_s.gsub(/_/, "-")
|
68
|
-
@extensions.each do |v|
|
69
|
-
s << "-#{v}"
|
70
|
-
end
|
71
|
-
s << "-#{@privateuse}" if @privateuse
|
72
|
-
s
|
61
|
+
def initialize(language, script = nil, region = nil, variants = [],
|
62
|
+
extensions = [], privateuse = nil)
|
63
|
+
@extensions, @privateuse = extensions, privateuse
|
64
|
+
super(language, script, region, variants)
|
73
65
|
end
|
74
66
|
|
75
67
|
# Sets the extensions.
|
@@ -90,7 +82,7 @@ module Locale #:nodoc:
|
|
90
82
|
klass.new(language, script, region, variants, extensions, privateuse)
|
91
83
|
elsif klass == Cldr
|
92
84
|
exts = {}
|
93
|
-
extensions.each do |v|
|
85
|
+
extensions.sort.each do |v|
|
94
86
|
if v =~ /^k-(#{ALPHANUM}{2,})-(.*)$/i
|
95
87
|
exts[$1] = $2
|
96
88
|
end
|
@@ -100,7 +92,21 @@ module Locale #:nodoc:
|
|
100
92
|
super
|
101
93
|
end
|
102
94
|
end
|
103
|
-
|
95
|
+
|
96
|
+
# Returns the language tag
|
97
|
+
# <language>-<Script>-<REGION>-<variants>-<extensions>-<PRIVATEUSE>
|
98
|
+
# (e.g.) "ja-Hira-JP-variant"
|
99
|
+
#
|
100
|
+
# This is used in internal only. Use to_s instead.
|
101
|
+
def to_string
|
102
|
+
s = super.gsub(/_/, "-")
|
103
|
+
@extensions.sort.each do |v|
|
104
|
+
s << "-#{v}"
|
105
|
+
end
|
106
|
+
s << "-#{@privateuse}" if @privateuse
|
107
|
+
s
|
108
|
+
end
|
109
|
+
|
104
110
|
end
|
105
111
|
end
|
106
112
|
end
|
data/lib/locale/tag/simple.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
=begin
|
2
2
|
locale/tag/simple.rb - Locale::Tag::Simple
|
3
3
|
|
4
|
-
Copyright (C) 2008 Masao Mutoh
|
4
|
+
Copyright (C) 2008,2009 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
|
-
|
9
|
-
$Id: simple.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
8
|
=end
|
11
9
|
|
12
10
|
require 'locale/util/memoizable'
|
@@ -22,6 +20,8 @@ module Locale
|
|
22
20
|
# * ja-JP
|
23
21
|
# * ja-392
|
24
22
|
class Simple
|
23
|
+
include Util::Memoizable
|
24
|
+
|
25
25
|
ALPHA = '[a-z]'
|
26
26
|
DIGIT = '[0-9]'
|
27
27
|
ALPHANUM = "[a-zA-Z0-9]"
|
@@ -40,17 +40,6 @@ module Locale
|
|
40
40
|
# String.
|
41
41
|
attr_accessor :tag
|
42
42
|
|
43
|
-
# Parse the language tag and return the new Locale::Tag::Simple.
|
44
|
-
def self.parse(tag)
|
45
|
-
if tag =~ TAG_RE
|
46
|
-
ret = self.new($1, $2)
|
47
|
-
ret.tag = tag
|
48
|
-
ret
|
49
|
-
else
|
50
|
-
nil
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
43
|
# call-seq:
|
55
44
|
# to_common
|
56
45
|
# to_posix
|
@@ -63,26 +52,40 @@ module Locale
|
|
63
52
|
def to_#{name}
|
64
53
|
convert_to(#{name.to_s.capitalize})
|
65
54
|
end
|
66
|
-
|
55
|
+
memoize_dup :to_#{name}
|
67
56
|
EOS
|
68
57
|
end
|
69
58
|
|
59
|
+
class << self
|
60
|
+
include Util::Memoizable
|
61
|
+
# Parse the language tag and return the new Locale::Tag::Simple.
|
62
|
+
def parse(tag)
|
63
|
+
if tag =~ TAG_RE
|
64
|
+
ret = self.new($1, $2)
|
65
|
+
ret.tag = tag
|
66
|
+
ret
|
67
|
+
else
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
memoize_dup :parse
|
72
|
+
end
|
73
|
+
|
70
74
|
# Create a Locale::Tag::Simple
|
71
75
|
def initialize(language, region = nil)
|
72
76
|
raise "language can't be nil." unless language
|
73
77
|
@language, @region = language, region
|
74
|
-
@language.downcase
|
75
|
-
@region.upcase
|
78
|
+
@language = @language.downcase if @language
|
79
|
+
@region = @region.upcase if @region
|
76
80
|
end
|
77
81
|
|
78
82
|
# Returns the language tag as the String.
|
79
83
|
# <language>_<REGION>
|
80
84
|
# (e.g.) "ja_JP"
|
81
85
|
def to_s
|
82
|
-
|
83
|
-
s << "_" << @region if @region
|
84
|
-
s
|
86
|
+
to_string
|
85
87
|
end
|
88
|
+
memoize :to_s
|
86
89
|
|
87
90
|
def to_str #:nodoc:
|
88
91
|
to_s
|
@@ -95,14 +98,17 @@ module Locale
|
|
95
98
|
def eql?(other) #:nodoc:
|
96
99
|
self.==(other)
|
97
100
|
end
|
101
|
+
memoize :eql?
|
98
102
|
|
99
103
|
def hash #:nodoc:
|
100
104
|
"#{self.class}:#{to_s}".hash
|
101
105
|
end
|
106
|
+
memoize :hash
|
102
107
|
|
103
108
|
def inspect #:nodoc:
|
104
109
|
%Q[#<#{self.class}: #{to_s}>]
|
105
110
|
end
|
111
|
+
memoize :inspect
|
106
112
|
|
107
113
|
# For backward compatibility.
|
108
114
|
def country; region end
|
@@ -111,7 +117,7 @@ module Locale
|
|
111
117
|
def language=(val)
|
112
118
|
clear
|
113
119
|
@language = val
|
114
|
-
@language.downcase
|
120
|
+
@language = @language.downcase if @language
|
115
121
|
@language
|
116
122
|
end
|
117
123
|
|
@@ -119,7 +125,7 @@ module Locale
|
|
119
125
|
def region=(val)
|
120
126
|
clear
|
121
127
|
@region = val
|
122
|
-
@region.upcase
|
128
|
+
@region = @region.upcase if @region
|
123
129
|
@region
|
124
130
|
end
|
125
131
|
|
@@ -128,18 +134,25 @@ module Locale
|
|
128
134
|
def candidates
|
129
135
|
[self.class.new(language, region), self.class.new(language)]
|
130
136
|
end
|
137
|
+
memoize_dup :candidates
|
131
138
|
|
132
|
-
|
133
|
-
|
134
|
-
# Conver to the klass(the class of Language::Tag)
|
139
|
+
# Convert to the klass(the class of Language::Tag)
|
135
140
|
private
|
136
|
-
def convert_to(klass)
|
141
|
+
def convert_to(klass) #:nodoc:
|
137
142
|
if klass == Simple || klass == Posix
|
138
143
|
klass.new(language, region)
|
139
144
|
else
|
140
145
|
klass.new(language, nil, region)
|
141
146
|
end
|
142
147
|
end
|
148
|
+
|
149
|
+
# Return simple language tag which format is"<lanuguage>_<REGION>".
|
150
|
+
# This is to use internal only. Use to_s instead.
|
151
|
+
def to_string
|
152
|
+
s = @language.dup
|
153
|
+
s << "_" << @region if @region
|
154
|
+
s
|
155
|
+
end
|
143
156
|
end
|
144
157
|
end
|
145
158
|
end
|
data/lib/locale/taglist.rb
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
$Id: taglist.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
10
|
=end
|
11
11
|
|
12
|
+
require 'locale/util/memoizable'
|
13
|
+
|
12
14
|
module Locale
|
13
15
|
# This provides the subclass of Array which behaves like
|
14
16
|
# the first(top priority) Locale::Tag object.
|
@@ -24,6 +26,8 @@ module Locale
|
|
24
26
|
# of this function.
|
25
27
|
#
|
26
28
|
class TagList < Array
|
29
|
+
include Util::Memoizable
|
30
|
+
|
27
31
|
# Returns the top priority language. (simple)
|
28
32
|
def language
|
29
33
|
self[0].language
|
@@ -48,18 +52,31 @@ module Locale
|
|
48
52
|
::Locale.driver_module.charset
|
49
53
|
end
|
50
54
|
end
|
55
|
+
memoize :charset
|
56
|
+
|
51
57
|
# Returns the top priority modifier. (posix)
|
52
58
|
def modifier
|
53
59
|
(self[0].respond_to? :modifier) ? self[0].modifier : nil
|
54
60
|
end
|
61
|
+
memoize :modifier
|
62
|
+
|
63
|
+
# Returns the top priority variants.(common, rfc, cldr)
|
64
|
+
def variants
|
65
|
+
(self[0].respond_to? :variants) ? self[0].variants : nil
|
66
|
+
end
|
67
|
+
memoize :variants
|
68
|
+
|
55
69
|
# Returns the top priority extensions.(common, rfc, cldr)
|
56
70
|
def extensions
|
57
71
|
(self[0].respond_to? :extensions) ? self[0].extensions : nil
|
58
72
|
end
|
73
|
+
memoize :extensions
|
74
|
+
|
59
75
|
# Returns the top priority privateuse(rfc)
|
60
76
|
def privateuse
|
61
77
|
(self[0].respond_to? :privateuse) ? self[0].privateuse : nil
|
62
78
|
end
|
79
|
+
memoize :privateuse
|
63
80
|
|
64
81
|
def to_str
|
65
82
|
self[0].to_str
|
@@ -88,6 +105,5 @@ module Locale
|
|
88
105
|
def to_posix
|
89
106
|
self[0].to_posix
|
90
107
|
end
|
91
|
-
|
92
108
|
end
|
93
109
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# Refer from activesupport-2.2.0.
|
2
|
+
#
|
2
3
|
# * Remove the dependecies to activesupport.
|
3
4
|
# * change the key to hash value of args.
|
4
5
|
# * Not Thread safe
|
@@ -43,33 +44,59 @@ module Locale
|
|
43
44
|
#
|
44
45
|
# To clear cache, #clear_foo, #clear_bar is also defined.
|
45
46
|
#
|
46
|
-
# (NOTE)
|
47
|
+
# (NOTE)
|
48
|
+
# * Consider to use this with huge objects to avoid memory leaks.
|
49
|
+
# * Can't use this with super.<method> because of infinity loop.
|
47
50
|
def memoize(*symbols)
|
51
|
+
memoize_impl(false, *symbols)
|
52
|
+
end
|
53
|
+
|
54
|
+
# memoize with dup. A copy object is returned.
|
55
|
+
def memoize_dup(*symbols)
|
56
|
+
memoize_impl(true, *symbols)
|
57
|
+
end
|
58
|
+
|
59
|
+
def memoize_impl(is_dup, *symbols) #:nodoc:
|
48
60
|
symbols.each do |symbol|
|
49
61
|
original_method = "_unmemoized_#{symbol}"
|
50
62
|
memoized_ivar = MEMOIZED_IVAR.call(symbol)
|
51
|
-
|
52
|
-
raise "Already memoized #{symbol}" if method_defined?(:#{original_method})
|
53
|
-
alias #{original_method} #{symbol}
|
63
|
+
dup_meth = is_dup ? "_dup" : ""
|
54
64
|
|
55
|
-
|
56
|
-
|
57
|
-
|
65
|
+
class_eval <<-EOS, __FILE__, __LINE__
|
66
|
+
alias #{original_method} #{symbol}
|
67
|
+
def #{symbol}(*args)
|
68
|
+
_memoize#{dup_meth}(:#{memoized_ivar}, args.hash) do
|
69
|
+
#{original_method}(*args)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
EOS
|
73
|
+
end
|
74
|
+
end
|
58
75
|
|
59
|
-
|
76
|
+
def _memoize(ivar, key) #:nodoc:
|
77
|
+
@_memoized_ivars ||= {}
|
78
|
+
@_memoized_ivars[ivar] ||= {}
|
60
79
|
|
61
|
-
|
80
|
+
ret = @_memoized_ivars[ivar][key]
|
81
|
+
unless ret
|
82
|
+
ret = yield
|
83
|
+
ret.freeze
|
84
|
+
@_memoized_ivars[ivar][key] = ret
|
85
|
+
end
|
86
|
+
ret
|
87
|
+
end
|
62
88
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
89
|
+
def _memoize_dup(ivar, key) #:nodoc:
|
90
|
+
ret = _memoize(ivar, key) do; yield; end
|
91
|
+
if ret
|
92
|
+
if ret.kind_of? Array
|
93
|
+
ret.map{|v| v.dup}.dup
|
94
|
+
else
|
95
|
+
ret.dup
|
68
96
|
end
|
69
|
-
|
70
|
-
|
97
|
+
else
|
98
|
+
nil
|
71
99
|
end
|
72
|
-
|
73
100
|
end
|
74
101
|
end
|
75
102
|
end
|
data/lib/locale/version.rb
CHANGED
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'locale/util/memoizable'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class A
|
5
|
+
include Locale::Util::Memoizable
|
6
|
+
def initialize
|
7
|
+
@count = 0
|
8
|
+
@a = ""
|
9
|
+
end
|
10
|
+
def test1(a)
|
11
|
+
@a += String(a)
|
12
|
+
@count += 1
|
13
|
+
end
|
14
|
+
memoize :test1
|
15
|
+
attr_reader :a
|
16
|
+
end
|
17
|
+
|
18
|
+
class B < A
|
19
|
+
end
|
20
|
+
|
21
|
+
class C < A
|
22
|
+
def test1(a)
|
23
|
+
@a = String(a) + @a
|
24
|
+
@count += 1
|
25
|
+
end
|
26
|
+
memoize :test1
|
27
|
+
end
|
28
|
+
|
29
|
+
class D
|
30
|
+
class << self
|
31
|
+
include Locale::Util::Memoizable
|
32
|
+
def init
|
33
|
+
@@count = 0
|
34
|
+
@@a = "a"
|
35
|
+
end
|
36
|
+
def test1(a)
|
37
|
+
@@a = @@a + "b" * a
|
38
|
+
@@count += 1
|
39
|
+
end
|
40
|
+
memoize :test1
|
41
|
+
def a
|
42
|
+
@@a
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class E
|
48
|
+
include Locale::Util::Memoizable
|
49
|
+
def test2
|
50
|
+
"aa"
|
51
|
+
end
|
52
|
+
memoize :test2
|
53
|
+
|
54
|
+
def test2_dup
|
55
|
+
"bb"
|
56
|
+
end
|
57
|
+
memoize_dup :test2_dup
|
58
|
+
end
|
59
|
+
|
60
|
+
class TestMemoizable < Test::Unit::TestCase
|
61
|
+
def test_simple
|
62
|
+
t = A.new
|
63
|
+
assert_equal 1, t.test1(1)
|
64
|
+
assert_equal "1", t.a
|
65
|
+
assert_equal 1, t.test1(1)
|
66
|
+
assert_equal "1", t.a
|
67
|
+
assert_equal 2, t.test1(2)
|
68
|
+
assert_equal "12", t.a
|
69
|
+
assert_equal 2, t.test1(2)
|
70
|
+
assert_equal "12", t.a
|
71
|
+
assert_equal 1, t.test1(1)
|
72
|
+
assert_equal "12", t.a
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_simple_inherited
|
76
|
+
t = B.new
|
77
|
+
assert_equal 1, t.test1(1)
|
78
|
+
assert_equal "1", t.a
|
79
|
+
assert_equal 1, t.test1(1)
|
80
|
+
assert_equal "1", t.a
|
81
|
+
assert_equal 2, t.test1(2)
|
82
|
+
assert_equal "12", t.a
|
83
|
+
assert_equal 2, t.test1(2)
|
84
|
+
assert_equal "12", t.a
|
85
|
+
assert_equal 1, t.test1(1)
|
86
|
+
assert_equal "12", t.a
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_override
|
90
|
+
t = C.new
|
91
|
+
assert_equal 1, t.test1(1)
|
92
|
+
assert_equal "1", t.a
|
93
|
+
assert_equal 1, t.test1(1)
|
94
|
+
assert_equal "1", t.a
|
95
|
+
assert_equal 2, t.test1(2)
|
96
|
+
assert_equal "21", t.a
|
97
|
+
assert_equal 2, t.test1(2)
|
98
|
+
assert_equal "21", t.a
|
99
|
+
assert_equal 1, t.test1(1)
|
100
|
+
assert_equal "21", t.a
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_class_method
|
104
|
+
D.init
|
105
|
+
assert_equal 1, D.test1(1)
|
106
|
+
assert_equal "ab", D.a
|
107
|
+
assert_equal 1, D.test1(1)
|
108
|
+
assert_equal "ab", D.a
|
109
|
+
assert_equal 2, D.test1(2)
|
110
|
+
assert_equal "abbb", D.a
|
111
|
+
assert_equal 2, D.test1(2)
|
112
|
+
assert_equal "abbb", D.a
|
113
|
+
assert_equal 1, D.test1(1)
|
114
|
+
assert_equal "abbb", D.a
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_freeze_or_dup
|
118
|
+
t = E.new
|
119
|
+
assert_equal "aa", t.test2
|
120
|
+
# When modification attempted on frozen objects,
|
121
|
+
# ruby 1.9 raises RuntimeError instead of TypeError.
|
122
|
+
# http://redmine.ruby-lang.org/issues/show/409
|
123
|
+
# http://redmine.ruby-lang.org/repositories/diff/ruby-19/error.c?rev=7294
|
124
|
+
if RUBY_VERSION < '1.9.0'
|
125
|
+
assert_raise(TypeError){ t.test2 << "a" }
|
126
|
+
else
|
127
|
+
assert_raise(RuntimeError){ t.test2 << "a" }
|
128
|
+
end
|
129
|
+
assert_equal "bb", t.test2_dup
|
130
|
+
assert_equal "bbb", t.test2_dup << "b"
|
131
|
+
assert_equal "bb", t.test2_dup
|
132
|
+
end
|
133
|
+
end
|
data/test/test_tag.rb
CHANGED
@@ -815,11 +815,7 @@ class TagTest < Test::Unit::TestCase
|
|
815
815
|
|
816
816
|
assert_equal Locale::Tag::Simple.parse("de_DE"), lang.to_simple
|
817
817
|
assert_equal Locale::Tag::Common.parse("de_DE"), lang.to_common
|
818
|
-
|
819
|
-
assert_equal Locale::Tag::Rfc.parse("de-DE-k-currency-DDM-k-collatio-phoneboo"), lang.to_rfc
|
820
|
-
else
|
821
|
-
assert_equal Locale::Tag::Rfc.parse("de-DE-k-collatio-phoneboo-k-currency-DDM"), lang.to_rfc
|
822
|
-
end
|
818
|
+
assert_equal Locale::Tag::Rfc.parse("de-DE-k-collatio-phoneboo-k-currency-DDM"), lang.to_rfc
|
823
819
|
assert_equal Locale::Tag::Cldr.parse("de_DE@collation=phonebook;currency=DDM"), lang.to_cldr
|
824
820
|
assert_equal Locale::Tag::Posix.parse("de_DE"), lang.to_posix
|
825
821
|
|
@@ -844,11 +840,7 @@ class TagTest < Test::Unit::TestCase
|
|
844
840
|
|
845
841
|
assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
|
846
842
|
assert_equal Locale::Tag::Common.parse("en_US_POSIX"), lang.to_common
|
847
|
-
|
848
|
-
assert_equal Locale::Tag::Rfc.parse("en-US-POSIX-k-colStren-secondar-k-collatio-traditio-k-calendar-islamic"), lang.to_rfc
|
849
|
-
else
|
850
|
-
assert_equal Locale::Tag::Rfc.parse("en-US-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
|
851
|
-
end
|
843
|
+
assert_equal Locale::Tag::Rfc.parse("en-US-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
|
852
844
|
assert_equal Locale::Tag::Cldr.parse("en_US_POSIX@calendar=islamic;collation=traditional;colStrength=secondary"), lang.to_cldr
|
853
845
|
assert_equal Locale::Tag::Posix.parse("en_US@POSIX"), lang.to_posix
|
854
846
|
|
@@ -873,11 +865,7 @@ class TagTest < Test::Unit::TestCase
|
|
873
865
|
|
874
866
|
assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
|
875
867
|
assert_equal Locale::Tag::Common.parse("en_US"), lang.to_common
|
876
|
-
|
877
|
-
assert_equal Locale::Tag::Rfc.parse("en-US-k-colStren-secondar-k-collatio-traditio-k-calendar-islamic"), lang.to_rfc
|
878
|
-
else
|
879
|
-
assert_equal Locale::Tag::Rfc.parse("en-US-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
|
880
|
-
end
|
868
|
+
assert_equal Locale::Tag::Rfc.parse("en-US-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
|
881
869
|
assert_equal Locale::Tag::Cldr.parse("en_US@calendar=islamic;collation=traditional;colStrength=secondary"), lang.to_cldr
|
882
870
|
assert_equal Locale::Tag::Posix.parse("en_US"), lang.to_posix
|
883
871
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'locale/tag'
|
4
|
+
require 'locale/taglist'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
class TestTagList < Test::Unit::TestCase
|
8
|
+
def test_taglist_posix
|
9
|
+
list = Locale::TagList.new([Locale::Tag.parse("ja_JP.eucJP@mobile"),
|
10
|
+
Locale::Tag.parse("en_US.iso8859-1")])
|
11
|
+
|
12
|
+
assert_equal "ja", list.language
|
13
|
+
assert_equal "JP", list.region
|
14
|
+
assert_equal "eucJP", list.charset
|
15
|
+
assert_equal "mobile", list.modifier
|
16
|
+
assert_equal "ja_JP.eucJP@mobile", list.to_s
|
17
|
+
assert_equal Locale::Tag::Common.parse("ja_JP_mobile"), list.to_common
|
18
|
+
assert_equal Locale::Tag::Rfc.parse("ja-JP-mobile"), list.to_rfc
|
19
|
+
assert_equal Locale::Tag::Cldr.parse("ja_JP_mobile"), list.to_cldr
|
20
|
+
assert_equal Locale::Tag::Posix.parse("ja_JP.eucJP@mobile"), list.to_posix
|
21
|
+
assert_equal Locale::Tag::Posix.parse("en_US.iso8859-1"), list[1]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_taglist_rfc
|
25
|
+
list = Locale::TagList.new([Locale::Tag.parse("ja-Hira-JP-MOBILE-y-aaa-x-bbb"),
|
26
|
+
Locale::Tag.parse("en-US-mobile")])
|
27
|
+
assert_equal "ja", list.language
|
28
|
+
assert_equal "Hira", list.script
|
29
|
+
assert_equal "JP", list.region
|
30
|
+
assert_equal ["MOBILE"], list.variants
|
31
|
+
assert_equal ["y-aaa"], list.extensions
|
32
|
+
assert_equal "x-bbb", list.privateuse
|
33
|
+
end
|
34
|
+
end
|
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.1
|
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-04-19 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -22,7 +22,6 @@ extensions: []
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
-
- replace.rb
|
26
25
|
- ChangeLog
|
27
26
|
- samples
|
28
27
|
- samples/sample_info.rb
|
@@ -68,7 +67,9 @@ files:
|
|
68
67
|
- test
|
69
68
|
- test/test_detect_general.rb
|
70
69
|
- test/test_info.rb
|
70
|
+
- test/test_memoizable.rb
|
71
71
|
- test/test_thread.rb
|
72
|
+
- test/test_taglist.rb
|
72
73
|
- test/test_tag.rb
|
73
74
|
- test/test_detect_cgi.rb
|
74
75
|
- Rakefile
|
data/replace.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
Dir.glob("**/*") do |v|
|
2
|
-
lines = []
|
3
|
-
changed = false
|
4
|
-
next if File.directory? v
|
5
|
-
IO.foreach(v) {|line|
|
6
|
-
if line =~ /mutoh(at|@)highway.ne.jp/
|
7
|
-
lines << line.gsub(/mutoh( at |@)highway.ne.jp/, "mutomasa at gmail.com")
|
8
|
-
changed = true
|
9
|
-
else
|
10
|
-
lines << line
|
11
|
-
end
|
12
|
-
}
|
13
|
-
if changed
|
14
|
-
out = open(v, "w")
|
15
|
-
lines.each {|l|
|
16
|
-
out.write l
|
17
|
-
}
|
18
|
-
out.close
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|