i18n-inflector 2.6.5 → 2.6.6
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.tar.gz.sig +0 -0
- data/ChangeLog +24 -0
- data/README.rdoc +64 -36
- data/docs/EXAMPLES +46 -0
- data/docs/HISTORY +12 -0
- data/docs/USAGE +2 -2
- data/lib/i18n-inflector/backend.rb +12 -0
- data/lib/i18n-inflector/config.rb +2 -1
- data/lib/i18n-inflector/interpolate.rb +1 -1
- data/lib/i18n-inflector/lazy_enum.rb +11 -0
- data/lib/i18n-inflector/version.rb +1 -1
- metadata +19 -19
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
|
Binary file
|
data/ChangeLog
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
commit c0bcc1dd60256076d9ac79d6f57d11d6a578f3ee
|
|
2
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
3
|
+
Date: Wed Mar 14 02:10:49 2012 +0100
|
|
4
|
+
|
|
5
|
+
Release 2.6.6
|
|
6
|
+
|
|
7
|
+
commit 3d2292b4dec50c628fc2feaeba2639e21c44c5c7
|
|
8
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
9
|
+
Date: Wed Mar 14 02:06:50 2012 +0100
|
|
10
|
+
|
|
11
|
+
Added LazyEnumerator#empty?
|
|
12
|
+
|
|
13
|
+
commit f912309d9f9d0d2e41c901778f885259f907e8ef
|
|
14
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
15
|
+
Date: Wed Mar 14 02:06:29 2012 +0100
|
|
16
|
+
|
|
17
|
+
Documentation and examples updated
|
|
18
|
+
|
|
19
|
+
commit 7d5f57ec1ff967051e693b332c0e72f9bbbbea2a
|
|
20
|
+
Author: Paweł Wilk <siefca@gnu.org>
|
|
21
|
+
Date: Wed Mar 14 02:06:04 2012 +0100
|
|
22
|
+
|
|
23
|
+
Added support for integers as token names
|
|
24
|
+
|
|
1
25
|
commit d08273f935a3fecc51e4ce27a3ebe01342a338f3
|
|
2
26
|
Author: Paweł Wilk <siefca@gnu.org>
|
|
3
27
|
Date: Sat Mar 10 21:03:04 2012 +0100
|
data/README.rdoc
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
=
|
|
1
|
+
= I18n Inflector
|
|
2
2
|
|
|
3
|
-
<b>i18n-inflector version <tt>2.6.
|
|
3
|
+
<b>i18n-inflector version <tt>2.6.6</tt></b> (<b><tt>Little Kózka</tt></b>)
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
* https://rubygems.org/gems/i18n-inflector
|
|
@@ -8,6 +8,56 @@
|
|
|
8
8
|
* mailto:pw@gnu.org
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
== Summary
|
|
12
|
+
|
|
13
|
+
This library contains a backend module for I18n that adds some extra
|
|
14
|
+
functionality to standard backend. It overwrites the translate method
|
|
15
|
+
in a way that it will interpolate additional inflection tokens present
|
|
16
|
+
in translations.
|
|
17
|
+
|
|
18
|
+
== Synopsis
|
|
19
|
+
|
|
20
|
+
require 'i18n-inflector'
|
|
21
|
+
|
|
22
|
+
I18n.translate( 'to_be', :number => :singular,
|
|
23
|
+
:tense => :past,
|
|
24
|
+
:person => 2 )
|
|
25
|
+
#=> You were here
|
|
26
|
+
|
|
27
|
+
I18n.translate('welcome', :gender => :female)
|
|
28
|
+
#=> Dear Lady
|
|
29
|
+
|
|
30
|
+
== Why?
|
|
31
|
+
|
|
32
|
+
You can use I18n Inflector to (relatively easy) create
|
|
33
|
+
translations for highly inflected languages (like those
|
|
34
|
+
belonging to Slavic language family). You can also use it
|
|
35
|
+
in translation services that may operate on sentences
|
|
36
|
+
instead of exact words.
|
|
37
|
+
|
|
38
|
+
== When?
|
|
39
|
+
|
|
40
|
+
It is intended to be used in a web projects or other projects where
|
|
41
|
+
translations are performed by many people, yet there is a need to
|
|
42
|
+
inflect sentences with some external variables. To achieve similar
|
|
43
|
+
functionality lambdas can be used but including many Proc objects
|
|
44
|
+
might be considered unsafe or memory consuming.
|
|
45
|
+
|
|
46
|
+
See i18n-inflector-rails[https://rubygems.org/gems/i18n-inflector-rails] if
|
|
47
|
+
you need Rails integration.
|
|
48
|
+
|
|
49
|
+
== How?
|
|
50
|
+
|
|
51
|
+
I18n Inflector lets you build you own inflection patterns
|
|
52
|
+
contained in translation entries. The patterns may contain simple
|
|
53
|
+
conditions and tokens, which combined with parameters
|
|
54
|
+
passed to +I18n.translate+ method can produce inflected
|
|
55
|
+
strings.
|
|
56
|
+
|
|
57
|
+
* See {USAGE}[http://rubydoc.info/gems/i18n-inflector/file/docs/USAGE] for detailed information about the usage.
|
|
58
|
+
* See {EXAMPLES}[http://rubydoc.info/gems/i18n-inflector/file/docs/EXAMPLES] for examples.
|
|
59
|
+
* See {whole documentation}[http://rubydoc.info/gems/i18n-inflector/] to browse all documents.
|
|
60
|
+
|
|
11
61
|
== Features
|
|
12
62
|
|
|
13
63
|
* Inline inflection using patterns in translation data.
|
|
@@ -21,9 +71,8 @@
|
|
|
21
71
|
|
|
22
72
|
== Description
|
|
23
73
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
so that it will interpolate additional inflection tokens present in
|
|
74
|
+
The I18n Inflector extends the translate method from I18n in a way that
|
|
75
|
+
it will interpolate additional inflection tokens present in
|
|
27
76
|
translations. These tokens may appear in *patterns* which are contained
|
|
28
77
|
within <tt>@{</tt> and <tt>}</tt> symbols. Configuration is stored
|
|
29
78
|
also in translation data, in a scope <tt><locale>.i18n.inflections</tt>,
|
|
@@ -38,7 +87,9 @@ It adds the +inflector+ object to the default backend so you can use many
|
|
|
38
87
|
methods for accessing loaded inflection data at runtime, or to set up global
|
|
39
88
|
switches that are controlling the engine.
|
|
40
89
|
|
|
41
|
-
|
|
90
|
+
== Short example
|
|
91
|
+
|
|
92
|
+
Example configuration which uses translation data:
|
|
42
93
|
|
|
43
94
|
en:
|
|
44
95
|
i18n:
|
|
@@ -51,7 +102,10 @@ Example translation data:
|
|
|
51
102
|
male: @m
|
|
52
103
|
default: n
|
|
53
104
|
|
|
54
|
-
|
|
105
|
+
|
|
106
|
+
Example translation data:
|
|
107
|
+
|
|
108
|
+
en:
|
|
55
109
|
welcome: "Dear @{f:Lady|m:Sir|n:You|All}!"
|
|
56
110
|
|
|
57
111
|
@same_but_as_key:
|
|
@@ -61,7 +115,8 @@ Example translation data:
|
|
|
61
115
|
@prefix: "Dear "
|
|
62
116
|
@suffix: "!"
|
|
63
117
|
@free: "All"
|
|
64
|
-
|
|
118
|
+
|
|
119
|
+
|
|
65
120
|
=== Note about YAML parsing
|
|
66
121
|
|
|
67
122
|
The example above is not compatible with Psych parser, which is used
|
|
@@ -101,23 +156,6 @@ languages. An example pattern:
|
|
|
101
156
|
|
|
102
157
|
welcome: "Dear @gender+number{f+s:Lady|f+p:Ladies|m+s:Sir|m+p:Gentlemen|All}"
|
|
103
158
|
|
|
104
|
-
== Why?
|
|
105
|
-
|
|
106
|
-
It's intended to be used in a web projects or other projects where
|
|
107
|
-
translations are performed by many people, yet there is a need to
|
|
108
|
-
inflect sentences with some external variables.
|
|
109
|
-
|
|
110
|
-
To achieve similar functionality lambdas can be used but including
|
|
111
|
-
Proc objects in translations might be considered unsafe or memory
|
|
112
|
-
consuming.
|
|
113
|
-
|
|
114
|
-
If you have a troop of happy translators that shouldn't have the
|
|
115
|
-
ability to execute any code yet you need some simple inflection
|
|
116
|
-
then this module might help you.
|
|
117
|
-
|
|
118
|
-
See i18n-inflector-rails[https://rubygems.org/gems/i18n-inflector-rails] if
|
|
119
|
-
you need Rails integration.
|
|
120
|
-
|
|
121
159
|
== Requirements
|
|
122
160
|
|
|
123
161
|
* i18n[https://rubygems.org/gems/i18n]
|
|
@@ -125,11 +163,6 @@ you need Rails integration.
|
|
|
125
163
|
* rubygems[http://docs.rubygems.org/]
|
|
126
164
|
* bundler[http://gembundler.com/]
|
|
127
165
|
|
|
128
|
-
== Important documentation and more on usage
|
|
129
|
-
|
|
130
|
-
* See {file:docs/USAGE} for detailed information about the usage.
|
|
131
|
-
* See {whole documentation}[http://rubydoc.info/gems/i18n-inflector/] to browse all documents.
|
|
132
|
-
|
|
133
166
|
== Download
|
|
134
167
|
|
|
135
168
|
==== Source code
|
|
@@ -145,12 +178,7 @@ you need Rails integration.
|
|
|
145
178
|
|
|
146
179
|
* <tt>gem install i18n-inflector</tt>
|
|
147
180
|
|
|
148
|
-
==
|
|
149
|
-
|
|
150
|
-
require 'i18n-inflector'
|
|
151
|
-
i18n.translate('welcome')
|
|
152
|
-
|
|
153
|
-
Detailed example:
|
|
181
|
+
== Detailed example
|
|
154
182
|
|
|
155
183
|
<b>YAML:</b>
|
|
156
184
|
|
data/docs/EXAMPLES
CHANGED
|
@@ -307,5 +307,51 @@ But then you have to change the translation call too, e.g.:
|
|
|
307
307
|
The split is necessary because we have two patterns here and no way to express them
|
|
308
308
|
as one inflection key.
|
|
309
309
|
|
|
310
|
+
== To be or not to be
|
|
311
|
+
|
|
312
|
+
Here is the example pattern that inflects English <i>to be</i> by tense,
|
|
313
|
+
person and grammatical number:
|
|
314
|
+
|
|
315
|
+
en:
|
|
316
|
+
i18n:
|
|
317
|
+
inflections:
|
|
318
|
+
@person:
|
|
319
|
+
1: first
|
|
320
|
+
2: second
|
|
321
|
+
3: third
|
|
322
|
+
i: :@1
|
|
323
|
+
you: :@2
|
|
324
|
+
He: :@3
|
|
325
|
+
She: :@3
|
|
326
|
+
it: :@3
|
|
327
|
+
@tense:
|
|
328
|
+
past: past
|
|
329
|
+
present: present
|
|
330
|
+
now: @present
|
|
331
|
+
default: present
|
|
332
|
+
@num:
|
|
333
|
+
s: singular
|
|
334
|
+
p: plural
|
|
335
|
+
default: s
|
|
336
|
+
|
|
337
|
+
to_be: >
|
|
338
|
+
@num+person{s+1:I|*+2:You|s+3:%{person}|p+3:They|p+1:We}
|
|
339
|
+
@num+person+tense{s+1+present:am|s+2+present:are|s+3+present:is|
|
|
340
|
+
p+*+present:are|s+1,3+past:was|p+*+past:were|s+2+past:were}
|
|
341
|
+
|
|
342
|
+
And the code that prints all possible combinations:
|
|
343
|
+
|
|
344
|
+
[:i, :you, :He, :She, :It].each do |person|
|
|
345
|
+
puts I18n.translate(:to_be, :num => :s, :person => person, :tense => :now) + "\t| " +
|
|
346
|
+
I18n.translate(:to_be, :num => :s, :person => person, :tense => :past)
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
puts
|
|
350
|
+
|
|
351
|
+
(1..3).each do |person|
|
|
352
|
+
puts I18n.translate(:to_be, :num => :p, :person => person, :tense => :now) + " | " +
|
|
353
|
+
I18n.translate(:to_be, :num => :p, :person => person, :tense => :past)
|
|
354
|
+
end
|
|
355
|
+
|
|
310
356
|
<i>to be continued…</i>
|
|
311
357
|
|
data/docs/HISTORY
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
=== 2.6.6 / 2012-03-14
|
|
2
|
+
|
|
3
|
+
* major enhancements
|
|
4
|
+
|
|
5
|
+
* Added support for integers as token names
|
|
6
|
+
* Added nice example of "to be" inflection in English
|
|
7
|
+
|
|
8
|
+
* minor enhancements
|
|
9
|
+
|
|
10
|
+
* Documentation updated
|
|
11
|
+
* Added instance method empty? to LazyEnumerator
|
|
12
|
+
|
|
1
13
|
=== 2.6.5 / 2012-03-10
|
|
2
14
|
|
|
3
15
|
* minor enhancements
|
data/docs/USAGE
CHANGED
|
@@ -513,7 +513,7 @@ Elements in the example above are:
|
|
|
513
513
|
* +en+: language
|
|
514
514
|
* +i18n+: configuration scope
|
|
515
515
|
* +inflections+: inflections configuration scope
|
|
516
|
-
* +gender+: <
|
|
516
|
+
* +gender+: <b>strict kind</b> scope
|
|
517
517
|
* +f+: inflection token
|
|
518
518
|
* <tt>"female"</tt>: token's description
|
|
519
519
|
* +woman+: inflection alias
|
|
@@ -630,7 +630,7 @@ containing no tokens but just a free text consisting
|
|
|
630
630
|
of single space character.
|
|
631
631
|
|
|
632
632
|
== Complex patterns
|
|
633
|
-
A <
|
|
633
|
+
A <b>complex pattern</b> is a named pattern that uses more than
|
|
634
634
|
one inflection kind and sets of a respective tokens. The given identifiers
|
|
635
635
|
of kinds should be separated by the plus sign and instead of single
|
|
636
636
|
tokens there should be token sets (a tokens separated by the plus
|
|
@@ -247,6 +247,7 @@ module I18n
|
|
|
247
247
|
def load_inflection_tokens(locale, subtree=nil)
|
|
248
248
|
inflections_tree = subtree || inflection_subtree(locale)
|
|
249
249
|
return nil if (inflections_tree.nil? || inflections_tree.empty?)
|
|
250
|
+
inflections_tree = deep_symbolize(inflections_tree)
|
|
250
251
|
|
|
251
252
|
idb = I18n::Inflector::InflectionData.new(locale)
|
|
252
253
|
idb_strict = I18n::Inflector::InflectionData_Strict.new(locale)
|
|
@@ -255,6 +256,7 @@ module I18n
|
|
|
255
256
|
|
|
256
257
|
inflections = prepare_inflections(locale, inflections_tree, idb, idb_strict)
|
|
257
258
|
|
|
259
|
+
# add inflection tokens and kinds to internal database
|
|
258
260
|
inflections.each do |orig_kind, kind, strict_kind, subdb, tokens|
|
|
259
261
|
|
|
260
262
|
# validate token's kind
|
|
@@ -345,6 +347,16 @@ module I18n
|
|
|
345
347
|
end
|
|
346
348
|
end
|
|
347
349
|
|
|
350
|
+
# @private
|
|
351
|
+
def deep_symbolize(obj)
|
|
352
|
+
obj.inject({}) do |result, (key, value)|
|
|
353
|
+
value = deep_symbolize(value) if value.is_a?(Hash)
|
|
354
|
+
result[(key.to_s.to_sym rescue key) || key] = value
|
|
355
|
+
result
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
|
|
348
360
|
end # module Inflector
|
|
349
361
|
end # module Backend
|
|
350
362
|
end # module I18n
|
|
@@ -353,7 +353,7 @@ module I18n
|
|
|
353
353
|
|
|
354
354
|
# resolve token from options and check if it's known
|
|
355
355
|
unless passed_token.nil?
|
|
356
|
-
passed_token = subdb.get_true_token(passed_token.to_sym, parsed_kind)
|
|
356
|
+
passed_token = subdb.get_true_token(passed_token.to_s.to_sym, parsed_kind)
|
|
357
357
|
passed_token = default_token if passed_token.nil? && unknown_defaults
|
|
358
358
|
end
|
|
359
359
|
|
|
@@ -128,6 +128,17 @@ module I18n
|
|
|
128
128
|
end
|
|
129
129
|
end
|
|
130
130
|
|
|
131
|
+
# Checks if a collection is empty
|
|
132
|
+
# @return [Boolean] +true+ if collection is empty, +false+ otherwise
|
|
133
|
+
def empty?
|
|
134
|
+
self.class.new do |yielder|
|
|
135
|
+
each do |k,v|
|
|
136
|
+
return false
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
true
|
|
140
|
+
end
|
|
141
|
+
|
|
131
142
|
end
|
|
132
143
|
|
|
133
144
|
# This class implements simple enumerators for arrays
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: i18n-inflector
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.6.
|
|
4
|
+
version: 2.6.6
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -48,11 +48,11 @@ cert_chain:
|
|
|
48
48
|
-----END CERTIFICATE-----
|
|
49
49
|
|
|
50
50
|
'
|
|
51
|
-
date: 2012-03-
|
|
51
|
+
date: 2012-03-14 00:00:00.000000000 Z
|
|
52
52
|
dependencies:
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: i18n
|
|
55
|
-
requirement: &
|
|
55
|
+
requirement: &2161408440 !ruby/object:Gem::Requirement
|
|
56
56
|
none: false
|
|
57
57
|
requirements:
|
|
58
58
|
- - ! '>='
|
|
@@ -60,10 +60,10 @@ dependencies:
|
|
|
60
60
|
version: 0.4.1
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
|
-
version_requirements: *
|
|
63
|
+
version_requirements: *2161408440
|
|
64
64
|
- !ruby/object:Gem::Dependency
|
|
65
65
|
name: hoe-yard
|
|
66
|
-
requirement: &
|
|
66
|
+
requirement: &2161407820 !ruby/object:Gem::Requirement
|
|
67
67
|
none: false
|
|
68
68
|
requirements:
|
|
69
69
|
- - ! '>='
|
|
@@ -71,10 +71,10 @@ dependencies:
|
|
|
71
71
|
version: 0.1.2
|
|
72
72
|
type: :development
|
|
73
73
|
prerelease: false
|
|
74
|
-
version_requirements: *
|
|
74
|
+
version_requirements: *2161407820
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
76
|
name: test_declarative
|
|
77
|
-
requirement: &
|
|
77
|
+
requirement: &2161407160 !ruby/object:Gem::Requirement
|
|
78
78
|
none: false
|
|
79
79
|
requirements:
|
|
80
80
|
- - ! '>='
|
|
@@ -82,10 +82,10 @@ dependencies:
|
|
|
82
82
|
version: 0.0.5
|
|
83
83
|
type: :development
|
|
84
84
|
prerelease: false
|
|
85
|
-
version_requirements: *
|
|
85
|
+
version_requirements: *2161407160
|
|
86
86
|
- !ruby/object:Gem::Dependency
|
|
87
87
|
name: yard
|
|
88
|
-
requirement: &
|
|
88
|
+
requirement: &2161406440 !ruby/object:Gem::Requirement
|
|
89
89
|
none: false
|
|
90
90
|
requirements:
|
|
91
91
|
- - ! '>='
|
|
@@ -93,10 +93,10 @@ dependencies:
|
|
|
93
93
|
version: 0.7.2
|
|
94
94
|
type: :development
|
|
95
95
|
prerelease: false
|
|
96
|
-
version_requirements: *
|
|
96
|
+
version_requirements: *2161406440
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: rdoc
|
|
99
|
-
requirement: &
|
|
99
|
+
requirement: &2161405660 !ruby/object:Gem::Requirement
|
|
100
100
|
none: false
|
|
101
101
|
requirements:
|
|
102
102
|
- - ! '>='
|
|
@@ -104,10 +104,10 @@ dependencies:
|
|
|
104
104
|
version: 3.8.0
|
|
105
105
|
type: :development
|
|
106
106
|
prerelease: false
|
|
107
|
-
version_requirements: *
|
|
107
|
+
version_requirements: *2161405660
|
|
108
108
|
- !ruby/object:Gem::Dependency
|
|
109
109
|
name: bundler
|
|
110
|
-
requirement: &
|
|
110
|
+
requirement: &2161405020 !ruby/object:Gem::Requirement
|
|
111
111
|
none: false
|
|
112
112
|
requirements:
|
|
113
113
|
- - ! '>='
|
|
@@ -115,10 +115,10 @@ dependencies:
|
|
|
115
115
|
version: 1.0.15
|
|
116
116
|
type: :development
|
|
117
117
|
prerelease: false
|
|
118
|
-
version_requirements: *
|
|
118
|
+
version_requirements: *2161405020
|
|
119
119
|
- !ruby/object:Gem::Dependency
|
|
120
120
|
name: hoe-bundler
|
|
121
|
-
requirement: &
|
|
121
|
+
requirement: &2161404300 !ruby/object:Gem::Requirement
|
|
122
122
|
none: false
|
|
123
123
|
requirements:
|
|
124
124
|
- - ! '>='
|
|
@@ -126,10 +126,10 @@ dependencies:
|
|
|
126
126
|
version: 1.1.0
|
|
127
127
|
type: :development
|
|
128
128
|
prerelease: false
|
|
129
|
-
version_requirements: *
|
|
129
|
+
version_requirements: *2161404300
|
|
130
130
|
- !ruby/object:Gem::Dependency
|
|
131
131
|
name: hoe
|
|
132
|
-
requirement: &
|
|
132
|
+
requirement: &2161403320 !ruby/object:Gem::Requirement
|
|
133
133
|
none: false
|
|
134
134
|
requirements:
|
|
135
135
|
- - ~>
|
|
@@ -137,7 +137,7 @@ dependencies:
|
|
|
137
137
|
version: '2.16'
|
|
138
138
|
type: :development
|
|
139
139
|
prerelease: false
|
|
140
|
-
version_requirements: *
|
|
140
|
+
version_requirements: *2161403320
|
|
141
141
|
description: Enhances simple I18n backend in a way that it inflects translation data
|
|
142
142
|
using pattern interpolation.
|
|
143
143
|
email:
|
|
@@ -202,7 +202,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
202
202
|
version: '0'
|
|
203
203
|
segments:
|
|
204
204
|
- 0
|
|
205
|
-
hash:
|
|
205
|
+
hash: -404233212743185379
|
|
206
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
207
|
none: false
|
|
208
208
|
requirements:
|
metadata.gz.sig
CHANGED
|
Binary file
|