grosser-fast_gettext 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +2 -6
- data/VERSION.yml +1 -1
- data/lib/fast_gettext/storage.rb +17 -11
- data/lib/fast_gettext.rb +11 -0
- data/spec/fast_gettext/storage_spec.rb +25 -9
- data/spec/fast_gettext_spec.rb +12 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/vendor/string_spec.rb +12 -0
- metadata +3 -1
data/README.markdown
CHANGED
@@ -12,6 +12,7 @@ Tell Gettext where your mo-files lie:
|
|
12
12
|
|
13
13
|
Choose text domain, and locale for translation
|
14
14
|
FastGettext.text_domain = 'my_app'
|
15
|
+
FastGettext.available_locales = ['de','en','fr','en_US','en_UK'] # only allow these locales to be set (optional)
|
15
16
|
FastGettext.locale = 'de'
|
16
17
|
|
17
18
|
Start translating
|
@@ -21,11 +22,6 @@ Start translating
|
|
21
22
|
s_('Namespace|no-found') == 'not-found'
|
22
23
|
n_('Axis','Axis',3) == 'Achsen' #German plural of Axis
|
23
24
|
|
24
|
-
Thread-safety
|
25
|
-
=============
|
26
|
-
locale/text_domain/available_locales are not shared between threads.
|
27
|
-
But text_domains is, so that found translations can be reused.
|
28
|
-
|
29
25
|
Speed
|
30
26
|
=====
|
31
27
|
FastGettext
|
@@ -54,7 +50,7 @@ ATM you have to use the [original GetText](http://github.com/mutoh/gettext) to c
|
|
54
50
|
|
55
51
|
Author
|
56
52
|
======
|
57
|
-
Mofile parsing from Masao Mutoh, see
|
53
|
+
Mofile parsing from Masao Mutoh, see vendor/README
|
58
54
|
|
59
55
|
Michael Grosser
|
60
56
|
grosser.michael@gmail.com
|
data/VERSION.yml
CHANGED
data/lib/fast_gettext/storage.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
module FastGettext
|
2
2
|
module Storage
|
3
|
-
[:
|
4
|
-
key = "FastGettext.#{method}"
|
3
|
+
[:text_domain,:available_locales,:text_domains].each do |method|
|
5
4
|
define_method method do
|
6
|
-
|
5
|
+
thread_store(method)
|
7
6
|
end
|
8
7
|
define_method "#{method}=" do |value|
|
9
|
-
|
8
|
+
write_thread_store(method,value)
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def text_domains
|
17
|
-
@@text_domains
|
12
|
+
def locale
|
13
|
+
thread_store(:locale) || (available_locales||[]).first || 'en'
|
18
14
|
end
|
19
15
|
|
20
|
-
def
|
21
|
-
|
16
|
+
def locale=(value)
|
17
|
+
write_thread_store(:locale,value) if not available_locales or available_locales.include?(value)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def thread_store(key)
|
23
|
+
Thread.current["FastGettext.#{key}"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_thread_store(key,value)
|
27
|
+
Thread.current["FastGettext.#{key}"]=value
|
22
28
|
end
|
23
29
|
end
|
24
30
|
end
|
data/lib/fast_gettext.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'fast_gettext/mo_file'
|
2
2
|
require 'fast_gettext/storage'
|
3
|
+
require File.join(File.dirname(__FILE__),'..','vendor','string')
|
3
4
|
|
4
5
|
module FastGettext
|
5
6
|
include FastGettext::Storage
|
@@ -35,6 +36,16 @@ module FastGettext
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
#tell gettext: this string need translation (will be found during parsing)
|
40
|
+
def N_(translate)
|
41
|
+
translate
|
42
|
+
end
|
43
|
+
|
44
|
+
#tell gettext: this string need translation (will be found during parsing)
|
45
|
+
def Nn_(singular,plural)
|
46
|
+
[singular,plural]
|
47
|
+
end
|
48
|
+
|
38
49
|
def add_text_domain(name,options)
|
39
50
|
self.text_domains ||= {}
|
40
51
|
domain = self.text_domains[name] = {:path=>options.delete(:path),:mo_files=>{}}
|
@@ -5,25 +5,41 @@ include FastGettext::Storage
|
|
5
5
|
|
6
6
|
describe Storage do
|
7
7
|
def thread_save(method)
|
8
|
-
send("#{method}=",
|
8
|
+
send("#{method}=",'de')
|
9
9
|
|
10
10
|
# mess around with other threads
|
11
|
-
threads = []
|
12
11
|
100.times do |i|
|
13
|
-
|
12
|
+
Thread.new {FastGettext.send("#{method}=",'en')}
|
14
13
|
end
|
15
|
-
threads.each(&:join)
|
16
14
|
|
17
|
-
send(method) ==
|
15
|
+
send(method) == 'de'
|
18
16
|
end
|
19
17
|
|
20
|
-
[:locale, :available_locales, :text_domain].each do |method|
|
18
|
+
[:locale, :available_locales, :text_domain, :text_domains].each do |method|
|
21
19
|
it "stores #{method} thread-save" do
|
22
|
-
thread_save(
|
20
|
+
thread_save(method).should == true
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
26
|
-
|
27
|
-
|
24
|
+
describe :locale do
|
25
|
+
it "stores everything as long as available_locales is not set" do
|
26
|
+
self.available_locales = nil
|
27
|
+
self.locale = 'XXX'
|
28
|
+
locale.should == 'XXX'
|
29
|
+
end
|
30
|
+
it "is en if no locale and no available_locale were set" do
|
31
|
+
Thread.current['FastGettext.locale']=nil
|
32
|
+
self.available_locales = nil
|
33
|
+
locale.should == 'en'
|
34
|
+
end
|
35
|
+
it "is the first available_locale if one was set" do
|
36
|
+
self.available_locales = ['de']
|
37
|
+
locale.should == 'de'
|
38
|
+
end
|
39
|
+
it "does not store a locale if it is not available" do
|
40
|
+
self.available_locales = ['de']
|
41
|
+
self.locale = 'en'
|
42
|
+
locale.should == 'de'
|
43
|
+
end
|
28
44
|
end
|
29
45
|
end
|
data/spec/fast_gettext_spec.rb
CHANGED
@@ -40,4 +40,16 @@ describe FastGettext do
|
|
40
40
|
s_("XXX/not found",'/').should == "not found"
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
describe :N_ do
|
45
|
+
it "returns the msgid" do
|
46
|
+
N_('XXXXX').should == 'XXXXX'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe :Nn_ do
|
51
|
+
it "returns the msgids as array" do
|
52
|
+
Nn_('X','Y').should == ['X','Y']
|
53
|
+
end
|
54
|
+
end
|
43
55
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
current_folder = File.dirname(__FILE__)
|
2
|
+
require File.join(current_folder,'..','spec_helper')
|
3
|
+
|
4
|
+
#just to make sure we did not mess up while copying...
|
5
|
+
describe String do
|
6
|
+
it "substitudes using % + Hash" do
|
7
|
+
"x%{name}y" %{:name=>'a'}.should == 'xay'
|
8
|
+
end
|
9
|
+
it "substitudes using % + Array" do
|
10
|
+
("x%sy%s" % ['a','b']).should == 'xayb'
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grosser-fast_gettext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
@@ -40,6 +40,8 @@ files:
|
|
40
40
|
- spec/fast_gettext
|
41
41
|
- spec/fast_gettext/storage_spec.rb
|
42
42
|
- spec/fast_gettext/mo_file_spec.rb
|
43
|
+
- spec/vendor
|
44
|
+
- spec/vendor/string_spec.rb
|
43
45
|
has_rdoc: true
|
44
46
|
homepage: http://github.com/grosser/fast_gettext
|
45
47
|
post_install_message:
|