tr8n 3.0.5 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. data/.gitignore +17 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +12 -6
  4. data/Gemfile.lock +143 -60
  5. data/MIT-LICENSE +20 -0
  6. data/Rakefile +39 -22
  7. data/{lib/tasks → app/assets/images/tr8n}/.gitkeep +0 -0
  8. data/{public/tr8n/images → app/assets/images/tr8n}/accept.png +0 -0
  9. data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_bkgd.gif +0 -0
  10. data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_white_bkgd.gif +0 -0
  11. data/{public/tr8n/images → app/assets/images/tr8n}/add.png +0 -0
  12. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.gif +0 -0
  13. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.png +0 -0
  14. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down_grey.png +0 -0
  15. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_right.gif +0 -0
  16. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up.png +0 -0
  17. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up_grey.png +0 -0
  18. data/{public/tr8n/images → app/assets/images/tr8n}/bullet_go.png +0 -0
  19. data/{public/tr8n/images → app/assets/images/tr8n}/buttons.png +0 -0
  20. data/{public/tr8n/images → app/assets/images/tr8n}/cancel.png +0 -0
  21. data/app/assets/images/tr8n/checkmark.png +0 -0
  22. data/{public/tr8n/images → app/assets/images/tr8n}/close.gif +0 -0
  23. data/{public/tr8n/images → app/assets/images/tr8n}/cross.png +0 -0
  24. data/{public/tr8n/images → app/assets/images/tr8n}/delete.png +0 -0
  25. data/{public/tr8n/images → app/assets/images/tr8n}/disk.png +0 -0
  26. data/app/assets/images/tr8n/error.png +0 -0
  27. data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_1.png +0 -0
  28. data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_2.png +0 -0
  29. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_1.png +0 -0
  30. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_2.png +0 -0
  31. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_3.png +0 -0
  32. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_1.png +0 -0
  33. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_2.png +0 -0
  34. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_3.png +0 -0
  35. data/{public/tr8n/images → app/assets/images/tr8n}/examples/language_manager_1.png +0 -0
  36. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_1.png +0 -0
  37. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_2.png +0 -0
  38. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_3.png +0 -0
  39. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_1.png +0 -0
  40. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_2.png +0 -0
  41. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_3.png +0 -0
  42. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_4.png +0 -0
  43. data/{public/tr8n/images → app/assets/images/tr8n}/exclamation.png +0 -0
  44. data/{public/tr8n/images → app/assets/images/tr8n}/eye.png +0 -0
  45. data/{public/tr8n/images → app/assets/images/tr8n}/eye_not.png +0 -0
  46. data/{public/tr8n/images → app/assets/images/tr8n}/facebook/connect_light_medium_long.gif +0 -0
  47. data/{public/tr8n/images → app/assets/images/tr8n}/field_sprite.gif +0 -0
  48. data/{public/tr8n/images → app/assets/images/tr8n}/find.png +0 -0
  49. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ab.png +0 -0
  50. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ach.png +0 -0
  51. data/{public/tr8n/images → app/assets/images/tr8n}/flags/af.png +0 -0
  52. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ak.png +0 -0
  53. data/{public/tr8n/images → app/assets/images/tr8n}/flags/am.png +0 -0
  54. data/{public/tr8n/images → app/assets/images/tr8n}/flags/an.png +0 -0
  55. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-AE.png +0 -0
  56. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-BH.png +0 -0
  57. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-DZ.png +0 -0
  58. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-EG.png +0 -0
  59. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-IQ.png +0 -0
  60. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-JO.png +0 -0
  61. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-KW.png +0 -0
  62. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LB.png +0 -0
  63. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LY.png +0 -0
  64. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-MA.png +0 -0
  65. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-OM.png +0 -0
  66. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-QA.png +0 -0
  67. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SA.png +0 -0
  68. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SY.png +0 -0
  69. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-TN.png +0 -0
  70. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-YE.png +0 -0
  71. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar.png +0 -0
  72. data/{public/tr8n/images → app/assets/images/tr8n}/flags/as.png +0 -0
  73. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ast.png +0 -0
  74. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ay.png +0 -0
  75. data/{public/tr8n/images → app/assets/images/tr8n}/flags/az.png +0 -0
  76. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ba.png +0 -0
  77. data/{public/tr8n/images → app/assets/images/tr8n}/flags/be.png +0 -0
  78. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bg.png +0 -0
  79. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bh.png +0 -0
  80. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bn.png +0 -0
  81. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bo.png +0 -0
  82. data/{public/tr8n/images → app/assets/images/tr8n}/flags/br.png +0 -0
  83. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bs.png +0 -0
  84. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ca.png +0 -0
  85. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cb.png +0 -0
  86. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ce.png +0 -0
  87. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ch.png +0 -0
  88. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ck-US.png +0 -0
  89. data/{public/tr8n/images → app/assets/images/tr8n}/flags/co.png +0 -0
  90. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cr.png +0 -0
  91. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cs.png +0 -0
  92. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cv.png +0 -0
  93. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cy.png +0 -0
  94. data/{public/tr8n/images → app/assets/images/tr8n}/flags/da.png +0 -0
  95. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-AT.png +0 -0
  96. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-CH.png +0 -0
  97. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-DE.png +0 -0
  98. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LI.png +0 -0
  99. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LU.png +0 -0
  100. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de.png +0 -0
  101. data/{public/tr8n/images → app/assets/images/tr8n}/flags/el.png +0 -0
  102. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-AU.png +0 -0
  103. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-BZ.png +0 -0
  104. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-CA.png +0 -0
  105. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-IE.png +0 -0
  106. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-JM.png +0 -0
  107. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-NZ.png +0 -0
  108. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PH.png +0 -0
  109. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PI.png +0 -0
  110. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-SC.png +0 -0
  111. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-UK.png +0 -0
  112. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-US.png +0 -0
  113. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZA.png +0 -0
  114. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZW.png +0 -0
  115. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en.png +0 -0
  116. data/{public/tr8n/images → app/assets/images/tr8n}/flags/eo.png +0 -0
  117. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-AR.png +0 -0
  118. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-BO.png +0 -0
  119. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CL.png +0 -0
  120. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CO.png +0 -0
  121. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CR.png +0 -0
  122. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-DO.png +0 -0
  123. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-EC.png +0 -0
  124. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-ES.png +0 -0
  125. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-GT.png +0 -0
  126. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-HN.png +0 -0
  127. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-MX.png +0 -0
  128. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-NI.png +0 -0
  129. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PA.png +0 -0
  130. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PE.png +0 -0
  131. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PR.png +0 -0
  132. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PY.png +0 -0
  133. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-SV.png +0 -0
  134. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-UY.png +0 -0
  135. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-VE.png +0 -0
  136. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es.png +0 -0
  137. data/{public/tr8n/images → app/assets/images/tr8n}/flags/et.png +0 -0
  138. data/{public/tr8n/images → app/assets/images/tr8n}/flags/eu.png +0 -0
  139. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa-IR.png +0 -0
  140. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa.png +0 -0
  141. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fb-LT.png +0 -0
  142. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fi.png +0 -0
  143. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fj.png +0 -0
  144. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fo.png +0 -0
  145. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-BE.png +0 -0
  146. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CA.png +0 -0
  147. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CH.png +0 -0
  148. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-FR.png +0 -0
  149. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-LU.png +0 -0
  150. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-MC.png +0 -0
  151. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr.png +0 -0
  152. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fur.png +0 -0
  153. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fy.png +0 -0
  154. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ga.png +0 -0
  155. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gd.png +0 -0
  156. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gl.png +0 -0
  157. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gn.png +0 -0
  158. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gu.png +0 -0
  159. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gv.png +0 -0
  160. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ha.png +0 -0
  161. data/{public/tr8n/images → app/assets/images/tr8n}/flags/haw.png +0 -0
  162. data/{public/tr8n/images → app/assets/images/tr8n}/flags/he.png +0 -0
  163. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hi.png +0 -0
  164. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hr.png +0 -0
  165. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hsb.png +0 -0
  166. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ht.png +0 -0
  167. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hu.png +0 -0
  168. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hy.png +0 -0
  169. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ia.png +0 -0
  170. data/{public/tr8n/images → app/assets/images/tr8n}/flags/id.png +0 -0
  171. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ie.png +0 -0
  172. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ig.png +0 -0
  173. data/{public/tr8n/images → app/assets/images/tr8n}/flags/is.png +0 -0
  174. data/{public/tr8n/images → app/assets/images/tr8n}/flags/it-CH.png +0 -0
  175. data/{public/tr8n/images → app/assets/images/tr8n}/flags/it.png +0 -0
  176. data/{public/tr8n/images → app/assets/images/tr8n}/flags/iu.png +0 -0
  177. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ja.png +0 -0
  178. data/{public/tr8n/images → app/assets/images/tr8n}/flags/jw.png +0 -0
  179. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ka.png +0 -0
  180. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kk.png +0 -0
  181. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kl.png +0 -0
  182. data/{public/tr8n/images → app/assets/images/tr8n}/flags/km.png +0 -0
  183. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kn.png +0 -0
  184. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KP.png +0 -0
  185. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KR.png +0 -0
  186. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko.png +0 -0
  187. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kok.png +0 -0
  188. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ks.png +0 -0
  189. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ku.png +0 -0
  190. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ky.png +0 -0
  191. data/{public/tr8n/images → app/assets/images/tr8n}/flags/la.png +0 -0
  192. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lb.png +0 -0
  193. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lg.png +0 -0
  194. data/{public/tr8n/images → app/assets/images/tr8n}/flags/li-NL.png +0 -0
  195. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ln.png +0 -0
  196. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lo.png +0 -0
  197. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lt.png +0 -0
  198. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lv.png +0 -0
  199. data/{public/tr8n/images → app/assets/images/tr8n}/flags/md.png +0 -0
  200. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mfe.png +0 -0
  201. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mg.png +0 -0
  202. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mh.png +0 -0
  203. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mi.png +0 -0
  204. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mk.png +0 -0
  205. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ml.png +0 -0
  206. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mn.png +0 -0
  207. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mo.png +0 -0
  208. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mr.png +0 -0
  209. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ms.png +0 -0
  210. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mt.png +0 -0
  211. data/{public/tr8n/images → app/assets/images/tr8n}/flags/my.png +0 -0
  212. data/{public/tr8n/images → app/assets/images/tr8n}/flags/na.png +0 -0
  213. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nb.png +0 -0
  214. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nd.png +0 -0
  215. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ne.png +0 -0
  216. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ng.png +0 -0
  217. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl-NE.png +0 -0
  218. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl.png +0 -0
  219. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nn.png +0 -0
  220. data/{public/tr8n/images → app/assets/images/tr8n}/flags/no.png +0 -0
  221. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nr.png +0 -0
  222. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nso.png +0 -0
  223. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nv.png +0 -0
  224. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ny.png +0 -0
  225. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nyn.png +0 -0
  226. data/{public/tr8n/images → app/assets/images/tr8n}/flags/oc.png +0 -0
  227. data/{public/tr8n/images → app/assets/images/tr8n}/flags/om.png +0 -0
  228. data/{public/tr8n/images → app/assets/images/tr8n}/flags/or.png +0 -0
  229. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-IN.png +0 -0
  230. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-PK.png +0 -0
  231. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa.png +0 -0
  232. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pf.png +0 -0
  233. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pl.png +0 -0
  234. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pp.png +0 -0
  235. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ps.png +0 -0
  236. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt-BZ.png +0 -0
  237. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt.png +0 -0
  238. data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu-PE.png +0 -0
  239. data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu.png +0 -0
  240. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rj.png +0 -0
  241. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rm.png +0 -0
  242. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rn.png +0 -0
  243. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-MD.png +0 -0
  244. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-RO.png +0 -0
  245. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro.png +0 -0
  246. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ru.png +0 -0
  247. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rw.png +0 -0
  248. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sa.png +0 -0
  249. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sc.png +0 -0
  250. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sd.png +0 -0
  251. data/{public/tr8n/images → app/assets/images/tr8n}/flags/se-NO.png +0 -0
  252. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sg.png +0 -0
  253. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sh.png +0 -0
  254. data/{public/tr8n/images → app/assets/images/tr8n}/flags/si.png +0 -0
  255. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sk.png +0 -0
  256. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sl.png +0 -0
  257. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sm.png +0 -0
  258. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sn.png +0 -0
  259. data/{public/tr8n/images → app/assets/images/tr8n}/flags/so.png +0 -0
  260. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sq.png +0 -0
  261. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr-me.png +0 -0
  262. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr.png +0 -0
  263. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ss.png +0 -0
  264. data/{public/tr8n/images → app/assets/images/tr8n}/flags/st.png +0 -0
  265. data/{public/tr8n/images → app/assets/images/tr8n}/flags/su.png +0 -0
  266. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-FI.png +0 -0
  267. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-SE.png +0 -0
  268. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv.png +0 -0
  269. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sw.png +0 -0
  270. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ta.png +0 -0
  271. data/{public/tr8n/images → app/assets/images/tr8n}/flags/te.png +0 -0
  272. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tg.png +0 -0
  273. data/{public/tr8n/images → app/assets/images/tr8n}/flags/th.png +0 -0
  274. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ti.png +0 -0
  275. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tig.png +0 -0
  276. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tk.png +0 -0
  277. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tl.png +0 -0
  278. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tlh.png +0 -0
  279. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tn.png +0 -0
  280. data/{public/tr8n/images → app/assets/images/tr8n}/flags/to.png +0 -0
  281. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tr.png +0 -0
  282. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ts.png +0 -0
  283. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tt.png +0 -0
  284. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tw.png +0 -0
  285. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ug.png +0 -0
  286. data/{public/tr8n/images → app/assets/images/tr8n}/flags/uk.png +0 -0
  287. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ur.png +0 -0
  288. data/{public/tr8n/images → app/assets/images/tr8n}/flags/uz.png +0 -0
  289. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ve.png +0 -0
  290. data/{public/tr8n/images → app/assets/images/tr8n}/flags/vi.png +0 -0
  291. data/{public/tr8n/images → app/assets/images/tr8n}/flags/vo.png +0 -0
  292. data/{public/tr8n/images → app/assets/images/tr8n}/flags/wa.png +0 -0
  293. data/{public/tr8n/images → app/assets/images/tr8n}/flags/wo.png +0 -0
  294. data/{public/tr8n/images → app/assets/images/tr8n}/flags/xh.png +0 -0
  295. data/{public/tr8n/images → app/assets/images/tr8n}/flags/yi.png +0 -0
  296. data/{public/tr8n/images → app/assets/images/tr8n}/flags/yo.png +0 -0
  297. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-CN.png +0 -0
  298. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-HK.png +0 -0
  299. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-SG.png +0 -0
  300. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-TW.png +0 -0
  301. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh.png +0 -0
  302. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zu.png +0 -0
  303. data/{public/tr8n/images → app/assets/images/tr8n}/globe.gif +0 -0
  304. data/{public/tr8n/images → app/assets/images/tr8n}/help.png +0 -0
  305. data/{public/tr8n/images → app/assets/images/tr8n}/help/color_coding.png +0 -0
  306. data/app/assets/images/tr8n/help/cousin.png +0 -0
  307. data/app/assets/images/tr8n/help/half-cousin.png +0 -0
  308. data/app/assets/images/tr8n/help/hindu_family_tree.jpg +0 -0
  309. data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector.png +0 -0
  310. data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector_default.png +0 -0
  311. data/app/assets/images/tr8n/help/language_selector_v2.png +0 -0
  312. data/{public/tr8n/images → app/assets/images/tr8n}/help/languages_disabled.png +0 -0
  313. data/app/assets/images/tr8n/help/path.png +0 -0
  314. data/{public/tr8n/images → app/assets/images/tr8n}/help/translator.png +0 -0
  315. data/{public/tr8n/images → app/assets/images/tr8n}/help2.png +0 -0
  316. data/{public/tr8n/images → app/assets/images/tr8n}/information.png +0 -0
  317. data/{public/tr8n/images → app/assets/images/tr8n}/keyboard.png +0 -0
  318. data/{public/tr8n/images → app/assets/images/tr8n}/language_selector_arrow.gif +0 -0
  319. data/{public/tr8n/images → app/assets/images/tr8n}/left_quote.png +0 -0
  320. data/{public/tr8n/images → app/assets/images/tr8n}/lightning.png +0 -0
  321. data/{public/tr8n/images → app/assets/images/tr8n}/loading.gif +0 -0
  322. data/{public/tr8n/images → app/assets/images/tr8n}/loading2.gif +0 -0
  323. data/{public/tr8n/images → app/assets/images/tr8n}/loading3.gif +0 -0
  324. data/{public/tr8n/images → app/assets/images/tr8n}/loading_large.gif +0 -0
  325. data/{public/tr8n/images → app/assets/images/tr8n}/lock.png +0 -0
  326. data/{public/tr8n/images → app/assets/images/tr8n}/lock_add.png +0 -0
  327. data/{public/tr8n/images → app/assets/images/tr8n}/lock_delete.png +0 -0
  328. data/{public/tr8n/images → app/assets/images/tr8n}/lock_open.png +0 -0
  329. data/{public/tr8n/images → app/assets/images/tr8n}/medals/bronze.png +0 -0
  330. data/{public/tr8n/images → app/assets/images/tr8n}/medals/gold.png +0 -0
  331. data/{public/tr8n/images → app/assets/images/tr8n}/medals/runner.png +0 -0
  332. data/{public/tr8n/images → app/assets/images/tr8n}/medals/silver.png +0 -0
  333. data/{public/tr8n/images → app/assets/images/tr8n}/pencil.png +0 -0
  334. data/{public/tr8n/images → app/assets/images/tr8n}/photo_silhouette.gif +0 -0
  335. data/{public/tr8n/images → app/assets/images/tr8n}/plus.png +0 -0
  336. data/{public/tr8n/images → app/assets/images/tr8n}/random.png +0 -0
  337. data/{public/tr8n/images → app/assets/images/tr8n}/random2.png +0 -0
  338. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star0.png +0 -0
  339. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star05.png +0 -0
  340. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star1.png +0 -0
  341. data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.gif +0 -0
  342. data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.psd +0 -0
  343. data/{public/tr8n/images → app/assets/images/tr8n}/reply.png +0 -0
  344. data/{public/tr8n/images → app/assets/images/tr8n}/right_quote.png +0 -0
  345. data/{public/tr8n/images → app/assets/images/tr8n}/rotating_world.gif +0 -0
  346. data/{public/tr8n/images → app/assets/images/tr8n}/script.png +0 -0
  347. data/{public/tr8n/images → app/assets/images/tr8n}/script_edit.png +0 -0
  348. data/{public/tr8n/images → app/assets/images/tr8n}/script_gear.png +0 -0
  349. data/{public/tr8n/images → app/assets/images/tr8n}/site_sprite.gif +0 -0
  350. data/{public/tr8n/images → app/assets/images/tr8n}/spinner.gif +0 -0
  351. data/{public/tr8n/images → app/assets/images/tr8n}/star.png +0 -0
  352. data/{public/tr8n/images → app/assets/images/tr8n}/table_edit.png +0 -0
  353. data/{public/tr8n/images → app/assets/images/tr8n}/table_gear.png +0 -0
  354. data/{public/tr8n/images → app/assets/images/tr8n}/table_multiple.png +0 -0
  355. data/{public/tr8n/images → app/assets/images/tr8n}/thumb_down.png +0 -0
  356. data/{public/tr8n/images → app/assets/images/tr8n}/thumb_up.png +0 -0
  357. data/{public/tr8n/images → app/assets/images/tr8n}/toolbar_bg.gif +0 -0
  358. data/{public/tr8n/images → app/assets/images/tr8n}/top_left_stem.png +0 -0
  359. data/{public/tr8n/images → app/assets/images/tr8n}/top_right_stem.png +0 -0
  360. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_loading.gif +0 -0
  361. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.jpg +0 -0
  362. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.png +0 -0
  363. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.gif +0 -0
  364. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.png +0 -0
  365. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki.png +0 -0
  366. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki2.png +0 -0
  367. data/{public/tr8n/images → app/assets/images/tr8n}/translate_icn.gif +0 -0
  368. data/app/assets/images/tr8n/warning.png +0 -0
  369. data/{public/tr8n/images → app/assets/images/tr8n}/wizard.png +0 -0
  370. data/app/assets/javascripts/tr8n/application.js +7 -0
  371. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/jsDraw2D.js +0 -0
  372. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_36.js +1 -1
  373. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_44.js +0 -0
  374. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/shortcut.js +0 -0
  375. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n.js +18 -30
  376. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_client_sdk.js +0 -0
  377. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_prototype_effects.js +1 -1
  378. data/app/assets/stylesheets/tr8n/application.css +6 -0
  379. data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_36.css +0 -0
  380. data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_44.css +0 -0
  381. data/{public/tr8n/stylesheets/tr8n.css → app/assets/stylesheets/tr8n/tr8n.css.scss} +272 -37
  382. data/app/controllers/{application_controller.rb → tr8n/application_controller.rb} +3 -4
  383. data/app/controllers/tr8n/awards_controller.rb +2 -4
  384. data/app/controllers/tr8n/dashboard_controller.rb +6 -5
  385. data/app/controllers/tr8n/forum_controller.rb +2 -2
  386. data/app/controllers/tr8n/glossary_controller.rb +3 -9
  387. data/app/controllers/tr8n/home_controller.rb +1 -1
  388. data/app/controllers/tr8n/language_controller.rb +276 -270
  389. data/app/controllers/tr8n/phrases_controller.rb +9 -19
  390. data/app/controllers/tr8n/translations_controller.rb +1 -2
  391. data/app/helpers/tr8n/admin/base_helper.rb +1 -1
  392. data/app/helpers/{application_helper.rb → tr8n/application_helper.rb} +3 -2
  393. data/app/helpers/tr8n/base_helper.rb +5 -1
  394. data/app/models/tr8n/language.rb +1 -0
  395. data/app/models/tr8n/language_case_filter.rb +1 -1
  396. data/app/models/tr8n/language_case_rule_filter.rb +1 -1
  397. data/app/models/tr8n/language_case_value_map_filter.rb +4 -0
  398. data/app/models/tr8n/language_forum_abuse_report_filter.rb +4 -0
  399. data/app/models/tr8n/language_forum_message_filter.rb +4 -0
  400. data/app/models/tr8n/language_forum_topic_filter.rb +4 -0
  401. data/app/models/tr8n/language_metric.rb +1 -1
  402. data/app/models/tr8n/language_metric_filter.rb +4 -0
  403. data/app/models/tr8n/language_rule_filter.rb +7 -3
  404. data/app/models/tr8n/language_user_filter.rb +4 -4
  405. data/app/models/tr8n/translation.rb +12 -33
  406. data/app/models/tr8n/translation_filter.rb +4 -4
  407. data/app/models/tr8n/translation_key.rb +32 -55
  408. data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
  409. data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
  410. data/app/models/tr8n/translation_key_source_filter.rb +1 -1
  411. data/app/models/tr8n/translation_source_filter.rb +1 -1
  412. data/app/models/tr8n/translation_vote_filter.rb +4 -4
  413. data/app/models/tr8n/translator_filter.rb +4 -0
  414. data/app/models/tr8n/translator_following_filter.rb +4 -4
  415. data/app/models/tr8n/translator_log_filter.rb +4 -4
  416. data/app/models/tr8n/translator_metric_filter.rb +4 -4
  417. data/app/models/tr8n/translator_report_filter.rb +1 -1
  418. data/app/views/layouts/tr8n/application.html.erb +14 -0
  419. data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +31 -29
  420. data/app/views/tr8n/admin/common/_lightbox_buttons.html.erb +1 -1
  421. data/app/views/tr8n/admin/domain/index.html.erb +1 -1
  422. data/app/views/tr8n/admin/domain/{key_sources.rhtml → key_sources.html.erb} +1 -1
  423. data/app/views/tr8n/admin/domain/lb_caller.html.erb +39 -35
  424. data/app/views/tr8n/admin/domain/sources.html.erb +1 -1
  425. data/app/views/tr8n/admin/glossary/lb_update.html.erb +33 -26
  426. data/app/views/tr8n/admin/language/index.html.erb +3 -3
  427. data/app/views/tr8n/admin/language/lb_update.html.erb +86 -76
  428. data/app/views/tr8n/admin/language/lb_value_map.html.erb +45 -41
  429. data/app/views/tr8n/admin/language/{metrics.rhtml → metrics.html.erb} +0 -0
  430. data/app/views/tr8n/admin/language/{users.rhtml → users.html.erb} +0 -0
  431. data/app/views/tr8n/admin/translation/{votes.rhtml → votes.html.erb} +0 -0
  432. data/app/views/tr8n/admin/translation_key/comments.html.erb +1 -1
  433. data/app/views/tr8n/admin/translation_key/index.html.erb +1 -1
  434. data/app/views/tr8n/admin/translation_key/lb_merge.html.erb +15 -3
  435. data/app/views/tr8n/admin/translation_key/lb_update.html.erb +54 -44
  436. data/app/views/tr8n/admin/translation_key/locks.html.erb +1 -1
  437. data/app/views/tr8n/admin/translator/lb_register.html.erb +27 -18
  438. data/app/views/tr8n/awards/_list.html.erb +11 -11
  439. data/app/views/tr8n/awards/index.html.erb +1 -1
  440. data/app/views/tr8n/common/_flashes.html.erb +58 -16
  441. data/app/views/tr8n/common/_language_selector.html.erb +10 -6
  442. data/app/views/tr8n/common/_paginator.html.erb +8 -2
  443. data/app/views/tr8n/common/_scripts.html.erb +6 -5
  444. data/app/views/tr8n/common/_splash_screen.html.erb +2 -2
  445. data/app/views/tr8n/common/_translation_votes.html.erb +5 -5
  446. data/app/views/tr8n/dashboard/_forum.html.erb +13 -11
  447. data/app/views/tr8n/dashboard/_language_metric.html.erb +1 -1
  448. data/app/views/tr8n/dashboard/_translations.html.erb +1 -10
  449. data/app/views/tr8n/dashboard/_translator_metric.html.erb +1 -1
  450. data/app/views/tr8n/dashboard/_votes.html.erb +4 -13
  451. data/app/views/tr8n/dashboard/{index.rhtml → index.html.erb} +3 -3
  452. data/app/views/tr8n/forum/_messages.html.erb +2 -9
  453. data/app/views/tr8n/forum/_new_message.html.erb +1 -1
  454. data/app/views/tr8n/forum/_new_topic.html.erb +1 -1
  455. data/app/views/tr8n/forum/index.html.erb +3 -10
  456. data/app/views/tr8n/forum/topic.html.erb +2 -2
  457. data/app/views/tr8n/glossary/index.html.erb +2 -2
  458. data/app/views/tr8n/help/_footer.html.erb +4 -0
  459. data/app/views/tr8n/help/_header.html.erb +106 -0
  460. data/app/views/tr8n/help/_navigation.html.erb +80 -116
  461. data/app/views/tr8n/help/advanced_tools.html.erb +13 -0
  462. data/app/views/tr8n/help/awards.html.erb +8 -8
  463. data/app/views/tr8n/help/creating_translations.html.erb +19 -9
  464. data/app/views/tr8n/help/dashboard.html.erb +34 -7
  465. data/app/views/tr8n/help/discussions.html.erb +8 -8
  466. data/app/views/tr8n/help/help.html.erb +14 -0
  467. data/app/views/tr8n/help/index.html.erb +15 -10
  468. data/app/views/tr8n/help/inline_translator.html.erb +59 -0
  469. data/app/views/tr8n/help/language_selector.html.erb +46 -6
  470. data/app/views/tr8n/help/management.html.erb +42 -0
  471. data/app/views/tr8n/help/phrases.html.erb +12 -13
  472. data/app/views/tr8n/help/{translation_rank.html.erb → ranks.html.erb} +20 -10
  473. data/app/views/tr8n/help/relationships.html.erb +14 -0
  474. data/app/views/tr8n/help/site_map.html.erb +18 -11
  475. data/app/views/tr8n/help/translations.html.erb +8 -8
  476. data/app/views/tr8n/help/voting_on_translations.html.erb +8 -8
  477. data/app/views/tr8n/home/credits.html.erb +1 -2
  478. data/app/views/tr8n/home/index.html.erb +43 -31
  479. data/app/views/tr8n/language/_basic_info.html.erb +1 -1
  480. data/app/views/tr8n/language/_edit_language_case_rules.html.erb +7 -7
  481. data/app/views/tr8n/language/_edit_language_cases.html.erb +2 -2
  482. data/app/views/tr8n/language/_edit_rules.html.erb +2 -2
  483. data/app/views/tr8n/language/_grammar.html.erb +1 -1
  484. data/app/views/tr8n/language/_header.html.erb +3 -3
  485. data/app/views/tr8n/language/_language_cases.html.erb +2 -2
  486. data/app/views/tr8n/language/_lists.html.erb +3 -3
  487. data/app/views/tr8n/language/_prohibited_words.html.erb +1 -1
  488. data/app/views/tr8n/language/_select.html.erb +106 -0
  489. data/app/views/tr8n/language/_translator_header.html.erb +2 -2
  490. data/app/views/tr8n/language/_translator_submit.html.erb +2 -2
  491. data/app/views/tr8n/language/lb_language_case_rule.html.erb +45 -39
  492. data/app/views/tr8n/language/select.html.erb +3 -3
  493. data/app/views/tr8n/language/translator.html.erb +2 -2
  494. data/app/views/tr8n/phrases/_breadcrumb.html.erb +1 -1
  495. data/app/views/tr8n/phrases/_comments_module.html.erb +19 -26
  496. data/app/views/tr8n/phrases/{_dictionary.rhtml → _dictionary.html.erb} +0 -0
  497. data/app/views/tr8n/phrases/_header.html.erb +5 -5
  498. data/app/views/tr8n/phrases/_new_comment.html.erb +1 -1
  499. data/app/views/tr8n/phrases/_permutations_module.html.erb +2 -2
  500. data/app/views/tr8n/phrases/_tokens.html.erb +1 -1
  501. data/app/views/tr8n/phrases/_toolbar.html.erb +10 -10
  502. data/app/views/tr8n/phrases/_translation_module.html.erb +4 -4
  503. data/app/views/tr8n/phrases/_translations_module.html.erb +2 -2
  504. data/app/views/tr8n/phrases/index.html.erb +4 -4
  505. data/app/views/tr8n/phrases/lb_sources.html.erb +8 -12
  506. data/app/views/tr8n/phrases/map.html.erb +1 -1
  507. data/app/views/tr8n/translations/_translation.html.erb +10 -10
  508. data/app/views/tr8n/translations/index.html.erb +2 -2
  509. data/app/views/tr8n/translator/_basic_info.html.erb +1 -1
  510. data/app/views/tr8n/translator/_header.html.erb +3 -3
  511. data/app/views/tr8n/translator/_header_key_report.html.erb +1 -1
  512. data/app/views/tr8n/translator/lb_report.html.erb +82 -73
  513. data/config/routes.rb +8 -8
  514. data/lib/tasks/tr8n_tasks.rake +0 -11
  515. data/lib/tr8n.rb +3 -1
  516. data/lib/tr8n/active_dumper.rb +19 -17
  517. data/lib/tr8n/cache.rb +27 -25
  518. data/lib/tr8n/config.rb +558 -556
  519. data/lib/tr8n/dictionary.rb +21 -19
  520. data/lib/tr8n/engine.rb +24 -25
  521. data/lib/tr8n/exception.rb +4 -2
  522. data/lib/tr8n/extender.rb +11 -9
  523. data/lib/tr8n/extensions/action_controller_extension.rb +158 -0
  524. data/lib/tr8n/extensions/action_view_extension.rb +395 -0
  525. data/lib/{core_ext/array.rb → tr8n/extensions/array_extension.rb} +0 -0
  526. data/lib/{core_ext/date.rb → tr8n/extensions/date_extension.rb} +0 -0
  527. data/lib/{core_ext/fixnum.rb → tr8n/extensions/fixnum_extension.rb} +0 -0
  528. data/lib/{core_ext/hash.rb → tr8n/extensions/hash_extension.rb} +0 -0
  529. data/lib/{core_ext/string.rb → tr8n/extensions/string_extension.rb} +0 -0
  530. data/lib/{core_ext/time.rb → tr8n/extensions/time_extension.rb} +0 -0
  531. data/lib/tr8n/ip_address.rb +26 -24
  532. data/lib/tr8n/key_registration_exception.rb +3 -1
  533. data/lib/tr8n/keyboard_mapping.rb +147 -145
  534. data/lib/tr8n/logger.rb +30 -28
  535. data/lib/{application_controller.rb → tr8n/railtie.rb} +28 -10
  536. data/lib/tr8n/site_map.rb +48 -46
  537. data/lib/tr8n/site_map_section.rb +69 -67
  538. data/lib/tr8n/token.rb +330 -328
  539. data/lib/tr8n/token_exception.rb +3 -2
  540. data/lib/tr8n/tokenized_label.rb +90 -88
  541. data/lib/tr8n/version.rb +3 -0
  542. data/script/rails +3 -3
  543. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/actions.css.scssc +0 -0
  544. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/buttons.css.scssc +0 -0
  545. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/calendar.css.scssc +0 -0
  546. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/exporter.css.scssc +0 -0
  547. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/filter.css.scssc +0 -0
  548. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/results.css.scssc +0 -0
  549. data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/components.css.scssc +0 -0
  550. data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/layout.css.scssc +0 -0
  551. data/test/dummy/.sass-cache/50f723c1dd802042d0091035528d53e6d5bc5b50/tr8n.css.scssc +0 -0
  552. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/actions.css.scssc +0 -0
  553. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/buttons.css.scssc +0 -0
  554. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/calendar.css.scssc +0 -0
  555. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/exporter.css.scssc +0 -0
  556. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/filter.css.scssc +0 -0
  557. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/results.css.scssc +0 -0
  558. data/test/dummy/Rakefile +7 -0
  559. data/test/dummy/app/assets/javascripts/application.js +7 -0
  560. data/test/dummy/app/assets/stylesheets/admin.css +200 -0
  561. data/test/dummy/app/assets/stylesheets/application.css +47 -0
  562. data/{public/tr8n/stylesheets/components.css → test/dummy/app/assets/stylesheets/components.css.scss} +5 -2
  563. data/test/dummy/app/assets/stylesheets/keyboard.css +147 -0
  564. data/{public/tr8n/stylesheets/layout.css → test/dummy/app/assets/stylesheets/layout.css.scss} +27 -3
  565. data/test/dummy/app/controllers/admin/admins_controller.rb +7 -0
  566. data/test/dummy/app/controllers/admin/base_controller.rb +12 -0
  567. data/test/dummy/app/controllers/admin/users_controller.rb +19 -0
  568. data/test/dummy/app/controllers/application_controller.rb +26 -0
  569. data/test/dummy/app/controllers/demo_controller.rb +7 -0
  570. data/test/dummy/app/controllers/login_controller.rb +58 -0
  571. data/test/dummy/app/helpers/application_helper.rb +9 -0
  572. data/test/dummy/app/helpers/home_helper.rb +2 -0
  573. data/{public/favicon.ico → test/dummy/app/mailers/.gitkeep} +0 -0
  574. data/test/dummy/app/models/.gitkeep +0 -0
  575. data/test/dummy/app/models/admin.rb +4 -0
  576. data/test/dummy/app/models/admin_filter.rb +9 -0
  577. data/test/dummy/app/models/user.rb +31 -0
  578. data/test/dummy/app/views/admin/admins/index.html.erb +7 -0
  579. data/test/dummy/app/views/admin/users/index.html.erb +10 -0
  580. data/test/dummy/app/views/demo/index.rhtml +108 -0
  581. data/test/dummy/app/views/demo/tokens.rhtml +35 -0
  582. data/test/dummy/app/views/layouts/_flashes.html.erb +86 -0
  583. data/test/dummy/app/views/layouts/_footer.html.erb +17 -0
  584. data/test/dummy/app/views/layouts/_header.html.erb +23 -0
  585. data/test/dummy/app/views/layouts/admin.html.erb +94 -0
  586. data/test/dummy/app/views/layouts/application.html.erb +25 -0
  587. data/test/dummy/app/views/login/index.html.erb +32 -0
  588. data/test/dummy/app/views/login/register.html.erb +61 -0
  589. data/{config.ru → test/dummy/config.ru} +1 -1
  590. data/test/dummy/config/application.rb +47 -0
  591. data/test/dummy/config/boot.rb +10 -0
  592. data/test/dummy/config/database.yml +25 -0
  593. data/test/dummy/config/environment.rb +5 -0
  594. data/{config → test/dummy/config}/environments/development.rb +8 -3
  595. data/test/dummy/config/environments/production.rb +60 -0
  596. data/{config → test/dummy/config}/environments/test.rb +9 -2
  597. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  598. data/test/dummy/config/initializers/inflections.rb +10 -0
  599. data/test/dummy/config/initializers/mime_types.rb +5 -0
  600. data/test/dummy/config/initializers/secret_token.rb +7 -0
  601. data/test/dummy/config/initializers/session_store.rb +8 -0
  602. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  603. data/test/dummy/config/locales/en.yml +5 -0
  604. data/test/dummy/config/routes.rb +16 -0
  605. data/test/dummy/config/tr8n/config.yml +247 -0
  606. data/test/dummy/config/tr8n/data/ip_locations.csv +93460 -0
  607. data/test/dummy/config/tr8n/rules/default_cases.yml +141 -0
  608. data/test/dummy/config/tr8n/rules/default_date_rules.yml +20 -0
  609. data/test/dummy/config/tr8n/rules/default_gender_list_rules.yml +82 -0
  610. data/test/dummy/config/tr8n/rules/default_gender_rules.yml +20 -0
  611. data/test/dummy/config/tr8n/rules/default_list_rules.yml +19 -0
  612. data/test/dummy/config/tr8n/rules/default_numeric_rules.yml +42 -0
  613. data/test/dummy/config/tr8n/rules/default_value_rules.yml +18 -0
  614. data/test/dummy/config/tr8n/site/default_glossary.yml +18 -0
  615. data/test/dummy/config/tr8n/site/default_languages.yml +1591 -0
  616. data/test/dummy/config/tr8n/site/features.yml +111 -0
  617. data/test/dummy/config/tr8n/site/shortcuts.yml +55 -0
  618. data/test/dummy/config/tr8n/site/sitemap.json +42 -0
  619. data/test/dummy/config/tr8n/tokens/data.yml +19 -0
  620. data/test/dummy/config/tr8n/tokens/decorations.yml +16 -0
  621. data/{config → test/dummy/config}/will_filter/config.yml +0 -0
  622. data/test/dummy/db/migrate/20101207014543_create_users.rb +23 -0
  623. data/test/dummy/db/migrate/20110113223509_create_admins.rb +15 -0
  624. data/test/dummy/db/migrate/20110930041143_create_will_filter_filters.rb +15 -0
  625. data/test/dummy/db/migrate/20110930041150_create_tr8n_tables.rb +350 -0
  626. data/test/dummy/db/schema.rb +398 -0
  627. data/test/dummy/lib/assets/.gitkeep +0 -0
  628. data/test/dummy/log/.gitkeep +0 -0
  629. data/{public → test/dummy/public}/404.html +0 -0
  630. data/{public → test/dummy/public}/422.html +0 -0
  631. data/{public → test/dummy/public}/500.html +0 -0
  632. data/test/dummy/public/favicon.ico +0 -0
  633. data/test/dummy/script/rails +6 -0
  634. data/test/dummy/test/functional/home_controller_test.rb +9 -0
  635. data/test/dummy/test/unit/helpers/home_helper_test.rb +4 -0
  636. data/test/integration/navigation_test.rb +10 -0
  637. data/test/test_helper.rb +7 -10
  638. data/test/tr8n_test.rb +7 -0
  639. data/tr8n.gemspec +33 -34
  640. metadata +772 -536
  641. data/.project +0 -18
  642. data/LICENSE +0 -18
  643. data/VERSION +0 -1
  644. data/app/views/tr8n/help/basic_information.html.erb +0 -13
  645. data/app/views/tr8n/help/context_rules.html.erb +0 -13
  646. data/app/views/tr8n/help/direction.html.erb +0 -13
  647. data/app/views/tr8n/help/enter_translation.html.erb +0 -13
  648. data/app/views/tr8n/help/fallback_language.html.erb +0 -13
  649. data/app/views/tr8n/help/generate_context_rules.html.erb +0 -17
  650. data/app/views/tr8n/help/inline_translations.html.erb +0 -28
  651. data/app/views/tr8n/help/language_dashboard.html.erb +0 -21
  652. data/app/views/tr8n/help/language_phrases.html.erb +0 -17
  653. data/app/views/tr8n/help/language_statistics.html.erb +0 -13
  654. data/app/views/tr8n/help/manage.html.erb +0 -13
  655. data/app/views/tr8n/help/manage_language.html.erb +0 -13
  656. data/app/views/tr8n/help/native_name.html.erb +0 -13
  657. data/app/views/tr8n/help/original_phrase.html.erb +0 -13
  658. data/app/views/tr8n/help/other_languages.html.erb +0 -15
  659. data/app/views/tr8n/help/other_translatable_resources.html.erb +0 -13
  660. data/app/views/tr8n/help/phrases_with_translations.html.erb +0 -21
  661. data/app/views/tr8n/help/phrases_without_translations.html.erb +0 -15
  662. data/app/views/tr8n/help/prohibited_words.html.erb +0 -13
  663. data/app/views/tr8n/help/rank.html.erb +0 -13
  664. data/app/views/tr8n/help/recent_discussions.html.erb +0 -13
  665. data/app/views/tr8n/help/recent_translation_votes.html.erb +0 -13
  666. data/app/views/tr8n/help/recent_translations.html.erb +0 -13
  667. data/app/views/tr8n/help/site_sections.html.erb +0 -13
  668. data/app/views/tr8n/help/suggested_translation.html.erb +0 -13
  669. data/app/views/tr8n/help/translating_inline.html.erb +0 -30
  670. data/app/views/tr8n/help/translation_context_rules.html.erb +0 -16
  671. data/app/views/tr8n/help/translation_tokens.html.erb +0 -13
  672. data/app/views/tr8n/help/translation_tools.html.erb +0 -13
  673. data/app/views/tr8n/help/user_rank.html.erb +0 -13
  674. data/app/views/tr8n/help/using_translation_tools.html.erb +0 -13
  675. data/app/views/tr8n/help/your_dashboard.html.erb +0 -17
  676. data/app/views/tr8n/help/your_languages.html.erb +0 -19
  677. data/app/views/tr8n/help/your_translations.html.erb +0 -17
  678. data/config/application.rb +0 -65
  679. data/config/boot.rb +0 -6
  680. data/config/database.yml +0 -13
  681. data/config/environment.rb +0 -46
  682. data/db/extras/20100511185330_create_test_users.rb +0 -43
  683. data/db/migrate/20090730070119_create_will_filter_tables.rb +0 -19
  684. data/db/seeds.rb +0 -7
  685. data/lib/application_helper.rb +0 -390
  686. data/lib/tr8n/controller_methods.rb +0 -156
  687. data/public/robots.txt +0 -5
  688. data/public/tr8n/images/flags/.DS_Store +0 -0
  689. data/rails/init.rb +0 -53
  690. data/test/performance/browsing_test.rb +0 -9
