r18n-core 0.3.2 → 0.4
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/ChangeLog +11 -0
- data/README.rdoc +225 -53
- data/lib/r18n-core/filters.rb +34 -34
- data/lib/r18n-core/i18n.rb +110 -46
- data/lib/r18n-core/locale.rb +109 -103
- data/lib/r18n-core/translated.rb +9 -4
- data/lib/r18n-core/translated_string.rb +10 -0
- data/lib/r18n-core/translation.rb +55 -99
- data/lib/r18n-core/unsupported_locale.rb +1 -13
- data/lib/r18n-core/untranslated.rb +18 -16
- data/lib/r18n-core/utils.rb +0 -12
- data/lib/r18n-core/version.rb +1 -1
- data/lib/r18n-core/yaml_loader.rb +67 -0
- data/lib/r18n-core.rb +25 -3
- data/locales/cs.rb +30 -16
- data/locales/de.rb +21 -0
- data/locales/en-us.rb +9 -4
- data/locales/en.rb +35 -20
- data/locales/eo.rb +20 -0
- data/locales/es.rb +20 -0
- data/locales/fr.rb +24 -9
- data/locales/it.rb +21 -9
- data/locales/kk.rb +26 -0
- data/locales/pl.rb +30 -18
- data/locales/pt-br.rb +24 -0
- data/locales/ru.rb +30 -12
- data/locales/zh.rb +19 -0
- data/spec/filters_spec.rb +24 -7
- data/spec/i18n_spec.rb +137 -50
- data/spec/locale_spec.rb +91 -53
- data/spec/locales/cs_spec.rb +9 -7
- data/spec/locales/pl_spec.rb +8 -9
- data/spec/locales/ru_spec.rb +9 -9
- data/spec/r18n_spec.rb +32 -13
- data/spec/spec_helper.rb +28 -4
- data/spec/translated_spec.rb +1 -1
- data/spec/translation_spec.rb +33 -67
- data/spec/translations/two/en.yml +0 -1
- data/spec/yaml_loader_spec.rb +33 -0
- metadata +11 -16
- data/locales/cs.yml +0 -26
- data/locales/de.yml +0 -26
- data/locales/en-us.yml +0 -10
- data/locales/en.yml +0 -26
- data/locales/eo.yml +0 -26
- data/locales/es.yml +0 -26
- data/locales/fr.yml +0 -26
- data/locales/it.yml +0 -26
- data/locales/kk.yml +0 -26
- data/locales/pl.yml +0 -26
- data/locales/pt-br.yml +0 -26
- data/locales/ru.yml +0 -26
- data/locales/zh.yml +0 -26
data/spec/locale_spec.rb
CHANGED
@@ -2,100 +2,138 @@
|
|
2
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
3
|
|
4
4
|
describe R18n::Locale do
|
5
|
+
before :all do
|
6
|
+
@ru = R18n::Locale.load('ru')
|
7
|
+
@en = R18n::Locale.load('en')
|
8
|
+
end
|
5
9
|
|
10
|
+
it "should return all available locales" do
|
11
|
+
R18n::Locale.available.class.should == Array
|
12
|
+
R18n::Locale.available.should_not be_empty
|
13
|
+
end
|
14
|
+
|
6
15
|
it "should check is locale exists" do
|
7
16
|
R18n::Locale.exists?('ru').should be_true
|
8
17
|
R18n::Locale.exists?('no-LC').should be_false
|
9
18
|
end
|
19
|
+
|
20
|
+
it "should set locale properties" do
|
21
|
+
locale_class = Class.new(R18n::Locale) do
|
22
|
+
set :one => 1
|
23
|
+
set :two => 2
|
24
|
+
end
|
25
|
+
locale = locale_class.new
|
26
|
+
locale.one.should == 1
|
27
|
+
locale.two.should == 2
|
28
|
+
end
|
10
29
|
|
11
30
|
it "should load locale" do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
locale.ltr?.should be_true
|
31
|
+
@ru.class.should == R18n::Locales::Ru
|
32
|
+
@ru.code.should == 'ru'
|
33
|
+
@ru.title.should == 'Русский'
|
16
34
|
end
|
17
35
|
|
18
36
|
it "should load locale by Symbol" do
|
19
37
|
R18n::Locale.load(:ru).should == R18n::Locale.load('ru')
|
20
38
|
end
|
21
|
-
|
22
|
-
it "should use locale's class" do
|
23
|
-
ru = R18n::Locale.load('ru')
|
24
|
-
ru.class.should == R18n::Locales::Ru
|
25
|
-
|
26
|
-
eo = R18n::Locale.load('eo')
|
27
|
-
eo.class.should == R18n::Locale
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should include locale by +include+ option" do
|
31
|
-
enUS = R18n::Locale.load('en-US')
|
32
|
-
en = R18n::Locale.load('en')
|
33
|
-
enUS.title.should == 'English (US)'
|
34
|
-
en.title.should == 'English'
|
35
|
-
enUS['week'].should == en['week']
|
36
|
-
end
|
37
39
|
|
38
40
|
it "should be equal to another locale with same code" do
|
39
|
-
|
40
|
-
en
|
41
|
-
another_en = R18n::Locale.load('en')
|
42
|
-
en.should_not == ru
|
43
|
-
en.should == another_en
|
41
|
+
@en.should_not == @ru
|
42
|
+
@en.should == R18n::Locale.load('en')
|
44
43
|
end
|
45
44
|
|
46
45
|
it "should print human readable representation" do
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should return all available locales" do
|
51
|
-
R18n::Locale.available.class.should == Array
|
52
|
-
R18n::Locale.available.should_not be_empty
|
46
|
+
@ru.inspect.should == 'Locale ru (Русский)'
|
53
47
|
end
|
54
48
|
|
55
49
|
it "should return pluralization type by elements count" do
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
locale.pluralize(5).should == 'n'
|
50
|
+
@en.pluralize(0).should == 0
|
51
|
+
@en.pluralize(1).should == 1
|
52
|
+
@en.pluralize(5).should == 'n'
|
60
53
|
end
|
61
54
|
|
62
55
|
it "should use UnsupportedLocale if locale file isn't exists" do
|
63
|
-
|
64
|
-
supported.should be_supported
|
56
|
+
@en.should be_supported
|
65
57
|
|
66
58
|
unsupported = R18n::Locale.load('no-LC')
|
67
59
|
unsupported.should_not be_supported
|
68
60
|
unsupported.should be_a(R18n::UnsupportedLocale)
|
69
61
|
|
70
|
-
unsupported.code.should == 'no-
|
71
|
-
unsupported.title.should == 'no-
|
62
|
+
unsupported.code.downcase.should == 'no-lc'
|
63
|
+
unsupported.title.downcase.should == 'no-lc'
|
72
64
|
unsupported.ltr?.should be_true
|
73
65
|
|
74
|
-
unsupported['code'].should == 'no-LC'
|
75
|
-
unsupported['title'].should == 'no-LC'
|
76
|
-
unsupported['direction'].should == 'ltr'
|
77
|
-
|
78
66
|
unsupported.pluralize(5).should == 'n'
|
79
|
-
unsupported.inspect.should == '
|
67
|
+
unsupported.inspect.downcase.should == 'unsupported locale no-lc'
|
80
68
|
end
|
81
69
|
|
82
70
|
it "should format number in local traditions" do
|
83
|
-
|
84
|
-
locale.format_integer(-123456789).should == "−123,456,789"
|
71
|
+
@en.localize(-123456789).should == "−123,456,789"
|
85
72
|
end
|
86
73
|
|
87
74
|
it "should format float in local traditions" do
|
88
|
-
|
89
|
-
locale.format_float(-12345.67).should == "−12,345.67"
|
75
|
+
@en.localize(-12345.67).should == "−12,345.67"
|
90
76
|
end
|
91
77
|
|
92
78
|
it "should translate month, week days and am/pm names in strftime" do
|
93
|
-
|
79
|
+
i18n = R18n::I18n.new 'ru'
|
94
80
|
time = Time.at(0).utc
|
95
81
|
|
96
|
-
|
97
|
-
|
98
|
-
|
82
|
+
@ru.localize(time, '%a %A').should == 'Чтв Четверг'
|
83
|
+
@ru.localize(time, '%b %B').should == 'янв января'
|
84
|
+
@ru.localize(time, '%H:%M%p').should == '00:00 утра'
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should localize date for human" do
|
88
|
+
i18n = R18n::I18n.new('ru')
|
89
|
+
|
90
|
+
@ru.localize(Date.today + 2, :human, i18n).should == 'через 2 дня'
|
91
|
+
@ru.localize(Date.today + 1, :human, i18n).should == 'завтра'
|
92
|
+
@ru.localize(Date.today, :human, i18n).should == 'сегодня'
|
93
|
+
@ru.localize(Date.today - 1, :human, i18n).should == 'вчера'
|
94
|
+
@ru.localize(Date.today - 3, :human, i18n).should == '3 дня назад'
|
95
|
+
|
96
|
+
y2000 = Date.parse('2000-01-08')
|
97
|
+
@ru.localize(y2000, :human, i18n, y2000 + 8 ).should == ' 8 января'
|
98
|
+
@ru.localize(y2000, :human, i18n, y2000 - 365).should == ' 8 января 2000'
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should localize times for human" do
|
102
|
+
minute = 60
|
103
|
+
hour = 60 * minute
|
104
|
+
day = 24 * hour
|
105
|
+
zero = Time.at(0).utc
|
106
|
+
params = [:human, R18n::I18n.new('ru'), zero]
|
107
|
+
|
108
|
+
@ru.localize( zero + 7 * day, *params).should == ' 8 января 00:00'
|
109
|
+
@ru.localize( zero + 50 * hour, *params).should == 'через 2 дня 02:00'
|
110
|
+
@ru.localize( zero + 25 * hour, *params).should == 'завтра 01:00'
|
111
|
+
@ru.localize( zero + 70 * minute, *params).should == 'через 1 час'
|
112
|
+
@ru.localize( zero + 38 * minute, *params).should == 'через 38 минут'
|
113
|
+
@ru.localize( zero + 5, *params).should == 'сейчас'
|
114
|
+
@ru.localize( zero - 15, *params).should == 'сейчас'
|
115
|
+
@ru.localize( zero - minute, *params).should == '1 минуту назад'
|
116
|
+
@ru.localize( zero - 2 * hour, *params).should == '2 часа назад'
|
117
|
+
@ru.localize( zero - 13 * hour, *params).should == 'вчера 11:00'
|
118
|
+
@ru.localize( zero - 50 * hour, *params).should == '3 дня назад 22:00'
|
119
|
+
@ru.localize( zero - 9 * day, *params).should == '23 декабря 1969 00:00'
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should use standard formatter by default" do
|
123
|
+
@ru.localize(Time.at(0).utc).should == '01.01.1970 00:00'
|
124
|
+
end
|
125
|
+
|
126
|
+
it "shouldn't localize time without i18n object" do
|
127
|
+
@ru.localize(Time.at(0)).should_not == Time.at(0).to_s
|
128
|
+
@ru.localize(Time.at(0), :full).should_not == Time.at(0).to_s
|
129
|
+
|
130
|
+
@ru.localize(Time.at(0), :human).should == Time.at(0).to_s
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should raise error on unknown formatter" do
|
134
|
+
lambda {
|
135
|
+
@ru.localize(Time.at(0).utc, R18n::I18n.new('ru'), :unknown)
|
136
|
+
}.should raise_error(ArgumentError, /formatter/)
|
99
137
|
end
|
100
138
|
|
101
139
|
it "should delete slashed from locale for security reasons" do
|
@@ -113,7 +151,7 @@ describe R18n::Locale do
|
|
113
151
|
upcase = R18n::Locale.load('no-LC')
|
114
152
|
downcase = R18n::Locale.load('no-lc')
|
115
153
|
upcase.should == downcase
|
116
|
-
upcase.code.should == 'no-
|
154
|
+
upcase.code.should == 'no-lc'
|
117
155
|
downcase.code.should == 'no-lc'
|
118
156
|
end
|
119
157
|
|
data/spec/locales/cs_spec.rb
CHANGED
@@ -3,18 +3,20 @@ require File.join(File.dirname(__FILE__), '..', '..', 'locales', 'cs')
|
|
3
3
|
|
4
4
|
describe R18n::Locales::Cs do
|
5
5
|
it "should use Czech pluralization" do
|
6
|
-
ru = R18n::Locale.load
|
6
|
+
ru = R18n::Locale.load('cs')
|
7
7
|
ru.pluralize(0).should == 0
|
8
8
|
ru.pluralize(1).should == 1
|
9
|
+
|
9
10
|
ru.pluralize(2).should == 2
|
10
11
|
ru.pluralize(3).should == 2
|
11
12
|
ru.pluralize(4).should == 2
|
12
|
-
|
13
|
-
ru.pluralize(
|
14
|
-
ru.pluralize(
|
15
|
-
ru.pluralize(
|
16
|
-
ru.pluralize(
|
17
|
-
ru.pluralize(
|
13
|
+
|
14
|
+
ru.pluralize(5).should == 'n'
|
15
|
+
ru.pluralize(21).should == 'n'
|
16
|
+
ru.pluralize(11).should == 'n'
|
17
|
+
ru.pluralize(12).should == 'n'
|
18
|
+
ru.pluralize(22).should == 'n'
|
19
|
+
ru.pluralize(57).should == 'n'
|
18
20
|
ru.pluralize(101).should == 'n'
|
19
21
|
ru.pluralize(102).should == 'n'
|
20
22
|
ru.pluralize(111).should == 'n'
|
data/spec/locales/pl_spec.rb
CHANGED
@@ -5,19 +5,18 @@ describe R18n::Locales::Pl do
|
|
5
5
|
it "should use Polish pluralization" do
|
6
6
|
pl = R18n::Locale.load 'pl'
|
7
7
|
pl.pluralize(0).should == 0
|
8
|
-
|
9
8
|
pl.pluralize(1).should == 1
|
10
9
|
|
11
|
-
pl.pluralize(2).should
|
12
|
-
pl.pluralize(4).should
|
13
|
-
pl.pluralize(22).should
|
10
|
+
pl.pluralize(2).should == 2
|
11
|
+
pl.pluralize(4).should == 2
|
12
|
+
pl.pluralize(22).should == 2
|
14
13
|
pl.pluralize(102).should == 2
|
15
14
|
|
16
|
-
pl.pluralize(5).should
|
17
|
-
pl.pluralize(11).should
|
18
|
-
pl.pluralize(12).should
|
19
|
-
pl.pluralize(21).should
|
20
|
-
pl.pluralize(57).should
|
15
|
+
pl.pluralize(5).should == 'n'
|
16
|
+
pl.pluralize(11).should == 'n'
|
17
|
+
pl.pluralize(12).should == 'n'
|
18
|
+
pl.pluralize(21).should == 'n'
|
19
|
+
pl.pluralize(57).should == 'n'
|
21
20
|
pl.pluralize(101).should == 'n'
|
22
21
|
pl.pluralize(111).should == 'n'
|
23
22
|
pl.pluralize(112).should == 'n'
|
data/spec/locales/ru_spec.rb
CHANGED
@@ -6,19 +6,19 @@ describe R18n::Locales::Ru do
|
|
6
6
|
ru = R18n::Locale.load 'ru'
|
7
7
|
ru.pluralize(0).should == 0
|
8
8
|
|
9
|
-
ru.pluralize(1).should
|
10
|
-
ru.pluralize(21).should
|
9
|
+
ru.pluralize(1).should == 1
|
10
|
+
ru.pluralize(21).should == 1
|
11
11
|
ru.pluralize(101).should == 1
|
12
12
|
|
13
|
-
ru.pluralize(2).should
|
14
|
-
ru.pluralize(4).should
|
15
|
-
ru.pluralize(22).should
|
13
|
+
ru.pluralize(2).should == 2
|
14
|
+
ru.pluralize(4).should == 2
|
15
|
+
ru.pluralize(22).should == 2
|
16
16
|
ru.pluralize(102).should == 2
|
17
17
|
|
18
|
-
ru.pluralize(5).should
|
19
|
-
ru.pluralize(11).should
|
20
|
-
ru.pluralize(12).should
|
21
|
-
ru.pluralize(57).should
|
18
|
+
ru.pluralize(5).should == 'n'
|
19
|
+
ru.pluralize(11).should == 'n'
|
20
|
+
ru.pluralize(12).should == 'n'
|
21
|
+
ru.pluralize(57).should == 'n'
|
22
22
|
ru.pluralize(111).should == 'n'
|
23
23
|
end
|
24
24
|
end
|
data/spec/r18n_spec.rb
CHANGED
@@ -2,24 +2,43 @@
|
|
2
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
3
|
|
4
4
|
describe R18n do
|
5
|
+
after do
|
6
|
+
R18n.default_loader = R18n::Loader::YAML
|
7
|
+
end
|
5
8
|
|
6
|
-
it "should
|
7
|
-
i18n = R18n::I18n.new('en'
|
9
|
+
it "should store I18n" do
|
10
|
+
i18n = R18n::I18n.new('en')
|
8
11
|
R18n.set(i18n)
|
9
12
|
R18n.get.should == i18n
|
13
|
+
|
14
|
+
R18n.set(nil)
|
15
|
+
R18n.get.should be_nil
|
10
16
|
end
|
11
|
-
|
12
|
-
it "should
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
|
18
|
+
it "should set setter to I18n" do
|
19
|
+
i18n = R18n::I18n.new('en')
|
20
|
+
R18n.set(i18n)
|
21
|
+
|
22
|
+
i18n = R18n::I18n.new('ru')
|
23
|
+
R18n.set { i18n }
|
24
|
+
|
25
|
+
R18n.get.should == i18n
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should store default loader class" do
|
29
|
+
R18n.default_loader.should == R18n::Loader::YAML
|
30
|
+
R18n.default_loader = Class
|
31
|
+
R18n.default_loader.should == Class
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should store cache" do
|
35
|
+
R18n.cache.should be_a(Hash)
|
36
|
+
|
37
|
+
R18n.cache = { 1 => 2 }
|
38
|
+
R18n.cache.should == { 1 => 2 }
|
18
39
|
|
19
|
-
R18n
|
20
|
-
|
21
|
-
:b => { :ba => 1, :bb => 2, :bc => 2 },
|
22
|
-
:c => 2 }
|
40
|
+
R18n.cache.clear
|
41
|
+
R18n.cache.should == {}
|
23
42
|
end
|
24
43
|
|
25
44
|
it "should convert Time to Date" do
|
data/spec/spec_helper.rb
CHANGED
@@ -2,8 +2,32 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'pp'
|
4
4
|
|
5
|
-
|
5
|
+
dir = Pathname(__FILE__).dirname
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
require dir + '../lib/r18n-core'
|
8
|
+
|
9
|
+
DIR = dir + 'translations/general' unless defined? DIR
|
10
|
+
TWO = dir + 'translations/two' unless defined? TWO
|
11
|
+
EXT = R18n::Loader::YAML.new(dir + 'translations/extension') unless defined? EXT
|
12
|
+
|
13
|
+
gem 'maruku'
|
14
|
+
gem 'RedCloth'
|
15
|
+
|
16
|
+
class CounterLoader
|
17
|
+
attr_reader :available
|
18
|
+
attr_reader :loaded
|
19
|
+
|
20
|
+
def initialize(*available)
|
21
|
+
@available = available.map { |i| R18n::Locale.load(i) }
|
22
|
+
@loaded = 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def load(locale)
|
26
|
+
@loaded += 1
|
27
|
+
{}
|
28
|
+
end
|
29
|
+
|
30
|
+
def hash
|
31
|
+
@available.hash
|
32
|
+
end
|
33
|
+
end
|
data/spec/translated_spec.rb
CHANGED
data/spec/translation_spec.rb
CHANGED
@@ -2,88 +2,54 @@
|
|
2
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
3
|
|
4
4
|
describe R18n::Translation do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
it "should load translations" do
|
17
|
-
translation = R18n::Translation.load([@en], DIR)
|
18
|
-
translation.one.should == 'One'
|
19
|
-
translation['one'].should == 'One'
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should find in subtranslations" do
|
23
|
-
translation = R18n::Translation.load([@ru, @en], DIR)
|
24
|
-
translation.one.should == 'Один'
|
25
|
-
translation.two.should == 'Two'
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should return nil if translation isn't found" do
|
29
|
-
translation = R18n::Translation.load([@en], DIR)
|
30
|
-
translation.not.exists.should be_nil
|
31
|
-
translation['not']['exists'].should be_nil
|
5
|
+
|
6
|
+
it "should return unstranslated string if translation isn't found" do
|
7
|
+
i18n = R18n::I18n.new('en', DIR)
|
8
|
+
i18n.not.exists.should be_a(R18n::Untranslated)
|
9
|
+
i18n.not.exists.should_not be_translated
|
10
|
+
(i18n.not.exists | 'default').should == 'default'
|
11
|
+
|
12
|
+
(i18n.in | 'default').should == 'default'
|
13
|
+
|
14
|
+
i18n.one.should be_translated
|
15
|
+
(i18n.one | 'default').should == 'One'
|
32
16
|
end
|
33
17
|
|
34
18
|
it "should load use hierarchical translations" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
19
|
+
i18n = R18n::I18n.new(['ru', 'en'], DIR)
|
20
|
+
i18n.in.another.level.should == 'Иерархический'
|
21
|
+
i18n[:in][:another][:level].should == 'Иерархический'
|
22
|
+
i18n['in']['another']['level'].should == 'Иерархический'
|
23
|
+
i18n.only.english.should == 'Only in English'
|
39
24
|
end
|
40
25
|
|
41
26
|
it "should save path for translation" do
|
42
|
-
|
27
|
+
i18n = R18n::I18n.new('en', DIR)
|
43
28
|
|
44
|
-
|
29
|
+
i18n.in.another.level.path.should == 'in.another.level'
|
45
30
|
|
46
|
-
|
47
|
-
|
48
|
-
|
31
|
+
i18n.in.another.not.exists.path.should == 'in.another.not.exists'
|
32
|
+
i18n.in.another.not.exists.untranslated_path.should == 'not.exists'
|
33
|
+
i18n.in.another.not.exists.translated_path.should == 'in.another.'
|
49
34
|
|
50
|
-
|
51
|
-
|
35
|
+
i18n.not.untranslated_path.should == 'not'
|
36
|
+
i18n.not.translated_path.should == ''
|
52
37
|
end
|
53
38
|
|
54
39
|
it "should return string with locale info" do
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should load translations from several dirs" do
|
61
|
-
tr = R18n::Translation.load([R18n::Locale.load('no-LC'), @en], [TWO, DIR])
|
62
|
-
tr.in.two.should == 'Two'
|
63
|
-
tr.in.another.level.should == 'Hierarchical'
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should use extension translations" do
|
67
|
-
R18n::Translation.extension_translations << EXT
|
68
|
-
|
69
|
-
translation = R18n::Translation.load([@en], DIR)
|
70
|
-
translation.ext.should == 'Extension'
|
71
|
-
translation.one.should == 'One'
|
72
|
-
end
|
73
|
-
|
74
|
-
it "shouldn't use extension without app translations with same locale" do
|
75
|
-
R18n::Translation.extension_translations << EXT
|
76
|
-
|
77
|
-
translation = R18n::Translation.load([R18n::Locale.load('no-TR'), @en], DIR)
|
78
|
-
translation.ext.should == 'Extension'
|
40
|
+
i18n = R18n::I18n.new(['no-LC', 'en'], DIR)
|
41
|
+
i18n.one.locale.should == R18n::UnsupportedLocale.new('no-LC')
|
42
|
+
i18n.two.locale.should == R18n::Locale.load('en')
|
79
43
|
end
|
80
44
|
|
81
|
-
it "should
|
82
|
-
|
83
|
-
translation.
|
45
|
+
it "should filter typed data" do
|
46
|
+
en = R18n::Locale.load('en')
|
47
|
+
translation = R18n::Translation.new(en, '', en, {
|
48
|
+
'count' => R18n::Typed.new('pl', { 1 => 'one', 'n' => 'many' })
|
49
|
+
})
|
84
50
|
|
85
|
-
translation
|
86
|
-
translation.
|
51
|
+
translation.count(1).should == 'one'
|
52
|
+
translation.count(5).should == 'many'
|
87
53
|
end
|
88
54
|
|
89
55
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
+
|
4
|
+
describe R18n::Loader::YAML do
|
5
|
+
before do
|
6
|
+
@loader = R18n::Loader::YAML.new(DIR)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return dir with translations" do
|
10
|
+
@loader.dir.should == DIR.expand_path.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be equal to another YAML loader with same dir" do
|
14
|
+
@loader.should == R18n::Loader::YAML.new(DIR)
|
15
|
+
@loader.should_not == Class.new(R18n::Loader::YAML).new(DIR)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return all available translations" do
|
19
|
+
@loader.available.should =~ [R18n::Locale.load('ru'),
|
20
|
+
R18n::Locale.load('en'),
|
21
|
+
R18n::Locale.load('no-lc')]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should load translation" do
|
25
|
+
@loader.load(R18n::Locale.load('ru')).should == {
|
26
|
+
'one' => 'Один', 'in' => {'another' => {'level' => 'Иерархический'}} }
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return hash by dir" do
|
30
|
+
@loader.hash.should == R18n::Loader::YAML.new(DIR).hash
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
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.
|
4
|
+
version: "0.4"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey "A.I." Sitnik
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-03 00:00:00 +03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: " R18n is a i18n tool to translate your Ruby application.\n It
|
16
|
+
description: " R18n is a i18n tool to translate your Ruby application.\n It has nice Ruby-style syntax, filters, flexible locales, custom loaders,\n translation support for any classes, time and number localization, several\n user language support, agnostic core package with out-of-box support for\n Rails, Sinatra, Merb and desktop applications.\n"
|
17
17
|
email: andrey@sitnik.ru
|
18
18
|
executables: []
|
19
19
|
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- lib/r18n-core.rb
|
40
40
|
- lib/r18n-core/filters.rb
|
41
41
|
- lib/r18n-core/untranslated.rb
|
42
|
+
- lib/r18n-core/yaml_loader.rb
|
42
43
|
- lib/r18n-core/version.rb
|
43
44
|
- lib/r18n-core/utils.rb
|
44
45
|
- lib/r18n-core/translated_string.rb
|
@@ -49,24 +50,17 @@ files:
|
|
49
50
|
- lib/r18n-core/i18n.rb
|
50
51
|
- locales/it.rb
|
51
52
|
- locales/pl.rb
|
52
|
-
- locales/kk.yml
|
53
|
-
- locales/it.yml
|
54
53
|
- locales/en.rb
|
55
|
-
- locales/ru.yml
|
56
|
-
- locales/pl.yml
|
57
54
|
- locales/cs.rb
|
58
|
-
- locales/
|
59
|
-
- locales/
|
55
|
+
- locales/es.rb
|
56
|
+
- locales/kk.rb
|
60
57
|
- locales/en-us.rb
|
61
|
-
- locales/
|
62
|
-
- locales/pt-br.yml
|
63
|
-
- locales/cs.yml
|
64
|
-
- locales/es.yml
|
65
|
-
- locales/fr.yml
|
58
|
+
- locales/zh.rb
|
66
59
|
- locales/fr.rb
|
67
60
|
- locales/ru.rb
|
68
|
-
- locales/
|
69
|
-
- locales/
|
61
|
+
- locales/pt-br.rb
|
62
|
+
- locales/de.rb
|
63
|
+
- locales/eo.rb
|
70
64
|
- LICENSE
|
71
65
|
- ChangeLog
|
72
66
|
- README.rdoc
|
@@ -109,6 +103,7 @@ test_files:
|
|
109
103
|
- spec/locales/en-us_spec.rb
|
110
104
|
- spec/spec_helper.rb
|
111
105
|
- spec/r18n_spec.rb
|
106
|
+
- spec/yaml_loader_spec.rb
|
112
107
|
- spec/translation_spec.rb
|
113
108
|
- spec/translations/general/ru.yml
|
114
109
|
- spec/translations/general/en.yml
|
data/locales/cs.yml
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
title: Český
|
2
|
-
code: cs
|
3
|
-
sublocales: [cz, sk]
|
4
|
-
direction: ltr
|
5
|
-
|
6
|
-
week:
|
7
|
-
start: monday
|
8
|
-
days: [Neděle, Pondělí, Úterý, Středa, Čtvrtek, Pátek, Sobota]
|
9
|
-
abbrs: [Ne, Po, Út, St, Čt, Pá, So]
|
10
|
-
|
11
|
-
months:
|
12
|
-
names: [Ledna, Února, Března, Dubna, Května, Června, Července, Srpna, Září, Října, Listopadu, Prosince]
|
13
|
-
abbrs: [Led, Úno, Bře, Dub, Kvě, Čer, Čvc, Srp, Zář, Říj, Lis, Pro]
|
14
|
-
standalone: [Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec]
|
15
|
-
|
16
|
-
time:
|
17
|
-
am: dop.
|
18
|
-
pm: odp.
|
19
|
-
time: " %H:%M"
|
20
|
-
date: "%d.%m.%Y"
|
21
|
-
full: "%e %B"
|
22
|
-
year: "_ %Y"
|
23
|
-
|
24
|
-
numbers:
|
25
|
-
decimal_separator: ","
|
26
|
-
group_delimiter: " "
|