tr8n 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,324 @@
1
+ <%= tr8n_with_options_tag(:default_locale => 'en-US', :admin => true) do %>
2
+
3
+ <style>
4
+ h2 {
5
+ font-weight: bold;
6
+ }
7
+ h3 {
8
+ padding-top: 10px;
9
+ }
10
+ .snippet {
11
+ border: 1px solid #ccc;
12
+ margin-top:10px;
13
+ margin-bottom:10px;
14
+ padding:10px;
15
+ background-color: #f8f8ff;
16
+ }
17
+ .snippet2 {
18
+ border: 1px solid #ccc;
19
+ margin-top:10px;
20
+ margin-bottom:10px;
21
+ padding:10px;
22
+ background-color: #fff8f8;
23
+ }
24
+ .try_it {
25
+ font-style:italic;
26
+ }
27
+ .toc {
28
+ margin-left:20px;
29
+ margin-bottom:20px;
30
+ list-style-type:upper-roman;
31
+ }
32
+ .toc li div {
33
+ border-bottom:1px dotted #ccc;
34
+ font-size:16px;
35
+ }
36
+ .toc1 {
37
+ margin-left:20px;
38
+ list-style-type:lower-roman;
39
+ }
40
+ </style>
41
+ <div style="text-align:center; margin:15px;">
42
+ <%=image_tag("/tr8n/images/tr8n_logo.png", :style => "height:120px;")%>
43
+ </div>
44
+
45
+ <h2 class="underscore content_hd">
46
+ <%=tr("Tr8n Label Internationalization")%>
47
+ </h2>
48
+
49
+ <div class="content_bd">
50
+ <h2><%=tr("Table of Content") %></h2>
51
+ <p>
52
+ <ul class='toc'>
53
+ <li><div><a href="#methods_introduction"><%=tr("Introduction") %></a></li>
54
+ <li><div><a href="#token_defintion"><%=tr("Definition of Tr8n Tokens") %></a></li>
55
+ <li><div><a href="#data_tokens"><%=tr("Data Tokens") %></a></li>
56
+ <li><div><a href="#method_tokens"><%=tr("Method Tokens") %></a></li>
57
+ <li><div><a href="#hidden_tokens"><%=tr("Hidden Tokens") %></a></li>
58
+ <li><div><a href="#transform_tokens"><%=tr("Transform Tokens") %></a></li>
59
+ <li><div><a href="#decoration_tokens"><%=tr("Decoration Tokens") %></a></li>
60
+ <li><div><a href="#next"><%=tr("What's next?") %></a></div></li>
61
+ </ul>
62
+ </p>
63
+
64
+ <a name="methods_introduction">&nbsp;</a>
65
+ <h3>Introduction</h3>
66
+
67
+ <p>
68
+ The function for internationalizing labels has the following signature:
69
+
70
+ <div class="snippet">
71
+ &lt;%= tr(LABEL, DESCRIPTION = "", TOKENS = {}, OPTIONS = {}) %&gt;<br><br>
72
+ * LABEL is a required string<br>
73
+ * DESCRIPTION is an optional, but highly recommended string<br>
74
+ * TOKENS is an optional hash of token values - it is required if tokens are used in the label<br>
75
+ * OPTIONS is an optional hash of options<br>
76
+ </div>
77
+ </p>
78
+
79
+ <p>
80
+ The following is the first simplest example of an internationalized phrase:
81
+
82
+ <div class="snippet">
83
+ &lt;%= tr("Hello World") %&gt;
84
+ </div>
85
+
86
+ or alternatively:
87
+
88
+ <div class="snippet">
89
+ &lt;%= "Hello World".translate %&gt;
90
+ </div>
91
+ </p>
92
+
93
+ <p class="try_it">Try it yourself:</p>
94
+ <div class="snippet2">
95
+ <%= tr("Hello World") %>
96
+ </div>
97
+
98
+ <p>As you might have noticed, the DESCRIPTION is not mandatory, but it should be used in cases when the label alone is not sufficient enough to determine the meaning of the sentence being translated. For example, when the translators use the bulk translation mode and look at the list of strings, they won’t be able to tell what the "Invite" by itself means. In that case DESCRIPTION will be very helpful.
99
+ </p>
100
+
101
+ <p>Tr8n translation engine uses label and description to create a unique key for each phrase. So the description serves two purposes: it creates a unique key for each label and it also gives a hint to the translators for the context in which the label is used. For example, the following two phrases will be registered as two independent entries in a database even though the have the same label, but a different description. The user will have to translate each one of them separately as they will have different translated labels in other languages.
102
+ </p>
103
+
104
+ <div class="snippet">
105
+ &lt;%= tr("Invite", "Link to invite your friends to join the site") %&gt;<br>
106
+ &lt;%= tr("Invite", "An invitation you recieved from your friend") %&gt;
107
+ </div>
108
+
109
+ <p>It is important to provide the best possible description for each phrase from the start. Keep in mind that changing a description in the future, after it has already been translated, will register a new phrase in the database and invalidate all of its translations. On the other hand, labels that are complete sentences may not need a description as they are fully self-contained.
110
+ </p>
111
+
112
+ <p class="try_it">Try it yourself:</p>
113
+ <div class="snippet2">
114
+ <%= tr("Invite", "Link to invite your friends to join the site") %><br>
115
+ <%= tr("Invite", "An invitation you recieved from your friend") %>
116
+ </div>
117
+
118
+ <p>There are a number of other flavors of the "tr" function like trl, trfe, trfn that set default options for various reasons. You can read more about them in the Tr8n Integration Guide.
119
+ </p>
120
+
121
+ <p>The following is a short summary of the tr8n’s internationalization notations.</p>
122
+
123
+ <a name="token_defintion">&nbsp;</a>
124
+ <h3>Definition of Tr8n Tokens</h3>
125
+
126
+ <p>It would have been boring if all of the labels in a site were just simple sentences without any dynamic data or decorations. Tr8n tokens are there to support the dynamic information in a label.
127
+ </p>
128
+
129
+ <p>Currently there are two major types of tokens defined in the extensible Tr8n syntax: data tokens and decoration tokens. Data tokens are defined as any strings surrounded by curly brackets inside of a label. So anything of this form {TOKEN_NAME} is considered a data token.
130
+ </p>
131
+
132
+ <p>Decoration tokens are defined as any string surrounded by squared brackets inside of a label. So anything of this form &#91;TOKEN_NAME: decorated value&#92; is considered a decoration token.
133
+ </p>
134
+
135
+ <p>There are a number of different flavors of data tokens. Below are some of the flavors with some examples.
136
+ </p>
137
+
138
+ <a name="data_tokens">&nbsp;</a>
139
+ <h3>Data Tokens</h3>
140
+
141
+ <p>There is a number of ways to substitute a data token with a value. Below are some of the main examples.
142
+ </p>
143
+
144
+ <strong>Simple string substitution:</strong>
145
+
146
+ <div class="snippet">
147
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => current_user) %&gt;
148
+ </div>
149
+
150
+ <p>The to_s function will be applied on the value of the current_user variable and substituted into the {user} token.
151
+ </p>
152
+
153
+ <strong>Value substitution:</strong>
154
+
155
+ <div class="snippet">
156
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => [current_user, display_user(current_user)]) %&gt;
157
+ </div>
158
+
159
+ <p>Notice one important thing that current_user is passed as a first element in the array. This is done for gender rules evaluation - i will describe this in the later sections. The second value is the actual value we want to subsitute into the {user} token.
160
+ </p>
161
+
162
+ <strong>Value substitution using symbol method call:</strong>
163
+ <div class="snippet">
164
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => [current_user, :first_name]) %&gt;
165
+ </div>
166
+
167
+ <p>As in the previous example, first object for rules engine, second is a symbol that represents a method that will be called on the object and the result will be placed into the {user} token.
168
+ </p>
169
+
170
+ <strong>Value substitution using symbol method call with parameters:</strong>
171
+ <div class="snippet">
172
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => [current_user, :some_method, "value"]) %&gt;
173
+ </div>
174
+
175
+ <p>Same as the above example, but the method can be called with some parameters.</p>
176
+
177
+ <strong>Value substitution using lambda method call:</strong>
178
+
179
+ <div class="snippet">
180
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => [current_user, lambda{|val| html_for(val)}]) %&gt;
181
+ </div>
182
+ <p>The second parameter can also be a lambda. In that case current_user will be passed as a val into the lambda and the result of the lambda evaluation will be placed into the {user} token.
183
+ </p>
184
+
185
+ <strong>Value substitution using lambda method call with parameters:</strong>
186
+ <div class="snippet">
187
+ &lt;%= tr("Dear {user}", "Fragment sample", :user => [current_user, lambda{|val, test| html_for(val, test)}], "test"]) %&gt;
188
+ </div>
189
+
190
+ <p>Same as the above, but lambda has some additional parameters.</p>
191
+
192
+ <p>You may be wondering why we need so many variations. Well, they are all useful, as you will see later.
193
+ </p>
194
+
195
+ <p class="try_it">Try it yourself:</p>
196
+ <div class="snippet2">
197
+ <%= tr("Dear {user}", "Fragment sample", :user => [Tr8n::Config.current_user, :name]) %>
198
+ </div>
199
+
200
+ <a name="method_tokens">&nbsp;</a>
201
+ <h3>Method Tokens</h3>
202
+
203
+ <p>Method token allows you to call a method on a token itself. It is useful if you have multiple method calls on the same token in one sentence. Consider the following example:
204
+ </p>
205
+
206
+ <div class="snippet">
207
+ &lt;%= tr("Dear {user.first_name} {user.last_name}", "Fragment sample", :user => current_user) %&gt;
208
+ </div>
209
+
210
+ <p>Since the substitution is implied in the token definition itself, you don’t have to use any of the basic data token substitution forms.
211
+ </p>
212
+
213
+ <a name="hidden_tokens">&nbsp;</a>
214
+ <h3>Hidden Tokens</h3>
215
+
216
+ <p>Hidden tokens are used primarely for the default language dynamic data substitution that would not make sense in the translated label. Hidden tokens will not appear as tokens when translator opens the translation dialog. Consider the following examples:
217
+ </p>
218
+
219
+ <div class="snippet">
220
+ &lt;%= tr("{user} changed {_his_her} name", "Fragment sample", :user => current_user, :_his_her => current_user.his_her) %&gt;<br>
221
+ &lt;%= tr("you have {count} {_messages}", "Fragment sample", :count => NUM, :_messages => "message".pluralize_for(NUM)) %&gt;
222
+ </div>
223
+
224
+ <p>In the first cases _his_her will be subsituted in English to the appropriate phrase based on the current_user gender. And in the second case the correct form of message will be used based on whether the number is 1 or other.
225
+ </p>
226
+
227
+ <p>There is a better approach for the above examples, using the Transform tokens. But there may still be situations when hidden token can be useful.
228
+ </p>
229
+
230
+ <a name="transform_tokens">&nbsp;</a>
231
+ <h3>Transform tokens</h3>
232
+
233
+ <p>Transform tokens are used together with rules defined in the rules engine. Their primary job is to provide shortcuts for rule based tokens in the site native language. Consider the following example:
234
+ </p>
235
+
236
+ <div class="snippet">
237
+ &lt;%= tr("{user} changed {user| his, her} name", "Fragment sample", :user => current_user) %&gt;
238
+ </div>
239
+
240
+ <p>Notice that the hidden token has been replaced by the transform token. Keep in mind that {user} token must be registered as a gender based token. Consider another example:
241
+ </p>
242
+
243
+ <div class="snippet">
244
+ &lt;%= tr("You have {count|| message, messages}", "Fragment sample", :count => messages.size) %&gt;
245
+ </div>
246
+
247
+ <p>Notice that, in this case, {count} must be registered as a number based token. When the native language rule is evaluated it will use the singular or plural form of the word "message" based on the value of count. A single pipe indicates that the comma delimited word(s) that follow it are dependent on the token value, but the token itself should not be displayed. A double pipe indicates that the value of the token should be displayd as well. You don’t have to provide the plural form of the word if it can be derived from a singular form. So {count|| message} will be good enough and it will be pluralized by the engine automatically. Every rule has support for a transform token. For example:
248
+ </p>
249
+
250
+ <div class="snippet">
251
+ &lt;%= tr("Michael {date| turned, turns, will turn} 33 on {date}", "Fragment sample", :date => some_date) %&gt;
252
+ </div>
253
+
254
+ <p>This is the case when piped token is used for a date token object. And one more example for a list:
255
+ </p>
256
+
257
+ <div class="snippet">
258
+ &lt;%= tr("{users|| likes, like} this link", "Fragment sample", :users => [users_list, lambda{|user| user.first_name}]) %&gt;
259
+ </div>
260
+
261
+ <p>In this case if the users array contains a single element it will use the first form, otherwise it will use the plural form.
262
+ </p>
263
+
264
+ <a name="decoration_tokens">&nbsp;</a>
265
+ <h3>Decoration tokens</h3>
266
+
267
+ <p>Decoration tokens are used to decorate some text in a label. Consider the following example:
268
+ </p>
269
+
270
+ <div class="snippet">
271
+ &lt;%= tr("[link: Click here] to visit our site", "Fragment sample", :link => lambda{|text| link_to(text, 'http://www.google.com')}) %&gt;
272
+ </div>
273
+ <p>When this label is rendered "Click here" will be turned into a link. </p>
274
+
275
+ <p class="try_it">Try it yourself:</p>
276
+ <div class="snippet2">
277
+ <%= tr("[link: Click here] to visit our site", "Fragment sample", :link => lambda{|text| link_to(text, 'http://www.google.com')}) %>
278
+ </div>
279
+
280
+ <p>Similarly you can do any kind of HTML decorations inside of the label. Alternative ways for using decorations are:</p>
281
+ <div class="snippet">
282
+ &lt;%= tr("[link: Click here] to visit Google", "Fragment sample", :link => "&lt;a href='http://www.google.com'&gt;{$0}&lt;/a&gt;") %&gt;
283
+ </div>
284
+
285
+ <p>{$0} is the translated value of the link. And another way, using a default decoration:
286
+ </p>
287
+
288
+ <div class="snippet">
289
+ &lt;%= tr("[link: Click here] to visit Google", "Fragment sample", :link => ['http://www.google.com']) %&gt;
290
+ </div>
291
+
292
+ <p class="try_it">Try it yourself:</p>
293
+ <div class="snippet2">
294
+ <%= tr("[link: Click here] to visit Google", "Fragment sample", :link => ['http://www.google.com']) %>
295
+ </div>
296
+
297
+ <p>The default decorations are defined in the config/tr8n/tokens/decorations.yml file. The are presented in the following form:
298
+ </p>
299
+
300
+ <div class="snippet">
301
+ bold: "&lt;strong>{$0}&lt;/strong>"<br>
302
+ italic: "&lt;i>{$0}&lt;/i>"<br>
303
+ link: "&lt;a href='{$1}' style='{$2}'>{$0}&lt;/a>"<br>
304
+ </div>
305
+
306
+ <p>You can edit the file and add as many of the default decorations as you need. Notice that you do not need to provide token parameters for decorations that only use {$0} token. So this would work just fine:
307
+ </p>
308
+
309
+ <div class="snippet">
310
+ &lt;%= tr("This is some [bold: very cool] stuff!") %&gt;
311
+ </div>
312
+
313
+ <p class="try_it">Try it yourself:</p>
314
+ <div class="snippet2">
315
+ <%= tr("This is some [bold: very cool] stuff!") %>
316
+ </div>
317
+
318
+ <a name="next">&nbsp;</a>
319
+ <h2>What's next?</h2>
320
+
321
+ Cnogratulations! You have completed the second part of the integration guide. Now read on about <%=link_to("Tr8n Rules Engine Configuration", "/tr8n/home/rules")%>.
322
+
323
+ </div>
324
+ <% end %>
@@ -0,0 +1,53 @@
1
+ <div id="basic_info_container">
2
+ <%=render(:partial => "header", :locals => {:section => "basic_info", :label => "Basic Information", :description => "", :mode => mode})%>
3
+
4
+ <%= form_for(tr8n_current_language, :as => :language, :url => {:action => :index}, :html => {:id => 'basic_info_form', :method => :post}) do |f| %>
5
+ <div id="basic_info_content" class="section_box colored">
6
+ <div style="float:right; padding-right:5px;">
7
+ <%=tr8n_help_icon_tag %>
8
+ </div>
9
+ <div>
10
+ <table cellpadding="0px" cellspacing="0px">
11
+ <tr>
12
+ <th style="width:120px;padding:3px; text-align:left; vertical-align:middle;font-weight:bold;"><%=trla("Native Name:", "Language native name")%></th>
13
+ <td style="padding:3px; text-align:left;">
14
+ <% if mode == :edit %>
15
+ <%=f.text_field(:native_name)%>
16
+ <% else %>
17
+ <%=tr8n_current_language.native_name%>
18
+ <% end %>
19
+ </td>
20
+ </tr>
21
+ <tr>
22
+ <th style="padding:3px; text-align:left; vertical-align:middle;font-weight:bold;"><%=trla("Direction:", "Language direction")%></th>
23
+ <td style="padding:3px; text-align:left;">
24
+ <% if mode == :edit %>
25
+ <%=f.check_box(:right_to_left, :style=>"margin:0px; padding:0px; width:15px;") %> <%=trla("This language is read from right to left")%>
26
+ <% else %>
27
+ <% if tr8n_current_language.right_to_left? %>
28
+ <%=trla("This language is read from right to left")%>
29
+ <% else %>
30
+ <%=trla("This language is read from left to right")%>
31
+ <% end %>
32
+ <% end %>
33
+ </td>
34
+ </tr>
35
+
36
+ <% if Tr8n::Config.enable_fallback_languages? and not tr8n_current_language.default? %>
37
+ <tr>
38
+ <th style="padding:3px; text-align:left; vertical-align:middle;font-weight:bold;"><%=trla("Fallback Language:", "Language to fall back onto if the language phrase is not translated")%></th>
39
+ <td style="padding:3px; text-align:left;">
40
+ <% if mode == :edit %>
41
+ <%=select_tag("language[fallback_language_id]", options_for_select(Tr8n::Language.options, @fallback_language.id.to_s))%>
42
+ <% else %>
43
+ <%=@fallback_language.english_name%>
44
+ <% end %>
45
+ </td>
46
+ </tr>
47
+ <% end %>
48
+
49
+ </table>
50
+ </div>
51
+ </div>
52
+ <% end %>
53
+ </div>
@@ -0,0 +1,51 @@
1
+ <% if lcase.rules.empty? %>
2
+ <div style="font-style:italic; font-size: 10px; color: grey;">
3
+ <%=tra("There are no rules defined for this language case.")%>
4
+ <%=link_to_function(tra("Click here to add new rule."), "addLanguageCaseRule('#{case_index}', '0')")%>
5
+ </div>
6
+ <% else %>
7
+ <% lcase.language_case_rules.each_with_index do |rule, rule_index| %>
8
+ <div class="language_case_rule" style="">
9
+ <table style="width:100%;">
10
+ <tr>
11
+ <td style="width:1%; padding-right:10px;text-align:left;white-space:nowrap;">
12
+ <% if rule_index == 0 %>
13
+ <%=image_tag('/tr8n/images/arrow_up_grey.png') %>
14
+ <% else %>
15
+ <%=link_to_function(image_tag('/tr8n/images/arrow_up.png'), "moveLanguageCaseRule('#{case_index}', '#{rule_index}', 'up')") %>
16
+ <% end %>
17
+
18
+ <% if rule_index == lcase.language_case_rules.size - 1 %>
19
+ <%=image_tag('/tr8n/images/arrow_down_grey.png') %>
20
+ <% else %>
21
+ <%=link_to_function(image_tag('/tr8n/images/arrow_down.png'), "moveLanguageCaseRule('#{case_index}', '#{rule_index}', 'down')") %>
22
+ <% end %>
23
+
24
+ <%=link_to_function(image_tag("/tr8n/images/add.png"), "addLanguageCaseRule('#{case_index}', '#{rule_index+1}')", :id => "language_case_edit_link_#{rule_index}")%>
25
+ </td>
26
+ <td style="text-align:left;vertical-align:middle;color:#444;">
27
+ <span style="font-weight:bold;color:black;"><%=rule_index+1%>.</span> <%=rule.description %>
28
+
29
+ <% rule_prefix = "cases[#{case_index}][rules][#{rule_index}]" %>
30
+
31
+ <%=hidden_field_tag("#{rule_prefix}[position]", rule_index)%>
32
+ <%=hidden_field_tag("#{rule_prefix}[definition][gender]", rule.definition[:gender])%>
33
+ <%=hidden_field_tag("#{rule_prefix}[definition][part1]", rule.definition[:part1])%>
34
+ <%=hidden_field_tag("#{rule_prefix}[definition][value1]", rule.definition[:value1])%>
35
+ <%=hidden_field_tag("#{rule_prefix}[definition][multipart]", rule.definition[:multipart].to_s)%>
36
+ <%=hidden_field_tag("#{rule_prefix}[definition][operator]", rule.definition[:operator])%>
37
+ <%=hidden_field_tag("#{rule_prefix}[definition][part2]", rule.definition[:part2])%>
38
+ <%=hidden_field_tag("#{rule_prefix}[definition][value2]", rule.definition[:value2])%>
39
+ <%=hidden_field_tag("#{rule_prefix}[definition][operation]", rule.definition[:operation])%>
40
+ <%=hidden_field_tag("#{rule_prefix}[definition][operation_value]", rule.definition[:operation_value])%>
41
+ </td>
42
+ <td style="width:1%; text-align:right;white-space:nowrap;">
43
+ <%=link_to_function(image_tag("/tr8n/images/pencil.png"), "editLanguageCaseRule('#{case_index}', '#{rule_index}')", :id => "language_case_edit_link_#{rule_index}")%>
44
+ <%=link_to_function(image_tag("/tr8n/images/cross.png"), "deleteLanguageCaseRule('#{case_index}', '#{rule_index}')")%>
45
+ </td>
46
+ </tr>
47
+ </table>
48
+ </div>
49
+ <% end %>
50
+ <% end %>
51
+
@@ -0,0 +1,68 @@
1
+ <% if @cases.empty? %>
2
+ <div style="font-style:italic; font-size: 10px; color: grey;">
3
+ <%=tra("There are no language cases defined for this language.")%>
4
+ <%=link_to_function(tra("Click here to add language cases."), "addLanguageCase('#{@cases.size}')")%>
5
+ </div>
6
+
7
+ <% else %>
8
+
9
+ <% @cases.each_with_index do |lcase, index| %>
10
+ <div style="padding:5px; border: 1px dotted #ccc; margin-top:5px; margin-bottom:0px; background-color:#F1F4F9;">
11
+ <table style="display:inline">
12
+ <tr>
13
+ <td style="vertical-align:top;width:1%; padding-right:3px;">
14
+ <%=tr8n_toggler_tag("language_case_rules_#{index}")%>
15
+ </td>
16
+ <td>
17
+ <div id="language_case_labels_<%=index%>" style="<%='display:none' if lcase.native_name.blank? %>">
18
+ <strong><%= lcase.native_name %></strong>
19
+ <span style="color:grey; font-size:10px;">
20
+ <% if lcase.application == 'phrase' %>
21
+ <%= tra("applied to the entire phrase of the token value") -%>
22
+ <% else %>
23
+ <%= tra("applied to every word in the token value") -%>
24
+ <% end %>
25
+ </span>
26
+ <br>
27
+ <span style="color:grey; font-size:10px;">
28
+ (::<%= lcase.keyword %>)
29
+ <%= lcase.description %>
30
+ </span>
31
+ </div>
32
+
33
+ <div id="language_case_fields_<%=index%>" style="<%='display:none' unless lcase.native_name.blank? %>">
34
+ <span style="font-weight:bold;padding-left:5px;"><%=tra("Key:", "Language case key")%></span>
35
+ <%= text_field_tag("cases[#{index}][keyword]", lcase.keyword, :style => "width:50px;")%>
36
+ <span style="font-weight:bold;padding-left:5px;"><%=tra("Name:", "Language case name")%></span>
37
+ <%= text_field_tag("cases[#{index}][native_name]", lcase.native_name, :style => "width:100px;")%>
38
+ <span style="font-weight:bold;padding-left:5px;"><%=tra("Description:", "Language case description")%></span>
39
+ <%= text_field_tag("cases[#{index}][description]", lcase.description, :style => "width:220px;")%>
40
+ <span style="font-weight:bold;padding-left:5px;"><%=tra("Application:", "Language case description")%></span>
41
+ <%=select_tag("cases[#{index}][application]", tr8n_options_for_select(lcase.class.application_options, lcase.application), :style => "width:120px")%>
42
+ </div>
43
+ </td>
44
+ <td style="text-align:right;vertical-align:top;white-space:nowrap;">
45
+ <% unless lcase.native_name.blank? %>
46
+ <%=link_to_function(image_tag("/tr8n/images/pencil.png"), "editLanguageCase('#{index}')", :id => "language_case_edit_link_#{index}")%>
47
+ <% end %>
48
+ <%=link_to_function(image_tag("/tr8n/images/delete.png"), "deleteLanguageCase('#{index}')")%>
49
+ </td>
50
+ </tr>
51
+ </table>
52
+ </div>
53
+
54
+ <div id="language_case_rules_<%=index%>" style="padding:5px; border: 1px dotted #ccc; margin-top:0px; margin-bottom:5px; border-top: 0px; background-color:white;">
55
+ <%= render(:partial => "edit_language_case_rules", :locals => {:lcase => lcase, :case_index => index}) %>
56
+ </div>
57
+
58
+ <% end %>
59
+
60
+ <div style="color:grey; font-size:12px; padding-top:15px;">
61
+ <%=link_to_function(tra("+ Add Language Case"), "addLanguageCase('#{@cases.size}')")%>
62
+ </div>
63
+
64
+ <div style="color:grey; font-size:10px; padding-top:15px; padding-bottom:5px;">
65
+ <%=tra("Modifying the case keyword value will invalidate all translated values provided for the case.")%>
66
+ </div>
67
+ <% end %>
68
+