rich_i18n 1.2.2 → 1.2.3
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/CHANGELOG +9 -0
- data/README.textile +1 -1
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/lib/assets/jzip/jquery/seat_holder.js +21 -7
- data/lib/assets/jzip/rich/i18n.js +1 -1
- data/lib/rich/i18n/actionpack/action_view/sanitizor.rb +7 -6
- data/lib/rich/i18n/core/enriched_string.rb +9 -4
- data/lib/rich/i18n/core/string/internationalization.rb +3 -3
- data/lib/rich/i18n/engine.rb +1 -0
- data/lib/rich_i18n.rb +5 -0
- data/rails_generators/rich_i18n_translation/templates/model.rb +1 -1
- data/rich_i18n.gemspec +11 -11
- metadata +22 -22
data/CHANGELOG
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= Rich-i18n CHANGELOG
|
2
2
|
|
3
|
+
== Version 1.2.3 (October 19, 2010)
|
4
|
+
|
5
|
+
* Using SeatHolder v0.8.8 in order to tell SeatHolder not to react on focus events (yay!)
|
6
|
+
* Corrected Rich.I18n.afterUpdate() so certain page elements will be updated again after updating translations
|
7
|
+
* Added some manual source file requirements
|
8
|
+
* Changed formtastic dependency to '1.0.1' and i18n to '>= 0.3.7' which fixes the gem installation error
|
9
|
+
* Being able to edit translations within the WYSIWYG editor Cleditor (:as => :html)
|
10
|
+
* Telling Formtastic not to escape labels when required
|
11
|
+
|
3
12
|
== Version 1.2.2 (October 9, 2010)
|
4
13
|
|
5
14
|
* Fixed cached translations (adding I18n.locale as criteria just now, doh!)
|
data/README.textile
CHANGED
@@ -134,7 +134,7 @@ You can combine translations by using passed string containing translation keys
|
|
134
134
|
|
135
135
|
h3. Translation meta data with EnrichedString
|
136
136
|
|
137
|
-
When translating text, you possibly want to know the @key@, the @value@, the @locale@ and the @derivative key@ (the argument passed for translation). Rich-i18n preserves just that in an @EnrichedString@ which is a
|
137
|
+
When translating text, you possibly want to know the @key@, the @value@, the @locale@ and the @derivative key@ (the argument passed for translation). Rich-i18n preserves just that in an @EnrichedString@ which is a wrapper containing meta data and the translation. Calling @.meta_data@ returns a hash with the meta data:
|
138
138
|
|
139
139
|
<pre>
|
140
140
|
>> "MORE".t.class
|
data/Rakefile
CHANGED
@@ -12,10 +12,10 @@ begin
|
|
12
12
|
gemspec.homepage = "http://codehero.es/rails_gems_plugins/rich_i18n"
|
13
13
|
gemspec.author = "Paul Engel"
|
14
14
|
|
15
|
-
gemspec.add_dependency "
|
16
|
-
gemspec.add_dependency "jzip" , ">= 1.0.10"
|
15
|
+
gemspec.add_dependency "formtastic", "1.0.1"
|
17
16
|
gemspec.add_dependency "hpricot"
|
18
|
-
gemspec.add_dependency "
|
17
|
+
gemspec.add_dependency "i18n" , ">= 0.3.7"
|
18
|
+
gemspec.add_dependency "jzip" , ">= 1.0.10"
|
19
19
|
end
|
20
20
|
Jeweler::GemcutterTasks.new
|
21
21
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.3
|
@@ -1,7 +1,7 @@
|
|
1
1
|
if (typeof(SeatHolder) == "undefined") {
|
2
2
|
|
3
3
|
// *
|
4
|
-
// * SeatHolder 0.8.
|
4
|
+
// * SeatHolder 0.8.8 (Uncompressed)
|
5
5
|
// * The modest Javascript placeholder (used in http://gettopup.com)
|
6
6
|
// *
|
7
7
|
// * This library requires jQuery (http://jquery.com)
|
@@ -10,11 +10,11 @@ if (typeof(SeatHolder) == "undefined") {
|
|
10
10
|
// * Except otherwise noted, SeatHolder is licensed under
|
11
11
|
// * http://creativecommons.org/licenses/by-sa/3.0
|
12
12
|
// *
|
13
|
-
// * $Date: 2010-
|
13
|
+
// * $Date: 2010-10-19 23:23:28 +0100 (Tue, 19 October 2010) $
|
14
14
|
// *
|
15
15
|
|
16
16
|
SeatHolder = (function() {
|
17
|
-
var hintClass = "sh_hint", hideClass = "sh_hide", ignored_types = ["file", "submit"];
|
17
|
+
var hintClass = "sh_hint", hideClass = "sh_hide", ignored_types = ["file", "submit"], reacting = true;
|
18
18
|
|
19
19
|
var injectCode = function() {
|
20
20
|
var style = "<style>" +
|
@@ -24,6 +24,7 @@ SeatHolder = (function() {
|
|
24
24
|
|
25
25
|
jQuery(style).prependTo("head");
|
26
26
|
};
|
27
|
+
|
27
28
|
var bind = function() {
|
28
29
|
var hintedElements = [];
|
29
30
|
|
@@ -81,14 +82,27 @@ SeatHolder = (function() {
|
|
81
82
|
});
|
82
83
|
};
|
83
84
|
|
85
|
+
var react = function(bool) {
|
86
|
+
reacting = typeof(bool) == "undefined" ? true : bool;
|
87
|
+
};
|
88
|
+
|
84
89
|
var onHintFocus = function(event) {
|
90
|
+
if (!reacting) {
|
91
|
+
return;
|
92
|
+
}
|
93
|
+
|
85
94
|
var hintElement = jQuery(event.target).addClass(hideClass);
|
86
95
|
|
87
96
|
hintElement.data("hinted_element")
|
88
97
|
.removeClass(hideClass)
|
89
98
|
.focus();
|
90
99
|
};
|
100
|
+
|
91
101
|
var onFocus = function(event) {
|
102
|
+
if (!reacting) {
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
|
92
106
|
var element = jQuery(event.target);
|
93
107
|
var seatholder = element.attr("seatholder");
|
94
108
|
|
@@ -107,6 +121,7 @@ SeatHolder = (function() {
|
|
107
121
|
input.setSelectionRange(0, element.val().length);
|
108
122
|
}
|
109
123
|
};
|
124
|
+
|
110
125
|
var onBlur = function(event, element) {
|
111
126
|
if (element == null) {
|
112
127
|
element = jQuery(event.target);
|
@@ -135,7 +150,7 @@ SeatHolder = (function() {
|
|
135
150
|
};
|
136
151
|
|
137
152
|
return {
|
138
|
-
version: "0.8.
|
153
|
+
version: "0.8.8",
|
139
154
|
selector: "[seatholder]",
|
140
155
|
hintColor: "#AAA",
|
141
156
|
init: function() {
|
@@ -147,9 +162,8 @@ SeatHolder = (function() {
|
|
147
162
|
bind();
|
148
163
|
});
|
149
164
|
},
|
150
|
-
rebind:
|
151
|
-
|
152
|
-
}
|
165
|
+
rebind: bind,
|
166
|
+
react: react
|
153
167
|
};
|
154
168
|
}());
|
155
169
|
|
@@ -12,7 +12,7 @@ Rich.I18n = (function() {
|
|
12
12
|
},
|
13
13
|
afterUpdate: function(form, response, selector, specs, identifier) {
|
14
14
|
$.each(response.translations, function(key, value) {
|
15
|
-
$(
|
15
|
+
$( ".i18n" + identifier + "[data-derivative_key=" + key + "]") .attr("data-value", response.value).html( value);
|
16
16
|
$("input.i18n" + identifier + "[data-derivative_key=" + key + "][value]") .attr("data-value", response.value).attr("value" , value);
|
17
17
|
$("input.i18n" + identifier + "[data-derivative_key=" + key + "][seatholder]").attr("data-value", response.value).attr("seatholder", value);
|
18
18
|
});
|
@@ -14,12 +14,13 @@ module Rich
|
|
14
14
|
doc = Hpricot html
|
15
15
|
|
16
16
|
(doc/"head i18n").each do |i18n|
|
17
|
-
i18n.swap i18n.
|
17
|
+
i18n.swap CGI.unescapeHTML(i18n.raw_attributes["data-i18n_translation"])
|
18
18
|
end
|
19
19
|
|
20
20
|
(doc/"i18n").each do |i18n|
|
21
|
-
elem = Hpricot::Elem.new
|
22
|
-
|
21
|
+
elem = Hpricot::Elem.new i18n.raw_attributes["data-editable_input_type"] == "html" ? "div" : "span",
|
22
|
+
i18n.raw_attributes.reject{|k, v| k == "data-i18n_translation"}.merge({:class => "i18n"})
|
23
|
+
elem.inner_html = CGI.unescapeHTML(i18n.raw_attributes["data-i18n_translation"])
|
23
24
|
i18n.swap elem.to_html
|
24
25
|
end
|
25
26
|
|
@@ -44,10 +45,10 @@ module Rich
|
|
44
45
|
|
45
46
|
i18n = Hpricot(input.attributes[input_attr]).children.first
|
46
47
|
i18n.raw_attributes.each do |key, value|
|
47
|
-
input.attributes[key] = value
|
48
|
+
input.attributes[key] = value unless key == "data-i18n_translation"
|
48
49
|
end
|
49
|
-
|
50
|
-
input.attributes[input_attr] = i18n.
|
50
|
+
|
51
|
+
input.attributes[input_attr] = CGI.unescapeHTML(i18n.raw_attributes["data-i18n_translation"])
|
51
52
|
input.attributes["class"] = ["i18n", input.attributes["class"]].uniq.join(" ").strip
|
52
53
|
end
|
53
54
|
|
@@ -25,14 +25,19 @@ module Rich
|
|
25
25
|
private
|
26
26
|
|
27
27
|
def to_tag
|
28
|
+
tag = :i18n
|
29
|
+
attrs = []
|
30
|
+
|
28
31
|
keys = [:key, :value, :locale, :derivative_key]
|
29
32
|
data = @meta_data.reject{|k, v| !keys.include?(k.to_sym)}
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
data[:editable_input_type] = @meta_data[:as] if %w(string text html).include? @meta_data[:as].to_s.downcase
|
35
|
+
|
36
|
+
attrs << @meta_data[:html].collect{|k, v| "#{k}=\"#{::ERB::Util.html_escape v}\""}.join(" ") if @meta_data[:html]
|
37
|
+
attrs << data .collect{|k, v| "data-#{k}=\"#{::ERB::Util.html_escape v}\""}.join(" ")
|
38
|
+
attrs << "data-i18n_translation=\"#{::ERB::Util.html_escape @string}\""
|
34
39
|
|
35
|
-
"<#{tag} #{attrs}
|
40
|
+
"<#{tag} #{attrs}></#{tag}>"
|
36
41
|
end
|
37
42
|
|
38
43
|
end
|
@@ -56,19 +56,19 @@ module Rich
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
unless s.gsub!(/^=\s+/, "")
|
59
|
+
unless s.gsub!(/^=\s+/, "") || options[:as].to_s == "html"
|
60
60
|
s.cp_case! options[:capitalize] ? default.capitalize : default
|
61
61
|
end
|
62
62
|
|
63
63
|
array << " " unless array.empty?
|
64
|
-
array << EnrichedString.new(s, {:key => key, :value => value, :locale => I18n.locale, :derivative_key => string})
|
64
|
+
array << EnrichedString.new(s, options.reject{|k, v| !%w(html as).include? k.to_s}.merge({:key => key, :value => value, :locale => I18n.locale, :derivative_key => string}))
|
65
65
|
|
66
66
|
end.join
|
67
67
|
end
|
68
68
|
|
69
69
|
private
|
70
70
|
|
71
|
-
RICH_I18N_OPTIONS = [:count, :pluralize, :capitalize, :translate_callback]
|
71
|
+
RICH_I18N_OPTIONS = [:count, :pluralize, :capitalize, :translate_callback, :html, :as]
|
72
72
|
LOGGER_PROC = Proc.new{|translation, key, options| puts "== RICH-I18N: I18n.t #{key.inspect}, #{options.inspect}"}
|
73
73
|
|
74
74
|
@@i18n_translations = {}
|
data/lib/rich/i18n/engine.rb
CHANGED
@@ -18,6 +18,7 @@ module Rich
|
|
18
18
|
end
|
19
19
|
|
20
20
|
::Jzip::Engine.add_template_location({File.join(File.dirname(__FILE__), "..", "..", "assets", "jzip") => File.join(RAILS_ROOT, "public", "javascripts")})
|
21
|
+
::Formtastic::SemanticFormBuilder.escape_html_entities_in_hints_and_labels = false if ::Formtastic::SemanticFormBuilder.respond_to?(:escape_html_entities_in_hints_and_labels)
|
21
22
|
|
22
23
|
load_i18n test_class
|
23
24
|
end
|
data/lib/rich_i18n.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class <%= model_class_name %> < ActiveRecord::Base
|
2
2
|
|
3
3
|
def to_rich_cms_response(params)
|
4
|
-
{:value => value, :translations => Hash[*params[:derivative_keys].split(";").uniq.collect{|x| [x, x.t]}.flatten]}
|
4
|
+
{:value => value, :translations => Hash[*params[:derivative_keys].split(";").uniq.collect{|x| [x, x.t({:as => params[:editable_input_type]})]}.flatten]}
|
5
5
|
end
|
6
6
|
|
7
7
|
end
|
data/rich_i18n.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rich_i18n}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Paul Engel"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-20}
|
13
13
|
s.description = %q{Rich-i18n is a module of E9s (http://github.com/archan937/e9s) which enriches I18n, Formtastic, the String and Symbol classes. This simplifies internationalization of your Rails application making a Rails developers life much easier.}
|
14
14
|
s.email = %q{paul.engel@holder.nl}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -90,21 +90,21 @@ Gem::Specification.new do |s|
|
|
90
90
|
s.specification_version = 3
|
91
91
|
|
92
92
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
93
|
-
s.add_runtime_dependency(%q<
|
94
|
-
s.add_runtime_dependency(%q<jzip>, [">= 1.0.10"])
|
93
|
+
s.add_runtime_dependency(%q<formtastic>, ["= 1.0.1"])
|
95
94
|
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
|
96
|
-
s.add_runtime_dependency(%q<
|
95
|
+
s.add_runtime_dependency(%q<i18n>, [">= 0.3.7"])
|
96
|
+
s.add_runtime_dependency(%q<jzip>, [">= 1.0.10"])
|
97
97
|
else
|
98
|
-
s.add_dependency(%q<
|
99
|
-
s.add_dependency(%q<jzip>, [">= 1.0.10"])
|
98
|
+
s.add_dependency(%q<formtastic>, ["= 1.0.1"])
|
100
99
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
101
|
-
s.add_dependency(%q<
|
100
|
+
s.add_dependency(%q<i18n>, [">= 0.3.7"])
|
101
|
+
s.add_dependency(%q<jzip>, [">= 1.0.10"])
|
102
102
|
end
|
103
103
|
else
|
104
|
-
s.add_dependency(%q<
|
105
|
-
s.add_dependency(%q<jzip>, [">= 1.0.10"])
|
104
|
+
s.add_dependency(%q<formtastic>, ["= 1.0.1"])
|
106
105
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
107
|
-
s.add_dependency(%q<
|
106
|
+
s.add_dependency(%q<i18n>, [">= 0.3.7"])
|
107
|
+
s.add_dependency(%q<jzip>, [">= 1.0.10"])
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rich_i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 3
|
10
|
+
version: 1.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Paul Engel
|
@@ -15,27 +15,27 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-20 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: formtastic
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - "="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 21
|
30
30
|
segments:
|
31
|
+
- 1
|
31
32
|
- 0
|
32
|
-
-
|
33
|
-
|
34
|
-
version: 0.3.7
|
33
|
+
- 1
|
34
|
+
version: 1.0.1
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: hpricot
|
39
39
|
prerelease: false
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
@@ -44,40 +44,40 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
hash: 3
|
46
46
|
segments:
|
47
|
-
- 1
|
48
47
|
- 0
|
49
|
-
|
50
|
-
version: 1.0.10
|
48
|
+
version: "0"
|
51
49
|
type: :runtime
|
52
50
|
version_requirements: *id002
|
53
51
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
52
|
+
name: i18n
|
55
53
|
prerelease: false
|
56
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
55
|
none: false
|
58
56
|
requirements:
|
59
57
|
- - ">="
|
60
58
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
59
|
+
hash: 29
|
62
60
|
segments:
|
63
61
|
- 0
|
64
|
-
|
62
|
+
- 3
|
63
|
+
- 7
|
64
|
+
version: 0.3.7
|
65
65
|
type: :runtime
|
66
66
|
version_requirements: *id003
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
68
|
+
name: jzip
|
69
69
|
prerelease: false
|
70
70
|
requirement: &id004 !ruby/object:Gem::Requirement
|
71
71
|
none: false
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
hash:
|
75
|
+
hash: 3
|
76
76
|
segments:
|
77
|
+
- 1
|
77
78
|
- 0
|
78
|
-
-
|
79
|
-
|
80
|
-
version: 0.9.7
|
79
|
+
- 10
|
80
|
+
version: 1.0.10
|
81
81
|
type: :runtime
|
82
82
|
version_requirements: *id004
|
83
83
|
description: Rich-i18n is a module of E9s (http://github.com/archan937/e9s) which enriches I18n, Formtastic, the String and Symbol classes. This simplifies internationalization of your Rails application making a Rails developers life much easier.
|