tr8n 3.1.8 → 3.2.0

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.
Files changed (209) hide show
  1. data/.gitignore +2 -1
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -1
  4. data/.watchr +18 -0
  5. data/Gemfile.lock +16 -10
  6. data/app/assets/images/tr8n/minus_node.png +0 -0
  7. data/app/assets/images/tr8n/pixel.gif +0 -0
  8. data/app/assets/images/tr8n/plus_node.png +0 -0
  9. data/app/assets/javascripts/tr8n/tr8n.js +1 -0
  10. data/app/assets/javascripts/tr8n/tr8n_client_sdk.js +581 -425
  11. data/app/assets/stylesheets/tr8n/layout.css.scss +1 -1
  12. data/app/assets/stylesheets/tr8n/tr8n.css.scss +20 -0
  13. data/app/controllers/tr8n/admin/base_controller.rb +4 -1
  14. data/app/controllers/tr8n/admin/clientsdk_controller.rb +1 -1
  15. data/app/controllers/tr8n/admin/metrics_controller.rb +30 -0
  16. data/app/controllers/tr8n/api/v1/base_controller.rb +12 -0
  17. data/app/controllers/tr8n/api/v1/language_controller.rb +7 -5
  18. data/app/controllers/tr8n/awards_controller.rb +1 -1
  19. data/app/controllers/tr8n/base_controller.rb +12 -6
  20. data/app/controllers/tr8n/dashboard_controller.rb +1 -1
  21. data/app/controllers/tr8n/forum_controller.rb +1 -1
  22. data/app/controllers/tr8n/glossary_controller.rb +1 -1
  23. data/app/controllers/tr8n/help_controller.rb +1 -1
  24. data/app/controllers/tr8n/phrases_controller.rb +1 -1
  25. data/app/controllers/tr8n/translator_controller.rb +8 -0
  26. data/app/helpers/tr8n/admin/base_helper.rb +1 -1
  27. data/app/helpers/tr8n/base_helper.rb +1 -1
  28. data/app/helpers/tr8n/dashboard_helper.rb +1 -1
  29. data/app/models/tr8n/base_filter.rb +1 -1
  30. data/app/models/tr8n/daily_language_metric.rb +1 -1
  31. data/app/models/tr8n/date_rule.rb +1 -1
  32. data/app/models/tr8n/gender_list_rule.rb +1 -1
  33. data/app/models/tr8n/gender_rule.rb +1 -1
  34. data/app/models/tr8n/glossary.rb +1 -1
  35. data/app/models/tr8n/glossary_filter.rb +1 -1
  36. data/app/models/tr8n/integration/ru/russian_gender_list_rule.rb +1 -1
  37. data/app/models/tr8n/integration/ru/russian_numeric_rule.rb +1 -1
  38. data/app/models/tr8n/ip_location.rb +1 -1
  39. data/app/models/tr8n/ip_location_filter.rb +1 -1
  40. data/app/models/tr8n/language.rb +19 -7
  41. data/app/models/tr8n/language_case.rb +1 -1
  42. data/app/models/tr8n/language_case_filter.rb +1 -1
  43. data/app/models/tr8n/language_case_rule.rb +1 -1
  44. data/app/models/tr8n/language_case_rule_filter.rb +1 -1
  45. data/app/models/tr8n/language_case_value_map.rb +1 -1
  46. data/app/models/tr8n/language_case_value_map_filter.rb +1 -1
  47. data/app/models/tr8n/language_filter.rb +1 -1
  48. data/app/models/tr8n/language_forum_abuse_report.rb +1 -1
  49. data/app/models/tr8n/language_forum_abuse_report_filter.rb +1 -1
  50. data/app/models/tr8n/language_forum_message.rb +1 -1
  51. data/app/models/tr8n/language_forum_message_filter.rb +1 -1
  52. data/app/models/tr8n/language_forum_topic.rb +1 -1
  53. data/app/models/tr8n/language_forum_topic_filter.rb +1 -1
  54. data/app/models/tr8n/language_metric.rb +1 -1
  55. data/app/models/tr8n/language_metric_filter.rb +1 -1
  56. data/app/models/tr8n/language_rule.rb +1 -1
  57. data/app/models/tr8n/language_rule_filter.rb +1 -1
  58. data/app/models/tr8n/language_user.rb +1 -1
  59. data/app/models/tr8n/language_user_filter.rb +1 -1
  60. data/app/models/tr8n/list_rule.rb +1 -1
  61. data/app/models/tr8n/monthly_language_metric.rb +1 -1
  62. data/app/models/tr8n/numeric_rule.rb +35 -28
  63. data/app/models/tr8n/sync_log.rb +1 -1
  64. data/app/models/tr8n/sync_log_filter.rb +1 -1
  65. data/app/models/tr8n/total_language_metric.rb +1 -1
  66. data/app/models/tr8n/translation.rb +4 -3
  67. data/app/models/tr8n/translation_domain.rb +11 -3
  68. data/app/models/tr8n/translation_domain_filter.rb +1 -1
  69. data/app/models/tr8n/translation_filter.rb +1 -1
  70. data/app/models/tr8n/translation_key.rb +73 -36
  71. data/app/models/tr8n/translation_key_comment.rb +1 -1
  72. data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
  73. data/app/models/tr8n/translation_key_filter.rb +1 -1
  74. data/app/models/tr8n/translation_key_lock.rb +1 -1
  75. data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
  76. data/app/models/tr8n/translation_key_source.rb +16 -5
  77. data/app/models/tr8n/translation_key_source_filter.rb +1 -1
  78. data/app/models/tr8n/translation_source.rb +12 -4
  79. data/app/models/tr8n/translation_source_filter.rb +1 -1
  80. data/app/models/tr8n/translation_source_language.rb +1 -1
  81. data/app/models/tr8n/translation_vote.rb +1 -1
  82. data/app/models/tr8n/translation_vote_filter.rb +1 -1
  83. data/app/models/tr8n/translator.rb +21 -5
  84. data/app/models/tr8n/translator_filter.rb +1 -1
  85. data/app/models/tr8n/translator_following.rb +1 -1
  86. data/app/models/tr8n/translator_following_filter.rb +1 -1
  87. data/app/models/tr8n/translator_log.rb +3 -3
  88. data/app/models/tr8n/translator_log_filter.rb +1 -1
  89. data/app/models/tr8n/translator_metric.rb +1 -1
  90. data/app/models/tr8n/translator_metric_filter.rb +1 -1
  91. data/app/models/tr8n/translator_report.rb +1 -1
  92. data/app/models/tr8n/translator_report_filter.rb +1 -1
  93. data/app/models/tr8n/value_rule.rb +1 -1
  94. data/app/views/tr8n/admin/clientsdk/index.html.erb +29 -29
  95. data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +1 -1
  96. data/app/views/tr8n/admin/metrics/_tabs.html.erb +22 -0
  97. data/app/views/tr8n/admin/metrics/index.html.erb +60 -0
  98. data/app/views/tr8n/common/_header.html.erb +3 -1
  99. data/app/views/tr8n/common/_language_selector.html.erb +4 -2
  100. data/app/views/tr8n/common/_scripts.html.erb +5 -0
  101. data/app/views/tr8n/common/_terms_of_service.html.erb +53 -0
  102. data/app/views/tr8n/help/credits.html.erb +4 -0
  103. data/app/views/tr8n/language/_select.html.erb +5 -1
  104. data/app/views/tr8n/translator/registration.html.erb +21 -0
  105. data/config/routes.rb +3 -1
  106. data/doc/classes.graffle +356 -7194
  107. data/lib/generators/tr8n/templates/config/tr8n/config.yml +9 -1
  108. data/lib/generators/tr8n/templates/config/tr8n/site/shortcuts.yml +1 -1
  109. data/lib/generators/tr8n/templates/config/tr8n/tokens/decorations.yml +4 -1
  110. data/lib/generators/tr8n/tr8n_generator.rb +1 -1
  111. data/lib/tasks/tr8n.rake +1 -1
  112. data/lib/tr8n.rb +23 -0
  113. data/lib/tr8n/active_dumper.rb +1 -1
  114. data/lib/tr8n/cache.rb +1 -8
  115. data/lib/tr8n/cache_adapters/memcached.rb +1 -1
  116. data/lib/tr8n/config.rb +37 -1
  117. data/lib/tr8n/dictionary.rb +1 -1
  118. data/lib/tr8n/engine.rb +4 -1
  119. data/lib/tr8n/exception.rb +1 -1
  120. data/lib/tr8n/extender.rb +1 -1
  121. data/lib/tr8n/extensions/action_controller_extension.rb +5 -4
  122. data/lib/tr8n/extensions/action_view_extension.rb +71 -20
  123. data/lib/tr8n/extensions/array_extension.rb +14 -1
  124. data/lib/tr8n/extensions/date_extension.rb +1 -1
  125. data/lib/tr8n/extensions/fixnum_extension.rb +1 -1
  126. data/lib/tr8n/extensions/hash_extension.rb +1 -1
  127. data/lib/tr8n/extensions/string_extension.rb +1 -1
  128. data/lib/tr8n/extensions/time_extension.rb +1 -1
  129. data/lib/tr8n/ip_address.rb +1 -1
  130. data/lib/tr8n/key_registration_exception.rb +1 -1
  131. data/lib/tr8n/keyboard_mapping.rb +1 -1
  132. data/lib/tr8n/logger.rb +1 -1
  133. data/lib/tr8n/railtie.rb +1 -1
  134. data/lib/tr8n/site_map.rb +1 -1
  135. data/lib/tr8n/site_map_section.rb +1 -1
  136. data/lib/tr8n/token.rb +1 -1
  137. data/lib/tr8n/token_exception.rb +1 -1
  138. data/lib/tr8n/tokenized_label.rb +2 -12
  139. data/lib/tr8n/tokens/data_token.rb +1 -1
  140. data/lib/tr8n/tokens/decoration_token.rb +1 -1
  141. data/lib/tr8n/tokens/hidden_token.rb +1 -1
  142. data/lib/tr8n/tokens/method_token.rb +1 -1
  143. data/lib/tr8n/tokens/transform_token.rb +1 -1
  144. data/lib/tr8n/version.rb +25 -1
  145. data/local/tr8n_server/app/models/user.rb +1 -0
  146. data/local/tr8n_server/config/environments/test.rb +1 -1
  147. data/local/tr8n_server/config/tr8n/config.yml +45 -39
  148. data/local/tr8n_server/config/tr8n/site/shortcuts.yml +1 -1
  149. data/local/tr8n_server/db/schema.rb +2 -0
  150. data/spec/controllers/awards_controller_spec.rb +22 -0
  151. data/spec/controllers/base_controller_spec.rb +6 -0
  152. data/spec/controllers/dashboard_controller_spec.rb +23 -0
  153. data/spec/controllers/forum_controller_spec.rb +23 -0
  154. data/spec/controllers/glossary_controller_spec.rb +22 -0
  155. data/spec/controllers/help_controller_spec.rb +22 -0
  156. data/spec/controllers/language_cases_controller_spec.rb +13 -0
  157. data/spec/controllers/language_controller_spec.rb +10 -0
  158. data/spec/controllers/phrases_controller_spec.rb +22 -0
  159. data/spec/controllers/translations_controller_spec.rb +23 -0
  160. data/spec/controllers/translator_controller_spec.rb +22 -0
  161. data/spec/lib/tokenized_label_spec.rb +42 -0
  162. data/spec/lib/tokens/data_token_spec.rb +49 -0
  163. data/spec/lib/tokens/decoration_token_spec.rb +49 -0
  164. data/spec/lib/tokens/hidden_token_spec.rb +53 -0
  165. data/spec/lib/tokens/method_token_spec.rb +61 -0
  166. data/spec/lib/tokens/transform_token_spec.rb +51 -0
  167. data/spec/models/tr8n/daily_language_metric_spec.rb +5 -0
  168. data/spec/models/tr8n/date_rule_spec.rb +5 -0
  169. data/spec/models/tr8n/gender_list_rule_spec.rb +5 -0
  170. data/spec/models/tr8n/gender_rule_spec.rb +141 -0
  171. data/spec/models/tr8n/glossary_spec.rb +5 -0
  172. data/spec/models/tr8n/ip_location_spec.rb +5 -0
  173. data/spec/models/tr8n/language_case_rule_spec.rb +5 -0
  174. data/spec/models/tr8n/language_case_spec.rb +5 -0
  175. data/spec/models/tr8n/language_case_value_map_spec.rb +5 -0
  176. data/spec/models/tr8n/language_forum_abuse_report_spec.rb +5 -0
  177. data/spec/models/tr8n/language_forum_message_spec.rb +5 -0
  178. data/spec/models/tr8n/language_forum_topic_spec.rb +5 -0
  179. data/spec/models/tr8n/language_metric_spec.rb +5 -0
  180. data/spec/models/tr8n/language_rule_spec.rb +5 -0
  181. data/spec/models/tr8n/language_spec.rb +79 -0
  182. data/spec/models/tr8n/language_user_spec.rb +5 -0
  183. data/spec/models/tr8n/list_rule_spec.rb +5 -0
  184. data/spec/models/tr8n/monthly_language_metric_spec.rb +5 -0
  185. data/spec/models/tr8n/numeric_rule_spec.rb +162 -0
  186. data/spec/models/tr8n/sync_log_spec.rb +5 -0
  187. data/spec/models/tr8n/total_language_metric_spec.rb +5 -0
  188. data/spec/models/tr8n/translation_domain_spec.rb +5 -0
  189. data/spec/models/tr8n/translation_key_comment_spec.rb +5 -0
  190. data/spec/models/tr8n/translation_key_lock_spec.rb +5 -0
  191. data/spec/models/tr8n/translation_key_source_spec.rb +5 -0
  192. data/spec/models/tr8n/translation_key_spec.rb +118 -0
  193. data/spec/models/tr8n/translation_source_language_spec.rb +5 -0
  194. data/spec/models/tr8n/translation_source_spec.rb +5 -0
  195. data/spec/models/tr8n/translation_spec.rb +5 -0
  196. data/spec/models/tr8n/translation_vote_spec.rb +5 -0
  197. data/spec/models/tr8n/translator_following_spec.rb +5 -0
  198. data/spec/models/tr8n/translator_log_spec.rb +5 -0
  199. data/spec/models/tr8n/translator_metric_spec.rb +5 -0
  200. data/spec/models/tr8n/translator_report_spec.rb +5 -0
  201. data/spec/models/tr8n/translator_spec.rb +140 -0
  202. data/spec/spec_helper.rb +26 -27
  203. data/tr8n.gemspec +3 -1
  204. metadata +173 -50
  205. data/local/tr8n_server/db/migrate/20110930041150_create_tr8n_tables.rb +0 -372
  206. data/spec/fake_app.rb +0 -50
  207. data/spec/lib/data_token_spec.rb +0 -26
  208. data/spec/lib/transform_token_spec.rb +0 -22
  209. data/spec/models/translation_key_spec.rb +0 -63
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -22,7 +22,7 @@
22
22
  #++