@@ -28,23 +28,20 @@ class Tr8n::PhrasesController < Tr8n::BaseController
28
28
  before_filter :init_sitemap_section, :except => [:translate, :vote]
29
29
 
30
30
  def index
31
- conditions = Tr8n::TranslationKey.search_conditions_for(params)
31
+ @translation_keys = Tr8n::TranslationKey.for_params(params)
32
32
 
33
33
  unless params[:section_key].blank?
34
34
  source_names = sitemap_sources_for(@section_key)
35
- sources = Tr8n::TranslationSource.find(:all, :conditions => ["source in (?)", source_names])
36
- source_ids = sources.collect{|source| source.id}
35
+ source_ids = Tr8n::TranslationSource.where("source in (?)", source_names).collect{|source| source.id}
37
36
 
38
37
  if source_ids.empty?
39
- conditions = ["1=2"]
38
+ @translation_keys = @translation_keys.where("1=2")
40
39
  else
41
- conditions[0] << " and " unless conditions[0].blank?
42
- conditions[0] << "(id in (select distinct(translation_key_id) from tr8n_translation_key_sources where translation_source_id in (?)))"
43
- conditions << source_ids.uniq
40
+ @translation_keys = @translation_keys.where("(id in (select distinct(translation_key_id) from tr8n_translation_key_sources where translation_source_id in (?)))", source_ids.uniq)
44
41
  end
