tr8n 3.1.8 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/.rspec +1 -0
- data/.rvmrc +1 -1
- data/.watchr +18 -0
- data/Gemfile.lock +16 -10
- data/app/assets/images/tr8n/minus_node.png +0 -0
- data/app/assets/images/tr8n/pixel.gif +0 -0
- data/app/assets/images/tr8n/plus_node.png +0 -0
- data/app/assets/javascripts/tr8n/tr8n.js +1 -0
- data/app/assets/javascripts/tr8n/tr8n_client_sdk.js +581 -425
- data/app/assets/stylesheets/tr8n/layout.css.scss +1 -1
- data/app/assets/stylesheets/tr8n/tr8n.css.scss +20 -0
- data/app/controllers/tr8n/admin/base_controller.rb +4 -1
- data/app/controllers/tr8n/admin/clientsdk_controller.rb +1 -1
- data/app/controllers/tr8n/admin/metrics_controller.rb +30 -0
- data/app/controllers/tr8n/api/v1/base_controller.rb +12 -0
- data/app/controllers/tr8n/api/v1/language_controller.rb +7 -5
- data/app/controllers/tr8n/awards_controller.rb +1 -1
- data/app/controllers/tr8n/base_controller.rb +12 -6
- data/app/controllers/tr8n/dashboard_controller.rb +1 -1
- data/app/controllers/tr8n/forum_controller.rb +1 -1
- data/app/controllers/tr8n/glossary_controller.rb +1 -1
- data/app/controllers/tr8n/help_controller.rb +1 -1
- data/app/controllers/tr8n/phrases_controller.rb +1 -1
- data/app/controllers/tr8n/translator_controller.rb +8 -0
- data/app/helpers/tr8n/admin/base_helper.rb +1 -1
- data/app/helpers/tr8n/base_helper.rb +1 -1
- data/app/helpers/tr8n/dashboard_helper.rb +1 -1
- data/app/models/tr8n/base_filter.rb +1 -1
- data/app/models/tr8n/daily_language_metric.rb +1 -1
- data/app/models/tr8n/date_rule.rb +1 -1
- data/app/models/tr8n/gender_list_rule.rb +1 -1
- data/app/models/tr8n/gender_rule.rb +1 -1
- data/app/models/tr8n/glossary.rb +1 -1
- data/app/models/tr8n/glossary_filter.rb +1 -1
- data/app/models/tr8n/integration/ru/russian_gender_list_rule.rb +1 -1
- data/app/models/tr8n/integration/ru/russian_numeric_rule.rb +1 -1
- data/app/models/tr8n/ip_location.rb +1 -1
- data/app/models/tr8n/ip_location_filter.rb +1 -1
- data/app/models/tr8n/language.rb +19 -7
- data/app/models/tr8n/language_case.rb +1 -1
- data/app/models/tr8n/language_case_filter.rb +1 -1
- data/app/models/tr8n/language_case_rule.rb +1 -1
- data/app/models/tr8n/language_case_rule_filter.rb +1 -1
- data/app/models/tr8n/language_case_value_map.rb +1 -1
- data/app/models/tr8n/language_case_value_map_filter.rb +1 -1
- data/app/models/tr8n/language_filter.rb +1 -1
- data/app/models/tr8n/language_forum_abuse_report.rb +1 -1
- data/app/models/tr8n/language_forum_abuse_report_filter.rb +1 -1
- data/app/models/tr8n/language_forum_message.rb +1 -1
- data/app/models/tr8n/language_forum_message_filter.rb +1 -1
- data/app/models/tr8n/language_forum_topic.rb +1 -1
- data/app/models/tr8n/language_forum_topic_filter.rb +1 -1
- data/app/models/tr8n/language_metric.rb +1 -1
- data/app/models/tr8n/language_metric_filter.rb +1 -1
- data/app/models/tr8n/language_rule.rb +1 -1
- data/app/models/tr8n/language_rule_filter.rb +1 -1
- data/app/models/tr8n/language_user.rb +1 -1
- data/app/models/tr8n/language_user_filter.rb +1 -1
- data/app/models/tr8n/list_rule.rb +1 -1
- data/app/models/tr8n/monthly_language_metric.rb +1 -1
- data/app/models/tr8n/numeric_rule.rb +35 -28
- data/app/models/tr8n/sync_log.rb +1 -1
- data/app/models/tr8n/sync_log_filter.rb +1 -1
- data/app/models/tr8n/total_language_metric.rb +1 -1
- data/app/models/tr8n/translation.rb +4 -3
- data/app/models/tr8n/translation_domain.rb +11 -3
- data/app/models/tr8n/translation_domain_filter.rb +1 -1
- data/app/models/tr8n/translation_filter.rb +1 -1
- data/app/models/tr8n/translation_key.rb +73 -36
- data/app/models/tr8n/translation_key_comment.rb +1 -1
- data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
- data/app/models/tr8n/translation_key_filter.rb +1 -1
- data/app/models/tr8n/translation_key_lock.rb +1 -1
- data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
- data/app/models/tr8n/translation_key_source.rb +16 -5
- data/app/models/tr8n/translation_key_source_filter.rb +1 -1
- data/app/models/tr8n/translation_source.rb +12 -4
- data/app/models/tr8n/translation_source_filter.rb +1 -1
- data/app/models/tr8n/translation_source_language.rb +1 -1
- data/app/models/tr8n/translation_vote.rb +1 -1
- data/app/models/tr8n/translation_vote_filter.rb +1 -1
- data/app/models/tr8n/translator.rb +21 -5
- data/app/models/tr8n/translator_filter.rb +1 -1
- data/app/models/tr8n/translator_following.rb +1 -1
- data/app/models/tr8n/translator_following_filter.rb +1 -1
- data/app/models/tr8n/translator_log.rb +3 -3
- data/app/models/tr8n/translator_log_filter.rb +1 -1
- data/app/models/tr8n/translator_metric.rb +1 -1
- data/app/models/tr8n/translator_metric_filter.rb +1 -1
- data/app/models/tr8n/translator_report.rb +1 -1
- data/app/models/tr8n/translator_report_filter.rb +1 -1
- data/app/models/tr8n/value_rule.rb +1 -1
- data/app/views/tr8n/admin/clientsdk/index.html.erb +29 -29
- data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +1 -1
- data/app/views/tr8n/admin/metrics/_tabs.html.erb +22 -0
- data/app/views/tr8n/admin/metrics/index.html.erb +60 -0
- data/app/views/tr8n/common/_header.html.erb +3 -1
- data/app/views/tr8n/common/_language_selector.html.erb +4 -2
- data/app/views/tr8n/common/_scripts.html.erb +5 -0
- data/app/views/tr8n/common/_terms_of_service.html.erb +53 -0
- data/app/views/tr8n/help/credits.html.erb +4 -0
- data/app/views/tr8n/language/_select.html.erb +5 -1
- data/app/views/tr8n/translator/registration.html.erb +21 -0
- data/config/routes.rb +3 -1
- data/doc/classes.graffle +356 -7194
- data/lib/generators/tr8n/templates/config/tr8n/config.yml +9 -1
- data/lib/generators/tr8n/templates/config/tr8n/site/shortcuts.yml +1 -1
- data/lib/generators/tr8n/templates/config/tr8n/tokens/decorations.yml +4 -1
- data/lib/generators/tr8n/tr8n_generator.rb +1 -1
- data/lib/tasks/tr8n.rake +1 -1
- data/lib/tr8n.rb +23 -0
- data/lib/tr8n/active_dumper.rb +1 -1
- data/lib/tr8n/cache.rb +1 -8
- data/lib/tr8n/cache_adapters/memcached.rb +1 -1
- data/lib/tr8n/config.rb +37 -1
- data/lib/tr8n/dictionary.rb +1 -1
- data/lib/tr8n/engine.rb +4 -1
- data/lib/tr8n/exception.rb +1 -1
- data/lib/tr8n/extender.rb +1 -1
- data/lib/tr8n/extensions/action_controller_extension.rb +5 -4
- data/lib/tr8n/extensions/action_view_extension.rb +71 -20
- data/lib/tr8n/extensions/array_extension.rb +14 -1
- data/lib/tr8n/extensions/date_extension.rb +1 -1
- data/lib/tr8n/extensions/fixnum_extension.rb +1 -1
- data/lib/tr8n/extensions/hash_extension.rb +1 -1
- data/lib/tr8n/extensions/string_extension.rb +1 -1
- data/lib/tr8n/extensions/time_extension.rb +1 -1
- data/lib/tr8n/ip_address.rb +1 -1
- data/lib/tr8n/key_registration_exception.rb +1 -1
- data/lib/tr8n/keyboard_mapping.rb +1 -1
- data/lib/tr8n/logger.rb +1 -1
- data/lib/tr8n/railtie.rb +1 -1
- data/lib/tr8n/site_map.rb +1 -1
- data/lib/tr8n/site_map_section.rb +1 -1
- data/lib/tr8n/token.rb +1 -1
- data/lib/tr8n/token_exception.rb +1 -1
- data/lib/tr8n/tokenized_label.rb +2 -12
- data/lib/tr8n/tokens/data_token.rb +1 -1
- data/lib/tr8n/tokens/decoration_token.rb +1 -1
- data/lib/tr8n/tokens/hidden_token.rb +1 -1
- data/lib/tr8n/tokens/method_token.rb +1 -1
- data/lib/tr8n/tokens/transform_token.rb +1 -1
- data/lib/tr8n/version.rb +25 -1
- data/local/tr8n_server/app/models/user.rb +1 -0
- data/local/tr8n_server/config/environments/test.rb +1 -1
- data/local/tr8n_server/config/tr8n/config.yml +45 -39
- data/local/tr8n_server/config/tr8n/site/shortcuts.yml +1 -1
- data/local/tr8n_server/db/schema.rb +2 -0
- data/spec/controllers/awards_controller_spec.rb +22 -0
- data/spec/controllers/base_controller_spec.rb +6 -0
- data/spec/controllers/dashboard_controller_spec.rb +23 -0
- data/spec/controllers/forum_controller_spec.rb +23 -0
- data/spec/controllers/glossary_controller_spec.rb +22 -0
- data/spec/controllers/help_controller_spec.rb +22 -0
- data/spec/controllers/language_cases_controller_spec.rb +13 -0
- data/spec/controllers/language_controller_spec.rb +10 -0
- data/spec/controllers/phrases_controller_spec.rb +22 -0
- data/spec/controllers/translations_controller_spec.rb +23 -0
- data/spec/controllers/translator_controller_spec.rb +22 -0
- data/spec/lib/tokenized_label_spec.rb +42 -0
- data/spec/lib/tokens/data_token_spec.rb +49 -0
- data/spec/lib/tokens/decoration_token_spec.rb +49 -0
- data/spec/lib/tokens/hidden_token_spec.rb +53 -0
- data/spec/lib/tokens/method_token_spec.rb +61 -0
- data/spec/lib/tokens/transform_token_spec.rb +51 -0
- data/spec/models/tr8n/daily_language_metric_spec.rb +5 -0
- data/spec/models/tr8n/date_rule_spec.rb +5 -0
- data/spec/models/tr8n/gender_list_rule_spec.rb +5 -0
- data/spec/models/tr8n/gender_rule_spec.rb +141 -0
- data/spec/models/tr8n/glossary_spec.rb +5 -0
- data/spec/models/tr8n/ip_location_spec.rb +5 -0
- data/spec/models/tr8n/language_case_rule_spec.rb +5 -0
- data/spec/models/tr8n/language_case_spec.rb +5 -0
- data/spec/models/tr8n/language_case_value_map_spec.rb +5 -0
- data/spec/models/tr8n/language_forum_abuse_report_spec.rb +5 -0
- data/spec/models/tr8n/language_forum_message_spec.rb +5 -0
- data/spec/models/tr8n/language_forum_topic_spec.rb +5 -0
- data/spec/models/tr8n/language_metric_spec.rb +5 -0
- data/spec/models/tr8n/language_rule_spec.rb +5 -0
- data/spec/models/tr8n/language_spec.rb +79 -0
- data/spec/models/tr8n/language_user_spec.rb +5 -0
- data/spec/models/tr8n/list_rule_spec.rb +5 -0
- data/spec/models/tr8n/monthly_language_metric_spec.rb +5 -0
- data/spec/models/tr8n/numeric_rule_spec.rb +162 -0
- data/spec/models/tr8n/sync_log_spec.rb +5 -0
- data/spec/models/tr8n/total_language_metric_spec.rb +5 -0
- data/spec/models/tr8n/translation_domain_spec.rb +5 -0
- data/spec/models/tr8n/translation_key_comment_spec.rb +5 -0
- data/spec/models/tr8n/translation_key_lock_spec.rb +5 -0
- data/spec/models/tr8n/translation_key_source_spec.rb +5 -0
- data/spec/models/tr8n/translation_key_spec.rb +118 -0
- data/spec/models/tr8n/translation_source_language_spec.rb +5 -0
- data/spec/models/tr8n/translation_source_spec.rb +5 -0
- data/spec/models/tr8n/translation_spec.rb +5 -0
- data/spec/models/tr8n/translation_vote_spec.rb +5 -0
- data/spec/models/tr8n/translator_following_spec.rb +5 -0
- data/spec/models/tr8n/translator_log_spec.rb +5 -0
- data/spec/models/tr8n/translator_metric_spec.rb +5 -0
- data/spec/models/tr8n/translator_report_spec.rb +5 -0
- data/spec/models/tr8n/translator_spec.rb +140 -0
- data/spec/spec_helper.rb +26 -27
- data/tr8n.gemspec +3 -1
- metadata +173 -50
- data/local/tr8n_server/db/migrate/20110930041150_create_tr8n_tables.rb +0 -372
- data/spec/fake_app.rb +0 -50
- data/spec/lib/data_token_spec.rb +0 -26
- data/spec/lib/transform_token_spec.rb +0 -22
- data/spec/models/translation_key_spec.rb +0 -63
@@ -36,9 +36,12 @@ defaults:
|
|
36
36
|
|
37
37
|
enable_language_cases: true # enables support for language cases
|
38
38
|
enable_client_sdk: false # allows javascript to use tr8nProxy object
|
39
|
+
enable_browser_cache: false # caches translations in the browser
|
39
40
|
|
40
41
|
enable_country_tracking: true # tracks and reports translator countries
|
41
42
|
|
43
|
+
enable_translator_tabs: true # enables translation tools tabs
|
44
|
+
|
42
45
|
#############################################################################
|
43
46
|
# Google translation suggestions is now a paid feature by Google.
|
44
47
|
#
|
@@ -72,7 +75,9 @@ defaults:
|
|
72
75
|
# translation. If the flag is set to false, then a user must be promoted to
|
73
76
|
# be a translator in order to submit or vote on translations.
|
74
77
|
#############################################################################
|
75
|
-
open_registration_mode:
|
78
|
+
open_registration_mode: true
|
79
|
+
enable_registration_disclaimer: false
|
80
|
+
registration_disclaimer_path: "/tr8n/common/terms_of_service"
|
76
81
|
|
77
82
|
#############################################################################
|
78
83
|
# Tr8n best run with caching enabled
|
@@ -194,6 +199,9 @@ defaults:
|
|
194
199
|
enabled: true
|
195
200
|
response_encoding: "json" # options: xml, json
|
196
201
|
allow_key_registration: true
|
202
|
+
skip_before_filters: [] # filters from application controller
|
203
|
+
before_filters: [] # filters from application controller
|
204
|
+
after_filters: [] # filters from application controller
|
197
205
|
|
198
206
|
#############################################################################
|
199
207
|
# Translator Roles - manager level is set at 1000 and anything above
|
@@ -8,7 +8,7 @@ Ctrl+Shift+I:
|
|
8
8
|
|
9
9
|
Ctrl+Shift+L:
|
10
10
|
description: Shows/hides language selector
|
11
|
-
script: "
|
11
|
+
script: "tr8nLightbox.show('/tr8n/language/select?lightbox=true', {height:500, width:400});"
|
12
12
|
|
13
13
|
Ctrl+Shift+A:
|
14
14
|
description: Displays all available languages
|
@@ -13,4 +13,7 @@ i: "<i>{$0}</i>"
|
|
13
13
|
link: "<a href='{$href}'>{$0}</a>"
|
14
14
|
br: "<br>{$0}"
|
15
15
|
div: "<div id='{$id}' class='{$class}' style='{$style}'>{$0}</div>"
|
16
|
-
span: "<span id='{$id}' class='{$class}' style='{$style}'>{$0}</span>"
|
16
|
+
span: "<span id='{$id}' class='{$class}' style='{$style}'>{$0}</span>"
|
17
|
+
h1: "<h1>{$0}</h1>"
|
18
|
+
h2: "<h2>{$0}</h2>"
|
19
|
+
h3: "<h3>{$0}</h3>"
|
data/lib/tasks/tr8n.rake
CHANGED
data/lib/tr8n.rb
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
1
24
|
require File.join(File.dirname(__FILE__), 'tr8n/railtie')
|
2
25
|
require File.join(File.dirname(__FILE__), 'tr8n/engine')
|
3
26
|
|
data/lib/tr8n/active_dumper.rb
CHANGED
data/lib/tr8n/cache.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -149,12 +149,5 @@ module Tr8n
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
|
-
def self.cache_key_source(translation_key, source_name)
|
153
|
-
source_name ||= Tr8n::Config.current_source || 'Undefined'
|
154
|
-
translation_source = Tr8n::TranslationSource.find_or_create(source_name)
|
155
|
-
key_source = Tr8n::TranslationKeySource.find_or_create(translation_key, translation_source)
|
156
|
-
key_source
|
157
|
-
end
|
158
|
-
|
159
152
|
end
|
160
153
|
end
|
data/lib/tr8n/config.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -261,6 +261,14 @@ module Tr8n
|
|
261
261
|
def self.open_registration_mode?
|
262
262
|
config[:open_registration_mode]
|
263
263
|
end
|
264
|
+
|
265
|
+
def self.enable_registration_disclaimer?
|
266
|
+
config[:enable_registration_disclaimer]
|
267
|
+
end
|
268
|
+
|
269
|
+
def self.registration_disclaimer_path
|
270
|
+
config[:registration_disclaimer_path] || "/tr8n/common/terms_of_service"
|
271
|
+
end
|
264
272
|
|
265
273
|
def self.enable_fallback_languages?
|
266
274
|
config[:enable_fallback_languages]
|
@@ -282,6 +290,10 @@ module Tr8n
|
|
282
290
|
config[:enable_country_tracking]
|
283
291
|
end
|
284
292
|
|
293
|
+
def self.enable_translator_tabs?
|
294
|
+
config[:enable_translator_tabs]
|
295
|
+
end
|
296
|
+
|
285
297
|
#########################################################
|
286
298
|
# Config Sections
|
287
299
|
def self.caching
|
@@ -744,6 +756,30 @@ module Tr8n
|
|
744
756
|
config[:enable_client_sdk]
|
745
757
|
end
|
746
758
|
|
759
|
+
def self.enable_browser_cache?
|
760
|
+
config[:enable_browser_cache]
|
761
|
+
end
|
762
|
+
|
763
|
+
def self.default_client_interval
|
764
|
+
5000
|
765
|
+
end
|
766
|
+
|
767
|
+
def self.api_skip_before_filters
|
768
|
+
return [] unless api[:skip_before_filters]
|
769
|
+
@api_skip_before_filters ||= api[:skip_before_filters].collect{|filter| filter.to_sym}
|
770
|
+
end
|
771
|
+
|
772
|
+
def self.api_before_filters
|
773
|
+
return [] unless api[:before_filters]
|
774
|
+
@api_before_filters ||= api[:before_filters].collect{|filter| filter.to_sym}
|
775
|
+
end
|
776
|
+
|
777
|
+
def self.api_after_filters
|
778
|
+
return [] unless api[:after_filters]
|
779
|
+
@api_after_filters ||= api[:after_filters].collect{|filter| filter.to_sym}
|
780
|
+
end
|
781
|
+
|
782
|
+
|
747
783
|
#########################################################
|
748
784
|
# Sync Process
|
749
785
|
#########################################################
|
data/lib/tr8n/dictionary.rb
CHANGED
data/lib/tr8n/engine.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -24,5 +24,8 @@
|
|
24
24
|
module Tr8n
|
25
25
|
class Engine < Rails::Engine
|
26
26
|
isolate_namespace Tr8n
|
27
|
+
config.generators do |g|
|
28
|
+
g.test_framework :rspec, :view_specs => false
|
29
|
+
end
|
27
30
|
end
|
28
31
|
end
|
data/lib/tr8n/exception.rb
CHANGED
data/lib/tr8n/extender.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -86,9 +86,7 @@ module Tr8n
|
|
86
86
|
return user
|
87
87
|
end
|
88
88
|
|
89
|
-
|
90
|
-
user = nil if user.class.name != Tr8n::Config.user_class_name
|
91
|
-
user
|
89
|
+
eval(Tr8n::Config.current_user_method)
|
92
90
|
rescue
|
93
91
|
Tr8n::Logger.error("Site user integration is enabled, but #{Tr8n::Config.current_user_method} method is not defined")
|
94
92
|
Tr8n::Translator.new
|
@@ -115,6 +113,9 @@ module Tr8n
|
|
115
113
|
# tr(label, {:desc => "", tokens => {}, ...})
|
116
114
|
############################################################
|
117
115
|
def tr(label, desc = "", tokens = {}, options = {})
|
116
|
+
|
117
|
+
return label if label.tr8n_translated?
|
118
|
+
|
118
119
|
if desc.is_a?(Hash)
|
119
120
|
options = desc
|
120
121
|
tokens = options[:tokens] || {}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -26,38 +26,89 @@ module Tr8n
|
|
26
26
|
extend ActiveSupport::Concern
|
27
27
|
module InstanceMethods
|
28
28
|
|
29
|
-
|
30
|
-
def
|
29
|
+
|
30
|
+
def tr8n_default_client_source
|
31
|
+
"#{params[:controller]}/#{params[:action]}/JS"
|
32
|
+
end
|
33
|
+
|
34
|
+
# Creates a hash of translations for a page source(s) or a component(s)
|
35
|
+
def tr8n_translations_cache_tag(opts = {})
|
31
36
|
html = []
|
32
|
-
html << "<script>"
|
33
37
|
|
34
|
-
|
38
|
+
opts[:translations_element_id] ||= :tr8n_translations
|
39
|
+
opts[:sources] ||= [tr8n_default_client_source]
|
40
|
+
client_sdk_var_name = opts[:client_var_name] || :tr8nProxy
|
35
41
|
|
36
|
-
|
37
|
-
sources = Tr8n::TranslationSource.find(:all, :conditions => ["source in (?)", source_names])
|
38
|
-
source_ids = sources.collect{|source| source.id}
|
42
|
+
if Tr8n::Config.enable_browser_cache? # translations are loaded through a script
|
39
43
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
44
|
+
opts[:sources].each do |source_name|
|
45
|
+
source = Tr8n::TranslationSource.find_or_create(source_name, request.url)
|
46
|
+
js_source = "/tr8n/api/v1/language/translate.js?cache=true&sdk_jsvar=#{client_sdk_var_name}&source=#{CGI.escape(source_name)}&t=#{source.updated_at.to_i}"
|
47
|
+
html << "<script type='text/javascript' src='#{js_source}'></script>"
|
48
|
+
end
|
46
49
|
|
47
|
-
translations
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
else # translations are embedded right into the page
|
51
|
+
|
52
|
+
html << "<script>"
|
53
|
+
sources = Tr8n::TranslationSource.find(:all, :conditions => ["source in (?)", opts[:sources]])
|
54
|
+
source_ids = sources.collect{|source| source.id}
|
55
|
+
|
56
|
+
if source_ids.empty?
|
57
|
+
conditions = ["1=2"]
|
58
|
+
else
|
59
|
+
conditions = ["(id in (select distinct(translation_key_id) from tr8n_translation_key_sources where translation_source_id in (?)))"]
|
60
|
+
conditions << source_ids.uniq
|
61
|
+
end
|
62
|
+
|
63
|
+
translations = []
|
64
|
+
Tr8n::TranslationKey.find(:all, :conditions => conditions).each_with_index do |tkey, index|
|
65
|
+
trn = tkey.translate(Tr8n::Config.current_language, {}, {:api => true})
|
66
|
+
translations << trn
|
67
|
+
end
|
68
|
+
|
69
|
+
html << "#{client_sdk_var_name}.updateTranslations(#{translations.to_json});"
|
70
|
+
html << "</script>"
|
51
71
|
end
|
72
|
+
|
73
|
+
html.join('').html_safe
|
74
|
+
end
|
75
|
+
|
76
|
+
# Creates an instance of tr8nProxy object
|
77
|
+
def tr8n_client_sdk_tag(opts = {})
|
78
|
+
opts[:default_source] ||= tr8n_default_client_source
|
79
|
+
opts[:scheduler_interval] ||= Tr8n::Config.default_client_interval
|
52
80
|
|
53
|
-
|
81
|
+
opts[:enable_inline_translations] = (Tr8n::Config.current_user_is_translator? and Tr8n::Config.current_translator.enable_inline_translations? and (not Tr8n::Config.current_language.default?))
|
82
|
+
opts[:default_decorations] = Tr8n::Config.default_decoration_tokens
|
83
|
+
opts[:default_tokens] = Tr8n::Config.default_data_tokens
|
54
84
|
|
85
|
+
opts[:rules] = {
|
86
|
+
:number => Tr8n::Config.rules_engine[:numeric_rule], :gender => Tr8n::Config.rules_engine[:gender_rule],
|
87
|
+
:list => Tr8n::Config.rules_engine[:gender_list_rule], :date => Tr8n::Config.rules_engine[:date_rule]
|
88
|
+
}
|
89
|
+
|
90
|
+
client_var_name = opts[:client_var_name] || :tr8nProxy
|
91
|
+
|
92
|
+
html = [javascript_include_tag("tr8n/tr8n_client_sdk.js")]
|
93
|
+
html << "<script>"
|
94
|
+
html << " var #{client_var_name} = new Tr8n.Proxy(#{opts.to_json});"
|
95
|
+
html << " function reloadTranslations() { "
|
96
|
+
html << " #{client_var_name}.initTranslations(true); "
|
97
|
+
html << " } "
|
98
|
+
html << " function tr(label, description, tokens, options) { "
|
99
|
+
html << " return #{client_var_name}.tr(label, description, tokens, options); "
|
100
|
+
html << " } "
|
101
|
+
html << " function trl(label, description, tokens, options) { "
|
102
|
+
html << " return #{client_var_name}.trl(label, description, tokens, options); "
|
103
|
+
html << " } "
|
55
104
|
html << "</script>"
|
56
|
-
html.join(
|
105
|
+
html.join("\n").html_safe
|
57
106
|
end
|
58
107
|
|
59
108
|
# translation functions
|
60
109
|
def tr(label, desc = "", tokens = {}, options = {})
|
110
|
+
return label if label.tr8n_translated?
|
111
|
+
|
61
112
|
if desc.is_a?(Hash)
|
62
113
|
options = desc
|
63
114
|
tokens = options[:tokens] || {}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-
|
2
|
+
# Copyright (c) 2010-2012 Michael Berkovich, tr8n.net
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -38,6 +38,19 @@ class Array
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# translate array values
|
42
|
+
def trl(description = "", options = {}, language = Tr8n::Config.current_language)
|
43
|
+
return [] if empty?
|
44
|
+
|
45
|
+
collect do |opt|
|
46
|
+
if opt.is_a?(String)
|
47
|
+
opt.trl(description, {}, options, language)
|
48
|
+
else
|
49
|
+
opt
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
41
54
|
# creates a sentence with tr "and" joiner
|
42
55
|
def tr_sentence(options = {}, language = Tr8n::Config.current_language)
|
43
56
|
return "" if empty?
|
data/lib/tr8n/ip_address.rb
CHANGED