23
23
 
24
24
  class Tr8n::TranslationKeySource < ActiveRecord::Base
25
- set_table_name :tr8n_translation_key_sources
25
+ set_table_name :tr8n_translation_key_sources
26
26
  after_destroy :clear_cache
27
27
 
28
28
  belongs_to :translation_source, :class_name => "Tr8n::TranslationSource"
@@ -33,10 +33,21 @@ class Tr8n::TranslationKeySource < ActiveRecord::Base
33
33
 
34
34
  serialize :details
35
35
 
36
+ def self.cache_key(translation_key_id, translation_source_id)
37
+ "translation_key_source_#{translation_key_id}_#{translation_source_id}"
38
+ end
39
+
40
+ def cache_key
41
+ self.class.cache_key(translation_key_id, translation_source_id)
42
+ end
43
+
36
44
  def self.find_or_create(translation_key, translation_source)
37
- Tr8n::Cache.fetch("translation_key_source_#{translation_key.id}_#{translation_source.id}") do
45
+ Tr8n::Cache.fetch(cache_key(translation_key.id, translation_source.id)) do
38
46
  tks = where("translation_key_id = ? and translation_source_id = ?", translation_key.id, translation_source.id).first
39
- tks || create(:translation_key => translation_key, :translation_source => translation_source)
47
+ tks ||= begin
48
+ translation_source.touch
49
+ create(:translation_key => translation_key, :translation_source => translation_source)
50
+ end
40
51
  end
