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/locales/it.rb
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module R18n
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
class Locales::It < Locale
|
4
|
+
set :title => 'Italiano',
|
5
|
+
|
6
|
+
:wday_names => %w{domenica lunedì martedì mercoledì giovedì venerdì
|
7
|
+
sabato},
|
8
|
+
:wday_abbrs => %w{dom lun mar mer gio ven sab},
|
9
|
+
|
10
|
+
:month_names => %w{gennaio febbraio marzo aprile maggio giugno luglio},
|
11
|
+
:month_abbrs => %w{gen feb mar apr mag giu lug ago set ott nov dic},
|
12
|
+
|
13
|
+
:date_format => '%d/%m/%Y',
|
14
|
+
|
15
|
+
:number_decimal => ",",
|
16
|
+
:number_group => " "
|
17
|
+
|
18
|
+
def format_date_full(date, year = true, *params)
|
19
|
+
full = super(date, year)
|
20
|
+
if ' 1' == full[0..1]
|
21
|
+
"1º" + full[2..-1]
|
22
|
+
else
|
23
|
+
full
|
12
24
|
end
|
13
25
|
end
|
14
26
|
end
|
data/locales/kk.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module R18n
|
3
|
+
class Locales::Kk < Locale
|
4
|
+
set :title => 'Қазақша',
|
5
|
+
:sublocales => %w{ru en},
|
6
|
+
|
7
|
+
:wday_names => %w{Жексенбі Дүйсенбі Сейсенбі Сәрсенбі Бейсенбі Жұма
|
8
|
+
Сенбі},
|
9
|
+
:wday_abbrs => %w{Жк Дс Сс Ср Бс Жм Сн},
|
10
|
+
|
11
|
+
:month_names => %w{қаңтар ақпан наурыз сәуір мамыр маусым шілде тамыз
|
12
|
+
қырқүйек қазан қараша желтоқсан},
|
13
|
+
:month_abbrs => %w{қаң ақп нау сәу мам мау шіл там қыр қаз қар жел},
|
14
|
+
:month_standalone => %w{Қаңтар Ақпан Наурыз Сәуір Мамыр Маусым Шілде
|
15
|
+
Тамыз Қыркүйек Қазан Қараша Желтоқсан},
|
16
|
+
|
17
|
+
:time_am => ' ертеңің',
|
18
|
+
:time_pm => ' кештің',
|
19
|
+
:date_format => '%Y-%m-%d',
|
20
|
+
:full_format => '%B %e-і',
|
21
|
+
:year_format => '%Y жылы _',
|
22
|
+
|
23
|
+
:number_decimal => ",",
|
24
|
+
:number_group => " "
|
25
|
+
end
|
26
|
+
end
|
data/locales/pl.rb
CHANGED
@@ -1,22 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module R18n
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
class Locales::Pl < R18n::Locale
|
4
|
+
set :title => 'Polski',
|
5
|
+
|
6
|
+
:wday_names => %w{niedziela poniedziałek wtorek środa czwartek piątek
|
7
|
+
sobota},
|
8
|
+
:wday_abbrs => %w{nd pn wt śr czw pt sob},
|
9
|
+
|
10
|
+
:month_names => %w{stycznia lutego marca kwietnia maja czerwca lipca
|
11
|
+
sierpnia września pażdziernika listopada grudnia},
|
12
|
+
:month_abbrs => %w{I II III IV V VI VII VIII IX X XI XII},
|
13
|
+
:month_standalone => %w{styczeń luty marzec kwiecień maj czerwiec lipiec
|
14
|
+
sierpień wrzesień październik listopad
|
15
|
+
grudzień},
|
16
|
+
|
17
|
+
:date_format => '%d/%m/%Y',
|
18
|
+
|
19
|
+
:number_decimal => ",",
|
20
|
+
:number_group => " "
|
21
|
+
|
22
|
+
def pluralize(n)
|
23
|
+
return 0 if n == 0
|
24
|
+
case n % 10
|
25
|
+
when 1
|
26
|
+
n > 10 ? 'n' : 1
|
27
|
+
when 2..4
|
28
|
+
n % 100 > 10 && n % 100 < 20 ? 'n' : 2
|
29
|
+
else
|
30
|
+
'n'
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
22
|
-
end
|
34
|
+
end
|
data/locales/pt-br.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module R18n
|
3
|
+
class Locales::PtBr < R18n::Locale
|
4
|
+
set :title => 'Português brasileiro',
|
5
|
+
:code => 'pt-BR',
|
6
|
+
|
7
|
+
:wday_names => %w{domingo segunda-feira terça-feira quarta-feira
|
8
|
+
quinta-feira sexta-feira sábado},
|
9
|
+
:wday_abbrs => %w{dom seg ter qua qui sex sab},
|
10
|
+
|
11
|
+
:month_names => %w{janeiro fevereiro março abril maio junho julho agosto
|
12
|
+
setembro outubro novembro dezembro},
|
13
|
+
:month_abbrs => %w{jan fev mar abr mai jun jul ago set out nov dez},
|
14
|
+
:month_standalone => %w{Janeiro Fevereiro Março Abril Maio Junho Julho
|
15
|
+
Agosto Setembro Outubro Novembro Dezembro},
|
16
|
+
|
17
|
+
:date_format => '%d/%m/%Y',
|
18
|
+
:full_format => '%d de %B',
|
19
|
+
:year_format => '_ de %Y',
|
20
|
+
|
21
|
+
:number_decimal => ",",
|
22
|
+
:number_group => "."
|
23
|
+
end
|
24
|
+
end
|
data/locales/ru.rb
CHANGED
@@ -1,16 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module R18n
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
class Locales::Ru < Locale
|
4
|
+
set :title => 'Русский',
|
5
|
+
|
6
|
+
:wday_names => %w{Воскресенье Понедельник Вторник Среда Четверг Пятница
|
7
|
+
Суббота},
|
8
|
+
:wday_abbrs => %w{Вск Пнд Втр Срд Чтв Птн Сбт},
|
9
|
+
|
10
|
+
:month_names => %w{января февраля марта апреля мая июня июля августа
|
11
|
+
сентября октября ноября декабря},
|
12
|
+
:month_abbrs => %w{янв фев мар апр май июн июл авг сен окт ноя дек},
|
13
|
+
:month_standalone => %w{Январь Февраль Март Апрель Май Июнь Июль Август
|
14
|
+
Сентябрь Октябрь Ноябрь Декабрь},
|
15
|
+
|
16
|
+
:time_am => ' утра',
|
17
|
+
:time_pm => ' вечера',
|
18
|
+
:date_format => '%d.%m.%Y',
|
19
|
+
|
20
|
+
:number_decimal => ",",
|
21
|
+
:number_group => " "
|
22
|
+
|
23
|
+
def pluralize(n)
|
24
|
+
if 0 == n
|
25
|
+
0
|
26
|
+
elsif 1 == n % 10 and 11 != n % 100
|
27
|
+
1
|
28
|
+
elsif 2 <= n % 10 and 4 >= n % 10 and (10 > n % 100 or 20 <= n % 100)
|
29
|
+
2
|
30
|
+
else
|
31
|
+
'n'
|
14
32
|
end
|
15
33
|
end
|
16
34
|
end
|
data/locales/zh.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module R18n
|
3
|
+
class Locales::Zh < R18n::Locale
|
4
|
+
set :title => '中文',
|
5
|
+
|
6
|
+
:wday_names => %w{星期日 星期一 星期二 星期三 星期四 星期五 星期六},
|
7
|
+
:wday_abbrs => %w{周日 周一 周二 周三 周四 周五 周六},
|
8
|
+
|
9
|
+
:month_names => %w{一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月},
|
10
|
+
:month_abbrs => %w{一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月},
|
11
|
+
|
12
|
+
:date_format => '%Y年%m月%d日',
|
13
|
+
:full_format => '%m月%d日',
|
14
|
+
:year_format => '%Y年_',
|
15
|
+
|
16
|
+
:number_decimal => ".",
|
17
|
+
:number_group => " "
|
18
|
+
end
|
19
|
+
end
|
data/spec/filters_spec.rb
CHANGED
@@ -88,21 +88,21 @@ describe R18n::Filters do
|
|
88
88
|
|
89
89
|
it "should send config to filter" do
|
90
90
|
R18n::Filters.add('my') do |i, config|
|
91
|
-
config
|
91
|
+
config[:secret_value] = 1
|
92
92
|
config
|
93
93
|
end
|
94
|
-
@i18n.my_filter
|
95
|
-
@i18n.my_filter
|
96
|
-
@i18n.my_filter
|
97
|
-
@i18n.my_filter
|
94
|
+
@i18n.my_filter[:locale].should == @i18n.locale
|
95
|
+
@i18n.my_filter[:path].should == 'my_filter'
|
96
|
+
@i18n.my_filter[:secret_value].should == 1
|
97
|
+
@i18n.my_filter[:unknown_value].should be_nil
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should use one config for cascade filters" do
|
101
|
-
R18n::Filters.add('my') { |content, config| config
|
101
|
+
R18n::Filters.add('my') { |content, config| config[:new_secret] ? 2 : 1 }
|
102
102
|
@i18n.my_filter.should == 1
|
103
103
|
|
104
104
|
R18n::Filters.add('my', nil, 0) do |content, config|
|
105
|
-
config
|
105
|
+
config[:new_secret] = true
|
106
106
|
content
|
107
107
|
end
|
108
108
|
@i18n.my_filter.should == 2
|
@@ -127,6 +127,11 @@ describe R18n::Filters do
|
|
127
127
|
@i18n.files(-5.5).should == '−5.5 files'
|
128
128
|
@i18n.files(5000).should == '5,000 files'
|
129
129
|
end
|
130
|
+
|
131
|
+
it "shouldn't pluralize without first numeric parameter" do
|
132
|
+
@i18n.files.should == { 1 => '1 file', 'n' => '%1 files' }
|
133
|
+
@i18n.files('').should == { 1 => '1 file', 'n' => '%1 files' }
|
134
|
+
end
|
130
135
|
|
131
136
|
it "should pluralize translation without locale" do
|
132
137
|
i18n = R18n::I18n.new('no-LC', DIR)
|
@@ -150,6 +155,18 @@ describe R18n::Filters do
|
|
150
155
|
@i18n.in.not.to_s.should == 'in.not in.[not]'
|
151
156
|
end
|
152
157
|
|
158
|
+
it "should format translation path" do
|
159
|
+
@i18n.in.another.to_s.should == 'in.another[]'
|
160
|
+
|
161
|
+
R18n::Filters.off(:untranslated)
|
162
|
+
@i18n.in.another.to_s.should == 'in.another'
|
163
|
+
|
164
|
+
R18n::Filters.add(R18n::Untranslated) do |v, c, trans, untrans, path|
|
165
|
+
"#{path} #{trans}[#{untrans}]"
|
166
|
+
end
|
167
|
+
@i18n.in.another.to_s.should == 'in.another in.another[]'
|
168
|
+
end
|
169
|
+
|
153
170
|
it "should have filter for escape HTML" do
|
154
171
|
@i18n.html.should == '<script>true && false</script>'
|
155
172
|
end
|
data/spec/i18n_spec.rb
CHANGED
@@ -2,8 +2,15 @@
|
|
2
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
3
|
|
4
4
|
describe R18n::I18n do
|
5
|
+
before do
|
6
|
+
@extension_places = R18n.extension_places.clone
|
7
|
+
R18n.cache.clear
|
8
|
+
end
|
9
|
+
|
5
10
|
after do
|
6
11
|
R18n::I18n.default = 'en'
|
12
|
+
R18n.default_loader = R18n::Loader::YAML
|
13
|
+
R18n.extension_places = @extension_places
|
7
14
|
end
|
8
15
|
|
9
16
|
it "should parse HTTP_ACCEPT_LANGUAGE" do
|
@@ -26,20 +33,68 @@ describe R18n::I18n do
|
|
26
33
|
i18n.locales.should == [R18n::Locale.load('ru'),
|
27
34
|
R18n::UnsupportedLocale.new('no-LC'),
|
28
35
|
R18n::UnsupportedLocale.new('no'),
|
29
|
-
R18n::
|
36
|
+
R18n::Locale.load('en')]
|
30
37
|
end
|
31
38
|
|
32
|
-
it "should return translations
|
39
|
+
it "should return translations loaders" do
|
33
40
|
i18n = R18n::I18n.new('en', DIR)
|
34
|
-
i18n.
|
41
|
+
i18n.translation_places.should == [R18n::Loader::YAML.new(DIR)]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should load translations by loader" do
|
45
|
+
loader = Class.new do
|
46
|
+
def available; [R18n::Locale.load('en')]; end
|
47
|
+
def load(locale); { 'custom' => 'Custom' }; end
|
48
|
+
end
|
49
|
+
R18n::I18n.new('en', loader.new).custom.should == 'Custom'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should pass parameters to default loader" do
|
53
|
+
loader = Class.new do
|
54
|
+
def initialize(param); @param = param; end
|
55
|
+
def available; [R18n::Locale.load('en')]; end
|
56
|
+
def load(locale); { 'custom' => @param }; end
|
57
|
+
end
|
58
|
+
R18n.default_loader = loader
|
59
|
+
R18n::I18n.new('en', 'default').custom.should == 'default'
|
35
60
|
end
|
36
61
|
|
37
62
|
it "should load translations" do
|
38
63
|
i18n = R18n::I18n.new(['ru', 'en'], DIR)
|
39
64
|
i18n.one.should == 'Один'
|
65
|
+
i18n[:one].should == 'Один'
|
40
66
|
i18n['one'].should == 'Один'
|
41
67
|
i18n.only.english.should == 'Only in English'
|
42
68
|
end
|
69
|
+
|
70
|
+
it "should load translations from several dirs" do
|
71
|
+
i18n = R18n::I18n.new(['no-LC', 'en'], [TWO, DIR])
|
72
|
+
i18n.in.two.should == 'Two'
|
73
|
+
i18n.in.another.level.should == 'Hierarchical'
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should use extension places" do
|
77
|
+
R18n.extension_places << EXT
|
78
|
+
|
79
|
+
i18n = R18n::I18n.new('en', DIR)
|
80
|
+
i18n.ext.should == 'Extension'
|
81
|
+
i18n.one.should == 'One'
|
82
|
+
end
|
83
|
+
|
84
|
+
it "shouldn't use extension without app translations with same locale" do
|
85
|
+
R18n.extension_places << EXT
|
86
|
+
|
87
|
+
i18n = R18n::I18n.new(['no-TR', 'en'], DIR)
|
88
|
+
i18n.ext.should == 'Extension'
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should ignore case on loading" do
|
92
|
+
i18n = R18n::I18n.new('no-lc', [DIR])
|
93
|
+
i18n.one.should == 'ONE'
|
94
|
+
|
95
|
+
i18n = R18n::I18n.new('no-LC', [DIR])
|
96
|
+
i18n.one.should == 'ONE'
|
97
|
+
end
|
43
98
|
|
44
99
|
it "should load default translation" do
|
45
100
|
i18n = R18n::I18n.new('no-LC', DIR)
|
@@ -56,9 +111,86 @@ describe R18n::I18n do
|
|
56
111
|
end
|
57
112
|
|
58
113
|
it "should return available translations" do
|
114
|
+
R18n::I18n.available_locales(DIR).should =~ [R18n::Locale.load('no-lc'),
|
115
|
+
R18n::Locale.load('ru'),
|
116
|
+
R18n::Locale.load('en')]
|
59
117
|
i18n = R18n::I18n.new('en', DIR)
|
60
|
-
i18n.
|
61
|
-
|
118
|
+
i18n.available_locales.should =~ [R18n::Locale.load('no-lc'),
|
119
|
+
R18n::Locale.load('ru'),
|
120
|
+
R18n::Locale.load('en')]
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should cache translations" do
|
124
|
+
counter = CounterLoader.new('en')
|
125
|
+
|
126
|
+
R18n::I18n.new('en', counter)
|
127
|
+
counter.loaded.should == 1
|
128
|
+
|
129
|
+
R18n::I18n.new('en', counter)
|
130
|
+
counter.loaded.should == 1
|
131
|
+
|
132
|
+
R18n.cache.clear
|
133
|
+
R18n::I18n.new('en', counter)
|
134
|
+
counter.loaded.should == 2
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should cache translations by used locales" do
|
138
|
+
counter = CounterLoader.new('en', 'ru')
|
139
|
+
|
140
|
+
R18n::I18n.new('en', counter)
|
141
|
+
counter.loaded.should == 1
|
142
|
+
|
143
|
+
R18n::I18n.new(['en', 'fr'], counter)
|
144
|
+
counter.loaded.should == 1
|
145
|
+
|
146
|
+
R18n::I18n.new(['en', 'ru'], counter)
|
147
|
+
counter.loaded.should == 3
|
148
|
+
|
149
|
+
R18n::I18n.new(['ru', 'en'], counter)
|
150
|
+
counter.loaded.should == 5
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should cache translations by places" do
|
154
|
+
counter = CounterLoader.new('en', 'ru')
|
155
|
+
|
156
|
+
R18n::I18n.new('en', counter)
|
157
|
+
counter.loaded.should == 1
|
158
|
+
|
159
|
+
R18n::I18n.new('en', [counter, DIR])
|
160
|
+
counter.loaded.should == 2
|
161
|
+
|
162
|
+
R18n.extension_places << EXT
|
163
|
+
R18n::I18n.new('en', counter)
|
164
|
+
counter.loaded.should == 3
|
165
|
+
|
166
|
+
same = CounterLoader.new('en', 'ru')
|
167
|
+
R18n::I18n.new('en', same)
|
168
|
+
same.loaded.should == 0
|
169
|
+
|
170
|
+
different = CounterLoader.new('en', 'fr')
|
171
|
+
R18n::I18n.new('en', different)
|
172
|
+
different.loaded.should == 1
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should reload translations" do
|
176
|
+
loader = Class.new do
|
177
|
+
@@answer = 1
|
178
|
+
def available; [R18n::Locale.load('en')]; end
|
179
|
+
def load(locale); { 'one' => @@answer }; end
|
180
|
+
end
|
181
|
+
|
182
|
+
i18n = R18n::I18n.new('en', loader.new)
|
183
|
+
i18n.one.should == 1
|
184
|
+
|
185
|
+
loader.class_eval { @@answer = 2 }
|
186
|
+
i18n.reload!
|
187
|
+
i18n.one.should == 2
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should return translations" do
|
191
|
+
i18n = R18n::I18n.new('en', DIR)
|
192
|
+
i18n.t.should be_a(R18n::Translation)
|
193
|
+
i18n.t.one.should == 'One'
|
62
194
|
end
|
63
195
|
|
64
196
|
it "should return first locale with locale file" do
|
@@ -81,50 +213,5 @@ describe R18n::I18n do
|
|
81
213
|
|
82
214
|
i18n.l(Date.new(0)).should == '01.01.0000'
|
83
215
|
end
|
84
|
-
|
85
|
-
it "should localize date for human" do
|
86
|
-
i18n = R18n::I18n.new('ru')
|
87
|
-
|
88
|
-
i18n.l(Date.today + 2, :human).should == 'через 2 дня'
|
89
|
-
i18n.l(Date.today + 1, :human).should == 'завтра'
|
90
|
-
i18n.l(Date.today, :human).should == 'сегодня'
|
91
|
-
i18n.l(Date.today - 1, :human).should == 'вчера'
|
92
|
-
i18n.l(Date.today - 3, :human).should == '3 дня назад'
|
93
|
-
|
94
|
-
y2000 = Date.parse('2000-01-08')
|
95
|
-
i18n.l(y2000, :human, Date.parse('2000-01-01')).should == ' 8 января'
|
96
|
-
i18n.l(y2000, :human, Date.parse('1999-01-01')).should == ' 8 января 2000'
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should localize times for human" do
|
100
|
-
i18n = R18n::I18n.new('ru')
|
101
|
-
minute = 60
|
102
|
-
hour = 60 * minute
|
103
|
-
day = 24 * hour
|
104
|
-
zero = Time.at(0).utc
|
105
|
-
|
106
|
-
i18n.l( zero + 7 * day, :human, zero).should == ' 8 января 00:00'
|
107
|
-
i18n.l( zero + 50 * hour, :human, zero).should == 'через 2 дня 02:00'
|
108
|
-
i18n.l( zero + 25 * hour, :human, zero).should == 'завтра 01:00'
|
109
|
-
i18n.l( zero + 70 * minute, :human, zero).should == 'через 1 час'
|
110
|
-
i18n.l( zero + 38 * minute, :human, zero).should == 'через 38 минут'
|
111
|
-
i18n.l( zero + 5, :human, zero).should == 'сейчас'
|
112
|
-
i18n.l( zero - 15, :human, zero).should == 'сейчас'
|
113
|
-
i18n.l( zero - minute, :human, zero).should == '1 минуту назад'
|
114
|
-
i18n.l( zero - 2 * hour, :human, zero).should == '2 часа назад'
|
115
|
-
i18n.l( zero - 13 * hour, :human, zero).should == 'вчера 11:00'
|
116
|
-
i18n.l( zero - 50 * hour, :human, zero).should == '3 дня назад 22:00'
|
117
|
-
i18n.l( zero - 9 * day, :human, zero).should == '23 декабря 1969 00:00'
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should use standard formatter by default" do
|
121
|
-
R18n::I18n.new('ru').l(Time.at(0).utc).should == '01.01.1970 00:00'
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should raise error on unknown formatter" do
|
125
|
-
lambda {
|
126
|
-
R18n::I18n.new('ru').l(Time.at(0).utc, :unknown)
|
127
|
-
}.should raise_error(ArgumentError, /formatter/)
|
128
|
-
end
|
129
216
|
|
130
217
|
end
|