45
42
  end
46
43
 
47
- @translation_keys = Tr8n::TranslationKey.paginate(:per_page => per_page, :page => page, :conditions => conditions, :order => "label asc")
44
+ @translation_keys = @translation_keys.order("label asc").page(page).per(per_page)
48
45
  end
49
46
 
50
47
  def view
@@ -62,17 +59,10 @@ class Tr8n::PhrasesController < Tr8n::BaseController
62
59
  @translation = Tr8n::Translation.new(:translation_key => @translation_key, :language => tr8n_current_language, :translator => tr8n_current_translator)
63
60
  @rules = {}
64
61
 
65
- conditions = Tr8n::Translation.search_conditions_for(params)
66
-
67
- conditions[0] << " and " unless conditions[0].blank?
68
- conditions[0] << "tr8n_translations.language_id = ? and tr8n_translations.translation_key_id = ?"
69
- conditions << tr8n_current_language.id
70
- conditions << @translation_key.id
71
-
72
- @translations = Tr8n::Translation.find(:all, :conditions => conditions, :order => "rank desc, created_at desc")
73
- @comments = Tr8n::TranslationKeyComment.paginate(:page => page, :per_page => per_page,
74
- :conditions => ["language_id = ? and translation_key_id = ?", tr8n_current_language.id, @translation_key.id],
75
- :order => "created_at desc")
62
+ @translations = Tr8n::Translation.for_params(params)
63
+ @translations = @translations.where("tr8n_translations.language_id = ? and tr8n_translations.translation_key_id = ?", tr8n_current_language.id, @translation_key.id)
64
+ @translations = @translations.order("rank desc, created_at desc")
65
+ @comments = Tr8n::TranslationKeyComment.where("language_id = ? and translation_key_id = ?", tr8n_current_language.id, @translation_key.id).order("created_at desc").page(page).per(per_page)
76
66
 
