tr8n 3.0.2

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 (751) hide show
  1. data/.project +18 -0
  2. data/Gemfile +34 -0
  3. data/Gemfile.lock +79 -0
  4. data/LICENSE +18 -0
  5. data/README.rdoc +116 -0
  6. data/Rakefile +29 -0
  7. data/VERSION +1 -0
  8. data/app/controllers/application_controller.rb +28 -0
  9. data/app/controllers/tr8n/admin/base_controller.rb +65 -0
  10. data/app/controllers/tr8n/admin/clientsdk_controller.rb +34 -0
  11. data/app/controllers/tr8n/admin/domain_controller.rb +77 -0
  12. data/app/controllers/tr8n/admin/forum_controller.rb +58 -0
  13. data/app/controllers/tr8n/admin/glossary_controller.rb +56 -0
  14. data/app/controllers/tr8n/admin/language_controller.rb +129 -0
  15. data/app/controllers/tr8n/admin/translation_controller.rb +64 -0
  16. data/app/controllers/tr8n/admin/translation_key_controller.rb +157 -0
  17. data/app/controllers/tr8n/admin/translator_controller.rb +119 -0
  18. data/app/controllers/tr8n/api/v1/base_controller.rb +81 -0
  19. data/app/controllers/tr8n/api/v1/language_controller.rb +107 -0
  20. data/app/controllers/tr8n/api/v1/translation_controller.rb +75 -0
  21. data/app/controllers/tr8n/api/v1/translator_controller.rb +34 -0
  22. data/app/controllers/tr8n/awards_controller.rb +43 -0
  23. data/app/controllers/tr8n/base_controller.rb +206 -0
  24. data/app/controllers/tr8n/dashboard_controller.rb +32 -0
  25. data/app/controllers/tr8n/forum_controller.rb +100 -0
  26. data/app/controllers/tr8n/glossary_controller.rb +40 -0
  27. data/app/controllers/tr8n/help_controller.rb +40 -0
  28. data/app/controllers/tr8n/home_controller.rb +51 -0
  29. data/app/controllers/tr8n/language_cases_controller.rb +82 -0
  30. data/app/controllers/tr8n/language_controller.rb +372 -0
  31. data/app/controllers/tr8n/login_controller.rb +86 -0
  32. data/app/controllers/tr8n/phrases_controller.rb +293 -0
  33. data/app/controllers/tr8n/translations_controller.rb +194 -0
  34. data/app/controllers/tr8n/translator_controller.rb +83 -0
  35. data/app/helpers/application_helper.rb +27 -0
  36. data/app/helpers/tr8n/admin/base_helper.rb +84 -0
  37. data/app/helpers/tr8n/base_helper.rb +44 -0
  38. data/app/helpers/tr8n/dashboard_helper.rb +43 -0
  39. data/app/models/tr8n/base_filter.rb +68 -0
  40. data/app/models/tr8n/daily_language_metric.rb +42 -0
  41. data/app/models/tr8n/date_rule.rb +123 -0
  42. data/app/models/tr8n/gender_list_rule.rb +247 -0
  43. data/app/models/tr8n/gender_rule.rb +140 -0
  44. data/app/models/tr8n/glossary.rb +27 -0
  45. data/app/models/tr8n/glossary_filter.rb +33 -0
  46. data/app/models/tr8n/integration/ru/russian_gender_list_rule.rb +60 -0
  47. data/app/models/tr8n/integration/ru/russian_numeric_rule.rb +64 -0
  48. data/app/models/tr8n/ip_location.rb +74 -0
  49. data/app/models/tr8n/ip_location_filter.rb +34 -0
  50. data/app/models/tr8n/language.rb +318 -0
  51. data/app/models/tr8n/language_case.rb +141 -0
  52. data/app/models/tr8n/language_case_filter.rb +30 -0
  53. data/app/models/tr8n/language_case_rule.rb +187 -0
  54. data/app/models/tr8n/language_case_rule_filter.rb +30 -0
  55. data/app/models/tr8n/language_case_value_map.rb +100 -0
  56. data/app/models/tr8n/language_case_value_map_filter.rb +41 -0
  57. data/app/models/tr8n/language_filter.rb +75 -0
  58. data/app/models/tr8n/language_forum_abuse_report.rb +33 -0
  59. data/app/models/tr8n/language_forum_abuse_report_filter.rb +30 -0
  60. data/app/models/tr8n/language_forum_message.rb +46 -0
  61. data/app/models/tr8n/language_forum_message_filter.rb +34 -0
  62. data/app/models/tr8n/language_forum_topic.rb +41 -0
  63. data/app/models/tr8n/language_forum_topic_filter.rb +34 -0
  64. data/app/models/tr8n/language_metric.rb +91 -0
  65. data/app/models/tr8n/language_metric_filter.rb +63 -0
  66. data/app/models/tr8n/language_rule.rb +117 -0
  67. data/app/models/tr8n/language_rule_filter.rb +45 -0
  68. data/app/models/tr8n/language_user.rb +61 -0
  69. data/app/models/tr8n/language_user_filter.rb +34 -0
  70. data/app/models/tr8n/list_rule.rb +118 -0
  71. data/app/models/tr8n/monthly_language_metric.rb +34 -0
  72. data/app/models/tr8n/numeric_rule.rb +175 -0
  73. data/app/models/tr8n/total_language_metric.rb +59 -0
  74. data/app/models/tr8n/translation.rb +299 -0
  75. data/app/models/tr8n/translation_domain.rb +48 -0
  76. data/app/models/tr8n/translation_domain_filter.rb +26 -0
  77. data/app/models/tr8n/translation_filter.rb +34 -0
  78. data/app/models/tr8n/translation_key.rb +625 -0
  79. data/app/models/tr8n/translation_key_comment.rb +37 -0
  80. data/app/models/tr8n/translation_key_comment_filter.rb +30 -0
  81. data/app/models/tr8n/translation_key_filter.rb +45 -0
  82. data/app/models/tr8n/translation_key_lock.rb +59 -0
  83. data/app/models/tr8n/translation_key_lock_filter.rb +30 -0
  84. data/app/models/tr8n/translation_key_source.rb +58 -0
  85. data/app/models/tr8n/translation_key_source_filter.rb +30 -0
  86. data/app/models/tr8n/translation_source.rb +52 -0
  87. data/app/models/tr8n/translation_source_filter.rb +30 -0
  88. data/app/models/tr8n/translation_vote.rb +36 -0
  89. data/app/models/tr8n/translation_vote_filter.rb +34 -0
  90. data/app/models/tr8n/translator.rb +301 -0
  91. data/app/models/tr8n/translator_filter.rb +46 -0
  92. data/app/models/tr8n/translator_following.rb +38 -0
  93. data/app/models/tr8n/translator_following_filter.rb +34 -0
  94. data/app/models/tr8n/translator_log.rb +120 -0
  95. data/app/models/tr8n/translator_log_filter.rb +49 -0
  96. data/app/models/tr8n/translator_metric.rb +83 -0
  97. data/app/models/tr8n/translator_metric_filter.rb +38 -0
  98. data/app/models/tr8n/translator_report.rb +82 -0
  99. data/app/models/tr8n/translator_report_filter.rb +30 -0
  100. data/app/models/tr8n/value_rule.rb +117 -0
  101. data/app/views/layouts/_footer.html.erb +15 -0
  102. data/app/views/layouts/_header.html.erb +12 -0
  103. data/app/views/layouts/_html_head.html.erb +5 -0
  104. data/app/views/layouts/tr8n.html.erb +21 -0
  105. data/app/views/layouts/tr8n_admin.html.erb +33 -0
  106. data/app/views/tr8n/admin/clientsdk/index.html.erb +133 -0
  107. data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +54 -0
  108. data/app/views/tr8n/admin/common/_footer.html.erb +1 -0
  109. data/app/views/tr8n/admin/common/_header.html.erb +30 -0
  110. data/app/views/tr8n/admin/common/_lightbox_buttons.html.erb +5 -0
  111. data/app/views/tr8n/admin/common/_paginator.html.erb +20 -0
  112. data/app/views/tr8n/admin/domain/_tabs.html.erb +23 -0
  113. data/app/views/tr8n/admin/domain/index.html.erb +33 -0
  114. data/app/views/tr8n/admin/domain/key_sources.rhtml +53 -0
  115. data/app/views/tr8n/admin/domain/lb_caller.html.erb +35 -0
  116. data/app/views/tr8n/admin/domain/sources.html.erb +35 -0
  117. data/app/views/tr8n/admin/forum/_tabs.html.erb +22 -0
  118. data/app/views/tr8n/admin/forum/index.html.erb +34 -0
  119. data/app/views/tr8n/admin/forum/messages.html.erb +33 -0
  120. data/app/views/tr8n/admin/forum/reports.html.erb +50 -0
  121. data/app/views/tr8n/admin/glossary/index.html.erb +22 -0
  122. data/app/views/tr8n/admin/glossary/lb_update.html.erb +26 -0
  123. data/app/views/tr8n/admin/language/_rules.html.erb +22 -0
  124. data/app/views/tr8n/admin/language/_tabs.html.erb +27 -0
  125. data/app/views/tr8n/admin/language/_users.html.erb +40 -0
  126. data/app/views/tr8n/admin/language/case_rules.html.erb +24 -0
  127. data/app/views/tr8n/admin/language/case_values.html.erb +25 -0
  128. data/app/views/tr8n/admin/language/cases.html.erb +24 -0
  129. data/app/views/tr8n/admin/language/charts.html.erb +35 -0
  130. data/app/views/tr8n/admin/language/index.html.erb +99 -0
  131. data/app/views/tr8n/admin/language/lb_update.html.erb +76 -0
  132. data/app/views/tr8n/admin/language/lb_value_map.html.erb +42 -0
  133. data/app/views/tr8n/admin/language/metrics.rhtml +16 -0
  134. data/app/views/tr8n/admin/language/rules.html.erb +24 -0
  135. data/app/views/tr8n/admin/language/users.rhtml +31 -0
  136. data/app/views/tr8n/admin/language/view.html.erb +106 -0
  137. data/app/views/tr8n/admin/translation/_tabs.html.erb +21 -0
  138. data/app/views/tr8n/admin/translation/index.html.erb +75 -0
  139. data/app/views/tr8n/admin/translation/view.html.erb +142 -0
  140. data/app/views/tr8n/admin/translation/votes.rhtml +81 -0
  141. data/app/views/tr8n/admin/translation_key/_tabs.html.erb +22 -0
  142. data/app/views/tr8n/admin/translation_key/comments.html.erb +49 -0
  143. data/app/views/tr8n/admin/translation_key/index.html.erb +79 -0
  144. data/app/views/tr8n/admin/translation_key/lb_merge.html.erb +43 -0
  145. data/app/views/tr8n/admin/translation_key/lb_update.html.erb +44 -0
  146. data/app/views/tr8n/admin/translation_key/locks.html.erb +51 -0
  147. data/app/views/tr8n/admin/translation_key/view.html.erb +192 -0
  148. data/app/views/tr8n/admin/translator/_list.html.erb +51 -0
  149. data/app/views/tr8n/admin/translator/_tabs.html.erb +26 -0
  150. data/app/views/tr8n/admin/translator/following.html.erb +20 -0
  151. data/app/views/tr8n/admin/translator/index.html.erb +77 -0
  152. data/app/views/tr8n/admin/translator/ip_locations.html.erb +9 -0
  153. data/app/views/tr8n/admin/translator/lb_register.html.erb +18 -0
  154. data/app/views/tr8n/admin/translator/log.html.erb +27 -0
  155. data/app/views/tr8n/admin/translator/metrics.html.erb +25 -0
  156. data/app/views/tr8n/admin/translator/reports.html.erb +22 -0
  157. data/app/views/tr8n/admin/translator/view.html.erb +228 -0
  158. data/app/views/tr8n/awards/_list.html.erb +46 -0
  159. data/app/views/tr8n/awards/index.html.erb +42 -0
  160. data/app/views/tr8n/common/_flashes.html.erb +39 -0
  161. data/app/views/tr8n/common/_footer.html.erb +1 -0
  162. data/app/views/tr8n/common/_header.html.erb +5 -0
  163. data/app/views/tr8n/common/_language_selector.html.erb +8 -0
  164. data/app/views/tr8n/common/_language_strip.html.erb +29 -0
  165. data/app/views/tr8n/common/_language_table.html.erb +13 -0
  166. data/app/views/tr8n/common/_paginator.html.erb +8 -0
  167. data/app/views/tr8n/common/_permutations.html.erb +37 -0
  168. data/app/views/tr8n/common/_scripts.html.erb +49 -0
  169. data/app/views/tr8n/common/_splash_screen.html.erb +9 -0
  170. data/app/views/tr8n/common/_splash_screen_legacy.html.erb +4 -0
  171. data/app/views/tr8n/common/_tabs.html.erb +39 -0
  172. data/app/views/tr8n/common/_translation_votes.html.erb +41 -0
  173. data/app/views/tr8n/common/_translator_login.html.erb +11 -0
  174. data/app/views/tr8n/dashboard/_forum.html.erb +25 -0
  175. data/app/views/tr8n/dashboard/_language_metric.html.erb +49 -0
  176. data/app/views/tr8n/dashboard/_statistics.html.erb +35 -0
  177. data/app/views/tr8n/dashboard/_translations.html.erb +24 -0
  178. data/app/views/tr8n/dashboard/_translator_metric.html.erb +68 -0
  179. data/app/views/tr8n/dashboard/_votes.html.erb +76 -0
  180. data/app/views/tr8n/dashboard/index.rhtml +115 -0
  181. data/app/views/tr8n/forum/_message.html.erb +17 -0
  182. data/app/views/tr8n/forum/_messages.html.erb +21 -0
  183. data/app/views/tr8n/forum/_new_message.html.erb +28 -0
  184. data/app/views/tr8n/forum/_new_topic.html.erb +49 -0
  185. data/app/views/tr8n/forum/index.html.erb +84 -0
  186. data/app/views/tr8n/forum/topic.html.erb +36 -0
  187. data/app/views/tr8n/glossary/index.html.erb +42 -0
  188. data/app/views/tr8n/help/_navigation.html.erb +127 -0
  189. data/app/views/tr8n/help/awards.html.erb +13 -0
  190. data/app/views/tr8n/help/basic_information.html.erb +13 -0
  191. data/app/views/tr8n/help/context_rules.html.erb +13 -0
  192. data/app/views/tr8n/help/creating_translations.html.erb +16 -0
  193. data/app/views/tr8n/help/dashboard.html.erb +13 -0
  194. data/app/views/tr8n/help/direction.html.erb +13 -0
  195. data/app/views/tr8n/help/discussions.html.erb +13 -0
  196. data/app/views/tr8n/help/enter_translation.html.erb +13 -0
  197. data/app/views/tr8n/help/fallback_language.html.erb +13 -0
  198. data/app/views/tr8n/help/generate_context_rules.html.erb +17 -0
  199. data/app/views/tr8n/help/index.html.erb +18 -0
  200. data/app/views/tr8n/help/inline_translations.html.erb +28 -0
  201. data/app/views/tr8n/help/language_dashboard.html.erb +21 -0
  202. data/app/views/tr8n/help/language_phrases.html.erb +17 -0
  203. data/app/views/tr8n/help/language_selector.html.erb +13 -0
  204. data/app/views/tr8n/help/language_statistics.html.erb +13 -0
  205. data/app/views/tr8n/help/lb_credits.html.erb +9 -0
  206. data/app/views/tr8n/help/lb_shortcuts.html.erb +26 -0
  207. data/app/views/tr8n/help/manage.html.erb +13 -0
  208. data/app/views/tr8n/help/manage_language.html.erb +13 -0
  209. data/app/views/tr8n/help/native_name.html.erb +13 -0
  210. data/app/views/tr8n/help/original_phrase.html.erb +13 -0
  211. data/app/views/tr8n/help/other_languages.html.erb +15 -0
  212. data/app/views/tr8n/help/other_translatable_resources.html.erb +13 -0
  213. data/app/views/tr8n/help/phrases.html.erb +19 -0
  214. data/app/views/tr8n/help/phrases_with_translations.html.erb +21 -0
  215. data/app/views/tr8n/help/phrases_without_translations.html.erb +15 -0
  216. data/app/views/tr8n/help/prohibited_words.html.erb +13 -0
  217. data/app/views/tr8n/help/rank.html.erb +13 -0
  218. data/app/views/tr8n/help/recent_discussions.html.erb +13 -0
  219. data/app/views/tr8n/help/recent_translation_votes.html.erb +13 -0
  220. data/app/views/tr8n/help/recent_translations.html.erb +13 -0
  221. data/app/views/tr8n/help/site_map.html.erb +17 -0
  222. data/app/views/tr8n/help/site_sections.html.erb +13 -0
  223. data/app/views/tr8n/help/suggested_translation.html.erb +13 -0
  224. data/app/views/tr8n/help/translating_inline.html.erb +30 -0
  225. data/app/views/tr8n/help/translation_context_rules.html.erb +16 -0
  226. data/app/views/tr8n/help/translation_rank.html.erb +17 -0
  227. data/app/views/tr8n/help/translation_tokens.html.erb +13 -0
  228. data/app/views/tr8n/help/translation_tools.html.erb +13 -0
  229. data/app/views/tr8n/help/translations.html.erb +13 -0
  230. data/app/views/tr8n/help/user_rank.html.erb +13 -0
  231. data/app/views/tr8n/help/using_translation_tools.html.erb +13 -0
  232. data/app/views/tr8n/help/voting_on_translations.html.erb +13 -0
  233. data/app/views/tr8n/help/your_dashboard.html.erb +17 -0
  234. data/app/views/tr8n/help/your_languages.html.erb +19 -0
  235. data/app/views/tr8n/help/your_translations.html.erb +17 -0
  236. data/app/views/tr8n/home/credits.html.erb +102 -0
  237. data/app/views/tr8n/home/docs.html.erb +3 -0
  238. data/app/views/tr8n/home/index.html.erb +37 -0
  239. data/app/views/tr8n/home/integration.html.erb +564 -0
  240. data/app/views/tr8n/home/languages.html.erb +7 -0
  241. data/app/views/tr8n/home/license.html.erb +586 -0
  242. data/app/views/tr8n/home/rules.html.erb +668 -0
  243. data/app/views/tr8n/home/tokens.html.erb +324 -0
  244. data/app/views/tr8n/language/_basic_info.html.erb +53 -0
  245. data/app/views/tr8n/language/_edit_language_case_rules.html.erb +51 -0
  246. data/app/views/tr8n/language/_edit_language_cases.html.erb +68 -0
  247. data/app/views/tr8n/language/_edit_rules.html.erb +46 -0
  248. data/app/views/tr8n/language/_grammar.html.erb +84 -0
  249. data/app/views/tr8n/language/_header.html.erb +14 -0
  250. data/app/views/tr8n/language/_language_cases.html.erb +196 -0
  251. data/app/views/tr8n/language/_lists.html.erb +56 -0
  252. data/app/views/tr8n/language/_prohibited_words.html.erb +16 -0
  253. data/app/views/tr8n/language/_translator_dependencies.html.erb +27 -0
  254. data/app/views/tr8n/language/_translator_header.html.erb +19 -0
  255. data/app/views/tr8n/language/_translator_submit.html.erb +141 -0
  256. data/app/views/tr8n/language/_translator_votes.html.erb +27 -0
  257. data/app/views/tr8n/language/index.html.erb +54 -0
  258. data/app/views/tr8n/language/lb_language_case_rule.html.erb +94 -0
  259. data/app/views/tr8n/language/rules/_date_rule.html.erb +3 -0
  260. data/app/views/tr8n/language/rules/_gender_list_rule.html.erb +23 -0
  261. data/app/views/tr8n/language/rules/_gender_rule.html.erb +3 -0
  262. data/app/views/tr8n/language/rules/_list_rule.html.erb +3 -0
  263. data/app/views/tr8n/language/rules/_number_rule.html.erb +24 -0
  264. data/app/views/tr8n/language/rules/_value_rule.html.erb +3 -0
  265. data/app/views/tr8n/language/select.html.erb +72 -0
  266. data/app/views/tr8n/language/table.html.erb +32 -0
  267. data/app/views/tr8n/language/translator.html.erb +18 -0
  268. data/app/views/tr8n/language_cases/_gender_based.html.erb +32 -0
  269. data/app/views/tr8n/language_cases/_gender_neutral.html.erb +25 -0
  270. data/app/views/tr8n/language_cases/_manager_header.html.erb +18 -0
  271. data/app/views/tr8n/language_cases/index.html.erb +54 -0
  272. data/app/views/tr8n/language_cases/manager.html.erb +60 -0
  273. data/app/views/tr8n/login/index.html.erb +33 -0
  274. data/app/views/tr8n/login/register.html.erb +57 -0
  275. data/app/views/tr8n/phrases/_breadcrumb.html.erb +11 -0
  276. data/app/views/tr8n/phrases/_comment.html.erb +17 -0
  277. data/app/views/tr8n/phrases/_comments_module.html.erb +37 -0
  278. data/app/views/tr8n/phrases/_dictionary.rhtml +29 -0
  279. data/app/views/tr8n/phrases/_header.html.erb +24 -0
  280. data/app/views/tr8n/phrases/_new_comment.html.erb +31 -0
  281. data/app/views/tr8n/phrases/_permutations_module.html.erb +30 -0
  282. data/app/views/tr8n/phrases/_tokens.html.erb +122 -0
  283. data/app/views/tr8n/phrases/_toolbar.html.erb +33 -0
  284. data/app/views/tr8n/phrases/_translation_module.html.erb +127 -0
  285. data/app/views/tr8n/phrases/_translations_module.html.erb +70 -0
  286. data/app/views/tr8n/phrases/index.html.erb +90 -0
  287. data/app/views/tr8n/phrases/lb_sources.html.erb +51 -0
  288. data/app/views/tr8n/phrases/map.html.erb +42 -0
  289. data/app/views/tr8n/phrases/view.html.erb +77 -0
  290. data/app/views/tr8n/translations/_list.html.erb +71 -0
  291. data/app/views/tr8n/translations/_original_phrase.html.erb +11 -0
  292. data/app/views/tr8n/translations/_translation.html.erb +80 -0
  293. data/app/views/tr8n/translations/index.html.erb +30 -0
  294. data/app/views/tr8n/translator/_basic_info.html.erb +95 -0
  295. data/app/views/tr8n/translator/_header.html.erb +12 -0
  296. data/app/views/tr8n/translator/_header_key_report.html.erb +12 -0
  297. data/app/views/tr8n/translator/index.html.erb +25 -0
  298. data/app/views/tr8n/translator/lb_report.html.erb +113 -0
  299. data/config.ru +4 -0
  300. data/config/application.rb +65 -0
  301. data/config/boot.rb +6 -0
  302. data/config/database.yml +13 -0
  303. data/config/environment.rb +46 -0
  304. data/config/environments/development.rb +25 -0
  305. data/config/environments/test.rb +35 -0
  306. data/config/routes.rb +47 -0
  307. data/config/tr8n/config.yml +247 -0
  308. data/config/tr8n/data/ip_locations.csv +93460 -0
  309. data/config/tr8n/rules/default_cases.yml +141 -0
  310. data/config/tr8n/rules/default_date_rules.yml +20 -0
  311. data/config/tr8n/rules/default_gender_list_rules.yml +82 -0
  312. data/config/tr8n/rules/default_gender_rules.yml +20 -0
  313. data/config/tr8n/rules/default_list_rules.yml +19 -0
  314. data/config/tr8n/rules/default_numeric_rules.yml +42 -0
  315. data/config/tr8n/rules/default_value_rules.yml +18 -0
  316. data/config/tr8n/site/default_glossary.yml +18 -0
  317. data/config/tr8n/site/default_languages.yml +1591 -0
  318. data/config/tr8n/site/features.yml +111 -0
  319. data/config/tr8n/site/shortcuts.yml +55 -0
  320. data/config/tr8n/site/sitemap.json +42 -0
  321. data/config/tr8n/tokens/data.yml +19 -0
  322. data/config/tr8n/tokens/decorations.yml +16 -0
  323. data/config/will_filter/config.yml +97 -0
  324. data/db/extras/20100511185330_create_test_users.rb +43 -0
  325. data/db/migrate/20090730070119_create_will_filter_tables.rb +19 -0
  326. data/db/migrate/20100405201417_create_tr8n_tables.rb +350 -0
  327. data/db/seeds.rb +7 -0
  328. data/doc/README_FOR_APP +2 -0
  329. data/doc/cheat sheet.docx +0 -0
  330. data/doc/cheat sheet.pdf +0 -0
  331. data/doc/classes.graffle +12555 -0
  332. data/doc/classes.pdf +0 -0
  333. data/doc/client sdk sequence.graffle +2768 -0
  334. data/doc/integration.doc +0 -0
  335. data/doc/integration.docx +0 -0
  336. data/doc/pixel client sdk.graffle +1454 -0
  337. data/lib/application_controller.rb +38 -0
  338. data/lib/application_helper.rb +336 -0
  339. data/lib/core_ext/array.rb +61 -0
  340. data/lib/core_ext/date.rb +76 -0
  341. data/lib/core_ext/fixnum.rb +35 -0
  342. data/lib/core_ext/hash.rb +60 -0
  343. data/lib/core_ext/string.rb +49 -0
  344. data/lib/core_ext/time.rb +83 -0
  345. data/lib/generators/tr8n/templates/create_tr8n_tables.rb +350 -0
  346. data/lib/generators/tr8n/tr8n_generator.rb +49 -0
  347. data/lib/tasks/.gitkeep +0 -0
  348. data/lib/tasks/tr8n_tasks.rake +99 -0
  349. data/lib/tr8n.rb +3 -0
  350. data/lib/tr8n/active_dumper.rb +49 -0
  351. data/lib/tr8n/cache.rb +57 -0
  352. data/lib/tr8n/common_methods.rb +61 -0
  353. data/lib/tr8n/config.rb +719 -0
  354. data/lib/tr8n/controller_methods.rb +112 -0
  355. data/lib/tr8n/dictionary.rb +53 -0
  356. data/lib/tr8n/engine.rb +29 -0
  357. data/lib/tr8n/exception.rb +26 -0
  358. data/lib/tr8n/extender.rb +34 -0
  359. data/lib/tr8n/helper_methods.rb +304 -0
  360. data/lib/tr8n/ip_address.rb +52 -0
  361. data/lib/tr8n/key_registration_exception.rb +26 -0
  362. data/lib/tr8n/keyboard_mapping.rb +174 -0
  363. data/lib/tr8n/logger.rb +60 -0
  364. data/lib/tr8n/site_map.rb +85 -0
  365. data/lib/tr8n/site_map_section.rb +108 -0
  366. data/lib/tr8n/token.rb +438 -0
  367. data/lib/tr8n/token_exception.rb +26 -0
  368. data/lib/tr8n/tokenized_label.rb +141 -0
  369. data/lib/tr8n/tokens/data_token.rb +52 -0
  370. data/lib/tr8n/tokens/decoration_token.rb +124 -0
  371. data/lib/tr8n/tokens/hidden_token.rb +87 -0
  372. data/lib/tr8n/tokens/method_token.rb +60 -0
  373. data/lib/tr8n/tokens/transform_token.rb +131 -0
  374. data/public/404.html +26 -0
  375. data/public/422.html +26 -0
  376. data/public/500.html +26 -0
  377. data/public/favicon.ico +0 -0
  378. data/public/robots.txt +5 -0
  379. data/public/tr8n/images/accept.png +0 -0
  380. data/public/tr8n/images/action_tab_bkgd.gif +0 -0
  381. data/public/tr8n/images/action_tab_white_bkgd.gif +0 -0
  382. data/public/tr8n/images/add.png +0 -0
  383. data/public/tr8n/images/arrow_down.gif +0 -0
  384. data/public/tr8n/images/arrow_down.png +0 -0
  385. data/public/tr8n/images/arrow_down_grey.png +0 -0
  386. data/public/tr8n/images/arrow_right.gif +0 -0
  387. data/public/tr8n/images/arrow_up.png +0 -0
  388. data/public/tr8n/images/arrow_up_grey.png +0 -0
  389. data/public/tr8n/images/bullet_go.png +0 -0
  390. data/public/tr8n/images/buttons.png +0 -0
  391. data/public/tr8n/images/cancel.png +0 -0
  392. data/public/tr8n/images/close.gif +0 -0
  393. data/public/tr8n/images/cross.png +0 -0
  394. data/public/tr8n/images/delete.png +0 -0
  395. data/public/tr8n/images/disk.png +0 -0
  396. data/public/tr8n/images/examples/context_rules_1.png +0 -0
  397. data/public/tr8n/images/examples/context_rules_2.png +0 -0
  398. data/public/tr8n/images/examples/date_rules_1.png +0 -0
  399. data/public/tr8n/images/examples/date_rules_2.png +0 -0
  400. data/public/tr8n/images/examples/date_rules_3.png +0 -0
  401. data/public/tr8n/images/examples/gender_rules_1.png +0 -0
  402. data/public/tr8n/images/examples/gender_rules_2.png +0 -0
  403. data/public/tr8n/images/examples/gender_rules_3.png +0 -0
  404. data/public/tr8n/images/examples/language_manager_1.png +0 -0
  405. data/public/tr8n/images/examples/list_rules_1.png +0 -0
  406. data/public/tr8n/images/examples/list_rules_2.png +0 -0
  407. data/public/tr8n/images/examples/list_rules_3.png +0 -0
  408. data/public/tr8n/images/examples/numeric_rules_1.png +0 -0
  409. data/public/tr8n/images/examples/numeric_rules_2.png +0 -0
  410. data/public/tr8n/images/examples/numeric_rules_3.png +0 -0
  411. data/public/tr8n/images/examples/numeric_rules_4.png +0 -0
  412. data/public/tr8n/images/exclamation.png +0 -0
  413. data/public/tr8n/images/eye.png +0 -0
  414. data/public/tr8n/images/eye_not.png +0 -0
  415. data/public/tr8n/images/facebook/connect_light_medium_long.gif +0 -0
  416. data/public/tr8n/images/field_sprite.gif +0 -0
  417. data/public/tr8n/images/find.png +0 -0
  418. data/public/tr8n/images/flags/.DS_Store +0 -0
  419. data/public/tr8n/images/flags/ab.png +0 -0
  420. data/public/tr8n/images/flags/ach.png +0 -0
  421. data/public/tr8n/images/flags/af.png +0 -0
  422. data/public/tr8n/images/flags/ak.png +0 -0
  423. data/public/tr8n/images/flags/am.png +0 -0
  424. data/public/tr8n/images/flags/an.png +0 -0
  425. data/public/tr8n/images/flags/ar-AE.png +0 -0
  426. data/public/tr8n/images/flags/ar-BH.png +0 -0
  427. data/public/tr8n/images/flags/ar-DZ.png +0 -0
  428. data/public/tr8n/images/flags/ar-EG.png +0 -0
  429. data/public/tr8n/images/flags/ar-IQ.png +0 -0
  430. data/public/tr8n/images/flags/ar-JO.png +0 -0
  431. data/public/tr8n/images/flags/ar-KW.png +0 -0
  432. data/public/tr8n/images/flags/ar-LB.png +0 -0
  433. data/public/tr8n/images/flags/ar-LY.png +0 -0
  434. data/public/tr8n/images/flags/ar-MA.png +0 -0
  435. data/public/tr8n/images/flags/ar-OM.png +0 -0
  436. data/public/tr8n/images/flags/ar-QA.png +0 -0
  437. data/public/tr8n/images/flags/ar-SA.png +0 -0
  438. data/public/tr8n/images/flags/ar-SY.png +0 -0
  439. data/public/tr8n/images/flags/ar-TN.png +0 -0
  440. data/public/tr8n/images/flags/ar-YE.png +0 -0
  441. data/public/tr8n/images/flags/ar.png +0 -0
  442. data/public/tr8n/images/flags/as.png +0 -0
  443. data/public/tr8n/images/flags/ast.png +0 -0
  444. data/public/tr8n/images/flags/ay.png +0 -0
  445. data/public/tr8n/images/flags/az.png +0 -0
  446. data/public/tr8n/images/flags/ba.png +0 -0
  447. data/public/tr8n/images/flags/be.png +0 -0
  448. data/public/tr8n/images/flags/bg.png +0 -0
  449. data/public/tr8n/images/flags/bh.png +0 -0
  450. data/public/tr8n/images/flags/bn.png +0 -0
  451. data/public/tr8n/images/flags/bo.png +0 -0
  452. data/public/tr8n/images/flags/br.png +0 -0
  453. data/public/tr8n/images/flags/bs.png +0 -0
  454. data/public/tr8n/images/flags/ca.png +0 -0
  455. data/public/tr8n/images/flags/cb.png +0 -0
  456. data/public/tr8n/images/flags/ce.png +0 -0
  457. data/public/tr8n/images/flags/ch.png +0 -0
  458. data/public/tr8n/images/flags/ck-US.png +0 -0
  459. data/public/tr8n/images/flags/co.png +0 -0
  460. data/public/tr8n/images/flags/cr.png +0 -0
  461. data/public/tr8n/images/flags/cs.png +0 -0
  462. data/public/tr8n/images/flags/cv.png +0 -0
  463. data/public/tr8n/images/flags/cy.png +0 -0
  464. data/public/tr8n/images/flags/da.png +0 -0
  465. data/public/tr8n/images/flags/de-AT.png +0 -0
  466. data/public/tr8n/images/flags/de-CH.png +0 -0
  467. data/public/tr8n/images/flags/de-DE.png +0 -0
  468. data/public/tr8n/images/flags/de-LI.png +0 -0
  469. data/public/tr8n/images/flags/de-LU.png +0 -0
  470. data/public/tr8n/images/flags/de.png +0 -0
  471. data/public/tr8n/images/flags/el.png +0 -0
  472. data/public/tr8n/images/flags/en-AU.png +0 -0
  473. data/public/tr8n/images/flags/en-BZ.png +0 -0
  474. data/public/tr8n/images/flags/en-CA.png +0 -0
  475. data/public/tr8n/images/flags/en-IE.png +0 -0
  476. data/public/tr8n/images/flags/en-JM.png +0 -0
  477. data/public/tr8n/images/flags/en-NZ.png +0 -0
  478. data/public/tr8n/images/flags/en-PH.png +0 -0
  479. data/public/tr8n/images/flags/en-PI.png +0 -0
  480. data/public/tr8n/images/flags/en-SC.png +0 -0
  481. data/public/tr8n/images/flags/en-UK.png +0 -0
  482. data/public/tr8n/images/flags/en-US.png +0 -0
  483. data/public/tr8n/images/flags/en-ZA.png +0 -0
  484. data/public/tr8n/images/flags/en-ZW.png +0 -0
  485. data/public/tr8n/images/flags/en.png +0 -0
  486. data/public/tr8n/images/flags/eo.png +0 -0
  487. data/public/tr8n/images/flags/es-AR.png +0 -0
  488. data/public/tr8n/images/flags/es-BO.png +0 -0
  489. data/public/tr8n/images/flags/es-CL.png +0 -0
  490. data/public/tr8n/images/flags/es-CO.png +0 -0
  491. data/public/tr8n/images/flags/es-CR.png +0 -0
  492. data/public/tr8n/images/flags/es-DO.png +0 -0
  493. data/public/tr8n/images/flags/es-EC.png +0 -0
  494. data/public/tr8n/images/flags/es-ES.png +0 -0
  495. data/public/tr8n/images/flags/es-GT.png +0 -0
  496. data/public/tr8n/images/flags/es-HN.png +0 -0
  497. data/public/tr8n/images/flags/es-MX.png +0 -0
  498. data/public/tr8n/images/flags/es-NI.png +0 -0
  499. data/public/tr8n/images/flags/es-PA.png +0 -0
  500. data/public/tr8n/images/flags/es-PE.png +0 -0
  501. data/public/tr8n/images/flags/es-PR.png +0 -0
  502. data/public/tr8n/images/flags/es-PY.png +0 -0
  503. data/public/tr8n/images/flags/es-SV.png +0 -0
  504. data/public/tr8n/images/flags/es-UY.png +0 -0
  505. data/public/tr8n/images/flags/es-VE.png +0 -0
  506. data/public/tr8n/images/flags/es.png +0 -0
  507. data/public/tr8n/images/flags/et.png +0 -0
  508. data/public/tr8n/images/flags/eu.png +0 -0
  509. data/public/tr8n/images/flags/fa-IR.png +0 -0
  510. data/public/tr8n/images/flags/fa.png +0 -0
  511. data/public/tr8n/images/flags/fb-LT.png +0 -0
  512. data/public/tr8n/images/flags/fi.png +0 -0
  513. data/public/tr8n/images/flags/fj.png +0 -0
  514. data/public/tr8n/images/flags/fo.png +0 -0
  515. data/public/tr8n/images/flags/fr-BE.png +0 -0
  516. data/public/tr8n/images/flags/fr-CA.png +0 -0
  517. data/public/tr8n/images/flags/fr-CH.png +0 -0
  518. data/public/tr8n/images/flags/fr-FR.png +0 -0
  519. data/public/tr8n/images/flags/fr-LU.png +0 -0
  520. data/public/tr8n/images/flags/fr-MC.png +0 -0
  521. data/public/tr8n/images/flags/fr.png +0 -0
  522. data/public/tr8n/images/flags/fur.png +0 -0
  523. data/public/tr8n/images/flags/fy.png +0 -0
  524. data/public/tr8n/images/flags/ga.png +0 -0
  525. data/public/tr8n/images/flags/gd.png +0 -0
  526. data/public/tr8n/images/flags/gl.png +0 -0
  527. data/public/tr8n/images/flags/gn.png +0 -0
  528. data/public/tr8n/images/flags/gu.png +0 -0
  529. data/public/tr8n/images/flags/gv.png +0 -0
  530. data/public/tr8n/images/flags/ha.png +0 -0
  531. data/public/tr8n/images/flags/haw.png +0 -0
  532. data/public/tr8n/images/flags/he.png +0 -0
  533. data/public/tr8n/images/flags/hi.png +0 -0
  534. data/public/tr8n/images/flags/hr.png +0 -0
  535. data/public/tr8n/images/flags/hsb.png +0 -0
  536. data/public/tr8n/images/flags/ht.png +0 -0
  537. data/public/tr8n/images/flags/hu.png +0 -0
  538. data/public/tr8n/images/flags/hy.png +0 -0
  539. data/public/tr8n/images/flags/ia.png +0 -0
  540. data/public/tr8n/images/flags/id.png +0 -0
  541. data/public/tr8n/images/flags/ie.png +0 -0
  542. data/public/tr8n/images/flags/ig.png +0 -0
  543. data/public/tr8n/images/flags/is.png +0 -0
  544. data/public/tr8n/images/flags/it-CH.png +0 -0
  545. data/public/tr8n/images/flags/it.png +0 -0
  546. data/public/tr8n/images/flags/iu.png +0 -0
  547. data/public/tr8n/images/flags/ja.png +0 -0
  548. data/public/tr8n/images/flags/jw.png +0 -0
  549. data/public/tr8n/images/flags/ka.png +0 -0
  550. data/public/tr8n/images/flags/kk.png +0 -0
  551. data/public/tr8n/images/flags/kl.png +0 -0
  552. data/public/tr8n/images/flags/km.png +0 -0
  553. data/public/tr8n/images/flags/kn.png +0 -0
  554. data/public/tr8n/images/flags/ko-KP.png +0 -0
  555. data/public/tr8n/images/flags/ko-KR.png +0 -0
  556. data/public/tr8n/images/flags/ko.png +0 -0
  557. data/public/tr8n/images/flags/kok.png +0 -0
  558. data/public/tr8n/images/flags/ks.png +0 -0
  559. data/public/tr8n/images/flags/ku.png +0 -0
  560. data/public/tr8n/images/flags/ky.png +0 -0
  561. data/public/tr8n/images/flags/la.png +0 -0
  562. data/public/tr8n/images/flags/lb.png +0 -0
  563. data/public/tr8n/images/flags/lg.png +0 -0
  564. data/public/tr8n/images/flags/li-NL.png +0 -0
  565. data/public/tr8n/images/flags/ln.png +0 -0
  566. data/public/tr8n/images/flags/lo.png +0 -0
  567. data/public/tr8n/images/flags/lt.png +0 -0
  568. data/public/tr8n/images/flags/lv.png +0 -0
  569. data/public/tr8n/images/flags/md.png +0 -0
  570. data/public/tr8n/images/flags/mfe.png +0 -0
  571. data/public/tr8n/images/flags/mg.png +0 -0
  572. data/public/tr8n/images/flags/mh.png +0 -0
  573. data/public/tr8n/images/flags/mi.png +0 -0
  574. data/public/tr8n/images/flags/mk.png +0 -0
  575. data/public/tr8n/images/flags/ml.png +0 -0
  576. data/public/tr8n/images/flags/mn.png +0 -0
  577. data/public/tr8n/images/flags/mo.png +0 -0
  578. data/public/tr8n/images/flags/mr.png +0 -0
  579. data/public/tr8n/images/flags/ms.png +0 -0
  580. data/public/tr8n/images/flags/mt.png +0 -0
  581. data/public/tr8n/images/flags/my.png +0 -0
  582. data/public/tr8n/images/flags/na.png +0 -0
  583. data/public/tr8n/images/flags/nb.png +0 -0
  584. data/public/tr8n/images/flags/nd.png +0 -0
  585. data/public/tr8n/images/flags/ne.png +0 -0
  586. data/public/tr8n/images/flags/ng.png +0 -0
  587. data/public/tr8n/images/flags/nl-NE.png +0 -0
  588. data/public/tr8n/images/flags/nl.png +0 -0
  589. data/public/tr8n/images/flags/nn.png +0 -0
  590. data/public/tr8n/images/flags/no.png +0 -0
  591. data/public/tr8n/images/flags/nr.png +0 -0
  592. data/public/tr8n/images/flags/nso.png +0 -0
  593. data/public/tr8n/images/flags/nv.png +0 -0
  594. data/public/tr8n/images/flags/ny.png +0 -0
  595. data/public/tr8n/images/flags/nyn.png +0 -0
  596. data/public/tr8n/images/flags/oc.png +0 -0
  597. data/public/tr8n/images/flags/om.png +0 -0
  598. data/public/tr8n/images/flags/or.png +0 -0
  599. data/public/tr8n/images/flags/pa-IN.png +0 -0
  600. data/public/tr8n/images/flags/pa-PK.png +0 -0
  601. data/public/tr8n/images/flags/pa.png +0 -0
  602. data/public/tr8n/images/flags/pf.png +0 -0
  603. data/public/tr8n/images/flags/pl.png +0 -0
  604. data/public/tr8n/images/flags/pp.png +0 -0
  605. data/public/tr8n/images/flags/ps.png +0 -0
  606. data/public/tr8n/images/flags/pt-BZ.png +0 -0
  607. data/public/tr8n/images/flags/pt.png +0 -0
  608. data/public/tr8n/images/flags/qu-PE.png +0 -0
  609. data/public/tr8n/images/flags/qu.png +0 -0
  610. data/public/tr8n/images/flags/rj.png +0 -0
  611. data/public/tr8n/images/flags/rm.png +0 -0
  612. data/public/tr8n/images/flags/rn.png +0 -0
  613. data/public/tr8n/images/flags/ro-MD.png +0 -0
  614. data/public/tr8n/images/flags/ro-RO.png +0 -0
  615. data/public/tr8n/images/flags/ro.png +0 -0
  616. data/public/tr8n/images/flags/ru.png +0 -0
  617. data/public/tr8n/images/flags/rw.png +0 -0
  618. data/public/tr8n/images/flags/sa.png +0 -0
  619. data/public/tr8n/images/flags/sc.png +0 -0
  620. data/public/tr8n/images/flags/sd.png +0 -0
  621. data/public/tr8n/images/flags/se-NO.png +0 -0
  622. data/public/tr8n/images/flags/sg.png +0 -0
  623. data/public/tr8n/images/flags/sh.png +0 -0
  624. data/public/tr8n/images/flags/si.png +0 -0
  625. data/public/tr8n/images/flags/sk.png +0 -0
  626. data/public/tr8n/images/flags/sl.png +0 -0
  627. data/public/tr8n/images/flags/sm.png +0 -0
  628. data/public/tr8n/images/flags/sn.png +0 -0
  629. data/public/tr8n/images/flags/so.png +0 -0
  630. data/public/tr8n/images/flags/sq.png +0 -0
  631. data/public/tr8n/images/flags/sr-me.png +0 -0
  632. data/public/tr8n/images/flags/sr.png +0 -0
  633. data/public/tr8n/images/flags/ss.png +0 -0
  634. data/public/tr8n/images/flags/st.png +0 -0
  635. data/public/tr8n/images/flags/su.png +0 -0
  636. data/public/tr8n/images/flags/sv-FI.png +0 -0
  637. data/public/tr8n/images/flags/sv-SE.png +0 -0
  638. data/public/tr8n/images/flags/sv.png +0 -0
  639. data/public/tr8n/images/flags/sw.png +0 -0
  640. data/public/tr8n/images/flags/ta.png +0 -0
  641. data/public/tr8n/images/flags/te.png +0 -0
  642. data/public/tr8n/images/flags/tg.png +0 -0
  643. data/public/tr8n/images/flags/th.png +0 -0
  644. data/public/tr8n/images/flags/ti.png +0 -0
  645. data/public/tr8n/images/flags/tig.png +0 -0
  646. data/public/tr8n/images/flags/tk.png +0 -0
  647. data/public/tr8n/images/flags/tl.png +0 -0
  648. data/public/tr8n/images/flags/tlh.png +0 -0
  649. data/public/tr8n/images/flags/tn.png +0 -0
  650. data/public/tr8n/images/flags/to.png +0 -0
  651. data/public/tr8n/images/flags/tr.png +0 -0
  652. data/public/tr8n/images/flags/ts.png +0 -0
  653. data/public/tr8n/images/flags/tt.png +0 -0
  654. data/public/tr8n/images/flags/tw.png +0 -0
  655. data/public/tr8n/images/flags/ug.png +0 -0
  656. data/public/tr8n/images/flags/uk.png +0 -0
  657. data/public/tr8n/images/flags/ur.png +0 -0
  658. data/public/tr8n/images/flags/uz.png +0 -0
  659. data/public/tr8n/images/flags/ve.png +0 -0
  660. data/public/tr8n/images/flags/vi.png +0 -0
  661. data/public/tr8n/images/flags/vo.png +0 -0
  662. data/public/tr8n/images/flags/wa.png +0 -0
  663. data/public/tr8n/images/flags/wo.png +0 -0
  664. data/public/tr8n/images/flags/xh.png +0 -0
  665. data/public/tr8n/images/flags/yi.png +0 -0
  666. data/public/tr8n/images/flags/yo.png +0 -0
  667. data/public/tr8n/images/flags/zh-CN.png +0 -0
  668. data/public/tr8n/images/flags/zh-HK.png +0 -0
  669. data/public/tr8n/images/flags/zh-SG.png +0 -0
  670. data/public/tr8n/images/flags/zh-TW.png +0 -0
  671. data/public/tr8n/images/flags/zh.png +0 -0
  672. data/public/tr8n/images/flags/zu.png +0 -0
  673. data/public/tr8n/images/globe.gif +0 -0
  674. data/public/tr8n/images/help.png +0 -0
  675. data/public/tr8n/images/help/color_coding.png +0 -0
  676. data/public/tr8n/images/help/language_selector.png +0 -0
  677. data/public/tr8n/images/help/language_selector_default.png +0 -0
  678. data/public/tr8n/images/help/languages_disabled.png +0 -0
  679. data/public/tr8n/images/help/translator.png +0 -0
  680. data/public/tr8n/images/help2.png +0 -0
  681. data/public/tr8n/images/information.png +0 -0
  682. data/public/tr8n/images/keyboard.png +0 -0
  683. data/public/tr8n/images/language_selector_arrow.gif +0 -0
  684. data/public/tr8n/images/left_quote.png +0 -0
  685. data/public/tr8n/images/lightning.png +0 -0
  686. data/public/tr8n/images/loading.gif +0 -0
  687. data/public/tr8n/images/loading2.gif +0 -0
  688. data/public/tr8n/images/loading3.gif +0 -0
  689. data/public/tr8n/images/loading_large.gif +0 -0
  690. data/public/tr8n/images/lock.png +0 -0
  691. data/public/tr8n/images/lock_add.png +0 -0
  692. data/public/tr8n/images/lock_delete.png +0 -0
  693. data/public/tr8n/images/lock_open.png +0 -0
  694. data/public/tr8n/images/medals/bronze.png +0 -0
  695. data/public/tr8n/images/medals/gold.png +0 -0
  696. data/public/tr8n/images/medals/runner.png +0 -0
  697. data/public/tr8n/images/medals/silver.png +0 -0
  698. data/public/tr8n/images/pencil.png +0 -0
  699. data/public/tr8n/images/photo_silhouette.gif +0 -0
  700. data/public/tr8n/images/plus.png +0 -0
  701. data/public/tr8n/images/random.png +0 -0
  702. data/public/tr8n/images/random2.png +0 -0
  703. data/public/tr8n/images/rating_star0.png +0 -0
  704. data/public/tr8n/images/rating_star05.png +0 -0
  705. data/public/tr8n/images/rating_star1.png +0 -0
  706. data/public/tr8n/images/rating_stars.gif +0 -0
  707. data/public/tr8n/images/rating_stars.psd +0 -0
  708. data/public/tr8n/images/reply.png +0 -0
  709. data/public/tr8n/images/right_quote.png +0 -0
  710. data/public/tr8n/images/rotating_world.gif +0 -0
  711. data/public/tr8n/images/script.png +0 -0
  712. data/public/tr8n/images/script_edit.png +0 -0
  713. data/public/tr8n/images/script_gear.png +0 -0
  714. data/public/tr8n/images/site_sprite.gif +0 -0
  715. data/public/tr8n/images/spinner.gif +0 -0
  716. data/public/tr8n/images/star.png +0 -0
  717. data/public/tr8n/images/table_edit.png +0 -0
  718. data/public/tr8n/images/table_gear.png +0 -0
  719. data/public/tr8n/images/table_multiple.png +0 -0
  720. data/public/tr8n/images/thumb_down.png +0 -0
  721. data/public/tr8n/images/thumb_up.png +0 -0
  722. data/public/tr8n/images/toolbar_bg.gif +0 -0
  723. data/public/tr8n/images/top_left_stem.png +0 -0
  724. data/public/tr8n/images/top_right_stem.png +0 -0
  725. data/public/tr8n/images/tr8n_loading.gif +0 -0
  726. data/public/tr8n/images/tr8n_logo.jpg +0 -0
  727. data/public/tr8n/images/tr8n_logo.png +0 -0
  728. data/public/tr8n/images/tr8n_logo2.gif +0 -0
  729. data/public/tr8n/images/tr8n_logo2.png +0 -0
  730. data/public/tr8n/images/tr8n_logo_wiki.png +0 -0
  731. data/public/tr8n/images/tr8n_logo_wiki2.png +0 -0
  732. data/public/tr8n/images/translate_icn.gif +0 -0
  733. data/public/tr8n/images/wizard.png +0 -0
  734. data/public/tr8n/javascripts/jsDraw2D.js +24 -0
  735. data/public/tr8n/javascripts/keyboard_1_36.js +1214 -0
  736. data/public/tr8n/javascripts/keyboard_1_44.js +1735 -0
  737. data/public/tr8n/javascripts/shortcut.js +223 -0
  738. data/public/tr8n/javascripts/tr8n.js +904 -0
  739. data/public/tr8n/javascripts/tr8n_client_sdk.js +1182 -0
  740. data/public/tr8n/javascripts/tr8n_prototype_effects.js +65 -0
  741. data/public/tr8n/stylesheets/components.css +208 -0
  742. data/public/tr8n/stylesheets/keyboard_1_36.css +185 -0
  743. data/public/tr8n/stylesheets/keyboard_1_44.css +268 -0
  744. data/public/tr8n/stylesheets/layout.css +119 -0
  745. data/public/tr8n/stylesheets/tr8n.css +201 -0
  746. data/rails/init.rb +53 -0
  747. data/script/rails +6 -0
  748. data/test/performance/browsing_test.rb +9 -0
  749. data/test/test_helper.rb +13 -0
  750. data/tr8n.gemspec +40 -0
  751. metadata +865 -0
