r18n-core 0.2.1 → 0.2.2
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/lib/r18n-core.rb +4 -4
- data/lib/r18n-core/i18n.rb +7 -7
- data/lib/r18n-core/locale.rb +6 -6
- data/lib/r18n-core/translation.rb +15 -8
- data/lib/r18n-core/version.rb +1 -1
- data/spec/i18n_spec.rb +2 -1
- data/spec/locale_spec.rb +2 -2
- data/spec/translation_spec.rb +2 -0
- metadata +23 -23
data/lib/r18n-core.rb
CHANGED
@@ -32,22 +32,22 @@ require dir + 'i18n'
|
|
32
32
|
|
33
33
|
module R18n
|
34
34
|
class << self
|
35
|
-
# Set
|
35
|
+
# Set I18n object to current thread.
|
36
36
|
def set(i18n)
|
37
37
|
Thread.current['i18n'] = i18n
|
38
38
|
end
|
39
39
|
|
40
|
-
# Get I18n object for current thread
|
40
|
+
# Get I18n object for current thread.
|
41
41
|
def get
|
42
42
|
Thread.current['i18n']
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
module Utils
|
47
|
-
# Recursively hash merge
|
47
|
+
# Recursively hash merge.
|
48
48
|
def self.deep_merge!(a, b)
|
49
49
|
b.each_pair do |name, value|
|
50
|
-
if
|
50
|
+
if a[name].is_a? Hash
|
51
51
|
self.deep_merge!(a[name], value)
|
52
52
|
else
|
53
53
|
a[name] = value
|
data/lib/r18n-core/i18n.rb
CHANGED
@@ -104,7 +104,7 @@ module R18n
|
|
104
104
|
# +Locales+ must be a locale code (RFC 3066) or array, ordered by priority.
|
105
105
|
# +Translations_dirs+ must be a string with path or array.
|
106
106
|
def initialize(locales, translations_dirs = nil)
|
107
|
-
locales = [locales] if
|
107
|
+
locales = [locales] if locales.is_a? String
|
108
108
|
|
109
109
|
@locales = locales.map do |locale|
|
110
110
|
if Locale.exists? locale
|
@@ -160,14 +160,14 @@ module R18n
|
|
160
160
|
# <tt>:short_datetime</tt> or <tt>:long_datetime</tt>). Without format it
|
161
161
|
# use <tt>:datetime</tt> for Time and DateTime and <tt>:date</tt> for Date.
|
162
162
|
def localize(object, format = nil)
|
163
|
-
if
|
164
|
-
locale.
|
165
|
-
elsif
|
163
|
+
if object.is_a? Integer
|
164
|
+
locale.format_integer(object)
|
165
|
+
elsif object.is_a? Float
|
166
166
|
locale.format_float(object)
|
167
|
-
elsif Time
|
167
|
+
elsif object.is_a? Time or object.is_a? DateTime
|
168
168
|
format = :datetime if format.nil?
|
169
169
|
locale.strftime(object, format)
|
170
|
-
elsif
|
170
|
+
elsif object.is_a? Date
|
171
171
|
format = :date if format.nil?
|
172
172
|
locale.strftime(object, format)
|
173
173
|
end
|
@@ -181,7 +181,7 @@ module R18n
|
|
181
181
|
# Translation can contain variable part. Just set is as <tt>%1</tt>,
|
182
182
|
# <tt>%2</tt>, etc in translations file and set values as methods params.
|
183
183
|
def method_missing(name, *params)
|
184
|
-
|
184
|
+
@translation[name.to_s, *params]
|
185
185
|
end
|
186
186
|
|
187
187
|
# Return translation with special +name+.
|
data/lib/r18n-core/locale.rb
CHANGED
@@ -102,7 +102,7 @@ module R18n
|
|
102
102
|
# This is internal a constructor. To load translation use
|
103
103
|
# <tt>R18n::Translation.load(locales, translations_dir)</tt>.
|
104
104
|
def initialize(locale)
|
105
|
-
p 1 if
|
105
|
+
p 1 if locale.is_a? String
|
106
106
|
@locale = locale
|
107
107
|
end
|
108
108
|
|
@@ -123,9 +123,9 @@ module R18n
|
|
123
123
|
|
124
124
|
# Returns the integer in String form, according to the rules of the locale.
|
125
125
|
# It will also put real typographic minus.
|
126
|
-
def
|
127
|
-
str =
|
128
|
-
str[0] = '−' if 0 >
|
126
|
+
def format_integer(integer)
|
127
|
+
str = integer.to_s
|
128
|
+
str[0] = '−' if 0 > integer # Real typographic minus
|
129
129
|
group = @locale['numbers']['group_delimiter']
|
130
130
|
|
131
131
|
str.gsub(/(\d)(?=(\d\d\d)+(?!\d))/) do |match|
|
@@ -137,7 +137,7 @@ module R18n
|
|
137
137
|
# It will also put real typographic minus.
|
138
138
|
def format_float(float)
|
139
139
|
decimal = @locale['numbers']['decimal_separator']
|
140
|
-
self.
|
140
|
+
self.format_integer(float.to_i) + decimal + float.to_s.split('.').last
|
141
141
|
end
|
142
142
|
|
143
143
|
# Same that <tt>Time.strftime</tt>, but translate months and week days
|
@@ -148,7 +148,7 @@ module R18n
|
|
148
148
|
# <tt>:long_data</tt>, <tt>:datetime</tt>, <tt>:short_datetime</tt> or
|
149
149
|
# <tt>:long_datetime</tt>).
|
150
150
|
def strftime(time, format)
|
151
|
-
if
|
151
|
+
if format.is_a? Symbol
|
152
152
|
if :month == format
|
153
153
|
return @locale['months']['standalone'][time.month - 1]
|
154
154
|
end
|
@@ -108,7 +108,7 @@ module R18n
|
|
108
108
|
|
109
109
|
# Return available translations in +dirs+
|
110
110
|
def self.available(dirs)
|
111
|
-
if
|
111
|
+
if dirs.is_a? Array
|
112
112
|
return dirs.inject([]) do |available, i|
|
113
113
|
available |= self.available(i)
|
114
114
|
end
|
@@ -186,7 +186,7 @@ module R18n
|
|
186
186
|
result = translation[name]
|
187
187
|
next if result.nil?
|
188
188
|
|
189
|
-
if YAML::PrivateType
|
189
|
+
if result.is_a? YAML::PrivateType
|
190
190
|
case result.type_id
|
191
191
|
when 'proc'
|
192
192
|
if @@call_proc
|
@@ -197,10 +197,16 @@ module R18n
|
|
197
197
|
when 'pl'
|
198
198
|
locale = @locales[i]
|
199
199
|
|
200
|
-
|
201
|
-
locale.pluralize(params.first)
|
200
|
+
if locale.is_a? Locale
|
201
|
+
type = locale.pluralize(params.first)
|
202
|
+
|
203
|
+
if params.first.is_a? Float
|
204
|
+
params[0] = locale.format_float(params.first)
|
205
|
+
elsif params.first.is_a? Integer
|
206
|
+
params[0] = locale.format_integer(params.first)
|
207
|
+
end
|
202
208
|
else
|
203
|
-
Locale.default_pluralize(params.first)
|
209
|
+
type = Locale.default_pluralize(params.first)
|
204
210
|
end
|
205
211
|
|
206
212
|
type = 'n' if not result.value.include? type
|
@@ -210,17 +216,18 @@ module R18n
|
|
210
216
|
end
|
211
217
|
end
|
212
218
|
|
213
|
-
if
|
219
|
+
if result.is_a? String
|
220
|
+
result = result.clone
|
214
221
|
params.each_with_index do |param, i|
|
215
222
|
result.gsub! "%#{i+1}", param.to_s
|
216
223
|
end
|
217
224
|
return TranslatedString.new(result, @locales[i])
|
218
|
-
elsif
|
225
|
+
elsif result.is_a? Hash
|
219
226
|
return self.class.new(@locales, @translations.map { |i|
|
220
227
|
i[name] or {}
|
221
228
|
})
|
222
229
|
else
|
223
|
-
return result
|
230
|
+
return result.clone
|
224
231
|
end
|
225
232
|
end
|
226
233
|
|
data/lib/r18n-core/version.rb
CHANGED
data/spec/i18n_spec.rb
CHANGED
@@ -31,6 +31,7 @@ describe R18n::I18n do
|
|
31
31
|
it "should load translations" do
|
32
32
|
i18n = R18n::I18n.new(['ru', 'en'], DIR)
|
33
33
|
i18n.one.should == 'Один'
|
34
|
+
i18n['one'].should == 'Один'
|
34
35
|
i18n.only.english.should == 'Only in English'
|
35
36
|
end
|
36
37
|
|
@@ -68,7 +69,7 @@ describe R18n::I18n do
|
|
68
69
|
i18n.l(-12345.67).should == '−12 345,67'
|
69
70
|
|
70
71
|
time = Time.at(0).utc
|
71
|
-
i18n.l(time).should
|
72
|
+
i18n.l(time).should =~ /^Чтв, 01 янв 1970, 00:00:00 (GMT|UTC)$/
|
72
73
|
i18n.l(time, :time).should == '00:00'
|
73
74
|
i18n.l(time, '%A').should == 'Четверг'
|
74
75
|
|
data/spec/locale_spec.rb
CHANGED
@@ -68,7 +68,7 @@ describe R18n::Locale do
|
|
68
68
|
|
69
69
|
it "should format number in local traditions" do
|
70
70
|
locale = R18n::Locale.load('en')
|
71
|
-
locale.
|
71
|
+
locale.format_integer(-123456789).should == "−123,456,789"
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should format float in local traditions" do
|
@@ -85,7 +85,7 @@ describe R18n::Locale do
|
|
85
85
|
locale.strftime(time, '%H:%M%p').should == '00:00 утра'
|
86
86
|
|
87
87
|
locale.strftime(time, :month).should == 'Январь'
|
88
|
-
locale.strftime(time, :datetime).should
|
88
|
+
locale.strftime(time, :datetime).should =~ /^Чтв, 01 янв 1970, 00:00:00 (GMT|UTC)$/
|
89
89
|
end
|
90
90
|
|
91
91
|
it "should delete slashed from locale for security reasons" do
|
data/spec/translation_spec.rb
CHANGED
@@ -87,6 +87,8 @@ describe R18n::Translation do
|
|
87
87
|
translation.comments(5, 'article').should == '5 comments for article'
|
88
88
|
|
89
89
|
translation.files(0).should == '0 files'
|
90
|
+
translation.files(-5.5).should == '−5.5 files'
|
91
|
+
translation.files(5000).should == '5,000 files'
|
90
92
|
end
|
91
93
|
|
92
94
|
it "should return unknown YAML type" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r18n-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey "A.I." Sitnik
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-06-25 00:00:00 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,28 +23,28 @@ extra_rdoc_files:
|
|
23
23
|
- README.rdoc
|
24
24
|
- LICENSE
|
25
25
|
files:
|
26
|
-
- base/de.yml
|
27
|
-
- base/kk.yml
|
28
26
|
- base/ru.yml
|
29
|
-
- base/
|
30
|
-
- base/en.yml
|
27
|
+
- base/kk.yml
|
31
28
|
- base/fr.yml
|
32
|
-
-
|
29
|
+
- base/en.yml
|
30
|
+
- base/de.yml
|
31
|
+
- base/eo.yml
|
33
32
|
- lib/r18n-core
|
34
|
-
- lib/r18n-core/
|
35
|
-
- lib/r18n-core/
|
33
|
+
- lib/r18n-core/untranslated.rb
|
34
|
+
- lib/r18n-core/i18n.rb
|
36
35
|
- lib/r18n-core/locale.rb
|
37
36
|
- lib/r18n-core/version.rb
|
38
|
-
- lib/r18n-core/
|
39
|
-
- lib/r18n-core/
|
37
|
+
- lib/r18n-core/translation.rb
|
38
|
+
- lib/r18n-core/translated_string.rb
|
39
|
+
- lib/r18n-core.rb
|
40
|
+
- locales/ru.rb
|
41
|
+
- locales/ru.yml
|
42
|
+
- locales/kk.yml
|
43
|
+
- locales/fr.yml
|
40
44
|
- locales/en_US.yml
|
45
|
+
- locales/en.yml
|
41
46
|
- locales/de.yml
|
42
|
-
- locales/kk.yml
|
43
|
-
- locales/ru.yml
|
44
|
-
- locales/ru.rb
|
45
47
|
- locales/eo.yml
|
46
|
-
- locales/en.yml
|
47
|
-
- locales/fr.yml
|
48
48
|
- LICENSE
|
49
49
|
- README.rdoc
|
50
50
|
has_rdoc: true
|
@@ -74,21 +74,21 @@ signing_key:
|
|
74
74
|
specification_version: 2
|
75
75
|
summary: I18n tool to translate your Ruby application.
|
76
76
|
test_files:
|
77
|
-
- spec/spec_helper.rb
|
78
|
-
- spec/translation_spec.rb
|
79
|
-
- spec/i18n_spec.rb
|
80
77
|
- spec/locales
|
81
78
|
- spec/locales/ru_spec.rb
|
79
|
+
- spec/spec_helper.rb
|
82
80
|
- spec/translations
|
81
|
+
- spec/translations/two
|
82
|
+
- spec/translations/two/fr.yml
|
83
|
+
- spec/translations/two/en.yml
|
83
84
|
- spec/translations/general
|
84
85
|
- spec/translations/general/ru.yml
|
85
|
-
- spec/translations/general/en.yml
|
86
86
|
- spec/translations/general/no_LC.yml
|
87
|
+
- spec/translations/general/en.yml
|
87
88
|
- spec/translations/extension
|
88
89
|
- spec/translations/extension/no_TR.yml
|
89
90
|
- spec/translations/extension/en.yml
|
90
|
-
- spec/
|
91
|
-
- spec/translations/two/en.yml
|
92
|
-
- spec/translations/two/fr.yml
|
91
|
+
- spec/translation_spec.rb
|
93
92
|
- spec/r18n_spec.rb
|
94
93
|
- spec/locale_spec.rb
|
94
|
+
- spec/i18n_spec.rb
|