77
67
  @grouping = {}
78
68
  if params[:grouped_by] != "nothing"
@@ -119,8 +119,7 @@ class Tr8n::TranslationsController < Tr8n::BaseController
119
119
 
120
120
  # list of translations
121
121
  def index
122
- conditions = Tr8n::Translation.search_conditions_for(params)
123
- @translations = Tr8n::Translation.paginate(:per_page => per_page, :page => page, :conditions => conditions, :order => "created_at desc, rank desc")
122
+ @translations = Tr8n::Translation.for_params(params).order("created_at desc, rank desc").page(page).per(per_page)
124
123
  end
125
124
 
126
125
  # ajax based method for updating individual translations
@@ -24,7 +24,7 @@
24
24
  module Tr8n::Admin::BaseHelper
25
25
 
26
26
  def tr8n_will_filter(results)
27
- will_filter(results)
27
+ will_filter_tag(results)
28
28
  end
29
29
 
30
30
  def tr8n_will_paginate(collection = nil, options = {})
@@ -21,6 +21,7 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- module ApplicationHelper
25
-
24
+ module Tr8n
25
+ module ApplicationHelper
26
+ end
26
27
  end
@@ -40,5 +40,9 @@ module Tr8n::BaseHelper
40
40
  def trla(label, desc = "", tokens = {}, options = {})
