tml-rails 4.3.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.
data/lib/tml_rails.rb ADDED
@@ -0,0 +1,41 @@
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
+ require 'tml'
33
+ require 'tml_rails/core/string'
34
+ require 'tml_rails/railtie'
35
+ require 'tml_rails/engine'
36
+ require 'tml/cache_adapters/rails'
37
+ require 'i18n/backend/tml'
38
+
39
+ module TmlClientSdk
40
+
41
+ end
@@ -0,0 +1,44 @@
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
+ class String
33
+
34
+ def tml_translated
35
+ return self if frozen?
36
+ @tml_translated = true
37
+ self.html_safe
38
+ end
39
+
40
+ def tml_translated?
41
+ @tml_translated
42
+ end
43
+
44
+ end
@@ -0,0 +1,39 @@
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
+ module TmlRails
33
+ class Engine < ::Rails::Engine
34
+ isolate_namespace TmlRails
35
+ config.generators do |g|
36
+ g.test_framework :rspec, :view_specs => false
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,131 @@
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
+ module TmlClientSdk
33
+ module ActionCommonMethods
34
+ ############################################################
35
+ # There are three ways to call the tr method
36
+ #
37
+ # tr(label, desc = '', tokens = {}, options = {})
38
+ # or
39
+ # tr(label, tokens = {}, options = {})
40
+ # or
41
+ # tr(:label => label, :description => '', :tokens => {}, :options => {})
42
+ ############################################################
43
+ def tr(label, description = '', tokens = {}, options = {})
44
+ params = Tml::Utils.normalize_tr_params(label, description, tokens, options)
45
+ return params[:label].html_safe if params[:label].tml_translated?
46
+
47
+ params[:options][:caller] = caller
48
+
49
+ if request
50
+ params[:options][:url] = request.url
51
+ params[:options][:host] = request.env['HTTP_HOST']
52
+ end
53
+
54
+ if Tml.config.disabled?
55
+ return Tml.config.default_language.translate(params[:label], params[:tokens], params[:options]).tml_translated.html_safe
56
+ end
57
+
58
+ # Translate individual sentences
59
+ if params[:options][:split]
60
+ text = params[:label]
61
+ sentences = Tml::Utils.split_by_sentence(text)
62
+ sentences.each do |sentence|
63
+ text = text.gsub(sentence, tml_current_language.translate(sentence, params[:description], params[:tokens], params[:options]))
64
+ end
65
+ return text.tml_translated.html_safe
66
+ end
67
+
68
+ Tml.session.target_language.translate(params).tml_translated.html_safe
69
+ rescue Tml::Exception => ex
70
+ #pp ex, ex.backtrace
71
+ Tml.logger.error(ex.message)
72
+ #Tml.logger.error(ex.message + "\n=> " + ex.backtrace.join("\n=> "))
73
+ label
74
+ end
75
+
76
+ # for translating labels
77
+ def trl(label, description = '', tokens = {}, options = {})
78
+ params = Tml::Utils.normalize_tr_params(label, description, tokens, options)
79
+ params[:options][:skip_decorations] = true
80
+ tr(params)
81
+ end
82
+
83
+ # flash notice
84
+ def trfn(label, desc = '', tokens = {}, options = {})
85
+ flash[:trfn] = tr(Tml::Utils.normalize_tr_params(label, desc, tokens, options))
86
+ end
87
+
88
+ # flash error
89
+ def trfe(label, desc = '', tokens = {}, options = {})
90
+ flash[:trfe] = tr(Tml::Utils.normalize_tr_params(label, desc, tokens, options))
91
+ end
92
+
93
+ # flash warning
94
+ def trfw(label, desc = '', tokens = {}, options = {})
95
+ flash[:trfw] = tr(Tml::Utils.normalize_tr_params(label, desc, tokens, options))
96
+ end
97
+
98
+ ######################################################################
99
+ ## Common methods - wrappers
100
+ ######################################################################
101
+
102
+ def tml_session
103
+ Tml.session
104
+ end
105
+
106
+ def tml_application
107
+ tml_session.application
108
+ end
109
+
110
+ def tml_current_user
111
+ tml_session.current_user
112
+ end
113
+
114
+ def tml_current_translator
115
+ tml_session.current_translator
116
+ end
117
+
118
+ def tml_current_locale
119
+ tml_session.current_language.locale
120
+ end
121
+
122
+ def tml_current_language
123
+ tml_session.current_language
124
+ end
125
+
126
+ def tml_language_dir
127
+ tml_current_language.dir
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,137 @@
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
+ module TmlClientSdk
33
+ module ActionControllerExtension
34
+
35
+ def self.included(base)
36
+ base.send(:include, TmlClientSdk::ActionCommonMethods)
37
+ base.send(:include, InstanceMethods)
38
+ base.before_filter :tml_init_client_sdk
39
+ base.after_filter :tml_reset_client_sdk
40
+ if defined? base.rescue_from
41
+ base.rescue_from 'Tml::Exception' do |e|
42
+ Tml.logger.error(e)
43
+ Tml.logger.error(e.backtrace)
44
+ Tml.session.reset
45
+ raise e
46
+ end
47
+ end
48
+ end
49
+
50
+ module InstanceMethods
51
+
52
+ def tml_browser_accepted_locales
53
+ @tml_browser_accepted_locales ||= Tml::Utils.browser_accepted_locales(request)
54
+ end
55
+
56
+ def tml_user_preferred_locale
57
+ tml_browser_accepted_locales.each do |locale|
58
+ next unless Tml.session.application.locales.include?(locale)
59
+ return locale
60
+ end
61
+ Tml.config.default_locale
62
+ end
63
+
64
+ # Overwrite this method in a controller to assign a custom source for all views
65
+ def tml_source
66
+ "/#{controller_name}/#{action_name}"
67
+ rescue
68
+ self.class.name
69
+ end
70
+
71
+ # Overwrite this method in a controller to assign a custom component for all views
72
+ def tml_component
73
+ nil
74
+ end
75
+
76
+ def tml_toggle_tools(flag)
77
+ session[:tml_tools_disabled] = !flag
78
+ end
79
+
80
+ def tml_tools_enabled?
81
+ not session[:tml_tools_disabled]
82
+ end
83
+
84
+ def tml_locale
85
+ self.send(Tml.config.current_locale_method) if Tml.config.current_locale_method
86
+ rescue
87
+ session[:locale] = tml_user_preferred_locale unless session[:locale]
88
+ session[:locale] = params[:locale] if params[:locale]
89
+ session[:locale] || Tml.config.default_locale
90
+ end
91
+
92
+ def tml_init_client_sdk
93
+ return if Tml.config.disabled?
94
+
95
+ @tml_started_at = Time.now
96
+
97
+ if params[:tml]
98
+ tml_toggle_tools(params[:tml] == 'on')
99
+ end
100
+
101
+ tml_session_params = {
102
+ :tools_enabled => tml_tools_enabled?,
103
+ :source => tml_source,
104
+ :component => tml_component
105
+ }
106
+
107
+ if Tml.config.current_user_method
108
+ begin
109
+ tml_session_params.merge!(:user => self.send(Tml.config.current_user_method))
110
+ rescue
111
+ # Tml.logger.error('Current user method is specified but not provided')
112
+ end
113
+ end
114
+
115
+ if tml_tools_enabled? # gets translator and locale from the cookie
116
+ tml_session_params.merge!(:cookies => request.cookies)
117
+ else # uses default locale
118
+ tml_session_params.merge!(:locale => tml_locale)
119
+ end
120
+
121
+ Tml.session.init(tml_session_params)
122
+
123
+ I18n.enforce_available_locales = false
124
+ I18n.locale = Tml.session.current_language.locale
125
+ end
126
+
127
+ def tml_reset_client_sdk
128
+ return if Tml.config.disabled?
129
+ @tml_finished_at = Time.now
130
+ tml_application.submit_missing_keys
131
+ Tml.session.reset
132
+ Tml.logger.info("Request took #{@tml_finished_at - @tml_started_at} mls") if @tml_started_at
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,188 @@
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
+ module TmlClientSdk
33
+ module ActionViewExtension
34
+ extend ActiveSupport::Concern
35
+
36
+ def trh(tokens = {}, options = {}, &block)
37
+ return '' unless block_given?
38
+
39
+ label = capture(&block)
40
+
41
+ tokenizer = Tml::Tokenizers::Dom.new(tokens, options)
42
+ tokenizer.translate(label).html_safe
43
+ end
44
+
45
+ def tml_options_for_select(options, selected = nil, description = nil, lang = Tml.session.current_language)
46
+ options_for_select(options.tro(description), selected)
47
+ end
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
+ def tml_language_flag_tag(lang = tml_current_language, opts = {})
59
+ return "" unless tml_application.feature_enabled?(:language_flags)
60
+ html = image_tag(lang.flag_url, :style => "vertical-align:middle;", :title => lang.native_name)
61
+ html << "&nbsp;".html_safe
62
+ html.html_safe
63
+ end
64
+
65
+ def tml_language_name_tag(lang = tml_current_language, opts = {})
66
+ show_flag = opts[:flag].nil? ? true : opts[:flag]
67
+ name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
68
+ linked = opts[:linked].nil? ? true : opts[:linked]
69
+
70
+ html = "<span style='white-space: nowrap'>"
71
+ html << tml_language_flag_tag(lang, opts) if show_flag
72
+ html << "<span dir='ltr'>"
73
+
74
+ name = case name_type
75
+ when :native then lang.native_name
76
+ when :english then lang.english_name
77
+ when :locale then lang.locale
78
+ else lang.full_name
79
+ end
80
+
81
+ html << name
82
+ html << "</span></span>"
83
+ html.html_safe
84
+ end
85
+
86
+ def tml_language_selector_tag(type = nil, opts = {})
87
+ return unless Tml.config.enabled?
88
+ render(:partial => '/tml_rails/tags/language_selector', :locals => {:type => type, :opts => opts})
89
+ end
90
+
91
+ def tml_language_strip_tag(opts = {})
92
+ 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]
96
+
97
+ render(:partial => '/tml_rails/tags/language_strip', :locals => {:opts => opts})
98
+ end
99
+
100
+ def tml_flashes_tag(opts = {})
101
+ render(:partial => '/tml_rails/tags/flashes', :locals => {:opts => opts})
102
+ end
103
+
104
+ def tml_scripts_tag(opts = {})
105
+ render(:partial => '/tml_rails/tags/scripts', :locals => {:opts => opts})
106
+ end
107
+
108
+ def tml_select_month(date, options = {}, html_options = {})
109
+ month_names = options[:use_short_month] ? Tml.config.default_abbr_month_names : Tml.config.default_month_names
110
+ select_month(date, options.merge(
111
+ :use_month_names => month_names.collect{|month_name| tml_current_language.translate(month_name, options[:description] || "Month name")}
112
+ ), html_options)
113
+ end
114
+
115
+ def tml_with_options_tag(opts, &block)
116
+ if Tml.config.disabled?
117
+ return capture(&block) if block_given?
118
+ return ""
119
+ end
120
+
121
+ Tml.session.push_block_options(opts)
122
+
123
+ if block_given?
124
+ ret = capture(&block)
125
+ end
126
+
127
+ Tml.session.pop_block_options
128
+ ret
129
+ end
130
+ alias_method :tml_block, :tml_with_options_tag
131
+
132
+ def tml_when_string_tag(time, opts = {})
133
+ elapsed_seconds = Time.now - time
134
+ if elapsed_seconds < 0
135
+ tr('In the future, Marty!', 'Time reference')
136
+ elsif elapsed_seconds < 2.minutes
137
+ tr('a moment ago', 'Time reference')
138
+ elsif elapsed_seconds < 55.minutes
139
+ elapsed_minutes = (elapsed_seconds / 1.minute).to_i
140
+ tr('{minutes || minute} ago', 'Time reference', :minutes => elapsed_minutes)
141
+ elsif elapsed_seconds < 1.75.hours
142
+ tr('about an hour ago', 'Time reference')
143
+ elsif elapsed_seconds < 12.hours
144
+ elapsed_hours = (elapsed_seconds / 1.hour).to_i
145
+ tr('{hours || hour} ago', 'Time reference', :hours => elapsed_hours)
146
+ elsif time.today_in_time_zone?
147
+ display_time(time, :time_am_pm)
148
+ elsif time.yesterday_in_time_zone?
149
+ tr("Yesterday at {time}", 'Time reference', :time => time.tr(:time_am_pm).gsub('/ ', '/').sub(/^[0:]*/,""))
150
+ elsif elapsed_seconds < 5.days
151
+ time.tr(:day_time).gsub('/ ', '/').sub(/^[0:]*/,"")
152
+ elsif time.same_year_in_time_zone?
153
+ time.tr(:monthname_abbr_time).gsub('/ ', '/').sub(/^[0:]*/, '')
154
+ else
155
+ time.tr(:monthname_abbr_year_time).gsub('/ ', '/').sub(/^[0:]*/, '')
156
+ end
157
+ end
158
+
159
+ def tml_url_tag(path)
160
+ tml_application.url_for(path)
161
+ end
162
+
163
+ ######################################################################
164
+ ## Language Direction Support
165
+ ######################################################################
166
+
167
+ def tml_style_attribute_tag(attr_name = 'float', default = 'right', lang = tml_current_language)
168
+ return "#{attr_name}:#{default}".html_safe if Tml.config.disabled?
169
+ "#{attr_name}:#{lang.align(default)}".html_safe
170
+ end
171
+
172
+ def tml_style_directional_attribute_tag(attr_name = 'padding', default = 'right', value = '5px', lang = tml_current_language)
173
+ return "#{attr_name}-#{default}:#{value}".html_safe if Tml.config.disabled?
174
+ "#{attr_name}-#{lang.align(default)}:#{value}".html_safe
175
+ end
176
+
177
+ def tml_dir_attribute_tag(lang = tml_current_language)
178
+ return "dir='ltr'" if Tml.config.disabled?
179
+ "dir='#{lang.dir}'".html_safe
180
+ end
181
+
182
+ def tml_lang_attribute_tag(lang = tml_current_language)
183
+ return "lang='en-US'" if Tml.config.disabled?
184
+ "lang='#{lang.locale}'".html_safe
185
+ end
186
+
187
+ end
188
+ end