41
52
  end
42
53
 
@@ -51,7 +62,7 @@ class Tr8n::TranslationKeySource < ActiveRecord::Base
51
62
  end
52
63
 
53
64
  def clear_cache
54
- Tr8n::Cache.delete("translation_key_source_#{translation_key_id}_#{translation_source_id}")
65
+ Tr8n::Cache.delete(cache_key)
55
66
  end
56
67
 
57
68
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -35,9 +35,17 @@ class Tr8n::TranslationSource < ActiveRecord::Base
35
35
  alias :sources :translation_key_sources
36
36
  alias :keys :translation_keys
37
37
 
38
+ def self.cache_key(source)
39
+ "translation_source_#{source}"
40
+ end
41
+
42
+ def cache_key
43
+ self.class.cache_key(source)
44
+ end
45
+
38
46
  def self.find_or_create(source, url = nil)
39
- translation_domain = Tr8n::TranslationDomain.find_or_create(url)
40
- Tr8n::Cache.fetch("translation_source_#{translation_domain.id}_#{source}") do
47
+ Tr8n::Cache.fetch(cache_key(source)) do
48
+ translation_domain = Tr8n::TranslationDomain.find_or_create(url)
41
49
  translation_source = where("source = ? and translation_domain_id = ?", source, translation_domain.id).first
