russian 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.textile +44 -0
- data/Rakefile +55 -0
- data/TODO +11 -0
- data/init.rb +3 -0
- data/lib/russian.rb +91 -0
- data/lib/russian/action_view_ext/helpers/date_helper.rb +90 -0
- data/lib/russian/active_record_ext/custom_error_message.rb +33 -0
- data/lib/russian/backend/advanced.rb +104 -0
- data/lib/russian/locale/actionview.yml +113 -0
- data/lib/russian/locale/activerecord.yml +48 -0
- data/lib/russian/locale/activesupport.yml +5 -0
- data/lib/russian/locale/datetime.yml +29 -0
- data/lib/russian/locale/pluralize.rb +22 -0
- data/lib/vendor/i18n/MIT-LICENSE +20 -0
- data/lib/vendor/i18n/README.textile +18 -0
- data/lib/vendor/i18n/i18n.gemspec +24 -0
- data/lib/vendor/i18n/lib/i18n.rb +180 -0
- data/lib/vendor/i18n/lib/i18n/backend/simple.rb +192 -0
- data/lib/vendor/i18n/lib/i18n/exceptions.rb +53 -0
- data/lib/vendor/i18n/test/all.rb +5 -0
- data/lib/vendor/i18n/test/i18n_exceptions_test.rb +100 -0
- data/lib/vendor/i18n/test/i18n_test.rb +125 -0
- data/lib/vendor/i18n/test/locale/en-US.rb +1 -0
- data/lib/vendor/i18n/test/locale/en-US.yml +3 -0
- data/lib/vendor/i18n/test/simple_backend_test.rb +473 -0
- data/spec/i18n/locale/datetime_spec.rb +91 -0
- data/spec/i18n/locale/pluralization_spec.rb +20 -0
- data/spec/russian_spec.rb +141 -0
- data/spec/spec_helper.rb +5 -0
- metadata +100 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe I18n, "Russian Date/Time localization" do
|
4
|
+
before(:each) do
|
5
|
+
@date = Date.parse("1985-12-01")
|
6
|
+
@time = Time.local(1985, 12, 01, 16, 05)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "with date formats" do
|
10
|
+
it "should use default format" do
|
11
|
+
l(@date).should == "01.12.1985"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should use short format" do
|
15
|
+
l(@date, :format => :short).should == "01 дек."
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should use long format" do
|
19
|
+
l(@date, :format => :long).should == "01 декабря 1985"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "with date day names" do
|
24
|
+
it "should use day names" do
|
25
|
+
l(@date, :format => "%d %B (%A)").should == "01 декабря (воскресенье)"
|
26
|
+
l(@date, :format => "%d %B %Y года было %A").should == "01 декабря 1985 года было воскресенье"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should use standalone day names" do
|
30
|
+
l(@date, :format => "%A").should == "Воскресенье"
|
31
|
+
l(@date, :format => "%A, %d %B").should == "Воскресенье, 01 декабря"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should use abbreviated day names" do
|
35
|
+
l(@date, :format => "%a").should == "Вс"
|
36
|
+
l(@date, :format => "%a, %d %b %Y").should == "Вс, 01 дек. 1985"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "with month names" do
|
41
|
+
it "should use month names" do
|
42
|
+
l(@date, :format => "%d %B").should == "01 декабря"
|
43
|
+
l(@date, :format => "%e %B %Y").should == " 1 декабря 1985"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should use standalone month names" do
|
47
|
+
l(@date, :format => "%B").should == "Декабрь"
|
48
|
+
l(@date, :format => "%B %Y").should == "Декабрь 1985"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should use abbreviated month names" do
|
52
|
+
@date = Date.parse("1985-03-01")
|
53
|
+
l(@date, :format => "%d %b").should == "01 марта"
|
54
|
+
l(@date, :format => "%e %b %Y").should == " 1 марта 1985"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should use standalone abbreviated month names" do
|
58
|
+
@date = Date.parse("1985-03-01")
|
59
|
+
l(@date, :format => "%b").should == "март"
|
60
|
+
l(@date, :format => "%b %Y").should == "март 1985"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should define default date components order: day, month, year" do
|
65
|
+
I18n.backend.translate(Russian.locale, :"date.order").should == [:day, :month, :year]
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "with time formats" do
|
69
|
+
it "should use default format" do
|
70
|
+
l(@time).should =~ /^Вс, 01 дек. 1985, 16:05:00/
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should use short format" do
|
74
|
+
l(@time, :format => :short).should == "01 дек., 16:05"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should use long format" do
|
78
|
+
l(@time, :format => :long).should == "01 декабря 1985, 16:05"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should define am and pm" do
|
82
|
+
I18n.backend.translate(Russian.locale, :"time.am").should_not be_nil
|
83
|
+
I18n.backend.translate(Russian.locale, :"time.pm").should_not be_nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
protected
|
88
|
+
def l(object, options = {})
|
89
|
+
I18n.l(object, options.merge( { :locale => Russian.locale }))
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe I18n, "Russian pluralization" do
|
4
|
+
before(:each) do
|
5
|
+
@hash = {:one => 'вещь', :few => 'вещи', :many => 'вещей', :other => 'вещи'}
|
6
|
+
@backend = I18n.backend
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should pluralize correctly" do
|
10
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 1).should == 'вещь'
|
11
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 2).should == 'вещи'
|
12
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 3).should == 'вещи'
|
13
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 5).should == 'вещей'
|
14
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 10).should == 'вещей'
|
15
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 21).should == 'вещь'
|
16
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 29).should == 'вещей'
|
17
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 129).should == 'вещей'
|
18
|
+
@backend.send(:pluralize, :'ru-RU', @hash, 131).should == 'вещь'
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe Russian, "VERSION" do
|
4
|
+
it "should be defined" do
|
5
|
+
%w(MAJOR MINOR TINY STRING).each do |v|
|
6
|
+
Russian::VERSION.const_defined?(v).should == true
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Russian do
|
12
|
+
describe "with locale" do
|
13
|
+
it "should define :'ru-RU' LOCALE" do
|
14
|
+
Russian::LOCALE.should == :'ru-RU'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should provide ::locale proxy" do
|
18
|
+
Russian.locale.should == Russian::LOCALE
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "with custom backend class" do
|
23
|
+
it "should define i18n_backend_class" do
|
24
|
+
Russian.i18n_backend_class.should == I18n::Backend::Advanced
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "during i18n initialization" do
|
29
|
+
it "should set I18n backend to an instance of a custom backend" do
|
30
|
+
Russian.init_i18n
|
31
|
+
I18n.backend.class.should == Russian.i18n_backend_class
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should set default locale to Russian locale" do
|
35
|
+
Russian.init_i18n
|
36
|
+
I18n.default_locale.should == Russian.locale
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "loading locales" do
|
40
|
+
before(:all) do
|
41
|
+
Russian.init_i18n
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should load datetime translations" do
|
45
|
+
lookup(:"date.formats.default").should_not be_nil
|
46
|
+
lookup(:"time.formats.default").should_not be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should load pluralization rules" do
|
50
|
+
lookup(:"pluralize").should_not be_nil
|
51
|
+
lookup(:"pluralize").is_a?(Proc).should be_true
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should load actionview translations" do
|
55
|
+
lookup(:"number.currency.format.format").should_not be_nil
|
56
|
+
lookup(:"datetime.distance_in_words.half_a_minute").should_not be_nil
|
57
|
+
lookup(:"activerecord.errors.template.header").should_not be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should load activerecord translations" do
|
61
|
+
lookup(:"activerecord.errors.messages.invalid").should_not be_nil
|
62
|
+
lookup(:"activerecord.errors.messages.greater_than_or_equal_to").should_not be_nil
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should load activesupport translations" do
|
66
|
+
lookup(:"support.array.sentence_connector").should_not be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
def lookup(*args)
|
70
|
+
I18n.backend.send(:lookup, Russian.locale, *args)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "with localize proxy" do
|
76
|
+
before(:all) do
|
77
|
+
@time = mock(:time)
|
78
|
+
@options = { :format => "%d %B %Y" }
|
79
|
+
end
|
80
|
+
|
81
|
+
%w(l localize).each do |method|
|
82
|
+
it "#{method} should call I18n backend localize" do
|
83
|
+
I18n.should_receive(:localize).with(@time, @options.merge({ :locale => Russian.locale }))
|
84
|
+
Russian.send(method, @time, @options)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "with translate proxy" do
|
90
|
+
before(:all) do
|
91
|
+
@object = :bar
|
92
|
+
@options = { :scope => :foo }
|
93
|
+
end
|
94
|
+
|
95
|
+
%w(t translate).each do |method|
|
96
|
+
it "#{method} should call I18n backend translate" do
|
97
|
+
I18n.should_receive(:translate).with(@object, @options.merge({ :locale => Russian.locale }))
|
98
|
+
Russian.send(method, @object, @options)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "strftime" do
|
104
|
+
before(:all) do
|
105
|
+
@time = mock(:time)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should call localize with object and format" do
|
109
|
+
format = "%d %B %Y"
|
110
|
+
Russian.should_receive(:localize).with(@time, { :format => format })
|
111
|
+
Russian.strftime(@time, format)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should call localize with object and default format when format is not specified" do
|
115
|
+
Russian.should_receive(:localize).with(@time, { :format => :default })
|
116
|
+
Russian.strftime(@time)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "pluralize" do
|
121
|
+
it "should pluralize with variants given" do
|
122
|
+
variants = %w(вещь вещи вещей)
|
123
|
+
|
124
|
+
Russian.pluralize(1, *variants).should == "вещь"
|
125
|
+
Russian.pluralize(2, *variants).should == 'вещи'
|
126
|
+
Russian.pluralize(3, *variants).should == 'вещи'
|
127
|
+
Russian.pluralize(5, *variants).should == 'вещей'
|
128
|
+
Russian.pluralize(10, *variants).should == 'вещей'
|
129
|
+
Russian.pluralize(21, *variants).should == 'вещь'
|
130
|
+
Russian.pluralize(29, *variants).should == 'вещей'
|
131
|
+
Russian.pluralize(129, *variants).should == 'вещей'
|
132
|
+
Russian.pluralize(131, *variants).should == 'вещь'
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should raise an exception when there are not enough variants" do
|
136
|
+
lambda { Russian.pluralize(1) }.should raise_error(ArgumentError)
|
137
|
+
lambda { Russian.pluralize(1, "вещь") }.should raise_error(ArgumentError)
|
138
|
+
lambda { Russian.pluralize(1, "вещь", "вещи") }.should raise_error(ArgumentError)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: russian
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yaroslav Markin
|
8
|
+
autorequire: russian
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-01 00:00:00 +04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Russian language support for Ruby and Rails
|
17
|
+
email: yaroslav@markin.net
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.textile
|
24
|
+
- LICENSE
|
25
|
+
- TODO
|
26
|
+
files:
|
27
|
+
- LICENSE
|
28
|
+
- README.textile
|
29
|
+
- Rakefile
|
30
|
+
- TODO
|
31
|
+
- init.rb
|
32
|
+
- lib/russian
|
33
|
+
- lib/russian/action_view_ext
|
34
|
+
- lib/russian/action_view_ext/helpers
|
35
|
+
- lib/russian/action_view_ext/helpers/date_helper.rb
|
36
|
+
- lib/russian/active_record_ext
|
37
|
+
- lib/russian/active_record_ext/custom_error_message.rb
|
38
|
+
- lib/russian/backend
|
39
|
+
- lib/russian/backend/advanced.rb
|
40
|
+
- lib/russian/core_ext
|
41
|
+
- lib/russian/locale
|
42
|
+
- lib/russian/locale/actionview.yml
|
43
|
+
- lib/russian/locale/activerecord.yml
|
44
|
+
- lib/russian/locale/activesupport.yml
|
45
|
+
- lib/russian/locale/datetime.yml
|
46
|
+
- lib/russian/locale/pluralize.rb
|
47
|
+
- lib/russian.rb
|
48
|
+
- lib/vendor
|
49
|
+
- lib/vendor/i18n
|
50
|
+
- lib/vendor/i18n/i18n.gemspec
|
51
|
+
- lib/vendor/i18n/lib
|
52
|
+
- lib/vendor/i18n/lib/i18n
|
53
|
+
- lib/vendor/i18n/lib/i18n/backend
|
54
|
+
- lib/vendor/i18n/lib/i18n/backend/simple.rb
|
55
|
+
- lib/vendor/i18n/lib/i18n/exceptions.rb
|
56
|
+
- lib/vendor/i18n/lib/i18n.rb
|
57
|
+
- lib/vendor/i18n/MIT-LICENSE
|
58
|
+
- lib/vendor/i18n/README.textile
|
59
|
+
- lib/vendor/i18n/test
|
60
|
+
- lib/vendor/i18n/test/all.rb
|
61
|
+
- lib/vendor/i18n/test/i18n_exceptions_test.rb
|
62
|
+
- lib/vendor/i18n/test/i18n_test.rb
|
63
|
+
- lib/vendor/i18n/test/locale
|
64
|
+
- lib/vendor/i18n/test/locale/en-US.rb
|
65
|
+
- lib/vendor/i18n/test/locale/en-US.yml
|
66
|
+
- lib/vendor/i18n/test/simple_backend_test.rb
|
67
|
+
- spec/i18n
|
68
|
+
- spec/i18n/locale
|
69
|
+
- spec/i18n/locale/datetime_spec.rb
|
70
|
+
- spec/i18n/locale/pluralization_spec.rb
|
71
|
+
- spec/russian_spec.rb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: http://github.com/yaroslav/russian/
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: "0"
|
85
|
+
version:
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
91
|
+
version:
|
92
|
+
requirements: []
|
93
|
+
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.2.0
|
96
|
+
signing_key:
|
97
|
+
specification_version: 2
|
98
|
+
summary: Russian language support for Ruby and Rails
|
99
|
+
test_files: []
|
100
|
+
|