r18n-rails-api 1.1.6 → 1.1.7
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.
- checksums.yaml +7 -0
- data/Rakefile +4 -24
- data/lib/r18n-rails-api/backend.rb +8 -1
- data/r18n-rails-api.gemspec +1 -0
- data/spec/backend_spec.rb +21 -17
- data/spec/filters_spec.rb +3 -3
- data/spec/loader_spec.rb +6 -6
- metadata +33 -32
- data/.yardopts +0 -3
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd1fc59c9a4506599bb014be8fb4b2ab9c3626c7
|
4
|
+
data.tar.gz: beecc81ed67e7bc8c46e38009fb19292bbcaa129
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 56d55bd17db8acf6da867e4bb2d31052aaf13420a68bb201f8bfb57877cd5b4e24ca2dc1ee3a2ee31fc823f89e3699e7ce4a97172a97c09ca2c976df851557b5
|
7
|
+
data.tar.gz: 228fab5091587df40014149bbcf4ff8375c2f77577e961657f4c14dd55dfe1c5aa90487e183f5927fed1b082c26e1ad9bfba11466a221bff410243ce45ca22e8
|
data/Rakefile
CHANGED
@@ -1,33 +1,13 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
Bundler::GemHelper.install_tasks
|
8
|
-
rescue LoadError
|
9
|
-
puts "Bundler not available. Install it with: gem install bundler"
|
10
|
-
end
|
11
|
-
|
12
|
-
PKG_NAME = 'r18n-rails-api'
|
13
|
-
require '../r18n-core/lib/r18n-core/version'
|
3
|
+
require 'bundler/setup'
|
4
|
+
Bundler::GemHelper.install_tasks
|
14
5
|
|
15
6
|
require 'rspec/core/rake_task'
|
16
|
-
|
17
7
|
RSpec::Core::RakeTask.new
|
8
|
+
task :default => :spec
|
18
9
|
|
19
|
-
require 'yard'
|
20
|
-
YARD::Rake::YardocTask.new do |yard|
|
21
|
-
yard.options << "--title='R18n Rails API #{R18n::VERSION}'"
|
22
|
-
end
|
23
|
-
|
24
|
-
task :clobber_doc do
|
25
|
-
rm_r 'doc' rescue nil
|
26
|
-
rm_r '.yardoc' rescue nil
|
27
|
-
end
|
28
10
|
task :clobber_package do
|
29
11
|
rm_r 'pkg' rescue nil
|
30
12
|
end
|
31
|
-
task :clobber => [:clobber_package
|
32
|
-
|
33
|
-
task :default => :spec
|
13
|
+
task :clobber => [:clobber_package]
|
@@ -18,6 +18,8 @@ You should have received a copy of the GNU Lesser General Public License
|
|
18
18
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
=end
|
20
20
|
|
21
|
+
require 'i18n/backend/transliterator'
|
22
|
+
|
21
23
|
module R18n
|
22
24
|
# R18n backend for Rails I18n. You must set R18n I18n object before use this
|
23
25
|
# backend:
|
@@ -26,6 +28,8 @@ module R18n
|
|
26
28
|
#
|
27
29
|
# I18n.l Time.now, :format => :full #=> "6th of December, 2009 22:44"
|
28
30
|
class Backend
|
31
|
+
include ::I18n::Backend::Transliterator
|
32
|
+
|
29
33
|
RESERVED_KEYS = [:scope, :default, :separator]
|
30
34
|
|
31
35
|
# Find translation in R18n. It didn’t use +locale+ argument, only current
|
@@ -42,7 +46,10 @@ module R18n
|
|
42
46
|
if result.is_a? Untranslated
|
43
47
|
options = options.reject { |key, value| key == :default }
|
44
48
|
|
45
|
-
|
49
|
+
default = [] if default.nil?
|
50
|
+
default = [default] unless default.is_a? Array
|
51
|
+
|
52
|
+
default.each do |entry|
|
46
53
|
if entry.is_a? Symbol
|
47
54
|
value = lookup(locale, scope, entry, separator, params)
|
48
55
|
return value unless value.is_a? Untranslated
|
data/r18n-rails-api.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.author = 'Andrey "A.I." Sitnik'
|
24
24
|
s.email = 'andrey@sitnik.ru'
|
25
25
|
s.homepage = 'https://github.com/ai/r18n/tree/master/r18n-rails-api'
|
26
|
+
s.license = 'LGPL-3'
|
26
27
|
|
27
28
|
s.add_dependency 'r18n-core', ["= #{R18n::VERSION}"]
|
28
29
|
s.add_dependency 'i18n'
|
data/spec/backend_spec.rb
CHANGED
@@ -8,11 +8,11 @@ describe R18n::Backend do
|
|
8
8
|
R18n.set('en', R18n::Loader::Rails.new)
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
11
|
+
it "returns available locales" do
|
12
12
|
I18n.available_locales.should =~ [:en, :ru]
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "localizes objects" do
|
16
16
|
time = Time.at(0).utc
|
17
17
|
date = Date.parse('1970-01-01')
|
18
18
|
|
@@ -25,34 +25,34 @@ describe R18n::Backend do
|
|
25
25
|
I18n.l(-5000.5).should == '−5,000.5'
|
26
26
|
end
|
27
27
|
|
28
|
-
it "
|
28
|
+
it "translates by key and scope" do
|
29
29
|
I18n.t('in.another.level').should == 'Hierarchical'
|
30
30
|
I18n.t(:level, :scope => 'in.another').should == 'Hierarchical'
|
31
31
|
I18n.t(:'another.level', :scope => 'in').should == 'Hierarchical'
|
32
32
|
end
|
33
33
|
|
34
|
-
it "
|
34
|
+
it "uses pluralization and variables" do
|
35
35
|
I18n.t('users', :count => 0).should == '0 users'
|
36
36
|
I18n.t('users', :count => 1).should == '1 user'
|
37
37
|
I18n.t('users', :count => 5).should == '5 users'
|
38
38
|
end
|
39
39
|
|
40
|
-
it "
|
40
|
+
it "uses another separator" do
|
41
41
|
I18n.t('in/another/level', :separator => '/').should == 'Hierarchical'
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "translates array" do
|
45
45
|
I18n.t(['in.another.level', 'in.default']).should == ['Hierarchical',
|
46
46
|
'Default']
|
47
47
|
end
|
48
48
|
|
49
|
-
it "
|
49
|
+
it "uses default value" do
|
50
50
|
I18n.t(:missed, :default => 'Default').should == 'Default'
|
51
51
|
I18n.t(:missed, :default => :default, :scope => :in).should == 'Default'
|
52
52
|
I18n.t(:missed, :default => [:also_no, :'in.default']).should == 'Default'
|
53
53
|
end
|
54
54
|
|
55
|
-
it "
|
55
|
+
it "raises error on no translation" do
|
56
56
|
lambda {
|
57
57
|
I18n.backend.translate(:en, :missed)
|
58
58
|
}.should raise_error(::I18n::MissingTranslationData)
|
@@ -61,23 +61,23 @@ describe R18n::Backend do
|
|
61
61
|
}.should raise_error(::I18n::MissingTranslationData)
|
62
62
|
end
|
63
63
|
|
64
|
-
it "
|
64
|
+
it "reloads translations" do
|
65
65
|
lambda { I18n.t(:other) }.should raise_error(::I18n::MissingTranslationData)
|
66
66
|
I18n.load_path << OTHER
|
67
67
|
I18n.reload!
|
68
68
|
I18n.t(:other).should == 'Other'
|
69
69
|
end
|
70
70
|
|
71
|
-
it "
|
71
|
+
it "returns plain classes" do
|
72
72
|
I18n.t('in.another.level').class.should == ActiveSupport::SafeBuffer
|
73
73
|
I18n.t('in.another').class.should == Hash
|
74
74
|
end
|
75
75
|
|
76
|
-
it "
|
76
|
+
it "returns correct unpluralized hash" do
|
77
77
|
I18n.t('users').should == { :one => '1 user', :other => '%{count} users' }
|
78
78
|
end
|
79
79
|
|
80
|
-
it "
|
80
|
+
it "corrects detect untranslated, whem path is deeper than string" do
|
81
81
|
lambda {
|
82
82
|
I18n.t('in.another.level.deeper')
|
83
83
|
}.should raise_error(::I18n::MissingTranslationData)
|
@@ -87,28 +87,28 @@ describe R18n::Backend do
|
|
87
87
|
}.should raise_error(::I18n::MissingTranslationData)
|
88
88
|
end
|
89
89
|
|
90
|
-
it "
|
90
|
+
it "doesn't call String methods" do
|
91
91
|
I18n.t('in.another').class.should == Hash
|
92
92
|
end
|
93
93
|
|
94
|
-
it "
|
94
|
+
it "doesn't call object methods" do
|
95
95
|
lambda {
|
96
96
|
I18n.t('in.another.level.to_sym')
|
97
97
|
}.should raise_error(::I18n::MissingTranslationData)
|
98
98
|
end
|
99
99
|
|
100
|
-
it "
|
100
|
+
it "works deeper pluralization" do
|
101
101
|
I18n.t('users.other', :count => 5).should == '5 users'
|
102
102
|
end
|
103
103
|
|
104
|
-
it "
|
104
|
+
it "returns hash with symbols keys" do
|
105
105
|
I18n.t('in').should == {
|
106
106
|
:another => { :level => 'Hierarchical' },
|
107
107
|
:default => 'Default'
|
108
108
|
}
|
109
109
|
end
|
110
110
|
|
111
|
-
it "
|
111
|
+
it "changes locale in place" do
|
112
112
|
I18n.load_path << PL
|
113
113
|
I18n.t('users', :count => 5).should == '5 users'
|
114
114
|
I18n.t('users', :count => 5, :locale => :ru).should == 'Много'
|
@@ -116,4 +116,8 @@ describe R18n::Backend do
|
|
116
116
|
I18n.l(Date.parse('1970-01-01'), :locale => :ru).should == '01.01.1970'
|
117
117
|
end
|
118
118
|
|
119
|
+
it "has transliterate method" do
|
120
|
+
I18n.transliterate('café').should == 'cafe'
|
121
|
+
end
|
122
|
+
|
119
123
|
end
|
data/spec/filters_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
3
3
|
|
4
4
|
describe 'Rails filters' do
|
5
5
|
|
6
|
-
it "
|
6
|
+
it "uses named variables" do
|
7
7
|
i18n = R18n::Translation.new(EN, '', :locale => EN,
|
8
8
|
:translations => { 'echo' => 'Value is %{value}' })
|
9
9
|
|
@@ -14,13 +14,13 @@ describe 'Rails filters' do
|
|
14
14
|
i18n.echo.should == 'Value is %{value}'
|
15
15
|
end
|
16
16
|
|
17
|
-
it "
|
17
|
+
it "uses old variables syntax" do
|
18
18
|
i18n = R18n::Translation.new(EN, '', :locale => EN,
|
19
19
|
:translations => { 'echo' => 'Value is {{value}}' })
|
20
20
|
i18n.echo(:value => 'Old').should == 'Value is Old'
|
21
21
|
end
|
22
22
|
|
23
|
-
it "
|
23
|
+
it "pluralizes by variable %{count}" do
|
24
24
|
i18n = R18n::Translation.new(EN, '', :locale => EN,
|
25
25
|
:translations => {
|
26
26
|
'users' => R18n::Typed.new('pl', {
|
data/spec/loader_spec.rb
CHANGED
@@ -7,15 +7,15 @@ describe R18n::Loader::Rails do
|
|
7
7
|
@loader = R18n::Loader::Rails.new
|
8
8
|
end
|
9
9
|
|
10
|
-
it "
|
10
|
+
it "returns available locales" do
|
11
11
|
@loader.available.should =~ [EN, RU]
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "loads translation" do
|
15
15
|
@loader.load(RU).should == { 'one' => 'Один', 'two' => 'Два' }
|
16
16
|
end
|
17
17
|
|
18
|
-
it "
|
18
|
+
it "changes pluralization" do
|
19
19
|
@loader.load(EN).should == {
|
20
20
|
'users' => R18n::Typed.new('pl', {
|
21
21
|
0 => 'Zero', 1 => 'One', 2 => 'Few', 'n' => 'Other'
|
@@ -23,7 +23,7 @@ describe R18n::Loader::Rails do
|
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
it "
|
26
|
+
it "changes Russian pluralization" do
|
27
27
|
I18n.load_path = [PL]
|
28
28
|
@loader.load(RU).should == {
|
29
29
|
'users' => R18n::Typed.new('pl', {
|
@@ -32,13 +32,13 @@ describe R18n::Loader::Rails do
|
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "reloads translations on load_path changes" do
|
36
36
|
I18n.load_path << OTHER
|
37
37
|
@loader.load(RU).should == { 'one' => 'Один', 'two' => 'Два',
|
38
38
|
'three' => 'Три' }
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
41
|
+
it "changes hash on load_path changes" do
|
42
42
|
before = @loader.hash
|
43
43
|
I18n.load_path << OTHER
|
44
44
|
@loader.hash.should_not == before
|
metadata
CHANGED
@@ -1,53 +1,50 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r18n-rails-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Andrey "A.I." Sitnik
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: r18n-core
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - '='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.1.
|
19
|
+
version: 1.1.7
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - '='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.1.
|
26
|
+
version: 1.1.7
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: i18n
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
|
-
description:
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
41
|
+
description: |2
|
42
|
+
R18n backend for Rails I18n and R18n filters and loader to support Rails
|
43
|
+
translation format.
|
44
|
+
R18n has nice Ruby-style syntax, filters, flexible locales, custom loaders,
|
45
|
+
translation support for any classes, time and number localization, several
|
46
|
+
user language support, agnostic core package with out-of-box support for
|
47
|
+
Rails, Sinatra and desktop applications.
|
51
48
|
email: andrey@sitnik.ru
|
52
49
|
executables: []
|
53
50
|
extensions: []
|
@@ -56,7 +53,6 @@ extra_rdoc_files:
|
|
56
53
|
- LICENSE
|
57
54
|
files:
|
58
55
|
- .rspec
|
59
|
-
- .yardopts
|
60
56
|
- LICENSE
|
61
57
|
- README.md
|
62
58
|
- Rakefile
|
@@ -79,34 +75,39 @@ files:
|
|
79
75
|
- spec/loader_spec.rb
|
80
76
|
- spec/spec_helper.rb
|
81
77
|
homepage: https://github.com/ai/r18n/tree/master/r18n-rails-api
|
82
|
-
licenses:
|
78
|
+
licenses:
|
79
|
+
- LGPL-3
|
80
|
+
metadata: {}
|
83
81
|
post_install_message:
|
84
82
|
rdoc_options: []
|
85
83
|
require_paths:
|
86
84
|
- lib
|
87
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
86
|
requirements:
|
90
|
-
- -
|
87
|
+
- - '>='
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: '0'
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
hash: 3657696565378386384
|
96
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
91
|
requirements:
|
99
|
-
- -
|
92
|
+
- - '>='
|
100
93
|
- !ruby/object:Gem::Version
|
101
94
|
version: '0'
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
hash: 3657696565378386384
|
105
95
|
requirements: []
|
106
96
|
rubyforge_project:
|
107
|
-
rubygems_version:
|
97
|
+
rubygems_version: 2.0.3
|
108
98
|
signing_key:
|
109
|
-
specification_version:
|
99
|
+
specification_version: 4
|
110
100
|
summary: Rails I18n compatibility for R18n
|
111
|
-
test_files:
|
112
|
-
|
101
|
+
test_files:
|
102
|
+
- spec/backend_spec.rb
|
103
|
+
- spec/data/general/en.yml
|
104
|
+
- spec/data/general/ru.yml
|
105
|
+
- spec/data/other/en.yml
|
106
|
+
- spec/data/other/ru.yml
|
107
|
+
- spec/data/pl/ru.yml
|
108
|
+
- spec/data/simple/en.yml
|
109
|
+
- spec/data/simple/ru.rb
|
110
|
+
- spec/data/simple/russian.yml
|
111
|
+
- spec/filters_spec.rb
|
112
|
+
- spec/loader_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
data/.yardopts
DELETED