42
50
  translation_source ||= create(:source => source, :translation_domain => translation_domain)
43
51
  translation_source.update_attributes(:translation_domain => translation_domain) unless translation_source.translation_domain
@@ -46,7 +54,7 @@ class Tr8n::TranslationSource < ActiveRecord::Base
46
54
  end
47
55
 
48
56
  def clear_cache
49
- Tr8n::Cache.delete("translation_source_#{translation_domain_id}_#{source}")
57
+ Tr8n::Cache.delete(cache_key)
50
58
  end
51
59
 
52
60
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -40,29 +40,45 @@ class Tr8n::Translator < ActiveRecord::Base
40
40
 
41
41
  belongs_to :fallback_language, :class_name => 'Tr8n::Language', :foreign_key => :fallback_language_id
42
42
 
43
+ def self.cache_key(user_id)
44
+ "translator_#{user_id}"
45
+ end
46
+
47
+ def cache_key
48
+ self.class.cache_key(key)
49
+ end
50
+
43
51
  def self.for(user)
44
52
  return nil unless user and user.id
45
53
  return nil if Tr8n::Config.guest_user?(user)
46
- return user if user.is_a?(Tr8n::Translator)
47
- find_by_user_id(user.id)
54
+ translator = Tr8n::Cache.fetch(cache_key(user.id)) do
55
+ find_by_user_id(user.id)
56
+ end
48
57
  end
