localite 0.1.3 → 0.2.0
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/VERSION +1 -1
- data/lib/localite/filter.rb +88 -0
- data/lib/localite/template.rb +14 -0
- data/localite.gemspec +3 -3
- data/localite.tmproj +113 -2
- data/script/console +1 -1
- metadata +5 -5
- data/lib/localite/rails_filter.rb +0 -35
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Localite::Filter
|
2
|
+
module ControllerFilter
|
3
|
+
def self.locale(controller)
|
4
|
+
#
|
5
|
+
# get the current locale
|
6
|
+
locale = begin
|
7
|
+
controller.send(:current_locale)
|
8
|
+
rescue NoMethodError
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.filter(controller, &block)
|
13
|
+
#
|
14
|
+
# set up localite for this action.
|
15
|
+
Localite.in(locale(controller)) do
|
16
|
+
Localite.html(&block)
|
17
|
+
|
18
|
+
filter_response controller
|
19
|
+
end
|
20
|
+
rescue
|
21
|
+
controller.response.body = "Caught exception: " + CGI::escapeHTML($!.inspect) if Rails.env.development?
|
22
|
+
raise
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.filter_response(controller)
|
26
|
+
next unless controller.response.headers["Content-Type"] =~ /text\/html/
|
27
|
+
controller.response.body = filter_lang_nodes(controller.response.body)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.filter_lang_nodes(body)
|
31
|
+
doc = Nokogiri.XML "<filter-outer-span>#{body}</filter-outer-span>"
|
32
|
+
|
33
|
+
doc.css("[lang]").each do |node|
|
34
|
+
if Localite.locale.to_s != node["lang"]
|
35
|
+
node.remove
|
36
|
+
next
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# we have a node with content specific for the current locale,
|
41
|
+
# i.e. a node to keep. If we find a base locale sibling (i.e.
|
42
|
+
# with identical attributes but no "lang" attribute) prior
|
43
|
+
# this node we have to remove that.
|
44
|
+
next unless base = base_node(node)
|
45
|
+
base.remove
|
46
|
+
end
|
47
|
+
|
48
|
+
doc.css("filter-outer-span").inner_html
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.base_node(node)
|
52
|
+
previous = node
|
53
|
+
while (previous = previous.previous) && previous.name == "text" do
|
54
|
+
:void
|
55
|
+
end
|
56
|
+
|
57
|
+
return previous if base_node?(node, previous)
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.base_node?(me, other_node)
|
61
|
+
return false if !other_node
|
62
|
+
return false if me.name != other_node.name
|
63
|
+
return false if other_node.attributes.key?("lang")
|
64
|
+
return false if me.attributes.length != other_node.attributes.length + 1
|
65
|
+
|
66
|
+
# do we have a mismatching attribute?
|
67
|
+
other_node.attributes.each { |k,v|
|
68
|
+
return false if me.attributes[k] != v
|
69
|
+
}
|
70
|
+
|
71
|
+
true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
module ControllerMethods
|
76
|
+
#
|
77
|
+
# override this method to adjust localite parameters
|
78
|
+
def current_locale
|
79
|
+
return params[:locale] if params[:locale] && params[:locale] =~ /^[a-z][a-z]$/
|
80
|
+
return params[:lang] if params[:lang] && params[:lang] =~ /^[a-z][a-z]$/
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.included(klass)
|
85
|
+
klass.send :include, ControllerMethods
|
86
|
+
klass.send :around_filter, ControllerFilter
|
87
|
+
end
|
88
|
+
end
|
data/lib/localite/template.rb
CHANGED
@@ -36,6 +36,10 @@ class Localite::Template < String
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def method_missing(sym, *args, &block)
|
39
|
+
unless @host.is_a?(Hash)
|
40
|
+
return @host.send(sym, *args, &block)
|
41
|
+
end
|
42
|
+
|
39
43
|
begin
|
40
44
|
return @host.fetch(sym.to_sym)
|
41
45
|
rescue IndexError
|
@@ -93,6 +97,16 @@ module Localite::Template::Etest
|
|
93
97
|
assert_equal "3 Fixnums and 1 Float", Template.run(:text, "{*pl xyz*} and {*pl fl*}", :xyz => [1, 2, 3], :fl => [1.0])
|
94
98
|
end
|
95
99
|
|
100
|
+
class Name < String
|
101
|
+
def name
|
102
|
+
self
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_nohash
|
107
|
+
assert_equal "abc", Template.run(:text, "{*name*}", Name.new("abc"))
|
108
|
+
end
|
109
|
+
|
96
110
|
def test_pl
|
97
111
|
h = Object.new.extend(Localite::Template::Env::Helpers)
|
98
112
|
assert_equal "1 apple", h.pl("apple", 1)
|
data/localite.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{localite}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.2.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["pboy"]
|
9
9
|
s.date = %q{2010-05-11}
|
10
10
|
s.description = %q{An easy to use localization gem.}
|
11
11
|
s.email = %q{eno-pboy@open-lab.org}
|
12
|
-
s.extra_rdoc_files = ["lib/localite.rb", "lib/localite/
|
13
|
-
s.files = ["Manifest", "Rakefile", "VERSION", "config/dependencies.rb", "config/gem.yml", "lib/localite.rb", "lib/localite/
|
12
|
+
s.extra_rdoc_files = ["lib/localite.rb", "lib/localite/filter.rb", "lib/localite/scope.rb", "lib/localite/settings.rb", "lib/localite/template.rb", "lib/localite/translate.rb", "tasks/echoe.rake"]
|
13
|
+
s.files = ["Manifest", "Rakefile", "VERSION", "config/dependencies.rb", "config/gem.yml", "lib/localite.rb", "lib/localite/filter.rb", "lib/localite/scope.rb", "lib/localite/settings.rb", "lib/localite/template.rb", "lib/localite/translate.rb", "localite.tmproj", "script/console", "script/rebuild", "tasks/echoe.rake", "test/i18n/de.yml", "test/initializers/fake_rails.rb", "test/test.rb", "localite.gemspec"]
|
14
14
|
s.homepage = %q{http://github.com/pboy/localite}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Localite"]
|
16
16
|
s.require_paths = ["lib"]
|
data/localite.tmproj
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
3
|
<plist version="1.0">
|
4
4
|
<dict>
|
5
|
+
<key>currentDocument</key>
|
6
|
+
<string>script/console</string>
|
5
7
|
<key>documents</key>
|
6
8
|
<array>
|
7
9
|
<dict>
|
@@ -10,7 +12,7 @@
|
|
10
12
|
<key>name</key>
|
11
13
|
<string>localite</string>
|
12
14
|
<key>regexFolderFilter</key>
|
13
|
-
<string>!.*/(\.[^/]*|CVS|
|
15
|
+
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
|
14
16
|
<key>sourceDirectory</key>
|
15
17
|
<string></string>
|
16
18
|
</dict>
|
@@ -18,7 +20,116 @@
|
|
18
20
|
<key>fileHierarchyDrawerWidth</key>
|
19
21
|
<integer>339</integer>
|
20
22
|
<key>metaData</key>
|
21
|
-
<dict
|
23
|
+
<dict>
|
24
|
+
<key>config/dependencies.rb</key>
|
25
|
+
<dict>
|
26
|
+
<key>caret</key>
|
27
|
+
<dict>
|
28
|
+
<key>column</key>
|
29
|
+
<integer>0</integer>
|
30
|
+
<key>line</key>
|
31
|
+
<integer>4</integer>
|
32
|
+
</dict>
|
33
|
+
<key>firstVisibleColumn</key>
|
34
|
+
<integer>0</integer>
|
35
|
+
<key>firstVisibleLine</key>
|
36
|
+
<integer>0</integer>
|
37
|
+
</dict>
|
38
|
+
<key>config/gem.yml</key>
|
39
|
+
<dict>
|
40
|
+
<key>caret</key>
|
41
|
+
<dict>
|
42
|
+
<key>column</key>
|
43
|
+
<integer>0</integer>
|
44
|
+
<key>line</key>
|
45
|
+
<integer>7</integer>
|
46
|
+
</dict>
|
47
|
+
<key>firstVisibleColumn</key>
|
48
|
+
<integer>0</integer>
|
49
|
+
<key>firstVisibleLine</key>
|
50
|
+
<integer>0</integer>
|
51
|
+
</dict>
|
52
|
+
<key>lib/localite.rb</key>
|
53
|
+
<dict>
|
54
|
+
<key>caret</key>
|
55
|
+
<dict>
|
56
|
+
<key>column</key>
|
57
|
+
<integer>24</integer>
|
58
|
+
<key>line</key>
|
59
|
+
<integer>25</integer>
|
60
|
+
</dict>
|
61
|
+
<key>firstVisibleColumn</key>
|
62
|
+
<integer>0</integer>
|
63
|
+
<key>firstVisibleLine</key>
|
64
|
+
<integer>40</integer>
|
65
|
+
</dict>
|
66
|
+
<key>lib/localite/scope.rb</key>
|
67
|
+
<dict>
|
68
|
+
<key>caret</key>
|
69
|
+
<dict>
|
70
|
+
<key>column</key>
|
71
|
+
<integer>0</integer>
|
72
|
+
<key>line</key>
|
73
|
+
<integer>50</integer>
|
74
|
+
</dict>
|
75
|
+
<key>firstVisibleColumn</key>
|
76
|
+
<integer>0</integer>
|
77
|
+
<key>firstVisibleLine</key>
|
78
|
+
<integer>0</integer>
|
79
|
+
</dict>
|
80
|
+
<key>lib/localite/settings.rb</key>
|
81
|
+
<dict>
|
82
|
+
<key>caret</key>
|
83
|
+
<dict>
|
84
|
+
<key>column</key>
|
85
|
+
<integer>0</integer>
|
86
|
+
<key>line</key>
|
87
|
+
<integer>15</integer>
|
88
|
+
</dict>
|
89
|
+
<key>firstVisibleColumn</key>
|
90
|
+
<integer>0</integer>
|
91
|
+
<key>firstVisibleLine</key>
|
92
|
+
<integer>0</integer>
|
93
|
+
</dict>
|
94
|
+
<key>lib/localite/template.rb</key>
|
95
|
+
<dict>
|
96
|
+
<key>caret</key>
|
97
|
+
<dict>
|
98
|
+
<key>column</key>
|
99
|
+
<integer>0</integer>
|
100
|
+
<key>line</key>
|
101
|
+
<integer>54</integer>
|
102
|
+
</dict>
|
103
|
+
<key>firstVisibleColumn</key>
|
104
|
+
<integer>0</integer>
|
105
|
+
<key>firstVisibleLine</key>
|
106
|
+
<integer>31</integer>
|
107
|
+
</dict>
|
108
|
+
<key>script/console</key>
|
109
|
+
<dict>
|
110
|
+
<key>caret</key>
|
111
|
+
<dict>
|
112
|
+
<key>column</key>
|
113
|
+
<integer>47</integer>
|
114
|
+
<key>line</key>
|
115
|
+
<integer>16</integer>
|
116
|
+
</dict>
|
117
|
+
<key>firstVisibleColumn</key>
|
118
|
+
<integer>0</integer>
|
119
|
+
<key>firstVisibleLine</key>
|
120
|
+
<integer>0</integer>
|
121
|
+
</dict>
|
122
|
+
</dict>
|
123
|
+
<key>openDocuments</key>
|
124
|
+
<array>
|
125
|
+
<string>lib/localite.rb</string>
|
126
|
+
<string>lib/localite/scope.rb</string>
|
127
|
+
<string>lib/localite/settings.rb</string>
|
128
|
+
<string>script/console</string>
|
129
|
+
<string>lib/localite/template.rb</string>
|
130
|
+
<string>config/gem.yml</string>
|
131
|
+
<string>config/dependencies.rb</string>
|
132
|
+
</array>
|
22
133
|
<key>showFileHierarchyDrawer</key>
|
23
134
|
<true/>
|
24
135
|
<key>windowFrame</key>
|
data/script/console
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- pboy
|
@@ -37,7 +37,7 @@ extensions: []
|
|
37
37
|
|
38
38
|
extra_rdoc_files:
|
39
39
|
- lib/localite.rb
|
40
|
-
- lib/localite/
|
40
|
+
- lib/localite/filter.rb
|
41
41
|
- lib/localite/scope.rb
|
42
42
|
- lib/localite/settings.rb
|
43
43
|
- lib/localite/template.rb
|
@@ -50,7 +50,7 @@ files:
|
|
50
50
|
- config/dependencies.rb
|
51
51
|
- config/gem.yml
|
52
52
|
- lib/localite.rb
|
53
|
-
- lib/localite/
|
53
|
+
- lib/localite/filter.rb
|
54
54
|
- lib/localite/scope.rb
|
55
55
|
- lib/localite/settings.rb
|
56
56
|
- lib/localite/template.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Localite::RailsFilter
|
2
|
-
def self.filter(controller, &block)
|
3
|
-
#
|
4
|
-
# get the current locale
|
5
|
-
locale = begin
|
6
|
-
controller.send(:current_locale)
|
7
|
-
rescue NoMethodError
|
8
|
-
end
|
9
|
-
|
10
|
-
#
|
11
|
-
# get the current locale
|
12
|
-
begin
|
13
|
-
scope = controller.send(:localite_scope)
|
14
|
-
scope = [ scope ] if scope && !scope.is_a?(Array)
|
15
|
-
rescue NoMethodError
|
16
|
-
end
|
17
|
-
|
18
|
-
#
|
19
|
-
# set up localite for this action.
|
20
|
-
Localite.html do
|
21
|
-
Localite.in(locale) do
|
22
|
-
Localite.scope(*scope, &block)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
#
|
30
|
-
# override this method to adjust localite parameters
|
31
|
-
def current_locale
|
32
|
-
return params[:locale] if params[:locale] && params[:locale] =~ /^[a-z][a-z]$/
|
33
|
-
return params[:lang] if params[:lang] && params[:lang] =~ /^[a-z][a-z]$/
|
34
|
-
end
|
35
|
-
end
|