r18n-core 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|