tr8n 3.0.5 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,7 +1,7 @@
1
1
  <%= tr8n_with_options_tag(:default_locale => 'en-US', :admin => true) do %>
2
2
  <%= render :partial => "/tr8n/common/header" %>
3
3
 
4
- <div class="section_box" style="margin-bottom:10px; background-color:#EFF8FF; margin-top:0px;">
4
+ <div class="section blue">
5
5
  <%= form_tag({}, {:method => :get, :id => "translations_search_form"}) do %>
6
6
  <%=hidden_field_tag(:section_key, @section_key) %>
7
7
  <div style="float:right">
@@ -22,7 +22,7 @@
22
22
  <% end %>
23
23
  </div>
24
24
 
25
- <div class="section_box">
25
+ <div class="section">
26
26
  <%= render :partial => "list", :locals => {:language => tr8n_current_language, :translations => @translations, :mode => :list} %>
27
27
  </div>
28
28
 
@@ -2,7 +2,7 @@
2
2
  <%=render(:partial => "header", :locals => {:section => "basic_info", :label => "Translator Details", :description => "Translator details section title", :mode => mode})%>
3
3
 
4
4
  <%= form_for(tr8n_current_translator, :as => :translator, :url => {:action => :index}, :html => {:id => 'basic_info_form', :method => :post}) do |f| %>
5
- <div class="section_box colored">
5
+ <div class="section grey">
6
6
  <div style="float:right; padding-right:5px;">
7
7
  <%=tr8n_help_icon_tag %>
8
8
  </div>
@@ -1,10 +1,10 @@
1
1
  <div class="section_title">
2
2
  <div style="float:right;">
3
3
  <% if mode == :view %>
4
- <%=link_to_function(image_tag("/tr8n/images/table_edit.png"), "switchSectionMode('#{section}', 'edit')") %>
4
+ <%=link_to_function(image_tag("tr8n/table_edit.png"), "switchSectionMode('#{section}', 'edit')") %>
5
5
  <% else %>
6
- <%=link_to_function(image_tag("/tr8n/images/disk.png"), "submitSection('#{section}')")%>
7
- <%=link_to_function(image_tag("/tr8n/images/cancel.png"), "switchSectionMode('#{section}', 'view')")%>
6
+ <%=link_to_function(image_tag("tr8n/disk.png"), "submitSection('#{section}')")%>
7
+ <%=link_to_function(image_tag("tr8n/cancel.png"), "switchSectionMode('#{section}', 'view')")%>
8
8
  <% end %>
9
9
  </div>
10
10
 
@@ -1,7 +1,7 @@
1
1
  <% color = @reported_object.key.locked? ? "#ECFFEF" : "#FDFDDF" %>
2
2
  <div style="font-size: 11px; color: grey; margin-top:5px; margin-bottom:5px; padding:3px; background:<%=color%>; border:1px dotted #ccc;">
3
3
  <% if @reported_object.key.locked? %>
4
- <div style="float:right"><%=image_tag("/tr8n/images/lock.png", :style=>"width:12px", :title => trl("This phrase is locked"))%></div>
4
+ <div style="float:right"><%=image_tag("tr8n/lock.png", :style=>"width:12px", :title => trl("This phrase is locked"))%></div>
5
5
  <% end %>
6
6
 
7
7
  <%=trl("Original Phrase:", "Translation section header")%>
@@ -1,5 +1,3 @@
1
- <%= tr8n_with_options_tag(:default_locale => 'en-US', :admin => true) do %>
2
-
3
1
  <style>
4
2
  .lightbox {
5
3
  background-color: white;
@@ -14,7 +12,6 @@
14
12
  text-align: center;
15
13
  }
16
14
  .content {
17
- border: 1px dotted #ccc;
18
15
  background-color: #f8f7f6;
19
16
  padding-bottom: 10px;
20
17
  }
@@ -22,92 +19,104 @@
22
19
  vertical-align: top;
23
20
  padding: 5px;
24
21
  }
22
+ .header {
23
+ padding:10px;
24
+ background-color:#eff8ff;
25
+ border: 1px solid #ccc;
26
+ margin-bottom: 5px;
27
+ border-radius:10px;
28
+ }
29
+ .section {
30
+ padding:10px;
31
+ border-radius:10px;
32
+ }
25
33
  </style>
26
34
 
27
- <div class="lightbox">
28
-
29
- <% if @reported_object.is_a?(Tr8n::TranslationKey) %>
30
- <% @translation_key = @reported_object %>
31
- <%= render :partial => '/tr8n/phrases/header' %>
35
+ <div class="inner">
36
+ <div class="hd" style="">
37
+ <% if @reported_object.is_a?(Tr8n::TranslationKey) %>
38
+ <% @translation_key = @reported_object %>
39
+ <%= render :partial => '/tr8n/phrases/header' %>
32
40
  <% elsif @reported_object.is_a?(Tr8n::LanguageForumMessage) %>
33
- <div style="padding:10px; background-color:#eff8ff; border: 1px solid #ccc; margin-bottom: 5px;">
41
+ <div class="header">
34
42
  <div style="color:grey;font-size:20px;padding-bottom:10px;">
35
43
  <%=trl("Forum Message")%>
36
44
  </div>
37
45
  <div style="padding-bottom:5px;font-size:14px; max-height:50px; overflow:auto;">