41
41
  tra(label, desc, tokens, options.merge(:skip_decorations => true))
42
42
  end
43
-
43
+
44
+ def tr8n_paginator_tag(results, subject)
45
+ render :partial => "/tr8n/common/paginator", :locals => {:objects => results, :subject => subject}
46
+ end
47
+
44
48
  end
@@ -23,6 +23,7 @@
23
23
 
24
24
  class Tr8n::Language < ActiveRecord::Base
25
25
  set_table_name :tr8n_languages
26
+
26
27
  after_save :clear_cache
27
28
  after_destroy :clear_cache
28
29
 
@@ -24,7 +24,7 @@
24
24
  class Tr8n::LanguageCaseFilter < Tr8n::BaseFilter
25
25
 
26
26
  def inner_joins
27
- [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
27
+ [:language, :translator]
28
28
  end
29
29
 
30
30
  end
@@ -24,7 +24,7 @@
24
24
  class Tr8n::LanguageCaseRuleFilter < Tr8n::BaseFilter
25
25
 
26
26
  def inner_joins
27
- [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
27
+ [:language, :translator]
28
28
  end
29
29
 
30
30
  end
@@ -38,4 +38,8 @@ class Tr8n::LanguageCaseValueMapFilter < Tr8n::BaseFilter
38
38
  return []
39
39
  end
40
40
 
41
+ def inner_joins
42
+ [:language, :translator]
43
+ end
44
+
41
45
  end
@@ -27,4 +27,8 @@ class Tr8n::LanguageForumAbuseReportFilter < Tr8n::BaseFilter
27
27
  [["Tr8n::Language", :language_id], ["Tr8n::LanguageForumMessage", :language_forum_message_id], ["Tr8n::Translator", :translator_id]]
28
28
  end
29
29
 
30
+ def inner_joins
31
+ [:language, :language_forum_message, :translator]
32
+ end
33
+
30
34
  end
@@ -31,4 +31,8 @@ class Tr8n::LanguageForumMessageFilter < Tr8n::BaseFilter
31
31
  "created_today"
32
32
  end
33
33
 
34
+ def inner_joins
35
+ [:language, :language_forum_topic, :translator]
36
+ end
37
+
34
38
  end
@@ -31,4 +31,8 @@ class Tr8n::LanguageForumTopicFilter < Tr8n::BaseFilter
31
31
  "created_today"
32
32
  end
33
33
 
34
+ def inner_joins
35
+ [:language, :translator]
36
+ end
37
+
34
38
  end
@@ -47,7 +47,7 @@ class Tr8n::LanguageMetric < ActiveRecord::Base
47
47
 
48
48
  def self.calculate_language_metrics
49
49
  last_daily_metric = Tr8n::DailyLanguageMetric.find(:first, :conditions => "metric_date is not null", :order => "metric_date desc")
50
- metric_date = last_daily_metric.nil? ? Date.new(2010, 5, 1) : last_daily_metric.metric_date
50
+ metric_date = last_daily_metric.nil? ? Date.new(2011, 10, 1) : last_daily_metric.metric_date
51
51
 
52
52
  Tr8n::Language.enabled_languages.each do |lang|
53
53
  Tr8n::Logger.debug("Processing #{lang.english_name} language...")
@@ -60,4 +60,8 @@ class Tr8n::LanguageMetricFilter < Tr8n::BaseFilter
60
60
  end
61
61
  end
62
62
 
63
+ def inner_joins
64
+ [:language]
65
+ end
66
+
63
67
  end
@@ -23,9 +23,9 @@
23
23
 
24
24
  class Tr8n::LanguageRuleFilter < Tr8n::BaseFilter
25
25
 
26
- def inner_joins
27
- [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
28
- end
26
+ # def inner_joins
27
+ # [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
28
+ # end
29
29
 
30
30
  def definition
31
31
  defs = super
@@ -42,4 +42,8 @@ class Tr8n::LanguageRuleFilter < Tr8n::BaseFilter
42
42
  return super
43
43
  end
44
44
 
45
+ def inner_joins
46
+ [:language, :translator]
47
+ end
48
+
45
49
  end
@@ -23,12 +23,12 @@
23
23
 
24
24
  class Tr8n::LanguageUserFilter < Tr8n::BaseFilter
25
25
 
26
- def inner_joins
27
- [["Tr8n::Language", :language_id], ["Tr8n::Translator", :translator_id]]
28
- end
29
-
30
26
  def default_filter_if_empty
31
27
  "created_today"
32
28
  end
33
29
 
30
+ def inner_joins
31
+ [:language, :translator]
32
+ end
33
+
34
34
  end
@@ -246,54 +246,33 @@ class Tr8n::Translation < ActiveRecord::Base
246
246
  ["date", "date"]].collect{|option| [option.first.trl("Translation filter group by option"), option.last]}
247
247
  end
248
248
 
249
- def self.search_conditions_for(params, language = Tr8n::Config.current_language)
250
- conditions = ["language_id = ?", language.id]
251
-
252
- unless params[:search].blank?
253
- conditions[0] << " and " unless conditions[0].blank?
254
- conditions[0] << "label like ?"
255
- conditions << "%#{params[:search]}%"
256
- end
257
-
249
+ def self.for_params(params, language = Tr8n::Config.current_language)
250
+ results = self.where("language_id = ?", language.id)
251
+ results = results.where("label like ?", "%#{params[:search]}%") unless params[:search].blank?
252
+
258
253
  if params[:with_status] == "accepted"
259
- conditions[0] << " and " unless conditions[0].blank?
260
- conditions[0] << " rank >= ? "
261
- conditions << Tr8n::Config.translation_threshold
254
+ results = results.where("rank >= ?", Tr8n::Config.translation_threshold)
262
255
  elsif params[:with_status] == "pending"
263
- conditions[0] << " and " unless conditions[0].blank?
264
- conditions[0] << " rank >= 0 and rank < ? "
265
- conditions << Tr8n::Config.translation_threshold
256
+ results = results.where("rank >= 0 and rank < ?", Tr8n::Config.translation_threshold)
266
257
  elsif params[:with_status] == "rejected"
267
- conditions[0] << " and " unless conditions[0].blank?
268
- conditions[0] << " rank < 0 "
258
+ results = results.where("rank < 0")
269
259
  end
270
260
 
271
261
  if params[:submitted_by] == "me"
272
- conditions[0] << " and " unless conditions[0].blank?
273
- conditions[0] << " translator_id = ? "
274
- conditions << Tr8n::Config.current_translator.id
262
+ results = results.where("translator_id = ?", Tr8n::Config.current_translator.id)
275
263
  end
276
264
 
277
265
  if params[:submitted_on] == "today"
278
266
  date = Date.today
279
- conditions[0] << " and " unless conditions[0].blank?
280
- conditions[0] << "created_at >= ? and created_at < ?"
281
- conditions << date
282
- conditions << (date + 1.day)
267
+ results = results.where("created_at >= ? and created_at < ?", date, date + 1.day)
283
268
  elsif params[:submitted_on] == "yesterday"
284
269
  date = Date.today - 1.days
285
- conditions[0] << " and " unless conditions[0].blank?
286
- conditions[0] << "created_at >= ? and created_at < ?"
287
- conditions << date
288
- conditions << (date + 1.day)
270
+ results = results.where("created_at >= ? and created_at < ?", date, date + 1.day)
289
271
  elsif params[:submitted_on] == "last_week"
290
272
  date = Date.today - 7.days
291
- conditions[0] << " and " unless conditions[0].blank?
292
- conditions[0] << "created_at >= ? and created_at < ?"
293
- conditions << date
294
- conditions << Date.today
273
+ results = results.where("created_at >= ? and created_at < ?", date, Date.today)
295
274
  end
296
- conditions
275
+ results
297
276
  end
298
277
 
299
278
  end
@@ -23,12 +23,12 @@
23
23
 
24
24
  class Tr8n::TranslationFilter < Tr8n::BaseFilter
25
25
 
26
- def inner_joins
27
- [["Tr8n::Language", :language_id], ["Tr8n::TranslationKey", :translation_key_id]]
28
- end
29
-
30
26
  def default_filter_if_empty
31
27
  "created_today"
32
28
  end
33
29
 
30
+ def inner_joins
31
+ [:language, :translation_key]
32
+ end
33
+
34
34
  end
@@ -42,11 +42,10 @@ class Tr8n::TranslationKey < ActiveRecord::Base
42
42
  alias :comments :translation_key_comments
43
43
 
44
44
  def self.find_or_create(label, desc = "", options = {})
45
- key = generate_key(label, desc)
45
+ key = generate_key(label, desc).to_s
46
46
 
47
- # translation keys don't ever change, so no real reason to invalidate them
48
47
  tkey = Tr8n::Cache.fetch("translation_key_#{key}") do
49
- existing_key = find_by_key(key)
48
+ existing_key = where(:key => key).first
50
49
 
51
50
  unless existing_key
52
51
  if options[:api] and (not Tr8n::Config.api[:allow_key_registration])
@@ -63,7 +62,7 @@ class Tr8n::TranslationKey < ActiveRecord::Base
63
62
  locale = options[:locale] || Tr8n::Config.block_options[:default_locale] || Tr8n::Config.default_locale
64
63
 
65
64
  existing_key ||= begin
66
- new_tkey = create(:key => key,
65
+ new_tkey = create(:key => key.to_s,
67
66
  :label => label,
68
67
  :description => desc,
69
68
  :locale => locale,
@@ -81,9 +80,7 @@ class Tr8n::TranslationKey < ActiveRecord::Base
81
80
  update_default_locale(existing_key, options)
82
81
 
83
82
  # mark each key as verified - but only if caching is enabled
84
- if Tr8n::Config.enable_caching?
85
- existing_key.update_attributes(:verified_at => Time.now)
86
- end
83
+ existing_key.update_attributes(:verified_at => Time.now) if Tr8n::Config.enable_caching?
87
84
  existing_key
88
85
  end
89
86
 
@@ -125,15 +122,15 @@ class Tr8n::TranslationKey < ActiveRecord::Base
125
122
  end
126
123
 
127
124
  def self.generate_key(label, desc = "")
128
- Digest::MD5.hexdigest("#{label};;;#{desc}")
125
+ # TODO: there is something iffy going on with the strings from the hash
126
+ # without the extra ~ = the strings are not seen in the sqlite database - wtf?
127
+ "#{Digest::MD5.hexdigest("#{label};;;#{desc}")}~"[0..-2]
129
128
  end
130
129
 
131
130
  def reset_key!
132
131
  # remove old key from cache
133
132
  Tr8n::Cache.delete("translation_key_#{key}")
134
-
135
- self.key = self.class.generate_key(label, description)
136
- save
133
+ self.update_attributes(:key => self.class.generate_key(label, description))
137
134
  end
138
135
 
139
136
  def language
@@ -143,18 +140,18 @@ class Tr8n::TranslationKey < ActiveRecord::Base
143
140
  def tokenized_label
144
141
  @tokenized_label ||= Tr8n::TokenizedLabel.new(label)
145
142
  end
146
-
147
- # comments are left for a specific language
148
- def comments(language = Tr8n::Config.current_language)
149
- Tr8n::TranslationKeyComment.find(:all, :conditions => ["language_id = ? and translation_key_id = ?", language.id, self.id])
150
- end
151
-
143
+
152
144
  delegate :tokens, :tokens?, :to => :tokenized_label
153
145
  delegate :data_tokens, :data_tokens?, :to => :tokenized_label
154
146
  delegate :decoration_tokens, :decoration_tokens?, :to => :tokenized_label
155
147
  delegate :translation_tokens, :translation_tokens?, :to => :tokenized_label
156
148
  delegate :sanitized_label, :tokenless_label, :suggestion_tokens, :words, :to => :tokenized_label
157
149
 
150
+ # comments are left for a specific language
151
+ def comments(language = Tr8n::Config.current_language)
152
+ Tr8n::TranslationKeyComment.where("language_id = ? and translation_key_id = ?", language.id, self.id)
153
+ end
154
+
158
155
  # returns only the tokens that depend on one or more rules of the language, if any defined for the language
159
156
  def language_rules_dependant_tokens(language = Tr8n::Config.current_language)
160
157
  toks = []
@@ -182,7 +179,7 @@ class Tr8n::TranslationKey < ActiveRecord::Base
182
179
  end
183
180
 
184
181
  def glossary
185
- @glossary ||= Tr8n::Glossary.find(:all, :conditions => ["keyword in (?)", words], :order => "keyword asc")
182
+ @glossary ||= Tr8n::Glossary.where("keyword in (?)", words).order("keyword asc")
186
183
  end
187
184
 
188
185
  def glossary?
@@ -230,14 +227,9 @@ class Tr8n::TranslationKey < ActiveRecord::Base
230
227
 
231
228
  # returns all translations for the key, language and minimal rank
232
229
  def translations_for(language, rank = nil)
233
- conditions = ["translation_key_id = ? and language_id = ?", self.id, language.id]
234
-
235
- if rank
236
- conditions[0] << " and rank >= ?"
237
- conditions << rank
238
- end
239
-
240
- Tr8n::Translation.find(:all, :conditions => conditions, :order => "rank desc")
230
+ translations = Tr8n::Translation.where("translation_key_id = ? and language_id = ?", self.id, language.id)
231
+ translations = translations.where("rank >= ?", rank) if rank
232
+ translations.order("rank desc")
241
233
  end
242
234
 
243
235
  # used by the inline popup dialog, we don't want to show blocked translations
@@ -247,7 +239,7 @@ class Tr8n::TranslationKey < ActiveRecord::Base
247
239
 
248
240
  # returns only the translations that meet the minimum rank
249
241
  def valid_translations_for(language)
250
- Tr8n::Cache.fetch("translations_#{language.locale}_#{self.key}") do
242
+ Tr8n::Cache.fetch("translations_#{language.locale}_#{key}") do
251
243
  translations_for(language, Tr8n::Config.translation_threshold)
252
244
  end
253
245
  end
@@ -304,7 +296,7 @@ class Tr8n::TranslationKey < ActiveRecord::Base
304
296
  end
305
297
 
306
298
  def self.random
307
- find(:first, :offset => rand(count - 1))
299
+ self.limit(1).offset(count-1)
308
300
  end
309
301
 
310
302
  # returns back grouped by context - used by API
@@ -567,59 +559,44 @@ class Tr8n::TranslationKey < ActiveRecord::Base
567
559
  ["unlocked only", "unlocked"]]
568
560
  end
569
561
 
570
- def self.search_conditions_for(params)
571
- conditions = ["tr8n_translation_keys.locale <> ? and (level is null or level <= ?)", Tr8n::Config.current_language.locale, Tr8n::Config.current_translator.level]
562
+ def self.for_params(params)
563
+ results = self.where("tr8n_translation_keys.locale <> ? and (level is null or level <= ?)", Tr8n::Config.current_language.locale, Tr8n::Config.current_translator.level)
572
564
 
573
565
  if Tr8n::Config.enable_caching?
574
- conditions[0] << " and verified_at is not null"
566
+ results = results.where("verified_at is not null")
575
567
  end
576
568
 
577
569
  unless params[:search].blank?
578
- conditions[0] << " and (tr8n_translation_keys.label like ? or tr8n_translation_keys.description like ?)"
579
- conditions << "%#{params[:search]}%"
580
- conditions << "%#{params[:search]}%"
570
+ results = results.where("(tr8n_translation_keys.label like ? or tr8n_translation_keys.description like ?)", "%#{params[:search]}%", "%#{params[:search]}%")
581
571
  end
582
572
 
583
573
  # for with and approved, allow user to specify the kinds
584
574
  if params[:phrase_type] == "with"
585
- conditions[0] << " and tr8n_translation_keys.id in (select tr8n_translations.translation_key_id from tr8n_translations where tr8n_translations.language_id = ?) "
586
- conditions << Tr8n::Config.current_language.id
575
+ results = results.where("tr8n_translation_keys.id in (select tr8n_translations.translation_key_id from tr8n_translations where tr8n_translations.language_id = ?)", Tr8n::Config.current_language.id)
587
576
 
588
577
  # if approved, ensure that translation key is locked
589
578
  if params[:phrase_status] == "approved"
590
- conditions[0] << " and tr8n_translation_keys.id in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?) "
591
- conditions << Tr8n::Config.current_language.id
592
- conditions << true
579
+ results = results.where("tr8n_translation_keys.id in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?)", Tr8n::Config.current_language.id, true)
593
580
 
594
581
  # if approved, ensure that translation key does not have a lock or unlocked
595
582
  elsif params[:phrase_status] == "pending"
596
- conditions[0] << " and tr8n_translation_keys.id not in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?) "
597
- conditions << Tr8n::Config.current_language.id
598
- conditions << true
583
+ results = results.where("tr8n_translation_keys.id not in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?)", Tr8n::Config.current_language.id, true)
599
584
  end
600
585
 
601
586
  elsif params[:phrase_type] == "without"
602
- conditions[0] << " and tr8n_translation_keys.id not in (select tr8n_translations.translation_key_id from tr8n_translations where tr8n_translations.language_id = ?)"
603
- conditions << Tr8n::Config.current_language.id
587
+ results = results.where("tr8n_translation_keys.id not in (select tr8n_translations.translation_key_id from tr8n_translations where tr8n_translations.language_id = ?)", Tr8n::Config.current_language.id)
604
588
 
605
589
  elsif params[:phrase_type] == "followed"
606
- conditions[0] << " and tr8n_translation_keys.id in (select tr8n_translator_following.object_id from tr8n_translator_following where tr8n_translator_following.translator_id = ? and tr8n_translator_following.object_type = ?)"
607
-
608
- conditions << Tr8n::Config.current_translator.id
609
- conditions << 'Tr8n::TranslationKey'
590
+ results = results.where("tr8n_translation_keys.id in (select tr8n_translator_following.object_id from tr8n_translator_following where tr8n_translator_following.translator_id = ? and tr8n_translator_following.object_type = ?)", Tr8n::Config.current_translator.id, 'Tr8n::TranslationKey')
610
591
  end
611
592
 
612
593
  if params[:phrase_lock] == "locked"
613
- conditions[0] << " and tr8n_translation_keys.id in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?) "
614
- conditions << Tr8n::Config.current_language.id
615
- conditions << true
594
+ results = results.where("tr8n_translation_keys.id in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?)", Tr8n::Config.current_language.id, true)
616
595
 
617
596
  elsif params[:phrase_lock] == "unlocked"
618
- conditions[0] << " and tr8n_translation_keys.id not in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?) "
619
- conditions << Tr8n::Config.current_language.id
620
- conditions << true
597
+ results = results.where("tr8n_translation_keys.id not in (select tr8n_translation_key_locks.translation_key_id from tr8n_translation_key_locks where tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ?)", Tr8n::Config.current_language.id, true)
621
598
  end
622
599
 
623
- conditions
600
+ results
624
601
  end
625
602
  end