tr8n 3.0.5 → 3.1.1

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