r18n-core 0.4.14 → 1.0.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/.yardopts +1 -1
- data/ChangeLog +21 -0
- data/LICENSE +2 -2
- data/README.md +456 -0
- data/Rakefile +2 -1
- data/base/gl.yml +31 -0
- data/base/it.yml +1 -1
- data/lib/r18n-core/filter_list.rb +157 -0
- data/lib/r18n-core/filters.rb +40 -36
- data/lib/r18n-core/i18n.rb +17 -9
- data/lib/r18n-core/locale.rb +5 -2
- data/lib/r18n-core/translated.rb +18 -15
- data/lib/r18n-core/translated_string.rb +14 -0
- data/lib/r18n-core/translation.rb +19 -20
- data/lib/r18n-core/untranslated.rb +8 -5
- data/lib/r18n-core/utils.rb +5 -1
- data/lib/r18n-core/version.rb +1 -1
- data/lib/r18n-core/yaml_loader.rb +2 -2
- data/lib/r18n-core.rb +60 -13
- data/locales/ca.rb +1 -0
- data/locales/cs.rb +0 -1
- data/locales/en-au.rb +0 -1
- data/locales/en-gb.rb +0 -1
- data/locales/en-us.rb +0 -1
- data/locales/en.rb +1 -1
- data/locales/fr.rb +1 -1
- data/locales/gl.rb +21 -0
- data/locales/hu.rb +1 -2
- data/locales/nb-no.rb +2 -3
- data/locales/nl.rb +4 -2
- data/locales/pt-br.rb +0 -1
- data/locales/pt.rb +0 -1
- data/locales/sv-se.rb +2 -3
- data/locales/th.rb +1 -1
- data/locales/tr.rb +2 -4
- data/locales/zh-cn.rb +7 -0
- data/locales/zh-tw.rb +7 -0
- data/r18n-core.gemspec +10 -10
- data/spec/filters_spec.rb +38 -7
- data/spec/i18n_spec.rb +15 -18
- data/spec/locale_spec.rb +19 -14
- data/spec/locales/cs_spec.rb +1 -1
- data/spec/locales/pl_spec.rb +1 -1
- data/spec/locales/ru_spec.rb +1 -1
- data/spec/locales/sk_spec.rb +1 -1
- data/spec/r18n_spec.rb +64 -22
- data/spec/spec_helper.rb +2 -3
- data/spec/translated_spec.rb +18 -4
- data/spec/translation_spec.rb +17 -6
- data/spec/translations/general/en.yml +1 -0
- data/spec/yaml_loader_spec.rb +10 -10
- metadata +163 -141
- data/Gemfile +0 -5
- data/Gemfile.lock +0 -35
- data/README.rdoc +0 -482
- data/spec/translations/empty/en.yml +0 -0
data/locales/fr.rb
CHANGED
data/locales/gl.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module R18n
|
3
|
+
class Locales::Gl < Locale
|
4
|
+
set :title => 'Galego',
|
5
|
+
:sublocales => %w{es en},
|
6
|
+
|
7
|
+
:wday_names => %w{domingo luns martes mércores xoves venres sábado},
|
8
|
+
:wday_abbrs => %w{dom lun mar mér xov ven sáb},
|
9
|
+
|
10
|
+
:month_names => %w{xaneiro febreiro marzo abril maio xuño xullo
|
11
|
+
agosto setembro outubro novembro decembro},
|
12
|
+
:month_abbrs => %w{xan feb mar abr mai xuñ xul ago set out nov dec},
|
13
|
+
|
14
|
+
:date_format => '%d/%m/%Y',
|
15
|
+
:full_format => '%d de %B',
|
16
|
+
:year_format => '_ de %Y',
|
17
|
+
|
18
|
+
:number_decimal => ",",
|
19
|
+
:number_group => "."
|
20
|
+
end
|
21
|
+
end
|
data/locales/hu.rb
CHANGED
@@ -17,7 +17,7 @@ module R18n
|
|
17
17
|
:time_format => '%H:%M',
|
18
18
|
|
19
19
|
:number_decimal => ",",
|
20
|
-
:number_group
|
20
|
+
:number_group => " "
|
21
21
|
|
22
22
|
def format_integer(integer)
|
23
23
|
str = integer.to_s
|
@@ -42,6 +42,5 @@ module R18n
|
|
42
42
|
def format_time_full(time, *params)
|
43
43
|
format_date_full(time) + ', ' + format_time(time)
|
44
44
|
end
|
45
|
-
|
46
45
|
end
|
47
46
|
end
|
data/locales/nb-no.rb
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::NbNo < Locale
|
4
4
|
set :title => 'Norsk', #Bokmål
|
5
|
-
:
|
6
|
-
:sublocales => %w{no nn-NO},
|
5
|
+
:sublocales => %w{no nn-NO en},
|
7
6
|
|
8
7
|
:week_start => :monday,
|
9
8
|
:wday_names => %w{søndag mandag tirsdag onsdag torsdag fredag lørdag},
|
@@ -11,7 +10,7 @@ module R18n
|
|
11
10
|
|
12
11
|
:month_names => %w{januar februar mars april mai juni juli august
|
13
12
|
september oktober november desember},
|
14
|
-
:month_abbrs => %w{jan feb mar apr mai jun jul aug okt nov des},
|
13
|
+
:month_abbrs => %w{jan feb mar apr mai jun jul aug sep okt nov des},
|
15
14
|
|
16
15
|
:date_format => '%d.%m.%Y',
|
17
16
|
:full_format => '%e. %B %Y',
|
data/locales/nl.rb
CHANGED
@@ -3,10 +3,12 @@ module R18n
|
|
3
3
|
class Locales::Nl < Locale
|
4
4
|
set :title => 'Nederlands',
|
5
5
|
|
6
|
-
:wday_names => %w{zondag maandag dinsdag woensdag donderdag vrijdag
|
6
|
+
:wday_names => %w{zondag maandag dinsdag woensdag donderdag vrijdag
|
7
|
+
zaterdag},
|
7
8
|
:wday_abbrs => %w{zo ma di wo do vr za},
|
8
9
|
|
9
|
-
:month_names => %w{januari februari maart april mei juni juli augustus
|
10
|
+
:month_names => %w{januari februari maart april mei juni juli augustus
|
11
|
+
september oktober november december},
|
10
12
|
:month_abbrs => %w{jan feb mrt apr mei jun jul aug sep okt nov dec},
|
11
13
|
|
12
14
|
:time_am => '\'s ochtends',
|
data/locales/pt-br.rb
CHANGED
data/locales/pt.rb
CHANGED
data/locales/sv-se.rb
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::SvSe < Locale
|
4
4
|
set :title => 'Svenska',
|
5
|
-
:
|
6
|
-
:sublocales => %w{sv},
|
5
|
+
:sublocales => %w{sv en},
|
7
6
|
|
8
7
|
:wday_names => %w{söndag måndag tisdag onsdag torsdag fredag
|
9
8
|
lördag},
|
@@ -17,6 +16,6 @@ module R18n
|
|
17
16
|
:full_format => '%e %B %Y',
|
18
17
|
|
19
18
|
:number_decimal => ",",
|
20
|
-
:number_group
|
19
|
+
:number_group => "."
|
21
20
|
end
|
22
21
|
end
|
data/locales/th.rb
CHANGED
data/locales/tr.rb
CHANGED
@@ -8,7 +8,7 @@ module R18n
|
|
8
8
|
Cumartesi},
|
9
9
|
:wday_abbrs => %w{Paz Pzt Sal Çar Per Cum Cmt},
|
10
10
|
|
11
|
-
:month_names => %w{Ocak Şubat Mart Nisan Mayıs Haziran Temmuz
|
11
|
+
:month_names => %w{Ocak Şubat Mart Nisan Mayıs Haziran Temmuz
|
12
12
|
Ağustos Eylül Ekim Kasım Aralık},
|
13
13
|
:month_abbrs => %w{Oca Şub Mar Nis May Haz Tem Ağu Eyl Eki Kas Ara},
|
14
14
|
|
@@ -18,8 +18,6 @@ module R18n
|
|
18
18
|
:time_format => '%H:%M',
|
19
19
|
|
20
20
|
:number_decimal => ".",
|
21
|
-
:number_group
|
22
|
-
|
23
|
-
|
21
|
+
:number_group => ","
|
24
22
|
end
|
25
23
|
end
|
data/locales/zh-cn.rb
ADDED
data/locales/zh-tw.rb
ADDED
data/r18n-core.gemspec
CHANGED
@@ -11,18 +11,17 @@ Gem::Specification.new do |s|
|
|
11
11
|
It has nice Ruby-style syntax, filters, flexible locales, custom loaders,
|
12
12
|
translation support for any classes, time and number localization, several
|
13
13
|
user language support, agnostic core package with out-of-box support for
|
14
|
-
Rails, Sinatra
|
14
|
+
Rails, Sinatra and desktop applications.
|
15
15
|
EOF
|
16
16
|
|
17
|
-
s.files
|
18
|
-
s.test_files
|
19
|
-
s.extra_rdoc_files = ['README.
|
20
|
-
s.require_path
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.extra_rdoc_files = ['README.md', 'LICENSE', 'ChangeLog']
|
20
|
+
s.require_path = 'lib'
|
21
21
|
|
22
|
-
s.author
|
23
|
-
s.email
|
24
|
-
s.homepage = '
|
25
|
-
s.rubyforge_project = 'r18n-core'
|
22
|
+
s.author = 'Andrey "A.I." Sitnik'
|
23
|
+
s.email = 'andrey@sitnik.ru'
|
24
|
+
s.homepage = 'https://github.com/ai/r18n'
|
26
25
|
|
27
26
|
s.add_development_dependency "bundler", [">= 1.0.10"]
|
28
27
|
s.add_development_dependency "yard", [">= 0"]
|
@@ -30,6 +29,7 @@ Gem::Specification.new do |s|
|
|
30
29
|
s.add_development_dependency "rspec-core", [">= 0"]
|
31
30
|
s.add_development_dependency "rspec-expectations", [">= 0"]
|
32
31
|
s.add_development_dependency "rspec-mocks", [">= 0"]
|
33
|
-
s.add_development_dependency "
|
32
|
+
s.add_development_dependency "kramdown", [">= 0"]
|
34
33
|
s.add_development_dependency "RedCloth", [">= 0"]
|
34
|
+
s.add_development_dependency "redcarpet", [">= 0"]
|
35
35
|
end
|
data/spec/filters_spec.rb
CHANGED
@@ -147,7 +147,7 @@ describe R18n::Filters do
|
|
147
147
|
@i18n.comments(1, 'article').should == 'one comment for article'
|
148
148
|
@i18n.comments(5, 'article').should == '5 comments for article'
|
149
149
|
|
150
|
-
@i18n.files(0).should
|
150
|
+
@i18n.files(0).should == '0 files'
|
151
151
|
@i18n.files(-5.5).should == '−5.5 files'
|
152
152
|
@i18n.files(5000).should == '5,000 files'
|
153
153
|
end
|
@@ -172,7 +172,8 @@ describe R18n::Filters do
|
|
172
172
|
end
|
173
173
|
|
174
174
|
it "should format untranslated" do
|
175
|
-
@i18n.in.not.to_s.should
|
175
|
+
@i18n.in.not.to_s.should == 'in.[not]'
|
176
|
+
@i18n.in.not.to_str.should == 'in.[not]'
|
176
177
|
|
177
178
|
R18n::Filters.off(:untranslated)
|
178
179
|
@i18n.in.not.to_s.should == 'in.not'
|
@@ -198,8 +199,17 @@ describe R18n::Filters do
|
|
198
199
|
it "should format untranslated for web" do
|
199
200
|
R18n::Filters.off(:untranslated)
|
200
201
|
R18n::Filters.on(:untranslated_html)
|
201
|
-
@i18n.in.not.to_s.should == 'in.<span style="color: red">not</span>'
|
202
|
-
@i18n['<b>'].to_s.should == '<span style="color: red"
|
202
|
+
@i18n.in.not.to_s.should == 'in.<span style="color: red">[not]</span>'
|
203
|
+
@i18n['<b>'].to_s.should == '<span style="color: red">[<b>]</span>'
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should allow to set custom filters" do
|
207
|
+
R18n::Filters.add(R18n::Untranslated, :a) { |v, c| "a #{v}" }
|
208
|
+
R18n::Filters.off(:a)
|
209
|
+
|
210
|
+
html = R18n::I18n.new('en', DIR, :off_filters => :untranslated,
|
211
|
+
:on_filters => [:untranslated_html, :a])
|
212
|
+
html.in.not.to_s.should == 'a in.<span style="color: red">[not]</span>'
|
203
213
|
end
|
204
214
|
|
205
215
|
it "should have filter for escape HTML" do
|
@@ -224,7 +234,7 @@ describe R18n::Filters do
|
|
224
234
|
end
|
225
235
|
|
226
236
|
it "should have Markdown filter" do
|
227
|
-
@i18n.markdown.simple.should ==
|
237
|
+
@i18n.markdown.simple.should == "<p><strong>Hi!</strong></p>\n"
|
228
238
|
end
|
229
239
|
|
230
240
|
it "should have Textile filter" do
|
@@ -232,13 +242,34 @@ describe R18n::Filters do
|
|
232
242
|
end
|
233
243
|
|
234
244
|
it "should HTML escape before Markdown and Textile filters" do
|
235
|
-
@i18n.markdown.html.should ==
|
245
|
+
@i18n.markdown.html.should == "<p><strong>Hi!</strong> <br /></p>\n"
|
236
246
|
@i18n.textile.html.should == '<p><em>Hi!</em><br /></p>'
|
237
247
|
|
238
248
|
R18n::Filters.on(:global_escape_html)
|
239
249
|
@i18n.reload!
|
240
|
-
@i18n.markdown.html.should ==
|
250
|
+
@i18n.markdown.html.should == "<p><strong>Hi!</strong> <br /></p>\n"
|
241
251
|
@i18n.textile.html.should == '<p><em>Hi!</em><br /></p>'
|
242
252
|
end
|
243
253
|
|
254
|
+
it "should allow to listen filters adding" do
|
255
|
+
R18n::Filters.listen {
|
256
|
+
R18n::Filters.add(String, :a) { }
|
257
|
+
}.should == [R18n::Filters.defined[:a]]
|
258
|
+
end
|
259
|
+
|
260
|
+
it "should escape variables if ActiveSupport is loaded" do
|
261
|
+
@i18n.escape_params('<br>').should == '<b><br></b>'
|
262
|
+
require 'active_support'
|
263
|
+
@i18n.escape_params('<br>').should == '<b><br></b>'
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should use SafeBuffer if it is loaded" do
|
267
|
+
require 'active_support'
|
268
|
+
|
269
|
+
R18n::Filters.on(:global_escape_html)
|
270
|
+
@i18n.reload!
|
271
|
+
|
272
|
+
@i18n.greater('<b>'.html_safe).should == '1 < 2 is <b>'
|
273
|
+
end
|
274
|
+
|
244
275
|
end
|
data/spec/i18n_spec.rb
CHANGED
@@ -26,13 +26,13 @@ describe R18n::I18n do
|
|
26
26
|
|
27
27
|
it "should load locales" do
|
28
28
|
i18n = R18n::I18n.new('en', DIR)
|
29
|
-
i18n.locales.should == [R18n
|
29
|
+
i18n.locales.should == [R18n.locale('en')]
|
30
30
|
|
31
31
|
i18n = R18n::I18n.new(['ru', 'no-LC'], DIR)
|
32
|
-
i18n.locales.should == [R18n
|
32
|
+
i18n.locales.should == [R18n.locale('ru'),
|
33
33
|
R18n::UnsupportedLocale.new('no-LC'),
|
34
34
|
R18n::UnsupportedLocale.new('no'),
|
35
|
-
R18n
|
35
|
+
R18n.locale('en')]
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should return translations loaders" do
|
@@ -42,7 +42,7 @@ describe R18n::I18n do
|
|
42
42
|
|
43
43
|
it "should load translations by loader" do
|
44
44
|
loader = Class.new do
|
45
|
-
def available; [R18n
|
45
|
+
def available; [R18n.locale('en')]; end
|
46
46
|
def load(locale); { 'custom' => 'Custom' }; end
|
47
47
|
end
|
48
48
|
R18n::I18n.new('en', loader.new).custom.should == 'Custom'
|
@@ -51,7 +51,7 @@ describe R18n::I18n do
|
|
51
51
|
it "should pass parameters to default loader" do
|
52
52
|
loader = Class.new do
|
53
53
|
def initialize(param); @param = param; end
|
54
|
-
def available; [R18n
|
54
|
+
def available; [R18n.locale('en')]; end
|
55
55
|
def load(locale); { 'custom' => @param }; end
|
56
56
|
end
|
57
57
|
R18n.default_loader = loader
|
@@ -110,13 +110,10 @@ describe R18n::I18n do
|
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should return available translations" do
|
113
|
-
R18n::I18n.available_locales(DIR).should =~ [R18n::Locale.load('no-lc'),
|
114
|
-
R18n::Locale.load('ru'),
|
115
|
-
R18n::Locale.load('en')]
|
116
113
|
i18n = R18n::I18n.new('en', DIR)
|
117
|
-
i18n.available_locales.should =~ [R18n
|
118
|
-
R18n
|
119
|
-
R18n
|
114
|
+
i18n.available_locales.should =~ [R18n.locale('no-lc'),
|
115
|
+
R18n.locale('ru'),
|
116
|
+
R18n.locale('en')]
|
120
117
|
end
|
121
118
|
|
122
119
|
it "should cache translations" do
|
@@ -174,7 +171,7 @@ describe R18n::I18n do
|
|
174
171
|
it "should reload translations" do
|
175
172
|
loader = Class.new do
|
176
173
|
@@answer = 1
|
177
|
-
def available; [R18n
|
174
|
+
def available; [R18n.locale('en')]; end
|
178
175
|
def load(locale); { 'one' => @@answer }; end
|
179
176
|
end
|
180
177
|
|
@@ -194,21 +191,21 @@ describe R18n::I18n do
|
|
194
191
|
|
195
192
|
it "should return first locale with locale file" do
|
196
193
|
i18n = R18n::I18n.new(['no-TR', 'no-LC', 'ru', 'en'], DIR)
|
197
|
-
i18n.locale.should
|
198
|
-
i18n.locale.base.should == R18n
|
194
|
+
i18n.locale.should == R18n.locale('no-LC')
|
195
|
+
i18n.locale.base.should == R18n.locale('ru')
|
199
196
|
end
|
200
197
|
|
201
198
|
it "should localize objects" do
|
202
199
|
i18n = R18n::I18n.new('ru')
|
203
200
|
|
204
201
|
i18n.l(-123456789).should == '−123 456 789'
|
205
|
-
i18n.l(-12345.67).should
|
202
|
+
i18n.l(-12345.67).should == '−12 345,67'
|
206
203
|
|
207
204
|
time = Time.at(0).utc
|
208
|
-
i18n.l(time, '%A').should
|
209
|
-
i18n.l(time, :month).should
|
205
|
+
i18n.l(time, '%A').should == 'Четверг'
|
206
|
+
i18n.l(time, :month).should == 'Январь'
|
210
207
|
i18n.l(time, :standard).should == '01.01.1970 00:00'
|
211
|
-
i18n.l(time, :full).should
|
208
|
+
i18n.l(time, :full).should == ' 1 января 1970 00:00'
|
212
209
|
|
213
210
|
i18n.l(Date.new(0)).should == '01.01.0000'
|
214
211
|
end
|
data/spec/locale_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
3
3
|
|
4
4
|
describe R18n::Locale do
|
5
5
|
before :all do
|
6
|
-
@ru = R18n
|
7
|
-
@en = R18n
|
6
|
+
@ru = R18n.locale('ru')
|
7
|
+
@en = R18n.locale('en')
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should return all available locales" do
|
@@ -34,12 +34,12 @@ describe R18n::Locale do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should load locale by Symbol" do
|
37
|
-
R18n
|
37
|
+
R18n.locale(:ru).should == R18n.locale('ru')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should be equal to another locale with same code" do
|
41
41
|
@en.should_not == @ru
|
42
|
-
@en.should == R18n
|
42
|
+
@en.should == R18n.locale('en')
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should print human readable representation" do
|
@@ -55,7 +55,7 @@ describe R18n::Locale do
|
|
55
55
|
it "should use UnsupportedLocale if locale file isn't exists" do
|
56
56
|
@en.should be_supported
|
57
57
|
|
58
|
-
unsupported = R18n
|
58
|
+
unsupported = R18n.locale('no-LC')
|
59
59
|
unsupported.should_not be_supported
|
60
60
|
unsupported.should be_a(R18n::UnsupportedLocale)
|
61
61
|
|
@@ -76,7 +76,7 @@ describe R18n::Locale do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should translate month, week days and am/pm names in strftime" do
|
79
|
-
i18n = R18n::I18n.new
|
79
|
+
i18n = R18n::I18n.new('ru')
|
80
80
|
time = Time.at(0).utc
|
81
81
|
|
82
82
|
@ru.localize(time, '%a %A').should == 'Чтв Четверг'
|
@@ -84,6 +84,11 @@ describe R18n::Locale do
|
|
84
84
|
@ru.localize(time, '%H:%M%p').should == '00:00 утра'
|
85
85
|
end
|
86
86
|
|
87
|
+
it "should generate locale code by locale class name" do
|
88
|
+
R18n.locale('ru').code.should == 'ru'
|
89
|
+
R18n.locale('zh-CN').code.should == 'zh-CN'
|
90
|
+
end
|
91
|
+
|
87
92
|
it "should localize date for human" do
|
88
93
|
i18n = R18n::I18n.new('en')
|
89
94
|
|
@@ -141,26 +146,26 @@ describe R18n::Locale do
|
|
141
146
|
end
|
142
147
|
|
143
148
|
it "should delete slashed from locale for security reasons" do
|
144
|
-
locale = R18n
|
149
|
+
locale = R18n.locale('../spec/translations/general/en')
|
145
150
|
locale.should be_a(R18n::UnsupportedLocale)
|
146
151
|
end
|
147
152
|
|
148
153
|
it "should ignore code case in locales" do
|
149
|
-
upcase
|
150
|
-
downcase = R18n
|
154
|
+
upcase = R18n.locale('RU')
|
155
|
+
downcase = R18n.locale('ru')
|
151
156
|
upcase.should == downcase
|
152
|
-
upcase.code.should
|
157
|
+
upcase.code.should == 'ru'
|
153
158
|
downcase.code.should == 'ru'
|
154
159
|
|
155
|
-
upcase
|
156
|
-
downcase = R18n
|
160
|
+
upcase = R18n.locale('no-LC')
|
161
|
+
downcase = R18n.locale('no-lc')
|
157
162
|
upcase.should == downcase
|
158
|
-
upcase.code.should
|
163
|
+
upcase.code.should == 'no-lc'
|
159
164
|
downcase.code.should == 'no-lc'
|
160
165
|
end
|
161
166
|
|
162
167
|
it "should load locale with underscore" do
|
163
|
-
R18n
|
168
|
+
R18n.locale('no_LC').code.should == 'no-lc'
|
164
169
|
end
|
165
170
|
|
166
171
|
end
|
data/spec/locales/cs_spec.rb
CHANGED
data/spec/locales/pl_spec.rb
CHANGED
data/spec/locales/ru_spec.rb
CHANGED
data/spec/locales/sk_spec.rb
CHANGED
data/spec/r18n_spec.rb
CHANGED
@@ -6,6 +6,7 @@ describe R18n do
|
|
6
6
|
|
7
7
|
after do
|
8
8
|
R18n.default_loader = R18n::Loader::YAML
|
9
|
+
R18n.default_places = nil
|
9
10
|
R18n.reset
|
10
11
|
end
|
11
12
|
|
@@ -31,38 +32,58 @@ describe R18n do
|
|
31
32
|
it "shuld create I18n object by shortcut" do
|
32
33
|
R18n.set('en', DIR)
|
33
34
|
R18n.get.should be_a(R18n::I18n)
|
34
|
-
R18n.get.locales.should == [R18n
|
35
|
+
R18n.get.locales.should == [R18n.locale('en')]
|
35
36
|
R18n.get.translation_places.should == [R18n::Loader::YAML.new(DIR)]
|
36
37
|
end
|
37
38
|
|
38
|
-
it "should
|
39
|
-
|
40
|
-
R18n.
|
41
|
-
R18n.get.should == i18n
|
42
|
-
|
43
|
-
R18n.reset
|
44
|
-
R18n.get.should be_nil
|
39
|
+
it "should allow to return I18n arguments in setter block" do
|
40
|
+
R18n.set { 'en' }
|
41
|
+
R18n.get.locales.should == [R18n.locale('en')]
|
45
42
|
end
|
46
43
|
|
47
44
|
it "should reset I18n objects and cache" do
|
48
45
|
R18n.cache[:a] = 1
|
49
|
-
R18n.
|
46
|
+
R18n.set('en')
|
47
|
+
R18n.thread_set('en')
|
50
48
|
|
51
49
|
R18n.reset
|
52
50
|
R18n.get.should be_nil
|
53
51
|
R18n.cache.should be_empty
|
54
52
|
end
|
55
53
|
|
56
|
-
it "should
|
54
|
+
it "should store I18n via thread_set" do
|
57
55
|
i18n = R18n::I18n.new('en')
|
58
56
|
R18n.thread_set(i18n)
|
57
|
+
R18n.get.should == i18n
|
59
58
|
|
60
59
|
i18n = R18n::I18n.new('ru')
|
61
60
|
R18n.thread_set { i18n }
|
62
|
-
|
63
61
|
R18n.get.should == i18n
|
64
62
|
end
|
65
63
|
|
64
|
+
it "should allow to temporary change locale" do
|
65
|
+
R18n.default_places = DIR
|
66
|
+
R18n.change('en').locales.should == [R18n.locale('en')]
|
67
|
+
R18n.change('en').should have(1).translation_places
|
68
|
+
R18n.change('en').translation_places.first.dir.should == DIR.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should allow to temporary change current locales" do
|
72
|
+
R18n.set('ru')
|
73
|
+
R18n.change('en').locales.should == [R18n.locale('en'), R18n.locale('ru')]
|
74
|
+
R18n.change('en').translation_places.should == R18n.get.translation_places
|
75
|
+
R18n.get.locale.code.should.should == 'ru'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should allow to get Locale to temporary change" do
|
79
|
+
R18n.set('ru')
|
80
|
+
R18n.change(R18n.locale('en')).locale.code.should == 'en'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should have shortcut to load locale" do
|
84
|
+
R18n.locale('ru').should == R18n::Locale.load('ru')
|
85
|
+
end
|
86
|
+
|
66
87
|
it "should store default loader class" do
|
67
88
|
R18n.default_loader.should == R18n::Loader::YAML
|
68
89
|
R18n.default_loader = Class
|
@@ -89,16 +110,11 @@ describe R18n do
|
|
89
110
|
end
|
90
111
|
|
91
112
|
it "should merge hash recursively" do
|
92
|
-
a = { :a => 1,
|
93
|
-
:b => {:
|
94
|
-
:c => 1 }
|
95
|
-
b = { :b => {:bb => 2, :bc => 2},
|
96
|
-
:c => 2 }
|
113
|
+
a = { :a => 1, :b => {:ba => 1, :bb => 1}, :c => 1 }
|
114
|
+
b = { :b => {:bb => 2, :bc => 2}, :c => 2 }
|
97
115
|
|
98
116
|
R18n::Utils.deep_merge!(a, b)
|
99
|
-
a.should == { :a => 1,
|
100
|
-
:b => { :ba => 1, :bb => 2, :bc => 2 },
|
101
|
-
:c => 2 }
|
117
|
+
a.should == { :a => 1, :b => { :ba => 1, :bb => 2, :bc => 2 }, :c => 2 }
|
102
118
|
end
|
103
119
|
|
104
120
|
it "should have l and t methods" do
|
@@ -108,13 +124,39 @@ describe R18n do
|
|
108
124
|
end
|
109
125
|
|
110
126
|
it "should have helpers mixin" do
|
111
|
-
obj = R18n::I18n.new
|
127
|
+
obj = R18n::I18n.new('en')
|
112
128
|
R18n.set(obj)
|
113
129
|
|
114
|
-
r18n.should
|
115
|
-
i18n.should
|
130
|
+
r18n.should == obj
|
131
|
+
i18n.should == obj
|
116
132
|
t.yes.should == 'Yes'
|
117
133
|
l(Time.at(0).utc).should == '01/01/1970 00:00'
|
118
134
|
end
|
119
135
|
|
136
|
+
it "should return available translations" do
|
137
|
+
R18n.available_locales(DIR).should =~ [R18n.locale('no-lc'),
|
138
|
+
R18n.locale('ru'),
|
139
|
+
R18n.locale('en')]
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should use default places" do
|
143
|
+
R18n.default_places = DIR
|
144
|
+
R18n.set('en')
|
145
|
+
t.one.should == 'One'
|
146
|
+
R18n.available_locales.should =~ [R18n.locale('ru'),
|
147
|
+
R18n.locale('en'),
|
148
|
+
R18n.locale('no-lc')]
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should set default places by block" do
|
152
|
+
R18n.default_places { DIR }
|
153
|
+
R18n.default_places.should == DIR
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should allow to ignore default places" do
|
157
|
+
R18n.default_places = DIR
|
158
|
+
i18n = R18n::I18n.new('en', nil)
|
159
|
+
i18n.one.should_not be_translated
|
160
|
+
end
|
161
|
+
|
120
162
|
end
|