r18n-core 0.4.2 → 0.4.3
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 +7 -0
- data/README.rdoc +1 -1
- data/base/sk.yml +34 -0
- data/lib/r18n-core/i18n.rb +34 -16
- data/lib/r18n-core/locale.rb +2 -2
- data/lib/r18n-core/utils.rb +18 -3
- data/lib/r18n-core/version.rb +1 -1
- data/lib/r18n-core/yaml_loader.rb +8 -5
- data/locales/cs.rb +5 -4
- data/locales/sk.rb +38 -0
- data/spec/i18n_spec.rb +1 -2
- data/spec/locale_spec.rb +4 -0
- data/spec/locales/cs_spec.rb +15 -15
- data/spec/locales/sk_spec.rb +24 -0
- data/spec/r18n_spec.rb +18 -0
- data/spec/spec_helper.rb +8 -3
- data/spec/yaml_loader_spec.rb +14 -0
- metadata +5 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.4.3 (Flange)
|
2
|
+
* Add R18n style methods to Rails controllers.
|
3
|
+
* Fix for non-string translations in Rails I18n.
|
4
|
+
* Use default locale from Rails I18n config.
|
5
|
+
* Load translations recursively.
|
6
|
+
* Add Slovak locale (by Ahmed Al Hafoudh)
|
7
|
+
|
1
8
|
== 0.4.2 (EMS)
|
2
9
|
* Fixes for Ruby 1.8.6 (by Akzhan Abdulin).
|
3
10
|
* Add method to get translation keys.
|
data/README.rdoc
CHANGED
data/base/sk.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
ok: OK
|
2
|
+
save: Uložiť
|
3
|
+
cancel: Zrušiť
|
4
|
+
'yes': Áno
|
5
|
+
'no': Nie
|
6
|
+
exit: Koniec
|
7
|
+
delete: Zmazať
|
8
|
+
|
9
|
+
human_time:
|
10
|
+
after_days: !!pl
|
11
|
+
1: o %1 deň
|
12
|
+
2: o %1 dni
|
13
|
+
n: o %1 dní
|
14
|
+
tomorrow: zajtra
|
15
|
+
after_hours: !!pl
|
16
|
+
1: o %1 hodinu
|
17
|
+
2: o %1 hodiny
|
18
|
+
n: o %1 hodín
|
19
|
+
after_minutes: !!pl
|
20
|
+
1: o %1 minútu
|
21
|
+
2: o %1 minúty
|
22
|
+
n: o %1 minút
|
23
|
+
now: teraz
|
24
|
+
today: dnes
|
25
|
+
minutes_ago: !!pl
|
26
|
+
1: pred %1 minútou
|
27
|
+
n: pred %1 minútami
|
28
|
+
hours_ago: !!pl
|
29
|
+
1: pred %1 hodinou
|
30
|
+
n: pred %1 hodinami
|
31
|
+
yesterday: včera
|
32
|
+
days_ago: !!pl
|
33
|
+
1: pred %1 dňom
|
34
|
+
n: pred %1 dňami
|
data/lib/r18n-core/i18n.rb
CHANGED
@@ -163,43 +163,60 @@ module R18n
|
|
163
163
|
@locales_codes = locales
|
164
164
|
@locales = locales.map { |i| Locale.load(i) }
|
165
165
|
|
166
|
-
@locale = @locales.first
|
167
|
-
unless @locale.supported?
|
168
|
-
@locales.each do |locale|
|
169
|
-
if locale.supported?
|
170
|
-
@locale.base = locale
|
171
|
-
break
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
166
|
if translation_places
|
177
167
|
@original_places = translation_places
|
178
168
|
else
|
179
169
|
@original_places = R18n.extension_places
|
170
|
+
@locale = @locales.first
|
180
171
|
end
|
181
172
|
|
182
173
|
@translation_places = self.class.convert_places(@original_places)
|
183
174
|
|
184
|
-
|
175
|
+
key = translation_cache_key
|
176
|
+
if R18n.cache.has_key? key
|
177
|
+
@locale, @translation = *R18n.cache[key]
|
178
|
+
else
|
179
|
+
reload!
|
180
|
+
end
|
185
181
|
end
|
186
182
|
|
187
|
-
|
188
183
|
# Return unique key for current locales in translation and places.
|
189
184
|
def translation_cache_key
|
190
|
-
|
185
|
+
@available_codes ||= @translation_places.inject([]) { |all, i|
|
191
186
|
all + i.available }.uniq.map { |i| i.code }
|
192
|
-
(@locales_codes &
|
187
|
+
(@locales_codes & @available_codes).join(',') + '@' +
|
193
188
|
R18n.default_loader.hash.to_s +
|
194
189
|
@translation_places.hash.to_s + R18n.extension_places.hash.to_s
|
195
190
|
end
|
196
191
|
|
197
192
|
# Reload translations.
|
198
193
|
def reload!
|
194
|
+
@available = @available_codes = nil
|
199
195
|
@translation_places = self.class.convert_places(@original_places)
|
200
196
|
|
201
197
|
available_in_places = @translation_places.map { |i| [i, i.available] }
|
202
|
-
available_in_extensions = R18n.extension_places.map {
|
198
|
+
available_in_extensions = R18n.extension_places.map {|i| [i, i.available]}
|
199
|
+
|
200
|
+
unless @locale
|
201
|
+
available_in_places.each do |place, available|
|
202
|
+
@locales.each do |locale|
|
203
|
+
if available.include? locale
|
204
|
+
@locale = locale
|
205
|
+
break
|
206
|
+
end
|
207
|
+
end
|
208
|
+
break if @locale
|
209
|
+
end
|
210
|
+
end
|
211
|
+
@locale ||= @locales.first
|
212
|
+
unless @locale.supported?
|
213
|
+
@locales.each do |locale|
|
214
|
+
if locale.supported?
|
215
|
+
@locale.base = locale
|
216
|
+
break
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
203
220
|
|
204
221
|
@translation = Translation.new @locale
|
205
222
|
@locales.each do |locale|
|
@@ -218,7 +235,8 @@ module R18n
|
|
218
235
|
end
|
219
236
|
end
|
220
237
|
end
|
221
|
-
|
238
|
+
|
239
|
+
R18n.cache[translation_cache_key] = [@locale, @translation]
|
222
240
|
end
|
223
241
|
|
224
242
|
# Return Array of locales with available translations.
|
data/lib/r18n-core/locale.rb
CHANGED
@@ -73,8 +73,8 @@ module R18n
|
|
73
73
|
|
74
74
|
# Load locale by RFC 3066 +code+.
|
75
75
|
def self.load(code)
|
76
|
-
original = code.to_s.gsub(/[^-
|
77
|
-
code = original.downcase
|
76
|
+
original = code.to_s.gsub(/[^-_a-zA-Z]/, '')
|
77
|
+
code = original.gsub('_', '-').downcase
|
78
78
|
|
79
79
|
@@loaded[code] ||= begin
|
80
80
|
if exists? code
|
data/lib/r18n-core/utils.rb
CHANGED
@@ -27,20 +27,35 @@ module R18n
|
|
27
27
|
Date.new!(Date.send(:jd_to_ajd, jd, 0, 0), 0, Date::ITALY)
|
28
28
|
end
|
29
29
|
|
30
|
-
HTML_ENTRIES = { '&'=>'&', '<'=>'<', '>'=>'>' }
|
30
|
+
HTML_ENTRIES = { '&' => '&', '<' => '<', '>' => '>' }
|
31
31
|
|
32
32
|
# Escape HTML entries (<, >, &). Copy from HAML helper.
|
33
33
|
def self.escape_html(content)
|
34
34
|
content.to_s.gsub(/[><&]/) { |s| HTML_ENTRIES[s] }
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
# Invokes +block+ once for each key and value of +hash+. Creates a new hash
|
38
|
+
# with the keys and values returned by the +block+.
|
39
|
+
def self.hash_map(hash, &block)
|
38
40
|
result = {}
|
39
41
|
hash.each_pair do |key, val|
|
40
|
-
new_key, new_value =
|
42
|
+
new_key, new_value = block.call(key, val)
|
41
43
|
result[new_key] = new_value
|
42
44
|
end
|
43
45
|
result
|
44
46
|
end
|
47
|
+
|
48
|
+
# Recursively hash merge.
|
49
|
+
def self.deep_merge!(a, b)
|
50
|
+
b.each_pair do |key, value|
|
51
|
+
another = a[key]
|
52
|
+
if another.nil?
|
53
|
+
a[key] = value
|
54
|
+
elsif another.is_a?(Hash) and value.is_a?(Hash)
|
55
|
+
a[key] = deep_merge!(another, value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
a
|
59
|
+
end
|
45
60
|
end
|
46
61
|
end
|
data/lib/r18n-core/version.rb
CHANGED
@@ -43,15 +43,18 @@ module R18n
|
|
43
43
|
|
44
44
|
# Array of locales, which has translations in +dir+.
|
45
45
|
def available
|
46
|
-
Dir.glob(File.join(@dir, '
|
47
|
-
|
48
|
-
|
46
|
+
Dir.glob(File.join(@dir, '**/*.yml')).
|
47
|
+
map { |i| File.basename(i, '.yml') }.uniq.
|
48
|
+
map { |i| R18n::Locale.load(i) }
|
49
49
|
end
|
50
50
|
|
51
51
|
# Return Hash with translations for +locale+.
|
52
52
|
def load(locale)
|
53
|
-
|
54
|
-
|
53
|
+
translations = {}
|
54
|
+
Dir.glob(File.join(@dir, "**/#{locale.code.downcase}.yml")).each do |i|
|
55
|
+
Utils.deep_merge!(translations, ::YAML::load_file(i))
|
56
|
+
end
|
57
|
+
transform(translations)
|
55
58
|
end
|
56
59
|
|
57
60
|
# YAML loader with same +dir+ will be have same +hash+.
|
data/locales/cs.rb
CHANGED
@@ -7,15 +7,16 @@ module R18n
|
|
7
7
|
:wday_names => %w{Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota},
|
8
8
|
:wday_abbrs => %w{Ne Po Út St Čt Pá So},
|
9
9
|
|
10
|
-
:month_names => %w{
|
11
|
-
|
12
|
-
:month_abbrs => %w{
|
10
|
+
:month_names => %w{ledna února března dubna května června července srpna
|
11
|
+
září října listopadu prosince},
|
12
|
+
:month_abbrs => %w{led úno bře dub kvě čer čvc srp zář říj lis pro},
|
13
13
|
:month_standalone => %w{Leden Únor Březen Duben Květen Červen Červenec
|
14
14
|
Srpen Září Říjen Listopad Prosinec},
|
15
15
|
|
16
16
|
:time_am => 'dop.',
|
17
17
|
:time_pm => 'odp.',
|
18
|
-
:date_format => '%
|
18
|
+
:date_format => '%e. %m. %Y',
|
19
|
+
:full_format => '%e. %B',
|
19
20
|
|
20
21
|
:number_decimal => ",",
|
21
22
|
:number_group => " "
|
data/locales/sk.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module R18n
|
3
|
+
class Locales::Sk < Locale
|
4
|
+
set :title => 'Slovenský',
|
5
|
+
:sublocales => %w{cs cz en},
|
6
|
+
|
7
|
+
:wday_names => %w{Nedeľa Pondelok Utorok Streda Štvrtok Piatok Sobota},
|
8
|
+
:wday_abbrs => %w{Ne Po Ut St Št Pi So},
|
9
|
+
|
10
|
+
:month_names => %w{januára februára marca apríla mája júna júla augusta
|
11
|
+
septembra októbra novembra decembra},
|
12
|
+
:month_abbrs => %w{jan feb mar apr máj jún júl aug sep okt nov dec},
|
13
|
+
:month_standalone => %w{Január Február Marec Apríl Máj Jún Júl August
|
14
|
+
September Október November December},
|
15
|
+
|
16
|
+
:time_am => 'dop.',
|
17
|
+
:time_pm => 'odp.',
|
18
|
+
:date_format => '%d.%m.%Y',
|
19
|
+
:full_format => '%e. %B',
|
20
|
+
|
21
|
+
:number_decimal => ",",
|
22
|
+
:number_group => " "
|
23
|
+
|
24
|
+
def pluralize(n)
|
25
|
+
case n
|
26
|
+
when 0
|
27
|
+
0
|
28
|
+
when 1
|
29
|
+
1
|
30
|
+
when 2..4
|
31
|
+
2
|
32
|
+
else
|
33
|
+
'n'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/spec/i18n_spec.rb
CHANGED
@@ -4,7 +4,6 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
4
4
|
describe R18n::I18n do
|
5
5
|
before do
|
6
6
|
@extension_places = R18n.extension_places.clone
|
7
|
-
R18n.cache.clear
|
8
7
|
end
|
9
8
|
|
10
9
|
after do
|
@@ -194,7 +193,7 @@ describe R18n::I18n do
|
|
194
193
|
end
|
195
194
|
|
196
195
|
it "should return first locale with locale file" do
|
197
|
-
i18n = R18n::I18n.new(['no-LC', 'ru', 'en'], DIR)
|
196
|
+
i18n = R18n::I18n.new(['no-TR', 'no-LC', 'ru', 'en'], DIR)
|
198
197
|
i18n.locale.should == R18n::Locale.load('no-LC')
|
199
198
|
i18n.locale.base.should == R18n::Locale.load('ru')
|
200
199
|
end
|
data/spec/locale_spec.rb
CHANGED
data/spec/locales/cs_spec.rb
CHANGED
@@ -3,22 +3,22 @@ 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
|
-
|
7
|
-
|
8
|
-
|
6
|
+
cs = R18n::Locale.load('cs')
|
7
|
+
cs.pluralize(0).should == 0
|
8
|
+
cs.pluralize(1).should == 1
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
cs.pluralize(2).should == 2
|
11
|
+
cs.pluralize(3).should == 2
|
12
|
+
cs.pluralize(4).should == 2
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
cs.pluralize(5).should == 'n'
|
15
|
+
cs.pluralize(21).should == 'n'
|
16
|
+
cs.pluralize(11).should == 'n'
|
17
|
+
cs.pluralize(12).should == 'n'
|
18
|
+
cs.pluralize(22).should == 'n'
|
19
|
+
cs.pluralize(57).should == 'n'
|
20
|
+
cs.pluralize(101).should == 'n'
|
21
|
+
cs.pluralize(102).should == 'n'
|
22
|
+
cs.pluralize(111).should == 'n'
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'locales', 'sk')
|
3
|
+
|
4
|
+
describe R18n::Locales::Sk do
|
5
|
+
it "should use Slovak pluralization" do
|
6
|
+
sk = R18n::Locale.load('Sk')
|
7
|
+
sk.pluralize(0).should == 0
|
8
|
+
sk.pluralize(1).should == 1
|
9
|
+
|
10
|
+
sk.pluralize(2).should == 2
|
11
|
+
sk.pluralize(3).should == 2
|
12
|
+
sk.pluralize(4).should == 2
|
13
|
+
|
14
|
+
sk.pluralize(5).should == 'n'
|
15
|
+
sk.pluralize(21).should == 'n'
|
16
|
+
sk.pluralize(11).should == 'n'
|
17
|
+
sk.pluralize(12).should == 'n'
|
18
|
+
sk.pluralize(22).should == 'n'
|
19
|
+
sk.pluralize(57).should == 'n'
|
20
|
+
sk.pluralize(101).should == 'n'
|
21
|
+
sk.pluralize(102).should == 'n'
|
22
|
+
sk.pluralize(111).should == 'n'
|
23
|
+
end
|
24
|
+
end
|
data/spec/r18n_spec.rb
CHANGED
@@ -44,5 +44,23 @@ describe R18n do
|
|
44
44
|
it "should convert Time to Date" do
|
45
45
|
R18n::Utils.to_date(Time.now).should == Date.today
|
46
46
|
end
|
47
|
+
|
48
|
+
it "should map hash" do
|
49
|
+
R18n::Utils.hash_map({'a' => 1, 'b' => 2}) { |k, v| [k + 'a', v + 1] }.
|
50
|
+
should == { 'aa' => 2, 'ba' => 3 }
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should merge hash recursively" do
|
54
|
+
a = { :a => 1,
|
55
|
+
:b => {:ba => 1, :bb => 1},
|
56
|
+
:c => 1 }
|
57
|
+
b = { :b => {:bb => 2, :bc => 2},
|
58
|
+
:c => 2 }
|
59
|
+
|
60
|
+
R18n::Utils.deep_merge!(a, b)
|
61
|
+
a.should == { :a => 1,
|
62
|
+
:b => { :ba => 1, :bb => 1, :bc => 2 },
|
63
|
+
:c => 1 }
|
64
|
+
end
|
47
65
|
|
48
66
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,9 +6,14 @@ dir = Pathname(__FILE__).dirname
|
|
6
6
|
|
7
7
|
require dir + '../lib/r18n-core'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
TRANSALTIONS = dir + 'translations'
|
10
|
+
DIR = TRANSALTIONS + 'general' unless defined? DIR
|
11
|
+
TWO = TRANSALTIONS + 'two' unless defined? TWO
|
12
|
+
EXT = R18n::Loader::YAML.new(TRANSALTIONS + 'extension') unless defined? EXT
|
13
|
+
|
14
|
+
Spec::Runner.configure do |config|
|
15
|
+
config.before { R18n.cache.clear }
|
16
|
+
end
|
12
17
|
|
13
18
|
gem 'maruku'
|
14
19
|
gem 'RedCloth'
|
data/spec/yaml_loader_spec.rb
CHANGED
@@ -31,4 +31,18 @@ describe R18n::Loader::YAML do
|
|
31
31
|
@loader.hash.should == R18n::Loader::YAML.new(DIR).hash
|
32
32
|
end
|
33
33
|
|
34
|
+
it "should load in dir recursively" do
|
35
|
+
loader = R18n::Loader::YAML.new(TRANSALTIONS)
|
36
|
+
loader.available.should =~ [R18n::Locale.load('ru'),
|
37
|
+
R18n::Locale.load('en'),
|
38
|
+
R18n::Locale.load('fr'),
|
39
|
+
R18n::Locale.load('no-tr'),
|
40
|
+
R18n::Locale.load('no-lc')]
|
41
|
+
|
42
|
+
translation = loader.load(R18n::Locale.load('en'))
|
43
|
+
translation['one'].should == 'One'
|
44
|
+
translation['in']['two'].should == 'Two'
|
45
|
+
translation['ext'].should == 'Extension'
|
46
|
+
end
|
47
|
+
|
34
48
|
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.
|
4
|
+
version: 0.4.3
|
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: 2010-02-
|
12
|
+
date: 2010-02-26 00:00:00 +03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -28,6 +28,7 @@ files:
|
|
28
28
|
- base/it.yml
|
29
29
|
- base/ru.yml
|
30
30
|
- base/pl.yml
|
31
|
+
- base/sk.yml
|
31
32
|
- base/de.yml
|
32
33
|
- base/eo.yml
|
33
34
|
- base/cs.yml
|
@@ -58,6 +59,7 @@ files:
|
|
58
59
|
- locales/zh.rb
|
59
60
|
- locales/fr.rb
|
60
61
|
- locales/ru.rb
|
62
|
+
- locales/sk.rb
|
61
63
|
- locales/pt-br.rb
|
62
64
|
- locales/de.rb
|
63
65
|
- locales/eo.rb
|
@@ -96,6 +98,7 @@ test_files:
|
|
96
98
|
- spec/translated_spec.rb
|
97
99
|
- spec/locales/it_spec.rb
|
98
100
|
- spec/locales/fr_spec.rb
|
101
|
+
- spec/locales/sk_spec.rb
|
99
102
|
- spec/locales/pl_spec.rb
|
100
103
|
- spec/locales/cs_spec.rb
|
101
104
|
- spec/locales/ru_spec.rb
|