i18n-inflector 2.4.0 → 2.5.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.
- data/.gemtest +0 -0
- data/ChangeLog +30 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/ci/i18n-inflector.gemspec +2 -1
- data/docs/HISTORY +21 -0
- data/lib/i18n-inflector/config.rb +22 -13
- data/lib/i18n-inflector/inflector.rb +1 -1
- data/lib/i18n-inflector/interpolate.rb +34 -15
- data/lib/i18n-inflector/options.rb +22 -0
- data/lib/i18n-inflector/version.rb +1 -1
- data/test/inflector_test.rb +26 -0
- data.tar.gz.sig +0 -0
- metadata +8 -41
- metadata.gz.sig +0 -0
data/.gemtest
ADDED
|
File without changes
|
data/ChangeLog
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
commit 2fddd234ffe5847ad21d46c36495c02431684ad4
|
|
2
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
3
|
+
Date: Wed Feb 23 23:12:04 2011 +0100
|
|
4
|
+
|
|
5
|
+
Release 2.5.0
|
|
6
|
+
|
|
7
|
+
commit 0b49cd677a695db4b8f50151529555155fadce59
|
|
8
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
9
|
+
Date: Wed Feb 23 23:08:06 2011 +0100
|
|
10
|
+
|
|
11
|
+
Added tests covering fixed bug that caused Arrays to be interpolated in a wrong way
|
|
12
|
+
|
|
13
|
+
commit 80fa0b092de9bc08ee16e64ae6d93b799e6ee521
|
|
14
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
15
|
+
Date: Wed Feb 23 23:07:34 2011 +0100
|
|
16
|
+
|
|
17
|
+
Interpolation wrapper refactored; it now operates on Arrays, Hashes, Symbols and other objects
|
|
18
|
+
|
|
19
|
+
commit ab5f5bc04814c1181bd9919ce159292362abc3bb
|
|
20
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
21
|
+
Date: Wed Feb 23 23:06:18 2011 +0100
|
|
22
|
+
|
|
23
|
+
Added string version of regexps to constants for debugging purposes
|
|
24
|
+
|
|
25
|
+
commit 8a27302b1535c68496cc60b55bcdfc958f837300
|
|
26
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
27
|
+
Date: Wed Feb 23 23:05:34 2011 +0100
|
|
28
|
+
|
|
29
|
+
Dependencies updated
|
|
30
|
+
|
|
1
31
|
commit 6d343ad3137735492e130b7abdd8f86bf23a4a06
|
|
2
32
|
Author: Paweł Wilk <siefca@gnu.org>
|
|
3
33
|
Date: Wed Feb 23 02:20:18 2011 +0100
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
|
@@ -56,9 +56,9 @@ Hoe.spec 'i18n-inflector' do
|
|
|
56
56
|
self.history_file = 'docs/HISTORY'
|
|
57
57
|
|
|
58
58
|
extra_deps << ['i18n', '>= 0.4.1']
|
|
59
|
-
extra_dev_deps << ['test_declarative', '>= 0.0.4']
|
|
60
|
-
['yard', '>= 0.6.4']
|
|
61
|
-
['bundler', '>= 1.0.
|
|
59
|
+
extra_dev_deps << ['test_declarative', '>= 0.0.4'] <<
|
|
60
|
+
['yard', '>= 0.6.4'] <<
|
|
61
|
+
['bundler', '>= 1.0.10'] <<
|
|
62
62
|
['hoe-bundler', '>= 1.0.0']
|
|
63
63
|
|
|
64
64
|
unless extra_dev_deps.flatten.include?('hoe-yard')
|
data/ci/i18n-inflector.gemspec
CHANGED
|
@@ -19,13 +19,14 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
s.platform = Gem::Platform::RUBY
|
|
20
20
|
s.require_path = 'lib'
|
|
21
21
|
s.rubyforge_project = '[none]'
|
|
22
|
-
s.required_rubygems_version = '>= 1.
|
|
22
|
+
s.required_rubygems_version = '>= 1.4.0'
|
|
23
23
|
s.specification_version = 3
|
|
24
24
|
|
|
25
25
|
s.add_dependency 'i18n', '>= 0.4.1'
|
|
26
26
|
s.add_development_dependency 'test_declarative', '>= 0.0.4'
|
|
27
27
|
s.add_development_dependency 'rspec', '>= 2.3.0'
|
|
28
28
|
s.add_development_dependency 'yard', '>= 1.0.7'
|
|
29
|
+
s.add_development_dependency 'yard', '>= 1.0.10'
|
|
29
30
|
s.add_development_dependency 'hoe-yard', '>= 0.1.2'
|
|
30
31
|
s.add_development_dependency 'hoe-bundler', '>= 1.0.0'
|
|
31
32
|
|
data/docs/HISTORY
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
|
+
=== 2.5.0 / 2011-02-24
|
|
2
|
+
|
|
3
|
+
* major enhancements
|
|
4
|
+
|
|
5
|
+
* Interpolation wrapper refactored; works with many types of results
|
|
6
|
+
* Added :inflector_interpolate_symbols switch
|
|
7
|
+
|
|
8
|
+
* minor enhancements
|
|
9
|
+
|
|
10
|
+
* Added TOKENS_RESTR, MULTI_RESTR and PATTERN_RESTR configuration constants
|
|
11
|
+
* Dependencies updated
|
|
12
|
+
|
|
13
|
+
* major bugfixes
|
|
14
|
+
|
|
15
|
+
* Fixed interpolation of Arrays
|
|
16
|
+
|
|
17
|
+
* minor bugfixes
|
|
18
|
+
|
|
19
|
+
* Fixed pattern filtering when locale is invalid or not inflected
|
|
20
|
+
|
|
1
21
|
=== 2.4.0 / 2011-02-23
|
|
2
22
|
|
|
3
23
|
* major enhancements
|
|
4
24
|
|
|
5
25
|
* Added nested translations (collections) support
|
|
26
|
+
* Added :inflector_traverses switch
|
|
6
27
|
|
|
7
28
|
=== 2.3.1 / 2011-02-14
|
|
8
29
|
|
|
@@ -258,24 +258,33 @@ module I18n
|
|
|
258
258
|
|
|
259
259
|
end # module Reserved
|
|
260
260
|
|
|
261
|
+
# A string for regular expression that catches patterns.
|
|
262
|
+
PATTERN_RESTR = '(.?)' + Markers::PATTERN +
|
|
263
|
+
'([^\\' + Markers::PATTERN_BEGIN + ']*)\\' + Markers::PATTERN_BEGIN +
|
|
264
|
+
'([^\\' + Markers::PATTERN_END + ']+)\\' + Markers::PATTERN_END +
|
|
265
|
+
'((?:\\'+ Markers::PATTERN_BEGIN + '([^\\' + Markers::PATTERN_BEGIN +
|
|
266
|
+
']+)\\' + Markers::PATTERN_END + ')*)'
|
|
267
|
+
|
|
268
|
+
# A string for regular expression that extracts additional patterns attached.
|
|
269
|
+
MULTI_RESTR = '\\' + Markers::PATTERN_BEGIN +
|
|
270
|
+
'([^\\' + Markers::PATTERN_END + ']+)\\' +
|
|
271
|
+
Markers::PATTERN_END
|
|
272
|
+
|
|
273
|
+
# A regular expression that catches token groups or single tokens.
|
|
274
|
+
TOKENS_RESTR = '(?:' +
|
|
275
|
+
'([^' + Operators::Tokens::ASSIGN + '\\' + Operators::Tokens::OR + ']+)' +
|
|
276
|
+
Operators::Tokens::ASSIGN + '+' +
|
|
277
|
+
'([^\\' + Operators::Tokens::OR + ']+)\1?)' +
|
|
278
|
+
'|([^' + Operators::Tokens::ASSIGN + '\\' + Operators::Tokens::OR + ']+)'
|
|
279
|
+
|
|
261
280
|
# A regular expression that catches patterns.
|
|
262
|
-
PATTERN_REGEXP = Regexp.new
|
|
263
|
-
'([^\\' + Markers::PATTERN_BEGIN + ']*)\\' + Markers::PATTERN_BEGIN +
|
|
264
|
-
'([^\\' + Markers::PATTERN_END + ']+)\\' + Markers::PATTERN_END +
|
|
265
|
-
'((?:\\'+ Markers::PATTERN_BEGIN + '([^\\' + Markers::PATTERN_BEGIN +
|
|
266
|
-
']+)\\' + Markers::PATTERN_END + ')*)'
|
|
281
|
+
PATTERN_REGEXP = Regexp.new PATTERN_RESTR
|
|
267
282
|
|
|
268
283
|
# A regular expression that extracts additional patterns attached.
|
|
269
|
-
MULTI_REGEXP = Regexp.new
|
|
270
|
-
'([^\\' + Markers::PATTERN_END + ']+)\\' +
|
|
271
|
-
Markers::PATTERN_END
|
|
284
|
+
MULTI_REGEXP = Regexp.new MULTI_RESTR
|
|
272
285
|
|
|
273
286
|
# A regular expression that catches token groups or single tokens.
|
|
274
|
-
TOKENS_REGEXP = Regexp.new
|
|
275
|
-
'([^' + Operators::Tokens::ASSIGN + '\\' + Operators::Tokens::OR + ']+)' +
|
|
276
|
-
Operators::Tokens::ASSIGN + '+' +
|
|
277
|
-
'([^\\' + Operators::Tokens::OR + ']+)\1?)' +
|
|
278
|
-
'|([^' + Operators::Tokens::ASSIGN + '\\' + Operators::Tokens::OR + ']+)'
|
|
287
|
+
TOKENS_REGEXP = Regexp.new TOKENS_RESTR
|
|
279
288
|
|
|
280
289
|
end # module Config
|
|
281
290
|
|
|
@@ -40,29 +40,48 @@ module I18n
|
|
|
40
40
|
# that overrides global setting (see: {I18n::Inflector::InflectionOptions#cache_aware})
|
|
41
41
|
# @option options [Boolean] :inflector_traverses (true) local switch
|
|
42
42
|
# that overrides global setting (see: {I18n::Inflector::InflectionOptions#traverses})
|
|
43
|
+
# @option options [Boolean] :inflector_interpolate_symbols (false) local switch
|
|
44
|
+
# that overrides global setting (see: {I18n::Inflector::InflectionOptions#interpolate_symbols})
|
|
43
45
|
# @return [String] the string with interpolated patterns
|
|
44
46
|
def interpolate(string, locale, options = {})
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
case string
|
|
49
|
+
|
|
50
|
+
when String
|
|
51
|
+
|
|
52
|
+
if (locale.nil? || !inflected_locale?(locale))
|
|
53
|
+
string.gsub(PATTERN_REGEXP) { Escapes::PATTERN[$1] ? $& : $1 }
|
|
54
|
+
elsif !string.include?(Markers::PATTERN)
|
|
55
|
+
string
|
|
56
|
+
else
|
|
57
|
+
interpolate_core(string, locale, options)
|
|
51
58
|
end
|
|
52
|
-
end
|
|
53
59
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
when Hash
|
|
61
|
+
|
|
62
|
+
options[:inflector_traverses] ?
|
|
63
|
+
string.merge(string) { |k,v| interpolate(v, locale, options) } : string
|
|
64
|
+
|
|
65
|
+
when Array
|
|
66
|
+
|
|
67
|
+
options[:inflector_traverses] ?
|
|
68
|
+
string.map { |v| interpolate(v, locale, options) } : string
|
|
69
|
+
|
|
70
|
+
when Symbol
|
|
71
|
+
|
|
72
|
+
if options[:inflector_interpolate_symbols]
|
|
73
|
+
r = interpolate(string.to_s, locale, options)
|
|
74
|
+
r.to_sym rescue :" "
|
|
75
|
+
else
|
|
76
|
+
string
|
|
59
77
|
end
|
|
60
|
-
end
|
|
61
78
|
|
|
62
|
-
|
|
63
|
-
|
|
79
|
+
else
|
|
80
|
+
|
|
81
|
+
string
|
|
82
|
+
|
|
83
|
+
end
|
|
64
84
|
|
|
65
|
-
interpolate_core(string, locale, options)
|
|
66
85
|
end
|
|
67
86
|
|
|
68
87
|
# This method creates an inflection pattern
|
|
@@ -121,6 +121,27 @@ module I18n
|
|
|
121
121
|
# @param [Boolean] state +true+ enables, +false+ disables this switch
|
|
122
122
|
attr_accessor :traverses
|
|
123
123
|
|
|
124
|
+
# This is a switch that enables interpolation of symbols. Whenever
|
|
125
|
+
# interpolation method will receive a collection of symbols as a result
|
|
126
|
+
# of calling underlying translation method
|
|
127
|
+
# it won't process them, returning as they are, unless
|
|
128
|
+
# this switch is enabled.
|
|
129
|
+
#
|
|
130
|
+
# Note that using symbols as values in translation data creates
|
|
131
|
+
# I18n aliases. This option is intended to work with arrays of
|
|
132
|
+
# symbols or hashes with symbols as values, if the original translation
|
|
133
|
+
# method returns such structures.
|
|
134
|
+
#
|
|
135
|
+
# This switch is by default set to +false+.
|
|
136
|
+
#
|
|
137
|
+
# @note Local option +:inflector_interpolate_symbols+ passed to the
|
|
138
|
+
# {I18n::Backend::Inflector#translate} overrides this setting.
|
|
139
|
+
#
|
|
140
|
+
# @api public
|
|
141
|
+
# @return [Boolean] state of the switch
|
|
142
|
+
# @param [Boolean] state +true+ enables, +false+ disables this switch
|
|
143
|
+
attr_accessor :interpolate_symbols
|
|
144
|
+
|
|
124
145
|
# When this switch is set to +true+ then inflector falls back to the default
|
|
125
146
|
# token for a kind if an inflection option passed to the
|
|
126
147
|
# {I18n::Backend::Inflector#translate} is unknown or +nil+.
|
|
@@ -264,6 +285,7 @@ module I18n
|
|
|
264
285
|
def reset
|
|
265
286
|
@unknown_defaults = true
|
|
266
287
|
@traverses = true
|
|
288
|
+
@interpolate_symbols= false
|
|
267
289
|
@excluded_defaults = false
|
|
268
290
|
@aliased_patterns = false
|
|
269
291
|
@cache_aware = false
|
data/test/inflector_test.rb
CHANGED
|
@@ -373,6 +373,32 @@ class I18nInflectorTest < Test::Unit::TestCase
|
|
|
373
373
|
assert_equal h, I18n.t('welcomes', :gender => :m, :foo => 5, :locale => :xx)
|
|
374
374
|
end
|
|
375
375
|
|
|
376
|
+
test "backend inflector translate: works with arrays as results" do
|
|
377
|
+
a = [ :one, :two, :three ]
|
|
378
|
+
store_translations(:xx, 'welcomes' => {'hi' => a})
|
|
379
|
+
store_translations(:uu, 'welcomes' => {'hi' => a})
|
|
380
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :xx)
|
|
381
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :uu)
|
|
382
|
+
a = [ :one, :two, :"x@{m:man|woman}d" ]
|
|
383
|
+
store_translations(:xx, 'welcomes' => {'hi' => a})
|
|
384
|
+
store_translations(:uu, 'welcomes' => {'hi' => a})
|
|
385
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :xx)
|
|
386
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :uu)
|
|
387
|
+
a = [ :one, :two, :xmand ]
|
|
388
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :xx, :inflector_interpolate_symbols => true)
|
|
389
|
+
a = [ :one, :two, :xd ]
|
|
390
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :uu, :inflector_interpolate_symbols => true)
|
|
391
|
+
a = [ :one, :two, :"x@{m:man|woman}d" ]
|
|
392
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :xx, :inflector_traverses => false, :inflector_interpolate_symbols => true)
|
|
393
|
+
a = [ :one, :two, :"x@{m:man|woman}d" ]
|
|
394
|
+
assert_equal a, I18n.t('welcomes.hi', :gender => :m, :locale => :uu, :inflector_traverses => false, :inflector_interpolate_symbols => true)
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
test "backend inflector translate: works with other types as results" do
|
|
398
|
+
store_translations(:xx, 'welcomes' => {'hi' => 31337})
|
|
399
|
+
assert_equal 31337, I18n.t('welcomes.hi', :gender => :m, :locale => :xx)
|
|
400
|
+
end
|
|
401
|
+
|
|
376
402
|
test "backend inflector translate: works with negative tokens" do
|
|
377
403
|
store_translations(:xx, 'hi' => 'Dear @{!m:Lady|m:Sir|n:You|All}!')
|
|
378
404
|
assert_equal 'Dear Lady!', I18n.t('hi', :gender => :n, :locale => :xx)
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: i18n-inflector
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
prerelease:
|
|
5
|
-
|
|
6
|
-
- 2
|
|
7
|
-
- 4
|
|
8
|
-
- 0
|
|
9
|
-
version: 2.4.0
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 2.5.0
|
|
10
6
|
platform: ruby
|
|
11
7
|
authors:
|
|
12
8
|
- "Pawe\xC5\x82 Wilk"
|
|
@@ -44,10 +40,6 @@ dependencies:
|
|
|
44
40
|
requirements:
|
|
45
41
|
- - ">="
|
|
46
42
|
- !ruby/object:Gem::Version
|
|
47
|
-
segments:
|
|
48
|
-
- 0
|
|
49
|
-
- 4
|
|
50
|
-
- 1
|
|
51
43
|
version: 0.4.1
|
|
52
44
|
type: :runtime
|
|
53
45
|
prerelease: false
|
|
@@ -59,10 +51,6 @@ dependencies:
|
|
|
59
51
|
requirements:
|
|
60
52
|
- - ">="
|
|
61
53
|
- !ruby/object:Gem::Version
|
|
62
|
-
segments:
|
|
63
|
-
- 0
|
|
64
|
-
- 1
|
|
65
|
-
- 2
|
|
66
54
|
version: 0.1.2
|
|
67
55
|
type: :development
|
|
68
56
|
prerelease: false
|
|
@@ -74,10 +62,6 @@ dependencies:
|
|
|
74
62
|
requirements:
|
|
75
63
|
- - ">="
|
|
76
64
|
- !ruby/object:Gem::Version
|
|
77
|
-
segments:
|
|
78
|
-
- 0
|
|
79
|
-
- 0
|
|
80
|
-
- 4
|
|
81
65
|
version: 0.0.4
|
|
82
66
|
type: :development
|
|
83
67
|
prerelease: false
|
|
@@ -89,10 +73,6 @@ dependencies:
|
|
|
89
73
|
requirements:
|
|
90
74
|
- - ">="
|
|
91
75
|
- !ruby/object:Gem::Version
|
|
92
|
-
segments:
|
|
93
|
-
- 0
|
|
94
|
-
- 6
|
|
95
|
-
- 4
|
|
96
76
|
version: 0.6.4
|
|
97
77
|
type: :development
|
|
98
78
|
prerelease: false
|
|
@@ -104,11 +84,7 @@ dependencies:
|
|
|
104
84
|
requirements:
|
|
105
85
|
- - ">="
|
|
106
86
|
- !ruby/object:Gem::Version
|
|
107
|
-
|
|
108
|
-
- 1
|
|
109
|
-
- 0
|
|
110
|
-
- 7
|
|
111
|
-
version: 1.0.7
|
|
87
|
+
version: 1.0.10
|
|
112
88
|
type: :development
|
|
113
89
|
prerelease: false
|
|
114
90
|
version_requirements: *id005
|
|
@@ -119,10 +95,6 @@ dependencies:
|
|
|
119
95
|
requirements:
|
|
120
96
|
- - ">="
|
|
121
97
|
- !ruby/object:Gem::Version
|
|
122
|
-
segments:
|
|
123
|
-
- 1
|
|
124
|
-
- 0
|
|
125
|
-
- 0
|
|
126
98
|
version: 1.0.0
|
|
127
99
|
type: :development
|
|
128
100
|
prerelease: false
|
|
@@ -134,11 +106,7 @@ dependencies:
|
|
|
134
106
|
requirements:
|
|
135
107
|
- - ">="
|
|
136
108
|
- !ruby/object:Gem::Version
|
|
137
|
-
|
|
138
|
-
- 2
|
|
139
|
-
- 8
|
|
140
|
-
- 0
|
|
141
|
-
version: 2.8.0
|
|
109
|
+
version: 2.9.1
|
|
142
110
|
type: :development
|
|
143
111
|
prerelease: false
|
|
144
112
|
version_requirements: *id007
|
|
@@ -186,7 +154,8 @@ files:
|
|
|
186
154
|
- lib/i18n-inflector/version.rb
|
|
187
155
|
- test/inflector_test.rb
|
|
188
156
|
- test/test_helper.rb
|
|
189
|
-
|
|
157
|
+
- .gemtest
|
|
158
|
+
has_rdoc: true
|
|
190
159
|
homepage: https://rubygems.org/gems/i18n-inflector/
|
|
191
160
|
licenses: []
|
|
192
161
|
|
|
@@ -202,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
202
171
|
requirements:
|
|
203
172
|
- - ">="
|
|
204
173
|
- !ruby/object:Gem::Version
|
|
205
|
-
hash: -
|
|
174
|
+
hash: -3056232506908455898
|
|
206
175
|
segments:
|
|
207
176
|
- 0
|
|
208
177
|
version: "0"
|
|
@@ -211,13 +180,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
211
180
|
requirements:
|
|
212
181
|
- - ">="
|
|
213
182
|
- !ruby/object:Gem::Version
|
|
214
|
-
segments:
|
|
215
|
-
- 0
|
|
216
183
|
version: "0"
|
|
217
184
|
requirements: []
|
|
218
185
|
|
|
219
186
|
rubyforge_project: i18n-inflector
|
|
220
|
-
rubygems_version: 1.
|
|
187
|
+
rubygems_version: 1.5.2
|
|
221
188
|
signing_key:
|
|
222
189
|
specification_version: 3
|
|
223
190
|
summary: Simple inflection module for I18n
|
metadata.gz.sig
CHANGED
|
Binary file
|