38
- <%=image_tag("/tr8n/images/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
46
+ <%=image_tag("tr8n/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
39
47
  <%=@reported_object.toHTML %>
40
- <%=image_tag("/tr8n/images/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
48
+ <%=image_tag("tr8n/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
41
49
  </div>
42
- </div>
50
+ </div>
43
51
  <% elsif @reported_object.is_a?(Tr8n::TranslationKeyComment) %>
44
- <div style="padding:10px; background-color:#eff8ff; border: 1px solid #ccc; margin-bottom: 5px;">
52
+ <div class="header">
45
53
  <div style="color:grey;font-size:20px;padding-bottom:10px;">
46
54
  <%=trl("Translation Key Comment")%>
47
55
  </div>
48
56
  <div style="padding-bottom:5px;font-size:14px; max-height:50px; overflow:auto;">
49
- <%=image_tag("/tr8n/images/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
57
+ <%=image_tag("tr8n/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
50
58
  <%=@reported_object.toHTML %>
51
- <%=image_tag("/tr8n/images/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
59
+ <%=image_tag("tr8n/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
52
60
  </div>
53
61
  </div>
54
- <% elsif @reported_object.is_a?(Tr8n::Translation) %>
55
- <div style="padding:10px; background-color:#eff8ff; border: 1px solid #ccc; margin-bottom: 5px;">
56
- <div style="color:grey;font-size:20px;padding-bottom:10px;">
57
- <%=trl("Translation in {language}", nil, :language => @reported_object.language.native_name)%>
58
- </div>
59
-
60
- <div style="padding-bottom:5px;font-size:14px">
61
- <%=image_tag("/tr8n/images/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
62
- <%=h @reported_object.label %>
63
- <%=image_tag("/tr8n/images/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
64
- </div>
65
-
66
- <% if @reported_object.context %>
67
- <div style="font-size: 11px; color: grey; padding:3px;">
68
- <%=trl("Context:")%> <%= @reported_object.context %>
69
- </div>
70
- <% end %>
62
+ <% elsif @reported_object.is_a?(Tr8n::Translation) %>
63
+ <div class="header">
64
+ <div style="color:grey;font-size:20px;padding-bottom:10px;">
65
+ <%=trl("Translation in {language}", nil, :language => @reported_object.language.native_name)%>
66
+ </div>
67
+
68
+ <div style="padding-bottom:5px;font-size:14px">
69
+ <%=image_tag("tr8n/left_quote.png", :style=>"text-align:bottom;padding-bottom:5px;") %>
70
+ <%=h @reported_object.label %>
71
+ <%=image_tag("tr8n/right_quote.png", :style=>"text-align:bottom;padding-top:5px;") %>
72
+ </div>
73
+
74
+ <% if @reported_object.context %>
75
+ <div style="font-size: 11px; color: grey; padding:3px;">
76
+ <%=trl("Context:")%> <%= @reported_object.context %>
77
+ </div>
78
+ <% end %>
71
79
 
72
- <%=render :partial => 'header_key_report'%>
73
- </div>
74
- <% end %>
75
-
76
- <%= form_tag({:action => :submit_report}, {:method => :post, :id => :tr8n_form}) do %>
77
- <%= hidden_field_tag :source_url, request.env['HTTP_REFERER'] %>
78
- <%= hidden_field_tag(:object_id, @reported_object.id) %>
79
- <%= hidden_field_tag(:object_type, @reported_object.class.name) %>
80
- <div class="content">
81
- <div class="title">
82
- <%= trl("Report Details")%>
83
- </div>
84
- <table>
85
- <tr>
86
- <td>
87
- <%= trl("Reason:")%>
88
- </td>
89
- <td>
90
- <%= select_tag("reason", tr8n_options_for_select(Tr8n::TranslatorReport.default_reasons_for(@reported_object), '')) %>
91
- </td>
92
- </tr>
93
- <tr>
94
- <td>
95
- <%= trl("Comment:")%>
96
- <div style="color:#ccc;">
97
- <%= trl("optional")%>
98
- </div>
99
- </td>
100
- <td>
101
- <%= text_area_tag("comment", '', :style => "width:450px; height:60px;") %>
102
- <div style="font-size:10px; color:grey; padding-top:10px; font-style:italic;"><%=trl('Note: Please submit your comments in English.')%></div>
103
- </td>
104
- </tr>
105
- </table>
106
-
107
- <%= render :partial => '/tr8n/admin/common/lightbox_buttons' %>
108
- </div>
109
- <% end %>
110
-
111
- </div>
80
+ <%=render :partial => 'header_key_report'%>
81
+ </div>
82
+ <% end %>
83
+ </div>
112
84
 
113
- <% end %>
85
+ <div class="bd">
86
+ <%= form_tag({:action => :submit_report}, {:method => :post, :id => :tr8n_form}) do %>
87
+ <%= hidden_field_tag :source_url, request.env['HTTP_REFERER'] %>
88
+ <%= hidden_field_tag(:object_id, @reported_object.id) %>
89
+ <%= hidden_field_tag(:object_type, @reported_object.class.name) %>
90
+ <div class="content">
91
+ <div class="title">
92
+ <%= trl("Report Details")%>
93
+ </div>
94
+ <table>
95
+ <tr>
96
+ <td>
97
+ <%= trl("Reason:")%>
98
+ </td>
99
+ <td>
100
+ <%= select_tag("reason", tr8n_options_for_select(Tr8n::TranslatorReport.default_reasons_for(@reported_object), '')) %>
101
+ </td>
102
+ </tr>
103
+ <tr>
104
+ <td>
105
+ <%= trl("Comment:")%>
106
+ <div style="color:#ccc;">
107
+ <%= trl("optional")%>
108
+ </div>
109
+ </td>
110
+ <td>
111
+ <%= text_area_tag("comment", '', :style => "width:450px; height:40px;") %>
112
+ <div style="font-size:10px; color:grey; padding-top:10px; font-style:italic;"><%=trl('Note: Please submit your comments in English.')%></div>
113
+ </td>
114
+ </tr>
115
+ </table>
116
+ </div>
117
+ <% end %>
118
+ </div>
119
+ <div class="ft">
120
+ <%= render :partial => '/tr8n/admin/common/lightbox_buttons' %>
121
+ </div>
122
+ </div>
data/config/routes.rb CHANGED
@@ -21,27 +21,27 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- Rails.application.routes.draw do
24
+ Tr8n::Engine.routes.draw do
25
25
  [:awards, :chart, :dashboard, :forum, :glossary, :help, :language_cases,
26
26
  :language, :phrases, :translations, :translator, :home, :login].each do |ctrl|
27
- match "/tr8n/#{ctrl}(/:action)", :controller => "tr8n/#{ctrl}"
27
+ match "#{ctrl}(/:action)", :controller => "#{ctrl}"
28
28
  end
29
-
29
+
30
30
  [:chart, :clientsdk, :forum, :glossary, :language, :translation,
31
31
  :translation_key, :translator, :domain].each do |ctrl|
32
- match "/tr8n/admin/#{ctrl}(/:action)", :controller => "tr8n/admin/#{ctrl}"
32
+ match "admin/#{ctrl}(/:action)", :controller => "admin/#{ctrl}"
33
33
  end
34
34
 
35
35
  [:language, :translation, :translator].each do |ctrl|
36
- match "/tr8n/api/v1/#{ctrl}(/:action)", :controller => "tr8n/api/v1/#{ctrl}"
36
+ match "api/v1/#{ctrl}(/:action)", :controller => "api/v1/#{ctrl}"
37
37
  end
38
-
38
+
39
39
  namespace :tr8n do
40
40
  root :to => "home#index"
41
41
  namespace :admin do
42
42
  root :to => "language#index"
43
43
  end
44
44
  end
45
-
46
- root :to => "tr8n/home#index"
45
+
46
+ root :to => "home#index"
47
47
  end
@@ -22,17 +22,6 @@
22
22
  #++
23
23
 
24
24
  namespace :tr8n do
25
- desc "Sync config and db migrations for tr8n plugin."
26
- task :sync do
27
- system "rsync -ruv vendor/plugins/tr8n/config/tr8n ./config"
28
- system "rsync -ruv vendor/plugins/tr8n/db/migrate ./db"
29
- end
30
-
31
- desc "Sync db migrations for tr8n plugin."
32
- task :sync_db do
33
- system "rsync -ruv vendor/plugins/tr8n/db/migrate ./db"
34
- end
35
-
36
25
  desc "Initializes all of the tables with default data"
37
26
  task :init => :environment do
38
27
  raise "This action is prohibited in this environment" if ['production', 'stage', 'staging'].include?(Rails.env) and env('force') != 'true'
data/lib/tr8n.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), 'tr8n/railtie')
2
+ require File.join(File.dirname(__FILE__), 'tr8n/engine')
3
+
1
4
  module Tr8n
2
- require 'tr8n/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
3
5
  end
@@ -23,27 +23,29 @@
23
23
 
24
24
  require File.expand_path(File.dirname(__FILE__) + "/extender")
25
25
 
26
- class Tr8n::DumperException < StandardError; end
27
- module Tr8n::ActiveDumper
28
- extend Tr8n::Extender
26
+ module Tr8n
27
+ class DumperException < StandardError; end
28
+ module ActiveDumper
29
+ extend Tr8n::Extender
29
30
 
30
- module InstanceMethods
31
- def _dump(ignored)
32
- data = {:attributes => @attributes, :new_record => @new_record}
33
- Marshal.dump(data)
31
+ module InstanceMethods
32
+ def _dump(ignored)
33
+ data = {:attributes => @attributes, :new_record => @new_record}
34
+ Marshal.dump(data)
35
+ end
34
36
  end
35
- end
36
37
 
37
- module ClassMethods
38
- def _load(str)
39
- data = Marshal.load(str)
38
+ module ClassMethods
39
+ def _load(str)
40
+ data = Marshal.load(str)
40
41
 
41
- raise Tr8n::DumperException, 'invalid format' if not data.kind_of?(Hash) or data.keys.to_set != [:attributes, :new_record].to_set
42
+ raise Tr8n::Exception, 'invalid format' if not data.kind_of?(Hash) or data.keys.to_set != [:attributes, :new_record].to_set
42
43
 
43
- instance = new
44
- instance.instance_variable_set(:@attributes, data[:attributes])
45
- instance.instance_variable_set(:@new_record, data[:new_record])
46
- instance
44
+ instance = new
45
+ instance.instance_variable_set(:@attributes, data[:attributes])
46
+ instance.instance_variable_set(:@new_record, data[:new_record])
47
+ instance
48
+ end
47
49
  end
48
50
  end
49
- end
51
+ end
data/lib/tr8n/cache.rb CHANGED
@@ -21,37 +21,39 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- class Tr8n::Cache
25
- def self.cache
26
- @cache ||= begin
27
- if Tr8n::Config.cache_adapter == 'ActiveSupport::Cache'
28
- store_params = [Tr8n::Config.cache_store].flatten
29
- store_params[0] = store_params[0].to_sym
30
- ActiveSupport::Cache.lookup_store(*store_params)
31
- else
32
- eval(Tr8n::Config.cache_adapter)
24
+ module Tr8n
25
+ class Cache
26
+ def self.cache
27
+ @cache ||= begin
28
+ if Tr8n::Config.cache_adapter == 'ActiveSupport::Cache'
29
+ store_params = [Tr8n::Config.cache_store].flatten
30
+ store_params[0] = store_params[0].to_sym
31
+ ActiveSupport::Cache.lookup_store(*store_params)
32
+ else
33
+ eval(Tr8n::Config.cache_adapter)
34
+ end
33
35
  end
34
36
  end
35
- end
36
37
 
37
- def self.enabled?
38
- Tr8n::Config.enable_caching?
39
- end
38
+ def self.enabled?
39
+ Tr8n::Config.enable_caching?
40
+ end
40
41
 
41
- def self.versioned_key(key)
42
- "#{Tr8n::Config.cache_version}_#{key}"
43
- end
42
+ def self.versioned_key(key)
43
+ "#{Tr8n::Config.cache_version}_#{key}"
44
+ end
44
45
 
45
- def self.fetch(key, options = {})
46
- return yield unless enabled?
47
- cache.fetch(versioned_key(key), options) do
48
- yield
46
+ def self.fetch(key, options = {})
47
+ return yield unless enabled?
48
+ cache.fetch(versioned_key(key), options) do
49
+ yield
50
+ end
49
51
  end
50
- end
51
52
 
52
- def self.delete(key, options = nil)
53
- return unless enabled?
54
- cache.delete(versioned_key(key), options)
55
- end
53
+ def self.delete(key, options = nil)
54
+ return unless enabled?
55
+ cache.delete(versioned_key(key), options)
56
+ end
56
57
 
58
+ end
57
59
  end
data/lib/tr8n/config.rb CHANGED
@@ -23,697 +23,699 @@
23
23
 
24
24
  require 'json'
25
25
 
26
- class Tr8n::Config
27
-
28
- #########################################################
29
- # Basic Stuff
30
-
31
- # initializes language, user and translator
32
- # the variables are kept in a thread safe form throughout the request
33
- def self.init(locale, site_current_user)
34
- Thread.current[:tr8n_current_language] = Tr8n::Language.for(locale) || default_language
35
- Thread.current[:tr8n_current_user] = site_current_user
36
- Thread.current[:tr8n_current_translator] = Tr8n::Translator.for(site_current_user)
37
- Thread.current[:tr8n_block_options] = {}
38
- end
26
+ module Tr8n
27
+ class Config
28
+
29
+ #########################################################
30
+ # Basic Stuff
31
+
32
+ # initializes language, user and translator
33
+ # the variables are kept in a thread safe form throughout the request
34
+ def self.init(locale, site_current_user)
35
+ Thread.current[:tr8n_current_language] = Tr8n::Language.for(locale) || default_language
36
+ Thread.current[:tr8n_current_user] = site_current_user
37
+ Thread.current[:tr8n_current_translator] = Tr8n::Translator.for(site_current_user)
38
+ Thread.current[:tr8n_block_options] = {}
39
+ end
39
40
 
40
- def self.current_user
41
- Thread.current[:tr8n_current_user]
42
- end
41
+ def self.current_user
42
+ Thread.current[:tr8n_current_user]
43
+ end
43
44
 
44
- def self.current_language
45
- Thread.current[:tr8n_current_language] ||= default_language
46
- end
45
+ def self.current_language
46
+ Thread.current[:tr8n_current_language] ||= default_language
47
+ end
47
48
 
48
- def self.current_user_is_translator?
49
- Thread.current[:tr8n_current_translator] != nil
50
- end
49
+ def self.current_user_is_translator?
50
+ Thread.current[:tr8n_current_translator] != nil
51
+ end
51
52
 
52
- def self.block_options
53
- Thread.current[:tr8n_block_options] ||= {}
54
- end
53
+ def self.block_options
54
+ Thread.current[:tr8n_block_options] ||= {}
55
+ end
55
56
 
56
- # when this method is called, we create the translator record right away
57
- # and from this point on, will track the user
58
- # this can happen any time user tries to translate something or enables inline translations
59
- def self.current_translator
60
- Thread.current[:tr8n_current_translator] ||= Tr8n::Translator.register
61
- end
57
+ # when this method is called, we create the translator record right away
58
+ # and from this point on, will track the user
59
+ # this can happen any time user tries to translate something or enables inline translations
60
+ def self.current_translator
61
+ Thread.current[:tr8n_current_translator] ||= Tr8n::Translator.register
62
+ end
62
63
 
63
- def self.default_language
64
- return Tr8n::Language.new(:locale => default_locale) if disabled?
65
- @default_language ||= Tr8n::Language.for(default_locale) || Tr8n::Language.new(:locale => default_locale)
66
- end
64
+ def self.default_language
65
+ return Tr8n::Language.new(:locale => default_locale) if disabled?
66
+ @default_language ||= Tr8n::Language.for(default_locale) || Tr8n::Language.new(:locale => default_locale)
67
+ end
67
68
 
68
- def self.reset!
69
- # thread based variables
70
- Thread.current[:tr8n_current_language] = nil
71
- Thread.current[:tr8n_current_user] = nil
72
- Thread.current[:tr8n_current_translator] = nil
73
- Thread.current[:tr8n_block_options] = nil
74
- end
75
-
76
- def self.models
77
- [
78
- Tr8n::LanguageRule, Tr8n::LanguageUser, Tr8n::Language, Tr8n::LanguageMetric,
79
- Tr8n::LanguageCase, Tr8n::LanguageCaseValueMap, Tr8n::LanguageCaseRule,
80
- Tr8n::TranslationKey, Tr8n::TranslationKeySource, Tr8n::TranslationKeyComment, Tr8n::TranslationKeyLock,
81
- Tr8n::TranslationSource, Tr8n::TranslationDomain,
82
- Tr8n::Translation, Tr8n::TranslationVote,
83
- Tr8n::Translator, Tr8n::TranslatorLog, Tr8n::TranslatorMetric,
84
- Tr8n::TranslatorFollowing, Tr8n::TranslatorReport,
85
- Tr8n::LanguageForumTopic, Tr8n::LanguageForumMessage, Tr8n::LanguageForumAbuseReport,
86
- Tr8n::Glossary, Tr8n::IpLocation
87
- ]
88
- end
69
+ def self.reset!
70
+ # thread based variables
71
+ Thread.current[:tr8n_current_language] = nil
72
+ Thread.current[:tr8n_current_user] = nil
73
+ Thread.current[:tr8n_current_translator] = nil
74
+ Thread.current[:tr8n_block_options] = nil
75
+ end
89
76
 
90
- # will clean all tables and initialize default values
91
- # never ever do it on live !!!
92
- def self.reset_all!
93
- puts "Resetting tr8n tables..."
94
- models.each do |cls|
95
- puts ">> Resetting #{cls.name}..."
96
- cls.delete_all
77
+ def self.models
78
+ [
79
+ Tr8n::LanguageRule, Tr8n::LanguageUser, Tr8n::Language, Tr8n::LanguageMetric,
80
+ Tr8n::LanguageCase, Tr8n::LanguageCaseValueMap, Tr8n::LanguageCaseRule,
81
+ Tr8n::TranslationKey, Tr8n::TranslationKeySource, Tr8n::TranslationKeyComment, Tr8n::TranslationKeyLock,
82
+ Tr8n::TranslationSource, Tr8n::TranslationDomain,
83
+ Tr8n::Translation, Tr8n::TranslationVote,
84
+ Tr8n::Translator, Tr8n::TranslatorLog, Tr8n::TranslatorMetric,
85
+ Tr8n::TranslatorFollowing, Tr8n::TranslatorReport,
86
+ Tr8n::LanguageForumTopic, Tr8n::LanguageForumMessage, Tr8n::LanguageForumAbuseReport,
87
+ Tr8n::Glossary, Tr8n::IpLocation
88
+ ]
97
89
  end
98
- puts "Done."
99
90
 
100
- init_default_languages
101
- init_glossary
91
+ # will clean all tables and initialize default values
92
+ # never ever do it on live !!!
93
+ def self.reset_all!
94
+ puts "Resetting tr8n tables..."
95
+ models.each do |cls|
96
+ puts ">> Resetting #{cls.name}..."
97
+ cls.delete_all
98
+ end
99
+ puts "Done."
100
+
101
+ init_default_languages
102
+ init_glossary
102
103
 
103
- puts "Done."
104
- end
104
+ puts "Done."
105
+ end
105
106
 
106
- def self.init_default_languages
107
- puts "Initializing default languages..."
108
- default_languages.each do |locale, info|
109
- puts ">> Initializing #{info[:english_name]}..."
110
- lang = Tr8n::Language.find_or_create(locale, info[:english_name])
111
- info[:right_to_left] = false if info[:right_to_left].nil?
112
- fallback_key = info.delete(:fallback_key)
113
- lang.update_attributes(info)
114
- lang.reset!
115
- end
116
- puts "Created #{default_languages.size} languages."
117
- end
107
+ def self.init_default_languages
108
+ puts "Initializing default languages..."
109
+ default_languages.each do |locale, info|
110
+ puts ">> Initializing #{info[:english_name]}..."
111
+ lang = Tr8n::Language.find_or_create(locale, info[:english_name])
112
+ info[:right_to_left] = false if info[:right_to_left].nil?
113
+ fallback_key = info.delete(:fallback_key)
114
+ lang.update_attributes(info)
115
+ lang.reset!
116
+ end
117
+ puts "Created #{default_languages.size} languages."
118
+ end
118
119
 
119
- def self.init_glossary
120
- puts "Initializing default glossary..."
121
- default_glossary.each do |keyword, description|
122
- Tr8n::Glossary.create(:keyword => keyword, :description => description)
123
- end
124
- end
120
+ def self.init_glossary
121
+ puts "Initializing default glossary..."
122
+ default_glossary.each do |keyword, description|
123
+ Tr8n::Glossary.create(:keyword => keyword, :description => description)
124
+ end
125
+ end
125
126
 
126
- def self.root
127
- Rails.root
128
- end
127
+ def self.root
128
+ Rails.root
129
+ end
129
130
 
130
- def self.env
131
- Rails.env
132
- end
131
+ def self.env
132
+ Rails.env
133
+ end
133
134
 
134
- # json support
135
- def self.load_json(file_path)
136
- json = JSON.parse(File.read("#{root}#{file_path}"))
137
- return HashWithIndifferentAccess.new(json) if json.is_a?(Hash)
138
- map = {"map" => json}
139
- HashWithIndifferentAccess.new(map)[:map]
140
- end
135
+ # json support
136
+ def self.load_json(file_path)
137
+ json = JSON.parse(File.read("#{root}#{file_path}"))
138
+ return HashWithIndifferentAccess.new(json) if json.is_a?(Hash)
139
+ map = {"map" => json}
140
+ HashWithIndifferentAccess.new(map)[:map]
141
+ end
141
142
 
142
- def self.load_yml(file_path, for_env = env)
143
- yml = YAML.load_file("#{root}#{file_path}")
144
- yml = yml[for_env] unless for_env.nil?
145
- HashWithIndifferentAccess.new(yml)
146
- end
143
+ def self.load_yml(file_path, for_env = env)
144
+ yml = YAML.load_file("#{root}#{file_path}")
145
+ yml = yml[for_env] unless for_env.nil?
146
+ HashWithIndifferentAccess.new(yml)
147
+ end
147
148
 
148
- def self.dump_config
149
- save_to_yaml("config.yaml", config)
150
- end
149
+ def self.dump_config
150
+ save_to_yaml("config.yaml", config)
151
+ end
151
152
 
152
- def self.config
153
- @config ||= load_yml("/config/tr8n/config.yml")
154
- end
153
+ def self.config
154
+ @config ||= load_yml("/config/tr8n/config.yml")
155
+ end
155
156
 
156
- def self.default_languages
157
- @default_languages ||= load_yml("/config/tr8n/site/default_languages.yml", nil)
158
- end
157
+ def self.default_languages
158
+ @default_languages ||= load_yml("/config/tr8n/site/default_languages.yml", nil)
159
+ end
159
160
 
160
- def self.default_decoration_tokens
161
- @default_decoration_tokens ||= load_yml("/config/tr8n/tokens/decorations.yml", nil)
162
- end
161
+ def self.default_decoration_tokens
162
+ @default_decoration_tokens ||= load_yml("/config/tr8n/tokens/decorations.yml", nil)
163
+ end
163
164
 
164
- def self.default_data_tokens
165
- @default_data_tokens ||= load_yml("/config/tr8n/tokens/data.yml", nil)
166
- end
165
+ def self.default_data_tokens
166
+ @default_data_tokens ||= load_yml("/config/tr8n/tokens/data.yml", nil)
167
+ end
167
168
 
168
- def self.default_glossary
169
- @default_glossary ||= load_yml("/config/tr8n/site/default_glossary.yml", nil)
170
- end
169
+ def self.default_glossary
170
+ @default_glossary ||= load_yml("/config/tr8n/site/default_glossary.yml", nil)
171
+ end
171
172
 
172
- def self.features
173
- @features ||= begin
174
- defs = load_yml("/config/tr8n/site/features.yml")
175
- feats = []
176
- defs[:enabled_features].each do |key|
177
- defs[key][:key] = key
178
- feats << defs[key]
173
+ def self.features
174
+ @features ||= begin
175
+ defs = load_yml("/config/tr8n/site/features.yml")
176
+ feats = []
177
+ defs[:enabled_features].each do |key|
178
+ defs[key][:key] = key
179
+ feats << defs[key]
180
+ end
181
+ feats
179
182
  end
180
- feats
181
183
  end
182
- end
183
184
 
184
- def self.enabled?
185
- config[:enable_tr8n]
186
- end
185
+ def self.enabled?
186
+ config[:enable_tr8n]
187
+ end
187
188
 
188
- def self.disabled?
189
- not enabled?
190
- end
189
+ def self.disabled?
190
+ not enabled?
191
+ end
191
192
 
192
- def self.enable_software_keyboard?
193
- config[:enable_software_keyboard]
194
- end
193
+ def self.enable_software_keyboard?
194
+ config[:enable_software_keyboard]
195
+ end
195
196
 
196
- def self.enable_keyboard_shortcuts?
197
- config[:enable_keyboard_shortcuts]
198
- end
197
+ def self.enable_keyboard_shortcuts?
198
+ config[:enable_keyboard_shortcuts]
199
+ end
199
200
 
200
- def self.default_shortcuts
201
- @default_shortcuts ||= load_yml("/config/tr8n/site/shortcuts.yml", nil)
202
- end
201
+ def self.default_shortcuts
202
+ @default_shortcuts ||= load_yml("/config/tr8n/site/shortcuts.yml", nil)
203
+ end
203
204
 
204
- def self.enable_inline_translations?
205
- config[:enable_inline_translations]
206
- end
205
+ def self.enable_inline_translations?
206
+ config[:enable_inline_translations]
207
+ end
207
208
 
208
- def self.enable_language_cases?
209
- config[:enable_language_cases]
210
- end
209
+ def self.enable_language_cases?
210
+ config[:enable_language_cases]
211
+ end
211
212
 
212
- def self.enable_key_source_tracking?
213
- config[:enable_key_source_tracking]
214
- end
213
+ def self.enable_key_source_tracking?
214
+ config[:enable_key_source_tracking]
215
+ end
215
216
 
216
- def self.enable_key_caller_tracking?
217
- config[:enable_key_caller_tracking]
218
- end
217
+ def self.enable_key_caller_tracking?
218
+ config[:enable_key_caller_tracking]
219
+ end
219
220
 
220
- def self.enable_google_suggestions?
221
- config[:enable_google_suggestions]
222
- end
221
+ def self.enable_google_suggestions?
222
+ config[:enable_google_suggestions]
223
+ end
223
224
 
224
- def self.enable_glossary_hints?
225
- config[:enable_glossary_hints]
226
- end
225
+ def self.enable_glossary_hints?
226
+ config[:enable_glossary_hints]
227
+ end
227
228
 
228
- def self.enable_dictionary_lookup?
229
- config[:enable_dictionary_lookup]
230
- end
229
+ def self.enable_dictionary_lookup?
230
+ config[:enable_dictionary_lookup]
231
+ end
231
232
 
232
- def self.enable_language_flags?
233
- config[:enable_language_flags]
234
- end
233
+ def self.enable_language_flags?
234
+ config[:enable_language_flags]
235
+ end
235
236
 
236
- def self.enable_language_stats?
237
- config[:enable_language_stats]
238
- end
237
+ def self.enable_language_stats?
238
+ config[:enable_language_stats]
239
+ end
239
240
 
240
- def self.open_registration_mode?
241
- config[:open_registration_mode]
242
- end
241
+ def self.open_registration_mode?
242
+ config[:open_registration_mode]
243
+ end
243
244
 
244
- def self.enable_fallback_languages?
245
- config[:enable_fallback_languages]
246
- end
245
+ def self.enable_fallback_languages?
246
+ config[:enable_fallback_languages]
247
+ end
247
248
 
248
- def self.enable_translator_language?
249
- config[:enable_translator_language]
250
- end
249
+ def self.enable_translator_language?
250
+ config[:enable_translator_language]
251
+ end
251
252
 
252
- def self.enable_admin_translations?
253
- config[:enable_admin_translations]
254
- end
253
+ def self.enable_admin_translations?
254
+ config[:enable_admin_translations]
255
+ end
255
256
 
256
- def self.enable_admin_inline_mode?
257
- config[:enable_admin_inline_mode]
258
- end
257
+ def self.enable_admin_inline_mode?
258
+ config[:enable_admin_inline_mode]
259
+ end
259
260
 
260
- def self.enable_country_tracking?
261
- config[:enable_country_tracking]
262
- end
261
+ def self.enable_country_tracking?
262
+ config[:enable_country_tracking]
263
+ end
263
264
 
264
- #########################################################
265
- # Config Sections
266
- def self.caching
267
- config[:caching]
268
- end
265
+ #########################################################
266
+ # Config Sections
267
+ def self.caching
268
+ config[:caching]
269
+ end
269
270
 
270
- def self.logger
271
- config[:logger]
272
- end
271
+ def self.logger
272
+ config[:logger]
273
+ end
273
274
 
274
- def self.site_info
275
- config[:site_info]
276
- end
275
+ def self.site_info
276
+ config[:site_info]
277
+ end
277
278
 
278
- def self.rules_engine
279
- config[:rules_engine]
280
- end
279
+ def self.rules_engine
280
+ config[:rules_engine]
281
+ end
281
282
 
282
- def self.localization
283
- config[:localization]
284
- end
283
+ def self.localization
284
+ config[:localization]
285
+ end
285
286
 
286
- def self.api
287
- config[:api]
288
- end
287
+ def self.api
288
+ config[:api]
289
+ end
289
290
 
290
- #########################################################
291
- # Caching
292
- def self.enable_caching?
293
- caching[:enabled]
294
- end
291
+ #########################################################
292
+ # Caching
293
+ def self.enable_caching?
294
+ caching[:enabled]
295
+ end
295
296
 
296
- def self.cache_adapter
297
- caching[:adapter]
298
- end
297
+ def self.cache_adapter
298
+ caching[:adapter]
299
+ end
299
300
 
300
- def self.cache_store
301
- caching[:store]
302
- end
301
+ def self.cache_store
302
+ caching[:store]
303
+ end
303
304
 
304
- def self.cache_version
305
- caching[:version]
306
- end
307
- #########################################################
305
+ def self.cache_version
306
+ caching[:version]
307
+ end
308
+ #########################################################
308
309
 
309
- #########################################################
310
- # Logger
311
- def self.enable_logger?
312
- logger[:enabled]
313
- end
310
+ #########################################################
311
+ # Logger
312
+ def self.enable_logger?
313
+ logger[:enabled]
314
+ end
314
315
 
315
- def self.log_path
316
- logger[:log_path]
317
- end
316
+ def self.log_path
317
+ logger[:log_path]
318
+ end
318
319
 
319
- def self.enable_paranoia_mode?
320
- logger[:enable_paranoia_mode]
321
- end
322
- #########################################################
320
+ def self.enable_paranoia_mode?
321
+ logger[:enable_paranoia_mode]
322
+ end
323
+ #########################################################
323
324
 
324
- #########################################################
325
- # Site Info
326
- def self.site_title
327
- site_info[:title]
328
- end
325
+ #########################################################
326
+ # Site Info
327
+ def self.site_title
328
+ site_info[:title]
329
+ end
329
330
 
330
- def self.splash_screen
331
- site_info[:splash_screen]
332
- end
331
+ def self.splash_screen
332
+ site_info[:splash_screen]
333
+ end
333
334
 
334
- def self.default_locale
335
- return block_options[:default_locale] if block_options[:default_locale]
336
- site_info[:default_locale]
337
- end
335
+ def self.default_locale
336
+ return block_options[:default_locale] if block_options[:default_locale]
337
+ site_info[:default_locale]
338
+ end
338
339
 
339
- def self.multiple_base_languages?
340
- 'en-US' == default_locale
341
- end
340
+ def self.multiple_base_languages?
341
+ 'en-US' == default_locale
342
+ end
342
343
 
343
- def self.default_url
344
- site_info[:default_url]
345
- end
344
+ def self.default_url
345
+ site_info[:default_url]
346
+ end
346
347
 
347
- def self.current_locale_method
348
- site_info[:current_locale_method]
349
- end
348
+ def self.current_locale_method
349
+ site_info[:current_locale_method]
350
+ end
350
351
 
351
- def self.enable_tr8n_method
352
- site_info[:enable_tr8n_method]
353
- end
352
+ def self.enable_tr8n_method
353
+ site_info[:enable_tr8n_method]
354
+ end
354
355
 
355
- def self.sitemap_sections
356
- @sitemap_sections ||= load_json(site_info[:sitemap_path])
357
- end
356
+ def self.sitemap_sections
357
+ @sitemap_sections ||= load_json(site_info[:sitemap_path])
358
+ end
358
359
 
359
- def self.effects_library_path
360
- site_info[:effects_library_path]
361
- end
360
+ def self.effects_library_path
361
+ site_info[:effects_library_path]
362
+ end
362
363
 
363
- def self.enable_effects?
364
- site_info[:enable_effects]
365
- end
364
+ def self.enable_effects?
365
+ site_info[:enable_effects]
366
+ end
366
367
 
367
- def self.tr8n_helpers
368
- return [] unless site_info[:tr8n_helpers]
369
- @tr8n_helpers ||= site_info[:tr8n_helpers].collect{|helper| helper.to_sym}
370
- end
368
+ def self.tr8n_helpers
369
+ return [] unless site_info[:tr8n_helpers]
370
+ @tr8n_helpers ||= site_info[:tr8n_helpers].collect{|helper| helper.to_sym}
371
+ end
371
372
 
372
- def self.admin_helpers
373
- return [] unless site_info[:admin_helpers]
374
- @admin_helpers ||= site_info[:admin_helpers].collect{|helper| helper.to_sym}
375
- end
373
+ def self.admin_helpers
374
+ return [] unless site_info[:admin_helpers]
375
+ @admin_helpers ||= site_info[:admin_helpers].collect{|helper| helper.to_sym}
376
+ end
376
377
 
377
- def self.skip_before_filters
378
- return [] unless site_info[:skip_before_filters]
379
- @skip_before_filters ||= site_info[:skip_before_filters].collect{|filter| filter.to_sym}
380
- end
378
+ def self.skip_before_filters
379
+ return [] unless site_info[:skip_before_filters]
380
+ @skip_before_filters ||= site_info[:skip_before_filters].collect{|filter| filter.to_sym}
381
+ end
381
382
 
382
- def self.before_filters
383
- return [] unless site_info[:before_filters]
384
- @before_filters ||= site_info[:before_filters].collect{|filter| filter.to_sym}
385
- end
383
+ def self.before_filters
384
+ return [] unless site_info[:before_filters]
385
+ @before_filters ||= site_info[:before_filters].collect{|filter| filter.to_sym}
386
+ end
386
387
 
387
- def self.after_filters
388
- return [] unless site_info[:after_filters]
389
- @after_filters ||= site_info[:after_filters].collect{|filter| filter.to_sym}
390
- end
388
+ def self.after_filters
389
+ return [] unless site_info[:after_filters]
390
+ @after_filters ||= site_info[:after_filters].collect{|filter| filter.to_sym}
391
+ end
391
392
 
392
- #########################################################
393
- # site user info
394
- # The following methods could be overloaded in the initializer
395
- #########################################################
396
- def self.site_user_info
397
- site_info[:user_info]
398
- end
393
+ #########################################################
394
+ # site user info
395
+ # The following methods could be overloaded in the initializer
396
+ #########################################################
397
+ def self.site_user_info
398
+ site_info[:user_info]
399
+ end
399
400
 
400
- def self.current_user_method
401
- site_user_info[:current_user_method]
402
- end
401
+ def self.current_user_method
402
+ site_user_info[:current_user_method]
403
+ end
403
404
 
404
- def self.site_user_info_enabled?
405
- site_user_info[:enabled].nil? ? true : site_user_info[:enabled]
406
- end
405
+ def self.site_user_info_enabled?
406
+ site_user_info[:enabled].nil? ? true : site_user_info[:enabled]
407
+ end
407
408
 
408
- def self.site_user_info_disabled?
409
- !site_user_info_enabled?
410
- end
409
+ def self.site_user_info_disabled?
410
+ !site_user_info_enabled?
411
+ end
411
412
 
412
- def self.user_class_name
413
- return site_user_info[:class_name] if site_user_info_enabled?
414
- "Tr8n::Translator"
415
- end
413
+ def self.user_class_name
414
+ return site_user_info[:class_name] if site_user_info_enabled?
415
+ "Tr8n::Translator"
416
+ end
416
417
 
417
- def self.user_class
418
- user_class_name.constantize
419
- end
418
+ def self.user_class
419
+ user_class_name.constantize
420
+ end
420
421
 
421
- def self.user_id(user)
422
- begin
423
- user.send(site_user_info[:methods][:id])
424
- rescue Exception => ex
425
- Tr8n::Logger.error("Failed to fetch user id: #{ex.to_s}")
426
- return 0
427
- end
428
- end
422
+ def self.user_id(user)
423
+ begin
424
+ user.send(site_user_info[:methods][:id])
425
+ rescue Exception => ex
426
+ Tr8n::Logger.error("Failed to fetch user id: #{ex.to_s}")
427
+ return 0
428
+ end
429
+ end
429
430
 
430
- def self.user_name(user)
431
- begin
432
- user.send(site_user_info[:methods][:name])
433
- rescue Exception => ex
434
- Tr8n::Logger.error("Failed to fetch #{user_class_name} name: #{ex.to_s}")
435
- return "Unknown user"
436
- end
437
- end
431
+ def self.user_name(user)
432
+ begin
433
+ user.send(site_user_info[:methods][:name])
434
+ rescue Exception => ex
435
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} name: #{ex.to_s}")
436
+ return "Unknown user"
437
+ end
438
+ end
438
439
 
439
- def self.user_gender(user)
440
- begin
441
- user.send(site_user_info[:methods][:gender])
442
- rescue Exception => ex
443
- Tr8n::Logger.error("Failed to fetch #{user_class_name} name: #{ex.to_s}")
444
- return "unknown"
445
- end
446
- end
440
+ def self.user_gender(user)
441
+ begin
442
+ user.send(site_user_info[:methods][:gender])
443
+ rescue Exception => ex
444
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} name: #{ex.to_s}")
445
+ return "unknown"
446
+ end
447
+ end
447
448
 
448
- def self.user_mugshot(user)
449
- begin
450
- user.send(site_user_info[:methods][:mugshot])
451
- rescue Exception => ex
452
- Tr8n::Logger.error("Failed to fetch #{user_class_name} image: #{ex.to_s}")
453
- return silhouette_image
454
- end
455
- end
449
+ def self.user_mugshot(user)
450
+ begin
451
+ user.send(site_user_info[:methods][:mugshot])
452
+ rescue Exception => ex
453
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} image: #{ex.to_s}")
454
+ return silhouette_image
455
+ end
456
+ end
456
457
 
457
- def self.user_link(user)
458
- begin
459
- user.send(site_user_info[:methods][:link])
460
- rescue Exception => ex
461
- Tr8n::Logger.error("Failed to fetch #{user_class_name} link: #{ex.to_s}")
462
- return "/tr8n"
463
- end
464
- end
458
+ def self.user_link(user)
459
+ begin
460
+ user.send(site_user_info[:methods][:link])
461
+ rescue Exception => ex
462
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} link: #{ex.to_s}")
463
+ return "/tr8n"
464
+ end
465
+ end
465
466
 
466
- def self.user_locale(user)
467
- begin
468
- user.send(site_user_info[:methods][:locale])
469
- rescue Exception => ex
470
- Tr8n::Logger.error("Failed to fetch #{user_class_name} locale: #{ex.to_s}")
471
- return default_locale
472
- end
473
- end
467
+ def self.user_locale(user)
468
+ begin
469
+ user.send(site_user_info[:methods][:locale])
470
+ rescue Exception => ex
471
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} locale: #{ex.to_s}")
472
+ return default_locale
473
+ end
474
+ end
474
475
 
475
- def self.admin_user?(user = current_user)
476
- begin
477
- user.send(site_user_info[:methods][:admin])
478
- rescue Exception => ex
479
- Tr8n::Logger.error("Failed to fetch #{user_class_name} admin flag: #{ex.to_s}")
480
- return false
481
- end
482
- end
476
+ def self.admin_user?(user = current_user)
477
+ begin
478
+ user.send(site_user_info[:methods][:admin])
479
+ rescue Exception => ex
480
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} admin flag: #{ex.to_s}")
481
+ return false
482
+ end
483
+ end
483
484
 
484
- def self.current_user_is_admin?
485
- admin_user?
486
- end
485
+ def self.current_user_is_admin?
486
+ admin_user?
487
+ end
487
488
 
488
- def self.guest_user?(user = current_user)
489
- return true unless user
490
- begin
491
- user.send(site_user_info[:methods][:guest])
492
- rescue Exception => ex
493
- Tr8n::Logger.error("Failed to fetch #{user_class_name} guest flag: #{ex.to_s}")
494
- return true
495
- end
496
- end
489
+ def self.guest_user?(user = current_user)
490
+ return true unless user
491
+ begin
492
+ user.send(site_user_info[:methods][:guest])
493
+ rescue Exception => ex
494
+ Tr8n::Logger.error("Failed to fetch #{user_class_name} guest flag: #{ex.to_s}")
495
+ return true
496
+ end
497
+ end
497
498
 
498
- def self.current_user_is_guest?
499
- guest_user?
500
- end
499
+ def self.current_user_is_guest?
500
+ guest_user?
501
+ end
501
502
 
502
- def self.silhouette_image
503
- "/tr8n/images/photo_silhouette.gif"
504
- end
503
+ def self.silhouette_image
504
+ "/assets/tr8n/photo_silhouette.gif"
505
+ end
505
506
 
506
- #########################################################
507
- # rules engine
507
+ #########################################################
508
+ # rules engine
508
509
 
509
- def self.language_rule_classes
510
- @language_rule_classes ||= rules_engine[:language_rule_classes].collect{|lrc| lrc.constantize}
511
- end
510
+ def self.language_rule_classes
511
+ @language_rule_classes ||= rules_engine[:language_rule_classes].collect{|lrc| lrc.constantize}
512
+ end
512
513
 
513
- def self.language_rule_dependencies
514
- @language_rule_dependencies ||= begin
515
- depts = {}
516
- language_rule_classes.each do |cls|
517
- if depts[cls.dependency]
518
- raise Tr8n::Exception.new("The same dependency key #{cls.dependency} has been registered for multiple rules. This is not allowed.")
519
- end
520
- depts[cls.dependency] = cls
514
+ def self.language_rule_dependencies
515
+ @language_rule_dependencies ||= begin
516
+ depts = {}
517
+ language_rule_classes.each do |cls|
518
+ if depts[cls.dependency]
519
+ raise Tr8n::Exception.new("The same dependency key #{cls.dependency} has been registered for multiple rules. This is not allowed.")
520
+ end
521
+ depts[cls.dependency] = cls
522
+ end
523
+ depts
521
524
  end
522
- depts
523
525
  end
524
- end
525
526
 
526
- def self.universal_language_rules
527
- @universal_language_rules ||= begin
528
- urs = []
529
- language_rule_classes.each do |cls|
530
- next unless cls.suffixes.is_a?(String)
531
- urs << cls if cls.suffixes == "*"
527
+ def self.universal_language_rules
528
+ @universal_language_rules ||= begin
529
+ urs = []
530
+ language_rule_classes.each do |cls|
531
+ next unless cls.suffixes.is_a?(String)
532
+ urs << cls if cls.suffixes == "*"
533
+ end
534
+ urs
532
535
  end
533
- urs
534
536
  end
535
- end
536
537
 
537
- def self.language_rule_suffixes
538
- @language_rule_suffixes ||= begin
539
- sfx = {}
540
- language_rule_classes.each do |cls|
541
- next unless cls.suffixes.is_a?(Array)
542
- cls.suffixes.each do |suffix|
543
- if suffix.index("_")
544
- raise Tr8n::Exception.new("Incorrect rule suffix: #{suffix}. Suffix may not have '_' in it.")
538
+ def self.language_rule_suffixes
539
+ @language_rule_suffixes ||= begin
540
+ sfx = {}
541
+ language_rule_classes.each do |cls|
542
+ next unless cls.suffixes.is_a?(Array)
543
+ cls.suffixes.each do |suffix|
544
+ if suffix.index("_")
545
+ raise Tr8n::Exception.new("Incorrect rule suffix: #{suffix}. Suffix may not have '_' in it.")
546
+ end
547
+ sfx[suffix] ||= []
548
+ sfx[suffix] << cls
545
549
  end
546
- sfx[suffix] ||= []
547
- sfx[suffix] << cls
548
550
  end
551
+ sfx
549
552
  end
550
- sfx
551
553
  end
552
- end
553
554
 
554
- def self.language_rules_for_suffix(suffix)
555
- suffix_rules = language_rule_suffixes[suffix] || []
556
- suffix_rules + universal_language_rules
557
- end
555
+ def self.language_rules_for_suffix(suffix)
556
+ suffix_rules = language_rule_suffixes[suffix] || []
557
+ suffix_rules + universal_language_rules
558
+ end
558
559
 
559
- def self.allow_nil_token_values?
560
- rules_engine[:allow_nil_token_values]
561
- end
560
+ def self.allow_nil_token_values?
561
+ rules_engine[:allow_nil_token_values]
562
+ end
562
563
 
563
- def self.data_token_classes
564
- @data_token_classes ||= rules_engine[:data_token_classes].collect{|tc| tc.constantize}
565
- end
564
+ def self.data_token_classes
565
+ @data_token_classes ||= rules_engine[:data_token_classes].collect{|tc| tc.constantize}
566
+ end
566
567
 
567
- def self.decoration_token_classes
568
- @decoration_token_classes ||= rules_engine[:decoration_token_classes].collect{|tc| tc.constantize}
569
- end
568
+ def self.decoration_token_classes
569
+ @decoration_token_classes ||= rules_engine[:decoration_token_classes].collect{|tc| tc.constantize}
570
+ end
570
571
 
571
- def self.viewing_user_token_for(label)
572
- Tr8n::Tokens::DataToken.new(label, "{#{rules_engine[:viewing_user_token]}:gender}")
573
- end
572
+ def self.viewing_user_token_for(label)
573
+ Tr8n::Tokens::DataToken.new(label, "{#{rules_engine[:viewing_user_token]}:gender}")
574
+ end
574
575
 
575
- def self.translation_threshold
576
- rules_engine[:translation_threshold]
577
- end
576
+ def self.translation_threshold
577
+ rules_engine[:translation_threshold]
578
+ end
578
579
 
579
- def self.default_rank_styles
580
- @default_rank_styles ||= begin
581
- styles = {}
582
- rules_engine[:translation_rank_styles].each do |key, value|
583
- range = Range.new(*(key.to_s.split("..").map{|v| v.to_i}))
584
- styles[range] = value
580
+ def self.default_rank_styles
581
+ @default_rank_styles ||= begin
582
+ styles = {}
583
+ rules_engine[:translation_rank_styles].each do |key, value|
584
+ range = Range.new(*(key.to_s.split("..").map{|v| v.to_i}))
585
+ styles[range] = value
586
+ end
587
+ styles
585
588
  end
586
- styles
587
589
  end
588
- end
589
590
 
590
- # get rules for specified locale, or get default language rules
591
- def self.load_default_rules(rules_type, locale = default_locale)
592
- @default_rules ||= {}
593
- @default_rules[rules_type] ||= load_yml("/config/tr8n/rules/default_#{rules_type}_rules.yml", nil)
594
- rules_for_locale = @default_rules[rules_type][locale.to_s]
591
+ # get rules for specified locale, or get default language rules
592
+ def self.load_default_rules(rules_type, locale = default_locale)
593
+ @default_rules ||= {}
594
+ @default_rules[rules_type] ||= load_yml("/config/tr8n/rules/default_#{rules_type}_rules.yml", nil)
595
+ rules_for_locale = @default_rules[rules_type][locale.to_s]
595
596
 
596
- return rules_for_locale.values unless rules_for_locale.nil?
597
- return [] if @default_rules[rules_type][default_locale].nil?
598
- @default_rules[rules_type][default_locale].values
599
- end
597
+ return rules_for_locale.values unless rules_for_locale.nil?
598
+ return [] if @default_rules[rules_type][default_locale].nil?
599
+ @default_rules[rules_type][default_locale].values
600
+ end
600
601
 
601
- def self.default_gender_rules(locale = default_locale)
602
- load_default_rules("gender", locale)
603
- end
602
+ def self.default_gender_rules(locale = default_locale)
603
+ load_default_rules("gender", locale)
604
+ end
604
605
 
605
- def self.default_gender_list_rules(locale = default_locale)
606
- load_default_rules("gender_list", locale)
607
- end
606
+ def self.default_gender_list_rules(locale = default_locale)
607
+ load_default_rules("gender_list", locale)
608
+ end
608
609
 
609
- def self.default_list_rules(locale = default_locale)
610
- load_default_rules("list", locale)
611
- end
610
+ def self.default_list_rules(locale = default_locale)
611
+ load_default_rules("list", locale)
612
+ end
612
613
 
613
- def self.default_numeric_rules(locale = default_locale)
614
- load_default_rules("numeric", locale)
615
- end
614
+ def self.default_numeric_rules(locale = default_locale)
615
+ load_default_rules("numeric", locale)
616
+ end
616
617
 
617
- def self.default_date_rules(locale = default_locale)
618
- load_default_rules("date", locale)
619
- end
618
+ def self.default_date_rules(locale = default_locale)
619
+ load_default_rules("date", locale)
620
+ end
620
621
 
621
- def self.default_value_rules(locale = default_locale)
622
- load_default_rules("value", locale)
623
- end
622
+ def self.default_value_rules(locale = default_locale)
623
+ load_default_rules("value", locale)
624
+ end
624
625
 
625
- def self.default_cases_for(locale = default_locale)
626
- @default_cases ||= load_yml("/config/tr8n/rules/default_cases.yml", nil)
627
- return [] unless @default_cases[locale.to_s]
628
- @default_cases[locale.to_s].values
629
- end
626
+ def self.default_cases_for(locale = default_locale)
627
+ @default_cases ||= load_yml("/config/tr8n/rules/default_cases.yml", nil)
628
+ return [] unless @default_cases[locale.to_s]
629
+ @default_cases[locale.to_s].values
630
+ end
630
631
 
631
- #########################################################
632
- # localization
633
- #########################################################
634
-
635
- def self.strftime_symbol_to_token(symbol)
636
- {
637
- "%a" => "{short_week_day_name}",
638
- "%A" => "{week_day_name}",
639
- "%b" => "{short_month_name}",
640
- "%B" => "{month_name}",
641
- "%p" => "{am_pm}",
642
- "%d" => "{days}",
643
- "%e" => "{day_of_month}",
644
- "%j" => "{year_days}",
645
- "%m" => "{months}",
646
- "%W" => "{week_num}",
647
- "%w" => "{week_days}",
648
- "%y" => "{short_years}",
649
- "%Y" => "{years}",
650
- "%l" => "{trimed_hour}",
651
- "%H" => "{full_hours}",
652
- "%I" => "{short_hours}",
653
- "%M" => "{minutes}",
654
- "%S" => "{seconds}",
655
- "%s" => "{since_epoch}"
656
- }[symbol]
657
- end
632
+ #########################################################
633
+ # localization
634
+ #########################################################
635
+
636
+ def self.strftime_symbol_to_token(symbol)
637
+ {
638
+ "%a" => "{short_week_day_name}",
639
+ "%A" => "{week_day_name}",
640
+ "%b" => "{short_month_name}",
641
+ "%B" => "{month_name}",
642
+ "%p" => "{am_pm}",
643
+ "%d" => "{days}",
644
+ "%e" => "{day_of_month}",
645
+ "%j" => "{year_days}",
646
+ "%m" => "{months}",
647
+ "%W" => "{week_num}",
648
+ "%w" => "{week_days}",
649
+ "%y" => "{short_years}",
650
+ "%Y" => "{years}",
651
+ "%l" => "{trimed_hour}",
652
+ "%H" => "{full_hours}",
653
+ "%I" => "{short_hours}",
654
+ "%M" => "{minutes}",
655
+ "%S" => "{seconds}",
656
+ "%s" => "{since_epoch}"
657
+ }[symbol]
658
+ end
658
659
 
659
- def self.default_day_names
660
- localization[:default_day_names]
661
- end
660
+ def self.default_day_names
661
+ localization[:default_day_names]
662
+ end
662
663
 
663
- def self.default_abbr_day_names
664
- localization[:default_abbr_day_names]
665
- end
664
+ def self.default_abbr_day_names
665
+ localization[:default_abbr_day_names]
666
+ end
666
667
 
667
- def self.default_month_names
668
- localization[:default_month_names]
669
- end
668
+ def self.default_month_names
669
+ localization[:default_month_names]
670
+ end
670
671
 
671
- def self.default_abbr_month_names
672
- localization[:default_abbr_month_names]
673
- end
672
+ def self.default_abbr_month_names
673
+ localization[:default_abbr_month_names]
674
+ end
674
675
 
675
- def self.default_date_formats
676
- localization[:custom_date_formats]
677
- end
676
+ def self.default_date_formats
677
+ localization[:custom_date_formats]
678
+ end
678
679
 
679
- #########################################################
680
- # Translator Roles and Levels
681
- #########################################################
682
- def self.translator_roles
683
- config[:translator_roles]
684
- end
680
+ #########################################################
681
+ # Translator Roles and Levels
682
+ #########################################################
683
+ def self.translator_roles
684
+ config[:translator_roles]
685
+ end
685
686
 
686
- def self.translator_levels
687
- @translator_levels ||= begin
688
- levels = HashWithIndifferentAccess.new
689
- translator_roles.each do |key, val|
690
- levels[val] = key
687
+ def self.translator_levels
688
+ @translator_levels ||= begin
689
+ levels = HashWithIndifferentAccess.new
690
+ translator_roles.each do |key, val|
691
+ levels[val] = key
692
+ end
693
+ levels
691
694
  end
692
- levels
693
695
  end
694
- end
695
696
 
696
- def self.manager_level
697
- 1000
698
- end
697
+ def self.manager_level
698
+ 1000
699
+ end
699
700
 
700
- def self.admin_level
701
- 10000
702
- end
701
+ def self.admin_level
702
+ 10000
703
+ end
703
704
 
704
- def self.default_translation_key_level
705
- config[:default_translation_key_level] || 0
706
- end
705
+ def self.default_translation_key_level
706
+ config[:default_translation_key_level] || 0
707
+ end
707
708
 
708
- #########################################################
709
- # API
710
- #########################################################
711
- def self.enable_api?
712
- api[:enabled]
713
- end
709
+ #########################################################
710
+ # API
711
+ #########################################################
712
+ def self.enable_api?
713
+ api[:enabled]
714
+ end
714
715
 
715
- def self.enable_client_sdk?
716
- config[:enable_client_sdk]
717
- end
716
+ def self.enable_client_sdk?
717
+ config[:enable_client_sdk]
718
+ end
718
719
 
719
- end
720
+ end
721
+ end