tr8n_client_sdk 3.3.1 → 4.0.1
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.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +89 -246
- data/Rakefile +16 -31
- data/app/views/tr8n_client_sdk/tags/_language_selector.html.erb +5 -53
- data/app/views/tr8n_client_sdk/tags/_language_strip.html.erb +7 -7
- data/app/views/tr8n_client_sdk/tags/_powered_by_tr8n.html.erb +3 -15
- data/app/views/tr8n_client_sdk/tags/_scripts.html.erb +91 -33
- data/config/routes.rb +1 -33
- data/lib/{tr8n_client_sdk/core/string.rb → tasks/tr8n_client_sdk.rake} +12 -17
- data/lib/tr8n_client_sdk/engine.rb +1 -9
- data/lib/tr8n_client_sdk/extensions/action_common_methods.rb +18 -39
- data/lib/tr8n_client_sdk/extensions/action_controller_extension.rb +32 -63
- data/lib/tr8n_client_sdk/extensions/action_view_extension.rb +18 -48
- data/lib/tr8n_client_sdk/railtie.rb +2 -10
- data/lib/tr8n_client_sdk/version.rb +3 -10
- data/lib/tr8n_client_sdk.rb +2 -13
- metadata +15 -20
- data/app/controllers/tr8n_client_sdk/cache_controller.rb +0 -39
- data/lib/i18n/backend/tr8n.rb +0 -62
- data/lib/tasks/tr8n.rake +0 -60
- data/lib/tr8n/cache_adapters/rails.rb +0 -98
@@ -1,45 +1,103 @@
|
|
1
1
|
<% if Tr8n.config.enabled? %>
|
2
|
+
|
2
3
|
<style type="text/css">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
.tr8n_fltr {
|
5
|
+
<%=tr8n_style_attribute_tag('float', 'right')%> !important;
|
6
|
+
}
|
7
|
+
.tr8n_fltl {
|
8
|
+
<%=tr8n_style_attribute_tag('float', 'left')%> !important;
|
9
|
+
}
|
10
|
+
.tr8n_txtr {
|
11
|
+
<%=tr8n_style_attribute_tag('text-align', 'right')%> !important;
|
12
|
+
}
|
13
|
+
.tr8n_txtl {
|
14
|
+
<%=tr8n_style_attribute_tag('text-align', 'left')%> !important;
|
15
|
+
}
|
7
16
|
</style>
|
8
17
|
|
9
18
|
<script>
|
10
|
-
|
11
|
-
|
12
|
-
|
19
|
+
function tr8n_add_css(doc, value, inline) {
|
20
|
+
var css = null;
|
21
|
+
if (inline) {
|
22
|
+
css = doc.createElement('style');
|
23
|
+
css.type = 'text/css';
|
24
|
+
if (css.styleSheet){
|
25
|
+
css.styleSheet.cssText = value;
|
26
|
+
} else {
|
27
|
+
css.appendChild(document.createTextNode(value));
|
28
|
+
}
|
29
|
+
} else {
|
30
|
+
css = doc.createElement('link');
|
31
|
+
css.setAttribute('type', 'text/css');
|
32
|
+
css.setAttribute('rel', 'stylesheet');
|
33
|
+
css.setAttribute('media', 'screen');
|
34
|
+
|
35
|
+
if (value.indexOf('//') != -1) {
|
36
|
+
css.setAttribute('href', value);
|
37
|
+
} else {
|
38
|
+
css.setAttribute('href', '<%= tr8n_application.host %>' + value);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
doc.getElementsByTagName('head')[0].appendChild(css);
|
42
|
+
return css;
|
43
|
+
}
|
13
44
|
|
14
|
-
|
15
|
-
script.
|
45
|
+
function tr8n_add_script(doc, id, src, onload) {
|
46
|
+
var script = doc.createElement('script');
|
47
|
+
script.setAttribute('id', id);
|
16
48
|
script.setAttribute('type', 'application/javascript');
|
17
|
-
|
49
|
+
if (src.indexOf('//') != -1) {
|
50
|
+
script.setAttribute('src', src);
|
51
|
+
} else {
|
52
|
+
script.setAttribute('src', '<%= tr8n_application.host %>' + src);
|
53
|
+
}
|
18
54
|
script.setAttribute('charset', 'UTF-8');
|
19
|
-
script.onload =
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
%>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
55
|
+
if (onload) script.onload = onload;
|
56
|
+
doc.getElementsByTagName('head')[0].appendChild(script);
|
57
|
+
return script;
|
58
|
+
}
|
59
|
+
|
60
|
+
(function() {
|
61
|
+
if (window.addEventListener) window.addEventListener('load', tr8n_init, false); // Standard
|
62
|
+
else if (window.attachEvent) window.attachEvent('onload', tr8n_init); // Microsoft
|
63
|
+
window.setTimeout(function() { // just in case, hit it one more time a second later
|
64
|
+
tr8n_init();
|
65
|
+
}, 1000);
|
66
|
+
|
67
|
+
function tr8n_init() {
|
68
|
+
if (window.tr8n_already_initialized) return;
|
69
|
+
window.tr8n_already_initialized = true;
|
70
|
+
|
71
|
+
tr8n_add_css(window.document, '/assets/tr8n/tools.css', false);
|
72
|
+
tr8n_add_css(window.document, "<%= tr8n_application.css %>", true);
|
73
|
+
|
74
|
+
tr8n_add_script(window.document, 'tr8n-jssdk', '/assets/tools.js?t=<%=Time.now%>', function() {
|
75
|
+
Tr8n.app_key = '<%= tr8n_application.key %>';
|
76
|
+
Tr8n.host = '<%= tr8n_application.host %>';
|
77
|
+
Tr8n.sources = [];
|
78
|
+
Tr8n.default_locale = '<%= tr8n_application.default_locale %>';
|
79
|
+
Tr8n.page_locale = '<%= tr8n_current_language.locale %>';
|
80
|
+
Tr8n.locale = '<%= tr8n_current_language.locale %>';
|
41
81
|
|
42
|
-
|
82
|
+
<%
|
83
|
+
if tr8n_application.feature_enabled?(:shortcuts)
|
84
|
+
tr8n_application.shortcuts.each do |key, script|
|
85
|
+
%>
|
86
|
+
shortcut.add('<%=key.html_safe%>', function() {
|
87
|
+
<%= script.html_safe %>
|
88
|
+
});
|
89
|
+
<%
|
90
|
+
end
|
91
|
+
end
|
92
|
+
%>
|
93
|
+
|
94
|
+
if (typeof(tr8n_on_ready) === 'function') {
|
95
|
+
tr8n_on_ready();
|
96
|
+
}
|
97
|
+
});
|
98
|
+
}
|
43
99
|
})();
|
44
100
|
</script>
|
101
|
+
|
102
|
+
|
45
103
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -1,34 +1,2 @@
|
|
1
|
-
|
2
|
-
# Copyright (c) 2015 Translation Exchange Inc. http://translationexchange.com
|
3
|
-
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
13
|
-
# a copy of this software and associated documentation files (the
|
14
|
-
# "Software"), to deal in the Software without restriction, including
|
15
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
16
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
17
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
18
|
-
# the following conditions:
|
19
|
-
#
|
20
|
-
# The above copyright notice and this permission notice shall be
|
21
|
-
# included in all copies or substantial portions of the Software.
|
22
|
-
#
|
23
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
24
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
25
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
26
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
27
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
28
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
29
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
30
|
-
#++
|
31
|
-
|
32
|
-
Rails.application.routes.draw do
|
33
|
-
get '/tr8n/upgrade' => 'tr8n_client_sdk/cache#upgrade'
|
1
|
+
Tr8nClientSdk::Engine.routes.draw do
|
34
2
|
end
|
@@ -1,14 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2010-2013 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
13
5
|
# a copy of this software and associated documentation files (the
|
14
6
|
# "Software"), to deal in the Software without restriction, including
|
@@ -29,16 +21,19 @@
|
|
29
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
30
22
|
#++
|
31
23
|
|
32
|
-
|
24
|
+
namespace :tr8n_client_sdk do
|
33
25
|
|
34
|
-
|
35
|
-
|
36
|
-
@tr8n_translated = true
|
37
|
-
self.html_safe
|
26
|
+
task :init => :environment do
|
27
|
+
|
38
28
|
end
|
39
29
|
|
40
|
-
|
41
|
-
|
30
|
+
task :cache do
|
31
|
+
require "tr8n_client_sdk/config"
|
32
|
+
Tr8n.config = Tr8nClientSdk::Config.new
|
33
|
+
|
34
|
+
Tr8n.config.init_application
|
35
|
+
g = Tr8nCore::Generators::Cache::File.new
|
36
|
+
g.run
|
42
37
|
end
|
43
38
|
|
44
|
-
end
|
39
|
+
end
|
@@ -1,14 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
13
5
|
# a copy of this software and associated documentation files (the
|
14
6
|
# "Software"), to deal in the Software without restriction, including
|
@@ -1,14 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
13
5
|
# a copy of this software and associated documentation files (the
|
14
6
|
# "Software"), to deal in the Software without restriction, including
|
@@ -34,16 +26,16 @@ module Tr8nClientSdk
|
|
34
26
|
############################################################
|
35
27
|
# There are three ways to call the tr method
|
36
28
|
#
|
37
|
-
# tr(label, desc =
|
29
|
+
# tr(label, desc = "", tokens = {}, options = {})
|
38
30
|
# or
|
39
31
|
# tr(label, tokens = {}, options = {})
|
40
32
|
# or
|
41
|
-
# tr(:label => label, :description =>
|
33
|
+
# tr(:label => label, :description => "", :tokens => {}, :options => {})
|
42
34
|
############################################################
|
43
|
-
def tr(label, description =
|
44
|
-
|
45
|
-
return params[:label].html_safe if params[:label].tr8n_translated?
|
35
|
+
def tr(label, description = "", tokens = {}, options = {})
|
36
|
+
return label.html_safe if label.tr8n_translated?
|
46
37
|
|
38
|
+
params = Tr8n::Utils.normalize_tr_params(label, description, tokens, options)
|
47
39
|
params[:options][:caller] = caller
|
48
40
|
|
49
41
|
if request
|
@@ -52,7 +44,7 @@ module Tr8nClientSdk
|
|
52
44
|
end
|
53
45
|
|
54
46
|
if Tr8n.config.disabled?
|
55
|
-
return Tr8n.
|
47
|
+
return Tr8n::TranslationKey.substitute_tokens(params[:label], params[:tokens], params[:options]).tr8n_translated.html_safe
|
56
48
|
end
|
57
49
|
|
58
50
|
# Translate individual sentences
|
@@ -65,33 +57,32 @@ module Tr8nClientSdk
|
|
65
57
|
return text.tr8n_translated.html_safe
|
66
58
|
end
|
67
59
|
|
68
|
-
|
60
|
+
tr8n_current_language.translate(params).tr8n_translated.html_safe
|
69
61
|
rescue Tr8n::Exception => ex
|
70
|
-
#
|
71
|
-
Tr8n.
|
72
|
-
#Tr8n.logger.error(ex.message + "\n=> " + ex.backtrace.join("\n=> "))
|
62
|
+
Tr8n::Logger.error("ERROR: #{label}")
|
63
|
+
Tr8n::Logger.error(ex.message + "\n=> " + ex.backtrace.join("\n=> "))
|
73
64
|
label
|
74
65
|
end
|
75
66
|
|
76
67
|
# for translating labels
|
77
|
-
def trl(label, description =
|
68
|
+
def trl(label, description = "", tokens = {}, options = {})
|
78
69
|
params = Tr8n::Utils.normalize_tr_params(label, description, tokens, options)
|
79
70
|
params[:options][:skip_decorations] = true
|
80
71
|
tr(params)
|
81
72
|
end
|
82
73
|
|
83
74
|
# flash notice
|
84
|
-
def trfn(label, desc =
|
75
|
+
def trfn(label, desc = "", tokens = {}, options = {})
|
85
76
|
flash[:trfn] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
86
77
|
end
|
87
78
|
|
88
79
|
# flash error
|
89
|
-
def trfe(label, desc =
|
80
|
+
def trfe(label, desc = "", tokens = {}, options = {})
|
90
81
|
flash[:trfe] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
91
82
|
end
|
92
83
|
|
93
84
|
# flash warning
|
94
|
-
def trfw(label, desc =
|
85
|
+
def trfw(label, desc = "", tokens = {}, options = {})
|
95
86
|
flash[:trfw] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
96
87
|
end
|
97
88
|
|
@@ -99,32 +90,20 @@ module Tr8nClientSdk
|
|
99
90
|
## Common methods - wrappers
|
100
91
|
######################################################################
|
101
92
|
|
102
|
-
def tr8n_session
|
103
|
-
Tr8n.session
|
104
|
-
end
|
105
|
-
|
106
93
|
def tr8n_application
|
107
|
-
|
94
|
+
Tr8n.session.application
|
108
95
|
end
|
109
96
|
|
110
97
|
def tr8n_current_user
|
111
|
-
|
98
|
+
Tr8n.session.current_user
|
112
99
|
end
|
113
100
|
|
114
101
|
def tr8n_current_translator
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
def tr8n_current_locale
|
119
|
-
tr8n_session.current_language.locale
|
102
|
+
Tr8n.session.current_translator
|
120
103
|
end
|
121
104
|
|
122
105
|
def tr8n_current_language
|
123
|
-
|
124
|
-
end
|
125
|
-
|
126
|
-
def tr8n_language_dir
|
127
|
-
tr8n_current_language.dir
|
106
|
+
Tr8n.session.current_language
|
128
107
|
end
|
129
108
|
|
130
109
|
end
|
@@ -1,14 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
13
5
|
# a copy of this software and associated documentation files (the
|
14
6
|
# "Software"), to deal in the Software without restriction, including
|
@@ -33,18 +25,10 @@ module Tr8nClientSdk
|
|
33
25
|
module ActionControllerExtension
|
34
26
|
|
35
27
|
def self.included(base)
|
36
|
-
base.send(:include, Tr8nClientSdk::ActionCommonMethods)
|
37
|
-
base.send(:include, InstanceMethods)
|
28
|
+
base.send(:include, Tr8nClientSdk::ActionCommonMethods)
|
29
|
+
base.send(:include, InstanceMethods)
|
38
30
|
base.before_filter :tr8n_init_client_sdk
|
39
31
|
base.after_filter :tr8n_reset_client_sdk
|
40
|
-
if defined? base.rescue_from
|
41
|
-
base.rescue_from 'Tr8n::Exception' do |e|
|
42
|
-
Tr8n.logger.error(e)
|
43
|
-
Tr8n.logger.error(e.backtrace)
|
44
|
-
Tr8n.session.reset
|
45
|
-
raise e
|
46
|
-
end
|
47
|
-
end
|
48
32
|
end
|
49
33
|
|
50
34
|
module InstanceMethods
|
@@ -60,7 +44,7 @@ module Tr8nClientSdk
|
|
60
44
|
end
|
61
45
|
Tr8n.config.default_locale
|
62
46
|
end
|
63
|
-
|
47
|
+
|
64
48
|
# Overwrite this method in a controller to assign a custom source for all views
|
65
49
|
def tr8n_source
|
66
50
|
"/#{controller_name}/#{action_name}"
|
@@ -71,47 +55,19 @@ module Tr8nClientSdk
|
|
71
55
|
# Overwrite this method in a controller to assign a custom component for all views
|
72
56
|
def tr8n_component
|
73
57
|
nil
|
74
|
-
end
|
75
|
-
|
76
|
-
def tr8n_cookie_name
|
77
|
-
"tr8n_#{tr8n_application.key}"
|
78
|
-
end
|
79
|
-
|
80
|
-
def tr8n_cookie
|
81
|
-
request.cookies[tr8n_cookie_name]
|
82
|
-
end
|
83
|
-
|
84
|
-
def tr8n_cookie_params
|
85
|
-
@tr8n_cookie_params ||= begin
|
86
|
-
if tr8n_cookie
|
87
|
-
cookie_params = Tr8n::Utils.decode_and_verify_params(tr8n_cookie, tr8n_application.secret)
|
88
|
-
Tr8n.logger.info(cookie_params.inspect)
|
89
|
-
cookie_params
|
90
|
-
else
|
91
|
-
{}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
58
|
+
end
|
95
59
|
|
96
|
-
def
|
97
|
-
tr8n_cookie_params["locale"]
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
def tr8n_locale
|
60
|
+
def tr8n_init_current_locale
|
102
61
|
self.send(Tr8n.config.current_locale_method) if Tr8n.config.current_locale_method
|
103
62
|
rescue
|
104
|
-
# fallback onto the cookie params from the service
|
105
|
-
return tr8n_translator_locale if tr8n_translator_locale
|
106
|
-
|
107
63
|
# fallback to the default session based locale implementation
|
108
64
|
# choose the first language from the accepted languages header
|
109
65
|
session[:locale] = tr8n_user_preferred_locale unless session[:locale]
|
110
66
|
session[:locale] = params[:locale] if params[:locale]
|
111
|
-
session[:locale]
|
67
|
+
session[:locale]
|
112
68
|
end
|
113
69
|
|
114
|
-
def
|
70
|
+
def tr8n_init_current_user
|
115
71
|
self.send(Tr8n.config.current_user_method) if Tr8n.config.current_user_method
|
116
72
|
rescue
|
117
73
|
nil
|
@@ -120,26 +76,39 @@ module Tr8nClientSdk
|
|
120
76
|
def tr8n_init_client_sdk
|
121
77
|
return if Tr8n.config.disabled?
|
122
78
|
|
79
|
+
Tr8n.logger.info("Initializing request...")
|
123
80
|
@tr8n_started_at = Time.now
|
124
81
|
|
125
|
-
Tr8n.session.init
|
126
|
-
|
127
|
-
|
128
|
-
:user => tr8n_user,
|
129
|
-
:source => tr8n_source,
|
130
|
-
:component => tr8n_component
|
131
|
-
)
|
82
|
+
Tr8n.session.init
|
83
|
+
|
84
|
+
translator = nil
|
132
85
|
|
133
|
-
|
134
|
-
|
86
|
+
cookie_name = "tr8n_#{tr8n_application.key}"
|
87
|
+
if request.cookies[cookie_name]
|
88
|
+
Tr8n.logger.info("Cookie exists:")
|
89
|
+
cookie_params = Tr8n::Utils.decode_and_verify_params(request.cookies[cookie_name], tr8n_application.secret)
|
90
|
+
Tr8n.logger.info(cookie_params.inspect)
|
91
|
+
locale = cookie_params["locale"]
|
92
|
+
translator = Tr8n::Translator.new(cookie_params["translator"].merge(:application => tr8n_application)) unless cookie_params["translator"].nil?
|
93
|
+
else
|
94
|
+
Tr8n.logger.info("Cookie does not exist")
|
95
|
+
end
|
96
|
+
|
97
|
+
Tr8n.session.current_user = tr8n_init_current_user
|
98
|
+
Tr8n.session.current_translator = translator
|
99
|
+
Tr8n.session.current_language = tr8n_application.language(locale || tr8n_init_current_locale)
|
100
|
+
Tr8n.session.current_source = tr8n_source
|
101
|
+
Tr8n.session.current_component = tr8n_component
|
135
102
|
end
|
136
103
|
|
137
104
|
def tr8n_reset_client_sdk
|
138
|
-
return if Tr8n.config.disabled?
|
139
105
|
@tr8n_finished_at = Time.now
|
106
|
+
|
107
|
+
Tr8n.logger.info("Resetting request...")
|
140
108
|
tr8n_application.submit_missing_keys
|
141
109
|
Tr8n.session.reset
|
142
|
-
|
110
|
+
|
111
|
+
Tr8n.logger.info("Request took #{@tr8n_finished_at - @tr8n_started_at} mls")
|
143
112
|
end
|
144
113
|
|
145
114
|
end
|
@@ -1,14 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
|
-
# _______ _ _ _ ______ _
|
5
|
-
# |__ __| | | | | (_) | ____| | |
|
6
|
-
# | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
|
7
|
-
# | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
|
8
|
-
# | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
|
9
|
-
# |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
|
10
|
-
# __/ |
|
11
|
-
# |___/
|
12
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
13
5
|
# a copy of this software and associated documentation files (the
|
14
6
|
# "Software"), to deal in the Software without restriction, including
|
@@ -33,15 +25,6 @@ module Tr8nClientSdk
|
|
33
25
|
module ActionViewExtension
|
34
26
|
extend ActiveSupport::Concern
|
35
27
|
|
36
|
-
def trh(tokens = {}, options = {}, &block)
|
37
|
-
return '' unless block_given?
|
38
|
-
|
39
|
-
label = capture(&block)
|
40
|
-
|
41
|
-
tokenizer = Tr8n::Tokenizers::Dom.new(tokens, options)
|
42
|
-
tokenizer.translate(label).html_safe
|
43
|
-
end
|
44
|
-
|
45
28
|
def tr8n_options_for_select(options, selected = nil, description = nil, lang = Tr8n.session.current_language)
|
46
29
|
options_for_select(options.tro(description), selected)
|
47
30
|
end
|
@@ -58,14 +41,14 @@ module Tr8nClientSdk
|
|
58
41
|
def tr8n_language_flag_tag(lang = tr8n_current_language, opts = {})
|
59
42
|
return "" unless tr8n_application.feature_enabled?(:language_flags)
|
60
43
|
html = image_tag(lang.flag_url, :style => "vertical-align:middle;", :title => lang.native_name)
|
61
|
-
html << " ".html_safe
|
44
|
+
html << " ".html_safe
|
62
45
|
html.html_safe
|
63
46
|
end
|
64
47
|
|
65
48
|
def tr8n_language_name_tag(lang = tr8n_current_language, opts = {})
|
66
49
|
show_flag = opts[:flag].nil? ? true : opts[:flag]
|
67
50
|
name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
|
68
|
-
linked = opts[:linked].nil? ? true : opts[:linked]
|
51
|
+
linked = opts[:linked].nil? ? true : opts[:linked]
|
69
52
|
|
70
53
|
html = "<span style='white-space: nowrap'>"
|
71
54
|
html << tr8n_language_flag_tag(lang, opts) if show_flag
|
@@ -84,25 +67,24 @@ module Tr8nClientSdk
|
|
84
67
|
end
|
85
68
|
|
86
69
|
def tr8n_language_selector_tag(opts = {})
|
87
|
-
return unless Tr8n.config.enabled?
|
88
70
|
render(:partial => '/tr8n_client_sdk/tags/language_selector', :locals => {:opts => opts})
|
89
71
|
end
|
90
72
|
|
91
73
|
def tr8n_language_strip_tag(opts = {})
|
92
74
|
opts[:flag] = opts[:flag].nil? ? false : opts[:flag]
|
93
|
-
opts[:name] = opts[:name].nil? ? :native : opts[:name]
|
94
|
-
opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
|
95
|
-
opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
|
75
|
+
opts[:name] = opts[:name].nil? ? :native : opts[:name]
|
76
|
+
opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
|
77
|
+
opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
|
96
78
|
|
97
|
-
render(:partial => '/tr8n_client_sdk/tags/language_strip', :locals => {:opts => opts})
|
79
|
+
render(:partial => '/tr8n_client_sdk/tags/language_strip', :locals => {:opts => opts})
|
98
80
|
end
|
99
81
|
|
100
82
|
def tr8n_flashes_tag(opts = {})
|
101
|
-
render(:partial => '/tr8n_client_sdk/tags/flashes', :locals => {:opts => opts})
|
83
|
+
render(:partial => '/tr8n_client_sdk/tags/flashes', :locals => {:opts => opts})
|
102
84
|
end
|
103
85
|
|
104
86
|
def tr8n_scripts_tag(opts = {})
|
105
|
-
render(:partial => '/tr8n_client_sdk/tags/scripts', :locals => {:opts => opts})
|
87
|
+
render(:partial => '/tr8n_client_sdk/tags/scripts', :locals => {:opts => opts})
|
106
88
|
end
|
107
89
|
|
108
90
|
def tr8n_select_month(date, options = {}, html_options = {})
|
@@ -118,16 +100,16 @@ module Tr8nClientSdk
|
|
118
100
|
return ""
|
119
101
|
end
|
120
102
|
|
121
|
-
|
103
|
+
Thread.current[:block_options] ||= []
|
104
|
+
Thread.current[:block_options].push(opts)
|
122
105
|
|
123
106
|
if block_given?
|
124
107
|
ret = capture(&block)
|
125
108
|
end
|
126
109
|
|
127
|
-
|
110
|
+
Thread.current[:block_options].pop
|
128
111
|
ret
|
129
112
|
end
|
130
|
-
alias_method :tr8n_block, :tr8n_with_options_tag
|
131
113
|
|
132
114
|
def tr8n_when_string_tag(time, opts = {})
|
133
115
|
elapsed_seconds = Time.now - time
|
@@ -137,12 +119,12 @@ module Tr8nClientSdk
|
|
137
119
|
tr('a moment ago', 'Time reference')
|
138
120
|
elsif elapsed_seconds < 55.minutes
|
139
121
|
elapsed_minutes = (elapsed_seconds / 1.minute).to_i
|
140
|
-
tr(
|
122
|
+
tr("{minutes||minute} ago", 'Time reference', :minutes => elapsed_minutes)
|
141
123
|
elsif elapsed_seconds < 1.75.hours
|
142
|
-
tr(
|
124
|
+
tr("about an hour ago", 'Time reference')
|
143
125
|
elsif elapsed_seconds < 12.hours
|
144
126
|
elapsed_hours = (elapsed_seconds / 1.hour).to_i
|
145
|
-
tr(
|
127
|
+
tr("{hours||hour} ago", 'Time reference', :hours => elapsed_hours)
|
146
128
|
elsif time.today_in_time_zone?
|
147
129
|
display_time(time, :time_am_pm)
|
148
130
|
elsif time.yesterday_in_time_zone?
|
@@ -150,39 +132,27 @@ module Tr8nClientSdk
|
|
150
132
|
elsif elapsed_seconds < 5.days
|
151
133
|
time.tr(:day_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
152
134
|
elsif time.same_year_in_time_zone?
|
153
|
-
time.tr(:monthname_abbr_time).gsub('/ ', '/').sub(/^[0:]*/,
|
135
|
+
time.tr(:monthname_abbr_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
154
136
|
else
|
155
|
-
time.tr(:monthname_abbr_year_time).gsub('/ ', '/').sub(/^[0:]*/,
|
137
|
+
time.tr(:monthname_abbr_year_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
156
138
|
end
|
157
139
|
end
|
158
|
-
|
159
|
-
def tr8n_url_tag(path)
|
160
|
-
tr8n_application.url_for(path)
|
161
|
-
end
|
162
|
-
|
140
|
+
|
163
141
|
######################################################################
|
164
142
|
## Language Direction Support
|
165
143
|
######################################################################
|
166
144
|
|
167
145
|
def tr8n_style_attribute_tag(attr_name = 'float', default = 'right', lang = tr8n_current_language)
|
168
|
-
return "#{attr_name}:#{default}".html_safe if Tr8n.config.disabled?
|
169
146
|
"#{attr_name}:#{lang.align(default)}".html_safe
|
170
147
|
end
|
171
148
|
|
172
149
|
def tr8n_style_directional_attribute_tag(attr_name = 'padding', default = 'right', value = '5px', lang = tr8n_current_language)
|
173
|
-
return "#{attr_name}-#{default}:#{value}".html_safe if Tr8n.config.disabled?
|
174
150
|
"#{attr_name}-#{lang.align(default)}:#{value}".html_safe
|
175
151
|
end
|
176
152
|
|
177
153
|
def tr8n_dir_attribute_tag(lang = tr8n_current_language)
|
178
|
-
return "dir='ltr'" if Tr8n.config.disabled?
|
179
154
|
"dir='#{lang.dir}'".html_safe
|
180
155
|
end
|
181
156
|
|
182
|
-
def tr8n_lang_attribute_tag(lang = tr8n_current_language)
|
183
|
-
return "lang='en-US'" if Tr8n.config.disabled?
|
184
|
-
"lang='#{lang.locale}'".html_safe
|
185
|
-
end
|
186
|
-
|
187
157
|
end
|
188
158
|
end
|