@@ -0,0 +1,49 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::TranslatorLogFilter < Tr8n::BaseFilter
25
+
26
+ def inner_joins
27
+ [["Tr8n::Translator", :translator_id]]
28
+ end
29
+
30
+ def definition
31
+ defs = super
32
+ defs[:action][:is] = :list
33
+ defs[:action][:is_not] = :list
34
+ defs
35
+ end
36
+
37
+ def value_options_for(criteria_key)
38
+ if criteria_key == :action
39
+ return Tr8n::TranslatorLog::ACTIONS
40
+ end
41
+
42
+ return []
43
+ end
44
+
45
+ def default_filter_if_empty
46
+ "created_today"
47
+ end
48
+
49
+ end
@@ -0,0 +1,83 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::TranslatorMetric < ActiveRecord::Base
25
+ set_table_name :tr8n_translator_metrics
26
+
27
+ belongs_to :translator, :class_name => "Tr8n::Translator"
28
+ belongs_to :language, :class_name => "Tr8n::Language"
29
+
30
+ def self.find_or_create(translator, language)
31
+ if language
32
+ tm = find(:first, :conditions => ["translator_id = ? and language_id = ?", translator.id, language.id])
33
+ else
34
+ tm = find(:first, :conditions => ["translator_id = ? and language_id is null", translator.id])
35
+ end
36
+
37
+ return tm if tm
38
+ create(:translator => translator, :language => language, :total_translations => 0, :total_votes => 0, :positive_votes => 0, :negative_votes => 0)
39
+ end
40
+
41
+ # updated when an action is done by the translator
42
+ def update_metrics!
43
+ if language
44
+ self.total_translations = Tr8n::Translation.count(:conditions=>["translator_id = ? and language_id = ?", translator.id, language.id])
45
+ self.total_votes = Tr8n::TranslationVote.count(:conditions=>["tr8n_translation_votes.translator_id = ? and tr8n_translations.language_id = ?", translator.id, language.id],
46
+ :joins => "INNER JOIN tr8n_translations ON tr8n_translations.id = tr8n_translation_votes.translation_id")
47
+ self.positive_votes = Tr8n::TranslationVote.count(:conditions=>["tr8n_translation_votes.translator_id = ? and tr8n_translation_votes.vote > 0 and tr8n_translations.language_id = ?", translator.id, language.id],
48
+ :joins => "INNER JOIN tr8n_translations ON tr8n_translations.id = tr8n_translation_votes.translation_id")
49
+ self.negative_votes = self.total_votes - self.positive_votes
50
+ else
51
+ self.total_translations = Tr8n::Translation.count(:conditions=>["translator_id = ?", translator.id])
52
+ self.total_votes = Tr8n::TranslationVote.count(:conditions=>["translator_id = ?", translator.id])
53
+ self.positive_votes = Tr8n::TranslationVote.count(:conditions=>["translator_id = ? and vote > 0", translator.id])
54
+ self.negative_votes = self.total_votes - self.positive_votes
55
+ end
56
+
57
+ save
58
+ end
59
+
60
+ # updated when an action is done to the translator's translations
61
+ def update_rank!
62
+ if language
63
+ self.accepted_translations = Tr8n::Translation.count(:conditions => ["translator_id = ? and language_id = ? and rank >= ?", translator.id, language.id, Tr8n::Config.translation_threshold])
64
+ self.rejected_translations = Tr8n::Translation.count(:conditions => ["translator_id = ? and language_id = ? and rank < ?", translator.id, language.id, 0])
65
+ else
66
+ self.accepted_translations = Tr8n::Translation.count(:conditions => ["translator_id = ? and rank >= ?", translator.id, Tr8n::Config.translation_threshold])
67
+ self.rejected_translations = Tr8n::Translation.count(:conditions => ["translator_id = ? and rank < ?", translator.id, 0])
68
+ end
69
+
70
+ save
71
+ end
72
+
73
+ def rank
74
+ return 0 unless total_translations and accepted_translations
75
+
76
+ total_translations == 0 ? 0 : (accepted_translations * 100.0/total_translations)
77
+ end
78
+
79
+ def pending_vote_translations
80
+ return total_translations unless accepted_translations and rejected_translations
81
+ total_translations - accepted_translations - rejected_translations
82
+ end
83
+ end
@@ -0,0 +1,38 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::TranslatorMetricFilter < Tr8n::BaseFilter
25
+
26
+ def inner_joins
27
+ [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
28
+ end
29
+
30
+ def default_order
31
+ 'updated_at'
32
+ end
33
+
34
+ def default_filter_if_empty
35
+ "updated_today"
36
+ end
37
+
38
+ end
@@ -0,0 +1,82 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::TranslatorReport < ActiveRecord::Base
25
+ set_table_name :tr8n_translator_reports
26
+
27
+ belongs_to :translator, :class_name => "Tr8n::Translator"
28
+ belongs_to :object, :polymorphic => true
29
+
30
+ def self.find_or_create(translator, object)
31
+ report_for(translator, object) || create(:translator => translator, :object => object)
32
+ end
33
+
34
+ def self.report_for(translator, object)
35
+ find(:first, :conditions => ["translator_id = ? and object_type = ? and object_id = ?", translator.id, object.class.name, object.id])
36
+ end
37
+
38
+ def self.title_for(object)
39
+ object.class.name.underscore.split('_').collect{|item| item.capitalize}.join(' ')
40
+ end
41
+
42
+ def self.default_reasons_for(object)
43
+ if object.is_a?(Tr8n::TranslationKey)
44
+ return ['Bad Grammar', 'Bad Tokens', 'Premature Lock', 'Other:']
45
+ end
46
+
47
+ if object.is_a?(Tr8n::Translation)
48
+ return ['Inappropriate Language', 'Bad Tokens', 'Spam', 'Vandalism', 'Other:']
49
+ end
50
+
51
+ if object.is_a?(Tr8n::Translator)
52
+ return ['Spammer', 'Vandalist', 'Bully', 'Other:']
53
+ end
54
+
55
+ if object.is_a?(Tr8n::LanguageForumMessage)
56
+ return ['Inappropriate Language', 'Bad Tokens', 'Spam', 'Vandalism', 'Other:']
57
+ end
58
+
59
+ if object.is_a?(Tr8n::LanguageForumTopic)
60
+ return ['Inappropriate Language', 'Bad Tokens', 'Spam', 'Vandalism', 'Other:']
61
+ end
62
+
63
+ if object.is_a?(Tr8n::TranslationKeyComment)
64
+ return ['Inappropriate Language', 'Spam', 'Vandalism', 'Other:']
65
+ end
66
+
67
+ ['Inappropriate Language']
68
+ end
69
+
70
+ def self.submit(translator, object, reason, comment)
71
+ report = find_or_create(translator, object)
72
+ report.update_attributes(:reason => reason, :comment => comment)
73
+
74
+ if object.is_a?(Tr8n::Translation)
75
+ object.vote!(translator, -100)
76
+ submit(translator, object.translator, "bad translation #{object.id}", comment)
77
+ elsif object.is_a?(Tr8n::LanguageForumMessage)
78
+ submit(translator, object.translator, "bad message #{object.id}", comment)
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,30 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::TranslatorReportFilter < Tr8n::BaseFilter
25
+
26
+ def inner_joins
27
+ [["Tr8n::Translator", :translator_id]]
28
+ end
29
+
30
+ end
@@ -0,0 +1,117 @@
1
+ #--
2
+ # Copyright (c) 2010-2011 Michael Berkovich
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
+
24
+ class Tr8n::ValueRule < Tr8n::LanguageRule
25
+
26
+ def self.description
27
+ "token object may have a value, which"
28
+ end
29
+
30
+ def self.dependency
31
+ "value"
32
+ end
33
+
34
+ def self.dependant?(token)
35
+ token.name != Tr8n::Config.rules_engine[:viewing_user_token]
36
+ end
37
+
38
+ def self.suffixes
39
+ Tr8n::Config.rules_engine[:value_rule][:token_suffixes]
40
+ end
41
+
42
+ def self.default_rules_for(language = Tr8n::Config.current_language)
43
+ Tr8n::Config.default_value_rules(language.locale)
44
+ end
45
+
46
+ def self.operator_options
47
+ [["starts with", "starts_with"], ["does not start with", "does_not_start_with"],
48
+ ["ends in", "ends_in"], ["does not end in", "does_not_end_in"],
49
+ ["is", "is"], ["is not", "is_not"]]
50
+ end
51
+
52
+ def self.transformable?
53
+ false
54
+ end
55
+
56
+ def self.token_value(token)
57
+ return nil unless token and token.respond_to?(Tr8n::Config.rules_engine[:value_rule][:object_method])
58
+ token.send(Tr8n::Config.rules_engine[:value_rule][:object_method])
59
+ end
60
+
61
+ def evaluate(token)
62
+ token_value = self.class.token_value(token)
63
+ return false unless token_value
64
+
65
+ token_value = token_value.gsub(/<\/?[^>]*>/, "")
66
+ values = Tr8n::LanguageRule.sanitize_values(definition["value"])
67
+
68
+ case definition["operator"]
69
+ when "starts_with"
70
+ values.each do |value|
71
+ return true if token_value.to_s =~ /^#{value.to_s}/
72
+ end
73
+ return false
74
+ when "does_not_start_with"
75
+ values.each do |value|
76
+ return false if token_value.to_s =~ /^#{value.to_s}/
77
+ end
78
+ return true
79
+ when "ends_in"
80
+ values.each do |value|
81
+ return true if token_value.to_s =~ /#{value.to_s}$/
82
+ end
83
+ return false
84
+ when "does_not_end_in"
85
+ values.each do |value|
86
+ return false if token_value.to_s =~ /#{value.to_s}$/
87
+ end
88
+ return true
89
+ when "is"
90
+ return values.include?(token_value)
91
+ when "is_not"
92
+ return !values.include?(token_value)
93
+ end
94
+
95
+ false
96
+ end
97
+
98
+ def to_hash
99
+ {:type => self.class.dependency, :operator => definition[:operator], :value => definition[:value]}
100
+ end
101
+
102
+ # used to describe a context of a given translation
103
+ def description
104
+ desc = ""
105
+ case definition["operator"]
106
+ when "starts_with" then desc << " starts with"
107
+ when "does_not_start_with" then desc << " does not start with"
108
+ when "ends_in" then desc << " ends in"
109
+ when "does_not_end_in" then desc << " does not end in"
110
+ when "is" then desc << " is"
111
+ when "is_not" then desc << " is not"
112
+ end
113
+ desc << " <strong>'" << Tr8n::LanguageRule.humanize_values(definition["value"]) << "'</strong>"
114
+ desc.html_safe
115
+ end
116
+
117
+ end
@@ -0,0 +1,15 @@
1
+ <div class="page_ft module quiet">
2
+ <ul class="flt_r right_horiz_list">
3
+ <li><%=link_to(tr("Home"), "/tr8n/home", :class => "quiet")%></li>
4
+ <li><%=link_to(tr("Languages"), "/tr8n/language/table", :class => "quiet")%></li>
5
+ <li><%=link_to(tr("Translator Tools"), "/tr8n/dashboard", :class => "quiet")%></li>
6
+ <li><%=link_to(tr("Administration Tools"), "/tr8n/admin/language", :class => "quiet")%></li>
7
+ <li><%=link_to(tr("Credits"), "/tr8n/home/credits", :class => "quiet")%></li>
8
+ <li><%=link_to(tr("License"), "/tr8n/home/license", :class => "quiet")%></li>
9
+ </ul>
10
+ &copy; Copyright 2010 - 2011 Michael Berkovich
11
+ </div>
12
+
13
+ <div style="padding:15px;">
14
+ <%= tr8n_language_strip_tag %>
15
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="page_head">
2
+ <div class="page_fixed">
3
+ <div class="mrgn_h">
4
+ <%= tr8n_translator_login_tag(:class => "flt_r horiz_list top_nav") %>
5
+ <h1 class="logo"><%=link_to(tr("Tr8n Translation Engine", "Application title"), {:controller => "/tr8n/home"}, :style=>"text-decorations:none;")%></h1>
6
+ </div>
7
+ </div>
8
+ </div>
9
+
10
+ <div class="page_fixed">
11
+ <%= tr8n_flashes_tag %>
12
+ </div>
@@ -0,0 +1,5 @@
1
+ <title><%=trl("Tr8n Engine Plugin", "Application title")%></title>
2
+ <%= stylesheet_link_tag("/tr8n/stylesheets/layout.css") %>
3
+ <%= stylesheet_link_tag("/tr8n/stylesheets/components.css") %>
4
+
5
+ <%= tr8n_scripts_tag %>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+ <head>
4
+ <%=render :partial => "/layouts/html_head" %>
5
+ </head>
6
+ <body>
7
+ <div class="document">
8
+ <%=render :partial => "/layouts/header" %>
9
+ <div class="page_fixed">
10
+ <div class="page_body">
11
+ <div class="content_module">
12
+ <div class="content_inner">
13
+ <%= yield %>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <%=render :partial =>"/layouts/footer" %>
18
+ </div>
19
+ </div>
20
+ </body>
21
+ </html>