49
58
 
50
59
  def self.find_or_create(user)
60
+ return nil unless user and user.id
61
+
51
62
  trn = where(:user_id => user.id).first
52
63
  trn = create(:user => user) unless trn
53
64
  trn
54
65
  end
55
66
 
56
67
  def self.register(user = Tr8n::Config.current_user)
57
- return unless user
58
-
59
68
  translator = Tr8n::Translator.find_or_create(user)
69
+ return unless translator
70
+
71
+ # update all language user entries to add a translator id
60
72
  Tr8n::LanguageUser.where(:user_id => user.id).each do |lu|
61
73
  lu.update_attributes(:translator => translator)
62
74
  end
63
75
  translator
64
76
  end
65
77
 
78
+ def self.top_translators_for_language(lang = Tr8n::Config.current_language, limit = 5)
79
+ Tr8n::TranslatorMetric.where(:language_id => lang.id).order("total_translations desc, total_votes desc").limit(limit)
80
+ end
81
+
66
82
  def total_metric
67
83
  @total_metric ||= Tr8n::TranslatorMetric.find_or_create(self, nil)
68
84
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -83,11 +83,11 @@ class Tr8n::TranslatorLog < ActiveRecord::Base
83
83
  html = action.to_s.gsub("_", " ")
84
84
  act = action.to_sym
85
85
  if [:got_blocked, :got_unblocked, :got_promoted, :got_demoted].include?(act)
86
- html << " by " << user.name if user
86
+ html << " by " << Tr8n::Config.user_name(user) if user
87
87
  html << " (" << reason << ")" unless reason.blank?
