tml-rails 4.4.1 → 4.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -25
- data/app/controllers/tml_rails/tools_controller.rb +8 -1
- data/app/views/tml_rails/tags/_language_selector_bootstrap.html.erb +21 -8
- data/app/views/tml_rails/tags/{_language_selector_select.html.erb → _language_selector_dropdown.html.erb} +11 -2
- data/app/views/tml_rails/tags/_language_selector_flags.html.erb +19 -0
- data/config/routes.rb +5 -1
- data/lib/tml_rails/core/string.rb +2 -0
- data/lib/tml_rails/extensions/action_common_methods.rb +12 -0
- data/lib/tml_rails/extensions/action_controller_extension.rb +5 -4
- data/lib/tml_rails/extensions/action_view_extension.rb +21 -12
- data/lib/tml_rails/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e992a68bd9ca23d3a6c095d44db4d4cf4e0bb77
|
4
|
+
data.tar.gz: 1a7847dfb32417c88636343cb4570fcd18842067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1c837e64efcdf9136754b9b0d4ad25576bfac7c9c215cf02c2adbf95ec020fe24868438a3081802428293e8f700bb156cc741379f7ab9771123d72ea51e62b6
|
7
|
+
data.tar.gz: e57f7967637af87ffa84a1292892c696e517cafdc47e32db0d6f89c4e859ad709f226d598aa6257e7b98fc3dab239835de8794737baaf06a4142835302178aae
|
data/README.md
CHANGED
@@ -43,8 +43,8 @@ Tml.configure do |config|
|
|
43
43
|
:token => YOUR_APPLICATION_TOKEN,
|
44
44
|
}
|
45
45
|
config.cache = {
|
46
|
-
:
|
47
|
-
:
|
46
|
+
:enablec => true,
|
47
|
+
:adapter => 'rails'
|
48
48
|
}
|
49
49
|
end
|
50
50
|
```
|
@@ -82,8 +82,7 @@ config.cache_store = :redis_store, {
|
|
82
82
|
:host => 'localhost',
|
83
83
|
:port => 6379,
|
84
84
|
:db => 0,
|
85
|
-
:namespace => 'my_cache'
|
86
|
-
:expires_in => 90.minutes
|
85
|
+
:namespace => 'my_cache'
|
87
86
|
}
|
88
87
|
```
|
89
88
|
|
@@ -100,8 +99,7 @@ config/initializers/tml.rb
|
|
100
99
|
```ruby
|
101
100
|
config.cache = {
|
102
101
|
:enabled => true,
|
103
|
-
:adapter => 'rails'
|
104
|
-
:version => 1
|
102
|
+
:adapter => 'rails'
|
105
103
|
}
|
106
104
|
```
|
107
105
|
|
@@ -112,9 +110,7 @@ config.cache = {
|
|
112
110
|
:enabled => true,
|
113
111
|
:adapter => 'memcache',
|
114
112
|
:host => 'localhost:11211',
|
115
|
-
:namespace => 'translations'
|
116
|
-
:version => 1,
|
117
|
-
:timeout => 3600
|
113
|
+
:namespace => 'translations'
|
118
114
|
}
|
119
115
|
```
|
120
116
|
|
@@ -127,9 +123,7 @@ config.cache = {
|
|
127
123
|
:host => 'localhost',
|
128
124
|
:port => 6379,
|
129
125
|
:password => 'password',
|
130
|
-
:namespace => 'translations'
|
131
|
-
:version => 1,
|
132
|
-
:timeout => 3600
|
126
|
+
:namespace => 'translations'
|
133
127
|
}
|
134
128
|
```
|
135
129
|
|
@@ -160,26 +154,16 @@ config.cache = {
|
|
160
154
|
:enabled => true,
|
161
155
|
:adapter => 'file',
|
162
156
|
:path => 'config/tml',
|
163
|
-
:version => 'current'
|
164
|
-
:segmented => false
|
157
|
+
:version => 'current'
|
165
158
|
}
|
166
159
|
```
|
167
160
|
|
168
|
-
|
169
|
-
|
170
|
-
The file based cache must be generated before you deploy your application using the following command:
|
161
|
+
The file based cache can be generated from your current release using the following command:
|
171
162
|
|
172
163
|
```sh
|
173
164
|
$ bundle exec rake tml:cache:generate
|
174
165
|
```
|
175
166
|
|
176
|
-
You can also rollback to the previous file cache using:
|
177
|
-
|
178
|
-
```sh
|
179
|
-
$ bundle exec rake tml:cache:rollback
|
180
|
-
```
|
181
|
-
|
182
|
-
|
183
167
|
Integration
|
184
168
|
===================================
|
185
169
|
|
@@ -241,7 +225,7 @@ you can simply use:
|
|
241
225
|
"Hello World".translate
|
242
226
|
```
|
243
227
|
|
244
|
-
Learn more about TML at: http://
|
228
|
+
Learn more about TML at: http://translationexchange.com/docs
|
245
229
|
|
246
230
|
|
247
231
|
I18n fallback
|
@@ -33,9 +33,16 @@ module TmlRails
|
|
33
33
|
class ToolsController < ApplicationController
|
34
34
|
|
35
35
|
def upgrade
|
36
|
-
if
|
36
|
+
if Tml.config.invalidator[:auth].is_a?(Proc)
|
37
|
+
authorized = Tml.config.invalidator[:auth].call(request)
|
38
|
+
else
|
39
|
+
authorized = params[:access_token] == Tml.config.access_token
|
40
|
+
end
|
41
|
+
|
42
|
+
if authorized
|
37
43
|
Tml.cache.upgrade_version
|
38
44
|
end
|
45
|
+
|
39
46
|
redirect_back
|
40
47
|
end
|
41
48
|
|
@@ -3,16 +3,18 @@
|
|
3
3
|
opts[:class] ||= 'dropdown'
|
4
4
|
%>
|
5
5
|
|
6
|
-
|
7
6
|
<style>
|
8
7
|
.trex-dropdown {
|
9
8
|
text-align:<%= tml_current_language.align("left") %>;
|
10
9
|
}
|
11
|
-
|
12
10
|
.trex-dropdown .trex-dropdown-menu {
|
13
11
|
min-width:200px;
|
14
12
|
}
|
15
|
-
|
13
|
+
.trex-native-name {
|
14
|
+
padding: 0px 5px;
|
15
|
+
color: #ccc;
|
16
|
+
font-size: 10px;
|
17
|
+
}
|
16
18
|
.trex-dropdown .trex-dropdown-footer {
|
17
19
|
font-size:10px;
|
18
20
|
color:#ccc;
|
@@ -24,11 +26,13 @@
|
|
24
26
|
border-bottom-left-radius: 5px;
|
25
27
|
border-bottom-right-radius: 5px;
|
26
28
|
}
|
27
|
-
|
28
29
|
</style>
|
29
30
|
|
30
31
|
|
31
|
-
|
32
|
+
<% if opts[:element] %>
|
33
|
+
<<%= opts[:element] %> class="trex-language-selector trex-dropdown <%= opts[:class] %>" style="<%= opts[:style] %>">
|
34
|
+
<% end %>
|
35
|
+
|
32
36
|
<a href="#" role="button" class="<%= opts[:class] || 'dropdown' %>-toggle" data-toggle="dropdown" dir="<%= tml_current_language.dir %>">
|
33
37
|
<%= tml_language_name_tag(tml_current_language, opts) %>
|
34
38
|
</a>
|
@@ -38,8 +42,14 @@
|
|
38
42
|
<% tml_application.languages.each do |lang| %>
|
39
43
|
|
40
44
|
<li dir="<%= tml_current_language.dir %>">
|
41
|
-
|
42
|
-
<%=
|
45
|
+
<% if Tml.config.locale[:subdomain] %>
|
46
|
+
<%=link_to(tml_subdomain_locale_url(lang.locale)) do %>
|
47
|
+
<%= tml_language_name_tag(lang, opts) %>
|
48
|
+
<% end %>
|
49
|
+
<% else %>
|
50
|
+
<%=link_to({:locale => lang.locale}) do %>
|
51
|
+
<%= tml_language_name_tag(lang, opts) %>
|
52
|
+
<% end %>
|
43
53
|
<% end %>
|
44
54
|
</li>
|
45
55
|
|
@@ -62,5 +72,8 @@
|
|
62
72
|
</a>
|
63
73
|
</div>
|
64
74
|
</ul>
|
65
|
-
|
75
|
+
|
76
|
+
<% if opts[:element] %>
|
77
|
+
</<%= opts[:element] %>>
|
78
|
+
<% end %>
|
66
79
|
|
@@ -1,11 +1,15 @@
|
|
1
1
|
<%= render(:partial => '/tml_rails/tags/language_selector_js') %>
|
2
2
|
|
3
|
+
<% if opts[:element] %>
|
4
|
+
<<%= opts[:element] %> class="trex-language-selector <%= opts[:class] %>" style="<%= opts[:style] %>">
|
5
|
+
<% end %>
|
6
|
+
|
3
7
|
<select id="tml_language_selector" onchange="tml_change_locale(this.options[this.selectedIndex].value)" style="<%=opts[:style]%>" class="<%=opts[:class]%>">
|
4
8
|
<% tml_application.languages.each do |lang| %>
|
5
9
|
<option dir='ltr' value="<%=lang.locale%>" <%="selected" if lang.locale == tml_current_locale %>>
|
6
|
-
<% if opts[:language] == :native %>
|
10
|
+
<% if opts[:language].to_sym == :native %>
|
7
11
|
<%= lang.native_name %>
|
8
|
-
<% elsif opts[:language] == :english %>
|
12
|
+
<% elsif opts[:language].to_sym == :english %>
|
9
13
|
<%= lang.english_name %>
|
10
14
|
<% else %>
|
11
15
|
<%= lang.english_name %>
|
@@ -13,3 +17,8 @@
|
|
13
17
|
</option>
|
14
18
|
<% end %>
|
15
19
|
</select>
|
20
|
+
|
21
|
+
<% if opts[:element] %>
|
22
|
+
</<%= opts[:element] %>>
|
23
|
+
<% end %>
|
24
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% if opts[:element] %>
|
2
|
+
<<%= opts[:element] %> class="trex-language-selector <%= opts[:class] %>" style="<%= opts[:style] %>">
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div style="<%=opts[:style]%>" class="trex-language-selector <%=opts[:class]%>">
|
6
|
+
|
7
|
+
<% tml_application.languages.each_with_index do |lang, index| %>
|
8
|
+
|
9
|
+
<%= link_to(params.merge(:locale => lang.locale), :style => (opts[:style] || 'padding-right:5px;text-decoration:none'), :class => opts[:class]) do %>
|
10
|
+
<%= image_tag(lang.flag_url) %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<% if opts[:element] %>
|
18
|
+
</<%= opts[:element] %>>
|
19
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -31,12 +31,14 @@
|
|
31
31
|
|
32
32
|
class String
|
33
33
|
|
34
|
+
# marks the string as translated and safe at the same time
|
34
35
|
def tml_translated
|
35
36
|
return self if frozen?
|
36
37
|
@tml_translated = true
|
37
38
|
self.html_safe
|
38
39
|
end
|
39
40
|
|
41
|
+
# indicates whether the string has been translated or not
|
40
42
|
def tml_translated?
|
41
43
|
@tml_translated
|
42
44
|
end
|
@@ -127,5 +127,17 @@ module TmlRails
|
|
127
127
|
tml_current_language.dir
|
128
128
|
end
|
129
129
|
|
130
|
+
def tml_subdomain_locale_url(locale = tml_current_locale)
|
131
|
+
uri = URI::parse(request.url)
|
132
|
+
host = uri.host.split('.')
|
133
|
+
if host.count == 2
|
134
|
+
host.unshift(locale)
|
135
|
+
else
|
136
|
+
host[0] = locale
|
137
|
+
end
|
138
|
+
uri.host = host.join('.')
|
139
|
+
uri.to_s
|
140
|
+
end
|
141
|
+
|
130
142
|
end
|
131
143
|
end
|
@@ -35,8 +35,8 @@ module TmlRails
|
|
35
35
|
def self.included(base)
|
36
36
|
base.send(:include, TmlRails::ActionCommonMethods)
|
37
37
|
base.send(:include, InstanceMethods)
|
38
|
-
base.before_filter :
|
39
|
-
base.after_filter :
|
38
|
+
base.before_filter :tml_init
|
39
|
+
base.after_filter :tml_reset
|
40
40
|
if defined? base.rescue_from
|
41
41
|
base.rescue_from 'Tml::Exception' do |e|
|
42
42
|
Tml.logger.error(e)
|
@@ -68,7 +68,7 @@ module TmlRails
|
|
68
68
|
self.class.name
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def tml_init
|
72
72
|
return if Tml.config.disabled?
|
73
73
|
|
74
74
|
@tml_started_at = Time.now
|
@@ -95,6 +95,7 @@ module TmlRails
|
|
95
95
|
|
96
96
|
unless tml_session_params[:locale]
|
97
97
|
tml_session_params.merge!(:cookies => cookies)
|
98
|
+
params[:locale] = request.subdomain if Tml.config.locale[:subdomain]
|
98
99
|
tml_session_params.merge!(:change_locale => true) if params[:locale]
|
99
100
|
tml_session_params.merge!(:locale => params[:locale] || tml_user_preferred_locale)
|
100
101
|
end
|
@@ -114,7 +115,7 @@ module TmlRails
|
|
114
115
|
end
|
115
116
|
end
|
116
117
|
|
117
|
-
def
|
118
|
+
def tml_reset
|
118
119
|
return if Tml.config.disabled?
|
119
120
|
@tml_finished_at = Time.now
|
120
121
|
tml_application.submit_missing_keys
|
@@ -46,15 +46,6 @@ module TmlRails
|
|
46
46
|
options_for_select(options.tro(description), selected)
|
47
47
|
end
|
48
48
|
|
49
|
-
def tml_phrases_link_tag(search = "", phrase_type = :without, phrase_status = :any)
|
50
|
-
return unless Tml.config.enabled?
|
51
|
-
return if tml_current_language.default?
|
52
|
-
return unless tml_current_translator.inline?
|
53
|
-
|
54
|
-
link_to(image_tag(tml_application.url_for("/assets/tml/translate_icn.gif"), :style => "vertical-align:middle; border: 0px;", :title => search),
|
55
|
-
tml_application.url_for("/tml/app/phrases/index?search=#{search}")).html_safe
|
56
|
-
end
|
57
|
-
|
58
49
|
def tml_language_flag_tag(lang = tml_current_language, opts = {})
|
59
50
|
return '' unless tml_application.feature_enabled?(:language_flags)
|
60
51
|
html = image_tag(lang.flag_url, :style => (opts[:style] || 'vertical-align:middle;'), :title => lang.native_name)
|
@@ -64,7 +55,7 @@ module TmlRails
|
|
64
55
|
|
65
56
|
def tml_language_name_tag(lang = tml_current_language, opts = {})
|
66
57
|
show_flag = opts[:flag].nil? ? true : opts[:flag]
|
67
|
-
name_type = opts[:language].nil? ? :english : opts[:language] # :full, :native, :english, :locale, :both
|
58
|
+
name_type = opts[:language].nil? ? :english : opts[:language].to_sym # :full, :native, :english, :locale, :both
|
68
59
|
|
69
60
|
html = []
|
70
61
|
html << "<span style='white-space: nowrap'>"
|
@@ -87,14 +78,16 @@ module TmlRails
|
|
87
78
|
end
|
88
79
|
|
89
80
|
html << '</span></span>'
|
90
|
-
html.join
|
81
|
+
html.join.html_safe
|
91
82
|
end
|
92
83
|
|
93
84
|
def tml_language_selector_tag(type = nil, opts = {})
|
94
85
|
return unless Tml.config.enabled?
|
95
86
|
|
96
87
|
type ||= :default
|
97
|
-
|
88
|
+
type = :dropdown if type == :select
|
89
|
+
|
90
|
+
unless [:bootstrap, :default, :inline, :dropdown, :popup, :flags].include?(type.to_sym)
|
98
91
|
return "Unsupported language selector #{type}"
|
99
92
|
end
|
100
93
|
|
@@ -142,6 +135,10 @@ module TmlRails
|
|
142
135
|
end
|
143
136
|
alias_method :tml_block, :tml_with_options_tag
|
144
137
|
|
138
|
+
def tml_source(source, &block)
|
139
|
+
tml_with_options_tag({source: source}, &block)
|
140
|
+
end
|
141
|
+
|
145
142
|
def tml_when_string_tag(time, opts = {})
|
146
143
|
elapsed_seconds = Time.now - time
|
147
144
|
if elapsed_seconds < 0
|
@@ -177,21 +174,33 @@ module TmlRails
|
|
177
174
|
## Language Direction Support
|
178
175
|
######################################################################
|
179
176
|
|
177
|
+
# switches CSS positions based on the language direction
|
178
|
+
# <%= tml_style_attribute_tag('float', 'right') %> => "float: right" : "float: left"
|
179
|
+
# <%= tml_style_attribute_tag('align', 'right') %> => "align: right" : "align: left"
|
180
180
|
def tml_style_attribute_tag(attr_name = 'float', default = 'right', lang = tml_current_language)
|
181
181
|
return "#{attr_name}:#{default}".html_safe if Tml.config.disabled?
|
182
182
|
"#{attr_name}:#{lang.align(default)}".html_safe
|
183
183
|
end
|
184
184
|
|
185
|
+
# supports directional CSS attributes
|
186
|
+
# <%= tml_style_directional_attribute_tag('padding', 'right', '5px') %> => "padding-right: 5px" : "padding-left: 5px"
|
185
187
|
def tml_style_directional_attribute_tag(attr_name = 'padding', default = 'right', value = '5px', lang = tml_current_language)
|
186
188
|
return "#{attr_name}-#{default}:#{value}".html_safe if Tml.config.disabled?
|
187
189
|
"#{attr_name}-#{lang.align(default)}:#{value}".html_safe
|
188
190
|
end
|
189
191
|
|
192
|
+
# provides the locale and direction of the language
|
193
|
+
def tml_html_attributes_tag(lang = tml_current_language)
|
194
|
+
"#{tml_lang_attribute_tag(lang)} #{tml_dir_attribute_tag(lang)}"
|
195
|
+
end
|
196
|
+
|
197
|
+
# providers the direction of the language
|
190
198
|
def tml_dir_attribute_tag(lang = tml_current_language)
|
191
199
|
return "dir='ltr'" if Tml.config.disabled?
|
192
200
|
"dir='#{lang.dir}'".html_safe
|
193
201
|
end
|
194
202
|
|
203
|
+
# provides the locale of the language
|
195
204
|
def tml_lang_attribute_tag(lang = tml_current_language)
|
196
205
|
return "lang='en-US'" if Tml.config.disabled?
|
197
206
|
"lang='#{lang.locale}'".html_safe
|
data/lib/tml_rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tml-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.4.
|
4
|
+
version: 4.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Berkovich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.4'
|
41
|
-
description:
|
41
|
+
description: Translation Markup Language from Translation Exchange.
|
42
42
|
email:
|
43
43
|
- michael@translationexchange.com
|
44
44
|
executables: []
|
@@ -51,10 +51,11 @@ files:
|
|
51
51
|
- app/controllers/tml_rails/tools_controller.rb
|
52
52
|
- app/views/tml_rails/tags/_language_selector_bootstrap.html.erb
|
53
53
|
- app/views/tml_rails/tags/_language_selector_default.html.erb
|
54
|
+
- app/views/tml_rails/tags/_language_selector_dropdown.html.erb
|
55
|
+
- app/views/tml_rails/tags/_language_selector_flags.html.erb
|
54
56
|
- app/views/tml_rails/tags/_language_selector_inline.html.erb
|
55
57
|
- app/views/tml_rails/tags/_language_selector_js.html.erb
|
56
58
|
- app/views/tml_rails/tags/_language_selector_popup.html.erb
|
57
|
-
- app/views/tml_rails/tags/_language_selector_select.html.erb
|
58
59
|
- app/views/tml_rails/tags/_language_strip.html.erb
|
59
60
|
- app/views/tml_rails/tags/_powered_by_trex.html.erb
|
60
61
|
- app/views/tml_rails/tags/_scripts.html.erb
|