fast_gettext 0.7.0 → 0.7.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/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/Rakefile +2 -1
- data/Readme.md +3 -1
- data/fast_gettext.gemspec +1 -1
- data/gemfiles/rails.2.gemfile +1 -1
- data/gemfiles/rails.2.gemfile.lock +1 -1
- data/gemfiles/rails.3.gemfile +1 -1
- data/gemfiles/rails.3.gemfile.lock +1 -1
- data/lib/fast_gettext/storage.rb +5 -0
- data/lib/fast_gettext/translation_repository/base.rb +4 -0
- data/lib/fast_gettext/translation_repository/chain.rb +6 -1
- data/lib/fast_gettext/translation_repository/mo.rb +6 -1
- data/lib/fast_gettext/translation_repository/yaml.rb +7 -2
- data/lib/fast_gettext/version.rb +1 -1
- data/spec/fast_gettext/storage_spec.rb +39 -13
- data/spec/fast_gettext/translation_repository/base_spec.rb +4 -0
- data/spec/fast_gettext/translation_repository/chain_spec.rb +17 -0
- data/spec/fast_gettext/translation_repository/mo_spec.rb +23 -0
- data/spec/fast_gettext/translation_repository/yaml_spec.rb +23 -0
- data/spec/fast_gettext_spec.rb +3 -0
- data/spec/locale/de/LC_MESSAGES/test2.mo +0 -0
- data/spec/locale/de/test2.po +71 -0
- data/spec/locale/yaml/de2.yml +25 -0
- metadata +11 -7
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
require 'bundler/setup'
|
1
2
|
require 'bundler/gem_tasks'
|
2
3
|
require 'bump/tasks'
|
3
4
|
require 'appraisal'
|
4
5
|
|
5
6
|
task :default do
|
6
|
-
sh "
|
7
|
+
sh "rake appraisal:install && rake appraisal spec"
|
7
8
|
end
|
8
9
|
|
9
10
|
task :spec do
|
data/Readme.md
CHANGED
@@ -225,8 +225,10 @@ Mo/Po-file parsing from Masao Mutoh, see vendor/README
|
|
225
225
|
- [Hoang Nghiem](https://github.com/hoangnghiem)
|
226
226
|
- [Costa Shapiro](https://github.com/costa)
|
227
227
|
- [Jamie Dyer](https://github.com/kernow)
|
228
|
+
- [Stephan Kulow](https://github.com/coolo)
|
229
|
+
- [Fotos Georgiadis](https://github.com/fotos)
|
228
230
|
|
229
231
|
[Michael Grosser](http://grosser.it)<br/>
|
230
232
|
michael@grosser.it<br/>
|
231
|
-
License: MIT<br/>
|
233
|
+
License: MIT, some vendor parts under the same license terms as Ruby (see headers)<br/>
|
232
234
|
[](https://travis-ci.org/grosser/fast_gettext)
|
data/fast_gettext.gemspec
CHANGED
data/gemfiles/rails.2.gemfile
CHANGED
data/gemfiles/rails.3.gemfile
CHANGED
data/lib/fast_gettext/storage.rb
CHANGED
@@ -72,6 +72,11 @@ module FastGettext
|
|
72
72
|
Thread.current[:fast_gettext_current_cache] = cache
|
73
73
|
end
|
74
74
|
|
75
|
+
def reload!
|
76
|
+
self.current_cache = {}
|
77
|
+
translation_repositories.values.each(&:reload)
|
78
|
+
end
|
79
|
+
|
75
80
|
#global, since re-parsing whole folders takes too much time...
|
76
81
|
@@translation_repositories={}
|
77
82
|
def translation_repositories
|
@@ -6,8 +6,8 @@ module FastGettext
|
|
6
6
|
# - provide access to translations in mo files
|
7
7
|
class Mo < Base
|
8
8
|
def initialize(name,options={})
|
9
|
-
find_and_store_files(name,options)
|
10
9
|
super
|
10
|
+
reload
|
11
11
|
end
|
12
12
|
|
13
13
|
def available_locales
|
@@ -18,6 +18,11 @@ module FastGettext
|
|
18
18
|
current_translations.pluralisation_rule
|
19
19
|
end
|
20
20
|
|
21
|
+
def reload
|
22
|
+
find_and_store_files(@name, @options)
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
21
26
|
protected
|
22
27
|
|
23
28
|
def find_and_store_files(name,options)
|
@@ -8,8 +8,8 @@ module FastGettext
|
|
8
8
|
# - provide access to translations in yaml files
|
9
9
|
class Yaml < Base
|
10
10
|
def initialize(name,options={})
|
11
|
-
find_and_store_files(options)
|
12
11
|
super
|
12
|
+
reload
|
13
13
|
end
|
14
14
|
|
15
15
|
def available_locales
|
@@ -26,6 +26,11 @@ module FastGettext
|
|
26
26
|
self['pluralisation_rule'] ? lambda{|n| eval(self['pluralisation_rule']) } : nil
|
27
27
|
end
|
28
28
|
|
29
|
+
def reload
|
30
|
+
find_and_store_files(@options)
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
29
34
|
protected
|
30
35
|
|
31
36
|
MAX_FIND_DEPTH = 10
|
@@ -69,4 +74,4 @@ module FastGettext
|
|
69
74
|
end
|
70
75
|
end
|
71
76
|
end
|
72
|
-
end
|
77
|
+
end
|
data/lib/fast_gettext/version.rb
CHANGED
@@ -23,14 +23,14 @@ describe 'Storage' do
|
|
23
23
|
text_domain.should == 'xxx'
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def thread_safe(method, value_a, value_b)
|
27
27
|
send("#{method}=",value_a)
|
28
28
|
|
29
29
|
# mess around with other threads
|
30
30
|
100.times do
|
31
31
|
Thread.new {FastGettext.send("#{method}=",value_b)}
|
32
32
|
end
|
33
|
-
sleep 0.1 # Ruby 1.9 cannot switch threads
|
33
|
+
sleep 0.1 # Ruby 1.9 cannot switch threads fast enough <-> spec fails without this WTF!
|
34
34
|
|
35
35
|
!!(send(method) == value_a)
|
36
36
|
end
|
@@ -41,16 +41,22 @@ describe 'Storage' do
|
|
41
41
|
:text_domain=>['xx','yy'],
|
42
42
|
:pluralisation_rule=>[lambda{|x|x==4},lambda{|x|x==1}]
|
43
43
|
}.each do |method, (value_a, value_b)|
|
44
|
-
it "stores #{method} thread
|
45
|
-
|
44
|
+
it "stores #{method} thread safe" do
|
45
|
+
thread_safe(method, value_a, value_b).should == true
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
context "non-thread safe" do
|
50
|
+
after do
|
51
|
+
self.translation_repositories.clear
|
52
|
+
end
|
53
|
+
|
54
|
+
it "stores translation_repositories" do
|
55
|
+
self.translation_repositories[:x]=1
|
56
|
+
t = Thread.new{self.translation_repositories[:x]=2}
|
57
|
+
t.join
|
58
|
+
self.translation_repositories[:x].should == 2
|
59
|
+
end
|
54
60
|
end
|
55
61
|
|
56
62
|
describe :pluralisation_rule do
|
@@ -65,7 +71,7 @@ describe 'Storage' do
|
|
65
71
|
|
66
72
|
describe :default_locale do
|
67
73
|
it "stores default_locale non-thread-safe" do
|
68
|
-
|
74
|
+
thread_safe(:default_locale, 'de', 'en').should == false
|
69
75
|
end
|
70
76
|
|
71
77
|
it "does not overwrite locale" do
|
@@ -93,8 +99,8 @@ describe 'Storage' do
|
|
93
99
|
end
|
94
100
|
|
95
101
|
describe :default_text_domain do
|
96
|
-
it "stores default_text_domain non-thread
|
97
|
-
|
102
|
+
it "stores default_text_domain non-thread safe" do
|
103
|
+
thread_safe(:default_text_domain, 'xx', 'en').should == false
|
98
104
|
end
|
99
105
|
|
100
106
|
it "uses default_text_domain when text_domain is not set" do
|
@@ -112,7 +118,7 @@ describe 'Storage' do
|
|
112
118
|
|
113
119
|
describe :default_available_locales do
|
114
120
|
it "stores default_available_locales non-thread-safe" do
|
115
|
-
|
121
|
+
thread_safe(:default_available_locales, ['xx'], ['yy']).should == false
|
116
122
|
end
|
117
123
|
|
118
124
|
it "converts locales to s" do
|
@@ -216,6 +222,10 @@ describe 'Storage' do
|
|
216
222
|
self.text_domain = rand(99999).to_s
|
217
223
|
end
|
218
224
|
|
225
|
+
after do
|
226
|
+
self.translation_repositories.clear
|
227
|
+
end
|
228
|
+
|
219
229
|
it "raises when a textdomain was empty" do
|
220
230
|
begin
|
221
231
|
FastGettext._('x')
|
@@ -288,6 +298,22 @@ describe 'Storage' do
|
|
288
298
|
end
|
289
299
|
end
|
290
300
|
|
301
|
+
describe :reload! do
|
302
|
+
it "reloads all repositories" do
|
303
|
+
FastGettext.translation_repositories.each do |name, repository|
|
304
|
+
repository.should_receive(:reload)
|
305
|
+
end
|
306
|
+
|
307
|
+
FastGettext.reload!
|
308
|
+
end
|
309
|
+
|
310
|
+
it "clears the cache" do
|
311
|
+
FastGettext.should_receive(:current_cache=).with({})
|
312
|
+
|
313
|
+
FastGettext.reload!
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
291
317
|
describe :key_exist? do
|
292
318
|
it "does not find default keys" do
|
293
319
|
FastGettext._('abcde')
|
@@ -27,6 +27,10 @@ describe 'FastGettext::TranslationRepository::Chain' do
|
|
27
27
|
it "has no pluralisation rule" do
|
28
28
|
@rep.pluralisation_rule.should == nil
|
29
29
|
end
|
30
|
+
|
31
|
+
it "returns true on reload" do
|
32
|
+
@rep.reload.should be_true
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
describe "filled chain" do
|
@@ -77,5 +81,18 @@ describe 'FastGettext::TranslationRepository::Chain' do
|
|
77
81
|
@rep.pluralisation_rule.should == 'x'
|
78
82
|
end
|
79
83
|
end
|
84
|
+
|
85
|
+
describe :reload do
|
86
|
+
it "reloads all repositories" do
|
87
|
+
@one.should_receive(:reload)
|
88
|
+
@two.should_receive(:reload)
|
89
|
+
@rep.reload
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns true" do
|
93
|
+
@rep.chain.each { |c| c.stub(:reload) }
|
94
|
+
@rep.reload.should be_true
|
95
|
+
end
|
96
|
+
end
|
80
97
|
end
|
81
98
|
end
|
@@ -20,6 +20,29 @@ describe 'FastGettext::TranslationRepository::Mo' do
|
|
20
20
|
@rep.plural('Axis','Axis').should == ['Achse','Achsen']
|
21
21
|
end
|
22
22
|
|
23
|
+
describe :reload do
|
24
|
+
before do
|
25
|
+
mo_file = FastGettext::MoFile.new('spec/locale/de/LC_MESSAGES/test2.mo')
|
26
|
+
|
27
|
+
FastGettext::MoFile.stub(:new).and_return(FastGettext::MoFile.empty)
|
28
|
+
FastGettext::MoFile.stub(:new).with('spec/locale/de/LC_MESSAGES/test.mo').and_return(mo_file)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "can reload" do
|
32
|
+
FastGettext.locale = 'de'
|
33
|
+
|
34
|
+
@rep['Untranslated'].should be_nil
|
35
|
+
|
36
|
+
@rep.reload
|
37
|
+
|
38
|
+
@rep['Untranslated'].should == 'Translated'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns true" do
|
42
|
+
@rep.reload.should be_true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
23
46
|
it "has access to the mo repositories pluralisation rule" do
|
24
47
|
FastGettext.locale = 'en'
|
25
48
|
rep = FastGettext::TranslationRepository.build('plural_test',:path=>File.join('spec','locale'))
|
@@ -33,6 +33,29 @@ describe 'FastGettext::TranslationRepository::Yaml' do
|
|
33
33
|
@rep.plural('cars.axis').should == ['Achse', 'Achsen', nil, nil]
|
34
34
|
end
|
35
35
|
|
36
|
+
describe :reload do
|
37
|
+
before do
|
38
|
+
yaml = YAML.load_file('spec/locale/yaml/de2.yml')
|
39
|
+
|
40
|
+
YAML.stub(:load_file).and_return('en' => {}, 'de' => {})
|
41
|
+
YAML.stub(:load_file).with('spec/locale/yaml/de.yml').and_return(yaml)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "can reload" do
|
45
|
+
FastGettext.locale = 'de'
|
46
|
+
|
47
|
+
@rep['cars.car'].should == 'Auto'
|
48
|
+
|
49
|
+
@rep.reload
|
50
|
+
|
51
|
+
@rep['cars.car'].should == 'Aufzugskabine'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns true" do
|
55
|
+
@rep.reload.should be_true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
36
59
|
it "handles unfound plurals with nil" do
|
37
60
|
@rep.plural('cars.xxx').should == [nil, nil, nil, nil]
|
38
61
|
end
|
data/spec/fast_gettext_spec.rb
CHANGED
@@ -24,6 +24,9 @@ describe FastGettext do
|
|
24
24
|
it "provides access to FastGettext::Translations methods" do
|
25
25
|
FastGettext._('car').should == 'Auto'
|
26
26
|
_('car').should == 'Auto'
|
27
|
+
_("%{relative_time} ago").should == "vor %{relative_time}"
|
28
|
+
(_("%{relative_time} ago") % {:relative_time => 1}).should == "vor 1"
|
29
|
+
(N_("%{relative_time} ago") % {:relative_time => 1}).should == "1 ago"
|
27
30
|
s_("XXX|not found").should == "not found"
|
28
31
|
n_('Axis','Axis',1).should == 'Achse'
|
29
32
|
N_('XXXXX').should == 'XXXXX'
|
Binary file
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5
|
+
#
|
6
|
+
#, fuzzy
|
7
|
+
msgid ""
|
8
|
+
msgstr ""
|
9
|
+
"Project-Id-Version: version 0.0.1\n"
|
10
|
+
"POT-Creation-Date: 2009-02-26 19:50+0100\n"
|
11
|
+
"PO-Revision-Date: 2011-12-04 18:54+0900\n"
|
12
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14
|
+
"MIME-Version: 1.0\n"
|
15
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
16
|
+
"Content-Transfer-Encoding: 8bit\n"
|
17
|
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
18
|
+
|
19
|
+
#: app/helpers/translation_helper.rb:3
|
20
|
+
msgid "%{relative_time} ago"
|
21
|
+
msgstr "vor %{relative_time}"
|
22
|
+
|
23
|
+
#: app/views/cars/show.html.erb:5
|
24
|
+
msgid "Axis"
|
25
|
+
msgid_plural "Axis"
|
26
|
+
msgstr[0] "Achse"
|
27
|
+
msgstr[1] "Achsen"
|
28
|
+
|
29
|
+
#: app/controllers/cars_controller.rb:47
|
30
|
+
msgid "Car was successfully created."
|
31
|
+
msgstr "Auto wurde erfolgreich gespeichert"
|
32
|
+
|
33
|
+
#: app/controllers/cars_controller.rb:64
|
34
|
+
msgid "Car was successfully updated."
|
35
|
+
msgstr "Auto wurde erfolgreich aktualisiert"
|
36
|
+
|
37
|
+
#: app/views/cars/show.html.erb:1 locale/model_attributes.rb:3
|
38
|
+
msgid "Car|Model"
|
39
|
+
msgstr "Modell"
|
40
|
+
|
41
|
+
msgid "Untranslated"
|
42
|
+
msgstr "Translated"
|
43
|
+
|
44
|
+
#: app/views/cars/show.html.erb:3 locale/model_attributes.rb:4
|
45
|
+
msgid "Car|Wheels count"
|
46
|
+
msgstr "Räderzahl"
|
47
|
+
|
48
|
+
#: app/views/cars/show.html.erb:7
|
49
|
+
msgid "Created"
|
50
|
+
msgstr "Erstellt"
|
51
|
+
|
52
|
+
#: app/views/cars/show.html.erb:9
|
53
|
+
msgid "Month"
|
54
|
+
msgstr "Monat"
|
55
|
+
|
56
|
+
#: locale/model_attributes.rb:2
|
57
|
+
msgid "car"
|
58
|
+
msgstr "Auto"
|
59
|
+
|
60
|
+
#: locale/testlog_phrases.rb:2
|
61
|
+
msgid "this is a dynamic translation which was found thorugh gettext_test_log!"
|
62
|
+
msgstr ""
|
63
|
+
"Dies ist eine dynamische Übersetzung, die durch gettext_test_log "
|
64
|
+
"gefunden wurde!"
|
65
|
+
|
66
|
+
#: locale/test_escape.rb:2
|
67
|
+
msgid "You should escape '\\' as '\\\\'."
|
68
|
+
msgstr "Du solltest '\\' als '\\\\' escapen."
|
69
|
+
|
70
|
+
msgid "Umläüte"
|
71
|
+
msgstr "Umlaute"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
de:
|
2
|
+
simple: einfach
|
3
|
+
date:
|
4
|
+
relative: "vor %{relative_time}"
|
5
|
+
|
6
|
+
cars:
|
7
|
+
axis:
|
8
|
+
one: "Achse"
|
9
|
+
other: "Achsen"
|
10
|
+
silly:
|
11
|
+
one: '0'
|
12
|
+
other: '1'
|
13
|
+
plural2: '2'
|
14
|
+
plural3: '3'
|
15
|
+
model: "Modell"
|
16
|
+
wheel_count: "Räderzahl"
|
17
|
+
created: "Erstellt"
|
18
|
+
month: "Monat"
|
19
|
+
car: "Aufzugskabine"
|
20
|
+
messages:
|
21
|
+
created: "Auto wurde erfolgreich gespeichert"
|
22
|
+
updated: "Auto wurde erfolgreich aktualisiert"
|
23
|
+
|
24
|
+
test_log:
|
25
|
+
phrases: "Dies ist eine dynamische Übersetzung, die durch gettext_test_log gefunden wurde!"
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_gettext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.1
|
4
5
|
prerelease:
|
5
|
-
version: 0.7.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Grosser
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: michael@grosser.it
|
@@ -88,7 +88,9 @@ files:
|
|
88
88
|
- spec/fast_gettext_spec.rb
|
89
89
|
- spec/fuzzy_locale/de/test.po
|
90
90
|
- spec/locale/de/LC_MESSAGES/test.mo
|
91
|
+
- spec/locale/de/LC_MESSAGES/test2.mo
|
91
92
|
- spec/locale/de/test.po
|
93
|
+
- spec/locale/de/test2.po
|
92
94
|
- spec/locale/en/LC_MESSAGES/plural_test.mo
|
93
95
|
- spec/locale/en/LC_MESSAGES/test.mo
|
94
96
|
- spec/locale/en/plural_test.po
|
@@ -96,6 +98,7 @@ files:
|
|
96
98
|
- spec/locale/gsw_CH/LC_MESSAGES/test.mo
|
97
99
|
- spec/locale/gsw_CH/test.po
|
98
100
|
- spec/locale/yaml/de.yml
|
101
|
+
- spec/locale/yaml/de2.yml
|
99
102
|
- spec/locale/yaml/en.yml
|
100
103
|
- spec/locale/yaml/notfound.yml
|
101
104
|
- spec/obsolete_locale/de/test.po
|
@@ -104,31 +107,32 @@ files:
|
|
104
107
|
homepage: http://github.com/grosser/fast_gettext
|
105
108
|
licenses:
|
106
109
|
- MIT
|
110
|
+
- Ruby
|
107
111
|
post_install_message:
|
108
112
|
rdoc_options: []
|
109
113
|
require_paths:
|
110
114
|
- lib
|
111
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
112
117
|
requirements:
|
113
118
|
- - ! '>='
|
114
119
|
- !ruby/object:Gem::Version
|
115
120
|
version: '0'
|
116
121
|
segments:
|
117
122
|
- 0
|
118
|
-
hash:
|
119
|
-
none: false
|
123
|
+
hash: 278086574654590991
|
120
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
121
126
|
requirements:
|
122
127
|
- - ! '>='
|
123
128
|
- !ruby/object:Gem::Version
|
124
129
|
version: '0'
|
125
130
|
segments:
|
126
131
|
- 0
|
127
|
-
hash:
|
128
|
-
none: false
|
132
|
+
hash: 278086574654590991
|
129
133
|
requirements: []
|
130
134
|
rubyforge_project:
|
131
|
-
rubygems_version: 1.8.
|
135
|
+
rubygems_version: 1.8.25
|
132
136
|
signing_key:
|
133
137
|
specification_version: 3
|
134
138
|
summary: A simple, fast, memory-efficient and threadsafe implementation of GetText
|