88
88
  elsif [:got_new_level].include?(act)
89
89
  html << " " << reference unless reference.blank?
90
- html << " from " << user.name if user
90
+ html << " from " << Tr8n::Config.user_name(user) if user
91
91
  html << " (" << reason << ")" unless reason.blank?
92
92
  elsif [:enabled_inline_translations, :disabled_inline_translations].include?(act)
93
93
  lang = Tr8n::Language.find_by_id(reference) unless reference.blank?
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich, tr8n.net
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
@@ -2,7 +2,9 @@
2
2
 
3
3
  <div class="section_title">
4
4
  <span style="font-size:12px; color:grey; float:right; padding-top:5px;">
5
- <strong>Make sure that key source tracking is enabled!</strong> And try not to register useless phrases in production.
5
+ <% unless Tr8n::Config.enable_client_sdk? %>
6
+ <span style="color:red">Make sure that JS Client SDK is enabled!</span>
7
+ <% end %>
6
8
  </span>
7
9
 
8
10
  Tr8n JavaScript Client SDK Test Tool
@@ -28,56 +30,48 @@
28
30
  </td>
29
31
  <td rowspan="3" style="width:15%; padding:2px; vertical-align:top;">
30
32
  <center>
31
- <div style="width:150px; text-align:center; padding-top:15px;">
32
- <%=link_to_function("<span>Translate Label</span>".html_safe, "translate();", :class => "tr8n_grey_button tr8n_pcb") %>
33
-
34
- <div style="margin-top:15px; padding:2px; text-align:center; border: 1px dotted #ccc;">
35
- <%=link_to_function("<span>View Examples</span>".html_safe, "tr8nLightbox.show('/tr8n/admin/clientsdk/lb_samples', {height:550});", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
36
- <%=link_to("<span>View Phrases</span>".html_safe, "/tr8n/phrases/index?section_key=clientsdk", :target => "_phrases", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
37
- <%=link_to_function("<span>Load Translations</span>".html_safe, "reloadTranslations();", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
38
- <%=link_to_function("<span>Clear Results</span>".html_safe, "clearResults();", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
39
- <%=link_to_function("<span>Run Speed Test</span>".html_safe, "speedTest();", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
40
- <%=link_to("<span>Download SDK</span>".html_safe, "/tr8n/javascripts/tr8n_client_sdk.js", :class => "tr8n_grey_button tr8n_pcb", :style=>"width:200px;") %><br>
41
- </div>
42
-
43
- </div>
33
+ <div style="width:150px; text-align:center; padding-top:15px;">
34
+ <button style="width:100%;" onClick="translate();return false;">Translate</button>
35
+ <button style="width:100%;" onClick="translate({skip_decorations:true});return false;">Translate Label</button>
36
+ <button style="width:100%;" onClick="searchPhrase();return false;">View Translation Key</button>
37
+ <br><br>
38
+ <button style="width:100%;" onClick="clearResults();return false;">Clear Results</button>
39
+ <button style="width:100%;" onClick="tr8nLightbox.show('/tr8n/admin/clientsdk/lb_samples', {height:500});return false;">View Examples</button>
40
+ <button style="width:100%;" onClick="reloadTranslations();return false;">Reload Translations</button>
41
+ <button style="width:100%;" onClick="tr8nProxy.logSettings();return false;">Print Settings</button>
42
+ <button style="width:100%;" onClick="tr8nProxy.logTranslations();return false;">Print Translation Cache</button>
43
+ </div>
44
44
  </center>
45
45
  </td>
46
46
  </tr>
47
47
  <tr>
48
48
  <td colspan="2" style="padding:2px; background:#F1F4FA;">
49
49
  <div style="font-weight:bold;">Tokens JSON <span style='color:grey'>- provides values for tokens used in translation. (required, if data tokens are defined)</span></div>
50
- <%=text_area_tag(:tokens, "{'count':5}", :style => "width:99%; height:40px;")%>
50
+ <%=text_area_tag(:tokens, "{'count':5}", :style => "width:99%; height:50px;")%>
51
51
  </td>
52
52
  </tr>
53
53
  <tr>
54
54
  <td colspan="2" style="padding:2px;">
55
55
  <div style="font-weight:bold; padding-top:10px;">Translation <span style='color:grey'>- translated label with substituted tokens</span></div>
56
56
  <div id="result_html" style="background:#F9F8F7; height:40px; overflow:auto; border:1px dotted #ccc; padding:10px;"></div>
57
- <div style="font-weight:bold; padding-top:10px; color:grey;">Raw HTML:</div>
58
- <%=text_area_tag(:result, "", :style => "width:99%; background:#F9F8F7;", :readonly => true)%>
57
+ <div style="font-weight:bold; padding-top:10px;">Translation Raw HTML <span style='color:grey'>- translated label with substituted tokens</span></div>
58
+ <%=text_area_tag(:result, "", :style => "width:99%; background:#F9F8F7;height:50px; border:1px solid #ccc;", :readonly => true)%>
59
59
  </td>
60
60
  </tr>
61
61
  </table>
62
62
  <% end %>
63
63
  </div>
64
64
 
65
- <div id="debugger" class="section_box colored" style="font-size:10px; border:1px solid black; height:230px; overflow:auto; padding: 2px;">
65
+ <div id="tr8n_debugger" class="section_box colored" style="font-size:10px; height:350px; overflow:auto; margin: 10px;">
66
66
  </div>
67
67
 
68
- <%=tr8n_translations_js_tag(:sources => ["clientsdk_examples"], :id => :tr8n_clientsdk_translations) %>
69
- <%=tr8n_client_sdk_scripts_tag(
70
- :default_source => "clientsdk_examples",
71
- :debugger_element_id => "debugger",
72
- :translations_element_id => "tr8n_clientsdk_translations",
73
- :scheduler_interval => 5000
74
- ) %>
75
-
76
68
  <script>
69
+ tr8nProxy.enableLogger();
70
+
77
71
  function clearResults() {
78
- Tr8n.element('debugger').innerHTML = '';
79
72
  Tr8n.element('result').value = '';
80
73
  Tr8n.element('result_html').innerHTML = '';
74
+ tr8nProxy.logger.clear();
81
75
  }
82
76
 
83
77
  function reloadTranslations() {
@@ -91,17 +85,23 @@
91
85
  tr8nLightbox.hide();
92
86
  }
93
87
 
94
- function translate() {
88
+ function translate(opts) {
89
+ opts = opts || {};
95
90
  var tokens = null;
96
91
 
97
92
  if (Tr8n.element('tokens').value != "") {
98
93
  tokens = eval("[" + Tr8n.value('tokens') + "]")[0];
99
94
  }
100
95
 
101
- Tr8n.element('result').value = tr8nProxy.tr(Tr8n.value('label'), '', tokens);
96
+ Tr8n.element('result').value = tr(Tr8n.value('label'), '', tokens, opts);
102
97
  Tr8n.element('result_html').innerHTML = Tr8n.element('result').value;
103
98
  }
104
99
 
100
+ function searchPhrase() {
101
+ url = "/tr8n/phrases/index?search=" + encodeURI(Tr8n.value('label'));
102
+ window.open(url,'translation_key');
103
+ }
104
+
105
105
  function speedTest() {
106
106
  var tokens = null;
107
107
 
@@ -30,7 +30,7 @@
30
30
  </div>
31
31
 
32
32
  <%= form_tag("", :class => "tr8n") do %>
33
- <div style="height:350px; overflow:auto;">
33
+ <div style="height:370px; overflow:auto;">
34
34
  <table class="admin_table">
35
35
  <tr>
36
36
  <th>Label</th>
@@ -0,0 +1,22 @@
1
+ <%
2
+ links = []
3
+ current_tab ||= ""
4
+ [
5
+ ["Top Translators By Language", {:action => :index}],
6
+ ].each do |link|
7
+ if controller.action_name == link.last[:action].to_s
8
+ current_tab = link.first if current_tab.blank?
9
+ links << link.first
10
+ else
11
+ links << link_to(link.first, link.last)
12
+ end
13
+ end
14
+ %>
15
+
16
+ <div class="section_title">
17
+ <span style="font-size:12px; float:right; padding-top:5px;">
18
+ <%=links.join(" | ")%>
19
+ </span>
20
+ <%=current_tab %>
21
+ </div>
22
+