i18n_backend_database 0.0.1
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/LICENSE +29 -0
- data/README.textile +125 -0
- data/data/locales.yml +4 -0
- data/generators/i18n_backend_database/i18n_backend_database_generator.rb +8 -0
- data/generators/i18n_backend_database/templates/migrate/create_i18n_tables.rb +25 -0
- data/init.rb +1 -0
- data/lib/controllers/locales_controller.rb +86 -0
- data/lib/controllers/translations_controller.rb +141 -0
- data/lib/ext/i18n.rb +68 -0
- data/lib/google_language.rb +33 -0
- data/lib/i18n_backend_database.rb +9 -0
- data/lib/i18n_backend_database/database.rb +263 -0
- data/lib/i18n_util.rb +148 -0
- data/lib/models/locale.rb +67 -0
- data/lib/models/translation.rb +46 -0
- data/lib/models/translation_option.rb +26 -0
- data/lib/public/images/custom1_bar.gif +0 -0
- data/lib/public/images/custom1_box.gif +0 -0
- data/lib/public/images/percentImage.png +0 -0
- data/lib/public/images/percentImage_back.png +0 -0
- data/lib/public/images/percentImage_back1.png +0 -0
- data/lib/public/images/percentImage_back2.png +0 -0
- data/lib/public/images/percentImage_back3.png +0 -0
- data/lib/public/images/percentImage_back4.png +0 -0
- data/lib/public/javascripts/jsProgressBarHandler.js +509 -0
- data/lib/routing.rb +15 -0
- data/lib/views/layouts/translations.html.erb +23 -0
- data/lib/views/locales/edit.html.erb +20 -0
- data/lib/views/locales/index.html.erb +22 -0
- data/lib/views/locales/new.html.erb +19 -0
- data/lib/views/locales/show.html.erb +14 -0
- data/lib/views/translations/asset_translations.html.erb +32 -0
- data/lib/views/translations/edit.html.erb +35 -0
- data/lib/views/translations/index.html.erb +27 -0
- data/lib/views/translations/new.html.erb +19 -0
- data/lib/views/translations/show.html.erb +32 -0
- data/lib/views/translations/translations.html.erb +28 -0
- data/lib/views/translations/update.rjs +7 -0
- data/routes.rb +3 -0
- data/spec/assets/public/es/favicons/favicon1.gif +0 -0
- data/spec/assets/public/es/images/icons/icon1.gif +0 -0
- data/spec/assets/public/es/images/image1.gif +0 -0
- data/spec/assets/public/favicons/favicon1.gif +0 -0
- data/spec/assets/public/favicons/favicon2.gif +0 -0
- data/spec/assets/public/images/icons/icon1.gif +0 -0
- data/spec/assets/public/images/icons/icon2.gif +0 -0
- data/spec/assets/public/images/image1.gif +0 -0
- data/spec/assets/public/images/image2.gif +0 -0
- data/spec/assets/public/images/promo/sfc08_140x400_3.gif +0 -0
- data/spec/assets/views/test_view1.html.erb +1 -0
- data/spec/assets/views/test_view2.html.erb +30 -0
- data/spec/caching_spec.rb +87 -0
- data/spec/controllers/locales_controller_spec.rb +173 -0
- data/spec/controllers/locales_routing_spec.rb +59 -0
- data/spec/controllers/translations_controller_spec.rb +189 -0
- data/spec/controllers/translations_routing_spec.rb +59 -0
- data/spec/database_spec.rb +199 -0
- data/spec/i18n_ext_spec.rb +40 -0
- data/spec/localize_spec.rb +66 -0
- data/spec/localize_text_spec.rb +76 -0
- data/spec/models/locale_spec.rb +111 -0
- data/spec/models/translation_spec.rb +44 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/translate_asset_spec.rb +57 -0
- data/spec/translate_spec.rb +546 -0
- data/tasks/i18n.rake +60 -0
- metadata +155 -0
@@ -0,0 +1,199 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe I18n::Backend::Database do
|
4
|
+
describe "an instance" do
|
5
|
+
before {
|
6
|
+
I18n.locale = "es"
|
7
|
+
@locales = [:en, :es, :it]
|
8
|
+
@locale = mock_model(Locale, { :code => "es" })
|
9
|
+
Locale.stub!(:available_locales).and_return(@locales)
|
10
|
+
Locale.stub!(:find_by_code).and_return(@locale)
|
11
|
+
@database = I18n::Backend::Database.new
|
12
|
+
}
|
13
|
+
|
14
|
+
it "should use the current Rails cache store if none are provided" do
|
15
|
+
@database.cache_store.should == Rails.cache
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should use a custom cache store if provided" do
|
19
|
+
@database = I18n::Backend::Database.new({:cache_store => :mem_cache_store})
|
20
|
+
@database.cache_store.class.should == ActiveSupport::Cache::MemCacheStore
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have default localize text tag if none provided" do
|
24
|
+
@database.localize_text_tag.should == '^^'
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should use custom localize text tag if provided" do
|
28
|
+
@database = I18n::Backend::Database.new({:localize_text_tag => '##'})
|
29
|
+
@database.localize_text_tag.should == '##'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should delegate the call to available_locales to the Locale class" do
|
33
|
+
Locale.should_receive(:available_locales)
|
34
|
+
@database.available_locales
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return all the available locales on a call to available_locales" do
|
38
|
+
@database.available_locales.should == @locales
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return a cache key of locale:key on call to build_cache_key" do
|
42
|
+
hash_key = Translation.hk("hola me amigo!")
|
43
|
+
Translation.ck(@locale, "hola me amigo!", 1).should == "es:#{hash_key}"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should generate a Base64 encoded (minus newline), MD5 encrypted hash, based on the key" do
|
47
|
+
encrypted_key = Digest::MD5.hexdigest("aoeuaoeu")
|
48
|
+
completed_key = Translation.hk("aoeuaoeu")
|
49
|
+
encrypted_key.should == Base64.decode64(completed_key).gsub(/\n/, '')
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have a nil locale cache by default" do
|
53
|
+
@database.locale.should == nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should be able to set the locale cache by passing a locale code into locale=" do
|
57
|
+
@database.locale = "es"
|
58
|
+
@database.locale.should == @locale
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# describe "omg an aminal" do
|
63
|
+
#
|
64
|
+
# before(:each) do
|
65
|
+
# Locale.instance_variable_set("@validate_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
66
|
+
# Locale.create!(:code => "en")
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
# it "should contain one 'blank' key in the database" do
|
70
|
+
# Locale.validates_presence_of :code
|
71
|
+
# l = Locale.new
|
72
|
+
# l.valid?
|
73
|
+
# Translation.find_by_value("can't be blank").should_not be_nil
|
74
|
+
# end
|
75
|
+
#
|
76
|
+
# it "should contain one 'blank' key and one custom 'blank' key in the database" do
|
77
|
+
# Locale.validates_presence_of :code, :message => "ain't blank sucka"
|
78
|
+
# l = Locale.new
|
79
|
+
# l.valid?
|
80
|
+
# Translation.find_by_value("ain't blank sucka").should_not be_nil
|
81
|
+
# Translation.find_by_value("can't be blank").should be_nil
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# it "should use the blank code if a custom code is present, but not enabled" do
|
85
|
+
# Locale.validates_presence_of :code, :message => "ain't blank sucka"
|
86
|
+
#
|
87
|
+
# l = Locale.new
|
88
|
+
# l.valid?
|
89
|
+
# l.errors_on(:code).should include("ain't blank sucka")
|
90
|
+
#
|
91
|
+
# Locale.validates_presence_of :code
|
92
|
+
#
|
93
|
+
# l = Locale.new
|
94
|
+
# l.valid?
|
95
|
+
# l.errors_on(:code).should include("can't be blank")
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
|
99
|
+
describe "translating a key" do
|
100
|
+
describe "for the first time in the default locale" do
|
101
|
+
before {
|
102
|
+
I18n.locale = "en"
|
103
|
+
I18n.default_locale = "en"
|
104
|
+
Locale.create({:code => "en", :name => "English"})
|
105
|
+
@database = I18n::Backend::Database.new
|
106
|
+
@database.translate(:en, "dog")
|
107
|
+
}
|
108
|
+
|
109
|
+
it "should set the value of the translation" do
|
110
|
+
Translation.first.value.should == "dog"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "for the first time in an alternate locale" do
|
115
|
+
before {
|
116
|
+
I18n.locale = "es"
|
117
|
+
I18n.default_locale = "en"
|
118
|
+
Locale.create({:code => "en", :name => "English"})
|
119
|
+
Locale.create({:code => "es", :name => "Spanish"})
|
120
|
+
@database = I18n::Backend::Database.new
|
121
|
+
@database.translate(:es, "dog")
|
122
|
+
}
|
123
|
+
|
124
|
+
it "should set the value of the translation to nil" do
|
125
|
+
Translation.first.value.should == nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "setting a locale in context" do
|
131
|
+
before {
|
132
|
+
I18n.locale = "es"
|
133
|
+
@locale = mock_model(Locale, { :code => "es" })
|
134
|
+
@database = I18n::Backend::Database.new
|
135
|
+
}
|
136
|
+
|
137
|
+
describe "on a new instance when the cache locale is nil" do
|
138
|
+
before {
|
139
|
+
Locale.stub!(:find_by_code).and_return(@locale)
|
140
|
+
}
|
141
|
+
|
142
|
+
it "should return a locale record for the current locale in context" do
|
143
|
+
Locale.should_receive(:find_by_code).with(I18n.locale)
|
144
|
+
@database.send(:locale_in_context, I18n.locale)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "when passing in a temporary locale that's different from the local cache" do
|
149
|
+
before {
|
150
|
+
Locale.stub!(:find_by_code).with("it").and_return(@locale)
|
151
|
+
@database.locale = "it"
|
152
|
+
}
|
153
|
+
|
154
|
+
it "should return a locale record for the temporary locale" do
|
155
|
+
Locale.should_receive(:find_by_code).with("it")
|
156
|
+
@database.send(:locale_in_context, "it")
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should set the locale to the temporary value" do
|
160
|
+
@database.send(:locale_in_context, "it").should == @locale
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe "when passing in a temporary locale that's the same as the local cache" do
|
165
|
+
before {
|
166
|
+
Locale.stub!(:find_by_code).with("es").and_return(@locale)
|
167
|
+
@database.locale = "es"
|
168
|
+
}
|
169
|
+
|
170
|
+
it "should set the locale to the temporary value" do
|
171
|
+
@database.send(:locale_in_context, "es").should == @locale
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "when the locale is the same as the cache" do
|
176
|
+
before {
|
177
|
+
Locale.stub!(:find_by_code).with("es").and_return(@locale)
|
178
|
+
}
|
179
|
+
|
180
|
+
it "should update the locale cache with the new locale" do
|
181
|
+
@database.locale = "es"
|
182
|
+
@database.send(:locale_in_context, "es").should == @database.locale
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe "when the locale is different than the cache" do
|
187
|
+
before {
|
188
|
+
Locale.stub!(:find_by_code).with("es").and_return(@locale)
|
189
|
+
I18n.locale = "it"
|
190
|
+
}
|
191
|
+
|
192
|
+
it "should update the locale cache with the new locale" do
|
193
|
+
@database.locale = "es"
|
194
|
+
Locale.should_receive(:find_by_code).with("it")
|
195
|
+
@database.send(:locale_in_context, "it")
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe I18n do
|
4
|
+
|
5
|
+
describe "with default locale en" do
|
6
|
+
before(:each) do
|
7
|
+
I18n.default_locale = "en"
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "and locale en" do
|
11
|
+
before(:each) do
|
12
|
+
I18n.locale = "en"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return empty local segment" do
|
16
|
+
I18n.locale_segment.should == ''
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return empty local segment using alias" do
|
20
|
+
I18n.ls.should == ''
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "and locale es" do
|
25
|
+
before(:each) do
|
26
|
+
I18n.locale = "es"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return es local segment" do
|
30
|
+
I18n.locale_segment.should == '/es'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return es local segment using alias" do
|
34
|
+
I18n.ls.should == '/es'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe I18n::Backend::Database do
|
4
|
+
before(:each) do
|
5
|
+
@backend = I18n::Backend::Database.new
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:each) do
|
9
|
+
@backend.cache_store.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with default locale en" do
|
13
|
+
before(:each) do
|
14
|
+
I18n.default_locale = "en"
|
15
|
+
if File.exists?('vendor/rails/activesupport/lib/active_support/locale/en.yml')
|
16
|
+
I18nUtil.load_from_yml 'vendor/rails/activesupport/lib/active_support/locale/en.yml'
|
17
|
+
else
|
18
|
+
activesupport_gem = Gem.cache.find_name('activesupport').sort_by { |g| g.version.version }.last
|
19
|
+
I18nUtil.load_from_yml "#{activesupport_gem.full_gem_path}/lib/active_support/locale/en.yml"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "and locale en" do
|
24
|
+
before(:each) do
|
25
|
+
I18n.locale = "en"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should localize dates in different formats" do
|
29
|
+
dates = {
|
30
|
+
Date.new(2009,1,1) => {:default => "2009-01-01", :short => "Jan 01", :long => "January 01, 2009"},
|
31
|
+
Date.new(2009,1,31) => {:default => "2009-01-31", :short => "Jan 31", :long => "January 31, 2009"},
|
32
|
+
Date.new(2009,2,2) => {:default => "2009-02-02", :short => "Feb 02", :long => "February 02, 2009"},
|
33
|
+
Date.new(2009,2,28) => {:default => "2009-02-28", :short => "Feb 28", :long => "February 28, 2009"},
|
34
|
+
Date.new(2008,2,29) => {:default => "2008-02-29", :short => "Feb 29", :long => "February 29, 2008"},
|
35
|
+
Date.new(2009,3,11) => {:default => "2009-03-11", :short => "Mar 11", :long => "March 11, 2009"},
|
36
|
+
Date.new(2010,4,30) => {:default => "2010-04-30", :short => "Apr 30", :long => "April 30, 2010"},
|
37
|
+
Date.new(2020,12,31) => {:default => "2020-12-31", :short => "Dec 31", :long => "December 31, 2020"}
|
38
|
+
}
|
39
|
+
|
40
|
+
dates.each do |date, formats|
|
41
|
+
formats.each do |format, expected_value|
|
42
|
+
@backend.localize("en", date, format).should == expected_value
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should localize times in different formats" do
|
48
|
+
time = DateTime.new(y=2008,m=3,d=22,h=16,min=30,s=12)
|
49
|
+
|
50
|
+
@backend.localize("en", time, :default).should == "Sat, 22 Mar 2008 16:30:12 +0000"
|
51
|
+
@backend.localize("en", time, :short).should == "22 Mar 16:30"
|
52
|
+
@backend.localize("en", time, :long).should == "March 22, 2008 16:30"
|
53
|
+
@backend.localize("en", time, '%B %d, %Y %H:%M %p').should == "March 22, 2008 16:30 pm"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "and locale es" do
|
59
|
+
before(:each) do
|
60
|
+
I18n.locale = "es"
|
61
|
+
@spanish_locale = Locale.create!(:code => 'es')
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe I18n::Backend::Database do
|
4
|
+
before(:each) do
|
5
|
+
@backend = I18n::Backend::Database.new
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:each) do
|
9
|
+
@backend.cache_store.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with default locale en" do
|
13
|
+
before(:each) do
|
14
|
+
I18n.default_locale = "en"
|
15
|
+
@english_locale = Locale.create!(:code => "en")
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "and locale en" do
|
19
|
+
before(:each) do
|
20
|
+
I18n.locale = "en"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should localize tagged text" do
|
24
|
+
@backend.localize_text("en", "shane ^^is now friends with^^ dylan").should == "shane is now friends with dylan"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should localize text tagged more than once" do
|
28
|
+
@backend.localize_text("en", "dylan ^^is now friends with^^ shane ^^and is happy, ^^dylan ^^claps his hands!^^").should == "dylan is now friends with shane and is happy, dylan claps his hands!"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should localize tagged text using class method" do
|
32
|
+
I18n.localize_text("shane ^^is now friends with^^ dylan").should == "shane is now friends with dylan"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should localize tagged text using class method alias" do
|
36
|
+
I18n.lt("shane ^^is now friends with^^ dylan").should == "shane is now friends with dylan"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should add localize text tags" do
|
40
|
+
I18n.tag_localized_text("is now friends with").should == "^^is now friends with^^"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should add localize text tags using alias" do
|
44
|
+
I18n.tlt("is now friends with").should == "^^is now friends with^^"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should just return text with no localize text tags" do
|
48
|
+
@backend.localize_text("en", "shane is now friends with dylan").should == "shane is now friends with dylan"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should localize tagged text using custom localize text tag" do
|
52
|
+
@backend.localize_text_tag = "##"
|
53
|
+
@backend.localize_text("en", "shane ##is now friends with## dylan").should == "shane is now friends with dylan"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should localize tagged text using another custom localize text tag" do
|
57
|
+
@backend.localize_text_tag = "LOCALIZED_TEXT_TAG"
|
58
|
+
@backend.localize_text("en", "shane LOCALIZED_TEXT_TAGis now friends withLOCALIZED_TEXT_TAG dylan").should == "shane is now friends with dylan"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "and locale es" do
|
64
|
+
before(:each) do
|
65
|
+
I18n.locale = "es"
|
66
|
+
@spanish_locale = Locale.create!(:code => 'es')
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should localize tagged text" do
|
70
|
+
@spanish_locale.translations.create!(:key => 'is now friends with', :value => 'ahora es con amigos')
|
71
|
+
@backend.localize_text("es", "shane ^^is now friends with^^ dylan").should == "shane ahora es con amigos dylan"
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Locale do
|
4
|
+
before(:each) do
|
5
|
+
@valid_attributes = {
|
6
|
+
:code => "en",
|
7
|
+
:name => "English"
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should create a new instance given valid attributes" do
|
12
|
+
Locale.create!(@valid_attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return code as to_param" do
|
16
|
+
Locale.new(@valid_attributes).to_param.should == 'en'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be invalid with no code" do
|
20
|
+
Locale.create!(:code => "en")
|
21
|
+
locale = Locale.new
|
22
|
+
locale.should_not be_valid
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
describe "English and Spanish Locales with I18n default locale set to English" do
|
28
|
+
before(:each) do
|
29
|
+
I18n.default_locale = "en"
|
30
|
+
@english_locale = Locale.create!(:code => "en")
|
31
|
+
@spanish_locale = Locale.create!(:code => "es")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should create a translated translation using english locale" do
|
35
|
+
translation = @english_locale.create_translation('Hello World', 'Hello World')
|
36
|
+
translation.key.should == Translation.hk('Hello World')
|
37
|
+
translation.value.should == 'Hello World'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should create an untranslated translation using spanish locale" do
|
41
|
+
translation = @spanish_locale.create_translation('Hello World', 'Hello World')
|
42
|
+
translation.key.should == Translation.hk('Hello World')
|
43
|
+
translation.value.should be_nil
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return default locale of English" do
|
47
|
+
Locale.default_locale.should == @english_locale
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return list of non-default locales" do
|
51
|
+
@geek_locale = Locale.create!(:code => "gk")
|
52
|
+
Locale.non_defaults.should include(@spanish_locale)
|
53
|
+
Locale.non_defaults.should include(@geek_locale)
|
54
|
+
Locale.non_defaults.should_not include(@english_locale)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should know that the english_locale is the default" do
|
58
|
+
@english_locale.should be_default_locale
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should know if it has a translation record" do
|
62
|
+
translation = @english_locale.create_translation('key', 'Hello World')
|
63
|
+
@english_locale.should have_translation('key')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should have 0 translations" do
|
67
|
+
@spanish_locale.should have(0).translations
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should have 0 untranslated" do
|
71
|
+
@spanish_locale.translations.untranslated.should have(0).records
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should have 0 translated" do
|
75
|
+
@spanish_locale.translations.translated.should have(0).records
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should have 100% translated" do
|
79
|
+
@spanish_locale.percentage_translated.should == 100
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "Locale with translations" do
|
85
|
+
before(:each) do
|
86
|
+
I18n.default_locale = "en"
|
87
|
+
@english_locale = Locale.create!(:code => "en")
|
88
|
+
@spanish_locale = Locale.create!(:code => "es")
|
89
|
+
|
90
|
+
@spanish_locale.translations.create!(:key => 'key1', :value => 'translated1')
|
91
|
+
@spanish_locale.translations.create!(:key => 'key2', :value => 'translated2')
|
92
|
+
@spanish_locale.translations.create!(:key => 'key3', :value => nil) # 1 untranslated record
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should have 3 translations" do
|
96
|
+
@spanish_locale.should have(3).translations
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should have 1 untranslated" do
|
100
|
+
@spanish_locale.translations.untranslated.should have(1).records
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should have 2 translated" do
|
104
|
+
@spanish_locale.translations.translated.should have(2).records
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should have 67% translated" do
|
108
|
+
@spanish_locale.percentage_translated.should == 67
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|