tolk 1.3.3 → 1.3.4
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/app/assets/stylesheets/tolk/screen.css +10 -10
- data/app/helpers/tolk/application_helper.rb +6 -2
- data/app/models/tolk/locale.rb +2 -1
- data/app/models/tolk/translation.rb +46 -7
- data/app/views/tolk/locales/all.html.erb +2 -0
- data/app/views/tolk/locales/show.html.erb +1 -0
- data/app/views/tolk/searches/show.html.erb +1 -0
- data/lib/tolk/import.rb +9 -5
- data/lib/tolk/version.rb +1 -1
- metadata +2 -2
@@ -3,20 +3,20 @@ Defaults
|
|
3
3
|
-------------------------------------------------*/
|
4
4
|
|
5
5
|
acronym, abbr {
|
6
|
-
font-variant: small-caps;
|
7
|
-
text-transform: lowercase;
|
6
|
+
font-variant: small-caps;
|
7
|
+
text-transform: lowercase;
|
8
8
|
font-weight: bold;
|
9
9
|
}
|
10
10
|
|
11
|
-
.center {text-align: center;}
|
12
|
-
.large {font-size: larger;}
|
11
|
+
.center {text-align: center;}
|
12
|
+
.large {font-size: larger;}
|
13
13
|
.small {font-size: smaller;}
|
14
14
|
strong {font-weight: bold;}
|
15
15
|
em {font-style: italic;}
|
16
16
|
|
17
|
-
.clear {clear: both;}
|
18
|
-
.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
19
|
-
.clearfix { display: inline-block; }
|
17
|
+
.clear {clear: both;}
|
18
|
+
.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
19
|
+
.clearfix { display: inline-block; }
|
20
20
|
.clearfix{ display: block; }
|
21
21
|
|
22
22
|
a {color: #888;}
|
@@ -28,8 +28,8 @@ Layout
|
|
28
28
|
|
29
29
|
body {
|
30
30
|
font-family: "Lucida Sans", "Lucida Grande", "Lucida Sans Unicode", sans-serif;
|
31
|
-
background: #e5e5e5;
|
32
|
-
color: #333;
|
31
|
+
background: #e5e5e5;
|
32
|
+
color: #333;
|
33
33
|
margin: 0;
|
34
34
|
padding: 0;
|
35
35
|
font-size: 14px;
|
@@ -288,7 +288,7 @@ table.translations .highlight {
|
|
288
288
|
background-color: yellow;
|
289
289
|
}
|
290
290
|
|
291
|
-
table.translations .phrase .carriage_return {
|
291
|
+
table.translations .phrase .carriage_return, table.translations .phrase .boolean {
|
292
292
|
color: #2fadcf;
|
293
293
|
font-weight: bold;
|
294
294
|
}
|
@@ -10,14 +10,18 @@ module Tolk
|
|
10
10
|
|
11
11
|
def yaml_value(value)
|
12
12
|
if value.present?
|
13
|
-
unless value.is_a?(String)
|
13
|
+
unless value.is_a?(String) || value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
14
14
|
value = value.respond_to?(:ya2yaml) ? value.ya2yaml(:syck_compatible => true) : value.to_yaml
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
value
|
19
19
|
end
|
20
20
|
|
21
|
+
def boolean_warning
|
22
|
+
'<span class="boolean">(Do not translate -- Enter true or false)</span>'.html_safe
|
23
|
+
end
|
24
|
+
|
21
25
|
def tolk_locale_selection
|
22
26
|
existing_locale_names = Tolk::Locale.all.map(&:name)
|
23
27
|
|
data/app/models/tolk/locale.rb
CHANGED
@@ -64,7 +64,8 @@ module Tolk
|
|
64
64
|
self.special_prefixes.include?(prefix) || self.special_keys.include?(key)
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
# http://cldr.unicode.org/index/cldr-spec/plural-rules - TODO: usage of 'none' isn't standard-conform
|
68
|
+
PLURALIZATION_KEYS = ['none', 'zero', 'one', 'two', 'few', 'many', 'other']
|
68
69
|
def pluralization_data?(data)
|
69
70
|
keys = data.keys.map(&:to_s)
|
70
71
|
keys.all? {|k| PLURALIZATION_KEYS.include?(k) }
|
@@ -5,7 +5,8 @@ module Tolk
|
|
5
5
|
scope :containing_text, lambda {|query| where("tolk_translations.text LIKE ?", "%#{query}%") }
|
6
6
|
|
7
7
|
serialize :text
|
8
|
-
|
8
|
+
serialize :previous_text
|
9
|
+
validates_presence_of :text, :if => proc {|r| r.primary.blank? && !r.explicit_nil && !r.boolean?}
|
9
10
|
validate :check_matching_variables, :if => proc { |tr| tr.primary_translation.present? }
|
10
11
|
|
11
12
|
validates_uniqueness_of :phrase_id, :scope => :locale_id
|
@@ -27,6 +28,10 @@ module Tolk
|
|
27
28
|
attr_accessor :explicit_nil
|
28
29
|
before_validation :set_explicit_nil
|
29
30
|
|
31
|
+
def boolean?
|
32
|
+
text.is_a?(TrueClass) || text.is_a?(FalseClass) || text == 't' || text == 'f'
|
33
|
+
end
|
34
|
+
|
30
35
|
def up_to_date?
|
31
36
|
not out_of_date?
|
32
37
|
end
|
@@ -45,24 +50,47 @@ module Tolk
|
|
45
50
|
|
46
51
|
def text=(value)
|
47
52
|
value = value.to_s if value.kind_of?(Fixnum)
|
48
|
-
|
53
|
+
if primary_translation && primary_translation.boolean?
|
54
|
+
value = case value.to_s.downcase.strip
|
55
|
+
when 'true', 't'
|
56
|
+
true
|
57
|
+
when 'false', 'f'
|
58
|
+
false
|
59
|
+
else
|
60
|
+
self.explicit_nil = true
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
super unless value == text
|
64
|
+
else
|
65
|
+
super unless value.to_s == text
|
66
|
+
end
|
49
67
|
end
|
50
68
|
|
51
69
|
def value
|
52
70
|
if text.is_a?(String) && /^\d+$/.match(text)
|
53
71
|
text.to_i
|
72
|
+
elsif (primary_translation || self).boolean?
|
73
|
+
%w[true t].member?(text.to_s.downcase.strip)
|
54
74
|
else
|
55
75
|
text
|
56
76
|
end
|
57
77
|
end
|
58
78
|
|
59
79
|
def self.detect_variables(search_in)
|
60
|
-
case search_in
|
80
|
+
variables = case search_in
|
61
81
|
when String then Set.new(search_in.scan(/\{\{(\w+)\}\}/).flatten + search_in.scan(/\%\{(\w+)\}/).flatten)
|
62
82
|
when Array then search_in.inject(Set[]) { |carry, item| carry + detect_variables(item) }
|
63
83
|
when Hash then search_in.values.inject(Set[]) { |carry, item| carry + detect_variables(item) }
|
64
84
|
else Set[]
|
65
85
|
end
|
86
|
+
|
87
|
+
# delete special i18n variable used for pluralization itself (might not be used in all values of
|
88
|
+
# the pluralization keys, but is essential to use pluralization at all)
|
89
|
+
if search_in.is_a?(Hash) && Tolk::Locale.pluralization_data?(search_in)
|
90
|
+
variables.delete_if {|v| v == 'count' }
|
91
|
+
else
|
92
|
+
variables
|
93
|
+
end
|
66
94
|
end
|
67
95
|
|
68
96
|
def variables
|
@@ -92,7 +120,18 @@ module Tolk
|
|
92
120
|
end
|
93
121
|
end
|
94
122
|
|
95
|
-
|
123
|
+
if primary_translation.boolean?
|
124
|
+
self.text = case self.text.to_s.strip
|
125
|
+
when 'true'
|
126
|
+
true
|
127
|
+
when 'false'
|
128
|
+
false
|
129
|
+
else
|
130
|
+
nil
|
131
|
+
end
|
132
|
+
elsif primary_translation.text.class != self.text.class
|
133
|
+
self.text = nil
|
134
|
+
end
|
96
135
|
end
|
97
136
|
|
98
137
|
true
|
@@ -110,10 +149,10 @@ module Tolk
|
|
110
149
|
|
111
150
|
def check_matching_variables
|
112
151
|
unless variables_match?
|
113
|
-
if primary_translation.variables.empty?
|
114
|
-
self.errors.add(:
|
152
|
+
if primary_translation.variables.empty?
|
153
|
+
self.errors.add(:variables, "The primary translation does not contain substitutions, so this should neither.")
|
115
154
|
else
|
116
|
-
self.errors.add(:
|
155
|
+
self.errors.add(:variables, "The translation should contain the substitutions of the primary translation: (#{primary_translation.variables.to_a.join(', ')}), found (#{self.variables.to_a.join(', ')}).")
|
117
156
|
end
|
118
157
|
end
|
119
158
|
end
|
@@ -31,6 +31,7 @@
|
|
31
31
|
<div class="updated">
|
32
32
|
<span class="key">Updated</span>
|
33
33
|
<%= format_i18n_value(phrase.translations.primary.text) -%>
|
34
|
+
<%= boolean_warning if phrase.translations.primary.boolean? -%>
|
34
35
|
</div>
|
35
36
|
<div class="original">
|
36
37
|
<span class="key">Original</span>
|
@@ -38,6 +39,7 @@
|
|
38
39
|
</div>
|
39
40
|
<% else %>
|
40
41
|
<%= format_i18n_value(phrase.translations.primary.text) -%>
|
42
|
+
<%= boolean_warning if phrase.translations.primary.boolean? -%>
|
41
43
|
<% end %>
|
42
44
|
|
43
45
|
<span class="key"><%= phrase.key %></span>
|
@@ -35,6 +35,7 @@
|
|
35
35
|
<% else -%>
|
36
36
|
<%= format_i18n_value(phrase.translations.primary.text) -%>
|
37
37
|
<% end -%>
|
38
|
+
<%= boolean_warning if phrase.translations.primary.boolean? -%>
|
38
39
|
<span class="key" title="<%= phrase.key %>"><%= truncate(phrase.key, :length => 100) %></span>
|
39
40
|
</td>
|
40
41
|
</tr>
|
@@ -32,6 +32,7 @@
|
|
32
32
|
<% else -%>
|
33
33
|
<%= format_i18n_value(phrase.translations.primary.text) -%>
|
34
34
|
<% end -%>
|
35
|
+
<%= boolean_warning if phrase.translations.primary.boolean? -%>
|
35
36
|
<span class="key" title="<%= phrase.key %>"><%= params[:k].present? ?
|
36
37
|
highlight(h(truncate(phrase.key, :length => 100)), params[:k]) :
|
37
38
|
h(truncate(phrase.key, :length => 100)) %></span>
|
data/lib/tolk/import.rb
CHANGED
@@ -8,13 +8,13 @@ module Tolk
|
|
8
8
|
|
9
9
|
def import_secondary_locales
|
10
10
|
locales = Dir.entries(self.locales_config_path)
|
11
|
-
|
12
|
-
locale_block_filter = Proc.new {
|
11
|
+
|
12
|
+
locale_block_filter = Proc.new {
|
13
13
|
|l| ['.', '..'].include?(l) ||
|
14
14
|
!l.ends_with?('.yml') ||
|
15
15
|
l.match(/(.*\.){2,}/) # reject files of type xxx.en.yml
|
16
16
|
}
|
17
|
-
locales = locales.reject(&locale_block_filter).map {|x| x.split('.').first }
|
17
|
+
locales = locales.reject(&locale_block_filter).map {|x| x.split('.').first }
|
18
18
|
locales = locales - [Tolk::Locale.primary_locale.name]
|
19
19
|
locales.each {|l| import_locale(l) }
|
20
20
|
end
|
@@ -32,9 +32,13 @@ module Tolk
|
|
32
32
|
|
33
33
|
if phrase
|
34
34
|
translation = locale.translations.new(:text => value, :phrase => phrase)
|
35
|
-
|
35
|
+
if translation.save
|
36
|
+
count = count + 1
|
37
|
+
elsif translation.errors[:variables].present?
|
38
|
+
puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
|
39
|
+
end
|
36
40
|
else
|
37
|
-
puts "[ERROR] Key '#{key}' was found in #{locale_name}.yml but #{Tolk::Locale.primary_language_name} translation is missing"
|
41
|
+
puts "[ERROR] Key '#{key}' was found in '#{locale_name}.yml' but #{Tolk::Locale.primary_language_name} translation is missing"
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
data/lib/tolk/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tolk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-10-25 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: will_paginate
|